Commit 523809f3 authored by Nemo Ma's avatar Nemo Ma

FEAT:Support $itmpara in mapitem, shopitem and mixitem

parent 571cfd7f
2024年7月19日 $itmpara 字段实现记录
在2024年7月19日,游戏中的物品添加了新的字段$itmpara,该字段为一数组,可让物品有着数组中定义的键值的属性。
以下是对应此字段的实现记录:
1. 地图物品(mapitem_1.php)
- 修改了system.func.php文件中的地图物品生成代码,添加了对$itmpara字段的支持
- 更新了SQL查询,将$itmpara字段添加到地图物品的插入语句中
- 允许在mapitem_1.php文件中为每个物品定义$itmpara字段
2. 商店物品(shopitem_1.php)
- 修改了system.func.php文件中的商店物品生成代码,添加了对$itmpara字段的支持
- 更新了SQL查询,将$itmpara字段添加到商店物品的插入语句中
- 允许在shopitem_1.php文件中为每个物品定义$itmpara字段
3. 合成物品(mixitem_1.php)
- 修改了itemmix.func.php文件中的$itmpara0变量处理,确保正确处理$itmpara字段
- 更新了mixitem_1.php文件中的物品定义,为每个物品添加了$itmpara字段
- 由于mixitem_1.php文件较大,只更新了部分物品,其余物品将在后续更新中完成
注意事项:
- 所有新添加的物品都应该包含$itmpara字段,即使该字段为空
- $itmpara字段应该是一个JSON字符串,表示一个键值对数组
- 可以使用get_itmpara()、get_single_itmpara()、set_itmpara()和del_single_itmpara()函数来操作$itmpara字段
2024年7月19日 $itmpara 字段 JSON 处理实现记录
在2024年7月19日,游戏中的物品添加了新的字段$itmpara,该字段为一数组,可让物品有着数组中定义的键值的属性。
由于$itmpara可能包含JSON格式的数据,而JSON中的逗号会导致在使用逗号分隔的配置文件中出现问题,因此我们实现了一种特殊的处理方法来解决这个问题。
以下是对应此字段的实现记录:
1. 地图物品(mapitem_1.php)
- 修改了system.func.php文件中的地图物品生成代码,添加了对JSON对象中逗号的特殊处理
- 当检测到一行中包含JSON对象(以{开头,以}结尾)时,会先提取JSON内容,然后用占位符替换,再进行逗号分隔
- 分割后,如果itmpara字段是占位符,则替换回实际的JSON内容
2. 商店物品(shopitem_1.php)
- 修改了system.func.php文件中的商店物品生成代码,添加了对JSON对象中逗号的特殊处理
- 使用与地图物品相同的方法处理JSON对象中的逗号
3. 合成物品(mixitem_1.php)
- 由于mixitem_1.php文件中的$itmpara字段是直接在PHP数组中定义的,不需要特殊处理
注意事项:
- 这种方法不需要对JSON内容进行编码,保持了原始数据的可读性
- 不需要修改get_itmpara函数,因为JSON字符串会被原样传递
- 所有使用$itmpara的代码都不需要修改
示例:
1. 在mapitem_1.php或shopitem_1.php中定义带有JSON的$itmpara:
0,0,1,测试物品,WK,100,10,,{"DecreaseDamageRaw":100,"DecreaseDamagePercentage":10}
2. system.func.php会特殊处理这一行:
- 提取JSON内容:{"DecreaseDamageRaw":100,"DecreaseDamagePercentage":10}
- 替换为占位符:0,0,1,测试物品,WK,100,10,,JSON_PLACEHOLDER
- 分割字符串:[0, 0, 1, 测试物品, WK, 100, 10, , JSON_PLACEHOLDER]
- 检测到itmpara是占位符,替换回JSON内容
3. 最终,$itmpara会被正确设置为:{"DecreaseDamageRaw":100,"DecreaseDamagePercentage":10}
...@@ -9,7 +9,7 @@ include_once GAME_ROOT.'./include/game/itemmain.func.php'; ...@@ -9,7 +9,7 @@ include_once GAME_ROOT.'./include/game/itemmain.func.php';
$mix_type = Array('normal' => '通常','sync' => '同调', 'overlay' => '超量'); $mix_type = Array('normal' => '通常','sync' => '同调', 'overlay' => '超量');
// 合成功能 // 合成功能
function itemmix_rev($mlist, $itemselect=-1, &$data=NULL) function itemmix_rev($mlist, $itemselect=-1, &$data=NULL)
{ {
global $log,$mode,$cmd,$main,$itemcmd; global $log,$mode,$cmd,$main,$itemcmd;
if(!isset($data)) if(!isset($data))
...@@ -25,7 +25,7 @@ function itemmix_rev($mlist, $itemselect=-1, &$data=NULL) ...@@ -25,7 +25,7 @@ function itemmix_rev($mlist, $itemselect=-1, &$data=NULL)
$mix_res = itemmix_get_result($mlist,$data); $mix_res = itemmix_get_result($mlist,$data);
# 尝试进行合成操作时 合成操作计数+1 # 尝试进行合成操作时 合成操作计数+1
if(empty($clbpara['achvars']['immix'])) $clbpara['achvars']['immix'] = 1; if(empty($clbpara['achvars']['immix'])) $clbpara['achvars']['immix'] = 1;
$mixitemname = array(); $mixitemname = array();
foreach($mlist as $val) $mixitemname[] = ${'itm'.$val}; foreach($mlist as $val) $mixitemname[] = ${'itm'.$val};
$itmstr = implode(' ', $mixitemname); $itmstr = implode(' ', $mixitemname);
...@@ -127,7 +127,7 @@ function itemmix_place_check($mlist,&$data=NULL) ...@@ -127,7 +127,7 @@ function itemmix_place_check($mlist,&$data=NULL)
return false; return false;
} }
$main = 'itemmix_tips'; $main = 'itemmix_tips';
$mlist2 = array_unique($mlist); $mlist2 = array_unique($mlist);
if(count($mlist) != count($mlist2)) { if(count($mlist) != count($mlist2)) {
$log .= '相同道具不能进行合成!<br>'; $log .= '相同道具不能进行合成!<br>';
$mode = 'itemmix'; $itemcmd = 'itemmix'; $mode = 'itemmix'; $itemcmd = 'itemmix';
...@@ -166,7 +166,7 @@ function itemmix_recipe_check($mixitem) ...@@ -166,7 +166,7 @@ function itemmix_recipe_check($mixitem)
} }
} }
} }
return $res; return $res;
} }
//查看是否符合同调要求 //查看是否符合同调要求
...@@ -366,7 +366,12 @@ function itemmix_proc($mlist, $minfo, $itmstr, &$data=NULL) ...@@ -366,7 +366,12 @@ function itemmix_proc($mlist, $minfo, $itmstr, &$data=NULL)
else{ else{
$itmsk0 = ''; $itmsk0 = '';
} }
$itmpara0 = $minfo['result'][5]; // Handle itmpara field
if (isset($minfo['result'][5]))
$itmpara0 = $minfo['result'][5];
else{
$itmpara0 = '';
}
$uip['mixcls'] = !empty($minfo['class']) ? $minfo['class'] : ''; $uip['mixcls'] = !empty($minfo['class']) ? $minfo['class'] : '';
$uip['mixtp'] = $minfo['type']; $uip['mixtp'] = $minfo['type'];
//合成成功 //合成成功
...@@ -422,14 +427,14 @@ function itemmix_events(&$data=NULL) ...@@ -422,14 +427,14 @@ function itemmix_events(&$data=NULL)
'鲜红的生血','真-红色的发圈','『红石电路』','【烈焰红唇】','红宝石方块','红莲魔龙 ★8'); '鲜红的生血','真-红色的发圈','『红石电路』','【烈焰红唇】','红宝石方块','红莲魔龙 ★8');
$royal_rose_stuff = $slip_list[array_rand($slip_list)]; $royal_rose_stuff = $slip_list[array_rand($slip_list)];
$royal_rose = Array( $royal_rose = Array(
'class' => 'hidden', 'class' => 'hidden',
'stuff' => array('「皇家蔷薇」','龙虎旗帜',$royal_rose_stuff), 'stuff' => array('「皇家蔷薇」','龙虎旗帜',$royal_rose_stuff),
'result' => array('「猩红蔷薇」','WK',179310,'∞','BNnrfcV'), 'result' => array('「猩红蔷薇」','WK',179310,'∞','BNnrfcV'),
); );
$gamevars['random_mixlist']['royal_rose'] = $royal_rose; $gamevars['random_mixlist']['royal_rose'] = $royal_rose;
save_gameinfo(); save_gameinfo();
} }
else else
{ {
$royal_rose = $gamevars['random_mixlist']['royal_rose']; $royal_rose = $gamevars['random_mixlist']['royal_rose'];
$royal_rose_stuff = $royal_rose['stuff'][2]; $royal_rose_stuff = $royal_rose['stuff'][2];
...@@ -477,7 +482,8 @@ function itemmix_events(&$data=NULL) ...@@ -477,7 +482,8 @@ function itemmix_events(&$data=NULL)
if($itm0 == 'Untainted Glory'){ if($itm0 == 'Untainted Glory'){
$log .= "<span class='minirainbow'>一道强光闪过——<br> $log .= "<span class='minirainbow'>一道强光闪过——<br>
你背包中的物品一瞬间全部消失了!<br>这是获得无毁荣光的必要代价!</span><br>"; 你背包中的物品一瞬间全部消失了!<br>这是获得无毁荣光的必要代价!</span><br>";
$itm1 = $itmk1 = $itmsk1 = $itm2 = $itmk2 = $itmsk2 = $itm3 = $itmk3 = $itmsk3 = $itm4 = $itmk4 = $itmsk4 = $itm5 = $itmk5 = $itmsk5 = $itm6 = $itmk6 = $itmsk6 = $itmpara0= $itmpara1 =$itmpara2 =$itmpara3 =$itmpara4 =$itmpara5 = $itmpara6 =0;''; $itm1 = $itmk1 = $itmsk1 = $itm2 = $itmk2 = $itmsk2 = $itm3 = $itmk3 = $itmsk3 = $itm4 = $itmk4 = $itmsk4 = $itm5 = $itmk5 = $itmsk5 = $itm6 = $itmk6 = $itmsk6 = '';
$itmpara1 = $itmpara2 = $itmpara3 = $itmpara4 = $itmpara5 = $itmpara6 = '';
$itme1 = $itms1 = $itme2 = $itms2 = $itme3 = $itms3 = $itme4 = $itms4 = $itme5 = $itms5 = $itme6 = $itms6 = 0; $itme1 = $itms1 = $itme2 = $itms2 = $itme3 = $itms3 = $itme4 = $itms4 = $itme5 = $itms5 = $itme6 = $itms6 = 0;
} }
return; return;
......
This diff is collapsed.
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