|
发表于 2010-4-17 10:52:16
|
显示全部楼层
帮你改了下,整理了一下代码。
[jass]
function herorevivenow takes nothing returns nothing
local integer i=0
local timer tm=GetExpiredTimer()
loop
if tm==udg_HeroRevive then
call ReviveHero( udg_Hero, GetRectCenterX(gg_rct_SelectHeroAura), GetRectCenterY(gg_rct_SelectHeroAura), true )
call DestroyTimerDialog(udg_HeroReviveWin)
endif
set i=i+1
exitwhen i>11
endloop
set tm = null
endfunction
function herorevive takes nothing returns nothing
local player p=GetTriggerPlayer()
local unit u =GetTriggerUnit()
local real r = 0.0
local integer playerid=GetPlayerId(p)
if IsUnitType(u, UNIT_TYPE_HERO) then
set r = 5 + GetUnitLevel(u) * 2
call TimerStart(udg_HeroRevive[playerid],r,false,function herorevivenow)
call CreateTimerDialogBJ( udg_HeroRevive[playerid], GetUnitName(u) )
set udg_Hero[playerid]=u
call TimerDialogDisplayBJ( false, udg_HeroReviveWin[playerid] )
call TimerDialogDisplayForPlayerBJ( true, udg_HeroReviveWin[playerid], p )
endif
set p=null
set u=null
endfunction
function invitation_hv takes nothing returns nothing
local trigger hv =CreateTrigger()
local trigger herorevivetrg = CreateTrigger()
local integer index = 0
loop
call TriggerRegisterPlayerUnitEvent(hv, Player(index), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterTimerExpireEvent( herorevivetrg, udg_HeroRevive[index] )
set index = index + 1
exitwhen index > 11
endloop
call TriggerAddAction(hv,function herorevive)
call TriggerAddAction(herorevivetrg,function herorevivenow)
set hv = null
set herorevivetrg = null
endfunction
[/jass]
注意:
在call invitation_hv()之前,需要把所有需要创建的timer全部创建好。
所有数据全部按照Player0-11来算,所以你设置变量的时候需要注意一下。
其他:
1.局部变量需要清空……
2.exitwhen X == 11和exitwhen X > 11明显不一样,写loop的时候要规范自己的风格,否则很容易弄乱。
3.GetRectCenter会创建点,用那个就需要清空。
4.我不知道为什么应该是属于初始化时创建的herorevivetrg会在单位死后创建……死一次就创建12个……
5.最下面的whichEvent完全没用。
其他更深的东西我先不说了……哎………………………… |
|