跳到主要内容

PRD-003 PK、红名与监狱

文档编号:PRD-003
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:ScenesServer/Pk.cpp、RecordServer、tbl/Pk.xml

1. 背景与目标​

PK 规则决定野外冲突与装备风险。当前存在善恶模式切换无 CD、红名爆装概率不透明、监狱可被传送道具绕过等问题。本 PRD 统一 PK 模式、PK 值、红名、爆装、监狱与洗红。

2. 核心规则​

2.1 PK 模式​

模式可攻击被攻击说明
和平不可可默认
组队可攻击非队友可队伍内免伤
帮会可攻击非帮会可帮会内免伤
阵营可攻击敌对阵营可国战/战场
全体可攻击所有人可红名/惩罚
  • 切换模式有 10 秒 CD,战斗中不可切换。
  • 安全区禁止 PK,强制和平模式。

2.2 PK 值与红名​

  • 击杀白名玩家 +100 PK 值,击杀红名 +10,击杀怪物 -1。
  • PK 值 ≥ 100 变红名,≥ 200 变深红。
  • 红名死亡爆装概率提升,掉落非绑定装备/背包物品。
  • PK 值每 5 分钟自然衰减 1 点,在线才衰减。

2.3 监狱​

  • 红名被击杀/被守卫击杀进入监狱,刑期按 PK 值计算。
  • 监狱内禁止 PK、交易、邮件附件领取。
  • 可通过在线时长/洗红道具/任务减刑。
  • 传送道具在监狱内失效。

2.4 爆装与保护​

  • 白名死亡不掉装备,红名按 PK 值分档掉 1–2 件非绑定装备。
  • 绑定/新手保护装备不掉落。
  • 击杀者获得掉落归属,保护期 60 秒。
  • 同 IP/同设备反复击杀判定为恶意刷 PK。

3. 服务端设计​

3.1 数据结构​

struct PkState {
uint8_t mode;
uint32_t pk_value;
uint32_t jail_until;
uint32_t last_mode_change;
uint32_t kill_count;
};

3.2 协议​

方向协议说明
C→SCS_PkMode切换模式
C→SCS_PkValue查询 PK 值
S→CSC_PkState模式/PK 值/红名
S→CSC_PkKill击杀公告/爆装
S→CSC_JailState监狱状态/刑期

3.3 击杀结算​

玩家死亡
→ 判断击杀者/模式/安全区
→ 计算 PK 值变化
→ 红名判定 → 爆装判定
→ 进入监狱(如满足)
→ 广播 SC_PkKill / SC_JailState
→ 写 pk_log

3.4 防滥用​

  • 同账号/同 IP 互杀不增加 PK 值,不掉落。
  • 低等级保护:等级差 > 20 不增加 PK 值。
  • 安全区/复活点附近击杀无效。
  • 洗红道具使用有冷却与日志。

4. 客户端设计​

  • 名字颜色:白/黄(灰名)/红/深红,头像边框同步。
  • PK 模式切换按钮,显示 CD 与当前模式。
  • 击杀提示:击杀者、被击杀者、爆装物品、PK 值变化。
  • 监狱界面:刑期倒计时、减刑按钮、禁止操作提示。
  • 安全区提示:进入安全区自动和平,离开可恢复。

5. 配置​

Pk.xml:pk_per_kill、red_threshold、deep_red_threshold、decay_interval、jail_base_time、drop_rate、protect_level_gap。

6. 边界与异常​

场景处理
安全区攻击拒绝
战斗中切模式拒绝
红名下线PK 值保留,刑期暂停
监狱中使用传送拒绝
击杀同 IP不加 PK 值,记录风控
服务器重启PK 值/刑期从 DB 恢复

7. 验收标准​

  • 五种 PK 模式、安全区、切换 CD 正确。
  • PK 值增减、红名、衰减、监狱刑期正确。
  • 爆装概率、保护装备、归属正确。
  • 同 IP/低等级保护防刷生效。
  • 客户端名字颜色/监狱状态与服务端一致。