LUACN论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
热搜: YJWOW MagicStone BoL
查看: 472|回复: 10

[wowbee] 求助关于延迟施法的函数

[复制链接]
发表于 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 | 显示全部楼层
新人前来学习,拒绝零回复
回复 支持 反对

使用道具 举报

发表于 2022-5-23 10:12:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-23 15:16:12 | 显示全部楼层
tanyaoiii 发表于 2022-5-23 10:12 AM
直接复制bee函数手册内容给你参考吧

BeeUnitCastSpellDelay

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

我想要是释放技能前的延迟函数。
回复 支持 反对

使用道具 举报

发表于 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赋值空。
回复 支持 反对

使用道具 举报

发表于 2022-5-24 09:50:55 | 显示全部楼层
借用这个帖子,谈论下这个函数的作用:
下面这个函数是我从wowbee里面拷贝出来的,接的像是你所说的延迟释放技能的函数,

[Lua] 纯文本查看 复制代码
function DelayCast(spellid, dtime) -- SpellID of Spell To Check, delay time
	if not CheckCastTime then  CheckCastTime = {} 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[i].SpellID == spellid then
					spellexist = true
					if ((GetTime() - CheckCastTime[i].CastTime) > mtime) then
						
						CheckCastTime[i].CastTime = GetTime()
						return false
					elseif ((GetTime() - CheckCastTime[i].CastTime) > dtime) then
						
						CheckCastTime[i].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和延迟释放时间。(我看代码猜的,哈哈)你可以试试看。

回复 支持 反对

使用道具 举报

发表于 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种情况出现的几率。
以上是我的理解,一直想搞个可靠并且占用内存小的延时函数,有大佬愿意分享下吗?
回复 支持 反对

使用道具 举报

发表于 2022-5-25 13:32:11 | 显示全部楼层
果然都是大拿,我看到这些代码头都晕了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-12 10:48:38 | 显示全部楼层
blxyz521 发表于 2022-5-24 09:29 AM
LUA语言没有延时函数,移植其他语言的也不好用。
用GetTime()函数获取时间做对比。
例如:

感谢这位大佬的分析 非常受用 谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-12 10:51:12 | 显示全部楼层
aoyq2007 发表于 2022-5-24 09:50 AM
借用这个帖子,谈论下这个函数的作用:
下面这个函数是我从wowbee里面拷贝出来的,接的像是你所说的延迟释 ...

感谢您提供的参考 非常有意义 谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|LUACN论坛

GMT+8, 2024-5-6 07:21 AM , Processed in 0.132539 second(s), 32 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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