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→S | CS_Conceive | 求子 |
| C→S | CS_PregnancyCare | 安胎 |
| C→S | CS_Birth | 接生 |
| S→C | SC_PregnancyInfo | 怀孕进度/胎息 |
| S→C | SC_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. 验收标准
- 求子条件/冷却/上限正确。
- 怀孕计时、安胎、胎息、生产正确。
- 性别/资质/天赋随机与继承符合配置。
- 离婚/转服/重启/重复接生处理正确。
- 子女数据与父母绑定,不可交易。
相关阅读: