function stdmodefunc137(actor, makeIndex, itemIdx, nOverLap)
-- 玩家所在行会对象
local myguild = getmyguild(actor)
-- 获取行会所有玩家对象(名字)
local guildTbl = getguildinfo(myguild, 3)
-- 弹出消息界面
for k, v in pairs(guildTbl) do
local pl
我是lua后端老师!
小仙,你这个代码有几个地方需要调整,问题确实出在参数传递和函数调用上。让我帮你分析一下:
1. **参数传递问题**:在`messagebox`中拼接字符串时,`playerObj`这个对象直接拼接到字符串里,传到前端后会被转成类似`"object: 0x..."`的字符串,而不是玩家对象
2. **函数调用顺序**:你在循环里用了`return true`,这会导致只处理第一个符合条件的玩家就退出了
3. **离线状态判断**:`getbaseinfo(playerObj, 61)`返回的是离线挂机状态,不是在线状态
下面是修改后的代码:
```lua
function stdmodefunc137(actor, makeIndex, itemIdx, nOverLap)
-- 玩家所在行会对象
local myguild = getmyguild(actor)
if not myguild then
return
end
-- 获取行会所有玩家对象(名字)
local guildTbl = getguildinfo(myguild, 3)
if not guildTbl then
return
end
local selfName = getbaseinfo(actor, 1) -- 玩家名
local mapID = getbaseinfo(actor, 3) -- 当前地图ID
local xPos = getbaseinfo(actor, 4) -- X坐标
local yPos = getbaseinfo(actor, 5) -- Y坐标
-- 弹出消息界面
for k, v in pairs(guildTbl) do
if selfName ~= v then -- 排除自己
local playerObj = getplayerbyname(v) -- 获取行会其他玩家对象
if playerObj then
local online = getbaseinfo(playerObj, 61) -- 离线挂机状态
if not online then -- 如果在线(false为在线)
-- 正确的参数传递方式
messagebox(playerObj,
"你的行会成员" .. selfName .. "需要支援!",
"@goHelp,," .. mapID .. "," .. xPos .. "," .. yPos .. ",@goBack")
end
end
end
end
return true
end
-- 前往支援
function goHelp(actor, mapID, xPos, yPos)
-- 注意:这里的mapID、xPos、yPos是从messagebox传递过来的字符串
-- 需要转换成数字
local nMapID = tonumber(mapID)
local nX = tonumber(xPos)
local nY = tonumber(yPos)
if nMapID and nX and nY then
mapmove(actor, nMapID, nX, nY, 1, 0)
release_print("玩家" .. getbaseinfo(actor, 1) .. "传送到" .. nMapID .. "(" .. nX .. "," .. nY .. ")")
else
release_print("坐标转换失败")
end
end
-- 返回界面
function goBack(actor)
close(actor)
end
```
**主要修改点:**
1. **参数处理**:在`goHelp`函数中,将字符串参数转换为数字
2. **循环逻辑**:移除了循环内的`return true`,让所有符合条件的玩家都能收到消息
3. **离线判断**:`not online`表示在线状态
4. **消息内容**:优化了提示信息,让玩家知道是谁需要支援
5. **错误处理**:增加了空值判断
**注意**:`messagebox`的按钮参数格式是`"按钮文本,回调函数,参数1,参数2,..."`,多个参数用逗号分隔。你的原始代码中`@goBack`后面跟了`playerObj`,这个在消息框回调时是无法传递对象参数的,回调函数第一个参数始终是触发玩家对象。
如果还有问题,可以告诉我具体现象,浮生梦尊师会帮你继续分析!