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

自己做的无光之盾J(求助)

[复制链接]
发表于 2011-1-26 09:49:51 | 显示全部楼层 |阅读模式
  1. function Aphotic_Spell takes nothing returns boolean
  2. return GetSpellAbilityId()=='A002'//判断施法函数
  3. endfunction
  4. function Aphotic_AntiDoom takes nothing returns nothing
  5. if(GetUnitAbilityLevel(GetSpellTargetUnit(),'BNdo')!=0)then
  6. call IssueImmediateOrder(GetTriggerUnit(),"stop")//末日BUFF函数
  7. endif
  8. endfunction
  9. function Aphotic_Filter takes nothing returns boolean
  10. return(IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetTriggerUnit()))==true)and(GetUnitAbilityLevelSwapped('A04R',GetFilterUnit())!=0)and((IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE))==false)//判断函数
  11. endfunction
  12. function Aphotic_Heal takes nothing returns nothing
  13. local integer k=GetHandleId(GetTriggerUnit())
  14. local real df=LoadReal(HT,k,1)
  15. local location point
  16. local group team
  17. local unit target
  18. local unit caster
  19. local effect ase
  20. local boolexpr asb=Condition(function Aphotic_Filter)//判断
  21. if(df<GetEventDamage())then
  22. call DisableTrigger(GetTriggeringTrigger())
  23. call SetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE,GetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE)+df)//回血
  24. set ase=LoadEffectHandle(HT,k,2)
  25. call DestroyEffect(ase)
  26. set ase=null
  27. set point=GetUnitLoc(GetTriggerUnit())
  28. call GroupEnumUnitsInRangeOfLoc(team,point,500,asb)//选区单位
  29. loop
  30. set target=FirstOfGroup(team)
  31. exitwhen(target==null)
  32. call GroupRemoveUnit(team,target)
  33. set caster=CreateUnitAtLoc(LoadPlayerHandle(HT,k,3),'e000',point,0)//创建施法单位
  34. call UnitAddAbility(caster,'A005')//添加技能
  35. call SetUnitAbilityLevel(caster,'A005',LoadInteger(HT,k,5))//设置技能等级
  36. call IssueTargetOrderById(caster,852587,target)//发动技能效果
  37. call UnitApplyTimedLife(caster,'BTLF',1)
  38. endloop
  39. call FlushChildHashtable(HT,k)
  40. call DestroyGroup(team)
  41. call RemoveLocation(point)
  42. set team=null
  43. set target=null
  44. set caster=null
  45. set point=null
  46. elseif(GetEventDamage()>0)then
  47. call SetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE,GetUnitState(GetTriggerUnit(),UNIT_STATE_LIFE)+GetEventDamage())//回血
  48. call SaveReal(HT,k,1,df-GetEventDamage())
  49. set team=null
  50. set target=null
  51. set caster=null
  52. set point=null
  53. endif
  54. endfunction
  55. function Aphotic_Setting takes nothing returns nothing
  56. local trigger heal=CreateTrigger()
  57. local integer k=GetHandleId(GetSpellTargetUnit())
  58. local triggeraction fct=TriggerAddAction(heal,function Aphotic_Heal)//创建主要函数
  59. local effect ase
  60. if(HaveSavedReal(HT,k,1)==true)then
  61. call DestroyEffect(LoadEffectHandle(HT,k,2))
  62. set ase=null
  63. call FlushChildHashtable(HT,k)
  64. endif
  65. call TriggerRegisterUnitEvent(heal,GetSpellTargetUnit(),EVENT_UNIT_DAMAGED)//注册单位接受伤害事件
  66. set ase=AddSpecialEffectTarget("war3mapImported\\defensive barrier big.mdx",GetSpellTargetUnit(),"chest")
  67. call UnitRemoveBuffs(GetSpellTargetUnit(),false,true)//清除DEBUFF
  68. call SaveReal(HT,k,1,80+30*GetUnitAbilityLevel(GetTriggerUnit(),'A002'))//保存盾的血量(下面的保存)
  69. call SaveEffectHandle(HT,k,2,ase)
  70. call SavePlayerHandle(HT,k,3,GetOwningPlayer(GetTriggerUnit()))
  71. call SaveBoolean(HT,k,4,false)
  72. call SaveInteger(HT,k,5,GetUnitAbilityLevel(GetTriggerUnit(),'A002'))
  73. call PolledWait(15)
  74. if(HaveSavedBoolean(HT,k,4)==true)then
  75. set ase=LoadEffectHandle(HT,k,2)
  76. call DestroyEffect(ase)
  77. set ase=null
  78. call FlushChildHashtable(HT,k)
  79. endif
  80. call TriggerRemoveAction(heal,fct)
  81. set heal=null
  82. set fct=null
  83. endfunction
  84. function InitTrig_Aphotic_Shield takes nothing returns nothing
  85. local trigger Aphotic_Shield1=CreateTrigger()
  86. local trigger Aphotic_Shield2=CreateTrigger()
  87. call TriggerRegisterAnyUnitEventBJ(Aphotic_Shield1,EVENT_PLAYER_UNIT_SPELL_CAST)//判断末日BUFF
  88. call TriggerAddCondition(Aphotic_Shield1,Condition(function Aphotic_Spell))
  89. call TriggerAddAction(Aphotic_Shield1,function Aphotic_AntiDoom)
  90. call TriggerRegisterAnyUnitEventBJ(Aphotic_Shield2,EVENT_PLAYER_UNIT_SPELL_EFFECT)
  91. call TriggerAddCondition(Aphotic_Shield2,Condition(function Aphotic_Spell))
  92. call TriggerAddAction(Aphotic_Shield2,function Aphotic_Setting)//设置
  93. set Aphotic_Shield1=null
  94. set Aphotic_Shield2=null
  95. endfunction
复制代码
为什么创建施法单位然后发动技能效果(就是游戏中盾爆伤害)哪里无效
无奈求助。WOW8冷落了我。
发表于 2011-1-26 09:56:55 | 显示全部楼层
能给个完整的图不,问题不一定是J本身的吧
另外发代码用[jass][/jass]
回复

使用道具 举报

发表于 2011-1-26 09:57:46 | 显示全部楼层
主要是我不知道无光之盾啥……
回复

使用道具 举报

发表于 2011-1-26 10:41:49 | 显示全部楼层
无光之盾是dota中死骑的技能
LZ另一个帖子讨论的是死骑的大招吧?
回复

使用道具 举报

发表于 2011-1-26 11:28:45 | 显示全部楼层
你可以把马甲单位设置一个模型,然后看爆盾的时候有没有正确创建出马甲单位。
如果正确的创建了出来,那么就看看马甲的魔法够不够,还有技能的设置正不正确。
如果没有正确创建马甲单位,那么就……………………

另外:
为什么不直接“雷霆一击”,而用Loop呢?
或者你也可以直接触发造成伤害啊。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 02:30 , Processed in 0.094990 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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