Commit 7a266b77 authored by Nemo Ma's avatar Nemo Ma

BUGFIX: Enhance Logic

parent 81a6bbd1
...@@ -409,41 +409,62 @@ if($hp > 0){ ...@@ -409,41 +409,62 @@ if($hp > 0){
if(isset($clbpara['fireseed'][$fireseed_item_id]['items'][$item_id])){ if(isset($clbpara['fireseed'][$fireseed_item_id]['items'][$item_id])){
$item = $clbpara['fireseed'][$fireseed_item_id]['items'][$item_id]; $item = $clbpara['fireseed'][$fireseed_item_id]['items'][$item_id];
// 查找空物品栏 // 检查itm0是否为空
$empty_slot = 0; if(empty($itm0)){
for($i=1; $i<=6; $i++){ // 将物品放入itm0(发现物品栏位)
if(empty(${'itm'.$i})){ $itm0 = $item['itm'];
$empty_slot = $i; $itmk0 = $item['itmk'];
break; $itme0 = $item['itme'];
} $itms0 = $item['itms'];
} $itmsk0 = $item['itmsk'];
$itmpara0 = isset($item['itmpara']) ? $item['itmpara'] : '';
if($empty_slot){
// 将物品添加到玩家物品栏
${'itm'.$empty_slot} = $item['itm'];
${'itmk'.$empty_slot} = $item['itmk'];
${'itme'.$empty_slot} = $item['itme'];
${'itms'.$empty_slot} = $item['itms'];
${'itmsk'.$empty_slot} = $item['itmsk'];
// 从种火物品池中移除物品 // 从种火物品池中移除物品
unset($clbpara['fireseed'][$fireseed_item_id]['items'][$item_id]); unset($clbpara['fireseed'][$fireseed_item_id]['items'][$item_id]);
$log .= '<span class="lime">你从种火「'.$clbpara['fireseed'][$fireseed_item_id]['name'].'」处获得了物品「'.$item['itm'].'」!</span><br>'; $log .= '<span class="lime">你从种火「'.$clbpara['fireseed'][$fireseed_item_id]['name'].'」处取回了探索到的物品!</span><br>';
// 调用itemfind函数触发物品发现流程
include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemfind($pdata);
}else{ }else{
$log .= '<span class="red">你的物品栏已满,无法获取物品!</span><br>'; // itm0已被占用,将物品放入地图并添加到玩家视野
$db->query("INSERT INTO {$tablepre}mapitem (itm, itmk, itme, itms, itmsk, itmpara, pls) VALUES ('{$item['itm']}', '{$item['itmk']}', '{$item['itme']}', '{$item['itms']}', '{$item['itmsk']}', '".addslashes(isset($item['itmpara']) ? $item['itmpara'] : '')."', '$pls')");
$new_item_id = $db->insert_id();
// 从种火物品池中移除物品
unset($clbpara['fireseed'][$fireseed_item_id]['items'][$item_id]);
// 将物品添加到玩家视野
include_once GAME_ROOT.'./include/game.func.php';
check_add_searchmemory($new_item_id, 'itm', $item['itm'], $pdata);
// 保存更新后的clbpara数据到数据库
$encoded_clbpara = json_encode($clbpara, JSON_UNESCAPED_UNICODE);
$db->query("UPDATE {$tablepre}players SET clbpara='$encoded_clbpara' WHERE pid='$pid'");
$log .= '<span class="lime">你从种火「'.$clbpara['fireseed'][$fireseed_item_id]['name'].'」处取回了探索到的物品「'.$item['itm'].'」!</span><br>';
$log .= '<span class="yellow">由于你的双手已经拿着其他物品,取回的物品出现在了你的视野中。</span><br>';
$mode = 'command';
} }
}else{ }else{
$log .= '<span class="red">指定的物品不存在!</span><br>'; $log .= '<span class="red">指定的物品不存在!</span><br>';
$mode = 'command';
} }
}else{ }else{
$log .= '<span class="red">请选择要获取物品的种火和物品!</span><br>'; $log .= '<span class="red">请选择要获取物品的种火和物品!</span><br>';
}
$mode = 'command'; $mode = 'command';
}
}elseif($sp_cmd == 'sp_fireseed_enhance' && $club == 22){ }elseif($sp_cmd == 'sp_fireseed_enhance' && $club == 22){
include_once GAME_ROOT.'./include/game/club22.func.php'; include_once GAME_ROOT.'./include/game/club22.func.php';
if(isset($enhance_fireseed_id) && isset($enhance_item)){ if(isset($enhance_fireseed_id) && isset($enhance_item)){
FireseedEnhance($enhance_fireseed_id, $enhance_item); $enhance_result = FireseedEnhance($enhance_fireseed_id, $enhance_item);
if($enhance_result) {
// 添加侧边栏刷新标记,确保侧边栏能够实时更新
$log .= "<span id='HsUipfcGhU'></span>";
$log .= '<span class="lime">种火强化成功!</span><br>';
$mode = 'command';
}
}else{ }else{
$log .= '<span class="red">请选择要强化的种火和焰火物品!</span><br>'; $log .= '<span class="red">请选择要强化的种火和焰火物品!</span><br>';
} }
......
2024年12月18日 种火强化操作刷新问题修复记录
## 问题描述
根据用户反馈,枫火歌者进行种火强化时,有着以下的逻辑问题:
- 执行了强化操作后,command和侧边栏都没有实时刷新
- 导致侧边栏中的焰火物品耐久度显示没有下降
- 可以不断重复执行该无意义操作
## 问题分析
1. **数据保存问题**:`FireseedEnhance`函数修改了物品数据(焰火物品的耐久度),但只保存了clbpara数据,没有保存物品数据变化
2. **页面刷新问题**:种火强化操作后,command页面没有刷新,侧边栏也没有刷新
3. **数据同步问题**:这导致侧边栏中的焰火物品耐久度显示没有下降,可以不断重复执行该操作
## 修复方案
1. **统一数据保存逻辑**:移除FireseedEnhance函数中的数据库保存逻辑,让command.php统一处理数据保存
2. **添加侧边栏刷新标记**:在command.php中添加侧边栏刷新标记,确保侧边栏能够实时更新
3. **确保页面正确刷新**:让强化操作后能看到最新的物品状态
## 修复实施
### 修改文件:
1. `include/game/club22.func.php` (第393-394行, 第448-462行)
2. `command.php` (第458-465行)
### 修改内容:
#### 1. club22.func.php 修改:
- **移除数据库保存逻辑**:删除了FireseedEnhance函数中的clbpara数据库保存代码
- **清理不必要的全局变量**:移除了不再使用的$db和$tablepre全局变量声明
- **保持物品消耗逻辑**:保留了焰火物品耐久度减少的逻辑
#### 2. command.php 修改:
- **检查强化结果**:获取FireseedEnhance函数的返回值
- **添加刷新标记**:当强化成功时,添加`<span id='HsUipfcGhU'></span>`标记
- **确保页面刷新**:这个标记会触发侧边栏的刷新
### 技术细节:
1. **数据保存机制**:
- FireseedEnhance函数只负责修改数据,不保存到数据库
- command.php在第963行统一调用player_save($pdata)保存所有数据变化
- 这确保了物品数据和clbpara数据的一致性
2. **刷新机制**:
- `<span id='HsUipfcGhU'></span>`是游戏中用于触发页面刷新的特殊标记
- 这个标记会被JavaScript检测到,触发侧边栏的数据更新
- 确保用户能够看到最新的物品状态
3. **防重复操作**:
- 通过正确的数据保存和页面刷新,确保焰火物品的耐久度正确显示
- 当物品耐久度为0时,物品会被清空,防止重复使用
## 预期效果
- ✅ 种火强化操作后,command页面会正确刷新
- ✅ 侧边栏中的焰火物品耐久度会实时更新
- ✅ 当焰火物品耐久度为0时,物品会从侧边栏中消失
- ✅ 防止玩家重复执行无意义的强化操作
- ✅ 确保数据的一致性和准确性
## 测试建议
1. 测试种火强化操作后页面是否正确刷新
2. 验证侧边栏中焰火物品耐久度是否实时更新
3. 确认当焰火物品耐久度为0时是否正确消失
4. 测试强化操作的数据一致性
2024年12月18日 种火探索物品获取逻辑优化记录
## 问题描述
根据测试玩家反馈,枫火歌者获取探物姿态下的种火探索到的物品逻辑需要优化:
### 当前问题:
1. 获取物品后,玩家操作页面没刷新,但物品直接进入了玩家的背包,这不直观
2. 在1的基础上,如果当时玩家的背包已满,则物品会凭空消失,这是一个问题
### 期望修复方式:
1. 获取物品后,将该物品置放于itm0,也即玩家发现物品的栏位,然后刷新command页面并附带一句文案
2. 如果玩家itm0已经有其他物品,则改为将获取的物品置放入玩家视野(smeo数组)并附带一句文案
## 修复实施
### 修改文件:
- command.php (第405-448行)
### 修改内容:
1. **优化物品获取逻辑**:
- 检查itm0是否为空
- 如果itm0为空,将物品放入itm0并调用itemfind()函数触发物品发现流程
- 如果itm0已占用,将物品放入地图视野并显示相应提示
2. **改进用户体验**:
- 添加了更直观的文案提示
- 确保物品不会凭空消失
- 通过itemfind()函数触发标准的物品发现流程,包括页面刷新
3. **具体实现细节**:
- 当itm0为空时:将物品数据复制到itm0相关变量,调用itemfind()函数
- 当itm0被占用时:将物品插入到mapitem表中,然后使用check_add_searchmemory()函数将其添加到玩家视野(smeo数组)
- 添加了itmpara字段的处理,确保物品参数正确传递
- 使用addslashes()防止SQL注入
- 在两种情况下都正确保存clbpara数据到数据库
### 代码变更摘要:
- 移除了原有的查找空物品栏逻辑
- 添加了itm0状态检查
- 实现了两种不同的物品放置策略
- 改进了用户反馈文案
- 确保了数据库操作的安全性
- 在两种情况下都添加了clbpara数据保存逻辑
- 修正了玩家视野的实现方式,使用check_add_searchmemory()函数正确添加到smeo数组
## 测试建议
1. 测试itm0为空时的物品获取流程
2. 测试itm0被占用时的物品放置到地图的功能
3. 验证物品参数(itmpara)是否正确传递
4. 确认页面刷新和文案显示是否正常
## 预期效果
- 玩家获取种火探索物品时会有更直观的体验
- 物品不会再凭空消失
- 符合游戏中其他物品发现机制的一致性
- 当itm0被占用时,物品会正确出现在玩家视野中,可以通过视野按钮获取
## 重要修正
在初始实现中,错误地将"玩家视野"理解为地图物品。经过修正,现在正确使用了:
- check_add_searchmemory()函数将物品添加到玩家的smeo数组(视野系统)
- 物品会先放入mapitem表,然后通过视野系统让玩家可以看到和获取
...@@ -391,7 +391,7 @@ function FireseedDrainNPC($pls) { ...@@ -391,7 +391,7 @@ function FireseedDrainNPC($pls) {
* @return bool 是否成功强化 * @return bool 是否成功强化
*/ */
function FireseedEnhance($fireseed_id, $item_index) { function FireseedEnhance($fireseed_id, $item_index) {
global $log, $fireseed_enhance_multipliers, $db, $tablepre; global $log, $fireseed_enhance_multipliers;
if(!isset($data)) { if(!isset($data)) {
global $pdata; global $pdata;
...@@ -445,10 +445,6 @@ function FireseedEnhance($fireseed_id, $item_index) { ...@@ -445,10 +445,6 @@ function FireseedEnhance($fireseed_id, $item_index) {
$clbpara['fireseed'][$fireseed_id]['arbe'] *= $multiplier / $old_level; $clbpara['fireseed'][$fireseed_id]['arbe'] *= $multiplier / $old_level;
} }
// 将更新后的 clbpara 保存到数据库
$encoded_clbpara = json_encode($clbpara, JSON_UNESCAPED_UNICODE);
$db->query("UPDATE {$tablepre}players SET clbpara='$encoded_clbpara' WHERE pid='$pid'");
// 消耗物品 // 消耗物品
$$items_var--; $$items_var--;
if($$items_var <= 0) { if($$items_var <= 0) {
......
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