请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 49996|回复: 53

[翻译版之二]魔兽争霸III技能指南

[复制链接]
发表于 2008-2-27 07:12:56 | 显示全部楼层 |阅读模式
    Renee的前言:

    这是Wc3c的PitzerMike在06年3月整理的一份技能指南,即使是现在看来也相当有用,我曾说过只要看完这文你基本就直接变高人,可以去外头随便找个we网站混膜拜当饭吃。

    原文链接:
    http://www.wc3campaigns.net/showthread.php?t=81742

    我当时曾翻译过此文,但是由于不幸GA服务器回档,导致全没,我自己又没有存稿。所以一直很气馁,如今二年之后,又重新回来翻译了这篇文章,主要还是由于看到Ors的转载的关系。



    由于个人习惯原因,文中出现的技能名和您的we中技能名可能不同,我是按照wow的技能译名来翻译的,不过鉴于每个技能都会说明其ID,因此这应该不会造成歧义。

    原文也存在许多根本性错误和过时信息,这在译文中都已经更正,所以如果您在观看过程中发现原文和译文的不同之处,请不必在意。

    另外,如果您有自己的技能小窍门,也请回帖补充。


    好了,我们开始吧。




魔兽争霸III技能指南





这是一份有关魔兽争霸III对象编辑器当中小秘密的简介。有众所周知的,也有极为冷僻的。不过这些东西大部分并非我的个人发现,而是整个网站集体智慧的结晶。每个在Wc3c发帖的人都为这指南出了份力,我所做的仅仅是整理工作而已。对于文中可能出现的拼写/语法问题还请大家能谅解,如果您在其中发现什么描述性错误或者有什么要补充请回帖告知。

BTW,您最好使用火狐来浏览本教程,因为在IE下观看本页面会出现很长的横向滚动条……





希望这能给我们网站帮上点忙,这样即使我们失去了宝贵的会员,也至少能保住这些知识。
 楼主| 发表于 2008-2-27 07:26:15 | 显示全部楼层
技能:

更新:2012年12月12日。

Aetl(虚无):这是一个隐藏技能,添加给单位后可以立刻使目标进入虚无状态。而不需要用一个马甲单位去给目标施加放逐效果。它是个有图标的被动技能,所以添加后会显示图标,但是你可以用下文的被动技能魔法书隐藏法来隐藏它。注意不要把它跟主动变身技能Aelf(虚无形态)搞混了。



ANcl(引导):这个技能本身就是为了作为假技能而存在的,在游戏中没有任何实际效果,却可以引发技能事件。你可将其设定为单位目标、点目标、AOE、单位、点目标或者干脆无目标技能,是否显示图标以及是否显示AOE范围。此外另有还拥有物理技能终极技能单独施法三个选项。还能通过设置引导时间禁止其他技能这两项来改变整个引导行为,后者可令单位在引导时控制栏按钮暂时消失。你也可以改变施法者和目标身上的特效图像,唯一遗憾的是无法添加buff。另外,你还可以更改该技能的基础命令ID,这样就可以使该技能的多个的副本在同一个单位身上互不干扰地运作。当然,法术的实际效果还得靠你的触发来实现。
[jass]
function Channel_Conditions takes nothing returns boolean
  return GetSpellAbilityId() == <你的自定义引导技能id>
endfunction

function Channel_Actions takes nothing returns nothing
endfunction

function Channel takes nothing returns nothing
  local trigger t = CreateTrigger()
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST)
  call TriggerAddCondition(t, Condition(function Channel_Conditions))
  call TriggerAddAction(t, function Channel_Actions)
endfunction
[/jass]
1.18版本以后,此技能在法术书中也能正确地生效,并能正常进行工程升级。唯一潜在的问题是该法术可被致昏技能打断。要想绕过此问题只有靠ANab(强酸炸弹)之类技能来模拟昏技。


Amrf(乌鸦形态):允许你改变地面单位的飞行高度
[jass]
call UnitAddAbility(u, 'Amrf')
call UnitRemoveAbility(u, 'Amrf')
[/jass]
添加删除该技能后,你就能用SetUnitFlyHeight()来调整单位u的高度,即使它是个地面单位,但是对建筑无效。


Sca1(混乱):原文描述有误,so暂时pass


Aloc(蝗虫):拥有蝗虫技能的单位无法被选择、无法成为目标并忽略一切地形限制。这意味着你只能通过触发来控制它。它的头顶也不会显示生命条。就目前版本,靠UnitRemoveAbility(u, 'Aloc')是无法正确消除蝗虫效果的。如果你在添加蝗虫以后添加混乱技能,单位会变得无法选择却仍能成为目标并且遵守地形限制。一种消除蝗虫技能的方案是先隐藏单位再删除技能,然后再重新显示单位,不过这并不完美,存在的问题是你无法点选单位,而只能框选。
[jass]
function UnitRemoveLocust takes unit u returns nothing
    local boolean backup = not IsUnitHidden(u)
    call ShowUnit(u, false)
    call UnitRemoveAbility(u, 'Aloc')
    call ShowUnit(u, backup)
endfunction
[/jass]

Amec(机械小动物):通过这个技能召唤的单位,在非控制者(包括非共享控制的盟友)看来就像是中立友善的单位。唯一的区别是,当敌人右键点击该单位时发布的是攻击命令。你无法更改此技能召唤的单位类型,因为它只会在当前地形的小动物中随机选择,不过你可以响应召唤事件,然后给它来个变身。
[jass]
function Transform_Conditions takes nothing returns boolean
  return GetUnitTypeId(GetSummoningUnit()) == <unit type that can cast mechanical critter>
endfunction

function Transform_Actions takes nothing returns nothing
  call DestroyEffect(AddSpecialEffect("Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl", GetUnitX(GetSummonedUnit()), GetUnitY(GetSummonedUnit())))
  call UnitAddAbility(GetSummonedUnit(), <chaos ability id>)
endfunction

function Transform takes nothing returns nothing
  local trigger t = CreateTrigger()
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SUMMON)
  call TriggerAddCondition(t, Condition(function Transform_Conditions))
  call TriggerAddAction(t, function Transform_Actions)
endfunction
[/jass]
当然你也可以更改单位的所属种族,然后将其加入当前地形的小动物列表,效果一样。

AId1, AItg, AIlf, AImb, AIsi, Aamk, AIsr, AIdd, AIas, AIms, Arel, AIrm, AIcs(护甲加成,攻击加成,生命加成,法力加成,视野加成,属性加成,符文护腕,物品防御,攻速加成,速度加成,生命恢复,法力恢复,物品暴击):这些技能可以改变单位的护甲、攻击、生命、法力、视野、敏捷、力量、智力、魔抗、反伤、免伤、攻速、移速、回血、回魔、暴击和闪避的加成数值。幸运的是这些技能的效果都能叠加,因此通过位标识技术,你就可以只靠有限几个技能副本来组合出任意加成值。具体可以参看Weaaddar和Blade两人的加成模板系统。所有的技能都能在负值下奏效,不过视野加成这技能有点例外,如果单位身上拥有能侦测隐形的技能,它就无法减小视野。'AIdd’和'Aegr'(艾露恩的赐福)这两个技能拥有相同的数据域:魔法抵抗伤害削减、和反弹,可它们的攻击速度因子移动速度因子两项没有实际效果。一个特殊的bug允许你不添加任何永久技能就能改变一个单位的生命和法力上限。方法很简单:做一个自定义的AIlf(生命加成)或AImb(法力加成)技能,然后将其级数设为1级以上,1级的加成值为0,而2级的加成值设为你目的值的负数。比方说你想加200就设为-200。现在,用UnitAddAbility()添加该技能,再用SetUnitAbilityLevel()将其等级设为2。这些技能存在bug,因此你会发现没有实际加成。然后你立刻用UnitRemoveAbility()删除这个技能。这次war3会试图一并取消这-200的加成(虽然因为bug的存在,这个值之前并没有加上),结果是,单位凭空增加了200的生命/法力上限。至此,你已成功地不添加任何永久技能就改变了单位的生命/法力值。


ANvc(火山):该技能是唯一可以创建可破坏物/装饰物的技能,也许会有点用途吧。


Absk, Adef, Amdf, ANms, AEim, AHds(狂暴,防御,魔法防御,法力盾,献祭,圣盾术):这些技能使用时不会打断施法者的当前命令。后五个可以切换打开和关闭状态(前提是在游戏常数中开启此功能).将它们的效果值设为0,并捕捉开启和关闭命令就可以简单地自定义他们。当然如果你不希望显示buff,那么捕捉到命令后记得用UnitRemoveAbility()删除之。不过,这些技能在被删除时会发布两次关闭命令,因此记得加上简单的规避措施来避免捕捉到这些事件。
[jass]
function WasUnOrder takes nothing returns boolean
  return OrderId2String(GetIssuedOrderId()) == "undefend" or OrderId2String(GetIssuedOrderId()) == "magicundefend" or OrderId2String(GetIssuedOrderId()) == "unmanashield" or OrderId2String(GetIssuedOrderId()) == "unimmolation" or OrderId2String(GetIssuedOrderId()) == "undivineshield"
endfunction


function Defense_Condition takes nothing returns boolean
  return GetTriggerEventId() != EVENT_PLAYER_UNIT_ISSUED_ORDER or ((OrderId2String(GetIssuedOrderId()) == "defend" or OrderId2String(GetIssuedOrderId()) == "undefend") and GetUnitAbilityLevel(GetOrderedUnit(), 'Adef') > 0 and GetUnitState(GetOrderedUnit(), UNIT_STATE_LIFE) > 0)
endfunction

function TriggerRegisterDefenseEvent takes trigger t returns triggercondition
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_ORDER)
  return TriggerAddCondition(t, Condition(function Defense_Condition))
endfunction


function MagicDefense_Condition takes nothing returns boolean
  return GetTriggerEventId() != EVENT_PLAYER_UNIT_ISSUED_ORDER or ((OrderId2String(GetIssuedOrderId()) == "magicdefend" or OrderId2String(GetIssuedOrderId()) == "magicundefend") and GetUnitAbilityLevel(GetOrderedUnit(), 'Amdf') > 0 and GetUnitState(GetOrderedUnit(), UNIT_STATE_LIFE) > 0)
endfunction

function TriggerRegisterMagicDefenseEvent takes trigger t returns triggercondition
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_ORDER)
  return TriggerAddCondition(t, Condition(function MagicDefense_Condition))
endfunction


function ManaShield_Condition takes nothing returns boolean
  return GetTriggerEventId() != EVENT_PLAYER_UNIT_ISSUED_ORDER or ((OrderId2String(GetIssuedOrderId()) == "manashield" or OrderId2String(GetIssuedOrderId()) == "unmanashield") and GetUnitAbilityLevel(GetOrderedUnit(), 'ANms') > 0 and GetUnitState(GetOrderedUnit(), UNIT_STATE_LIFE) > 0)
endfunction

function TriggerRegisterManaShieldEvent takes trigger t returns triggercondition
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_ORDER)
  return TriggerAddCondition(t, Condition(function ManaShield_Condition))
endfunction


function Immolation_Condition takes nothing returns boolean
  return GetTriggerEventId() != EVENT_PLAYER_UNIT_ISSUED_ORDER or ((OrderId2String(GetIssuedOrderId()) == "immolation" or OrderId2String(GetIssuedOrderId()) == "unimmolation") and GetUnitAbilityLevel(GetOrderedUnit(), 'AEim') > 0 and GetUnitState(GetOrderedUnit(), UNIT_STATE_LIFE) > 0)
endfunction

function TriggerRegisterImmolationEvent takes trigger t returns triggercondition
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_ORDER)
  return TriggerAddCondition(t, Condition(function Immolation_Condition))
endfunction


function DivineShield_Condition takes nothing returns boolean
  return GetTriggerEventId() != EVENT_PLAYER_UNIT_ISSUED_ORDER or ((OrderId2String(GetIssuedOrderId()) == "divineshield" or OrderId2String(GetIssuedOrderId()) == "undivineshield") and GetUnitAbilityLevel(GetOrderedUnit(), 'AHds') > 0 and GetUnitState(GetOrderedUnit(), UNIT_STATE_LIFE) > 0)
endfunction

function TriggerRegisterDivineShieldEvent takes trigger t returns triggercondition
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_ORDER)
  return TriggerAddCondition(t, Condition(function DivineShield_Condition))
endfunction
[/jass]
由于这里用到的判断条件所限,这些事件不能和其它无目标事件放在一起,但此外的事件可以。你也需要根据实际状况更改WasUnOrder()函数的内容。第一个技能'Absk'不用考虑这些情况,因为它本身就不存在关闭状态。如果你不在意施法动画的话,有一个简单的法子可以使几乎所有技能都不打断当前命令——将施法单位的图像 – 动画施放点图像 – 动画回复点都设为0,这样单位就会立即施法,然后继续执行之前的命令。

Arpl, Arpm, Arpb, Afzy, Apsh, Amel, Arai, AUcb (补充生命,补充法力,补充生命和法力,狂热,相位变换,尸控术,腐尸甲虫):这些技能都能自动施放,而且左键点击就能使用,无需指定目标。可以用于制作左键和右键点击效果不同的按钮。用技能施放命令可以捕捉左键点击,用开启和关闭自动施放命令可以捕捉右键点击。当然最好在自定义界面中去掉那个自动施法的金色边框。前三个技能的效果能简单地移除,将持续时间设为0.01也能将'Afzy'无效化。然而你无法实际消除'Apsh'的相位变换效果。后3个技能需要附近有尸体才能点击。你可以将绞肉车的创建和运载尸体技能放到一本隐藏的魔法书里添加给单位,这样就可以提供所需的尸体了。

Apit, Aneu, Aall, Asid(购买物品,选择英雄,盟友商店,出售物品):有机地组合这些技能能让你的商店像奥法宝库一样只对自己人出售物品。区别是AddItemToStock()函数依然会奏效。而RemoveItemFromStock()只对被AddItemToStock()添加的物品有效,因此你得在对象编辑器中清空你商店的制造物品和出售物品两栏,然后在地图初始化时用AddItemToStock()来实现添加物品。添加和删除所售单位的做法亦类似,把'Asid' 换成 'Asud'即可。删除'Aall'的话,商店就向所有玩家公开营业。顺便,'Asud'技能会让所有玩家(包括敌方)都看得到这个商店。有'Aneu'或'Aall'技能的单位可用于共享技能和物品,即使敌人也可以使用该单位的所有技能和物品(可以在该技能的允许目标中更改)。

Ablo(嗜血术):增大目标单位的体型。一般来说你可以用一个隐藏单位来施放这个技能。将该技能持续时间设为0会时体形变更效果永久化。用触发删除嗜血buff就可以恢复体形。

Apiv, Agho, Aeth(永久隐身,鬼魂,可见的鬼魂):这些技能会令单位隐身,拥有永久隐身的单位会在攻击和施法时暂时失去隐身效果。因此这个技能可被用来制作先知的三级幽魂狼之类的单位。而拥有鬼魂技能的单位在攻击和施法时仍能保持隐身,拥有2个永久隐形的话也有相同效果(原文有误)。另外,Aeye(侦查结界)技能会自动给召唤出来的单位带上永久隐形。

Abur, Abdt (潜地,潜地侦测):潜地的单位和隐身差不多,潜地侦测这个技能有个数据域理论上能区分地侦测隐身单位和潜地单位,但实际上没有区别,看来暴雪并没有真正区分过潜地和隐形的隐身效果差别。

Aasl(龙卷风减速光环):该光环是用来添加无实际效果的buff的绝好技能。只要把允许目标设为自身,然后将数据效果设为0.此技能还不显示技能图标。最妙的是,当单位身上拥有一个以上这种技能时,它们的buff图标会叠加。鉴于'Aasl'本质上是个负面光环,因此其buff的提示是红色的,不过你可以在它名字上加颜色代码来改变这一点。比方说|cffff0000我是个坏蛋红色Buff|r 或是 |cff00ff00我是绿色的好人Buff|r.如果你觉得这技能不合意,也可以用其它光环,将它们放进被禁用的魔法书里就能隐藏图标。

ANpi(永久献祭):关于这个技能,作者说了许多,大意是可以把它加到目标单位身上来做个持续耗费对方魔法和生命的debuff技能。不过作者没有考虑到伤害源的问题,因此整段pass.当然,实际上只有持续耗费生命的效果需要考虑伤害源问题。

ACnr(生命恢复光环):一个可令附加特效随单位一起改换玩家颜色的不错技能。将生命恢复量设0允许目标设为自身。然后然后将你想添加的效果模型放到图像 - 目标一栏。这样被附加的特效模型会自动带上所属单位的玩家颜色。在有变身技能的情况下也能正常使用。假如出现突发情况导致颜色还是出错,可以用下面的简单代码来修正:
[jass]
call SetUnitColor(<unit>, GetPlayerColor(GetOwningPlayer(<unit>)))
[/jass]
Aspi(尖刺路障):一个可以给单位附加特效又没什么副作用的技能。比Asph(球体)来得可靠多了。

Atwa(龙卷风游荡者):有这个技能的单位能比一般单位更加贴身地跟随目标。你得将该技能的影响范围设到最大。这样,如果此单位没有攻击能力,就可以用右键指令命令它近距离跟随目标了。

AIbf(建造微型农场):允许单位建造建筑,建造者甚至可以没有修理技能(或者其他什么乱七八糟的技能)。你也可以在这个技能中设置建造所耗的时间。

Aher(英雄):这个技能的图像 – 施法者一栏指定了所有英雄升级时候的特效。当然该技能默认是看不到的,你需要改动AbilityData.slk来显示它(像DDWE这种扩展编辑器里就默认有了),做法是将文件中该技能的useInEditor标记为1.

Amov(移动):移动技能指定了所有单位进入传送门时显示的特效。(当然它本身也是单位能移动的必要条件,如果删除这个技能单位就无法移动。这个很奇怪地没提到。)

AImo(怪兽诱捕):这技能很有意思,会引诱指定范围内的野怪。你也可以设置它的引诱间隔。

ANeg(工程升级):工程升级的出现终于解决了触发所添加的技能无法学习的问题。它允许我们使用触发更改技能学习界面。想要达到这一效果,英雄需要拥有能被替换掉的替身技能。这种占位技能必须和所需添加的技能拥有相同的级数,因此你一般需要准备两个,一个用来替换一般技能,另一个用来替换终极技能。我一般拿Arpb(补充生命和法力)做占位技能的模板,不过你用其它的也无所谓。将占位技能级数设为3,跳级设为2然后重复地填进英雄的英雄技能一栏。当然记得要在地图初始化时禁用它们,免得他们被玩家看到了。然后你就能用工程升级来将他们替换成想要的技能,当工程升级被添加时,其数据 - 技能升级一栏所指定的技能会被依次逐一替换,而被删除时,就会反着换回来。因此如果你不想看到工程升级的图标的话,这里有一个取巧的手段。如果你想将技能A换成B,那么就在工程升级的数据栏中反过来填B,A.这样,当你添加这个工程升级的时候会毫无效果,因为B不存在,而当你删除的时候,A技能就会被换成B,这样你就可以不添加任何永久性技能来完成这个替换了。当技能被替换成功后,他们就可在学习界学习。注意这法子只能正确替换未被学过的技能。用在学过的技能或普通技能上的话,被替换掉的只有原技能的施法距离、作用范围、持续时间、图标、允许目标等等数据,而不会真正改变改技能的核心。比方说你把光环替换为治疗技能会改变它的图标、提示等值,但它终究还是个光环。如果被替换的技能处于禁用状态,结果只会更加古怪而不可预测。另外工程升级也只对英雄有效,擅自添加给普通单位会导致游戏崩溃。如果你只想工程升级一个技能,可以将其它3个技能升级数据域改成单位永远也不会有的技能。此外工程升级在级数大于3时无法正确应用<dataA5>之类的动态提示。而且其默认buff也无法替换,不过这不是什么问题,因为它根本不显示。

Aspb(魔法书):魔法书基本上就是一个容器,可以装下11种其它技能。它可以装主动技能、自动施放技能、被动技能以至英雄技能。第一点好处是即使它被禁用,其中的被动技能也能正常生效。因此它可以用来隐藏任何被动技能,帮你节省按钮栏位。另一好处是你可以在运行时添加和删除魔法书中的技能。方法是把想添加的技能放进另一本魔法书内添加给单位,然后将第二本魔法书禁用。只要两本魔法书的命令ID相同,后一本魔法书中的技能就会显示到前一本里。给每一个技能准备一本魔法书就能实现动态添加了。该技能还有一个优点是,里面的技能可以通过英雄的学习界面来升级。唯一的缺点是它们一开始就是1级而非0级。不过你可以在英雄学会第1级以后再添加魔法书给他。
[jass]
function Learn_Actions takes nothing returns nothing
  if GetLearnedSkillLevel() == 1 and GetLearnedSkill() == <hero skill> then
    call UnitRemoveAbility(GetTriggerUnit(), GetLearnedSkill())
    call UnitAddAbility(GetLearningUnit(), <adder spellbook ability>)
    call MakeUnitAbilityPermanent(u, <adder spellbook ability>)
    call MakeUnitAbilityPermanent(u, <ability inside spellbook>)
  endif
endfunction

function Learn takes nothing returns nothing
  local trigger t = CreateTrigger()
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_HERO_SKILL)
  call TriggerAddAction(t, function Learn_Actions)
endfunction
[/jass]
当然,用于添加技能的魔法书必须一开始就对玩家禁用。另外要将魔法书的最少技能数和最大技能数设为一样来避免bug。不过这里还是存在一些小问题。你似乎无法用触发来使用书中的主动技能。而且在运行时被添加的技能不够法力施放也不会使整本书图标变蓝。不过这都是些小瑕疵,没什么大不了的。

Abun(运送货物(兽人地洞)):这个技能添加给单位后会令其失去攻击能力,连攻击图标和快捷键都会消失。然后删除这个技能又会恢复其攻击能力。和宝珠类技能一起使用的话就能彻底地开关单位的可用攻击方式了。

AIdf, AIll, AIsb(黑箭物品,新闪电宝珠,减速宝珠):这些技能都带有数据 - 影响技能数据栏。可指定任何一个单位目标技能作为影响技能。单位的每次攻击都有可能在目标身上施加该影响技能,其几率可自行指定。如果将几率设为100%,那么每次攻击都会生效,而且攻击不会miss.不过这类技能一旦添加给单位,其对应的影响技能的图标会出现在单位的控制栏,而且像被动技能一样处于无法点击状态。可惜的是似乎没有什么好方法去除这个图标。你也可以放个无图标的引导技能来做影响技能,可这样就没有实际的效果了。如果你不想启用近战单位的对空能力,就把数据 – 允许攻击索引一项设为0.目前有一个bug,单位自动攻击时不会给目标施加影响技能,即使几率是100%,你可以通过触发器来解决此问题。宝珠类技能还可以用于附加特效、变更单位投射图像和启用攻击方式。至于说箭矢类技能,不管你怎么改,'ANia'(焚化箭矢)永远使用'ANic'(焚化)的默认值,因此一张地图上一般只能拥有一个这种技能了。

Aroc(弹幕):弹幕允许单位同时攻击多个目标,因此可以用作多重射击技能。每个目标都会受到单位的基础攻击伤害及该技能中设定的附加伤害。实际攻击的目标数为数据 - 最大目标数加1.投射图像数据域中填写的模型可以多于一种,这样就会覆盖单位自身的投射图像,而每次攻击时都会在此列表中随即选择一种投射图像。影响范围一项能改变附加攻击的范围,不过不会影响到主箭矢,只会影响到附加的箭矢。如果你不想限制伤害量,将数据 - 最大总伤害设为0即可。可惜的是,弹幕无法和其他攻击附加效果正确叠加。大部分此类技能都会将弹幕效果无效化,比如所有的自动施放箭矢,只有AHfa(灼热之箭)和一些宝珠技能是例外。宝珠类技能只有在其影响技能发动的时候才会令弹幕无效化。其他所有技能,像暴击、减速毒药、冰冻气息、闪电攻击、火油等等能和弹幕叠加,不过通常只对主箭矢的目标生效。而像攻击加成、攻速加成之类基础附魔效果却能对所有目标生效。AHfa(灼热之箭)尤其特别。它是唯一能和弹幕叠加的箭矢类技能,而且当它开启自动攻击时甚至会令一个不兼容的宝珠技能无效化,而重新激活弹幕效果,你可以用这特性来制作能开关的多重箭。

Apxf(凤凰之火):这个技能也可以给单位多重射击能力,不过伤害不基于单位的攻击力。它由自己的冷却时间、投射图像、伤害和持续伤害,而且会对范围内的敌人自动施放。其持续时间数据域决定了它持续伤害的持续时间和攻击同一个目标的间隔。如果有需要,你可以用物品来添加多个相同的凤凰之火技能,它们能同时生效。

ANcs(集束导弹):如果你想制作一个重复投掷箭矢的技能,尤其是AOE技能,可以用集束导弹,只要设好每波的导弹数和波数就好。

ANab, AEsh(强酸炸弹,暗影突袭):强酸炸弹极为通用,而且可能是最好的直接伤害技能模板。它拥有许多不错的特性,可以降低移动速度]攻击速度和护甲、还有直接伤害效果、持续伤害效果、buff、投射图像——而且如果有必要,所有这些效果都能简单地被移除。而且它不会给目标单位附加昏迷之类的麻烦效果。暗影突袭的数据域和强酸炸弹差不多,不过少了护甲削减一项,此外它的每次伤害会以飘字形式显示在目标的头顶。用一个空buff可以去除这个花哨效果。

AItg(攻击加成):一般来说你会需要将这技能的攻击加成设为-1然后添加给隐藏单位来无伤害地施放其攻击附加效果。方法是将施法者基本攻击力设为0,攻击色子数设1,色子面数设0,然后将你的自定义攻击加成技能添加给隐藏施法者。这样施法者不会造成任何伤害,但攻击附加技能依然会生效。这法子可以用于添加火油、冰冻气息、减速毒药之类技能的buff。顺便,负值的攻击力是无法治疗目标的(原文说反了)。

AOcr(暴击):如果你不知道单位的实际攻击力却希望将其攻击力变为0,那么将这个技能几率设为100,伤害倍率设为负数就能达到目的。而且由于每次伤害都是0,它甚至不会显示红色的伤害飘字。

AOcl, Amgl(闪电链,月刃):闪电链是个不错的带闪电效果的纯伤害技能模板,也可以用作导弹弹跳的技能。你可以调整闪电链的目标数量和伤害削减因子。至于月刃的作用方式则完全不同。月刃技能实际上除了提供一个被动图标外毫无效果。实际的弹射加成来自于科技。

Ahrl(食尸鬼伐木):可以用于判断某个可破坏物是否是树。
[jass]
function IsDestructableTree takes destructable d returns boolean
  local boolean i = IsDestructableInvulnerable(d)
  local unit u = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), <invisible caster>,GetWidgetX(d), GetWidgetY(d), 0)
  local boolean result = false
  call UnitAddAbility(u, 'Ahrl')
  if i then
    call SetDestructableInvulnerable(d, false)
  endif
  set result = IssueTargetOrder(u, "harvest", d)
  call RemoveUnit(u)
  if i then
    call SetDestructableInvulnerable(d, true)
  endif
  return result
endfunction
[/jass]

AIgu, AIgf(夜视雕文,强固雕文):使用这两种技能书可以将指定升级应用于英雄所在玩家(下面一大段错误论断,pass了)

Acoa, Acoh, Adec(骑乘角鹰,分离):写在这里纯粹为了提醒您这个技能的存在。自然它可以用于融合2个单位,也可以单纯地作为某个需要一对不同类型的单位合力使用的技能的模板,只要捕捉技能施放事件然后打断之即可。

Awarp(传送门):传送门技能也可以在运行时被添加给单位。然后你就可以用WaygateSetDestination()函数和WaygateActivate()函数来设置传送属性。你也可以用路径阻断器来阻止比方说飞行单位使用传送门。想要更改传送特效你要改的是Amov(移动)技能。
[jass]
function SetupWaygate takes unit u, unit target returns nothing
  call UnitAddAbility(u, <waygate ability>)
  call UnitAddAbility(u, 'Aivs')
  call UnitAddAbility(u, 'Agho')
  call UnitAddAbility(u, 'Aloc')
  call SetUnitScale(u, 0.01, 0.01, 0.01)
  call WaygateSetDestinationLocBJ(u, PolarProjectionBJ(GetUnitLoc(target), 96, AngleBetweenPoints(GetUnitLoc(u), GetUnitLoc(target))))
  call WaygateActivate(u, true)
endfunction

function ConnectRects takes rect left, rect right returns nothing
  local unit lu = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), 'ncop', GetRectCenterX(left), GetRectCenterY(left), 0)
  local unit ru = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE), 'ncop', GetRectCenterX(right), GetRectCenterY(right), 0)
  call SetupWaygate(lu, ru)
  call SetupWaygate(ru, lu)
endfunction
[/jass]

点评

应该是因为0速单位问题 设置单位位置以后或以前(没记错的话都行)就可以应用飞行高度 不过只测了瞬间设置高度没测带速度的高度变化  详情 回复 发表于 2015-8-31 11:01
回复

使用道具 举报

 楼主| 发表于 2008-2-27 07:32:20 | 显示全部楼层
单位分类:


图腾:一旦一个单位拥有图腾这一分类,它控制栏的按钮包括快捷键会全部消失。除此以外没有任何效果,你仍可以通过触发来操纵它。此单位依然能响应右键点击指令,如果你不想这样可以用以下代码拦截该指令:
[jass]
function Catch_Order_Actions takes nothing returns nothing
  if GetIssuedOrderId() == OrderId("smart") then
    call PauseUnit(GetOrderedUnit(), true)
    call IssueImmediateOrder(GetOrderedUnit(), "stop")
    call PauseUnit(GetOrderedUnit(), false)
  endif
endfunction

function Catch_Order takes nothing returns nothing
  local trigger t = CreateTrigger()
  call TriggerRegisterUnitEvent(t, gg_unit_hpea_0006, EVENT_UNIT_ISSUED_TARGET_ORDER)
  call TriggerRegisterUnitEvent(t, gg_unit_hpea_0006, EVENT_UNIT_ISSUED_POINT_ORDER)
  call TriggerAddAction(t, function Catch_Order_Actions)
endfunction
[/jass]

工人:工人分类有2个基本效果。拥有这个分类的单位在空闲时,你的屏幕左下会显示空闲工人的图标,而且该单位不会自动攻击。然而如果你在运行时添加工人分类,那就只会有第二种效果而不会显示空闲工人图标。如果你想创造一个无视敌人存在的单位,这会是个好法子。
[jass]
call UnitAddType(u, UNIT_TYPE_PEON)
[/jass]

如果你还将单位的状态 - 可以逃跑一栏设为假,它被攻击的时候也不会逃跑。至于说想要创建一个平时无视敌人,但会在被攻击时反击的单位,你可以用'Apiv'(永久隐身)技能,将其持续时间设为-1,自动攻击目标设为假。这样该单位不再隐身,却也不会自动攻击目标。


自杀/工兵: 拥有'Asds'(自毁)技能的单位自动被标记上自杀分类,在右键点击敌人的时候会自动扑上去自毁。基本上很少看到有这样的地图,因此你可以用这个分类来区分单位,通常会省下很多触发工作。


视为目标:在战斗 - 视为目标数据域你可以看到另一批分类标记,利用这些标记可以为你的法术更详尽地区分目标,而不是简单地只认空中地面建筑英雄这几个大类。
回复

使用道具 举报

 楼主| 发表于 2008-2-27 07:36:04 | 显示全部楼层
Buff:



添加buff:如前所述,你可以用Aasl(龙卷风减速光环)或是隐藏在魔法书里的光环来简单地给单位添加buff却不显示技能图标。只要将光环的数据效果设0,允许目标设为自己。

隐藏buff图标:很可惜,许多技能的默认buff无法被去除。即使你将技能的buff数据域设空,它多半也会给你加上该技能的默认buff.将buff图标涂黑,提示信息设空也无法真正去掉这个buff,鼠标移上去的时候还是会出现一个空的提示框。唯一差不多可行的方案是事先在单位身上放一个不可叠加的buff,然后将你的法术buff设成跟它一样,这样你施放这个技能以后,控制栏就不会再显示新的buff(因为已经有这个buff了)。没错,我知道这法子真的很土,但目前我也就只会这一手。

可堆叠的buff:'Bpsd'(毒药(堆叠)) 之类的buff,在某些情况下无法被添加。就这个buff而言就是目标之前没中过毒的前提下无法添加。这法子可以用于在某些前提下才能加的buff,当然并不是对所有技能都适用。

用户界面:在一个技能升级以后,其buff的提示信息有时并不会即时更新。此时你可以添加并删除任意技能来刷新界面。我通常用Adis(驱散魔法)技能做:
[jass]
function UnitRefreshUI takes unit u returns nothing
  call UnitAddAbility(u, <refresher ability>)
  call UnitRemoveAbility(u, <refresher ability>)
endfunction
[/jass]

点评

711
隐藏buff图标,如果无图标就不会显示  发表于 2013-9-1 11:25
回复

使用道具 举报

 楼主| 发表于 2008-2-27 07:37:28 | 显示全部楼层
函数:



MakeUnitAbilityPermanent():该函数可令你的单位在变身后依然保有某个技能。比方说你添加混乱时就得把单位已有的技能永久化。此外拥有子技能的技能,比方说魔法书或是有影响技能宝珠,你也必须将这些永久化,除非你想在变身后失去它们。

IssueInstantTargetOrder():该函数目前唯一的用途似乎只有命令单位将自己物品栏里的物品交给另一单位。其中的order参数应为"smart”, target widget参数是想被转移的物品,instant target widget参数为要被交给的目标。被命令的单位会直接走向目标单位然后将物品交给它。

SetUnitX(), SetUnitY():这2个函数在击退系统或是类似的循环移动单位的系统中特别有用。它们忽略大部分的目标点是否可用检测,因此执行速度比SetUnitPosition()快得多,可以做出流畅得多的移动效果。缺陷是你得自行判断目标点是否在地图界外,否则可能造成游戏崩溃。当然,不要用loop+wait的组合,用timer.(作者似乎没有提到很重要的一点,这2个函数移动单位不会打断单位的当前命令甚至是引导中的法术)
回复

使用道具 举报

 楼主| 发表于 2008-2-27 07:39:04 | 显示全部楼层
隐藏的指令ID:



851971(smart)智能指令:可以以点或者对象为目标发布指令,就像右键点击(这个有哪点隐藏了?)

852000技能菜单:这个命令强制英雄打开技能学习菜单。假如用于普通单位身上,会暂时性地清除其所有控制栏按钮。重新选择该单位后恢复正常。(至少作者写此文的时候是这样,实际上在1.21b中,对普通单位发布该命令已经没效了)

851994(build)建造菜单:无目标命令,可以命令可建造建筑的单位打开建造菜单。

852002852007移动物品到栏位:这些是对象目标命令,将目标物品移动到英雄的对应物品栏格,比方说852002是移动到第一格,852003是第二格,以此类推。

852008852013使用栏位中的物品:这些指令会命令英雄使用对应物品栏格的物品。该指令的目标方式(无目标/单位目标/点目标)由物品本身决定。852008是使用第一格的物品,而852009是第二格,以此类推。

851976(cancel)取消:无目标命令,相当于点击取消按钮。以前曾一度可以用它来捕捉取消按钮的点击事件,不过如今版本中似乎已经没效了。(对此我也有怨念,本来我一个好好的可学习多个英雄技能的系统就这样废了)

851973昏迷:当单位因某个致昏技能(如战争践踏)而昏迷时,它会收到这个命令。基本上可视为一个原地不动且停止攻击的命令。被命令的单位无法攻击和移动。(按,其实该说法不是很确切,因为实际上它跟停止命令也没差多少)
回复 1 0

使用道具 举报

发表于 2008-2-27 08:34:26 | 显示全部楼层

姐姐能不能汉化了在发

你内全英文...
回复

使用道具 举报

 楼主| 发表于 2008-2-27 08:43:37 | 显示全部楼层
你不识字嘛?~~
睁着眼睛说瞎话~~
回复

使用道具 举报

发表于 2008-2-27 09:58:44 | 显示全部楼层
6楼让你翻译Jass代码...
回复

使用道具 举报

发表于 2008-2-27 10:31:05 | 显示全部楼层
翻译吧~
回复

使用道具 举报

发表于 2008-2-27 10:33:04 | 显示全部楼层
学习学习中
原来技能是这么回事
回复

使用道具 举报

发表于 2008-2-27 11:11:54 | 显示全部楼层
555。多了好多东西。于是除了看的懂的更看不懂老。
回复

使用道具 举报

 楼主| 发表于 2008-2-27 11:29:20 | 显示全部楼层
其实文中提到的那个位标识技术是Danexx叔叔发明的~~
回复

使用道具 举报

发表于 2008-2-27 12:25:47 | 显示全部楼层
引用第12楼Renee于2008-02-27 11:29发表的  :
其实文中提到的那个位标识技术是Danexx叔叔发明的~~
蛋X叔叔为什么那么厉害.因为喜欢吃X蛋.〔最近投影用地勤,灌着灌着整个GA都变番茄海拉〕
回复

使用道具 举报

发表于 2008-2-27 12:56:07 | 显示全部楼层
变详细多了呵呵...
希望这能给我们网站帮上点忙,这样即使我们失去了宝贵的会员,也至少能保住这些知识。
这句话偶刚开始学WE的时候看过,就是第一版技能指南的后面,当时很憾概,以为replay出什么事了..结果却是GA.
回复

使用道具 举报

发表于 2008-2-27 13:23:55 | 显示全部楼层
期待的说  期待就有了的说 :)


该技能是唯一可以创建可破坏物/装饰物的技能    曾尝试过,火山爆发其中一选项:可破坏物ID,不知怎么用。CTRL添加数据似乎也没有效果。大多会弹出游戏。
回复

使用道具 举报

发表于 2008-2-27 15:23:43 | 显示全部楼层
果然读懂了就会很强大。
回复

使用道具 举报

发表于 2008-2-27 17:05:27 | 显示全部楼层
怎么没说到静止陷阱呢?静止陷阱里面召唤单位无论填什么单位,创建出来都是有某个技能的。具体是:单位隐形,在有敌方靠近的时候会自杀并震晕周围敌人。。。复活后就正常了。
死亡缠绕,神圣之光,尖刺外壳的魔法效果必须修改原版的,自定义技能里的数据无效。
还有绞肉机的疾病云雾,那可是个好技能。
回复

使用道具 举报

发表于 2008-2-27 20:22:01 | 显示全部楼层
第二版了 好耶好耶
回复

使用道具 举报

发表于 2008-2-28 04:54:35 | 显示全部楼层
好文章~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 13:38 , Processed in 0.124390 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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