Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
phpdts
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nemo Ma
phpdts
Commits
81a6bbd1
Commit
81a6bbd1
authored
Jun 12, 2025
by
Nemo Ma
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanup
parent
f0820cec
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
118 additions
and
280 deletions
+118
-280
doc/etc/20241218_debug_fireseed_bonus.txt
doc/etc/20241218_debug_fireseed_bonus.txt
+0
-87
doc/etc/20241218_fireseed_fix_cleanup.txt
doc/etc/20241218_fireseed_fix_cleanup.txt
+32
-0
doc/etc/20241218_fix_fireseed_bonus_bug.txt
doc/etc/20241218_fix_fireseed_bonus_bug.txt
+0
-111
doc/etc/20241218_fix_fireseed_config_scope.txt
doc/etc/20241218_fix_fireseed_config_scope.txt
+0
-82
doc/etc/社团系统/20241218_fireseed_follow_bonus_fix_complete.txt
doc/etc/社团系统/20241218_fireseed_follow_bonus_fix_complete.txt
+76
-0
include/game/club22.func.php
include/game/club22.func.php
+10
-0
No files found.
doc/etc/20241218_debug_fireseed_bonus.txt
deleted
100644 → 0
View file @
f0820cec
调试时间:2024年12月18日
问题描述:
在之前修复种火跟随加成问题的基础上,用户在tooltip中添加了种火增幅显示逻辑,但测试玩家汇报没看到对应字符串出现在界面上,说明$fireseed_bonus的值小于等于0。
可能的问题原因:
1. 种火数据结构问题:种火可能没有正确的pose或mode值
2. 位置匹配问题:种火的pls值可能与玩家的pls值不匹配
3. 等级问题:种火的level值可能为0或未设置
4. 配置问题:$fireseed_follow_bonus_rate可能为0
5. 基础攻击力/防御力问题:传递的$base_att或$base_def可能为0或负数
调试方案:
在FireseedBuffBonus()函数中添加详细的调试信息,包括:
1. 玩家当前位置
2. 传递的基础攻击力和防御力
3. 种火总数量
4. 每个种火的详细信息(ID、位置、模式、等级)
5. 符合条件的种火及其计算过程
6. 最终的攻击和防御加成值
具体修改:
文件:include/game/club22.func.php(第558-578行)
添加的调试信息:
```php
global $log;
$debug_info = "【种火调试】玩家位置: {$pls}, 基础攻击: {$base_att}, 基础防御: {$base_def}, 种火数量: " . count($clbpara['fireseed']) . "<br>";
foreach($clbpara['fireseed'] as $fs_id => $fs_data) {
$debug_info .= "【种火调试】种火ID: {$fs_id}, 位置: {$fs_data['pls']}, 模式: " . (isset($fs_data['pose']) ? $fs_data['pose'] : $fs_data['mode']) . ", 等级: {$fs_data['level']}<br>";
// 原有的判断逻辑...
if(符合条件) {
$debug_info .= "【种火调试】种火{$fs_id}符合条件,加成百分比: {$bonus_percent}%, 攻击加成: " . ceil($base_att * $bonus_percent / 100) . ", 防御加成: " . ceil($base_def * $bonus_percent / 100) . "<br>";
}
}
$debug_info .= "【种火调试】最终攻击加成: {$att_bonus}, 防御加成: {$def_bonus}<br>";
if(!empty($log)) $log .= $debug_info;
```
调试信息将显示:
1. 玩家当前位置和基础属性
2. 所有种火的详细状态
3. 哪些种火符合跟随条件
4. 每个符合条件种火的加成计算过程
5. 最终的总加成值
使用方法:
1. 让测试玩家执行任何会触发属性计算的操作(如查看角色信息、战斗等)
2. 查看游戏日志中的【种火调试】信息
3. 根据调试信息确定问题所在:
- 如果种火数量为0:检查种火收纳是否成功
- 如果种火位置不匹配:检查种火移动逻辑
- 如果种火模式不正确:检查种火部署设置
- 如果等级为0:检查种火强化逻辑
- 如果基础属性为0:检查属性计算逻辑
注意事项:
1. 这是临时调试代码,问题解决后应该移除
2. 调试信息会显示在游戏日志中,可能影响游戏体验
3. 确保测试环境中有正确设置的种火数据
预期结果:
通过调试信息可以准确定位$fireseed_bonus为0的具体原因,然后针对性地修复问题。
问题解决(2024年12月18日):
通过分析代码发现了真正的问题根源:在FireseedRecruit()函数中,种火数据被添加到了玩家的clbpara['fireseed']中,但是没有保存玩家的clbpara数据到数据库!
具体问题:
1. 收纳种火时,种火数据被添加到内存中的$clbpara['fireseed']数组
2. 代码只保存了NPC的clbpara到数据库,但没有保存玩家的clbpara
3. 页面刷新后,玩家的clbpara从数据库重新加载,但种火数据没有被保存,所以丢失了
修复方案:
在FireseedRecruit()函数中添加保存玩家clbpara数据的代码:
```php
// 保存玩家的clbpara数据到数据库 - 这是关键的修复!
$encoded_player_clbpara = json_encode($clbpara, JSON_UNESCAPED_UNICODE);
$db->query("UPDATE {$tablepre}players SET clbpara='$encoded_player_clbpara' WHERE pid='$pid'");
```
这个修复确保了种火数据在收纳后能正确保存到数据库,页面刷新后不会丢失。
调试代码已移除,因为问题已经解决。
doc/etc/20241218_fireseed_fix_cleanup.txt
0 → 100644
View file @
81a6bbd1
整理时间:2024年12月18日
操作内容:
种火跟随加成修复完成后的代码和文档整理
代码修改:
1. 注释掉include/game/club22.func.php中的所有调试代码
- 保留调试代码以备将来需要
- 使用/* */注释块包围调试相关代码
文档整理:
1. 创建综合修复记录:
- 新建:doc/etc/社团系统/20241218_fireseed_follow_bonus_fix_complete.txt
- 内容:完整的修复过程、技术要点和最终解决方案
2. 移除临时文件:
- 删除:doc/etc/20241218_debug_fireseed_bonus.txt
- 删除:doc/etc/20241218_fix_fireseed_bonus_bug.txt
- 删除:doc/etc/20241218_fix_fireseed_config_scope.txt
修复状态:
✅ 种火跟随加成问题已完全修复
✅ PHP Notice错误已消除
✅ 测试人员确认功能正常
✅ 调试代码已注释
✅ 文档已整理完成
技术总结:
问题根源是配置变量$fireseed_follow_bonus_rate的作用域问题,通过修改变量加载方式和添加默认值保护得到解决。
后续维护:
如需重新启用调试功能,可取消注释include/game/club22.func.php中第570-594行的调试代码。
doc/etc/20241218_fix_fireseed_bonus_bug.txt
deleted
100644 → 0
View file @
f0820cec
修复时间:2024年12月18日
问题描述:
测试玩家反馈枫火歌者种火跟随追加攻击力·防御力机制的问题:
1. 跟随种火针对攻击力·防御力的加成似乎只会在收纳种火时生效并显示,但只要点击搜寻等功能刷新页面,前台显示的加成便会消失。
2. 页底出现大量PHP Notice:Undefined Variable: fireseed_follow_bonus_rate in club22.func.php on line 640
问题分析:
1. PHP Notice错误显示在第640行,但实际的club22.func.php文件只有578行,说明错误信息可能指向了错误的位置。
2. 通过代码分析发现,问题出现在FireseedBuffBonus()函数(第530行)中:
- 该函数声明了global $fireseed_follow_bonus_rate;
- 但是在某些调用情况下,配置文件可能没有被正确加载到函数作用域中
3. FireseedBuffBonus()函数被以下地方调用:
- revattr.func.php第868行(攻击力计算)
- revattr.func.php第1000行(防御力计算)
- 这些调用通过include_once包含club22.func.php文件
4. 虽然club22.func.php在第5行包含了配置文件:
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
但是在函数作用域中,全局变量可能没有被正确传递。
问题根源:
当revattr.func.php调用include_once包含club22.func.php时,配置文件确实被包含了,但是FireseedBuffBonus()函数在执行时,$fireseed_follow_bonus_rate变量的作用域可能存在问题,导致变量未定义。
修复方案:
在FireseedBuffBonus()函数开始处添加配置文件的包含,确保变量在函数作用域中可用。
具体修改:
文件:include/game/club22.func.php(第529-536行)
修改前:
```php
function FireseedBuffBonus() {
global $fireseed_follow_bonus_rate;
if(!isset($data)) {
global $pdata;
$data = &$pdata;
}
extract($data, EXTR_REFS);
```
修改后:
```php
function FireseedBuffBonus() {
// 确保配置文件被加载
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
global $fireseed_follow_bonus_rate;
if(!isset($data)) {
global $pdata;
$data = &$pdata;
}
extract($data, EXTR_REFS);
```
修复逻辑:
1. 在函数内部显式包含配置文件,确保$fireseed_follow_bonus_rate变量被定义
2. 使用include_once避免重复包含
3. 保持原有的global声明,确保变量在函数作用域中可用
关于第二个问题(加成消失)的分析:
通过代码分析发现,游戏界面显示的攻击力和防御力是通过以下流程计算的:
1. game.func.php的init_playerdata()函数(第111-112行)
2. 调用\revattr\get_base_att()和\revattr\get_base_def()
3. 这些函数会调用FireseedBuffBonus()计算种火加成
4. 结果存储在$atkinfo和$definfo变量中
5. 模板profile.htm显示这些变量
修复了PHP Notice错误后,种火加成应该能正确计算和显示。
第二次修复(2024年12月18日):
经过测试发现,虽然PHP Notice错误被解决了,但种火跟随加成仍然没有正常显示。问题的根源在于FireseedBuffBonus()函数使用的是玩家的基础$att和$def值来计算加成,而不是包含装备加成等的最终值。
进一步修复:
1. 修改FireseedBuffBonus()函数,添加可选参数$base_att和$base_def,允许传递正确的基础攻击力和防御力
2. 修改revattr.func.php中的调用,传递当前计算出的基础攻击力和防御力:
- 攻击力计算:传递$base_att(包含武器加成的基础攻击力)
- 防御力计算:传递$total_def(包含装备加成的基础防御力)
具体修改:
1. include/game/club22.func.php(第523-572行):
- 添加可选参数$base_att = null, $base_def = null
- 如果没有提供参数,则使用玩家的基础属性
- 使用传递的参数来计算种火加成
2. include/game/revattr.func.php(第864-873行):
- 修改攻击力计算中的FireseedBuffBonus()调用
- 传递$base_att参数
3. include/game/revattr.func.php(第997-1006行):
- 修改防御力计算中的FireseedBuffBonus()调用
- 传递$total_def参数
修复逻辑:
现在种火加成基于正确的基础攻击力和防御力计算,而不是仅仅基于玩家的原始属性。这确保了加成能够正确反映玩家的实际战斗能力。
测试建议:
1. 创建枫火歌者角色并收纳种火
2. 设置种火为跟随模式
3. 检查攻击力和防御力是否正确显示加成
4. 执行搜寻等操作后检查加成是否持续显示
5. 确认不再出现PHP Notice错误
6. 验证加成数值是否基于正确的基础攻击力和防御力计算
注意事项:
1. 种火加成只有在种火与玩家在同一位置且处于跟随模式时才生效
2. 加成计算公式:数量(1) × 强化层数 × 1%
3. 现在加成基于包含装备效果的基础攻击力和防御力,而不是原始属性值
doc/etc/20241218_fix_fireseed_config_scope.txt
deleted
100644 → 0
View file @
f0820cec
修复时间:2024年12月18日
问题描述:
根据用户的进一步调试发现,种火跟随加成的问题不在于种火数据保存,而在于配置变量$fireseed_follow_bonus_rate在某些情况下变成了空值。
具体表现:
1. 种火等级可以正确读取,说明种火数据本身正常
2. $fireseed_follow_bonus_rate变量为空,导致加成百分比计算结果为0
3. 在收纳时能正常显示,说明收纳时配置文件被正确加载了
4. 其他操作后变成空值,说明在某些调用路径下配置变量的作用域有问题
问题分析:
在FireseedBuffBonus()函数中,虽然使用了include_once来包含配置文件,但是变量作用域处理有问题:
原始代码:
```php
function FireseedBuffBonus($base_att = null, $base_def = null) {
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
global $fireseed_follow_bonus_rate;
// ...
}
```
问题在于:
1. include_once在函数作用域中包含配置文件
2. 配置文件中的变量在函数作用域中定义
3. global声明试图引用全局作用域中的变量,但全局作用域中可能没有这个变量
4. 导致$fireseed_follow_bonus_rate为空
修复方案:
1. 移除global声明,直接在函数中使用配置文件的变量
2. 添加默认值检查,确保变量有值
3. 添加调试信息验证修复效果
具体修改:
文件:include/game/club22.func.php(第535-541行)
修改前:
```php
function FireseedBuffBonus($base_att = null, $base_def = null) {
// 确保配置文件被加载
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
global $fireseed_follow_bonus_rate;
```
修改后:
```php
function FireseedBuffBonus($base_att = null, $base_def = null) {
// 确保配置文件被加载,并直接使用配置变量
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
// 如果全局变量不存在,使用默认值
if(!isset($fireseed_follow_bonus_rate)) {
$fireseed_follow_bonus_rate = 1; // 默认1%
}
```
同时添加了详细的调试信息来验证修复效果:
```php
$debug_info = "【种火调试】玩家位置: {$pls}, 基础攻击: {$base_att}, 基础防御: {$base_def}, 种火数量: " . count($clbpara['fireseed']) . ", 加成系数: {$fireseed_follow_bonus_rate}<br>";
```
修复逻辑:
1. 配置文件在函数作用域中被包含,变量在函数中可用
2. 不再依赖全局变量,避免作用域问题
3. 添加默认值保护,确保变量始终有值
4. 调试信息显示加成系数,便于验证修复效果
预期结果:
1. $fireseed_follow_bonus_rate变量应该始终有值(默认为1)
2. 种火跟随加成应该能正确计算
3. 调试信息应该显示正确的加成系数值
4. 页面刷新后加成应该持续显示
测试建议:
1. 让测试玩家重新测试种火跟随加成
2. 查看调试信息中的"加成系数"是否显示为1
3. 验证加成百分比是否正确计算
4. 确认页面刷新后加成是否持续显示
注意事项:
1. 这是临时调试代码,问题解决后应该移除调试信息
2. 如果问题仍然存在,可能需要进一步检查配置文件的包含路径或其他作用域问题
doc/etc/社团系统/20241218_fireseed_follow_bonus_fix_complete.txt
0 → 100644
View file @
81a6bbd1
修复完成时间:2024年12月18日
问题描述:
枫火歌者种火跟随追加攻击力·防御力机制存在问题:
1. 跟随种火针对攻击力·防御力的加成只会在收纳种火时生效并显示
2. 点击搜寻等功能刷新页面后,前台显示的加成便会消失
3. 页底出现大量PHP Notice:Undefined Variable: fireseed_follow_bonus_rate
修复过程:
第一阶段 - PHP Notice错误修复:
问题:FireseedBuffBonus()函数中$fireseed_follow_bonus_rate变量未定义
修复:在函数开始处添加配置文件包含
文件:include/game/club22.func.php
修改:添加 include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
第二阶段 - 加成计算逻辑修复:
问题:FireseedBuffBonus()函数使用玩家基础属性而非最终计算值
修复:修改函数参数,传递正确的基础攻击力和防御力
文件:include/game/revattr.func.php
修改:
- 攻击力计算:FireseedBuffBonus($base_att, null)
- 防御力计算:FireseedBuffBonus(null, $total_def)
第三阶段 - 数据保存问题排查:
问题:怀疑种火数据没有正确保存到数据库
修复:在FireseedRecruit()函数中添加玩家clbpara保存
文件:include/game/club22.func.php
修改:添加玩家clbpara数据库保存逻辑
第四阶段 - 配置变量作用域问题修复(最终解决方案):
问题:$fireseed_follow_bonus_rate变量在函数作用域中未正确加载
根本原因:global声明与include_once的顺序和作用域处理有问题
最终修复:
1. 移除global声明,直接在函数中使用配置文件变量
2. 添加默认值检查,确保变量始终有值
3. 修改变量加载顺序
最终修复代码:
```php
function FireseedBuffBonus($base_att = null, $base_def = null) {
// 确保配置文件被加载,并直接使用配置变量
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
// 如果全局变量不存在,使用默认值
if(!isset($fireseed_follow_bonus_rate)) {
$fireseed_follow_bonus_rate = 1; // 默认1%
}
// ... 其余代码
}
```
修复结果:
1. PHP Notice错误完全消除
2. 种火跟随加成正确计算和显示
3. 页面刷新后加成持续显示
4. 配置变量在所有调用情况下都能正确访问
技术要点:
1. 变量作用域:函数内include的变量与global声明的冲突
2. 配置加载:确保配置文件在正确的作用域中被加载
3. 默认值保护:防止配置变量未定义导致的计算错误
4. 参数传递:确保加成基于正确的基础属性值计算
测试验证:
经测试人员确认,种火跟随不保留加成数值的问题已被完全修复。
相关文件:
- include/game/club22.func.php:主要修复文件
- include/game/revattr.func.php:参数传递修复
- gamedata/cache/club22cfg.php:配置文件
注意事项:
1. 种火加成只有在种火与玩家在同一位置且处于跟随模式时才生效
2. 加成计算公式:数量(1) × 强化层数 × 1%
3. 修复确保了配置变量在所有调用情况下都能正确访问
4. 调试代码已注释,可在需要时重新启用
include/game/club22.func.php
View file @
81a6bbd1
...
@@ -564,11 +564,17 @@ function FireseedBuffBonus($base_att = null, $base_def = null) {
...
@@ -564,11 +564,17 @@ function FireseedBuffBonus($base_att = null, $base_def = null) {
// 计算跟随模式的种火加成
// 计算跟随模式的种火加成
// 注意:这里仍然只考虑与玩家在同一位置的种火,因为这是战斗加成
// 注意:这里仍然只考虑与玩家在同一位置的种火,因为这是战斗加成
// 调试代码已注释 - 问题已修复
/*
global $log;
global $log;
$debug_info = "【种火调试】玩家位置: {$pls}, 基础攻击: {$base_att}, 基础防御: {$base_def}, 种火数量: " . count($clbpara['fireseed']) . ", 加成系数: {$fireseed_follow_bonus_rate}<br>";
$debug_info = "【种火调试】玩家位置: {$pls}, 基础攻击: {$base_att}, 基础防御: {$base_def}, 种火数量: " . count($clbpara['fireseed']) . ", 加成系数: {$fireseed_follow_bonus_rate}<br>";
*/
foreach
(
$clbpara
[
'fireseed'
]
as
$fs_id
=>
$fs_data
)
{
foreach
(
$clbpara
[
'fireseed'
]
as
$fs_id
=>
$fs_data
)
{
/*
$debug_info .= "【种火调试】种火ID: {$fs_id}, 位置: {$fs_data['pls']}, 模式: " . (isset($fs_data['pose']) ? $fs_data['pose'] : $fs_data['mode']) . ", 等级: {$fs_data['level']}<br>";
$debug_info .= "【种火调试】种火ID: {$fs_id}, 位置: {$fs_data['pls']}, 模式: " . (isset($fs_data['pose']) ? $fs_data['pose'] : $fs_data['mode']) . ", 等级: {$fs_data['level']}<br>";
*/
// 使用 pose 值 1 表示作战姿态(跟随)
// 使用 pose 值 1 表示作战姿态(跟随)
if
((
isset
(
$fs_data
[
'pose'
])
&&
$fs_data
[
'pose'
]
==
1
&&
$fs_data
[
'pls'
]
==
$pls
)
||
if
((
isset
(
$fs_data
[
'pose'
])
&&
$fs_data
[
'pose'
]
==
1
&&
$fs_data
[
'pls'
]
==
$pls
)
||
...
@@ -577,12 +583,16 @@ function FireseedBuffBonus($base_att = null, $base_def = null) {
...
@@ -577,12 +583,16 @@ function FireseedBuffBonus($base_att = null, $base_def = null) {
$bonus_percent
=
1
*
$fs_data
[
'level'
]
*
$fireseed_follow_bonus_rate
;
$bonus_percent
=
1
*
$fs_data
[
'level'
]
*
$fireseed_follow_bonus_rate
;
$att_bonus
+=
ceil
(
$base_att
*
$bonus_percent
/
100
);
$att_bonus
+=
ceil
(
$base_att
*
$bonus_percent
/
100
);
$def_bonus
+=
ceil
(
$base_def
*
$bonus_percent
/
100
);
$def_bonus
+=
ceil
(
$base_def
*
$bonus_percent
/
100
);
/*
$debug_info .= "【种火调试】种火{$fs_id}符合条件,加成百分比: {$bonus_percent}%, 加成系数: {$fireseed_follow_bonus_rate}, 加成等级: {$fs_data['level']}<br>";
$debug_info .= "【种火调试】种火{$fs_id}符合条件,加成百分比: {$bonus_percent}%, 加成系数: {$fireseed_follow_bonus_rate}, 加成等级: {$fs_data['level']}<br>";
*/
}
}
}
}
/*
$debug_info .= "【种火调试】最终攻击加成: {$att_bonus}, 防御加成: {$def_bonus}<br>";
$debug_info .= "【种火调试】最终攻击加成: {$att_bonus}, 防御加成: {$def_bonus}<br>";
if(!empty($log)) $log .= $debug_info;
if(!empty($log)) $log .= $debug_info;
*/
return
array
(
'att'
=>
$att_bonus
,
'def'
=>
$def_bonus
);
return
array
(
'att'
=>
$att_bonus
,
'def'
=>
$def_bonus
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment