Commit 1e131866 authored by Nemo Ma's avatar Nemo Ma

ADJUSTMENT: club22

parent 2f571548
# 枫火歌者种火战斗机制修复
## 修改时间
2025-01-03 14:52:00
## 问题描述
根据用户测试反馈,枫火歌者的机制存在以下问题:
1. 玩家在探索·移动时可能遇到自己配下的种火并与其发起战斗甚至将其杀死
2. 种火的索敌逻辑会对同玩家的其他种火NPC造成伤害
在虚构层上,这些行为是不可接受的,需要进行修复。
## 修改内容
### 1. 修改遇敌逻辑 (include/game/search.func.php)
在 `discover` 函数的遇敌判断逻辑中添加了对枫火歌者玩家遇到自己配下种火的特殊处理:
**修改位置**: 第741-759行
**修改逻辑**:
- 在遇敌循环中,当玩家为枫火歌者(club == 22)且遇到种火NPC(type == 92)时
- 检查该种火的owner字段是否为当前玩家的pid
- 如果是自己配下的种火,则跳过战斗并显示友好文案
- 继续寻找其他可能的敌人
**显示文案**:
- "你遇到了自己配下的种火「种火名称」。"
- "「种火名称」友好地看着你,你们没有发生冲突。"
### 2. 修改种火索敌逻辑 (include/game/club22.func.php)
在 `FireseedDrainNPC` 函数中添加了对同玩家其他种火NPC的保护:
**修改位置**: 第331-350行
**修改逻辑**:
- 在索敌循环中,当目标NPC为种火(type == 92)时
- 检查该种火的owner字段是否为当前玩家的pid
- 如果是同玩家的种火,则跳过攻击
- 继续寻找其他可攻击的NPC目标
## 技术细节
### 数据结构处理
- 使用 `get_clbpara()` 函数确保NPC的clbpara字段为数组格式
- 通过检查 `$npc['clbpara']['owner']` 字段判断种火归属
- 使用 `$pid` 变量标识当前玩家
### 兼容性考虑
- 修改不影响其他社团的正常遇敌逻辑
- 修改不影响种火对其他类型NPC的索敌功能
- 保持了原有的防御力和技能检查逻辑
## 预期效果
1. **遇敌逻辑修复**: 枫火歌者玩家不会再与自己配下的种火发生战斗
2. **索敌逻辑修复**: 种火不会攻击同玩家的其他种火NPC
3. **虚构层合理性**: 符合枫火歌者与种火之间的主从关系设定
## 测试建议
1. 测试枫火歌者玩家在有自己种火的地图上移动/探索
2. 测试种火索敌功能是否正常工作但不攻击同玩家种火
3. 测试其他社团玩家的正常遇敌逻辑是否受影响
4. 测试种火对其他类型NPC的索敌功能是否正常
## 相关文件
- `include/game/search.func.php` - 遇敌逻辑修改
- `include/game/club22.func.php` - 种火索敌逻辑修改
...@@ -337,6 +337,18 @@ function FireseedDrainNPC($pls) { ...@@ -337,6 +337,18 @@ function FireseedDrainNPC($pls) {
continue; continue;
} }
// 跳过同玩家的其他种火NPC
if($npc['type'] == 92) {
// 确保 NPC 的 clbpara 是数组格式
if(!is_array($npc['clbpara'])) {
$npc['clbpara'] = get_clbpara($npc['clbpara']);
}
// 检查是否为同玩家的种火
if(!empty($npc['clbpara']['owner']) && $npc['clbpara']['owner'] == $pid) {
continue; // 跳过对同玩家种火的攻击
}
}
// 计算削减成功率(每个种火增加一次成功机会) // 计算削减成功率(每个种火增加一次成功机会)
$success = false; $success = false;
foreach($location_fireseeds as $fs_id => $fs_data) { foreach($location_fireseeds as $fs_id => $fs_data) {
......
...@@ -741,6 +741,20 @@ function discover($schmode = 0,&$data=NULL) ...@@ -741,6 +741,20 @@ function discover($schmode = 0,&$data=NULL)
# 暂时直接略过盟友单位 # 暂时直接略过盟友单位
if(!empty($edata['clbpara']['mate']) && in_array($pid,$edata['clbpara']['mate'])) continue; if(!empty($edata['clbpara']['mate']) && in_array($pid,$edata['clbpara']['mate'])) continue;
# 枫火歌者遇到自己配下的种火时的特殊处理
if($club == 22 && $edata['type'] == 92) {
// 确保 NPC 的 clbpara 是数组格式
if(!is_array($edata['clbpara'])) {
$edata['clbpara'] = get_clbpara($edata['clbpara']);
}
// 检查是否为自己配下的种火
if(!empty($edata['clbpara']['owner']) && $edata['clbpara']['owner'] == $pid) {
$log .= "<span class='yellow'>你遇到了自己配下的种火「{$edata['name']}」。</span><br>";
$log .= "<span class='lime'>「{$edata['name']}」友好地看着你,你们没有发生冲突。</span><br>";
continue; // 跳过战斗,继续寻找其他敌人
}
}
# 「量心」技能效果判定(不会遭遇HP为1的敌人): # 「量心」技能效果判定(不会遭遇HP为1的敌人):
if(!check_skill_unlock('c19_dispel',$data) && !empty(get_skillpara('c19_dispel','active',$clbpara)) && $edata['hp'] == 1) continue; if(!check_skill_unlock('c19_dispel',$data) && !empty(get_skillpara('c19_dispel','active',$clbpara)) && $edata['hp'] == 1) continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment