请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 2591|回复: 6

这个复活系统有啥问题 应该怎么写呢

[复制链接]
发表于 2010-4-17 09:54:50 | 显示全部楼层 |阅读模式
[jass]//英雄复活
function herorevivenow takes nothing returns nothing
    local integer i=0
    local timer tm=GetExpiredTimer()
    loop
        if tm==udg_HeroRevive then
            call ReviveHeroLoc( udg_Hero, GetRectCenter(gg_rct_SelectHeroAura), true )
            call DestroyTimerDialog(udg_HeroReviveWin)
        endif
        set i=i+1
        exitwhen i>11
    endloop
endfunction
function herorevive takes nothing returns nothing
    local player p=GetTriggerPlayer()
    local unit u =GetTriggerUnit()
    local real r
    local integer i2=0
    local trigger herorevivetrg=CreateTrigger()
    local integer playerid=GetConvertedPlayerId(p)
    if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) then
        set r = I2R(( 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
    endif
    loop
        call TriggerRegisterTimerExpireEvent( herorevivetrg, udg_HeroRevive[i2] )
        set i2=i2+1
        exitwhen i2>11
    endloop
    call TimerDialogDisplayBJ( false, udg_HeroReviveWin[playerid] )
    call TimerDialogDisplayForPlayerBJ( true, udg_HeroReviveWin[playerid], GetTriggerPlayer() )
    call TriggerAddAction(herorevivetrg,function herorevivenow)
    set p=null
    set u=null
endfunction
function invitation_hv takes nothing returns nothing
    local playerunitevent whichEvent=EVENT_PLAYER_UNIT_DEATH
    local trigger hv =CreateTrigger()
    local integer index
    set index = 0
    loop
        call TriggerRegisterPlayerUnitEvent(hv, Player(index), whichEvent, null)
        set index = index + 1
        exitwhen index == 11
    endloop
    call TriggerAddAction(hv,function herorevive)
endfunction
//英雄复活结束
[/jass]

这个复活有啥问题
发表于 2010-4-17 10:13:58 | 显示全部楼层
问题自己测试吧
说出现象才好回答
回复

使用道具 举报

 楼主| 发表于 2010-4-17 10:20:03 | 显示全部楼层
英雄不会复活。。
貌似这么写不行
给个点子吧
回复

使用道具 举报

发表于 2010-4-17 10:30:09 | 显示全部楼层
[jass]function herorevivenow takes nothing returns nothing
    local integer i=0
    local timer tm=GetExpiredTimer()
    loop
        if tm==udg_HeroRevive then
            call ReviveHeroLoc( udg_Hero, GetRectCenter(gg_rct_SelectHeroAura), true )
            call DestroyTimerDialog(udg_HeroReviveWin)
        endif
        set i=i+1
        exitwhen i>11
    endloop
endfunction

local integer playerid=GetConvertedPlayerId(p)
set udg_Hero[playerid]=u
[/jass]
前后使用的玩家索引不一样,设置Hero变量的时候是Player(p)+1,但是复活的时候就是Player(p),索引不同就会复活不同的单位。
回复

使用道具 举报

 楼主| 发表于 2010-4-17 10:40:13 | 显示全部楼层
那么 应该怎么改呢?

----------- 帖子于 10:40 更新 --------- 之前内容发布于 10:35 ------------

忘记了。。索引似乎是从1开始的、
回复

使用道具 举报

发表于 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完全没用。
其他更深的东西我先不说了……哎…………………………
回复

使用道具 举报

 楼主| 发表于 2010-4-18 15:27:36 | 显示全部楼层


谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-3-29 08:48 , Processed in 0.043944 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表