找回密码
 点一下
查看: 2398|回复: 15

这个Jass行得通吗?

[复制链接]
发表于 2007-12-15 12:39:44 | 显示全部楼层 |阅读模式
自己做了这么个Jass,因为高亮处原先在触发编辑器里是不能采取变量的。(T里的事件:一个单位是在多少范围内[A unit is in range])于是我就转换为了Jass,继而把高亮处换为了变量。
问题是:这个Jass行得通吗?
第一次作Jass...
T: MonSlaughterP1

function Trig_MonSlaughterP1_Func005C takes nothing returns boolean
    if ( ( GetOwningPlayer(GetTriggerUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) ) ) then
        return true
    endif
    if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
        return true
    endif
    if ( not ( GetPlayerController(Player(0)) == MAP_CONTROL_COMPUTER ) ) then
        return false
    endif
    return false
endfunction

function Trig_MonSlaughterP1_Conditions takes nothing returns boolean
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) >= 100.00 ) ) then
        return false
    endif
    if ( not Trig_MonSlaughterP1_Func005C() ) then
        return false
    endif
    return true
endfunction

function Trig_MonSlaughterP1_Actions takes nothing returns nothing
    call IssueImmediateOrderBJ( udg_HeroP1, "windwalk" )
    call TriggerSleepAction( 1.00 )
    call IssueTargetOrderBJ( udg_HeroP1, "attack", GetTriggerUnit() )
endfunction

//===========================================================================
function InitTrig_MonSlaughterP1 takes nothing returns nothing
    set gg_trg_MonSlaughterP1 = CreateTrigger(  )
    call TriggerRegisterUnitInRangeSimple( gg_trg_MonSlaughterP1, 500.00, udg_HeroP1 )
    call TriggerAddCondition( gg_trg_MonSlaughterP1, Condition( function Trig_MonSlaughterP1_Conditions ) )
    call TriggerAddAction( gg_trg_MonSlaughterP1, function Trig_MonSlaughterP1_Actions )
endfunction
发表于 2007-12-15 13:01:02 | 显示全部楼层
如果这个变量在初始化的时候没有内容,那么结果就不是楼主想要的效果。
回复

使用道具 举报

发表于 2007-12-15 18:29:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-12-16 15:36:10 | 显示全部楼层
初始化时当然有内容!!你当我白吃啊?
HeroP1=玩家1 的英雄,在选取英雄的时候就设好了。
回复

使用道具 举报

 楼主| 发表于 2007-12-16 15:37:43 | 显示全部楼层
事件是:当一个单位跑到另一个单位(HeroP1)范围500内。。。
回复

使用道具 举报

发表于 2007-12-16 16:13:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-12-17 12:55:24 | 显示全部楼层
  [s:127]  [s:127]
回复

使用道具 举报

发表于 2007-12-17 14:07:39 | 显示全部楼层
旋风应该可以发出来,问题出在这里:

call IssueTargetOrderBJ( udg_HeroP1, "attack", GetTriggerUnit() )

GetTriggerUnit() == udg_HeroP1

自己攻击自己,当然不行啊。
回复

使用道具 举报

发表于 2007-12-17 14:10:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-12-17 14:11:27 | 显示全部楼层
另外说一下这个触发是完全可以用的,即使有问题也是别的问题,而不是触发的问题。
回复

使用道具 举报

发表于 2007-12-17 14:13:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-12-17 14:22:26 | 显示全部楼层
这是我的地图<星际部队>里用到的真实例子:
black.caster相当于一个全局变量, 这个触发没有任何问题,. 所以不知道你的为什么不行.

[codes=jass]
function blackhorse_Hit_Conditions takes nothing returns boolean
        local integer i
        local blackhorseData black
        if GetUnitTypeId( GetTriggerUnit()) == 'hcth' then
            set i = GetHandleInt( GetTriggeringTrigger(), "black horse" )
            set black = blackhorse_data
            set black.hitCondition = true
            call KillUnit( black.caster)
            call KillUnit( GetTriggerUnit())
            return false
        endif
        return false
endfunction

//====================================================================================
set .hit = CreateTrigger()
call SetHandleInt( black.hit, "black horse", blackhorse_ttl-1 )
call TriggerRegisterUnitInRange( black.hit, black.caster, 100, null )
call TriggerAddCondition( black.hit, Condition( function blackhorse_Hit_Conditions ))
[/codes]
回复

使用道具 举报

发表于 2007-12-17 14:29:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-12-17 14:37:27 | 显示全部楼层
不是的, vJass类里所有值都是空的,必须后来附值. 你有没有试过在触发之前给udg_heroP1附上值?如果附上了仍然不行,那我也不知道是什么原因了.
回复

使用道具 举报

发表于 2007-12-17 14:42:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-12-17 15:06:41 | 显示全部楼层
说明这个触发器在地图初始化前就被运行了。现在用得太多Jass已经几乎忘了触发器是怎么工作的了,呵呵。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 18:30 , Processed in 0.033552 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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