Commit 86cac374 authored by hisuinohoshi's avatar hisuinohoshi

rev combat phase 4.44

变化:
- 怒气技能:
新增「元素大师」怒气技能;
召唤「佣兵」的价格下调至1500;
- 元素大师提炼尸体时会显示在进行状况内;
- 元素大师提炼道具的快捷键又变回C了;

修正:
- 钥匙碎片可以无限使用的问题;
- 使用部分道具后不能正确显示地点名的问题;
- 技能不能显示冷却时间的问题;
- 「充能」使用2次后出现错误的问题;
- 对武器系别有要求的技能有时不能正确判定武器类别的问题;
- 销毁尸体时不加rp的问题;

开发相关:
- 略去了find_r()相关的判定过程,现在敌人发现率只通过get_hide_r_rev()计算;
parent f0f46ac1
......@@ -126,8 +126,16 @@ if($hp > 0){
$command = 'itemmain';
$itemcmd = 'itemmix';
}
if($action != 'chase' && $action != 'dfight' && $mode !== 'combat' && $mode !== 'revcombat' && $mode !== 'corpse' && $action != 'pacorpse' && $mode !== 'senditem'){
$action = ''; $bid = 0;
if(!empty($action))
{
if($action == 'tpmove')
{
$mode = 'command';
$command = 'search';
}
if($action != 'chase' && $action != 'dfight' && $mode !== 'combat' && $mode !== 'revcombat' && $mode !== 'corpse' && $action != 'pacorpse' && $mode !== 'senditem'){
$action = ''; $bid = 0;
}
}
if($command == 'menu') {
$mode = 'command';
......
......@@ -25,7 +25,7 @@ $club_skillslist = Array
17 => Array('f_heal'), #'走路萌物',
//18 => Array('s_hp','s_ad','f_heal'), #'天赋异禀',
19 => Array('s_hp','s_ad','f_heal','c19_nirvana','c19_reincarn','c19_purity','c19_crystal','c19_redeem','c19_dispel','c19_woesea'), #'晶莹剔透', //晶莹剔透、决死结界合并为晶莹剔透
20 => Array('s_hp','s_ad','f_heal'), #'元素大师', #商店购买社团卡
20 => Array('s_hp','s_ad','f_heal','c20_fertile','c20_windfall','c20_lighting','c20_zombie','c20_sparkle','c20_lotus'), #'元素大师', #商店购买社团卡
21 => Array('s_hp','s_ad','f_heal'), #'灵子梦魇', #暂定名,商店购买社团卡
22 => Array('s_hp','s_ad','f_heal'), #'偶像大师', #暂定名,「除错大师」头衔奖励
98 => Array('s_hp','s_ad','f_heal'), #'换装迷宫',
......@@ -65,7 +65,8 @@ $cskills_tags = Array
$sktpshield = '<span class="gold" tooltip2="【护盾】:可抵消等同于护盾值的伤害。护盾值只在抵消属性伤害时消耗,抵消电击伤害时双倍消耗。护盾存在时不会受到反噬伤害或陷入异常状态。">护盾</span>';
$sktprp = '<span class="yellow">报应点数</span>';
$sktpwhitedmg = '<span class="gold" tooltip2="【纯粹伤害】:不会受防御、抹消或制御效果影响的定值伤害">纯粹伤害</span>';
$sktpzombie = '<span class="gold" tooltip2="【灵俑】:此状态下的角色造成的最终伤害降低50%,受到的伤害降低25%;不会受到反噬伤害,但不能再造成除毒性、冻气外的属性伤害;">灵俑</span>';
$sktpemsdmg = "<span class=\"gold\" tooltip2=\"【亮晶晶】:造成纯粹伤害(不受防御、抹消或制御效果影响的定值伤害)\r【暖洋洋】:造成火焰伤害\r【冷冰冰】:造成冻气伤害\r【冷冰冰】:造成冻气伤害\r【郁萌萌】:造成毒性伤害\r【昼闪闪】:造成电气伤害\r【夜静静】:造成音波伤害\">属性/纯粹</span>";
# 技能登记:
$cskills = Array
(
......@@ -160,7 +161,7 @@ $cskills = Array
'wepk+wep_kind' => '武器不适用,持<span class="yellow">殴系武器</span>时生效',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WP' || [:wepk:] == 'WCP' || [:wepk:] == 'WKP' || [:wep_kind:] == 'P'",
'wepk+wep_kind' => "strpos([:wepk:],'P')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'P')",
),
),
'c1_crit' => Array
......@@ -189,7 +190,7 @@ $cskills = Array
'wepk+wep_kind' => '武器不适用,持<span class="yellow">殴系武器</span>时生效',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WP' || [:wepk:] == 'WCP' || [:wepk:] == 'WKP' || [:wep_kind:] == 'P'",
'wepk+wep_kind' => "strpos([:wepk:],'P')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'P')",
),
),
'c1_stalk' => Array
......@@ -209,7 +210,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 3',
'wepk+wep_kind' => "[:wepk:] == 'WP' || [:wepk:] == 'WCP' || [:wepk:] == 'WKP' || [:wep_kind:] == 'P'",
'wepk+wep_kind' => "strpos([:wepk:],'P')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'P')",
),
),
'c1_burnsp' => Array
......@@ -229,7 +230,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 6',
'wepk+wep_kind' => "[:wepk:] == 'WP' || [:wepk:] == 'WCP' || [:wepk:] == 'WKP' || [:wep_kind:] == 'P'",
'wepk+wep_kind' => "strpos([:wepk:],'P')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'P')",
),
),
'c1_bjack' => Array
......@@ -250,7 +251,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 11',
'wepk+wep_kind' => "[:wepk:] == 'WP' || [:wepk:] == 'WCP' || [:wepk:] == 'WKP' || [:wep_kind:] == 'P'",
'wepk+wep_kind' => "strpos([:wepk:],'P')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'P')",
),
),
'c1_veteran' => Array
......@@ -288,7 +289,7 @@ $cskills = Array
'wepk+wep_kind' => '武器不适用,持<span class="yellow">斩系武器</span>时可发动',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
'wepk+wep_kind' => "strpos([:wepk:],'K')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'K')",
),
),
'c2_intuit' => Array
......@@ -320,7 +321,7 @@ $cskills = Array
'wepk+wep_kind' => '武器不适用,持<span class="yellow">斩系武器</span>时生效',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
'wepk+wep_kind' => "strpos([:wepk:],'K')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'K')",
),
),
'c2_raiding' => Array
......@@ -340,7 +341,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 15',
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
'wepk+wep_kind' => "strpos([:wepk:],'K')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'K')",
),
),
'c2_master' => Array
......@@ -354,7 +355,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 15',
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
'wepk+wep_kind' => "strpos([:wepk:],'K')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'K')",
),
),
'c2_annihil' => Array
......@@ -388,7 +389,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 21',
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
'wepk+wep_kind' => "strpos([:wepk:],'K')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'K')",
'skillpara|c2_annihil-active' => 'empty([:skillpara|c2_annihil-active:])',
'skillcooldown' => 0,
),
......@@ -412,7 +413,7 @@ $cskills = Array
'wepk+wep_kind' => '武器不适用,持<span class="yellow">斩系武器</span>时生效',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WK' || [:wepk:] == 'WGK' || [:wepk:] == 'WKP' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wep_kind:] == 'K'",
'wepk+wep_kind' => "strpos([:wepk:],'K')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'K')",
),
),
'c3_pitchpow' => Array
......@@ -438,7 +439,7 @@ $cskills = Array
'wepk+wep_kind' => '武器不适用,持<span class="yellow">投系武器</span>时生效',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
'wepk+wep_kind' => "strpos([:wepk:],'C')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'C')",
),
),
'c3_enchant' => Array
......@@ -488,7 +489,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 5',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
'wepk+wep_kind' => "strpos([:wepk:],'C')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'C')",
),
),
'c3_potential' => Array
......@@ -509,7 +510,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 7',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
'wepk+wep_kind' => "strpos([:wepk:],'C')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'C')",
),
),
'c3_hawkeye' => Array
......@@ -529,7 +530,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 9',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
'wepk+wep_kind' => "strpos([:wepk:],'C')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'C')",
),
),
'c3_offset' => Array
......@@ -562,7 +563,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 13',
'wepk+wep_kind' => "[:wepk:] == 'WC' || [:wepk:] == 'WCF' || [:wepk:] == 'WCP' || [:wep_kind:] == 'C'",
'wepk+wep_kind' => "strpos([:wepk:],'C')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'C')",
),
),
'c3_numerous' => Array
......@@ -582,7 +583,7 @@ $cskills = Array
//……
'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'",
'wepk+wep_kind' => "strpos([:wepk:],'C')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'C')",
),
),
'c4_stable' => Array
......@@ -614,7 +615,7 @@ $cskills = Array
'weps' => '武器弹药不足,无法发动',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
'wepk+wep_kind' => "strpos([:wepk:],'G')!==false || strpos([:wepk:],'J')!==false || (!empty([:wep_kind:]) && ([:wep_kind:] == 'G' || [:wep_kind:] == 'J' ))",
'weps' => "[:weps:] != '∞'",
),
),
......@@ -649,7 +650,7 @@ $cskills = Array
'weps' => '武器弹药不足,无法发动',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
'wepk+wep_kind' => "strpos([:wepk:],'G')!==false || strpos([:wepk:],'J')!==false || (!empty([:wep_kind:]) && ([:wep_kind:] == 'G' || [:wep_kind:] == 'J' ))",
'weps' => "[:weps:] != '∞'",
),
),
......@@ -674,7 +675,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 3',
'wepk+wep_kind' => "[:wepk:] == 'WG' || [:wepk:] == 'WJ' || [:wepk:] == 'WGK' || [:wepk:] == 'WDG' || [:wep_kind:] == 'G' || [:wep_kind:] == 'J'",
'wepk+wep_kind' => "strpos([:wepk:],'G')!==false || strpos([:wepk:],'J')!==false || (!empty([:wep_kind:]) && ([:wep_kind:] == 'G' || [:wep_kind:] == 'J' ))",
'weps' => "[:weps:] != '∞'",
),
),
......@@ -721,7 +722,7 @@ $cskills = 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'",
'wepk+wep_kind' => "strpos([:wepk:],'G')!==false || strpos([:wepk:],'J')!==false || (!empty([:wep_kind:]) && ([:wep_kind:] == 'G' || [:wep_kind:] == 'J' ))",
'weps' => "[:weps:] != '∞'",
),
),
......@@ -753,7 +754,7 @@ $cskills = 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'",
'wepk+wep_kind' => "strpos([:wepk:],'G')!==false || strpos([:wepk:],'J')!==false || (!empty([:wep_kind:]) && ([:wep_kind:] == 'G' || [:wep_kind:] == 'J' ))",
'weps' => "[:weps:] != '∞'",
),
),
......@@ -774,7 +775,7 @@ $cskills = Array
'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'",
'wepk+wep_kind' => "strpos([:wepk:],'G')!==false || strpos([:wepk:],'J')!==false || (!empty([:wep_kind:]) && ([:wep_kind:] == 'G' || [:wep_kind:] == 'J' ))",
'weps' => "[:weps:] != '∞'",
),
),
......@@ -828,7 +829,7 @@ $cskills = Array
'wepk+wep_kind' => '武器不适用,持<span class="yellow">爆系武器</span>时生效',
),
'unlock' => Array(
'wepk+wep_kind' => "[:wepk:] == 'WD' || [:wepk:] == 'WDG' || [:wepk:] == 'WDF' || (!empty([:wep_kind:]) && [:wep_kind:] == 'D')",
'wepk+wep_kind' => "strpos([:wepk:],'D')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'D')",
),
),
'c5_focus' => Array
......@@ -869,7 +870,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 6',
'wepk+wep_kind' => "[:wepk:] == 'WD' || [:wepk:] == 'WDG' || [:wepk:] == 'WDF' || (!empty([:wep_kind:]) && [:wep_kind:] == 'D')",
'wepk+wep_kind' => "strpos([:wepk:],'D')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'D')",
),
),
'c5_double' => Array
......@@ -898,7 +899,7 @@ $cskills = Array
'unlock' => Array(
'skillpara|c5_double-active_t' => '[:skillpara|c5_double-active_t:] < 2',
'lvl' => '[:lvl:] >= 19',
'wepk+wep_kind' => "[:wepk:] == 'WD' || [:wepk:] == 'WDG' || [:wepk:] == 'WDF' || (!empty([:wep_kind:]) && [:wep_kind:] == 'D')",
'wepk+wep_kind' => "strpos([:wepk:],'D')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'D')",
),
),
'c9_kotodama' => Array
......@@ -981,7 +982,7 @@ $cskills = Array
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 7',
'wepk+wep_kind' => "[:wepk:] == 'WF' || [:wepk:] == 'WCF' || [:wepk:] == 'WKF' || [:wepk:] == 'WFK' || [:wepk:] == 'WDF' || (!empty([:wep_kind:]) && [:wep_kind:] == 'F')",
'wepk+wep_kind' => "strpos([:wepk:],'F')!==false || (!empty([:wep_kind:]) && [:wep_kind:] == 'F')",
),
),
'c9_charge' => Array
......@@ -1526,7 +1527,7 @@ $cskills = Array
'active_t' => 0,
),
'vars' => Array(
'mcost' => 2000,
'mcost' => 1500,
'mst' => 25,
'movep' => 2, //移动佣兵花费
'atkp' => 10, //主动出击花费
......@@ -1538,11 +1539,11 @@ $cskills = Array
),
'lockdesc' => Array(
'skillpara|c11_merc-active_t' => '次数耗尽,已无法再召唤佣兵',
'money' => '招募佣兵至少需要2000元!',
'money' => '招募佣兵至少需要1500元!',
),
'unlock' => Array(
'skillpara|c11_merc-active_t' => '[:skillpara|c11_merc-active_t:] < 4',
'money' => '[:money:] >= 2000',
'money' => '[:money:] >= 1500',
),
),
'c11_stock' => Array
......@@ -1866,6 +1867,176 @@ $cskills = Array
'ss' => '[:ss:] >= 100',
),
),
'c20_fertile' => Array
(
'name' => '沃土',
'tags' => Array('passive'),
'desc' => '获得元素时,获得量<span class="yellow">+0%~[:emsgain:]%</span>;<br>
每探索/移动<span class="yellow">[:mst:]</span>次,口袋中存量最低的元素数量<span class="yellow">+[:minemsgain:]%</span><br>
<span class="grey">当前已探索/移动次数:[^skillpara|c20_fertile-ms^] 次</span>',
'maxlvl' => 6,
'cost' => Array(2,3,3,4,4,5,-1),
'input' => '升级',
'log' => '<span class="yellow">「沃土」升级成功。</span><br>',
'status' => Array('skillpara|c20_fertile-lvl'),
'effect' => Array(
0 => Array('skillpara|c20_fertile-lvl' => '+=::1',),
),
'svars' => Array('lvl' => 0,'ms' => 0),
'vars' => Array(
'emsgain' => Array(1,2,2,3,3,4,5),
'mst' => Array(35,35,30,30,25,25,20),
'minemsgain' => Array(1,1,2,2,3,3,4),
),
'pvars' => Array('skillpara|c20_fertile-ms'),
),
'c20_windfall' => Array
(
'name' => '横财',
'tags' => Array('active','cd'),
'desc' => '清空你口袋中的所有元素,<br>
然后以尽可能平均的方式重新获得它们。冷却时间<span class="clan">[:cd:]</span>秒',
'input' => '发动',
'log' => '……<br>',
'events' => Array('windfall','setstarttimes_c20_windfall','active_news'),
'vars' => Array(
'cd' => 900, //冷却时间
),
'lockdesc' => Array(
'skillcooldown' => '技能冷却中!<br>剩余冷却时间:<span class="red">[:cd:]</span> 秒',
),
'unlock' => Array(
'skillcooldown' => 0,
),
),
'c20_lighting' => Array
(
'name' => '闪电',
'tags' => Array('battle'),
'desc' => "消耗<span class='yellow'>[:ragecost:]</span>点怒气与<span class='yellow'>[:emcost:]</span>份随机元素,<br>
根据所消耗元素种类附加{$sktpemsdmg}伤害;<br>
累计发动次数达<span class='yellow'>(1+...+n)</span>次时,<br>
消耗<span class='yellow'>(30×n)</span>份元素,同时触发<span class='yellow'>(n)</span>次效果;<br>
<span class='grey'>当前累计发动次数:[^skillpara|c20_lighting-active_t^] 次</span>",
'bdesc' => "消耗<span class='yellow'>[:emcost:]</span>份随机元素,根据所消耗元素种类附加{$sktpemsdmg};消耗<span class='red'>[:ragecost:]</span>怒气</span>",
'vars' => Array(
'ragecost' => 15,
'emcost' => 30,
'emextype' => Array( // 各类元素能造成的伤害类型
0 => 'white',
1 => 'u',
2 => 'i',
3 => 'p',
4 => 'e',
5 => 'w',
),
),
'svars' => Array(
'active_t' => 0,//技能发动次数
),
'pvars' => Array('skillpara|c20_lighting-active_t'),
'lockdesc' => Array(
'lvl' => '5级时解锁',
'element0+element1+element2+element3+element4+element5' => '至少需要30份元素才能发动',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 5',
'element0+element1+element2+element3+element4+element5' => "[:element0:]>=30 || [:element1:]>=30 || [:element2:]>=30 || [:element3:]>=30 || [:element4:]>=30 || [:element5:]>=30",
),
),
'c20_zombie' => Array
(
'name' => '灵俑',
'tags' => Array('passive'),
'desc' => "发现尸体时,消耗等同于<span class=\"yellow\">尸体等级的平方根×提炼尸体可获得的元素数量</span>,将尸体复活为{$sktpzombie};<br>
复活后的{$sktpzombie}有<span class=\"yellow\">50%</span>概率为你<span class='gold' tooltip2='当你攻击敌人且敌人未死亡时,与你在同一地点的灵俑有概率主动为你助战。'>协战</span>,并在你受到攻击时,<br>
为你抵挡最多不超过<span class=\"yellow\">[:maxdefhp:]%</span>灵俑当前生命的伤害",
'vars' => Array(
'maxdefhp' => 50,
'notype' => Array(1,9,19,88,92), //不能复活为灵俑的NPC
),
'lockdesc' => Array(
'lvl' => '11级时解锁',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 11',
),
),
'c20_sparkle' => Array
(
'name' => '火花',
'tags' => Array('switch','limit'),
'desc' => '技能开启后,<br>
造成伤害时有<span class="yellow">[:tpr:]%</span>概率将敌人传送至随机地点,<br>
被传送者会受到轻微伤害、或遭遇意外;<br>
火花持有者受到<span class="red">致命伤害</span>时,会紧急传送回避伤害,但<span class="red">永久失去</span>火花;<br>
点击右侧的<span class="yellow">“切换”</span>键随时激活或禁用该技能<br>
[^skill-active^]',
'input' => '切换',
'log' => '<span class="yellow">切换了「火花」的状态。</span>',
'events' => Array('active|c20_sparkle'),
'svars' => Array(
'active' => 0,
'active_t' => 0,
),
'vars' => Array(
'tpr' => 15,
'maxactive_t' => 1,
),
'pvars' => Array('skill-active','skillpara|c20_sparkle-active_t'),
'lockdesc' => Array(
'skillpara|c20_sparkle-active_t' => '已失去火花。',
'lvl' => '13级时解锁',
),
'unlock' => Array(
'skillpara|c20_sparkle-active_t' => '[:skillpara|c20_sparkle-active_t:] < 1',
'lvl' => '[:lvl:] >= 13',
),
),
'c20_lotus' => Array
(
'name' => '黑莲',
'tags' => Array('active','limit'),
'desc' => '本局已献祭<span class="redseed"> [^skillpara|c20_lotus-active_t^]/[:maxactive_t:] </span>次<br>
献祭黑莲花,口袋中所有元素存量<span class="yellow">x3</span><br>',
'input' => '献祭',
'no_reload_page' => 1,
'log' => '<span class="mtgblack">你将一坨不知道从哪弄来的黑糊糊的东西扔进了元素口袋里……<br>
片刻后,口袋里传来了令人毛骨悚然的咀嚼声……</span><br>
……<br>',
'status' => Array('skillpara|c20_lotus-active_t'),
'effect' => Array(
0 => Array(
'skillpara|c20_lotus-active_t' => '+=::1',
),
),
'events' => Array('lotus','active_news'),
'vars' => Array(
'emsgain' => 3,
'maxactive_t' => 3,
),
'svars' => Array('active_t' => 0,),
'pvars' => Array('skillpara|c20_lotus-active_t'),
'lockdesc' => Array(
'skillpara|c20_lotus-active_t' => '黑莲花已经用光了。',
'lvl' => '17级时解锁',
),
'unlock' => Array(
'skillpara|c20_lotus-active_t' => '[:skillpara|c20_lotus-active_t:] < 3',
'lvl' => '[:lvl:] >= 17',
),
),
'inf_zombie' => Array
(
'name' => '灵俑',
'tags' => Array('inf'),
'desc' => '你不会受到反噬伤害,但不能造成除了毒性、冻气以外的属性伤害<br>
你造成的最终伤害降低<span class="yellow">[:findmgloss:]%</span>,从敌人处受到的伤害降低<span class="yellow">[:findmgr:]%</span>',
'vars' => Array(
'findmgloss' => 50,
'findmgr' => 25,
),
),
'tl_cstick' => Array
(
'name' => '抡尸',
......
......@@ -42,17 +42,19 @@ $weather_active_r = Array(10,20,0,-5,-10,-20,-15,0,-7,-10,-10,-5,0,-5,-20,-5,0,2
//姿态对攻击力的影响始终生效(1:只在作出先制攻击时生效)
$pose_attack_active = 0;
//姿态对攻击力的影响(单位:百分比加算)
$pose_attack_modifier = Array(0,100,0,-25,25,-50,50,-777,5);
$pose_attack_modifier = Array(0,100,0,-25,25,-50,50,-777,0);
//姿态对防御力的影响始终生效(1:只在受到先制攻击伤害时生效)
$pose_defend_active = 0;
//姿态对防御力的影响(单位:百分比加算)
$pose_defend_modifier = Array(0,25,0,-25,-50,-50,-466,777,0);
$pose_defend_modifier = Array(0,25,0,-25,-50,-50,-466,777,10);
//姿态对遇敌率的影响(遇敌率越低道具发现率越高)
$pose_find_modifier = Array(0,5,10,-20,10,25,-20,85,10);
//姿态对躲避率的影响
$pose_hide_modifier = Array(0,-25,0,-10,10,-25,-40,-40,0,0);
$pose_hide_modifier = Array(0,-25,-10,-10,10,-25,-40,-40,0);
//姿态对先制率的影响(单位:百分比加算)(计算方式:进攻方姿态先制率-防守方姿态先制率)
$pose_active_modifier = Array(0,0,50,0,25,-25,5,-100,5);
$pose_active_modifier = Array(0,0,50,0,25,-25,5,-100,0);
//姿态对反击率的影响(单位:百分比加算)
$pose_counter_modifier = Array(0,0,0,0,0,-100,0,-100,5);
$pose_counter_modifier = Array(0,0,0,0,0,-100,0,-100,0);
//'通常','','重视防御','重视反击','重视躲避'
//应战策略对攻击力的影响始终生效(1:只在作出反击时生效)
......
......@@ -4,6 +4,21 @@
exit('Access Denied');
}
function get_clbskill_emgain_r($ev,&$data)
{
if(!check_skill_unlock('c20_fertile',$data))
{
$sk = 'c20_fertile';
$sk_lvl = get_skilllvl($sk,$data);
$sk_var = rand(0,get_skillvars($sk,'emsgain',$sk_lvl));
if(!empty($sk_var))
{
$ev = ceil($ev * (1 + ($sk_var/100)));
}
}
return $ev;
}
# 过滤不能拆解的道具(数组) 不能分解返回1 能分解返回0
function split_to_elements_filter($i)
{
......
......@@ -147,9 +147,11 @@
/********拆解元素部分********/
# 把尸体打散成元素
function split_corpse_to_elements(&$edata)
function split_corpse_to_elements(&$edata,$emode)
{
global $log,$mode,$typeinfo,$elements_info,$gamecfg,$gamevars;
global $now,$log,$mode,$typeinfo,$elements_info,$gamecfg,$gamevars;
global $db,$tablepre;
include config('elementmix',$gamecfg);
if(!isset($data))
{
......@@ -157,25 +159,39 @@
$data = &$pdata;
}
extract($data,EXTR_REFS);
if($club != 20)
$edata['clbpara'] = get_clbpara($edata['clbpara']);
if($club != 20 || ($emode == 'c20_zombie' && check_skill_unlock('c20_zombie',$data)))
{
$log.="你还想对这具可怜的尸体干什么?<br>";
$mode = 'command';
return;
}
# 过滤不能分解的尸体
if(in_array($edata['type'],$no_type_to_e_list))
if(($emode == 'element_split' && in_array($edata['type'],$no_type_to_e_list)) || ($emode == 'c20_zombie' && in_array($edata['type'],get_skillvars($emode,'notype'))) )
{
$desc = ($emode == 'element_split') ? '提炼为元素' : '转化成灵俑';
$log.="无法将{$edata['name']}{$desc}……为什么呢?<br>";
$mode = 'command';
return;
}
# 不能灵俑套娃……
if($emode == 'c20_zombie' && !check_skill_unlock('inf_zombie',$edata))
{
$log.="无法从{$edata['name']}身上提炼元素……为什么呢?<br>";
$log.="竟然想让一个已经死了两次的人再起来替你打工……你的良心不会痛吗!<br>";
$mode = 'command';
return;
}
# 开始提炼尸体
$ev_arr = Array();
$log.="<span class='grey'>{$edata['name']}化作点点荧光四散开来……</span><br>";
if($emode == 'element_split') $log.="<span class='grey'>{$edata['name']}化作点点荧光四散开来……</span><br>";
else $log.="<span class='grey'>{$edata['name']}身上升腾起缕缕不详黑气……</span><br>";
# 处理绑定有秘钥的尸体
if(!empty($split_spcorpse_fix[$edata['type']])) esplit_vip_things($ev_arr,$edata,$data);
if($emode == 'element_split' && !empty($split_spcorpse_fix[$edata['type']])) esplit_vip_things($ev_arr,$edata,$data);
# 根据尸体等级计算能获得的全种类元素数量
$ev_lvl = ceil($edata['lvl']*$split_corpse_lvl_r);
......@@ -197,15 +213,57 @@
$add_ev += $edata['element'.$e_key];
$edata['element'.$e_key] = 0;
}
${'element'.$e_key} += $add_ev;
$total_addev += $add_ev;
$log.="获得了{$add_ev}{$e_info}!<br>";
if($emode == 'element_split')
{
# 计算技能加成
$add_ev = get_clbskill_emgain_r($add_ev,$data);
${'element'.$e_key} += $add_ev;
$total_addev += $add_ev;
$log.="获得了{$add_ev}{$e_info}!<br>";
}
else
{
$add_ev = ceil($add_ev * sqrt($edata['lvl']));
if(${'element'.$e_key} < $add_ev)
{
$log.="但是你的元素库存告罄了!转化被迫中止了……<br>";
$mode = 'command';
return;
}
${'element'.$e_key} -= $add_ev;
$log.="<span class='grey'>消耗了{$add_ev}{$e_info}...</span><br>";
}
}
# 转化灵俑成功,复制一个相同属性的人丢进战场,然后把旧尸体销毁
if($emode == 'c20_zombie')
{
$gdata = $edata; unset($gdata['pid']);
$gdata['name'] .= '的灵俑';
$gdata['hp'] = $gdata['mhp']; $gdata['action'] = '';
$gdata['state'] = $gdata['endtime'] = $gdata['deathtime'] = $gdata['bid'] = 0;
# 登记为盟友,并记录创造者id
$gdata['clbpara']['mate'][] = $pid; $gdata['clbpara']['zombieoid'] = $pid;
# 获得灵俑状态技能
getclubskill('inf_zombie',$gdata['clbpara']);
# 插入
$gdata = player_format_with_db_structure($gdata);
if(!empty($gdata))
{
$db->array_insert("{$tablepre}players", $gdata);
$gid = $db->insert_id();
$clbpara['mate'][] = $gid; $clbpara['zombieid'][] = $gid;
# addnews
addnews($now,'ctozombie',$name,$edata['name']);
}
unset($gdata);
}
if($mode == 'element_split') addnews($now,'cesplit',$name,$edata['name']);
# 分解的结果有参数合法的特殊道具
if(!empty($ev_arr['spitm']) && count($ev_arr['spitm'])>3)
if($emode == 'element_split' && !empty($ev_arr['spitm']) && count($ev_arr['spitm'])>3)
{
global $itm0,$itmk0,$itme0,$itms0,$itmsk0;
$log.="但出现在你面前的不是元素,而是<span class='yellow'>{$ev_arr['result'][0]}</span>!<br>……这又是什么鬼东西!<br>";
$itm0 = $ev_arr['result'][0]; $itmk0 = $ev_arr['result'][1]; $itmsk0 = $ev_arr['result'][4];
$itme0 = $ev_arr['result'][2]; $itms0 = $ev_arr['result'][3];
......@@ -290,6 +348,8 @@
}
else
{
# 计算技能加成
$ev = get_clbskill_emgain_r($ev,$data);
$ev = ceil($ev);
${'element'.$e_key} += $ev;
$total_addev += $ev;
......
......@@ -14,7 +14,7 @@ function itemuse($itmn,&$data=NULL) {
global $exdmginf,$ex_inf,$cskills,$elements_info,$sparkle,$event_bgm;
global $upexp,$baseexp,$elec_cap;
//Some globals seems to be still needed... ...
global $itemspkinfo;
global $itemspkinfo,$plsinfo;
if(!isset($data))
{
......@@ -1570,6 +1570,9 @@ function itemuse($itmn,&$data=NULL) {
addnpc ( 2, 1, 4);
addnpc ( 2, 2, 4);
addnpc ( 2, 3, 4);
addnews ($now , 'key0', $name);
$itm = $itmk = $itmsk = '';
$itme = $itms = 0;
} elseif ($itm == '✦NPC钥匙·一阶段') {
include_once GAME_ROOT . './include/system.func.php';
$log .= '已解锁一阶段NPC!<br>似乎大量NPC已经部署至游戏内……<br>';
......
......@@ -1293,7 +1293,7 @@ function getcorpse($item,&$data=NULL)
# 销毁尸体rp结算
$rp_up = diceroll($rpup_destory_corpse);
include_once GAME_ROOT.'./include/game/revcombat.func.php';
rpup_rev($data,$rpup);
rpup_rev($data,$rp_up);
addnews($now,'cdestroy',$name,$edata['name']);
destory_corpse($edata);
......@@ -1301,7 +1301,7 @@ function getcorpse($item,&$data=NULL)
$mode = 'command';
return;
}
elseif($item == 'element_split')
elseif($item == 'element_split' || $item == 'c20_zombie')
{
if($club != 20)
{
......@@ -1311,7 +1311,7 @@ function getcorpse($item,&$data=NULL)
return;
}
include_once GAME_ROOT.'./include/game/elementmix.func.php';
split_corpse_to_elements($edata);
split_corpse_to_elements($edata,$item);
$action = ''; $bid = 0;
$mode = 'command';
return;
......@@ -1455,19 +1455,20 @@ function reload_single_set_item(&$pa,$eqp,$enm,$active=0)
//在背包内寻找道具进行编辑
function check_item_edit_event(&$pa,$event)
function check_item_edit_event($pa,&$pd,$event)
{
$flag = 0;
for($i=0;$i<=6;$i++)
{
if(!empty($pa['itms'.$i]))
if(!empty($pd['itms'.$i]))
{
# 「渗透」效果判定
if($event == 'c8_infilt')
{
if(strpos($pa['itmk'.$i],'H')===0)
if(strpos($pd['itmk'.$i],'H')===0)
{
$pa['itmk'.$i] = str_replace("H",'P',$pa['itmk'.$i]);
$pd['itmk'.$i] = str_replace("H",'P',$pd['itmk'.$i]);
$pd['itmsk'.$i] = $pa['pid'];
$flag = 1;
}
}
......
......@@ -1240,7 +1240,8 @@
//获取pa能造成的属性伤害队列
function get_base_ex_att_array(&$pa,&$pd,$active)
{
global $ex_attack,$log,$itemspkinfo;
global $ex_attack,$log,$itemspkinfo,$elements_info,$r_elements_info;
$ex_keys = Array();
foreach($pa['ex_keys'] as $ex)
{
......@@ -1250,6 +1251,7 @@
$ex_keys[]= $ex;
}
}
# 「附魔」效果判定:
if(isset($pa['bskill_c3_enchant']))
{
......@@ -1278,8 +1280,10 @@
// 使用次数+1
set_skillpara('c3_enchant','active_t',get_skillpara('c3_enchant','active_t',$pa['clbpara'])+1,$pa['clbpara']);
}
# 「磁暴」效果判定:
if(isset($pa['bskill_c7_electric']) && (empty($ex_keys) || !in_array('e',$ex_keys))) $ex_keys[] = 'e';
# 「渗透」效果判定:
if(isset($pa['skill_c8_infilt']))
{
......@@ -1294,6 +1298,55 @@
$log .= "<span class='purple'>致命毒雾从{$pa['nm']}身遭蔓延开来……</span><br>";
}
}
# 「闪电」效果判定:
if(isset($pa['bskill_c20_lighting']))
{
$sk = 'c20_lighting';
# 元素 ↔ 效果队列
$sk_etype = get_skillvars($sk,'emextype');
# 获取已使用次数,并+1计数:
$sk_t = get_skillpara($sk,'active_t',$pa['clbpara']);
set_skillpara($sk,'active_t',$sk_t+1,$pa['clbpara']);
# 根据已使用次数计算可释放次数
$sk_t = floor((sqrt(8 * $sk_t + 1) - 1) / 2);
# 根据可释放次数依次执行对应效果
$sk_eid = range(0,5);
for($s=1;$s<=$sk_t;$s++)
{
shuffle($sk_eid);
$t = 0; $no_cost = 0;
# 在当前库存的6种元素中,满足消耗量的元素
do{
$sk_cost = $s * get_skillvars($sk,'emcost');
$eid = $sk_eid[$t];
if($sk_cost < $pa['element'.$eid])
{
$pa['element'.$eid] -= $sk_cost;
# 如果造成的伤害是属性伤害,直接加入队列;否则保存进 $pa['bskill_c20_lighting_white_dmg'] 内
if($eid == 0)
{
if(!isset($pa['bskill_c20_lighting_white_dmg'])) $pa['bskill_c20_lighting_white_dmg'] = 0;
$pa['bskill_c20_lighting_white_dmg'] += $sk_cost;
}
else
{
if(empty($light_log) || !in_array($r_elements_info[$eid],$light_log)) $light_log[] = $r_elements_info[$eid];
$ex_keys[] = $sk_etype[$eid];
}
break;
}
$t++;
if($t == 5) $no_cost = 1;
}while($t <= 5);
# 库存内没有可消耗的元素了,提前终止
if($no_cost) break;
}
if(!empty($light_log))
{
$log .= implode('、',$light_log)."<span class='yellow'>附着在了{$pa['nm']}的武器上!</span><br>";
}
}
return $ex_keys;
}
......@@ -1480,6 +1533,7 @@
$log .= $exdmgname[$ex]; //xx
if($ex_dmg)
{
$ex_dmg = ceil($ex_dmg);
if(!empty($pa['ex_dmgdef_log'])) $log .= "被防御效果抵消了!仅";
$log .= "造成了<span class=\"red\">{$ex_dmg}</span>点伤害!";
if(!empty($pa['ex_dmginf_log'])) $log .= "并使{$pd['nm']}{$exdmginf[$pa['ex_dmginf_log']]}了!";
......@@ -1705,7 +1759,7 @@
//计算最终伤害的定值变化
function get_final_dmg_fix(&$pa,&$pd,$active,$fin_dmg)
{
global $log;
global $log,$plsinfo,$now;
# 「量心」效果判定 手加减:
if(isset($pa['askill_c19_dispel']) && $fin_dmg >= $pd['hp'])
......@@ -1827,6 +1881,15 @@
}
}
# 「闪电」无色伤害效果判定:
if(isset($pa['bskill_c20_lighting_white_dmg']))
{
global $elements_info;
$fin_dmg += $pa['bskill_c20_lighting_white_dmg'];
$log .= "<span class='mtgcolorless'>{$elements_info[0]}使{$pa['nm']}的攻击附加了{$pa['bskill_c20_lighting_white_dmg']}点额外伤害!</span><br>";
unset($pa['bskill_c20_lighting_white_dmg']);
}
# 「护盾」效果判定
if(isset($pd['skill_buff_shield']))
{
......@@ -1835,6 +1898,48 @@
$log .= "<span class=\"lime\">「护盾」使{$pd['nm']}受到的伤害降低了{$sk_var}点!</span><br>";
}
# 「灵俑」抵挡伤害判定
if(!empty($pd['clbpara']['zombieid']))
{
$mate_list = $pd['clbpara']['zombieid'];
shuffle($mate_list);
foreach($mate_list as $mid)
{
$mdata = fetch_playerdata_by_pid($mid);
# 跳过不在同一地图且状态不健康的灵俑
if($mdata['pls'] != $pd['pls'] || $mdata['hp'] < 10) continue;
# 抵挡伤害
$max_cover_dmg = min($fin_dmg,round($mdata['hp']/2));
if($max_cover_dmg)
{
$mdata['hp'] -= $max_cover_dmg;
player_save($mdata);
$fin_dmg -= $max_cover_dmg;
$log .= "<span class=\"yellow\">但是{$mdata['name']}{$pd['nm']}抵挡了{$max_cover_dmg}点伤害!</span><br>";
break;
}
}
}
# 「火花」技能判定:救命
if($fin_dmg >= $pd['hp'] && isset($pd['askill_c20_sparkle']))
{
$sk = 'c20_sparkle';
unset($pa['askill_c20_sparkle']);
$plslist = get_safe_plslist();
$sp_pls = $plslist[array_rand($plslist)];
# 注销技能状态
set_skillpara($sk,'active',0,$pd['clbpara']);
set_skillpara($sk,'active_t',1,$pd['clbpara']);
# 切换地图
$pd['pls'] = $sp_pls;
$pd['tp_by_sparkle'] = $sp_pls;
$log .= "<span class=\"yellow\">千钧一发之际,{$pd['nm']}点燃火花传送到了别处!</span><br>";
if(!$pa['type']) $pa['log_save'] .= "{$pd['name']}在千钧一发之际点燃了火花,传送到不知道哪去了!";
addnews($now,'sparklerevival',$pd['name'],$pa['name'],$plsinfo[$sp_pls]);
return 0;
}
# 「爆头」技能效果
if(isset($pa['skill_c4_headshot']) && $fin_dmg > $pd['hp']*0.85 && $fin_dmg < $pd['hp'])
{
......@@ -1979,7 +2084,7 @@
{
$flag = get_inf_rev($pd,'p');
include_once GAME_ROOT.'./include/game/itemmain.func.php';
check_item_edit_event($pd,'c8_infilt');
check_item_edit_event($pa,$pd,'c8_infilt');
if($flag) $log .= "<span class='yellow'>「渗透」使{$pd['nm']}{$exdmginf['p']}了!</span><br>";
else $log .= "<span class='yellow'>{$pd['nm']}没有受到「渗透」影响……大概吧?</span><br>";
}
......@@ -2043,7 +2148,7 @@
//打击结束,已经应用扣血后的事件结算
function rev_combat_result_events(&$pa,&$pd,$active)
{
global $log,$infinfo,$exdmginf;
global $now,$log,$infinfo,$exdmginf,$plsinfo;
# 真蓝凝防守事件:
if($pd['type'] == 19 && $pd['name'] == '蓝凝')
......@@ -2102,6 +2207,36 @@
}
}
# 「火花」技能判定:触发后不会再触发协战流程
if(isset($pa['askill_c20_sparkle']))
{
$sk = 'c20_sparkle';
$dice = diceroll(99);
$obbs = get_skillvars($sk,'tpr');
if($dice < $obbs)
{
$pa['askill_c20_sparkle'] = 2;
$plslist = get_safe_plslist();
$sp_pls = $plslist[array_rand($plslist)];
# 切换地图
$pd['pls'] = $sp_pls;
$pd['tp_by_sparkle'] = $sp_pls;
# NPC敌人扣血,玩家在被送到新地图后强制探索一次
if($pd['type'])
{
$pd['hp'] -= min($pd['hp']-1,rand(1,$sp_pls * 10));
}
else
{
$pd['action'] = 'tpmove';
$pd['logsave'] .= "<span class=\"grey\">{$pa['name']}点燃火花,将你传送到了{$plsinfo[$sp_pls]}!</span><br>";
}
$log .= "<span class=\"yellow\">你点燃火花,将{$pd['nm']}送到了{$plsinfo[$sp_pls]}!祝他好运吧……</span><br>";
addnews($now,'sparklemove',$pa['name'],$pd['name'],$plsinfo[$sp_pls]);
return;
}
}
# 「协战」判定
# 拥有佣兵的情况下,主动攻击敌人/成功反击敌人,且敌人仍存活时,判定是否有佣兵协战
if(!empty(get_skillpara('c11_merc','id',$pa['clbpara'])))
......@@ -2125,22 +2260,44 @@
}
}
}
# 「灵俑」协战判定
if(empty($pa['coveratk_flag']) && !empty($pa['clbpara']['zombieid']))
{
# 「灵俑」基础协战率:50
$cover_obbs = 50; $cover_dice = diceroll(99);
if($cover_dice < $cover_obbs)
{
$mate_list = $pa['clbpara']['mate']; shuffle($mate_list);
foreach($mate_list as $mid)
{
$mdata = fetch_playerdata_by_pid($mid);
# 跳过不在同一地图的灵俑
if($mdata['pls'] != $pd['pls'] || $mdata['hp'] < 1) continue;
# 触发协战
$pa['coveratk_flag'] = $mid;
break;
}
}
}
return;
}
// 获取pa在探索时的遇敌率(遇敌率越低道具发现率越高)
function calc_meetman_rate(&$pa)
{
global $gamestate;
global $gamestate,$pose_find_modifier,$pls_find_modifier,$weather_find_r;
# 基础遇敌率
$enemyrate = 40;
# 连斗阶段遇敌率+20
if($gamestate == 40){$enemyrate += 20;}
# 死斗阶段遇敌率+40
elseif($gamestate == 50){$enemyrate += 40;}
# 姿态修正
if($pa['pose'] == 3) {$enemyrate -= 20;}
elseif($pa['pose'] ==4){$enemyrate += 10;}
# 姿态对遇敌率的修正
if(!empty($pose_find_modifier[$pa['pose']])) $enemyrate += $pose_find_modifier[$pa['pose']];
# 天气对遇敌率的修正
if(!empty($weather_find_r['weather'])) $enemyrate += $weather_find_r['weather'];
# 地图场景对遇敌率的修正
if(!empty($pls_find_modifier[$pa['pls']])) $enemyrate += $pls_find_modifier[$pa['pls']];
# 社团技能修正(新)
# 「专注」效果判定
......@@ -2172,8 +2329,7 @@
# 计算天气对躲避率的修正
$wth_r = $weather_hide_r[$weather] ?: 0 ;
# 计算地点对躲避率的修正
//$pls_r = $pls_hide_modifier[$pd['pls']] ?: 0 ;
$pls_r = 0;//暂时不应用地点躲避率 等遇敌率也重做之后再说
$pls_r = $pls_hide_modifier[$pd['pls']] ?: 0 ;
# 计算pd姿态对于躲避率的修正:
$pose_r = $pose_hide_modifier[$pd['pose']] ?: 0;
# 计算pd策略对于躲避率的修正:
......@@ -2266,18 +2422,6 @@
// 判断pd是否满足反击pa的基础条件(最高优先级)
function check_can_counter(&$pa,&$pd,$active)
{
# 治疗姿态、躲避策略不能反击
if($pd['pose'] == 5 || $pd['tactic'] == 4)
{
$pd['cannot_counter_log'] = "{$pd['nm']}处于无法反击的状态!转身逃开了!";
return 0;
}
# 哨戒姿态不会反击,但是会生气……
if($pd['pose'] == 7)
{
$pd['cannot_counter_log'] = "{$pd['nm']}看起来非常生气!还是离他远点吧……";
return 0;
}
# 被协战攻击无法反击
if(isset($pa['is_coveratk']))
{
......@@ -2296,12 +2440,30 @@
$pd['cannot_counter_log'] = "被你放了一马的{$pd['nm']}一瘸一拐地逃开了。<br>希望你的决定是正确的……";
return 0;
}
# 被火花传送走了不能反击
if(isset($pd['tp_by_sparkle']))
{
$pd['cannot_counter_log'] = "{$pd['nm']}传送走了!<br>";
return 0;
}
# 处于眩晕状态时,无法反击
if(isset($pd['skill_inf_dizzy']))
{
$pd['cannot_counter_log'] = "{$pd['nm']}正处于眩晕状态,无法反击!";
return 0;
}
# 治疗姿态、躲避策略不能反击
if($pd['pose'] == 5 || $pd['tactic'] == 4)
{
$pd['cannot_counter_log'] = "{$pd['nm']}处于无法反击的状态!转身逃开了!";
return 0;
}
# 哨戒姿态不会反击,但是会生气……
if($pd['pose'] == 7)
{
$pd['cannot_counter_log'] = "{$pd['nm']}看起来非常生气!还是离他远点吧……";
return 0;
}
return 1;
}
......
......@@ -353,20 +353,18 @@
# 检查冷却时间
if(is_array($lock))
{
$cd = $lock[0];
$lock = $lock[1];
$cd = $lock[1];
$lock = $lock[0];
}
# 通用未解锁项目
if($lock == 'noskill' || !isset($cskill['lockdesc'])) return "技能未解锁或解锁条件不明!<br>";
# 返回对应的未解锁描述
if(is_array($cskill['lockdesc']))
$lockdesc = $cskill['lockdesc'];
if(is_array($lockdesc))
{
$lockdesc = isset($cskill['lockdesc'][$lock]) ? $cskill['lockdesc'][$lock] : "技能不可用,可能是因为:{$lock}<br>";
}
else
{
$lockdesc = $cskill['lockdesc'];
$lockdesc = isset($lockdesc[$lock]) ? $lockdesc[$lock] : "技能不可用,可能是因为:{$lock}<br>";
}
if(isset($cd)) $lockdesc = str_replace("[:cd:]",$cd,$lockdesc);
return $lockdesc;
}
......
......@@ -10,6 +10,7 @@
function upgclbskills_events($event,$sk,&$data=NULL)
{
global $log,$cskills,$now,$club_skillslist,$weather,$gamevars,$wthinfo,$db,$tablepre;
global $elements_info;
if(!isset($data))
{
......@@ -62,7 +63,7 @@
// 第3次使用时开始冷却
if($active_t+1 > get_skillvars($sk,'freet'))
{
$event = 'setstarttimes_'.$sk.'_charge';
$event = 'setstarttimes_'.$sk;
}
else
{
......@@ -210,7 +211,7 @@
$mid = get_skillpara($sk,'active_t',$clbpara);
# 召唤佣兵,并获取佣兵pid
include_once GAME_ROOT . './include/system.func.php';
$merc_pid = addnpc(25,$merc,1,$now,Array('clbpara' => Array('mkey' => $mid, 'oid' => $pid, 'onm' => $name)),NULL,$pls)[0];
$merc_pid = addnpc(25,$merc,1,$now,Array('clbpara' => Array('mkey' => $mid, 'oid' => $pid, 'onm' => $name ,'mate' => Array($pid))),NULL,$pls)[0];
# 初始化佣兵参数
$clbpara['skillpara'][$sk]['id'][$mid] = $merc_pid;
# 登记佣兵薪水
......@@ -226,6 +227,50 @@
$log .= "你掏出千元大钞振臂一呼,「{$mercinfo[$merc]['name']}」突然出现在了你的面前!<br>";
return 1;
}
# 事件:横财
if($event == 'windfall')
{
$tot = $element0 + $element1 + $element2 + $element3 + $element4 + $element5;
if($tot < 5)
{
$log .= "你口袋中的元素太少了!再去捡点吧!<br>";
return 0;
}
$numbers = array_fill(0, 6, 14);
# 生成5个随机数,使它们的和等于15
$t = 16;
for ($i = 0; $i < 6; $i++)
{
$at = rand(1,$t); $t -= $at;
$numbers[$i] += $at;
}
$log .= "你把口袋中的元素搅混在一起……然后满怀期待得等着它们自己把自己整理好……<br>";
foreach($elements_info as $key => $info)
{
${'element'.$key} = 0;
$add_ev = ceil($tot * ($numbers[$key]/100));
include_once GAME_ROOT.'./include/game/elementmix.calc.php';
$add_ev = get_clbskill_emgain_r($add_ev,$data);
${'element'.$key} += $add_ev;
$log .= "获得了{$add_ev}{$info}!<br>";
}
return 1;
}
# 事件:黑莲花
if($event == 'lotus')
{
foreach($elements_info as $key => $info)
{
# 不足3000的,补足到3000
if(${'element'.$key} < 3000)
{
${'element'.$key} = 3000;
continue;
}
${'element'.$key} *= 3;
}
return 1;
}
# 事件:获取指定技能
if(strpos($event,'getskill_') === 0)
{
......
......@@ -49,9 +49,11 @@
get_wep_kind($pd);
$pd['wep_range'] = get_wep_range($pd);
$pd['wep_skill'] = get_wep_skill($pd);
$pd['wep_name'] = $pd['wep'];
get_wep_kind($pa,$wep_kind,$pd['wep_range']);
$pa['wep_range'] = get_wep_range($pa);
$pa['wep_skill'] = get_wep_skill($pa);
$pa['wep_name'] = $pa['wep'];
# 传入pa为玩家、pd为NPC,且存在鏖战/追击标志时,判断战斗流程类型(标准/追击/鏖战/协战)
if(!$pa['type'] && $pd['type'] && (strpos($pa['action'],'dfight')!==false || strpos($pa['action'],'chase')!==false))
......@@ -393,7 +395,7 @@
findcorpse($edata);
return;
}
elseif($action == 'chase' || $action == 'pchase' || $action == 'dfight' || $action == 'cover')
elseif($action == 'chase' || $action == 'pchase' || $action == 'dfight' || $action == 'cover' || $action == 'tpmove')
{
$chase_flag = 1;
}
......@@ -1053,6 +1055,18 @@
$log .= "<span clas='red'>由于战死,";
skill_merc_fire('c11_merc',$pd['clbpara']['mkey'],$pd,1);
}
# 灵俑死亡时,从创造者的灵俑队列中删除
if(isset($pd['clbpara']['zombieoid']))
{
$odata = fetch_playerdata_by_pid($pd['clbpara']['zombieoid']);
$mkey = array_search($pd['pid'],$odata['clbpara']['mate']);
unset($odata['clbpara']['mate'][$mkey]);
$zkey = array_search($pd['pid'],$odata['clbpara']['zombieid']);
unset($odata['clbpara']['zombieid'][$zkey]);
player_save($odata);
$w_log = "<span class=\"grey\">你的灵俑{$pd['name']}归于尘土了……</span><br>";
logsave($odata['pid'],$now,$w_log,'c');
}
return;
}
......
......@@ -370,7 +370,7 @@ function search(&$data=NULL){
function move_search_events(&$data=NULL,$act)
{
global $log,$inf_move_hp,$inf_move_sp,$infwords,$weather,$gamevars,$now;
global $log,$inf_move_hp,$inf_move_sp,$infwords,$weather,$gamevars,$now,$elements_info;
if(!isset($data))
{
......@@ -487,6 +487,41 @@ function move_search_events(&$data=NULL,$act)
player_save($mdata);
}
}
# 「沃土」效果判定:
if(!check_skill_unlock('c20_fertile',$data))
{
$sk = 'c20_fertile';
$sk_lvl = get_skilllvl($sk,$data);
$sk_mst = get_skillvars($sk,'mst',$sk_lvl);
$ms = get_skillpara($sk,'ms',$data['clbpara']) + 1;
# 赚钱!
if($ms >= $sk_mst)
{
$temp_enums = 0; $temp_ekey = 0;
foreach($elements_info as $key => $info)
{
if(!empty($data['element'.$key]))
{
if(empty($temp_enums) || $data['element'.$key] < $temp_enums)
{
$temp_enums = $data['element'.$key];
$temp_ekey = $key;
}
}
}
if($temp_enums)
{
$sk_var = get_skillvars($sk,'minemsgain',$sk_lvl);
$add_ev = $temp_enums * (1 + ($sk_var/100));
$data['element'.$temp_ekey] = $add_ev;
$ms = 0;
$log .= "<span class='yellow'>你的口袋里冒出了新的元素!</span><br>";
}
}
set_skillpara($sk,'ms',$ms,$data['clbpara']);
}
return;
}
......@@ -584,9 +619,6 @@ function discover($schmode = 0,&$data=NULL)
$mode_dice = rand(0,99);
if($mode_dice < $schmode)
{
//echo "进入遇敌判定<br>";
//global $pid,$corpse_obbs,$teamID,$fog,$bid,$gamestate;
//global $clbstatusa,$clbstatusb,$clbstatusc,$clbstatusd,$clbstatuse;
global $fog,$gamestate;
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pls='$pls' AND pid!='$pid'");
......@@ -600,8 +632,6 @@ function discover($schmode = 0,&$data=NULL)
$enemynum = $db->num_rows($result);
$enemyarray = range(0, $enemynum - 1);
shuffle($enemyarray);
$find_r = get_find_r($weather,$pls,$pose,$tactic,$club,$inf);
$find_obbs = $enemy_obbs + $find_r;
//移除了重复调用discover()的设定,尝试用一种正常一点的办法确保敌人/尸体发现率符合基础设定值,不然现在的尸体确实太难摸了。
//现在触发遇敌事件只会返回三种结果:1、发现尸体;2、发现敌人、3、敌人隐藏起来;所以实际的尸体发现率=$enemyrate*$corpse_obbs
......@@ -611,6 +641,7 @@ function discover($schmode = 0,&$data=NULL)
{
$db->data_seek($result, $enum);
$edata = $db->fetch_array($result);
$edata['clbpara'] = get_clbpara($edata['clbpara']);
if(!$edata['type'] || $gamestate < 50)
{
if($edata['hp'] <= 0)
......@@ -639,21 +670,21 @@ function discover($schmode = 0,&$data=NULL)
}
else
{
//直接略过决斗者
//global $artk;
# 略过决斗者
if ((!$edata['type'])&&($artk=='XX')&&(($edata['artk']!='XX')||($edata['art']!=$name))&&($gamestate<50)) continue;
if (($artk!='XX')&&($edata['artk']=='XX')&&($gamestate<50)) continue;
//暂时直接略过自己的佣兵,之后做完组队面板交互再加回来
if(!empty(get_skillpara('c11_merc','id',$clbpara)) && in_array($edata['pid'],get_skillpara('c11_merc','id',$clbpara))) continue;
//灵子状态只能遭遇同为灵子状态的对象,非灵子状态对象无法发现灵子状态下的对象……但是尸体就没有这种考量了
# 暂时直接略过盟友单位
if(!empty($edata['clbpara']['mate']) && in_array($pid,$edata['clbpara']['mate'])) continue;
# 灵子状态只能遭遇同为灵子状态的对象,非灵子状态对象无法发现灵子状态下的对象……但是尸体就没有这种考量了
if(($edata['pose'] == 8 || $data['pose'] == 8) && $data['pose'] != $edata['pose']) continue;
//「量心」技能效果判定:
# 「量心」技能效果判定:
if(!check_skill_unlock('c19_dispel',$data) && !empty(get_skillpara('c19_dispel','active',$clbpara)) && $edata['hp'] <= 1) continue;
//计算活人发现率
# 计算活人发现率
$hide_r = get_hide_r_rev($data,$edata);
$enemy_dice = diceroll(99);
//echo "hide_r = {$hide_r} | find_obbs = {$find_obbs} | dice = {$enemy_dice}";
$meetman_flag = $enemy_dice<($find_obbs - $hide_r) ? 1 : -1;
# 把find_r杀了,现在技能都是用躲避率去判断的了,躲避率为负就等于发现率增幅了
$meetman_flag = $enemy_dice < ($enemy_obbs - $hide_r) ? 1 : -1;
break;
}
}
......
......@@ -276,6 +276,8 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"lime\">{$a}使用了黑色碎片,让1名未知存在加入了战场!打倒她去获得ID卡来解除游戏吧!</span><br>\n";
} elseif($news == 'dfsecphase') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"lime\">{$a}闯了大祸,打破了Dark Force的封印!</span><br>\n";
} elseif($news == 'key0'){
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"lime\">{$a}释放了少量被封印的NPC存在!</span><br>\n";
} elseif($news == 'key1'){
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"lime\">{$a}释放了第一批被封印的NPC存在!</span><br>\n";
} elseif($news == 'key2'){
......@@ -317,6 +319,10 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"grey\">{$a}{$b}生前存放在安全箱里的东西转移到了自己的名下。哇……真是世风日下,道德沦丧啊!</span><br>\n";
} elseif($news == 'cdestroy') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}{$b}的尸体销毁了</span><br>\n";
} elseif($news == 'cesplit') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}{$b}的尸体提炼成了元素</span><br>\n";
} elseif($news == 'ctozombie') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"mtgblack\">{$a}{$b}的尸体转化成了灵俑...</span><br>\n";
} elseif($news == 'csl_wthchange') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"orange\">{$a}发送了控制指令,战场的天气变成了{$wthinfo[$b]}!</span><br>\n";
} elseif($news == 'csl_hack') {
......@@ -348,6 +354,10 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}指挥佣兵 {$b}移动到了{$plsinfo[$c]}!</span><br>\n";
} elseif(strpos($news,'mercleave')===0) {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}的佣兵 {$b}离开了战场!</span><br>\n";
} elseif($news == 'sparklemove') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"mtgred\">{$a}点燃火花将{$b}传送到了{$c}!</span><br>\n";
} elseif($news == 'sparklerevival') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"mtggreen\">{$a}在危急时刻点燃火花传送到了{$c}!</span><br>\n";
} else {
$newsinfo .= "<li>$time,$news,$a,$b,$c,$d<br>\n";
}
......
想要从尸体上拾取什么?<br><br>
<input type="hidden" name="mode" value="corpse">
<!--{if $club==20}-->
<input type="radio" name="command" id="element_split" value="element_split" <!--{if !$w_money}-->checked<!--{/if}-->><a onclick=sl('element_split'); href="javascript:void(0);" >提炼元素</a><br>
<input type="radio" name="command" id="element_split" value="element_split" <!--{if !$w_money}-->checked<!--{/if}-->><a onclick=sl('element_split'); href="javascript:void(0);" >提炼元素</a>
<!--{if !check_skill_unlock('c20_zombie',$pdata)}-->
<input type="radio" name="command" id="c20_zombie" value="c20_zombie" style="margin-left:5px;"><a onclick=sl('c20_zombie'); href="javascript:void(0);" ><span class="mtgblack">转化灵俑</span></a>
<!--{/if}-->
<br>
<!--{elseif $allow_destory_corpse && !in_array($w_type,$no_destory_corpse_type)}-->
<input type="radio" name="command" id="destory" value="destory" <!--{if !$w_money}-->checked<!--{/if}-->><a onclick=sl('destory'); href="javascript:void(0);" >销毁尸体</a><br>
<!--{/if}-->
......
......@@ -1858,9 +1858,7 @@ NPC也会发出重击和必杀技,请随时小心。</p>
</span>
</td>
<td class="b3">
<span>
待实装
</span>
<span><input type="button" class="cmdbutton" value="点击查看称号技能" onclick="showModalDialog($('skillhelp-c20'));"></span>
</tr>
</table>
<br>
......
......@@ -7,7 +7,7 @@
<input type="hidden" id="command" name="command" value="itemget">
<input type="button" class="cmdbutton" id="zz" name="itemget" value="[Z]拾取" onclick="postCmd('gamecmd','command.php');this.disabled=true;">
<!--{if $club==20}-->
&nbsp;&nbsp;<input type="button" id="aa" class="cmdbutton" name="split_itm" value="[A]提炼" onclick="$('command').value='split_itm0';postCmd('gamecmd','command.php');this.disabled=true;">
&nbsp;&nbsp;<input type="button" id="cc" class="cmdbutton" name="split_itm" value="[C]提炼" onclick="$('command').value='split_itm0';postCmd('gamecmd','command.php');this.disabled=true;">
<!--{/if}-->
<br><br>
<input type="button" class="cmdbutton" id="xx" name="dropitm0" value="[X]丢弃" onclick="$('command').value='dropitm0';postCmd('gamecmd','command.php');this.disabled=true;">
\ No newline at end of file
......@@ -42,7 +42,7 @@
border:1px solid rgba(225, 124, 226, 0.4);
}
</style>
<div style="width:740px">
<div style="width:720px max-width:740px">
<div class="b1" style="height:20px"><span>元素笔记</span></div>
<div class="b3" style="min-height:380px;display: flex;position:relative;justify-content: center;">
<div style="min-width: 500px;max-width:720px;max-height:400px;text-align:left;word-break:break-all;overflow:auto;">
......@@ -91,9 +91,8 @@
</tr>
</table>
<!--{/loop}-->
<br>
<hr style="clear:both; border: 1px solid rgba(225, 124, 226, 0.25);">
<div style="display: block;word-break:break-all;overflow:auto;">
<div style="clear:both; display: block;word-break:break-all;overflow:auto;">
<br>
{$smhint}
</div>
</div>
......
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