Commit a610652e authored by hisuinohoshi's avatar hisuinohoshi

rev combat phase 4.0

变化:
- 怒气技能:
新增「富家子弟」怒气技能;
- 新机制:协战——地图内存在盟友单位、你主动攻击敌人时且敌人未死亡时,与你同地图的盟友单位有概率与你一起连携攻击;
- 执行官现在固定刷新在指挥中心、梦幻馆与常磐台中学;
- 奇迹:奇迹属性现在可能会对一些属性起到强化效果;

修正:
- 偶尔会在死亡界面看到不存在的凶手的问题;

开发相关:
- action与bid字段现在共同运作,action字段内只能保存动作,在bid内保存对象的pid;
- NPC帮助现在支持显示没有填写过介绍文本的NPC,此外,介绍文本可以直接写在对应NPC配置内了;
parent a4beeeca
......@@ -104,9 +104,9 @@ if($hp > 0){
}
//执行动作前,身上存在追击标记时,直接进入追击判定
if((strpos($action,'chase')!==false || strpos($action,'dfight')!==false) && $mode !== 'revcombat')
if(!empty($action) && in_array($action,Array('chase','pchase','dfight','cover')) && $mode !== 'revcombat')
{
$command = 'chase';
$command = $action;
goto chase_flag;
}
//执行动作前检查是否有无法跳过且未阅览过的对话框
......@@ -126,8 +126,8 @@ if($hp > 0){
$command = 'itemmain';
$itemcmd = 'itemmix';
}
if(strpos($action,'chase')===false && strpos($action,'dfight')===false && $mode !== 'combat' && $mode !== 'revcombat' && $mode !== 'corpse' && strpos($action,'pacorpse')===false && $mode !== 'senditem'){
$action = '';
if($action != 'chase' && $action != 'dfight' && $mode !== 'combat' && $mode !== 'revcombat' && $mode !== 'corpse' && $action != 'pacorpse' && $mode !== 'senditem'){
$action = ''; $bid = 0;
}
if($command == 'menu') {
$mode = 'command';
......@@ -307,7 +307,7 @@ if($hp > 0){
include_once GAME_ROOT.'./include/game/search.func.php';
focus_item($pdata,$iid);
}else{
$action = 'focus'.$iid; $command = 'focus';
$action = 'focus'; $bid = $iid; $command = 'focus';
goto chase_flag;
}
}
......@@ -481,81 +481,9 @@ if($hp > 0){
combat(1,$command);
} elseif($mode == 'revcombat'){
chase_flag:
$enemyid = NULL;
if(strpos($action,'enemy')===0) $enemyid = str_replace('enemy','',$action);
if(strpos($action,'chase')===0) $enemyid = str_replace('chase','',$action);
if(strpos($action,'pchase')===0) $enemyid = str_replace('pchase','',$action);
if(strpos($action,'dfight')===0) $enemyid = str_replace('dfight','',$action);
if(strpos($action,'focus')===0) $enemyid = str_replace('focus','',$action);
if(!$enemyid)
{
$log .= "<span class=\"yellow b\">你没有遇到敌人,或已经离开战场!</span>{$enemyid}<br>";
goto back_flag;
}
$result = $db->query ( "SELECT * FROM {$tablepre}players WHERE pid='$enemyid'" );
if (! $db->num_rows ( $result )) {
$log .= "对方不存在!<br>";
goto back_flag;
}
$edata = $db->fetch_array($result);
if ($edata ['pls'] != $pls)
{
$log .= "<span class=\"yellow b\">" . $edata ['name'] . "</span>已经离开了<span class=\"yellow b\">$plsinfo[$pls]</span>。<br>";
goto back_flag;
}
include_once GAME_ROOT.'./include/game/revbattle.func.php';
include_once GAME_ROOT.'./include/game/revcombat.func.php';
if(!empty($edata['clbpara']['lasttimes'])) $edata = check_skilllasttimes($edata);
if ($edata ['hp'] <= 0)
{
if(strpos($action,'focus')===false) $log .= "<span class=\"red b\">" . $edata ['name'] . "</span>已经死亡,不能被攻击。<br>";
include_once GAME_ROOT . './include/game/battle.func.php';
$action = 'corpse'.$edata['pid'];
findcorpse($edata);
}
elseif ($command == 'changewep')
{
change_wep_in_battle();
findenemy_rev($edata);
}
elseif ($command == 'chase')
{
findenemy_rev($edata);
}
elseif ($command == 'back')
{
//$log .= "你逃跑了。";
$flag = escape_from_enemy($pdata,$edata);
if($flag)
{
back_flag:
$mode = 'command';
}
else
{
rev_combat_prepare($pdata,$edata,0);
}
}
elseif ($command == 'focus')
{
// 迎战视野中的敌人先制率-40
$active_r = min(4,get_active_r_rev($pdata,$edata)-40);
$active_dice = diceroll(99);
if($active_dice < $active_r){
$action = 'enemy'.$edata['pid'];
findenemy_rev($edata);
}else {
rev_combat_prepare($edata,$pdata,0);
}
}
else
{
if(!empty($message)) $pdata['message'] = $message;
include_once GAME_ROOT . './include/game/revcombat.func.php';
rev_combat_prepare($pdata,$edata,1,$command);
}
if(!isset($message)) $message = '';
revbattle_prepare($command,$message);
} elseif($mode == 'rest') {
include_once GAME_ROOT.'./include/state.func.php';
rest($command);
......@@ -574,7 +502,7 @@ if($hp > 0){
if ($command=="teamjoin") teamjoin($nteamID,$nteamPass);
if ($command=="teamquit") teamquit($nteamID,$nteamPass);
} elseif($mode == 'shop') {
if(in_array($pls,$shops)){
if(in_array($pls,$shops) || !check_skill_unlock('c11_ebuy',$pdata)){
if($command == 'shop') {
$mode = 'sp_shop';
} else {
......@@ -649,15 +577,22 @@ if($hp > 0){
upgclbskills($sk);
}
} elseif(strpos($command,'swtskill_')!==false) {
if(isset($upgpara) && isset($cskills[$sk]['choice']) && in_array($upgpara,$cskills[$sk]['choice'])) {
switchclbskills($sk,$upgpara);
if(isset(${$sk.'upgpara'}) && isset($cskills[$sk]['choice']) && in_array(${$sk.'upgpara'},$cskills[$sk]['choice'])) {
switchclbskills($sk,${$sk.'upgpara'});
}
} elseif(strpos($command,'actskill_')!==false) {
# 其他特殊技能按钮
include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php';
if($sk == 'c1_veteran') skill_c1_veteran_act($c1_veteran_choice);
elseif($sk == 'c4_roar' || $sk == 'c4_sniper') skill_c4_unlock($sk);
if($sk == 'c4_roar' || $sk == 'c4_sniper'){skill_c4_unlock($sk);}
elseif($sk == 'c11_merc'){
if(isset(${$sk.'mkey'}) && isset(${$sk.'fire'}) && ${$sk.'fire'} == ${$sk.'mkey'}){
skill_merc_fire($sk,${$sk.'mkey'});
} elseif(isset(${$sk.'mkey'}) && isset(${$sk.'chase'})){
skill_merc_chase($sk,${$sk.'mkey'});
} elseif(isset(${$sk.'mkey'}) && isset(${$sk.${$sk.'mkey'}.'moveto'})){
skill_merc_move($sk,${$sk.'mkey'},${$sk.${$sk.'mkey'}.'moveto'});
}
}
}
}
$mode = 'command';
......@@ -670,11 +605,11 @@ if($hp > 0){
$mode = 'command';
}
if(strpos($action,'pacorpse')===0 && $gamestate < 40){
if($action == 'pacorpse' && $gamestate < 40){
// if($state == 1 || $state == 2 || $state ==3){
// $state = 0;
// }
$cid = str_replace('pacorpse','',$action);
$cid = $bid;
if($cid){
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$cid' AND hp=0");
if($db->num_rows($result)>0){
......
......@@ -92,8 +92,8 @@ if($hp <= 0){
}
$command = 'enter';
$cmd = $main = '';
if((strpos($action,'corpse')===0 || strpos($action,'pacorpse')===0) && $gamestate<40){
$cid = strpos($action,'corpse')===0 ? str_replace('corpse','',$action) : str_replace('pacorpse','',$action);
if($action == 'corpse' || $action == 'pacorpse' && $gamestate<40){
$cid = $bid;
if($cid){
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$cid' AND hp=0");
if($db->num_rows($result)>0){
......@@ -106,10 +106,8 @@ if((strpos($action,'corpse')===0 || strpos($action,'pacorpse')===0) && $gamestat
}
}
}
elseif(strpos($action,'chase')!==false || strpos($action,'dfight')!==false){
if(strpos($action,'chase')===0) $enemyid = str_replace('chase','',$action);
if(strpos($action,'pchase')===0) $enemyid = str_replace('pchase','',$action);
if(strpos($action,'dfight')===0) $enemyid = str_replace('dfight','',$action);
elseif($action == 'chase' || $action == 'pchase' || $action == 'dfight'){
$enemyid = $bid;
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$enemyid' AND hp>0 AND pls='$pls'");
if($db->num_rows($result)>0){
$edata = $db->fetch_array($result);
......@@ -118,8 +116,8 @@ elseif(strpos($action,'chase')!==false || strpos($action,'dfight')!==false){
$main = 'battle_rev';
}
}
elseif((strpos($action,'neut')===0)){
$nid = str_replace('neut','',$action);
elseif($action == 'neut'){
$nid = $bid;
if($nid){
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$nid' AND hp>0");
if($db->num_rows($result)>0){
......
This diff is collapsed.
......@@ -16,7 +16,7 @@ $club_skillslist = Array
8 => Array('s_hp','s_ad','f_heal','c8_expert','c8_infilt','c8_catalyst','c8_deadheal','c8_assassin'), #'黑衣组织',
9 => Array('s_hp','s_ad','f_heal','c9_spirit','c9_lb','c9_iceheart','c9_charge','c9_heartfire'), #'超能力者',
10 => Array('s_hp','s_ad','f_heal','c10_inspire','c10_insight','c10_decons'), #'天赋异禀', //高速成长与天赋异禀合并为天赋异禀
11 => Array('s_hp','s_ad','f_heal'), #'富家子弟',
11 => Array('s_hp','s_ad','f_heal','c11_ebuy','c11_merc','c11_stock','c11_renjie'), #'富家子弟',
12 => Array('s_hp','s_ad','f_heal','c12_huge','c12_enmity','c12_garrison','c12_rage','c12_bloody','c12_swell'), #'全能兄贵', //根性兄贵、肌肉兄贵、全能骑士合并为全能兄贵
//13 => Array('s_hp','s_ad','f_heal'), #'根性兄贵',
//14 => Array('s_hp','s_ad','f_heal'), #'肌肉兄贵',
......@@ -1481,6 +1481,97 @@ $cskills = Array
'lvl' => '[:lvl:] >= 3',
),
),
'c11_ebuy' => Array
(
'name' => '网购',
'tags' => Array('passive'),
'desc' => '你可以在任意地图访问商店',
),
'c11_tutor' => Array
(
'name' => '家教', //不太合适
'tags' => Array('active'),
'desc' => "通过培训机构<span class='yellow'>随机</span>学习一个<span class='yellow'>技能</span><br>
(可能会重复获得)",
'input' => '学习',
'log' => '……<br>',
'events' => Array('inspire'),
),
'c11_merc' => Array
(
'name' => '佣兵',
'tags' => Array('active','limit'),
'desc' => "本局已发动<span class=\"redseed\"> [^skillpara|c11_merc-active_t^]/[:maxactive_t:] </span>次<br>
消耗<span class='yellow'>[:mcost:]</span>元,在当前地点随机召唤一名佣兵;<br>
雇佣关系存在时,你可以指挥佣兵<span class='gold' tooltip2='遭遇敌人时,可花费一定金钱命令与你在同一地点的佣兵主动攻击敌人,佣兵主动攻击敌人后会【标记】敌人。【标记】在你或佣兵离开地图前将一直存在,存在时可通过佣兵面板继续对佣兵下达【追击】指令。'>主动出击</span>,
或从旁<span class='gold' tooltip2='当你攻击敌人且敌人未死亡时,与你在同一地点的佣兵有概率主动为你助战,概率取决于佣兵与你的关系。'>协战</span>;<br>
被雇佣后,佣兵会在你累计探索/移动次数达<span class='yellow'>[:mst:]</span>次时要求结算一次工资<br>
被拖欠工资的佣兵不会再为你服务(可能会暴力讨薪)<br>",
'input' => '雇佣',
'no_reload_page' => 1,
'log' => '……这是个啥呀!<br>',
'status' => Array('skillpara|c11_merc-active_t'),
'effect' => Array(
0 => Array('skillpara|c11_merc-active_t' => '+=::1',),
),
'events' => Array('hiremerc','active_news'),
'svars' => Array(
'active_t' => 0,
),
'vars' => Array(
'mcost' => 2000,
'mst' => 25,
'movep' => 2, //移动佣兵花费
'atkp' => 10, //主动出击花费
'maxactive_t' => 4,
),
'pvars' => Array(
'lvl',
'skillpara|c11_merc-active_t',
),
'lockdesc' => Array(
'skillpara|c11_merc-active_t' => '次数耗尽,已无法再召唤佣兵',
'money' => '招募佣兵至少需要2000元!',
),
'unlock' => Array(
'skillpara|c11_merc-active_t' => '[:skillpara|c11_merc-active_t:] < 4',
'money' => '[:money:] >= 2000',
),
),
'c11_stock' => Array
(
'name' => '理财',
'tags' => Array('passive'),
'desc' => "每探索/移动<span class='yellow'>[:mst:]</span>次,你所持金钱增加<span class='yellow'>[:earn:]%</span>;<br>
所加金钱数最低不会低于<span class='yellow'>[:minmoney:]</span>元,最高不会超过<span class='yellow'>[:maxmoney:]</span>元<br>
<span class='grey'>当前已探索/移动次数:[^skillpara|c11_stock-ms^] 次</span>",
'svars' => Array('ms' => 0),
'vars' => Array(
'mst' => 50,
'earn' => 20,
'minmoney' => 100,
'maxmoney' => 2500,
),
'pvars' => Array('lvl','skillpara|c11_stock-ms'),
'lockdesc' => Array(
'lvl' => '7级时解锁',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 7',
),
),
'c11_renjie' => Array
(
'name' => '人杰',
'tags' => Array('passive'),
'desc' => "战斗中,你的熟练度始终取用最高熟练值。",
'lockdesc' => Array(
'lvl' => '19级时解锁',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 19',
),
),
'c12_huge' => Array
(
'name' => '瞩目',
......
......@@ -168,12 +168,12 @@ EOT;
$antimeta = <<<EOT
随机数之神的庇佑,Z,1,1,Zz
随机数之神的神力,WC,88888,888,ZR,
随机数之神的震撼,WD,88888,888,ZRd,
随机数之神的神力,WC,88888,888,ZRx,
随机数之神的震撼,WD,88888,888,ZRdx,
随机数之神的恶戏,TN8,8,88888,Z,
随机数之神的摄理,WF,88888,888,ZR,
随机数之神的泪水,WG,88888,888,ZR,
随机数之神的圣剑,WK,88888,888,ZR,
随机数之神的棍棒,WP,88888,888,ZR,
随机数之神的摄理,WF,88888,888,ZRx,
随机数之神的泪水,WG,88888,888,ZRx,
随机数之神的圣剑,WK,88888,888,ZRx,
随机数之神的棍棒,WP,88888,888,ZRx,
EOT;
?>
\ No newline at end of file
......@@ -39,6 +39,6 @@ $itmhigh = <<<EOT
EOT;
$antimeta = <<<EOT
随机数之神的神力,WC,88888,888,ZR,
随机数之神的神力,WC,88888,888,ZRx,
EOT;
?>
\ No newline at end of file
......@@ -39,7 +39,7 @@ $itmhigh = <<<EOT
EOT;
$antimeta = <<<EOT
随机数之神的震撼,WD,88888,888,ZRd,
随机数之神的震撼,WD,88888,888,ZRdx,
随机数之神的恶戏,TN8,8,88888,Z,
EOT;
?>
\ No newline at end of file
......@@ -34,6 +34,6 @@ $itmhigh = <<<EOT
EOT;
$antimeta = <<<EOT
随机数之神的摄理,WF,88888,888,ZR,
随机数之神的摄理,WF,88888,888,ZRx,
EOT;
?>
\ No newline at end of file
......@@ -39,6 +39,6 @@ $itmhigh = <<<EOT
EOT;
$antimeta = <<<EOT
随机数之神的泪水,WG,88888,888,ZR,
随机数之神的泪水,WG,88888,888,ZRx,
EOT;
?>
\ No newline at end of file
......@@ -39,6 +39,6 @@ $itmhigh = <<<EOT
EOT;
$antimeta = <<<EOT
随机数之神的圣剑,WK,88888,888,ZR,
随机数之神的圣剑,WK,88888,888,ZRx,
EOT;
?>
\ No newline at end of file
......@@ -39,6 +39,6 @@ $itmhigh = <<<EOT
EOT;
$antimeta = <<<EOT
随机数之神的棍棒,WP,88888,888,ZR,
随机数之神的棍棒,WP,88888,888,ZRx,
EOT;
?>
\ No newline at end of file
......@@ -18,6 +18,21 @@ $mltwk = '泛用兵器';
//■ 多重属性 ■
//$mltspk = '多重属性';
// action中对应值的含义,这个数组本身暂时没有实际作用
$action_list = Array
(
'enemy', //遇敌时获得 代表遭遇了敌人 bid为敌人id
'corpse', //遭遇尸体或击杀敌人获得 bid为尸体id;重载界面时,如果有此标记会显示发现尸体
'pacorpse', //通过反击击杀敌人获得 bid为尸体idd;重载界面时,如果有此标记会显示发现尸体
'focus', //通过视野功能再次遇敌时获得 bid为视野中的对象id
'team', //发现队友时获得 bid为队友id
'neut', //发现中立单位时获得 bid为中立单位id
'chase', //追击NPC敌人时获得 bid为被追击单位id
'pchase', //被NPC敌人追击时获得 bid为追击单位id
'dfight', //与NPC敌人缠斗时获得 bid为缠斗对象id
'cover', //通过协战夹击敌人时获得 bid为敌人id,协战者id保存在自己身上
'pcover', //被敌人的协战者夹击时获得 bid为敌人协战者的id
);
//游戏状态描述
$gstate = Array(0 => '<font color="grey">已结束</font>',10 => '即将开始',20 => '开放激活',30 => '停止激活',40=> '<font color="yellow">连斗中</font>',50=>'<font color="red">死斗中</font>',60=>'<font color="red">紧急状态!</font>');
......@@ -37,7 +52,7 @@ $clubinfo = Array(
//10=>'高速成长', //天赋异禀与高速成长合并
10=>'天赋异禀',
11=>'富家子弟',
12=>'全能骑士', //根性兄贵、肌肉兄贵、全能骑士合并为全能兄贵
12=>'全能兄贵', //根性兄贵、肌肉兄贵、全能骑士合并为全能兄贵
//13=>'根性兄贵',
//14=>'肌肉兄贵',
15=>'<span class="L5">L5状态</span>',
......@@ -111,6 +126,7 @@ $typeinfo = Array(
22=>'天神',
23=>'使徒',
24=>'巫师',
25=>'佣兵',
88=>'■■',
89=>'残像回声',
90=>'各路党派',
......@@ -1216,7 +1232,7 @@ $tps_isk = Array
'W' => Array('title' => "高概率将音波属性对你的属性伤害减半。并避免混乱状态。",),
'w' => Array('title' => "攻击对手时,将产生额外的音波属性伤害。也有可能让对手陷入混乱异常状态。",),
'X' => Array('title' => "可能会一击必杀。",),
'x' => Array('title' => "人类,可以挑战神么?",),
'x' => Array('title' => "人类,可以挑战神么?"),
'y' => Array('title' => "攻击对手时,一定几率无效属性抹消类与属性防御类属性,并增加让对手陷入异常状态的概率。",),
'Z' => Array('title' => "该物品可以使用特定物品进行强化。",),
'z' => Array('title' => "那么,这个有什么用呢……?",),
......
......@@ -19,7 +19,6 @@ CREATE TABLE bra_players (
validtime int(10) unsigned NOT NULL default '0',
deathtime int(10) unsigned NOT NULL default '0',
cmdnum int unsigned NOT NULL default '0',
achievement text NOT NULL default '',
nick text NOT NULL default '',
nicks text NOT NULL default '',
skillpoint smallint unsigned NOT NULL default '0',
......@@ -28,6 +27,7 @@ CREATE TABLE bra_players (
cdmsec smallint(3) unsigned NOT NULL default '0',
cdtime int(10) unsigned NOT NULL DEFAULT '0',
action char(12) NOT NULL default '',
bid smallint unsigned NOT NULL default '0',
hp int(10) unsigned NOT NULL DEFAULT '0',
mhp int(10) unsigned NOT NULL DEFAULT '0',
sp int(10) unsigned NOT NULL DEFAULT '0',
......@@ -42,7 +42,6 @@ CREATE TABLE bra_players (
`exp` smallint unsigned NOT NULL default '0',
money int(10) unsigned NOT NULL DEFAULT '0',
rp int(10) unsigned NOT NULL DEFAULT '0',
bid smallint unsigned NOT NULL default '0',
`inf` char(10) not null default '',
rage tinyint unsigned NOT NULL default '0',
pose tinyint(1) unsigned NOT NULL default '0',
......
......@@ -14,29 +14,29 @@ $ovlfile = config('overlay',$gamecfg);
$presentfile = config('present',$gamecfg);
$boxfile = config('box',$gamecfg);
$vnmixfile = config('vnmixitem',$gamecfg);
include_once $mixfile;
include_once $vnmixfile;
include $mixfile;
include $vnmixfile;
$writefile = GAME_ROOT.TPLDIR.'/mixhelp.htm';
include_once config('npc',$gamecfg);
include_once config('addnpc',$gamecfg);
include_once config('evonpc',$gamecfg);
include config('npc',$gamecfg);
include config('addnpc',$gamecfg);
include config('evonpc',$gamecfg);
//for ($i=0; $i<=20; $i++) $p[$i]=$i; //???
for ($i=1; $i<=6; $i++) $itemlst[$i]=$i;
# 将evonpc加入npc队列
foreach($enpcinfo as $ekey => $enpcs)
{
foreach($enpcs as $sname => $enpc)
{
$npcinfo[$ekey]['esub'][$sname] = $enpc;
}
# evonpc在npcinfo中一定会有大类 所以只加入子类别
foreach($enpcs as $sname => $enpc) $npcinfo[$ekey]['esub'][$sname] = $enpc;
}
# 将addnpc加入npc队列
foreach($anpcinfo as $akey => $anpcs)
{
foreach($anpcs['sub'] as $aid => $anpc)
{
$npcinfo[$akey]['asub'][$aid] = $anpc;
}
# 如果npc队列中没有该addnpc大类,则先加入大类
if(!isset($npcinfo[$akey])) $npcinfo[$akey] = $anpcs;
# 之后遍历每个子类addnpc,依次加入
foreach($anpcs['sub'] as $aid => $anpc) $npcinfo[$akey]['asub'][$aid] = $anpc;
}
$npcinfo = get_npc_helpinfo($npcinfo);
//print_r($npcinfo[14]['esub']);
......@@ -56,6 +56,7 @@ $ty10[1]=21;
$ty11[1]=89;
$ty11e[1]=Array(89,'esub'); #电掣NPC第二形态情报
$ty12[1]=24;
$ty25a[1] = Array(25,'asub'); #佣兵NPC
if(filemtime($vnmixfile) > filemtime($writefile) ||filemtime($mixfile) > filemtime($writefile) || filemtime($shopfile) > filemtime($writefile) || filemtime($mapitemfile) > filemtime($writefile) || filemtime($synfile) > filemtime($writefile) || filemtime($ovlfile) > filemtime($writefile) || filemtime($presentfile) > filemtime($writefile) || filemtime($boxfile) > filemtime($writefile)){
$mixitem = array();
......
......@@ -30,7 +30,7 @@ function kill_all_AFKer($timelimit=1){
if(!$afkerlist){$cmd_info .= '没有符合条件的角色。';return;}
foreach($afkerlist as $kid => $kcontent){
$db->query("UPDATE {$tablepre}players SET hp='0',state='32' WHERE pid='$kid' AND type='0' AND hp>'0' AND state<'10'");
$db->query("UPDATE {$tablepre}players SET hp='0',state='32',bid='0' WHERE pid='$kid' AND type='0' AND hp>'0' AND state<'10'");
if($db->affected_rows()){
adminlog('killafker',$kid);
$cmd_info .= '角色 '.$kcontent['name'].' 被杀死。<br>';
......
......@@ -70,15 +70,15 @@ if($command == 'kill' || $command == 'live' || $command == 'del') {
if($operlist || $operlist2 || $dfaillist || $gfaillist){
if($command == 'kill'){
$operword = '被杀死';
$qryword = "UPDATE {$tablepre}players SET hp='0',state='15' ";
$qryword = "UPDATE {$tablepre}players SET hp='0',state='15',bid='0' ";
}elseif($command == 'live'){
$operword = '被复活';
$qryword = "UPDATE {$tablepre}players SET hp=mhp,state='0' ";
}elseif($command == 'del'){
$operword = '被清除';
$qryword = "UPDATE {$tablepre}players SET hp='0',state='16',weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
$qryword = "UPDATE {$tablepre}players SET hp='0',state='16',bid='0',weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
$operword2 = '的尸体被清除';
$qryword2 = "UPDATE {$tablepre}players SET weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
$qryword2 = "UPDATE {$tablepre}players SET bid='0',weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
}
if($operlist){
$qrywhere = '('.implode(',',array_keys($operlist)).')';
......
......@@ -74,15 +74,15 @@ if($command == 'kill' || $command == 'live' || $command == 'del') {
if($operlist || $operlist2 || $dfaillist || $gfaillist){
if($command == 'kill'){
$operword = '被杀死';
$qryword = "UPDATE {$tablepre}players SET hp='0',state='15' ";
$qryword = "UPDATE {$tablepre}players SET hp='0',state='15',bid='0', ";
}elseif($command == 'live'){
$operword = '被复活';
$qryword = "UPDATE {$tablepre}players SET hp=mhp,state='0' ";
}elseif($command == 'del'){
$operword = '被清除';
$qryword = "UPDATE {$tablepre}players SET hp='0',state='16',weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
$qryword = "UPDATE {$tablepre}players SET hp='0',state='16',bid='0',,weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
$operword2 = '的尸体被清除';
$qryword2 = "UPDATE {$tablepre}players SET weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
$qryword2 = "UPDATE {$tablepre}players SET bid='0',weps='0',arbs='0',arhs='0',aras='0',arfs='0',arts='0',itms0='0',itms1='0',itms2='0',itms3='0',itms4='0',itms5='0',itms6='0',money='0' ";
}
if($operlist){
$qrywhere = '('.implode(',',array_keys($operlist)).')';
......
......@@ -10,6 +10,7 @@ if(version_compare(PHP_VERSION, '4.3.0', '<')) {
exit('PHP version must >= 4.3.0!');
}
require GAME_ROOT.'./include/global.func.php';
require GAME_ROOT.'./include/init.func.php';
require GAME_ROOT.'./include/resources.func.php';
require GAME_ROOT.'./include/game/revclubskills.func.php';
require GAME_ROOT.'./include/game/dice.func.php';
......
......@@ -635,6 +635,7 @@ function create_dummy_playerdata($clb=0)
$data['wepk'] = 'WN';
}
}
$data['money'] = 10000;
return $data;
}
//通过名字抓取指定玩家数据,只能抓玩家
......@@ -712,6 +713,7 @@ function destory_corpse(&$edata)
{
if($edata)
{
$edata['action'] = ''; $edata['bid'] = 0;
$edata['state'] = 16; $edata['hp'] = 0; $edata['money'] = 0; $edata['pls'] = 254;
$edata['weps'] = 0;$edata['arbs'] = 0;$edata['arhs'] = 0;$edata['aras'] = 0;$edata['arfs'] = 0;$edata['arts'] = 0;
$edata['itms0'] = 0;$edata['itms1'] = 0;$edata['itms2'] = 0;$edata['itms3'] = 0;$edata['itms4'] = 0;$edata['itms5'] = 0;$edata['itms6'] = 0;
......
......@@ -176,24 +176,32 @@ function findcorpse(&$w_pdata){
function senditem(){
global $db,$tablepre,$log,$mode,$main,$command,$cmd,$battle_title,$pls,$plsinfo,$message,$now,$name,$w_log,$teamID,$gamestate,$action;
$mateid = str_replace('team','',$action);
if(!$mateid || strpos($action,'team')===false){
//global $db,$tablepre,$log,$mode,$main,$command,$cmd,$battle_title,$pls,$plsinfo,$message,$now,$name,$w_log,$teamID,$gamestate,$action;
global $db,$tablepre,$log,$mode,$main,$command,$cmd,$battle_title,$plsinfo,$hplsinfo,$now,$gamestate;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
$mateid = $bid;
if(!$mateid || $action != 'team'){
$log .= '<span class="yellow">你没有遇到队友,或已经离开现场!</span><br>';
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
if($gamestate>=40){
$log .= '<span class="yellow">连斗阶段无法赠送物品!</span><br>';
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$mateid'");
if(!$db->num_rows($result)){
$log .= "对方不存在!<br>";
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -201,25 +209,24 @@ function senditem(){
$edata = $db->fetch_array($result);
if($edata['pls'] != $pls) {
//登记非功能性地点信息时合并隐藏地点
global $hplsinfo;
foreach($hplsinfo as $hgroup=>$hpls) $plsinfo += $hpls;
$log .= '<span class="yellow">'.$edata['name'].'</span>已经离开了<span class="yellow">'.$plsinfo[$pls].'</span>。<br>';
$mode = 'command';
$action = '';
$action = ''; $bid = 0;
return;
} elseif($edata['hp'] <= 0) {
$log .= '<span class="yellow">'.$edata['name'].'</span>已经死亡,不能接受物品。<br>';
$mode = 'command';
$action = '';
$action = ''; $bid = 0;
return;
} elseif(!$teamID || $edata['teamID']!=$teamID){
$log .= '<span class="yellow">'.$edata['name'].'</span>并非你的队友,不能接受物品。<br>';
$mode = 'command';
$action = '';
$action = ''; $bid = 0;
return;
}
if($message){
if(!empty($message)){
// foreach ( Array('<','>',';',',') as $value ) {
// if(strpos($message,$value)!==false){
// $message = str_replace ( $value, '', $message );
......@@ -232,10 +239,10 @@ function senditem(){
if($command != 'back'){
$itmn = substr($command, 3);
global ${'itm'.$itmn},${'itmk'.$itmn},${'itme'.$itmn},${'itms'.$itmn},${'itmsk'.$itmn};
//global ${'itm'.$itmn},${'itmk'.$itmn},${'itme'.$itmn},${'itms'.$itmn},${'itmsk'.$itmn};
if (!${'itms'.$itmn}) {
$log .= '此道具不存在!';
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -245,7 +252,7 @@ function senditem(){
$itms = & ${'itms'.$itmn};
$itmsk = & ${'itmsk'.$itmn};
global $w_pid,$w_name,$w_pass,$w_type,$w_endtime,$w_gd,$w_sNo,$w_icon,$w_club,$w_hp,$w_mhp,$w_sp,$w_msp,$w_att,$w_def,$w_pls,$w_lvl,$w_exp,$w_money,$w_bid,$w_inf,$w_rage,$w_pose,$w_tactic,$w_killnum,$w_state,$w_wp,$w_wk,$w_wg,$w_wc,$w_wd,$w_wf,$w_teamID,$w_teamPass,$w_wep,$w_wepk,$w_wepe,$w_weps,$w_arb,$w_arbk,$w_arbe,$w_arbs,$w_arh,$w_arhk,$w_arhe,$w_arhs,$w_ara,$w_arak,$w_arae,$w_aras,$w_arf,$w_arfk,$w_arfe,$w_arfs,$w_art,$w_artk,$w_arte,$w_arts,$w_itm0,$w_itmk0,$w_itme0,$w_itms0,$w_itm1,$w_itmk1,$w_itme1,$w_itms1,$w_itm2,$w_itmk2,$w_itme2,$w_itms2,$w_itm3,$w_itmk3,$w_itme3,$w_itms3,$w_itm4,$w_itmk4,$w_itme4,$w_itms4,$w_itm5,$w_itmk5,$w_itme5,$w_itms5,$w_itm6,$w_itmk6,$w_itme6,$w_itms6,$w_wepsk,$w_arbsk,$w_arhsk,$w_arask,$w_arfsk,$w_artsk,$w_itmsk0,$w_itmsk1,$w_itmsk2,$w_itmsk3,$w_itmsk4,$w_itmsk5,$w_itmsk6,$w_rp,$w_skillpoint,$nick;
//global $w_pid,$w_name,$w_pass,$w_type,$w_endtime,$w_gd,$w_sNo,$w_icon,$w_club,$w_hp,$w_mhp,$w_sp,$w_msp,$w_att,$w_def,$w_pls,$w_lvl,$w_exp,$w_money,$w_bid,$w_inf,$w_rage,$w_pose,$w_tactic,$w_killnum,$w_state,$w_wp,$w_wk,$w_wg,$w_wc,$w_wd,$w_wf,$w_teamID,$w_teamPass,$w_wep,$w_wepk,$w_wepe,$w_weps,$w_arb,$w_arbk,$w_arbe,$w_arbs,$w_arh,$w_arhk,$w_arhe,$w_arhs,$w_ara,$w_arak,$w_arae,$w_aras,$w_arf,$w_arfk,$w_arfe,$w_arfs,$w_art,$w_artk,$w_arte,$w_arts,$w_itm0,$w_itmk0,$w_itme0,$w_itms0,$w_itm1,$w_itmk1,$w_itme1,$w_itms1,$w_itm2,$w_itmk2,$w_itme2,$w_itms2,$w_itm3,$w_itmk3,$w_itme3,$w_itms3,$w_itm4,$w_itmk4,$w_itme4,$w_itms4,$w_itm5,$w_itmk5,$w_itme5,$w_itms5,$w_itm6,$w_itmk6,$w_itme6,$w_itms6,$w_wepsk,$w_arbsk,$w_arhsk,$w_arask,$w_arfsk,$w_artsk,$w_itmsk0,$w_itmsk1,$w_itmsk2,$w_itmsk3,$w_itmsk4,$w_itmsk5,$w_itmsk6,$w_rp,$w_skillpoint,$nick;
extract($edata,EXTR_PREFIX_ALL,'w');
//global $w_pid, $w_name, $w_pass, $w_type, $w_endtime,$w_deathtime, $w_gd, $w_sNo, $w_icon, $w_club, $w_hp, $w_mhp, $w_sp, $w_msp, $w_att, $w_def, $w_pls, $w_lvl, $w_exp, $w_money, $w_bid, $w_inf, $w_rage, $w_pose, $w_tactic, $w_killnum, $w_state, $w_wp, $w_wk, $w_wg, $w_wc, $w_wd, $w_wf, $w_teamID, $w_teamPass;
......@@ -253,28 +260,31 @@ function senditem(){
//global $w_combat_inf, $w_rp,$w_action,$w_achievement,$w_skills,$w_skillpoint;
for($i = 1;$i <= 6; $i++){
if(!${'w_itms'.$i}) {
${'w_itm'.$i} = $itm;
${'w_itmk'.$i} = $itmk;
${'w_itme'.$i} = $itme;
${'w_itms'.$i} = $itms;
${'w_itmsk'.$i} = $itmsk;
$log .= "你将<span class=\"yellow\">${'w_itm'.$i}</span>送给了<span class=\"yellow\">$w_name</span>。<br>";
$w_log = "<span class=\"yellow\">$name</span>将<span class=\"yellow\">${'w_itm'.$i}</span>送给了你。";
for($i = 1;$i <= 6; $i++)
{
if(!$edata['itms'.$i])
{
$edata['itm'.$i] = $itm;
$edata['itmk'.$i] = $itmk;
$edata['itme'.$i] = $itme;
$edata['itms'.$i] = $itms;
$edata['itmsk'.$i] = $itmsk;
$log .= "你将<span class=\"yellow\">{$edata['itm'.$i]}</span>送给了<span class=\"yellow\">$w_name</span>。<br>";
$w_log = "<span class=\"yellow\">$name</span>将<span class=\"yellow\">{$edata['itm'.$i]}</span>送给了你。";
if(!$w_type){logsave($w_pid,$now,$w_log,'t');}
include_once GAME_ROOT.'./include/game/titles.func.php';
addnews($now,'senditem',get_title_desc($nick).' '.$name,$w_name,$itm);
w_save($w_pid);
//w_save($w_pid);
player_save($edata);
$itm = $itmk = $itmsk = '';
$itme = $itms = 0;
$action = '';
$action = ''; $bid = 0;
return;
}
}
$log .= "<span class=\"yellow\">$w_name</span> 的包裹已经满了,不能赠送物品。<br>";
}
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......
......@@ -1933,6 +1933,11 @@ function itemuse($itmn,&$data=NULL) {
//销毁物品
$itm = $itmk = $itmsk = '';
$itme = $itms = 0;
} elseif ($itm == 'NPC战斗测试仪'){
include_once GAME_ROOT.'./include/game/revcombat.func.php';
$pa = fetch_playerdata_by_pid(1);
$pd = fetch_playerdata_by_pid(2);
rev_combat_prepare($pa,$pd,1);
} elseif ($itm == '事件BGM替换器'){
// 这是一个触发事件BGM的案例,只要输入$clbpara['event_bgmbook'] = Array('事件曲集名'); 即可将当前曲集替换为特殊事件BGM
// 特殊事件曲集'event_bgmbook'的优先级高于地图曲集'pls_bgmbook',前者存在时后者不会生效
......
......@@ -1244,10 +1244,11 @@ function getcorpse($item,&$data=NULL)
}
extract($data,EXTR_REFS);
$corpseid = strpos($action,'corpse')===0 ? str_replace('corpse','',$action) : str_replace('pacorpse','',$action);
if(!$corpseid || strpos($action,'corpse')===false){
//$corpseid = strpos($action,'corpse')===0 ? str_replace('corpse','',$action) : str_replace('pacorpse','',$action);
$corpseid = $bid;
if(!$corpseid || ($action != 'corpse' && $action != 'pacorpse')){
$log .= '<span class="yellow">你没有遇到尸体,或已经离开现场!</span><br>';
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1255,7 +1256,7 @@ function getcorpse($item,&$data=NULL)
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$corpseid'");
if(!$db->num_rows($result)){
$log .= '对方不存在!<br>';
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1264,12 +1265,12 @@ function getcorpse($item,&$data=NULL)
if($edata['hp']>0) {
$log .= '对方尚未死亡!<br>';
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
} elseif($edata['pls'] != $pls) {
$log .= '对方跟你不在同一个地图!<br>';
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1279,7 +1280,7 @@ function getcorpse($item,&$data=NULL)
if(!$allow_destory_corpse || in_array($edata['type'],$no_destory_corpse_type))
{
$log.="你还想对这具可怜的尸体干什么?麻烦给死者一点基本的尊重!<br>";
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1288,7 +1289,7 @@ function getcorpse($item,&$data=NULL)
$rp += diceroll($rpup_destory_corpse);
addnews($now,'cdestroy',$name,$edata['name']);
destory_corpse($edata);
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1297,13 +1298,13 @@ function getcorpse($item,&$data=NULL)
if($club != 20)
{
$log.="你还想对这具可怜的尸体干什么?麻烦给死者一点基本的尊重!<br>";
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
include_once GAME_ROOT.'./include/game/elementmix.func.php';
split_corpse_to_elements($edata);
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1311,7 +1312,7 @@ function getcorpse($item,&$data=NULL)
{
//没有从尸体上捡取道具时,保留视野
check_add_searchmemory($edata['pid'],'corpse',$edata['name'],$data);
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1320,7 +1321,7 @@ function getcorpse($item,&$data=NULL)
{
include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php';
skill_tl_cstick_act($edata);
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1330,7 +1331,7 @@ function getcorpse($item,&$data=NULL)
//global $name,$type;
include_once GAME_ROOT.'./include/game/depot.func.php';
loot_depot($name,$type,$edata['name'],$edata['type']);
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......@@ -1365,11 +1366,11 @@ function getcorpse($item,&$data=NULL)
$log .= '获得了金钱 <span class="yellow">'.$edata['money'].'</span>。<br>';
$edata['money'] = 0;
player_save($edata);
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
} else {
$action = '';
$action = ''; $bid = 0;
return;
}
......@@ -1380,7 +1381,7 @@ function getcorpse($item,&$data=NULL)
} else {
itemget($data);
}
$action = '';
$action = ''; $bid = 0;
$mode = 'command';
return;
}
......
......@@ -104,6 +104,11 @@
{
$wep_skill = round($pa[$skillinfo[$pa['wep_kind']]]+($pa['wp']+$pa['wk']+$pa['wc']+$pa['wg']+$pa['wd']+$pa['wf'])*0.25);
}
# 「人杰」技能判定
elseif(isset($pa['skill_renjie']))
{
foreach(Array('wp','wk','wc','wg','wd','wf') as $skw) $wep_skill = max($pa[$skw],$wep_skill);
}
else
{
$wep_skill = $pa[$skillinfo[$pa['wep_kind']]];
......@@ -535,33 +540,36 @@
# 混沌伤害:
if(in_array('R',$pa['ex_keys']))
{
# 混沌武器伤害最大值:
$maxdmg = $pd['mhp'] > $pa['wepe'] ? $pa['wepe'] : $pd['mhp'];
$mindmg = max(1,($pd['mhp'] - $pd['hp'])/2);
do{
$damage = rand(-1*$mindmg,$maxdmg);
}while(empty($damage));
if($damage > 0)
{
$log .= "武器随机造成了<span class=\"red\">$damage</span>点伤害!<br>";
}
else
{
$log .= "武器随机为{$pd['nm']}回复了<span class=\"lime\">".abs($damage)."</span>点生命!<br>";
}
// 混沌混沌
# 混沌武器耐久损耗:
$max_imp_times = $pa['weps'] == $nosta ? $pa['wepe'] : $pa['weps'];
$min_imp_times = $pa['weps'] == $nosta ? -$pa['wepe'] : -$pa['weps'];
if(rand($min_imp_times,$max_imp_times) < 0)
# 奇迹属性可以将混沌伤害升格:伤害下限提升、耐久不再损耗
if(in_array('x',$pa['ex_keys']))
{
$damage = rand($maxdmg*0.1,$maxdmg);
}
else
{
$mindmg = max(1,($pd['mhp'] - $pd['hp'])/2);
do{
$pa['wep_imp_times'] = generate_ndnumbers($min_imp_times,$max_imp_times)[0];
}while(empty($pa['wep_imp_times']));
$damage = rand(-1*$mindmg,$maxdmg);
}while(empty($damage));
if(rand($min_imp_times,$max_imp_times) < 0)
{
do{
$pa['wep_imp_times'] = generate_ndnumbers($min_imp_times,$max_imp_times)[0];
}while(empty($pa['wep_imp_times']));
}
}
// 混沌伤害打满时 保存至成就
# 结算
if($damage > 0) $log .= "武器随机造成了<span class=\"red\">$damage</span>点伤害!<br>";
else $log .= "武器随机为{$pd['nm']}回复了<span class=\"lime\">".abs($damage)."</span>点生命!<br>";
# 混沌伤害打满时 保存至成就
if($damage == $maxdmg) $pa['clbpara']['achvars']['full_chaosdmg'] = 1;
return $damage;
}
return NULL;
}
......@@ -2071,6 +2079,29 @@
}
}
# 「协战」判定
# 拥有佣兵的情况下,主动攻击敌人/成功反击敌人,且敌人仍存活时,判定是否有佣兵协战
if(!empty(get_skillpara('c11_merc','id',$pa['clbpara'])))
{
$sk = 'c11_merc';
$cancovers = get_skillpara($sk,'cancover',$pa['clbpara']);
shuffle($cancovers);
$dice = diceroll(99);
foreach($cancovers as $mkey => $mcan)
{
if($mcan)
{
$mcps = get_skillpara($sk,'coverp',$pa['clbpara'])[$mkey];
if($dice < $mcps)
{
# 触发协战,将协战者ID记录在coopatk_flag内
$pa['coveratk_flag'] = get_skillpara($sk,'id',$pa['clbpara'])[$mkey];
//echo "触发了协战!协战对象ID:{$pa['coveratk_flag']}<br>";
break;
}
}
}
}
return;
}
......@@ -2143,7 +2174,8 @@
{
global $log,$active_obbs,$weather,$gamecfg,$chase_active_obbs;
include config('combatcfg',$gamecfg);
$pa['clbpara'] = get_clbpara($pa['clbpara']);
$pd['clbpara'] = get_clbpara($pd['clbpara']);
# 获取基础先攻率:
if(!$mode)
{
......@@ -2212,6 +2244,12 @@
$pd['cannot_counter_log'] = "{$pd['nm']}看起来非常生气!还是离他远点吧……";
return 0;
}
# 被协战攻击无法反击
if(isset($pa['is_coveratk']))
{
$pd['cannot_counter_log'] = "{$pd['nm']}双拳难敌四手,逃跑了!";
return 0;
}
# 被偷袭无法反击
if(isset($pa['bskill_c1_stalk']))
{
......
......@@ -4,6 +4,185 @@
exit('Access Denied');
}
// 处理从界面传回的战斗相关指令,在战斗开始前的最后一道准备工序
function revbattle_prepare($command,$message=NULL,$data=NULL)
{
global $log,$mode,$plsinfo,$db,$tablepre,$action_list;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
# 检查是否存在战斗动作
if(empty($action) || empty($bid) || !in_array($action,$action_list))
{
$log .= "你没有遇到敌人,或已经离开战场!<br>";
$action = ''; $bid = 0;
$mode = 'command';
return;
}
# 检查是否遇敌
$enemyid = $bid;
$result = $db->query ( "SELECT * FROM {$tablepre}players WHERE pid='$enemyid'");
if (!$db->num_rows($result))
{
$log .= "对方不存在!<br>";
$action = ''; $bid = 0;
$mode = 'command';
return;
}
# 获取敌人数据
//$edata = $db->fetch_array($result);
$edata = fetch_playerdata_by_pid($enemyid);
# 检查敌人是否处于当前位置
if ($edata['pls'] != $pls)
{
$log .= "<span class=\"yellow\">" . $edata ['name'] . "</span>已经离开了<span class=\"yellow\">$plsinfo[$pls]</span>。<br>";
$action = ''; $bid = 0;
$mode = 'command';
return;
}
# 检查敌人是否已死亡
if ($edata ['hp'] <= 0)
{
if($action != 'focus') $log .= "<span class=\"red\">" . $edata ['name'] . "</span>已经死亡,不能被攻击。<br>";
include_once GAME_ROOT . './include/game/battle.func.php';
$action = 'corpse'; $bid = $edata['pid'];
findcorpse($edata);
return;
}
# 输入切换武器指令时,切换武器
if ($command == 'changewep')
{
change_wep_in_battle();
findenemy_rev($edata);
return;
}
# 准备进入标准战斗流程
include_once GAME_ROOT.'./include/game/revcombat.func.php';
# 敌人身上存在时效性状态时,检查时效性状态
if(!empty($edata['clbpara']['lasttimes']))
{
$edata = check_skilllasttimes($edata);
}
# 追击流程
if ($command == 'chase' || $command == 'pchase' || $command == 'dfight')
{
findenemy_rev($edata);
return;
}
# 逃跑流程
if ($command == 'back')
{
//$log .= "你逃跑了。";
$flag = escape_from_enemy($data,$edata);
if($flag) $mode = 'command';
else rev_combat_prepare($data,$edata,0);
return;
}
# 重新遭遇视野中的敌人
if ($command == 'focus')
{
// 迎战视野中的敌人先制率-40
$active_r = min(4,get_active_r_rev($data,$edata)-40);
$active_dice = diceroll(99);
if($active_dice < $active_r){
$action = 'enemy'; $bid = $edata['pid'];
findenemy_rev($edata);
}else {
rev_combat_prepare($edata,$data,0);
}
return;
}
# 由协战对象攻击敌人
if ($command == 'cover')
{
$action = ''; $bid = 0;
if(empty($clbpara['coveratk']))
{
$log .= "协战对象不存在!<br>";
$mode = 'command';
return;
}
$coid = $clbpara['coveratk']; unset($clbpara['coveratk']);
# 检查协战对象数据,要求:活的、同一地图
$result = $db->query ( "SELECT * FROM {$tablepre}players WHERE pid='$coid' AND pls='$pls' AND hp>0 ");
if (!$db->num_rows($result))
{
$log .= "协战对象不存在!<br>";
$mode = 'command';
return;
}
# 获取协战对象数据
$cdata = fetch_playerdata_by_pid($coid);
# 协战对象是佣兵的话要加钱,不过毕竟是自愿行为,只+1行动次数就好了
if(!empty(get_skillpara('c11_merc','id',$clbpara)) && in_array($coid,get_skillpara('c11_merc','id',$clbpara)))
{
include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php';
$cokey = array_search($coid,get_skillpara('c11_merc','id',$clbpara));
skill_merc_paid('c11_merc',$cokey,$cdata);
}
# 添加协战标记
$cdata['is_coveratk'] = 1;
# 去打人吧!
rev_combat_prepare($cdata,$edata,1);
return;
}
# 指派佣兵攻击敌人
if (strpos($command,'bskill_c11_merc') === 0)
{
$mkey = str_replace('bskill_c11_merc','',$command);
$sk = 'c11_merc';
# 检查是否存在对应可攻击的佣兵
if(!empty($clbpara['skillpara'][$sk]['cancover'][$mkey]))
{
# 获取对应佣兵数据
$mid = $clbpara['skillpara'][$sk]['id'][$mkey];
$mdata = fetch_playerdata_by_pid($mid);
# 检查并扣除指挥的佣兵花费、佣兵行动次数增加对应数,并结算一次工资
include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php';
$clbpara['skillpara'][$sk]['mms'][$mkey] += get_skillvars($sk,'atkp');
skill_merc_paid($sk,$mkey,$mdata);
# 扣钱
$mccost = get_skillvars($sk,'atkp') * get_skillpara($sk,'paid',$clbpara)[$mkey];
$money -= $mccost;
# 干活!
$log .= "<span class='yellow'>你掏出{$mccost}元振臂一呼,{$mdata['name']}接过钱后毫不犹豫地扑向了敌人!</span><br>";
# 登记为收钱办事
$mdata['is_merc'] = 1;
# 是否要检查先后手?
if(isset($message) && $message == 'noactive')
{
$active_r = get_active_r_rev($mdata,$edata);
$active_dice = diceroll(99);
if($active_dice < $active_r)
{
rev_combat_prepare($mdata,$edata,1);
}
else
{
$log .= "<span class='yellow'>但是敌人早已做好了准备!</span><br>";
rev_combat_prepare($edata,$mdata,0);
}
}
else
{
rev_combat_prepare($mdata,$edata,1);
}
}
# 没有佣兵,你自己上吧!
else
{
rev_combat_prepare($data,$edata,1);
}
return;
}
# 上述流程没有拦截,直接进入标准战斗流程……可能会有问题?
rev_combat_prepare($data,$edata,1,$command);
return;
}
//发现敌人
function findenemy_rev($edata)
{
......@@ -57,6 +236,29 @@
$battle_skills[$sk_nums] = Array($unlock,$sk,$sk_desc);
$sk_nums++;
}
# 如果雇佣了佣兵,且佣兵与你在同一地图,可以指挥佣兵攻击
if($sk == 'c11_merc' && !empty(get_skillpara('c11_merc','cancover',$pdata['clbpara'])))
{
# 遍历可协战佣兵队列,检查是否有可以出击的佣兵
$mcids = get_skillpara($sk,'cancover',$pdata['clbpara']);
foreach($mcids as $mkey => $mc)
{
if($mc)
{
# 拉取佣兵数据
$mid = get_skillpara($sk,'id',$pdata['clbpara'])[$mkey];
$mdata = fetch_playerdata_by_pid($mid);
# 检查是否有钱强制命令佣兵攻击
$mccost = get_skillvars($sk,'atkp') * get_skillpara($sk,'paid',$pdata['clbpara'])[$mkey];
$unlock = $mccost > $pdata['money'] ? 1 : 0;
$sk_desc = $unlock ? '你没有足够的钱指挥佣兵主动攻击' : "花费<span class='yellow'>{$mccost}</span>元,指挥<span class='yellow'>{$mdata['name']}</span>发动攻击,攻击后佣兵会<span class='yellow'>锁定</span>敌人,离开地图前可再度对敌人进行<span class='yellow'>追击</span>";
# 将佣兵攻击指令加入指令集
$cskills[$sk.$mkey]['name'] = "佣兵攻击";
$battle_skills[$sk_nums] = Array($unlock,$sk.$mkey,$sk_desc);
$sk_nums++;
}
}
}
}
}
......@@ -77,7 +279,7 @@
function findneut(&$edata,$kind=0)
{
global $db,$tablepre,$pdata;
global $fog,$log,$mode,$main,$cmd,$battle_title,$attinfo,$skillinfo;
global $now,$fog,$log,$mode,$main,$cmd,$battle_title,$attinfo,$skillinfo;
$battle_title = $kind ? '发现朋友' : '发现敌人?';
......@@ -106,7 +308,7 @@
$sponsorid = $edata['clbpara']['sponsor'];
$result = $db->query("SELECT * FROM {$tablepre}gambling WHERE uid = '$sponsorid'");
$sordata = $db->fetch_array($result);
addnews($now,'gpost_success',$sordata['uname'],$itm0,$name);
addnews($now,'gpost_success',$sordata['uname'],$itm0,$pdata['name']);
//再见了~快递员!
unset($edata['clbpara']['post']);unset($edata['clbpara']['postid']);unset($edata['clbpara']['sponsor']);
destory_corpse($edata);
......@@ -180,7 +382,7 @@
global $fog,$action,$clbpara,$chase_escape_obbs,$log;
//include_once GAME_ROOT.'./include/game/dice.func.php';
# 在受追击/鏖战状态下逃跑有概率失败
if(strpos($action,'pchase')===0 || strpos($action,'dfight')===0)
if($action == 'pchase' || $action == 'dfight')
{
$escape_dice = diceroll(99);
if($escape_dice < $chase_escape_obbs)
......@@ -191,7 +393,7 @@
}
}
$log .= "你逃跑了。<br>";
$action = '';
$action = ''; $bid = 0;
//逃跑后在视野里记录敌人
$nm = $fog ? '???' : $pd['name'];
check_add_searchmemory($pd['pid'],'enemy',$nm,$pa);
......
......@@ -452,12 +452,19 @@
}
# 变更保存在clbpara['skillpara']内的指定技能参数
function set_skillpara($sk,$skpara,$skdata,&$para)
function set_skillpara($sk,$skpara,$skdata,&$para,$st='')
{
# 要有这个技能才能设置参数
if(in_array($sk,$para['skill']))
{
$para['skillpara'][$sk][$skpara] = $skdata;
if($st == 'arr')
{
$para['skillpara'][$sk][$skpara][] = $skdata;
}
else
{
$para['skillpara'][$sk][$skpara] = $skdata;
}
}
return;
}
......
......@@ -108,6 +108,47 @@
}
return 0;
}
# 事件:雇佣佣兵
if($event == 'hiremerc')
{
$mcost = get_skillvars($sk,'mcost');
$money -= $mcost;
$anpcinfo = get_addnpcinfo();
$mercinfo = $anpcinfo[25]['sub'];
# 获取佣兵出货概率
$tot = count($mercinfo);
$tp = 0;
for ($i=0; $i<$tot; $i++) $tp+=$mercinfo[$i]['probability'];
$dice = rand(1,$tp);
for ($i=0; $i<$tot; $i++)
{
if ($dice<=$mercinfo[$i]['probability'])
{
$merc = $i;
break;
}
else $dice-=$mercinfo[$i]['probability'];
}
# 登记佣兵序号
$mid = get_skillpara($sk,'active_t',$clbpara);
# 召唤佣兵,并获取佣兵pid
include_once GAME_ROOT . './include/system.func.php';
$merc_pid = addnpc(25,$merc,1,$now,Array('clbpara' => Array('mkey' => $mid, 'oid' => $pid, 'onm' => $name)),NULL,$pls)[0];
# 初始化佣兵参数
$clbpara['skillpara'][$sk]['id'][$mid] = $merc_pid;
# 登记佣兵薪水
$clbpara['skillpara'][$sk]['paid'][$mid] = $mercinfo[$merc]['mercsalary'];
# 登记佣兵解雇后状态
$clbpara['skillpara'][$sk]['leave'][$mid] = $mercinfo[$merc]['mercfireaction'];
# 登记佣兵协战概率
$clbpara['skillpara'][$sk]['coverp'][$mid] = $mercinfo[$merc]['coverp'];
# 登记佣兵行动次数
$clbpara['skillpara'][$sk]['mms'][$mid] = 0;
# 检查佣兵能否协战(出生时在同一地图,默认可以协战)
$clbpara['skillpara'][$sk]['cancover'][$mid] = 1;
$log .= "你掏出千元大钞振臂一呼,「{$mercinfo[$merc]['name']}」突然出现在了你的面前!<br>";
return 1;
}
# 事件:获取指定技能
if(strpos($event,'getskill_') === 0)
{
......@@ -241,6 +282,187 @@
$log .= "<span class='yellow'>已解锁技能「{$cskills[$csk]['name']}」!</span><br>";
return;
}
# 佣兵工资判定
function skill_merc_paid($sk,$mkey,&$mdata)
{
global $log,$now;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
# 需支付工资的行动次数
$mst = get_skillvars($sk,'mst');
# 佣兵当前行动次数+1
$mms = get_skillpara($sk,'mms',$clbpara)[$mkey]+1;
if($mms >= $mst)
{
# 应付工资
$paid = get_skillpara($sk,'paid',$clbpara)[$mkey];
# 有钱付工资
if($money >= $paid)
{
$mdata['money'] += $paid; $money -= $paid;
$log .= "<span class='yellow'>花费了{$paid}元,向{$mdata['name']}(佣兵{$mkey}号)支付了工资。</span><br>";
$clbpara['skillpara'][$sk]['mms'][$mkey] = 0;
//成功支付佣金,信任度+3,最多不超过90
if($clbpara['skillpara'][$sk]['coverp'][$mkey] < 90) $clbpara['skillpara'][$sk]['coverp'][$mkey] += 3;
}
# 没钱要挨打
else
{
$mdata['money'] += $money; $money = 0; $hp = 1;
player_save($mdata);
$log .= "<span class='yellow'>眼看又到了结账的时候,但你身上的钱不足以支付{$mdata['name']}(佣兵{$mkey}号)的工资……<br>被拖欠工资而恼羞成怒的佣兵狠揍了你一顿!并拿走了你所有剩下的钱!</span><br>";
include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php';
$log .= "<span clas='red'>由于欠薪,";
skill_merc_fire($sk,$mkey,$mdata,1);
return;
}
}
player_save($mdata);
return;
}
# 佣兵移动判定
function skill_merc_move($sk,$mkey,$moveto)
{
global $log,$plsinfo,$now;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
if(isset($clbpara['skillpara'][$sk]['id'][$mkey]))
{
# 获取佣兵编号
$mpid = get_skillpara($sk,'id',$clbpara)[$mkey];
# 获取佣兵数据
$mdata = fetch_playerdata_by_pid($mpid);
if($mdata['hp'] <= 0)
{
$log .= "{$mdata['name']}已经西去了!放过他吧!<br>";
return;
}
# 移动……?这个太扯了!
include_once GAME_ROOT.'./include/game/search.func.php';
//move($moveto,$mdata);
if(!check_can_move($mdata['pls'],$mdata['pgroup'],$moveto)) return;
# 计算移动花费 = 佣兵工资×2
$mpaid = get_skillvars($sk,'movep') * get_skillpara($sk,'paid',$clbpara)[$mkey];
if($money < $mpaid)
{
$log .= "你身上的钱不足以让佣兵离开岗位!<br>";
return;
}
$money -= $mpaid;
$mdata['pls'] = $moveto;
addnews($now,'mercmove',$name,$mdata['name'],$moveto);
$log .= "花费了{$mpaid}元,你将{$mdata['name']}叫到了{$plsinfo[$moveto]}!<br>";
// 移动后佣兵失去追击焦点
if(!empty($mdata['clbpara']['mercchase'])) $mdata['clbpara']['mercchase'] = 0;
# 检查下工资情况
skill_merc_paid($sk,$mkey,$mdata);
player_save($mdata);
// 移动后佣兵行动次数+2
$clbpara['skillpara'][$sk]['mms'][$mkey] += get_skillvars($sk,'movep');
// 移动后重新检查佣兵是否可协战
$clbpara['skillpara'][$sk]['cancover'][$mkey] = $mdata['pls'] == $pls ? 1 : 0;
}
return;
}
# 解雇佣兵判定
function skill_merc_fire($sk,$mkey,&$mdata=NULL,$mlog=0)
{
global $log,$now;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
if(isset($clbpara['skillpara'][$sk]['id'][$mkey]))
{
# 判断离场事件
$mpid = get_skillpara($sk,'id',$clbpara)[$mkey];
$leave_flag = get_skillpara($sk,'leave',$clbpara)[$mkey];
$leave_desc = $leave_flag ? '直接离开了战场!' : '决定留在原地。';
# 清除对应的佣兵数据
unset($clbpara['skillpara'][$sk]['id'][$mkey]);
unset($clbpara['skillpara'][$sk]['paid'][$mkey]);
unset($clbpara['skillpara'][$sk]['leave'][$mkey]);
unset($clbpara['skillpara'][$sk]['mms'][$mkey]);
unset($clbpara['skillpara'][$sk]['coverp'][$mkey]);
unset($clbpara['skillpara'][$sk]['cancover'][$mkey]);
if(!isset($mdata)) $mdata = fetch_playerdata_by_pid($mpid);
if($mlog)
{
$log .= "{$mdata['name']}与你的合作关系中止了!</span><br>";
}
else
{
$log .= "你决定解雇{$mdata['name']}!";
$log .= $mdata['hp']>0 ? "对方似乎{$leave_desc}<br>" : "虽然对方已经倒在工作岗位上了……<br>";
}
# 彻底离场类佣兵:
if($leave_flag)
{
addnews($now,'mercleave',$name,$mdata['name']);
destory_corpse($mdata);
}
}
return;
}
# 佣兵追击判定
function skill_merc_chase($sk,$mkey)
{
global $log,$now;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
if(isset($clbpara['skillpara'][$sk]['id'][$mkey]))
{
$mid = get_skillpara($sk,'id',$clbpara)[$mkey];
$mdata = fetch_playerdata_by_pid($mid);
# 确实存在追击对象
if(isset($mdata['clbpara']['mercchase']))
{
# 检查是否有钱强制命令佣兵追击
$mccost = get_skillvars($sk,'atkp') * get_skillpara($sk,'paid',$data['clbpara'])[$mkey];
if($mccost <= $money)
{
# 传递追击对象
$action = 'enemy'; $bid = $mdata['clbpara']['mercchase'];
# 佣兵追击不一定能先制,要判定一下
include_once GAME_ROOT.'./include/game/revbattle.func.php';
revbattle_prepare('bskill_c11_merc'.$mkey,'noactive');
}
else
{
$log .= "你身上的钱不够!<br>";
return;
}
}
}
return;
}
# 检查佣兵是否可协战
function skill_check_merc_can_cover($sk,$mkey)
{
global $log,$plsinfo,$now;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
if(isset($clbpara['skillpara'][$sk]['cancover'][$mkey])) return $clbpara['skillpara'][$sk]['cancover'][$mkey];
return 0;
}
# 尸体发火!
function skill_tl_cstick_act(&$edata)
......
<?php
if(!defined('IN_GAME')) {
exit('Access Denied');
}
# 发现率、躲避率、先制率、反击率计算方法
// 判断追击/鏖战/协战机制下双方的先制顺序、并注册对应状态
// *追击先制率补正:原始先制率+(战场距离x10)%
function check_revcombat_status(&$pa,&$pd,$active)
{
# 初始化先攻参数
$active_r = 0;
$active_dice = diceroll(99);
# 计算战场距离
$range = get_battle_range($pa,$pd,$active);
# pa或pd身上存在鏖战标记、或战场距离为0
if(strpos($pa['action'],'dfight')===0 || strpos($pd['action'],'dfight')===0 || !$range)
{
# 添加鏖战状态
$pa['is_dfight'] = $pd['is_dfight'] = 1;
# 获取鏖战状态下pa对pd的先制率
$active_r = get_active_r_rev($pa,$pd,1);
# 如果pa身上存在逃跑失败的标记,则pa先制率降低50……这是偷懒行为,未来的你记得改掉
if(isset($pa['fail_escape'])) $active_r -= 50;
# 判断是否先制
$active = $active_dice < $active_r ? 1 : 0 ;
}
# pa为玩家,身上存在追击标记 或 pd为玩家,身上存在受追击标记
elseif(strpos($pa['action'],'chase')===0 || strpos($pd['action'],'pchase')===0)
{
# 添加追击状态
$pa['is_chase'] = 1; $pd['is_pchase'] = 1;
# 获取追击状态下pa对pd的先制率
$active_r = get_active_r_rev($pa,$pd,2);
# 如果pd身上存在逃跑失败的标记,则pa先制率提升50
if(isset($pd['fail_escape'])) $active_r += 50;
# 判断是否先制
$active = $active_dice < $active_r ? 1 : 0 ;
# pa先制失败,双方转入鏖战状态
if(!$active)
{
unset($pa['is_chase']);unset($pd['is_pchase']);
$pa['is_dfight'] = $pd['is_dfight'] = 1;
}
}
# 清除双方标记
$pa['action'] = $pd['action'] = '';
$pa['bid'] = $pd['bid'] = 0;
# 返回先制值
return $active;
}
// 判断是否转入追击/鏖战流程
function check_can_chase(&$pa,&$pd,$active)
{
global $chase_obbs,$dfight_obbs,$log;
$chase_flag = 0;
$dice = diceroll(99);
# 进攻方(pa)或防守方(pd)已存在鏖战标记、或防守方(pd)成功反击了进攻方(pa)的攻击,检查是否维持&转入鏖战状态
if((isset($pa['is_dfight']) || isset($pd['is_dfight']) || isset($pd['is_counter'])))
{
if($dice < $dfight_obbs)
{
# 满足鏖战条件,检查pa是玩家还是NPC,并赋予对应标记
if($active) $pa['action'] = 'dfight'.$pd['pid'];
else $pd['action'] = 'dfight'.$pa['pid'];
$chase_flag = 1;
$log.= "<span class='red'>{$pa['nm']}{$pd['nm']}相互对峙着!</span><br>";
}
else
{
$log.= "<span class='grey'>{$pd['nm']}{$pa['nm']}的视野里消失了。</span><br>";
}
}
# 进攻方(pa)持有非爆武器,且防守方(pd)未能及时反击,检查是否触发追击
if(!$chase_flag && !empty($pa['wep_range']) && isset($pd['cannot_counter']))
{
if($dice < $dfight_obbs)
{
# 满足追击条件,检查pa是玩家还是NPC,并赋予对应标记
if($active) $pa['action'] = 'chase'.$pd['pid'];
else $pd['action'] = 'pchase'.$pa['pid'];
$chase_flag = 1;
$log.= "<span class='red'>但是{$pa['nm']}紧追着{$pd['nm']}不放!</span><br>";
}
else
{
$log.= "<span class='grey'>{$pd['nm']}{$pa['nm']}的视野里消失了。</span><br>";
}
}
if($chase_flag)
{
# 满足追击/鏖战条件,判定战斗轮次步进
change_battle_turns($pa,$pd,$active);
}
else
{
# 不满足追击/鏖战条件,重置战斗轮次
rs_battle_turns($pa,$pd);
}
return;
}
?>
\ No newline at end of file
This diff is collapsed.
......@@ -4,6 +4,42 @@ if(!defined('IN_GAME')) {
exit('Access Denied');
}
function check_can_move($pls,$pgroup,$moveto)
{
global $log,$plsinfo,$hplsinfo,$arealist,$areanum,$hack;
if($pls == $moveto)
{
$log .= "不能重复移动。<br>";
return 0;
}
$plsnum = sizeof($plsinfo);
if(!isset($plsinfo[$pls]) && isset($hplsinfo[$pgroup]))
{
//玩家位于隐藏地点组内,不能通过常规移动方式回到标准地点,也不能移动到其他隐藏地点组
if(!array_key_exists($moveto,$hplsinfo[$pgroup]))
{
$log .= "地图上没有{$hplsinfo[$pgroup][$moveto]}啊?<br>";
return 0;
}
}
else
{
//玩家位于标准地点组内
if((!array_key_exists($moveto,$plsinfo))||($moveto == 'main')||($moveto < 0 )||($moveto >= $plsnum))
{
$log .= '请选择正确的移动地点。<br>';
return 0;
}
elseif(array_search($moveto,$arealist) <= $areanum && !$hack)
{
$log .= $plsinfo[$moveto].'是禁区,还是离远点吧!<br>';
return 0;
}
}
return 1;
}
function move($moveto = 99,&$data=NULL) {
//global $lvl,$log,$pls,$pgroup,$plsinfo,$hplsinfo,$inf,$hp,$mhp,$sp,$def,$club,$arealist,$areanum,$hack,$areainfo,$gamestate,$pose,$weather;
//global $gamestate,$gamecfg,$pdata;
......@@ -163,9 +199,6 @@ function move($moveto = 99,&$data=NULL) {
}
}
//移动后丢失探索视野
lost_searchmemory('all',$data);
if(!$moved) {
if(!$hpls_flag) $pgroup = 0;
$pls = $moveto;
......@@ -173,41 +206,11 @@ function move($moveto = 99,&$data=NULL) {
$log .= "消耗<span class=\"yellow\">{$movesp}</span>点体力,移动到了<span class=\"yellow\">{$moveto_info}</span>。<br>";
}else{$f=false;}
if($inf){
foreach ($inf_move_hp as $inf_ky => $o_dmg) {
if(strpos($inf,$inf_ky)!==false)
{
$damage = round($mhp * $o_dmg) + rand(0,10);
# 「死疗」效果判定: TODO:之后要把异常状态扣血效果单独做一个函数
if($inf_ky == 'p' && !check_skill_unlock('c8_deadheal',$data))
{
$sk_p = get_skillvars('c8_deadheal','exdmgr');
$damage = min($mhp-$hp,ceil($damage*($sk_p/100)));
$damage *= -1;
}
$hp -= $damage;
if($damage > 0) $log .= "{$infwords[$inf_ky]}减少了<span class=\"red\">$damage</span>点生命!<br>";
elseif($damage < 0) $log .= "{$infwords[$inf_ky]}恢复了<span class=\"lime\">".abs($damage)."</span>点生命!<br>";
if($hp <= 0 ){
include_once GAME_ROOT.'./include/state.func.php';
death($inf_ky.'move','',0,'',$data);
return;
}
}
}
}
$log .= $areainfo[$pls].'<br>';
//if ($f) {
// if (CURSCRIPT !== 'botservice') $log.="<span id=\"HsUipfcGhU\"></span>"; //刷新页面标记
// return;
//}
/*$enemyrate = 40;
if($gamestate == 40){$enemyrate += 20;}
elseif($gamestate == 50){$enemyrate += 40;}
if($pose==3){$enemyrate -= 20;}
elseif($pose==4){$enemyrate += 10;}*/
# 移动到指定地点,结算移动探索事件
move_search_events($data,'move');
include_once GAME_ROOT.'./include/game/revattr.func.php';
$enemyrate = calc_meetman_rate($data);
//echo "enemyrate = {$enemyrate}%";
......@@ -350,10 +353,41 @@ function search(&$data=NULL){
}
}
$sp -= $schsp;
$log .= "消耗<span class=\"yellow\">{$schsp}</span>点体力,你搜索着周围的一切。。。<br>";
if($inf){
foreach ($inf_search_hp as $inf_ky => $o_dmg) {
# 探索指定地点,结算探索事件
move_search_events($data,'search');
include_once GAME_ROOT.'./include/game/revattr.func.php';
$enemyrate = calc_meetman_rate($data);
//echo "enemyrate = {$enemyrate}%";
discover($enemyrate,$data);
return;
}
function move_search_events(&$data=NULL,$act)
{
global $log,$inf_move_hp,$inf_move_sp,$infwords;
if(!isset($data))
{
global $pdata;
$data = &$pdata;
}
extract($data,EXTR_REFS);
if($act == 'move')
{
//移动后丢失探索视野
lost_searchmemory('all',$data);
}
if($inf)
{
foreach ($inf_move_hp as $inf_ky => $o_dmg) {
if(strpos($inf,$inf_ky)!==false)
{
$damage = round($mhp * $o_dmg) + rand(0,10);
......@@ -375,12 +409,43 @@ function search(&$data=NULL){
}
}
}
include_once GAME_ROOT.'./include/game/revattr.func.php';
$enemyrate = calc_meetman_rate($data);
//echo "enemyrate = {$enemyrate}%";
discover($enemyrate,$data);
return;
# 「理财」效果判定:
if(!check_skill_unlock('c11_stock',$data))
{
$sk = 'c11_stock';
$sk_mst = get_skillvars($sk,'mst');
$ms = get_skillpara($sk,'ms',$data['clbpara']) + 1;
# 赚钱!
if($ms >= $sk_mst)
{
$sk_var = get_skillvars($sk,'earn');
$earn = min(max(ceil($money*$sk_var/100),get_skillvars($sk,'minmoney')),get_skillvars($sk,'maxmoney'));
$money += $earn;
$log .= "<span class='yellow'>「理财」使你赚到了{$earn}元!</span><br>";
$ms = 0;
}
set_skillpara($sk,'ms',$ms,$data['clbpara']);
}
# 「佣兵」效果判定:召唤过佣兵的情况下,每行动一次+1计数
if(!empty(get_skillpara('c11_merc','id',$clbpara)))
{
include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php';
$sk = 'c11_merc';
# 检查是否有需要付工资的佣兵
$mids = get_skillpara($sk,'id',$clbpara);
foreach($mids as $mkey => $mid)
{
$mdata = fetch_playerdata_by_pid($mid);
skill_merc_paid($sk,$mkey,$mdata);
# 每次探索/移动时都重新检查佣兵是否可协战
$clbpara['skillpara'][$sk]['cancover'][$mkey] = $mdata['pls'] == $pls ? 1 : 0;
# 移动到其他地图时,佣兵丢失追击焦点
if(!empty($mdata['clbpara']['mercchase']) && $act == 'move') $mdata['clbpara']['mercchase'] = 0;
player_save($mdata);
}
}
return;
}
function discover($schmode = 0,&$data=NULL)
......@@ -536,6 +601,8 @@ function discover($schmode = 0,&$data=NULL)
//global $artk;
if ((!$edata['type'])&&($artk=='XX')&&(($edata['artk']!='XX')||($edata['art']!=$name))&&($gamestate<50)) continue;
if (($artk!='XX')&&($edata['artk']=='XX')&&($gamestate<50)) continue;
//暂时直接略过自己的佣兵,之后做完组队面板交互再加回来
if(!empty(get_skillpara('c11_merc','id',$clbpara)) && in_array($edata['pid'],get_skillpara('c11_merc','id',$clbpara))) continue;
//灵子状态只能遭遇同为灵子状态的对象,非灵子状态对象无法发现灵子状态下的对象……但是尸体就没有这种考量了
if(($edata['pose'] == 8 || $data['pose'] == 8) && $data['pose'] != $edata['pose']) continue;
//计算活人发现率
......@@ -556,7 +623,7 @@ function discover($schmode = 0,&$data=NULL)
if($teamID&&(!$fog)&&($gamestate<40)&&($teamID == $edata['teamID']))
{
$bid = $edata['pid'];
$action = 'team'.$edata['pid'];
$action = 'team';
include_once GAME_ROOT.'./include/game/battle.func.php';
findteam($edata);
return;
......@@ -565,7 +632,7 @@ function discover($schmode = 0,&$data=NULL)
elseif(isset($edata['clbpara']['post']) && $edata['clbpara']['post'] == $pid)
{
$bid = $edata['pid'];
$action = 'neut'.$edata['pid'];
$action = 'neut';
include_once GAME_ROOT.'./include/game/revbattle.func.php';
findneut($edata,1);
return;
......@@ -585,7 +652,7 @@ function discover($schmode = 0,&$data=NULL)
//先制
if($active_dice < $active_r)
{
$action = 'enemy'.$edata['pid'];
$action = 'enemy'; $bid = $edata['pid'];
if($data['pass'] != 'bot')
{
......@@ -616,8 +683,7 @@ function discover($schmode = 0,&$data=NULL)
}
else
{
$bid = $edata['pid'];
$action = 'corpse'.$edata['pid'];
$action = 'corpse'; $bid = $edata['pid'];
include_once GAME_ROOT.'./include/game/battle.func.php';
findcorpse($edata);
return;
......
......@@ -634,6 +634,8 @@ function parse_info_desc($info,$type,$vars='',$short=0,$tiptype=0)
# 计数
$sk_max = count($info); $sk_nums = 0;
$sk_info = ''; $sk_tp = '';
# 属性中是否有奇迹属性?
if(in_array('x',$info)) $xflag = 1;
foreach($info as $sk)
{
$csk = $itemspkinfo[$sk];
......@@ -648,12 +650,16 @@ function parse_info_desc($info,$type,$vars='',$short=0,$tiptype=0)
{
if($sk_max > 1)
{
$sk_tp .= "【{$itemspkinfo[$sk]}】: ".$tps_isk[$sk]['title'];
# 奇迹属性隐藏tips
if(!empty($xflag) && isset($tps_isk[$sk]['x-title'])) $sk_tp .= $tps_isk[$sk]['x-title'];
# 标准tips
else $sk_tp .= "【{$itemspkinfo[$sk]}】: ".$tps_isk[$sk]['title'];
# 换行
if($sk_nums<$sk_max-1) $sk_tp .= "\r";
}
else
{
$sk_tp = $tps_isk[$sk]['title'];
$sk_tp = !empty($xflag) && isset($tps_isk[$sk]['x-title']) ? $tps_isk[$sk]['x-title'] : $tps_isk[$sk]['title'];
}
}
$sk_nums++;
......
......@@ -35,6 +35,31 @@ function init_icon_states(&$pa,$pd,$ismeet=0)
}
}
function init_single_hp_states($pa)
{
global $hpinfo;
if($pa['hp'] <= 0)
{
$hpstate = "<span class=\"red\">$hpinfo[3]</span>";
}
else
{
if($pa['hp'] < $pa['mhp']*0.2)
{
$hpstate = "<span class=\"red\">$hpinfo[2]</span>";
}
elseif($pa['hp'] < $pa['mhp']*0.5)
{
$hpstate = "<span class=\"yellow\">$hpinfo[1]</span>";
}
else
{
$hpstate = "<span class=\"clan\">$hpinfo[0]</span>";
}
}
return $hpstate;
}
function init_hp_states(&$pa,$pd,$ismeet=0)
{
global $fog,$hpinfo,$spinfo,$rageinfo;
......@@ -66,7 +91,7 @@ function init_hp_states(&$pa,$pd,$ismeet=0)
}
else
{
if($pa['hp'] < $pa['mhp']*0.2)
/*if($pa['hp'] < $pa['mhp']*0.2)
{
$pa['hpstate'] = "<span class=\"red\">$hpinfo[2]</span>";
}
......@@ -77,7 +102,9 @@ function init_hp_states(&$pa,$pd,$ismeet=0)
else
{
$pa['hpstate'] = "<span class=\"clan\">$hpinfo[0]</span>";
}
}*/
$pa['hpstate'] = init_single_hp_states($pa);
if($pa['sp'] < $pa['msp']*0.2)
{
......@@ -180,5 +207,38 @@ function init_inf_states(&$pa,$pd,$ismeet=0)
}
}
function init_friedship_states($pa,$sk,$mid)
{
if(isset($pa['clbpara']['skillpara'][$sk]['coverp'][$mid]))
{
$fs = $pa['clbpara']['skillpara'][$sk]['coverp'][$mid];
if($fs > 80)
{
$desc = "<span class='gold'>(崇拜)</span>";
}
elseif($fs > 65)
{
$desc = "<span class='redseed'>(尊敬)</span>";
}
elseif($fs > 50)
{
$desc = "<span class='lime'>(友善)</span>";
}
elseif($fs > 35)
{
$desc = "<span class='clan'>(友好)</span>";
}
elseif($fs > 20)
{
$desc = "<span>(普通)</span>";
}
else
{
$desc = "<span class='grey'>(冷淡)</span>";
}
return $desc;
}
}
?>
......@@ -338,6 +338,10 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$bname = $cskills[$bsk]['name'];
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}通过「{$skname}」学会了技能<span class=\"lime\">「{$bname}」</span>!</span><br>\n";
}
} elseif(strpos($news,'mercmove')===0) {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}指挥佣兵 {$b}移动到了{$plsinfo[$c]}!</span><br>\n";
} elseif(strpos($news,'mercleave')===0) {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}的佣兵 {$b}离开了战场!</span><br>\n";
} else {
$newsinfo .= "<li>$time,$news,$a,$b,$c,$d<br>\n";
}
......
......@@ -56,6 +56,21 @@ function get_overlaymixinfo()
return $prp_res;
}
# addnpc_1.php
function get_addnpcinfo()
{
global $gamecfg;
include config("addnpc",$gamecfg);
return $anpcinfo;
}
function get_npcinit()
{
global $gamecfg;
include config("npc",$gamecfg);
return $npcinit;
}
# achievement_1.php
function get_achtype()
{
......
......@@ -17,6 +17,8 @@ function death($death, $kname = '', $ktype = 0, $annex = '',&$data=NULL)
}
extract($data,EXTR_REFS);
$bid = 0; $action = '';
if (! $death) {
return;
}
......
......@@ -638,13 +638,15 @@ function movehtm($atime = 0) {
}
function addnpc($type,$sub,$num,$time = 0,$clbstatus=NULL,$aitem=NULL,$apls=NULL) {
global $now,$db,$tablepre,$log,$plsinfo,$typeinfo,$anpcinfo,$npcinit,$arealist,$areanum,$gamecfg;
global $now,$db,$tablepre,$log,$plsinfo,$typeinfo,$arealist,$areanum,$gamecfg;
global $hidding_typelist,$deepzones;
$time = $time == 0 ? $now : $time;
$plsnum = sizeof($plsinfo);
if(empty($anpcinfo) || empty($npcinit)){
/*if(empty($anpcinfo) || empty($npcinit)){
include_once config('addnpc',$gamecfg);
}
}*/
$npcinit = get_npcinit();
$anpcinfo = get_addnpcinfo();
$anpc_namelist = Array();
$anpc = array_merge($npcinit,$anpcinfo[$type]);
$anpc = array_merge($anpc,$anpc['sub'][$sub]);
......@@ -834,7 +836,7 @@ function antiAFK($timelimit = 0){
if(empty($afkerlist)){return;}
foreach($afkerlist as $kid => $kcontent){
$db->query("UPDATE {$tablepre}players SET hp='0',state='32' WHERE pid='$kid' AND type='0' AND hp>'0' AND state<'10'");
$db->query("UPDATE {$tablepre}players SET hp='0',state='32',bid='0' WHERE pid='$kid' AND type='0' AND hp>'0' AND state<'10'");
if($db->affected_rows()){
addnews($now,'death32',$kcontent['name'],'',$kcontent['pls']);
$alivenum--;
......
<input type="hidden" id="mode" name="mode" value="command">
<input type="hidden" id="command" name="command" value="menu">
<input type="hidden" id="subcmd" name="subcmd" value="">
<input type="hidden" id="subcmd2" name="subcmd2" value="">
现在想要做什么?<br /><br />
<input type="button" class="cmdbutton" id="zz" name="search" value="[Z]搜寻" onclick="$('command').value='search';postCmd('gamecmd','command.php');this.disabled=true;" <!--{if (array_search($pls,$arealist) <= $areanum && !$hack) && (isset($plsinfo[$pls]) && !isset($hplsinfo[$pgroup]))}-->disabled<!--{/if}-->>
<select id="moveto" name="moveto" onchange="$('command').value='move';postCmd('gamecmd','command.php');this.disabled=true;">
<select id="moveto" name="moveto" id="d" onchange="$('command').value='move';postCmd('gamecmd','command.php');this.disabled=true;">
{template move}
</select>
<!-- 探索记忆栏 -->
......@@ -125,13 +126,13 @@
<!--{/if}-->
<!-- 第 4 行:地区功能-->
<!--{if in_array($pls,$shops)}-->
<!--{if in_array($pls,$shops) || !check_skill_unlock('c11_ebuy',$pdata)}-->
<input type="button" class="cmdbutton" id="aa" name="sp_shop" value="[A]商店" onclick="$('command').value='special';$('subcmd').name='sp_cmd';$('subcmd').value='sp_shop';postCmd('gamecmd','command.php');this.disabled=true;">
<br>
<!--{/if}-->
<!--{if in_array($pls,$depots)}-->
<span tooltip="向安全箱中存入或取出道具">
<input type="button" class="cmdbutton" id="aa" name="sp_depot" value="[A]安全箱" onclick="$('command').value='special';$('subcmd').name='sp_cmd';$('subcmd').value='sp_depot';postCmd('gamecmd','command.php');this.disabled=true;">
<input type="button" class="cmdbutton" name="sp_depot" value="安全箱" onclick="$('command').value='special';$('subcmd').name='sp_cmd';$('subcmd').value='sp_depot';postCmd('gamecmd','command.php');this.disabled=true;">
</span>
<br>
<!--{/if}-->
......@@ -178,4 +179,11 @@
<span tooltip="升级或使用技能">
<input type="button" class="cmdbutton" id="v" name="skillstable" value="[V]技能表" onclick="showModalDialog($('skillpage'));">
</span>
{template skillpage}
\ No newline at end of file
{template skillpage}
<!--{if !empty(get_skillpara('c11_merc','id',$clbpara))}-->
<span tooltip="查看或管理佣兵">
<input type="button" class="cmdbutton" name="sp_mercpage" value="佣兵管理" onclick="showModalDialog($('mercpage'));">
</span>
{template skill_mercpage}
<!--{/if}-->
\ No newline at end of file
......@@ -1820,11 +1820,11 @@ NPC也会发出重击和必杀技,请随时小心。</p>
</td>
<td class="b3">
<span>初始资金增加;购买物品所需金钱数下降;<br>
可以与雇佣兵非法组队
可以与<input type="button" class="cmdbutton" value="雇佣兵" onclick="showModalDialog($('ty25a'));">非法组队
</span>
</td>
<td class="b3">
<span>待实装</span>
<span><input type="button" class="cmdbutton" value="点击查看称号技能" onclick="showModalDialog($('skillhelp-c11'));"></span>
</td>
</tr>
<tr>
......
......@@ -25,4 +25,4 @@
<input type="button" id="itm6" value="$itm6/$itme6/$itms6" onclick="$('merge2').value='6';postCmd('gamecmd','command.php');return false;"><br>
<!--{/if}-->
<br>
<input type="button" class="cmdbutton" name="no" value="不合并" onclick="postCmd('gamecmd','command.php');return false;">
\ No newline at end of file
<input type="button" class="cmdbutton" id="x" name="no" value="[X]不合并" onclick="postCmd('gamecmd','command.php');return false;">
\ No newline at end of file
......@@ -138,4 +138,17 @@ AI会根据玩家目前的<span class="yellow">rp和APM</span>判定是不是目
{template npcinfohelp}
<!--{/loop}-->
<br>
<p><span class="lime">佣兵NPC 简介</span></p>
佣兵是富家子弟的称号技能召唤出的NPC。不同的佣兵实力差距很大,能召唤出什么佣兵纯靠运气。<br>
以下是所有佣兵的列表:<input class="cmdbutton" onclick="showModalDialog($('ty25a'))" value="点击这里查看" type="button">
<br>
<dialog id="ty25a">
<p>以下是所有可能被召唤出的佣兵列表:</p>
<br>
<!--{loop $ty25a $vkind $kind}-->
{template npcinfohelp}
<!--{/loop}-->
<img class="dialog-background" src="img/profile.gif" onclick="closeDialog($('ty25a'))">
</dialog>
<br>
......@@ -4,7 +4,14 @@
<!--{eval $ksub='sub';}-->
<!--{/if}-->
<!--{loop $npcinfo[$kind][$ksub] $key $value}-->
<!--{if isset($npcdescription[$kind]['sub'][$key]['description']) && (is_numeric($key) || $ksub == 'esub')}-->
<!--{if isset($npcdescription[$kind]['sub'][$key]['description']) }-->
<!--{eval $description = $npcdescription[$kind]['sub'][$key]['description'];}-->
<!--{elseif isset($npcinfo[$kind][$ksub][$key]['description'])}-->
<!--{eval $description = $npcinfo[$kind][$ksub][$key]['description'];}-->
<!--{else}-->
<!--{eval $description = '这个人似乎非常神秘,履历空空';}-->
<!--{/if}-->
<!--{if is_numeric($key) || $ksub == 'esub' }-->
<table border="1" cellspacing="0" cellpadding="0" valign="middle">
<tr>
<td>
......@@ -143,7 +150,7 @@
<table border="1" cellspacing="0" cellpadding="0" valign="middle">
<tr>
<td width=140px>
$npcdescription[$kind]['sub'][$key]['description']
$description
</td>
<td>
<table border="1" cellspacing="0" cellpadding="0" valign="middle">
......
......@@ -23,7 +23,7 @@
&nbsp;
<!--{if empty($no_skill_input)}-->
变更选择为:
<select name="upgpara" id="upgpara" onchange="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';postCmd('gamecmd','command.php');this.disabled=true;">
<select name="{$skid}upgpara" id="{$skid}upgpara" onchange="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';postCmd('gamecmd','command.php');this.disabled=true;">
<!--{if empty($nchoice)}-->
<option value="" selected><br />
<!--{/if}-->
......
<!--{eval $skid = 'c11_merc'; $cskill = $cskills[$skid];}-->
<!--{if isset($cskill['maxlvl'])}-->
<!--{eval $now_clvl = get_skilllvl($skid,$uidata); $max_lvl_flag = $now_clvl >= $cskill['maxlvl'] ? 1 : 0;}-->
<!--{else}-->
<!--{eval $max_lvl_flag = 0;}-->
<!--{/if}-->
<tr>
<td class="b1" width="40">
<span>{$cskill['name']}</span>
</td>
<td>
<!--{eval $unlock_flag = check_skill_unlock($skid,$uidata);}-->
<!--{if $unlock_flag}-->
<div style="position:relative; height:100%; width:100%;" onmouseover="skill_unacquired_mouseover.call(this,event)" onmouseout="skill_unacquired_mouseout.call(this,event)">
<div class="skill_unacquired">
<!--{/if}-->
<table class="skilltable">
<tr>
<td class="skilldesc_left b3">
<span class="skilldesc">
<!--{eval $cdesc = parse_skilldesc($skid,$uidata);}-->
{$cdesc}
</span>
</td>
<td class="skilldesc_right b3">
<!--{if empty($no_skill_input)}-->
<!--{if !empty($cskill['num_input']) && empty($max_lvl_flag)}-->
<input type="number" name="upgskill_{$skid}_nums" style="width:40px" value="1">
<!--{/if}-->
<!--{if !empty($cskill['input']) && empty($max_lvl_flag)}-->
<input type="button" onclick="$('mode').value='revskpts';$('command').value='upgskill_{$skid}';postCmd('gamecmd','command.php');this.disabled=true;" value="{$cskill['input']}">
<!--{/if}-->
<!--{/if}-->
</td>
</tr>
</table>
<!--{if $unlock_flag}-->
<!--{eval $unlock_desc = parse_skilllockdesc($skid,$unlock_flag);}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
$unlock_desc
</span>
</td>
</tr>
</table>
</div>
</div>
<!--{/if}-->
</td>
</tr>
\ No newline at end of file
<tr>
<!--{eval $skid="c1_veteran";}-->
<td class="b1" width="40">
<span>百战</span>
</td>
......@@ -19,7 +20,7 @@
&nbsp;
<!--{if empty($no_skill_input)}-->
变更选择为:
<select name="upgpara" id="upgpara" onchange="$('mode').value='revskpts';$('command').value='swtskill_c1_veteran';postCmd('gamecmd','command.php');this.disabled=true;">
<select name="{$skid}upgpara" id="{$skid}upgpara" onchange="$('mode').value='revskpts';$('command').value='swtskill_c1_veteran';postCmd('gamecmd','command.php');this.disabled=true;">
<!--{if empty($nchoice)}-->
<option value="" selected><br />
<!--{/if}-->
......
......@@ -24,17 +24,17 @@
<tr><td>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--{if $nchoice==1}--><span ><!--{/if}-->(1) 遇敌率提高15% <!--{if $nchoice==1}--></span><!--{/if}-->
</td><td>
<!--{if $nchoice==1}--><span class="lime">[当前选择]</span><!--{elseif empty($no_skill_input)}--><input type="button" style="width:46px" onclick="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';$('subcmd').name='upgpara';$('subcmd').value='1';postCmd('gamecmd','command.php');this.disabled=true;" value="选择"><!--{/if}-->
<!--{if $nchoice==1}--><span class="lime">[当前选择]</span><!--{elseif empty($no_skill_input)}--><input type="button" style="width:46px" onclick="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';$('subcmd').name='{$skid}upgpara';$('subcmd').value='1';postCmd('gamecmd','command.php');this.disabled=true;" value="选择"><!--{/if}-->
</td></tr>
<tr><td>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--{if $nchoice==0}--><span ><!--{/if}-->(2) 无效果 <!--{if $nchoice==0}--></span><!--{/if}-->
</td><td>
<!--{if $nchoice==0}--><span class="lime">[当前选择]</span><!--{elseif empty($no_skill_input)}--><input type="button" style="width:46px" onclick="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';$('subcmd').name='upgpara';$('subcmd').value='0';postCmd('gamecmd','command.php');this.disabled=true;" value="选择"><!--{/if}-->
<!--{if $nchoice==0}--><span class="lime">[当前选择]</span><!--{elseif empty($no_skill_input)}--><input type="button" style="width:46px" onclick="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';$('subcmd').name='{$skid}upgpara';$('subcmd').value='0';postCmd('gamecmd','command.php');this.disabled=true;" value="选择"><!--{/if}-->
</td></tr>
<tr><td>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--{if $nchoice==2}--><span ><!--{/if}-->(3) 物品发现率提高15% <!--{if $nchoice==2}--></span><!--{/if}-->
</td><td>
<!--{if $nchoice==2}--><span class="lime">[当前选择]</span><!--{elseif empty($no_skill_input)}--><input type="button" style="width:46px" onclick="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';$('subcmd').name='upgpara';$('subcmd').value='2';postCmd('gamecmd','command.php');this.disabled=true;" value="选择"><!--{/if}-->
<!--{if $nchoice==2}--><span class="lime">[当前选择]</span><!--{elseif empty($no_skill_input)}--><input type="button" style="width:46px" onclick="$('mode').value='revskpts';$('command').value='swtskill_{$skid}';$('subcmd').name='{$skid}upgpara';$('subcmd').value='2';postCmd('gamecmd','command.php');this.disabled=true;" value="选择"><!--{/if}-->
</td></tr>
</table>
</span>
......
<dialog id="mercpage" style="width: fit-content; max-width: 700px;">
<!--{eval $merc_ids = get_skillpara('c11_merc','id',$clbpara);}-->
<!--{eval $merc_num = !empty($merc_ids) ? count($merc_ids) : 0;}-->
<!--{if $merc_num>0}-->
你已经雇佣了<span class="yellow">{$merc_num}</span>名佣兵。<br>
以下是他们的情报:<br><br>
<!--{loop $merc_ids $mkey $mid}-->
<!--{eval $nowmerc = fetch_playerdata_by_pid($mid);}-->
<table width="340px" CellPadding=0 CellSpacing=0 style="margin: 5px; padding: 0px; float: left; border-radius: 3px; border:2px solid rgba(225, 124, 226, 0.5);">
<tr>
<td class="b1" colspan=4>
佣兵({$mkey}号)情报
</td>
</tr>
<tr>
<td>
<img width="140px" src="img/n_{$nowmerc['icon']}.gif" border="0" valign="middle" style="<!--{if $nowmerc['hp']==0}-->filter: grayscale(100%)<!--{/if}-->">
</td>
<td>
<table height="100%" width="100%" CellPadding=0 CellSpacing=0>
<tr>
<td class="b1" width="40px" height="20px">名称</td>
<td class="b3" width="160px">
<!--{eval $mercfs = init_friedship_states($pdata,'c11_merc',$mkey);}-->
{$nowmerc['name']}{$mercfs}
</td>
</tr>
<tr>
<td class="b1" height="20px">状况</td>
<td class="b3">
<!--{eval $nowmerchpstate = init_single_hp_states($nowmerc);}-->
{$nowmerchpstate}
</td>
</tr>
<tr>
<td class="b1" height="20px">工资</td>
<td class="b3" colspan=3>
<!--{eval $nowpaid = get_skillpara('c11_merc','paid',$clbpara)[$mkey];$movepaid = $nowpaid * get_skillvars('c11_merc','movep');}-->
<!--{eval $nextpaid = get_skillvars('c11_merc','mst') - get_skillpara('c11_merc','mms',$clbpara)[$mkey];}-->
<span style="text-align:left; display:inline-block;" tooltip2="支付工资:{$nextpaid} 次行动后">
{$nowpaid} 元
</span>
</td>
</tr>
<tr>
<td class="b1" height="20px">位置</td>
<td class="b3">
<!--{eval $cancover = $nowmerc['pls'] == $pls ? '(可协战)' : '';}-->
<span>{$plsinfo[$nowmerc['pls']]}{$cancover}</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="b3" colspan=4>
<!--{eval $atkpaid = $nowpaid * get_skillvars('c11_merc','atkp');}-->
<span style="text-align:left; display:inline-block;">
<table><tr><td>
花费<span class="yellow">{$atkpaid}</span>元,可指挥佣兵主动出击
<!--{if !empty($nowmerc['clbpara']['mercchase'])}-->
<input type="button" style="width:45px" onclick="$('mode').value='revskpts';$('command').value='actskill_c11_merc';$('subcmd').name='c11_mercmkey';$('subcmd').value='{$mkey}';$('subcmd2').name='c11_mercchase';$('subcmd').value='{$mkey}';postCmd('gamecmd','command.php');this.disabled=true;" value="追击" <!--{if $nowmerc['hp']<=0}-->disabled<!--{/if}--> >
<!--{/if}-->
</td></tr></table>
</span>
</td>
</tr>
<tr>
<td class="b3" colspan=4>
<span style="text-align:left; display:inline-block;">
<table><tr><td>
花费<span class="yellow">{$movepaid}</span>元,将佣兵移动到
<select name="c11_merc{$mkey}moveto" id="c11_mercmoveto" style="width: 45px;">
<!--{loop range(0,count($arealist)-1) $pl}-->
<!--{if array_search($pl,$arealist) > $areanum || $hack}-->
<option value="$pl" <!--{if $nowmerc['pls']==$pl}-->selected<!--{/if}-->>$plsinfo[$pl]<br />
<!--{/if}-->
<!--{/loop}-->
</select>
<input type="button" style="width:45px" onclick="$('mode').value='revskpts';$('command').value='actskill_c11_merc';$('subcmd').name='c11_mercmkey';$('subcmd').value='{$mkey}';postCmd('gamecmd','command.php');this.disabled=true;" value="移动" <!--{if $nowmerc['hp']<=0}-->disabled<!--{/if}--> >
</td></tr></table>
</span>
</td>
</tr>
<tr>
<td class="b3" colspan=4>
<!--{eval $nowleave = get_skillpara('c11_merc','leave',$clbpara)[$mkey];$leave_desc = $nowleave ? '离开战场' : '留在原地';}-->
<span style="text-align:left; display:inline-block;">
<table><tr><td>
立刻<input type="button" style="width:45px; height:20px;" value="解雇" onclick="$('mode').value='revskpts';$('command').value='actskill_c11_merc';$('subcmd').name='c11_mercmkey';$('subcmd').value='{$mkey}';$('subcmd2').name='c11_mercfire';$('subcmd2').value='{$mkey}';postCmd('gamecmd','command.php');this.disabled=true;">该佣兵,之后该佣兵将<span class="yellow">{$leave_desc}</span>
</td></tr></table>
</span>
</td>
</tr>
</table>
<!--{/loop}-->
<!--{else}-->
你目前没有雇佣佣兵。<br>
<!--{/if}-->
<img class="dialog-background" src="img/profile.gif" onclick="closeDialog($('mercpage'));this.disabled=true;">
</dialog>
\ 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