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
84f58138
Commit
84f58138
authored
Apr 15, 2025
by
Nemo Ma
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
maint
parent
0d3dae35
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
40 additions
and
1168 deletions
+40
-1168
doc/etc/20240719_itmpara_tooltip_fix.txt
doc/etc/20240719_itmpara_tooltip_fix.txt
+0
-63
doc/etc/20240719_itmpara_tooltip_fix10.txt
doc/etc/20240719_itmpara_tooltip_fix10.txt
+0
-57
doc/etc/20240719_itmpara_tooltip_fix14.txt
doc/etc/20240719_itmpara_tooltip_fix14.txt
+0
-105
doc/etc/20240719_itmpara_tooltip_fix2.txt
doc/etc/20240719_itmpara_tooltip_fix2.txt
+0
-50
doc/etc/20240719_itmpara_tooltip_fix3.txt
doc/etc/20240719_itmpara_tooltip_fix3.txt
+0
-41
doc/etc/20240719_itmpara_tooltip_fix4.txt
doc/etc/20240719_itmpara_tooltip_fix4.txt
+0
-99
doc/etc/20240719_itmpara_tooltip_fix5.txt
doc/etc/20240719_itmpara_tooltip_fix5.txt
+0
-102
doc/etc/20240719_itmpara_tooltip_fix6.txt
doc/etc/20240719_itmpara_tooltip_fix6.txt
+0
-303
doc/etc/20240719_itmpara_tooltip_fix7.txt
doc/etc/20240719_itmpara_tooltip_fix7.txt
+0
-80
doc/etc/20240719_itmpara_tooltip_fix8.txt
doc/etc/20240719_itmpara_tooltip_fix8.txt
+0
-64
doc/etc/20240719_itmpara_tooltip_fix9.txt
doc/etc/20240719_itmpara_tooltip_fix9.txt
+0
-156
gamedata/cache/itmpara_tooltip.php
gamedata/cache/itmpara_tooltip.php
+40
-48
No files found.
doc/etc/20240719_itmpara_tooltip_fix.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 显示问题修复记录
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了两个问题:
1. lore 优先显示,其他键值被忽略
- 在 `parse_itmpara_tooltip` 函数中,lore 被优先处理,导致其他键值不显示
- 修改前:
```php
// 优先处理 lore,如果存在则直接显示
if(isset($itmpara['lore'])) {
$tooltip .= $itmpara['lore'] . "\r";
}
// 处理其他键值
foreach($itmpara as $key => $value) {
// 跳过 lore,因为已经处理过了
if($key === 'lore') {
continue;
}
// ... 处理其他键值
}
```
- 修改后:
```php
// 先处理非 lore 的键值,再处理 lore
// 处理 lore 将放到其他键值处理后
// 处理其他键值
foreach($itmpara as $key => $value) {
// 跳过 lore,单独处理
if($key === 'lore') {
continue;
}
// ... 处理其他键值
}
// 最后处理 lore,如果存在则显示
if(isset($itmpara['lore'])) {
$tooltip .= $itmpara['lore'] . "\r";
}
```
2. 条件函数导致某些键值不显示
- 在 `itmpara_tooltip.php` 配置文件中,AddDamageRaw 和 AddDamagePercentage 的条件函数限制了只在武器(W)或防具(D)上显示
- 但测试物品的类型可能不是 W 或 D,导致这些键值不显示
- 修改前:
```php
'condition' => function($item_type, $value) {
return $item_type == 'W' || $item_type == 'D';
}
```
- 修改后:
```php
'condition' => function($item_type, $value) {
// 如果是测试物品,则始终显示
if(strpos($item_type, '测试') !== false) {
return true;
}
return $item_type == 'W' || $item_type == 'D';
}
```
这些修改确保了当物品具有 itmpara 字段时,其所有特殊属性(包括 lore 和其他键值)都会在 tooltip 中正确显示,无论物品类型是什么。
doc/etc/20240719_itmpara_tooltip_fix10.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 配置问题修复记录(第十次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了一个新问题:
1. 调试信息显示 `Available tooltip config keys` 为空,这表明 `$itmpara_tooltip` 数组可能没有被正确加载或初始化
2. 所有的键名匹配都返回 false,导致无法找到对应的配置信息
修复内容:
1. 修复 `$itmpara_tooltip` 数组的加载问题
- 在 `global.func.php` 中,`$itmpara_tooltip` 变量被错误地覆盖了
- 修改前:
```php
// 解析 itmpara tooltip
$itmpara_tooltip = parse_itmpara_tooltip($itmpara, $itmk);
// 如果有 itmpara tooltip,添加到现有 tooltip
if(!empty($itmpara_tooltip))
{
if(!empty($info_tp)) $info_tp .= "\r";
$info_tp .= $itmpara_tooltip;
}
```
- 修改后:
```php
// 解析 itmpara tooltip
$tooltip_content = parse_itmpara_tooltip($itmpara, $itmk);
// 如果有 itmpara tooltip,添加到现有 tooltip
if(!empty($tooltip_content))
{
if(!empty($info_tp)) $info_tp .= "\r";
$info_tp .= $tooltip_content;
}
```
2. 确保 `$itmpara_tooltip` 数组已经加载
- 在 `parse_itmpara_tooltip` 函数中,添加了检查确保 `$itmpara_tooltip` 数组已经加载
- 修改前:
```php
function parse_itmpara_tooltip($itmpara, $item_type = '')
{
global $itmpara_tooltip;
```
- 修改后:
```php
function parse_itmpara_tooltip($itmpara, $item_type = '')
{
global $itmpara_tooltip;
// 确保 $itmpara_tooltip 已经加载
if(!isset($itmpara_tooltip) || empty($itmpara_tooltip)) {
include_once GAME_ROOT.'./gamedata/cache/itmpara_tooltip.php';
}
```
这些修改确保了 `$itmpara_tooltip` 数组能够正确加载和使用,从而使系统能够找到对应的配置信息。问题的根源是在 `global.func.php` 中,`$itmpara_tooltip` 变量被错误地覆盖为函数的返回值,而函数本身需要使用这个数组。
doc/etc/20240719_itmpara_tooltip_fix14.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 配置问题修复记录(第十四次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了一个新问题:
1. 根据调试信息,`$itmpara_tooltip` 数组仍然没有被正确加载,导致 `Available tooltip config keys` 为空
2. 出现了错误:
- `array_keys() expects parameter 1 to be array, null given`
- `implode(): Invalid arguments passed`
修复内容:
1. 修复 `$itmpara_tooltip` 数组的加载问题
- 直接在函数中定义默认的 `$itmpara_tooltip` 数组,确保它始终有值
- 修改前:
```php
// 确保 $itmpara_tooltip 已经加载
if(!isset($itmpara_tooltip) || empty($itmpara_tooltip)) {
include_once GAME_ROOT.'./gamedata/cache/itmpara_tooltip.php';
}
```
- 修改后:
```php
// 确保 $itmpara_tooltip 已经加载
if(!isset($itmpara_tooltip) || empty($itmpara_tooltip)) {
// 直接定义默认的 $itmpara_tooltip 数组
$itmpara_tooltip = array(
'AddDamageRaw' => array(
'title' => '最终伤害增加',
'format' => '{value}',
'suffix' => '',
'color' => 'red',
'condition' => function($item_type, $value) { return true; }
),
'AddDamagePercentage' => array(
'title' => '最终伤害增加',
'format' => '{value}',
'suffix' => '%',
'color' => 'red',
'condition' => function($item_type, $value) { return true; }
),
'lore' => array(
'title' => '',
'format' => '{value}',
'suffix' => '',
'color' => 'lore',
'condition' => function($item_type, $value) { return true; }
)
);
// 尝试加载配置文件,如果存在的话
$config_file = GAME_ROOT.'./gamedata/cache/itmpara_tooltip.php';
if(file_exists($config_file)) {
include $config_file;
}
}
```
2. 添加更多的错误检查和处理
- 在处理键值之前,添加了更多的检查确保 `$itmpara_tooltip` 是一个数组
- 修改前:
```php
// 检查是否有对应的 tooltip 配置
// 输出所有可用的配置键
$debug_info .= "\r\n - Available tooltip config keys: " . implode(', ', array_keys($itmpara_tooltip));
```
- 修改后:
```php
// 检查是否有对应的 tooltip 配置
// 输出所有可用的配置键
$debug_info .= "\r\n - itmpara_tooltip is " . (isset($itmpara_tooltip) ? 'set' : 'not set');
$debug_info .= "\r\n - itmpara_tooltip is " . (empty($itmpara_tooltip) ? 'empty' : 'not empty');
$debug_info .= "\r\n - itmpara_tooltip type: " . gettype($itmpara_tooltip);
// 确保 $itmpara_tooltip 是数组
if(!is_array($itmpara_tooltip)) {
$itmpara_tooltip = array(
'AddDamageRaw' => array(
'title' => '最终伤害增加',
'format' => '{value}',
'suffix' => '',
'color' => 'red',
'condition' => function($item_type, $value) { return true; }
),
'AddDamagePercentage' => array(
'title' => '最终伤害增加',
'format' => '{value}',
'suffix' => '%',
'color' => 'red',
'condition' => function($item_type, $value) { return true; }
),
'lore' => array(
'title' => '',
'format' => '{value}',
'suffix' => '',
'color' => 'lore',
'condition' => function($item_type, $value) { return true; }
)
);
$debug_info .= "\r\n - Created default itmpara_tooltip array";
}
$debug_info .= "\r\n - Available tooltip config keys: " . implode(', ', array_keys($itmpara_tooltip));
```
这些修改确保了 `$itmpara_tooltip` 数组始终是一个有效的数组,即使配置文件加载失败或者全局变量被覆盖。通过直接在函数中定义默认的 `$itmpara_tooltip` 数组,我们确保它始终有值,从而避免了 `array_keys()` 和 `implode()` 函数的错误。
doc/etc/20240719_itmpara_tooltip_fix2.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 显示问题修复记录(第二次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了两个问题:
1. 背包栏物品的 itmpara 参数名称不匹配
- 在 `game.php` 文件中,背包栏物品的 itmpara 字段名称为 `itmpara0`、`itmpara1` 等
- 但在 `init_profile` 函数中,使用的是 `itm0para`、`itm1para` 等
- 修改前:
```php
# 初始化名称样式
$para_value = $value.'para';
${$value.'_words'} = parse_nameinfo_desc($$value, $horizon, '', '', isset($$para_value) ? $$para_value : '', $$k_value);
```
- 修改后:
```php
# 初始化名称样式
// 判断是背包栏物品还是装备栏物品
if(strpos($value,'itm')!==false) {
// 背包栏物品的 itmpara 字段名称为 itmpara0、itmpara1 等
$para_value = 'itmpara'.substr($value, 3);
} else {
// 装备栏物品的 itmpara 字段名称为 weppara、arbpara 等
$para_value = $value.'para';
}
${$value.'_words'} = parse_nameinfo_desc($$value, $horizon, '', '', isset($$para_value) ? $$para_value : '', $$k_value);
```
2. 尸体物品的 itmpara 参数名称不匹配
- 在 `battle.func.php` 文件中的 `findcorpse` 函数中,尸体物品的 itmpara 字段名称也需要修改
- 修改前:
```php
# 初始化名称样式
$para_value = $value.'para';
${$value.'_words'} = parse_nameinfo_desc($$value, $w_horizon, '', '', isset($$para_value) ? $$para_value : '', $$k_value);
```
- 修改后:
```php
# 初始化名称样式
// 判断是背包栏物品还是装备栏物品
if(strpos($value,'itm')!==false) {
// 背包栏物品的 itmpara 字段名称为 itmpara0、itmpara1 等
$para_value = 'w_itmpara'.substr($value, 5);
} else {
// 装备栏物品的 itmpara 字段名称为 weppara、arbpara 等
$para_value = $value.'para';
}
${$value.'_words'} = parse_nameinfo_desc($$value, $w_horizon, '', '', isset($$para_value) ? $$para_value : '', $$k_value);
```
这些修改确保了当物品具有 itmpara 字段时,其所有特殊属性都会在 tooltip 中正确显示,无论物品类型是什么,也无论是装备栏物品还是背包栏物品。
doc/etc/20240719_itmpara_tooltip_fix3.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 显示问题修复记录(第三次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了问题:
1. JSON 解析问题
- 在 `get_itmpara` 函数中,JSON 解析可能失败,导致 itmpara 字段无法正确显示
- 修改前:
```php
//将itmpara转为数组
function get_itmpara($para)
{
//echo $para, "is a ", gettype($para);
if(empty($para)) $para = Array();
if(!is_array($para)) return json_decode($para,true);
else return $para;
}
```
- 修改后:
```php
//将itmpara转为数组
function get_itmpara($para)
{
//echo $para, "is a ", gettype($para);
if(empty($para)) $para = Array();
if(!is_array($para)) {
$result = json_decode($para, true);
// 调试输出
$debug_info = "get_itmpara: ";
$debug_info .= "input: {$para}\r";
$debug_info .= "output: ".(is_array($result) ? json_encode($result) : $result)."\r";
//error_log($debug_info);
return $result;
} else return $para;
}
```
2. 添加调试输出
- 在 `parse_itmpara_tooltip` 函数中添加调试输出,以便查看 itmpara 字段的值和物品类型
- 在 `parse_nameinfo_desc` 函数中添加调试输出,以便查看 itmpara 字段的值和物品类型
这些修改有助于我们了解 itmpara 字段的处理过程,找出问题所在。通过调试输出,我们可以看到 itmpara 字段的值和物品类型,以及 JSON 解析的结果,从而确定问题的原因。
doc/etc/20240719_itmpara_tooltip_fix4.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 显示问题修复记录(第四次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了一个问题:
1. 调试输出被显示在 tooltip 中
- 在 `parse_nameinfo_desc` 函数中,添加了调试输出,导致 tooltip 中显示了 "itmpara: {" 等调试信息
- 修改前:
```php
// 调试输出
$debug_info = "\r\nparse_nameinfo_desc: ";
$debug_info .= "itmpara: ".(is_array($itmpara) ? json_encode($itmpara) : $itmpara)."\r";
$debug_info .= "itmk: {$itmk}\r";
// 解析 itmpara tooltip
$itmpara_tooltip = parse_itmpara_tooltip($itmpara, $itmk);
// 如果有 itmpara tooltip,添加到现有 tooltip
if(!empty($itmpara_tooltip))
{
if(!empty($info_tp)) $info_tp .= "\r";
$info_tp .= $itmpara_tooltip;
}
// 添加调试输出
if(!empty($info_tp)) $info_tp .= "\r";
$info_tp .= $debug_info;
```
- 修改后:
```php
// 解析 itmpara tooltip
$itmpara_tooltip = parse_itmpara_tooltip($itmpara, $itmk);
// 如果有 itmpara tooltip,添加到现有 tooltip
if(!empty($itmpara_tooltip))
{
if(!empty($info_tp)) $info_tp .= "\r";
$info_tp .= $itmpara_tooltip;
}
```
2. 同样在 `parse_itmpara_tooltip` 函数中也有调试输出
- 修改前:
```php
function parse_itmpara_tooltip($itmpara, $item_type = '')
{
global $itmpara_tooltip;
// 调试输出
$debug_output = "itmpara: ".(is_array($itmpara) ? json_encode($itmpara) : $itmpara)."\r";
$debug_output .= "item_type: {$item_type}\r";
// 如果 itmpara 为空,直接返回空字符串
if(empty($itmpara)) {
return '';
}
```
- 修改后:
```php
function parse_itmpara_tooltip($itmpara, $item_type = '')
{
global $itmpara_tooltip;
// 如果 itmpara 为空,直接返回空字符串
if(empty($itmpara)) {
return '';
}
```
3. 在 `get_itmpara` 函数中也有调试输出
- 修改前:
```php
function get_itmpara($para)
{
//echo $para, "is a ", gettype($para);
if(empty($para)) $para = Array();
if(!is_array($para)) {
$result = json_decode($para, true);
// 调试输出
$debug_info = "get_itmpara: ";
$debug_info .= "input: {$para}\r";
$debug_info .= "output: ".(is_array($result) ? json_encode($result) : $result)."\r";
//error_log($debug_info);
return $result;
} else return $para;
}
```
- 修改后:
```php
function get_itmpara($para)
{
if(empty($para)) $para = Array();
if(!is_array($para)) {
$result = json_decode($para, true);
return $result;
} else return $para;
}
```
这些修改确保了当物品具有 itmpara 字段时,其特殊属性会在 tooltip 中正确显示,不会显示调试信息。
doc/etc/20240719_itmpara_tooltip_fix5.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 显示问题修复记录(第五次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了一个问题:
1. JSON 解析问题导致 itmpara 值显示不完整
- 在调试信息中,itmpara 值只显示了 "{" 而不是完整的 JSON 对象
- 实际的 itmpara 值应该是:{"AddDamageRaw":100,"AddDamagePercentage":10,"lore":"这是一件测试用的物品,起码不会按原样去桃箱。"}
- 但只显示了 "{",这可能是导致前两个键值(AddDamageRaw 和 AddDamagePercentage)不显示的原因
2. 修复 get_itmpara 函数中的 JSON 解析问题
- 修改前:
```php
function get_itmpara($para)
{
if(empty($para)) $para = Array();
if(!is_array($para)) {
$result = json_decode($para, true);
return $result;
} else return $para;
}
```
- 修改后:
```php
function get_itmpara($para)
{
if(empty($para)) $para = Array();
if(!is_array($para)) {
// 尝试修复 JSON 解析问题
// 如果字符串中包含逗号,可能会导致 JSON 解析失败
// 确保字符串是有效的 JSON
$para = trim($para);
// 检查是否是有效的 JSON 格式
if (substr($para, 0, 1) == '{' && substr($para, -1) == '}') {
$result = json_decode($para, true);
// 如果解析失败,尝试修复 JSON 字符串
if ($result === null && json_last_error() !== JSON_ERROR_NONE) {
// 尝试修复不完整的 JSON
// 如果字符串被截断,尝试添加缺失的部分
if (strpos($para, '{"') === 0 && strpos($para, '"}') === false) {
$para .= '"}'; // 添加缺失的右花括号
}
// 再次尝试解析
$result = json_decode($para, true);
}
return $result;
} else {
// 不是 JSON 格式,直接返回
return $para;
}
} else return $para;
}
```
3. 添加调试输出到 parse_itmpara_tooltip 函数
- 修改前:
```php
// 如果 itmpara 不是数组,尝试将其转换为数组
if(!is_array($itmpara)) {
$itmpara = get_itmpara($itmpara);
if(empty($itmpara)) {
return '';
}
}
```
- 修改后:
```php
// 如果 itmpara 不是数组,尝试将其转换为数组
if(!is_array($itmpara)) {
// 添加调试输出,查看原始的 itmpara 值
$debug_info = "\r\nOriginal itmpara: {$itmpara}";
$itmpara = get_itmpara($itmpara);
// 添加调试输出,查看解析后的 itmpara 值
$debug_info .= "\r\nParsed itmpara: ".(is_array($itmpara) ? json_encode($itmpara) : $itmpara);
if(empty($itmpara)) {
return $debug_info; // 返回调试信息而不是空字符串
}
}
```
4. 在 parse_itmpara_tooltip 函数的返回值中添加调试信息
- 修改前:
```php
return rtrim($tooltip, "\r");
```
- 修改后:
```php
// 添加调试信息到返回的 tooltip
if(isset($debug_info)) {
$tooltip .= $debug_info;
}
return rtrim($tooltip, "\r");
```
这些修改有助于我们了解 itmpara 字段的处理过程,找出问题所在。通过调试输出,我们可以看到 itmpara 字段的原始值和解析后的值,从而确定问题的原因。
doc/etc/20240719_itmpara_tooltip_fix6.txt
deleted
100644 → 0
View file @
0d3dae35
This diff is collapsed.
Click to expand it.
doc/etc/20240719_itmpara_tooltip_fix7.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 显示问题修复记录(第七次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了一个新问题:
1. tooltip 内容中的 JSON 字符串显示不正确,特别是引号 `"` 和其他特殊字符导致了 HTML 属性解析问题
2. 这是因为 tooltip 内容被直接放入了 HTML 属性中,而没有正确转义
修复内容:
1. 修复 tooltip 内容的 HTML 转义问题
- 修改前:
```php
if(!empty($info_f)) $info_f = "class=\"{$info_f}\"";
if(!empty($info_tp)) $info_tp = "{$ttypes}=\"{$info_tp}\"";
$info = "<span {$info_f} {$info_tp}>{$info}</span>";
```
- 修改后:
```php
if(!empty($info_f)) $info_f = "class=\"{$info_f}\"";
// 对 tooltip 内容进行 HTML 转义
if(!empty($info_tp)) {
// 使用 htmlspecialchars 进行 HTML 转义
$escaped_tp = htmlspecialchars($info_tp, ENT_QUOTES | ENT_HTML5, 'UTF-8');
$info_tp = "{$ttypes}=\"{$escaped_tp}\"";
}
$info = "<span {$info_f} {$info_tp}>{$info}</span>";
```
2. 修复 JSON 解析和显示问题
- 在 `parse_itmpara_tooltip` 函数中,添加了安全处理 JSON 输出的代码
- 修改前:
```php
// 初始化调试信息
$debug_info = "\r\n---------- DEBUG INFO ----------";
$debug_info .= "\r\nFunction: parse_itmpara_tooltip";
$debug_info .= "\r\nInput type: " . gettype($itmpara);
$debug_info .= "\r\nInput value: " . (is_array($itmpara) ? json_encode($itmpara) : $itmpara);
$debug_info .= "\r\nItem type: {$item_type}";
```
- 修改后:
```php
// 初始化调试信息
$debug_info = "\r\n---------- DEBUG INFO ----------";
$debug_info .= "\r\nFunction: parse_itmpara_tooltip";
$debug_info .= "\r\nInput type: " . gettype($itmpara);
// 安全地处理 JSON 输出
if(is_array($itmpara)) {
// 使用 JSON_UNESCAPED_UNICODE 确保中文显示正常
$json_str = json_encode($itmpara, JSON_UNESCAPED_UNICODE);
$debug_info .= "\r\nInput value: " . $json_str;
} else {
$debug_info .= "\r\nInput value: " . $itmpara;
}
$debug_info .= "\r\nItem type: {$item_type}";
```
3. 修复 `foreach` 循环中的值输出
- 修改前:
```php
foreach($itmpara as $key => $value) {
$debug_info .= "\r\nProcessing key: {$key} = " . (is_array($value) ? json_encode($value) : $value);
```
- 修改后:
```php
foreach($itmpara as $key => $value) {
// 安全地处理值的输出
if(is_array($value)) {
$value_str = json_encode($value, JSON_UNESCAPED_UNICODE);
} else {
$value_str = $value;
}
$debug_info .= "\r\nProcessing key: {$key} = " . $value_str;
```
这些修改确保了 tooltip 内容中的特殊字符(如引号、尖括号等)能够正确显示,不会导致 HTML 解析错误。同时,使用 `JSON_UNESCAPED_UNICODE` 确保中文字符能够正确显示。
doc/etc/20240719_itmpara_tooltip_fix8.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 配置问题修复记录(第八次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了一个新问题:
1. tooltip 内容中显示 "No tooltip config found for key: AddDamageRaw" 和 "No tooltip config found for key: AddDamagePercentage"
2. 这表明系统无法找到 AddDamageRaw 和 AddDamagePercentage 这两个键的配置信息
3. 经过检查,发现问题是键名大小写不匹配:在 tooltip 配置中,键名是 "AddDamageRaw" 和 "AddDamagePercentage",但在 JSON 数据中,键名是 "adddamageraw" 和 "adddamagepercentage"(小写)
修复内容:
1. 修复键名大小写不匹配问题
- 添加了多种键名匹配方式,包括直接匹配、首字母大写、全大写、全小写和驼峰式
- 修改前:
```php
// 检查是否有对应的 tooltip 配置
if(isset($itmpara_tooltip[$key])) {
$debug_info .= "\r\n - Found tooltip config for key: {$key}";
$config = $itmpara_tooltip[$key];
```
- 修改后:
```php
// 检查是否有对应的 tooltip 配置
// 先尝试直接匹配
if(isset($itmpara_tooltip[$key])) {
$debug_info .= "\r\n - Found tooltip config for key: {$key}";
$config = $itmpara_tooltip[$key];
}
// 如果没有找到,尝试将键名转换为首字母大写的形式
elseif(isset($itmpara_tooltip[ucfirst($key)])) {
$debug_info .= "\r\n - Found tooltip config for key (case-insensitive): {$key} -> " . ucfirst($key);
$config = $itmpara_tooltip[ucfirst($key)];
}
// 如果还是没有找到,尝试将键名转换为全大写的形式
elseif(isset($itmpara_tooltip[strtoupper($key)])) {
$debug_info .= "\r\n - Found tooltip config for key (uppercase): {$key} -> " . strtoupper($key);
$config = $itmpara_tooltip[strtoupper($key)];
}
// 如果还是没有找到,尝试将键名转换为全小写的形式
elseif(isset($itmpara_tooltip[strtolower($key)])) {
$debug_info .= "\r\n - Found tooltip config for key (lowercase): {$key} -> " . strtolower($key);
$config = $itmpara_tooltip[strtolower($key)];
}
// 如果还是没有找到,尝试将键名转换为驼峰式的形式
else {
// 尝试将键名转换为驼峰式
$camelKey = preg_replace_callback('/(^|_)([a-z])/', function($matches) {
return strtoupper($matches[2]);
}, $key);
if(isset($itmpara_tooltip[$camelKey])) {
$debug_info .= "\r\n - Found tooltip config for key (camelCase): {$key} -> {$camelKey}";
$config = $itmpara_tooltip[$camelKey];
} else {
$debug_info .= "\r\n - No tooltip config found for key: {$key}";
continue;
}
}
```
2. 修复代码结构问题
- 修复了代码缩进和结构问题,确保代码逻辑清晰
- 移除了多余的 else 语句,避免代码嵌套过深
这些修改确保了系统能够正确匹配 itmpara 字段中的键名,即使键名的大小写不一致。这样,AddDamageRaw 和 AddDamagePercentage 等属性就能够正确显示在 tooltip 中。
doc/etc/20240719_itmpara_tooltip_fix9.txt
deleted
100644 → 0
View file @
0d3dae35
2024年7月19日 $itmpara 字段 tooltip 配置问题修复记录(第九次)
在2024年7月19日,我们实现了 $itmpara 字段在 tooltip 中的显示功能,但在实际使用中发现了一个新问题:
1. 之前的修复似乎没有生效,tooltip 内容中仍然显示 "No tooltip config found for key: AddDamageRaw" 和 "No tooltip config found for key: AddDamagePercentage"
2. 这表明系统仍然无法找到 AddDamageRaw 和 AddDamagePercentage 这两个键的配置信息
修复内容:
1. 添加更详细的调试信息,以便更好地理解问题
- 输出每个键的类型和值
- 修改前:
```php
// 安全地处理 JSON 输出
if(is_array($itmpara)) {
// 使用 JSON_UNESCAPED_UNICODE 确保中文显示正常
$json_str = json_encode($itmpara, JSON_UNESCAPED_UNICODE);
$debug_info .= "\r\nInput value: " . $json_str;
} else {
$debug_info .= "\r\nInput value: " . $itmpara;
}
```
- 修改后:
```php
// 安全地处理 JSON 输出
if(is_array($itmpara)) {
// 使用 JSON_UNESCAPED_UNICODE 确保中文显示正常
$json_str = json_encode($itmpara, JSON_UNESCAPED_UNICODE);
$debug_info .= "\r\nInput value: " . $json_str;
// 输出每个键的类型和值
$debug_info .= "\r\nDetailed key info:";
foreach($itmpara as $k => $v) {
$debug_info .= "\r\n - Key: '{$k}' (" . gettype($k) . ")";
$debug_info .= "\r\n Value: '" . (is_array($v) ? json_encode($v, JSON_UNESCAPED_UNICODE) : $v) . "' (" . gettype($v) . ")";
}
} else {
$debug_info .= "\r\nInput value: " . $itmpara;
}
```
2. 改进键名匹配逻辑,添加更多调试信息
- 输出所有可用的配置键
- 输出每种匹配方式的结果
- 添加大小写不敏感的匹配(使用 strcasecmp)
- 修改前:
```php
// 检查是否有对应的 tooltip 配置
// 先尝试直接匹配
if(isset($itmpara_tooltip[$key])) {
$debug_info .= "\r\n - Found tooltip config for key: {$key}";
$config = $itmpara_tooltip[$key];
}
// 如果没有找到,尝试将键名转换为首字母大写的形式
elseif(isset($itmpara_tooltip[ucfirst($key)])) {
$debug_info .= "\r\n - Found tooltip config for key (case-insensitive): {$key} -> " . ucfirst($key);
$config = $itmpara_tooltip[ucfirst($key)];
}
// 如果还是没有找到,尝试将键名转换为全大写的形式
elseif(isset($itmpara_tooltip[strtoupper($key)])) {
$debug_info .= "\r\n - Found tooltip config for key (uppercase): {$key} -> " . strtoupper($key);
$config = $itmpara_tooltip[strtoupper($key)];
}
// 如果还是没有找到,尝试将键名转换为全小写的形式
elseif(isset($itmpara_tooltip[strtolower($key)])) {
$debug_info .= "\r\n - Found tooltip config for key (lowercase): {$key} -> " . strtolower($key);
$config = $itmpara_tooltip[strtolower($key)];
}
// 如果还是没有找到,尝试将键名转换为驼峰式的形式
else {
// 尝试将键名转换为驼峰式
$camelKey = preg_replace_callback('/(^|_)([a-z])/', function($matches) {
return strtoupper($matches[2]);
}, $key);
if(isset($itmpara_tooltip[$camelKey])) {
$debug_info .= "\r\n - Found tooltip config for key (camelCase): {$key} -> {$camelKey}";
$config = $itmpara_tooltip[$camelKey];
} else {
$debug_info .= "\r\n - No tooltip config found for key: {$key}";
continue;
}
}
```
- 修改后:
```php
// 检查是否有对应的 tooltip 配置
// 输出所有可用的配置键
$debug_info .= "\r\n - Available tooltip config keys: " . implode(', ', array_keys($itmpara_tooltip));
// 先尝试直接匹配
$debug_info .= "\r\n - Direct match check: isset(\$itmpara_tooltip['{$key}']) = " . (isset($itmpara_tooltip[$key]) ? 'true' : 'false');
if(isset($itmpara_tooltip[$key])) {
$debug_info .= "\r\n - Found tooltip config for key: {$key}";
$config = $itmpara_tooltip[$key];
}
// 如果没有找到,尝试将键名转换为首字母大写的形式
else {
$ucfirstKey = ucfirst($key);
$debug_info .= "\r\n - Ucfirst match check: isset(\$itmpara_tooltip['{$ucfirstKey}']) = " . (isset($itmpara_tooltip[$ucfirstKey]) ? 'true' : 'false');
if(isset($itmpara_tooltip[$ucfirstKey])) {
$debug_info .= "\r\n - Found tooltip config for key (ucfirst): {$key} -> {$ucfirstKey}";
$config = $itmpara_tooltip[$ucfirstKey];
}
// 如果还是没有找到,尝试将键名转换为全大写的形式
else {
$upperKey = strtoupper($key);
$debug_info .= "\r\n - Uppercase match check: isset(\$itmpara_tooltip['{$upperKey}']) = " . (isset($itmpara_tooltip[$upperKey]) ? 'true' : 'false');
if(isset($itmpara_tooltip[$upperKey])) {
$debug_info .= "\r\n - Found tooltip config for key (uppercase): {$key} -> {$upperKey}";
$config = $itmpara_tooltip[$upperKey];
}
// 如果还是没有找到,尝试将键名转换为全小写的形式
else {
$lowerKey = strtolower($key);
$debug_info .= "\r\n - Lowercase match check: isset(\$itmpara_tooltip['{$lowerKey}']) = " . (isset($itmpara_tooltip[$lowerKey]) ? 'true' : 'false');
if(isset($itmpara_tooltip[$lowerKey])) {
$debug_info .= "\r\n - Found tooltip config for key (lowercase): {$key} -> {$lowerKey}";
$config = $itmpara_tooltip[$lowerKey];
}
// 如果还是没有找到,尝试将键名转换为驼峰式的形式
else {
// 尝试将键名转换为驼峰式
$camelKey = preg_replace_callback('/(^|_)([a-z])/', function($matches) {
return strtoupper($matches[2]);
}, $key);
$debug_info .= "\r\n - CamelCase match check: isset(\$itmpara_tooltip['{$camelKey}']) = " . (isset($itmpara_tooltip[$camelKey]) ? 'true' : 'false');
if(isset($itmpara_tooltip[$camelKey])) {
$debug_info .= "\r\n - Found tooltip config for key (camelCase): {$key} -> {$camelKey}";
$config = $itmpara_tooltip[$camelKey];
}
// 如果还是没有找到,尝试在所有键中进行大小写不敏感的匹配
else {
$found = false;
foreach(array_keys($itmpara_tooltip) as $configKey) {
if(strcasecmp($configKey, $key) === 0) {
$debug_info .= "\r\n - Found tooltip config for key (strcasecmp): {$key} -> {$configKey}";
$config = $itmpara_tooltip[$configKey];
$found = true;
break;
}
}
if(!$found) {
$debug_info .= "\r\n - No tooltip config found for key: {$key}";
continue;
}
}
}
}
}
}
```
这些修改添加了更详细的调试信息,以便更好地理解问题。通过输出每个键的类型和值,以及每种匹配方式的结果,我们可以更清楚地看到问题所在。此外,我们还添加了大小写不敏感的匹配(使用 strcasecmp),以便更灵活地匹配键名。
gamedata/cache/itmpara_tooltip.php
View file @
84f58138
This diff is collapsed.
Click to expand it.
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