Commit e30bbc1a authored by Nemo Ma's avatar Nemo Ma Committed by GitHub

Merge pull request #81 from hikawiier/waaagh

Update & Fix
parents f6ed1fc2 4975da46
......@@ -405,6 +405,12 @@ if($hp > 0){
if(strpos($command,'pose') === 0) {
$cpose = substr($command,4,1);
if(in_array($cpose,$apose)){
if($cpose == 8 && isset($clbpara['starttimes']['pose8']) && ($now < ($clbpara['starttimes']['pose8'] + 60))){
$log .= "现在无法切换至{$poseinfo[$cpose]}。剩余冷却时间:".round($clbpara['starttimes']['pose8'] + 60 - $now)."秒。<br>";
goto command_end_flag;
} elseif($cpose == 8) {
$clbpara['starttimes']['pose8'] = $now;
}
$pose = $cpose;
$log .= "基础姿态变为<span class=\"yellow\">$poseinfo[$pose]</span>。<br> ";
$mode = 'command';
......@@ -624,6 +630,7 @@ if($hp > 0){
if ($command=="YES") press_bomb();
$mode = 'command';
} else {
command_end_flag:
$mode = 'command';
}
......
......@@ -1760,7 +1760,7 @@ $anpcinfo = array
'bid' => 0,
'inf' => '',
'rage' => 13,
'pose'=> 0,
'pose'=> 8,
'tactic' => 0,
'killnum' => 0,
'teamID' => '',
......
......@@ -38,21 +38,21 @@ $weather_hide_r = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
//天气对先制率的影响
$weather_active_r = Array(10,20,0,-5,-10,-20,-15,0,-7,-10,-10,-5,0,-5,-20,-5,0,20);
//'通常','作战姿态','强袭姿态','探物姿态','偷袭姿态','治疗姿态','✧狂飙姿态✧','哨戒姿态'
//'通常','作战姿态','强袭姿态','探物姿态','偷袭姿态','治疗姿态','✧狂飙姿态✧','哨戒姿态','✧灵子姿态✧'
//姿态对攻击力的影响始终生效(1:只在作出先制攻击时生效)
$pose_attack_active = 0;
//姿态对攻击力的影响(单位:百分比加算)
$pose_attack_modifier = Array(0,100,0,-25,25,-50,50,-777);
$pose_attack_modifier = Array(0,100,0,-25,25,-50,50,-777,5);
//姿态对防御力的影响始终生效(1:只在受到先制攻击伤害时生效)
$pose_defend_active = 0;
//姿态对防御力的影响(单位:百分比加算)
$pose_defend_modifier = Array(0,25,0,-25,-50,-50,-466,777);
$pose_defend_modifier = Array(0,25,0,-25,-50,-50,-466,777,0);
//姿态对躲避率的影响
$pose_hide_modifier = Array(0,-25,0,-10,10,-25,-40,-40,0);
$pose_hide_modifier = Array(0,-25,0,-10,10,-25,-40,-40,0,0);
//姿态对先制率的影响(单位:百分比加算)(计算方式:进攻方姿态先制率-防守方姿态先制率)
$pose_active_modifier = Array(0,0,50,0,25,-25,5,-100);
$pose_active_modifier = Array(0,0,50,0,25,-25,5,-100,5);
//姿态对反击率的影响(单位:百分比加算)
$pose_counter_modifier = Array(0,0,0,0,0,-100,0,-100);
$pose_counter_modifier = Array(0,0,0,0,0,-100,0,-100,5);
//'通常','','重视防御','重视反击','重视躲避'
//应战策略对攻击力的影响始终生效(1:只在作出反击时生效)
......
......@@ -3064,7 +3064,7 @@ $npcinfo = array
'bid' => 0,
'inf' => '',
'rage' => 13,
'pose'=> 0,
'pose'=> 8,
'tactic' => 0,
'killnum' => 0,
'teamID' => '',
......
......@@ -59,10 +59,28 @@ $hpinfo = Array('<span class="clan">并无大碍</span>','<span class="yellow">
$spinfo = Array('精力充沛','略有疲惫','精疲力尽','已经死亡');
$rageinfo = Array('平静','愤怒','暴怒','已经死亡');
$wepeinfo = Array('不值一提','略有威胁','威力可观','无敌神器');
$poseinfo = Array('通常','作战姿态','强袭姿态','探物姿态','偷袭姿态','治疗姿态','✧狂飙姿态✧','哨戒姿态');
$poseinfo = Array('通常','作战姿态','强袭姿态','探物姿态','偷袭姿态','治疗姿态','✧狂飙姿态✧','哨戒姿态','✧灵子姿态✧');
$tacinfo = Array('通常','','重视防御','重视反击','重视躲避');
$posetips = Array(
0 => "最普通的姿态",
1 => "以备战为目的,略微提升角色发现率。极大幅提升攻击力、防御力",
2 => "以追猎敌人为目的,大幅提升角色先制率",
3 => "以寻找物品为目的,提升道具发现率。中幅降低攻击力、防御力",
4 => "以先发制人为目的,提升角色发现率以及先手率。中幅提升攻击力,但是会大幅降低防御力",
5 => "以自我治疗为目的,提升恢复能力。但其他数值大幅恶化",
6 => "以快速发现敌人为目的,极大幅提升角色遇敌率,但降低先制率,极大幅降低防御力",
7 => "以哨戒为目的,初次受到攻击时不会反击。但在受到攻击后会变换作战姿态",
8 => "切换战术界面的感知模式,只会遭遇同处于✧灵子姿态✧的对象,同时不会被处于其他姿态的对象发现。\r脱离灵子姿态后,需要等待1分钟后才可重新进入。",
);
$tactips = Array(
0 => "没有策略就是你的策略",
1 => "",
2 => "随时准备防御敌方攻击和陷阱的策略。会大幅提升防御力",
3 => "随时准备反击敌人攻击的策略。会提升先制率、攻击力,但中幅降低防御力",
4 => "试图回避敌人、陷阱和禁区的策略。中幅降低攻击力、防御力",
);
//可供玩家选择的姿态、策略
$apose = Array(1,3,4,5,6);
$apose = Array(1,3,4,5,6,8);
$atac = Array(2,3,4);
//不会生成在危险地图的NPC(执行官、女主)
$hidding_typelist = Array(7,14);
......
......@@ -183,8 +183,10 @@
15,30,4777,2,秋生大叔的球棒,WP,600,150,cd,
0,16,,,解锁钥匙,,,,,
16,3,200,0,✦种火钥匙,Y,1,1,,
16,2,1000,0,✦钥匙碎片,X,1,1,,
16,2,1000,0,✦钥匙碎片,Y,1,1,,
16,1,4700,0,✦NPC钥匙·一阶段,Y,1,1,,
16,1,2000,1,✦NPC钥匙·一阶段,Y,1,1,,
16,1,10400,1,✦✦NPC钥匙·二阶段,Y,1,1,,
16,1,6000,2,✦✦NPC钥匙·二阶段,Y,1,1,,
16,1,5321,1,✦种火定点移位装置✦,Y,1,1,,
0,17,,,福袋,,,,,
......
......@@ -25,7 +25,7 @@ function get_find_r($weather = 0,$pls = 0,$pose = 0,$tactic = 0,$club = 0,$inf =
20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 20
// 10, 0, 0, 10, -10, 10, 0, 10, -10, 0, 10, 0, 0, -10, 0, -10, -10, -10, 0, 10, 0, 10
),
'pose' => array(0,0,0,25,-10,-25,85),
'pose' => array(0,0,0,25,-10,-25,85,0,25),
'tactic' => array(),
);
$find_r = 0;
......
......@@ -10,7 +10,7 @@ include_once GAME_ROOT.'./include/game/clubslct.func.php';
function itemuse($itmn,&$data=NULL) {
//global $mode, $log, $nosta, $pid, $name, $state, $now,$nick,$achievement,$club,$clbpara,$pdata;
global $url,$cmd,$mode,$db,$tablepre,$log,$nosta,$noarb,$gamevars,$corpseprotect,$now,$gamecfg;
global $url,$cmd,$mode,$db,$tablepre,$log,$nosta,$noarb,$gamevars,$corpseprotect,$now,$gamecfg,$hack,$gamevars;
global $exdmginf,$ex_inf,$cskills,$elements_info,$sparkle,$event_bgm;
global $upexp,$baseexp,$elec_cap;
......@@ -1540,26 +1540,17 @@ function itemuse($itmn,&$data=NULL) {
$itm = $itmk = $itmsk = '';
$itme = $itms = 0;
} elseif ($itm == '✦钥匙碎片') {
include_once GAME_ROOT . './include/system.func.php';
$log .= '嗯……?只有碎片也能用吗?<br>好像将一小部分NPC部署进了游戏内……<br>';
//思念体 4*3
addnpc ( 2, 0, 4);
addnpc ( 2, 1, 4);
addnpc ( 2, 2, 4);
addnpc ( 2, 3, 4);
} elseif ($itm == '✦NPC钥匙·一阶段') {
include_once GAME_ROOT . './include/system.func.php';
$log .= '已解锁一阶段NPC!<br>似乎大量NPC已经部署至游戏内……<br>';
//思念体 4*4
addnpc ( 2, 0,1);
addnpc ( 2, 1,1);
addnpc ( 2, 2,1);
addnpc ( 2, 3,1);
addnpc ( 2, 0,1);
addnpc ( 2, 1,1);
addnpc ( 2, 2,1);
addnpc ( 2, 3,1);
addnpc ( 2, 0,1);
addnpc ( 2, 1,1);
addnpc ( 2, 2,1);
addnpc ( 2, 3,1);
addnpc ( 2, 0,1);
addnpc ( 2, 1,1);
addnpc ( 2, 2,1);
addnpc ( 2, 3,1);
//职人 1*6
addnpc ( 11, 0,1);
addnpc ( 11, 1,1);
......
......@@ -6,6 +6,7 @@ if (! defined ( 'IN_GAME' )) {
function get_npc_helpinfo($nlist,$tooltip=1)
{
global $plsinfo,$hplsinfo,$gamecfg,$iteminfo,$clubinfo;
global $posetips,$tactips,$poseinfo,$tacinfo;
//登记非功能性地点信息时合并隐藏地点
foreach($hplsinfo as $hgroup=>$hpls) $plsinfo += $hpls;
......@@ -57,6 +58,8 @@ function get_npc_helpinfo($nlist,$tooltip=1)
}
}
if(isset($snpc['pose']))$snpc['poseinfo'] = "<span tooltip=\"{$posetips[$snpc['pose']]}\">".$poseinfo[$snpc['pose']]."</span>";
if(isset($snpc['tactic']))$snpc['tacinfo'] = "<span tooltip=\"{$tactips[$snpc['tactic']]}\">".$tacinfo[$snpc['tactic']]."</span>";
if(isset($snpc['club'])) $snpc['club'] = $snpc['club']==99 ? '第一形态' : $clubinfo[$snpc['club']];
//格式化装备、道具名
foreach (Array('wep','arb','arh','ara','arf','art','itm0','itm1','itm2','itm3','itm4','itm5','itm6') as $value)
......
......@@ -81,7 +81,7 @@
if(!empty($sk_fix))
{
$wep_skill += $sk_fix;
$pa['bskilllog2'] .='<span class="yellow">「天威」使'.$pa['nm'].'的熟练度暂时增加了'.$sk_fix.'点!</span><br>';
$pa['bskilllog2'] .='<span class="yellow">「天威」使'.$pa['nm'].'的熟练度暂时增加了'.ceil($sk_fix).'点!</span><br>';
}
}
return $wep_skill;
......@@ -517,9 +517,12 @@
// 混沌混沌
$max_imp_times = $pa['weps'] == $nosta ? $pa['wepe'] : $pa['weps'];
$min_imp_times = $pa['weps'] == $nosta ? -$pa['wepe'] : -$pa['weps'];
do{
$pa['wep_imp_times'] = rand($min_imp_times,$max_imp_times);
}while(empty($pa['wep_imp_times']));
if(rand($min_imp_times,$max_imp_times) < 0)
{
do{
$pa['wep_imp_times'] = generate_ndnumbers($min_imp_times,$max_imp_times)[0];
}while(empty($pa['wep_imp_times']));
}
// 混沌伤害打满时 保存至成就
if($damage == $maxdmg) $pa['clbpara']['achvars']['full_chaosdmg'] = 1;
return $damage;
......
......@@ -394,8 +394,8 @@ function discover($schmode = 0,&$data=NULL)
//global $clbpara,$gamecfg;
global $now,$log,$mode,$command,$cmd;
global $db,$tablepre,$gamestate,$aidata,$pls_bgm;
global $event_obbs,$item_obbs,$enemy_obbs,$trap_min_obbs,$trap_max_obbs,$corpseprotect;
global $db,$tablepre,$gamestate,$aidata,$pls_bgm,$weather;
global $event_obbs,$item_obbs,$enemy_obbs,$trap_min_obbs,$trap_max_obbs,$corpse_obbs,$corpseprotect;
if(!isset($data))
{
......@@ -556,7 +556,7 @@ function discover($schmode = 0,&$data=NULL)
if($edata['hp'] <= 0)
{
//直接略过无效尸体
if($gamestate>=40||($edata['endtime']>($now-$corpseprotect))) continue;
if($gamestate>=40) continue;
$ret = false;
foreach(array('money','arhs','aras','arfs','arts','itms1','itms2','itms3','itms4','itms5','itms6') as $chkval)
{
......@@ -569,7 +569,9 @@ function discover($schmode = 0,&$data=NULL)
if(!$ret) continue;
//计算尸体发现率
$corpse_dice = rand(0,99);
if($corpse_dice < $corpse_obbs)
//击杀女主后,对女主尸体发现率大幅提升
if($edata['type'] == 14 && isset($data['clbpara']['achvars']['kill_n14'])) $corpse_dice = 100;
if($corpse_dice > $corpse_obbs)
{
$meetman_flag = 1;
break;
......@@ -581,10 +583,9 @@ function discover($schmode = 0,&$data=NULL)
//global $artk;
if ((!$edata['type'])&&($artk=='XX')&&(($edata['artk']!='XX')||($edata['art']!=$name))&&($gamestate<50)) continue;
if (($artk!='XX')&&($edata['artk']=='XX')&&($gamestate<50)) continue;
//灵子状态只能遭遇同为灵子状态的对象,非灵子状态对象无法发现灵子状态下的对象……但是尸体就没有这种考量了
if(($edata['pose'] == 8 || $data['pose'] == 8) && $data['pose'] != $edata['pose']) continue;
//计算活人发现率
//$hide_r = get_hide_r($weather,$pls,$edata['pose'],$edata['tactic'],$edata['club'],$edata['inf']);
//include_once GAME_ROOT.'./include/game/clubskills.func.php';
//$hide_r *= get_clubskill_bonus_hide($edata['club'],$edata['skills']);
$hide_r = get_hide_r_rev($data,$edata);
$enemy_dice = diceroll(99);
//echo "hide_r = {$hide_r} | find_obbs = {$find_obbs} | dice = {$enemy_dice}";
......@@ -680,7 +681,8 @@ function discover($schmode = 0,&$data=NULL)
}
else
{
$log .= '<span class="yellow">周围一个人都没有。</span><br>';
if($data['pose'] == 8) $log .= '<span class="yellow">周围没有同处于灵子状态的对象。</span><br>';
else $log .= '<span class="yellow">周围一个人都没有。</span><br>';
}
$mode = 'command';
return;
......
......@@ -734,6 +734,28 @@ function set_clbpara($para,$key,$value)
return $para;
}
// 正态分布
function generate_ndnumbers($min, $max, $count = 10)
{
$numbers = array();
$mu = ($min + $max) / 2; // 计算区间均值
$sigma = ($max - $min) / 6; // 计算区间标准差
for ($i = 0; $i < $count; $i++)
{
$u1 = rand() / getrandmax();
$u2 = rand() / getrandmax();
$z = sqrt(-2 * log($u1)) * cos(2 * pi() * $u2);
$x = $mu + $sigma * $z;
if ($x < $min || $x > $max) {
// 如果生成的随机数不在区间内,则舍弃并重新生成
$i--;
continue;
}
$numbers[] = ceil($x);
}
return $numbers;
}
function mgzdecode($data)
{
return gzinflate(substr($data,10,-8));
......
......@@ -149,7 +149,7 @@ function init_wep_states(&$pa,$pd,$ismeet=0)
function init_inf_states(&$pa,$pd,$ismeet=0)
{
global $infinfo,$poseinfo,$tacinfo,$fog;
global $infinfo,$poseinfo,$tacinfo,$fog,$posetips,$tactips;;
# 「天眼」技能判定
if(!check_skill_unlock('c6_godeyes',$pd)) $ismeet = 1;
if($fog && !$ismeet)
......@@ -163,8 +163,8 @@ function init_inf_states(&$pa,$pd,$ismeet=0)
}
$pa['nameinfo'] = $pa['name'];
$pa['lvlinfo'] = 'Lv. '.$pa['lvl'];
$pa['poseinfo'] = $poseinfo[$pa['pose']];
$pa['tacinfo'] = $tacinfo[$pa['tactic']];
$pa['poseinfo'] = "<span tooltip=\"{$posetips[$pa['pose']]}\">".$poseinfo[$pa['pose']]."</span>";
$pa['tacinfo'] = "<span tooltip=\"{$tactips[$pa['tactic']]}\">".$tacinfo[$pa['tactic']]."</span>";
//更新受伤状态
if($pa['inf'])
{
......
......@@ -28,7 +28,7 @@
<p><span class="lime">真职人 NPC简介</span></p>
此类NPC在开局对<span class="yellow">无防具的玩家有较大威胁</span>,这类NPC的特点是<span class="yellow">防御非常高</span>,且<span class="yellow">武器均带有“电击+冻气+带毒+火焰+音波”属性</span>,很容易导致玩家中异常状态。<br>如果防具很差,或没有属性防御也没钱买药剂,请不要贸然攻击它们,否则很可能导致自己中大量异常状态后难以恢复,苦不堪言。<br>
当然,击杀这些NPC后可以获取<span class="lime">极为优秀的防具</span>,在游戏中后期<span class="lime">击杀它们并拾取它们的防具保护自己</span>往往是玩家取胜的关键。<br>
这些NPC初始不会出现,但可通过合成手段,或在1禁以后,通过商店售卖的NPC解除钥匙召唤出来。<br>
这些NPC初始不会出现,但可通过合成手段,或通过商店售卖的NPC解除钥匙召唤出来。<br>
<br>
<!--{loop $ty3 $vkind $kind}-->
{template npcinfohelp}
......@@ -36,7 +36,7 @@
<br>
<p><span class="lime">全息幻象NPC、小兵NPC、种火NPC 简介</span></p>
此类NPC对玩家基本无威胁,是玩家<span class="yellow">最主要的熟练度、经验来源,也是最主要的击杀对象</span>。每个小兵NPC掉落金钱380元,是玩家<span class="lime">主要金钱来源</span><br>全息幻象掉落<span class="lime">更多的金钱</span>以及<span class="lime">各系优秀的武器或强化道具</span>,往往是<span class="yellow">拉开玩家差距、建立优势乃至取得最终胜利的关键</span><br>
其中,全息幻象NPC初始不会出现,但可通过合成手段,或在1禁以后,通过商店售卖的NPC解除钥匙召唤出来。<br>
其中,全息幻象NPC初始不会出现,但可通过通过商店售卖的钥匙碎片召唤出来。<br>
以下NPC将于开局时刷出:<br>
<br>
<!--{loop $ty4 $vkind $kind}-->
......
......@@ -124,7 +124,7 @@
<tr>
<td class="b2"><span>{lang pose}</span></td>
<td class="b3">
<span>
<span tooltip="{$posetips[$pose]}">
<select id="pose" name="pose" onchange="$('mode').value='special';$('command').value=$('pose').value;postCmd('gamecmd','command.php');return false;" <!--{if CURSCRIPT != 'game' || $mode != 'command'}-->disabled<!--{/if}-->>
<!--{loop $apose $key}-->
<option value="pose$key"<!--{if $pose == $key}-->selected<!--{/if}-->>$poseinfo[$key]
......@@ -140,7 +140,7 @@
<tr>
<td class="b2"><span>{lang tactic}</span></td>
<td class="b3">
<span>
<span tooltip="{$tactips[$tactic]}">
<select id="tactic" name="tactic" onchange="$('mode').value='special';$('command').value=$('tactic').value;postCmd('gamecmd','command.php');return false;" <!--{if CURSCRIPT != 'game' || $mode != 'command'}-->disabled<!--{/if}-->>
<!--{loop $atac $key}-->
<option value="tac$key"<!--{if $tactic == $key}-->selected<!--{/if}-->>$tacinfo[$key]
......
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