深度解析风行大招,Does Not reduce secondary item effects ...




以前三月已经测试过了,我只是拿出自己的测试结果,和解释。

英文版本的解释是:scepter ipgradeable :does not reduce secondary item effects. improves cooldown
中文版的翻译是不会减少来至物品的伤害(比如电锤)

这句虽然翻译没有错误,但是歧义很大,应该将does not reduce secondary item effects 翻译成“不会减免从属与物品效果(特殊的)”










英雄普通攻击在89-100之间,普通攻击是






使用大招以后无A杖攻击的{dy}下攻击(值得注意的是,无A杖的首次攻击时,是正常伤害,以后的攻击为降低伤害的攻击。):



使用大招以后无A杖攻击的第二下攻击:



使用大招以后无A杖攻击的第三下攻击:






有A杖使用大招






















我们再来看风行的原代码:

其实这段代码不难理解
1093743184转换成ASCII码是A12P      无A杖的风行大招代码
1093747766转换成ASCII码是 A1D6    有A杖的风行大招代码

FVI是无A杖的风行大招A12P 的等级。装备了A杖以后FVI=0 ,所以FVI又等于A杖A1D6的等级。
继续执行添加攻击速度提升99999技能和



其中主函数是:
local unit GCI=GetTriggerUnit()               GCI=触发单位
local unit GDI=GetSpellTargetUnit()           GDI=被施法目标
local trigger t=CreateTrigger()               t=新建的触发器
local integer DMI=GetHandleId(t)              DMT=新建触发器t的HandleId
local integer FVI=GetUnitAbilityLevel(GCI,1093743184)         FVI=触发单位的“集中活力”的技能 A12P
local real RMO=0.6-FVI*0.1                    RMO=0.6-触发单位的“集中活力”的技能等级*0.1
local boolean PVO=false               PVO=false
call UnitRemoveAbility(GCI,1093743186)     删除技能 1093743186 'A12R'
call UnitRemoveAbility(GCI,1110456664)     删除技能 1093743186 BUFF
if FVI==0 then
call UnitRemoveAbility(GCI,1093748299)       
call UnitRemoveAbility(GCI,1093748300)
call UnitRemoveAbility(GCI,1093748298)
set PVO=true
set FVI=GetUnitAbilityLevel(GCI,1093747766)        A1D6 神杖技能
set RMO=0.6-FVI*0.15
if FVI==1 then
call UnitAddAbility(GCI,1093748299)
call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093748299,false)
elseif FVI==2 then
call UnitAddAbility(GCI,1093748300)
call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093748300,false)
elseif FVI==3 then
call UnitAddAbility(GCI,1093748298)
call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093748298,false)
endif
endif
call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093743186,false)
call UnitAddAbility(GCI,1093743186)
call IssueTargetOrder(GCI,"attack",GDI)    命令触发单位攻击被施法单位


  1. function LP2 takes nothing returns boolean
  2. local trigger t=GetTriggeringTrigger()
  3. local integer DMI=GetHandleId(t)
  4. local unit E1I=(LoadUnitHandle(TY,(DMI),(14)))
  5. call SetUnitTimeScale(E1I,1)
  6. call FlushChildHashtable(TY,(DMI))
  7. call DWI(t)
  8. set t=null
  9. set E1I=null
  10. return false
  11. endfunction
  12. function LQ2 takes nothing returns nothing
  13. local trigger t=CreateTrigger()
  14. local integer DMI=GetHandleId(t)
  15. local unit E1I=GetTriggerUnit()
  16. local location l=GetSpellTargetLoc()
  17. local real x=GetLocationX(l)
  18. local real y=GetLocationY(l)
  19. call RemoveLocation(l)
  20. call SaveReal(TY,(GetHandleId(E1I)),(356),((x)*1.0))
  21. call SaveReal(TY,(GetHandleId(E1I)),(357),((y)*1.0))
  22. call SaveReal(TY,(GetHandleId(E1I)),(358),(((TimerGetElapsed(M)))*1.0))
  23. call SetUnitTimeScale(E1I,0.75)
  24. call SaveUnitHandle(TY,(DMI),(14),(E1I))
  25. call TriggerRegisterTimerEvent(t,0.75,false)
  26. call TriggerRegisterUnitEvent(t,E1I,EVENT_UNIT_DEATH)
  27. call TriggerAddCondition(t,Condition(function LP2))
  28. set t=null
  29. set E1I=null
  30. endfunction
  31. function LU2 takes nothing returns boolean
  32. if GetSpellAbilityId()==1093743179 then
  33. if GetTriggerEventId()==EVENT_PLAYER_UNIT_SPELL_CAST then
  34. call SaveBoolean(TY,(GetHandleId(GetTriggerUnit())),(360),(false))
  35. call LQ2()
  36. elseif GetTriggerEventId()==EVENT_PLAYER_UNIT_SPELL_EFFECT then
  37. call SaveBoolean(TY,(GetHandleId(GetTriggerUnit())),(360),(true))
  38. elseif(LoadBoolean(TY,(GetHandleId(GetTriggerUnit())),(360)))==true then
  39. call LT2()
  40. endif
  41. endif
  42. return false
  43. endfunction
  44. function AJ1 takes nothing returns nothing
  45. local trigger t=CreateTrigger()
  46. call ZSI(t,EVENT_PLAYER_UNIT_SPELL_ENDCAST)
  47. call ZSI(t,EVENT_PLAYER_UNIT_SPELL_CAST)
  48. call ZSI(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
  49. call TriggerAddCondition(t,Condition(function LU2))
  50. set t=null
  51. endfunction
  52. function M02 takes nothing returns boolean
  53. local trigger t=GetTriggeringTrigger()
  54. local integer DMI=GetHandleId(t)
  55. local unit GCI=(LoadUnitHandle(TY,(DMI),(2)))
  56. local integer GHI=(LoadInteger(TY,(DMI),(30)))
  57. local unit GDI=D9I(GHI)
  58. local real RMO=(LoadReal(TY,(DMI),(193)))
  59. local boolean PVO=(LoadBoolean(TY,(DMI),(15)))
  60. if GetTriggerEvalCount(t)==1 then
  61. call TriggerRegisterUnitEvent(t,GCI,EVENT_UNIT_SPELL_EFFECT)
  62. endif
  63. if GetTriggerEventId()==EVENT_PLAYER_UNIT_ATTACKED then
  64. if GetAttacker()==GCI and GetTriggerUnit()==GDI then
  65. call DestroyEffect(AddSpecialEffectTarget("effects\\Tornado.mdx",GCI,"hand,left"))
  66. call DestroyEffect(AddSpecialEffectTarget("effects\\Tornado.mdx",GCI,"hand,right"))
  67. elseif GetAttacker()==GCI and GetTriggerUnit()!=GDI then
  68. call UnitRemoveAbility(GCI,1093743186)
  69. call UnitRemoveAbility(GCI,1110456664)
  70. call D8I(GHI)
  71. call FlushChildHashtable(TY,(DMI))
  72. call DWI(t)
  73. call UnitRemoveAbility(GCI,1093748299)
  74. call UnitRemoveAbility(GCI,1093748300)
  75. call UnitRemoveAbility(GCI,1093748298)
  76. endif
  77. elseif GetTriggerEventId()==EVENT_UNIT_DAMAGED then
  78. if GetEventDamageSource()==GCI and PVO==false then
  79. call SetUnitState(GDI,UNIT_STATE_LIFE,GetUnitState(GDI,UNIT_STATE_LIFE)+(RMO)*GetEventDamage())
  80. endif
  81. elseif GetTriggerEventId()==EVENT_UNIT_SPELL_EFFECT then
  82. if GetSpellAbilityId()==1093743184 or GetSpellAbilityId()==1093747766 then
  83. call D8I(GHI)
  84. call FlushChildHashtable(TY,(DMI))
  85. call DWI(t)
  86. endif
  87. else
  88. call UnitRemoveAbility(GCI,1093743186)
  89. call UnitRemoveAbility(GCI,1110456664)
  90. call D8I(GHI)
  91. call FlushChildHashtable(TY,(DMI))
  92. call DWI(t)
  93. call UnitRemoveAbility(GCI,1093748299)
  94. call UnitRemoveAbility(GCI,1093748300)
  95. call UnitRemoveAbility(GCI,1093748298)
  96. endif
  97. set t=null
  98. set GCI=null
  99. set GDI=null
  100. return false
  101. endfunction
  102. function MI2 takes nothing returns nothing
  103. local unit GCI=GetTriggerUnit()               GCI=触发单位
  104. local unit GDI=GetSpellTargetUnit()           GDI=被施法目标
  105. local trigger t=CreateTrigger()               t=新建的触发器
  106. local integer DMI=GetHandleId(t)              DMT=新建触发器t的HandleId
  107. local integer FVI=GetUnitAbilityLevel(GCI,1093743184)         FVI=触发单位的“集中活力”的技能 A12P
  108. local real RMO=0.6-FVI*0.1                    RMO=0.6-触发单位的“集中活力”的技能等级*0.1
  109. local boolean PVO=false               PVO=false
  110. call UnitRemoveAbility(GCI,1093743186)     删除技能 1093743186 'A12R'
  111. call UnitRemoveAbility(GCI,1110456664)     删除技能 1093743186 BUFF
  112. if FVI==0 then
  113. call UnitRemoveAbility(GCI,1093748299)       
  114. call UnitRemoveAbility(GCI,1093748300)
  115. call UnitRemoveAbility(GCI,1093748298)
  116. set PVO=true
  117. set FVI=GetUnitAbilityLevel(GCI,1093747766)        A1D6 神杖技能
  118. set RMO=0.6-FVI*0.15
  119. if FVI==1 then
  120. call UnitAddAbility(GCI,1093748299)
  121. call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093748299,false)
  122. elseif FVI==2 then
  123. call UnitAddAbility(GCI,1093748300)
  124. call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093748300,false)
  125. elseif FVI==3 then
  126. call UnitAddAbility(GCI,1093748298)
  127. call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093748298,false)
  128. endif
  129. endif
  130. call SetPlayerAbilityAvailable(GetOwningPlayer(GCI),1093743186,false)
  131. call UnitAddAbility(GCI,1093743186)
  132. call IssueTargetOrder(GCI,"attack",GDI)    命令触发单位攻击被施法单位
  133. call SaveUnitHandle(TY,(DMI),(2),(GCI))
  134. call SaveBoolean(TY,(DMI),(15),(PVO))
  135. call SaveInteger(TY,(DMI),(30),(DBI(GDI)))
  136. call SaveReal(TY,(DMI),(193),((RMO)*1.0))
  137. call SaveInteger(TY,(DMI),(361),(0))
  138. call TriggerRegisterTimerEvent(t,20,false)            为t注册时间事件为20秒-不循环     
  139. call ZSI(t,EVENT_PLAYER_UNIT_ATTACKED)        
  140. call TriggerRegisterUnitEvent(t,GDI,EVENT_UNIT_DAMAGED)
  141. call TriggerRegisterUnitEvent(t,GCI,EVENT_UNIT_DEATH)
  142. call TriggerRegisterUnitEvent(t,GDI,EVENT_UNIT_DEATH)
  143. call TriggerAddCondition(t,Condition(function M02))
  144. set GCI=null
  145. set GDI=null
  146. set t=null
  147. endfunction
  148. function M12 takes nothing returns boolean
  149. if GetSpellAbilityId()==1093743184 or GetSpellAbilityId()==1093747766 then
  150. call MI2()
  151. endif
  152. return false
  153. endfunction







其实添加的技能是不变的1093748299,1093748300,1093748298(魔法书)。所以测试结果是
无A杖的暴击伤害等于有A杖的伤害,无A杖的伤害要除以2就等于真实的伤害。这是A杖技能正常显示暴击伤害的显示。









那么出A杖和不出A杖{zd0}的区别的就是电锤。

if GetEventDamageSource()==GCI and PVO==false then
call SetUnitState(GDI,UNIT_STATE_LIFE,GetUnitState(GDI,UNIT_STATE_LIFE)+(RMO)*GetEventDamage())
endif

这句的意思 目标恢复被风行者伤害(物理)*RMO(伤害减免系数)的生命值。



所以无A杖是减免所有自己物理输出的伤害的。

总结以后就是几个重点:

1:无A杖的暴击伤害等于有A杖的伤害

2:无A杖的是减免重击,电锤等特殊伤害的伤害。

3:无A杖首次攻击时不减少物理伤害的。





郑重声明:资讯 【深度解析风行大招,Does Not reduce secondary item effects ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——