3.1 KiB
3.1 KiB
game_ai_npc 模块概览
已创建文件(16 个)
addons/game_ai_npc/
├── __init__.py
├── __manifest__.py
├── models/
│ ├── __init__.py
│ ├── npc.py # NPC 主模型 + Tick 逻辑 + Cron 批处理
│ ├── npc_relationship.py # NPC 关系(好感度/关系层级)
│ ├── npc_behavior.py # 行为日志
│ └── npc_knowledge.py # NPC 所知信息(含谣言/准确性)
├── controllers/
│ ├── __init__.py
│ └── npc_api.py # REST API
├── security/
│ └── ir.model.access.csv
├── views/
│ ├── npc_views.xml # NPC 角色(列表+表单+ Cron)
│ ├── npc_relationship_views.xml
│ ├── npc_behavior_views.xml
│ ├── npc_knowledge_views.xml
│ └── menu.xml # 菜单:AI NPC → 角色/关系/日志/知识
├── data/
│ └── game_npc_data.xml # 7 个 NPC + 关系 + 知识 种子数据
└── overview.md
模型结构
| 模型 | 用途 |
|---|---|
game.npc |
角色(身份/性格/统计/目标/行为刻) |
game.npc.relationship |
关系(好感度-100~100、自动推导层级) |
game.npc.behavior.log |
行为日志(每次 Tick 自动记录) |
game.npc.knowledge |
知识体系(含准确性、来源) |
核心设计
NPC Tick 周期(Odoo Cron 每 15 分钟推一次):
- 按角色类型日程表确定当前活动(居民/商人/战士/学者/工匠/领袖/游荡者各有不同日程)
- 消耗基础资源(精力↓、饱腹↓)
- 应用活动效果(劳作涨目标进度、用餐涨饱腹、睡眠涨精力)
- 30% 概率触发社交 → 性格兼容性计算 → 好感变化 → 关系层级自动推导
- 综合状态更新心情
- 记录行为日志
关系系统:好感度 -100~100,自动推到 7 个层级(死敌→敌对→陌生人→熟人→朋友→挚友→至亲),性格兼容性影响社交互动结果。
API 端点
| 路由 | 方法 | 说明 |
|---|---|---|
/game/api/npcs |
GET | 所有活跃 NPC 列表 |
/game/api/npc/<id> |
GET | NPC 详情(含关系+行为+知识) |
/game/api/npc/<id>/relationships |
GET | NPC 关系网 |
/game/api/npc/<id>/tick |
POST | 手动触发单个 NPC Tick(需登录) |
/game/api/npc/tick-all |
POST | 批量 Tick 所有 NPC(需登录) |
种子数据(7 个角色)
| NPC | 类型 | 性格 | 目标 |
|---|---|---|---|
| 张伯·老村长 | 领袖 | 严肃 | 维持村落安全 |
| 林铁柱·铁匠 | 工匠 | 刚毅 | 铸灵器级武器 |
| 柳絮·游方学者 | 学者 | 好奇 | 记录古遗迹 |
| 花娘·行商 | 商人 | 开朗 | 开辟跨层商路 |
| 阿猛·猎户 | 战士 | 大胆 | 猎杀三尾狐兽 |
| 老鬼·流浪药师 | 游荡者 | 神秘 | 寻忘忧草 |
| 小禾·农家女 | 居民 | 善良 | 学会识字记账 |
初始关系:张伯↔林铁柱(信赖)、张伯↔花娘(商业伙伴)、柳絮↔小禾(师生)、阿猛→柳絮(暗恋)。