Talishar/Talishar
GitHub: Talishar/Talishar
Talishar是一个粉丝自制的《Flesh and Blood》卡牌游戏在线客户端,通过浏览器提供自动化对战功能。
Stars: 148 | Forks: 68
Talishar 是一个粉丝自制的《Flesh and Blood》项目,与 Legend Story Studios 无关。
[](./LICENSE) [](https://discord.gg/JykuRkdd5S) [](https://twitter.com/talishar_online) [](https://bsky.app/profile/talishar.bsky.social) [](https://metafy.gg/@Talishar) ## Talishar 入门指南 这是 Talishar.net 的后端客户端——与前端完全独立。要在本地测试 Talishar,您需要同时安装前端和后端项目。 ### 相关仓库 - [Talishar-FE](https://github.com/Talishar/Talishar-FE) - 使用 TypeScript 和 React 构建的前端客户端 - [CardImages](https://github.com/Talishar/CardImages) - 卡牌图像处理和管理 ### 快速链接 - **玩家**:访问 [Talishar.net](https://talishar.net/) 开始游戏 - **开发者**:参见下方的 Docker 设置说明 - **贡献者/错误报告**:加入我们的 [Discord](https://discord.gg/ErmtqQQEFm) 社区 - **文档**:[快速入门指南](https://docs.google.com/document/d/1qVlTrst58iZ_6xD9PkxIgZUiSKzV-S4eTJmK32qzaP0/edit) 和 [完整文档](https://docs.google.com/document/d/15zRJvMOYnwrFtf-pLW3jwpYEMaUrdnNhlhmfgyE4Rs0) ## 使用 Docker 运行 Talishar 的新方式。 ### 前置条件: - Docker - Talishar-FE 在 *nix 操作系统上比在 MS 操作系统上更容易执行。 如果您想运行临时脚本,如 zzCardCodeGenerator.php,将 Talishar-FE 和 CardImages 仓库与 Talishar 位于同一目录下非常重要。 docker-compose 文件设置为将 ../Talishar-FE 目录挂载到容器中。 要生成新的卡牌和图像,它们是在 ../CardImages 目录中生成的。 首先克隆仓库: ``` git clone https://github.com/Talishar/Talishar.git ``` 进入该目录: ``` cd Talishar ``` 运行脚本进行设置并启动 docker 容器 ``` bash start.sh ``` - 注意:如果您使用的是 Windows,换行符可能会搞乱此脚本。它只有两行,所以您可以直接在 Windows Powershell 或 git Bash 中手动运行它们: ``` cp -n HostFiles/RedirectorTemplate.php HostFiles/Redirector.php docker compose up -d ``` 容器正在分离(后台)模式下运行。如果需要停止它们: ``` bash stop.sh ``` 或 ``` docker compose down ``` ### 脚本的作用是什么? - 如下面的[快速入门指南](https://docs.google.com/document/d/1qVlTrst58iZ_6xD9PkxIgZUiSKzV-S4eTJmK32qzaP0/edit)所述,您需要一个唯一的 Redirector 文件设置。您可以自定义它,它是必需的,但不会被检入仓库。因此,脚本会在启动容器之前创建 Redirector 文件的副本。 - 停止脚本通过调用 `docker compose down` 来停止容器。 - 首次创建 Redirector 文件后,您可以使用 `docker compose up` 和 `docker compose down` 以及您习惯的任何其他命令来启动和停止 docker 容器。 ### 调试 - Xdebug 已添加到容器中,并可通过 `docker/docker-php-ext-xdebug.ini` 文件进行配置。Xdebug 端口为 `9003`。您可以使用 Xdebug helper 浏览器扩展设置断点并调试代码。您也可以从 IDE 连接调试器。 - `idekey` 允许您过滤对 Xdebug 服务器的请求。`idekey` 默认设置为 `PHPSTORM`。您可以将其更改为任何您想要的内容。只需确保它与您 IDE 设置中的 `idekey` 匹配即可。 ### PHPStorm 调试 1. 在 PHPStorm 中创建一个 PHP 远程调试配置 2. 勾选“按 IDE Key 过滤调试连接”,并将 IDE Key 设置为 PHPSTORM(或您在 xdebug 配置中更改的任何内容) 3. 打开“服务器”的 `...` 并创建一个新的服务器 4. 将“主机”设置为 `0.0.0.0`,“端口”设置为 `9003`(或您设置的任何 xdebug 端口),并将“调试器”设置为 Xdebug 5. 勾选“使用路径映射”并将项目的根目录映射到容器的根目录 `/var/www/html/game` 6. 现在您应该能够运行此配置,它将等待来自容器中 xdebug 服务器的连接。您可以在代码中的某处设置断点,当您向服务器发出请求时,它应该会在那里停止。 - Xdebug 会暂停执行,并且可能在我们有无限循环的文件中导致问题。您可以通过转到 `设置 -> 语言和框架 -> PHP -> 调试 -> 跳过的路径` 并添加要跳过的文件路径以及 `设置 -> 语言和框架 -> PHP -> 调试 -> 步进过滤器 -> 跳过的文件`,在 PHPStorm 中跳过这些文件。 - 包含了 OPCache 以提高性能,但它可能与 Xdebug 存在问题。您可以随时在 ini 文件中禁用 OPCache。 ### VSCode 调试 1. 安装 PHP Debug 扩展 2. 在 .vscode 目录中创建一个 launch.json 文件 3. 将以下配置添加到 launch.json 文件中: ``` { "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "/var/www/html/game": "${workspaceFolder}" } } ] } ``` 4. 在代码中设置断点 5. 通过选择 `Listen for XDebug` 配置并单击绿色的播放按钮来启动调试器 ## 项目架构 Talishar 由三个主要组件协同工作组成: - **Talishar** (PHP) - 游戏引擎、逻辑和 API - **Talishar-FE** (TypeScript/React) - 用户界面和状态管理 - **CardImages** - 卡牌定义和图像处理 ## 关键后端文件 ### 核心游戏逻辑 - **`GetNextTurn.php`** - 主要 API 端点,序列化并返回当前游戏状态给前端 - **`ProcessInput.php`** - 处理所有用户输入并触发相应的游戏逻辑 - **`GameLogic.php`** - 核心游戏机制和回合流程 - **`CoreLogic.php`** - 基本的游戏引擎函数 - **`Constants.php`** - 游戏常量、区域(手牌、放逐区、墓地、战场、牌库)和玩家 ID ### 卡牌系统 - **`CardDictionary.php`** - 卡牌数据查找和实用工具 - **`CardDictionaries/`** - 按系列组织的卡牌定义 - 每个系列文件夹/文件(例如,`WelcomeToRathe/`, `WTRShared.php`)包含卡牌能力 - 卡牌逻辑使用以 `cardNumber`(小写带下划线)为键的 switch 语句 - 示例:`"fyendals_spring_tunic"`, `"command_and_conquer_red"`, `"energy_potion_blue"` ### 能力系统 - **`CardLogic.php`** - 特定卡牌的能力实现 - **`CharacterAbilities.php`** - 英雄角色能力 - **`ItemAbilities.php`** - 物品牌能力 - **`AuraAbilities.php`** - 光环牌能力 - **`AllyAbilities.php`** - 盟友牌能力 - **`PermanentAbilities.php`** - 永久牌能力 - **`LandmarkAbilities.php`** - 地标牌能力 - **`WeaponLogic.php`** - 武器牌逻辑 ### 游戏状态管理 - **`ParseGamestate.php`** - 解析持久化的游戏状态文件 - **`WriteGamestate.php`** - 将游戏状态持久化到文件 - **`WriteLog.php`** - 写入游戏事件日志以供调试 ### 前端通信 - **`GetNextTurn.php`** - 向前端返回当前游戏状态的主要响应 - **`ProcessInputAPI.php`** - ProcessInput 的 API 版本,用于处理前端请求 ## 游戏状态流程 ``` Frontend Component ↓ (User Action) ProcessInput.php (validates & processes) ↓ (Triggers logic) GameLogic.php / CardLogic.php / Ability Files (executes game rules) ↓ (Updates state) WriteGamestate.php (persists to file) ↓ (Frontend polls) GetNextTurn.php (serializes current state) ↓ (Returns JSON) ParseGameState.ts (transforms backend data) ↓ (Updates Redux) GameSlice.ts (Redux store) ↓ (Components subscribe) React Components (render UI) ``` ### 关键状态变量 - **`$currentPlayer`** - 指示谁拥有优先权 (1 或 2) - **`$turn[0]`** - 当前阶段 (M=主要, A=行动, D=防御, 等) ## 开发者 / 贡献者资源 ### XAMPP 开发 - [Webserver 开发快速入门指南](https://docs.google.com/document/d/1qVlTrst58iZ_6xD9PkxIgZUiSKzV-S4eTJmK32qzaP0/edit) - [完整文档](https://docs.google.com/document/d/15zRJvMOYnwrFtf-pLW3jwpYEMaUrdnNhlhmfgyE4Rs0) ### 贡献 如果您想做出贡献,请务必加入 [Discord](https://discord.gg/ErmtqQQEFm) 社区与其他贡献者交流。 ## 生产部署 有关将 Talishar 部署到生产环境的信息,包括 SSL/TLS 证书配置、反向代理设置和安全最佳实践,请参见 [PRODUCTION_SSL_SETUP.md](./PRODUCTION_SSL_SETUP.md)。 **关键生产注意事项:** - SSL 证书必须覆盖所有域名:`talishar.net`, `www.talishar.net`, `api.talishar.net`, `fe.talishar.net`, `legacy.talishar.net` - 使用 Let's Encrypt 获取免费、自动续订的证书 - 配置 Apache/Nginx 反向代理进行 SSL 终止 - Docker 容器仅处理 HTTP — SSL 由主机处理 ## 免责声明 所有美术作品和卡牌图像 © Legend Story Studios。 Talishar.net 与 Legend Story Studios 没有任何关联。Legend Story Studios®、Flesh and Blood™ 和系列名称是 Legend Story Studios 的商标。Flesh and Blood 角色、卡牌、标志和美术作品是 [Legend Story Studios](https://legendstory.com/) 的财产。标签:DNS解析, Docker, React, Syscall, Syscalls, TypeScript, Web开发, 后端开发, 在线游戏, 安全插件, 安全防御评估, 开源项目, 浏览器游戏, 游戏平台, 游戏模拟, 社区驱动, 粉丝项目, 肉与血卡牌游戏, 自动化客户端, 请求拦截