以前三月已经测试过了,我只是拿出自己的测试结果,和解释。
英文版本的解释是: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) 命令触发单位攻击被施法单位
- function LP2 takes nothing returns boolean
- local trigger t=GetTriggeringTrigger()
- local integer DMI=GetHandleId(t)
- local unit E1I=(LoadUnitHandle(TY,(DMI),(14)))
- call SetUnitTimeScale(E1I,1)
- call FlushChildHashtable(TY,(DMI))
- call DWI(t)
- set t=null
- set E1I=null
- return false
- endfunction
- function LQ2 takes nothing returns nothing
- local trigger t=CreateTrigger()
- local integer DMI=GetHandleId(t)
- local unit E1I=GetTriggerUnit()
- local location l=GetSpellTargetLoc()
- local real x=GetLocationX(l)
- local real y=GetLocationY(l)
- call RemoveLocation(l)
- call SaveReal(TY,(GetHandleId(E1I)),(356),((x)*1.0))
- call SaveReal(TY,(GetHandleId(E1I)),(357),((y)*1.0))
- call SaveReal(TY,(GetHandleId(E1I)),(358),(((TimerGetElapsed(M)))*1.0))
- call SetUnitTimeScale(E1I,0.75)
- call SaveUnitHandle(TY,(DMI),(14),(E1I))
- call TriggerRegisterTimerEvent(t,0.75,false)
- call TriggerRegisterUnitEvent(t,E1I,EVENT_UNIT_DEATH)
- call TriggerAddCondition(t,Condition(function LP2))
- set t=null
- set E1I=null
- endfunction
- function LU2 takes nothing returns boolean
- if GetSpellAbilityId()==1093743179 then
- if GetTriggerEventId()==EVENT_PLAYER_UNIT_SPELL_CAST then
- call SaveBoolean(TY,(GetHandleId(GetTriggerUnit())),(360),(false))
- call LQ2()
- elseif GetTriggerEventId()==EVENT_PLAYER_UNIT_SPELL_EFFECT then
- call SaveBoolean(TY,(GetHandleId(GetTriggerUnit())),(360),(true))
- elseif(LoadBoolean(TY,(GetHandleId(GetTriggerUnit())),(360)))==true then
- call LT2()
- endif
- endif
- return false
- endfunction
- function AJ1 takes nothing returns nothing
- local trigger t=CreateTrigger()
- call ZSI(t,EVENT_PLAYER_UNIT_SPELL_ENDCAST)
- call ZSI(t,EVENT_PLAYER_UNIT_SPELL_CAST)
- call ZSI(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
- call TriggerAddCondition(t,Condition(function LU2))
- set t=null
- endfunction
- function M02 takes nothing returns boolean
- local trigger t=GetTriggeringTrigger()
- local integer DMI=GetHandleId(t)
- local unit GCI=(LoadUnitHandle(TY,(DMI),(2)))
- local integer GHI=(LoadInteger(TY,(DMI),(30)))
- local unit GDI=D9I(GHI)
- local real RMO=(LoadReal(TY,(DMI),(193)))
- local boolean PVO=(LoadBoolean(TY,(DMI),(15)))
- if GetTriggerEvalCount(t)==1 then
- call TriggerRegisterUnitEvent(t,GCI,EVENT_UNIT_SPELL_EFFECT)
- endif
- if GetTriggerEventId()==EVENT_PLAYER_UNIT_ATTACKED then
- if GetAttacker()==GCI and GetTriggerUnit()==GDI then
- call DestroyEffect(AddSpecialEffectTarget("effects\\Tornado.mdx",GCI,"hand,left"))
- call DestroyEffect(AddSpecialEffectTarget("effects\\Tornado.mdx",GCI,"hand,right"))
- elseif GetAttacker()==GCI and GetTriggerUnit()!=GDI then
- call UnitRemoveAbility(GCI,1093743186)
- call UnitRemoveAbility(GCI,1110456664)
- call D8I(GHI)
- call FlushChildHashtable(TY,(DMI))
- call DWI(t)
- call UnitRemoveAbility(GCI,1093748299)
- call UnitRemoveAbility(GCI,1093748300)
- call UnitRemoveAbility(GCI,1093748298)
- endif
- elseif GetTriggerEventId()==EVENT_UNIT_DAMAGED then
- if GetEventDamageSource()==GCI and PVO==false then
- call SetUnitState(GDI,UNIT_STATE_LIFE,GetUnitState(GDI,UNIT_STATE_LIFE)+(RMO)*GetEventDamage())
- endif
- elseif GetTriggerEventId()==EVENT_UNIT_SPELL_EFFECT then
- if GetSpellAbilityId()==1093743184 or GetSpellAbilityId()==1093747766 then
- call D8I(GHI)
- call FlushChildHashtable(TY,(DMI))
- call DWI(t)
- endif
- else
- call UnitRemoveAbility(GCI,1093743186)
- call UnitRemoveAbility(GCI,1110456664)
- call D8I(GHI)
- call FlushChildHashtable(TY,(DMI))
- call DWI(t)
- call UnitRemoveAbility(GCI,1093748299)
- call UnitRemoveAbility(GCI,1093748300)
- call UnitRemoveAbility(GCI,1093748298)
- endif
- set t=null
- set GCI=null
- set GDI=null
- return false
- endfunction
- function MI2 takes nothing returns nothing
- 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) 命令触发单位攻击被施法单位
- call SaveUnitHandle(TY,(DMI),(2),(GCI))
- call SaveBoolean(TY,(DMI),(15),(PVO))
- call SaveInteger(TY,(DMI),(30),(DBI(GDI)))
- call SaveReal(TY,(DMI),(193),((RMO)*1.0))
- call SaveInteger(TY,(DMI),(361),(0))
- call TriggerRegisterTimerEvent(t,20,false) 为t注册时间事件为20秒-不循环
- call ZSI(t,EVENT_PLAYER_UNIT_ATTACKED)
- call TriggerRegisterUnitEvent(t,GDI,EVENT_UNIT_DAMAGED)
- call TriggerRegisterUnitEvent(t,GCI,EVENT_UNIT_DEATH)
- call TriggerRegisterUnitEvent(t,GDI,EVENT_UNIT_DEATH)
- call TriggerAddCondition(t,Condition(function M02))
- set GCI=null
- set GDI=null
- set t=null
- endfunction
- function M12 takes nothing returns boolean
- if GetSpellAbilityId()==1093743184 or GetSpellAbilityId()==1093747766 then
- call MI2()
- endif
- return false
- 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杖首次攻击时不减少物理伤害的。
|