Сейчас 22:17:32 Четверг, 28 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] PolarProjectionBJ
[SeKtOR]Дата: Пятница, 13 Июля 2012, 12:04:19 | Сообщение # 1
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Почитав статьи про jass, что это такое и с чем едят я понял, что локальные переменные крутая вещь, решил попробывать написать спелл на локальных переменных(вышло ^_^). Начал убирать утечки, вот и произошол облом...
Code

function Trig_Goblin_Rocket_Spell_Conditions takes nothing returns boolean
     if ( not ( GetSpellAbilityId() == 'A00N' ) ) then
         return false
     endif
     return true
endfunction

function Trig_Goblin_Rocket_Spell_Actions takes nothing returns nothing
     local location p1
     local location p2
     local location p3
     local unit caster
     local unit dummy
     set p1 = GetUnitLoc(GetSpellAbilityUnit())
     set p2 = GetUnitLoc(GetSpellTargetUnit())
     set caster = GetSpellAbilityUnit()
     call CreateNUnitsAtLoc( 1, 'e002', GetOwningPlayer(GetSpellAbilityUnit()), p1, bj_UNIT_FACING )
     set dummy = GetLastCreatedUnit()
     call MoveDummyToTarget(caster, dummy,  40., true)
     call PolledWait( ( DistanceBetweenPoints(p1, p2) / 900.00 ) )
     set bj_forLoopAIndex = 1
     set bj_forLoopAIndexEnd = 36
     loop
         exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
         set p3 = PolarProjectionBJ(p2, 400.00, ( 10.00 * I2R(GetForLoopIndexA()))
         call AddSpecialEffectLocBJ( p3 , "Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl" )
         call DestroyEffectBJ( GetLastCreatedEffectBJ() )
         call RemoveLocation(p3)
         set bj_forLoopAIndex = bj_forLoopAIndex + 1
     endloop
     set bj_forLoopAIndex = 1
     set bj_forLoopAIndexEnd = 36
     loop
         exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
         set p3 = PolarProjectionBJ(p2, 300.00, ( 10.00 * I2R(GetForLoopIndexA()))
         call AddSpecialEffectLocBJ( p3 , "Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl" )
         call DestroyEffectBJ( GetLastCreatedEffectBJ() )
         call RemoveLocation(p3)
         set bj_forLoopAIndex = bj_forLoopAIndex + 1
     endloop
     set bj_forLoopAIndex = 1
     set bj_forLoopAIndexEnd = 36
     loop
         exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
         set p3 = PolarProjectionBJ(p2, 200.00, ( 10.00 * I2R(GetForLoopIndexA()))
         call AddSpecialEffectLocBJ(p3, "Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl" )
         call DestroyEffectBJ( GetLastCreatedEffectBJ() )
         call RemoveLocation(p3)
         set bj_forLoopAIndex = bj_forLoopAIndex + 1
     endloop
     set bj_forLoopAIndex = 1
     set bj_forLoopAIndexEnd = 36
     loop
         exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
         set p3 = PolarProjectionBJ(p2, 100.00, ( 10.00 * I2R(GetForLoopIndexA()))
         call AddSpecialEffectLocBJ( p3 , "Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl" )
         call DestroyEffectBJ( GetLastCreatedEffectBJ() )
         call RemoveLocation(p3)
         set bj_forLoopAIndex = bj_forLoopAIndex + 1
     endloop
     call UnitDamagePointLoc( GetSpellAbilityUnit(), 0, 400.00, p2, ( ( 0.25 * I2R(GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetSpellAbilityUnit())) ) * I2R(GetHeroStatBJ(bj_HEROSTAT_INT, udg_Hero[GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))], false)) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
     call RemoveLocation(p1)
     call RemoveLocation(p2)
     set caster = null
     set dummy = null
endfunction

//===========================================================================
function InitTrig_Goblin_Rocket_Spell takes nothing returns nothing
     set gg_trg_Goblin_Rocket_Spell = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Goblin_Rocket_Spell, EVENT_PLAYER_UNIT_SPELL_EFFECT )
     call TriggerAddCondition( gg_trg_Goblin_Rocket_Spell, Condition( function Trig_Goblin_Rocket_Spell_Conditions ) )
     call TriggerAddAction( gg_trg_Goblin_Rocket_Spell, function Trig_Goblin_Rocket_Spell_Actions )
endfunction

Ошибки в строчках:
Code
set p3 = PolarProjectionBJ(p2, 400.00, ( 10.00 * I2R(GetForLoopIndexA()))
set p3 = PolarProjectionBJ(p2, 300.00, ( 10.00 * I2R(GetForLoopIndexA()))
set p3 = PolarProjectionBJ(p2, 200.00, ( 10.00 * I2R(GetForLoopIndexA()))
set p3 = PolarProjectionBJ(p2, 100.00, ( 10.00 * I2R(GetForLoopIndexA()))

Добавлено (13 Июль 2012, 12:04:19)
---------------------------------------------
Функция call MoveDummyToTarget(caster, dummy, 40., true) из наработки Ty3uk(хорошо помогает :trollface:)


 

sumertДата: Пятница, 13 Июля 2012, 12:22:49 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 2330
Награды: 2
Репутация: 1094
Блокировки:
А что тебе надобно, старче? Кстати, ошибки, которые ты сам же нашел, это лишь малая часть из всех ошибок, допущенных в коде.
 

[SeKtOR]Дата: Пятница, 13 Июля 2012, 12:30:03 | Сообщение # 3
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Я знаю, что его ещё надо оптмизировать. Но я прощу обьяснить мне как исправить эту ошибку...

 

SirNikolasДата: Пятница, 13 Июля 2012, 12:51:00 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Отсутствует закрывающаяся скобка. Между прочим, JNGP подсвечивает парные черным цветом, а непарные - красным.

 

[DUОS]Дата: Пятница, 13 Июля 2012, 13:02:48 | Сообщение # 5
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
SirNikolas,
Проблема кроется глубже - не надо вообще точки использовать, если ты Z не определяешь.
Оптимизация выглядит так:
Code
function Trig_Goblin_Rocket_Spell_Conditions takes nothing returns boolean
      return GetSpellAbilityId() == 'A00N'
endfunction

function Trig_Goblin_Rocket_Spell_Timer takes nothing returns nothing
     local timer t = GetExpiredTimer()
     local integer id = GetHandleId(t)
     local unit u = LoadUnitHandle(udg_H,id,0)
     local unit st = LoadUnitHandle(udg_H,id,1)
     local unit dummy = LoadUnitHandle(udg_H,id,2)
     local real ux = LoadReal(udg_H,id,3)
     local real uy = LoadReal(udg_H,id,4)
     local real stx = LoadReal(udg_H,id,5)
     local real sty = LoadReal(udg_H,id,6)
     local real a = LoadReal(udg_H,id,7)
     local real dx = GetWidgetX(dummy)
     local real dy = GetWidgetY(dummy)
     local real dbp = SquareRoot((dx-stx)*(dx-stx)+(dy-sty)*(dy-sty))
     local real x = dx + 40. * Cos(a)
     local real y = dy + 40. * Sin(a)
     local integer i = 1
     local unit gu
     local real dmg = .25 * GetUnitAbilityLevel(u,'A00N') * GetHeroInt(udg_Hero[GetPlayerId(GetOwningPlayer(u))-1],false)

     if dbp <= 40. then
         loop
             exitwhen i > 36
             set a = 10. * i
             set x = stx + 400. * Cos(a*.0174532)
             set y = sty + 400. * Sin(a*.0174532)
             call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl",x,y))
             set x = stx + 300. * Cos(a*.0174532)
             set y = sty + 300. * Sin(a*.0174532)
             call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl",x,y))
             set x = stx + 200. * Cos(a*.0174532)
             set y = sty + 200. * Sin(a*.0174532)
             call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl",x,y))
             set x = stx + 100. * Cos(a*.0174532)
             set y = sty + 100. * Sin(a*.0174532)
             call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SteamTank\\SteamTankImpact.mdl",x,y))
             set i = i + 1
         endloop
          
         call GroupEnumUnitsInRange(udg_TempGroup,stx,sty,400.,null)
          
         loop
             set gu = FirstOfGroup(udg_TempGroup)
             exitwhen gu == null
             // if (фильтр для дамага) then
                 call UnitDamageTarget(u,gu,dmg,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
             // endif
             call GroupRemoveUnit(udg_TempGroup,gu)
         endloop
      
         call FlushChildHashtable(udg_H,id)
         call PauseTimer(t)
         call DestroyTimer(t)
     else
         call SetUnitX(dummy,x)
         call SetUnitY(dummy,y)
     endif
      
     set u = null
     set st = null
     set t = null
     set dummy = null
endfunction

function Trig_Goblin_Rocket_Spell_Actions takes nothing returns nothing
     local unit u = GetTriggerUnit()
     local unit st = GetSpellTargetUnit()
     local real ux = GetWidgetX(u)
     local real uy = GetWidgetY(u)
     local real stx = GetSpellTargetX()
     local real sty = GetSpellTargetY()
     local unit dummy = CreateUnit(GetOwningPlayer(u),'e002',ux,uy,0.)
     local real a = Atan2(sty-uy,stx-ux)
     local timer t = CreateTimer()
     local integer id = GetHandleId(t)
      
     call SaveAgentHandle(udg_H,id,0,u)
     call SaveAgentHandle(udg_H,id,1,st)
     call SaveAgentHandle(udg_H,id,2,dummy)
     call SaveReal(udg_H,id,3,ux)
     call SaveReal(udg_H,id,4,uy)
     call SaveReal(udg_H,id,5,stx)
     call SaveReal(udg_H,id,6,sty)
     call SaveReal(udg_H,id,7,a)
      
     call TimerStart(t,.04,true,function Trig_Goblin_Rocket_Spell_Timer)
      
     set u = null
     set st = null
     set t = null
     set dummy = null
endfunction

//===========================================================================
function InitTrig_Goblin_Rocket_Spell takes nothing returns nothing
     set gg_trg_Goblin_Rocket_Spell = CreateTrigger()
     call TriggerRegisterAnyUnitEventBJ(gg_trg_Goblin_Rocket_Spell,EVENT_PLAYER_UNIT_SPELL_EFFECT)
     call TriggerAddCondition(gg_trg_Goblin_Rocket_Spell,Condition(function Trig_Goblin_Rocket_Spell_Conditions))
     call TriggerAddAction(gg_trg_Goblin_Rocket_Spell,function Trig_Goblin_Rocket_Spell_Actions)
endfunction


Понадобятся проинициализированная переменная H типа Хэш-таблица и переменная TempGroup типа Отряд.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)


Сообщение отредактировал [DUОS] - Пятница, 13 Июля 2012, 13:21:04
 

[SeKtOR]Дата: Пятница, 13 Июля 2012, 13:31:28 | Сообщение # 6
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Ох ******, какой я нуб :(

Добавлено (13 Июль 2012, 13:31:28)
---------------------------------------------
Но спасибо, что разьяснил с + у меня беда :)


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz