魔兽地图编辑器吧 关注:65,067贴子:3,836,783
  • 3回复贴,共1

隐身类技能的模拟——月之女祭司的月之暗面

取消只看楼主收藏回复

隐身类技能是应用比较广泛的一类技能,基础的模板有:
1、女巫的隐形术 主动、目标、有图标、有buff
2、永久隐身 被动、无目标、无图标、无buff
3、疾风步 主动、无目标、有图标、有buff
———上述3个基础标准模板—————
4、隐遁 实质可以看作与时间有关的永久隐身
5、钻地 特殊的隐身,实质是变身技能
6、幽灵 攻击不显形的隐身(bug类技能)
一切高级的隐身类技能都可以用3个基础隐身模板模拟。
例如:
月之女祭司的月之暗面 模板:永久隐身
树精卫士的大自然的掩护 模板:隐形术
蚂蚁的缩地 :模板:疾风步
圣堂刺客的隐匿:模板:疾风步
高级的隐身类技能带给自定义地图的游戏性和操作性是基础的隐身技能无法企及的。
那么我先给出模拟DOTA月之暗面的素材准备流程和简化代码:


IP属地:湖北1楼2015-03-02 18:26回复
    技能介绍:
    以夜色掩护自己和其他所有友方英雄,进入隐身状态。在持续时间内,即使隐身状态被打破,也能在较短的时间内恢复。|n|n|cff99ccff持续时间:|r15|n|cff99ccff冷却时间:|r140/120/100|n|cff99ccff魔法消耗:|r75|n|n|cffffcc00等级 1|r - 进入隐身状态需要2.5秒|n|cffffcc00等级 2|r - 进入隐身状态需要2秒|n|cffffcc00等级 3|r - 进入隐身状态需要1.5秒
    素材准备:
    1、A00H 月之暗面
    以通魔ANcl为模板自定义月之暗面,等级3,无目标,不禁用其他技能,
    2、Apiv 永久隐身
    这里直接在永久隐身技能模板上修改,等级3,持续时间2.5/2/1.5


    IP属地:湖北2楼2015-03-02 18:32
    回复
      参考代码:
      globals
      integer udg_lvl
      endglobals
      function MoonLightShadowD takes nothing returns nothing
      call UnitRemoveAbility(GetEnumUnit(),'Apiv')
      endfunction
      function MoonLightShadowC takes nothing returns nothing
      local timer t = GetExpiredTimer()
      local integer i = GetHandleId(t)
      local group g =LoadGroupHandle(udg_ht,i,StringHash("Group")) //取出单位组
      call ForGroup(g,function MoonLightShadowD) //移除单位组中单位的永久隐身
      callDestroyGroup(g)
      call DestroyTimer(t) //销毁临时单位组、计时器并排泄
      set t = null
      set g = null
      endfunction
      function MoonLightShadowB takes nothing returns nothing
      local unit u = GetEnumUnit()
      call UnitAddAbility(u,'Apiv')
      call UnitMakeAbilityPermanent(u,true,'Apiv')
      call SetUnitAbilityLevel(u,'Apiv',udg_lvl) //添加相应等级的永久隐身
      call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Invisibility\\InvisibilityTarget.mdl",u,"chest")) //添加短暂的隐身效果
      endfunction
      function MoonLightShadowFilter takes nothing returns boolean
      returnIsUnitType(GetFilterUnit(),UNIT_TYPE_HERO)==true andIsUnitAlly(GetFilterUnit(),GetOwningPlayer(GetTriggerUnit()))
      endfunction
      function MoonLightShadowA takes nothing returns nothing
      local unit u = GetSpellAbilityUnit()
      local timer t = CreateTimer()
      local integer i = GetHandleId(t)
      local integer j =GetUnitAbilityLevel(u,'A00H')
      local group g = CreateGroup()
      local filterfunc f = Filter(functionMoonLightShadowFilter)
      set udg_lvl = j
      call GroupEnumUnitsInRange(g,0,0,9999.0,f) //选取全地图友军英雄包括自己
      call ForGroup(g,function MoonLightShadowB)
      callSaveGroupHandle(udg_ht,i,StringHash("Group"),g) //绑定永久隐身的单位组倒计时器
      call TimerStart(t,15.0,false,functionMoonLightShadowC) //15秒后移除永久隐身
      endfunction
      function MoonLightShadowCon takes nothing returns boolean
      return GetSpellAbilityId()=='A00H' //发动月之暗面
      endfunction
      function MoonLightShadow takes nothing returns nothing
      local trigger trg = CreateTrigger()
      local integer i = 0
      loop
      call TriggerRegisterPlayerUnitEvent(trg,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
      set i =i+1
      exitwhen i==16
      endloop
      callTriggerAddCondition(trg,Condition(function MoonLightShadowCon))
      call TriggerAddAction(trg,functionMoonLightShadowA)
      endfunction


      IP属地:湖北3楼2015-03-02 18:36
      收起回复
        技能模拟的基础知识:
        1、物编
        熟悉某类技能常用的标准模板,及其数据项的含义,例如施法方式、施法图像、施法时间、范围、目标类型。
        能够根据自己想要的技能,选择合适的模板,并修改对应数据项
        物编选择合理可以最大限度减轻JASS代码编程的难度和工作量。
        2、JASS
        对触发器、单位组(+筛选条件)、计时器、哈希表绑定、控制结构运用要熟练
        非简单几句能概括完毕,简略介绍下。技能模拟大致流程:
        1、分析要模拟的技能要达到的效果
        效果分类:基本圈定要选择的模板
        有图标/无图标
        主动/被动
        单体/群体
        持续性/立即型
        2、根据要求的效果的分类确定后台工作的马甲技能范围
        例如:隐身类模拟,必须在上述123中选择,脱离这3类,魔兽无能为力。因为JASS为直接提供修改单位隐身状态的API。
        3、根据技能的细节要求进一步筛选后台马甲技能知道选出最合适的后台马甲。
        4、如果后台马甲可以满足技能效果,而无法满足控制(单体/范围i、立即/点/地)、表现效果(有无图标/有无施法图像),就要选取前台马甲技能,达到所需效果。
        通魔为万能模板,就是在作为前台马甲技能上的能力出众。
        5、画出技能生效的流程图
        6、编辑代码
        7、测试修改(6、7是不断迭代过程)
        白虎的月之暗面将一个单体的被动隐身技能——永久隐身改造成为一个主动群体的隐身技能。
        自己分析下月之暗面的模拟流程,找找感觉。


        IP属地:湖北4楼2015-03-02 19:03
        回复