bloodtypec bloodtypec
hi,,,,,,,,
关注数: 37 粉丝数: 125 发帖数: 4,953 关注贴吧数: 50
[转]DotA全位移技能汇总 所谓位移技能,就是让非傀儡单位执行setunitX或者setunitY,setunitposition相关一类操作的技能 setunitposition有打断效果。setunitX或者setunitY没有,可以配合风暴之锤来做只对敌军有效的打断。 奇怪的是没有看到setunitXY,setunitX或者setunitY有潜在的死循环的危险,这个没有。 所有分身技能强行不算(不确定性强,暂时不研究) 分为主动和受动两类,既能主动也能受动的暂时放在受动类里。 以下为受动类位移技能 船长- 标记,返回 兽王 - 原始咆哮 两侧 牛头人酋长- 裂地者 山岭巨人 - 投掷 发条地精 - 能量齿轮 半人猛犸 - 两极反转 裂魂人 - 巨力重击 裂魂人 - 幽冥一击 屠夫 - 肉钩 复仇之魂 - 移形换位 光之守卫 - 致盲之光 风暴之灵 - 电子涡流 蝙蝠骑士 - 燃烧枷锁 蝙蝠骑士 - 烈焰破击 变体精灵 - 变体攻击 召唤师 - 超震声波 黑暗贤者 - 真空 谜团 - 黑洞 物品:推推棒 尸爆:尸体算是特殊单位,但也在讨论范围内 收集主动类中 白虎 - 虎跃 虚空 - 时空漫步 变体精灵 - 波浪形态 敌法,女王 - 闪烁 幻刺,混沌,隐刺 - 闪耀突袭 变体精灵 - 替换 幽鬼 - 降临 精灵龙 - 灵动之翼 先知 - 传送 圣骑士 - 忠诚考验 发条 - 发射钩爪 蚂蚁 - 时光倒流 沙王 - 掘地 地卜 - 忽悠 深渊 - 黑暗之门 风暴之灵 - 球形闪电 剑圣 - 无敌斩 回城,飞鞋 ,跳刀 另一种分法是按连续移动还是瞬间移动分类 瞬间移动的有 船长- 标记,返回 牛头人酋长- 裂地者 半人猛犸 - 两极反转 复仇之魂 - 移形换位 尸爆 敌法,女王 - 闪烁 幻刺,混沌,隐刺 - 闪耀突袭 变体精灵 - 替换 幽鬼 - 降临 精灵龙 - 灵动之翼 先知 - 传送 圣骑士 - 忠诚考验 蚂蚁 - 时光倒流 沙王 - 掘地 地卜 - 忽悠 深渊 - 黑暗之门 剑圣 - 无敌斩 回城,飞鞋 ,跳刀 变体精灵 - 变体攻击? 至少59d是瞬间移动setunitposition 连续类位移技能有 其中绿色表示血魔大完全有效,蓝色表示3级血魔大的伤害会减小,橙色表示2级血魔大的伤害也会减小,红色表示所有等级血魔大无伤害 兽王 - 原始咆哮 两侧 15,0.025*16次 速度600,位移240 山岭巨人 - 投掷 非匀速 发条地精 - 能量齿轮 每0.04秒移动12,21次 速度300,位移252 裂魂人 - 巨力重击 非匀速 前段速度200,位移70 裂魂人 - 幽冥一击 非匀速 前段速度200,位移70 屠夫 - 肉钩 比较匀速,屠夫静止时0.03秒移动40,共5+6*钩等级那么多节 速度1333,位移200+240X 光之守卫 - 致盲之光 每0.04秒移动25,0.4秒 速度625,位移250,貌似无打断 风暴之灵 - 电子涡流 每0.05秒移动5,10+10*等级次,如果下次拉到的点距离自己开始拉的位置<100,则拉到起始位置。 速度100,位移50+50X 蝙蝠骑士 - 燃烧枷锁 特殊 蝙蝠骑士 - 烈焰破击 未完成 变体精灵 - 波浪形态 每0.04秒50,[距离/50]+1次 速度1250,位移不定 召唤师 - 超震声波 非匀速 前速度200,位移=冰等级*50/3 黑暗贤者 - 真空 未完成 谜团 - 黑洞 每0.05秒向中心移动2 速度40,位移160 物品:推推棒 每0.03秒移动50,10次 速度1667,位移500 白虎 - 虎跃 每0.025秒移动30,共21,23,26,28次 速度1200,位移630,690,780,840 虚空 - 时空漫步 每0.025秒移动65 速度1300,位移不大于2665 发条 - 发射钩爪 次数=30+10*等级,每0.5/次数 秒触发一次,每次移动50 速度3000+1000X,位移1500+500X 风暴之灵 - 球形闪电 每0.04秒移动25+25*技能等级 速度625+625X 连续移动的位移技能显然更有研究价值。 参考[color =#0000ff][研究]Dota6.61能使敌人位移的技能 (共18个) 部分技能的详细解释 山岭巨人 - 投掷 在空中单位共被暂停1秒,每0.02秒移动一次。 如果目标单位在0.02秒内移动的距离超过1000,就以目标单位飞离前的地点为目标点,否则以目标单位为目标点。 设山岭和目标点的距离为D,角度为A,则每0.02秒设定一次被扔单位相对于山岭的极坐标:距离r=D /max{51-n,1},角度a=A n为已经移动的次数。 这基本上是一个越来越快,最后快的吓人的运动。 兽王 - 原始咆哮 把自己和目标连线,在这条线上分别以距离自已50,250,450的点为圆心做圆,半径为250,这些圆内符合条件的非建筑/非远古/非特殊单位除了目标都会产生位移。 在线右边的垂直于线向右移动,在线上后者左边的左移。没0.025秒移动15,共16次。 虚空 - 时空漫步 每0.025秒移动,当目标点和自己距离不大于55时,瞬移过去,否则每次移动65,但移动达到40次或者到达目的点时停止。 65*41=2665,因为只判定了一次角度a(单位与目标点的角度,所以只要到达不了目标点附近55码就可以了飞2665码,比如跳刀。这个应该算小bug) 裂魂人 - 巨力重击 裂魂人 - 幽冥一击 巨力重击 每0.01秒移动R,35次后每次移动R=R*0.98(指数衰减),R初始=2,共执行75+20*等级次。幽冥一击 同4级巨力重击效果。 召唤师 - 超震声波 次数=冰等级*25/3,当移动次数不大于次数/3时,移动R,否则移动R=R*0.98,R初始=6。每0.03秒执行一次。
[J演示]stone giant:tiny(dota6.41) //=========================================================================== // Trigger: Grow //=========================================================================== // OpenDota 6.41 deprotected by NETRAT and DioD // inspired by everyone who posted on forum threads and feedback page // based on OpenDota 6.32b, deprotected by DimonT, NETRAT and TheBloodiest // Objects used: // 'A0CY' = Grow (Stone Giant : Tiny) // 'R00E' = Grow,Melee Upgrade // DEBUG Trigger Number : 76 function GrowSpell takes nothing returns boolean return GetLearnedSkill()=='A0CY'and IsUnitIllusion(GetTriggerUnit())==false endfunction function GrowMain takes nothing returns nothing local unit lQD=GetUnit(H2Tx(GetTriggeringTrigger()),"Tiny") local integer lmZ=GetUnitAbilityLevel(lQD,'A0CY') if GetUnitState(lQD,UNIT_STATE_LIFE)>1 then call SetUnitScale(lQD,.5+.25*lmZ,.5+.25*lmZ,.5+.25*lmZ) endif endfunction function GrowSetting takes nothing returns nothing local trigger ltt local unit lQD=GetTriggerUnit() local integer lmZ=GetUnitAbilityLevel(lQD,'A0CY') call SetPlayerTechResearched(GetOwningPlayer(lQD),'R00E',lmZ) if lmZ==1 then set ltt=CreateTrigger() call TriggerAddAction(ltt,function GrowMain) call TriggerRegisterTimerEvent(ltt,2.,true) call SetHandle(H2Tx(ltt),"Tiny",lQD) call SetUnitScale(lQD,.5+.25*lmZ,.5+.25*lmZ,.5+.25*lmZ) endif endfunction function GrowInit takes nothing returns nothing local trigger ltt=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(ltt,EVENT_PLAYER_HERO_SKILL) call TriggerAddCondition(ltt,Condition(function GrowSpell)) call TriggerAddAction(ltt,function GrowSetting) endfunction function InitTrig_Grow takes nothing returns nothing endfunction //=========================================================================== // Trigger: Avalanche //=========================================================================== // OpenDota 6.41 deprotected by NETRAT and DioD // inspired by everyone who posted on forum threads and feedback page // based on OpenDota 6.32b, deprotected by DimonT, NETRAT and TheBloodiest // Objects used: // 'A0LL' = Avalanche (Stone Giant : Tiny) // 'e00E' = Spellcaster // 'A0KG' = Avalanche (effect) // DEBUG Trigger Number : 279 function Trig_Avalanche_Conditions takes nothing returns boolean if(not(GetSpellAbilityId()=='A0LL'))then return false endif return true endfunction function Trig_Avalanche_Actions takes nothing returns nothing local location liD=GetUnitLoc(GetTriggerUnit()) call CreateNUnitsAtLoc(1,'e00E',GetOwningPlayer(GetTriggerUnit()),liD,bj_UNIT_FACING) call RemoveLocation(liD) call SetUnitInvulnerable(bj_lastCreatedUnit,true) call ShowUnitHide(bj_lastCreatedUnit) call UnitApplyTimedLifeBJ(10.,'BTLF',bj_lastCreatedUnit) call UnitAddAbility(bj_lastCreatedUnit,'A0KG') call SetUnitAbilityLevelSwapped('A0KG',bj_lastCreatedUnit,GetUnitAbilityLevel(GetTriggerUnit(),'A0LL')) set liD=GetSpellTargetLoc() call IssuePointOrderByIdLoc(bj_lastCreatedUnit,OrderId("clusterrockets"),liD) call RemoveLocation(liD) endfunction function StartTrigger_Avalanche takes nothing returns nothing set gg_trg_Avalanche=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Avalanche,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_Avalanche,Condition(function Trig_Avalanche_Conditions)) call TriggerAddAction(gg_trg_Avalanche,function Trig_Avalanche_Actions) endfunction function InitTrig_Avalanche takes nothing returns nothing endfunction //=========================================================================== // Trigger: Toss //=========================================================================== // OpenDota 6.41 deprotected by NETRAT and DioD // inspired by everyone who posted on forum threads and feedback page // based on OpenDota 6.32b, deprotected by DimonT, NETRAT and TheBloodiest // Objects used: // 'A0BZ' = Toss (Stone Giant : Tiny) // 'n00I' = Chicken // 'e01H' = Crow // 'n00L' = Roshan // 'A04R' = Marker (Nether Ward 4,Lightning Bolter,Nether Ward 3,Nether Ward 2,Vengeance Death caster,...) // 'H00F' = Dragon Knight // 'H00E' = Dragon Knight // 'H00G' = Dragon Knight // 'A0CY' = Grow (Stone Giant : Tiny) // 'AEme' = Metamorphosis (Demon Hunter : Shadowsong,Shadowfury,Shadowstalker,Flameseeker,Darkweaver,...) // DEBUG Trigger Number : 280 function Trig_Toss_Conditions takes nothing returns boolean if(GetSpellAbilityId()!='A0BZ')then return false endif if GetUnitTypeId(GetSpellTargetUnit())=='n00I'or GetUnitTypeId(GetSpellTargetUnit())=='e01H'then return false endif if(GetOwningPlayer(GetSpellTargetUnit())==GetOwningPlayer(GetTriggerUnit()))then return false endif return true endfunction function TossFilter takes nothing returns boolean if(IsUnitType(GetFilterUnit(),UNIT_TYPE_ANCIENT))then return false endif if IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) then return false elseif IsUnitType(GetFilterUnit(),UNIT_TYPE_FLYING) then return false elseif GetFilterUnit()==GetSpellAbilityUnit()then return false elseif IsUnitDeadBJ(GetFilterUnit())then return false elseif IsUnitType(GetTriggerUnit(),UNIT_TYPE_ANCIENT) then return false elseif GetUnitTypeId(GetFilterUnit())=='n00L'then return false elseif IsUnitType(GetTriggerUnit(),UNIT_TYPE_GIANT) then return false elseif IsUnitVisible(GetFilterUnit(),GetOwningPlayer(GetSpellAbilityUnit()))==false then return false elseif GetUnitAbilityLevelSwapped('A04R',GetFilterUnit())!=0 then return false elseif(GetUnitTypeId(GetFilterUnit())=='H00F'or GetUnitTypeId(GetFilterUnit())=='H00E'or GetUnitTypeId(GetFilterUnit())=='H00G')then return false endif return true endfunction function TossDamage takes unit pWho,real pxx,real pyy,real pAOE,real pDamage,integer pSpellId returns nothing local group lVictims=CreateGroup() local unit lFirst local location lTMP call GroupEnumUnitsInRange(lVictims,pxx,pyy,pAOE,null) loop set lFirst=FirstOfGroup(lVictims) exitwhen lFirst==null if IsUnitEnemy(lFirst,GetOwningPlayer(pWho))and IsUnitDeadBJ(lFirst)==false and GetUnitAbilityLevel(lFirst,'A04R')==0 then if(IsUnitType(lFirst,UNIT_TYPE_STRUCTURE)==false)then call UnitDamageTargetBJ(pWho,lFirst,pDamage,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION) else call UnitDamageTargetBJ(pWho,lFirst,pDamage/3,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION) endif set lTMP=GetUnitLoc(lFirst) call DestroyEffect(AddSpellEffectByIdLoc(pSpellId,EFFECT_TYPE_CASTER,lTMP)) call DestroyEffect(AddSpellEffectByIdLoc(pSpellId,EFFECT_TYPE_CASTER,lTMP)) call DestroyEffect(AddSpellEffectByIdLoc(pSpellId,EFFECT_TYPE_CASTER,lTMP)) call RemoveLocation(lTMP) call GroupRemoveUnit(lVictims,lFirst) else call GroupRemoveUnit(lVictims,lFirst) endif endloop call GroupClear(lVictims) call DestroyGroup(lVictims) endfunction function TossMain takes nothing returns nothing local timer lMoveTimer=GetExpiredTimer() local string lTable=H2Tx(lMoveTimer) local integer lCount=GetInteger(lTable,"TossCounter") local real lRange=GetReal(lTable,"TossDistance") local real lAngle=GetReal(lTable,"TossAngle") local location lTarget=GetLocation(lTable,"TossTargetLoc") local location lStart=GetLocation(lTable,"TossSourceLoc") local unit lCaster=GetUnit(lTable,"Tiny") local unit lVictim=GetUnit(lTable,"TossSource") local real lHeight=(lCount-25)*(lCount-25) local real lSpeedMod=lRange*lCount/50-lRange local location lDest=PolarProjectionBJ(lTarget,lSpeedMod,lAngle) if(lCount<51)then call SetUnitPositionLoc(lVictim,lDest) call SetUnitFlyHeight(lVictim,775-lHeight,0) set lCount=lCount+1 if(GetRandomInt(1,4)==2)then call DestroyEffect(AddSpecialEffectTargetUnitBJ("origin",lVictim,"Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl")) endif endif if(lCount>50)then call SetUnitFlyHeight(lVictim,GetUnitDefaultFlyHeight(lVictim),0) call PauseUnit(lVictim,false) call SetUnitPathing(lVictim,true) call TerrainDeformationRippleBJ(.2,true,lTarget,1.,300.,96.,1,64.) if IsUnitAlly(lVictim,GetOwningPlayer(lCaster))then call UnitDamageTargetBJ(lCaster,lVictim,.2*75*GetUnitAbilityLevel(lCaster,'A0BZ'),ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION) else call UnitDamageTargetBJ(lCaster,lVictim,(.2+.15*GetUnitAbilityLevel(lCaster,'A0CY'))*75*GetUnitAbilityLevel(lCaster,'A0BZ'),ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION) endif call TossDamage(lCaster,GetLocationX(lTarget),GetLocationY(lTarget),300,75.*I2R(GetUnitAbilityLevelSwapped('A0BZ',lCaster)),'A0BZ') call EnumDestructablesInCircleBJ(300,lTarget,function KillDestructableEnum) call PauseTimer(GetExpiredTimer()) call PolledWait(.01) call FastFlush(lTable) call DestroyTimer(GetExpiredTimer()) call RemoveLocation(lTarget) call RemoveLocation(lStart) endif call SetInteger(lTable,"TossCounter",lCount) call RemoveLocation(lDest) endfunction function Trig_Toss_Actions takes nothing returns nothing local group lNearCaster=CreateGroup() local timer lMoveTimer local unit lCaster=GetTriggerUnit() local unit lVictim local location lTarget local location lStart local integer lCounter local real lRange local real lAngle local string lf5 call GroupEnumUnitsInRange(lNearCaster,GetUnitX(lCaster),GetUnitY(lCaster),275,Condition(function TossFilter)) set lVictim=GroupPickRandomUnit(lNearCaster) call DestroyGroup(lNearCaster) set lTarget=GetUnitLoc(GetSpellTargetUnit()) set lStart=GetUnitLoc(lVictim) set lCounter=1 set lRange=DistanceBetweenPoints(lStart,lTarget) set lAngle=AngleBetweenPoints(lStart,lTarget) if(lVictim!=null and GetUnitTypeId(lVictim)!='n00I'and GetUnitTypeId(lVictim)!='e01H'and GetOwningPlayer(GetSpellTargetUnit())!=GetOwningPlayer(lCaster))then call SetUnitAnimationByIndex(lCaster,4) call PauseUnit(lVictim,true) call SetUnitPathing(lVictim,false) call UnitAddAbility(lVictim,'AEme') call UnitRemoveAbility(lVictim,'AEme') set lMoveTimer=CreateTimer() set lf5=H2Tx(lMoveTimer) call SetHandle(lf5,"Tiny",lCaster) call SetHandle(lf5,"TossSource",lVictim) call SetHandle(lf5,"TossTargetLoc",lTarget) call SetHandle(lf5,"TossSourceLoc",lStart) call SetInteger(lf5,"TossCounter",lCounter) call SetReal(lf5,"TossDistance",lRange) call SetReal(lf5,"TossAngle",lAngle) call TimerStart(lMoveTimer,.02,true,function TossMain) endif endfunction function StartTrigger_Toss takes nothing returns nothing set gg_trg_Toss=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Toss,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_Toss,Condition(function Trig_Toss_Conditions)) call TriggerAddAction(gg_trg_Toss,function Trig_Toss_Actions) endfunction function InitTrig_Toss takes nothing returns nothing endfunction //=========================================================================== // Trigger: Craggy_Exterior //=========================================================================== // OpenDota 6.41 deprotected by NETRAT and DioD // inspired by everyone who posted on forum threads and feedback page // based on OpenDota 6.32b, deprotected by DimonT, NETRAT and TheBloodiest // Objects used: // 'A0BU' = Craggy Exterior (Stone Giant : Tiny) // 'e00E' = Spellcaster // 'A0BV' = Craggy damage // DEBUG Trigger Number : 281 function Trig_Craggy_Exterior_Conditions takes nothing returns boolean if(not(GetUnitAbilityLevelSwapped('A0BU',GetTriggerUnit())>0))then return false endif if(not(IsUnitType(GetAttacker(),UNIT_TYPE_MELEE_ATTACKER)))then return false endif return true endfunction function Trig_Craggy_Exterior_Actions takes nothing returns nothing local location liD=GetUnitLoc(GetTriggerUnit()) if(GetRandomInt(1,100)<=(GetUnitAbilityLevelSwapped('A0BU',GetTriggerUnit())*6))then call CreateNUnitsAtLocFacingLocBJ(1,'e00E',GetOwningPlayer(GetTriggerUnit()),liD,GetUnitLoc(GetAttacker())) call UnitAddAbility(bj_lastCreatedUnit,'A0BV') call SetUnitAbilityLevelSwapped('A0BV',bj_lastCreatedUnit,GetUnitAbilityLevelSwapped('A0BU',GetTriggerUnit())) call IssueTargetOrderById(bj_lastCreatedUnit,OrderId("thunderbolt"),GetAttacker()) endif call RemoveLocation(liD) endfunction function StartTrigger_Craggy_Exterior takes nothing returns nothing set gg_trg_Craggy_Exterior=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Craggy_Exterior,EVENT_PLAYER_UNIT_ATTACKED) call TriggerAddCondition(gg_trg_Craggy_Exterior,Condition(function Trig_Craggy_Exterior_Conditions)) call TriggerAddAction(gg_trg_Craggy_Exterior,function Trig_Craggy_Exterior_Actions) endfunction function InitTrig_Craggy_Exterior takes nothing returns nothing endfunction 为҉什҉么҉我҉感҉觉҉我҉电҉脑҉上҉的҉字҉都҉是҉花҉屏҉的҉呢҉?҉为҉什҉么҉感҉觉҉电҉脑҉上҉的҉字҉都҉是҉雾҉茫҉茫҉的҉?҉难҉道҉是҉我҉眼҉睛҉花҉了҉?҉还҉是҉我҉电҉脑҉的҉显҉示҉屏҉坏҉掉҉了҉?
1 下一页