魔兽地图编辑器吧 关注:64,891贴子:3,834,803
  • 11回复贴,共1

封装的选取单位函数有冷却时间?

只看楼主收藏回复

#ifndef LCWEGetGroupEnemy1Included
#define LCWEGetGroupEnemy1Included
#include "YDWEBase.j"
library LCWEGetGroupEnemy1 requires YDWEBase
globals
integer udg_int1=0
unit udg_unitPassLC
real udg_realPassLC
real udg_real2PassLC
hashtable HT = InitHashtable()
group g1=CreateGroup()
endglobals
function LCWEGetGroupEnemy1Func001005 takes nothing returns boolean //非马甲判定
return ((((IsUnitAliveBJ(GetFilterUnit()) == true) and (GetUnitAbilityLevel(GetFilterUnit(), 'Aloc') != 1)) and (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_unitPassLC)) == true)))
endfunction
function LCWEGetGroupEnemy1 takes real x,real y,real ss,unit a returns group //仅选取非马甲单位,不考虑体积设定
call GroupClear(g1)
set udg_unitPassLC=null
set udg_unitPassLC=a
call GroupEnumUnitsInRange( g1, x, y, ss, Condition(function LCWEGetGroupEnemy1Func001005) )
return g1
endfunction
触发
事件
[事件] - 任意单位 接受伤害
条件
((伤害来源) 是 英雄) 等于 TRUE
(单位所受伤害是攻击伤害) 等于 TRUE
动作
[逆天] - 设置 [单位] loc_dw = (触发单位)
[逆天] - 设置 [单位] loc_unit = (伤害来源)
[逆天] - 设置 [实数] loc_sh = ((50.00 x (转换 ((loc_unit) 的 TY被动-属性伤害 技能等级) 为实数)) x (转换 ((((loc_unit) 的力量值(包括 加成)) + ((loc_unit) 的智力值(包括 加成))) + ((loc_unit) 的敏捷值(包括 加成))) 为实数))
[逆天] - 设置 [实数] loc_x = ((loc_dw) 所在X轴坐标)
[逆天] - 设置 [实数] loc_y = ((loc_dw) 所在Y轴坐标)
[逆天] - 设置 [单位组] loc_z = (新建的空单位组)
[逆天] - 设置 [单位组] loc_z = (获取((loc_x),(loc_y)) 半径 512.00 内存活着的(loc_unit)的敌人(马甲除外))
单位组 - 选取 (loc_z) 内所有单位做动作
Loop - 动作
单位 - 命令 (loc_unit) 对 (选取单位) 造成 (loc_sh) 点伤害(不是 攻击伤害, 不是远程攻击) 攻击类型: 混乱 伤害类型: 通用 武器类型: 无
单位组 - 清空 (loc_z) 内所有单位
单位组 - 删除 (loc_z)
有一定概率(目测20%左右),函数会跳过call GroupEnumUnitsInRange( g1, x, y, ss, Condition(function LCWEGetGroupEnemy1Func001005) )这个环节,进而不选取单位
还有极小概率会出现今后函数都不执行的情况。


IP属地:广东1楼2018-11-08 14:06回复
    不知道


    IP属地:湖北来自Android客户端3楼2018-11-08 14:38
    回复
      为什么不新建单位组呢


      4楼2018-11-08 14:54
      回复(3)
        没有冷却时间这玩意,明显是选取单位组内的动作由于某些原因卡住了导致跳不出循环,所以无法运行后面的动作


        IP属地:北京来自Android客户端5楼2018-11-08 14:54
        收起回复
          换个写法
          function A takes nothing returns nothing
          local unit u2
          local real x
          local real y
          call GroupEnumUnitsInRange(z,x,y,150,null)
          loop
          set u2=FirstOfGroup(z)
          exitwhen u2==null
          if GetUnitAbilityLevel(u2, 'Aloc') != 1 and IsUnitEnemy(u2, Player(0)) == true then
          //动作
          endif
          call GroupRemoveUnit(z,u2)
          set u2=null
          endloop
          endfunction


          来自Android客户端6楼2018-11-08 15:23
          回复(2)