# 枫火歌者（Club 22）社团实装与修复总结

## 实装概述

枫火歌者（Club 22）是一个特殊的社团，其核心机制是收纳"种火"作为随从，而不能像其他玩家一样组队。种火具有四种部署状态（跟随、探物、索敌、隐藏），每种状态提供不同的功能。玩家可以通过消耗焰火类物品来强化种火，提升其属性和效果。

## 基础实装

### 1. 配置文件

- 在 `gamedata/cache/club22cfg.php` 中创建了枫火歌者社团的配置文件
- 包含收为随从的成功率、跟随时强化玩家倍率、探物检定成功率、削减NPC HP检定成功率、强化倍率等配置

### 2. 后端逻辑

在 `include/game/club22.func.php` 中实现了以下功能：

- **FireseedRecruit($npc)**：将目标种火复活，并进行收纳种火
- **FireseedDeploy($npc, $mode, $pls)**：设置部署状态并标记姿态（探物、索敌、隐藏、跟随）
- **FireseedSearch($pls)**：玩家行动时触发探物逻辑，将对应道具加入该种火clbpara中的道具池
- **FireseedDrainNPC($pls)**：玩家行动时触发索敌逻辑，对NPC造成伤害（最低留1血）
- **FireseedEnhance($npc, $item)**：消耗焰火物品，更新该种火的强化倍率
- **FireseedBuffBonus()**：根据所有跟随种火的数量与强化层数，为玩家加成攻击防御
- **FireseedFollow($target_pls)**：玩家移动时，将所有处于跟随状态的种火一并移动到目标位置

### 3. 前端逻辑

- 修改 `command.htm` 中隐藏 Club 22 玩家使用的"组队"按钮并添加禁止组队判断逻辑
- 修改 `corpse.htm` 中加入判断，若目标尸体为"种火"（type==92）且 club == 22，便显示"收纳种火"按钮
- 在 `slidingpanel.htm` 中添加种火状态管理标签页，提供种火管理界面
- 实现种火管理按钮，点击后自动打开侧边栏并切换到种火管理标签页

### 4. 战斗系统整合

- 修改 `revattr.func.php` 中的 `get_base_att_modifier` 和 `get_base_def_modifier` 函数，添加种火加成逻辑
- 在 `game.php` 中添加种火探物和索敌的触发逻辑

### 5. 社团技能

- 在 `clubskills_1.php` 中添加了 `c22_fireseed` 技能，描述枫火歌者的核心机制

## 种火系列技能与套装实装

### 1. 种火I/II/III技能实装

- 在 `gamedata/cache/clubskills_1.php` 文件中添加了三个技能的定义：
  - 种火I（fireseed1）：战斗伤害降低为75%
  - 种火II（fireseed2）：战斗伤害降低为50%
  - 种火III（fireseed3）：战斗伤害变为1

- 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_p` 函数中添加了种火I和种火II的伤害减免逻辑
- 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_fix` 函数中添加了种火III的伤害固定为1的逻辑

### 2. 种火IV技能实装

- 在 `gamedata/cache/clubskills_1.php` 文件中添加了种火IV（fireseed4）技能的定义，该技能使所有伤害变为0
- 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_p` 函数中添加了种火IV的标记设置逻辑
- 在 `include/game/revattr.func.php` 文件中的 `get_final_dmg_fix` 函数中添加了种火IV的伤害固定为0的逻辑
- 在 `include/game/item.poison.php` 文件中添加了种火IV对毒物伤害的免疫逻辑
- 在 `include/game/itemmain.func.php` 文件中添加了种火IV对陷阱伤害的免疫逻辑

### 3. 套装与技能关联实装

- 创建了新文件 `include/game/setitems.func.php`，实现了 `process_set_item_effects` 函数，用于处理套装效果
- 在 `include/game/itemmain.func.php` 文件中修改了 `reload_set_items` 和 `reload_single_set_item` 函数，调用新的套装效果处理函数
- 设置了套装与技能的对应关系：
  - fs2（种火Ⅰ套装）→ fireseed1（种火I技能）
  - fs3（种火Ⅱ套装）→ fireseed2（种火II技能）
  - fs4（种火Ⅲ套装）→ fireseed3（种火III技能）
  - fs5（种火Ⅳ套装）→ fireseed4（种火IV技能）

## 问题修复

### 1. 种火部署位置问题

**问题描述**：种火无法部署到选择的位置，总是部署到玩家当前位置。

**修复内容**：
- 修改了 `FireseedDeploy` 函数，使其使用传入的位置参数而不是玩家当前位置
- 更新了数据库中的种火位置和玩家 clbpara 中的种火位置
- 添加了位置参数验证，确保部署位置有效

### 2. 种火索敌与探物问题

**问题描述**：只有玩家处于和正在部署的种火相同的位置时，该位置的索敌与探物动作才会处理。

**修复内容**：
- 修改了 `FireseedSearch` 和 `FireseedDrainNPC` 函数，移除了对玩家当前位置的限制
- 按位置分组处理种火，对每个位置分别执行探物和索敌逻辑
- 在日志中显示种火探物和索敌的位置信息，方便玩家了解种火的活动

### 3. 种火跟随功能

**问题描述**：玩家移动时，跟随状态的种火不会自动跟随移动。

**实现内容**：
- 添加了 `FireseedFollow` 函数，在玩家移动时将所有处于跟随状态的种火一并移动到目标位置
- 在 `search.func.php` 的 `move` 函数中调用 `FireseedFollow` 函数
- 显示移动提示，告知玩家有多少个种火随行

### 4. 侧边栏种火管理按钮问题

**问题描述**：点击"种火管理"按钮时没有作用，控制台输出错误。

**修复内容**：
- 修改了 `command.htm` 中的"种火管理"按钮，使其点击时调用 `openSidePanelToFireseedTab` 函数
- 在 `slidingpanel.htm` 中添加了 `openSidePanelToFireseedTab` 函数，该函数会打开侧边栏，切换到种火管理标签页，并更新种火数据

### 5. 侧边栏种火显示问题

**问题描述**：在种火状态表格中，出现了显示为 "undefined/undefined" 的行，同时 ID 列显示为 "toJSONString"。

**修复内容**：
- 在遍历 clbpara.fireseed 对象时，添加了对无效数据的检查和过滤
- 跳过非对象类型的条目或缺少必要属性（name、level）的数据
- 在控制台输出调试信息，帮助识别问题数据

### 6. 种火物品显示问题

**问题描述**：在种火物品列表中，物品类型和特殊属性栏位显示的是原始数据（如 "HH"、"f"），而不是对应的可读文本。

**修复内容**：
- 修改了物品类型的显示逻辑，使其显示 resources_1.php 中 $iteminfo 数组对应的可读文本
- 修改了物品特殊属性的显示逻辑，使其显示 resources_1.php 中 $itemspkinfo 数组对应的可读文本
- 在页面加载时，将 PHP 中的 $iteminfo 和 $itemspkinfo 数组传递给 JavaScript

## 核心机制

1. **种火收纳**：
   - Club 22玩家不能进行组队，可以通过在遭遇特定NPC"种火"（type = 92）的尸体进行操作，消耗体力值将其收为"随从"，纳入队伍。

2. **种火部署**：
   - 种火具备四种部署状态：
     - **跟随**：在战斗时增加玩家攻击/防御，按"数量 × 强化层数 × 1%"叠加
     - **探物**：部署在地图上，为玩家收集该地的掉落物品（叠加将影响发现速率）
     - **索敌**：部署后稳定按照比率削减该地图NPC生命至最低1点（叠加将影响削血速率）
     - **隐藏**：没有额外效果（玩法上因为其他玩家会遭遇它们，有探索干扰作用）

3. **种火强化**：
   - 种火可被升级，升级后将显著提升数值
   - 通过消耗指定焰火类物品（共5种：◆焰火，✦烈焰火，★华焰火★，☾真焰火☽，☼焰火☼）来升级特定种火
   - 倍率为：1x、8x、32x、64x、128x

4. **种火技能**：
   - 种火I（fireseed1）：战斗伤害降低为75%
   - 种火II（fireseed2）：战斗伤害降低为50%
   - 种火III（fireseed3）：战斗伤害变为1
   - 种火IV（fireseed4）：所有伤害变为0

5. **套装效果**：
   - fs2（种火Ⅰ套装）→ fireseed1（种火I技能）
   - fs3（种火Ⅱ套装）→ fireseed2（种火II技能）
   - fs4（种火Ⅲ套装）→ fireseed3（种火III技能）
   - fs5（种火Ⅳ套装）→ fireseed4（种火IV技能）

## 注意事项

1. 种火收纳后，会在种火的 clbpara 中记录所有者信息，防止被其他玩家重复收纳
2. 种火部署在地图上时，会根据部署模式执行不同的功能
3. 种火收集的物品会存储在种火的 clbpara 中，玩家可以通过界面获取这些物品
4. 种火强化后，其属性会根据强化倍率提升
5. 跟随模式的种火会在战斗中为玩家提供攻击和防御加成
6. 玩家移动时，所有处于跟随状态的种火会自动跟随移动
7. 种火技能可以通过学习或装备对应套装获得，提供不同程度的伤害减免

## 未来可能的改进

1. **技能来源标记**：可以在 `clbpara` 中添加标记，区分技能是通过学习获得还是通过套装获得，这样可以更精确地控制技能的移除
2. **UI提示优化**：可以优化技能获得和失去时的UI提示，使其更加明显和信息丰富
3. **技能效果扩展**：可以为种火系列技能添加更多效果，如反伤、状态免疫等，进一步丰富技能系统
4. **套装效果扩展**：可以为其他套装添加类似的技能激活效果，创建更多有趣的套装-技能组合
5. **种火AI优化**：可以为种火添加更智能的AI，使其在探物和索敌时有更多的策略性选择
6. **种火交互扩展**：可以添加更多种火之间的交互，如合并、分裂、交换物品等功能
