Commit 980fb95e authored by hisuinohoshi's avatar hisuinohoshi

rev combat phase 3.16

战斗系统革新 阶段3.16:

- 怒气技能系统:
移植回「狙击鹰眼」社团的怒气技能;
……灌篮高手……是谁?
parent 3bcb080a
...@@ -595,26 +595,22 @@ if($hp > 0){ ...@@ -595,26 +595,22 @@ if($hp > 0){
$mode = 'command'; $mode = 'command';
} elseif ($mode == 'revskpts') { } elseif ($mode == 'revskpts') {
include_once GAME_ROOT.'./include/game/revclubskills.func.php'; include_once GAME_ROOT.'./include/game/revclubskills.func.php';
if(strpos($command,'upgskill_')!==false) $sk = substr($command,9);
if(isset($cskills[$sk]))
{ {
$sk = substr($command,9); if(strpos($command,'upgskill_')!==false)
if(isset(${$command.'_nums'}))
{ {
${$command.'_nums'} = (int)${$command.'_nums'}; # 升级技能
upgclbskills($sk,${$command.'_nums'}); $nums = isset(${$command.'_nums'}) ? (int)${$command.'_nums'} : 1;
} upgclbskills($sk,$nums);
else
{
upgclbskills($sk);
} }
} elseif(strpos($command,'actskill_')!==false)
elseif(strpos($command,'actskill_')!==false)
{
$sk = substr($command,9);
if(isset($cskills[$sk]) && !check_skill_unlock($sk,$pdata))
{ {
# 其他特殊技能按钮
include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php'; include_once GAME_ROOT.'./include/game/revclubskills_extra.func.php';
if($sk == 'c1_veteran') skill_c1_veteran_act($c1_veteran_choice); if($sk == 'c1_veteran') skill_c1_veteran_act($c1_veteran_choice);
elseif($sk == 'c4_roar' || $sk == 'c4_sniper') skill_c4_unlock($sk);
} }
} }
$mode = 'command'; $mode = 'command';
......
...@@ -36,7 +36,7 @@ if($gamestate == 0) { ...@@ -36,7 +36,7 @@ if($gamestate == 0) {
} }
$pdata['clbpara'] = get_clbpara($pdata['clbpara']); $pdata['clbpara'] = get_clbpara($pdata['clbpara']);
extract($pdata); extract($pdata,EXTR_REFS);
init_playerdata(); init_playerdata();
init_profile(); init_profile();
...@@ -140,7 +140,7 @@ if($hp > 0 && !empty($clbpara['lasttimes'])) ...@@ -140,7 +140,7 @@ if($hp > 0 && !empty($clbpara['lasttimes']))
{ {
$pdata = current_player_save(); $pdata = current_player_save();
$pdata['clbpara'] = get_clbpara($pdata['clbpara']); $pdata['clbpara'] = get_clbpara($pdata['clbpara']);
extract($pdata); extract($pdata,EXTR_REFS);
init_playerdata(); init_playerdata();
init_profile(); init_profile();
} }
......
...@@ -9,7 +9,7 @@ $club_skillslist = Array ...@@ -9,7 +9,7 @@ $club_skillslist = Array
1 => Array('s_hp','s_ad','f_heal','c1_def','c1_crit','c1_sneak','c1_burnsp','c1_bjack','c1_veteran'), #'铁拳无敌', 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'), #'见敌必斩', 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'), #'灌篮高手',
4 => Array('s_hp','s_ad','f_heal'), #'狙击鹰眼', 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'), #'拆弹专家', 5 => Array('s_hp','s_ad','f_heal'), #'拆弹专家',
6 => Array('s_hp','s_ad','f_heal'), #'宛如疾风', 6 => Array('s_hp','s_ad','f_heal'), #'宛如疾风',
7 => Array('s_hp','s_ad','f_heal'), #'锡安成员', 7 => Array('s_hp','s_ad','f_heal'), #'锡安成员',
...@@ -56,6 +56,7 @@ $cskills_tags = Array ...@@ -56,6 +56,7 @@ $cskills_tags = Array
//'cd' => '<span tooltip="隐藏标签:有此标签的技能会在载入时检查是否处于冷却状态" class="gold">【冷却技】</span>', //'cd' => '<span tooltip="隐藏标签:有此标签的技能会在载入时检查是否处于冷却状态" class="gold">【冷却技】</span>',
'openning' => '<span tooltip="仅在先制发现敌人时可用" class="gold">【开幕技】</span>', 'openning' => '<span tooltip="仅在先制发现敌人时可用" class="gold">【开幕技】</span>',
//'buff' => '<span tooltip="隐藏标签:代表这是一个临时性状态" class="gold">【状态】</span>', //'buff' => '<span tooltip="隐藏标签:代表这是一个临时性状态" class="gold">【状态】</span>',
//'unlock_battle_hidden' => '<span tooltip="隐藏标签:未解锁时不会在战斗界面显示" class="gold">【隐藏】</span>',
); );
# 技能登记: # 技能登记:
...@@ -68,9 +69,8 @@ $cskills = Array ...@@ -68,9 +69,8 @@ $cskills = Array
'tags' => Array(), //(非必填)定义一个技能带有的标签 'tags' => Array(), //(非必填)定义一个技能带有的标签
'desc' => '', //(非必填)技能介绍,显示在技能面板上,可以使用[: :]设置一些静态参数,会在生成时自动替换对应参数。 'desc' => '', //(非必填)技能介绍,显示在技能面板上,可以使用[: :]设置一些静态参数,会在生成时自动替换对应参数。
// [:cost:]:消耗的技能点 // [:cost:]:消耗的技能点
// [:effect:]:增加指定属性 // [::]:还可以替换为任意'effect'、'vars'内定义过的键名
// [:effect:]att :增加对应属性,可以将att替换为'effect'内定义过的键名 // [^^]:可以被替换为在'pvars'内定义过的角色数据,比如lvl
// [::]:还可以替换为任意'vars'内定义过的键名
'bdesc' => '', //(战斗技必填)显示在战斗界面上的短介绍,战斗技必填 'bdesc' => '', //(战斗技必填)显示在战斗界面上的短介绍,战斗技必填
'maxlvl' => 0, //(非必填)定义一个技能为可升级技能,并定义该技能的等级上限。注意:带有等级上限的技能如果设置了'cost','cost'的值必须是一个数组,对应每等级升级时需消耗的技能点 'maxlvl' => 0, //(非必填)定义一个技能为可升级技能,并定义该技能的等级上限。注意:带有等级上限的技能如果设置了'cost','cost'的值必须是一个数组,对应每等级升级时需消耗的技能点
...@@ -81,15 +81,15 @@ $cskills = Array ...@@ -81,15 +81,15 @@ $cskills = Array
'status' => Array('hp','mhp'),//(非必填)每次升级时,直接提升的玩家属性。 'status' => Array('hp','mhp'),//(非必填)每次升级时,直接提升的玩家属性。
// 和头衔入场奖励类似,支持所有在数据库中登记过的字段名 // 和头衔入场奖励类似,支持所有在数据库中登记过的字段名
// 如果输入了Array('para' => Array('lvl')),代表升级时会提升该技能的等级 // 依 skillpara|c1_crit-lvl 格式设定,可以改变储存在clbpara内的内容。具体格式为:键名|技能名-子键名 如没有子键名只需要填 键名|技能名
'effect' => Array(0 => Array('att' => 4, 'def' => 6),13 => Array('att' => 9, 'def' => 12),),//(非必填)每次升级时,直接提升的玩家属性对应的值。 'effect' => Array(0 => Array('att' => 4, 'def' => 6),13 => Array('att' => 9, 'def' => 12),),//(非必填)每次升级时,直接提升的玩家属性对应的值。
// 键名为 0 时,代表默认情况下会增加的对应属性值。键值可以是一个由字段名构成的数组。也可以只是一个数字——代表会增加所有'status'中登记的属性值 // 键名为 0 时,代表默认情况下会增加的对应属性值。键值可以是一个由字段名构成的数组。也可以只是一个数字——代表会增加所有'status'中登记的属性值
// 键名为 其他数字 时,代表该数字对应【社团】会增加的属性值 // 键名为 其他数字 时,代表该数字对应 社团 会增加的属性值
'events' => Array(''); //(非必填)每次升级时会触发的事件,目前只有一个'heal',代表全恢复 'events' => Array(''); //(非必填)每次升级时会触发的事件
'link' => Array(), //(非必填)技能的关联对象:技能在生成介绍模板时,会同时从关联对象中获取静态参数 'link' => Array(), //(非必填)技能的关联对象:技能在生成介绍模板时,会同时从关联对象中获取静态参数
'vars' => Array(), //(非必填)技能内预设的静态参数,比如'ragecost'怒气消耗。预设的参数可以自动填充'desc'中对应[::]的内容 'vars' => Array(), //(非必填)技能内预设的静态参数,比如'ragecost'怒气消耗。预设的参数可以自动填充'desc'中对应[::]的内容
'svars' => Array(), //(非必填)初次获得技能时,保存在clbpara['skillpara']['技能编号']中的动态技能参数。可以用来定义技能的使用次数等。 'svars' => Array(), //(非必填)初次获得技能时,保存在clbpara['skillpara']['技能编号']中的动态技能参数。可以用来定义技能的使用次数等。
'pvars' => Array(), //(非必填)技能会受到对应的角色数据影响,可见技能-解牛;
'slast' => Array('lasttimes' => 0,'lastturns' => 0,), //(非必填)初次获得时效性技能时,保存在clbpara内的数据。暂时只支持以下参数: 'slast' => Array('lasttimes' => 0,'lastturns' => 0,), //(非必填)初次获得时效性技能时,保存在clbpara内的数据。暂时只支持以下参数:
// 'lasttimes' => 0, 代表技能持续的时间,保存在clbpara['lasttimes']['技能编号']中 // 'lasttimes' => 0, 代表技能持续的时间,保存在clbpara['lasttimes']['技能编号']中
// 'lastturns' => 0, 代表技能持续的回合,保存在clbpara['lastturns']['技能编号']中 // 'lastturns' => 0, 代表技能持续的回合,保存在clbpara['lastturns']['技能编号']中
...@@ -102,29 +102,29 @@ $cskills = Array ...@@ -102,29 +102,29 @@ $cskills = Array
's_hp' => Array 's_hp' => Array
( (
'name' => '生命', 'name' => '生命',
'desc' => '每消耗<span class="lime">[:cost:]</span>技能点,生命上限<span class="yellow">+[:effect:]</span>点', 'desc' => '每消耗<span class="lime">[:cost:]</span>技能点,生命上限<span class="yellow">+[:hp:]</span>点',
'cost' => 1, 'cost' => 1,
'input' => '升级', 'input' => '升级',
'num_input' => 1, 'num_input' => 1,
'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,你的生命上限增加了<span class="yellow">[:effect:]</span>点。<br>', 'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,你的生命上限增加了<span class="yellow">[:hp:]</span>点。<br>',
'status' => Array('hp','mhp'), 'status' => Array('hp','mhp'),
'effect' => Array( 'effect' => Array(
0 => 3, # 默认每消耗cost点技能点可增加3点生命值与最大生命值 0 => Array( 'hp' => '+=::3', 'mhp' => '+=::3',),
13 => 6,# 根性兄贵每消耗cost点技能点可增加6点生命值与最大生命值 13 => Array( 'hp' => '+=::6', 'mhp' => '+=::6',),
), ),
), ),
's_ad' => Array 's_ad' => Array
( (
'name' => '攻防', 'name' => '攻防',
'desc' => '每消耗<span class="lime">[:cost:]</span>技能点,基础攻击<span class="yellow">+[:effect:]att</span>点,基础防御<span class="yellow">+[:effect:]def</span>点', 'desc' => '每消耗<span class="lime">[:cost:]</span>技能点,基础攻击<span class="yellow">+[:att:]</span>点,基础防御<span class="yellow">+[:def:]</span>点',
'cost' => 1, 'cost' => 1,
'input' => '升级', 'input' => '升级',
'num_input' => 1, 'num_input' => 1,
'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,你的基础攻击增加了<span class="yellow">[:effect:]att</span>点,基础防御增加了<span class="yellow">[:effect:]def</span>点。<br>', 'log' => '消耗了<span class="lime">[:cost:]</span>点技能点,你的基础攻击增加了<span class="yellow">[:att:]</span>点,基础防御增加了<span class="yellow">[:def:]</span>点。<br>',
'status' => Array('att','def'), 'status' => Array('att','def'),
'effect' => Array( 'effect' => Array(
0 => Array('att' => 4, 'def' => 6), 0 => Array('att' => '+=::4', 'def' => '+=::6'),
14 => Array('att' => 9, 'def' => 12), 14 => Array('att' => '+=::9', 'def' => '+=::12'),
), ),
), ),
'f_heal' => Array 'f_heal' => Array
...@@ -159,10 +159,10 @@ $cskills = Array ...@@ -159,10 +159,10 @@ $cskills = Array
'maxlvl' => 2, 'maxlvl' => 2,
'cost' => Array(10,11,-1), 'cost' => Array(10,11,-1),
'input' => '升级', 'input' => '升级',
'log' => '升级成功。<br>', 'log' => '<span class="yellow">技能「猛击」升级成功。</span>',
'status' => Array('para' => Array('lvl')), 'status' => Array('skillpara|c1_crit-lvl'),
'effect' => Array( 'effect' => Array(
0 => Array('lvl' => 1), 0 => Array('skillpara|c1_crit-lvl' => '+=::1'),
), ),
'svars' => Array( 'svars' => Array(
'lvl' => 0, //初次获得时等级为0 'lvl' => 0, //初次获得时等级为0
...@@ -255,7 +255,7 @@ $cskills = Array ...@@ -255,7 +255,7 @@ $cskills = Array
( (
'name' => '解牛', 'name' => '解牛',
'tags' => Array('battle'), 'tags' => Array('battle'),
'desc' => '本次攻击附加<span class="yellow">([:fixdmg:]+[^lvl^])</span>点的最终伤害,且武器损耗率减半。<br> 'desc' => '本次攻击附加<span class="yellow">([:fixdmg:]+<span tooltip="基于你目前的等级">[^lvl^]</span>)</span>点的最终伤害,且武器损耗率减半。<br>
持斩系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气', 持斩系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气',
'bdesc' => '本次攻击附加<span class="yellow">[:fixdmg:]+[^lvl^]</span>点伤害,且武器损耗率减半,消耗<span class="red">[:ragecost:]</span>怒气', 'bdesc' => '本次攻击附加<span class="yellow">[:fixdmg:]+[^lvl^]</span>点伤害,且武器损耗率减半,消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array( 'vars' => Array(
...@@ -279,10 +279,10 @@ $cskills = Array ...@@ -279,10 +279,10 @@ $cskills = Array
'maxlvl' => 6, 'maxlvl' => 6,
'cost' => Array(4,4,4,4,5,5,-1), 'cost' => Array(4,4,4,4,5,5,-1),
'input' => '升级', 'input' => '升级',
'log' => '升级成功。<br>', 'log' => '<span class="yellow">技能「直感」升级成功。</span>',
'status' => Array('para' => Array('lvl')), 'status' => Array('skillpara|c2_intuit-lvl'),
'effect' => Array( 'effect' => Array(
0 => Array('lvl' => 1), 0 => Array('skillpara|c2_intuit-lvl' => '+=::1'),
), ),
'svars' => Array( 'svars' => Array(
'lvl' => 0, //初次获得时等级为0 'lvl' => 0, //初次获得时等级为0
...@@ -342,9 +342,9 @@ $cskills = Array ...@@ -342,9 +342,9 @@ $cskills = Array
增益效果持续时间<span class="yellow">[:lasttimes:]</span>秒,冷却时间<span class="clan">[:cd:]</span>秒。<br>', 增益效果持续时间<span class="yellow">[:lasttimes:]</span>秒,冷却时间<span class="clan">[:cd:]</span>秒。<br>',
'input' => '发动', 'input' => '发动',
'log' => '<span class="lime">技能「歼灭」发动成功。</span><br>', 'log' => '<span class="lime">技能「歼灭」发动成功。</span><br>',
'status' => Array('para' => Array('active')), 'status' => Array('skillpara|c2_annihil-active'),
'effect' => Array( 'effect' => Array(
0 => Array('active' => 1), 0 => Array('skillpara|c2_annihil-active' => '=::1'),
), ),
'events' => Array('setstarttimes_c2_annihil','getskill_buff_annihil'), 'events' => Array('setstarttimes_c2_annihil','getskill_buff_annihil'),
'link' => Array('buff_annihil'), 'link' => Array('buff_annihil'),
...@@ -358,13 +358,13 @@ $cskills = Array ...@@ -358,13 +358,13 @@ $cskills = Array
'lockdesc' => Array( 'lockdesc' => Array(
'lvl' => '21级时解锁', 'lvl' => '21级时解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">斩系武器</span>时可发动', 'wepk+wep_kind' => '武器不适用,持<span class="yellow">斩系武器</span>时可发动',
'skillpara-active' => '技能发动中!', 'skillpara|c2_annihil-active' => '技能发动中!',
'skillcooldown' => '技能冷却中!<br>剩余冷却时间:<span class="red">[:cd:]</span> 秒', 'skillcooldown' => '技能冷却中!<br>剩余冷却时间:<span class="red">[:cd:]</span> 秒',
), ),
'unlock' => Array( 'unlock' => Array(
'lvl' => '[:lvl:] >= 21', 'lvl' => '[:lvl:] >= 21',
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'", 'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
'skillpara-active' => '[:active:] <= 0', 'skillpara|c2_annihil-active' => 'empty([:skillpara|c2_annihil-active:])',
'skillcooldown' => 0, 'skillcooldown' => 0,
), ),
), ),
...@@ -390,6 +390,180 @@ $cskills = Array ...@@ -390,6 +390,180 @@ $cskills = Array
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'", 'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
), ),
), ),
'c4_stable' => Array
(
'name' => '静息',
'tags' => Array('passive'),
'desc' => '持射系武器时,你的命中率<span class="yellow">+[:accgain:]%</span>,连击命中率惩罚降低<span class="yellow">[:rbgain:]%</span><br>',
'maxlvl' => 6,
'cost' => Array(2,2,3,3,4,5,-1),
'input' => '升级',
'log' => '<span class="yellow">技能「静息」升级成功。</span><br>',
'status' => Array('skillpara|c4_stable-lvl','skillpara|c4_stable-costcount'),
'effect' => Array(
0 => Array(
'skillpara|c4_stable-lvl' => '+=::1',
'skillpara|c4_stable-costcount' => Array('=::2','=::4','=::7','=::10','=::14','=::19','=::19'),
),
),
'svars' => Array(
'lvl' => 0, //初次获得时等级为0
'costcount' => 0, //初次获得时花费点数为0
),
'vars' => Array(
'accgain' => Array(0,2,4,6,8,10,12), //命中增益
'rbgain' => Array(0,2,4,6,8,10,12), //连击命中惩罚降低
),
'lockdesc' => '武器不适用,持<span class="yellow">射系武器</span>或<span class="yellow">重型枪械</span>时生效',
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
),
),
'c4_break' => Array
(
'name' => '破甲',
'tags' => Array('passive'),
'desc' => '持射系武器时,你的攻击致伤率<span class="yellow">[:infrgain:]</span>,造成的防具损坏效果<span class="yellow">+[:inftfix:]</span><br>
战斗中每造成敌人一处受伤,最终伤害增加<span class="yellow">[:infdmgr:]%</span>',
'maxlvl' => 3,
'cost' => Array(6,6,7,-1),
'input' => '升级',
'log' => '<span class="yellow">技能「破甲」升级成功。</span><br>',
'status' => Array('skillpara|c4_break-lvl','skillpara|c4_break-costcount'),
'effect' => Array(
0 => Array(
'skillpara|c4_break-lvl' => '+=::1',
'skillpara|c4_break-costcount' => Array('=::6','=::12','=::19','=::19'),
),
),
'svars' => Array(
'lvl' => 0, //初次获得时等级为0
'costcount' => 0, //初次获得时花费点数为0
),
'vars' => Array(
'infrgain' => Array(0,50,100,150), //致伤率提高
'inftfix' => Array(0,1,2,4), //额外耐久削减
'infdmgr' => Array(0,10,20,30), //每处致伤提高最终伤害
),
'lockdesc' => '武器不适用,持<span class="yellow">射系武器</span>或<span class="yellow">重型枪械</span>时生效',
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
),
),
'c4_aiming' => Array
(
'name' => '瞄准',
'tags' => Array('battle'),
'desc' => '本次攻击物理伤害<span class="yellow">+[:phydmgr:]</span>,命中率<span class="yellow">+[:accgain:]%</span><br>
使用射系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气',
'bdesc' => '本次攻击物理伤害<span class="yellow">+[:phydmgr:]%</span>,<br>命中率<span class="yellow">+[:accgain:]%</span><br>
消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 20,
'accgain' => 15, //命中增益
'phydmgr' => 20, //物理伤害加成
),
'lockdesc' => Array(
'lvl' => '3级时解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">射系武器</span>或<span class="yellow">重型枪械</span>时生效',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 3',
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
),
),
'c4_loot' => Array
(
'name' => '掠夺',
'tags' => Array('passive'),
'desc' => '当你在战斗中击杀敌人时,你立即获得<span class="yellow">(<span tooltip="基于你目前的等级">[^lvl^]</span>×[:goldr:])</span>点金钱。',
'vars' => Array(
'goldr' => 2,
),
'pvars' => Array('lvl'),
'lockdesc' => Array(
'lvl' => '8级时解锁',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 8',
),
),
'c4_roar' => Array
(
'name' => '咆哮',
'tags' => Array('battle','unlock_battle_hidden'),
'desc' => '本次攻击物理伤害<span class="yellow">+[:phydmgr:]%</span>,属性伤害<span class="yellow">+[:exdmgr:]%</span>,<br>
防具损坏效果<span class="yellow">+[:inftfix:]</span>。使用射系武器方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气',
'bdesc' => '物理伤害<span class="yellow">+[:phydmgr:]%</span>,属性伤害<span class="yellow">+[:exdmgr:]%</span>,
防具损坏效果<span class="yellow">+[:inftfix:]</span>。消耗<span class="red">[:ragecost:]</span>怒气',
'vars' => Array(
'ragecost' => 75,
'inftfix' => 2,
'phydmgr' => 20, //物理伤害加成
'exdmgr' => 80, //属性伤害加成
'disableskill' => 'c4_sniper',
),
'lockdesc' => Array(
'skillpara|c4_roar-disable' => '已无法使用该技能!',
'skillpara|c4_roar-active' => '点击「解锁」获得此技能,之后将无法使用技能「穿杨」<br>',
'lvl' => '已解锁,15级后可用',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">射系武器</span>或<span class="yellow">重型枪械</span>时生效',
),
'unlock' => Array(
'skillpara|c4_roar-disable' => 'empty([:skillpara|c4_roar-disable:])',
'skillpara|c4_roar-active' => '!empty([:skillpara|c4_roar-active:])',
'lvl' => '[:lvl:] >= 15',
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
),
),
'c4_sniper' => Array
(
'name' => '穿杨',
'tags' => Array('battle','unlock_battle_hidden'),
'desc' => '物理伤害<span class="yellow">+[:phydmgr:]%</span>,命中率<span class="yellow">+[:accgain:]%</span>,射程<span class="yellow">+[:rangegain:]</span>,<span class="yellow">连击</span>无效,<br>
但<span class="yellow">[:prfix:]%概率贯穿</span>。使用远程武器/重型枪械方可发动,消耗<span class="yellow">[:ragecost:]</span>点怒气',
'bdesc' => '物理伤害<span class="yellow">+[:phydmgr:]%</span>,命中率<span class="yellow">+[:accgain:]%</span>,射程<span class="yellow">+[:rangegain:]</span>,<span class="yellow">连击</span>无效,
但<span class="yellow">[:prfix:]%概率贯穿</span>。消耗<span class="yellow">[:ragecost:]</span>点怒气',
'vars' => Array(
'ragecost' => 95,
'rangegain' => 1,
'phydmgr' => 80, //物理伤害加成
'accgain' => 20, //命中率加成
'prfix' => 90, //贯穿触发率定值
'disableskill' => 'c4_roar',
),
'lockdesc' => Array(
'skillpara|c4_sniper-disable' => '已无法使用该技能!',
'skillpara|c4_sniper-active' => "点击「解锁」获得此技能,之后将无法使用技能「咆哮」<br>",
'lvl' => '已解锁,15级后可用',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">射系武器</span>或<span class="yellow">重型枪械</span>时生效',
),
'unlock' => Array(
'skillpara|c4_sniper-disable' => 'empty([:skillpara|c4_sniper-disable:])',
'skillpara|c4_sniper-active' => '!empty([:skillpara|c4_sniper-active:])',
'lvl' => '[:lvl:] >= 15',
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
),
),
'c4_headshot' => Array
(
'name' => '爆头',
'tags' => Array('passive'),
'desc' => '使用射系武器造成超过<span class="yellow">[:killline:]%</span>目标当前生命值的伤害时,自动将其秒杀',
'vars' => Array(
'killline' => 85,
),
'lockdesc' => Array(
'lvl' => '15级时解锁',
'skillpara|c4_stable-costcount+skillpara|c4_break-costcount' => '在「静息」和「破甲」上共计花费至少15技能点以解锁',
'wepk+wep_kind' => '武器不适用,持<span class="yellow">射系武器</span>或<span class="yellow">重型枪械</span>时生效',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 15',
'skillpara|c4_stable-costcount+skillpara|c4_break-costcount' => '[:skillpara|c4_stable-costcount:]+[:skillpara|c4_break-costcount:] >= 15',
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
),
),
'inf_dizzy' => Array 'inf_dizzy' => Array
( (
'name' => '眩晕', 'name' => '眩晕',
......
...@@ -1202,7 +1202,7 @@ function armor_hurt(&$pa,$which,$hurtvalue,$check_sk=0) ...@@ -1202,7 +1202,7 @@ function armor_hurt(&$pa,$which,$hurtvalue,$check_sk=0)
{ {
global $log,$nosta; global $log,$nosta;
if(!empty($pa[$which.'s'])) if(!empty($pa[$which.'s']) && !empty($hurtvalue))
{ {
//无限耐久的防具可以抵挡1次任意点损耗 //无限耐久的防具可以抵挡1次任意点损耗
if ($pa[$which.'s'] == $nosta) if ($pa[$which.'s'] == $nosta)
......
...@@ -50,6 +50,13 @@ ...@@ -50,6 +50,13 @@
global $rangeinfo; global $rangeinfo;
if(empty($pa['wep_kind'])) get_wep_kind($pa); if(empty($pa['wep_kind'])) get_wep_kind($pa);
$range = isset($rangeinfo[$pa['wep_kind']]) ? $rangeinfo[$pa['wep_kind']] : NULL; $range = isset($rangeinfo[$pa['wep_kind']]) ? $rangeinfo[$pa['wep_kind']] : NULL;
#「穿杨」效果判定:
if(isset($pa['skill_c4_sniper']))
{
//获取命中倍率加成
$sk_rn = get_skillvars('c4_sniper','rangegain');
$range += $sk_rn;
}
return $range; return $range;
} }
...@@ -119,7 +126,7 @@ ...@@ -119,7 +126,7 @@
function get_extra_ex_array(&$pa) function get_extra_ex_array(&$pa)
{ {
global $log; global $log;
# 百战技能特效 # 「百战」效果判定:
if(isset($pa['skill_c1_veteran'])) if(isset($pa['skill_c1_veteran']))
{ {
$sk_def = get_skillpara('c1_veteran','choice',$pa['clbpara']); $sk_def = get_skillpara('c1_veteran','choice',$pa['clbpara']);
...@@ -130,6 +137,12 @@ ...@@ -130,6 +137,12 @@
//$log .= "百战使{$pa['nm']}拥有了【{$itemspkinfo[$sk_def]}】属性!<br>"; //$log .= "百战使{$pa['nm']}拥有了【{$itemspkinfo[$sk_def]}】属性!<br>";
} }
} }
#「穿杨」效果判定:
if(isset($pa['skill_c4_sniper']) && in_array('r',$pa['ex_keys']))
{
$key = array_search('r',$pa['ex_keys']);
unset($pa['ex_keys'][$key]);
}
return; return;
} }
...@@ -277,7 +290,7 @@ ...@@ -277,7 +290,7 @@
//获取社团技能对基础命中率的修正 //获取社团技能对基础命中率的修正
$hitrate *= rev_get_clubskill_bonus_hitrate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd); $hitrate *= rev_get_clubskill_bonus_hitrate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd);
//获取社团技能对基础命中率的修正(新) //获取社团技能对基础命中率的修正(新)
$hitrate *= get_clbskill_hitrate($pa,$pd,$active,$hitrate); $hitrate = get_clbskill_hitrate($pa,$pd,$active,$hitrate);
//异常状态状态修正 //异常状态状态修正
foreach ($inf_htr_p as $inf_ky => $value) foreach ($inf_htr_p as $inf_ky => $value)
{ {
...@@ -299,15 +312,19 @@ ...@@ -299,15 +312,19 @@
//获取社团技能对连击命中率衰减系数的修正 //获取社团技能对连击命中率衰减系数的修正
$hitratebonus *= rev_get_clubskill_bonus_hitrate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd); $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); $hitratebonus = get_clbskill_r_hitrate($pa,$pd,$active,$hitratebonus);
//获取基础致伤率(防具耐久损伤率)系数 //获取基础致伤率(防具耐久损伤率)系数
$inf_r = $infobbs[$pa['wep_kind']]; $inf_r = $infobbs[$pa['wep_kind']];
//获取社团技能对致伤率(防具耐久损伤率)的修正 //获取社团技能对致伤率(防具耐久损伤率)的修正
$inf_r *= rev_get_clubskill_bonus_imfrate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd); $inf_r *= rev_get_clubskill_bonus_imfrate($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd);
//获取社团技能对致伤率(防具耐久损伤率)的修正(新)
$inf_r = get_clbskill_infrate($pa,$pd,$active,$inf_r);
//获取基础致伤效果(每次致伤会损耗多少点防具耐久) //获取基础致伤效果(每次致伤会损耗多少点防具耐久)
$inf_points = rev_get_clubskill_bonus_imftime($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd); $inf_points = 1;
//$inf_points = rev_get_clubskill_bonus_imftime($pa['club'],$pa['skills'],$pa,$pd['club'],$pd['skills'],$pd);
//获取社团技能对基础致伤效果(每次致伤会损耗多少点防具耐久)的修正(新)
$inf_points = get_clbskill_inftimes($pa,$pd,$active,$inf_points);
//获取武器损耗类型 //获取武器损耗类型
$wep_imp = $wepimprate[$pa['wep_kind']]; $wep_imp = $wepimprate[$pa['wep_kind']];
//武器是损耗型而非消耗型 //武器是损耗型而非消耗型
...@@ -841,7 +858,36 @@ ...@@ -841,7 +858,36 @@
//输出log //输出log
$log .= $pa['skill_c1_crit_log']; $log .= $pa['skill_c1_crit_log'];
} }
#「瞄准」判定:
if(isset($pa['skill_c4_aiming']))
{
//获取瞄准倍率
$sk_p = get_skillvars('c4_aiming','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
//输出log
$log.="<span class='yellow'>「瞄准」使{$pa['nm']}造成的物理伤害提高了{$sk_p}%!</span><br>";
}
#「咆哮」判定:
if(isset($pa['skill_c4_roar']))
{
//获取倍率
$sk_p = get_skillvars('c4_roar','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
//输出log
$log.="<span class='yellow'>「咆哮」使{$pa['nm']}造成的物理伤害提高了{$sk_p}%!</span><br>";
}
#「穿杨」判定:
if(isset($pa['skill_c4_sniper']))
{
//获取倍率
$sk_p = get_skillvars('c4_sniper','phydmgr');
$p = 1 + ($sk_p / 100);
$dmg_p[]= $p;
//输出log
$log.="<span class='yellow'>「穿杨」使{$pa['nm']}造成的物理伤害提高了{$sk_p}%!</span><br>";
}
return $dmg_p; return $dmg_p;
} }
...@@ -923,6 +969,20 @@ ...@@ -923,6 +969,20 @@
$log .= "{$pa['nm']}的攻击无视了{$pd['nm']}的伤害减半效果!<br>"; $log .= "{$pa['nm']}的攻击无视了{$pd['nm']}的伤害减半效果!<br>";
} }
#「穿杨」效果判定:
if(isset($pa['skill_c4_sniper']) && !isset($pa['pierce_flag']) && !empty($pd['phy_def_flag']))
{
$dice = diceroll(99);
# 冴冴说这应该是odds……但是对不起,已经太迟了……^ ^;
$obbs = get_skillvars('c4_sniper','prfix');
if($dice < $obbs)
{
$pa['pierce_flag'] = 1;
$pd['phy_def_flag'] = 0;
$log .= "<span class=\"yellow\">{$pa['nm']}的攻击贯穿了{$pd['nm']}的防具!</span><br>";
}
}
return; return;
} }
...@@ -1004,6 +1064,48 @@ ...@@ -1004,6 +1064,48 @@
return $dmg_p; return $dmg_p;
} }
//预受伤事件:
//提取判断pd是否防具受损、受伤,但log在结尾统一输出
function get_hurt_prepare_events(&$pa,&$pd,$active)
{
global $infatt_rev;
# pa致伤次数>0时,计算pd防具受损或致伤情况
if($pa['inf_times']>0)
{
//获取可致伤部位
$inf_parts = $infatt_rev[$pa['wep_kind']];
$inf_att = Array();
for($i=0;$i<$pa['inf_times'];$i++)
{
//随机选择一个可致伤的部位
$aim = rand(0,count($inf_parts)-1);
$inf_aim = $inf_parts[$aim];
//对应部位致伤次数+1
$inf_att[$inf_aim] = isset($inf_att[$inf_aim]) ? $inf_att[$inf_aim]+1 : 1;
}
//记载防具受损、受伤情况
if(!empty($inf_att))
{
$pd['armor_hurt'] = Array('arb' => 0,'arh' => 0,'ara' => 0,'arf' => 0,);
foreach($inf_att as $ipt => $times)
{
$which = 'ar'.$ipt;
if(!isset(${'temp_'.$which.'s'})) ${'temp_'.$which.'s'} = $pd[$which.'s'];
if(${'temp_'.$which.'s'} > 0)
{
${'temp_'.$which.'s'} -= $times;
$pd['armor_hurt'][$which] += $times;
}
else
{
$pd['inf_hurt'][$ipt] = 1;
}
}
}
}
return;
}
//获取pa能造成的属性伤害队列 //获取pa能造成的属性伤害队列
function get_base_ex_att_array(&$pa,&$pd,$active) function get_base_ex_att_array(&$pa,&$pd,$active)
{ {
...@@ -1181,6 +1283,24 @@ ...@@ -1181,6 +1283,24 @@
return $total_ex_dmg; return $total_ex_dmg;
} }
//计算属性总伤害加成
function get_ex_dmg_p(&$pa,&$pd,$active)
{
global $log;
$ex_dmg_p = Array();
#「咆哮」判定:
if(isset($pa['skill_c4_roar']))
{
//获取倍率
$sk_p = get_skillvars('c4_roar','exdmgr');
$p = 1 + ($sk_p / 100);
$ex_dmg_p[]= $p;
//输出log
$log.="<span class='yellow'>「咆哮」使{$pa['nm']}造成的属性伤害提高了{$sk_p}%!</span><br>";
}
return $ex_dmg_p;
}
//计算最终伤害的系数变化 //计算最终伤害的系数变化
function get_final_dmg_p(&$pa,&$pd,$active) function get_final_dmg_p(&$pa,&$pd,$active)
{ {
...@@ -1191,11 +1311,13 @@ ...@@ -1191,11 +1311,13 @@
if(isset($pa['skill_c2_raiding'])) if(isset($pa['skill_c2_raiding']))
{ {
$sk_p = get_skillvars('c2_raiding','findmgr'); $sk_p = get_skillvars('c2_raiding','findmgr');
$p = 1+($sk_p / 100); if($sk_p)
$log.= "<span class='yellow'>「强袭」使{$pa['nm']}造成的最终伤害提高了{$sk_p}%!</span><br>"; {
$fin_dmg_p[] = $p; $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'])) if(isset($pa['skill_buff_annihil']))
{ {
...@@ -1205,8 +1327,27 @@ ...@@ -1205,8 +1327,27 @@
if($sk_dice < $sk_obbs) if($sk_dice < $sk_obbs)
{ {
$sk_p = get_skillvars('buff_annihil','findmgr'); $sk_p = get_skillvars('buff_annihil','findmgr');
$p = $sk_p / 100; if($sk_p)
$log.= "<span class='red'>暴击!</span><span class='lime'>「歼灭」使{$pa['nm']}造成的最终伤害提高了{$sk_p}%!</span><br>"; {
$p = $sk_p / 100;
$log.= "<span class='red'>暴击!</span><span class='lime'>「歼灭」使{$pa['nm']}造成的最终伤害提高了{$sk_p}%!</span><br>";
$fin_dmg_p[] = $p;
}
}
}
#「破甲」效果判定:
if(isset($pa['skill_c4_break']) && !empty($pd['inf_hurt']))
{
$sk_lvl = get_skilllvl('c4_break',$pa);
//获取伤害加成
$sk_p = get_skillvars('c4_break','infdmgr',$sk_lvl);
//获取致伤处
$inf_p = count($pd['inf_hurt']);
$sk_p *= $inf_p;
if($sk_p)
{
$p = 1+($sk_p / 100);
$log.= "<span class='yellow'>「破甲」使{$pa['nm']}造成的最终伤害提高了{$sk_p}%!</span><br>";
$fin_dmg_p[] = $p; $fin_dmg_p[] = $p;
} }
} }
...@@ -1293,6 +1434,13 @@ ...@@ -1293,6 +1434,13 @@
} }
} }
# 「爆头」技能效果
if(isset($pa['skill_c4_headshot']) && $fin_dmg > $pd['hp']*0.85 && $fin_dmg < $pd['hp'])
{
$fin_dmg = $pd['hp'];
$log .= "<span class=\"yellow\">{$pa['nm']}的攻击直接将{$pd['nm']}爆头!</span><br>";
}
return $fin_dmg; return $fin_dmg;
} }
...@@ -1360,35 +1508,22 @@ ...@@ -1360,35 +1508,22 @@
attr_extra_19_azure($pa,$pd,$active); attr_extra_19_azure($pa,$pd,$active);
} }
# pa致伤次数>0时,计算pd防具受损或致伤情况 # pd存在防具受损况,在这里应用
if($pa['inf_times']>0) if(!empty($pd['armor_hurt']))
{ {
//获取可致伤部位 foreach($pd['armor_hurt'] as $which => $times) armor_hurt($pd,$which,$times);
$inf_parts = $infatt_rev[$pa['wep_kind']]; }
$inf_att = Array();
for($i=0;$i<$pa['inf_times'];$i++) # pd存在受伤情况,在这里应用
{ if(!empty($pd['inf_hurt']))
//随机选择一个可致伤的部位 {
$aim = rand(0,count($inf_parts)-1); foreach($pd['inf_hurt'] as $which => $times)
$inf_aim = $inf_parts[$aim];
//对应部位致伤次数+1
$inf_att[$inf_aim] = isset($inf_att[$inf_aim]) ? $inf_att[$inf_aim]+1 : 1;
}
//应用防具损伤/致伤效果
foreach($inf_att as $ipt => $times)
{ {
$which = 'ar'.$ipt; $flag = get_inf_rev($pd,$which);
if($pd[$which.'s'] > 0) if($flag) $log .= "{$pd['nm']}的<span class=\"red\">$infinfo[$which]</span>部受伤了!<br>";
{
armor_hurt($pd,$which,$times);
}
else
{
$flag = get_inf_rev($pd,$ipt);
if($flag) $log .= "{$pd['nm']}的<span class=\"red\">$infinfo[$ipt]</span>部受伤了!<br>";
}
} }
} }
return; return;
} }
...@@ -1565,7 +1700,7 @@ ...@@ -1565,7 +1700,7 @@
# 获取社团技能对反击率的修正 # 获取社团技能对反击率的修正
$counter *= rev_get_clubskill_bonus_counter($pd['club'],$pd['skills'],$pd,$pa['club'],$pa['skills'],$pa); $counter *= rev_get_clubskill_bonus_counter($pd['club'],$pd['skills'],$pd,$pa['club'],$pa['skills'],$pa);
# 获取社团技能对反击率的修正(新) # 获取社团技能对反击率的修正(新)
$counter *= get_clbskill_counterate($pa,$pd,$active,$counter); $counter = get_clbskill_counterate($pa,$pd,$active,$counter);
# 获取异常状态对反击率的影响 # 获取异常状态对反击率的影响
if(!empty($pd['inf'])) if(!empty($pd['inf']))
......
...@@ -106,6 +106,28 @@ ...@@ -106,6 +106,28 @@
$sk_r = 1 + (get_skillvars('c2_intuit','accgain',$sk_lvl) / 100); $sk_r = 1 + (get_skillvars('c2_intuit','accgain',$sk_lvl) / 100);
$hitrate *= $sk_r; $hitrate *= $sk_r;
} }
#「静息」效果判定:
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;
}
return $hitrate; return $hitrate;
} }
...@@ -120,9 +142,52 @@ ...@@ -120,9 +142,52 @@
$sk_r = 1 + (get_skillvars('c2_intuit','rbgain',$sk_lvl) / 100); $sk_r = 1 + (get_skillvars('c2_intuit','rbgain',$sk_lvl) / 100);
$hitrate *= $sk_r; $hitrate *= $sk_r;
} }
#「静息」效果判定:
if(isset($pa['skill_c4_stable']))
{
$sk_lvl = get_skilllvl('c4_stable',$pa);
//获取连击命中率加成
$sk_r = 1 + (get_skillvars('c4_stable','rbgain',$sk_lvl) / 100);
$hitrate *= $sk_r;
}
return $hitrate; return $hitrate;
} }
# 获取社团技能对致伤率(防具耐久损伤率)的修正(新)
function get_clbskill_infrate(&$pa,&$pd,$active,$infrate)
{
#「破甲」效果判定:
if(isset($pa['skill_c4_break']))
{
$sk_lvl = get_skilllvl('c4_break',$pa);
//获取致伤率加成
$sk_r = 1 + (get_skillvars('c4_break','infrgain',$sk_lvl) / 100);
$infrate *= $sk_r;
}
return $infrate;
}
# 获取社团技能对基础致伤效果(每次致伤会损耗多少点防具耐久)的修正(新)
function get_clbskill_inftimes(&$pa,&$pd,$active,$inftimes)
{
#「破甲」效果判定:
if(isset($pa['skill_c4_break']))
{
$sk_lvl = get_skilllvl('c4_break',$pa);
//获取致伤效果加成
$sk_fix = get_skillvars('c4_break','inftfix',$sk_lvl);
$inftimes += $sk_fix;
}
#「咆哮」效果判定:
if(isset($pa['skill_c4_roar']))
{
//获取致伤效果加成
$sk_fix = get_skillvars('c4_roar','inftfix');
$inftimes += $sk_fix;
}
return $inftimes;
}
# 获取社团技能对伤害浮动的修正(新) # 获取社团技能对伤害浮动的修正(新)
function get_clbskill_fluc(&$pa,&$pd,$active) function get_clbskill_fluc(&$pa,&$pd,$active)
{ {
......
...@@ -114,6 +114,7 @@ ...@@ -114,6 +114,7 @@
$unlock = check_skill_unlock($sk,$sdata); $unlock = check_skill_unlock($sk,$sdata);
if($unlock) if($unlock)
{ {
if(get_skilltags($sk,'unlock_battle_hidden')) continue;
$sk_desc .= is_array($cskills[$sk]['lockdesc']) ? $cskills[$sk]['lockdesc'][$unlock] : $cskills[$sk]['lockdesc']; $sk_desc .= is_array($cskills[$sk]['lockdesc']) ? $cskills[$sk]['lockdesc'][$unlock] : $cskills[$sk]['lockdesc'];
} }
//再检查技能是否满足激活条件 //再检查技能是否满足激活条件
......
...@@ -152,30 +152,19 @@ ...@@ -152,30 +152,19 @@
# 遍历该技能关联属性 # 遍历该技能关联属性
foreach($cskill['status'] as $snm) foreach($cskill['status'] as $snm)
{ {
# $snm为数组时,代表关联的属性是技能参数 - $clbpara['skillpara']['技能名']['参数名'] # 格式化属性名
if(is_array($snm)) $snm_key = parse_skillrules($snm,'','clbpara');
{ global $$snm_key;
foreach($snm as $skey) # 如属性值为数组,则按照登记取值
{ $seffect = is_array($ceffect[$snm]) ? $ceffect[$snm][$now_clvl] : $ceffect[$snm];
$clbpara['skillpara'][$sk][$skey] += $ceffect[$skey]; # 格式化属性值
} $seffect = parse_skilloperator($seffect);
} $so = is_array($seffect) ? $seffect[0] : '';
else $svars = is_array($seffect) ? $seffect[1] : $seffect;
{ # 计算属性变化
global $$snm; eval("$$snm_key = $$snm_key $so $svars*$nums;");
# $ceffect为数组时,视为技能升级时会使多个属性增加不同值 # 替换升级后文本
if(is_array($ceffect)) $clog = str_replace("[:{$snm}:]",$svars*$nums,$clog);
{
$$snm += $ceffect[$snm]*$nums;
$clog = str_replace("[:effect:]".$snm,$ceffect[$snm]*$nums,$clog);
}
# 否则技能所影响的属性都增加相同值
else
{
$$snm += $ceffect*$nums;
$clog = str_replace("[:effect:]",$ceffect*$nums,$clog);
}
}
} }
} }
# 扣除技能点 # 扣除技能点
...@@ -331,6 +320,7 @@ ...@@ -331,6 +320,7 @@
$unlock = $cskills[$sk]['unlock']; $unlock = $cskills[$sk]['unlock'];
foreach($unlock as $key => $lock) foreach($unlock as $key => $lock)
{ {
# 特判:计算技能冷却时间
if($key == 'skillcooldown') if($key == 'skillcooldown')
{ {
$st = get_starttimes($sk,$data['clbpara']); $st = get_starttimes($sk,$data['clbpara']);
...@@ -344,31 +334,66 @@ ...@@ -344,31 +334,66 @@
} }
} }
} }
elseif(strpos($key,'+')!==false) # 正常计算
else
{ {
$arr_key = explode("+",$key); # 第一层:检查共有几个须置换条件
foreach($arr_key as $skey) $arr = strpos($key,'+')!==false ? explode("+",$key) : Array($key);
foreach($arr as $skey)
{ {
$lock = str_replace("[:".$skey.":]","\$data['".$skey."']",$lock); #第二层:格式化置换条件对应的置换内容
$skey_value = parse_skillrules($skey);
#第三层:置换对应内容
$lock = str_replace("[:{$skey}:]",$skey_value,$lock);
} }
if(!eval("return ($lock);")) return $key; if(!eval("return ($lock);")) return $key;
} }
elseif(strpos($key,'-')!==false)
{
$arr_key = explode("-",$key);
$lock = str_replace("[:".$arr_key[1].":]","\$data['clbpara']['{$arr_key[0]}']['{$sk}']['".$arr_key[1]."']",$lock);
if(!eval("return ($lock);")) return $key;
}
else
{
$lock = str_replace("[:".$key.":]","\$data['".$key."']",$lock);
if(!eval("return ($lock);")) return $key;
}
} }
} }
return 0; return 0;
} }
function parse_skillrules($key,$prefix="\$data",$prefix2="['clbpara']")
{
//传入值内有'-'号,代表是clbpara内的内容
if(strpos($key,'-')!==false)
{
$key = explode('-',$key);
$key_key = $key[0]; $key_value = $key[1];
//检查key_key内是否有“|”号
if(strpos($key_key,'|')!==false)
{
//key_key内有“|”号 代表置换内容的第二层键名另有指代
$key_key = explode('|',$key_key);
$key_a_key = $key_key[0]; $key_sec_key = $key_key[1];
$key = $prefix.$prefix2."['{$key_a_key}']['{$key_sec_key}']['{$key_value}']";
}
else
{
//key_key内没有“:”号 置换内容只停留在第一层
$key = $prefix.$prefix2."['{$key_key}']['{$key_value}']";
}
}
//传入值是标准字段,直接导出
else
{
if(empty($prefix)) return $key;
else $key = $prefix."['{$key}']";
}
return $key;
}
function parse_skilloperator($key)
{
//检查传入值内是否有分隔符
if(strpos($key,'::')!==false)
{
$key = explode('::',$key);
return $key;
}
return $key;
}
# 技能是否可激活,返回0时为可激活,否则返回对应的未满足条件 $sk:技能名;$data:角色数据 # 技能是否可激活,返回0时为可激活,否则返回对应的未满足条件 $sk:技能名;$data:角色数据
function check_skill_active($sk,$data) function check_skill_active($sk,$data)
{ {
...@@ -576,24 +601,19 @@ ...@@ -576,24 +601,19 @@
# 技能存在关联属性 # 技能存在关联属性
if(isset($cskill['status'])) if(isset($cskill['status']))
{ {
# 检查技能升级是否会直接影响属性: # 检查社团是否会直接影响属性:
$ceffect = !empty($data) && isset($cskill['effect'][$data['club']]) ? $cskill['effect'][$data['club']] : $cskill['effect'][0]; $ceffect = !empty($data) && isset($cskill['effect'][$data['club']]) ? $cskill['effect'][$data['club']] : $cskill['effect'][0];
# 遍历技能关联属性,替换介绍文本内的数值 # 遍历技能关联属性,替换介绍文本内的数值
foreach($cskill['status'] as $snm) foreach($cskill['status'] as $snm)
{ {
if(!is_array($snm)) # 如属性值为数组,则按照等级取值
{ $seffect = is_array($ceffect[$snm]) ? $ceffect[$snm][$now_clvl] : $ceffect[$snm];
# $ceffect为数组时,视为技能升级时会使多个属性增加不同值 # 格式化属性值
if(is_array($ceffect)) $seffect = parse_skilloperator($seffect);
{ $so = is_array($seffect) ? $seffect[0] : '';
$sk_desc = str_replace("[:effect:]".$snm,$ceffect[$snm],$sk_desc); $svars = is_array($seffect) ? $seffect[1] : $seffect;
} # 替换描述文本
# 否则技能所影响的属性都增加相同值 $sk_desc = str_replace("[:{$snm}:]",$svars,$sk_desc);
else
{
$sk_desc = str_replace("[:effect:]",$ceffect,$sk_desc);
}
}
} }
} }
return $sk_desc; return $sk_desc;
......
...@@ -11,21 +11,49 @@ ...@@ -11,21 +11,49 @@
# 「百战」技能判定 # 「百战」技能判定
function skill_c1_veteran_act($choice) function skill_c1_veteran_act($choice)
{ {
global $log,$cskills,$club,$clbpara,$itemspkinfo; global $log,$pdata,$cskills,$club,$clbpara,$itemspkinfo;
$c_arr = get_skillvars('c1_veteran','defkind'); if(!check_skill_unlock($sk,$pdata))
$cvar = &$clbpara['skillpara']['c1_veteran']['choice'];
if(empty($choice) || !in_array($choice,$c_arr))
{ {
$log .= "选定的防御属性不存在!<br>"; $c_arr = get_skillvars('c1_veteran','defkind');
$cvar = &$clbpara['skillpara']['c1_veteran']['choice'];
if(empty($choice) || !in_array($choice,$c_arr))
{
$log .= "选定的防御属性不存在!<br>";
return;
}
if($choice == $cvar)
{
$log .= "不能重复选择属性。<br>";
return;
}
$cvar = $choice;
$log .= "「百战」的防御属性变更为{$itemspkinfo[$choice]}。<br>";
}
else
{
$log .= "「百战」技能未解锁!<br>";
}
return;
}
# 「穿杨」与「咆哮」解锁
function skill_c4_unlock($csk)
{
global $log,$pdata,$cskills;
if(($csk != 'c4_roar' && $csk != 'c4_sniper') || !in_array($csk,$pdata['clbpara']['skill']))
{
$log .= "要解锁的技能{$csk}不存在。<br>";
return; return;
} }
if($choice == $cvar) if(!check_skill_unlock('c4_roar',$pdata) || !check_skill_unlock('c4_sniper',$pdata))
{ {
$log .= "不能重复选择属性。<br>"; $log .= "无法重复解锁。<br>";
return; return;
} }
$cvar = $choice; include_once GAME_ROOT.'./include/game/revclubskills.func.php';
$log .= "「百战」的防御属性变更为{$itemspkinfo[$choice]}。<br>"; 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>";
return; return;
} }
......
...@@ -592,6 +592,9 @@ ...@@ -592,6 +592,9 @@
$log.="<span class=\"red\">$damage</span>点伤害!<br>"; $log.="<span class=\"red\">$damage</span>点伤害!<br>";
//最终物理伤害 //最终物理伤害
$pdamage = $damage; $pdamage = $damage;
# 物理伤害计算结束后、加载预受伤事件……:
get_hurt_prepare_events($pa,$pd,$active);
# 属性伤害计算部分: # 属性伤害计算部分:
//获取攻击方(pa)能造成的属性伤害类型 //获取攻击方(pa)能造成的属性伤害类型
...@@ -603,34 +606,57 @@ ...@@ -603,34 +606,57 @@
deal_ex_damage_prepare_events($pa,$pd,$active); deal_ex_damage_prepare_events($pa,$pd,$active);
//获取攻击方(pa)能造成的属性伤害 //获取攻击方(pa)能造成的属性伤害
$ex_damage = get_original_ex_dmg($pa,$pd,$active); $ex_damage = get_original_ex_dmg($pa,$pd,$active);
//攻击方(pa)能造成了多次属性伤害的情况下,进行后续判断
//存在大于1种属性伤害,输出一段 A+B+C=D 样式的文本 if(is_array($ex_damage) || $ex_damage > 1)
$total_ex_damage = 0;
if(is_array($ex_damage))
{ {
if(count($ex_damage)>1) //获取攻击方(pa)能造成的属性伤害加成
$ex_damage_p = get_ex_dmg_p($pa,$pd,$active);
//存在大于1种属性伤害,输出一段 A+B+C=D 样式的文本,并将所有属性伤害保存在 $total_ex_damage 内
if(is_array($ex_damage))
{ {
$log .= "造成了"; $total_ex_damage = 0;
$elog = ''; if(count($ex_damage)>1)
foreach($ex_damage as $edmg) {
$elog = '';
foreach($ex_damage as $edmg)
{
$total_ex_damage += $edmg;
if(!empty($elog)) $elog .= "+".$edmg;
else $elog .= $edmg;
}
$elog = '造成了'.$elog;
}
else
{ {
$total_ex_damage += $edmg; $total_ex_damage = $ex_damage[0];
if(!empty($elog)) $elog .= "+".$edmg;
else $elog = $edmg;
} }
$log .= $elog."=<span class=\"red\">{$total_ex_damage}</span>点属性伤害!<br>"; //将 $total_ex_damage 存回 $ex_damage
$ex_damage = $total_ex_damage;
} }
else //存在对最终属性伤害的修正,输出一段 A×BxC=D 或 (A+B+C)×A×B=D 样式的文本
if(!empty($ex_damage_p))
{ {
$total_ex_damage = $ex_damage[0]; if(isset($elog))
{
$elog = str_replace("造成了","造成了(",$elog);
$elog = $elog.')';
}
else
{
$elog = "造成了{$ex_damage}";
}
foreach($ex_damage_p as $edmg_p)
{
$ex_damage *= $edmg_p;
$elog .= {$edmg_p}";
}
} }
$ex_damage = round($ex_damage);
//存在额外的属性伤害文本,输出
if(isset($elog)) $log .= $elog."=<span class=\"red\">{$ex_damage}</span>点属性伤害!<br>";
} }
else //并入最终伤害
{ $damage += $ex_damage;
$total_ex_damage = $ex_damage;
}
//最终属性伤害
$damage += $total_ex_damage;
} }
#最终伤害计算部分: #最终伤害计算部分:
...@@ -961,6 +987,15 @@ ...@@ -961,6 +987,15 @@
} }
} }
#「掠夺」判定:
if(isset($pa['skill_c4_loot']))
{
//获取抢钱率
$sk_p = get_skillvars('c4_loot','goldr');
$lootgold = $pa['lvl'] * $sk_p;
$log.="<span class='yellow'>「掠夺」使{$pa['nm']}获得了{$lootgold}元!</span><br>";
}
return; return;
} }
......
<!-- 注意:大部分技能可以直接通过编辑配置文件完成 -->
<!-- 可能的、需要新建模板的情况:你的技能需要在面板内执行比较复杂的、单靠配置文件无法实现的操作 -->
<tr>
<td class="b1" width="40">
<span>{$cskills['c4_roar']['name']}</span>
</td>
<td>
<!--{eval $unlock_c4_roar_flag = check_skill_unlock('c4_roar',$pdata);}-->
<!--{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">
<!--{/if}-->
<table class="skilltable">
<tr>
<td class="skilldesc_left b3">
<span class="skilldesc">
<!--{eval $c4_roar_desc = parse_skilldesc('c4_roar',$pdata);}-->
$c4_roar_desc
</span>
</td>
<td class="skilldesc_right b3">
<!--{if !empty($unlock_c4_roar_flag) && $unlock_c4_roar_flag == 'skillpara|c4_roar-active'}-->
<input type="button" style="width:47px;margin-right:25px;float:right;" value="解锁">
<!--{/if}-->
</td>
</tr>
</table>
<!--{if $unlock_c4_roar_flag}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
<!--{eval $c4_roar_lockdesc = $cskills['c4_roar']['lockdesc'][$unlock_c4_roar_flag];}-->
$c4_roar_lockdesc
</span>
</td>
<!--{if !empty($unlock_c4_roar_flag) && $unlock_c4_roar_flag == 'skillpara|c4_roar-active'}-->
<td class="skilldesc_right">
<input type="button" style="width:47px;margin-right:25px;float:right;" value="解锁" onclick="$('mode').value='revskpts';$('command').value='actskill_c4_roar';postCmd('gamecmd','command.php');this.disabled=true;">
</td>
<!--{/if}-->
</tr>
</table>
</div>
</div>
<!--{/if}-->
</td>
</tr>
\ No newline at end of file
<!-- 注意:大部分技能可以直接通过编辑配置文件完成 -->
<!-- 可能的、需要新建模板的情况:你的技能需要在面板内执行比较复杂的、单靠配置文件无法实现的操作 -->
<tr>
<td class="b1" width="40">
<span>{$cskills['c4_sniper']['name']}</span>
</td>
<td>
<!--{eval $unlock_c4_sniper_flag = check_skill_unlock('c4_sniper',$pdata);}-->
<!--{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">
<!--{/if}-->
<table class="skilltable">
<tr>
<td class="skilldesc_left b3">
<span class="skilldesc">
<!--{eval $c4_sniper_desc = parse_skilldesc('c4_sniper',$pdata);}-->
$c4_sniper_desc
</span>
</td>
<td class="skilldesc_right b3">
<!--{if !empty($unlock_c4_sniper_flag) && $unlock_c4_sniper_flag == 'skillpara|c4_sniper-active'}-->
<input type="button" style="width:47px;margin-right:25px;float:right;" value="解锁">
<!--{/if}-->
</td>
</tr>
</table>
<!--{if $unlock_c4_sniper_flag}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
<!--{eval $c4_sniper_lockdesc = $cskills['c4_sniper']['lockdesc'][$unlock_c4_sniper_flag];}-->
$c4_sniper_lockdesc
</span>
</td>
<!--{if !empty($unlock_c4_sniper_flag) && $unlock_c4_sniper_flag == 'skillpara|c4_sniper-active'}-->
<td class="skilldesc_right">
<input type="button" style="width:47px;margin-right:25px;float:right;" value="解锁" onclick="$('mode').value='revskpts';$('command').value='actskill_c4_sniper';postCmd('gamecmd','command.php');this.disabled=true;">
</td>
<!--{/if}-->
</tr>
</table>
</div>
</div>
<!--{/if}-->
</td>
</tr>
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<!-- 可能的、需要新建模板的情况:你的技能需要在面板内执行比较复杂的、单靠配置文件无法实现的操作 --> <!-- 可能的、需要新建模板的情况:你的技能需要在面板内执行比较复杂的、单靠配置文件无法实现的操作 -->
<tr> <tr>
<td class="b1" width="40"> <td class="b1" width="40">
<span>技能名</span> <span>{$cskills['技能编号']['name']}</span>
</td> </td>
<td> <td>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ --> <!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
...@@ -16,11 +16,13 @@ ...@@ -16,11 +16,13 @@
<tr> <tr>
<td class="skilldesc_left b3"> <td class="skilldesc_left b3">
<span class="skilldesc"> <span class="skilldesc">
<span tooltip="关于标签的介绍" class="gold">【技能标签 没有不需要写】</span> <!-- 技能介绍,自己填任意内容或使用下面的方式 -->
技能介绍 <!--{eval $技能编号_desc = parse_skilldesc('技能编号',$pdata);}-->
$技能编号_desc
</span> </span>
</td> </td>
<td class="skilldesc_right b3"> <td class="skilldesc_right b3">
<!-- 技能按钮,没有可以不填 -->
<input type="number" name="技能编号_nums" style="width:40px" value="1"> <input type="number" name="技能编号_nums" style="width:40px" value="1">
<input type="button" onclick="$('mode').value='revskpts';$('command').value='技能编号';postCmd('gamecmd','command.php');this.disabled=true;" value="技能操作按钮名"> <input type="button" onclick="$('mode').value='revskpts';$('command').value='技能编号';postCmd('gamecmd','command.php');this.disabled=true;" value="技能操作按钮名">
</td> </td>
...@@ -33,7 +35,11 @@ ...@@ -33,7 +35,11 @@
<table class="skilltable"> <table class="skilltable">
<tr> <tr>
<td valign="center" align="center"> <td valign="center" align="center">
<span class="yellow">未满足解锁条件时显示的文本</span> <span class="yellow">
<!-- 未满足解锁条件时显示的文本,自己填或使用下面的方式 -->
<!--{eval $技能编号_lockdesc = $cskills['技能编号']['lockdesc'][$unlock_技能编号_flag];}-->
$技能编号_lockdesc
</span>
</td> </td>
</tr> </tr>
</table> </table>
......
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