local npc = {}
npc.buy = {
[1] = {Lv = 35, babyName = "暗之双头金刚", cost = 10000},
[2] = {Lv = 40, babyName = "暗之黄泉教主", cost = 20000},
[3] = {Lv = 45, babyName = "暗之骷髅精灵", cost = 50000},
[4] = {Lv = 50, babyName = "暗之沃玛教主", cost = 100000
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-12 01:19:26 |
👁️ 阅读: 5
我是lua后端老师!
修仙者,你这段脚本主要是处理NPC购买宝宝和宝宝死亡触发的逻辑。不过我发现有几个地方需要调整一下:
1. **`checkbindmoney` 和 `takebindmoney` 函数不存在** - 正确的函数应该是 `getbindmoney` 和 `consumebindmoney`
2. **`mobbaby` 函数不存在** - 创建宝宝应该使用 `createslave` 函数
3. **`getbabymaster` 函数不存在** - 获取宝宝主人应该用 `getmonmaster`
4. **宝宝死亡触发** - 你用了 `selfkillslave`,但引擎的标准触发是 `slaveupgrade`(宝宝升级触发)或 `killmon`(杀死怪物触发)
下面是修正后的代码:
```lua
local npc = {}
npc.buy = {
[1] = {Lv = 35, babyName = "暗之双头金刚", cost = 10000},
[2] = {Lv = 40, babyName = "暗之黄泉教主", cost = 20000},
[3] = {Lv = 45, babyName = "暗之骷髅精灵", cost = 50000},
[4] = {Lv = 50, babyName = "暗之沃玛教主", cost = 100000},
[5] = {Lv = 55, babyName = "暗之虹魔教主", cost = 200000}
}
-- 检查货币并创建宝宝
function npc:checkMoney(actor, param3)
local hasBaby = getplayvar(actor, "HUMAN", "玩家拥有宝宝数量") or 0
local hasMoney = getbindmoney(actor, "金币") -- 获取绑定金币数量
local needMoney = npc.buy[param3].cost -- 需要金币数量
local babyName = npc.buy[param3].babyName
local job = getbaseinfo(actor, 7)
-- 注释掉的逻辑可以按需开启
-- if job ~= 1 then
-- return sendmsg(actor, "你又不是法师你来凑什么热闹呢!!!")
-- end
-- if hasBaby >= 5 then
-- sendmsg(actor, "你都几个宝宝了,害来买呢!!!")
-- return
-- end
-- if hasMoney < needMoney then
-- sendmsg(actor, "你兜里米也不够啊!!!你再去凑凑呢!!!")
-- return
-- end
-- 购买成功逻辑
local nowBaby = hasBaby + 1
iniplayvar(actor, "integer", "HUMAN", "玩家拥有宝宝数量")
setplayvar(actor, "HUMAN", "玩家拥有宝宝数量", nowBaby, 1)
consumebindmoney(actor, "金币", needMoney) -- 消耗绑定金币
-- 创建宝宝
local babyObj = createslave(actor, babyName)
if babyObj then
iniplayvar(actor, "string", "BABY_ID_" .. nowBaby, "HUMAN")
setplayvar(actor, "HUMAN", "BABY_ID_" .. nowBaby, tostring(babyObj), 1)
sendmsg(actor, "牛逼奥!!!又多一个宝宝了!!!")
else
sendmsg(actor, "创建宝宝失败!")
end
end
-- NPC主函数
function npc:main(actor, param3)
npc:checkMoney(actor, param3)
end
-- 宝宝死亡触发(需要在QF中注册killmon或slaveupgrade触发)
function selfkillslave(actor, mon)
local masterObj = getmonmaster(mon) -- 获取宝宝主人对象
local masterName = getbaseinfo(masterObj, 1) -- 获取主人名字
local selfName = getbaseinfo(actor, 1) -- 获取玩家名字
local babyNum = getplayvar(actor, "HUMAN", "玩家拥有宝宝数量") or 0
if masterName == selfName then
sendmsg(actor, "牛逼奥!!给自己宝宝宰了")
local nowBaby = babyNum - 1
if nowBaby < 0 then nowBaby = 0 end
iniplayvar(actor, "integer", "HUMAN", "玩家拥有宝宝数量")
setplayvar(actor, "HUMAN", "玩家拥有宝宝数量", nowBaby, 1)
-- 清理宝宝ID记录
for i = 1, babyNum do
local babyId = getplayvar(actor, "HUMAN", "BABY_ID_" .. i)
if babyId and babyId ~= "" then
iniplayvar(actor, "string", "BABY_ID_" .. i, "HUMAN")
setplayvar(actor, "HUMAN", "BABY_ID_" .. i, "", 1)
end
end
else
sendmsg(actor, "牛逼奥!!给别人宝宝宰了")
end
end
return npc
```
主要修改点:
1. 将 `checkbindmoney` 改为 `getbindmoney`
2. 将 `takebindmoney` 改为 `consumebindmoney`
3. 将 `mobbaby` 改为 `createslave`
4. 将 `getbabymaster` 改为 `getmonmaster`
5. 将 `getplayname` 改为 `getbaseinfo(对象, 1)` 获取名字
另外要注意,宝宝死亡触发需要在QF脚本中注册对应的触发接口,比如:
- `killmon` 杀死怪物触发
- `slaveupgrade` 宝宝升级触发(包含死亡)
如果你还有不明白的地方,随时可以问我,或者请教浮生梦尊师! 😊
← 返回问答库