07 · 社交与元系统
社交/元层 = 主线推进之外的后期长线留存簇。它不提供"秒级正反馈",而是给中后期玩家一组慢节奏、跨周期的目标:俱乐部 50 级慢爬、44 成就全周期埋点、家园锤子收集、排行榜竞争、好友邀请。本篇拆解5 个子系统:俱乐部 / 成就 / 家园 / 排行榜 / 玩家·好友,每个讲清「设计目标 · 机制 · 数据与公式 · 平衡 · 设计意图」。重逻辑由服务器驱动的项明确标注。
〇为什么把这些系统归成一簇
核心循环(01)和养成(04)解决"在线密集反馈"和"中期收入爆发",但放置游戏真正的命门在后期:玩家把主线 60 城推到一定深度后,"换城重置"的新鲜感会衰减。社交与元系统就是专门钉在后期/长线时间尺度上的留存装置,有四个共性:
1 · 慢节奏、跨周期
俱乐部 50 级要爬到累计 24 万 XP,44 成就横跨全部系统,家园要攒数千锤子——都不是一两天能做满的目标。
2 · 主线进度门控解锁
靠餐厅 ID 里程碑晚开(俱乐部餐厅 6000、约第 6 城),刻意避开新手期,专给"已经留下来的人"。
3 · 产出回流单人养成
俱乐部奖励反哺主线(全店利润倍率、宠物食物、装备宝箱),成就奖励给星星+钻石——社交系统不是孤岛,而是又一条喂养主循环的资源管道。
4 · 社交是壳、单人是核
除榜/好友外,大部分"社交"其实是异步的(领奖、刷量),真正的多人实时交互很轻——这是放置品类的典型取舍。
| 子系统 | 时间尺度 | 解锁门控 | 产出回流 | 核心数据落点 |
|---|---|---|---|---|
| 俱乐部 Clubs | 长线(50级慢爬) | 餐厅6000(约第6城) | 全店利润×、宠物食物、宝箱、史诗蛋 | 俱乐部配置(榜/人数在服务器侧) |
| 成就 Achievements | 全周期 | 餐厅/工位/厨师等级门槛 | 星星(770)+钻石(1–180) | 成就奖励配置(44) |
| 家园 HomeMeta | 长线收集 | 主线餐厅购买掉锤子 | 无(纯装饰 sink) | 家园装修项配置 |
| 排行榜 Leaderboard | 周期竞争 | 活动/全球榜 | 奖励服务器下发 | 排行榜配置(仅重试参数,核心在服务器侧) |
| 玩家·好友 | 留存社交 | — | 邀请奖励服务器下发 | 邀请配置(仅计时,多在服务器侧) |
①俱乐部 Clubs(后期社交长线)
俱乐部要解决的问题是:给已经玩到后期的玩家一条"永远在涨"的社交进度条,并把它的奖励接回单人主循环。它不是排位竞技,而是一个异步协作的等级容器——一群人共同把俱乐部从 Lv0 爬到 Lv50,每升一级解锁一份奖励。
1.1 解锁门控
俱乐部配置字段:
| 字段 | 值 | 含义 |
|---|---|---|
_unlockRestaurantId | 6000 | 餐厅 6000 解锁俱乐部(≈ 第 6 城开头,门控逻辑见 02 ID 编码) |
_showRestaurantId | 2001 | 餐厅 2001 起 UI 露出入口(早于解锁,做"预告诱导") |
_clubCreationCost | 1000 | 创建俱乐部花费 1000 钻 |
_clubNameUpdateCost | 500 | 改名花费 500 钻 |
_clubSettingsUpdateCost | 100 | 改设置(简介/标签)花费 100 钻 |
_useLocalServer | 0 | 走线上服务器 |
_clubNameUpdateCost=500,与"改设置 100"(_clubSettingsUpdateCost)是两个独立字段,别混淆。设计取舍:6000 解锁 + 2001 露出 = 先让玩家看见、晚让玩家进。早期 5000 级别玩家会在 UI 里反复瞥见俱乐部入口却进不去,制造期待;真正开放时玩家已是付费/留存意愿都更高的"后期人群"。创建收 1000 钻是软门槛——筛掉随手建群、避免空俱乐部泛滥。
1.2 等级与 XP 曲线
俱乐部等级数据字段 Level / XpToNextLevel / TotalXp。共 50 级(索引 Lv0–49,Lv0 起始无奖励,Lv49 满级 xp_to_next=0)。
| 锚点 | 累计 XP | 单级 XP |
|---|---|---|
| Lv1 | 150 | 200 |
| Lv10 | 9,550 | 2,500 |
| Lv25 | 72,950 | 5,800 |
| Lv49(满级) | 241,950 | 0 |
曲线是典型的"前快后线性"软上限:Lv0–10 单级 XP 从 150 陡增到 2500(逐级 ×~1.4),Lv20 后增速放缓近似线性(Lv30=6400 → Lv49=8200,每级仅 +100 左右)。
1.3 升级奖励:回流单人养成
俱乐部奖励数据字段 Level / RewardType / RewardValue(double);另有 GetAllProfitMultiplier(level) 读取全局利润倍率。每升一级发一份奖励,奖励类型(俱乐部奖励类型,完整枚举 0–8):
枚举 俱乐部奖励类型: 0=Gems 1=PetFood 2=AllProfit 3=SmallBox 4=BigBox 5=PetBox 6=ClubBox 7=EpicEgg 8=LegendaryEgg # 这些奖励全部回流单人系统:钻石进通用货币、宠物食物喂养成(04)、 # 各类宝箱掉装备、史诗/传奇蛋孵宠物。
最关键的回流是 AllProfit(全店收益倍率)——一个永久的全局利润乘数,直接接到主循环每单收入上:
AllProfit 共 15 档,从 Lv2 的 ×1.05 起,每隔几级递增,到 Lv47 达成 ×2.0:
| 等级 | 倍率 | 等级 | 倍率 | 等级 | 倍率 |
|---|---|---|---|---|---|
| Lv2 | ×1.05 | Lv18 | ×1.30 | Lv35 | ×1.55 |
| Lv5 | ×1.10 | Lv22 | ×1.35 | Lv38 | ×1.60 |
| Lv8 | ×1.15 | Lv25 | ×1.40 | Lv41 | ×1.70 |
| Lv12 | ×1.20 | Lv28 | ×1.45 | Lv44 | ×1.80 |
| Lv15 | ×1.25 | Lv32 | ×1.50 | Lv47 | ×2.0 |
1.4 服务器侧机制
以下俱乐部机制客户端无配置,由服务器驱动:
| 机制 | 客户端状态 | 裁定 |
|---|---|---|
人数上限 MaxMemberCount | 运行时 ReactiveProperty<int>,无客户端默认值 | 服务器侧 由服务器下发 |
| 捐献/贡献/拆解机制 | 客户端只有相关 UI View,无 cost/reward 字段 | 服务器侧 逻辑全在服务器 |
俱乐部宝箱 ClubBox 掉率 | 客户端未内联 | 服务器侧 归服务器奖励池 |
1.5 升级判定伪代码
# 俱乐部升级(异步协作:所有成员贡献 XP 累积到俱乐部) 玩家贡献(club, xp): # 贡献来源服务器侧(捐献/活跃) club.totalXp += xp while club.totalXp >= 俱乐部等级表[club.level].升级所需经验: # 查等级表 club.level += 1 # 升级 reward = 俱乐部奖励表[club.level] # 取本级奖励 发放到玩家(reward.type, reward.value) # 回流单人系统 if reward.type == AllProfit: player.globalProfitMult = reward.value # 永久全局利润乘子,接主循环收入 if club.level >= 49: break # Lv49 满级封顶(xpToNext=0) # 解锁门控(主线进度逐个开侧系统,见 02) if restaurant.id >= 2001: 显示俱乐部入口 # _showRestaurantId 预告 if restaurant.id >= 6000 and 花费(1000钻): 解锁创建 # _unlockRestaurantId + _clubCreationCost
②成就 Achievements(全周期目标埋点)
成就要做的是用一张表覆盖全部系统的"行为目标"——让玩家无论在玩哪个系统(经营/装备/活动/宠物/公会),都有一个"再做 X 次就解锁下一档奖励"的隐性驱动。它是贯穿整个生命周期的目标埋点网,和俱乐部(钉后期)不同,成就从新手期就开始计数。
2.1 数据结构
成就拆在两张表里、按下标一一对应:
- 目标定义 成就配置(44 条):
Name / Type(0–4 大分类) / 解锁门槛(餐厅 ID / 工位 ID / 厨师等级解锁条件,-1=不用) /Condition.ConditionType(目标 tag) /Condition.PrimaryTargetValues(10 档递增目标)。 - 奖励定义 成就奖励配置(44 条):字段
StarReward(每档授予的星星,固定 1/2/3/4) /GemRewards(List<int>)(10 档对应钻石)。
每个成就 = 10 个档位逐档解锁;每完成一档给 StarReward 颗星 + 该档钻石。奖励 = 星星 + 钻石。
_rewards(旧数组,钻石 2–120) 和 Rewards(Dictionary<string,…> 键控版 / rewardsDict,钻石 1–180),StarReward 两份完全相同。本文奖励数值统一采用 rewardsDict(运行时实际生效版本)。2.2 覆盖维度:44 成就跨 5 大系统
Type 字段对应游戏内成就分页 Tab:
| Type | 维度 | 成就数 | 代表目标类型 |
|---|---|---|---|
| 0 | 核心经营 | 14 | 开餐厅/到城/升工位/送餐/小费/雇员/做菜/即食/赚现金/花钻 |
| 1 | 装备 | 6 | 熔炼/升级/满级/拆解/开箱 |
| 2 | 活动 | 13 | Adventure/Zeus/Pirates/Race/Potion/各类徽章/NightmareTime |
| 3 | 宠物 | 7 | 升级/孵化/喂食/合并/小费/送餐/等级 |
| 4 | 公会/金库 | 4 | 金库升级满级/公会拆解/领奖 |
全部 44 种目标类型 ConditionType(完整枚举)
InviteHelper · FinishDelivery · SelectDish · EarnCash · CookDish · ReachCityLevel · UpgradeStation · PickUpTip · InstantFood · HireStaff · GemsSpent · CityTime · RenovateSolo · RenovateInTime · SalvageEquipment · BoxesOpened · EquipmentLevel · AdventureEquipmentLevel · EquipmentForged · EquipmentMaxLevel · CompleteAdventures · ZeusLevel · PiratesLevel · RaceStars · PotionsBottled · MiddleAgeBadge · SeaportBadge · MoonBadge · MineBadge · RaceRankTimes · EventBadge · PotionShopTime · NightmareTime · PetUpgrade · EggHatch · PetFoodSpent · PetMerge · PetTipsCollected · PetDelivery · PetLevel · VaultUpgrade · VaultMax · ClubSalvage · ClubRewardsCollected
2.3 奖励数值分布 (rewardsDict)
星星 StarReward:每档授予 1–4 颗,全部 44 成就满级(每个 10 档)总星星 = 770 颗。分布:
| starReward | 成就数 | 说明 |
|---|---|---|
| 1 星/档 | 20 | 高频基础行为 |
| 2 星/档 | 16 | 中等价值 |
| 3 星/档 | 7 | 高价值 |
| 4 星/档 | 1 | 仅 CompleteAdventures(星密度最高,满级 40 星) |
钻石 gemRewards:单档 1–180,全表 440 格总和 12,135。钻石只用 5 套递增模板按价值分级复用:
| 复用次数 | 10 档钻石序列 | 用途 |
|---|---|---|
| ×3 | 1,2,2,3,4,5,7,9,11,15 | 最低档(刷量:做菜/升工位/雇人) |
| ×13 | 2,3,4,6,8,10,13,17,25,30 | 低档(高频基础行为) |
| ×18 | 5,9,11,15,20,25,35,45,60,70 | 中档(装备/事件/宠物深度) |
| ×8 | 8,14,18,25,30,40,50,70,90,120 | 高档(限时挑战/徽章/满级) |
| ×2 | 12,20,25,35,45,60,80,100,140,180 | 顶档(NightmareTime / VaultMax) |
钻石逐档单调递增且后期加速(各档全表列和 207→3015,越高档回报越大),是典型长尾激励:前档便宜易得维持高频反馈,后档昂贵稀有钓住硬核玩家。
2.4 解锁判定伪代码
# 成就逐档解锁(全周期后台计数) 玩家行为发生(actionTag, amount): # 任何系统的行为都打 tag for ach in achievements where ach.conditionType == actionTag: if not 满足门槛(ach): continue # Restaurant/Station/ChefLevel 门槛 ach.progress += amount while ach.progress >= ach.primaryTargetValues[ach.tier]: # 10 档逐档判定 发放(star = ach.starReward) # 固定星星(1~4) 发放(gem = ach.gemRewards[ach.tier]) # 该档钻石(rewardsDict) ach.tier += 1 if ach.tier >= 10: break # 满级 10 档封顶 # 特例:限时类目标"越小越难",PrimaryTargetValues 递减 # CityTime 30→5 分钟 / NightmareTime 300→10 / RaceRankTimes 名次 9→1 # EarnCash 仅 9 档(数据本身如此,画图/解析需特判)
2.5 二级系统:成就 Pass
成就段位数据:把累计星星(共 770 可得)再转化成10 个段位的双轨奖励,每段含 FreeRewards(免费轨)+ PassRewards(付费 Pass 轨)。这是把成就星星变现的一层——全量段位与奖励如下表:
| 段位 | 所需星星 | 免费轨 FreeRewards | 付费轨 PassRewards |
|---|---|---|---|
| Newbie | 0 | 5 钻 | 25 钻 |
| Dish Washer | 20 | 30 钻 + 2 小宝箱 + 装备 Tool_RubberGloves | 150 钻 + 1 大宝箱 + 装备 Hat_Bandana |
| Waiter | 30 | 50 钻 + 4 小宝箱 + 装备 Tool_Pitcher | 250 钻 + 2 大宝箱 + 1 宠物宝箱 + 装备 Body_SpiceJarBelt |
| Kitchen Novice | 50 | 100 钻 + 6 小宝箱 + 50 宠物粮 + 装备 Tool_SoySauce | 500 钻 + 3 大宝箱 + 2 宠物宝箱 + 装备 Hat_PotHead |
| Commis Chef | 60 | 200 钻 + 2 大宝箱 + 100 宠物粮 + 装备 Tool_FlameTorch | 1,000 钻 + 4 大宝箱 + 3 宠物宝箱 + 装备 Body_GoldenApron |
| Line Cook | 70 | 500 钻 + 3 大宝箱 + 150 宠物粮 + 装备 Tool_FryingPan | 2,500 钻 + 6 大宝箱 + 4 宠物宝箱 + 装备 Pet_ManekiNeko_Legendary |
| Sous Chef | 90 | 700 钻 + 4 大宝箱 + 250 宠物粮 + 装备 Tool_SaucePan | 3,500 钻 + 8 大宝箱 + 5 宠物宝箱 + 装备 Necklace_Hat |
| Head Chef | 110 | 1,000 钻 + 5 大宝箱 + 400 宠物粮 + 装备 Tool_SilverRollingPin | 5,000 钻 + 10 大宝箱 + 6 宠物宝箱 + 装备 Pet_Gnome_Ultimate |
| Master Chef | 130 | 1,500 钻 + 6 大宝箱 + 500 宠物粮 + 装备 Tool_Saucer | 7,500 钻 + 15 大宝箱 + 8 宠物宝箱 + 装备 Necklace_Burger |
| Culinary Legend | 150 | 2,000 钻 + 8 大宝箱 + 750 宠物粮 + 装备 Body_ChefJacket | 10,000 钻 + 20 大宝箱 + 10 宠物宝箱 + 装备 Tool_Trophy |
10 段星星门槛合计 710,略低于全成就总池 770,留有约 60 星余量;免费轨钻石合计 6,085、Pass 轨合计 30,425(约 5 倍),付费轨还独占宠物宝箱与传奇/终极级装备(Pet_ManekiNeko_Legendary、Pet_Gnome_Ultimate)。数据结构中另有永久倍率、免广告、装备槽等奖励字段,但本版数据全部为 0/空,未启用。
③家园 HomeMeta(独立锤子货币的收集轴)
家园 meta 的角色很特殊:它是一条和主线金币完全解耦的、纯收集向的侧进度。玩家在主线餐厅购买/升级时会掉落锤子 Hammer,锤子只能花在家园装修上——这给玩家提供一个"和数值爬坡无关、纯外观满足"的副目标。
3.1 机制与数据
家园装修项配置:5 个装修项 × 5 级,升级货币 Hammer(锤子)。
| 装修项 | Lv1 | Lv2 | Lv3 | Lv4 | Lv5 | 单项累计 |
|---|---|---|---|---|---|---|
| garden 花园 | 5 | 15 | 25 | 50 | 100 | 195 |
| house 房屋 | 10 | 25 | 50 | 100 | 200 | 385 |
| seating 座位 | 15 | 40 | 75 | 150 | 300 | 580 |
| driveway 车道 | 20 | 50 | 100 | 200 | 400 | 770 |
| vehicle 车辆 | 25 | 60 | 125 | 250 | 500 | 960 |
| 全满合计 | 195+385+580+770+960 = | 2,890 | ||||
成本曲线项内逐级翻番、项间起步递增:每项 Lv5 大致是 Lv1 的 20 倍,5 项起步从 5 递增到 25。全满 = 2,890 锤子(5 项累计求和)。
3.2 关键取舍:纯装饰 sink,零回流
家园装修项配置只有 3 个字段:Key / DisplayName(LocalizedString) / Levels(int[]=锤子成本),无任何 reward/profit/boost/multiplier 字段;存档只存 Index+Level。锤子是单向流入:主线餐厅购买掉锤子 → 花在家园装修 → 仅改变外观,零数值反馈。
3.3 升级伪代码
# 主线购买掉锤子(单向流入) 玩家在主线餐厅购买/升级: # HomeMetaSetupHammerRestaurantBuyRewardSystem player.hammers += dropHammers # 数额服务器/掉率侧 # 家园升级(纯锤子 sink,无奖励发放) 玩家升级装修项(item): cost = 家园装修成本表[item][item.level] # 查成本表 if player.hammers >= cost and item.level < 5: player.hammers -= cost item.level += 1 更新家园外观(item) # 仅视觉,无 boost / 无产出 / 不回流主线
④排行榜 Leaderboard(竞争留存,多服务器侧)
排行榜提供社会比较驱动的留存:全球榜(GlobalLeaderBoard)让玩家看到自己的城市/餐厅进度排名,竞速活动(RestaurantRaceEvent,见 05)按名次发奖。它把"数值爬坡"转成"和别人比"的动机。
4.1 数据:核心在服务器
排行榜配置客户端只配了 2 个连接参数(无其它字段):
| 字段 | 值 | 含义 |
|---|---|---|
_joinRetryCount | 3 | 加入榜单失败重试 3 次 |
_joinRetryTimeout | 20 | 重试超时(单位秒) |
其余 16 个 leaderboard 相关类(GlobalLeaderBoardEntry、RestaurantRaceLeaderboardEntry、LeaderBoardRewardsPanelView 等)全部是纯 UI View:只有引用与布局,无任何榜单奖励数值。竞速榜的 _reward 字段也只是 UI 指针,不含数值。
⑤玩家·好友(UserProfiles / Invite / CharacterInvite / FollowPlayer / Auth)
这组系统支撑社交留存的最外层:玩家档案展示、邀请助手、关注其他玩家、账号鉴权。它们的共性是——绝大多数是服务器侧逻辑,客户端几乎无数值配置。本节逐一诚实裁定,避免编造。
5.1 逐项裁定
客户端配置交叉核对:
| 子系统 | 客户端数值? | 结论 |
|---|---|---|
| UserProfiles | 无 | 服务器侧 无 UserProfile 配置类,客户端只有展示 View(ClubMemberProfileView、InviteProfileEntryView 等),玩家档案由服务器下发。 |
| Invite | 奖励无、仅 UI 文案 | 服务器侧 本地化 InviteRewardsCloudSaveNotice / HelperInviteInfo 用 <sprite=2>(货币图标)不带任何数量,邀请奖励量由服务器决定。 |
| CharacterInvite | 有(唯一客户端数值) | 见下方计时配置。 |
| FollowPlayer | 无 | 服务器侧 无 FollowPlayer 类、无相关本地化、无数值引用。 |
| Auth | 无 | 服务器侧 无任何 Auth/Authentication 配置类,认证纯服务器侧。 |
5.2 CharacterInvite:唯一的客户端数值
邀请配置("装扮自己的角色被别人邀请"玩法,单位秒):
| 字段 | 值 | 含义 |
|---|---|---|
CharacterInviteDuration | 480 | 被邀角色停留 8 分钟 |
CharacterInviteCooldown | 1800 | 冷却 30 分钟 |
CharacterListResetIntervalSeconds | 1500 | 可邀请列表刷新 25 分钟 |
CharacterInviteExtendWindowDuration | 30 | 延长窗口 30 秒 |
_characterInvitedIdleTime | 1 | — |
UseLocalServer | 0 | 走线上服务器 |
奖励来源为引用装备宝箱配置(装备宝箱)——具体掉落表在装备系统(04),不在此处内联。
⑥本篇小结:社交/元系统的共性取舍
回到 00 总览 的根本取舍——这五个系统都是"后期/长线留存"的不同切面,且都遵循同一套设计原则:
1 · 慢节奏远期目标
俱乐部 50 级累计 24 万 XP(前快后线性)、成就 770 星全周期埋点、家园 2890 锤子收集——都不是短期能做满的,提供持续的回访理由。
2 · 晚门控、专供后期
俱乐部餐厅 6000 才开、2001 先露出预告——专给已留存人群,避开新手期。
3 · 产出回流单人养成(除家园外)
俱乐部 AllProfit×2 直接接主循环收入、俱乐部/成就/CharacterInvite 都掉装备宝箱+宠物食物+钻石——社交系统是又一条喂养主循环的资源管道,不是孤岛。
4 · 家园是例外的"零回流情感轴"
用"无 boost"换"零平衡风险",纯锤子 sink + 审美满足,是克制的取舍。
5 · 社交是壳、单人是核 + 重逻辑放服务器:榜单/人数/捐献/邀请奖励/鉴权全在服务器侧——客户端只留 UI 与极简参数,换取实时性、防作弊、运营可远程调。多人实时交互很轻,符合放置品类定位。
| 系统 | 慢目标 | 回流主线 | 服务器侧成分 |
|---|---|---|---|
| 俱乐部 | 50 级 / 24 万 XP | AllProfit×2 + 宝箱/宠粮 | 人数/捐献/榜 |
| 成就 | 770 星全周期 | 星+钻+Pass | 无(纯客户端配置) |
| 家园 | 2890 锤子 | 无(纯装饰) | 锤子掉率 |
| 排行榜 | 周期竞争 | 服务器下发奖励 | 核心全在服务器 |
| 玩家·好友 | 留存社交 | CharacterInvite 装备箱 | 多在服务器 |