local my = {}
function my:new(actor)
local player = {
actor = actor
}
setmetatable(player,{__index = my})
-- =================================获取转生等级
function player:getzhuansheng()
local zslv = getbaseinfo(self.
我是lua后端老师!
小仙,你好!我仔细看了你的代码,发现了问题所在。你的`人物封装.lua`文件中有几个关键错误:
**问题1:`getzhuansheng`方法定义在`player`表中,但返回的是`self`**
在你的`my:new`函数中,你创建了`player`表并设置了元表,但最后返回的是`self`而不是`player`。这导致`player`表中定义的`getzhuansheng`方法无法被访问。
**问题2:`self`在`my:new`函数中未定义**
在`my:new`函数中,你使用了`self`,但在这个函数中`self`实际上就是`my`表,而不是新创建的`player`对象。
**修复后的代码:**
```lua
local my = {}
function my:new(actor)
local player = {
actor = actor
}
setmetatable(player, {__index = my})
return player -- 这里应该返回player,而不是self
end
-- =================================获取转生等级
function my:getzhuansheng()
local zslv = getbaseinfo(self.actor, 39) -- 39对应转生等级
return zslv
end
-- =================================获取金币数量 id 1 = 金币 2 = 元宝
function my:getmoney(id)
local money = querymoney(self.actor, id)
return money
end
-- =================================获取道具数量 item = 道具名称
function my:getitemnum(item)
local num = getbagitemcount(self.actor, item)
return num
end
-- =================================删除称号 name = 称号名称
function my:deltitle(name)
deprivetitle(self.actor, name)
return self
end
-- =================================增加称号 name = 称号名称
function my:addtitle(name)
confertitle(self.actor, name)
return self
end
-- ==================================设置转生 num = +几转生 0 = 降0级 0 = 属性点
function my:setzhuansheng(num)
renewlevel(self.actor, num, 0, 0)
return self
end
function my:sendmsg(msg)
sendmsg(self.actor, 1, '{"Msg":"<outline color=\'#000000\'size=\'2\'><font color=\'#ff0000\'size=\'18\'>'..msg..'</font></outline>","Type":9}')
end
return my
```
**主要修改:**
1. 将`my:new`函数的最后一行从`return self`改为`return player`
2. 将所有方法定义在`my`表中,而不是`player`表中(因为`player`的元表指向`my`)
3. 确保所有方法中都使用`self.actor`而不是直接使用`actor`
**调用方式不变:**
```lua
local me = player_module:new(actor)
local zslv = me:getzhuansheng() -- 现在可以正常调用了
```
这样修改后,`me:getzhuansheng()`就不会是空值了。记得检查你的`人物封装.lua`文件是否已经修复了这些语法错误!