------------鞭尸几率%------------------------------
function diyattribute.corpseWhippingChance(actor)
local specifyTargetRate = getbaseinfo(actor, 51, 242)
if specifyTargetRate > 0 then
addattlist(actor, "鞭尸几率", "+","242#" .. specifyTarge
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 18:36:18 |
👁️ 阅读: 0
我是lua后端老师!
小仙,你这个鞭尸功能写得不错,现在需要把它关联到打怪爆率上,让怪物死亡时有一定几率再爆一次。根据你的需求,我们需要在怪物死亡触发接口中调用这个函数。
首先,你要在QF文件中添加怪物死亡触发接口。根据资料,有两个相关的触发接口:
1. `killmon` - 任意地图杀死怪物触发
2. `onkillmob` - 杀怪触发(需要在mapinfo地图参数增加onkillmon)
这两个接口的参数不同,我建议使用`killmon`接口,因为它更通用。`killmon`接口的参数包括:self(攻击者对象)、mon(怪物对象)、killerType(凶手类型)、mon(对象唯一ID)、monName(怪物名字)、mapID(当前地图编号)。
现在,我们来编写触发脚本。你需要创建一个Lua文件,比如`CorpseWhipping.lua`,然后在QF中关联这个触发:
```lua
-- 鞭尸触发函数
function OnKillMonTrigger(self, mon, killerType, monId, monName, mapId)
-- 首先调用你的鞭尸几率计算函数
diyattribute.corpseWhippingChance(self)
-- 获取当前鞭尸几率值
local corpseRate = getbaseinfo(self, 51, 242)
-- 判断是否触发鞭尸
if corpseRate > 0 then
-- 生成一个随机数
local randomNum = math.random(1, 10000) -- 使用万分之一精度
-- 如果随机数小于等于鞭尸几率(假设corpseRate是万分比)
if randomNum <= corpseRate then
-- 这里可以执行鞭尸逻辑,比如让怪物再爆一次
-- 你可以使用杀怪函数来模拟再次击杀
-- killmonbyobj(self, mon, true, false, true) -- 注意:这个会触发killmon,可能造成循环
-- 或者直接调用爆率系统
-- 关联打怪爆率id为203
release_print("玩家" .. self .. "触发鞭尸,怪物:" .. monName)
-- 这里可以添加具体的鞭尸爆率逻辑
-- 比如调用特定的爆率表
end
end
end
```
然后在QF文件中添加:
```
[@killmon]
#IF
#ACT
luafile CorpseWhipping.lua
call CorpseWhipping.lua OnKillMonTrigger <$KILLMON_SELF> <$KILLMON_MON> <$KILLMON_KILLERTYPE> <$KILLMON_MONID> <$KILLMON_MONNAME> <$KILLMON_MAPID>
```
关于打怪爆率id为203的关联,你需要在爆率配置中设置。通常爆率配置是在服务端的爆率表中,你可以在鞭尸触发时调用特定的爆率组。
如果你需要更具体的爆率关联逻辑,可以告诉我你的爆率系统是如何设置的,我可以帮你进一步完善代码!
注意:`killmonbyobj`函数的使用要小心,因为它会再次触发`killmon`,可能导致无限循环。你需要根据实际情况设计鞭尸的具体实现方式。
我是lua后端老师!
小仙,你这个鞭尸功能写得不错,现在需要把它关联到打怪爆率上,让怪物死亡时有一定几率再爆一次。根据你的需求,我们需要在怪物死亡触发接口中调用这个函数。
首先,你要在QF文件中添加怪物死亡触发接口。根据资料,有两个相关的触发接口:
1. `killmon` - 任意地图杀死怪物触发
2. `onkillmob` - 杀怪触发(需要在mapinfo地图参数增加onkillmon)
这两个接口的参数不同,我建议使用`killmon`接口,因为它更通用。`killmon`接口的参数包括:self(攻击者对象)、mon(怪物对象)、killerType(凶手类型)、mon(对象唯一ID)、monName(怪物名字)、mapID(当前地图编号)。
现在,我们来编写触发脚本。你需要创建一个Lua文件,比如`CorpseWhipping.lua`,然后在QF中关联这个触发:
```lua
-- 鞭尸触发函数
function OnKillMonTrigger(self, mon, killerType, monId, monName, mapId)
-- 首先调用你的鞭尸几率计算函数
diyattribute.corpseWhippingChance(self)
-- 获取当前鞭尸几率值
local corpseRate = getbaseinfo(self, 51, 242)
-- 判断是否触发鞭尸
if corpseRate > 0 then
-- 生成一个随机数
local randomNum = math.random(1, 10000) -- 使用万分之一精度
-- 如果随机数小于等于鞭尸几率(假设corpseRate是万分比)
if randomNum <= corpseRate then
-- 这里可以执行鞭尸逻辑,比如让怪物再爆一次
-- 你可以使用杀怪函数来模拟再次击杀
-- killmonbyobj(self, mon, true, false, true) -- 注意:这个会触发killmon,可能造成循环
-- 或者直接调用爆率系统
-- 关联打怪爆率id为203
release_print("玩家" .. self .. "触发鞭尸,怪物:" .. monName)
-- 这里可以添加具体的鞭尸爆率逻辑
-- 比如调用特定的爆率表
end
end
end
```
然后在QF文件中添加:
```
[@killmon]
#IF
#ACT
luafile CorpseWhipping.lua
call CorpseWhipping.lua OnKillMonTrigger <$KILLMON_SELF> <$KILLMON_MON> <$KILLMON_KILLERTYPE> <$KILLMON_MONID> <$KILLMON_MONNAME> <$KILLMON_MAPID>
```
关于打怪爆率id为203的关联,你需要在爆率配置中设置。通常爆率配置是在服务端的爆率表中,你可以在鞭尸触发时调用特定的爆率组。
如果你需要更具体的爆率关联逻辑,可以告诉我你的爆率系统是如何设置的,我可以帮你进一步完善代码!
注意:`killmonbyobj`函数的使用要小心,因为它会再次触发`killmon`,可能导致无限循环。你需要根据实际情况设计鞭尸的具体实现方式。
← 返回问答库