找回密码
 点一下
查看: 1768|回复: 4

为什么没有运行2

[复制链接]
发表于 2007-11-12 14:59:56 | 显示全部楼层 |阅读模式
其实是想做黑暗之箭的触发

[codes=jass]
function Trig_Master1B_Conditions takes nothing returns boolean
    if ( GetUnitAbilityLevel(GetAttackedUnitBJ(), 'BNba') > 0 ) and ( GetUnitTypeId(GetAttacker()) == 'NC14' ) then
    return true
    endif
    return false
endfunction

function Trig_Master1B_Actions takes nothing returns nothing
    local integer i = ( GetUnitAbilityLevel(udg_Master1, 'A04H') * 21 )
    local unit a = GetAttackedUnitBJ()
    local player pl = GetOwningPlayer(a)
    local location p
    if ( GetUnitState(a, UNIT_STATE_LIFE) >= I2R(i) ) then
        call SetUnitLifeBJ( a, ( GetUnitState(a, UNIT_STATE_LIFE) - I2R(i) ) )
    else
        set p = GetUnitLoc(GetAttackedUnitBJ())
        call KillUnit( a )
        call ReviveHeroLoc( a, p , false )
        call SetUnitOwner( a, Player(11), false )
        call UnitShareVision( a, pl, true )
    endif
endfunction

//===========================================================================
function InitTrig_Master1B takes nothing returns nothing
    set gg_trg_Master1B = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(0), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(1), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(2), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(3), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(4), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(5), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(6), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_Master1B, Player(7), EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Master1B, Condition( function Trig_Master1B_Conditions ) )
    call TriggerAddAction( gg_trg_Master1B, function Trig_Master1B_Actions )
endfunction
[/codes]
发表于 2007-11-12 15:26:13 | 显示全部楼层
EVENT_PLAYER_UNIT_ATTACKED指的是单位被攻击的.
指的是,攻击方,没有MISS,箭矢出手.

但是,箭矢出手,和真正被打上还有一段的时间.BNba,这个BUFF也不会在箭矢刚刚出手就附加上的.

正确做法是:
EVENT_PLAYER_UNIT_ATTACKED----------->创建新触发,注册事件
EVENT_UNIT_DAMAGED-------------------------->
-------->HAS BUFF BNba---------------------------->删掉当前触发 Do Something
回复

使用道具 举报

发表于 2007-11-12 15:57:32 | 显示全部楼层
工作中,没有War3.或是jasscraft,只能用记事本写.也不敢说能否运行成功,也不知函数名有没有写错
下面的东西从后往前看
(不是我非要这么写,因为war3就是从后往前看的,不信,你看过第一行有config函数不成?)

// Trigger: attack
//这里是attack触发.在look函数里确定的目标受到伤害时运行.
function Trig_attack_Actions takes nothing returns nothing
  local texttag text
  local real    damage
//等到了,目标受到了伤害,但是,我要确认,这个伤害是不是学了攻击附加敏捷的那个单位打来的,
//还要确认,是他的普通攻击。
  if( GetUnitAbilityLevel(GetTriggerUnit(),'B000')>0 and
              GetUnitAbilityLevel(GetEventDamageSource(),'A000')>0 )then
      call DisableTrigger( GetTriggeringTrigger() )
      call DestroyTrigger(GetTriggeringTrigger())
      set   damage=GetHeroStateBJ(bj_HEROSTAT_AGI, GetEventDamageSource(), true)
      call UnitDamageTarget(GetEventDamageSource(), GetTriggerUnit(),damage,null,null)
  endif
endfunction


// Trigger: notice
//这个是notice触发.刚才是准备攻击一个目标了,那么,要等到攻击的箭矢打中,要等到什么时候呢?就是目标受伤害了。
//这个函数将注册attack触发.
function Trig_look_Actions takes nothing returns nothing
  local trigger attack
  set attack=CreateTrigger()
  call TriggerRegisterUnitEvent( attack, GetEventTargetUnit(), EVENT_UNIT_DAMAGED )
  call TriggerAddAction(attack,function Trig_attack_Actions)
endfunction


//start.
//这个是触发函数.在英雄学习技能时运行.这个函数将注册look触发.
function Trig_start_Actions takes nothing returns nothing
  local trigger look
//如果学习的技能不是我想要的,那个加敏捷的技能,那么什么也别做
  if(GetLearnedSkill()!='A000') then
    return
  endif

  call DisplayTextToPlayer( GetOwningPlayer(GetTriggerUnit()),0,0,"现在你的英雄攻击能附加自身敏捷值|cffff0000无视护甲")
  set look=CreateTrigger()
//动态注册一个事件,就是学习攻击附加敏捷的单位,准备攻击一个目标这个事件。
  call TriggerRegisterUnitEvent( look, GetTriggerUnit(), EVENT_UNIT_TARGET_IN_RANGE )
  call TriggerAddAction(look,function Trig_look_Actions)
endfunction
function InitTrig_start takes nothing returns nothing
  set gg_trg_start = CreateTrigger( )
  call TriggerRegisterAnyUnitEventBJ( gg_trg_start, EVENT_PLAYER_HERO_SKILL )
  call TriggerAddAction( gg_trg_start, function Trig_start_Actions )
endfunction
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2007-11-14 07:00:26 | 显示全部楼层
朱朱回答得很详细...
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 20:43 , Processed in 0.040056 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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