Commit 017671f5 authored by hisuinohoshi's avatar hisuinohoshi

Add sponsor(?) & findneut

update:{...}
新增了有钱真的可以为所欲为的场外援助系统;
新增了用于配送道具的快递员NPC;
新增了玩家与中立/友好NPC的互动功能与界面。暂时只会在遇到快递员取货时触发。偶像大师应该会用到这个功能;
新增了一个用于登记NPC死亡时会触发事件的函数check_kill_events();
为商店界面添加了tooltip支持;
为gambling表添加了字段'bnid';
修改了初始化npc、addnpc的部分逻辑,现在可以在编辑npc配置文件时定义社团参数等后添加的字段了。
修改了探索时遇敌的概率判定逻辑,可能可以改善目前尸体发现率过低的问题;
后台管理界面在编辑玩家/NPC时可以编辑社团相关参数了;
挪动了一些常用函数的位置;
天然呆修正;
parent 7a730329
This diff is collapsed.
......@@ -102,6 +102,20 @@ if((strpos($action,'corpse')===0 || strpos($action,'pacorpse')===0) && $gamestat
}
}
}
elseif((strpos($action,'neut')===0)){
$nid = str_replace('neut','',$action);
if($nid){
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$nid' AND hp>0");
if($db->num_rows($result)>0){
$edata = $db->fetch_array($result);
include_once GAME_ROOT.'./include/game/revcombat.func.php';
findneut($edata,1);
extract($edata,EXTR_PREFIX_ALL,'w');
init_battle(1);
$main = 'battle';
}
}
}
if($hp > 0 && $coldtimeon && $showcoldtimer && $rmcdtime){$log .= "行动冷却时间:<span id=\"timer\" class=\"yellow\">0.0</span>秒<script type=\"text/javascript\">demiSecTimerStarter($rmcdtime);</script><br>";}
if ($club==0)
......
......@@ -1684,6 +1684,73 @@ $anpcinfo = array
),
),
90 => array
(
'mode' => 2,
'num' => 1,
'pass' => 'bra',
'club' => 0,
'bid' => 0,
'inf' => '',
'rage' => 0,
'pose'=> 3,
'tactic' => 2,
'killnum' => 0,
'teamID' => '',
'teamPass' => '',
'gd' => 'f',
'pls' => 99,
'mhp' => 520,
'msp' => 200,
'att' => 80,
'def' => 233,
'lvl' => 23,
'skill' => 77,
'money' => 250,
'arb' => '黄色的冲锋衣',
'arbk' => 'DB',
'arbe' => 25,
'arbs' => 50,
'arh' => '黄色的骑行头盔',
'arhk' => 'DH',
'arhe' => 25,
'arhs' => 50,
'ara' => '智能手环',
'arak' => 'DA',
'arae' => 25,
'aras' => 50,
'arf' => '运动鞋',
'arfk' => 'DF',
'arfe' => 25,
'arfs' => 50,
'art' => '快递单',
'artk' => 'A',
'arte' => 1,
'arts' => 1,
'artsk' => 'z',
'itm4' => '锅?',
'itmk4' => 'Y',
'itme4' => 1,
'itms4' => 1,
'itm5' => '压缩饼干',
'itmk5' => 'HB',
'itme5' => 35,
'itms5' => 10,
'sub' => array
(
0 => array
(
'name' => '迷之搬运工',
'icon' => 10,
'wep' => '大喇叭',
'wepk' => 'WP',
'wepe' => 25,
'weps' => 75,
'wepsk' => 'w',
),
),
),
92 => array
(
'mode' => 2,
......
......@@ -48,9 +48,9 @@ $mixinfo = array
array('class' => 'wp', 'stuff' => array('☆法式长棍面包☆','水'),'result' => array('法式面包棍棒','WP',120,25,'NRz'),),
array('class' => 'wp', 'stuff' => array('棍棒','岩石','钉','毒药'),'result' => array('绽花毒藤','WKP',180,150,'Np'),),
array('class' => 'wp', 'stuff' => array('向日葵','月光碎片','铁链','超级重锤'),'result' => array('太极','WP',180,150,'Nwc'),),
array('class' => 'wp', 'stuff' => array('红宝石方块','制御棒','延展御柱','夜雀歌谱'),'result' => array('晨星链刃','WKP',827,260,'rdfc'),),
array('class' => 'wp', 'stuff' => array('岩石','火把','阔剑地雷'),'result' => array('阳炎之怒','WP',188,30,'du'),),
array('class' => 'wp', 'stuff' => array('阳炎之怒','雏人型','祝福宝石'),'result' => array('风滚草','WP',156,77,'rcd'),),
array('class' => 'wp', 'stuff' => array('红宝石方块','★制御棒★','『延展御柱』','夜雀歌谱'),'result' => array('晨星链刃','WKP',827,260,'rdfc'),),
array('class' => 'wp', 'stuff' => array('岩石','火把','★阔剑地雷★'),'result' => array('阳炎之怒','WP',188,30,'du'),),
array('class' => 'wp', 'stuff' => array('阳炎之怒','雏人形','『祝福宝石』'),'result' => array('风滚草','WP',156,77,'rcd'),),
array('class' => 'wp', 'stuff' => array('风滚草','晨星链刃','太极','海胆链球'),'result' => array('龙魂破','WKP',6600,2200,'ZrdfN'),),
array('class' => 'wg', 'stuff' => array('火把','红宝石方块','某种电子零件'),'result' => array('『红石电路』','X',1,1,''),),
......
......@@ -86,7 +86,7 @@ $typeinfo = Array(
89=>'残像回声',
90=>'各路党派',
91=>'各路党派',
92=>'种火'
92=>'种火',
);
$killmsginfo = Array(
0=>'',
......@@ -942,6 +942,7 @@ $iteminfo = Array(//注意顺序,AB必须在A的前面,以此类推
//'R' => '探测仪器',
'ss' => '歌词卡片',
'T' => '陷阱',
'U' => '扫雷设备',
'V'=> '技能书籍',
'VV'=> '技能书籍',
'WN' => '空手',#空手
......
......@@ -13,6 +13,7 @@ input {cursor: crosshair;}
.subtitle {font-family: "微软雅黑"; margin: 6px;color: #cceafa; width: 100%;font-size: 24px;font-weight:400;}
.headerlink{}
.small {font-size: 9pt}
.center-text {text-align: center;}
.ver a{font:bold 10pt "Viner Hand ITC","隶书" serif;color:#ff0000;}
.b1 {background-color:rgba(225, 124, 226, 0.6); *BACKGROUND: rgb(98,135,163); *filter:alpha(opacity=60); BORDER: #000 0px none; TEXT-ALIGN: center; COLOR: #fff; border-right: #111 1px solid; border-bottom: #111 1px solid;font:bold 10pt "微软雅黑" serif;}
.b2 {background-color:rgba(225, 124, 226, 0.6); *BACKGROUND: rgb(98,135,163); *filter:alpha(opacity=80); BORDER: #000 0px none; TEXT-ALIGN: center; COLOR: #fff; border-right: #111 1px solid;font:10pt "微软雅黑" serif;}
......@@ -99,6 +100,8 @@ table.admin td.tdtitle {
.evergreen{color:#98fb98;font: bold 10pt "微软雅黑" serif;line-height:16px}
.evergreen2{color:#98fb98;font:18pt "微软雅黑" serif;}
.lightgreen{color:#8AE234;font: bold 10pt "微软雅黑" serif;line-height:16px}
.magenta{color:#FF00FF;font: bold 10pt "微软雅黑" serif;line-height:16px}
.sienna{color:#EE7942;font: bold 10pt "微软雅黑" serif;line-height:16px}
.dmg {color:#ff0000;font: bold 10pt "微软雅黑" serif;}
.grey{color:#999; font: bold 10pt "微软雅黑" serif;line-height:16px}
.linen{color:rgb(200,192,184); font: bold 10pt "微软雅黑" serif;line-height:16px}
......
......@@ -101,6 +101,6 @@ CREATE TABLE bra_gambling (
bname char(15) NOT NULL default '',
wager int unsigned NOT NULL default '0',
odds decimal(8,4) unsigned NOT NULL default '0',
bnid smallint unsigned NOT NULL default '0',
PRIMARY KEY (gid)
) ENGINE=MyISAM;
\ No newline at end of file
......@@ -118,7 +118,8 @@ if($command == 'kill' || $command == 'live' || $command == 'del') {
}
}
} elseif($command == 'submitedit') {
$db->query("UPDATE {$tablepre}players SET gd='$gd',icon='$icon',club='$club',sNo='$sNo',hp='$hp',mhp='$mhp',sp='$sp',msp='$msp',att='$att',def='$def',pls='$pls',lvl='$lvl',exp='$exp',money='$money',bid='$bid',inf='$inf',rage='$rage',pose='$pose',tactic='$tactic',killnum='$killnum',wp='$wp',wk='$wk',wg='$wg',wc='$wc',wd='$wd',wf='$wf',teamID='$teamID',teamPass='$teamPass',wep='$wep',wepk='$wepk',wepe='$wepe',weps='$weps',wepsk='$wepsk',arb='$arb',arbk='$arbk',arbe='$arbe',arbs='$arbs',arbsk='$arbsk',arh='$arh',arhk='$arhk',arhe='$arhe',arhs='$arhs',arhsk='$arhsk',ara='$ara',arak='$arak',arae='$arae',aras='$aras',arask='$arask',arf='$arf',arfk='$arfk',arfe='$arfe',arfs='$arfs',arfsk='$arfsk',art='$art',artk='$artk',arte='$arte',arts='$arts',artsk='$artsk',itm0='$itm0',itmk0='$itmk0',itme0='$itme0',itms0='$itms0',itmsk0='$itmsk0',itm1='$itm1',itmk1='$itmk1',itme1='$itme1',itms1='$itms1',itmsk1='$itmsk1',itm2='$itm2',itmk2='$itmk2',itme2='$itme2',itms2='$itms2',itmsk2='$itmsk2',itm3='$itm3',itmk3='$itmk3',itme3='$itme3',itms3='$itms3',itmsk3='$itmsk3',itm4='$itm4',itmk4='$itmk4',itme4='$itme4',itms4='$itms4',itmsk4='$itmsk4',itm5='$itm5',itmk5='$itmk5',itme5='$itme5',itms5='$itms5',itmsk5='$itmsk5',itm6='$itm6',itmk6='$itmk6',itme6='$itme6',itms6='$itms6',itmsk6='$itmsk6' where pid='$pid'");
if(is_array($clbpara)) $clbpara = json_encode($clbpara);
$db->query("UPDATE {$tablepre}players SET gd='$gd',icon='$icon',club='$club',sNo='$sNo',hp='$hp',mhp='$mhp',sp='$sp',msp='$msp',att='$att',def='$def',pls='$pls',lvl='$lvl',exp='$exp',clbstatusa='$clbstatusa',clbstatusb='$clbstatusb',clbstatusc='$clbstatusc',clbstatusd='$clbstatusd',clbstatuse='$clbstatuse',clbpara='$clbpara',money='$money',bid='$bid',inf='$inf',rage='$rage',pose='$pose',tactic='$tactic',killnum='$killnum',wp='$wp',wk='$wk',wg='$wg',wc='$wc',wd='$wd',wf='$wf',teamID='$teamID',teamPass='$teamPass',wep='$wep',wepk='$wepk',wepe='$wepe',weps='$weps',wepsk='$wepsk',arb='$arb',arbk='$arbk',arbe='$arbe',arbs='$arbs',arbsk='$arbsk',arh='$arh',arhk='$arhk',arhe='$arhe',arhs='$arhs',arhsk='$arhsk',ara='$ara',arak='$arak',arae='$arae',aras='$aras',arask='$arask',arf='$arf',arfk='$arfk',arfe='$arfe',arfs='$arfs',arfsk='$arfsk',art='$art',artk='$artk',arte='$arte',arts='$arts',artsk='$artsk',itm0='$itm0',itmk0='$itmk0',itme0='$itme0',itms0='$itms0',itmsk0='$itmsk0',itm1='$itm1',itmk1='$itmk1',itme1='$itme1',itms1='$itms1',itmsk1='$itmsk1',itm2='$itm2',itmk2='$itmk2',itme2='$itme2',itms2='$itms2',itmsk2='$itmsk2',itm3='$itm3',itmk3='$itmk3',itme3='$itme3',itms3='$itms3',itmsk3='$itmsk3',itm4='$itm4',itmk4='$itmk4',itme4='$itme4',itms4='$itms4',itmsk4='$itmsk4',itm5='$itm5',itmk5='$itmk5',itme5='$itme5',itms5='$itms5',itmsk5='$itmsk5',itm6='$itm6',itmk6='$itmk6',itme6='$itme6',itms6='$itms6',itmsk6='$itmsk6' where pid='$pid'");
if(!$db->affected_rows()){
$cmd_info = "无法修改角色 $name";
} else {
......
......@@ -121,7 +121,8 @@ if($command == 'kill' || $command == 'live' || $command == 'del') {
}
}
} elseif($command == 'submitedit') {
$db->query("UPDATE {$tablepre}players SET gd='$gd',icon='$icon',club='$club',sNo='$sNo',hp='$hp',mhp='$mhp',sp='$sp',msp='$msp',ss='$ss',mss='$mss',att='$att',def='$def',pls='$pls',achievement='$achievement',exp='$exp',money='$money',bid='$bid',inf='$inf',rage='$rage',pose='$pose',tactic='$tactic',killnum='$killnum',wp='$wp',wk='$wk',wg='$wg',wc='$wc',wd='$wd',wf='$wf',teamID='$teamID',achievement='$achievement',wep='$wep',wepk='$wepk',wepe='$wepe',weps='$weps',wepsk='$wepsk',arb='$arb',arbk='$arbk',arbe='$arbe',arbs='$arbs',arbsk='$arbsk',arh='$arh',arhk='$arhk',arhe='$arhe',arhs='$arhs',arhsk='$arhsk',ara='$ara',arak='$arak',arae='$arae',aras='$aras',arask='$arask',arf='$arf',arfk='$arfk',arfe='$arfe',arfs='$arfs',arfsk='$arfsk',art='$art',artk='$artk',arte='$arte',arts='$arts',artsk='$artsk',itm0='$itm0',itmk0='$itmk0',itme0='$itme0',itms0='$itms0',itmsk0='$itmsk0',itm1='$itm1',itmk1='$itmk1',itme1='$itme1',itms1='$itms1',itmsk1='$itmsk1',itm2='$itm2',itmk2='$itmk2',itme2='$itme2',itms2='$itms2',itmsk2='$itmsk2',itm3='$itm3',itmk3='$itmk3',itme3='$itme3',itms3='$itms3',itmsk3='$itmsk3',itm4='$itm4',itmk4='$itmk4',itme4='$itme4',itms4='$itms4',itmsk4='$itmsk4',itm5='$itm5',itmk5='$itmk5',itme5='$itme5',itms5='$itms5',itmsk5='$itmsk5',itm6='$itm6',itmk6='$itmk6',itme6='$itme6',itms6='$itms6',itmsk6='$itmsk6' where pid='$pid'");
if(is_array($clbpara)) $clbpara = json_encode($clbpara);
$db->query("UPDATE {$tablepre}players SET gd='$gd',icon='$icon',club='$club',sNo='$sNo',hp='$hp',mhp='$mhp',sp='$sp',msp='$msp',ss='$ss',mss='$mss',att='$att',def='$def',pls='$pls',achievement='$achievement',exp='$exp',clbstatusa='$clbstatusa',clbstatusb='$clbstatusb',clbstatusc='$clbstatusc',clbstatusd='$clbstatusd',clbstatuse='$clbstatuse',clbpara='$clbpara',money='$money',bid='$bid',inf='$inf',rage='$rage',pose='$pose',tactic='$tactic',killnum='$killnum',wp='$wp',wk='$wk',wg='$wg',wc='$wc',wd='$wd',wf='$wf',teamID='$teamID',achievement='$achievement',wep='$wep',wepk='$wepk',wepe='$wepe',weps='$weps',wepsk='$wepsk',arb='$arb',arbk='$arbk',arbe='$arbe',arbs='$arbs',arbsk='$arbsk',arh='$arh',arhk='$arhk',arhe='$arhe',arhs='$arhs',arhsk='$arhsk',ara='$ara',arak='$arak',arae='$arae',aras='$aras',arask='$arask',arf='$arf',arfk='$arfk',arfe='$arfe',arfs='$arfs',arfsk='$arfsk',art='$art',artk='$artk',arte='$arte',arts='$arts',artsk='$artsk',itm0='$itm0',itmk0='$itmk0',itme0='$itme0',itms0='$itms0',itmsk0='$itmsk0',itm1='$itm1',itmk1='$itmk1',itme1='$itme1',itms1='$itms1',itmsk1='$itmsk1',itm2='$itm2',itmk2='$itmk2',itme2='$itme2',itms2='$itms2',itmsk2='$itmsk2',itm3='$itm3',itmk3='$itmk3',itme3='$itme3',itms3='$itms3',itmsk3='$itmsk3',itm4='$itm4',itmk4='$itmk4',itme4='$itme4',itms4='$itms4',itmsk4='$itmsk4',itm5='$itm5',itmk5='$itmk5',itme5='$itme5',itms5='$itms5',itmsk5='$itmsk5',itm6='$itm6',itmk6='$itmk6',itme6='$itme6',itms6='$itms6',itmsk6='$itmsk6' where pid='$pid'");
if(!$db->affected_rows()){
$cmd_info = "无法修改角色 $name";
} else {
......
......@@ -4,143 +4,6 @@ if(!defined('IN_GAME')) {
exit('Access Denied');
}
//格式化储存player表 可能也是四面的遗产
function update_db_player_structure($type=0)
{
global $db,$tablepre,$checkstr;
$db_player_structure = $db_player_structure_types = $tpldata = Array();
$dps_need_update = 0;//判定是否需要更新玩家字段
$dps_file = GAME_ROOT.'./gamedata/bak/db_player_structure.config.php';
$sql_file = GAME_ROOT.'./gamedata/sql/players.sql';
if(!file_exists($dps_file) || filemtime($sql_file) > filemtime($dps_file)){
$dps_need_update = 1;
}
if($dps_need_update){//如果要更新,直接新建一个表,不需要依赖已有的players表
$sql = file_get_contents($sql_file);
$sql = str_replace("\r", "\n", str_replace(' bra_', ' '.$tablepre.'tmp_', $sql));
$db->queries($sql);
$result = $db->query("DESCRIBE {$tablepre}tmp_players");
while ($sttdata = $db->fetch_array($result))
{
global ${$sttdata['Field']};
$db_player_structure[] = $sttdata['Field'];
$db_player_structure_types[$sttdata['Field']] = $sttdata['Type'];
//array_push($db_player_structure,$pdata['Field']);
}
$dps_cont = str_replace('?>','',str_replace('<?','<?php',$checkstr));
$dps_cont .= '$db_player_structure = ' . var_export($db_player_structure,1).";\r\n".'$db_player_structure_types = ' . var_export($db_player_structure_types,1).";\r\n?>";
writeover($dps_file, $dps_cont);
chmod($dps_file,0777);
}else{//若不需要更新,则直接读文件就好
include $dps_file ;
}
return $type ? $db_player_structure_types : $db_player_structure;
}
//返回一个只有数据库合法字段键名的pdata数组
function player_format_with_db_structure($data){
$ndata=Array();
$db_player_structure = update_db_player_structure();
foreach ($db_player_structure as $key){
if (isset($data[$key])) {
$ndata[$key]=$data[$key];
}
}
return $ndata;
}
//将sk转为数组格式 只会转换登记过的属性
function get_itmsk_array($sk_value)
{
global $itemspkinfo;
$ret = Array();
$i = 0;
while ($i < strlen($sk_value))
{
$sub = substr($sk_value,$i,1);
$i++;
if(!empty($sub) && array_key_exists($sub,$itemspkinfo)) array_push($ret,$sub);
}
return $ret;
}
//还原itmsk为字符串 $max_length:字符串长度上限
function get_itmsk_strlen($sk_value,$max_length=5)
{
global $itemspkinfo;
$ret = ''; $sk_count = 0;
foreach($sk_value as $sk)
{
if(array_key_exists($sk,$itemspkinfo))
{
$ret.=$sk;
$sk_count+=strlen($sk);
}
if($sk_count>=$max_length) break;
}
return $ret;
}
//为显示在主界面、尸体发现界面、游戏帮助界面的道具名、道具类、道具属性添加额外描述
//传入$n=道具名/类/属性;$t='m'(使用名称数组)/'k'(类别)/'sk'(属性);$short=1(传入的$n为数组情况下才有效,缩写属性);$class(如果传入的$n没有匹配的样式,则应用该样式)
function parse_itm_desc($n,$t,$short=0,$c=NULL)
{
global $iteminfo,$itemspkinfo;
global $iteminfo_tooltip,$itemkinfo_tooltip,$itemspkinfo_tooltip,$iteminfo_tooltip_desc;
$s = "<span "; $p1 = ''; $p2 = ''; $ret = '';
switch($t)
{
//处理类别
case $t=='k':
if(isset($itemkinfo_tooltip[$n]['title'])) $p1 = "title=\"".$itemkinfo_tooltip[$n]['title']."\"";
if(isset($itemkinfo_tooltip[$n]['class'])) $p2 = "class=\"".$itemkinfo_tooltip[$n]['class']."\"";
$n = $iteminfo[$n];
break;
//处理属性
case $t=='sk':
//如果传入的n为数组,且开启缩写模式,则输出一段缩写
if($short && is_array($n))
{
$p1 = "title=\"";
$sk1 = $itemspkinfo[current($n)]; $sk2 = $itemspkinfo[end($n)]; $skn = '';
foreach($n as $sk_value)
{
if(!empty($skn)) $skn .='+'.$itemspkinfo[$sk_value];
else $skn = $itemspkinfo[$sk_value];
}
$p1.=$skn; $n = $sk1.'+...+'.$sk2; $p2 = "\"";
}
else
{
if(isset($itemspkinfo_tooltip[$n]['title'])) $p1 = "title=\"".$itemspkinfo_tooltip[$n]['title']."\"";
if(isset($itemspkinfo_tooltip[$n]['class'])) $p2 = "class=\"".$itemspkinfo_tooltip[$n]['class']."\"";
$n = $itemspkinfo[$n];
}
break;
//处理名字
case $t=='m':
$filter_n = preg_replace('/锋利的|电气|毒性|钉|\[.*\]|-改/', '', $n);
if(isset($iteminfo_tooltip[$filter_n]))
{
if(is_array($iteminfo_tooltip[$filter_n]))
{
if(isset($iteminfo_tooltip[$filter_n]['title'])) $p1 = "title=\"".$iteminfo_tooltip[$filter_n]['title']."\"";
if(isset($iteminfo_tooltip[$filter_n]['class'])) $p2 = "class=\"".$iteminfo_tooltip[$filter_n]['class']."\"";
}
elseif(isset($iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]))
{ //使用可复用描述 越来越离谱了
if(isset($iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['title'])) $p1 = "title=\"".$iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['title']."\"";
if(isset($iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['class'])) $p2 = "class=\"".$iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['class']."\"";
}
}
break;
}
//传入了样式 且道具没有与预设匹配的样式 则使用传入的样式
if(isset($c) && !$p2) $p2 = "class=\"".$c."\"";
$p3 = " >"; $e = "</span>";
$ret = $s.$p1.$p2.$p3.$n.$e;
return $ret;
}
function init_playerdata(){
global $lvl,$baseexp,$exp,$gd,$icon,$arbe,$arhe,$arae,$arfe,$weather,$fog,$weps,$arbs,$log,$upexp,$lvlupexp,$iconImg,$ardef;
......@@ -552,7 +415,19 @@ function w_save2(&$data){
//$db->query("UPDATE {$tablepre}players SET name='$w_name',pass='$w_pass',type='$w_type',endtime='$w_endtime',gd='$w_gd',sNo='$w_sNo',icon='$w_icon',club='$w_club',hp='$w_hp',mhp='$w_mhp',sp='$w_sp',msp='$w_msp',att='$w_att',def='$w_def',pls='$w_pls',lvl='$w_lvl',exp='$w_exp',money='$w_money',bid='$w_bid',inf='$w_inf',rage='$w_rage',pose='$w_pose',tactic='$w_tactic',state='$w_state',killnum='$w_killnum',wp='$w_wp',wk='$w_wk',wg='$w_wg',wc='$w_wc',wd='$w_wd',wf='$w_wf',teamID='$w_teamID',teamPass='$w_teamPass',wep='$w_wep',wepk='$w_wepk',wepe='$w_wepe',weps='$w_weps',wepsk='$w_wepsk',arb='$w_arb',arbk='$w_arbk',arbe='$w_arbe',arbs='$w_arbs',arbsk='$w_arbsk',arh='$w_arh',arhk='$w_arhk',arhe='$w_arhe',arhs='$w_arhs',arhsk='$w_arhsk',ara='$w_ara',arak='$w_arak',arae='$w_arae',aras='$w_aras',arask='$w_arask',arf='$w_arf',arfk='$w_arfk',arfe='$w_arfe',arfs='$w_arfs',arfsk='$w_arfsk',art='$w_art',artk='$w_artk',arte='$w_arte',arts='$w_arts',artsk='$w_artsk',itm0='$w_itm0',itmk0='$w_itmk0',itme0='$w_itme0',itms0='$w_itms0',itmsk0='$w_itmsk0',itm1='$w_itm1',itmk1='$w_itmk1',itme1='$w_itme1',itms1='$w_itms1',itmsk1='$w_itmsk1',itm2='$w_itm2',itmk2='$w_itmk2',itme2='$w_itme2',itms2='$w_itms2',itmsk2='$w_itmsk2',itm3='$w_itm3',itmk3='$w_itmk3',itme3='$w_itme3',itms3='$w_itms3',itmsk3='$w_itmsk3',itm4='$w_itm4',itmk4='$w_itmk4',itme4='$w_itme4',itms4='$w_itms4',itmsk4='$w_itmsk4',itm5='$w_itm5',itmk5='$w_itmk5',itme5='$w_itme5',itms5='$w_itms5',itmsk5='$w_itmsk5',itm6='$w_itm6',itmk6='$w_itmk6',itme6='$w_itme6',itms6='$w_itms6',itmsk6='$w_itmsk6' WHERE pid='$w_pid'");
}
return;
}
//销毁尸体
function destory_corpse(&$edata)
{
if($edata)
{
$edata['state'] = 16; $edata['hp'] = 0; $edata['money'] = 0; $edata['pls'] = 99;
$edata['weps'] = 0;$edata['arbs'] = 0;$edata['arhs'] = 0;$edata['aras'] = 0;$edata['arfs'] = 0;$edata['arts'] = 0;
$edata['itms0'] = 0;$edata['itms1'] = 0;$edata['itms2'] = 0;$edata['itms3'] = 0;$edata['itms4'] = 0;$edata['itms5'] = 0;$edata['itms6'] = 0;
player_save($edata);
}
return;
}
......
......@@ -227,6 +227,7 @@ function combat($active = 1, $wep_kind = '') {
include_once GAME_ROOT . './include/state.func.php';
$killmsg = kill ( $wep_kind, $w_name, $w_type, $w_pid, $wep_temp );
check_kill_events($pid,$w_pid);
$log .= npc_chat ( $w_type,$w_name, 'death' );
include_once GAME_ROOT.'./include/game/achievement.func.php';
......
......@@ -996,20 +996,6 @@
/********一些可复用函数 也许可以挪到其他地方********/
//销毁尸体
function destory_corpse(&$edata)
{
if($edata && $edata['hp']<=0)
{
//$edata['state'] = 16;
$edata['money'] = 0;
$edata['weps'] = 0;$edata['arbs'] = 0;$edata['arhs'] = 0;$edata['aras'] = 0;$edata['arfs'] = 0;$edata['arts'] = 0;
$edata['itms0'] = 0;$edata['itms1'] = 0;$edata['itms2'] = 0;$edata['itms3'] = 0;$edata['itms4'] = 0;$edata['itms5'] = 0;$edata['itms6'] = 0;
player_save($edata);
}
return;
}
//打包尸体 ……
function pack_corpse(&$edata)
{
......
......@@ -11,6 +11,53 @@
但是只要提供了正确的pa和pd当然也可以给玩家使用。 //哈哈!不行!玩家数据存不回去!傻了吧! //搞定了! //没搞定啊!!不能100%保证不出怪问题,所以还是不要给玩家使用
本质上就是一套整理过的原版战斗函数。*/
//发现中立NPC $kind 0=中立单位 1=友军
function findneut(&$edata,$kind=0)
{
global $log,$action,$mode,$name,$main,$cmd,$battle_title,$pid,$db,$tablepre;
global $w_type,$w_name,$w_gd,$w_sNo,$w_icon,$w_hp,$w_mhp,$w_sp,$w_msp,$w_rage,$w_wep,$w_wepk,$w_wepe,$w_lvl,$w_pose,$w_tactic,$w_inf;
$battle_title = $kind ? '发现朋友' : '发现敌人?';
extract($edata,EXTR_PREFIX_ALL,'w');
init_battle(1);
if(!is_array($edata['clbpara'])) $edata['clbpara']=get_clbpara($edata['clbpara']);
$log .= "你发现了<span class=\"yellow\">$w_name</span>!<br>";
if(!$kind) $log .= "对方看起来没有敌意。<br>";
//TODO:把这一段挪到一个独立函数里
if($edata['clbpara']['post'] == $pid)
{
$log.="对方一看见你,便猛地朝你扑了过来!<br>
<br><span class='sienna'>“老板!有你的快递喔!”</span><br>
<br>你被这突然袭击吓了一跳!<br>
但对方只是从身上摸出了一个包裹样的东西扔给了你。然后又急匆匆地转身离开了。<br>
<br>……这是在搞啥……?<br><br>";
$action='';
global $itm0,$itmk0,$itme0,$itms0,$itmsk0;
$iid=$edata['clbpara']['postid'];
$itm0=$edata['itm'.$iid];$itmk0=$edata['itmk'.$iid];$itmsk0=$edata['itmsk'.$iid];
$itme0=$edata['itme'.$iid];$itms0=$edata['itms'.$iid];
//发一条news 表示快递已送达
$sponsorid = $edata['clbpara']['sponsor'];
$result = $db->query("SELECT * FROM {$tablepre}gambling WHERE uid = '$sponsorid'");
$sordata = $db->fetch_array($result);
addnews($now,'gpost_success',$sordata['uname'],$itm0,$name);
//再见了~快递员!
unset($edata['clbpara']['post']);unset($edata['clbpara']['postid']);unset($edata['clbpara']['sponsor']);
destory_corpse($edata);
//解除快递锁
$db->query("UPDATE {$tablepre}gambling SET bnid=0 WHERE uid='$sponsorid'");
}
include template('findneut');
$cmd = ob_get_contents();
ob_clean();
$main = 'battle';
return;
}
//战斗准备流程:通过传入的战斗双方ID初始化
function rev_combat_prepare($nid,$eid)
{
......
......@@ -363,8 +363,6 @@ function discover($schmode = 0) {
combat(0);
return;
}
}
$trap_dice=rand(0,99);//随机数,开始判断是否踩陷阱
......@@ -459,15 +457,12 @@ function discover($schmode = 0) {
// }
// }
include_once GAME_ROOT.'./include/game/attr.func.php';
$mode_dice = rand(0,99);
if($mode_dice < $schmode) {
if($mode_dice < $schmode)
{
global $pid,$corpse_obbs,$teamID,$fog,$bid,$gamestate;
// if($gamestate < 40) {
// $result = $db->query("SELECT * FROM {$tablepre}players WHERE pls='$pls' AND pid!='$pid' AND pid!='$bid'");
// } else {
// $result = $db->query("SELECT * FROM {$tablepre}players WHERE pls='$pls' AND pid!='$pid'");
// }
global $clbpara,$clbstatusa,$clbstatusb,$clbstatusc,$clbstatusd,$clbstatuse;
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pls='$pls' AND pid!='$pid'");
if(!$db->num_rows($result)){
$log .= '<span class="yellow">周围一个人都没有。</span><br>';
......@@ -482,81 +477,123 @@ function discover($schmode = 0) {
$find_r = get_find_r($weather,$pls,$pose,$tactic,$club,$inf);
$find_obbs = $enemy_obbs + $find_r;
foreach($enemyarray as $enum){
//移除了重复调用discover()的设定,尝试用一种正常一点的办法确保敌人/尸体发现率符合基础设定值,不然现在的尸体确实太难摸了。
//现在触发遇敌事件只会返回三种结果:1、发现尸体;2、发现敌人、3、敌人隐藏起来;所以实际的尸体发现率=$enemyrate*$corpse_obbs
$meetman_flag = 0;
foreach($enemyarray as $enum)
{
$db->data_seek($result, $enum);
$edata = $db->fetch_array($result);
if(!$edata['type'] || $gamestate < 50){
if($edata['hp'] > 0) {
global $art,$artk,$name;
if ((!$edata['type'])&&($artk=='XX')&&(($edata['artk']!='XX')||($edata['art']!=$name))&&($gamestate<50)){
continue;
if(!$edata['type'] || $gamestate < 50)
{
if($edata['hp'] <= 0)
{
//直接略过无效尸体
if($gamestate>=40||($edata['endtime']>($now-$corpseprotect))) continue;
$ret = false;
foreach(array('money','arhs','aras','arfs','arts','itms1','itms2','itms3','itms4','itms5','itms6') as $chkval)
{
if($edata[$chkval])
{
$ret = true;
break;
}
}
if (($artk!='XX')&&($edata['artk']=='XX')&&($gamestate<50)){
continue;
if(!$ret) continue;
//计算尸体发现率
$corpse_dice = rand(0,99);
if($corpse_dice < $corpse_obbs)
{
$meetman_flag = 1;
break;
}
}
else
{
//直接略过决斗者
if ((!$edata['type'])&&($artk=='XX')&&(($edata['artk']!='XX')||($edata['art']!=$name))&&($gamestate<50)) continue;
if (($artk!='XX')&&($edata['artk']=='XX')&&($gamestate<50)) 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']);
$enemy_dice = rand(0,99);
if($enemy_dice < ($find_obbs - $hide_r)) {
if($teamID&&(!$fog)&&($gamestate<40)&&($teamID == $edata['teamID'])){
$bid = $edata['pid'];
$action = 'team'.$edata['pid'];
include_once GAME_ROOT.'./include/game/battle.func.php';
findteam($edata);
return;
} else {
$active_r = get_active_r($weather,$pls,$pose,$tactic,$club,$inf,$edata['pose']);
include_once GAME_ROOT.'./include/game/clubskills.func.php';
$active_r *= get_clubskill_bonus_active($club,$skills,$edata['club'],$edata['skills']);
if ($active_r>96) $active_r=96;
$bid = $edata['pid'];
$active_dice = rand(0,99);
if($active_dice < $active_r) {
$action = 'enemy'.$edata['pid'];
include_once GAME_ROOT.'./include/game/battle.func.php';
findenemy($edata);
return;
} else {
if (CURSCRIPT == 'botservice')
{
echo "passive_battle=1\n";
echo "passive_w_name={$edata['name']}\n";
echo "passive_w_type={$edata['type']}\n";
echo "passive_w_sNo={$edata['sNo']}\n";
}
include_once GAME_ROOT.'./include/game/combat.func.php';
combat(0);
return;
}
}
}else{
$hideflag = true;
}
} else {
$corpse_dice = rand(0,99);
if($corpse_dice < $corpse_obbs) {
if($gamestate <40 && $edata['endtime'] < $now - $corpseprotect && (($edata['weps'] && $edata['wepe'])||($edata['arbs'] && $edata['arbe'])||$edata['arhs']||$edata['aras']||$edata['arfs']||$edata['arts']||$edata['itms0']||$edata['itms1']||$edata['itms2']||$edata['itms3']||$edata['itms4']||$edata['itms5']||$edata['money'])){
$bid = $edata['pid'];
$action = 'corpse'.$edata['pid'];
include_once GAME_ROOT.'./include/game/battle.func.php';
findcorpse($edata);
return;
} else {
//这看上去是个bug…… 会导致地图上最后一个兵很难摸到……
//改成discover(100)应该就能解决问题…… 但修复了可能导致平衡性问题…… 所以暂时留在这……
discover(50);
return;
$meetman_flag = $enemy_dice<($find_obbs - $hide_r) ? 1 : -1;
break;
}
}
}
if($meetman_flag>0)
{
if($edata['hp'] > 0)
{
if(isset($edata['clbpara'])) $edata['clbpara']=get_clbpara($edata['clbpara']);
//发现队友
if($teamID&&(!$fog)&&($gamestate<40)&&($teamID == $edata['teamID']))
{
$bid = $edata['pid'];
$action = 'team'.$edata['pid'];
include_once GAME_ROOT.'./include/game/battle.func.php';
findteam($edata);
return;
}
//发现中立NPC或友军 TODO:把这里条件判断挪到一个函数里
elseif($edata['clbpara']['post'] == $pid)
{
$bid = $edata['pid'];
$action = 'neut'.$edata['pid'];
include_once GAME_ROOT.'./include/game/revcombat.func.php';
findneut($edata,1);
return;
}
//发现敌人
else
{
$active_r = get_active_r($weather,$pls,$pose,$tactic,$club,$inf,$edata['pose']);
include_once GAME_ROOT.'./include/game/clubskills.func.php';
$active_r *= get_clubskill_bonus_active($club,$skills,$edata['club'],$edata['skills']);
if ($active_r>96) $active_r=96;
$bid = $edata['pid'];
$active_dice = rand(0,99);
//先制
if($active_dice < $active_r)
{
$action = 'enemy'.$edata['pid'];
include_once GAME_ROOT.'./include/game/battle.func.php';
findenemy($edata);
return;
}
//挨打
else
{
if (CURSCRIPT == 'botservice')
{
echo "passive_battle=1\n";
echo "passive_w_name={$edata['name']}\n";
echo "passive_w_type={$edata['type']}\n";
echo "passive_w_sNo={$edata['sNo']}\n";
}
include_once GAME_ROOT.'./include/game/combat.func.php';
combat(0);
return;
}
}
}
else
{
$bid = $edata['pid'];
$action = 'corpse'.$edata['pid'];
include_once GAME_ROOT.'./include/game/battle.func.php';
findcorpse($edata);
return;
}
}
if($hideflag == true){
elseif($meetman_flag < 0)
{
$log .= '似乎有人隐藏着……<br>';
}else{
}
else
{
$log .= '<span class="yellow">周围一个人都没有。</span><br>';
}
$mode = 'command';
......@@ -566,11 +603,6 @@ function discover($schmode = 0) {
$find_obbs = $item_obbs + $find_r;
$item_dice = rand(0,99);
if($item_dice < $find_obbs) {
//$mapfile = GAME_ROOT."./gamedata/mapitem/{$pls}mapitem.php";
//$mapitem = openfile($mapfile);
//$itemnum = sizeof($mapitem) - 1;
// $result = $db->query("SELECT * FROM {$tablepre}mapitem WHERE map='$pls'");
// $itemnum = $db->num_rows($result);
$result = $db->query("SELECT * FROM {$tablepre}mapitem WHERE pls = '$pls'");
$itemnum = $db->num_rows($result);
if($itemnum <= 0){
......@@ -589,10 +621,6 @@ function discover($schmode = 0) {
$itmsk0=$mi['itmsk'];
$iid=$mi['iid'];
$db->query("DELETE FROM {$tablepre}mapitem WHERE iid='$iid'");
//list($itm0,$itmk0,$itme0,$itms0,$itmsk0) = explode(',', $mapitem[$itemno]);
//array_splice($mapitem,$itemno,1);
//writeover($mapfile,implode('', $mapitem),'wb');
//unset($mapitem);
if($itms0){
include_once GAME_ROOT.'./include/game/itemmain.func.php';
......
......@@ -475,12 +475,13 @@ function press_bomb(){
return;
}
function shoplist($sn) {
function shoplist($sn,$getlist=NULL) {
global $gamecfg,$mode,$itemdata,$areanum,$areaadd,$iteminfo,$itemspkinfo,$club;
global $db,$tablepre;
$arean = floor($areanum / $areaadd);
$result=$db->query("SELECT * FROM {$tablepre}shopitem WHERE kind = '$sn' AND area <= '$arean' AND num > '0' AND price > '0' ORDER BY sid");
$shopnum = $db->num_rows($result);
$itemdata = Array();
for($i=0;$i< $shopnum;$i++){
$itemlist = $db->fetch_array($result);
$itemdata[$i]['sid']=$itemlist['sid'];
......@@ -489,26 +490,38 @@ function shoplist($sn) {
$itemdata[$i]['price']= $club == 11 ? round($itemlist['price']*0.75) : $itemlist['price'];
$itemdata[$i]['area']=$itemlist['area'];
$itemdata[$i]['item']=$itemlist['item'];
$itemdata[$i]['item_words']= parse_itm_desc($itemdata[$i]['item'],'m');
$itemdata[$i]['itme']=$itemlist['itme'];
$itemdata[$i]['itms']=$itemlist['itms'];
//list($sid,$kind,$num,$price,$area,$item,$itmk,$itme,$itms,$itmsk)=explode(',',$itemlist);
foreach($iteminfo as $info_key => $info_value){
if(strpos($itemlist['itmk'],$info_key)===0){
$itemdata[$i]['itmk_words'] = $info_value;
if(isset($getlist)) $itemdata[$i]['itmk'] = $info_value;
$itemdata[$i]['itmk_words'] = parse_itm_desc($info_key,'k');
break;
}
}
$itemdata[$i]['itmsk_words'] = '';
if($itemlist['itmsk'] && ! is_numeric($itemlist['itmsk'])){
for ($j = 0; $j < strlen($itemlist['itmsk']); $j++) {
$sub = substr($itemlist['itmsk'],$j,1);
if(!empty($sub)){
$itemdata[$i]['itmsk_words'] .= $itemspkinfo[$sub];
if(!isset($getlist))
{
$tmp_sk = get_itmsk_array($itemlist['itmsk']);
foreach($tmp_sk as $sk) $itemdata[$i]['itmsk_words'].= parse_itm_desc($sk,'sk');
}
else
{
for ($j = 0; $j < strlen($itemlist['itmsk']); $j++) {
$sub = substr($itemlist['itmsk'],$j,1);
if(!empty($sub) && isset($itemspkinfo[$sub])){
$itemdata[$i]['itmsk_words'] .= $itemspkinfo[$sub];
}
}
}
}
//$itemdata[$i] = array('sid' => $sid, 'kind' => $kind,'num' => $num, 'price' => $price, 'area' => $area, 'item' => $item,'itmk_words' => $itmk_words,'itme' => $itme, 'itms' => $itms,'itmsk_words' => $itmsk_words);
}
if(isset($getlist)) return $itemdata;
$mode = 'shop';
......
......@@ -492,10 +492,161 @@ function putmicrotime($t_s,$t_e,$file,$info)
writeover( $file.'.txt',"$info ;执行时间:$mtime 毫秒 \n",'ab');
}
//格式化储存player表 可能也是四面的遗产
function update_db_player_structure($type=0)
{
global $db,$tablepre,$checkstr;
$db_player_structure = $db_player_structure_types = $tpldata = Array();
$dps_need_update = 0;//判定是否需要更新玩家字段
$dps_file = GAME_ROOT.'./gamedata/bak/db_player_structure.config.php';
$sql_file = GAME_ROOT.'./gamedata/sql/players.sql';
if(!file_exists($dps_file) || filemtime($sql_file) > filemtime($dps_file)){
$dps_need_update = 1;
}
if($dps_need_update){//如果要更新,直接新建一个表,不需要依赖已有的players表
$sql = file_get_contents($sql_file);
$sql = str_replace("\r", "\n", str_replace(' bra_', ' '.$tablepre.'tmp_', $sql));
$db->queries($sql);
$result = $db->query("DESCRIBE {$tablepre}tmp_players");
while ($sttdata = $db->fetch_array($result))
{
global ${$sttdata['Field']};
$db_player_structure[] = $sttdata['Field'];
$db_player_structure_types[$sttdata['Field']] = $sttdata['Type'];
//array_push($db_player_structure,$pdata['Field']);
}
$dps_cont = str_replace('?>','',str_replace('<?','<?php',$checkstr));
$dps_cont .= '$db_player_structure = ' . var_export($db_player_structure,1).";\r\n".'$db_player_structure_types = ' . var_export($db_player_structure_types,1).";\r\n?>";
writeover($dps_file, $dps_cont);
chmod($dps_file,0777);
}else{//若不需要更新,则直接读文件就好
include $dps_file ;
}
return $type ? $db_player_structure_types : $db_player_structure;
}
//返回一个只有数据库合法字段键名的pdata数组
function player_format_with_db_structure($data){
$ndata=Array();
$db_player_structure = update_db_player_structure();
foreach ($db_player_structure as $key){
if (isset($data[$key]))
{
if(is_array($data[$key])) $data[$key]=json_encode($data[$key]);
$ndata[$key]=$data[$key];
}
}
return $ndata;
}
//为显示在主界面、尸体发现界面、游戏帮助界面的道具名、道具类、道具属性添加额外描述
//传入$n=道具名/类/属性;$t='m'(使用名称数组)/'k'(类别)/'sk'(属性);$short=1(传入的$n为数组情况下才有效,缩写属性);$class(如果传入的$n没有匹配的样式,则应用该样式)
function parse_itm_desc($n,$t,$short=0,$c=NULL)
{
global $iteminfo,$itemspkinfo;
global $iteminfo_tooltip,$itemkinfo_tooltip,$itemspkinfo_tooltip,$iteminfo_tooltip_desc;
$s = "<span "; $p1 = ''; $p2 = ''; $ret = '';
switch($t)
{
//处理类别
case $t=='k':
if(isset($itemkinfo_tooltip[$n]['title'])) $p1 = "title=\"".$itemkinfo_tooltip[$n]['title']."\"";
if(isset($itemkinfo_tooltip[$n]['class'])) $p2 = "class=\"".$itemkinfo_tooltip[$n]['class']."\"";
$n = $iteminfo[$n];
break;
//处理属性
case $t=='sk':
//如果传入的n为数组,且开启缩写模式,则输出一段缩写
if($short && is_array($n))
{
$p1 = "title=\"";
$sk1 = $itemspkinfo[current($n)]; $sk2 = $itemspkinfo[end($n)]; $skn = '';
foreach($n as $sk_value)
{
if(!empty($skn)) $skn .='+'.$itemspkinfo[$sk_value];
else $skn = $itemspkinfo[$sk_value];
}
$p1.=$skn; $n = $sk1.'+...+'.$sk2; $p2 = "\"";
}
else
{
if(isset($itemspkinfo_tooltip[$n]['title'])) $p1 = "title=\"".$itemspkinfo_tooltip[$n]['title']."\"";
if(isset($itemspkinfo_tooltip[$n]['class'])) $p2 = "class=\"".$itemspkinfo_tooltip[$n]['class']."\"";
$n = $itemspkinfo[$n];
}
break;
//处理名字
case $t=='m':
$filter_n = preg_replace('/锋利的|电气|毒性|钉|\[.*\]|-改/', '', $n);
if(isset($iteminfo_tooltip[$filter_n]))
{
if(is_array($iteminfo_tooltip[$filter_n]))
{
if(isset($iteminfo_tooltip[$filter_n]['title'])) $p1 = "title=\"".$iteminfo_tooltip[$filter_n]['title']."\"";
if(isset($iteminfo_tooltip[$filter_n]['class'])) $p2 = "class=\"".$iteminfo_tooltip[$filter_n]['class']."\"";
}
elseif(isset($iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]))
{ //使用可复用描述 越来越离谱了
if(isset($iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['title'])) $p1 = "title=\"".$iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['title']."\"";
if(isset($iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['class'])) $p2 = "class=\"".$iteminfo_tooltip_desc[$iteminfo_tooltip[$filter_n]]['class']."\"";
}
}
break;
}
//传入了样式 且道具没有与预设匹配的样式 则使用传入的样式
if(isset($c) && !$p2) $p2 = "class=\"".$c."\"";
$p3 = " >"; $e = "</span>";
$ret = $s.$p1.$p2.$p3.$n.$e;
return $ret;
}
//----------------------------------------
// 字符串处理
//----------------------------------------
//将sk转为数组格式 只会转换登记过的属性
function get_itmsk_array($sk_value)
{
global $itemspkinfo;
$ret = Array();
$i = 0;
while ($i < strlen($sk_value))
{
$sub = substr($sk_value,$i,1);
$i++;
if(!empty($sub) && array_key_exists($sub,$itemspkinfo)) array_push($ret,$sub);
}
return $ret;
}
//还原itmsk为字符串 $max_length:字符串长度上限
function get_itmsk_strlen($sk_value,$max_length=5)
{
global $itemspkinfo;
$ret = ''; $sk_count = 0;
foreach($sk_value as $sk)
{
if(array_key_exists($sk,$itemspkinfo))
{
$ret.=$sk;
$sk_count+=strlen($sk);
}
if($sk_count>=$max_length) break;
}
return $ret;
}
function get_clbpara($para)
{
return json_decode($para,true);
}
function set_clbpara($para)
{
return json_encode($para);
}
function mgzdecode($data)
{
return gzinflate(substr($data,10,-8));
......
......@@ -31,8 +31,6 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$nday = $day;
}
//tooltip处理(可能不用include……)
include_once GAME_ROOT.'./include/game.func.php';
//死法(除DN外):道具名登记在$d上;第四个参数:没有检查到特殊样式的给一个红色
if(strpos($news,'death')!==false && $news!=='death28' && isset($d)) $d = parse_itm_desc($d,'m',0,"red");
//赠送道具、吃到毒补给、陷阱、改变天气、强化武器、唱歌、打开礼物盒:道具名登记在$c上;
......@@ -286,6 +284,12 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}用零散的元素组合出了{$b}!</span><br>\n";
} elseif($news == 'emix_failed') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}试图把零散的元素重新组合起来,但是失败了!哎呀呀、这可真是……</span><br>\n";
} elseif($news == 'gpost') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"sienna\">{$a}{$c}赞助了{$e}{$b}!快递员正带着包裹前往【{$d}】</span><br>\n";
} elseif($news == 'gpost_success') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"sienna\">{$a}{$c}赞助的{$b}已成功送达!</span><br>\n";
} elseif($news == 'gpost_failed') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"sienna\">{$a}向场内玩家赞助的{$b}竟然被人半路截走了!真是天有不测风云……</span><br>\n";
} else {
$newsinfo .= "<li>$time,$news,$a,$b,$c,$d<br>\n";
}
......
......@@ -538,4 +538,32 @@ function rest($command) {
return;
}
//登记一些特殊的死亡事件
function check_kill_events($kid,$eid)
{
global $db,$tablepre,$log;
$result = $db->query("SELECT * FROM {$tablepre}players WHERE pid='$eid'");
$edata = $db->fetch_array($result);
if(!is_array($edata['clbpara'])) $edata['clbpara']=get_clbpara($edata['clbpara']);
if($edata['clbpara']['post'])
{
//发一条news 表示快递被劫走了
$log.="<span class='sienna'>某样东西从{$edata['name']}身上掉了出来……</span><br>";
$iid = $edata['clbpara']['postid'];
$sponsorid = $edata['clbpara']['sponsor'];
$result = $db->query("SELECT * FROM {$tablepre}gambling WHERE uid = '$sponsorid'");
$sordata = $db->fetch_array($result);
addnews($now,'gpost_failed',$sordata['uname'],$edata['itm'.$iid]);
//消除快递相关参数
unset($edata['clbpara']['post']);unset($edata['clbpara']['postid']);unset($edata['clbpara']['sponsor']);
//解除快递锁
$db->query("UPDATE {$tablepre}gambling SET bnid=0 WHERE uid='$sponsorid'");
player_save($edata);
}
return;
}
?>
This diff is collapsed.
......@@ -262,6 +262,26 @@
<td>子类型</td>
<td><input size="20" type="text" name="itmsk6" value="{$npc['itmsk6']}" maxlength="20"></td>
</tr>
<tr>
<td>社团参数A</td>
<td><input size="20" type="text" name="clbstatusa" value="{$npc['clbstatusa']}" maxlength="20"></td>
<td>社团参数B</td>
<td><input size="20" type="text" name="clbstatusb" value="{$npc['clbstatusb']}" maxlength="20"></td>
<td>社团参数C</td>
<td><input size="20" type="text" name="clbstatusc" value="{$npc['clbstatusc']}" maxlength="20"></td>
</tr>
<tr>
<td>社团参数D</td>
<td><input size="20" type="text" name="clbstatusd" value="{$npc['clbstatusd']}" maxlength="20"></td>
<td>社团参数E</td>
<td><input size="20" type="text" name="clbstatuse" value="{$npc['clbstatuse']}" maxlength="20"></td>
<td></td>
<td></td>
</tr>
<tr>
<td>社团参数集</td>
<td><textarea cols="20" rows="4" style="overflow:auto" name="clbpara">{$npc['clbpara']}</textarea></td>
</tr>
</table>
<input type="submit" value="修改NPC数值" onclick="$('command').value = 'submitedit'">
</form>
......
......@@ -270,6 +270,26 @@
<td></td>
<td></td>
</tr>
<tr>
<td>社团参数A</td>
<td><input size="20" type="text" name="clbstatusa" value="{$pc['clbstatusa']}" maxlength="20"></td>
<td>社团参数B</td>
<td><input size="20" type="text" name="clbstatusb" value="{$pc['clbstatusb']}" maxlength="20"></td>
<td>社团参数C</td>
<td><input size="20" type="text" name="clbstatusc" value="{$pc['clbstatusc']}" maxlength="20"></td>
</tr>
<tr>
<td>社团参数D</td>
<td><input size="20" type="text" name="clbstatusd" value="{$pc['clbstatusd']}" maxlength="20"></td>
<td>社团参数E</td>
<td><input size="20" type="text" name="clbstatuse" value="{$pc['clbstatuse']}" maxlength="20"></td>
<td></td>
<td></td>
</tr>
<tr>
<td>社团参数集</td>
<td><textarea cols="20" rows="4" style="overflow:auto" name="clbpara">{$pc['clbpara']}</textarea></td>
</tr>
</table>
<input type="submit" value="修改玩家数值" onclick="$('command').value = 'submitedit'">
</form>
......
<input type="button" class="cmdbutton" name="back" value="返回" onclick="postCmd('gamecmd','command.php');"><br><br>
\ No newline at end of file
<!--{if $gbnum}-->当前奖池:{$gbpool}。<!--{else}-->当前还未开设赌局。<!--{/if}-->当前分成系数:{$nowodds}
<span class="yellow" id="gbinfo">
$gbinfo
</span>
<!--{if $cuser && isset($credits2)}-->
你的{lang credits2}:<span id="credits2" class="yellow">$credits2</span>
<!--{if $gbact == 1}-->
<input type="hidden" name="bet" value="{$gbudata['bid']}">
<!--{else}-->
选择:
<!--{if $cuser && isset($credits2)}-->你的{lang credits2}:<span id="credits2" class="yellow">$credits2</span>
你可以选择一位对象,消耗<span class="yellow">{lang credits2}</span>为ta<span class="yellow">下注</span><span class="yellow">赞助</span>
选择对象:
<select name="bet">
<option value="none">不选择
<!--{loop $alivedata $alive}--><option value="{$alive['pid']}">{$alive['name']}<!--{/loop}-->
</select>
<!--{/if}-->
赌注:<input type="text" name="wager" value="1" size="4" maxlength="6">
<br>
<!--{/if}-->
<!--{if $cuser && isset($credits2)}-->
赞助:
<span id="gbshop_box">
<select id="gbid" name="gbid" style="width:100px" onchange="$('command').value='gbid';postCmd('gamecmd','command.php');this.disabled=true;">
<option value="main">可赞助商品一览</option>
<!--{loop $gshoplist $gshopid $gshopname}-->
<optgroup label="$gshopname">
<!--{loop shoplist($gshopid,1) $idata}-->
<!--{if isset($idata['sid']) && $idata['price']<=$credits2*$credits2_values}-->
<option value="$idata['sid']">$idata['item']/$idata['itmk']/$idata['itme']/$idata['itms']<!--{if $idata['itmsk_words']}-->/$idata['itmsk_words']<!--{/if}--> 【价:$idata['price'],数:$idata['num']】</option>
<!--{/if}-->
<!--{/loop}-->
<!--{/loop}-->
</select>
</span>
数量:<input type="text" name="gbinum" value="1" size="4" maxlength="6">
<input type="button" value="下单" onClick="$('gbmode').value='gsponsor';postCmd('alive','alive.php');">
<br>
<!--{/if}-->
<!--{if $gbnum}-->当前奖池:{$gbpool}。当前分成系数:{$nowodds}。<!--{else}-->当前还未开设赌局。<!--{/if}-->
<!--{if $cuser && isset($credits2)}-->
下注:<input type="text" name="wager" value="1" size="4" maxlength="6">
<input type="button" <!--{if $gbact == 1}-->value="追加"<!--{else}-->value="下注"<!--{/if}--> onClick="$('gbmode').value='gamble';postCmd('alive','alive.php');">
<!--{/if}-->
\ No newline at end of file
<br>
<!--{/if}-->
<span class="yellow" id="gbinfo">
$gbinfo
</span>
\ No newline at end of file
......@@ -3885,7 +3885,7 @@
<td class="b3"><span>2禁刷新2个</span></td></tr>
<tr><td class="b3" height=20px><span>SCP研究设施</span></td>
<td class="b3"><span>浮☆云</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>全地图唯一的野生浮云礼物盒</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新1个</span></td></tr>
......@@ -6428,186 +6428,6 @@
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新10个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条金</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条木</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条水</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条火</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条土</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条城壁</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条主教</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条骑士</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条国王</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条皇后</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条雷</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条风</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条震</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条泽</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条氢</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条氦</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条锂</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条铍</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条硼</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条碳</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条氮</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条氧</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条氟</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条氖</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条钠</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条镁</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条铝</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条硅</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条磷</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>提示纸条铀</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新3个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>《殴系指南》</span></td>
<td class="b3"><span>技能书籍</span></td>
<td class="b3"><span>25/1</span></td>
......@@ -7375,4 +7195,10 @@
<td class="b3"><span>90/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>0禁刷新7个</span></td></tr>
<tr><td class="b3" height=20px><span>全图随机</span></td>
<td class="b3"><span>→【神器任意门】←</span></td>
<td class="b3"><span>特殊</span></td>
<td class="b3"><span>1/1</span></td>
<td class="b3"><span></span></td>
<td class="b3"><span>1禁刷新1个</span></td></tr>
</table></div><br>
This diff is collapsed.
......@@ -5,11 +5,11 @@
<input type="radio" name="command" id="shop" value="shop"><a onclick=sl('shop'); href="javascript:void(0);" onmouseover="status=' ';return true;">返回列表</a><br><br>
<!--{loop $itemdata $idata}-->
<!--{if $idata['sid']}-->
<a onclick=sl("$idata['sid']"); href="javascript:void(0);" onmouseover="status=' ';return true;"><input type="radio" name="command" id="$idata['sid']" value="$idata['sid']">$idata['item']/$idata['itmk_words']/$idata['itme']/$idata['itms']<!--{if $idata['itmsk_words']}-->/$idata['itmsk_words']<!--{/if}--> 【价:$idata['price'],数:$idata['num']】</a><br>
<a onclick=sl("$idata['sid']"); href="javascript:void(0);" onmouseover="status=' ';return true;"><input type="radio" name="command" id="$idata['sid']" value="$idata['sid']">$idata['item_words']/$idata['itmk_words']/$idata['itme']/$idata['itms']<!--{if $idata['itmsk_words']}-->/$idata['itmsk_words']<!--{/if}--> 【价:$idata['price'],数:$idata['num']】</a><br>
<!--{/if}-->
<!--{/loop}-->
<!--{if $shop==1||$shop==2||$shop==6||$shop==7||$shop==8||$shop==10||$shop==11||$shop==12}-->
请输入购买数量:<input type="text" name="buynum" value="1" size="5" maxlength="5">
请输入购买数量:<input type="number" name="buynum" value="1" min="1" max="1000">
<!--{else}-->
<input type="hidden" name="buynum" value="1">
<!--{/if}-->
......
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