⚠️ 开发阶段警告本插件目前处于开发阶段,可能存在不稳定的功能和未完善的特性。欢迎加入 QQ 群:1054962131 进行讨论和建议,共同完善插件功能。
一个为 AstrBot 设计的 SLG (策略游戏) 插件,让用户可以在聊天中体验三国题材的策略游戏。
- 资源管理: 管理四种基础资源——粮食、金钱、石头和军队
- 建筑系统: 升级四种建筑——农田、钱庄、采石场和军营,以提高资源产量和容量
- 角色收集: 通过抽卡系统收集三国武将,每个角色都有独特的技能
- 队伍编成: 将收集到的角色编入队伍,进行战斗
- 同盟系统: 创建或加入同盟,与其他玩家合作
- 战斗系统: 基于角色技能和兵力进行战术战斗模拟
- 基地系统: 拥有和迁移基地城市
- 三国地图: 基于真实三国时期地理位置的地图系统
- 城市关系: 城市之间通过城门连接,形成战线
- 战线推进: 可以推进城市间的战线,包含里程碑系统
- 地图可视化: 支持将地图渲染为图片进行展示
- 智能战斗: 使用 LLM 进行战斗结果预测和战术分析
- 动态评估: 基于角色技能和兵力进行多维度战斗评估
- 依赖注入: 使用容器模式管理服务依赖
- 端口与适配器: 通过端口抽象数据访问,支持不同存储后端
- 管道模式: 使用处理管道处理游戏事件
astrbot_plugin_slg/
├── app/ # 应用层
│ ├── container.py # 依赖注入容器
│ └── __init__.py
├── app_pipeline/ # 处理管道
│ ├── pipeline.py # 管道实现
│ ├── stages.py # 处理阶段
│ └── __init__.py
├── domain/ # 领域层
│ ├── constants.py # 游戏常量
│ ├── entities.py # 领域实体
│ ├── ports.py # 端口定义
│ ├── services.py # 核心服务
│ ├── services_alliance.py # 同盟服务
│ ├── services_base.py # 基地服务
│ ├── services_battle.py # 战斗服务
│ ├── services_gacha.py # 抽卡服务
│ ├── services_resources.py # 资源服务
│ ├── services_team.py # 队伍服务
│ └── __init__.py
├── infra/ # 基础设施层
│ ├── assets.py # 资源管理
│ ├── astr_llm.py # LLM 集成
│ ├── character_provider.py # 角色数据提供
│ ├── hooks.py # 钩子系统
│ ├── html_renderer.py # HTML 渲染
│ ├── map_json_provider.py # 地图数据提供
│ ├── map_provider.py # 地图服务提供
│ ├── sqlite_player_repo.py # 玩家数据仓库
│ ├── sqlite_repo.py # 通用数据仓库
│ └── __init__.py
├── characters/ # 角色数据
│ └── character.json # 角色定义
├── map/ # 地图数据
│ └── three_kingdoms.json # 三国地图定义
├── picture/ # 图片资源
│ ├── bg.jpg
│ ├── default.png
│ └── PASS.png
├── main.py # 插件入口
├── metadata.yaml # 插件元数据
├── requirements.txt # 依赖
├── _conf_schema.json # 配置模式
└── README.md # 说明文档
- ResourceService: 管理玩家资源、建筑升级和资源结算
- TeamService: 处理队伍管理、角色分配和升级
- AllianceService: 管理同盟创建、加入和成员管理
- BattleService: 处理战斗模拟和结果计算
- GachaService: 实现抽卡系统和角色获取
- BaseService: 管理玩家基地和迁城功能
- MapService: 提供地图数据和城市关系查询
- StateService: 管理游戏状态,如战线进度
- SQLitePlayerRepository: 玩家数据的 SQLite 持久化
- SQLiteStateRepository: 游戏状态的 SQLite 持久化
- AstrLLM: 集成 AstrBot 的 LLM 提供商
- JsonMapProvider: 从 JSON 文件加载地图数据
- CharacterProvider: 加载和管理角色数据
-
加入游戏
- 使用
/slg 加入命令开始你的三国之旅 - 系统会自动为你分配初始资源和基地城市
- 使用
-
熟悉基础操作
- 使用
/slg 资源查看你的初始资源状况 - 使用
/slg 基地了解你当前所在的城市 - 使用
/slg 一键快速上线收菜
- 使用
-
建设发展
- 优先升级
农田和钱庄以保证基础资源产出 - 适当升级
采石场为后期建筑做准备 - 升级
军营提高军队容量上限
- 优先升级
-
招募武将
- 使用
/slg 抽卡 5进行首次抽卡(前5次免费) - 获得武将后使用
/slg 队伍查看队伍配置 - 使用
/slg 上阵 <角色> <队伍>将武将编入队伍
- 使用
-
社交互动
- 加入现有同盟或创建自己的同盟
- 与同盟成员合作发展
-
资源优化
- 平衡四种资源的生产比例
- 根据武将技能特点调整发展方向
-
队伍配置
- 合理配置武将队伍,发挥技能协同效果
- 定期补充兵力,保持战斗力
-
地图探索
- 使用
/slg_map查看大地图 - 了解各城市间的连接关系和战线情况
- 使用
-
战略布局
- 选择合适的城市进行迁移
- 参与战线推进,扩大影响力
-
同盟作战
- 与同盟成员协调行动
- 共同推进重要战线
-
资源竞争
- 控制关键资源点
- 通过迁城占领战略要地
-
战术运用
- 根据敌我双方武将配置制定战术
- 合理利用城市间的战线关系
/slg 加入- 加入游戏/slg 资源- 查看资源状态/slg 升级 <建筑>- 升级指定建筑/slg 抽卡 <次数>- 进行抽卡/slg 队伍- 查看队伍配置/slg 上阵 <角色> <队伍> [槽位]- 将角色编入队伍/slg 补兵 <队伍>- 为队伍补充兵力/slg 基地- 查看当前基地/slg 迁城 <城市>- 迁移到指定城市
/slg 同盟创建 <名称>- 创建同盟/slg 同盟加入 <名称>- 加入同盟/slg 同盟成员 [名称]- 查看同盟成员/slg 同盟列表- 查看所有同盟
/slg 进攻 <玩家ID>- 向其他玩家发起进攻
/slg_map- 查看大地图/line <城市>- 查看城市战线/line_push <城市> <城门> <进度>- 推进战线进度
@dataclass
class Player:
user_id: str # 用户唯一标识
nickname: str # 玩家昵称
created_at: int # 创建时间
last_tick: int # 上次结算时间
grain: int # 粮食数量
gold: int # 金钱数量
stone: int # 石头数量
troops: int # 军队数量
farm_level: int # 农田等级
bank_level: int # 钱庄等级
quarry_level: int # 采石场等级
barracks_level: int # 军营等级
draw_count: int # 累计抽卡次数@dataclass
class Character:
name: str # 角色名称
title: str # 角色称号
background: str # 背景故事
skills: List[Skill] # 技能列表@dataclass
class City:
name: str # 城市名称
province: str # 所属州
ntype: NodeType # 节点类型 (CITY/PASS/RESOURCE)
capital: bool # 是否为州府本插件目前没有外部依赖,所有功能均基于 Python 标准库和 AstrBot 框架实现。
- 将插件目录放置到 AstrBot 的插件目录中
- 确保 AstrBot 正确加载插件
- 插件会自动创建所需的 SQLite 数据库文件
插件使用两个 SQLite 数据库文件:
players.sqlite3- 存储玩家数据state.sqlite3- 存储游戏状态
数据库文件位于 data/plugin_data/astrbot_plugin_slg/ 目录下。
在 characters/character.json 中添加新的角色定义:
{
"name": "角色名",
"title": "称号",
"background": "背景描述",
"skills": [
{
"name": "技能名",
"description": "技能描述"
}
]
}编辑 map/three_kingdoms.json 文件来修改地图数据,包括:
- 添加或修改城市
- 调整城市位置
- 修改城市间的连接关系
- 在
domain/目录下创建新的服务类 - 在
domain/ports.py中定义必要的端口 - 在
infra/目录下实现对应的适配器 - 在
app/container.py中注册新服务 - 在
main.py中添加新的命令处理
- 插件会自动进行资源结算,无需手动操作
- 迁城功能每天只能使用一次
- 战斗系统目前为测试版本,不实际结算战损
- 抽卡系统有保底机制,前5次免费
欢迎提交 Issue 和 Pull Request 来改进这个插件。 本插件处于开发阶段,欢迎加入qq群:1054962131 进行讨论和建议
MIT License