Добавлен Гуванч
ребята вот код но она не работает дамми все создается но не движется что я не так делаю?
вот код
вот код
library FireClaw initializer init
globals
private hashtable Hash = InitHashtable()
private integer DummyID = 'h001'
private integer SpellID = 'A003'
private attacktype Attack = ATTACK_TYPE_MAGIC
private damagetype Damage = DAMAGE_TYPE_UNIVERSAL
private string EffectName = "Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl"
endglobals
private struct SpellStruct
unit Caster
unit Dummy
unit TempUnit
group Group = CreateGroup()
group EndGroup = CreateGroup()
real Distance
real Speed
real Damage
real Angle
method DestroyStruct takes nothing returns nothing
call KillUnit(this.Dummy)
call DestroyGroup(this.Group)
call DestroyGroup(this.EndGroup)
set this.Caster = null
set this.Dummy = null
set this.TempUnit = null
set this.Group = null
set this.EndGroup = null
call this.destroy()
endmethod
endstruct
private function DummyMove takes nothing returns nothing
local timer T = GetExpiredTimer()
local SpellStruct s = LoadInteger(Hash,GetHandleId(T),StringHash("Strcut"))
local real x
local real y
if s.Distance > 50 then
set x = GetUnitX(s.Dummy) + s.Speed * Cos(s.Angle * bj_DEGTORAD)
set y = GetUnitY(s.Dummy) + s.Speed * Sin(s.Angle * bj_DEGTORAD)
call SetUnitX(s.Dummy,x)
call SetUnitY(s.Dummy,y)
set s.Distance = s.Distance - s.Speed
call GroupEnumUnitsInRange(s.Group,x,y,150,null)
loop
set s.TempUnit = FirstOfGroup(s.Group)
exitwhen s.TempUnit == null
if GetWidgetLife(s.TempUnit) > 0.405 and IsUnitEnemy(s.TempUnit,GetOwningPlayer(s.Caster)) and IsUnitInGroup(s.TempUnit,s.EndGroup) then
call UnitDamageTarget(s.Caster,s.TempUnit,s.Damage,false,false,Attack,Damage,null)
endif
call GroupRemoveUnit(s.Group,s.TempUnit)
endloop
else
call PauseTimer(T)
call FlushChildHashtable(Hash,GetHandleId(T))
call DestroyTimer(T)
call s.DestroyStruct()
endif
set T = null
endfunction
private function SpellVariables takes nothing returns nothing
local timer T = CreateTimer()
local SpellStruct s = SpellStruct.create()
set s.Caster = GetTriggerUnit()
set s.Distance = 900
set s.Speed = 30
set s.Damage = GetHeroStr(s.Caster,true) * 10
set s.Angle = bj_RADTODEG * Atan2(GetSpellTargetY() - GetUnitY(s.Caster), GetSpellTargetX() - GetUnitX(s.Caster))
set s.Dummy = CreateUnit(GetOwningPlayer(s.Caster),DummyID,GetUnitX(s.Caster),GetUnitY(s.Caster),s.Angle)
call BJDebugMsg(R2S(s.Distance))
call SaveInteger(Hash,GetHandleId(T),StringHash("Struct"),s)
call TimerStart(T,0.02,true,function DummyMove)
set T = null
endfunction
private function FireClawFilter takes nothing returns boolean
if GetSpellAbilityId() == SpellID then
call SpellVariables()
endif
return false
endfunction
//===========================================================================
private function init takes nothing returns nothing
set gg_trg_FireClaw = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_FireClaw, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_FireClaw, Condition( function FireClawFilter) )
endfunction
endlibrary
вот фото того что пишет
Принятый ответ
дебагом научись пользоваться, у тебя ошибка в слове
local SpellStruct s = LoadInteger(Hash,GetHandleId(T),StringHash("Strcut"))
call SaveInteger(Hash,GetHandleId(T),StringHash("Struct"),s)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. quq_CCCP
Пример кода:
Ред. rsfghd
а впрочем да, для всех похожих абилок достаточно 1 триггера с ифами на то, какая способность триггернула, ну и под неё выставлять все параметры