offline
Опыт:
13,006
Активность:
|
Заклинание в JNGP
Прошу помощи у соображающих людей,посмотрите код,я знаю что он ужасен помогите его привести в нормальный вид,работает спелл всё нормально,но хотелось бы научиться в дальнейшем использовать код не такой замудреный, и скажите как сделать его для мультиплеерного использования,у меня есть идея ну она опять глупая,записывая данные в хеш для каждого игрока отдельно
Код:
function Fiery_destruction_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A005' ) ) then
return false
endif
return true
endfunction
function FilterFD takes nothing returns boolean
return IsUnitAlly(GetFilterUnit(),GetOwningPlayer(GetSpellAbilityUnit())) == false and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) >= 0
endfunction
function ActionFD takes nothing returns nothing
local unit u = CreateUnit(Player(LoadInteger(HashInit,8,1)),'h002',LoadReal(HashInit,8,2),LoadR eal(HashInit,8,3),0)
call IssueTargetOrder(u,"firebolt",GetEnumUnit())
call UnitApplyTimedLife(u,'BTFL',1.00)
set u = null
endfunction
function DamageFD takes nothing returns nothing
local real r = 120*BrightSun()*I2R(GetPlayerState(Player(LoadInteger(HashInit,8,1)),PLAYER_STAT E_RESOURCE_LUMBER))/10
call DisplayTextToPlayer(GetLocalPlayer(),0,0,R2S(r))
call UnitDamageTarget(LoadUnitHandle(HashInit,8,4),GetEnumUnit(),r,true,false,ATTACK_ TYPE_HERO,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOKNOWS)
endfunction
function TimerFD takes nothing returns nothing
call ForGroup(LoadGroupHandle(HashInit,8,5),function DamageFD)
call DestroyTimer(LoadTimerHandle(HashInit,8,6))
call DestroyGroup(LoadGroupHandle(HashInit,8,5))
call FlushChildHashtable(HashInit,8)
endfunction
function Fiery_destruction_Actions takes nothing returns nothing
local integer i = GetPlayerId(GetTriggerPlayer())
local boolexpr b = Condition(function FilterFD)
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
local group g = CreateGroup()
local timer t = CreateTimer()
call SaveInteger(HashInit,8,1,i)
call SaveReal(HashInit,8,2,GetUnitX(GetSpellAbilityUnit()))
call SaveReal(HashInit,8,3,GetUnitY(GetSpellAbilityUnit()))
call SaveUnitHandle(HashInit,8,4,GetSpellAbilityUnit())
call GroupEnumUnitsInRange(g,x,y,300,b)
call ForGroup(g,function ActionFD)
call SaveGroupHandle(HashInit,8,5,g)
call TimerStart(t,Distance(LoadUnitHandle(HashInit,8,4),x,y)/1000,false,function TimerFD)
call SaveTimerHandle(HashInit,8,6,t)
call DestroyBoolExpr(b)
set b = null
set t = null
set g = null
endfunction
//===========================================================================
function InitTrig_Fiery_destruction takes nothing returns nothing
local integer i = 0
set gg_trg_Fiery_destruction = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_Fiery_destruction, Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set i = i + 1
exitwhen i == 11
endloop
call TriggerAddCondition( gg_trg_Fiery_destruction, Condition( function Fiery_destruction_Conditions ) )
call TriggerAddAction( gg_trg_Fiery_destruction, function Fiery_destruction_Actions )
endfunction
Отредактировано Mr_KLOP, 18.10.2010 в 15:51.
|