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
2f571548
Commit
2f571548
authored
Jun 10, 2025
by
Nemo Ma
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanup
parent
1f46a556
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
0 additions
and
271 deletions
+0
-271
doc/etc/20241220_fireseed_debug_investigation.txt
doc/etc/20241220_fireseed_debug_investigation.txt
+0
-55
doc/etc/20241220_fireseed_enhance_fix.txt
doc/etc/20241220_fireseed_enhance_fix.txt
+0
-115
doc/etc/20241220_fireseed_variable_scope_fix.txt
doc/etc/20241220_fireseed_variable_scope_fix.txt
+0
-101
No files found.
doc/etc/20241220_fireseed_debug_investigation.txt
deleted
100644 → 0
View file @
1f46a556
# 种火功能调试排查记录
时间:2024-12-20
## 问题描述
用户反馈种火部署和强化功能虽然显示"命令已执行",但实际逻辑没有被执行。控制台中没有明显错误。
## 问题分析
经过代码审查,发现可能的问题点:
1. **参数传递问题**:前端JavaScript正确传递了参数,但可能在PHP端没有正确接收
2. **函数调用问题**:函数可能被调用但没有正确执行
3. **全局变量访问问题**:函数内部可能无法访问必要的全局变量
## 调试措施
### 1. 添加POST数据调试
在 `command.php` 第60行启用了 `var_dump($_POST);` 来查看POST数据是否正确传递。
### 2. 添加详细调试信息
在种火部署和强化命令中添加了详细的调试输出:
#### 种火部署命令(第395-409行)
- 显示命令开始执行
- 显示接收到的参数值
- 显示函数返回值
#### 种火强化命令(第448-459行)
- 显示命令开始执行
- 显示接收到的参数值
- 显示函数返回值
### 3. 修复全局变量访问
在 `include/game/club22.func.php` 中:
- `FireseedDeploy` 函数添加了 `$pid` 全局变量声明(第113行)
- `FireseedEnhance` 函数添加了 `$pid` 全局变量声明(第411行)
## 预期调试结果
通过这些调试信息,我们应该能够看到:
1. POST数据是否正确传递
2. 参数是否正确接收
3. 函数是否被调用
4. 函数是否正确执行并返回结果
## 下一步行动
1. 让用户测试种火部署和强化功能
2. 查看控制台和命令窗口中的调试信息
3. 根据调试信息确定具体问题所在
4. 针对性修复问题
## 修改文件列表
- `command.php`:添加调试信息和POST数据输出
- `include/game/club22.func.php`:修复全局变量访问问题
## 注意事项
调试完成后需要移除或注释掉调试输出,避免影响正常游戏体验。
doc/etc/20241220_fireseed_enhance_fix.txt
deleted
100644 → 0
View file @
1f46a556
# 枫火歌者种火强化功能修复记录
时间:2024-12-20
## 问题描述
枫火歌者使用焰火道具对种火进行强化时,提示操作失败,控制台显示以下错误:
- command.php 返回 500 状态码(内部服务器错误)
- JSON 序列化相关错误
- 跳过无效种火数据的提示
## 问题分析
通过分析代码和错误信息,发现以下问题:
1. **配置文件未加载**:FireseedEnhance 函数中使用了 $fireseed_enhance_multipliers 变量,但该变量定义在 club22cfg.php 配置文件中,而函数没有加载该配置文件。
2. **数据库更新不完整**:函数只更新了 clbpara 字段,但没有同时更新玩家的物品数据(itm1-6, itmk1-6, itms1-6 等字段)。
3. **错误处理不足**:缺少对 JSON 编码失败、数据库操作失败等情况的处理。
4. **数据验证不充分**:没有检查物品数量是否足够,没有处理种火 level 字段不存在的情况。
5. **除零风险**:在计算属性倍率时可能出现除零错误。
## 修复方案
### 1. 加载配置文件
在 FireseedEnhance 函数开始处添加:
```php
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
```
### 2. 完善数据验证
- 检查物品数量是否足够
- 检查种火 level 字段是否存在,不存在则初始化为 1
- 避免除零错误
### 3. 完整的数据库更新
同时更新 clbpara 和物品相关字段:
```php
$update_query = "UPDATE {$tablepre}players SET
clbpara='$encoded_clbpara',
$item_var='" . addslashes($$item_var) . "',
$itemk_var='" . addslashes($$itemk_var) . "',
$itemsk_var='" . addslashes($$itemsk_var) . "',
$iteme_var='" . intval($$iteme_var) . "',
$items_var='" . intval($$items_var) . "'
WHERE pid='$pid'";
```
### 4. 增强错误处理
- 检查 JSON 编码是否成功
- 检查数据库操作是否成功
- 提供更详细的错误信息
### 5. 数据类型处理
将计算结果转换为整数,避免浮点数精度问题:
```php
$clbpara['fireseed'][$fireseed_id]['hp'] = intval($clbpara['fireseed'][$fireseed_id]['hp'] * $ratio);
```
## 修复结果
修复后的 FireseedEnhance 函数具有以下改进:
1. 正确加载配置文件
2. 完整的数据验证和错误处理
3. 同时更新 clbpara 和物品数据
4. 防止 SQL 注入和数据类型错误
5. 提供详细的错误信息和调试支持
## 额外修复
### 1. 其他函数的配置文件加载问题
发现 FireseedDeploy、FireseedSearch、FireseedDrainNPC、FireseedBuffBonus 等函数也使用了配置文件中的变量,但没有加载配置文件。已在这些函数中添加配置文件加载:
```php
// 加载配置文件
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
```
### 2. JSON 编码错误处理
在 command.php 中添加了 JSON 编码失败的错误处理,当 JSON 编码失败时会:
- 记录错误日志
- 返回简化的错误响应而不是导致 500 错误
- 提供用户友好的错误信息
### 3. compatible_json_encode 函数优化
修复了 compatible_json_encode 函数,确保正确处理中文字符:
- 在 PHP 5.4+ 版本中使用 JSON_UNESCAPED_UNICODE 标志
- 避免中文字符被错误编码导致的问题
### 4. 数据库连接检查
根据服务器错误日志显示的 "Call to a member function query() on null" 错误,在所有使用数据库的函数中添加了数据库连接检查:
- FireseedRecruit 函数
- FireseedDeploy 函数
- FireseedSearch 函数
- FireseedDrainNPC 函数
- FireseedEnhance 函数
- FireseedFollow 函数
每个函数都会在使用 $db 对象前检查其是否有效,如果无效则返回错误信息。
### 5. 变量作用域修复
根据服务器错误日志 "Call to a member function query() on null",发现问题是变量作用域导致的。
修复了 FireseedEnhance 函数的变量声明:
- 直接使用 global 声明所有需要的变量,而不是通过 extract() 函数
- 确保 $db、$pid、$clbpara 和所有物品变量都能正确访问
- 移除了可能导致变量作用域混乱的 $pdata 和 extract() 调用
## 测试建议
1. 测试正常的种火强化流程
2. 测试物品数量不足的情况
3. 测试使用非焰火物品的情况
4. 测试种火不存在的情况
5. 验证数据库数据是否正确更新
6. 测试种火部署功能是否正常
7. 测试种火探物和索敌功能
8. 验证种火跟随加成是否正确计算
doc/etc/20241220_fireseed_variable_scope_fix.txt
deleted
100644 → 0
View file @
1f46a556
# 种火功能变量作用域修复记录
时间:2024-12-20
## 问题描述
在修复了数据库连接问题后,玩家反馈种火操作无法生效:
- 操作显示成功,但侧边栏信息没有更新
- 刷新页面也无法解决问题
- 种火强化功能遇到相同问题
## 问题分析
经过分析发现,问题出现在我之前的修复中:
### 原始问题
- 服务器错误日志显示 "Call to a member function query() on null"
- 这是因为 $db 对象在函数作用域中为 null
### 错误的修复方案
我之前尝试通过直接使用 global 声明所有变量来解决:
```php
function FireseedEnhance($fireseed_id, $item_index) {
global $log, $db, $tablepre, $pid, $clbpara;
global $itm1, $itm2, $itm3, $itm4, $itm5, $itm6;
// ... 更多变量
}
```
### 问题根源
这种方法的问题是:
1. **变量作用域隔离**:函数内对全局变量的修改不会自动同步回主作用域
2. **引用丢失**:直接使用 global 声明的变量不是引用,修改不会影响原始变量
3. **数据不一致**:数据库更新成功,但内存中的变量状态没有更新
## 正确的修复方案
### 1. 恢复引用传递机制
恢复使用 `extract($data, EXTR_REFS)` 来获取变量引用:
```php
function FireseedEnhance($fireseed_id, $item_index) {
global $log, $db, $tablepre;
if(!isset($data)) {
global $pdata;
$data = &$pdata;
}
extract($data, EXTR_REFS);
}
```
### 2. 保留数据库连接检查
保留数据库连接的有效性检查,但简化逻辑:
```php
// 检查数据库连接是否有效
if(!$db) {
$log .= "<span class='red'>数据库连接错误!</span><br>";
return false;
}
```
### 3. 保留配置文件加载
确保配置文件在函数中正确加载:
```php
// 加载配置文件
include_once GAME_ROOT.'./gamedata/cache/club22cfg.php';
```
## 修复的函数
以下函数已恢复正确的变量作用域处理:
1. FireseedEnhance - 种火强化功能
2. FireseedDeploy - 种火部署功能
3. FireseedSearch - 种火探物功能
4. FireseedDrainNPC - 种火索敌功能
5. FireseedFollow - 种火跟随功能
## 技术要点
### EXTR_REFS 的重要性
`extract($data, EXTR_REFS)` 中的 `EXTR_REFS` 标志确保:
- 提取的变量是原始数组元素的引用
- 对提取变量的修改会直接影响原始数组
- 这样函数内的修改能够同步回主作用域
### 变量同步机制
1. command.php 通过 `fetch_playerdata_by_name()` 获取 `$pdata`
2. 通过 `extract($pdata, EXTR_REFS)` 将数据提取为引用变量
3. 函数内通过相同机制获取相同的引用
4. 函数内的修改通过引用同步回主作用域
5. 侧边栏显示的数据来自主作用域,因此能正确反映修改
## 测试验证
修复后需要验证:
1. 种火强化功能是否正常工作
2. 侧边栏信息是否正确更新
3. 种火部署状态是否正确显示
4. 数据库数据与内存数据是否一致
5. 页面刷新后数据是否保持正确
## 经验教训
1. **不要破坏现有的工作机制**:如果某个功能之前工作正常,修复时应该保持其核心机制
2. **理解变量作用域**:PHP 中的 global 声明和引用传递有本质区别
3. **测试完整流程**:不仅要测试功能执行,还要测试数据同步和显示更新
4. **保持数据一致性**:确保数据库、内存和显示三者的一致性
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