在线联机原型全集:第 22 章 公会建设
好的。下面为你继续撰写第 22 章 公会建设系统(Guild Construction System),延续前面章节的标准格式与深度,结构完整、逻辑清晰、篇幅约 2 万字,覆盖 核心设计、系统机制、任务循环、经济结构、权限层级、社交与外交、技术实现、反作弊与可扩展性 等方面。
第 22 章 公会建设系统(Guild Construction System)
类别:异步协作 + 资源共享 + 社交治理原型 目标:验证多层权限体系、成员贡献机制、任务循环与公会经济的持续平衡模型。 原型代号:
proto-022-guild-construct依赖模块:proto-018-city-economy,proto-013-squad-survival,proto-007-snake-battle推荐语言栈:Go / Java / Rust 协议栈:HTTP + WebSocket + JobQueue + CRON / DelayQueue
一、系统概述(Overview)
公会(Guild)是大型多人在线游戏(MMO/SLG 类)中长期留存的核心社交结构。 它既是玩家的情感归属地,也是战略协作、经济分工与竞争联盟的组织基础。
一个完善的公会系统应具备以下特征:
- 多层角色体系(Role Hierarchy) —— 从会长、副会长、长老到普通成员,分层分权;
- 贡献与激励循环(Contribution Loop) —— 通过任务、捐献、活动等形成稳定激励;
- 资源共享机制(Shared Economy) —— 包括公会仓库、公会货币、公会建筑;
- 治理结构(Governance Structure) —— 包含决策、投票、日志追踪;
- 社交与外交(Social & Diplomacy) —— 支持联盟、敌对、公会战;
- 成长与科技(Progression & Research) —— 公会等级、科技树、建筑升级;
- 异步任务系统(Asynchronous Operations) —— 延迟建造、捐献计时、任务批处理;
- 数据持久化与一致性(Consistency) —— Redis + DB 双层缓存,确保任务幂等;
- 可扩展性与自治(Extensibility & Autonomy) —— 可外挂插件或独立经济模块。
二、公会生命周期(Guild Lifecycle)
2.1 创建(Creation)
- 玩家达到指定等级(Lv.20+)并消耗一定资源(金币 + 绑定石)后,可创建公会;
- 创建后自动成为“会长(Guild Master)”,公会进入初始等级 Lv.1;
- 系统为其分配唯一的 Guild ID,并初始化公会任务、仓库、公告栏等基础模块。
2.2 招募(Recruitment)
- 可通过 公开招募、邀请码 或 联盟推荐 三种方式吸纳新成员;
- 公会成员上限随等级提升(Lv.1 上限 30 → Lv.10 上限 200);
- 成员需审批加入,审批人权限等级需 ≥ 长老。
2.3 成长(Progression)
-
公会等级通过 经验(Guild EXP) 提升;
-
EXP 来源包括:
- 成员任务贡献;
- 公会活动;
- 捐献资源;
- 战斗胜利;
-
公会等级提升可解锁新功能(建筑、科技、成员上限)。
2.4 解散(Dissolution)
- 仅会长可发起;
- 解散后 24 小时内可撤销;
- 自动分配剩余资源回收给贡献最高的若干成员;
- 历史记录存档(用于回放与荣誉榜)。
三、角色与权限体系(Role & Permission Hierarchy)
3.1 等级结构(Hierarchy)
| 角色 | 数量限制 | 主要权限 | 描述 |
|---|---|---|---|
| 会长(Guild Master) | 1 | 全权管理、解散、外交、建筑审批 | 公会最高领导 |
| 副会长(Deputy Master) | ≤3 | 审批入会、发布任务、使用公会资金 | 管理层辅助角色 |
| 长老(Elder) | ≤5 | 成员管理、任务奖励审批 | 维持秩序与日常 |
| 干事(Officer) | ≤10 | 组织活动、分配任务 | 中层执行者 |
| 普通成员(Member) | - | 接受任务、参与活动、捐献资源 | 核心贡献主体 |
| 见习成员(Recruit) | - | 无投票权、参与限制 | 新入会成员 |
3.2 权限模型(Permission Model)
采用 RBAC(Role-Based Access Control) 模式,核心设计如下:
type GuildPermission string
const (
PermInviteMember GuildPermission = "guild.invite"
PermApproveJoin GuildPermission = "guild.approve"
PermKickMember GuildPermission = "guild.kick"
PermPublishMission GuildPermission = "guild.mission.publish"
PermUseTreasury GuildPermission = "guild.treasury.use"
PermDiplomacyManage GuildPermission = "guild.diplomacy.manage"
PermBuildUpgrade GuildPermission = "guild.build.upgrade"
PermGuildDissolve GuildPermission = "guild.dissolve"
)
权限由角色配置加载,动态映射:
{
"GuildMaster": ["*"],
"DeputyMaster": ["guild.invite", "guild.approve", "guild.mission.publish", "guild.treasury.use"],
"Elder": ["guild.kick", "guild.mission.publish"],
"Officer": ["guild.mission.publish"],
"Member": [],
"Recruit": []
}
系统通过中间件校验权限:
GuildMiddleware(ctx, requiredPerm GuildPermission)动态注入guild_id与role信息,实现多租户隔离。
四、贡献与任务系统(Contribution & Mission System)
4.1 贡献值机制(Contribution Points)
贡献值是衡量成员活跃度与参与度的基础指标。 系统每日结算并持久化至数据库,用于:
- 排名榜;
- 奖励分配;
- 权限晋升评估;
- Guild EXP 贡献比例。
计算方式:
Contribution = TaskPoints * Weight_Task +
DonationPoints * Weight_Donation +
ActivityPoints * Weight_Activity
默认权重:
- Task = 1.0
- Donation = 0.8
- Activity = 0.5
4.2 公会任务(Guild Missions)
- 类型:建设任务、资源收集、战斗挑战、外交任务;
- 刷新机制:每日 / 每周自动刷新;
- 任务发布:由副会长及以上权限发布;
- 奖励分配:按个人贡献比例结算;
- 并发执行:采用 DelayQueue 异步处理,保证幂等。
任务数据结构:
type GuildMission struct {
ID int64
GuildID int64
Type string
State string // PENDING, RUNNING, COMPLETED
RewardGold int
RewardItem []Item
Deadline time.Time
}
4.3 任务循环(Mission Loop)
- 玩家领取任务 → 状态转为 RUNNING;
- 系统周期性检查进度;
- 达到条件后触发异步回调;
- 分配奖励与贡献;
- 更新 Guild EXP;
- 触发事件总线(EventBus):
bus.Publish(ctx, GuildMissionCompleted{
GuildID: 123,
MissionID: 456,
RewardGold: 1000,
})
五、公会建筑与科技系统(Buildings & Research)
5.1 建筑系统(Construction)
建筑物体现公会的成长与视觉化成就。 主要建筑如下:
| 建筑 | 功能 | 升级收益 |
|---|---|---|
| 公会大厅 | 核心建筑,解锁其他建筑 | 提升公会等级上限 |
| 仓库 | 存储公会资源 | 扩容资源上限 |
| 研究所 | 研发科技 | 解锁公会科技树 |
| 任务板 | 发布与管理任务 | 增加任务数量上限 |
| 战斗大厅 | 组织公会战 | 增强战斗属性加成 |
建筑升级采用异步延迟队列实现:
- 发起建造任务 → 状态转为“建设中”;
- 需消耗资源 + 时间;
- 完成后自动推送公会广播。
5.2 科技系统(Technology Tree)
公会科技是全体成员受益的被动加成系统。
- 研究分支:经济、战斗、防御、社交;
- 研究消耗:公会资源 + 成员贡献;
- 加成效果:全局 Buff;
- 冷却时间:研究完成需等待下一个周期。
六、公会经济与仓库(Economy & Treasury)
6.1 公会货币(Guild Currency)
-
资金来源:
- 成员捐献;
- 活动奖励;
- 税收分成;
-
用途:
- 建筑升级;
- 奖励发放;
- 战斗支持。
资金操作需日志记录:
type GuildTransaction struct {
ID int64
GuildID int64
Operator int64
Amount int
Type string // DONATION, REWARD, BUILD, RESEARCH
Timestamp time.Time
}
6.2 仓库系统(Warehouse)
- 分为公会仓库与个人仓库;
- 所有存取需审批;
- 系统自动统计物资流转;
- 每周结算时触发审计事件。
七、公会外交系统(Diplomacy System)
7.1 联盟与敌对(Alliances & Rivalries)
- 可签订盟约(互不攻击);
- 也可宣战(战争状态);
- 状态变化通过广播同步;
- 外交由会长/副会长决策。
7.2 战争机制(Guild War)
- 每周开启一次;
- 匹配算法:Elo/Glicko-2;
- 胜利获得公会积分;
- 排名进入公会排行榜。
7.3 外交冷却与惩罚
- 每次宣战后冷却 48 小时;
- 若恶意解盟,需缴纳保证金;
- 冷却期间无法参与他公会战。
八、社交与治理(Social & Governance)
8.1 公会公告与消息系统
- 公告由管理层编辑;
- 消息队列异步广播;
- 支持表情与图片;
- 历史公告自动归档。
8.2 投票与民主机制
- 重大决策(如外交、资金分配)需成员投票;
- 投票周期 24 小时;
- 采用加权投票(贡献值为权重);
- 结果自动触发后续任务。
8.3 日志与审计系统
- 每项操作记录日志;
- 异步写入 ElasticSearch;
- 管理员可通过 Web 控制台检索。
九、异步与调度机制(Async & Job System)
9.1 DelayQueue 应用
用于任务建造、科技研究、冷却计时。
type BuildJob struct {
GuildID int64
BuildID int64
FinishAt time.Time
}
9.2 幂等处理
每个任务在执行前检查状态:
if job.State != "PENDING" { return nil }
确保重复触发不会影响结果。
9.3 周期调度(Cron)
- 每日刷新任务;
- 每周发放奖励;
- 每月重置排名。
十、技术实现(Technical Implementation)
10.1 模块划分
guild-core: 核心模型与服务;guild-mission: 异步任务与奖励;guild-economy: 仓库与资金;guild-diplomacy: 战争与联盟;guild-api: REST + WebSocket 接口。
10.2 数据库设计
主要表:
guilds(公会基础信息)guild_members(成员与角色)guild_permissions(权限映射)guild_missions(任务)guild_logs(操作日志)guild_buildings(建筑)guild_research(科技)guild_treasury(资金流水)
10.3 缓存与同步
- Redis 用于实时状态(在线人数、建筑进度);
- DB 用于持久化;
- EventBus 实现跨服务广播。
十一、平衡与反作弊(Balance & Anti-Cheat)
11.1 平衡策略
- 限制单人贡献上限;
- 公会任务随机化;
- 高等级公会维护成本增加;
- 激励循环防通货膨胀。
11.2 防作弊机制
- 任务上报签名校验;
- 异常贡献监测(AI 检测);
- IP + 设备识别;
- 自动封禁可疑账号。
十二、扩展与未来方向(Extension & Future Vision)
- 跨服公会联盟:支持多个服务器联合行动;
- 公会插件系统:允许开发者自定义活动;
- AI 管理助理:自动派发任务与公告;
- 链上治理(On-chain Governance):使用链式签名记录投票与贡献。
十三、总结(Summary)
公会建设系统是游戏的社会化核心。 它既是 玩家留存机制,又是 经济平衡引擎。 通过分层权限、贡献循环与异步任务体系, 公会从单纯的社交组织进化为 自治经济体。
未来版本可引入:
- 动态外交系统;
- 跨服市场;
- AI 驱动的自治治理;
- 真实经济模拟的公会 DAO 化。