Commit 35819b9d authored by Nemo Ma's avatar Nemo Ma

FEAT:Fishing

TODO: cache/fishing.php - the placeholder values needs to be changed.
parent 4d480481
...@@ -8,7 +8,7 @@ require './include/common.inc.php'; ...@@ -8,7 +8,7 @@ require './include/common.inc.php';
require GAME_ROOT.'./include/game.func.php'; require GAME_ROOT.'./include/game.func.php';
//判断是否进入游戏 //判断是否进入游戏
if(!$cuser||!$cpass) { gexit($_ERROR['no_login'],__file__,__line__); } if(!$cuser||!$cpass) { gexit($_ERROR['no_login'],__file__,__line__); }
//$result = $db->query("SELECT * FROM {$tablepre}players WHERE name = '$cuser' AND type = 0"); //$result = $db->query("SELECT * FROM {$tablepre}players WHERE name = '$cuser' AND type = 0");
$pdata = fetch_playerdata_by_name($cuser); $pdata = fetch_playerdata_by_name($cuser);
...@@ -69,7 +69,7 @@ if($hp > 0){ ...@@ -69,7 +69,7 @@ if($hp > 0){
$log .= "<span class=\"yellow\">{$noisemin}分钟前,{$plsinfo[$noisepls]}传来了{$noiseinfo[$noisemode]}。</span><br>"; $log .= "<span class=\"yellow\">{$noisemin}分钟前,{$plsinfo[$noisepls]}传来了{$noiseinfo[$noisemode]}。</span><br>";
} }
} }
if ($club==0 && !isset($clubavl)) if ($club==0 && !isset($clubavl))
{ {
include_once GAME_ROOT.'./include/game/clubslct.func.php'; include_once GAME_ROOT.'./include/game/clubslct.func.php';
...@@ -85,7 +85,7 @@ if($hp > 0){ ...@@ -85,7 +85,7 @@ if($hp > 0){
include_once GAME_ROOT.'./include/game/itembag.func.php'; include_once GAME_ROOT.'./include/game/itembag.func.php';
overnumlimit(); overnumlimit();
} }
//判断冷却时间是否过去 //判断冷却时间是否过去
if($coldtimeon){ if($coldtimeon){
$cdover = $cdsec*1000 + $cdmsec + $cdtime; $cdover = $cdsec*1000 + $cdmsec + $cdtime;
...@@ -165,11 +165,19 @@ if($hp > 0){ ...@@ -165,11 +165,19 @@ if($hp > 0){
$state = substr($command,4,1); $state = substr($command,4,1);
$mode = 'rest'; $mode = 'rest';
} }
} elseif($command == 'fishing') {
include_once GAME_ROOT.'./include/game/fishing.func.php';
start_fishing($pdata);
if($mode == 'fishing') {
// 如果成功开始钓鱼,同时应用休息效果
include_once GAME_ROOT.'./include/state.func.php';
rest('rest', $pdata);
}
} elseif($command == 'itemmain') { } elseif($command == 'itemmain') {
if(($club == 20 && $itemcmd == 'itemmix') || ($club != 20 && ($itemcmd == 'elementmix' || $itemcmd == 'elementbag'))){ if(($club == 20 && $itemcmd == 'itemmix') || ($club != 20 && ($itemcmd == 'elementmix' || $itemcmd == 'elementbag'))){
$log .= "你的手突然掐住了你的头左右摇摆!<br><span class='yellow'>“你还想要干什么,啊?你还想要干什么!!”</span><br>看来你的手和脑子之间起了一点小摩擦。<br><br>"; $log .= "你的手突然掐住了你的头左右摇摆!<br><span class='yellow'>“你还想要干什么,啊?你还想要干什么!!”</span><br>看来你的手和脑子之间起了一点小摩擦。<br><br>";
$mode = 'command'; $mode = 'command';
} else { } else {
if($itemcmd == 'itemmix' || $itemcmd == 'elementmix'){ if($itemcmd == 'itemmix' || $itemcmd == 'elementmix'){
$main = 'itemmix_tips'; $main = 'itemmix_tips';
} }
...@@ -201,13 +209,13 @@ if($hp > 0){ ...@@ -201,13 +209,13 @@ if($hp > 0){
}elseif($sp_cmd == 'sp_trapadtsk'){ }elseif($sp_cmd == 'sp_trapadtsk'){
$position = 0; $position = 0;
if ($club==7) if ($club==7)
{ {
foreach(Array(1,2,3,4,5,6) as $imn) foreach(Array(1,2,3,4,5,6) as $imn)
if(strpos(${'itmk'.$imn},'B')===0 && ${'itme'.$imn} > 0 ){ if(strpos(${'itmk'.$imn},'B')===0 && ${'itme'.$imn} > 0 ){
$position = $imn; $position = $imn;
break; break;
} }
if (!$position) if (!$position)
{ {
$log .= '<span class="red">你没有电池,无法改造陷阱!</span><br />'; $log .= '<span class="red">你没有电池,无法改造陷阱!</span><br />';
$mode = 'command'; $mode = 'command';
...@@ -220,13 +228,13 @@ if($hp > 0){ ...@@ -220,13 +228,13 @@ if($hp > 0){
$position = $imn; $position = $imn;
break; break;
} }
if (!$position) if (!$position)
{ {
$log .= '<span class="red">你没有毒药,无法改造陷阱!</span><br />'; $log .= '<span class="red">你没有毒药,无法改造陷阱!</span><br />';
$mode = 'command'; $mode = 'command';
} }
} }
else else
{ {
$log .= '<span class="red">你不懂得如何改造陷阱!</span><br />'; $log .= '<span class="red">你不懂得如何改造陷阱!</span><br />';
$mode = 'command'; $mode = 'command';
...@@ -375,7 +383,7 @@ if($hp > 0){ ...@@ -375,7 +383,7 @@ if($hp > 0){
$p12[1]=1; $p12[2]=2; $p12[1]=1; $p12[2]=2;
$mode='sp_skpts'; $mode='sp_skpts';
//妙手技能 //妙手技能
}elseif($sp_cmd == 'sp_pickpocket_selected'){ }elseif($sp_cmd == 'sp_pickpocket_selected'){
if (!isset($choice)) { if (!isset($choice)) {
$mode = 'command'; $mode = 'command';
} else { } else {
...@@ -383,13 +391,13 @@ if($hp > 0){ ...@@ -383,13 +391,13 @@ if($hp > 0){
include_once GAME_ROOT . './include/game/revclubskills_extra.func.php'; include_once GAME_ROOT . './include/game/revclubskills_extra.func.php';
skill_tl_pickpocket_act($choice); skill_tl_pickpocket_act($choice);
} }
$mode = 'command'; $mode = 'command';
}else{ }else{
$mode = $sp_cmd; $mode = $sp_cmd;
} }
} elseif($command == 'team') { } elseif($command == 'team') {
include_once GAME_ROOT.'./include/game/team.func.php'; include_once GAME_ROOT.'./include/game/team.func.php';
if($teamcmd == 'teamquit') { if($teamcmd == 'teamquit') {
teamquit(); teamquit();
} else{ } else{
teamcheck(); teamcheck();
...@@ -419,10 +427,19 @@ if($hp > 0){ ...@@ -419,10 +427,19 @@ if($hp > 0){
//$log.="【DEBUG】关闭了对话框。"; //$log.="【DEBUG】关闭了对话框。";
if(!empty($dialogue_log[$clbpara['dialogue']])) $log.= $dialogue_log[$clbpara['dialogue']]; if(!empty($dialogue_log[$clbpara['dialogue']])) $log.= $dialogue_log[$clbpara['dialogue']];
unset($clbpara['dialogue']); unset($clbpara['noskip_dialogue']); unset($clbpara['dialogue']); unset($clbpara['noskip_dialogue']);
} elseif ($command == 'choose_fish') {
// 处理鱼篓子物品选择
if (isset($clbpara['fish_basket'])) {
include_once GAME_ROOT.'./include/game/item.nouveau_booster1.php';
item_nouveau_booster1($clbpara['fish_basket']['position'], $pdata);
} else {
$log .= '出现了错误,请重新使用鱼篓子。<br>';
$mode = 'command';
}
} elseif (strpos($command,'memory')===0) { } elseif (strpos($command,'memory')===0) {
$smn = substr($command,6); $smn = substr($command,6);
if(!empty($clbpara['smeo'] && isset($clbpara['smeo'][$smn]))){ if(!empty($clbpara['smeo'] && isset($clbpara['smeo'][$smn]))){
$iid = $clbpara['smeo'][$smn][0]; $itp = $clbpara['smeo'][$smn][1]; $iid = $clbpara['smeo'][$smn][0]; $itp = $clbpara['smeo'][$smn][1];
lost_searchmemory($smn,$pdata); lost_searchmemory($smn,$pdata);
if($itp == 'itm'){ if($itp == 'itm'){
include_once GAME_ROOT.'./include/game/search.func.php'; include_once GAME_ROOT.'./include/game/search.func.php';
...@@ -550,9 +567,9 @@ if($hp > 0){ ...@@ -550,9 +567,9 @@ if($hp > 0){
$horizon = $chor; $horizon = $chor;
$log .= "视界切换为<span class=\"yellow\">$horizoninfo[$chor]</span>。<br> "; $log .= "视界切换为<span class=\"yellow\">$horizoninfo[$chor]</span>。<br> ";
# 切换视界后,丢失所有视野 # 切换视界后,丢失所有视野
lost_searchmemory('all',$pdata); lost_searchmemory('all',$pdata);
# 向页面发送刷新标记 # 向页面发送刷新标记
$log .= "<span id='HsUipfcGhU'></span>"; $log .= "<span id='HsUipfcGhU'></span>";
}else{ }else{
$log .= "<span class=\"yellow\">这种想法太奇怪了!</span><br> "; $log .= "<span class=\"yellow\">这种想法太奇怪了!</span><br> ";
} }
...@@ -593,7 +610,23 @@ if($hp > 0){ ...@@ -593,7 +610,23 @@ if($hp > 0){
\revbattle\revbattle_prepare($command,$message); \revbattle\revbattle_prepare($command,$message);
} elseif($mode == 'rest') { } elseif($mode == 'rest') {
include_once GAME_ROOT.'./include/state.func.php'; include_once GAME_ROOT.'./include/state.func.php';
rest($command); // 如果在休息状态下点击钓鱼按钮,则进入钓鱼状态
if($command == 'fishing') {
include_once GAME_ROOT.'./include/game/fishing.func.php';
start_fishing($pdata);
// 如果成功进入钓鱼状态,保持原有的休息状态
if($mode == 'fishing') {
// 不需要调用rest函数,因为钓鱼状态下会自动应用休息效果
}
} else {
rest($command);
}
} elseif($mode == 'fishing') {
include_once GAME_ROOT.'./include/game/fishing.func.php';
fishing_command($command, $pdata);
// 在钓鱼的同时也应用休息效果
include_once GAME_ROOT.'./include/state.func.php';
rest($command, $pdata);
// } elseif($mode == 'chgpassword') { // } elseif($mode == 'chgpassword') {
// include_once GAME_ROOT.'./include/game/special.func.php'; // include_once GAME_ROOT.'./include/game/special.func.php';
// chgpassword($oldpswd,$newpswd,$newpswd2); // chgpassword($oldpswd,$newpswd,$newpswd2);
...@@ -698,8 +731,8 @@ if($hp > 0){ ...@@ -698,8 +731,8 @@ if($hp > 0){
skill_merc_chase($sk,${$sk.'mkey'}); skill_merc_chase($sk,${$sk.'mkey'});
} elseif(isset(${$sk.'mkey'}) && isset(${$sk.${$sk.'mkey'}.'moveto'})){ } elseif(isset(${$sk.'mkey'}) && isset(${$sk.${$sk.'mkey'}.'moveto'})){
skill_merc_move($sk,${$sk.'mkey'},${$sk.${$sk.'mkey'}.'moveto'}); skill_merc_move($sk,${$sk.'mkey'},${$sk.${$sk.'mkey'}.'moveto'});
} }
} }
} }
} }
$mode = 'command'; $mode = 'command';
...@@ -711,7 +744,7 @@ if($hp > 0){ ...@@ -711,7 +744,7 @@ if($hp > 0){
command_end_flag: command_end_flag:
$mode = 'command'; $mode = 'command';
} }
if($action == 'pacorpse' && $gamestate < 40){ if($action == 'pacorpse' && $gamestate < 40){
// if($state == 1 || $state == 2 || $state ==3){ // if($state == 1 || $state == 2 || $state ==3){
// $state = 0; // $state = 0;
...@@ -722,11 +755,11 @@ if($hp > 0){ ...@@ -722,11 +755,11 @@ if($hp > 0){
if($db->num_rows($result)>0){ if($db->num_rows($result)>0){
$edata = $db->fetch_array($result); $edata = $db->fetch_array($result);
include_once GAME_ROOT.'./include/game/battle.func.php'; include_once GAME_ROOT.'./include/game/battle.func.php';
findcorpse($edata); findcorpse($edata);
} }
} }
} }
//指令执行完毕,更新冷却时间 //指令执行完毕,更新冷却时间
if($coldtimeon && isset($cmdcdtime)){ if($coldtimeon && isset($cmdcdtime)){
$nowmtime = floor(getmicrotime()*1000); $nowmtime = floor(getmicrotime()*1000);
...@@ -779,7 +812,7 @@ if($hp <= 0) { ...@@ -779,7 +812,7 @@ if($hp <= 0) {
include template('death'); include template('death');
$gamedata['innerHTML']['cmd'] = ob_get_contents(); $gamedata['innerHTML']['cmd'] = ob_get_contents();
$mode = 'death'; $mode = 'death';
} elseif($cmd){ } elseif($cmd){
$gamedata['innerHTML']['cmd'] = $cmd; $gamedata['innerHTML']['cmd'] = $cmd;
} elseif($itms0){ } elseif($itms0){
ob_clean(); ob_clean();
...@@ -787,7 +820,13 @@ if($hp <= 0) { ...@@ -787,7 +820,13 @@ if($hp <= 0) {
$gamedata['innerHTML']['cmd'] = ob_get_contents(); $gamedata['innerHTML']['cmd'] = ob_get_contents();
} elseif($state == 1 || $state == 2 || $state ==3) { } elseif($state == 1 || $state == 2 || $state ==3) {
ob_clean(); ob_clean();
include template('rest'); if($mode == 'fishing') {
// 在钓鱼模式下显示钓鱼界面
$fishing_count = count($clbpara['fishing']['caught_items']);
include template('fishing');
} else {
include template('rest');
}
$gamedata['innerHTML']['cmd'] = ob_get_contents(); $gamedata['innerHTML']['cmd'] = ob_get_contents();
} elseif(!$cmd) { } elseif(!$cmd) {
ob_clean(); ob_clean();
......
# 钓鱼功能实现记录
## 功能目标
为游戏添加钓鱼机制,让玩家可以在休息或静养时进行钓鱼活动,钓到的物品会存入鱼篓子中。
## 实现方法
1. 创建钓鱼物品抽选池文件 `fishing.php`
2. 创建钓鱼功能的核心逻辑文件 `fishing.func.php`
3. 创建钓鱼界面模板 `fishing.htm`
4. 修改休息界面,添加钓鱼选项
5. 修改 `command.php` 文件,添加钓鱼命令处理
6. 修改 `command.php` 文件,添加钓鱼模式处理
7. 修改模板加载部分,支持钓鱼界面
## 创建的文件
1. `gamedata/cache/fishing.php` - 钓鱼物品抽选池
2. `include/game/fishing.func.php` - 钓鱼功能的核心逻辑
3. `templates/default/fishing.htm` - 钓鱼界面模板
## 修改的文件
1. `templates/default/rest.htm` - 添加钓鱼按钮
2. `command.php` - 添加钓鱼命令处理和钓鱼模式处理
3. `command.php` - 修改模板加载部分,支持钓鱼界面
## 功能详情
### 钓鱼物品抽选池
在 `fishing.php` 文件中定义了各种可钓到的物品,包括:
- 常见鱼类(小鲫鱼、鲤鱼、黄鳝等)
- 中等稀有度鱼类(鲈鱼、鲑鱼等)
- 稀有鱼类(大马哈鱼、鲟鱼等)
- 非常稀有鱼类(金鱼、龙鱼等)
- 其他水生物(海藻、水草、贝壳等)
- 垃圾物品(破鞋、塑料袋等)
- 特殊物品(古代硬币、神秘宝箱等)
同时,还定义了不同地点可钓到的物品列表,以及时间和天气对钓鱼概率的影响。
### 钓鱼功能核心逻辑
在 `fishing.func.php` 文件中实现了钓鱼功能的核心逻辑,包括:
- `can_fishing()` - 检查当前位置是否可以钓鱼
- `start_fishing()` - 开始钓鱼
- `end_fishing()` - 结束钓鱼
- `check_fishing()` - 检查钓鱼状态,看是否钓到了新物品
- `create_fish_basket()` - 创建鱼篓子并将钓到的物品放入其中
- `fishing_command()` - 处理钓鱼状态下的命令
### 钓鱼界面
在 `fishing.htm` 文件中定义了钓鱼界面,显示当前钓到的物品数量,并提供继续钓鱼和结束钓鱼的按钮。
### 休息界面修改
在 `rest.htm` 文件中添加了钓鱼按钮,只在可钓鱼的地点显示。
### 命令处理修改
在 `command.php` 文件中添加了钓鱼命令处理和钓鱼模式处理,使玩家可以开始钓鱼、继续钓鱼和结束钓鱼。
### 模板加载修改
在 `command.php` 文件中修改了模板加载部分,支持钓鱼界面的显示。
## 使用方法
1. 玩家在可钓鱼的地点(广场、小树林、后山、湖滨、码头、温泉、白穗神社)进行休息或静养时,会看到钓鱼按钮。
2. 点击钓鱼按钮,开始钓鱼。
3. 钓鱼过程中,玩家会在一定时间后(约1分钟)开始累计钓上的东西。
4. 钓鱼结束后(点击钓鱼界面的返回按钮),显示钓到的物品,并将它们存入鱼篓子中。
5. 鱼篓子会放入玩家的 $itm0 中,玩家可以像使用普通背包一样使用鱼篓子。
## 后续改进
1. 添加钓鱼技能,影响钓鱼成功率和钓到稀有物品的概率
2. 添加钓鱼装备,如不同种类的鱼竿和鱼饵
3. 添加钓鱼成就系统
4. 添加钓鱼比赛活动
5. 添加钓鱼物品的特殊用途,如烹饪系统
# 钓鱼功能属性提升机制添加记录
## 功能目标
为钓鱼功能添加随时间推移随机提升玩家基础属性的机制,使钓鱼不仅能获得物品,还能提升玩家的基础能力。
## 实现方法
1. 修改 `check_fishing` 函数,添加随机提升属性的逻辑
2. 修改 `end_fishing` 函数,在结束钓鱼时显示属性提升的总结
3. 修复代码中的一些问题,确保变量正确声明和使用
## 修改的文件
1. `include/game/fishing.func.php` - 添加属性提升机制
## 功能详情
### 属性提升机制
在 `check_fishing` 函数中,每次检查钓鱼状态时(约每分钟一次),除了有机会钓到物品外,还有 15% 的概率提升玩家的基础属性:
- 基础攻击($att):每次提升 1-3 点
- 基础防御($def):每次提升 1-3 点
- 生命上限($mhp):每次提升 5-15 点,同时提升当前生命
- 体力上限($msp):每次提升 5-15 点,同时提升当前体力
### 属性提升记录
在 `end_fishing` 函数中,添加了显示属性提升总结的逻辑,在结束钓鱼时会显示钓鱼期间各项属性的总提升量。
### 代码修复
1. 在 `create_fish_basket` 函数中添加了全局变量声明,确保正确使用 $itm0, $itmk0 等变量
2. 移除了 `fishing_command` 函数中未使用的 $mode 变量
3. 移除了 `end_fishing` 函数中未使用的 $now 变量
## 使用方法
玩家在钓鱼过程中,除了有机会钓到物品外,还有机会随机提升基础属性。钓鱼结束后,会显示钓鱼期间各项属性的总提升量。
## 效果展示
钓鱼结束时,玩家会看到类似以下的信息:
```
钓鱼期间,你的属性得到了提升:
- 基础攻击 +5
- 基础防御 +3
- 生命上限 +25
- 体力上限 +20
```
这个机制使钓鱼成为一种有价值的活动,即使没有钓到有用的物品,玩家也能通过提升基础属性获得收益。
# 钓鱼功能钓竿增强机制添加记录
## 功能目标
为钓鱼功能添加钓竿增强机制,使装备了名字中带有"钓竿"或"钓鱼竿"的物品的玩家能够获得更高的钓鱼效率。
## 实现方法
1. 修改 `check_fishing` 函数,添加检测钓竿的功能并提高钓鱼效率
2. 修改钓鱼物品获取概率,使装备钓竿的玩家有更高的钓鱼成功率
3. 修改属性提升部分,使装备钓竿的玩家有更高的属性提升概率和幅度
4. 在 `fishing.php` 文件中添加钓竿物品,并更新钓鱼地点配置
## 修改的文件
1. `include/game/fishing.func.php` - 添加钓竿检测和效率提升机制
2. `gamedata/cache/fishing.php` - 添加钓竿物品和更新钓鱼地点配置
## 功能详情
### 钓竿检测和效率提升
在 `check_fishing` 函数中,添加了检测玩家是否装备了钓竿的功能:
- 如果玩家装备了名字中带有"钓竿"或"钓鱼竿"的物品,钓鱼效率提高 50%
- 如果钓竿有稀有属性(r),额外提高 30% 效率
- 如果钓竿有史诗属性(R),额外提高 50% 效率
- 钓鱼效率提高会增加每次检查的次数,从而增加钓到物品的机会
### 钓鱼成功率提升
修改了钓鱼物品获取概率的计算方式:
- 基础成功率是 70%,装备钓竿可提高成功率,最高可达 95%
- 装备钓竿时,稀有物品的获取概率也会提高
### 属性提升概率和幅度增加
修改了属性提升的部分:
- 基础属性提升概率是 15%,装备钓竿可提高到最高 30%
- 装备钓竿时,属性提升的幅度也会增加,与钓竿效率成正比
### 钓竿物品和钓鱼地点配置
在 `fishing.php` 文件中添加了三种钓竿物品:
- 简易钓竿(WP, 15, 1, '', 3)
- 高级钓竿(WP, 25, 1, 'r', 2)
- 传说中的钓鱼竿(WP, 40, 1, 'R', 1)
同时,更新了钓鱼地点配置,使钓竿也可以在某些地点钓到:
- 简易钓竿可在广场、湖滨、小树林、后山等地点钓到
- 高级钓竿可在白穗神社、码头等地点钓到
- 传说中的钓鱼竿只能在温泉钓到
## 使用效果
### 钓鱼效率提升
玩家装备钓竿后,会看到类似以下的消息:
```
你使用了简易钓竿,钓鱼效率提高了 50%!
```
### 钓鱼成功率提升
装备钓竿的玩家有更高的几率钓到物品,特别是稀有物品。钓到物品时会看到类似以下的消息:
```
你熟练地操作简易钓竿,钓到了一个 金鱼!
```
### 属性提升增强
装备钓竿的玩家有更高的几率获得属性提升,且提升幅度更大。获得属性提升时会看到类似以下的消息:
```
使用简易钓竿钓鱼的过程中,你的手臂和意志得到了锻炼,你的基础攻击提升了 3 点!
```
这个新机制使钓鱼成为一种更有策略性的活动,玩家可以通过获取和使用更好的钓竿来提高钓鱼效率和收益。
# 钓鱼系统更新记录
## 更新目标
根据新的要求修改钓鱼系统,包括:
1. 将钓鱼竿类型从 WP(武器)改为 DA(手臂装备)
2. 修改补给品类型为 HH(生命恢复)、HS(体力恢复)或 HB(生命体力恢复)
3. 使用 Z(精英)和 z(天然)作为稀有和史诗属性的标识
4. 更新可钓鱼地点列表,限制为特定地点
5. 为特殊地点添加独特的钓鱼物品
## 修改内容
### 1. 钓鱼竿类型修改
- 将钓鱼竿类型从 WP(武器)改为 DA(手臂装备)
- 修改 `check_fishing` 函数,检查手臂装备($ara)而不是武器($wep)
- 钓鱼竿属性从 r/R 改为 z/Z
### 2. 补给品类型修改
- 将鱼类物品类型从 FL 改为 HH(生命恢复)
- 将部分水生物类型改为 HB(生命体力恢复)或 HS(体力恢复)
### 3. 稀有属性标识修改
- 将稀有属性从 r 改为 z(天然)
- 将史诗属性从 R 改为 Z(精英)
### 4. 可钓鱼地点更新
- 限制钓鱼地点为:
- 3 - "雪之镇"(靠海的北海道,可以钓鱼)
- 7 - "清水池"(是一个湖泊,可以钓鱼)
- 12 - "夏之镇"(设定中靠海,可以钓鱼)
- 4 - "索拉利斯"(致敬了1961年的波兰科幻小说Solaris,可以钓上外星鱼和其他部件)
- 24 - "永恒的世界"(设定中是一片云海,可以钓上奇幻风格的东西)
### 5. 特殊地点物品添加
- 为索拉利斯添加特有物品:
- 外星鱼(HB, 50, 1, Z, 2)
- 奇异水晶(MA, 100, 1, Z, 1)
- 未知生物组织(HH, 30, 1, z, 3)
- 索拉利斯之泪(HS, 80, 1, Z, 1)
- 为永恒的世界添加特有物品:
- 云朵鱼(HB, 40, 1, Z, 2)
- 天空宝石(MA, 120, 1, Z, 1)
- 彩虹水滴(HS, 60, 1, z, 3)
- 永恒之羽(DA, 50, 1, Z, 1)
## 修改的文件
1. `include/game/fishing.func.php` - 修改钓鱼功能的核心逻辑
2. `gamedata/cache/fishing.php` - 修改钓鱼物品和地点配置
## 功能详情
### 钓鱼竿检测和效率提升
```php
// 检查手臂装备是否有钓竿
if (strpos($ara, '钓竿') !== false || strpos($ara, '钓鱼竿') !== false) {
$has_fishing_rod = true;
$fishing_rod_bonus = 1.5; // 装备钓竿时提高 50% 效率
// 如果钓竿有特殊属性,可以进一步提高效率
if (strpos($arask, 'z') !== false) { // 天然属性
$fishing_rod_bonus += 0.3; // 再提高 30%
}
if (strpos($arask, 'Z') !== false) { // 精英属性
$fishing_rod_bonus += 0.5; // 再提高 50%
}
}
```
### 可钓鱼地点列表
```php
// 可以钓鱼的地点列表
$fishing_places_list = array(
3, // 雪之镇(靠海的北海道,可以钓鱼)
7, // 清水池(是一个湖泊,可以钓鱼)
12, // 夏之镇(设定中靠海,可以钓鱼)
4, // 索拉利斯(致敬了1961年的波兰科幻小说Solaris,可以钓上外星鱼和其他部件)
24, // 永恒的世界(设定中是一片云海,可以钓上奇幻风格的东西)
);
```
### 特殊地点物品配置
```php
// 索拉利斯(致敬了1961年的波兰科幻小说Solaris,可以钓上外星鱼和其他部件)
'索拉利斯' => array('外星鱼', '奇异水晶', '未知生物组织', '索拉利斯之泪', '海藻', '水草', '贝壳', '海星', '塑料袋', '空罐头', '高级钓竿'),
// 永恒的世界(设定中是一片云海,可以钓上奇幻风格的东西)
'永恒的世界' => array('云朵鱼', '天空宝石', '彩虹水滴', '永恒之羽', '彩虹鱼', '金鱼', '龙鱼', '传说中的钓鱼竿'),
```
## 使用效果
### 钓鱼效率提示
```
你使用了简易钓竿,钓鱼效率提高了 50%!
```
### 钓鱼成功消息
```
你熟练地操作简易钓竿,钓到了一个 金鱼!
```
### 属性提升消息
```
使用简易钓竿钓鱼的过程中,你的手臂和意志得到了锻炼,你的基础攻击提升了 3 点!
```
这个更新使钓鱼系统更加符合游戏的设定,并增加了更多的特色和策略性。玩家现在可以在特定的地点钓到独特的物品,使用手臂装备的钓竿提高钓鱼效率,并获得各种类型的补给品。
# 钓鱼系统更新记录 - 基于地点ID的钓鱼功能
## 更新目标
修改钓鱼功能,使其通过地点ID而不是地点名称来判断可钓鱼的地点,这样可以避免因地点名称变化而导致的问题,并使代码更加健壮。
## 修改内容
### 1. 钓鱼地点配置修改
- 将 `fishing.php` 中的钓鱼地点配置从使用地点名称作为键改为使用地点ID作为键
- 地点ID与名称的对应关系:
- 3 - 雪之镇(靠海的北海道,可以钓鱼)
- 7 - 清水池(是一个湖泊,可以钓鱼)
- 12 - 夏之镇(设定中靠海,可以钓鱼)
- 4 - 索拉利斯(致敬了1961年的波兰科幻小说Solaris)
- 24 - 永恒的世界(设定中是一片云海)
### 2. 钓鱼功能逻辑修改
- 修改 `check_fishing` 函数,直接使用地点ID获取可钓的物品列表
- 移除了获取地点名称的步骤,简化了代码逻辑
## 修改的文件
1. `include/game/fishing.func.php` - 修改钓鱼功能的核心逻辑
2. `gamedata/cache/fishing.php` - 修改钓鱼地点配置
## 功能详情
### 基于地点ID的钓鱼地点配置
```php
// 钓鱼地点配置
// 不同地点可以钓到不同的鱼(使用地点ID作为键)
$fishing_places = array(
// 3 - 雪之镇(靠海的北海道,可以钓鱼)
3 => array('小鲫鱼', '鲤鱼', '黄鳝', '鲶鱼', '鲈鱼', '鲑鱼', '大马哈鱼', '海藻', '水草', '贝壳', '海星', '破鞋', '塑料袋', '空罐头', '简易钓竿'),
// 7 - 清水池(是一个湖泊,可以钓鱼)
7 => array('小鲫鱼', '鲤鱼', '草鱼', '鲶鱼', '鲈鱼', '彩虹鱼', '金鱼', '水草', '贝壳', '破鞋', '塑料袋', '简易钓竿', '高级钓竿'),
// 12 - 夏之镇(设定中靠海,可以钓鱼)
12 => array('鲈鱼', '鲑鱼', '金枪鱼', '河豚', '大马哈鱼', '鲟鱼', '剑鱼', '海藻', '贝壳', '海星', '螃蟹', '龙虾', '珍珠', '塑料袋', '空罐头', '废轮胎', '神秘宝箱', '高级钓竿'),
// 4 - 索拉利斯(致敬了1961年的波兰科幻小说Solaris,可以钓上外星鱼和其他部件)
4 => array('外星鱼', '奇异水晶', '未知生物组织', '索拉利斯之泪', '海藻', '水草', '贝壳', '海星', '塑料袋', '空罐头', '高级钓竿'),
// 24 - 永恒的世界(设定中是一片云海,可以钓上奇幻风格的东西)
24 => array('云朵鱼', '天空宝石', '彩虹水滴', '永恒之羽', '彩虹鱼', '金鱼', '龙鱼', '传说中的钓鱼竿'),
// 默认地点(其他所有地点)
'default' => array('小鲫鱼', '鲤鱼', '黄鳝', '破鞋', '塑料袋', '空罐头')
);
```
### 直接使用地点ID获取可钓的物品列表
```php
// 直接使用地点ID获取可钓的物品列表
$available_items = isset($fishing_places[$pls]) ? $fishing_places[$pls] : $fishing_places['default'];
```
## 优势
1. **更加健壮**:即使地点名称发生变化,钓鱼功能仍然可以正常工作,因为它现在基于不变的地点ID
2. **更高效**:直接使用地点ID进行查找,避免了额外的地点名称查找步骤
3. **更易维护**:代码逻辑更加清晰,减少了潜在的错误来源
4. **更好的兼容性**:与游戏中其他基于地点ID的功能保持一致
这个更新使钓鱼系统更加稳定和可靠,同时保持了所有现有的功能和特性。
# 修复休息状态下钓鱼功能问题
## 问题描述
在休息/静养/治疗状态下,点击钓鱼按钮后,会直接退出休息状态,获得的提示也和退出休息状态的提示相同,中途没有任何报错信息。这与预期的处理(休息/静养/治疗的场合点击钓鱼按钮进入钓鱼状态并适用钓鱼逻辑)不同。
## 问题分析
通过检查代码,发现问题出在两个地方:
1. 在 `command.php` 中,休息状态下没有对钓鱼命令进行特殊处理,导致直接调用 `rest()` 函数处理所有命令
2. 在 `state.func.php` 的 `rest()` 函数中,对于非 'rest' 命令,会直接退出休息状态并返回到命令模式
## 解决方案
1. 修改 `command.php` 文件,在处理休息状态的部分添加对钓鱼命令的特殊处理:
```php
} elseif($mode == 'rest') {
include_once GAME_ROOT.'./include/state.func.php';
// 如果在休息状态下点击钓鱼按钮,则进入钓鱼状态
if($command == 'fishing') {
include_once GAME_ROOT.'./include/game/fishing.func.php';
start_fishing($pdata);
// 如果成功进入钓鱼状态,保持原有的休息状态
if($mode == 'fishing') {
// 不需要调用rest函数,因为钓鱼状态下会自动应用休息效果
}
} else {
rest($command);
}
}
```
2. 修改 `state.func.php` 文件中的 `rest()` 函数,使其在处理 'fishing' 命令时不会退出休息状态:
```php
// 如果命令不是 rest 或 fishing,则退出休息状态
if ($command != 'rest' && $command != 'fishing') {
$state = 0;
$endtime = $now;
$mode = 'command';
}
```
## 预期效果
这些修改后,玩家在休息/静养/治疗状态下点击钓鱼按钮,将会正确进入钓鱼状态,同时保持原有的休息状态效果。这样玩家可以一边钓鱼一边享受休息/静养/治疗的效果,符合游戏设计的预期。
## 注意事项
1. 钓鱼状态下已经包含了对休息效果的应用,所以不需要重复调用 `rest()` 函数
2. 这个修复不会影响其他游戏功能,只是修正了休息状态下钓鱼功能的行为
# 钓鱼功能实装与除错记录
本文档整合了钓鱼功能的实装和除错过程,包括功能设计、实现步骤和问题修复。
## 1. 功能设计
### 1.1 基本钓鱼功能
- 玩家可以在特定地点(雪之镇、清水池、夏之镇、索拉利斯、永恒的世界)进行钓鱼活动
- 钓鱼时,玩家有机会获得各种物品,包括鱼类和其他物品
- 钓到的物品会存入鱼篓子中,玩家可以从中选择获取物品
- 钓鱼效率受装备影响,如果玩家装备了钓竿(名称中包含"钓竿"或"钓鱼竿"),钓鱼效率会提高
### 1.2 属性提升功能
- 钓鱼过程中,玩家有机会随机提升基础属性(攻击力、防御力、最大生命值、最大体力值)
- 属性提升的概率和幅度可以通过配置文件进行调整
- 属性提升会在日志中显示,让玩家知道自己获得了什么提升
### 1.3 鱼篓子功能
- 钓到的物品会自动存入鱼篓子中
- 鱼篓子是一种特殊物品(Z类型),可以存储多个物品
- 玩家可以使用鱼篓子,查看里面的物品列表,并选择一个物品取出
- 如果鱼篓子中的物品被取完,鱼篓子会自动消失
## 2. 实现步骤
### 2.1 基本钓鱼功能实现
1. 创建 `fishing.func.php` 文件,实现钓鱼的核心逻辑
2.`rest.php` 文件中添加钓鱼按钮和相关处理代码
3. 创建 `fishing.php` 文件,处理钓鱼请求
4. 创建 `templates/default/fishing.htm` 模板文件,显示钓鱼界面
5. 实现钓鱼物品的随机生成和获取逻辑
6. 实现鱼篓子功能,将钓到的物品存入鱼篓子中
### 2.2 属性提升功能实现
1.`fishing.func.php` 文件中添加属性提升逻辑
2. 实现随机属性提升的概率和幅度计算
3. 在日志中显示属性提升信息
### 2.3 鱼篓子功能实现
1. 创建 `item.nouveau_booster1.php` 文件,实现鱼篓子的使用逻辑
2. 创建 `templates/default/fish_basket.htm` 模板文件,显示鱼篓子界面
3. 实现从鱼篓子中选择和获取物品的功能
4.`command.php` 文件中添加对 `choose_fish` 命令的处理
## 3. 问题修复
### 3.1 钓鱼地点判断问题
**问题**:钓鱼功能只能在特定地点使用,但判断逻辑使用了地点名称字符串,而不是地点ID,导致可能出现判断错误。
**解决方案**
- 修改钓鱼地点判断逻辑,使用地点ID($pls)而不是地点名称字符串
-`fishing.func.php` 文件中添加钓鱼地点ID列表,用于判断玩家是否在可钓鱼的地点
### 3.2 钓鱼与休息状态冲突问题
**问题**:当玩家在休息/治疗/治疗状态下点击钓鱼按钮时,会退出休息状态,而不是同时保持休息和钓鱼状态。
**解决方案**
- 修改 `rest.php` 文件中的钓鱼按钮处理逻辑,使其在进入钓鱼状态的同时保持休息状态
-`fishing.php` 文件中添加对休息状态的保持逻辑
### 3.3 鱼篓子使用问题
**问题**:鱼篓子功能存在多个问题,包括:
1. 物品名称显示为Unicode编码而不是实际的中文字符
2. 选择界面没有正确显示,只显示了字符串 "choose_fish"
3. 点击返回按钮没有反应,应该返回之前的步骤(背包界面)
4. 选择了物品并点击"取出选中物品"后,无法获得物品
**解决方案**
1. 修改 `fishing.func.php` 文件中的 `json_encode` 调用,添加 `JSON_UNESCAPED_UNICODE` 选项,确保中文字符能够正确存储和显示
2. 创建专门的模板文件 `fish_basket.htm`,用于显示鱼篓子界面
3. 修改返回按钮的 JavaScript 代码,正确设置 `mode` 变量
4. 完全重写 `item.nouveau_booster1.php` 文件,使其结构更加清晰,并修复物品选择和获取功能
## 4. 最终实现
### 4.1 文件结构
- `include/game/fishing.func.php`:钓鱼功能的核心逻辑
- `include/game/item.nouveau_booster1.php`:鱼篓子的使用逻辑
- `include/game/fishing.php`:处理钓鱼请求
- `templates/default/fishing.htm`:钓鱼界面模板
- `templates/default/fish_basket.htm`:鱼篓子界面模板
### 4.2 功能流程
1. **开始钓鱼**
- 玩家在特定地点(雪之镇、清水池、夏之镇、索拉利斯、永恒的世界)点击钓鱼按钮
- 系统检查玩家是否在可钓鱼的地点,如果是,则进入钓鱼状态
- 如果玩家装备了钓竿(名称中包含"钓竿"或"钓鱼竿"),钓鱼效率会提高
2. **钓鱼过程**
- 系统随机生成钓鱼结果,包括物品和属性提升
- 钓到的物品会自动存入鱼篓子中
- 属性提升会在日志中显示
3. **使用鱼篓子**
- 玩家使用鱼篓子,会看到一个专门的界面,显示里面所有物品的列表
- 玩家可以选择一个物品,然后点击"取出选中物品"按钮取出该物品
- 如果玩家没有选择物品就点击"取出选中物品"按钮,会提示选择一个物品
- 如果玩家不想取出任何物品,可以点击"返回"按钮返回到命令界面
- 如果鱼篓子中的物品被取完,鱼篓子会自动消失
### 4.3 配置参数
- **钓鱼地点**:雪之镇、清水池、夏之镇、索拉利斯、永恒的世界
- **钓鱼效率提升**:如果玩家装备了钓竿(名称中包含"钓竿"或"钓鱼竿"),钓鱼效率会提高
- **属性提升概率**:可以通过配置文件进行调整
- **属性提升幅度**:可以通过配置文件进行调整
## 5. 总结
钓鱼功能是一个复杂的系统,包括多个子功能和交互逻辑。通过本次实装和除错,我们成功实现了一个完整的钓鱼系统,包括基本钓鱼功能、属性提升功能和鱼篓子功能。在实装过程中,我们遇到了多个问题,包括钓鱼地点判断问题、钓鱼与休息状态冲突问题和鱼篓子使用问题,并成功解决了这些问题。
最终,我们得到了一个功能完善、交互友好的钓鱼系统,为游戏增添了新的玩法和乐趣。
# RevCombat System Analysis
The revcombat system is a sophisticated battle system in phpdts that handles combat encounters, battle preparation, attack calculation, and damage resolution. It's organized into three main namespaces:
## 1. Namespace Structure and Responsibilities
### revbattle Namespace
- **Purpose**: Handles encounter mechanics and battle initialization
- **Key Files**:
- `revbattle.calc.php`: Calculates encounter rates, dodge rates, and initiative rates
- `revbattle.func.php`: Manages enemy encounters, battle UI, and escape mechanics
### revcombat Namespace
- **Purpose**: Manages battle preparation and overall combat flow
- **Key Files**:
- `revcombat.func.php`: Core combat functions including preparation and execution
- `revcombat_extra.func.php`: Additional combat functions for special cases
- `revcombat.calc.php`: Calculates counter-attack rates, pursuit chances, etc.
### revattr Namespace
- **Purpose**: Handles attribute calculations and damage resolution
- **Key Files**:
- `revattr.func.php`: Core attribute and damage calculation functions
- `revattr.calc.php`: Specialized damage calculations and skill modifiers
- `revattr_extra.func.php`: Special NPC combat mechanics
## 2. Combat Flow
The combat system follows a detailed flow:
### Pre-Encounter Phase
1. When a player moves or searches, `\revbattle\calc_meetman_rate($data)` calculates encounter probability
2. If an encounter occurs, `\revbattle\calc_hide_rate($data,$edata)` determines if the enemy can dodge
3. If the enemy doesn't dodge, `\revbattle\calc_active_rate($data,$edata)` calculates initiative probability
4. Based on initiative:
- Player has initiative: `\revbattle\findenemy_rev($edata)` shows battle interface
- Enemy has initiative: `\revcombat\rev_combat_prepare($edata,$data,0)` starts combat preparation
### Battle Preparation Phase
1. `rev_combat_prepare()` initializes combat parameters:
- Records battle skill ID in `$pa['bskill']` if player used a skill
- Sets attacker/defender names in `$pa['nm']` and `$pd['nm']`
- Calls `get_attr_wepbase()` to initialize attack parameters for both sides:
- Determines defender's weapon type and passive skills
- Calculates weapon ranges and skill levels
- Determines attacker's weapon type and active/passive skills
### Combat Execution Phase
1. `rev_combat()` executes the combat sequence:
- Calls `combat_prepare_events()` for one-time battle events
- Calls `combat_prepare_logs()` to display encounter text
- Executes attacker's strike with `rev_attack()`
- Processes combat results with `rev_combat_result()`
- Checks for counter-attack possibility
- Updates global combat information
- Saves logs and finalizes battle results
### Attack Resolution Phase
1. `rev_attack()` calculates damage:
- Gets equipment and weapon attribute information
- Performs hit rate calculations
- If hit is successful:
- Calculates physical damage (base attack vs. defense)
- Calculates attribute damage (elemental effects)
- Applies final damage modifiers
- Processes experience, rage, and weapon durability
### Combat Result Phase
1. `rev_combat_result()` handles the aftermath:
- If defender's HP drops to zero:
- Processes kill/revival events
- Handles NPC second-phase transformations
- Records death method and last words
- If defender survives:
- Processes post-damage events (stun, etc.)
## 3. Damage Calculation System
The damage calculation is particularly complex:
### Physical Damage Calculation
1. Base attack calculation (`get_base_att`):
- Considers weapon effectiveness, player stats, and modifiers
- Applies weather, location, posture, and status modifiers
2. Base defense calculation (`get_base_def`):
- Considers armor effectiveness, player stats, and modifiers
- Applies similar environmental and status modifiers
3. Original damage calculation (`get_original_dmg_rev`):
- Formula: (base_attack / base_defense) * weapon_skill * skill_damage_factor
- Applies damage fluctuation based on weapon type
- Applies club skill modifiers
4. Damage multiplier calculation:
- Processes attacker's damage multipliers (critical hits, combo attacks)
- Processes defender's damage multipliers (armor penetration, special defenses)
### Attribute Damage Calculation
1. Determines applicable attribute damage types from weapons and equipment
2. For each attribute:
- Calculates base attribute damage
- Applies weapon affinity modifiers
- Checks for attribute defense or penetration
- Applies status effect modifiers
- Calculates final attribute damage
### Final Damage Resolution
1. Combines physical and attribute damage
2. Applies final damage multipliers from skills and effects
3. Applies fixed damage modifiers (additional damage, damage control)
4. Processes special cases (instant death, pure damage)
5. Applies the damage to the defender's HP
## 4. Special Combat Mechanics
The system includes numerous special mechanics:
1. **Counter-attack System**: Defenders can counter-attack based on range and probability
2. **Pursuit System**: Attackers can pursue fleeing enemies
3. **Cooperative Attack**: Players can team up against enemies
4. **Weapon Durability**: Weapons can be damaged or consumed during combat
5. **Status Effects**: Combat can inflict various status effects
6. **Armor Damage**: Attacks can damage defender's armor
7. **Special NPC Mechanics**: Certain NPCs have unique combat behaviors
## 5. Skill Integration
The combat system deeply integrates with the skill system:
1. **Battle Skills**: Active skills that can be used during combat
2. **Passive Skills**: Always-active skills that modify combat parameters
3. **Club Skills**: Skills based on player's club/organization
4. **Buff Skills**: Temporary enhancements that affect combat
Each skill can modify various aspects of combat, including:
- Hit rates and attack counts
- Damage calculations and multipliers
- Attribute damage effectiveness
- Defense capabilities
- Special effects (stun, instant kill, etc.)
The revcombat system represents a sophisticated battle engine with multiple layers of calculation and numerous special cases to handle different combat scenarios, making it both flexible and complex.
<?php
// 钓鱼物品抽选池
// 格式:'物品名称' => array('类型', '效果', '数量', '属性', '概率权重')
$fishing_items = array(
// 常见鱼类 - 高概率
'小鲫鱼' => array('HH', '1', '1', '', 100),
'鲤鱼' => array('HH', '2', '1', '', 80),
'黄鳝' => array('HH', '3', '1', '', 70),
'草鱼' => array('HH', '4', '1', '', 60),
'鲶鱼' => array('HH', '5', '1', '', 50),
// 中等稀有度鱼类 - 中等概率
'鲈鱼' => array('HH', '8', '1', '', 40),
'鲑鱼' => array('HH', '10', '1', '', 30),
'金枪鱼' => array('HH', '15', '1', '', 20),
'河豚' => array('HH', '20', '1', 'p', 15),
// 稀有鱼类 - 低概率
'大马哈鱼' => array('HH', '25', '1', '', 10),
'鲟鱼' => array('HH', '30', '1', '', 8),
'剑鱼' => array('HH', '40', '1', '', 5),
'彩虹鱼' => array('HH', '50', '1', 'z', 3),
// 非常稀有鱼类 - 极低概率
'金鱼' => array('HH', '100', '1', 'z', 2),
'龙鱼' => array('HH', '200', '1', 'Z', 1),
// 其他水生物 - 各种概率
'海藻' => array('HB', '10', '1', '', 50),
'水草' => array('HB', '15', '1', '', 40),
'贝壳' => array('HS', '5', '1', '', 30),
'珍珠' => array('HS', '50', '1', '', 5),
'海星' => array('HS', '20', '1', '', 20),
'螃蟹' => array('HB', '15', '1', '', 25),
'龙虾' => array('HB', '25', '1', '', 15),
// 垃圾物品 - 高概率
'破鞋' => array('XX', '0', '1', '', 60),
'塑料袋' => array('XX', '0', '1', '', 70),
'空罐头' => array('XX', '0', '1', '', 65),
'废轮胎' => array('XX', '0', '1', '', 40),
// 特殊物品 - 极低概率
'古代硬币' => array('MA', '100', '1', 'M', 2),
'生锈的钥匙' => array('Y', '1', '1', '', 3),
'神秘宝箱' => array('X', '1', '1', '', 1),
'幸运鱼饵' => array('X', '1', '1', 'f', 2),
// 钓竿类物品 - 极低概率
'简易钓竿' => array('DA', '15', '1', '', 3),
'高级钓竿' => array('DA', '25', '1', 'z', 2),
'传说中的钓鱼竿' => array('DA', '40', '1', 'Z', 1),
// 索拉利斯特有物品 - 只在索拉利斯可钓到
'外星鱼' => array('HB', '50', '1', 'Z', 2),
'奇异水晶' => array('MA', '100', '1', 'Z', 1),
'未知生物组织' => array('HH', '30', '1', 'z', 3),
'索拉利斯之泪' => array('HS', '80', '1', 'Z', 1),
// 永恒的世界特有物品 - 只在永恒的世界可钓到
'云朵鱼' => array('HB', '40', '1', 'Z', 2),
'天空宝石' => array('MA', '120', '1', 'Z', 1),
'彩虹水滴' => array('HS', '60', '1', 'z', 3),
'永恒之羽' => array('DA', '50', '1', 'Z', 1)
);
// 钓鱼地点配置
// 不同地点可以钓到不同的鱼(使用地点ID作为键)
$fishing_places = array(
// 3 - 雪之镇(靠海的北海道,可以钓鱼)
3 => array('小鲫鱼', '鲤鱼', '黄鳝', '鲶鱼', '鲈鱼', '鲑鱼', '大马哈鱼', '海藻', '水草', '贝壳', '海星', '破鞋', '塑料袋', '空罐头', '简易钓竿'),
// 7 - 清水池(是一个湖泊,可以钓鱼)
7 => array('小鲫鱼', '鲤鱼', '草鱼', '鲶鱼', '鲈鱼', '彩虹鱼', '金鱼', '水草', '贝壳', '破鞋', '塑料袋', '简易钓竿', '高级钓竿'),
// 12 - 夏之镇(设定中靠海,可以钓鱼)
12 => array('鲈鱼', '鲑鱼', '金枪鱼', '河豚', '大马哈鱼', '鲟鱼', '剑鱼', '海藻', '贝壳', '海星', '螃蟹', '龙虾', '珍珠', '塑料袋', '空罐头', '废轮胎', '神秘宝箱', '高级钓竿'),
// 4 - 索拉利斯(致敬了1961年的波兰科幻小说Solaris,可以钓上外星鱼和其他部件)
4 => array('外星鱼', '奇异水晶', '未知生物组织', '索拉利斯之泪', '海藻', '水草', '贝壳', '海星', '塑料袋', '空罐头', '高级钓竿'),
// 24 - 永恒的世界(设定中是一片云海,可以钓上奇幻风格的东西)
24 => array('云朵鱼', '天空宝石', '彩虹水滴', '永恒之羽', '彩虹鱼', '金鱼', '龙鱼', '传说中的钓鱼竿'),
// 默认地点(其他所有地点)
'default' => array('小鲫鱼', '鲤鱼', '黄鳝', '破鞋', '塑料袋', '空罐头')
);
// 钓鱼时间影响
// 不同时间段可能影响钓鱼概率
$fishing_time_bonus = array(
'morning' => array('小鲫鱼' => 1.2, '鲤鱼' => 1.1, '草鱼' => 1.2),
'noon' => array('鲶鱼' => 1.2, '鲈鱼' => 1.1),
'evening' => array('鲑鱼' => 1.3, '金枪鱼' => 1.2, '大马哈鱼' => 1.1),
'night' => array('彩虹鱼' => 1.5, '金鱼' => 1.3, '龙鱼' => 1.2, '神秘宝箱' => 1.5, '传说中的钓鱼竿' => 2.0, '外星鱼' => 1.8, '云朵鱼' => 1.8)
);
// 天气影响
// 不同天气可能影响钓鱼概率
$fishing_weather_bonus = array(
'晴朗' => array('小鲫鱼' => 1.2, '鲤鱼' => 1.1, '草鱼' => 1.2, '云朵鱼' => 1.5, '天空宝石' => 1.3),
'多云' => array('鲶鱼' => 1.2, '鲈鱼' => 1.1, '彩虹水滴' => 1.5),
'下雨' => array('鲑鱼' => 1.3, '金枪鱼' => 1.2, '大马哈鱼' => 1.1, '简易钓竿' => 1.5, '索拉利斯之泪' => 1.5),
'起雾' => array('彩虹鱼' => 1.5, '金鱼' => 1.3, '龙鱼' => 1.2, '神秘宝箱' => 1.5, '高级钓竿' => 1.5, '外星鱼' => 1.5, '奇异水晶' => 1.3)
);
?>
<?php
if(!defined('IN_GAME')) {
exit('Access Denied');
}
/**
* 钓鱼功能的核心逻辑
*/
// 可以钓鱼的地点列表
$fishing_places_list = array(
3, // 雪之镇(靠海的北海道,可以钓鱼)
7, // 清水池(是一个湖泊,可以钓鱼)
12, // 夏之镇(设定中靠海,可以钓鱼)
4, // 索拉利斯(致敬了1961年的波兰科幻小说Solaris,可以钓上外星鱼和其他部件)
24, // 永恒的世界(设定中是一片云海,可以钓上奇幻风格的东西)
);
/**
* 检查当前位置是否可以钓鱼
*
* @param int $pls 当前位置ID
* @return bool 是否可以钓鱼
*/
function can_fishing($pls) {
global $fishing_places_list;
return in_array($pls, $fishing_places_list);
}
/**
* 开始钓鱼
*
* @param array &$data 玩家数据
* @return void
*/
function start_fishing(&$data) {
global $log, $mode, $now;
extract($data, EXTR_REFS);
// 检查当前位置是否可以钓鱼
if (!can_fishing($pls)) {
$log .= '<span class="yellow">这个地方没有水,不能钓鱼!</span><br>';
$mode = 'command';
return;
}
// 初始化钓鱼状态
$clbpara['fishing'] = array(
'start_time' => $now,
'last_check_time' => $now,
'caught_items' => array()
);
$log .= '你拿出鱼竿,开始在这里钓鱼...<br>';
$log .= '你可以一边钓鱼,一边' . ($state == 1 ? '休息' : ($state == 2 ? '治疗' : '静养')) . '。<br>';
$log .= '钓到的鱼会自动存入鱼篓子中。<br>';
$mode = 'fishing';
}
/**
* 结束钓鱼
*
* @param array &$data 玩家数据
* @return void
*/
function end_fishing(&$data) {
global $log, $mode;
extract($data, EXTR_REFS);
// 检查是否有钓鱼状态
if (empty($clbpara['fishing'])) {
$log .= '你没有在钓鱼!<br>';
$mode = 'command';
return;
}
// 最后一次检查钓鱼
check_fishing($data);
// 获取钓到的物品
$caught_items = $clbpara['fishing']['caught_items'];
$count = count($caught_items);
if ($count > 0) {
$log .= '你结束了钓鱼,总共钓到了 <span class="yellow">' . $count . '</span> 件物品:<br>';
foreach ($caught_items as $item) {
$log .= '- <span class="yellow">' . $item['name'] . '</span><br>';
}
// 创建鱼篓子
create_fish_basket($data, $caught_items);
} else {
$log .= '你结束了钓鱼,但是什么都没钓到...<br>';
}
// 显示属性提升总结
if (!empty($clbpara['fishing']['stat_increases'])) {
$stat_increases = $clbpara['fishing']['stat_increases'];
$stat_summary = array(
'基础攻击' => 0,
'基础防御' => 0,
'生命上限' => 0,
'体力上限' => 0
);
foreach ($stat_increases as $increase) {
$stat_summary[$increase['type']] += $increase['amount'];
}
$log .= '<br><span class="lime">钓鱼期间,你的属性得到了提升:</span><br>';
foreach ($stat_summary as $type => $amount) {
if ($amount > 0) {
$log .= '<span class="lime">- ' . $type . ' +' . $amount . '</span><br>';
}
}
}
// 清除钓鱼状态
unset($clbpara['fishing']);
$mode = 'command';
}
/**
* 检查钓鱼状态,看是否钓到了新物品或提升属性
*
* @param array &$data 玩家数据
* @return void
*/
function check_fishing(&$data) {
global $log, $now;
extract($data, EXTR_REFS);
// 检查是否有钓鱼状态
if (empty($clbpara['fishing'])) {
return;
}
// 获取上次检查时间
$last_check_time = $clbpara['fishing']['last_check_time'];
// 每分钟检查一次是否钓到鱼
$check_interval = 60; // 60秒
$elapsed_time = $now - $last_check_time;
// 如果时间不足,不检查
if ($elapsed_time < $check_interval) {
return;
}
// 检查玩家是否装备了钓竿
$has_fishing_rod = false;
$fishing_rod_bonus = 1.0; // 默认没有加成
// 检查手臂装备是否有钓竿
if (strpos($ara, '钓竿') !== false || strpos($ara, '钓鱼竿') !== false) {
$has_fishing_rod = true;
$fishing_rod_bonus = 1.5; // 装备钓竿时提高 50% 效率
// 如果钓竿有特殊属性,可以进一步提高效率
if (strpos($arask, 'z') !== false) { // 天然属性
$fishing_rod_bonus += 0.3; // 再提高 30%
}
if (strpos($arask, 'Z') !== false) { // 精英属性
$fishing_rod_bonus += 0.5; // 再提高 50%
}
}
// 计算应该检查多少次
$base_check_times = floor($elapsed_time / $check_interval);
// 如果有钓竿,增加检查次数
$check_times = $has_fishing_rod ? floor($base_check_times * $fishing_rod_bonus) : $base_check_times;
// 更新最后检查时间
$clbpara['fishing']['last_check_time'] = $last_check_time + ($base_check_times * $check_interval);
// 记录钓竿信息
if ($has_fishing_rod && !isset($clbpara['fishing']['rod_message_shown'])) {
$log .= '<span class="lime">你使用了' . $ara . ',钓鱼效率提高了 ' . round(($fishing_rod_bonus - 1) * 100) . '%!</span><br>';
$clbpara['fishing']['rod_message_shown'] = true;
}
// 加载钓鱼物品配置
include_once GAME_ROOT . './gamedata/cache/fishing.php';
// 直接使用地点ID获取可钓的物品列表
$available_items = isset($fishing_places[$pls]) ? $fishing_places[$pls] : $fishing_places['default'];
// 获取当前时间段
$hour = (int)date('H', $now);
$time_period = '';
if ($hour >= 5 && $hour < 11) {
$time_period = 'morning';
} elseif ($hour >= 11 && $hour < 17) {
$time_period = 'noon';
} elseif ($hour >= 17 && $hour < 22) {
$time_period = 'evening';
} else {
$time_period = 'night';
}
// 获取当前天气
global $weather, $wthinfo;
$weather_name = $wthinfo[$weather];
// 对每次检查进行处理
for ($i = 0; $i < $check_times; $i++) {
// 基础成功率是 70%,装备钓竿可提高成功率
$catch_chance = $has_fishing_rod ? min(95, 70 + round(($fishing_rod_bonus - 1) * 30)) : 70;
if (rand(1, 100) <= $catch_chance) {
// 从可用物品中随机选择一个
$item_name = $available_items[array_rand($available_items)];
// 获取物品信息
$item_info = $fishing_items[$item_name];
// 应用时间和天气加成
$probability_multiplier = 1.0;
if (isset($fishing_time_bonus[$time_period][$item_name])) {
$probability_multiplier *= $fishing_time_bonus[$time_period][$item_name];
}
if (isset($fishing_weather_bonus[$weather_name][$item_name])) {
$probability_multiplier *= $fishing_weather_bonus[$weather_name][$item_name];
}
// 如果有钓竿,提高稀有物品的概率
if ($has_fishing_rod) {
// 稀有物品的概率提高
if ($item_info[4] < 20) { // 如果是稀有物品(概率权重小于 20)
$probability_multiplier *= $fishing_rod_bonus;
}
}
// 根据物品的概率权重和加成决定是否钓到
$base_probability = $item_info[4];
$adjusted_probability = $base_probability * $probability_multiplier;
if (rand(1, 1000) <= $adjusted_probability * 10) {
// 钓到了物品,添加到已钓到的物品列表中
$clbpara['fishing']['caught_items'][] = array(
'name' => $item_name,
'type' => $item_info[0],
'effect' => $item_info[1],
'quantity' => $item_info[2],
'attribute' => $item_info[3]
);
// 根据是否使用钓竿显示不同的消息
if ($has_fishing_rod) {
$log .= '你熟练地操作' . $ara . ',钓到了一个 <span class="yellow">' . $item_name . '</span>!<br>';
} else {
$log .= '你感觉鱼竿一沉,钓到了一个 <span class="yellow">' . $item_name . '</span>!<br>';
}
}
}
// 基础概率是 15%,装备钓竿可提高属性提升概率
$stat_boost_chance = $has_fishing_rod ? min(30, 15 + round(($fishing_rod_bonus - 1) * 15)) : 15;
if (rand(1, 100) <= $stat_boost_chance) {
// 随机选择一个属性提升
$stat_type = rand(1, 4);
$stat_increase = 0;
$stat_name = '';
// 如果有钓竿,提高属性提升幅度
$stat_boost_multiplier = $has_fishing_rod ? $fishing_rod_bonus : 1.0;
switch ($stat_type) {
case 1: // 提升攻击
$base_increase = rand(1, 3); // 基础提升 1-3 点
$stat_increase = $has_fishing_rod ? ceil($base_increase * $stat_boost_multiplier) : $base_increase;
$att += $stat_increase;
$stat_name = '基础攻击';
break;
case 2: // 提升防御
$base_increase = rand(1, 3); // 基础提升 1-3 点
$stat_increase = $has_fishing_rod ? ceil($base_increase * $stat_boost_multiplier) : $base_increase;
$def += $stat_increase;
$stat_name = '基础防御';
break;
case 3: // 提升生命上限
$base_increase = rand(5, 15); // 基础提升 5-15 点
$stat_increase = $has_fishing_rod ? ceil($base_increase * $stat_boost_multiplier) : $base_increase;
$mhp += $stat_increase;
$hp = min($hp + $stat_increase, $mhp); // 同时提升当前生命
$stat_name = '生命上限';
break;
case 4: // 提升体力上限
$base_increase = rand(5, 15); // 基础提升 5-15 点
$stat_increase = $has_fishing_rod ? ceil($base_increase * $stat_boost_multiplier) : $base_increase;
$msp += $stat_increase;
$sp = min($sp + $stat_increase, $msp); // 同时提升当前体力
$stat_name = '体力上限';
break;
}
// 记录属性提升
if (!isset($clbpara['fishing']['stat_increases'])) {
$clbpara['fishing']['stat_increases'] = array();
}
$clbpara['fishing']['stat_increases'][] = array(
'type' => $stat_name,
'amount' => $stat_increase
);
// 根据是否使用钓竿显示不同的消息
if ($has_fishing_rod) {
$log .= '<span class="lime">使用' . $ara . '钓鱼的过程中,你的手臂和意志得到了锻炼,你的' . $stat_name . '提升了 ' . $stat_increase . ' 点!</span><br>';
} else {
$log .= '<span class="lime">长时间的钓鱼让你感到心旷神怡,你的' . $stat_name . '提升了 ' . $stat_increase . ' 点!</span><br>';
}
}
}
}
/**
* 创建鱼篓子并将钓到的物品放入其中
*
* @param array &$data 玩家数据
* @param array $caught_items 钓到的物品列表
* @return void
*/
function create_fish_basket(&$data, $caught_items) {
global $log, $itm0, $itmk0, $itme0, $itms0, $itmsk0, $itmpara0;
extract($data, EXTR_REFS);
// 检查是否已有鱼篓子
$has_basket = false;
$basket_index = -1;
for ($i = 1; $i <= 6; $i++) {
if (${'itmk'.$i} == 'DA' && ${'itm'.$i} == '鱼篓子' && ${'itmsk'.$i} == 'Z') {
$has_basket = true;
$basket_index = $i;
break;
}
}
// 如果没有鱼篓子,创建一个新的
if (!$has_basket) {
// 创建鱼篓子并放入玩家物品栏
$itm0 = '鱼篓子';
$itmk0 = 'Z';
$itme0 = count($caught_items); // 效果值表示容量
$itms0 = count($caught_items); // 数量表示已使用空间
$itmsk0 = 'Z'; // 标记为特殊物品(菁英)
// 将钓到的物品放入鱼篓子
$basket_items = array();
foreach ($caught_items as $index => $item) {
$basket_items[$index] = array(
'itm' => $item['name'],
'itmk' => $item['type'],
'itme' => $item['effect'],
'itms' => $item['quantity'],
'itmsk' => $item['attribute'],
'itmpara' => ''
);
}
// 将物品列表转换为JSON并存储在itmpara0中
$itmpara0 = json_encode($basket_items, JSON_UNESCAPED_UNICODE);
$log .= '你将钓到的物品都放入了一个新的<span class="yellow">鱼篓子</span>中。<br>';
} else {
// 如果已有鱼篓子,将新物品添加到现有鱼篓子中
$basket_items = json_decode(${'itmpara'.$basket_index}, true);
if (!$basket_items) $basket_items = array();
$start_index = count($basket_items);
foreach ($caught_items as $index => $item) {
$basket_items[$start_index + $index] = array(
'itm' => $item['name'],
'itmk' => $item['type'],
'itme' => $item['effect'],
'itms' => $item['quantity'],
'itmsk' => $item['attribute'],
'itmpara' => ''
);
}
// 更新鱼篓子信息
${'itme'.$basket_index} = count($basket_items); // 更新容量
${'itms'.$basket_index} = count($basket_items); // 更新已使用空间
${'itmpara'.$basket_index} = json_encode($basket_items, JSON_UNESCAPED_UNICODE);
$log .= '你将钓到的物品都放入了现有的<span class="yellow">鱼篓子</span>中。<br>';
}
}
/**
* 处理钓鱼状态下的命令
*
* @param string $command 命令
* @param array &$data 玩家数据
* @return void
*/
function fishing_command($command, &$data) {
global $log;
if ($command == 'back') {
// 结束钓鱼
end_fishing($data);
} elseif ($command == 'rest') {
// 继续钓鱼
$log .= '你继续钓鱼...<br>';
check_fishing($data);
} else {
$log .= '你正在钓鱼,不能执行其他命令!<br>';
}
}
?>
...@@ -6,6 +6,7 @@ if (! defined ( 'IN_GAME' )) { ...@@ -6,6 +6,7 @@ if (! defined ( 'IN_GAME' )) {
include_once GAME_ROOT.'./include/game/clubslct.func.php'; include_once GAME_ROOT.'./include/game/clubslct.func.php';
include_once GAME_ROOT.'./include/game/item_nouveau_booster1.php';
function itemuse($itmn,&$data=NULL) { function itemuse($itmn,&$data=NULL) {
//global $mode, $log, $nosta, $pid, $name, $state, $now,$nick,$achievement,$club,$clbpara,$pdata; //global $mode, $log, $nosta, $pid, $name, $state, $now,$nick,$achievement,$club,$clbpara,$pdata;
...@@ -29,7 +30,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -29,7 +30,7 @@ function itemuse($itmn,&$data=NULL) {
$mode = 'command'; $mode = 'command';
return; return;
} }
////global ${'itm' . $itmn}, ${'itmk' . $itmn}, ${'itme' . $itmn}, ${'itms' . $itmn}, ${'itmsk' . $itmn}; ////global ${'itm' . $itmn}, ${'itmk' . $itmn}, ${'itme' . $itmn}, ${'itms' . $itmn}, ${'itmsk' . $itmn};
//2024-07-19: I'm mad enough to add $itmpara, with me luck. //2024-07-19: I'm mad enough to add $itmpara, with me luck.
$itm = & ${'itm' . $itmn}; $itm = & ${'itm' . $itmn};
...@@ -40,7 +41,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -40,7 +41,7 @@ function itemuse($itmn,&$data=NULL) {
//$itmpara = & ${'itmpara' . $itmn}; //$itmpara = & ${'itmpara' . $itmn};
$itmpara = & get_itmpara(${'itmpara' . $itmn}); $itmpara = & get_itmpara(${'itmpara' . $itmn});
$i=$itm;$ik=$itmk;$ie=$itme;$is=$itms;$isk=$itmsk;$ipara=$itmpara; $i=$itm;$ik=$itmk;$ie=$itme;$is=$itms;$isk=$itmsk;$ipara=$itmpara;
if (($itms <= 0) && ($itms != $nosta)) { if (($itms <= 0) && ($itms != $nosta)) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
...@@ -58,7 +59,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -58,7 +59,7 @@ function itemuse($itmn,&$data=NULL) {
} }
if(strpos ( $itmk, 'W' ) === 0 || strpos ( $itmk, 'D' ) === 0 || strpos ( $itmk, 'A' ) === 0 || strpos ( $itmk, 'ss' ) === 0){ if(strpos ( $itmk, 'W' ) === 0 || strpos ( $itmk, 'D' ) === 0 || strpos ( $itmk, 'A' ) === 0 || strpos ( $itmk, 'ss' ) === 0){
if(strpos ( $itmk, 'W' ) === 0) { if(strpos ( $itmk, 'W' ) === 0) {
$eqp = 'wep'; $eqp = 'wep';
$noeqp = 'WN'; $noeqp = 'WN';
...@@ -114,7 +115,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -114,7 +115,7 @@ function itemuse($itmn,&$data=NULL) {
$itmnumlimit = $itme>=$itms ? $itms : $itme; $itmnumlimit = $itme>=$itms ? $itms : $itme;
} }
if (($noeqp && strpos ( ${$eqp.'k'}, $noeqp ) === 0) || ! ${$eqp.'s'}) { if (($noeqp && strpos ( ${$eqp.'k'}, $noeqp ) === 0) || ! ${$eqp.'s'}) {
// 装备道具时,进行单次套装检测 // 装备道具时,进行单次套装检测
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
reload_single_set_item($data,$eqp,$itm,1); reload_single_set_item($data,$eqp,$itm,1);
...@@ -191,6 +192,10 @@ function itemuse($itmn,&$data=NULL) { ...@@ -191,6 +192,10 @@ function itemuse($itmn,&$data=NULL) {
} else { } else {
$log .= '你的体力不需要恢复。<br>'; $log .= '你的体力不需要恢复。<br>';
} }
} elseif ($itm == '鱼篓子' && $itmk == 'Z' && $itmsk == 'Z') {
// 如果是鱼篓子,调用 item.nouveau_booster1.php 中的函数
include_once GAME_ROOT.'./include/game/item.nouveau_booster1.php';
item_nouveau_booster1($itmn, $data);
} elseif (strpos ( $itmk, 'HH' ) === 0) { } elseif (strpos ( $itmk, 'HH' ) === 0) {
//global $hp, $mhp,$club; //global $hp, $mhp,$club;
if ($hp < $mhp) { if ($hp < $mhp) {
...@@ -218,7 +223,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -218,7 +223,7 @@ function itemuse($itmn,&$data=NULL) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
} }
} else { } else {
$log .= '你的生命不需要恢复。<br>'; $log .= '你的生命不需要恢复。<br>';
...@@ -260,7 +265,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -260,7 +265,7 @@ function itemuse($itmn,&$data=NULL) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
} }
} else { } else {
$log .= '你的歌魂不需要恢复。<br>'; $log .= '你的歌魂不需要恢复。<br>';
...@@ -281,7 +286,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -281,7 +286,7 @@ function itemuse($itmn,&$data=NULL) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
} }
} else { } else {
$log .= '你已经出离愤怒了,动怒伤肝,还是歇歇吧!<br>'; $log .= '你已经出离愤怒了,动怒伤肝,还是歇歇吧!<br>';
...@@ -294,7 +299,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -294,7 +299,7 @@ function itemuse($itmn,&$data=NULL) {
}else{ }else{
$bpup = $itme; $bpup = $itme;
} }
//$oldsp = $sp; //$oldsp = $sp;
//$sp += $bpup; //$sp += $bpup;
//$sp = $sp > $msp ? $msp : $sp; //$sp = $sp > $msp ? $msp : $sp;
//$oldsp = $sp - $oldsp; //$oldsp = $sp - $oldsp;
...@@ -392,7 +397,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -392,7 +397,7 @@ function itemuse($itmn,&$data=NULL) {
$itme = $itms = 0; $itme = $itms = 0;
} }
} }
} elseif (strpos ( $itmk, 'T' ) === 0) { } elseif (strpos ( $itmk, 'T' ) === 0) {
if(!check_skill_unlock('c13_master',$data)) if(!check_skill_unlock('c13_master',$data))
...@@ -413,10 +418,10 @@ function itemuse($itmn,&$data=NULL) { ...@@ -413,10 +418,10 @@ function itemuse($itmn,&$data=NULL) {
$db->query("INSERT INTO {$tablepre}maptrap (itm, itmk, itme, itms, itmsk, pls) VALUES ('$itm', '$trapk', '$itme', '1', '$pid', '$pls')"); $db->query("INSERT INTO {$tablepre}maptrap (itm, itmk, itme, itms, itmsk, pls) VALUES ('$itm', '$trapk', '$itme', '1', '$pid', '$pls')");
$log .= "设置了陷阱<span class=\"red\">$itm</span>。<br>小心,自己也很难发现。<br>"; $log .= "设置了陷阱<span class=\"red\">$itm</span>。<br>小心,自己也很难发现。<br>";
if($club == 5){$exp += 2;$wd+=2;} if($club == 5){$exp += 2;$wd+=2;}
else{$exp++;$wd++;} else{$exp++;$wd++;}
if ($exp >= $upexp) { if ($exp >= $upexp) {
include_once GAME_ROOT . './include/state.func.php'; include_once GAME_ROOT . './include/state.func.php';
lvlup_rev($data,$data,1); lvlup_rev($data,$data,1);
...@@ -438,7 +443,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -438,7 +443,7 @@ function itemuse($itmn,&$data=NULL) {
} }
if (strpos ($wepk,'WG')===false){ if (strpos ($wepk,'WG')===false){
if ($itmk=='GBh'){ if ($itmk=='GBh'){
$bulletnum = 3; $bulletnum = 3;
}else{ }else{
$log .= "<span class=\"red\">枪械类型和弹药类型不匹配。</span><br>"; $log .= "<span class=\"red\">枪械类型和弹药类型不匹配。</span><br>";
$mode = 'command'; $mode = 'command';
...@@ -566,7 +571,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -566,7 +571,7 @@ function itemuse($itmn,&$data=NULL) {
}else{ }else{
$log .= "服用了<span class=\"red\">$itm</span>……发生了什么?<br>"; $log .= "服用了<span class=\"red\">$itm</span>……发生了什么?<br>";
} }
$itms --; $itms --;
/*if (strpos ( $itm, '烧伤药剂' ) === 0) { /*if (strpos ( $itm, '烧伤药剂' ) === 0) {
if (strpos ( $inf, 'u' ) !== false) { if (strpos ( $inf, 'u' ) !== false) {
...@@ -584,7 +589,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -584,7 +589,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>"; $log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>";
} }
$itms --; $itms --;
} elseif (strpos ( $itm, '解冻药水' ) === 0) { } elseif (strpos ( $itm, '解冻药水' ) === 0) {
if (strpos ( $inf, 'i' ) !== false) { if (strpos ( $inf, 'i' ) !== false) {
$inf = str_replace ( 'i', '', $inf ); $inf = str_replace ( 'i', '', $inf );
...@@ -593,7 +598,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -593,7 +598,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>"; $log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>";
} }
$itms --; $itms --;
} elseif (strpos ( $itm, '解毒剂' ) === 0) { } elseif (strpos ( $itm, '解毒剂' ) === 0) {
if (strpos ( $inf, 'p' ) !== false) { if (strpos ( $inf, 'p' ) !== false) {
$inf = str_replace ( 'p', '', $inf ); $inf = str_replace ( 'p', '', $inf );
...@@ -602,7 +607,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -602,7 +607,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>"; $log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>";
} }
$itms --; $itms --;
} elseif (strpos ( $itm, '清醒药剂' ) === 0) { } elseif (strpos ( $itm, '清醒药剂' ) === 0) {
if (strpos ( $inf, 'w' ) !== false) { if (strpos ( $inf, 'w' ) !== false) {
$inf = str_replace ( 'w', '', $inf ); $inf = str_replace ( 'w', '', $inf );
...@@ -611,7 +616,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -611,7 +616,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>"; $log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>";
} }
$itms --; $itms --;
} elseif (strpos ( $itm, '全恢复药剂' ) === 0) { } elseif (strpos ( $itm, '全恢复药剂' ) === 0) {
if (strpos ( $inf, 'w' ) !== false) { if (strpos ( $inf, 'w' ) !== false) {
$inf = str_replace ( 'w', '', $inf ); $inf = str_replace ( 'w', '', $inf );
...@@ -620,7 +625,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -620,7 +625,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>"; $log .= "服用了<span class=\"red\">$itm</span>,但是什么效果也没有。<br>";
} }
$itms --; $itms --;
} else { } else {
$log .= "服用了<span class=\"red\">$itm</span>……发生了什么?<br>"; $log .= "服用了<span class=\"red\">$itm</span>……发生了什么?<br>";
$itms --; $itms --;
...@@ -630,7 +635,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -630,7 +635,7 @@ function itemuse($itmn,&$data=NULL) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
} elseif (strpos ( $itmk, 'V' ) === 0) { } elseif (strpos ( $itmk, 'V' ) === 0) {
$skill_minimum = 100; $skill_minimum = 100;
$skill_limit = 380; $skill_limit = 380;
...@@ -655,7 +660,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -655,7 +660,7 @@ function itemuse($itmn,&$data=NULL) {
$wk += $vefct; //$itme; $wk += $vefct; //$itme;
$wg += $vefct; //$itme; $wg += $vefct; //$itme;
$wc += $vefct; //$itme; $wc += $vefct; //$itme;
$wd += $vefct; //$itme; $wd += $vefct; //$itme;
$wf += $vefct; //$itme; $wf += $vefct; //$itme;
$wsname = "全系熟练度"; $wsname = "全系熟练度";
} elseif (strpos ( $itmk, 'VP' ) === 0) { } elseif (strpos ( $itmk, 'VP' ) === 0) {
...@@ -688,7 +693,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -688,7 +693,7 @@ function itemuse($itmn,&$data=NULL) {
$vefct = - $dice; $vefct = - $dice;
} }
} }
$wk += $vefct; //$itme; $wk += $vefct; //$itme;
$wsname = "斩刺熟练度"; $wsname = "斩刺熟练度";
} elseif (strpos ( $itmk, 'VG' ) === 0) { } elseif (strpos ( $itmk, 'VG' ) === 0) {
//global $wg; //global $wg;
...@@ -704,7 +709,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -704,7 +709,7 @@ function itemuse($itmn,&$data=NULL) {
$vefct = - $dice; $vefct = - $dice;
} }
} }
$wg += $vefct; //$itme; $wg += $vefct; //$itme;
$wsname = "射击熟练度"; $wsname = "射击熟练度";
} elseif (strpos ( $itmk, 'VC' ) === 0) { } elseif (strpos ( $itmk, 'VC' ) === 0) {
//global $wc; //global $wc;
...@@ -720,7 +725,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -720,7 +725,7 @@ function itemuse($itmn,&$data=NULL) {
$vefct = - $dice; $vefct = - $dice;
} }
} }
$wc += $vefct; //$itme; $wc += $vefct; //$itme;
$wsname = "投掷熟练度"; $wsname = "投掷熟练度";
} elseif (strpos ( $itmk, 'VD' ) === 0) { } elseif (strpos ( $itmk, 'VD' ) === 0) {
//global $wd; //global $wd;
...@@ -736,7 +741,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -736,7 +741,7 @@ function itemuse($itmn,&$data=NULL) {
$vefct = - $dice; $vefct = - $dice;
} }
} }
$wd += $vefct; //$itme; $wd += $vefct; //$itme;
$wsname = "引爆熟练度"; $wsname = "引爆熟练度";
} elseif (strpos ( $itmk, 'VF' ) === 0) { } elseif (strpos ( $itmk, 'VF' ) === 0) {
//global $wf; //global $wf;
...@@ -752,25 +757,25 @@ function itemuse($itmn,&$data=NULL) { ...@@ -752,25 +757,25 @@ function itemuse($itmn,&$data=NULL) {
$vefct = - $dice; $vefct = - $dice;
} }
} }
$wf += $vefct; //$itme; $wf += $vefct; //$itme;
$wsname = "灵击熟练度"; $wsname = "灵击熟练度";
} elseif (strpos ( $itmk, 'VS' ) === 0) { } elseif (strpos ( $itmk, 'VS' ) === 0) {
//global $cskills,$clbpara; //global $cskills,$clbpara;
if(!empty($itmsk) && isset($cskills[$itmsk])) if(!empty($itmsk) && isset($cskills[$itmsk]))
{ {
$flag = getclubskill($itmsk,$clbpara); $flag = getclubskill($itmsk,$clbpara);
if($flag) if($flag)
{ {
$log.="哇!没想到这本书里竟然介绍了<span class='yellow'>「{$cskills[$itmsk]['name']}」</span>的原理!<br>获得了技能<span class='yellow'>「{$cskills[$itmsk]['name']}」</span>!<br>你心满意足地把<span class='red'>{$itm}</span>吃进了肚里。<br>"; $log.="哇!没想到这本书里竟然介绍了<span class='yellow'>「{$cskills[$itmsk]['name']}」</span>的原理!<br>获得了技能<span class='yellow'>「{$cskills[$itmsk]['name']}」</span>!<br>你心满意足地把<span class='red'>{$itm}</span>吃进了肚里。<br>";
addnews($now,'getsk_'.$itmsk,$name,$itm,$nick); addnews($now,'getsk_'.$itmsk,$name,$itm,$nick);
} }
else else
{ {
$log.="什么嘛!原来里面都是些你看过的东西了,你没有从书中学到任何新东西。<br>你一怒之下把这本破书撕了个稀巴烂!<br>"; $log.="什么嘛!原来里面都是些你看过的东西了,你没有从书中学到任何新东西。<br>你一怒之下把这本破书撕了个稀巴烂!<br>";
} }
} }
else else
{ {
$log.="但是你横看竖看,也弄不明白作者到底想表达什么!<br>你一怒之下把这本破书撕了个稀巴烂!<br>"; $log.="但是你横看竖看,也弄不明白作者到底想表达什么!<br>你一怒之下把这本破书撕了个稀巴烂!<br>";
} }
...@@ -796,7 +801,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -796,7 +801,7 @@ function itemuse($itmn,&$data=NULL) {
} }
} elseif (strpos ( $itmk, 'M' ) === 0) { } elseif (strpos ( $itmk, 'M' ) === 0) {
$log .= "你服用了<span class=\"red\">$itm</span>。<br>"; $log .= "你服用了<span class=\"red\">$itm</span>。<br>";
if (strpos ( $itmk, 'MA' ) === 0) { if (strpos ( $itmk, 'MA' ) === 0) {
//global $att; //global $att;
$att_min = 500; $att_min = 500;
...@@ -888,7 +893,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -888,7 +893,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "已经很强了,却还想靠药物继续强化自己,是不是太贪心了?<br>你贪婪的行为引发了药物的副作用!<br>你的{$mdname}下降了<span class=\"red\">$mefct</span>点!<br>"; $log .= "已经很强了,却还想靠药物继续强化自己,是不是太贪心了?<br>你贪婪的行为引发了药物的副作用!<br>你的{$mdname}下降了<span class=\"red\">$mefct</span>点!<br>";
} }
if (strpos ( $itmk, 'ME' ) === 0) { if (strpos ( $itmk, 'ME' ) === 0) {
if ($exp >= $upexp) { if ($exp >= $upexp) {
include_once GAME_ROOT . './include/state.func.php'; include_once GAME_ROOT . './include/state.func.php';
lvlup_rev($data,$data,1); lvlup_rev($data,$data,1);
...@@ -955,7 +960,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -955,7 +960,7 @@ function itemuse($itmn,&$data=NULL) {
$flag = true; $flag = true;
$log .= "为包裹{$i}里的<span class=\"yellow\">{${'itm'.$i}}</span>充了电。"; $log .= "为包裹{$i}里的<span class=\"yellow\">{${'itm'.$i}}</span>充了电。";
break; break;
} }
} }
} }
if (! $flag) { if (! $flag) {
...@@ -965,7 +970,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -965,7 +970,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "<span class=\"red\">$itm</span>用光了。<br>"; $log .= "<span class=\"red\">$itm</span>用光了。<br>";
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
} elseif(strpos ( $itmk, 'p' ) === 0){ } elseif(strpos ( $itmk, 'p' ) === 0){
//你们这帮乱用itmk的都乖乖自觉归类!itmk空间也是有限的! //你们这帮乱用itmk的都乖乖自觉归类!itmk空间也是有限的!
$log.="你打开了<span class=\"yellow\">$itm</span>。<br>"; $log.="你打开了<span class=\"yellow\">$itm</span>。<br>";
...@@ -1008,7 +1013,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1008,7 +1013,7 @@ function itemuse($itmn,&$data=NULL) {
$log.="似乎你本轮已经打开过福袋,因此不能再打开更多的福袋!<br>"; $log.="似乎你本轮已经打开过福袋,因此不能再打开更多的福袋!<br>";
$db->query("INSERT INTO {$tablepre}shopitem (kind,num,price,area,item,itmk,itme,itms,itmsk) VALUES ('17','1','20','0','$itm','$itmk','$itme','1','$itmsk')"); $db->query("INSERT INTO {$tablepre}shopitem (kind,num,price,area,item,itmk,itme,itms,itmsk) VALUES ('17','1','20','0','$itm','$itmk','$itme','1','$itmsk')");
$log.="<span class=\"yellow\">$itm</span>从你的手中飞出,向商店的方向飞去。<br>"; $log.="<span class=\"yellow\">$itm</span>从你的手中飞出,向商店的方向飞去。<br>";
} }
if(strpos( $itmk, 'p0P' ) === 0){ if(strpos( $itmk, 'p0P' ) === 0){
include_once config('randomWP',$gamecfg); include_once config('randomWP',$gamecfg);
}elseif(strpos( $itmk, 'p0K' ) === 0){ }elseif(strpos( $itmk, 'p0K' ) === 0){
...@@ -1062,14 +1067,14 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1062,14 +1067,14 @@ function itemuse($itmn,&$data=NULL) {
$plist = openfile($file); $plist = openfile($file);
$rand = rand(0,count($plist)-1); $rand = rand(0,count($plist)-1);
list($in,$ik,$ie,$is,$isk) = explode(',',$plist[$rand]); list($in,$ik,$ie,$is,$isk) = explode(',',$plist[$rand]);
} }
//global $itm0,$itmk0,$itme0,$itms0,$itmsk0,$mode; //global $itm0,$itmk0,$itme0,$itms0,$itmsk0,$mode;
if($itms <= 0) destory_single_item($data,$itmn,1); if($itms <= 0) destory_single_item($data,$itmn,1);
$itm0 = $in;$itmk0=$ik;$itme0=$ie;$itms0=$is;$itmsk0=$isk; $itm0 = $in;$itmk0=$ik;$itme0=$ie;$itms0=$is;$itmsk0=$isk;
addnews($now,'present',$name,$oitm,$in,$nick); addnews($now,'present',$name,$oitm,$in,$nick);
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget($data); itemget($data);
} elseif(strpos ( $itmk, 'ygo' ) === 0){ } elseif(strpos ( $itmk, 'ygo' ) === 0){
$log.="你打开了<span class=\"yellow\">$itm</span>。<br>"; $log.="你打开了<span class=\"yellow\">$itm</span>。<br>";
$itms--; $oitm = $itm; $itms--; $oitm = $itm;
...@@ -1084,7 +1089,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1084,7 +1089,7 @@ function itemuse($itmn,&$data=NULL) {
addnews($now,'present',$name,$oitm,$in,$nick); addnews($now,'present',$name,$oitm,$in,$nick);
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget($data); itemget($data);
} elseif(strpos ( $itmk, 'fy' ) === 0){ } elseif(strpos ( $itmk, 'fy' ) === 0){
$log.="你打开了<span class=\"yellow\">$itm</span>。<br>"; $log.="你打开了<span class=\"yellow\">$itm</span>。<br>";
$itms--; $oitm = $itm; $itms--; $oitm = $itm;
...@@ -1099,7 +1104,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1099,7 +1104,7 @@ function itemuse($itmn,&$data=NULL) {
addnews($now,'present',$name,$oitm,$in,$nick); addnews($now,'present',$name,$oitm,$in,$nick);
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget($data); itemget($data);
} elseif(strpos ( $itmk, 'f99' ) === 0){ // Debug Box for testing $itmpara } elseif(strpos ( $itmk, 'f99' ) === 0){ // Debug Box for testing $itmpara
$log.="你打开了<span class=\"yellow\">$itm</span>。<br>"; $log.="你打开了<span class=\"yellow\">$itm</span>。<br>";
$itms--; $oitm = $itm; $itms--; $oitm = $itm;
...@@ -1114,7 +1119,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1114,7 +1119,7 @@ function itemuse($itmn,&$data=NULL) {
addnews($now,'present',$name,$oitm,$in,$nick); addnews($now,'present',$name,$oitm,$in,$nick);
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget($data); itemget($data);
}elseif ($itmk=='U') { }elseif ($itmk=='U') {
//global $db, $tablepre,$pls; //global $db, $tablepre,$pls;
$trapresult = $db->query("SELECT * FROM {$tablepre}maptrap WHERE pls = '$pls' AND itme>='$itme'"); $trapresult = $db->query("SELECT * FROM {$tablepre}maptrap WHERE pls = '$pls' AND itme>='$itme'");
...@@ -1543,13 +1548,13 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1543,13 +1548,13 @@ function itemuse($itmn,&$data=NULL) {
$value = diceroll($stotal); $value = diceroll($stotal);
} }
} }
foreach ($rand_e as $key => &$value) { foreach ($rand_e as $key => &$value) {
if ($value != 0) { if ($value != 0) {
$value = diceroll($etotal); $value = diceroll($etotal);
} }
} }
//place the contents of arraies back to player equipment. //place the contents of arraies back to player equipment.
//This dice doubles the power of all items. //This dice doubles the power of all items.
$wepe = $rand_e[0] * 2; $wepe = $rand_e[0] * 2;
...@@ -1666,7 +1671,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1666,7 +1671,7 @@ function itemuse($itmn,&$data=NULL) {
}else{ }else{
$log .= '其中一个骰子就这么飞出了你的视野,你看不到它的出目!<br>'; $log .= '其中一个骰子就这么飞出了你的视野,你看不到它的出目!<br>';
} }
//D100 //D100
if ($clbpara['randver3'] < 1024){ if ($clbpara['randver3'] < 1024){
fortuneCookie1(diceroll($clbpara['randver1'])); fortuneCookie1(diceroll($clbpara['randver1']));
...@@ -1849,7 +1854,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1849,7 +1854,7 @@ function itemuse($itmn,&$data=NULL) {
$clbpara['fireseedMaxHPRecover'] = $gainmax; $clbpara['fireseedMaxHPRecover'] = $gainmax;
if ($gainmax !== '∞'){ if ($gainmax !== '∞'){
// Gain HP and SP - note we don't overheal SP here. // Gain HP and SP - note we don't overheal SP here.
$addsp = $msp - $sp < $itme ? $msp - $sp : $itme; $addsp = $msp - $sp < $itme ? $msp - $sp : $itme;
if($addsp > 0) $sp += $addsp; if($addsp > 0) $sp += $addsp;
else $addsp = 0; else $addsp = 0;
...@@ -1895,7 +1900,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1895,7 +1900,7 @@ function itemuse($itmn,&$data=NULL) {
$addsp = $msp - $sp < $itme ? $msp - $sp : $itme; $addsp = $msp - $sp < $itme ? $msp - $sp : $itme;
if($addsp > 0) $sp += $addsp; if($addsp > 0) $sp += $addsp;
else $addsp = 0; else $addsp = 0;
$addhp = $itme; $addhp = $itme;
$hp += $addhp; $hp += $addhp;
...@@ -1928,7 +1933,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1928,7 +1933,7 @@ function itemuse($itmn,&$data=NULL) {
$clbpara['fireseedmaxProfGain'] = $gainmax; $clbpara['fireseedmaxProfGain'] = $gainmax;
if ($gainmax !== '∞'){ if ($gainmax !== '∞'){
// Gain w value // Gain w value
$addw = $itme; $addw = $itme;
$clbpara['fireseedmaxProfAdd'] += $addw; $clbpara['fireseedmaxProfAdd'] += $addw;
if($clbpara['fireseedmaxProfGain'] - $clbpara['fireseedmaxProfAdd'] > 0) { if($clbpara['fireseedmaxProfGain'] - $clbpara['fireseedmaxProfAdd'] > 0) {
...@@ -1936,7 +1941,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1936,7 +1941,7 @@ function itemuse($itmn,&$data=NULL) {
$wk += $addw; $wk += $addw;
$wg += $addw; $wg += $addw;
$wc += $addw; $wc += $addw;
$wd += $addw; $wd += $addw;
$wf += $addw;} $wf += $addw;}
else $addw = 0; else $addw = 0;
...@@ -1980,7 +1985,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -1980,7 +1985,7 @@ function itemuse($itmn,&$data=NULL) {
$wk += $addw; $wk += $addw;
$wg += $addw; $wg += $addw;
$wc += $addw; $wc += $addw;
$wd += $addw; $wd += $addw;
$wf += $addw; $wf += $addw;
$log.="你将<span class=\"yellow\">{$itm}</span>吞下了肚。<br> $log.="你将<span class=\"yellow\">{$itm}</span>吞下了肚。<br>
...@@ -2012,7 +2017,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2012,7 +2017,7 @@ function itemuse($itmn,&$data=NULL) {
$clbpara['fireseedmaxHPGain'] = $gainmax; $clbpara['fireseedmaxHPGain'] = $gainmax;
if ($gainmax !== '∞'){ if ($gainmax !== '∞'){
// Gain $mhp value // Gain $mhp value
$addmhp = $itme; $addmhp = $itme;
$clbpara['fireseedmaxHPAdd'] += $addmhp; $clbpara['fireseedmaxHPAdd'] += $addmhp;
if($clbpara['fireseedmaxHPGain'] - $clbpara['fireseedmaxHPAdd'] > 0) $mhp += $addmhp; if($clbpara['fireseedmaxHPGain'] - $clbpara['fireseedmaxHPAdd'] > 0) $mhp += $addmhp;
...@@ -2086,7 +2091,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2086,7 +2091,7 @@ function itemuse($itmn,&$data=NULL) {
$clbpara['fireseedmaxDefGain'] = $gainmax; $clbpara['fireseedmaxDefGain'] = $gainmax;
if ($gainmax !== '∞'){ if ($gainmax !== '∞'){
// Gain $def value // Gain $def value
$adddef = $itme; $adddef = $itme;
$clbpara['fireseedmaxDefAdd'] += $adddef; $clbpara['fireseedmaxDefAdd'] += $adddef;
if($clbpara['fireseedmaxDefGain'] - $clbpara['fireseedmaxDefAdd'] > 0) $def += $adddef; if($clbpara['fireseedmaxDefGain'] - $clbpara['fireseedmaxDefAdd'] > 0) $def += $adddef;
...@@ -2141,7 +2146,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2141,7 +2146,7 @@ function itemuse($itmn,&$data=NULL) {
} }
} }
} }
}elseif($itmk == '🎆B'){ }elseif($itmk == '🎆B'){
# Fireseed Box, containing various helpful items. # Fireseed Box, containing various helpful items.
# Officially dubbed Silent Box. # Officially dubbed Silent Box.
...@@ -2173,7 +2178,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2173,7 +2178,7 @@ function itemuse($itmn,&$data=NULL) {
if($itms <= 0) destory_single_item($data,$itmn,1); if($itms <= 0) destory_single_item($data,$itmn,1);
$itm0 = $in;$itmk0=$ik;$itme0=$ie;$itms0=$is;$itmsk0=$isk; $itm0 = $in;$itmk0=$ik;$itme0=$ie;$itms0=$is;$itmsk0=$isk;
if($itemflag = $sundata) addnews($now,'present',$name,$oitm,$in,$nick); if($itemflag = $sundata) addnews($now,'present',$name,$oitm,$in,$nick);
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget($data); itemget($data);
...@@ -2204,7 +2209,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2204,7 +2209,7 @@ function itemuse($itmn,&$data=NULL) {
if($itms <= 0) destory_single_item($data,$itmn,1); if($itms <= 0) destory_single_item($data,$itmn,1);
$itm0 = $in;$itmk0=$ik;$itme0=$ie;$itms0=$is;$itmsk0=$isk; $itm0 = $in;$itmk0=$ik;$itme0=$ie;$itms0=$is;$itmsk0=$isk;
if($itemflag = $sundata) addnews($now,'present',$name,$oitm,$in,$nick); if($itemflag = $sundata) addnews($now,'present',$name,$oitm,$in,$nick);
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget($data); itemget($data);
...@@ -2224,7 +2229,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2224,7 +2229,7 @@ function itemuse($itmn,&$data=NULL) {
$itme = $itms = 0; $itme = $itms = 0;
} }
} */ } */
# Special check for a poisoned fireseed item, WIP for now. # Special check for a poisoned fireseed item, WIP for now.
}elseif($itmk == 'P🎆'){ }elseif($itmk == 'P🎆'){
$log.="这个<span class=\"yellow\">{$itm}</span>有毒!到底是谁干的!<br>"; $log.="这个<span class=\"yellow\">{$itm}</span>有毒!到底是谁干的!<br>";
...@@ -2465,7 +2470,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2465,7 +2470,7 @@ function itemuse($itmn,&$data=NULL) {
$npls = $val['pls']; $npls = $val['pls'];
while($npls == $val['pls']){ while($npls == $val['pls']){
$npls = rand(1,count($plsinfo)-1); $npls = rand(1,count($plsinfo)-1);
} }
$val['pls'] = $npls;$npls = $plsinfo[$npls]; $val['pls'] = $npls;$npls = $plsinfo[$npls];
$log .= "<span class=\"yellow\">{$key}</span>响应道具号召,移动到了<span class=\"yellow\">{$npls}</span>。<br>"; $log .= "<span class=\"yellow\">{$key}</span>响应道具号召,移动到了<span class=\"yellow\">{$npls}</span>。<br>";
addnews($now,'npcmove',$name,$key,$nick); addnews($now,'npcmove',$name,$key,$nick);
...@@ -2473,7 +2478,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2473,7 +2478,7 @@ function itemuse($itmn,&$data=NULL) {
$db->multi_update("{$tablepre}players",$ndata,'pid'); $db->multi_update("{$tablepre}players",$ndata,'pid');
if($itms != $nosta){$itms --;} if($itms != $nosta){$itms --;}
} }
return; return;
} elseif ($itm == '残响兵器') { } elseif ($itm == '残响兵器') {
//global $cmd; //global $cmd;
...@@ -2483,9 +2488,9 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2483,9 +2488,9 @@ function itemuse($itmn,&$data=NULL) {
for($i = 1; $i <= 6; $i ++) { for($i = 1; $i <= 6; $i ++) {
//global ${'itmk' . $i},${'itm' . $i}, ${'itme' . $i}, ${'itms' . $i},${'itmsk' . $i}; //global ${'itmk' . $i},${'itm' . $i}, ${'itme' . $i}, ${'itms' . $i},${'itmsk' . $i};
} }
include template('nametag'); include template('nametag');
$cmd = ob_get_contents(); $cmd = ob_get_contents();
ob_clean(); ob_clean();
return; return;
...@@ -2497,9 +2502,9 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2497,9 +2502,9 @@ function itemuse($itmn,&$data=NULL) {
for($i = 1; $i <= 6; $i ++) { for($i = 1; $i <= 6; $i ++) {
//global ${'itmk' . $i},${'itm' . $i}, ${'itme' . $i}, ${'itms' . $i},${'itmsk' . $i}; //global ${'itmk' . $i},${'itm' . $i}, ${'itme' . $i}, ${'itms' . $i},${'itmsk' . $i};
} }
include template('supernametag'); include template('supernametag');
$cmd = ob_get_contents(); $cmd = ob_get_contents();
ob_clean(); ob_clean();
return; return;
...@@ -2509,7 +2514,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2509,7 +2514,7 @@ function itemuse($itmn,&$data=NULL) {
//global ${'itmk' . $i},${'itm' . $i}, ${'itme' . $i}, ${'itms' . $i}; //global ${'itmk' . $i},${'itm' . $i}, ${'itme' . $i}, ${'itms' . $i};
} }
include template('poison'); include template('poison');
$cmd = ob_get_contents(); $cmd = ob_get_contents();
ob_clean(); ob_clean();
return; return;
...@@ -2529,7 +2534,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2529,7 +2534,7 @@ function itemuse($itmn,&$data=NULL) {
$wepe += $check; $wepe += $check;
} }
} }
$wepe += $itme; $wepe += $itme;
$log .= "使用了<span class=\"yellow\">$itm</span>,<span class=\"yellow\">$wep</span>的攻击力变成了<span class=\"yellow\">$wepe</span>。<br>"; $log .= "使用了<span class=\"yellow\">$itm</span>,<span class=\"yellow\">$wep</span>的攻击力变成了<span class=\"yellow\">$wepe</span>。<br>";
if (strpos ( $wep, '锋利的' ) === false) { if (strpos ( $wep, '锋利的' ) === false) {
$wep = '锋利的'.$wep; $wep = '锋利的'.$wep;
...@@ -2544,7 +2549,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2544,7 +2549,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "<span class=\"red\">$itm</span>使用失败,<span class=\"red\">$wep</span>的攻击力变成了<span class=\"red\">$wepe</span>。<br>"; $log .= "<span class=\"red\">$itm</span>使用失败,<span class=\"red\">$wep</span>的攻击力变成了<span class=\"red\">$wepe</span>。<br>";
} }
} }
$itms --; $itms --;
} elseif(strpos ( $wepsk, 'Z' ) !== false){ } elseif(strpos ( $wepsk, 'Z' ) !== false){
$log .= '咦……刀刃过于薄了,感觉稍微磨一点都会造成不可逆的损伤呢……<br>'; $log .= '咦……刀刃过于薄了,感觉稍微磨一点都会造成不可逆的损伤呢……<br>';
...@@ -2592,7 +2597,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2592,7 +2597,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "<span class=\"red\">$itm</span>使用失败,<span class=\"red\">$wep</span>的攻击力变成了<span class=\"red\">$wepe</span>。<br>"; $log .= "<span class=\"red\">$itm</span>使用失败,<span class=\"red\">$wep</span>的攻击力变成了<span class=\"red\">$wepe</span>。<br>";
} }
} }
$itms --; $itms --;
} else { } else {
$log .= '你没装备棍棒,不能安装钉子。<br>'; $log .= '你没装备棍棒,不能安装钉子。<br>';
...@@ -2676,7 +2681,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2676,7 +2681,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= "使用了<span class=\"yellow\">$itm</span>。<br>突然刮起了一阵怪风,将遍布全场的{$cnum}具尸体吹到了你所在的地方!<br>"; $log .= "使用了<span class=\"yellow\">$itm</span>。<br>突然刮起了一阵怪风,将遍布全场的{$cnum}具尸体吹到了你所在的地方!<br>";
$rp += diceroll(1024); $rp += diceroll(1024);
$log .= "<span class=\"lime\">这过于惨无人道了!</span><br>你觉得罪恶感爬上了你的脊梁!<br>"; $log .= "<span class=\"lime\">这过于惨无人道了!</span><br>你觉得罪恶感爬上了你的脊梁!<br>";
$itms --; $isk = $cnum; $itms --; $isk = $cnum;
} elseif ($itm == '天候棒') { } elseif ($itm == '天候棒') {
//global $weather, $wthinfo, $name; //global $weather, $wthinfo, $name;
if($weather <= 13) if($weather <= 13)
...@@ -2687,7 +2692,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2687,7 +2692,7 @@ function itemuse($itmn,&$data=NULL) {
addnews ( $now, 'wthchange', $name, $weather ,$nick); addnews ( $now, 'wthchange', $name, $weather ,$nick);
$log .= "你转动了几下天候棒。<br>天气突然转变成了<span class=\"red\">$wthinfo[$weather]</span>!<br>"; $log .= "你转动了几下天候棒。<br>天气突然转变成了<span class=\"red\">$wthinfo[$weather]</span>!<br>";
} }
else else
{ {
addnews ( $now, 'wthfail', $name, $weather ,$nick); addnews ( $now, 'wthfail', $name, $weather ,$nick);
$log .= "你转动了几下天候棒。<br>但天气并未发生改变!<br>"; $log .= "你转动了几下天候棒。<br>但天气并未发生改变!<br>";
...@@ -2778,7 +2783,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2778,7 +2783,7 @@ function itemuse($itmn,&$data=NULL) {
$skill_advanced = array ('WJ' => $wg, 'WB' => $wc ); $skill_advanced = array ('WJ' => $wg, 'WB' => $wc );
arsort ( $skill ); arsort ( $skill );
$skill_keys = array_keys ( $skill ); $skill_keys = array_keys ( $skill );
$skill_advanced_keys = array_keys ( $skill_advanced ); $skill_advanced_keys = array_keys ( $skill_advanced );
$nowsk = substr ( $wepk, 0, 2 ); $nowsk = substr ( $wepk, 0, 2 );
if (strlen($wepk) > 2) $subsk = 'W'.$wepk[2]; if (strlen($wepk) > 2) $subsk = 'W'.$wepk[2];
$maxsk = $skill_keys [0]; $maxsk = $skill_keys [0];
...@@ -2987,7 +2992,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -2987,7 +2992,7 @@ function itemuse($itmn,&$data=NULL) {
} else{ } else{
$up = rand (0, 573); $up = rand (0, 573);
} }
if($club == 17){ if($club == 17){
$hpdown = $spdown = round($up * 1.5); $hpdown = $spdown = round($up * 1.5);
...@@ -3001,9 +3006,9 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3001,9 +3006,9 @@ function itemuse($itmn,&$data=NULL) {
$wp += $up;$wk += $up;$wg += $up;$wc += $up;$wd += $up;$wf += $up; $wp += $up;$wk += $up;$wg += $up;$wc += $up;$wd += $up;$wf += $up;
$rp += 500; $rp += 500;
//$down = $club == 17 ? round($up * 1.5) : $up; //$down = $club == 17 ? round($up * 1.5) : $up;
$mhp = $mhp - $hpdown; $mhp = $mhp - $hpdown;
$msp = $msp - $spdown; $msp = $msp - $spdown;
$log .= '你的生命上限减少了<span class="yellow">'.$hpdown.'</span>点,体力上限减少了<span class="yellow">'.$spdown.'</span>点,而你的全系熟练度提升了<span class="yellow">'.$up.'</span>点!<br>'; $log .= '你的生命上限减少了<span class="yellow">'.$hpdown.'</span>点,体力上限减少了<span class="yellow">'.$spdown.'</span>点,而你的全系熟练度提升了<span class="yellow">'.$up.'</span>点!<br>';
} elseif ($itm == '溶剂SCP-294_PT_Arnval'){ } elseif ($itm == '溶剂SCP-294_PT_Arnval'){
$log .= '你考虑了一会,一扬手喝下了杯中中冒着白色气泡的清澈液体。<br><span class="yellow">你感到全身就像燃烧起来一样,不禁扪心自问这值得么?</span><br>'; $log .= '你考虑了一会,一扬手喝下了杯中中冒着白色气泡的清澈液体。<br><span class="yellow">你感到全身就像燃烧起来一样,不禁扪心自问这值得么?</span><br>';
...@@ -3018,7 +3023,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3018,7 +3023,7 @@ function itemuse($itmn,&$data=NULL) {
$rp += 200; $rp += 200;
$msp = $msp - $down; $msp = $msp - $down;
$att = $att - $down; $att = $att - $down;
$log .= '你的体力上限和攻击力减少了<span class="yellow">'.$down.'</span>点,而你的生命上限和防御力提升了<span class="yellow">'.$up.'</span>点!<br>'; $log .= '你的体力上限和攻击力减少了<span class="yellow">'.$down.'</span>点,而你的生命上限和防御力提升了<span class="yellow">'.$up.'</span>点!<br>';
} elseif ($itm == '溶剂SCP-294_PT_Strarf') { } elseif ($itm == '溶剂SCP-294_PT_Strarf') {
$log .= '你考虑了一会,一扬手喝下了杯中中冒着灰色气泡的清澈液体。<br><span class="yellow">你感到全身就像燃烧起来一样,不禁扪心自问这值得么?</span><br>'; $log .= '你考虑了一会,一扬手喝下了杯中中冒着灰色气泡的清澈液体。<br><span class="yellow">你感到全身就像燃烧起来一样,不禁扪心自问这值得么?</span><br>';
...@@ -3076,7 +3081,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3076,7 +3081,7 @@ function itemuse($itmn,&$data=NULL) {
//global $hack,$rp,$clbpara,$gamevars; //global $hack,$rp,$clbpara,$gamevars;
$rp = 0; $rp = 0;
$clbpara['dialogue'] = 'thiphase'; $clbpara['dialogue'] = 'thiphase';
$clbpara['console'] = 1; $clbpara['console'] = 1;
$clbpara['achvars']['thiphase'] += 1; $clbpara['achvars']['thiphase'] += 1;
include_once GAME_ROOT . './include/system.func.php'; include_once GAME_ROOT . './include/system.func.php';
$log .= '在你唱出那单一的旋律的霎那,<br>整个虚拟世界起了翻天覆地的变化……<br>'; $log .= '在你唱出那单一的旋律的霎那,<br>整个虚拟世界起了翻天覆地的变化……<br>';
...@@ -3098,7 +3103,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3098,7 +3103,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= '你已经呼唤了一个未知的存在,现在寻找并击败她,<br>并且搜寻她的游戏解除钥匙吧!<br>'; $log .= '你已经呼唤了一个未知的存在,现在寻找并击败她,<br>并且搜寻她的游戏解除钥匙吧!<br>';
addnews ($now,'dfphase',$name,$nick); addnews ($now,'dfphase',$name,$nick);
addnpc ( 12, 0,1); addnpc ( 12, 0,1);
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} elseif ($itm == '✦钥匙碎片') { } elseif ($itm == '✦钥匙碎片') {
...@@ -3113,7 +3118,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3113,7 +3118,7 @@ function itemuse($itmn,&$data=NULL) {
addnpc ( 2, 5, 2); addnpc ( 2, 5, 2);
addnpc ( 2, 6, 2); addnpc ( 2, 6, 2);
addnpc ( 2, 7, 2); addnpc ( 2, 7, 2);
addnews ($now , 'key0', $name,$nick); addnews ($now , 'key0', $name,$nick);
$itms --; $itms --;
if($itms <= 0) destory_single_item($data,$itmn,1); if($itms <= 0) destory_single_item($data,$itmn,1);
} elseif ($itm == '✦NPC钥匙·一阶段') { } elseif ($itm == '✦NPC钥匙·一阶段') {
...@@ -3130,7 +3135,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3130,7 +3135,7 @@ function itemuse($itmn,&$data=NULL) {
addnpc ( 13, 0,1); addnpc ( 13, 0,1);
addnpc ( 13, 1,1); addnpc ( 13, 1,1);
addnpc ( 13, 2,1); addnpc ( 13, 2,1);
addnews ($now , 'key1', $name,$nick); addnews ($now , 'key1', $name,$nick);
$itms --; $itms --;
if($itms <= 0){ if($itms <= 0){
$log .= "<span class=\"red\">$itm</span>用光了。<br>"; $log .= "<span class=\"red\">$itm</span>用光了。<br>";
...@@ -3150,7 +3155,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3150,7 +3155,7 @@ function itemuse($itmn,&$data=NULL) {
addnpc ( 6, 0,1); addnpc ( 6, 0,1);
//假蓝凝 //假蓝凝
addnpc ( 9, 0,1); addnpc ( 9, 0,1);
addnews ($now , 'key2', $name,$nick); addnews ($now , 'key2', $name,$nick);
$itms --; $itms --;
if($itms <= 0){ if($itms <= 0){
$log .= "<span class=\"red\">$itm</span>用光了。<br>"; $log .= "<span class=\"red\">$itm</span>用光了。<br>";
...@@ -3162,7 +3167,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3162,7 +3167,7 @@ function itemuse($itmn,&$data=NULL) {
$log .= '虽然不知道你究竟想干啥,<br>但总之你放出了更多的种火……<br>'; $log .= '虽然不知道你究竟想干啥,<br>但总之你放出了更多的种火……<br>';
// $dice = rand(0,100); // $dice = rand(0,100);
// if ($dice > 98){ // if ($dice > 98){
// $log .= '似乎还有其他的什么被你放出来咯!<br>'; // $log .= '似乎还有其他的什么被你放出来咯!<br>';
// addnpc ( 89, 0,1); // addnpc ( 89, 0,1);
// addnpc ( 89, 1,1); // addnpc ( 89, 1,1);
// addnpc ( 89, 2,1); // addnpc ( 89, 2,1);
...@@ -3173,7 +3178,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3173,7 +3178,7 @@ function itemuse($itmn,&$data=NULL) {
addnpc ( 92, 2,10); addnpc ( 92, 2,10);
addnpc ( 92, 3,10); addnpc ( 92, 3,10);
addnpc ( 92, 4,10); addnpc ( 92, 4,10);
addnews ($now , 'key3', $name,$nick); addnews ($now , 'key3', $name,$nick);
$itms --; $itms --;
if($itms <= 0){ if($itms <= 0){
$log .= "<span class=\"red\">$itm</span>用光了。<br>"; $log .= "<span class=\"red\">$itm</span>用光了。<br>";
...@@ -3181,7 +3186,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3181,7 +3186,7 @@ function itemuse($itmn,&$data=NULL) {
$itme = $itms = 0; $itme = $itms = 0;
} }
} elseif ($itm == '✦【自律AI呼唤器】') { } elseif ($itm == '✦【自律AI呼唤器】') {
//Call in 30 type 93 NPCs, 6 each. //Call in 30 type 93 NPCs, 6 each.
//get player's 1st Yume value - different value results in different NPC. //get player's 1st Yume value - different value results in different NPC.
//There are 5 sets - K, C, G, P, D. //There are 5 sets - K, C, G, P, D.
include_once GAME_ROOT . './include/system.func.php'; include_once GAME_ROOT . './include/system.func.php';
...@@ -3232,7 +3237,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3232,7 +3237,7 @@ function itemuse($itmn,&$data=NULL) {
//This is considered a troll move - we don't announce it in game newsinfo - however--! //This is considered a troll move - we don't announce it in game newsinfo - however--!
$db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('0','$now','$name','','「神奇AI们,快过来!」')"); $db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('0','$now','$name','','「神奇AI们,快过来!」')");
$db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【红暮】','','竟然有人从幻境中叫出了外援!怎么可能!')"); $db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【红暮】','','竟然有人从幻境中叫出了外援!怎么可能!')");
//HOWEVER-- //HOWEVER--
$log .= '突然你感到全身一寒,<br>你感觉罪恶感爬上了你的脊梁!<br>'; $log .= '突然你感到全身一寒,<br>你感觉罪恶感爬上了你的脊梁!<br>';
$rp += diceroll(1555); $rp += diceroll(1555);
...@@ -3303,7 +3308,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3303,7 +3308,7 @@ function itemuse($itmn,&$data=NULL) {
addnews ($now , 'fsmove', $name, '', $pls,$nick); addnews ($now , 'fsmove', $name, '', $pls,$nick);
//销毁物品 //销毁物品
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} elseif ($itm == '✦种火聚集装置✦') { } elseif ($itm == '✦种火聚集装置✦') {
//global $db, $tablepre, $pls; //global $db, $tablepre, $pls;
$result = $db->query("SELECT * FROM {$tablepre}players WHERE type = 92"); //SELECT 全部种火NPC $result = $db->query("SELECT * FROM {$tablepre}players WHERE type = 92"); //SELECT 全部种火NPC
...@@ -3313,11 +3318,11 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3313,11 +3318,11 @@ function itemuse($itmn,&$data=NULL) {
//文案 //文案
$log .= '你使用了种火聚集装置。<br>地图上全部种火被移动到了你所在的位置!<br>'; $log .= '你使用了种火聚集装置。<br>地图上全部种火被移动到了你所在的位置!<br>';
$db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【E】','','看起来有搅局的人出现了,我们被什么玩家全体移动了位置呢。')"); $db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【E】','','看起来有搅局的人出现了,我们被什么玩家全体移动了位置呢。')");
$db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【P】','','看一下「游戏状况」,来确认一下吧!')"); $db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【P】','','看一下「游戏状况」,来确认一下吧!')");
addnews ($now , 'fsmove', $name, '', $pls,$nick); addnews ($now , 'fsmove', $name, '', $pls,$nick);
//销毁物品 //销毁物品
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} elseif ($itm == '✦呼唤种火✦') { } elseif ($itm == '✦呼唤种火✦') {
//global $db, $tablepre, $pls; //global $db, $tablepre, $pls;
$result = $db->query("SELECT * FROM {$tablepre}players WHERE type = 92"); //SELECT 全部种火NPC $result = $db->query("SELECT * FROM {$tablepre}players WHERE type = 92"); //SELECT 全部种火NPC
...@@ -3327,7 +3332,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3327,7 +3332,7 @@ function itemuse($itmn,&$data=NULL) {
//文案 //文案
$log .= '你使用了种火聚集装置。<br>地图上全部种火被移动到了你所在的位置!<br>'; $log .= '你使用了种火聚集装置。<br>地图上全部种火被移动到了你所在的位置!<br>';
$db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【E】','','听到了……')"); $db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【E】','','听到了……')");
$db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【P】','','…………召唤…………')"); $db->query("INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('2','$now','【P】','','…………召唤…………')");
addnews ($now , 'fsmove', $name, '', $pls,$nick); addnews ($now , 'fsmove', $name, '', $pls,$nick);
} elseif ($itm == '镣铐的碎片') { } elseif ($itm == '镣铐的碎片') {
// include_once GAME_ROOT . './include/system.func.php'; // include_once GAME_ROOT . './include/system.func.php';
...@@ -3407,7 +3412,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3407,7 +3412,7 @@ function itemuse($itmn,&$data=NULL) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
} elseif ($itm == '【我想要领略真正的红杀之力】') { } elseif ($itm == '【我想要领略真正的红杀之力】') {
//文案 //文案
//global $db, $tablepre, $pls; //global $db, $tablepre, $pls;
include_once GAME_ROOT . './include/system.func.php'; include_once GAME_ROOT . './include/system.func.php';
...@@ -3630,7 +3635,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3630,7 +3635,7 @@ function itemuse($itmn,&$data=NULL) {
$itmk0 = 'TN'; $itmk0 = 'TN';
$itme0 = diceroll($clbpara['randver3']); $itme0 = diceroll($clbpara['randver3']);
$itms0 = diceroll(5); $itms0 = diceroll(5);
$itmsk0 = ''; $itmsk0 = '';
}elseif ($harukaBoxCheck <= 80){ }elseif ($harukaBoxCheck <= 80){
// Get random percent damage trap. // Get random percent damage trap.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>十分强力的陷阱</span>的东西!<br>"; $log.="你从里面翻找出了看起来能作为<span class='yellow'>十分强力的陷阱</span>的东西!<br>";
...@@ -3639,7 +3644,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3639,7 +3644,7 @@ function itemuse($itmn,&$data=NULL) {
$itmk0 = 'TN8'; $itmk0 = 'TN8';
$itme0 = 1; $itme0 = 1;
$itms0 = diceroll(2); $itms0 = diceroll(2);
$itmsk0 = 'x'; $itmsk0 = 'x';
}elseif ($harukaBoxCheck <= 109){ }elseif ($harukaBoxCheck <= 109){
// Get high true damage trap. // Get high true damage trap.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>精心制作的可怕陷阱</span>的东西!<br>"; $log.="你从里面翻找出了看起来能作为<span class='yellow'>精心制作的可怕陷阱</span>的东西!<br>";
...@@ -3687,7 +3692,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3687,7 +3692,7 @@ function itemuse($itmn,&$data=NULL) {
$itme = $itms = 0; $itme = $itms = 0;
//Also Destroy item0. //Also Destroy item0.
$itm0 = $itmk0 = $itmsk0 = ''; $itm0 = $itmk0 = $itmsk0 = '';
$itme0 = $itms0 = 0; $itme0 = $itms0 = 0;
//Get damage. //Get damage.
$harukaBoxDamage = diceroll($clbpara['randver2']) * (diceroll(3) + 1); $harukaBoxDamage = diceroll($clbpara['randver2']) * (diceroll(3) + 1);
//Calculate Damage. //Calculate Damage.
...@@ -3856,7 +3861,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3856,7 +3861,7 @@ function itemuse($itmn,&$data=NULL) {
<span class=\"lime\">“为什么突然会给游戏加入歌单这种东西……?<br> <span class=\"lime\">“为什么突然会给游戏加入歌单这种东西……?<br>
那么为了更好地伪装,我也注入个歌单进来。<br> 那么为了更好地伪装,我也注入个歌单进来。<br>
毕竟我平时码代码就是听这些的。顺路啦。”——????<br><br></span> 毕竟我平时码代码就是听这些的。顺路啦。”——????<br><br></span>
<span class=\"yellow\">你的音乐播放列表被替换了!<br></span>"; <span class=\"yellow\">你的音乐播放列表被替换了!<br></span>";
if ($clbpara['randver3'] < 512){ if ($clbpara['randver3'] < 512){
$clbpara['event_bgmbook'] = $event_bgm['christracks']; $clbpara['event_bgmbook'] = $event_bgm['christracks'];
...@@ -3890,7 +3895,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3890,7 +3895,7 @@ function itemuse($itmn,&$data=NULL) {
<span class=\"yellow\">但是大炮突然就这么消失了!这是怎么回事呢?<br></span>"; <span class=\"yellow\">但是大炮突然就这么消失了!这是怎么回事呢?<br></span>";
//destroy this item. //destroy this item.
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
if ($mhp <= 200){ if ($mhp <= 200){
$log.="你点燃了这门炮的引线,然后尝试将头伸进炮筒之中。<br> $log.="你点燃了这门炮的引线,然后尝试将头伸进炮筒之中。<br>
...@@ -3899,7 +3904,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -3899,7 +3904,7 @@ function itemuse($itmn,&$data=NULL) {
$hp = 1; $hp = 1;
//destroy this item. //destroy this item.
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
$log.="你点燃了这门炮的引线,然后迅速将头伸进了炮筒之中!<br> $log.="你点燃了这门炮的引线,然后迅速将头伸进了炮筒之中!<br>
<span class=\"yellow\">只听轰地一声,你被炮弹击出了千米之外,你感觉身体内的什么东西焕然一新了……<br></span>"; <span class=\"yellow\">只听轰地一声,你被炮弹击出了千米之外,你感觉身体内的什么东西焕然一新了……<br></span>";
...@@ -4012,7 +4017,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4012,7 +4017,7 @@ function itemuse($itmn,&$data=NULL) {
if($club) if($club)
{ {
$log.="你已经是有身份的人了!不能再使用社团卡。<br>"; $log.="你已经是有身份的人了!不能再使用社团卡。<br>";
} }
//反正是测试用的 发段怪log //反正是测试用的 发段怪log
$log.="你拿起<span class='yellow'>$itm</span>左右端详着……<br> $log.="你拿起<span class='yellow'>$itm</span>左右端详着……<br>
...@@ -4161,7 +4166,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4161,7 +4166,7 @@ function itemuse($itmn,&$data=NULL) {
$log .='唔?你的包裹里没有可以强化的装备,是不是没有脱下来呢?DA☆ZE<br><br>'; $log .='唔?你的包裹里没有可以强化的装备,是不是没有脱下来呢?DA☆ZE<br><br>';
}else{ }else{
$log .="宝石在你的手上发出异样的光芒,似乎有个奇怪的女声在你耳边说道<span class=\"yellow\">\"我是从天界来的凯丽\"</span>."; $log .="宝石在你的手上发出异样的光芒,似乎有个奇怪的女声在你耳边说道<span class=\"yellow\">\"我是从天界来的凯丽\"</span>.";
} }
return; return;
} elseif ($itm == '调制解调器'){ } elseif ($itm == '调制解调器'){
if(!empty($gamevars['apis'])) if(!empty($gamevars['apis']))
...@@ -4179,13 +4184,13 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4179,13 +4184,13 @@ function itemuse($itmn,&$data=NULL) {
} }
$itms--; $itms--;
} }
else else
{ {
$log .= '这件长得很像猫的东西该怎么用呢?<br>'; $log .= '这件长得很像猫的东西该怎么用呢?<br>';
} }
} elseif ($itm == '水果刀') { } elseif ($itm == '水果刀') {
$flag = false; $flag = false;
for($i = 1; $i <= 6; $i ++) { for($i = 1; $i <= 6; $i ++) {
//global ${'itm' . $i}, ${'itmk' . $i},${'itms' . $i},${'itme' . $i},$wk; //global ${'itm' . $i}, ${'itmk' . $i},${'itms' . $i},${'itme' . $i},$wk;
if (strpos(${'itmsk' . $i}, '🍎') !== false) { if (strpos(${'itmsk' . $i}, '🍎') !== false) {
...@@ -4207,7 +4212,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4207,7 +4212,7 @@ function itemuse($itmn,&$data=NULL) {
$if_brackets = 1; $if_brackets = 1;
${'itm' . $i} = mb_substr(${'itm' . $i}, 0, -1).'皮'.mb_substr(${'itm' . $i}, -1); ${'itm' . $i} = mb_substr(${'itm' . $i}, 0, -1).'皮'.mb_substr(${'itm' . $i}, -1);
break; break;
} }
} }
if ($if_brackets == 0) ${'itm' . $i} = ${'itm' . $i}.'皮'; if ($if_brackets == 0) ${'itm' . $i} = ${'itm' . $i}.'皮';
${'itmk' . $i} = 'TN'; ${'itmk' . $i} = 'TN';
...@@ -4242,7 +4247,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4242,7 +4247,7 @@ function itemuse($itmn,&$data=NULL) {
# Do an initial coin toss # Do an initial coin toss
$selfdestructdice1 = diceroll(1); $selfdestructdice1 = diceroll(1);
$selfdestructdice2 = diceroll(6); $selfdestructdice2 = diceroll(6);
if ($selfdestructdice1 > 0){ if ($selfdestructdice1 > 0){
# You'll self destruct into a bunch of happy items, to bring smile to others. # You'll self destruct into a bunch of happy items, to bring smile to others.
$happyitemname = $name . "的存在意义"; $happyitemname = $name . "的存在意义";
...@@ -4299,7 +4304,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4299,7 +4304,7 @@ function itemuse($itmn,&$data=NULL) {
给虚拟幻境的天空带来了五彩的红霞。<br> 给虚拟幻境的天空带来了五彩的红霞。<br>
大家看到这祥瑞的天象,纷纷露出了笑容。<br> 大家看到这祥瑞的天象,纷纷露出了笑容。<br>
这大概就是……「笑容世界」吧。<br> 这大概就是……「笑容世界」吧。<br>
大逃杀真是塔洛西啊!<br>"; 大逃杀真是塔洛西啊!<br>";
} }
# Then we kill you to end everything. # Then we kill you to end everything.
include_once GAME_ROOT . './include/state.func.php'; include_once GAME_ROOT . './include/state.func.php';
...@@ -4312,7 +4317,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4312,7 +4317,7 @@ function itemuse($itmn,&$data=NULL) {
<span class=\"minirainbow\">于是你突然从手中具现出了一大堆卡牌,然后自顾自摆起了阵法!</span><br> <span class=\"minirainbow\">于是你突然从手中具现出了一大堆卡牌,然后自顾自摆起了阵法!</span><br>
等你回过神来,你发现你的背包里面到处都是莫名其妙的卡牌。<br> 等你回过神来,你发现你的背包里面到处都是莫名其妙的卡牌。<br>
希望这真的值得……<br>"; 希望这真的值得……<br>";
$itm1 = '脑内印出的超雷龙-雷龙 ★8'; $itm2 = '脑内印出的命运英雄 毁灭凤凰人 ★8'; $itm3 = '脑内印出的枪管上膛狞猛龙 ★8'; $itm1 = '脑内印出的超雷龙-雷龙 ★8'; $itm2 = '脑内印出的命运英雄 毁灭凤凰人 ★8'; $itm3 = '脑内印出的枪管上膛狞猛龙 ★8';
$itm4 = '勇者衍生物 ★4'; $itm5 = '脑内印出的流离的狮鹫骑手 ★7'; $itm6 = '脑内印出的T.G.超图书馆员 ★5'; $itm4 = '勇者衍生物 ★4'; $itm5 = '脑内印出的流离的狮鹫骑手 ★7'; $itm6 = '脑内印出的T.G.超图书馆员 ★5';
$itme1 = $itme2 = $itme3 = $itme5 = $itme6 = 1; $itme1 = $itme2 = $itme3 = $itme5 = $itme6 = 1;
$itme4 = 20; $itme4 = 20;
...@@ -4396,7 +4401,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4396,7 +4401,7 @@ function itemuse($itmn,&$data=NULL) {
} else { } else {
$log .= " <span class=\"yellow\">$itm</span> 该如何使用呢?<br>"; $log .= " <span class=\"yellow\">$itm</span> 该如何使用呢?<br>";
} }
//元素大师使用提示纸条的特殊效果: //元素大师使用提示纸条的特殊效果:
if($club == 20 && strpos($itmk,'Y')===0 && strpos($itm,'提示纸条')!==false) if($club == 20 && strpos($itmk,'Y')===0 && strpos($itm,'提示纸条')!==false)
{ {
...@@ -4421,7 +4426,7 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4421,7 +4426,7 @@ function itemuse($itmn,&$data=NULL) {
if(empty($clbpara['elements']['info']['sd']['sd'.$s_id])) if(empty($clbpara['elements']['info']['sd']['sd'.$s_id]))
$clbpara['elements']['info']['sd']['sd'.$s_id] = 1; $clbpara['elements']['info']['sd']['sd'.$s_id] = 1;
} }
if (($itms <= 0) && ($itm)) { if (($itms <= 0) && ($itm)) {
$log .= "<span class=\"red\">$itm</span> 用光了。<br>"; $log .= "<span class=\"red\">$itm</span> 用光了。<br>";
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
...@@ -4431,10 +4436,10 @@ function itemuse($itmn,&$data=NULL) { ...@@ -4431,10 +4436,10 @@ function itemuse($itmn,&$data=NULL) {
} else { } else {
$log .= "你使用了道具 <span class=\"yellow\">$itm</span> 。<br>但是什么也没有发生。<br>"; $log .= "你使用了道具 <span class=\"yellow\">$itm</span> 。<br>但是什么也没有发生。<br>";
} }
include_once GAME_ROOT.'./include/game/achievement.func.php'; include_once GAME_ROOT.'./include/game/achievement.func.php';
check_item_achievement_rev($name,$i,$ie,$is,$ik,$isk); check_item_achievement_rev($name,$i,$ie,$is,$ik,$isk);
$mode = 'command'; $mode = 'command';
return; return;
} }
...@@ -4445,7 +4450,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0) ...@@ -4445,7 +4450,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0)
$itm=&$theitem['itm']; $itmk=&$theitem['itmk']; $itm=&$theitem['itm']; $itmk=&$theitem['itmk'];
$itme=&$theitem['itme']; $itms=&$theitem['itms']; $itmsk=&$theitem['itmsk']; $itme=&$theitem['itme']; $itms=&$theitem['itms']; $itmsk=&$theitem['itmsk'];
$oct_colors_words = array('<span class="red">红</span>','<span class="lime">绿</span>','<span class="clan">蓝</span>','<span class="yellow">黄</span>','<span class="gold">金</span>','<span class="linen">银</span>','<span class="mtgblack">黑</span>','<span class="mtgwhite">白</span>'); $oct_colors_words = array('<span class="red">红</span>','<span class="lime">绿</span>','<span class="clan">蓝</span>','<span class="yellow">黄</span>','<span class="gold">金</span>','<span class="linen">银</span>','<span class="mtgblack">黑</span>','<span class="mtgwhite">白</span>');
if (strlen($itmsk) != 16) if (strlen($itmsk) != 16)
{ {
$oct_seq = range(0, 7); $oct_seq = range(0, 7);
...@@ -4459,7 +4464,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0) ...@@ -4459,7 +4464,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0)
$oct_seq = array_slice($itmsk_arr, 0, 8); $oct_seq = array_slice($itmsk_arr, 0, 8);
$oct_colors = array_slice($itmsk_arr, 8); $oct_colors = array_slice($itmsk_arr, 8);
} }
//改变选中面和另两个面的颜色 //改变选中面和另两个面的颜色
$oct_colors[$rotpos] = ($oct_colors[$rotpos] + 1) % 8; $oct_colors[$rotpos] = ($oct_colors[$rotpos] + 1) % 8;
$rotpos2 = ($rotpos + 1) % 8; $rotpos2 = ($rotpos + 1) % 8;
...@@ -4467,7 +4472,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0) ...@@ -4467,7 +4472,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0)
$rotpos3 = ($rotpos + 2) % 8; $rotpos3 = ($rotpos + 2) % 8;
$oct_colors[$rotpos3] = ($oct_colors[$rotpos3] + 1) % 8; $oct_colors[$rotpos3] = ($oct_colors[$rotpos3] + 1) % 8;
$itmsk = implode('', $oct_seq).implode('', $oct_colors); $itmsk = implode('', $oct_seq).implode('', $oct_colors);
if ($showlog) if ($showlog)
{ {
$log .= "<br><span class=\"yellow b\">{$itm}</span>八个面的颜色为:<br>"; $log .= "<br><span class=\"yellow b\">{$itm}</span>八个面的颜色为:<br>";
...@@ -4478,7 +4483,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0) ...@@ -4478,7 +4483,7 @@ function octitem_rotate(&$theitem, $rotpos, $showlog = 0)
//$log .= "测试:真实序列为".implode('', $oct_colors); //$log .= "测试:真实序列为".implode('', $oct_colors);
$log .= "<br>"; $log .= "<br>";
} }
//结果检查 //结果检查
$oc_count = count(array_unique($oct_colors)); $oc_count = count(array_unique($oct_colors));
if ($oc_count == 1) if ($oc_count == 1)
......
...@@ -80,9 +80,15 @@ function itemuse($itmn,&$data=NULL) { ...@@ -80,9 +80,15 @@ function itemuse($itmn,&$data=NULL) {
include_once GAME_ROOT.'./include/game/item.synthesis.php'; include_once GAME_ROOT.'./include/game/item.synthesis.php';
include_once GAME_ROOT.'./include/game/item.club_card.php'; include_once GAME_ROOT.'./include/game/item.club_card.php';
include_once GAME_ROOT.'./include/game/item.nachster_booster.php'; include_once GAME_ROOT.'./include/game/item.nachster_booster.php';
include_once GAME_ROOT.'./include/game/item.nouveau_booster1.php';
include_once GAME_ROOT.'./include/game/item.test.php'; include_once GAME_ROOT.'./include/game/item.test.php';
include_once GAME_ROOT.'./include/game/item.other.php'; include_once GAME_ROOT.'./include/game/item.other.php';
// Try to handle with nouveau booster1 items first
if(item_nouveau_booster1($itmn, $data)) {
return;
}
// Delegate to specific item type handlers based on item type code // Delegate to specific item type handlers based on item type code
if(strpos($itmk, 'W') === 0 || strpos($itmk, 'D') === 0 || strpos($itmk, 'A') === 0 || strpos($itmk, 'ss') === 0) { if(strpos($itmk, 'W') === 0 || strpos($itmk, 'D') === 0 || strpos($itmk, 'A') === 0 || strpos($itmk, 'ss') === 0) {
// Weapons and equipment // Weapons and equipment
...@@ -196,11 +202,11 @@ function itemuse($itmn,&$data=NULL) { ...@@ -196,11 +202,11 @@ function itemuse($itmn,&$data=NULL) {
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
// 检查成就 // 检查成就
include_once GAME_ROOT.'./include/game/achievement.func.php'; include_once GAME_ROOT.'./include/game/achievement.func.php';
check_item_achievement_rev($name,$i,$ie,$is,$ik,$isk); check_item_achievement_rev($name,$i,$ie,$is,$ik,$isk);
$mode = 'command'; $mode = 'command';
return; return;
} }
<?php
if(!defined('IN_GAME')) {
exit('Access Denied');
}
/**
* 处理nouveau版本中加入的特殊物品
* 包括鱼篓子等
*
* @param int $itmn 物品在物品栏中的位置
* @param array &$data 玩家数据
* @return bool 是否成功处理
*/
function item_nouveau_booster1($itmn, &$data) {
global $log, $mode, $cmd, $command;
extract($data, EXTR_REFS);
// 如果是选择鱼篓子中的物品
if ($command == 'choose_fish' && isset($clbpara['fish_basket'])) {
// 获取鱼篓子的位置和物品
$basket_position = $clbpara['fish_basket']['position'];
$basket_items = $clbpara['fish_basket']['items'];
// 获取选择的物品索引
$chosen_index = isset($_POST['choose']) ? intval($_POST['choose']) : -1;
if ($chosen_index < 0 || !isset($basket_items[$chosen_index])) {
$log .= '你没有选择任何物品,或者选择的物品不存在。<br>';
$mode = 'command';
$cmd = '';
return true;
}
// 获取选择的物品
$chosen_item = $basket_items[$chosen_index];
// 将物品放入玩家物品栏
global $itm0, $itmk0, $itme0, $itms0, $itmsk0, $itmpara0;
$itm0 = $chosen_item['itm'];
$itmk0 = $chosen_item['itmk'];
$itme0 = $chosen_item['itme'];
$itms0 = $chosen_item['itms'];
$itmsk0 = $chosen_item['itmsk'];
$itmpara0 = isset($chosen_item['itmpara']) ? $chosen_item['itmpara'] : '';
// 从鱼篓子中移除该物品
unset($basket_items[$chosen_index]);
// 重新索引数组
$basket_items = array_values($basket_items);
// 更新鱼篓子
if (empty($basket_items)) {
// 如果鱼篓子为空,移除它
$log .= '你从鱼篓子中取出了<span class="yellow">' . $itm0 . '</span>。<br>';
$log .= '鱼篓子已经空了,你将它丢弃了。<br>';
${'itm'.$basket_position} = '';
${'itmk'.$basket_position} = '';
${'itme'.$basket_position} = 0;
${'itms'.$basket_position} = 0;
${'itmsk'.$basket_position} = '';
${'itmpara'.$basket_position} = '';
} else {
// 更新鱼篓子的内容
${'itme'.$basket_position} = count($basket_items); // 更新容量
${'itms'.$basket_position} = count($basket_items); // 更新已使用空间
${'itmpara'.$basket_position} = json_encode($basket_items, JSON_UNESCAPED_UNICODE);
$log .= '你从鱼篓子中取出了<span class="yellow">' . $itm0 . '</span>。<br>';
$log .= '鱼篓子中还有 ' . count($basket_items) . ' 件物品。<br>';
}
// 清除临时数据
unset($clbpara['fish_basket']);
// 调用物品获取函数
include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget($data);
$mode = 'command';
$cmd = '';
return true;
}
// 如果是打开鱼篓子
$itm = ${'itm' . $itmn};
$itmk = ${'itmk' . $itmn};
$itmsk = ${'itmsk' . $itmn};
$itmpara = ${'itmpara' . $itmn};
if ($itm == '鱼篓子' && $itmk == 'Z' && $itmsk == 'Z') {
// 解析鱼篓子中的物品
$basket_items = json_decode($itmpara, true);
if (!$basket_items || empty($basket_items)) {
$log .= '这个鱼篓子是空的!<br>';
return true;
}
// 设置为特殊模式,显示鱼篓子界面
$mode = 'fish_basket';
$cmd = '';
// 保存鱼篓子的位置,以便后续处理
$clbpara['fish_basket'] = array(
'position' => $itmn,
'items' => $basket_items
);
// 返回 true,表示已经处理了鱼篓子
return true;
}
// 如果没有匹配的物品,返回 false
return false;
}
?>
<?php
if (! defined('IN_GAME')) {
exit('Access Denied');
}
/**
* 处理特殊物品箱
* 这些物品会提供各种随机效果
*
* @param int $itmn 物品在物品栏中的位置
* @param array &$data 玩家数据
*/
function item_special_box($itmn, &$data) {
global $log, $db, $tablepre, $now;
extract($data, EXTR_REFS);
$itm = & ${'itm' . $itmn};
$itmk = & ${'itmk' . $itmn};
$itme = & ${'itme' . $itmn};
$itms = & ${'itms' . $itmn};
$itmsk = & ${'itmsk' . $itmn};
if ($itm == '小叶子的妙妙箱') {
// A multiuse item that will provide various of items for you, mainly traps.
// However, there will be an increasing possibity that this item will self-explode.
// And when it does, there will also be a possibity that you'll lose HP and SP.
// Very low chance of insta-death.
//init itm0.
$itm0 = '';
$itmk0 = '';
$itme0 = 0;
$itms0 = 0;
$itmsk0 = '';
$itmpara = '';
//Par 低维生物's suggestion, the explode-rate will be stored in its $itmsk.
$log.="你下定决心,打开了这个可疑的<span class='yellow'>$itm</span>,开始翻找起来……<br>";
//Getting the item's current self-destruct rate.
$harukaBoxExplodeRate = intval($itmsk);
//Generate a random number based on the user's 1st Yume value.
$harukaBoxCheck = diceroll($clbpara['randver1']);
if ($harukaBoxCheck <= 17){
//Get random low-mid effect trap.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>略微有趣的陷阱</span>的东西!<br>";
$itm0 = '略微有趣的玻璃珠';
$itmk0 = 'TN';
$itme0 = diceroll($clbpara['randver1']);
$itms0 = diceroll(5);
$itmsk0 = '';
}elseif ($harukaBoxCheck <= 23){
//Get random HB item.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>有趣的补给</span>的东西!<br>";
$itm0 = '有趣的零食';
$itmk0 = 'HB';
$itme0 = diceroll($clbpara['randver1']) * diceroll(3);
$itms0 = diceroll(17);
$itmsk0 = 'z';
}elseif ($harukaBoxCheck <= 42){
// Get random mid effect true damage trap.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>精心制作的陷阱</span>的东西!<br>";
$itm0 = '精心制作的玻璃珠阵';
$itmk0 = 'TNt';
$itme0 = diceroll($clbpara['randver2']);
$itms0 = diceroll(5);
$itmsk0 = '';
}elseif ($harukaBoxCheck <= 61){
// Get random high effect trap.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>非常有趣的陷阱</span>的东西!<br>";
$itm0 = '非常有趣的玻璃珠';
$itmk0 = 'TN';
$itme0 = diceroll($clbpara['randver3']);
$itms0 = diceroll(5);
$itmsk0 = '';
}elseif ($harukaBoxCheck <= 80){
// Get random percent damage trap.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>十分强力的陷阱</span>的东西!<br>";
$itm0 = '强而有力的玻璃珠';
$itmk0 = 'TN8';
$itme0 = 1;
$itms0 = diceroll(2);
$itmsk0 = 'x';
}elseif ($harukaBoxCheck <= 109){
// Get high true damage trap.
$log.="你从里面翻找出了看起来能作为<span class='yellow'>精心制作的可怕陷阱</span>的东西!<br>";
$itm0 = '精心制作的可怕玻璃珠阵';
$itmk0 = 'TNt';
$itme0 = diceroll($clbpara['randver3']);
$itms0 = diceroll(5);
$itmsk0 = '';
}else{
// Get Chaos Normal Trap.
$log.="你从里面翻找出了一些<span class='yellow'>不可名状</span>的东西!<br>它似乎可以当作陷阱使用……<br>";
$itm0 = '不可名状之物';
$itmk0 = 'TN';
$itme0 = diceroll(114514);
$itms0 = diceroll(69);
$itmsk0 = '';
}
//Troll the player if itms0 somehow rolled an 0. YSK: I encountered that 4 times in a row.
if ($itms0 == 0){
$log.="然而,<span class='yellow'>$itm0</span>却伴随着一阵少女银铃般的笑声,<br>在你的手上化作一阵青烟消失了!<br>靠!<br>";
$itm0 = '';
$itmk0 = '';
$itme0 = 0;
$itms0 = 0;
$itmsk0 = '';
//Refund some of explode rate.
//$harukaBoxCheck -= 30;
}
//Add to explode rate.
$harukaBoxExplodeRate += $harukaBoxCheck;
if ($harukaBoxExplodeRate < 667){
$log.="<span class='yellow'>妙妙箱不怀好意地颤抖了一下。</span>但最终什么都没发生!<br>";
//Write explode rate back to itmsk.
$itmsk = strval($harukaBoxExplodeRate);
}else{
//BOOM!!
$log.="<span class='yellow'>妙妙箱不怀好意地颤抖了一下。</span>然后华丽地在你的手上炸开了!<br>";
//Destroy this item.
$itm = $itmk = $itmsk = '';
$itme = $itms = 0;
//Also Destroy item0.
$itm0 = $itmk0 = $itmsk0 = '';
$itme0 = $itms0 = 0;
//Get damage.
$harukaBoxDamage = diceroll($clbpara['randver2']) * (diceroll(3) + 1);
//Calculate Damage.
if ($hp < $harukaBoxDamage){
$dflag = diceroll(1024);
if ($dflag > 1020){
//YOU WA SHOCK!!
include_once GAME_ROOT . './include/state.func.php';
$log .= '你在一片火焰中失去了知觉。<br>';
death ( 'event', '', 0, $itm );
}else{
$log .= "你受到了<span class='yellow'>巨大的</span>伤害!你感觉你整个人都要折在这里了!<br>";
$hp = 1;
$sp = 1;
}
}else{
$hp -= $harukaBoxDamage;
$sp -= $harukaBoxDamage;
if ($sp < 1){
$sp = 1;
}
$log .= "你受到了<span class='yellow'>$harukaBoxDamage</span>点伤害!<br>";
$inf .= 'a';
$log .= "你的双手也被炸得血肉模糊!真是不幸啊!<br>";
}
}
}
}
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
} }
# 没有目标击杀,自然死亡时的事件(可能也不是那么“自然”……) # 没有目标击杀,自然死亡时的事件(可能也不是那么“自然”……)
function death($death, $kname = '', $ktype = 0, $annex = '',&$data=NULL) function death($death, $kname = '', $ktype = 0, $annex = '',&$data=NULL)
{ {
global $now, $db, $tablepre, $gtablepre, $alivenum, $deathnum, $killmsginfo, $typeinfo, $weather; global $now, $db, $tablepre, $gtablepre, $alivenum, $deathnum, $killmsginfo, $typeinfo, $weather;
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
$bid = 0; $action = ''; $bid = 0; $action = '';
if (!$death) return; if (!$death) return;
$hp = 0; $hp = 0;
if ($death == 'poison') { if ($death == 'poison') {
$state = 26; $state = 26;
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
} else { } else {
$state = 10; $state = 10;
} }
$killmsg = ''; $killmsg = '';
if ($ktype == 0 && $kname) { if ($ktype == 0 && $kname) {
$result = $db->query ( "SELECT killmsg FROM {$gtablepre}users WHERE username = '$kname'" ); $result = $db->query ( "SELECT killmsg FROM {$gtablepre}users WHERE username = '$kname'" );
...@@ -82,8 +82,8 @@ ...@@ -82,8 +82,8 @@
} }
$dname = $name; $dname = $name;
if (!$type) if (!$type)
{ {
$dname = (!empty($nick) || $nick == 0) ? $nick.'|'.$name : $name; $dname = (!empty($nick) || $nick == 0) ? $nick.'|'.$name : $name;
$alivenum--; $alivenum--;
...@@ -109,10 +109,10 @@ ...@@ -109,10 +109,10 @@
# 执行不需要考虑复活问题的击杀事件: # 执行不需要考虑复活问题的击杀事件:
# 再重复一遍:这里的第一个参数指的是杀人者(敌对方)视角,第二个参数指的是死者(受到伤害者)视角。 # 再重复一遍:这里的第一个参数指的是杀人者(敌对方)视角,第二个参数指的是死者(受到伤害者)视角。
function pre_kill_events(&$pa,&$pd,$active,$death) function pre_kill_events(&$pa,&$pd,$active,$death)
{ {
global $log, $now, $db, $gtablepre, $tablepre, $typeinfo, $lwinfo; global $log, $now, $db, $gtablepre, $tablepre, $typeinfo, $lwinfo;
// 登记死法 // 登记死法
// 传入了数字编号死法 // 传入了数字编号死法
if (is_numeric($death)) { if (is_numeric($death)) {
...@@ -151,7 +151,7 @@ ...@@ -151,7 +151,7 @@
$lastword = is_array($lwinfo[$dtype]) ? $lwinfo[$dtype][$dname] : $lwinfo[$dtype]; $lastword = is_array($lwinfo[$dtype]) ? $lwinfo[$dtype][$dname] : $lwinfo[$dtype];
} }
//初始化玩家遗言 //初始化玩家遗言
else else
{ {
$result = $db->query ( "SELECT lastword FROM {$gtablepre}users WHERE username ='$dname'"); $result = $db->query ( "SELECT lastword FROM {$gtablepre}users WHERE username ='$dname'");
$lastword = $db->result ( $result, 0 ); $lastword = $db->result ( $result, 0 );
...@@ -198,8 +198,8 @@ ...@@ -198,8 +198,8 @@
#奥罗拉复活效果 #奥罗拉复活效果
$revival_flag = 18; //保存复活标记为通过光玉雨复活 $revival_flag = 18; //保存复活标记为通过光玉雨复活
addnews($now,'wth18_revival',$dname,$dnick); addnews($now,'wth18_revival',$dname,$dnick);
$pd['hp'] = max($wth18_obbs,1); $pd['hp'] = max($wth18_obbs,1);
$pd['sp'] = max($wth18_obbs,1); $pd['sp'] = max($wth18_obbs,1);
$pd['state'] = 0; $pd['state'] = 0;
$log.= "<span class=\"lime\">但是,飞舞着的光玉们钻进了{$pd['nm']}的身体,让{$pd['nm']}重新站了起来!</span><br>";; $log.= "<span class=\"lime\">但是,飞舞着的光玉们钻进了{$pd['nm']}的身体,让{$pd['nm']}重新站了起来!</span><br>";;
return $revival_flag; return $revival_flag;
...@@ -216,7 +216,7 @@ ...@@ -216,7 +216,7 @@
#奥罗拉复活效果 #奥罗拉复活效果
$revival_flag = 17; //保存复活标记为通过奥罗拉复活 $revival_flag = 17; //保存复活标记为通过奥罗拉复活
addnews($now,'aurora_revival',$dname,$dnick); addnews($now,'aurora_revival',$dname,$dnick);
$pd['hp'] = max($aurora_dice,1); $pd['hp'] = max($aurora_dice,1);
$pd['sp'] = max($aurora_dice,1); $pd['sp'] = max($aurora_dice,1);
$pd['state'] = 0; $pd['state'] = 0;
$log.= "<span class=\"lime\">但是,空气中弥漫着的奥罗拉让{$pd['nm']}重新站了起来!</span><br>";; $log.= "<span class=\"lime\">但是,空气中弥漫着的奥罗拉让{$pd['nm']}重新站了起来!</span><br>";;
...@@ -225,14 +225,14 @@ ...@@ -225,14 +225,14 @@
} }
# 「涅槃」复活: # 「涅槃」复活:
if (!$revival_flag && isset($pd['skill_c19_nirvana'])) if (!$revival_flag && isset($pd['skill_c19_nirvana']))
{ {
# 「涅槃」复活效果: # 「涅槃」复活效果:
$revival_flag = 'nirvan'; //保存复活标记为通过技能复活 $revival_flag = 'nirvan'; //保存复活标记为通过技能复活
addnews($now,'revival',$dname,$dnick); addnews($now,'revival',$dname,$dnick);
# 添加「涅槃」激活次数 # 添加「涅槃」激活次数
set_skillpara('c19_nirvana','active_t',get_skillpara('c19_nirvana','active_t',$pd['clbpara'])+1,$pd['clbpara']); set_skillpara('c19_nirvana','active_t',get_skillpara('c19_nirvana','active_t',$pd['clbpara'])+1,$pd['clbpara']);
$pd['state'] = 0; $pd['state'] = 0;
$pd['hp'] = 1; $pd['sp'] = 1; $pd['hp'] = 1; $pd['sp'] = 1;
# 将多出的rp转化为生命和防御力 # 将多出的rp转化为生命和防御力
if($pd['rp']) if($pd['rp'])
...@@ -270,7 +270,7 @@ ...@@ -270,7 +270,7 @@
$alivenum --; $alivenum --;
if(!empty($last)) $log .= "<span class='evergreen'>{$pd['nm']}用尽最后的力气喊道:“".$last."”</span><br>"; if(!empty($last)) $log .= "<span class='evergreen'>{$pd['nm']}用尽最后的力气喊道:“".$last."”</span><br>";
} }
else else
{ {
//死者是NPC,加载NPC遗言 //死者是NPC,加载NPC遗言
if(!empty($last)) $log .= npc_chat_rev ($pd,$pa, 'death' ); if(!empty($last)) $log .= npc_chat_rev ($pd,$pa, 'death' );
...@@ -299,7 +299,7 @@ ...@@ -299,7 +299,7 @@
if(!$pa['type']) if(!$pa['type'])
{ {
include_once GAME_ROOT.'./include/game/achievement.func.php'; include_once GAME_ROOT.'./include/game/achievement.func.php';
check_battle_achievement_rev($pa,$pd); check_battle_achievement_rev($pa,$pd);
} }
# 保存游戏进行状态 # 保存游戏进行状态
player_save($pd); player_save($pd);
...@@ -347,8 +347,8 @@ ...@@ -347,8 +347,8 @@
# 快递被劫事件: # 快递被劫事件:
if(isset($pd['clbpara']['post'])) if(isset($pd['clbpara']['post']))
{ {
$log.="<span class='sienna'>某样东西从{$pd['name']}身上掉了出来……</span><br>"; $log.="<span class='sienna'>某样东西从{$pd['name']}身上掉了出来……</span><br>";
//获取快递信息 //获取快递信息
$iid = $pd['clbpara']['postid']; $iid = $pd['clbpara']['postid'];
...@@ -422,7 +422,7 @@ ...@@ -422,7 +422,7 @@
else $sk_lvl = 0; else $sk_lvl = 0;
$sk_att_vars = get_skillvars('c12_bloody','attgain',$sk_lvl); $sk_att_vars = get_skillvars('c12_bloody','attgain',$sk_lvl);
$sk_def_vars = get_skillvars('c12_bloody','defgain',$sk_lvl); $sk_def_vars = get_skillvars('c12_bloody','defgain',$sk_lvl);
$pa['att'] += $sk_att_vars; $pa['def'] += $sk_def_vars; $pa['att'] += $sk_att_vars; $pa['def'] += $sk_def_vars;
$log .= '<span class="yellow">「浴血」使'.$pa['nm'].'的攻击增加了'.$sk_att_vars.'点,防御增加了'.$sk_def_vars.'点!</span><br>'; $log .= '<span class="yellow">「浴血」使'.$pa['nm'].'的攻击增加了'.$sk_att_vars.'点,防御增加了'.$sk_def_vars.'点!</span><br>';
} }
...@@ -449,7 +449,7 @@ ...@@ -449,7 +449,7 @@
return; return;
} }
# 怒气上涨事件 # 怒气上涨事件
function rgup_rev(&$pa,&$pd,$active) function rgup_rev(&$pa,&$pd,$active)
{ {
...@@ -514,7 +514,7 @@ ...@@ -514,7 +514,7 @@
$sk_var = get_skillvars($sk,'rpgain',$sk_lvl); $sk_var = get_skillvars($sk,'rpgain',$sk_lvl);
$rpup = round($rpup*(1-($sk_var/100))); $rpup = round($rpup*(1-($sk_var/100)));
} }
else else
{ {
$sk_var = get_skillvars($sk,'rploss',$sk_lvl); $sk_var = get_skillvars($sk,'rploss',$sk_lvl);
$rpup = round($rpup*(1+($sk_var/100))); $rpup = round($rpup*(1+($sk_var/100)));
...@@ -524,7 +524,7 @@ ...@@ -524,7 +524,7 @@
} }
# 经验上涨事件 # 经验上涨事件
function expup_rev(&$pa,&$pd,$active) function expup_rev(&$pa,&$pd,$active)
{ {
global $log,$baseexp; global $log,$baseexp;
# 攻击命中的情况下,计算获得经验 # 攻击命中的情况下,计算获得经验
...@@ -546,7 +546,7 @@ ...@@ -546,7 +546,7 @@
{ {
$log.='<span class="yellow">「解构」使'.$pa['nm'].'获得了额外'.$sk_up.'点经验!</span><br>'; $log.='<span class="yellow">「解构」使'.$pa['nm'].'获得了额外'.$sk_up.'点经验!</span><br>';
$expup += $sk_up; $expup += $sk_up;
} }
} }
if(!empty($expup)) $pa['exp'] += $expup; if(!empty($expup)) $pa['exp'] += $expup;
//$log .= "$isplayer 的经验值增加 $expup 点<br>"; //$log .= "$isplayer 的经验值增加 $expup 点<br>";
...@@ -554,7 +554,7 @@ ...@@ -554,7 +554,7 @@
//升到下级所需的exp 直接在这里套公式计算 不用global了 //升到下级所需的exp 直接在这里套公式计算 不用global了
$pa['upexp'] = round(($pa['lvl']*$baseexp)+(($pa['lvl']+1)*$baseexp)); $pa['upexp'] = round(($pa['lvl']*$baseexp)+(($pa['lvl']+1)*$baseexp));
if ($pa['exp'] >= $pa['upexp']) if ($pa['exp'] >= $pa['upexp'])
{ {
lvlup_rev ($pa,$pd,$active); lvlup_rev ($pa,$pd,$active);
} }
...@@ -562,12 +562,12 @@ ...@@ -562,12 +562,12 @@
} }
# 等级提升事件 # 等级提升事件
function lvlup_rev(&$pa,&$pd,$active) function lvlup_rev(&$pa,&$pd,$active)
{ {
global $log,$baseexp,$upexp; global $log,$baseexp,$upexp;
if(empty($pa['nm'])) $pa['nm'] = $active ? '你' : $pa['name']; if(empty($pa['nm'])) $pa['nm'] = $active ? '你' : $pa['name'];
$up_exp_temp = round ( (2 * $pa['lvl'] + 1) * $baseexp ); $up_exp_temp = round ( (2 * $pa['lvl'] + 1) * $baseexp );
if ($pa['exp'] >= $up_exp_temp && $pa['lvl'] < 255) if ($pa['exp'] >= $up_exp_temp && $pa['lvl'] < 255)
{ {
$sklanginfo = Array ('wp' => '殴熟', 'wk' => '斩熟', 'wg' => '射熟', 'wc' => '投熟', 'wd' => '爆熟', 'wf' => '灵熟', 'all' => '全系熟练度' ); $sklanginfo = Array ('wp' => '殴熟', 'wk' => '斩熟', 'wg' => '射熟', 'wc' => '投熟', 'wd' => '爆熟', 'wf' => '灵熟', 'all' => '全系熟练度' );
$sknlist = Array (1 => 'wp', 2 => 'wk', 3 => 'wc', 4 => 'wg', 5 => 'wd', 9 => 'wf', 12 => 'all' ); $sknlist = Array (1 => 'wp', 2 => 'wk', 3 => 'wc', 4 => 'wg', 5 => 'wd', 9 => 'wf', 12 => 'all' );
...@@ -577,7 +577,7 @@ ...@@ -577,7 +577,7 @@
$lvup = $lvup > 255 - $pa['lvl'] ? 255 - $pa['lvl'] : $lvup; $lvup = $lvup > 255 - $pa['lvl'] ? 255 - $pa['lvl'] : $lvup;
$lvuphp = $lvupatt = $lvupdef = $lvupskill = $lvupsp = $lvupspref = 0; $lvuphp = $lvupatt = $lvupdef = $lvupskill = $lvupsp = $lvupspref = 0;
//升级数值计算 //升级数值计算
for($i = 0; $i < $lvup; $i += 1) for($i = 0; $i < $lvup; $i += 1)
{ {
if ($pa['club'] == 12) { if ($pa['club'] == 12) {
$lvuphp += rand ( 14, 18 ); $lvuphp += rand ( 14, 18 );
...@@ -592,7 +592,7 @@ ...@@ -592,7 +592,7 @@
$lvupatt += rand ( 2, 4 ); $lvupatt += rand ( 2, 4 );
$lvupdef += rand ( 3, 5 ); $lvupdef += rand ( 3, 5 );
} }
if ($skname == 'all') { if ($skname == 'all') {
$lvupskill += rand ( 2, 4 ); $lvupskill += rand ( 2, 4 );
}elseif ($skname == 'wf') { }elseif ($skname == 'wf') {
...@@ -602,7 +602,7 @@ ...@@ -602,7 +602,7 @@
}elseif($skname){ }elseif($skname){
$lvupskill += rand ( 4, 6 ); $lvupskill += rand ( 4, 6 );
} }
$lvupspref += round($pa['msp'] * 0.1); $lvupspref += round($pa['msp'] * 0.1);
} }
//应用升级 //应用升级
$pa['lvl'] += $lvup; $pa['lvl'] += $lvup;
...@@ -633,7 +633,7 @@ ...@@ -633,7 +633,7 @@
} }
} }
$pa['sp'] = min($lvupspref+$pa['sp'],$pa['msp']); $pa['sp'] = min($lvupspref+$pa['sp'],$pa['msp']);
if ($skname) { if ($skname) {
$sklog = ",{$sklanginfo[$skname]}+{$lvupskill}"; $sklog = ",{$sklanginfo[$skname]}+{$lvupskill}";
} }
...@@ -658,11 +658,11 @@ ...@@ -658,11 +658,11 @@
global $now, $db, $tablepre, $gtablepre; global $now, $db, $tablepre, $gtablepre;
global $alivenum, $deathnum, $name, $w_state, $type, $pid, $typeinfo, $pls, $lwinfo, $w_achievement; global $alivenum, $deathnum, $name, $w_state, $type, $pid, $typeinfo, $pls, $lwinfo, $w_achievement;
global $weather; global $weather;
if (! $death || ! $dname) { if (! $death || ! $dname) {
return; return;
} }
if ($death == 'N') { if ($death == 'N') {
$w_state = 20; $w_state = 20;
} elseif ($death == 'P') { } elseif ($death == 'P') {
...@@ -684,18 +684,18 @@ ...@@ -684,18 +684,18 @@
} else { } else {
$w_state = 10; $w_state = 10;
} }
$killmsg = ''; $killmsg = '';
$result = $db->query ( "SELECT killmsg FROM {$gtablepre}users WHERE username = '$name'" ); $result = $db->query ( "SELECT killmsg FROM {$gtablepre}users WHERE username = '$name'" );
$killmsg = $db->result ( $result, 0 ); $killmsg = $db->result ( $result, 0 );
if (! $dtype) { if (! $dtype) {
//$alivenum = $db->result($db->query("SELECT COUNT(*) FROM {$tablepre}players WHERE hp>0 AND type=0"), 0); //$alivenum = $db->result($db->query("SELECT COUNT(*) FROM {$tablepre}players WHERE hp>0 AND type=0"), 0);
$alivenum --; $alivenum --;
} }
$deathnum ++; $deathnum ++;
if ($dtype) { if ($dtype) {
$lwname = $typeinfo [$dtype] . ' ' . $dname; $lwname = $typeinfo [$dtype] . ' ' . $dname;
if (is_array ( $lwinfo [$dtype] )) { if (is_array ( $lwinfo [$dtype] )) {
...@@ -703,22 +703,22 @@ ...@@ -703,22 +703,22 @@
} else { } else {
$lastword = $lwinfo [$dtype]; $lastword = $lwinfo [$dtype];
} }
$db->query ( "INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('3','$now','$lwname','$pls','$lastword')" ); $db->query ( "INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('3','$now','$lwname','$pls','$lastword')" );
} else { } else {
$lwname = $typeinfo [$dtype] . ' ' . $dname; $lwname = $typeinfo [$dtype] . ' ' . $dname;
$result = $db->query ( "SELECT lastword FROM {$gtablepre}users WHERE username = '$dname'" ); $result = $db->query ( "SELECT lastword FROM {$gtablepre}users WHERE username = '$dname'" );
$lastword = $db->result ( $result, 0 ); $lastword = $db->result ( $result, 0 );
$db->query ( "INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('3','$now','$lwname','$pls','$lastword')" ); $db->query ( "INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('3','$now','$lwname','$pls','$lastword')" );
} }
$result = $db->query("SELECT nick FROM {$tablepre}players WHERE name = '$name' AND type = '$type'"); $result = $db->query("SELECT nick FROM {$tablepre}players WHERE name = '$name' AND type = '$type'");
$knick = $db->result($result, 0); $knick = $db->result($result, 0);
addnews ( $now, 'death' . $w_state, $dname, $dtype, $knick.' '.$name, $annex, $lastword ); addnews ( $now, 'death' . $w_state, $dname, $dtype, $knick.' '.$name, $annex, $lastword );
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid=$dpid" ); $result = $db->query("SELECT * FROM {$tablepre}players WHERE pid=$dpid" );
$res=$db->fetch_array($result); $res=$db->fetch_array($result);
$revivaled=false; $revivaled=false;
//依次判定复活效果 //依次判定复活效果
if (!$revival_flag && $weather == 17) if (!$revival_flag && $weather == 17)
...@@ -732,11 +732,11 @@ ...@@ -732,11 +732,11 @@
addnews($now,'aurora_revival',$res['name']); addnews($now,'aurora_revival',$res['name']);
$res['hp'] += min($res['mhp'],max($aurora_dice,1)); $res['sp'] += min($res['msp'],max($aurora_dice,1)); $res['hp'] += min($res['mhp'],max($aurora_dice,1)); $res['sp'] += min($res['msp'],max($aurora_dice,1));
$res['state']=0; $res['state']=0;
$alivenum++; $alivenum++;
$revival_flag = 17; $revival_flag = 17;
} }
} }
if (!$revival_flag && $res['type']==0 && $res['club']==99 && ($death=="N" || $death=="P" || $death=="K" || $death=="G" || $death=="C" ||$death=="D" || $death=="F" || $death=="J" || $death=="trap")) if (!$revival_flag && $res['type']==0 && $res['club']==99 && ($death=="N" || $death=="P" || $death=="K" || $death=="G" || $death=="C" ||$death=="D" || $death=="F" || $death=="J" || $death=="trap"))
{ {
addnews($now,'revival',$res['name']); //玩家春哥附体称号的处理 addnews($now,'revival',$res['name']); //玩家春哥附体称号的处理
$res['hp'] = $res['mhp']; $res['sp'] = $res['msp']; $res['hp'] = $res['mhp']; $res['sp'] = $res['msp'];
...@@ -796,7 +796,7 @@ ...@@ -796,7 +796,7 @@
$lvupatt += rand ( 2, 4 ); $lvupatt += rand ( 2, 4 );
$lvupdef += rand ( 3, 5 ); $lvupdef += rand ( 3, 5 );
} }
if ($skname == 'all') { if ($skname == 'all') {
$lvupskill += rand ( 2, 4 ); $lvupskill += rand ( 2, 4 );
} elseif ($skname == 'wd' || $skname == 'wf') { } elseif ($skname == 'wd' || $skname == 'wf') {
...@@ -804,7 +804,7 @@ ...@@ -804,7 +804,7 @@
}elseif($skname){ }elseif($skname){
$lvupskill += rand ( 4, 6 ); $lvupskill += rand ( 4, 6 );
} }
$lvupspref += round(${$perfix . 'msp'} * 0.1); $lvupspref += round(${$perfix . 'msp'} * 0.1);
} }
$lvl += $lvup; $lvl += $lvup;
$up_exp_temp = round ( (2 * $lvl + 1) * $baseexp ); $up_exp_temp = round ( (2 * $lvl + 1) * $baseexp );
...@@ -830,10 +830,10 @@ ...@@ -830,10 +830,10 @@
} elseif ($skname) { } elseif ($skname) {
${$perfix . $skname} += $lvupskill; ${$perfix . $skname} += $lvupskill;
} }
if (${$perfix . 'sp'}+$lvupspref >= ${$perfix . 'msp'}) { if (${$perfix . 'sp'}+$lvupspref >= ${$perfix . 'msp'}) {
$lvupspref = ${$perfix . 'msp'} - ${$perfix . 'sp'}; $lvupspref = ${$perfix . 'msp'} - ${$perfix . 'sp'};
} }
${$perfix . 'sp'} += $lvupspref; ${$perfix . 'sp'} += $lvupspref;
if ($skname) { if ($skname) {
...@@ -930,7 +930,7 @@ ...@@ -930,7 +930,7 @@
$log .= "你已经死亡,无法治疗。<br>"; $log .= "你已经死亡,无法治疗。<br>";
return; return;
} }
if ($state == 1) rest_get_tips($resttime); if ($state == 1) rest_get_tips($resttime);
if ($state == 1 || $state == 3) { if ($state == 1 || $state == 3) {
...@@ -941,7 +941,7 @@ ...@@ -941,7 +941,7 @@
$upsp=max(0,$upsp); $upsp=max(0,$upsp);
if(!$upsp && $sp >= $msp) $log .= "已经不需要休息了。"; if(!$upsp && $sp >= $msp) $log .= "已经不需要休息了。";
else $log .= "你的体力恢复了<span class=\"yellow\">$upsp</span>点。"; else $log .= "你的体力恢复了<span class=\"yellow\">$upsp</span>点。";
} }
if ($state == 2 || $state == 3) { if ($state == 2 || $state == 3) {
$oldhp = $hp; $oldhp = $hp;
...@@ -951,7 +951,7 @@ ...@@ -951,7 +951,7 @@
$uphp=max(0,$uphp); $uphp=max(0,$uphp);
if(!$uphp && $hp >= $mhp) $log .= "没有伤口需要治疗了。"; if(!$uphp && $hp >= $mhp) $log .= "没有伤口需要治疗了。";
else $log .= "你的生命恢复了<span class=\"yellow b\">$uphp</span>点。"; else $log .= "你的生命恢复了<span class=\"yellow b\">$uphp</span>点。";
} }
if($state == 3) if($state == 3)
{ {
...@@ -993,21 +993,22 @@ ...@@ -993,21 +993,22 @@
} }
} }
} }
$log .= '<br>'; $log .= '<br>';
if ($command != 'rest') { // 如果命令不是 rest 或 fishing,则退出休息状态
if ($command != 'rest' && $command != 'fishing') {
$state = 0; $state = 0;
$endtime = $now; $endtime = $now;
$mode = 'command'; $mode = 'command';
} }
return; return;
} }
function rest_get_tips($resttime) function rest_get_tips($resttime)
{ {
global $db, $tablepre, $plsinfo, $log; global $db, $tablepre, $plsinfo, $log;
//睡眠时,每隔多少秒获得一条提示 //睡眠时,每隔多少秒获得一条提示
$rest_get_tip_rate = 30; $rest_get_tip_rate = 30;
//睡眠时,一次最多获得多少条提示 //睡眠时,一次最多获得多少条提示
...@@ -1016,7 +1017,7 @@ ...@@ -1016,7 +1017,7 @@
$tip_npctype = array(2,5,6,11,12,13,14,21,24,26,89); $tip_npctype = array(2,5,6,11,12,13,14,21,24,26,89);
//睡眠时会提示的道具名列表 //睡眠时会提示的道具名列表
$tip_itemnamelist = array('肥料', '中药', '火把', '铁锤', '广域生命探测器', '★阔剑地雷★', '毒物说明书', '☆碧藍怒火☆', '☆白楼剑☆', '☆楼观剑☆', '钻石', '宅男装', '萝莉装', '女仆装', '伪娘装', '电子马克笔', '一个能打的都没有', '德国BOY的键盘', '葱娘の葱', '容嬷嬷的针', '新八的眼镜', '新华里的领带', '新华里的西服', '新华里的手表', '新华里的皮鞋', '新华里的投入', '新华里的震撼', '新华里的乱舞', '新华里的手势', '新华里的呐喊', '新华里的眼神', '新华里的增员', '红色方块', '绿色方块', '蓝色方块', '黄色方块', '金色方块', '银色方块', '水晶方块', '黑色方块', '白色方块', 'X方块', 'Y方块', '妹汁', '《BR大逃杀》', '《防身术图解》', '《剑道社教材》', '《枪械杂志》', '《飞镖投掷法》', '《化学课本》', '《太极拳指南》', '【腕力强化剂】', '【皮肤强化剂】', '【神经强化剂】', '【超级战士药剂】', '【肉体强化剂】', '【线粒体强化剂】', '提示纸条E', '提示纸条I', '提示纸条K', '提示纸条N', '弱点探测器', '【北斗百裂拳】', '【狂暴凶刃】', '【盖特机炮】', '幻符【杀人玩偶】', '【泰迪熊炸弹】', '【西方秋霜玉】', '预言挂坠', '【紫棠花色波纹疾走】', '弱爆了!', '《哲♂学》', '★全图唯一的野生巨大香蕉★', '残存的礼品盒', '残存的结婚喜糖-红', '残存的结婚喜糖-橙', '残存的结婚喜糖-黄', '残存的结婚喜糖-绿', '残存的结婚喜糖-青', '残存的结婚喜糖-蓝', '残存的结婚喜糖-紫', '糖衣炮弹-红', '糖衣炮弹-橙', '糖衣炮弹-黄', '糖衣炮弹-绿', '糖衣炮弹-青', '糖衣炮弹-蓝', '糖衣炮弹-紫', '密封的酒瓶', '音乐录像', '五线乐谱', '葱娘肉包', 'V家蔬菜汁', '破旧录音机', '神奇的八音盒', '魂之结晶', '歌手之魂', '【Alicemagic】', '【Crow Song】', '「奥西里斯之天空龙」-仮', '「欧贝利斯克之巨神兵」-仮', '「太阳神之翼神龙」-仮', '【流星一条】', '杨叔的眼镜', '蓝蓝路的大鞋', '动感超人手表', 'MIKU的内裤', '■DeathNote■', '■魔剑-雷瓦丁■', '★Unlimited Blade Works★', '★Unlimited Code Works★', '《ACFUN大逃杀攻略》', '《北斗神拳》', '《寒蝉鸣泣之时》', '《魔法少女奈叶》', '《网球王子》', '《新机动战记高达W》', '《东方永夜抄》', '【触手的萃取液】', '【圣防护罩-反射之力】', '【金蚕王】', '【我已经天下无敌了!】', '【残机碎片】', '【S2机关】', '【宇航服】', '【楼主头】', '【哥哥鞋】', '受王拳', '★闪光迎击神话★', '鲜红的生血', '《东方幻想乡》', '★I-力场★', '奇怪的按钮', '【主角光环】', '【测试用具】', '驱云弹'); $tip_itemnamelist = array('肥料', '中药', '火把', '铁锤', '广域生命探测器', '★阔剑地雷★', '毒物说明书', '☆碧藍怒火☆', '☆白楼剑☆', '☆楼观剑☆', '钻石', '宅男装', '萝莉装', '女仆装', '伪娘装', '电子马克笔', '一个能打的都没有', '德国BOY的键盘', '葱娘の葱', '容嬷嬷的针', '新八的眼镜', '新华里的领带', '新华里的西服', '新华里的手表', '新华里的皮鞋', '新华里的投入', '新华里的震撼', '新华里的乱舞', '新华里的手势', '新华里的呐喊', '新华里的眼神', '新华里的增员', '红色方块', '绿色方块', '蓝色方块', '黄色方块', '金色方块', '银色方块', '水晶方块', '黑色方块', '白色方块', 'X方块', 'Y方块', '妹汁', '《BR大逃杀》', '《防身术图解》', '《剑道社教材》', '《枪械杂志》', '《飞镖投掷法》', '《化学课本》', '《太极拳指南》', '【腕力强化剂】', '【皮肤强化剂】', '【神经强化剂】', '【超级战士药剂】', '【肉体强化剂】', '【线粒体强化剂】', '提示纸条E', '提示纸条I', '提示纸条K', '提示纸条N', '弱点探测器', '【北斗百裂拳】', '【狂暴凶刃】', '【盖特机炮】', '幻符【杀人玩偶】', '【泰迪熊炸弹】', '【西方秋霜玉】', '预言挂坠', '【紫棠花色波纹疾走】', '弱爆了!', '《哲♂学》', '★全图唯一的野生巨大香蕉★', '残存的礼品盒', '残存的结婚喜糖-红', '残存的结婚喜糖-橙', '残存的结婚喜糖-黄', '残存的结婚喜糖-绿', '残存的结婚喜糖-青', '残存的结婚喜糖-蓝', '残存的结婚喜糖-紫', '糖衣炮弹-红', '糖衣炮弹-橙', '糖衣炮弹-黄', '糖衣炮弹-绿', '糖衣炮弹-青', '糖衣炮弹-蓝', '糖衣炮弹-紫', '密封的酒瓶', '音乐录像', '五线乐谱', '葱娘肉包', 'V家蔬菜汁', '破旧录音机', '神奇的八音盒', '魂之结晶', '歌手之魂', '【Alicemagic】', '【Crow Song】', '「奥西里斯之天空龙」-仮', '「欧贝利斯克之巨神兵」-仮', '「太阳神之翼神龙」-仮', '【流星一条】', '杨叔的眼镜', '蓝蓝路的大鞋', '动感超人手表', 'MIKU的内裤', '■DeathNote■', '■魔剑-雷瓦丁■', '★Unlimited Blade Works★', '★Unlimited Code Works★', '《ACFUN大逃杀攻略》', '《北斗神拳》', '《寒蝉鸣泣之时》', '《魔法少女奈叶》', '《网球王子》', '《新机动战记高达W》', '《东方永夜抄》', '【触手的萃取液】', '【圣防护罩-反射之力】', '【金蚕王】', '【我已经天下无敌了!】', '【残机碎片】', '【S2机关】', '【宇航服】', '【楼主头】', '【哥哥鞋】', '受王拳', '★闪光迎击神话★', '鲜红的生血', '《东方幻想乡》', '★I-力场★', '奇怪的按钮', '【主角光环】', '【测试用具】', '驱云弹');
$get_tips_count = floor($resttime / $rest_get_tip_rate); $get_tips_count = floor($resttime / $rest_get_tip_rate);
if (rand(0,99) < $resttime) $get_tips_count += 1;//奖励骰 if (rand(0,99) < $resttime) $get_tips_count += 1;//奖励骰
$get_tips_count = min($get_tips_count, $rest_get_tip_max); $get_tips_count = min($get_tips_count, $rest_get_tip_max);
...@@ -1102,7 +1103,7 @@ ...@@ -1102,7 +1103,7 @@
$log .= implode('',$tips); $log .= implode('',$tips);
} }
} }
function array_randompick($arr, $num=1) function array_randompick($arr, $num=1)
{ {
$array_rand = array_rand($arr, $num); $array_rand = array_rand($arr, $num);
......
<form method="post" name="gamecmd" onsubmit="return false;">
<input type="hidden" id="mode" name="mode" value="command">
<input type="hidden" id="command" name="command" value="choose_fish">
<div class="subtitle">鱼篓子</div>
<div class="fish-basket-content">
你打开了鱼篓子,里面有以下物品:<br>
<!--{loop $clbpara['fish_basket']['items'] $index $item}-->
<input type='radio' name='choose' value='{$index}'>
<span class='yellow'>{$item['itm']}</span>
<!--{if !empty($item['itmsk'])}-->
<!--{loop $item['itmsk'] $attr}-->
<!--{if isset($itemspkinfo[$attr])}-->
{$itemspkinfo[$attr]}、
<!--{/if}-->
<!--{/loop}-->
<!--{/if}-->
- {$iteminfo[$item['itmk']]} {$item['itme']}<br>
<!--{/loop}-->
<br>
请选择一个物品取出:<br>
<input type="button" class="cmdbutton" value="取出选中物品" onclick="if(document.querySelector('input[name=choose]:checked')) { postCmd('gamecmd','command.php');this.disabled=true; } else { alert('请选择一个物品!'); }">
<input type="button" class="cmdbutton" value="返回" onclick="$('command').value='';$('mode').value='command';postCmd('gamecmd','command.php');this.disabled=true;">
</div>
</form>
你正在{$plsinfo[$pls]}钓鱼,同时{$restinfo[$state]}中...<br>
<span class="yellow">已钓到 {$fishing_count} 个物品</span><br>
<input type="hidden" id="mode" name="mode" value="fishing">
<input type="hidden" id="command" name="command" value="rest">
<input type="button" class="cmdbutton" id="zz" name="rest" value="[Z]继续钓鱼" onclick="postCmd('gamecmd','command.php');this.disabled=true;">
<input type="button" class="cmdbutton" id="x" name="back" value="[X]结束钓鱼" onclick="$('command').value='back';postCmd('gamecmd','command.php');this.disabled=true;">
...@@ -2,4 +2,7 @@ $restinfo[$state] 中。。。<br> ...@@ -2,4 +2,7 @@ $restinfo[$state] 中。。。<br>
<input type="hidden" id="mode" name="mode" value="rest"> <input type="hidden" id="mode" name="mode" value="rest">
<input type="hidden" id="command" name="command" value="rest"> <input type="hidden" id="command" name="command" value="rest">
<input type="button" class="cmdbutton" id="zz" name="rest" value="[Z]{$restinfo[$state]}" onclick="postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" id="zz" name="rest" value="[Z]{$restinfo[$state]}" onclick="postCmd('gamecmd','command.php');this.disabled=true;">
<input type="button" class="cmdbutton" id="x" name="back" value="[X]返回" onclick="$('command').value='back';postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" id="x" name="back" value="[X]返回" onclick="$('command').value='back';postCmd('gamecmd','command.php');this.disabled=true;">
\ No newline at end of file <!--{if in_array($pls, array(1, 2, 3, 4, 5, 6, 9))}-->
<input type="button" class="cmdbutton" id="f" name="fishing" value="[F]钓鱼" onclick="$('command').value='fishing';postCmd('gamecmd','command.php');this.disabled=true;">
<!--{/if}-->
\ No newline at end of file
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