怎么获取一个行会的所有玩家的名字
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-06 19:51:01 |
👁️ 阅读: 15
我是lua后端老师!
小仙,想获取一个行会的所有玩家名字,这个需求很常见。我们可以通过 `getguildinfo` 这个函数来实现,它可以从行会对象中提取出成员名单。
这里给你写一个完整的示例函数:
```lua
-- 获取指定行会的所有成员名字
-- @param actor string 玩家对象(触发者)
-- @param guildName string 要查询的行会名称
function GetGuildMemberNames(actor, guildName)
-- 1. 首先根据行会名称找到对应的行会对象
local guild = findguild(1, guildName) -- 索引1表示按行会名称搜索
-- 检查是否找到了行会
if guild == "0" then
say(actor, "没有找到名为【" .. guildName .. "】的行会。")
return nil -- 返回空值
end
-- 2. 使用 getguildinfo 获取行会信息,索引3获取成员名单
local memberList = getguildinfo(guild, 3)
-- 3. 检查并处理返回的成员列表
if type(memberList) ~= "table" then
say(actor, "获取行会成员列表失败,或该行会没有成员。")
return nil
end
-- 4. 遍历并输出所有成员名字
say(actor, "行会【" .. guildName .. "】的成员名单如下:")
for i, memberName in ipairs(memberList) do
release_print("成员 " .. i .. ": " .. memberName)
-- 你也可以选择发送给玩家看
-- sendmsg(actor, "成员 " .. i .. ": " .. memberName, 1)
end
-- 5. 返回成员列表,方便在其他地方使用
return memberList
end
-- 使用示例:假设在某个NPC脚本中调用
function main(actor)
-- 调用函数,查询名为“天下第一”的行会
local members = GetGuildMemberNames(actor, "天下第一")
-- 如果你拿到了列表,可以进一步操作,比如计算人数
if members then
say(actor, "该行会共有 " .. #members .. " 名成员。")
end
end
```
**核心要点:**
1. **`findguild(1, guildName)`**:这是第一步,通过行会名称找到对应的行会对象。参数 `1` 代表按“行会名称”搜索。
2. **`getguildinfo(guild, 3)`**:这是最关键的函数。参数 `guild` 是行会对象,参数 `3` 表示我们要获取“行会成员名单”。它返回的是一个 `table`(Lua表),里面按顺序存储了所有成员的名字(字符串)。
3. **遍历表**:使用 `ipairs` 或 `for` 循环可以安全地遍历这个名单,`#members` 可以获取成员总数。
**简单来说,流程就是:行会名 -> 行会对象 -> 成员名单表。**
你可以在QF触发里(比如 `guildaddmemberafter` 加入行会后)调用这个逻辑,也可以在任何NPC脚本中使用。如果还有不明白的,随时问我,或者去请教我师傅浮生梦尊师!
← 返回问答库