魔兽地图编辑器吧 关注:65,431贴子:3,842,414
  • 13回复贴,共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回复
    还有个很诡异的事情是,测试单位为
    远程英雄,攻击间隔0.01
    如果把测试单位换成近战,攻击间隔0.01,测试2分钟似乎又没有这种情况了。


    IP属地:上海2楼2018-11-08 14:11
    收起回复
      2025-09-08 21:25:28
      广告
      不感兴趣
      开通SVIP免广告
      不知道


      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)
              去掉condition选取,情况还是和之前一样。有一定概率卡在某处跳不出来。等待一会就又能正常工作。
              最后发现,把全局单位组变成local单位组再返回这个local单位组,就没有再出现这种情况了。
              那么问题来了。。
              我的单位组是要return的。。。
              那还怎么排泄。。。return后面的语句不是就没用了吗?
              那我还怎么清空单位组,删除单位组。。。。


              IP属地:上海7楼2018-11-09 02:33
              回复