Привет, недавно начал изучать JASS. Для практики решил попробовать сделать splinter blast( 2 скилл виверны из доты). Вроде получилось, но после нескольких использований игра начинает тормозить, а количество осколков постоянно увеличивается. Как я понял, у меня не удаляются dummy. Делал по гайду xgm.guru/p/wc3/spellmaker-stomp-spell-creation. Вот код:
function Trig_frostnova_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A002'
endfunction
function sham_filter takes nothing returns boolean
return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit()) > 0.405 and not IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING)
endfunction
function Trig_frostnova_Func001A takes nothing returns nothing
local unit sham = GetSpellAbilityUnit()
local unit shamtarget = GetSpellTargetUnit()
local real shamX = GetUnitX(shamtarget)
local real shamY = GetUnitY(shamtarget)
local boolexpr b = Condition(function sham_filter)
local unit shamdummy
local group shamG = CreateGroup()
local unit shamf
call GroupEnumUnitsInRange(shamG, shamX, shamY, 300, b)
loop
set shamf =FirstOfGroup(shamG)
exitwhen shamf == null
set shamdummy=CreateUnit(GetOwningPlayer(sham),'h000',shamX,shamY,0.)
call UnitApplyTimedLife(shamdummy,'BTLF',0.6)
call UnitAddAbility(shamdummy,'A003')
call IssueTargetOrder(shamdummy,"thunderbolt",shamf)
call GroupRemoveUnit(shamG, shamf)
endloop
set sham = null
set shamtarget = null
call DestroyBoolExpr(b)
set b = null
set shamdummy = null
set shamf = null
call DestroyGroup(shamG)
set shamG = null
endfunction
function Trig_frostnova_Actions takes nothing returns nothing
call ForGroupBJ( GetUnitsInRangeOfLocAll(600.00, GetUnitLoc(GetTriggerUnit())), function Trig_frostnova_Func001A )
endfunction
===========================================================================
function InitTrig_frostnova takes nothing returns nothing
set gg_trg_frostnova = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_frostnova, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_frostnova, Condition( function Trig_frostnova_Conditions ) )
call TriggerAddAction( gg_trg_frostnova, function Trig_frostnova_Actions )
endfunction

Принятый ответ

Попробуй сменить
call TriggerAddAction( gg_trg_frostnova, function Trig_frostnova_Actions )
На
call TriggerAddAction( gg_trg_frostnova, function Trig_frostnova_Func001A )
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
13
6 лет назад
1
Попробуй сменить
call TriggerAddAction( gg_trg_frostnova, function Trig_frostnova_Actions )
На
call TriggerAddAction( gg_trg_frostnova, function Trig_frostnova_Func001A )
Принятый ответ
1
32
6 лет назад
1
Bj и локейшены не используйте, да и тут далеко до Splinter blast из доты фрога.
Я бы сделал основной снаряд из аксид бомбы, побочные из ледяных стрел. При касте проверяет есть ли у юнита "SpellNegation" талисман защиты или аналоги, если все норм то создаем триггер который ждет пока цель умрет, пока цель получит ровно 0.00 ед. урона от источника заклинания, а так же есть ли при всем этом бафф аксид бомбы, если юнит сдох - триггер отключается и утилизируется, если юнит получил урон, урона 0 и есть бафф - ну делаем дейсвтия спелла и закрываем триггер, так же ставим таймер на примерное время за которое снаряд долетит до цели + пару сек, если время вышло а юнит так и не получил урон с баффом - тоже утилизируем триггер.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.