JugHead
offline
Опыт:
1,612Активность: |
не удаляет юнита.
Создал скилл, в котором ставится ловушка, если на нее наступит враждебный юнит, создается дамми который кидает на него корни и наносится дамаг.
Если в течении 10 секунд на ловушку никто не наступил она должна уничтожаться, собственно чего не происходит ;( ловушка занесена в переменную u . код: ((код jass
globals
unit IT_c endglobals function IceTrap_Cond takes nothing returns boolean
return GetSpellAbilityId() == 'A00H' endfunction function IceTrap_Filter takes nothing returns boolean
return IsPlayerEnemy(GetOwningPlayer(IT_c) ,GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit())>=0.405 and not IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) and not IsUnitType(GetFilterUnit(),UNIT_TYPE_MAGIC_IMMUNE)and not IsUnitType(GetFilterUnit(),UNIT_TYPE_FLYING) endfunction function IceTrap_Group takes nothing returns nothing
local timer t = GetExpiredTimer() local integer int = GetHandleId(t) local unit c = LoadUnitHandle(udg_h, int, 50) local unit u = LoadUnitHandle(udg_h, int, 51) local integer lvl = LoadInteger(udg_h, int, 52) local integer num = LoadInteger(udg_h, int, 53) local unit f = GetEnumUnit() local real x = GetUnitX(u) local real y = GetUnitY(u) local real x2 = GetUnitX(f) local real y2 = GetUnitY(f) local real dist = SquareRoot((x2-x)*(x2-x)+(y2-y)*(y2-y)) local unit d if dist <= 150 and num < 250 then call RemoveUnit(u) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl" , x, y)) set d = CreateUnit(GetOwningPlayer(c), 'h007', x, y, 0) call SaveUnitHandle(udg_h, int, 55, f) call UnitApplyTimedLife(d, 'BTLF', 5.0) call ShowUnitHide(d) call SetUnitAbilityLevel(d, 'A00l', lvl) call IssueTargetOrder(d, "entanglingroots", f) endif set f = null set c = null set t = null set u = null set d = null endfunction function IceTrap_timer takes nothing returns nothing
local timer t = GetExpiredTimer() local integer int = GetHandleId(t) local unit c = LoadUnitHandle(udg_h, int, 50) local unit u = LoadUnitHandle(udg_h, int, 51) local integer lvl = LoadInteger(udg_h, int, 52) local integer num = LoadInteger(udg_h, int, 53) local real x = GetUnitX(u) local real y = GetUnitY(u) local group g = CreateGroup() local boolexpr b = Condition(function IceTrap_Filter) local unit f set num = num +1 set IT_c = c call GroupEnumUnitsInRange(g, x, y, 500, b) if num != 250 then call ForGroup(g, function IceTrap_Group) call SaveInteger(udg_h,int,53,num) call DestroyBoolExpr(b) set b = null endif if num == 50+25*lvl then call PauseTimer(t) set f = LoadUnitHandle(udg_h, int, 55) call DestroyEffect(AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", f, "origin")) call UnitDamageTarget(c, f, 100*lvl, false, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS) call FlushChildHashtable( udg_h, int ) call DestroyTimer(t) elseif num == 250 then call RemoveUnit(u) call FlushChildHashtable( udg_h, int ) call DestroyTimer(t) endif call DestroyGroup(g) set f = null set t = null set c = null set u = null set g = null endfunction function IceTrap_Actions takes nothing returns nothing
local timer t = CreateTimer() local integer int = GetHandleId(t) local unit c = GetSpellAbilityUnit() local unit u = CreateUnit(GetOwningPlayer(c), 'h006', GetUnitX(c), GetUnitY(c), 0) local integer lvl = GetUnitAbilityLevel(c, 'A00H') call SaveUnitHandle(udg_h, int, 50, c) call SaveUnitHandle(udg_h, int, 51, u) call SaveInteger(udg_h, int, 52, lvl) call SaveInteger(udg_h, int, 53, 0) call TimerStart(t, 0.04, true, function IceTrap_timer ) set u = null set t = null set c = null endfunction function InitTrig_IceTrap takes nothing returns nothing
set gg_trg_IceTrap = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ(gg_trg_IceTrap, EVENT_PLAYER_UNIT_SPELL_CAST) call TriggerAddCondition(gg_trg_IceTrap, Condition(function IceTrap_Cond)) call TriggerAddAction(gg_trg_IceTrap, function IceTrap_Actions) endfunction )) Отредактировано JugHead, 13.05.2012 в 16:28. |
13.05.2012, 16:22 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,338Активность: |
JugHead, хеш инициализирован? |
13.05.2012, 16:51 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
prog
offline
Опыт:
32,865Активность: |
JugHead, используй время жизни или отрицательную регенерацию, меньше нагрузка будет. Также я бы советовал уйти от такого извращенного способа определения попадания в ловушку - каждые 0.04 секунды пикать всех в радиусе 500 это немного накладно, лучше уж динамически создавать и удалять триггер под каждую ловушку, отслеживающий вход юнита в радиус. |
13.05.2012, 17:38 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JugHead
offline
Опыт:
1,612Активность: |
Отредактировано JugHead, 13.05.2012 в 18:58. |
13.05.2012, 18:50 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,117Активность: |
можно вообще отлавливать без интервалов. Дай ловушке атаку, обычную атаку с уроном 1-1, перезарядкой большой, и триггер - юнит атакован - атакующий это ловушка - взорвать ловушку |
13.05.2012, 19:01 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JugHead
offline
Опыт:
1,612Активность: |
Ладно всем спасибо, разобрался) тему можно закрывать. |
13.05.2012, 19:07 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|