Commit 4a50713a authored by Nemo Ma's avatar Nemo Ma Committed by GitHub

Merge pull request #52 from hikawiier/waaagh

rev combat phase 3.17
parents d59575b9 3ec76fe7
......@@ -594,7 +594,6 @@ if($hp > 0){
$p12[1]=1; $p12[2]=2;
$mode = 'command';
} elseif ($mode == 'revskpts') {
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
$sk = substr($command,9);
if(isset($cskills[$sk]))
{
......
......@@ -8,7 +8,7 @@ $club_skillslist = Array
(
1 => Array('s_hp','s_ad','f_heal','c1_def','c1_crit','c1_sneak','c1_burnsp','c1_bjack','c1_veteran'), #'铁拳无敌',
2 => Array('s_hp','s_ad','f_heal','c2_butcher','c2_intuit','c2_raiding','c2_master','c2_annihil'), #'见敌必斩',
3 => Array('s_hp','s_ad','f_heal'), #'灌篮高手',
3 => Array('s_hp','s_ad','f_heal','c3_pitchpow','c3_enchant','c3_potential','c3_hawkeye','c3_offset','c3_numerous'), #'灌篮高手',
4 => Array('s_hp','s_ad','f_heal','c4_stable','c4_break','c4_aiming','c4_loot','c4_roar','c4_sniper','c4_headshot'), #'狙击鹰眼',
5 => Array('s_hp','s_ad','f_heal'), #'拆弹专家',
6 => Array('s_hp','s_ad','f_heal'), #'宛如疾风',
......@@ -52,7 +52,7 @@ $cskills_tags = Array
(
'battle' => '<span tooltip="可以在战斗中主动使用" class="gold">【战斗技】</span>',
'passive' => '<span tooltip="满足条件时自动触发" class="gold">【被动技】</span>',
'active' => '<span tooltip="需主动启用才能产生效果" class="gold">【主动技】</span>',
'active' => '<span tooltip="在主动启动后才会产生效果" class="gold">【主动技】</span>',
//'cd' => '<span tooltip="隐藏标签:有此标签的技能会在载入时检查是否处于冷却状态" class="gold">【冷却技】</span>',
'openning' => '<span tooltip="仅在先制发现敌人时可用" class="gold">【开幕技】</span>',
//'buff' => '<span tooltip="隐藏标签:代表这是一个临时性状态" class="gold">【状态】</span>',
......@@ -370,7 +370,7 @@ $cskills = Array
),
'buff_annihil' => Array
(
'name' => '歼灭',
'name' => '[状态]歼灭',
'tags' => Array('buff'),
'desc' => '<span class="lime">「歼灭」生效中!<br>
增益效果剩余时间:<span class="yellow">[^lasttimes^]</span> 秒</span>',
......@@ -390,6 +390,172 @@ $cskills = Array
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
),
),
'c3_pitchpow' => Array
(
'name' => '臂力',
'tags' => Array('passive'),
'desc' => '手持投系武器时,反击率<span class="yellow">+[:countergain:]%</span>',
'maxlvl' => 6,
'cost' => Array(2,2,2,2,3,3,-1),
'input' => '升级',
'log' => '<span class="yellow">技能「臂力」升级成功。</span>',
'status' => Array('skillpara|c3_pitchpow-lvl'),
'effect' => Array(
0 => Array('skillpara|c3_pitchpow-lvl' => '+=::1'),
),
'svars' => Array(
'lvl' => 0, //初次获得时等级为0
),
'vars' => Array(
'countergain' => Array(0,20,40,60,80,100,125),
),
'lockdesc' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
),
),
'c3_enchant' => Array
(
'name' => '附魔',
'tags' => Array('battle','passive'),
'desc' => '<span tooltip="主动发动时,若角色身上不存在伤害类属性,则会为其临时附加一项随机属性。"><span class="grey">[附加提示]</span>
主动发动时,<br>在本次施加的下列属性中随机选择一种,<br>你持投系武器造成的该属性伤害永久<span class="yellow">+[:exdmggain:]%</span>(最高[:exdmgmax:]%)。<br>
持投掷兵器时生效,消耗<span class="yellow">[:ragecost:]</span>点怒气。<br>
目前各属性加成统计:<br></span>',
'bdesc' => '<span tooltip="主动发动时,若角色身上不存在伤害类属性,则会为其临时附加一项随机属性。"><span class="grey">[附加提示]</span>
发动后将使某一随机属性伤害永久<span class="yellow">+[:exdmggain:]%</span>;消耗<span class="red">[:ragecost:]</span>怒气</span>',
'vars' => Array(
'ragecost' => 8,
'exdmggain' => 3, //单项属性伤害加成
'exdmgmax' => 150, //单项属性伤害加成上限
'exdmgarr' => Array( //单项属性与加成的对应关系
'u' => 'ur', 'f' => 'ur',
'i' => 'ir', 'k' => 'ir',
'e' => 'er',
'p' => 'pr',
'w' => 'wr',
'd' => 'dr',
),
'exdmgdesc' => Array( //介绍该附魔对应的加成关系
'u' => '火焰/灼焰',
'i' => '冻气/冰华',
'p' => '毒性',
'w' => '音波',
'e' => '电气',
'd' => '爆炸',
),
),
'svars' => Array(
'ur' => 0,
'ir' => 0,
'pr' => 0,
'er' => 0,
'wr' => 0,
'dr' => 0,
'active_t' => 0,//技能发动次数
),
'lockdesc' => Array(
'lvl' => '5级时解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 5',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
),
),
'c3_potential' => Array
(
'name' => '潜能',
'tags' => Array('battle'),
'desc' => '本次攻击必中且物理伤害<span class="yellow">+[:phydmgr:]%</span><br>
持投系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气',
'bdesc' => '攻击必中且物理伤害<span class="yellow">+[:phydmgr:]%</span><br>消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 70,
'phydmgr' => 20,
),
'lockdesc' => Array(
'lvl' => '7级时解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 7',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
),
),
'c3_hawkeye' => Array
(
'name' => '枭眼',
'tags' => Array('passive'),
'desc' => '如果你的武器射程不小于敌人,你对其先制攻击率<span class="yellow">+[:activer:]%</span>,<br>
其攻击你时命中率<span class="yellow">-[:accloss:]%</span>,连击命中率惩罚<span class="yellow">+[:rbloss:]%</span>',
'vars' => Array(
'activer' => 10,
'accloss' => 12,
'rbloss' => 8,
),
'lockdesc' => Array(
'lvl' => '9级时解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 9',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
),
),
'c3_offset' => Array
(
'name' => '对撞',
'tags' => Array('active'),
'desc' => '持投系武器时,你有<span class="yellow">(<span tooltip="取决于你的投系熟练度">[^wc^]</span>×[:chancegainr:])%</span>的几率(<span class="yellow">上限[:maxchance:]%</span>),<br>
在受到伤害时抵挡<span class="yellow">(武器效果值的平方根×[:wepeffectr:])</span>点伤害(<span class="yellow">上限[:maxeffect:]点</span>)。<br>
成功抵挡伤害时,会使武器效果降低<span class="red">[:wepsloss:]%</span><br>
点击右侧的<span class="yellow">“切换”</span>按键可以随时激活或禁用该技能。<br>
[^skill-active^]',
'input' => '切换',
'log' => '<span class="yellow">切换了「对撞」的状态。</span>',
'events' => Array('active|c3_offset'),
'vars' => Array(
'maxeffect' => 3000,
'wepeffectr' => 10,
'wepsloss' => 3,
'minchance' => 0,
'maxchance' => 70,
'chancegainr' => 0.1,
),
'svars' => Array(
'active' => 0,
),
'pvars' => Array('wc','skill-active'),
'lockdesc' => Array(
'lvl' => '13级时解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 13',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
),
),
'c3_numerous' => Array
(
'name' => '百出',
'tags' => Array('passive'),
'desc' => '持投系武器时物理伤害<span class="yellow b">+([:dmgr:]×[:skillpara|c3_enchant-active_t:])%</span><br>
其中<span class="yellow">×</span>后的数值是你发动<span class="yellow">“附魔”</span>的次数<br>',
'vars' => Array(
'dmgr' => 2,
),
'pvars' => Array('skillpara|c3_enchant-active_t'),
'lockdesc' => Array(
'skillpara|c3_enchant-ur+skillpara|c3_enchant-ir+skillpara|c3_enchant-pr+skillpara|c3_enchant-er+skillpara|c3_enchant-wr+skillpara|c3_enchant-dr' => '“附魔”中最高的属性伤害加成达到120%时解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
),
//……
'unlock' => Array(
'skillpara|c3_enchant-ur+skillpara|c3_enchant-ir+skillpara|c3_enchant-pr+skillpara|c3_enchant-er+skillpara|c3_enchant-wr+skillpara|c3_enchant-dr' => '[:skillpara|c3_enchant-ur:] >= 120 || [:skillpara|c3_enchant-ir:] >= 120 || [:skillpara|c3_enchant-er:] >= 120 || [:skillpara|c3_enchant-wr:] >= 120 || [:skillpara|c3_enchant-pr:] >= 120 || [:skillpara|c3_enchant-dr:] >= 120',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
),
),
'c4_stable' => Array
(
'name' => '静息',
......@@ -576,12 +742,6 @@ $cskills = Array
'limit' => 2000,
'notype' => Array(88,92),//不能用来抡的NPC
),
'lockdesc' => Array(
'rage' => '怒气不足,需要<span class="red">100</span>点怒气才能使用',
),
'unlock' => Array(
'rage' => '[:rage:] > 100',
),
),
'inf_dizzy' => Array
(
......
......@@ -30,6 +30,21 @@ $npcinfo = array
'num' => 1,
'pass' => 'bra',
'club' => 4,
'clubskill' => Array(),
'clubskillpara' => Array
(
'c4_stable' => Array(
'lvl' => 5,
'costcount' => 14,
),
'c4_break' => Array(
'lvl' => 3,
'costcount' => 19,
),
'c4_roar' => Array(
'active' => 1,
),
),
'skills' => 66,
'bid' => 0,
'inf' => '',
......
......@@ -10,6 +10,8 @@ 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/game/revclubskills.func.php';
require GAME_ROOT.'./include/game/dice.func.php';
error_reporting(E_ALL);
set_error_handler('gameerrorhandler');
$magic_quotes_gpc = get_magic_quotes_gpc();
......
......@@ -560,7 +560,7 @@ function init_clubskillsdata($sk,$data)
# 本地不存在模板,按照预设信息生成一个
else
{
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
global $cskills;
# 要检查的技能没有登记过 视为无效技能
if(!array_key_exists($sk,$cskills)) return 0;
......@@ -690,7 +690,7 @@ function check_skilllasttimes(&$data=NULL)
$pure_flag = 0;
if(!empty($para['lasttimes']))
{
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
foreach($para['lasttimes'] as $sk => $lts)
{
$stm = isset($para['starttimes'][$sk]) ? $para['starttimes'][$sk] : 0;
......
......@@ -147,7 +147,7 @@ function findcorpse(&$w_pdata){
}
else
{
${$sk_value.'_words'} = $nospk;
${$sk_value.'_words'} = '';
}
}
}
......@@ -183,11 +183,9 @@ function findcorpse(&$w_pdata){
$loot_depot_flag = depot_getlist($w_name,$w_type) ? 1 : 0;
}
global $pdata;
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
if(!check_skill_unlock('tl_cstick',$pdata))
{
$cstick_flag = in_array($w_type,get_skillvars('tl_cstick','notype')) ? 0 : 1;
}
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
$cstick_flag = 0;
if(!check_skill_unlock('tl_cstick',$pdata) && !check_skill_cost('tl_cstick',$pdata)) $cstick_flag = in_array($w_type,get_skillvars('tl_cstick','notype')) ? 0 : 1;
include template('corpse');
$cmd = ob_get_contents();
ob_clean();
......
......@@ -3,7 +3,7 @@ if (! defined ( 'IN_GAME' )) {
exit ( 'Access Denied' );
}
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
function getskills(&$arr)
{
......
......@@ -85,7 +85,7 @@ function updateskill(&$data=NULL)
if ($club==14) { $att+=300; $def+=300; }
# 变更社团时 获取社团技能
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
if(empty($data))
{
$cks = $club_skillslist[$club];
......@@ -103,7 +103,7 @@ function lostclub(&$data=NULL)
global $club ,$clbpara, $club_skillslist;
if(!$club) return 0;
# 丢失原社团时 注销社团技能
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
if(!isset($data))
{
$cks = $club_skillslist[$club];
......
......@@ -604,7 +604,7 @@ function itemuse($itmn) {
global $cskills,$clbpara;
if(!empty($itmsk) && isset($cskills[$itmsk]))
{
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
$flag = getclubskill($itmsk,$clbpara);
if($flag)
{
......@@ -819,7 +819,7 @@ function itemuse($itmn) {
if(strpos( $itmk, 'ps' ) === 0){//银色盒子
include_once config('randomitem',$gamecfg);
//1st case of the new diceroll system.
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
$dice = diceroll(100);
//$dice = rand(1,100);
if($dice <= 75){//一般物品
......@@ -875,7 +875,7 @@ function itemuse($itmn) {
}else{ #防呆
include_once config('randomO1',$gamecfg);
}
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
$dice = diceroll(1000);
if($dice <= 550){//一般物品
$itemflag = $itmlow;
......
......@@ -1045,7 +1045,7 @@ function getcorpse($item){
return;
}
$log.="你销毁了{$edata['name']}的尸体。<br>但这一切值得吗……?<br>";
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
$rp += diceroll($rpup_destory_corpse);
addnews($now,'cdestroy',$name,$edata['name']);
destory_corpse($edata);
......
This diff is collapsed.
......@@ -4,9 +4,9 @@
exit('Access Denied');
}
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
include_once GAME_ROOT.'./include/game/itemmain.func.php';
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//revattr_extra.func.php: 记录NPC特殊战斗机制...玩家战斗技也先放这里了 嘻嘻
//Q:为什么要把每个NPC的特殊战斗机制都新建一个函数保存?
......@@ -19,7 +19,7 @@
# 检查主动技合法性
if(isset($pa['bskill']))
{
if(!check_skill_unlock($pa['bskill'],$pa) && !check_skill_active($pa['bskill'],$pa))
if(!check_skill_unlock($pa['bskill'],$pa) && !check_skill_cost($pa['bskill'],$pa))
{
$bsk = $pa['bskill'];
$bsk_name = $cskills[$bsk]['name'];
......@@ -27,7 +27,7 @@
$bsk_cost = get_skillvars($bsk,'ragecost');
if($bsk_cost) $pa['rage'] -= $bsk_cost;
# 成功释放主动技,应用标记
$pa['skill_'.$bsk] = 1;
$pa['bskill_'.$bsk] = 1;
$log .= "<span class=\"lime\">{$pa['nm']}{$pd['nm']}发动了技能「{$bsk_name}」!</span><br>";
# 检查是否需要addnews
addnews($now,'bsk_'.$bsk,$pa['name'],$pd['name']);
......@@ -53,6 +53,7 @@
# 遍历pa技能队列 检查是否解锁
foreach($pa['clbpara']['skill'] as $sk)
{
# passive、buff、inf标签技能通用判定
# 对于解锁技能,如果有特殊触发条件,在这里加入判定,否则会默认给一个触发标记
if((get_skilltags($sk,'passive') || get_skilltags($sk,'buff') || get_skilltags($sk,'inf')) && !check_skill_unlock($sk,$pa))
{
......@@ -61,7 +62,7 @@
{
$sk_dice = diceroll(99);
# 「偷袭」或「闷棍」技能生效时,「猛击」必定触发;
$sk_obbs = isset($pa['skill_c1_sneak'])||isset($pa['skill_c1_bjack']) ? 100 : get_skillvars('c1_crit','rate');
$sk_obbs = isset($pa['bskill_c1_sneak'])||isset($pa['bskill_c1_bjack']) ? 100 : get_skillvars('c1_crit','rate');
# 成功触发时
if($sk_dice < $sk_obbs)
{
......@@ -69,6 +70,11 @@
$pa['skill_c1_crit_log'] = "<span class=\"yellow b\">{$pa['nm']}朝着{$pd['nm']}打出了凶猛的一击!<span class=\"cyan b\">{$pd['nm']}被打晕了过去!</span></span><br>";
}
}
# 「枭眼」特殊判定:射程不小于对方时激活效果
elseif($sk == 'c3_hawkeye' && $pa['wep_range'] >= $pd['wep_range'])
{
$pa['skill_c3_hawkeye'] = 1;
}
# 其他非特判技能,默认给一个触发标记
else
{
......@@ -76,11 +82,47 @@
//$pa['skill_'.$sk.'_log'] = "";
}
}
# active标签技能通用判定
if(get_skilltags($sk,'active') && !empty(get_skillpara($sk,'active',$pa['clbpara'])) && !check_skill_unlock($sk,$pa))
{
$pa['askill_'.$sk] = 1;
}
}
}
return;
}
# 获取社团技能对先攻率(pa是否先攻pd)的修正(新)
function get_clbskill_activerate(&$pa,&$pd)
{
$r = 1;
# pa持有「枭眼」时的效果判定:
if(!check_skill_unlock('c3_hawkeye',$pa))
{
//计算双方射程差
$pa['wep_range'] = get_wep_range($pa);
$pd['wep_range'] = get_wep_range($pd);
if($pa['wep_range'] >= $pd['wep_range'])
{
$sk_r = get_skillvars('c3_hawkeye','activer');
$r += $sk_r/100;
}
}
# pd持有「枭眼」时的效果判定:
if(!check_skill_unlock('c3_hawkeye',$pd))
{
//计算双方射程差
$pa['wep_range'] = get_wep_range($pa);
$pd['wep_range'] = get_wep_range($pd);
if($pa['wep_range'] < $pd['wep_range'])
{
$sk_r = get_skillvars('c3_hawkeye','activer');
$r -= $sk_r/100;
}
}
return $r;
}
# 获取社团技能对基础反击率的修正(新)
function get_clbskill_counterate(&$pa,&$pd,$active,$counterate)
{
......@@ -92,17 +134,31 @@
$sk_r = 1 + (get_skillvars('c2_intuit','countergain',$sk_lvl) / 100);
$counterate *= $sk_r;
}
#「臂力」效果判定:
if(isset($pa['skill_c3_pitchpow']))
{
$sk_lvl = get_skilllvl('c3_pitchpow',$pa);
//获取反击倍率加成
$sk_r = 1 + (get_skillvars('c3_pitchpow','countergain',$sk_lvl) / 100);
$counterate *= $sk_r;
}
return $counterate;
}
# 获取社团技能对基础命中率的修正(新)
function get_clbskill_hitrate(&$pa,&$pd,$active,$hitrate)
{
# 加成:
#「潜能」效果判定:
if(isset($pa['bskill_c3_potential']))
{
//原来必中是这个意思……
return 10000;
}
#「直感」效果判定:
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;
}
......@@ -110,30 +166,42 @@
if(isset($pa['skill_c4_stable']))
{
$sk_lvl = get_skilllvl('c4_stable',$pa);
//获取命中倍率加成
$sk_r = 1 + (get_skillvars('c4_stable','accgain',$sk_lvl) / 100);
$hitrate *= $sk_r;
}
#「瞄准」效果判定:
if(isset($pa['skill_c4_aiming']))
{
//获取命中倍率加成
$sk_r = 1 + (get_skillvars('c4_aiming','accgain') / 100);
$hitrate *= $sk_r;
}
#「穿杨」效果判定:
if(isset($pa['skill_c4_sniper']))
{
//获取命中倍率加成
$sk_r = 1 + (get_skillvars('c4_sniper','accgain') / 100);
$hitrate *= $sk_r;
}
# 减益:
#「枭眼」效果判定:
if(isset($pd['skill_c3_hawkeye']))
{
$sk_r = 1 - (get_skillvars('c3_hawkeye','accloss') / 100);
$hitrate *= $sk_r;
}
return $hitrate;
}
# 获取社团技能对连击命中率的修正(新)
function get_clbskill_r_hitrate(&$pa,&$pd,$active,$hitrate)
{
# 加成:
#「潜能」效果判定:
if(isset($pa['bskill_c3_potential']))
{
//潜能激活时连击无衰减
return 1;
}
#「直感」效果判定:
if(isset($pa['skill_c2_intuit']))
{
......@@ -150,6 +218,13 @@
$sk_r = 1 + (get_skillvars('c4_stable','rbgain',$sk_lvl) / 100);
$hitrate *= $sk_r;
}
# 减益:
#「枭眼」效果判定:
if(isset($pd['skill_c3_hawkeye']))
{
$sk_r = 1 - (get_skillvars('c3_hawkeye','rbloss') / 100);
$hitrate *= $sk_r;
}
return $hitrate;
}
......@@ -201,7 +276,25 @@
}
return 0;
}
# 计算社团技能对单个属性基础伤害的系数补正
function get_clbskill_ex_base_dmg_r(&$pa,&$pd,$active,$key)
{
$ex_dmg_r = 1;
# 「附魔」效果判定:
if(isset($pa['skill_c3_enchant']))
{
$exdmgarr = get_skillvars('c3_enchant','exdmgarr');
if(isset($exdmgarr[$key]) && !empty(get_skillpara('c3_enchant',$exdmgarr[$key],$pa['clbpara'])))
{
$ex_r = get_skillpara('c3_enchant',$exdmgarr[$key],$pa['clbpara']);
$ex_dmg_r += $ex_r/100;
//echo "【DEBUG】附魔使{$key}伤害提高了{$ex_r}%<br>";
}
}
return $ex_dmg_r;
}
# 获取社团技能对单个属性基础伤害的定值补正
function get_clbskill_ex_base_dmg_fix(&$pa,&$pd,$active,$key)
{
......
......@@ -54,7 +54,7 @@
function escape_from_enemy(&$pa,&$pd)
{
global $action,$clbpara,$chase_escape_obbs,$log;
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
# 在受追击/鏖战状态下逃跑有概率失败
if(strpos($action,'pchase')===0 || strpos($action,'dfight')===0)
{
......@@ -101,7 +101,7 @@
//初始化玩家战斗技列表
if(!empty($sdata['clbpara']['skill']))
{
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
$battle_skills = Array();
$sk_nums = 0;
foreach($sdata['clbpara']['skill'] as $sk)
......@@ -120,7 +120,7 @@
//再检查技能是否满足激活条件
else
{
$unlock = check_skill_active($sk,$sdata);
$unlock = check_skill_cost($sk,$sdata);
if($unlock) $sk_desc .= $unlock;
}
//技能可以使用,输出介绍文本
......
......@@ -6,7 +6,7 @@
# 新社团技能:
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
# 获得指定技能 $sk:技能名;$para:$clbpara
function getclubskill($sk,&$para)
......@@ -58,21 +58,13 @@
$sk_key = array_search($sk,$para['skill']);
unset($para['skill'][$sk_key]);
# 失去指定技能时,注销对应技能参数
if(!empty($para['skillpara'][$sk]))
{
unset($para['skillpara'][$sk]);
}
if(!empty($para['skillpara'][$sk])) unset($para['skillpara'][$sk]);
# 失去指定技能时,注销对应技能开始时间
if(!empty($para['starttimes'][$sk])) unset($para['starttimes'][$sk]);
# 失去指定技能时,注销对应技能持续时间
if(!empty($para['lasttimes'][$sk]))
{
unset($para['lasttimes'][$sk]);
unset($para['starttimes'][$sk]);
}
if(!empty($para['lasttimes'][$sk])) unset($para['lasttimes'][$sk]);
# 失去指定技能时,注销对应技能持续回合
if(!empty($para['lastturns'][$sk]))
{
unset($para['lastturns'][$sk]);
}
if(!empty($para['lastturns'][$sk])) unset($para['lastturns'][$sk]);
}
return;
}
......@@ -256,6 +248,15 @@
return 0;
}
}
# 事件:切换技能的激活状态
if(strpos($event,'active|') === 0)
{
$event = explode('|',$event); $sk = $event[1];
$now_active = get_skillpara($sk,'active',$clbpara);
$active = $now_active ? 0 : 1;
$log .= $active ? "<span class='yellow'>技能已激活!</span><br>" : "<span class='yellow'>停用了技能效果。</span><br>" ;
set_skillpara($sk,'active',$active,$clbpara);
}
return 1;
}
......@@ -310,10 +311,11 @@
function check_skill_unlock($sk,$data=NULL)
{
global $cskills,$now;
if(!$data) $data = current_player_save();
if(empty($data)) $data = current_player_save();
$data['clbpara'] = get_clbpara($data['clbpara']);
if(!in_array($sk,$data['clbpara']['skill']))
if(empty($data['clbpara']['skill']) || !in_array($sk,$data['clbpara']['skill']))
{
//echo "技能{$sk}未解锁<br>";
return "技能未解锁!<br>";
}
if(!empty($cskills[$sk]['unlock']))
......@@ -395,8 +397,8 @@
return $key;
}
# 技能是否可激活,返回0时为可激活,否则返回对应的未满足条件 $sk:技能名;$data:角色数据
function check_skill_active($sk,$data)
# 技能是否满足消耗条件,返回0时为可激活,否则返回对应的未满足条件 $sk:技能名;$data:角色数据
function check_skill_cost($sk,$data)
{
global $cskills;
# 不满足激活条件输出的文本,先写在这里,之后挪到配置文件里
......@@ -456,7 +458,11 @@
# 变更保存在clbpara['skillpara']内的指定技能参数
function set_skillpara($sk,$skpara,$skdata,&$para)
{
$para['skillpara'][$sk][$skpara] = $skdata;
# 要有这个技能才能设置参数
if(in_array($sk,$para['skill']))
{
$para['skillpara'][$sk][$skpara] = $skdata;
}
return;
}
......@@ -567,7 +573,18 @@
foreach($cskill['vars'] as $key => $var)
{
# 静态参数是数组的情况下 选用当前等级对应的参数
if(is_array($var)) $var = $var[$now_clvl];
if(is_array($var))
{
if(isset($now_clvl))
{
$var = $var[$now_clvl];
}
else
{
# 静态参数是数组,但是却没有传入技能等级,说明可能是其他类型的参数,直接跳过
continue;
}
}
# 替换描述文本
$sk_desc = str_replace("[:".$key.":]",$var,$sk_desc);
}
......@@ -589,6 +606,23 @@
$sk_desc = str_replace("[^".$pvar."^]",$tpvar,$sk_desc);
}
}
elseif($pvar == 'skill-active')
{
if(isset($data['clbpara']['skillpara'][$sk]['active']))
{
$tpvar = $data['clbpara']['skillpara'][$sk]['active'];
$tpdesc = $tpvar ? "<span class='clan'>【技能效果已启用】</span>" : "<span class='grey'>【技能效果已关闭】</span>";
$sk_desc = str_replace("[^".$pvar."^]",$tpdesc,$sk_desc);
}
}
elseif(strpos($pvar,'skillpara') !== false)
{
# 格式化置换条件对应的置换内容
$skey_value = parse_skillrules($pvar);
$skey_value = eval("return $skey_value;");
# 置换对应内容
$sk_desc = str_replace("[:{$pvar}:]",$skey_value,$sk_desc);
}
else
{
if(isset($data[$pvar]))
......
......@@ -6,7 +6,7 @@
# 新社团技能 - 特殊社团技能处理:
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
# 「百战」技能判定
function skill_c1_veteran_act($choice)
......@@ -50,7 +50,7 @@
$log .= "无法重复解锁。<br>";
return;
}
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
set_skillpara($csk,'active',1,$pdata['clbpara']);
set_skillpara(get_skillvars($csk,'disableskill'),'disable',1,$pdata['clbpara']);
$log .= "<span class='yellow'>已解锁技能「{$cskills[$csk]['name']}」!</span><br>";
......@@ -61,13 +61,14 @@
function skill_tl_cstick_act(&$edata)
{
global $log,$pdata,$cskills;
include_once GAME_ROOT.'./include/game/revclubskills.func.php';
//include_once GAME_ROOT.'./include/game/revclubskills.func.php';
$lock = check_skill_unlock('tl_cstick',$pdata);
if(!$lock)
{
# 扣除怒气
$pdata['rage'] -= get_skillvars('tl_cstick','ragecost');
addnews($now,'bsk_tl_cstick',$pdata['name'],$edata['name']);
addnews($now,'bsk_tl_cstick',$pdata['name'],$edata['name'].'的尸体');
addnews($now,'cstick',$pdata['name'],$edata['name'].'的尸体');
# 炼到了不该炼的尸体
if(in_array($edata['type'],get_skillvars('tl_cstick','notype')))
{
......@@ -82,6 +83,7 @@
$pdata['itmk0'] = 'WP';
$pdata['itme0'] = round($edata['msp']);
$pdata['itms0'] = round($edata['mhp']);
$pdata['itmsk0'] = '';
$dice = diceroll(99);
$N_obbs = pow($edata['lvl'],1.3);
$z_obbs = !$edata['type'] ? pow($edata['lvl'],1.3) : pow($edata['lvl'],1.15);
......
......@@ -3,7 +3,7 @@
if(!defined('IN_GAME')) {
exit('Access Denied');
}
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
include_once GAME_ROOT.'./include/game/attr.func.php';
include_once GAME_ROOT.'./include/game/revattr.func.php';
include_once GAME_ROOT.'./include/game/combat.func.php';
......@@ -674,7 +674,7 @@
}
//获取最终伤害的定值变化(伤害制御、剔透)
$fin_damage_fix = get_final_dmg_fix($pa,$pd,$active,$damage);
if($fin_damage_fix > 0)
if($fin_damage_fix != $damage)
{
$o_damage = $damage;
$damage = $fin_damage_fix;
......
......@@ -628,7 +628,7 @@ function discover($schmode = 0) {
//include_once GAME_ROOT.'./include/game/clubskills.func.php';
//$active_r *= get_clubskill_bonus_active($club,$skills,$edata['club'],$edata['skills']);
//if ($active_r>96) $active_r=96;
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
include_once GAME_ROOT.'./include/game/revbattle.func.php';
include_once GAME_ROOT.'./include/game/revattr.func.php';
//获取并保存当前玩家数据
......
......@@ -574,13 +574,13 @@ function parse_info_desc($info,$type,$vars='',$short=0)
# 处理名字
if($type == 'm')
{
$tinfo = preg_replace('/锋利的|电气|毒性|\[\+.*\]|-改/', '', $info);
if(isset($tps_name[$tinfo]) && isset($tps_names[$tps_name[$tinfo]]))
$tinfo = !isset($tps_name[$info]) && !isset($tps_names[$info]) ? preg_replace('/锋利的|电气|毒性|\[\+.*\]|-改/', '', $info) : $info;
if(isset($tps_name[$tinfo]) && !is_array($tps_name[$tinfo]) && isset($tps_names[$tps_name[$tinfo]]))
{
$ts = $tps_names[$tps_name[$tinfo]];
$tinfo_f = isset($ts['class']) ? "class=\"{$ts['class']}\"" : '';
$tinfo_tp = isset($ts['title']) ? "tooltip=\"{$ts['title']}\"" : '';
return "<span {$tinfo_tp} {$tinfo_f}>{$tinfo}</span>";
return "<span {$tinfo_tp} {$tinfo_f}>{$info}</span>";
}
elseif(isset($tps_name[$tinfo]))
{
......@@ -611,7 +611,7 @@ function parse_info_desc($info,$type,$vars='',$short=0)
# 处理属性
if($type == 'sk')
{
$ret = '-^-';
$ret = '--';
# 处理该数量以上的属性时,将属性格式变为+...+的缩写
$short_nums = 4;
# 技能书特殊处理
......@@ -631,7 +631,7 @@ function parse_info_desc($info,$type,$vars='',$short=0)
if(!is_array($info)) $info = get_itmsk_array($info);
# 计数
$sk_max = count($info); $sk_nums = 0;
$sk_info = '';
$sk_info = ''; $sk_tp = '';
foreach($info as $sk)
{
$csk = $itemspkinfo[$sk];
......
......@@ -250,6 +250,8 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">$a</span>被<span class=\"yellow\">神北 小毬许愿复活</span><br>\n";
} elseif($news == 'delcp') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}的尸体被时空特使别动队销毁了</span><br>\n";
} elseif($news == 'cstick') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}{$b}作为武器抡了起来!哇……这可真是……</span><br>\n";
} elseif($news == 'editpc') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}遭到了黑幕的生化改造!</span><br>\n";
} elseif($news == 'suisidefail') {
......
......@@ -228,7 +228,7 @@ function kill($death, $dname, $dtype = 0, $dpid = 0, $annex = '', &$revival_flag
//依次判定复活效果
if (!$revival_flag && $weather == 17)
{
include_once GAME_ROOT.'./include/game/dice.func.php';
//include_once GAME_ROOT.'./include/game/dice.func.php';
$aurora_rate = $dtype ? 1 : 10; //NPC概率1% 玩家概率10%
$aurora_dice = diceroll(100);
if($aurora_dice<=$aurora_rate)
......
......@@ -112,6 +112,32 @@ function rs_game($mode = 0) {
}
//$npc['wp'] = $npc['wk'] = $npc['wg'] = $npc['wc'] = $npc['wd'] = $npc['wf'] = $npc['skill'];
if($npc['gd'] == 'r'){$npc['gd'] = rand(0,1) ? 'm':'f';}
# NPC技能初始化
// 社团技能初始化
global $club_skillslist;
if(isset($club_skillslist[$npc['club']]))
{
if(empty($npc['clbpara'])) $npc['clbpara']['skill'] = Array();
$npc_csk = $club_skillslist[$npc['club']];
foreach($npc_csk as $sk) getclubskill($sk,$npc['clbpara']);
}
// 自定技能初始化
global $cskills;
if(!empty($npc['clubskill']))
{
foreach($npc['clubskill'] as $sk) getclubskill($sk,$npc['clbpara']);
}
// 自定技能参数初始化
if(!empty($npc['clubskillpara']))
{
foreach($npc['clubskillpara'] as $sk => $skarr)
{
foreach($skarr as $skpara => $skvalue) set_skillpara($sk,$skpara,$skvalue,$npc['clbpara']);
}
}
//初始化NPC所在位置
global $hidding_typelist,$deepzones;
//女主不会刷新在危险区域
......@@ -126,6 +152,7 @@ function rs_game($mode = 0) {
do{$rpls=rand(1,$plsnum-1);}while ($rpls==34);
}
if($npc['pls'] == 99){$npc['pls'] = $rpls; }
$npc['state'] = 0;
$npc=player_format_with_db_structure($npc);
$db->array_insert("{$tablepre}players", $npc);
......
......@@ -3,8 +3,8 @@
<span>百战</span>
</td>
<td>
<!--{eval $unlock_c1_veteran_flag = check_skill_unlock('c1_veteran',$pdata);}-->
<!--{eval $para = get_clbpara($pdata['clbpara']); $nchoice = $para['skillpara']['c1_veteran']['choice'];}-->
<!--{eval $unlock_c1_veteran_flag = check_skill_unlock('c1_veteran',$uidata);}-->
<!--{eval $para = get_clbpara($uidata['clbpara']); $nchoice = $para['skillpara']['c1_veteran']['choice'];}-->
<!--{if $unlock_c1_veteran_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">
......
<!-- 注意:大部分技能可以直接通过编辑配置文件完成 -->
<!-- 可能的、需要新建模板的情况:你的技能需要在面板内执行比较复杂的、单靠配置文件无法实现的操作 -->
<tr>
<td class="b1" width="40">
<span>{$cskills['c3_enchant']['name']}</span>
</td>
<td>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
<!--{eval $unlock_c3_enchant_flag = check_skill_unlock('c3_enchant',$uidata);}-->
<!--{if $unlock_c3_enchant_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 $c3_enchant_desc = parse_skilldesc('c3_enchant',$uidata);}-->
{$c3_enchant_desc}
<span style="height:4px; display:block;">&nbsp;</span>
<span class="grey">
<!--{eval $c3_counts = 0;$exdmgarr = get_skillvars('c3_enchant','exdmgarr');}-->
<!--{loop get_skillvars('c3_enchant','exdmgdesc') $ex $exdesc}-->
<!--{eval $ex_r = get_skillpara('c3_enchant',$exdmgarr[$ex],$uidata['clbpara']);}-->
{$exdesc}:+{$ex_r}%;
<!--{if $c3_counts == 2}--><br><!--{/if}-->
<!--{eval $c3_counts++;}-->
<!--{/loop}-->
</span>
</span>
</td>
<td class="skilldesc_right b3">
</td>
</tr>
</table>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
<!--{if $unlock_c3_enchant_flag}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
<!-- 未满足解锁条件时显示的文本,自己填或使用下面的方式 -->
<!--{eval $c3_enchant_lockdesc = $cskills['c3_enchant']['lockdesc'][$unlock_c3_enchant_flag];}-->
$c3_enchant_lockdesc
</span>
</td>
</tr>
</table>
</div>
</div>
<!--{/if}-->
<!-- ↑↑↑ 存在解锁条件的技能才需要有这一部分 ↑↑↑ -->
</td>
</tr>
\ No newline at end of file
......@@ -5,7 +5,7 @@
<span>{$cskills['c4_roar']['name']}</span>
</td>
<td>
<!--{eval $unlock_c4_roar_flag = check_skill_unlock('c4_roar',$pdata);}-->
<!--{eval $unlock_c4_roar_flag = check_skill_unlock('c4_roar',$uidata);}-->
<!--{if $unlock_c4_roar_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">
......@@ -14,7 +14,7 @@
<tr>
<td class="skilldesc_left b3">
<span class="skilldesc">
<!--{eval $c4_roar_desc = parse_skilldesc('c4_roar',$pdata);}-->
<!--{eval $c4_roar_desc = parse_skilldesc('c4_roar',$uidata);}-->
$c4_roar_desc
</span>
</td>
......
......@@ -5,7 +5,7 @@
<span>{$cskills['c4_sniper']['name']}</span>
</td>
<td>
<!--{eval $unlock_c4_sniper_flag = check_skill_unlock('c4_sniper',$pdata);}-->
<!--{eval $unlock_c4_sniper_flag = check_skill_unlock('c4_sniper',$uidata);}-->
<!--{if $unlock_c4_sniper_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">
......@@ -14,7 +14,7 @@
<tr>
<td class="skilldesc_left b3">
<span class="skilldesc">
<!--{eval $c4_sniper_desc = parse_skilldesc('c4_sniper',$pdata);}-->
<!--{eval $c4_sniper_desc = parse_skilldesc('c4_sniper',$uidata);}-->
$c4_sniper_desc
</span>
</td>
......
......@@ -6,7 +6,7 @@
</td>
<td>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
<!--{eval $unlock_技能编号_flag = check_skill_unlock('技能编号',$pdata);}-->
<!--{eval $unlock_技能编号_flag = check_skill_unlock('技能编号',$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">
......@@ -17,7 +17,7 @@
<td class="skilldesc_left b3">
<span class="skilldesc">
<!-- 技能介绍,自己填任意内容或使用下面的方式 -->
<!--{eval $技能编号_desc = parse_skilldesc('技能编号',$pdata);}-->
<!--{eval $技能编号_desc = parse_skilldesc('技能编号',$uidata);}-->
$技能编号_desc
</span>
</td>
......
<dialog id="skillpage" style="width: 568px; max-width: 90%;max-height: 80%;">
<p style="margin-left:0px; margin-top:0px; margin-right:0px; margin-bottom:0px;">
<!--{if !empty($pdata['clbpara']['skill'])}-->
<!--{eval $uidata = $pdata;}-->
<!--{if !empty($uidata['clbpara']['skill'])}-->
你目前有<span class="lime b">$skillpoint</span>点技能点供自由分配,升级时可以获取新的技能点。<br>
以下是你的技能列表。<br><br>
......@@ -16,7 +17,7 @@
</td>
</tr>
<!--{loop $clbpara['skill'] $sknm}-->
<!--{eval $skdata = init_clubskillsdata($sknm,$pdata);}-->
<!--{eval $skdata = init_clubskillsdata($sknm,$uidata);}-->
<!--{if is_array($skdata)}-->
<!--{eval include template($skdata[0]);}-->
<!--{elseif !empty($skdata)}-->
......
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