公会系统:guild_manager.lua

管理员
```lua -- modules/guild_manager.lua -- 公会管理器,管理公会成员信息、公会操作等 local utils = require("core.utils") local class = require("core.class") local event = require("core.event") local moduleBase = require("core.module") local GuildManager = moduleBase.Module:extend("GuildManager") -- 公会职位 local Position = { MASTER = 1, -- 会长 VICE_MASTER = 2, -- 副会长 MEMBER = 3 -- 成员 } -- 获取职位名称 function GuildManager.GetPositionName(position) local positionNames = { [Position.MASTER] = "会长", [Position.VICE_MASTER] = "副会长", [Position.MEMBER] = "成员" } return positionNames[position] or "未知" end function GuildManager:ctor(name) GuildManager.super.ctor(self, name) -- 公会信息 self.guildInfo = { guild_id = 0, guild_name = "", level = 1, exp = 0, max_members = 50, notice = "" } -- 成员列表 self.members = {} -- 玩家公会ID self.playerGuildId = 0 end function GuildManager:initialize() utils.print("初始化公会管理器...") -- 注册事件 self:RegisterEvents() GuildManager.super.initialize(self) end function GuildManager:RegisterEvents() -- 监听成员更新 event.on("GUILD_MEMBER_UPDATE", function(member) self:OnMemberUpdate(member) end) -- 监听玩家登录 event.on("PLAYER_LOGIN_SUCCESS", function(playerInfo) self:OnPlayerLogin(playerInfo) end) end function GuildManager:OnPlayerLogin(playerInfo) self.playerGuildId = playerInfo.guild_id or 0 if self.playerGuildId > 0 then self:RequestGuildInfo() self:RequestGuildMembers() end end -- 请求公会信息 function GuildManager:RequestGuildInfo(callback) local networkManager = require("modules.network_manager") local networkModule = networkManager.getModule("NetworkManager") if not networkModule:IsConnected() then utils.print("网络未连接") if callback then callback(false, "网络未连接") end return end local request = { guild_id = self.playerGuildId } networkModule:SendRequest("guild.GetGuildInfo", request, function(result, message, data) if result == 0 then self.guildInfo = data.guild_info or {} utils.print("获取公会信息成功: " .. self.guildInfo.guild_name) event.emit("GUILD_INFO_LOADED", self.guildInfo) if callback then callback(true, self.guildInfo) end else utils.print("获取公会信息失败: " .. message) if callback then callback(false, message) end end end) end -- 请求成员列表 function GuildManager:RequestGuildMembers(callback) local networkManager = require("modules.network_manager") local networkModule = networkManager.getModule("NetworkManager") if not networkModule:IsConnected() then utils.print("网络未连接") if callback then callback(false, "网络未连接", {}) end return end local request = { guild_id = self.playerGuildId } networkModule:SendRequest("guild.GetGuildMembers", request, function(result, message, data) if result == 0 then self.members = data.members or {} utils.print("获取成员列表成功,共" .. #self.members .. "人") event.emit("GUILD_MEMBERS_LOADED", self.members) if callback then callback(true, self.members) end else utils.print("获取成员列表失败: " .. message) if callback then callback(false, message, {}) end end end) end -- 成员更新处理 function GuildManager:OnMemberUpdate(member) if not member or member.player_id == 0 then return end -- 更新或添加成员 local found = false for i, existingMember in ipairs(self.members) do if existingMember.player_id == member.player_id then self.members[i] = member found = true break end end if not found then table.insert(self.members, member) end event.emit("GUILD_MEMBER_CHANGED", member) end -- 根据ID获取成员 function GuildManager:GetMember(playerId) for _, member in ipairs(self.members) do if member.player_id == playerId then return member end end return nil end -- 获取在线成员 function GuildManager:GetOnlineMembers() local onlineMembers = {} for _, member in ipairs(self.members) do if member.is_online then table.insert(onlineMembers, member) end end return onlineMembers end -- 获取公会信息 function GuildManager:GetGuildInfo() return self.guildInfo end -- 获取成员列表 function GuildManager:GetMembers() return self.members end -- 获取在线成员数量 function GuildManager:GetOnlineCount() local count = 0 for _, member in ipairs(self.members) do if member.is_online then count = count + 1 end end return count end -- 是否在公会中 function GuildManager:IsInGuild() return self.playerGuildId > 0 end -- 导出常量 GuildManager.Position = Position return GuildManager ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧