找回密码
 点一下
查看: 3670|回复: 22

求助:这个JASS要怎么编写才有这样的伤害?

  [复制链接]
发表于 2008-3-11 22:37:25 | 显示全部楼层 |阅读模式
刚刚做了个技能(用静止陷阱做的) 本来这个技能是英雄先让放出来一个物体,再在敌人接近自己(指那放出来的物体)侦测范围内时候爆炸使在爆炸范围内的敌人眩晕。
然后我想在这上面加上伤害,是指物体爆炸时候使敌人眩晕并同时具有(敏捷/2*技能等级)的伤害值。可是我现在放技能时候是在英雄500范围内的敌人有这样的伤害。而且是放出来时就有这样的伤害,而不是放出来物体后 物体爆炸时候爆炸范围的伤害?请问下高手 我下面的JASS 哪里写错了?应该要怎么写?才能达到我上面所写那样的效果? 注:(代号A049技能(静止陷阱的复制)本来无伤害,在拿到下面代号为nspi的物品后(也就是定义为专署物品)技能具有以上所说伤害。)
[codes=jass]//===========================================================================
// Trigger: MRJ
//===========================================================================
function Trig_MRJ_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A049' ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ_Func001Func001001003 takes nothing returns boolean
    return ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == false )
endfunction

function Trig_MRJ_Func001Func001A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( ( I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, GetTriggerUnit(), true)) / 0.00 ) * I2R(GetUnitAbilityLevelSwapped('A049', GetTriggerUnit())) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_ENHANCED )
endfunction

function Trig_MRJ_Func001Func002001003 takes nothing returns boolean
    return ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == false )
endfunction

function Trig_MRJ_Func001Func002A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( ( I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, GetTriggerUnit(), true)) / 2.00 ) * I2R(GetUnitAbilityLevelSwapped('A049', GetTriggerUnit())) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_ENHANCED )
endfunction

function Trig_MRJ_Func001C takes nothing returns boolean
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'nspi') == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ_Actions takes nothing returns nothing
    if ( Trig_MRJ_Func001C() ) then
        call ForGroupBJ( GetUnitsInRangeOfLocMatching(500.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_MRJ_Func001Func002001003)), function Trig_MRJ_Func001Func002A )
    else
        call ForGroupBJ( GetUnitsInRangeOfLocMatching(500.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_MRJ_Func001Func001001003)), function Trig_MRJ_Func001Func001A )
    endif
endfunction

//===========================================================================
function InitTrig_MRJ takes nothing returns nothing
    set gg_trg_MRJ = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MRJ, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_MRJ, Condition( function Trig_MRJ_Conditions ) )
    call TriggerAddAction( gg_trg_MRJ, function Trig_MRJ_Actions )
endfunction[/codes]
发表于 2008-3-11 22:46:13 | 显示全部楼层
EVENT_PLAYER_UNIT_SPELL_EFFECT

改成EVENT_PLAYER_UNIT_SPELL_FINISH 或者EVENT_PLAYER_UNIT_SPELL_ENDCAST试下..

还有,你的Jass看着怎么怪怪的...
还有带BJ的那么多呢...
回复

使用道具 举报

 楼主| 发表于 2008-3-11 23:20:23 | 显示全部楼层
LS的 按照你的修改方法 经过我的测试(两个方法都试过了……)  你的方法的确不可行- -
还有没有哪位高手来帮帮小弟的忙啊。谢谢
回复

使用道具 举报

发表于 2008-3-11 23:23:57 | 显示全部楼层
呵呵,为什么不换个思路呢???

test.w3x (18 KB, 下载次数: 14)
回复

使用道具 举报

发表于 2008-3-12 00:24:57 | 显示全部楼层
用觸發作地雷的傷害不是就可以了嗎??
小弟不才只會用簡單的觸發
回复

使用道具 举报

发表于 2008-3-12 08:50:13 | 显示全部楼层
这样改 条件function Trig_MRJ_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'otot' ) ) then
        return false
    endif
    return true
endfunction

动作造成伤害不变
事件function InitTrig_MRJ takes nothing returns nothing
    set gg_trg_MRJ = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MRJ, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_MRJ, Condition( function Trig_MRJ_Conditions ) )
    call TriggerAddAction( gg_trg_MRJ, function Trig_MRJ_Actions )
endfunction
不够这个因为前期还没隐行,会被破坏。被破坏也造成杀害。
回复

使用道具 举报

 楼主| 发表于 2008-3-12 15:15:47 | 显示全部楼层
按照上面几位仁兄的指令编写 偶在测试中发现全无伤害了. 郁闷
还有zhuzeitou 给的技能是有伤害 不过要是加到专署武器里时候就没伤害了 这是怎么回事 是不是偶编写错了呢?JASS如下:
[codes=jass]//===========================================================================
// Trigger: MRJ
//===========================================================================
function Trig_MRJ_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'o000' ) ) then
        return false
    endif
    if ( not ( GetTriggerUnit() == GetKillingUnitBJ() ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ_Func001Func001001003001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) == true )
endfunction

function Trig_MRJ_Func001Func001001003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), GetPlayersAllies(GetOwningPlayer(GetTriggerUnit()))) == false )
endfunction

function Trig_MRJ_Func001Func001001003 takes nothing returns boolean
    return GetBooleanAnd( Trig_MRJ_Func001Func001001003001(), Trig_MRJ_Func001Func001001003002() )
endfunction

function Trig_MRJ_Func001Func001A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), 0.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endfunction

function Trig_MRJ_Func001Func002001003001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) == true )
endfunction

function Trig_MRJ_Func001Func002001003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), GetPlayersAllies(GetOwningPlayer(GetTriggerUnit()))) == false )
endfunction

function Trig_MRJ_Func001Func002001003 takes nothing returns boolean
    return GetBooleanAnd( Trig_MRJ_Func001Func002001003001(), Trig_MRJ_Func001Func002001003002() )
endfunction

function Trig_MRJ_Func001Func002A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( ( I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, GetTriggerUnit(), true)) / 2.00 ) * I2R(GetUnitAbilityLevelSwapped('A049', GetTriggerUnit())) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endfunction

function Trig_MRJ_Func001C takes nothing returns boolean
    if ( not ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'nspi') == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ_Actions takes nothing returns nothing
    if ( Trig_MRJ_Func001C() ) then
        call ForGroupBJ( GetUnitsInRangeOfLocMatching(500.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_MRJ_Func001Func002001003)), function Trig_MRJ_Func001Func002A )
    else
        call ForGroupBJ( GetUnitsInRangeOfLocMatching(500.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_MRJ_Func001Func001001003)), function Trig_MRJ_Func001Func001A )
    endif
endfunction

//===========================================================================
function InitTrig_MRJ takes nothing returns nothing
    set gg_trg_MRJ = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MRJ, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_MRJ, Condition( function Trig_MRJ_Conditions ) )
    call TriggerAddAction( gg_trg_MRJ, function Trig_MRJ_Actions )
endfunction[/codes]
其中'o000'是'otot'的复制......
回复

使用道具 举报

发表于 2008-3-12 15:23:07 | 显示全部楼层
为什么一定要用jass呢??
用触发写慢慢调整试试看呢
回复

使用道具 举报

 楼主| 发表于 2008-3-12 15:35:22 | 显示全部楼层
目的就在与想用JASS 而不用其他的.
回复

使用道具 举报

发表于 2008-3-12 16:49:10 | 显示全部楼层
UnitHasItemOfTypeBJ(GetTriggerUnit(), 'nspi') == true

应该是这句错了吧  触发单位是静止陷阱
怎么可能有物品
改成释放静止陷阱的英雄  就对了   
   
回复

使用道具 举报

 楼主| 发表于 2008-3-12 17:10:55 | 显示全部楼层
LS的没理解我的意思哦
我是要英雄拿了专署物品(nspi)后,技能静止陷阱才会有伤害,不拿专署物品的话就没伤害,懂了吗?
回复

使用道具 举报

发表于 2008-3-12 17:27:12 | 显示全部楼层
之所以没伤害 是因为
UnitHasItemOfTypeBJ(GetTriggerUnit(), 'nspi') 永远为 false

就不会运行 function Trig_MRJ_Func001Func002A
对?
回复

使用道具 举报

发表于 2008-3-12 17:33:56 | 显示全部楼层
ls说的是对的,按我的做法的话,触发单位是那个静止陷阱,是不可能有这个专署物品的
回复

使用道具 举报

 楼主| 发表于 2008-3-12 17:36:13 | 显示全部楼层
依LS你的说法,你又该如何编写呢?才能达到我所说的要求呢?
回复

使用道具 举报

发表于 2008-3-12 17:53:31 | 显示全部楼层
再看看吧,判断的是释放技能时英雄是否拥有巫毒玩偶

test.w3x (19 KB, 下载次数: 15)

添加了排泄………………
回复

使用道具 举报

 楼主| 发表于 2008-3-12 19:14:02 | 显示全部楼层
目的就在与想用JASS 而不用其他的.
经过zhuzeitou发布的技能,再进行了一番研究后得到下面的JASS:
[codes=jass]//===========================================================================
// Trigger: MRJ
//===========================================================================
function Trig_MRJ_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'o000' ) ) then
        return false
    endif
    if ( not ( GetTriggerUnit() == GetKillingUnitBJ() ) ) then
        return false
    endif
    if ( not ( GetUnitUserData(GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ_Func003001003001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) == true )
endfunction

function Trig_MRJ_Func003001003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), GetPlayersAllies(GetOwningPlayer(GetTriggerUnit()))) == false )
endfunction

function Trig_MRJ_Func003001003 takes nothing returns boolean
    return GetBooleanAnd( Trig_MRJ_Func003001003001(), Trig_MRJ_Func003001003002() )
endfunction

function Trig_MRJ_Func003A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), 100.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_ENHANCED )
endfunction

function Trig_MRJ_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocMatching(500.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_MRJ_Func003001003)), function Trig_MRJ_Func003A )
endfunction

//===========================================================================
function InitTrig_MRJ takes nothing returns nothing
    set gg_trg_MRJ = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MRJ, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_MRJ, Condition( function Trig_MRJ_Conditions ) )
    call TriggerAddAction( gg_trg_MRJ, function Trig_MRJ_Actions )
endfunction

//===========================================================================
// Trigger: MRJ1
//===========================================================================
function Trig_MRJ1_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'o000' ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetSummoningUnit(), 'nspi') == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ1_Actions takes nothing returns nothing
    call SetUnitUserData( GetTriggerUnit(), 1 )
endfunction

//===========================================================================
function InitTrig_MRJ1 takes nothing returns nothing
    set gg_trg_MRJ1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MRJ1, EVENT_PLAYER_UNIT_SUMMON )
    call TriggerAddCondition( gg_trg_MRJ1, Condition( function Trig_MRJ1_Conditions ) )
    call TriggerAddAction( gg_trg_MRJ1, function Trig_MRJ1_Actions )
endfunction
这个JASS有伤害了,伤害值固定100.可是改成(敏捷/2 × 技能等级)的话就没伤害了JASS 如下:
//===========================================================================
// Trigger: MRJ
//===========================================================================
function Trig_MRJ_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'o000' ) ) then
        return false
    endif
    if ( not ( GetTriggerUnit() == GetKillingUnitBJ() ) ) then
        return false
    endif
    if ( not ( GetUnitUserData(GetTriggerUnit()) == 1 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ_Func003001003001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) == true )
endfunction

function Trig_MRJ_Func003001003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), GetPlayersAllies(GetOwningPlayer(GetTriggerUnit()))) == false )
endfunction

function Trig_MRJ_Func003001003 takes nothing returns boolean
    return GetBooleanAnd( Trig_MRJ_Func003001003001(), Trig_MRJ_Func003001003002() )
endfunction

function Trig_MRJ_Func003A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( ( I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, GetTriggerUnit(), true)) / 2.00 ) * I2R(GetUnitAbilityLevelSwapped('A049', GetTriggerUnit())) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_ENHANCED )
endfunction

function Trig_MRJ_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocMatching(500.00, GetUnitLoc(GetTriggerUnit()), Condition(function Trig_MRJ_Func003001003)), function Trig_MRJ_Func003A )
endfunction

//===========================================================================
function InitTrig_MRJ takes nothing returns nothing
    set gg_trg_MRJ = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MRJ, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_MRJ, Condition( function Trig_MRJ_Conditions ) )
    call TriggerAddAction( gg_trg_MRJ, function Trig_MRJ_Actions )
endfunction

//===========================================================================
// Trigger: MRJ1
//===========================================================================
function Trig_MRJ1_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'o000' ) ) then
        return false
    endif
    if ( not ( UnitHasItemOfTypeBJ(GetSummoningUnit(), 'nspi') == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_MRJ1_Actions takes nothing returns nothing
    call SetUnitUserData( GetTriggerUnit(), 1 )
endfunction

//===========================================================================
function InitTrig_MRJ1 takes nothing returns nothing
    set gg_trg_MRJ1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MRJ1, EVENT_PLAYER_UNIT_SUMMON )
    call TriggerAddCondition( gg_trg_MRJ1, Condition( function Trig_MRJ1_Conditions ) )
    call TriggerAddAction( gg_trg_MRJ1, function Trig_MRJ1_Actions )
endfunction[/codes]
就是把
[codes=jass]function Trig_MRJ_Func003A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), 100.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_ENHANCED )
endfunction[/codes]
改成
[codes=jass]function Trig_MRJ_Func003A takes nothing returns nothing
    call UnitDamageTargetBJ( GetTriggerUnit(), GetEnumUnit(), ( ( I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, GetTriggerUnit(), true)) / 2.00 ) * I2R(GetUnitAbilityLevelSwapped('A049', GetTriggerUnit())) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_ENHANCED )
endfunction[/codes]
后无伤害了
回复

使用道具 举报

发表于 2008-3-12 19:21:05 | 显示全部楼层
还是这句话,触发单位(GetTriggerUnit())是在静止陷阱,不是英雄………………
不能把英雄的数据去判断的,都会返回0的………………
回复

使用道具 举报

 楼主| 发表于 2008-3-12 19:45:21 | 显示全部楼层
那可不可以判断个静止陷阱的伤害值=跟英雄属性相关的伤害值呢?
回复

使用道具 举报

发表于 2008-3-12 19:58:10 | 显示全部楼层
这样呢??

与英雄释放技能时的属性相关

test.w3x (19 KB, 下载次数: 13)
回复

使用道具 举报

 楼主| 发表于 2008-3-12 21:11:05 | 显示全部楼层
郁闷了 zhuzeitou啊 你就被给我饶弯了 你就直接说了吧 敏捷/2 × 技能等级 要怎么编写?
你上面的那个是和属性有关了 可是要再×技能等级就又不行了 你那个只能编写(敏捷/2)要编写 (敏捷/2)×技能等级 怎么弄
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-27 17:56 , Processed in 0.383883 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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