跳到主要内容

PRD-073 子嗣生育

文档编号:PRD-073
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/family/childbirth.lua

1. 背景与目标​

结婚系统(PRD-004)解决夫妻关系,生育系统承接“家庭”长线养成。当前缺少求子、怀孕、生产、资质继承的完整规则,本 PRD 补齐从求子到子女出生的链路。

目标

  • 夫妻满足条件后可求子,怀孕有等待期与安胎互动。
  • 子女的性别、资质、天赋由父母属性与随机共同决定。
  • 生育有次数/冷却限制,防止刷小号与数值膨胀。

不做

  • 不做真实生理描写;怀孕以“孕育灵胎/子嗣”的游戏化形式表现。
  • 不做离婚后的抚养权争夺,怀孕期间禁止离婚/转服。

2. 核心规则​

2.1 求子条件​

  • 双方已婚,等级 ≥ 40,亲密度 ≥ 3000。
  • 双方在线且在同一地图,消耗“求子符”+ 金币。
  • 每对夫妻最多 2 个子女,求子冷却 7 天。
  • 怀孕期间不可再次求子、离婚、转服、上架角色。

2.2 怀孕​

  • 怀孕持续 72 小时(现实时间),期间获得“孕育”状态。
  • 每日可进行 3 次安胎互动(陪伴/听曲/散步),每次增加 1 点“胎息”。
  • 胎息 0–9 点,出生时按胎息提升资质随机上限。
  • 怀孕期间战斗属性 -10%,不能参加竞技场/跨服联赛。

2.3 生产​

  • 怀孕结束后,夫妻双方(至少一方)到“稳婆”NPC 处接生。
  • 性别随机 50/50;资质分普通/优秀/天才,权重受父母资质与胎息影响。
  • 子女天赋 1–3 个,从父母天赋池 + 通用池抽取。
  • 生产后全服公告(可配置),发放家庭称号/纪念品。

2.4 资质继承​

子女基础资质 = 父母同项资质均值 × 0.6 + 随机(0, 20) + 胎息加成
  • 资质影响成长上限与成年职业倾向。
  • 父母资质越高,天才概率越高,但设上限。
  • 子女归属夫妻双方,账号绑定,不可交易/丢弃。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/family/childbirth.lua
Childbirth = {
level = 40,
intimacy = 3000,
gestation_hours = 72,
max_children = 2,
cooldown_days = 7,
care_per_day = 3,
}

function OnConceive(ctx, husband, wife)
if not ctx:IsMarried(husband, wife) then return ctx:Fail(husband, "未结婚") end
if ctx:GetChildCount(husband) >= Childbirth.max_children then
return ctx:Fail(husband, "子女数量已达上限")
end
if not ctx:Consume(husband, "child_token", 1) then
return ctx:Fail(husband, "求子符不足")
end
ctx:CreatePregnancy(husband, wife, Childbirth.gestation_hours)
ctx:SetCooldown(husband, Childbirth.cooldown_days)
end

function OnCare(ctx, role, pregnancy_id)
local p = ctx:GetPregnancy(pregnancy_id)
if not ctx:IsParent(role, p) then return ctx:Fail(role, "不是父母") end
if ctx:GetCareCount(role, p) >= Childbirth.care_per_day then
return ctx:Fail(role, "今日安胎次数已用完")
end
ctx:AddFetalBreath(p, 1)
ctx:AddCareCount(role, p, 1)
end

function OnBirth(ctx, pregnancy_id)
local p = ctx:GetPregnancy(pregnancy_id)
local child = ctx:CreateChild(p, ctx:RollGender(), ctx:RollAptitude(p))
ctx:BindChildToParents(child, p.husband, p.wife)
ctx:Broadcast("world", "恭喜 " .. ctx:GetName(p.husband) .. " 与 " .. ctx:GetName(p.wife) .. " 喜得子嗣")
end
  • 怀孕状态、胎息、安胎次数持久化,重启后按剩余时间恢复。
  • 性别/资质/天赋由服务端随机并记录种子。
  • 出生是一个事务:创建子女、绑定父母、发奖、公告。

3.2 数据结构​

struct Pregnancy {
uint64_t id, husband, wife;
uint32_t start_time, due_time;
uint8_t fetal_breath;
uint8_t care_today;
};

struct Child {
uint64_t child_id, father, mother;
uint8_t gender;
uint8_t aptitude; // 1 普通 / 2 优秀 / 3 天才
uint16_t base_attrs[4]; // 体质/智力/魅力/武艺
uint32_t talents[3];
uint32_t birth_time;
uint8_t stage;
};

3.3 协议​

方向协议说明
C→SCS_Conceive求子
C→SCS_PregnancyCare安胎
C→SCS_Birth接生
S→CSC_PregnancyInfo怀孕进度/胎息
S→CSC_ChildInfo子女资质/天赋

3.4 异常与限制​

  • 怀孕期间离婚/转服/上架角色:拒绝并提示。
  • 一方长期离线:怀孕计时继续,生产时至少一方在线即可。
  • 服务器重启:按 due_time 恢复;已到期未接生的,登录后可补接生。
  • 子女数量上限按夫妻共享计算,不按单角色。

4. 客户端设计​

  • 家庭面板:夫妻信息、子女列表、求子按钮、冷却。
  • 怀孕界面:倒计时、胎息、安胎互动按钮、注意事项。
  • 生产动画/仪式,子女资质与天赋展示。
  • 子女卡片:性别、资质、天赋、出生时间、阶段。
  • 全服公告与家庭称号展示。

5. 配置与 Lua 接口​

配置说明
level / intimacy求子条件
gestation_hours怀孕时长
max_children子女上限
cooldown_days求子冷却
aptitude_weight资质权重

Lua 接口:IsMarried、CreatePregnancy、AddFetalBreath、RollGender、RollAptitude、CreateChild、BindChildToParents。

6. 边界与异常​

场景处理
怀孕中离婚拒绝
怀孕中转服拒绝
双方都离线到生产保留怀孕状态,上线后接生
重复接生幂等,返回已有子女
子女上限拒绝求子
脚本异常怀孕状态保留,修复后继续

7. 验收标准​

  • 求子条件/冷却/上限正确。
  • 怀孕计时、安胎、胎息、生产正确。
  • 性别/资质/天赋随机与继承符合配置。
  • 离婚/转服/重启/重复接生处理正确。
  • 子女数据与父母绑定,不可交易。

相关阅读: