Commit 827b7d1e authored by hisuinohoshi's avatar hisuinohoshi

rev combat phase 3.15

新增 战斗系统革新 阶段3.15:

- 怒气技能系统:
移植回「见敌必斩」社团的怒气技能;

变化&修正:
- 修复了获取技能时,传入参数为空时会错误判定传入对象的BUG;
- 修改了log与newsinfo表的数据结构,以对其进行扩容;
- 暂时将入场福袋替换为了社团卡;
parent ccd9f71b
......@@ -145,7 +145,7 @@ if($hp > 0 && !empty($clbpara['lasttimes']))
init_profile();
}
}
if($hp > 0 && in_array('inf_dizzy',$clbpara['skill']))
if($hp > 0 && !empty($clbpara['skill']) && in_array('inf_dizzy',$clbpara['skill']))
{
$dizzy_times = (($clbpara['starttimes']['inf_dizzy'] + $clbpara['lasttimes']['inf_dizzy']) - $now)*1000;
$log .= '<span class="yellow">你现在处于眩晕状态,什么都做不了!</span><br>眩晕状态持续时间还剩:<span id="timer" class="yellow">'.$dizzy_times.'.0</span>秒<br><script type="text/javascript">demiSecTimerStarter('.$dizzy_times.');</script>';
......
This diff is collapsed.
......@@ -10,10 +10,10 @@ CREATE TABLE bra_log (
type char(1) NOT NULL default '',
prcsd tinyint(1) unsigned NOT NULL default 0,
`time` int(10) unsigned NOT NULL default '0',
`log` varchar(255) NOT NULL default '',
`log` text NOT NULL default '',
PRIMARY KEY (lid)
) ENGINE=HEAP;
) ENGINE=MyISAM;
--
-- 表的结构 `bra_chat`
......@@ -77,7 +77,7 @@ DROP TABLE IF EXISTS bra_newsinfo;
CREATE TABLE bra_newsinfo (
nid smallint unsigned NOT NULL auto_increment,
`time` int(10) unsigned NOT NULL default '0',
`news` char(15) NOT NULL default '',
`news` char(30) NOT NULL default '',
`a` varchar(255) NOT NULL default '',
`b` varchar(255) NOT NULL default '',
`c` varchar(255) NOT NULL default '',
......
......@@ -602,7 +602,12 @@ EOT;
$unlock_flag = check_skill_unlock($sk,$data);
if($unlock_flag)
{
if(is_array($unlock_flag))
{
$unlock_cd = $unlock_flag[1]; $unlock_flag = $unlock_flag[0];
}
$unlock_flag = is_array($cskill['lockdesc']) ? $cskill['lockdesc'][$unlock_flag] : $cskill['lockdesc'];
if(isset($unlock_cd)) $unlock_flag = str_replace("[:cd:]","$unlock_cd",$unlock_flag);
$sk_temp .= <<<EOT
<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">
......@@ -676,7 +681,7 @@ function get_remaincdtime($pid){
function check_skilllasttimes(&$data=NULL)
{
global $cskills,$log,$now,$name;
if(empty($data))
if(!isset($data))
{
global $clbpara;
$para = &$clbpara;
......@@ -687,23 +692,31 @@ function check_skilllasttimes(&$data=NULL)
$para = &$data['clbpara'];
$nm = &$data['name'];
}
$pure_flag = 0;
if(!empty($para['lasttimes']))
{
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
foreach($para['lasttimes'] as $sk => $lts)
{
$stm = isset($para['starttimes'][$sk]) ? $para['starttimes'][$sk] : 0;
# 技能已达到时效,失去该技能,并清空相关内容
# 技能已达到时效
if($now > $lts+$stm)
{
lostclubskill($sk,$para);
$sk_name = $cskills[$sk]['name'];
$log.="<span class='yellow'>{$nm}{$sk_name}状态中恢复了!</span><br>";
return 1;
if(get_skilltags($sk,'buff'))
{
$log.="技能<span class='yellow'>「{$sk_name}」</span>的持续效果结束了!<br>";
}
else
{
$log.="{$nm}从<span class='yellow'>「{$sk_name}」</span>状态中恢复了!<br>";
}
lostclubskill($sk,$para);
$pure_flag = 1;
}
}
}
return;
return $pure_flag;
}
//通过pid抓取指定玩家/NPC数据
......
......@@ -54,7 +54,7 @@ function getclub($who, &$c1, &$c2, &$c3)
function changeclub($clb,&$data=NULL)
{
if(empty($data))
if(!isset($data))
{
global $club;
lostclub();
......@@ -104,7 +104,7 @@ function lostclub(&$data=NULL)
if(!$club) return 0;
# 丢失原社团时 注销社团技能
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
if(empty($data))
if(!isset($data))
{
$cks = $club_skillslist[$club];
foreach($cks as $sk) lostclubskill($sk,$clbpara);
......
......@@ -122,7 +122,7 @@
# 百战技能特效
if(isset($pa['skill_c1_veteran']))
{
$sk_def = get_skillpara('c1_veteran','choice',$pa);
$sk_def = get_skillpara('c1_veteran','choice',$pa['clbpara']);
if($sk_def)
{
global $itemspkinfo;
......@@ -276,6 +276,8 @@
$hitrate = min($hitrate_max_obbs[$pa['wep_kind']],$hitrate);
//获取社团技能对基础命中率的修正
$hitrate *= rev_get_clubskill_bonus_hitrate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd);
//获取社团技能对基础命中率的修正(新)
$hitrate *= get_clbskill_hitrate($pa,$pd,$active,$hitrate);
//异常状态状态修正
foreach ($inf_htr_p as $inf_ky => $value)
{
......@@ -296,6 +298,8 @@
$hitratebonus = 0.8;
//获取社团技能对连击命中率衰减系数的修正
$hitratebonus *= rev_get_clubskill_bonus_hitrate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd);
//获取社团技能对连击命中率衰减系数的修正(新)
$hitratebonus *= get_clbskill_r_hitrate($pa,$pd,$active,$hitratebonus);
//获取基础致伤率(防具耐久损伤率)系数
$inf_r = $infobbs[$pa['wep_kind']];
......@@ -316,6 +320,12 @@
if($pa['weps']==$nosta) $wep_imp_obbs *= 2;
//社团技能对武器损伤系数的修正
$wep_imp_obbs *= rev_get_clubskill_bonus_imprate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd);
//社团技能对武器损伤系数的修正(新)
# 「解牛」技能效果:
if(isset($pa['skill_c2_butcher']))
{
$wep_imp_obbs *= get_skillvars('c2_butcher','wepimpr');
}
}
else
{
......@@ -689,8 +699,14 @@
$dfluc = $dmg_fluc [$pa['wep_kind']];
//获取社团技能对伤害浮动系数的修正:
$dfluc += rev_get_clubskill_bonus_fluc($pa['club'],$pa['skills'],$pa,$pd['club'],$pa['skills'],$pd);
//计算伤害浮动:
$dmg_factor = (100 + rand ( - $dfluc, $dfluc )) / 100;
//获取社团技能对伤害浮动系数的修正(新):
$dfluc += get_clbskill_fluc($pa,$pd,$active);
//计算具体伤害浮动:
$dfluc = rand(-$dfluc,$dfluc);
//「舞钢」效果判定:
if(isset($pa['skill_c2_intuit']) && $dfluc < 0) $dfluc = abs($dfluc);
//汇总
$dmg_factor = (100 + $dfluc) / 100;
$damage = round ( $damage * $dmg_factor * rand ( 4, 10 ) / 10 );
//把计算得到的原始伤害保存在$pa['original_dmg']里
$pa['original_dmg'] = $damage;
......@@ -899,6 +915,14 @@
$pa['pierce_flag'] = 1;
}
}
# 「强袭」效果判定:
if(isset($pa['skill_c2_raiding']) && isset($pd['phy_def_flag']) && $pd['phy_def_flag'] != 2)
{
$pd['phy_def_flag'] = 0;
$log .= "{$pa['nm']}的攻击无视了{$pd['nm']}的伤害减半效果!<br>";
}
return;
}
......@@ -1069,6 +1093,14 @@
$pa['ex_pierce_flag'] = 1;
}
}
# 「强袭」效果判定:
if(isset($pa['skill_c2_raiding']) && isset($pd['ex_def_flag']) && $pd['ex_def_flag'] != 2)
{
$pd['ex_def_flag'] = 0;
$log .= "{$pa['nm']}的攻击无视了{$pd['nm']}的属性伤害减半效果!<br>";
}
return;
}
......@@ -1096,6 +1128,8 @@
$dmginf = '';
//计算单个属性的基础属性伤害: 基础伤害 + 效果↔伤害系数修正 + 熟练↔伤害系数修正
$ex_dmg = $ex_base_dmg[$ex] + $pa['wepe']/$ex_wep_dmg[$ex] + $pa['wep_skill']/$ex_skill_dmg[$ex];
//计算社团技能对单个属性基础伤害的补正
$ex_dmg += get_clbskill_ex_base_dmg_fix($pa,$pd,$active,$ex);
//计算单个属性能造成的基础伤害上限
if($ex_max_dmg[$ex]>0 && $ex_dmg>$ex_max_dmg[$ex]) $ex_dmg = $ex_max_dmg[$ex];
......@@ -1153,6 +1187,30 @@
global $log;
$fin_dmg_p = Array();
# 「强袭」效果判定:
if(isset($pa['skill_c2_raiding']))
{
$sk_p = get_skillvars('c2_raiding','findmgr');
$p = 1+($sk_p / 100);
$log.= "<span class='yellow'>「强袭」使{$pa['nm']}造成的最终伤害提高了{$sk_p}%!</span><br>";
$fin_dmg_p[] = $p;
}
# 「歼灭」效果判定:
if(isset($pa['skill_buff_annihil']))
{
# 「歼灭」有两段效果,一段为概率触发,一段为固定触发,所以只在概率触发的位置判定概率。
$sk_dice = diceroll(99);
$sk_obbs = get_skillvars('buff_annihil','rate');
if($sk_dice < $sk_obbs)
{
$sk_p = get_skillvars('buff_annihil','findmgr');
$p = $sk_p / 100;
$log.= "<span class='red'>暴击!</span><span class='lime'>「歼灭」使{$pa['nm']}造成的最终伤害提高了{$sk_p}%!</span><br>";
$fin_dmg_p[] = $p;
}
}
# 书中虫防守事件:移动到最终伤害系数变化阶段了
if($pd['type'] == 89 && ($pd['name'] == '高中生·白神' || $pd['name'] == '白神·讨价还价'))
{
......@@ -1193,6 +1251,13 @@
$log.="闷棍没有造成额外伤害!<br>";
}
}
# 「解牛」技能效果:
if(isset($pa['skill_c2_butcher']))
{
$sk_dmg = get_skillvars('c2_butcher','fixdmg') + $pa['lvl'];
$log.='<span class="yellow">「解牛」附加了'.$sk_dmg.'点伤害!</span><br>';
$fin_dmg += $sk_dmg;
}
# 伤害制御判定:
if(in_array('h',$pd['ex_keys']) && $fin_dmg>=1950)
......@@ -1281,11 +1346,11 @@
global $now;
if(!$pd['type'] && $pd['nm']!='你')
{
$pd['logsave'] .= "并且{$pa['nm']}凶猛的一击直接将你打晕了过去!<br>";
$pd['logsave'] .= "凶猛的一击直接将你打晕了过去!<br>";
}
elseif(!$pa['type'] && $pa['nm']!='你')
{
$pa['logsave'] .= "你凶猛的一击直接将{$pd['nm']}打晕了过去!</span><br>";
$pa['logsave'] .= "你凶猛的一击直接将<span class=\"yellow\">{$pd['name']}}</span>打晕了过去!<br>";
}
}
......@@ -1440,8 +1505,14 @@
$pd['cannot_counter_log'] = "{$pd['nm']}看起来非常生气!还是离他远点吧……";
return 0;
}
# 被「偷袭」技能攻击、或正处于眩晕状态时,无法反击
if(isset($pa['skill_c1_sneak']) || isset($pd['skill_inf_dizzy']))
# 被偷袭无法反击
if(isset($pa['skill_c1_sneak']))
{
$pd['cannot_counter_log'] = "{$pd['nm']}无法反击!";
return 0;
}
# 处于眩晕状态时,无法反击
if(isset($pd['skill_inf_dizzy']))
{
$pd['cannot_counter_log'] = "{$pd['nm']}正处于眩晕状态,无法反击!";
return 0;
......@@ -1455,6 +1526,17 @@
if(!empty($pa['wep_range']) && $pd['wep_range'] >= $pa['wep_range']) return 1;
# 鏖战状态下无视射程反击(爆系武器除外)
if((isset($pd['is_dfight']) || isset($pa['is_dfight'])) && !empty($pd['wep_range'])) return 1;
#「直感」触发后可以超射程反击:
if(isset($pd['skill_c2_intuit']))
{
$sk_dice = diceroll(99);
$sk_lvl = get_skilllvl('c2_intuit',$pd);
$sk_obbs = get_skillvars('c2_intuit','rangerate',$sk_lvl);
if($sk_dice < $sk_obbs)
{
return 1;
}
}
return 0;
}
......@@ -1482,6 +1564,8 @@
# 获取社团技能对反击率的修正
$counter *= rev_get_clubskill_bonus_counter($pd['club'],$pd['skills'],$pd,$pa['club'],$pa['skills'],$pa);
# 获取社团技能对反击率的修正(新)
$counter *= get_clbskill_counterate($pa,$pd,$active,$counter);
# 获取异常状态对反击率的影响
if(!empty($pd['inf']))
......
......@@ -28,7 +28,12 @@
if($bsk_cost) $pa['rage'] -= $bsk_cost;
# 成功释放主动技,应用标记
$pa['skill_'.$bsk] = 1;
$log .= "<span class=\"lime\">{$pa['nm']}消耗{$bsk_cost}点怒气,对{$pd['nm']}发动了技能「{$bsk_name}」!</span><br>";
$log .= "<span class=\"lime\">{$pa['nm']}{$pd['nm']}发动了技能「{$bsk_name}」!</span><br>";
# 检查是否需要addnews
addnews($now,'bsk_'.$bsk,$pa['name'],$pd['name']);
# 检查是否需要进行logsave
if(!$pd['type'] && $pd['nm']!='你') $pd['logsave'] .= "<span class=\"yellow\">{$pa['name']}</span>对你发动了技能<span class=\"red\">「{$bsk_name}」</span>!";
elseif(!$pa['type'] && $pa['nm']!='你') $pa['logsave'] .= "你对<span class=\"yellow\">{$pd['name']}</span>发动了技能<span class=\"red\">「{$bsk_name}」</span>!";
}
else
{
......@@ -49,7 +54,7 @@
foreach($pa['clbpara']['skill'] as $sk)
{
# 对于解锁技能,如果有特殊触发条件,在这里加入判定,否则会默认给一个触发标记
if(!check_skill_unlock($sk,$pa) && (get_skilltags($sk,'passive') || get_skilltags($sk,'inf')))
if((get_skilltags($sk,'passive') || get_skilltags($sk,'buff') || get_skilltags($sk,'inf')) && !check_skill_unlock($sk,$pa))
{
# 「猛击」特殊判定
if($sk == 'c1_crit')
......@@ -76,6 +81,76 @@
return;
}
# 获取社团技能对基础反击率的修正(新)
function get_clbskill_counterate(&$pa,&$pd,$active,$counterate)
{
#「直感」效果判定:
if(isset($pa['skill_c2_intuit']))
{
$sk_lvl = get_skilllvl('c2_intuit',$pa);
//获取反击倍率加成
$sk_r = 1 + (get_skillvars('c2_intuit','countergain',$sk_lvl) / 100);
$counterate *= $sk_r;
}
return $counterate;
}
# 获取社团技能对基础命中率的修正(新)
function get_clbskill_hitrate(&$pa,&$pd,$active,$hitrate)
{
#「直感」效果判定:
if(isset($pa['skill_c2_intuit']))
{
$sk_lvl = get_skilllvl('c2_intuit',$pa);
//获取命中倍率加成
$sk_r = 1 + (get_skillvars('c2_intuit','accgain',$sk_lvl) / 100);
$hitrate *= $sk_r;
}
return $hitrate;
}
# 获取社团技能对连击命中率的修正(新)
function get_clbskill_r_hitrate(&$pa,&$pd,$active,$hitrate)
{
#「直感」效果判定:
if(isset($pa['skill_c2_intuit']))
{
$sk_lvl = get_skilllvl('c2_intuit',$pa);
//获取连击命中率加成
$sk_r = 1 + (get_skillvars('c2_intuit','rbgain',$sk_lvl) / 100);
$hitrate *= $sk_r;
}
return $hitrate;
}
# 获取社团技能对伤害浮动的修正(新)
function get_clbskill_fluc(&$pa,&$pd,$active)
{
#「直感」效果判定:
if(isset($pa['skill_c2_intuit']))
{
$sk_lvl = get_skilllvl('c2_intuit',$pa);
//获取伤害浮动加成
$sk_fix = get_skillvars('c2_intuit','flucgain',$sk_lvl);
return $sk_fix;
}
return 0;
}
# 获取社团技能对单个属性基础伤害的定值补正
function get_clbskill_ex_base_dmg_fix(&$pa,&$pd,$active,$key)
{
$ex_dmg_fix = 0;
# 「歼灭」效果判定:
if(isset($pa['skill_buff_annihil']))
{
global $ex_wep_dmg;
$sk_var = round($pa['att']/$ex_wep_dmg[$key]);
$ex_dmg_fix += $sk_var;
}
return $ex_dmg_fix;
}
# 真红暮特殊判定
function attr_extra_19_crimson(&$pa,&$pd,$active,$phase=0)
{
......
This diff is collapsed.
......@@ -365,9 +365,10 @@
{
if($active)
{
$w_log = "手持<span class=\"red\">{$pa['wep_name']}</span>的<span class=\"yellow\">{$pa['name']}</span>向你袭击!<br>你受到其<span class=\"yellow\">$att_dmg</span>点攻击,对其做出了<span class=\"yellow\">$def_dmg</span>点反击。<br>";
$w_log = "手持<span class=\"red\">{$pa['wep_name']}</span>的<span class=\"yellow\">{$pa['name']}</span>向你袭击!<br>";
if(isset($pd['logsave'])) $w_log .= $pd['logsave'];
if(isset($pd['lvlup_log'])) $w_log .= $pd['lvlup_log'];
$w_log .= "你受到其<span class=\"yellow\">$att_dmg</span>点攻击,对其做出了<span class=\"yellow\">$def_dmg</span>点反击。<br>";
logsave ($pd['pid'],$now,$w_log,'c');
}
else
......@@ -375,6 +376,7 @@
$w_log = "你发现了手持<span class=\"red\">{$pd['wep_name']}</span>的<span class=\"yellow\">{$pd['name']}</span>并且先发制人!<br>你对其做出<span class=\"yellow\">$att_dmg</span>点攻击,受到其<span class=\"yellow\">$def_dmg</span>点反击。<br>";
if(isset($pa['logsave'])) $w_log .= $pa['logsave'];
if(isset($pa['lvlup_log'])) $w_log .= $pa['lvlup_log'];
$w_log .= "你受到其<span class=\"yellow\">$att_dmg</span>点攻击,对其做出了<span class=\"yellow\">$def_dmg</span>点反击。<br>";
logsave ($pa['pid'],$now,$w_log,'c');
}
}
......@@ -646,12 +648,19 @@
}
//获取最终伤害的定值变化(伤害制御、剔透)
$fin_damage_fix = get_final_dmg_fix($pa,$pd,$active,$damage);
if($fin_damage_fix > 0) $damage = $fin_damage_fix;
if($fin_damage_fix > 0)
{
$o_damage = $damage;
$damage = $fin_damage_fix;
}
//存在物理伤害以外的其他伤害 输出一段最终伤害log:
if($pdamage != $damage)
{
if(isset($fd_log) && !$fin_damage_fix) $log .= "<span class=\"yellow\">造成的总伤害:{$fd_log}=<span class=\"red\">$damage</span>。</span><br>";
else $log .= "<span class=\"yellow\">造成的总伤害:<span class=\"red\">$damage</span>。</span><br>";
$log .= "<span class=\"yellow\">造成的总伤害:";
if(isset($fd_log)) $log .= $fd_log.'=';
$log .= "<span class=\"red\">{$damage}";
if(isset($o_damage) && $o_damage != $damage) $log .= "({$o_damage})";
$log .= "</span>。</span><br>";
}
}
//将造成的最终伤害登记在$pa['final_damage']内
......
......@@ -7,7 +7,7 @@ if(!defined('IN_GAME')) {
include_once GAME_ROOT.'./include/game/titles.func.php';
function nparse_news($start = 0, $range = 0 ){//$type = '') {
global $week,$nowep,$db,$tablepre,$lwinfo,$plsinfo,$hplsinfo,$wthinfo,$typeinfo,$exdmginf,$newslimit;
global $week,$nowep,$db,$tablepre,$lwinfo,$plsinfo,$hplsinfo,$wthinfo,$typeinfo,$exdmginf,$newslimit,$cskills;
//$file = $file ? $file : $newsfile;
//$ninfo = openfile($file);
$range = $range == 0 ? $newslimit : $range ;
......@@ -315,6 +315,10 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"orange\">{$a}发送了控制指令,全部禁区解除!</span><br>\n";
} elseif($news == 'csl_addarea') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"orange\">{$a}发送了控制指令,下一回禁区提前到来了!</span><br>\n";
} elseif(strpos($news,'bsk_')===0) {
$bsk = substr($news,4);
$bname = $cskills[$bsk]['name'];
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"clan\">{$a}{$b}发动了技能<span class=\"yellow\">「{$bname}」</span>!</span><br>\n";
} else {
$newsinfo .= "<li>$time,$news,$a,$b,$c,$d<br>\n";
}
......
......@@ -84,9 +84,12 @@ if($mode == 'enter') {
$itm[1] = '面包'; $itmk[1] = 'HH'; $itme[1] = 120; $itms[1] = 15;
$itm[2] = '矿泉水'; $itmk[2] = 'HS'; $itme[2] = 140; $itms[2] = 15;
//$itm[6] = '银白盒子'; $itmk[6] = 'p'; $itme[6] = 1; $itms[6] = 1; $itmsk[6] = 'ps';
//$itm[5] = '秋刀鱼罐头'; $itmk[5] = 'HB'; $itme[5] = 70; $itms[5] = 15;
$itm[5] = 'GRAND OPENING 「开门大吉」'; $itmk[5] = 'p000'; $itme[5] = 1; $itms[5] = 1;
$itm[5] = '秋刀鱼罐头'; $itmk[5] = 'HB'; $itme[5] = 70; $itms[5] = 15;
//$itm[5] = 'GRAND OPENING 「开门大吉」'; $itmk[5] = 'p000'; $itme[5] = 1; $itms[5] = 1;
$dice = rand(1,2);
if($dice == 1){$itm[5] = '「铁拳无敌 社团卡」'; $itmk[5] = 'ZB'; $itme[5] = 1; $itms[5] = 1;}
else{$itm[5] = '「见敌必斩 社团卡」'; $itmk[5] = 'ZB'; $itme[5] = 2; $itms[5] = 1;}
if ($wingames <=1){
$itm[6] = '银白盒子'; $itmk[6] = 'ps'; $itme[6] = 1; $itms[6] = 1; $itmsk[6] = '';
}
......
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