找回密码
 点一下
查看: 1977|回复: 12

菜鸟写的语句请帮找下问题

[复制链接]
发表于 2008-2-6 01:15:30 | 显示全部楼层 |阅读模式
[codes=jass]function Trig_JN11_Func001Func001C takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == udg_JINENG_putong[GetForLoopIndexA()] ) ) then
        return false
    endif
    return true
endfunction

function Trig_JN11_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 5
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( Trig_JN11_Func001Func001C() ) then
            local unit jnsbshifa
            local unit jnsbmubiao
            local integer jnneigong
            set jnsbshifa = GetSpellAbilityUnit()
            set jnsbmubiao = GetSpellTargetUnit()
            set jnneigong = ( GetHeroStatBJ(bj_HEROSTAT_INT, jnsbshifa, true) * 50 )
            call UnitDamageTargetBJ( jnsbshifa, jnsbmubiao, I2R(jnneigong), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
            set jnsbshifa = null
            set jnsbmubiao = null
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction

//===========================================================================
function InitTrig_JN11 takes nothing returns nothing
    set gg_trg_JN11 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_JN11, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddAction( gg_trg_JN11, function Trig_JN11_Actions )
endfunction[/codes]

请帮我看下有什么问题啊这个写法
发表于 2008-2-6 10:18:33 | 显示全部楼层
个人觉得啊 不应该直接用bj_*这种变量直接控制循环,应为这种变量是别的地方也可以访问到的吧 我更喜欢用local 控制 呵呵
回复

使用道具 举报

发表于 2008-2-6 12:02:51 | 显示全部楼层
严重的问题………………
局部变量需要在function顶部申明
回复

使用道具 举报

发表于 2008-2-6 12:05:26 | 显示全部楼层
的确。。。。。呵呵
回复

使用道具 举报

 楼主| 发表于 2008-2-6 14:08:56 | 显示全部楼层
引用第2楼zhuzeitou于2008-02-06 12:02发表的  :
严重的问题………………
局部变量需要在function顶部申明
是在这function Trig_JN11_Actions takes nothing returns nothing下面先申明吗
回复

使用道具 举报

发表于 2008-2-6 14:12:04 | 显示全部楼层
[codes=jass]function Trig_JN11_Func001Func001C takes nothing returns boolean
      if ( not ( GetSpellAbilityId() == udg_JINENG_putong[GetForLoopIndexA()] ) ) then
            return false
      endif
      return true
endfunction[/codes]
把以上的去掉

下面的改成
[codes=jass]function Trig_JN11_Actions takes nothing returns nothing
    local unit jnsbshifa
    local unit jnsbmubiao
    local integer jnneigong
    local integer loopA = 1
    loop
        exitwhen loopA > 5
        if ( GetSpellAbilityId() == udg_JINENG_putong[loopA]) then
            set jnsbshifa = GetSpellAbilityUnit()
            set jnsbmubiao = GetSpellTargetUnit()
            set jnneigong = ( GetHeroStatBJ(bj_HEROSTAT_INT, jnsbshifa, true) * 50 )
            call UnitDamageTargetBJ( jnsbshifa, jnsbmubiao, I2R(jnneigong), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
            set jnsbshifa = null
            set jnsbmubiao = null
        endif
        set loopA = loopA + 1
    endloop
endfunction[/codes]
回复

使用道具 举报

 楼主| 发表于 2008-2-6 14:25:08 | 显示全部楼层
这一类偶懂了...用自定义变量循环数...
回复

使用道具 举报

 楼主| 发表于 2008-2-6 14:33:05 | 显示全部楼层
我这是用T转化过来然后写的
//===========================================================================
function InitTrig_JN11 takes nothing returns nothing
      set gg_trg_JN11 = CreateTrigger(   )
      call TriggerRegisterAnyUnitEventBJ( gg_trg_JN11, EVENT_PLAYER_UNIT_SPELL_CAST )
      call TriggerAddAction( gg_trg_JN11, function Trig_JN11_Actions )
endfunction

这最后一段是什么作用啊
回复

使用道具 举报

发表于 2008-2-6 14:35:18 | 显示全部楼层
这段是触发器的初始化

function InitTrig_JN11 takes nothing returns nothing
      set gg_trg_JN11 = CreateTrigger(  )//初始化
      call TriggerRegisterAnyUnitEventBJ( gg_trg_JN11, EVENT_PLAYER_UNIT_SPELL_CAST )//添加事件
      call TriggerAddAction( gg_trg_JN11, function Trig_JN11_Actions )//添加动作
endfunction
回复

使用道具 举报

 楼主| 发表于 2008-2-6 18:23:17 | 显示全部楼层
如果我想在这个里面再添加几样事件```那么这个初始化格式该怎样呢```譬如添加的事件跟第一个事件是同类型的```也就是说写两个类型相同的事件在里面```初始化格式该怎样呢
回复

使用道具 举报

发表于 2008-2-6 18:29:25 | 显示全部楼层
什么叫类型相同的事件呢?最近理解能力很差………………
TriggerRegisterXXX之类的函数都是注册事件用的
回复

使用道具 举报

 楼主| 发表于 2008-2-6 18:33:52 | 显示全部楼层
譬如我想在一个触发里面写大于两个的事件,上面说的
function Trig_JN11_Actions takes nothing returns nothing
      local unit jnsbshifa
      local unit jnsbmubiao
      local integer jnneigong
      local integer loopA = 1
      loop
            exitwhen loopA > 5
            if ( GetSpellAbilityId() == udg_JINENG_putong[loopA]) then
                  set jnsbshifa = GetSpellAbilityUnit()
                  set jnsbmubiao = GetSpellTargetUnit()
                  set jnneigong = ( GetHeroStatBJ(bj_HEROSTAT_INT, jnsbshifa, true) * 50 )
                  call UnitDamageTargetBJ( jnsbshifa, jnsbmubiao, I2R(jnneigong), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
                  set jnsbshifa = null
                  set jnsbmubiao = null
            endif
            set loopA = loopA + 1
      endloop
endfunction

就算一个,如果写多个的话初始化应该怎么表述呢
回复

使用道具 举报

发表于 2008-2-6 18:39:46 | 显示全部楼层
在InitTrigXXX里添加注册事件的函数就好了,或者写一个测试用T转成J试试就知道了
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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