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

用J写了个动作,不知道怎么一运行就被弹出游戏

[复制链接]
发表于 2008-2-4 22:17:41 | 显示全部楼层 |阅读模式
[codes=jass]
function Trig_smfj_2_C takes nothing returns boolean
    return GetBooleanAnd( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == false ),( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true ))
endfunction

function Trig_smfj_2_Do takes nothing returns nothing
    call UnitDamageTarget( GetTriggerUnit(), GetTriggerUnit(), 80, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_DIVINE, WEAPON_TYPE_WHOKNOWS )
endfunction

function Trig____________________001_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocMatching(250.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_smfj_2_C)), function Trig_smfj_2_Do )
endfunction

function Trig_smfj_2_Actions takes nothing returns nothing
   local unit Tunit=GetTriggerUnit()
   local real X=GetUnitX(Tunit)
   local real Y=GetUnitY(Tunit)
   local location Tpoint=GetUnitLoc(Tunit)
   local integer Lv=GetUnitAbilityLevel(Tunit,'A02L')
   local player Tplayer=GetOwningPlayer(Tunit)
   local real damage=GetEventDamage()
   local real will=700.00-(I2R(Lv)*100.00)
   local integer do=1
   local unit Sunit
   set udg_Damage[0]=udg_Damage[0]+damage
   if(udg_Damage[0]>will)then
        loop
            exitwhen do>R2I(udg_Damage[0]/will)
            set Sunit=CreateUnit(Tplayer,'e00G',X,Y,0)
            call UnitApplyTimedLife(Sunit,'BHwe',1.50)
            call ForGroupBJ( GetUnitsInRangeOfLocMatching(250.00, Tpoint, Condition(function Trig_smfj_2_C)), function Trig_smfj_2_Do )
            set do=do+1
        endloop
        set udg_Damage[0]=0
    endif
    call RemoveLocation(Tpoint)
endfunction
//===========================================================================
function InitTrig_smfj_2 takes nothing returns nothing
    set gg_trg_smfj_2 = CreateTrigger(  )
    call TriggerAddAction( gg_trg_smfj_2, function Trig_smfj_2_Actions )
endfunction
[/codes]
是一个被动反击技能 每受到多少伤害的时候就对周围敌人造成一次伤害 4级的时候一减掉300血就被弹出游戏 不知道怎么的


                           
发表于 2008-2-4 22:33:58 | 显示全部楼层
事件是单位接受伤害吧
满足条件时,
call UnitDamageTarget( GetTriggerUnit(), GetTriggerUnit(), 80, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_DIVINE, WEAPON_TYPE_WHOKNOWS )
这句话是触发单位对触发单位造成伤害,这样会不断重复触发,造成跳出的

这句话的对象是不是应该是GetEnumUnit()呢??
回复

使用道具 举报

 楼主| 发表于 2008-2-4 22:44:09 | 显示全部楼层
晕 我也想过这问题 但是我想只有80点伤害 怎么能出死循环 没想到还真是这个问题
回复

使用道具 举报

发表于 2008-2-4 22:47:03 | 显示全部楼层
引用第2楼hunluan89于2008-02-04 22:44发表的  :
晕 我也想过这问题 但是我想只有80点伤害 怎么能出死循环 没想到还真是这个问题

我觉得这个可能和栈的工作原理比较接近,就是执行到这句就先执行新的触发了。
你把那句变量清0的语句提前试试看呢~~
回复

使用道具 举报

 楼主| 发表于 2008-2-4 23:04:46 | 显示全部楼层
全局变量跟栈也有关系?
回复

使用道具 举报

发表于 2008-2-4 23:05:20 | 显示全部楼层
引用第4楼hunluan89于2008-02-04 23:04发表的  :
全局变量跟栈也有关系?

我是说触发的运行………………
回复

使用道具 举报

发表于 2008-2-5 01:30:24 | 显示全部楼层
在执行80伤害时,set udg_Damage[0]=0并米有被执行...
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 03:54 , Processed in 0.164462 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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