aaa5115454 发表于 2022-5-22 23:51:40

求助关于延迟施法的函数

研究了很久之前下载的第四版WOWBEE函数手册,只找了一个关于延迟施法的函数 BeeUnitCastSpellDelay(Spell,Time,Unit) 但是这个函数是释放技能后延迟释放下一个技能主要是为了避免重复施法。请教各位大佬有没有释放技能前的延迟施法函数,比如条件满足后,延迟几秒释放技能的函数呢?我找了一个函数手册的例子,代码如下:

[*]if BeeUnitBuffInfo("target",2,"Magic",1)>=2 and BeeIsRun("驅散魔法","target") then
[*]
[*]BeeRun("驅散魔法","target")
[*]
[*]return
[*]end
當目標身上有2個以上有益Buff時驅散它



这段代码如何修改就能变成当IF里的条件满足,延迟一段自定义的时间释放驱散魔法的技能?

还请大佬们不吝赐教,谢谢。

谭包子 发表于 2022-5-23 09:19:16

新人前来学习,拒绝零回复

tanyaoiii 发表于 2022-5-23 10:12:34

aaa5115454 发表于 2022-5-23 15:16:12

tanyaoiii 发表于 2022-5-23 10:12 AM
直接复制bee函数手册内容给你参考吧

BeeUnitCastSpellDelay


谢谢 这个我知道 这个是释放技能后延迟一定时间 再释放下一个技能。

我想要是释放技能前的延迟函数。

blxyz521 发表于 2022-5-24 09:29:55

本帖最后由 blxyz521 于 2022-5-24 09:30 AM 编辑

LUA语言没有延时函数,移植其他语言的也不好用。
用GetTime()函数获取时间做对比。
例如:
if BeeUnitBuffInfo("target",2,"Magic",1)>=2 and BeeIsRun("驅散魔法","target") then
      if ta==nil then
                ta=GetTime()
      end
      tb=GetTime()
      if tb-ta>2 then
                BeeRun("驅散魔法","target")
                ta=nil
      end
end
當目標身上有2個以上有益Buff時,给ta、tb赋值时间。ta只赋值一次,tb一直更新,当tb>ta 2秒时,使用驱散魔法,再给ta赋值空。

aoyq2007 发表于 2022-5-24 09:50:55

借用这个帖子,谈论下这个函数的作用:
下面这个函数是我从wowbee里面拷贝出来的,接的像是你所说的延迟释放技能的函数,

function DelayCast(spellid, dtime) -- SpellID of Spell To Check, delay time
        if not CheckCastTime thenCheckCastTime = {} end
        local mtime = dtime + 5 --max expire time
        local spellexist = false
        if dtime > 0 then
                if #CheckCastTime >0 then
                        for i=1, #CheckCastTime do
                                if CheckCastTime.SpellID == spellid then
                                        spellexist = true
                                        if ((GetTime() - CheckCastTime.CastTime) > mtime) then
                                               
                                                CheckCastTime.CastTime = GetTime()
                                                return false
                                        elseif ((GetTime() - CheckCastTime.CastTime) > dtime) then
                                               
                                                CheckCastTime.CastTime = GetTime()
                                                return true
                                        else
                                               
                                                return false
                                        end
                                end
                        end
                        if not spellexist then
                                table.insert(CheckCastTime, { SpellID = spellid, CastTime = GetTime() } )       
                                return false       
                        end
                else
                       
                        table.insert(CheckCastTime, { SpellID = spellid, CastTime = GetTime() } )       
                        return false       
                end
        else
                return true
        end
end
我觉得这个函数像你所说的函数,参数应该是技能ID和延迟释放时间。(我看代码猜的,哈哈)你可以试试看。

blxyz521 发表于 2022-5-24 11:39:56

aoyq2007 发表于 2022-5-24 09:50 AM
借用这个帖子,谈论下这个函数的作用:
下面这个函数是我从wowbee里面拷贝出来的,接的像是你所说的延迟释 ...
这个好像不行,看意思是,距离上次施放这个技能多长时间。
例如
if BeeUnitBuffInfo("target",2,"Magic",1)>=2 and BeeIsRun("驱散魔法") then
       if DelayCast(“驱散”,3) then
            BeeRun("驱散魔法")
       end
end
当目标身上有两个以上有益魔法时。就会出现4种情况
1如果这个循环是第一次执行,就会延时3秒施放驱散,
2如果这个循环是不是第一次执行,与上一次执行时间相差大于3+5秒,也会延时3秒施放驱散。
3如果这个循环是不是第一次执行,与上一次执行时间相差小于3秒,就会延时(3-时间差)施放驱散。
4如果这个循环是不是第一次执行,并且与上一次执行时间相差大于3秒小于3+5秒,就会立即施放驱散。
可以将第3行的5-max expire time改小,这样会减少第4种情况出现的几率。
以上是我的理解,一直想搞个可靠并且占用内存小的延时函数,有大佬愿意分享下吗?

lsm05042211 发表于 2022-5-25 13:32:11

果然都是大拿,我看到这些代码头都晕了

aaa5115454 发表于 2022-6-12 10:48:38

blxyz521 发表于 2022-5-24 09:29 AM
LUA语言没有延时函数,移植其他语言的也不好用。
用GetTime()函数获取时间做对比。
例如:


感谢这位大佬的分析 非常受用 谢谢

aaa5115454 发表于 2022-6-12 10:51:12

aoyq2007 发表于 2022-5-24 09:50 AM
借用这个帖子,谈论下这个函数的作用:
下面这个函数是我从wowbee里面拷贝出来的,接的像是你所说的延迟释 ...

感谢您提供的参考 非常有意义 谢谢
页: [1] 2
查看完整版本: 求助关于延迟施法的函数