冰魂大招致死的效果薄葬可以救嘛?
dota吧
全部回复
仅看楼主
level 8
肥胖的PP 楼主
2011年04月16日 02点04分 1
level 10
可以~
2011年04月16日 02点04分 2
level 9
回复:2楼
确定??
2011年04月16日 02点04分 3
level 8
可以
2011年04月16日 02点04分 4
level 8
肥胖的PP 楼主
这么技术性的帖子没人知道么
2011年04月16日 02点04分 5
level 8
简单的说就是
脚本用一种比较复杂的方法准确记录了伤害。
如果在5秒内,被薄葬的目标会受到可能致命的伤害的话,会先加上足够多的血量再受到伤害,然后把血量还原为1.(实际观察中由于存在回血,看到的都是2.)
因为确实遭受了这种即使是致命的伤害,所以刃甲是会反弹的。
以下引用6.59D U9某大神的版本
薄葬 A10L
薄葬在接下来的5秒内阻止所有将导致目标英雄死亡的伤害。
function BoZang_SheZhiShengMingZhi takes nothing returns boolean
//已完成
local trigger t=GetTriggeringTrigger()
//创建局部触发器变量t 并使之= 执行这个函数的触发器
local string MissionKey=(I2S(H2I((t))))
//创建局部字符串变量MissionKey 并使之=将触发器t的地址转化为字符串
local unit U2=GetUnit(MissionKey,"Target")
//创建局部单位变量U2 并使之=从游戏缓存udg_GC MissionKey项目 的"Target"类别中 读取的单位
local real Damage=(GetStoredReal(udg_GC,(MissionKey),("Damage")))
//定义局部实数变量Damage 并使之=从游戏缓存udg_GC MissionKey项目 的"Damage"类别中 读取的实数
local real NewLife=GetMaxReal(GetUnitState(U2,UNIT_STATE_LIFE)-Damage,1)
//定义局部实数变量NewLife 并使之= 单位U2的当前生命值-Damage 该值不会低于1点
local real FakeLife=(GetStoredReal(udg_GC,((I2S(H2I((U2))))),("ShallowGrave|FakeLife")))
//定义局部实数变量FakeLife 并使之=从游戏缓存udg_GC 将单位U2的地址转化为字符串的项目 的"ShallowGrave|FakeLife"类别中 读取的实数
call SetUnitState(U2,UNIT_STATE_LIFE,NewLife)
//设置单位U2的生命值为NewLife
call StoreReal(udg_GC,((I2S(H2I((U2))))),("ShallowGrave|FakeLife"),((FakeLife-Damage)*1.0))
//在游戏缓存udg_GC的 将单位U2的地址转化为字符串的项目 的"ShallowGrave|FakeLife"类别中 存入实数:FakeLife-Damage
call FlushStoredMission(udg_GC,(MissionKey))
//清空游戏缓存udg_GC中 MissionKey的项目
call DisableTriggerCustom(t)
//关闭触发器t
set t=null
//清空变量t
set U2=null
//清空变量U2
return false
//返回 假
endfunction
function BoZang_JiLuShangHai takes unit U2,real Damage returns nothing
//已完成
local trigger t=CreateTrigger()
//创建局部触发器变量t
local string MissionKey=(I2S(H2I((t))))
//创建局部字符串变量MissionKey 并使之=将触发器t的地址转化为字符串
local real FakeLife=(GetStoredReal(udg_GC,((I2S(H2I((U2))))),("ShallowGrave|FakeLife")))
//定义局部实数变量FakeLife 并使之=从游戏缓存udg_GC 将单位U2的地址转化为字符串的项目 的"ShallowGrave|FakeLife"类别中 读取的实数
call StoreInteger(udg_GC,(MissionKey),("Target"),H2I((U2)))
//在游戏缓存udg_GC的 MissionKey项目 的"Target"类别中 存入整数:单位U2的地址
call StoreReal(udg_GC,(MissionKey),("Damage"),((Damage)*1.0))
//在游戏缓存udg_GC的 MissionKey项目 的"Damage"类别中 存入实数:Damage
call StoreReal(udg_GC,((I2S(H2I((U2))))),("ShallowGrave|FakeLife"),((FakeLife+Damage)*1.0))
//在游戏缓存udg_GC的 将单位U2的地址转化为字符串的项目 的"ShallowGrave|FakeLife"类别中 存入实数:FakeLife+Damage
call TriggerRegisterTimerEvent(t,0,false)
//为触发器t注册事件:在0秒后触发一次
call TriggerAddCondition(t,Condition(function BoZang_SheZhiShengMingZhi))
//为触发器t添加条件:BoZang_SheZhiShengMingZhi
set t=null

2011年04月16日 02点04分 6
斧王可以斩!~
2015年11月03日 11点11分
level 8
//清空变量t
endfunction
function BoZang_Conditi takes nothing returns boolean
//已完成
local trigger t=GetTriggeringTrigger()
//创建局部触发器变量t 并使之= 执行这个函数的触发器
local string MissionKey=(I2S(H2I((t))))
//创建局部字符串变量MissionKey 并使之=将触发器t的地址转化为字符串
local unit U2
//定义局部单位变量U2
local real Life
//定义局部实数变量Life
local real Damage
//定义局部实数变量Damage
local integer ExecuteTimes=GetTriggerEvalCount(t)
//定义局部整数变量ExecuteTimes 并使之= 触发器t的条件的执行次数
local real FakeLife
//定义局部实数变量FakeLife
local real LastFrame=(GetStoredReal(udg_GC,(MissionKey),("LastFrame")))
//定义局部实数变量LastFrame 并使之=从游戏缓存udg_GC MissionKey项目 的"LastFrame"类别中 读取的实数
local real FrameDamage=(GetStoredReal(udg_GC,(MissionKey),("FrameDamage")))
//定义局部实数变量FrameDamage 并使之=从游戏缓存udg_GC MissionKey项目 的"FrameDamage"类别中 读取的实数
if LastFrame!=(TimerGetElapsed(III))then
//如果 LastFrame不等于全局计时器III流逝的时间 则
set LastFrame=(TimerGetElapsed(III))
//设置LastFrame=全局计时器III流逝的时间
set FrameDamage=0
//设置FrameDamage=0
call StoreReal(udg_GC,(MissionKey),("LastFrame"),((LastFrame)*1.0))
//在游戏缓存udg_GC的 MissionKey项目 的"LastFrame"类别中 存入实数:LastFrame
call StoreReal(udg_GC,(MissionKey),("FrameDamage"),((FrameDamage)*1.0))
//在游戏缓存udg_GC的 MissionKey项目 的"FrameDamage"类别中 存入实数:FrameDamage
endif
if GetTriggerEventId()==EVENT_UNIT_DAMAGED then
//如果 触发事件是单位接受伤害 则
set U2=GetTriggerUnit()
//设置单位U2= 触发单位
set FakeLife=(GetStoredReal(udg_GC,((I2S(H2I((U2))))),("ShallowGrave|FakeLife")))
//设置FakeLife= 从游戏缓存udg_GC 将单位U2的地址转化为字符串的项目 的"ShallowGrave|FakeLife"类别中 读取的实数
set Life=GetUnitState(U2,UNIT_STATE_LIFE)
//设置Life= 单位U2的当前生命值
set Damage=GetEventDamage()
//设置Damage= 受到的伤害值
if((Life-FakeLife-FrameDamage)-Damage)<1 then
//如果 (Life-FakeLife-FrameDamage-Damage)<1 则
call SetUnitState(U2,UNIT_STATE_LIFE,Life+Damage+FrameDamage)
//设置单位U2的生命值为:Life+Damage+FrameDamage
call BoZang_JiLuShangHai(U2,Damage)
//执行函数BoZang_JiLuShangHai(单位U2,Damage)
else
//否则
set FrameDamage=FrameDamage+Damage
//使FrameDamage自身增加Damage
call StoreReal(udg_GC,(MissionKey),("FrameDamage"),((FrameDamage)*1.0))
//在游戏缓存udg_GC的 MissionKey项目 的"FrameDamage"类别中 存入实数:FrameDamage
endif
else
//否则
call DestroyEffect(GetEffect(MissionKey,"FX"))
//删除 从游戏缓存udg_GC MissionKey项目 的"FX"类别中 读取的特殊效果
call FlushStoredMission(udg_GC,(MissionKey))
//清空游戏缓存udg_GC中 MissionKey的项目
call DisableTriggerCustom(t)
//关闭触发器t
endif
set U2=null
//清空变量U2
set t=null
//清空变量t
return false
//返回 假
endfunction
function BoZang_Regist takes nothing returns nothing
//已完成
local trigger t=CreateTrigger()
//创建局部触发器变量t

2011年04月16日 02点04分 7
level 8
local string MissionKey=(I2S(H2I((t))))
//创建局部字符串变量MissionKey 并使之=将触发器t的地址转化为字符串
local unit U1=GetTriggerUnit()
//创建局部单位变量U1 并使之=触发单位
local unit U2=GetSpellTargetUnit()
//创建局部单位变量U2 并使之=技能施放目标单位
call TriggerRegisterTimerEvent(t,5,false)
//为触发器t注册事件:在5秒后触发一次
call TriggerRegisterUnitEvent(t,U2,EVENT_UNIT_DAMAGED)
//为触发器t注册事件:单位U2接受伤害
call TriggerAddCondition(t,Condition(function BoZang_Conditi))
//为触发器t添加条件:BoZang_Conditi
call StoreInteger(udg_GC,(MissionKey),("FX"),H2I((AddSpecialEffectTarget("war3mapImported\\DarkHands.mdx",U2,"overhead"))))
//在单位U2的头顶创建"war3mapImported\\DarkHands.mdx"的特殊效果 并将它的地址存入游戏缓存udg_GC MissionKey项目 的"FX"类别中
call StoreReal(udg_GC,((I2S(H2I((U2))))),("ShallowGrave|FakeLife"),((0)*1.0))
//在游戏缓存udg_GC的 将单位U2的地址转化为字符串的项目 的"ShallowGrave|FakeLife"类别中 存入实数:0
call StoreReal(udg_GC,(MissionKey),("LastFrame"),(((TimerGetElapsed(III)))*1.0))
//在游戏缓存udg_GC的 MissionKey项目 的"LastFrame"类别中 存入实数:全局计时器III流逝的时间
call StoreReal(udg_GC,(MissionKey),("FrameDamage"),((0)*1.0))
//在游戏缓存udg_GC的 MissionKey项目 的"FrameDamage"类别中 存入实数:0
set t=null
//清空变量t
set U1=null
//清空变量U1
set U2=null
//清空变量U2
endfunction
function BoZang_Check takes nothing returns boolean
//已完成
if GetSpellAbilityId()=='A10L' then
//如果 使用的技能是"薄葬" 则
call BoZang_Regist()
//执行函数BoZang_Regist()
endif
return false
//返回 假
endfunction
function BoZang_Init takes nothing returns nothing
//已完成
local trigger t=CreateTrigger()
//创建局部触发器变量t
call TriggerRegisterAllUnitEvent(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
//为触发器t注册事件:任意单位发动技能效果
call TriggerAddCondition(t,Condition(function BoZang_Check))
//为触发器t添加条件:BoZang_Check
set t=null
//清空变量t
endfunction
2011年04月16日 02点04分 8
level 7
膜拜数据帝。
2011年04月16日 02点04分 9
level 8
薄葬不是说让你的生命保持在这个水平,而是按照你伤的血量先加上比这个伤害+1的血,然后扣掉伤害造成血=1的现象
这么说就懂了吧。
2011年04月16日 02点04分 10
level 11
冰魂大的致死判定不会作用于薄葬单位,所以薄葬可以救。另外上面这位转载了3L的同学,59和现在已经隔了差不多三年了,虽然薄葬几乎没改动,但是新技能还是多了太多,没多大参考价值了
2011年04月16日 02点04分 11
level 10
我来看6楼
2011年04月16日 02点04分 12
level 6
我认为不能,个人认为冰魂的大是类似于FW的斩杀效果,不过我没有根据。
2011年04月16日 02点04分 13
level 11
冰魂大的致死伤害和斧王大基本是一样的,满足条件是给目标释放一个一亿点的物理伤害,因此可以无视几乎所有减伤免伤的效果,唯一一个例外,IF专门给冰魂大加了一条代码,不会作用于薄葬单位。
2011年04月16日 02点04分 14
level 8
简单的说,薄葬的作用机理是在你造成致死伤害的时候系统会加给上薄葬的那个人你打出的伤害,这样就能免疫致死伤害了,所以超过被薄葬者血量上限的一次性伤害就可以将其致死。
至于虚空的回到过去能躲斧王的大,个人表示非常牛
2011年04月16日 02点04分 15
躲不了吧,没见过虚空躲过,再说虚空在无光之盾下触发被动会回血,应该和薄葬·折光的机制差不多
2015年11月03日 12点11分
level 9
可以救,但是冰魂大持续时间比薄葬久,而且还不能加血,尤其是a帐大,除非自身回血够快,所以然并卵
2015年11月03日 13点11分 16
1