Commit aaa82d8f authored by hisuinohoshi's avatar hisuinohoshi

update vnmix

变化:
- 将自定义合成的待采纳部分转为数据库储存(记得运行一下vndbup.php);
- 优化了自定义合成的增编删减流程;
- 修改了提交自定义合成时添加道具属性的方式,并将可提交的属性扩容至最多30种;
- 修改了团队胜利时检测活跃玩家的方式;
parent 38f1a185
......@@ -68,6 +68,8 @@ $result = $db->query("DESCRIBE {$tablepre}winners teamMate");
if(!$db->num_rows($result)) $db->query("ALTER TABLE {$tablepre}winners ADD teamMate text NOT NULL default '' AFTER teamPass");
$result = $db->query("DESCRIBE {$tablepre}winners teamIcon");
if(!$db->num_rows($result)) $db->query("ALTER TABLE {$tablepre}winners ADD teamIcon smallint unsigned NOT NULL default '0' AFTER teamMate");
$result = $db->query("DESCRIBE {$tablepre}winners clbpara");
if(!$db->num_rows($result)) $db->query("ALTER TABLE {$tablepre}winners ADD clbpara text NOT NULL AFTER teamMate");
//以下内容均为chatGPT生成,让我们对新时代的赛博苦力致以敬意:
$db->query("ALTER TABLE {$tablepre}winners MODIFY wep char(30) NOT NULL default ''");
......@@ -160,10 +162,6 @@ if(!$db->num_rows($result)) $db->query("ALTER TABLE {$tablepre}users ADD daily v
//game表结构变动
$db->query("ALTER TABLE {$tablepre}game DROP gamevars");
$db->query("ALTER TABLE {$tablepre}game ADD gamevars text NOT NULL AFTER combonum");
$result = $db->query("DESCRIBE {$tablepre}winners teamMate");
if(!$db->num_rows($result)) $db->query("ALTER TABLE {$tablepre}winners ADD teamMate text NOT NULL default '' AFTER teamPass");
$result = $db->query("DESCRIBE {$tablepre}winners teamIcon");
if(!$db->num_rows($result)) $db->query("ALTER TABLE {$tablepre}winners ADD teamIcon smallint unsigned NOT NULL default '0' AFTER teamMate");
echo "Update Fish.<br>";
?>
\ No newline at end of file
......@@ -13,7 +13,7 @@ $club_skillslist = Array
5 => Array('s_hp','s_ad','f_heal','c5_sneak','c5_caution','c5_review','c5_focus','c5_higheg','c5_double'), #'拆弹专家',
6 => Array('s_hp','s_ad','f_heal','c6_godluck','c6_godsend','c6_godbless','c6_godpow','c6_godeyes','c6_justice'), #'宛如疾风',
7 => Array('s_hp','s_ad','f_heal','c7_radar','c7_shield','c7_electric','c7_field','c7_overload','c7_emp'), #'锡安成员',
8 => Array('s_hp','s_ad','f_heal'), #'黑衣组织',
8 => Array('s_hp','s_ad','f_heal','c8_assassin','c8_infect','c8_infilt','c8_misty','c8_catalyst','c8_cooker'), #'黑衣组织',
9 => Array('s_hp','s_ad','f_heal','c9_spirit','c9_lb','c9_iceheart','c9_charge','c9_heartfire'), #'超能力者',
10 => Array('s_hp','s_ad','f_heal'), #'高速成长',
11 => Array('s_hp','s_ad','f_heal'), #'富家子弟',
......@@ -250,6 +250,9 @@ $cskills = Array
'svars' => Array(
'choice' => '', //初始默认选择的单项防御
),
'lockdesc' => Array(
'lvl' => '18级时解锁',
),
'unlock' => Array(
'lvl' => '[:lvl:] >= 18',
),
......@@ -299,7 +302,9 @@ $cskills = Array
'rangerate' => Array(0,20,40,60,80,100,100), //超射程反击率
'countergain' => Array(0,2,3,4,10,12,30), //基础反击率
),
'lockdesc' => '武器不适用,持<span class="yellow">斩系武器</span>时生效',
'lockdesc' => 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'",
),
......
......@@ -10,12 +10,15 @@ $vnworld_notice = "喔!年轻人呦!你发现了一个不得了的地方呢
总之,在这里的员工回来之前,就请你自己先随便逛逛吧。<br>";
#玩家自定义合成相关:
//是否开启道具名的联想输入列表:(默认:1=开启)
$vnmix_name_assoc = 1;
//编辑或审批提交的合成列表需要的最低权限等级:(默认:5级)
$vnmix_editor_group = 5;
//提交一次合成需要消耗的切糕:(默认:200。0为不消耗)
$vnmix_c2_cost = 200;
//自定义合成最多可以添加几个属性(最多不能超过30个,默认:7个)
$vnmix_max_sk = 7;
//允许普通玩家选择的道具类别
$vn_iteminfo = Array
(
......@@ -238,16 +241,14 @@ $vrclassinfo = Array
$vnmix_top_tips = '提示:每个配方至少需要两种合成素材,素材与道具名最长不可以超过30个字符。<br>将道具耐久设置为0时可以让耐久度变为“∞”。';
if($vnmix_c2_cost) $vnmix_top_tips.='每次提交需要消耗'.$vnmix_c2_cost.'份切糕。';
//显示在编辑合成与打印合成表页面上的提示信息
$stuff_tips = Array('合成材料一','合成材料二','合成材料三','合成材料四','合成材料五',);
$result_tips = Array('合成结果','道具用途','道具效果','道具耐久','属性1','属性2','属性3','属性4','属性5','道具分组');
$log_tips = Array('道具属性','作者','提交状态');
$check_tips = Array('<span class="yellow">提交中</span>','<span class="lime">已采纳</span>','<span class="red">未采纳</span>');
$check_infos = Array
(
0 =>'<span class="yellow">成功保存了配方!</span><br>',
1 =>'<span class="yellow">成功编辑了配方!</span><br>',
2 =>'<span class="red">删除了配方。</span><br>',
3 =>'<span class="yellow">成功变更了配方状态!</span><br>',
3 =>'<span class="yellow">采纳了配方!</span><br>',
4 =>'<span class="red">将配方状态变更为未采纳。</span><br>',
);
?>
......@@ -113,13 +113,13 @@ DROP TABLE IF EXISTS `acbra2_mapitem`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `acbra2_mapitem` (
`iid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`itm` char(30) NOT NULL DEFAULT '',
`itmk` char(5) NOT NULL DEFAULT '',
`itme` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms` char(5) NOT NULL DEFAULT '0',
`itmsk` char(5) NOT NULL DEFAULT '',
`pls` tinyint(3) unsigned NOT NULL DEFAULT '0',
iid mediumint unsigned NOT NULL auto_increment,
itm char(30) NOT NULL default '',
itmk char(40) not null default '',
itme int(10) unsigned NOT NULL DEFAULT '0',
itms char(10) not null default '0',
itmsk char(40) not null default '',
pls tinyint unsigned not null default '0',
PRIMARY KEY (`iid`)
) ENGINE=MyISAM AUTO_INCREMENT=7726 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
......@@ -132,13 +132,13 @@ DROP TABLE IF EXISTS `acbra2_maptrap`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `acbra2_maptrap` (
`tid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`itm` char(30) NOT NULL DEFAULT '',
`itmk` char(5) NOT NULL DEFAULT '',
`itme` smallint(5) unsigned NOT NULL DEFAULT '0',
`itms` char(5) NOT NULL DEFAULT '0',
`itmsk` char(5) NOT NULL DEFAULT '',
`pls` tinyint(3) unsigned NOT NULL DEFAULT '0',
tid mediumint unsigned NOT NULL auto_increment,
itm char(30) NOT NULL default '',
itmk char(40) not null default '',
itme int(10) unsigned NOT NULL DEFAULT '0',
itms char(10) not null default '0',
itmsk char(40) not null default '',
pls tinyint unsigned not null default '0',
PRIMARY KEY (`tid`)
) ENGINE=MyISAM AUTO_INCREMENT=185 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
......@@ -334,16 +334,16 @@ DROP TABLE IF EXISTS `acbra2_shopitem`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `acbra2_shopitem` (
`sid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`kind` tinyint(3) unsigned NOT NULL DEFAULT '0',
`num` smallint(5) unsigned NOT NULL DEFAULT '0',
`price` smallint(5) unsigned NOT NULL DEFAULT '0',
`area` tinyint(3) unsigned NOT NULL DEFAULT '0',
`item` char(30) NOT NULL DEFAULT '',
`itmk` char(5) NOT NULL DEFAULT '',
`itme` smallint(5) unsigned NOT NULL DEFAULT '0',
`itms` char(5) NOT NULL DEFAULT '0',
`itmsk` char(5) NOT NULL DEFAULT '',
sid smallint unsigned NOT NULL auto_increment,
kind tinyint unsigned NOT NULL default '0',
num smallint unsigned NOT NULL default '0',
price smallint unsigned NOT NULL default '0',
area tinyint unsigned NOT NULL default '0',
item char(30) NOT NULL default '',
itmk char(40) not null default '',
itme int(10) unsigned NOT NULL DEFAULT '0',
itms char(10) not null default '0',
itmsk char(40) not null default '',
PRIMARY KEY (`sid`),
KEY `KIND` (`kind`,`area`)
) ENGINE=MyISAM AUTO_INCREMENT=165 DEFAULT CHARSET=utf8;
......@@ -370,7 +370,6 @@ CREATE TABLE `acbra2_users` (
`daily` varchar(255) NOT NULL DEFAULT '',
`nick` text NOT NULL,
`nicks` text NOT NULL,
`volume` smallint(3) unsigned NOT NULL default '20',
`validgames` smallint(5) unsigned NOT NULL DEFAULT '0',
`wingames` smallint(5) unsigned NOT NULL DEFAULT '0',
`gender` char(1) NOT NULL DEFAULT '0',
......@@ -431,71 +430,78 @@ CREATE TABLE `acbra2_winners` (
`wf` smallint(5) unsigned NOT NULL DEFAULT '0',
`teamID` char(15) NOT NULL DEFAULT '',
`teamPass` char(15) NOT NULL DEFAULT '',
`wep` char(30) NOT NULL DEFAULT '',
`wepk` char(5) NOT NULL DEFAULT '',
`wepe` mediumint(8) unsigned NOT NULL DEFAULT '0',
`weps` char(5) NOT NULL DEFAULT '0',
`wepsk` char(5) NOT NULL DEFAULT '',
`arb` char(30) NOT NULL DEFAULT '',
`arbk` char(5) NOT NULL DEFAULT '',
`arbe` mediumint(8) unsigned NOT NULL DEFAULT '0',
`arbs` char(5) NOT NULL DEFAULT '0',
`arbsk` char(5) NOT NULL DEFAULT '',
`arh` char(30) NOT NULL DEFAULT '',
`arhk` char(5) NOT NULL DEFAULT '',
`arhe` mediumint(8) unsigned NOT NULL DEFAULT '0',
`arhs` char(5) NOT NULL DEFAULT '0',
`arhsk` char(5) NOT NULL DEFAULT '',
`ara` char(30) NOT NULL DEFAULT '',
`arak` char(5) NOT NULL DEFAULT '',
`arae` mediumint(8) unsigned NOT NULL DEFAULT '0',
`aras` char(5) NOT NULL DEFAULT '0',
`arask` char(5) NOT NULL DEFAULT '',
`arf` char(30) NOT NULL DEFAULT '',
`arfk` char(5) NOT NULL DEFAULT '',
`arfe` mediumint(8) unsigned NOT NULL DEFAULT '0',
`arfs` char(5) NOT NULL DEFAULT '0',
`arfsk` char(5) NOT NULL DEFAULT '',
`art` char(30) NOT NULL DEFAULT '',
`artk` char(5) NOT NULL DEFAULT '',
`arte` mediumint(8) unsigned NOT NULL DEFAULT '0',
`arts` char(5) NOT NULL DEFAULT '0',
`artsk` char(5) NOT NULL DEFAULT '',
`itm0` char(30) NOT NULL DEFAULT '',
`itmk0` char(5) NOT NULL DEFAULT '',
`itme0` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms0` char(5) NOT NULL DEFAULT '0',
`itmsk0` char(5) NOT NULL DEFAULT '',
`itm1` char(30) NOT NULL DEFAULT '',
`itmk1` char(5) NOT NULL DEFAULT '',
`itme1` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms1` char(5) NOT NULL DEFAULT '0',
`itmsk1` char(5) NOT NULL DEFAULT '',
`itm2` char(30) NOT NULL DEFAULT '',
`itmk2` char(5) NOT NULL DEFAULT '',
`itme2` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms2` char(5) NOT NULL DEFAULT '0',
`itmsk2` char(5) NOT NULL DEFAULT '',
`itm3` char(30) NOT NULL DEFAULT '',
`itmk3` char(5) NOT NULL DEFAULT '',
`itme3` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms3` char(5) NOT NULL DEFAULT '0',
`itmsk3` char(5) NOT NULL DEFAULT '',
`itm4` char(30) NOT NULL DEFAULT '',
`itmk4` char(5) NOT NULL DEFAULT '',
`itme4` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms4` char(5) NOT NULL DEFAULT '0',
`itmsk4` char(5) NOT NULL DEFAULT '',
`itm5` char(30) NOT NULL DEFAULT '',
`itmk5` char(5) NOT NULL DEFAULT '',
`itme5` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms5` char(5) NOT NULL DEFAULT '0',
`itmsk5` char(5) NOT NULL DEFAULT '',
`itm6` char(30) NOT NULL DEFAULT '',
`itmk6` char(5) NOT NULL DEFAULT '',
`itme6` mediumint(8) unsigned NOT NULL DEFAULT '0',
`itms6` char(5) NOT NULL DEFAULT '0',
`itmsk6` char(5) NOT NULL DEFAULT '',
`teamMate` text NOT NULL default '',
`teamIcon` char(15) smallint unsigned NOT NULL default '0',
wep char(30) NOT NULL default '',
wepk char(40) not null default '',
wepe int(10) unsigned NOT NULL DEFAULT '0',
weps char(10) not null default '0',
wepsk char(40) not null default '',
wep2 char(30) NOT NULL default '',
wep2k char(40) not null default '',
wep2e int(10) unsigned NOT NULL DEFAULT '0',
wep2s char(10) not null default '0',
wep2sk char(40) not null default '',
arb char(30) NOT NULL default '',
arbk char(40) not null default '',
arbe int(10) unsigned NOT NULL DEFAULT '0',
arbs char(10) not null default '0',
arbsk char(40) not null default '',
arh char(30) NOT NULL default '',
arhk char(40) not null default '',
arhe int(10) unsigned NOT NULL DEFAULT '0',
arhs char(10) not null default '0',
arhsk char(40) not null default '',
ara char(30) NOT NULL default '',
arak char(40) not null default '',
arae int(10) unsigned NOT NULL DEFAULT '0',
aras char(10) not null default '0',
arask char(40) not null default '',
arf char(30) NOT NULL default '',
arfk char(40) not null default '',
arfe int(10) unsigned NOT NULL DEFAULT '0',
arfs char(10) not null default '0',
arfsk char(40) not null default '',
art char(30) NOT NULL default '',
artk char(40) not null default '',
arte int(10) unsigned NOT NULL DEFAULT '0',
arts char(10) not null default '0',
artsk char(40) not null default '',
itm0 char(30) NOT NULL default '',
itmk0 char(40) not null default '',
itme0 int(10) unsigned NOT NULL DEFAULT '0',
itms0 char(10) not null default '0',
itmsk0 char(40) not null default '',
itm1 char(30) NOT NULL default '',
itmk1 char(40) not null default '',
itme1 int(10) unsigned NOT NULL DEFAULT '0',
itms1 char(10) not null default '0',
itmsk1 char(40) not null default '',
itm2 char(30) NOT NULL default '',
itmk2 char(40) not null default '',
itme2 int(10) unsigned NOT NULL DEFAULT '0',
itms2 char(10) not null default '0',
itmsk2 char(40) not null default '',
itm3 char(30) NOT NULL default '',
itmk3 char(40) not null default '',
itme3 int(10) unsigned NOT NULL DEFAULT '0',
itms3 char(10) not null default '0',
itmsk3 char(40) not null default '',
itm4 char(30) NOT NULL default '',
itmk4 char(40) not null default '',
itme4 int(10) unsigned NOT NULL DEFAULT '0',
itms4 char(10) not null default '0',
itmsk4 char(40) not null default '',
itm5 char(30) NOT NULL default '',
itmk5 char(40) not null default '',
itme5 int(10) unsigned NOT NULL DEFAULT '0',
itms5 char(10) not null default '0',
itmsk5 char(40) not null default '',
itm6 char(30) NOT NULL default '',
itmk6 char(40) not null default '',
itme6 int(10) unsigned NOT NULL DEFAULT '0',
itms6 char(10) not null default '0',
itmsk6 char(40) not null default '',
`motto` char(30) NOT NULL DEFAULT '',
`wmode` tinyint(3) unsigned NOT NULL DEFAULT '0',
`vnum` smallint(5) unsigned NOT NULL DEFAULT '0',
......
--
-- 表的结构 `bra_vnmixitem`
--
--
DROP TABLE IF EXISTS bra_vnmixitem;
CREATE TABLE bra_vnmixitem (
iid mediumint unsigned NOT NULL auto_increment,
creator varchar(40) NOT NULL DEFAULT '',
istatus int(10) unsigned NOT NULL default '0',
class varchar(30) NOT NULL default '',
stf0 varchar(30) NOT NULL default '',
stf1 varchar(30) NOT NULL default '',
stf2 varchar(30) NOT NULL default '',
stf3 varchar(30) NOT NULL default '',
stf4 varchar(30) NOT NULL default '',
itm varchar(30) NOT NULL default '',
itmk varchar(40) not null default '',
itme int(10) unsigned NOT NULL default '0',
itms char(10) not null default '0',
itmsk varchar(40) not null default '',
PRIMARY KEY (iid)
) ENGINE=MyISAM;
\ No newline at end of file
......@@ -2,46 +2,39 @@
if(!defined('IN_ADMIN')) {
exit('Access Denied');
}
require config('vnworld',$gamecfg);
//require './include/game/itemplace.func.php';
include config('vnworld',$gamecfg);
include_once GAME_ROOT.'./include/vnworld/vnmix.func.php';
if(!isset($vncmd)){$vncmd = 'none';}
if(!isset($vncmd)){$vncmd = '';}
global $gamecfg;
$cache_file = config('vnmixitem',$gamecfg);
if(file_exists($cache_file))
{
include $cache_file;
$temp_vniteminfo = $vn_iteminfo + $vn_gm_iteminfo;
include_once($cache_file);
$temp_mixinfo = $vn_mixinfo;
if(isset($vn_mixinfo))
{
$temp_mixinfo = $vn_mixinfo;
foreach($temp_mixinfo as $vn_key=>$vn_arr)
{
foreach($vn_arr as $vn_type => $vn_info)
{
/*if($vn_type == 'stuff')
if($vn_type == 'stuff')
{
// 格式化素材来源
foreach($vn_info as $sid => $snm)
for($i=0;$i<5;$i++)
{
$temp_mixinfo[$vn_key][$vn_type][$sid] = "<span tooltip=\"".get_item_place($snm)."\">".$snm."</span>";
if(empty($vn_info[$i])) $temp_mixinfo[$vn_key][$vn_type][$i] = '-';
}
}*/
}
if($vn_type == 'result')
{
$temp_mixinfo[$vn_key][$vn_type][1] = $temp_vniteminfo[$vn_info[1]];
$sk_arr = Array();
if(!empty($vn_info[4]))
{
//$sk_arr = get_itmsk_array($vn_info[4]);
$temp_mixinfo[$vn_key][$vn_type][4] = '';
$temp_mixinfo[$vn_key][$vn_type][4] = parse_info_desc($vn_info[4],'sk',$vn_info[1]);
/*foreach($sk_arr as $sk_value)
{
if(!empty($temp_mixinfo[$vn_key][$vn_type][4])) $temp_mixinfo[$vn_key][$vn_type][4] .= '+'.parse_itm_desc($sk_value,'sk');
else $temp_mixinfo[$vn_key][$vn_type][4] = parse_itm_desc($sk_value,'sk');
}*/
}
}
}
......@@ -67,117 +60,31 @@ if(strpos($vncmd ,'del')===0)
}
else
{
$vname = $flag['name']; $vresult = $flag['result'][0];
$result = $db->query("SELECT * FROM {$tablepre}users WHERE username='$vname'");
if(!$db->num_rows($result))
// 将配方重新格式化
$earr = Array();
// 格式化合成素材
for($i=0;$i<5;$i++)
{
$cmd_info = '配方的作者信息无效!请检查缓存文件。';
return;
$earr['stf'.$i] = $flag['stuff'][$i];
}
$vdata = $db->fetch_array($result);
post_back_vn_cache_file($vdata,$flag);
// 格式化合成结果
$earr['creator'] = $flag['name'];
$earr['class'] = $flag['class'];
$earr['itm'] = $flag['result'][0];
$earr['itmk'] = $flag['result'][1];
$earr['itme'] = $flag['result'][2];
$earr['itms'] = $flag['result'][3];
$earr['itmsk'] = $flag['result'][4];
$earr['istatus'] = 0;
// 保存至数据库
$db->array_insert("{$tablepre}vnmixitem", $earr);
}
adminlog('回退了配方',$vresult);
$cmd_info = "已回退配方{$vnid}!";
$cmd_info = "已回退配方{$earr['itm']}!";
return;
}
include template('admin_vnmixlist');
//修改配方文件
function edit_vn_mixilst($varr,$t)
{
global $checkstr,$gamecfg;
//先加锁
$lock_file = GAME_ROOT.'./gamedata/bak/vnmix2.lock';
if(file_exists($lock_file))
{
return '有其他管理员正在进行编辑操作,请稍等一会儿再试!';
}
else
{
$cache_file = config('vnmixitem',$gamecfg);
if(file_exists($cache_file))
{
//加锁
writeover($lock_file,' ');
include_once($cache_file);
global $vn_mixinfo;
}
else
{
return '合成配方文件不存在!不能进行编辑操作。';
}
}
if($varr==='del' && isset($vn_mixinfo[$t]))
{
$varr = $vn_mixinfo[$t];
$varr['status'] = 0;
unset($vn_mixinfo[$t]);
}
sort($vn_mixinfo);
global $checkstr;
$cont = str_replace('?>','',str_replace('<?','<?php',$checkstr));
$cont .= '$vn_mixinfo = ' . var_export($vn_mixinfo,1).";\r\n?>";
file_put_contents($cache_file,$cont,LOCK_EX);
//writeover($cache_file, $cont);
//chmod($cache_file,0777);
unlink($lock_file);
return $varr;
}
//为什么要把这个函数在这里又重写一遍?……因为引用已经乱套了……呃啊,杀了我吧!
function post_back_vn_cache_file($data,$arr,$t=NULL)
{
global $checkstr,$gamecfg;
$lock_file = GAME_ROOT.'./gamedata/bak/vnmix.lock';
if(file_exists($lock_file))
{
//锁还在,返回一个报错信息
return '有其他人正在提交或编辑合成,请稍后再试!<br>';
}
else
{
writeover($lock_file,' ');
}
$file = config('queue_vnmixitem',$gamecfg);
if(!file_exists($file))
{
$carr = Array();
}
else
{
include_once($file);
}
//把字符串还原为数组
if(!empty($arr['result'][4]))
{
$arr['result'][4] = get_itmsk_array($arr['result'][4]);
}
if(isset($t))
{
$arr['name'] = $carr[$t]['name'];
$arr['status'] = $carr[$t]['status'];
$carr[$t] = $arr;
}
else
{
$arr['name'] = $data['username'];
$carr[] = $arr;
}
sort($carr);
$cont = str_replace('?>','',str_replace('<?','<?php',$checkstr));
$cont .= '$carr = ' . var_export($carr,1).";\r\n?>";
file_put_contents($file,$cont,LOCK_EX);
//writeover($file, $cont);
//chmod($file,0777);
unlink($lock_file);
return 0;
}
?>
......@@ -975,10 +975,11 @@ function itemmix($mlist, $itemselect=-1) {
return;
}
include_once config('mixitem',$gamecfg);
include_once config('vnmixitem',$gamecfg);
//include_once config('mixitem',$gamecfg);
//include_once config('vnmixitem',$gamecfg);
$mixflag = false;
if(!empty($vn_mixinfo)) $mixinfo = array_merge($mixinfo,$vn_mixinfo);
$mixinfo = get_mixinfo();
//if(!empty($vn_mixinfo)) $mixinfo = array_merge($mixinfo,$vn_mixinfo);
foreach($mixinfo as $minfo) {
if(!array_diff($mixitem,$minfo['stuff']) && !array_diff($minfo['stuff'],$mixitem) && count($mixitem) == count($minfo['stuff'])){
$mixflag = true;
......
......@@ -128,7 +128,8 @@ function get_item_place($which)
$result.="{$area}禁起在商店中出售({$price}元) \r";
}
}
include config('mixitem',$gamecfg);
//include config('mixitem',$gamecfg);
$mixinfo = get_mixinfo();
foreach($mixinfo as $lst)
{
if ($lst['result'][0]==$which || $lst['result'][0]==$which.' ')
......@@ -137,22 +138,6 @@ function get_item_place($which)
break;
}
}
if(file_exists(config('vnmixitem',$gamecfg)))
{
include config('vnmixitem',$gamecfg);
foreach($vn_mixinfo as $vlst)
{
if ($vlst['result'][0]==$which || $vlst['result'][0]==$which.' ')
{
$vresult ="通过合成获取 \r";
if(strpos($result,$vresult)===false)
{
$result .= $vresult;
}
break;
}
}
}
$file=config('synitem',$gamecfg);
$synlist = openfile($file);
foreach($synlist as $lst)
......@@ -206,7 +191,7 @@ function get_item_place($which)
{
if(file_exists(config('random'.$rnm,$gamecfg)))
{
include_once config('random'.$rnm,$gamecfg);
include config('random'.$rnm,$gamecfg);
foreach(Array('itmlow','itmmedium','itmhigh','antimeta') as $rlvl)
{
$item = explode("\r\n",$$rlvl);
......@@ -243,7 +228,9 @@ function get_item_place($which)
function get_item_npcdrop($which)
{
global $npcinfo,$anpcinfo,$enpcinfo,$typeinfo;
include config('npc',1);
include config('addnpc',1);
include config('evonpc',1);
$result = '';
$nownpclist = $npcinfo;
......
......@@ -42,7 +42,8 @@
if($unlock)
{
if(get_skilltags($sk,'unlock_battle_hidden')) continue;
$sk_desc .= is_array($cskills[$sk]['lockdesc']) ? $cskills[$sk]['lockdesc'][$unlock] : $cskills[$sk]['lockdesc'];
$sk_desc .= parse_skilllockdesc($sk,$unlock);
//$sk_desc .= is_array($cskills[$sk]['lockdesc']) ? $cskills[$sk]['lockdesc'][$unlock] : $cskills[$sk]['lockdesc'];
}
//再检查技能是否满足激活条件
else
......
......@@ -245,7 +245,7 @@
if(empty($data['clbpara']['skill']) || !in_array($sk,$data['clbpara']['skill']))
{
//echo "技能{$sk}未解锁<br>";
return "技能未解锁!<br>";
return "noskill";
}
if(!empty($cskills[$sk]['unlock']))
{
......@@ -286,6 +286,48 @@
return 0;
}
# 技能是否满足消耗条件,返回0时为可激活,否则返回对应的未满足条件 $sk:技能名;$data:角色数据
function check_skill_cost($sk,$data)
{
global $cskills;
# 不满足激活条件输出的文本,先写在这里,之后挪到配置文件里
$cannot_active_log = Array(
0 => '怒气不足,需要<span class="red">[:ragecost:]</span>点怒气',
);
# 检查技能需要消耗的怒气条件是否满足
$ragecost = get_skillvars($sk,'ragecost');
if($ragecost && $data['rage'] < $ragecost)
{
$clog = str_replace('[:ragecost:]',$ragecost,$cannot_active_log[0]);
return $clog;
}
return 0;
}
function parse_skilllockdesc($sk,$lock)
{
global $cskills;
$cskill = $cskills[$sk];
# 检查冷却时间
if(is_array($lock))
{
$cd = $lock[0];
$lock = $lock[1];
}
# 通用未解锁项目
if($lock == 'noskill' || !isset($cskill['lockdesc'])) return "技能未解锁或解锁条件不明!<br>";
# 返回对应的未解锁描述
if(is_array($cskill['lockdesc']))
{
$lockdesc = isset($cskill['lockdesc'][$lock]) ? $cskill['lockdesc'][$lock] : "技能不可用,可能是因为:{$lock}<br>";
}
else
{
$lockdesc = $cskill['lockdesc'];
}
return $lockdesc;
}
function parse_skillrules($key,$prefix="\$data",$prefix2="['clbpara']")
{
//传入值内有'-'号,代表是clbpara内的内容
......@@ -327,24 +369,6 @@
return $key;
}
# 技能是否满足消耗条件,返回0时为可激活,否则返回对应的未满足条件 $sk:技能名;$data:角色数据
function check_skill_cost($sk,$data)
{
global $cskills;
# 不满足激活条件输出的文本,先写在这里,之后挪到配置文件里
$cannot_active_log = Array(
0 => '怒气不足,需要<span class="red">[:ragecost:]</span>点怒气',
);
# 检查技能需要消耗的怒气条件是否满足
$ragecost = get_skillvars($sk,'ragecost');
if($ragecost && $data['rage'] < $ragecost)
{
$clog = str_replace('[:ragecost:]',$ragecost,$cannot_active_log[0]);
return $clog;
}
return 0;
}
# 获取指定技能标签 $sk:技能名;$stag:要寻找的特定标签;(非必须)$para:$clbpara
function get_skilltags($sk,$stag='')
{
......
......@@ -13,6 +13,15 @@ function get_equip_list()
return $equip_list;
}
# mixitem_1.php; vnmixitem_1.php;
function get_mixinfo()
{
include config("mixitem",1);
include config("vnmixitem",1);
if(!empty($vn_mixinfo)) $mixinfo = array_merge($mixinfo,$vn_mixinfo);
return $mixinfo;
}
# achievement_1.php
function get_achtype()
{
......
......@@ -509,15 +509,16 @@ function gameover($time = 0, $mode = '', $winname = '') {
//锁定解除、幻境解离结局,检查是否为队伍获胜……
if(($winmode == 3 || $winmode == 7) && !empty($pdata['teamID']))
{
$team = $pdata['teamID']; $team_mates = Array($pdata['name']);
$team = $pdata['teamID']; $team_mates = Array($pdata['name']); $team_ips = Array($pdata['ip']);
$tresult = $db->query("SELECT name,ip FROM {$tablepre}players WHERE teamID='$team' AND type=0");
if($db->num_rows($tresult) > 1)
{
while($tpdata = $db->fetch_array($tresult))
{
if(!in_array($tpdata['name'],$team_mates) && $tpdata['ip'] != $pdata['ip'])
if(!in_array($tpdata['name'],$team_mates) && !in_array($tpdata['ip'],$team_ips))
{
$team_mates[] = $tpdata['name'];
$team_ips[] = $tpdata['ip'];
//队伍获胜时 同队玩家也可以获得对应结局成就
include_once GAME_ROOT.'./include/game/achievement.func.php';
check_end_achievement_rev($tpdata['name'],$winmode);
......
<?php
if(!defined('IN_GAME')) {
exit('Access Denied');
}
/*** 模块函数部分 ***/
# 格式化显示从数据库中读出的待审核的配方文件
function parse_queue_vnmix_info($carr)
{
include_once GAME_ROOT.'./include/game/itemplace.func.php';
// 格式化素材来源
for($i=0;$i<5;$i++)
{
if(!empty($carr['stf'.$i]))
{
$snm = $carr['stf'.$i];
$tooltipinfo = get_item_place($snm);
if(!empty($tooltipinfo)) $carr['stf'.$i] = "<span tooltip=\"".$tooltipinfo."\">".$snm."</span>";
}
}
// 格式化名称
$carr['itm_desc'] = parse_info_desc($carr['itm'],'m');
// 格式化类别
$carr['itmk_desc'] = parse_info_desc($carr['itmk'],'k');
// 合并显示类
$carr['result'] = $carr['itmk_desc'].'/'.$carr['itme'].'/'.$carr['itms'];
// 格式化属性
if(!empty($carr['itmsk']))
{
$carr['itmsk'] = get_itmsk_array($carr['itmsk']);
$carr['itmsk_desc'] = parse_info_desc($carr['itmsk'],'sk',$carr['itmk']);
$carr['result'] .= '/'.$carr['itmsk_desc'];
}
return $carr;
}
# 从数据库中读取全部或指定待审核配方文件
function get_queue_vnmix_list($id=NULL)
{
global $db,$tablepre;
if(isset($id))
{
$id = (int)$id;
$result = $db->query("SELECT * FROM {$tablepre}vnmixitem WHERE iid={$id}");
if($db->num_rows($result))
{
return $db->fetch_array($result);
}
}
else
{
$result = $db->query("SELECT * FROM {$tablepre}vnmixitem ");
if($db->num_rows($result))
{
while($t = $db->fetch_array($result,MYSQLI_ASSOC))
{
$carr[$t['iid']] = $t;
unset($carr[$t['iid']]['iid']);
}
return $carr;
}
}
return;
}
# 检查指定配方id是否存在
function check_exists_queue_vnmix($id,$name,$gmflag=0)
{
$varr = get_queue_vnmix_list($id);
if(empty($varr)) return '<span class="red">错误:该配方不存在!<br>';
if(empty($gmflag) && $name != $varr['creator']) '<span class="red">错误:你没有权限编辑别人的配方!<br>';
return $varr;
}
# 检查配方内容合法性
function check_post_queue_vmix(&$arr,$gmflag=0)
{
include config('vnworld',$gamecfg);
# 检查合成素材
$snums = 0;
for($i=0;$i<5;$i++)
{
if(!empty($arr['stf'.$i]))
{
$flag = check_post_queue_vitm($arr['stf'.$i],1);
if($flag) return $flag;
$snums ++;
}
}
if($snums<2 || $snums>5) return "合成素材数量非法,需要2-5种合成素材。<br>";
# 检查配方道具名
$flag = check_post_queue_vitm($arr['itm']);
if($flag) return $flag;
# 检查道具用途
$flag = check_post_queue_vitmk($arr['itmk'],$gmflag);
if($flag) return $flag;
# 检查道具效果
$flag = check_post_queue_vitme($arr['itme']);
if($flag) return $flag;
# 检查道具耐久
$flag = check_post_queue_vitms($arr['itms']);
if($flag) return $flag;
# 检查道具属性
if(!empty($arr['itmsk']))
{
$tmp_sk = get_itmsk_array($arr['itmsk']);
if(count($tmp_sk)>$vnmix_max_sk) return "合成结果最多只能拥有{$vnmix_max_sk}种属性。<br>";
foreach($tmp_sk as $sk)
{
$flag = check_post_queue_vitmsk($sk,$gmflag);
if($flag) return $flag;
}
}
return;
}
# 检查配方道具名
function check_post_queue_vitm(&$itm,$stf=0)
{
//检查道具名
$itm = preg_replace('/[,\#;\p{Cc}]+|锋利的|电气|毒性|[\r\n]|-改|<|>|\"/u','',$itm);
$itm = preg_replace('/^\s+|\s+$/m', '',$itm);
if(!$stf && !$itm)
{
$vlog .= '<span class="red">错误:道具名不能为空。</span><br>';
return $vlog;
}
if(mb_strlen($itm,'utf-8')>40)
{
$vlog .= '<span class="red">错误:道具名长度超过了40个字符。</span><br>';
return $vlog;
}
return;
}
# 检查道具用途
function check_post_queue_vitmk(&$itmk,$gmflag=0)
{
include config('vnworld',$gamecfg);
$temp_vn_iteminfo = $gmflag ? $vn_iteminfo+$vn_gm_iteminfo : $vn_iteminfo;
if(!isset($itmk) || !isset($temp_vn_iteminfo[$itmk]))
{
$vlog = '<span class="red">错误:输入了无效的道具用途。</span><br>';
return $vlog;
}
return;
}
# 检查道具效果
function check_post_queue_vitme(&$itme)
{
//检查道具效果、耐久
if($itme<1 || $itme>16777214)
{
$vlog = '<span class="red">错误:输入了无效的道具效果(道具效果范围:1~16777214)。</span><br>';
return $vlog;
}
return;
}
# 检查道具耐久
function check_post_queue_vitms(&$itms)
{
global $nosta;
//检查道具耐久
if($itms<0 || $itms>65535)
{
$vlog = '<span class="red">错误:输入了无效的道具耐久(道具耐久范围:0~65535)。</span><br>';
return $vlog;
}
if($itms == 0) $itms = $nosta;
return;
}
# 检查道具属性
function check_post_queue_vitmsk($sk,$gmflag=0)
{
include config('vnworld',$gamecfg);
$temp_vn_itemspkinfo = $gmflag ? $vn_itemspkinfo+$vn_gm_itemspkinfo : $vn_itemspkinfo;
if(!isset($temp_vn_itemspkinfo[$sk]))
{
$vlog = "<span class='red'>错误:选择了无效的道具属性{$sk}。</span><br>";
return $vlog;
}
return;
}
# 审核通过,将配方写入配方文件
function writeover_vn_mixilst($varr=Array())
{
global $checkstr,$gamecfg;
$cache_file = config('vnmixitem',$gamecfg);
if(file_exists($cache_file)) include $cache_file;
else $vn_mixinfo = Array();
# 将未审批配方格式化
$narr = Array();
$narr['class'] = isset($varr['class']) ? $varr['class'] : 'item';
foreach($varr as $key => $arr)
{
if(strpos($key,'stf')!==false)
{
$id = str_replace("stf","",$key);
if(!empty($arr)) $narr['stuff'][$id] = $arr;
}
elseif(strpos($key,'itm')!==false)
{
if($key == 'itm') $narr['result'][0] = $arr;
if($key == 'itmk') $narr['result'][1] = $arr;
if($key == 'itme') $narr['result'][2] = $arr;
if($key == 'itms') $narr['result'][3] = $arr;
if($key == 'itmsk') $narr['result'][4] = $arr;
}
else
{
$narr[$key] = $arr;
}
}
$narr['name'] = $varr['creator'];
unset($narr['iid']); unset($narr['creator']); unset($narr['istatus']);
# 向本地配方表中加入配方
$vn_mixinfo[]=$narr;
sort($vn_mixinfo);
global $checkstr;
$cont = str_replace('?>','',str_replace('<?','<?php',$checkstr));
$cont .= '$vn_mixinfo = ' . var_export($vn_mixinfo,1).";\r\n?>";
file_put_contents($cache_file,$cont,LOCK_EX);
return;
}
# 修改本地配方文件
function edit_vn_mixilst($varr,$t)
{
global $checkstr,$gamecfg;
//先加锁
$lock_file = GAME_ROOT.'./gamedata/bak/vnmix2.lock';
if(file_exists($lock_file))
{
return '有其他管理员正在进行编辑操作,请稍等一会儿再试!';
}
else
{
$cache_file = config('vnmixitem',$gamecfg);
if(file_exists($cache_file))
{
//加锁
writeover($lock_file,' ');
include_once($cache_file);
global $vn_mixinfo;
}
else
{
return '合成配方文件不存在!不能进行编辑操作。';
}
}
if($varr==='del' && isset($vn_mixinfo[$t]))
{
$varr = $vn_mixinfo[$t];
$varr['status'] = 0;
unset($vn_mixinfo[$t]);
}
sort($vn_mixinfo);
global $checkstr;
$cont = str_replace('?>','',str_replace('<?','<?php',$checkstr));
$cont .= '$vn_mixinfo = ' . var_export($vn_mixinfo,1).";\r\n?>";
file_put_contents($cache_file,$cont,LOCK_EX);
//writeover($cache_file, $cont);
//chmod($cache_file,0777);
unlink($lock_file);
return $varr;
}
function vn_adminlog($op,$an1='',$an2='',$an3=''){
global $now,$cuser;
$alfile = GAME_ROOT.'./gamedata/adminlog.php';
if($op){
$aldata = "$now,$cuser,$op,$an1,$an2,$an3,\n";
writeover($alfile,$aldata,'ab+');
}
return;
}
?>
......@@ -3,35 +3,36 @@
<input type="hidden" id="vncmd" name="vncmd" value="none">
<span class="grey">(回退操作可能存在延迟,如果提交了指令后界面没有变化,请等一会儿再刷新看看。)</span><br>
<!--{if !empty($temp_mixinfo)}-->
<table class="admin">
<tr>
<th width="100px"><span>提交者</span></th>
<th width="60px"><span>道具分组</span></th>
<th><span>$stuff_tips[0]</span></th>
<th><span>$stuff_tips[1]</span></th>
<th><span>$stuff_tips[2]</span></th>
<th><span>$stuff_tips[3]</span></th>
<th><span>$stuff_tips[4]</span></th>
<th width="25px"><span></span></th>
<th><span>$result_tips[0]</span></th>
<th width="45px">调整<span></span></th>
<table class="admin" cellSpacing=1 cellPadding=4>
<tr style="text-align: center;">
<th class="b1" width="100px"><span>{lang vcreator}</span></th>
<th class="b1"><span>{lang vstatus}</span></th>
<th class="b1"><span>{lang stf0}</span></th>
<th class="b1"><span>{lang stf1}</span></th>
<th class="b1"><span>{lang stf2}</span></th>
<th class="b1"><span>{lang stf3}</span></th>
<th class="b1"><span>{lang stf4}</span></th>
<th class="b1" width="25px"><span></span></th>
<th class="b1" style="padding-left: 2px; padding-right: 2px;">{lang vitm}</th>
<th class="b1" style="padding-left: 3px; padding-right: 3px;">{lang vitmsk}</th>
<th class="b1" width="45px">{lang veback}<span></span></th>
</tr>
<!--{loop $temp_mixinfo $key $arr}-->
<tr>
<td style="text-align: center;">$arr['name']</td>
<td style="text-align: center;">$vrclassinfo[$arr['class']][0]</td>
<td style="text-align: center;"><!--{if isset($arr['stuff'][0])}-->$arr['stuff'][0]<!--{else}-->-<!--{/if}--></td>
<td style="text-align: center;"><!--{if isset($arr['stuff'][1])}-->$arr['stuff'][1]<!--{else}-->-<!--{/if}--></span></td>
<td style="text-align: center;"><!--{if isset($arr['stuff'][2])}-->$arr['stuff'][2]<!--{else}-->-<!--{/if}--></span></td>
<td style="text-align: center;"><!--{if isset($arr['stuff'][3])}-->$arr['stuff'][3]<!--{else}-->-<!--{/if}--></span></td>
<td style="text-align: center;"><!--{if isset($arr['stuff'][4])}-->$arr['stuff'][4]<!--{else}-->-<!--{/if}--></td>
<td style="text-align: center;"></td>
<td style="text-align: center;">$arr['result'][0]/$arr['result'][1]/$arr['result'][2]/$arr['result'][3]<!--{if isset($arr['result'][4])}-->/$arr['result'][4]<!--{/if}--></td>
<td style="text-align: center;">
<!--<input type="submit" value="编辑" onclick="$('vncmd').value='edit_$key'">-->
<input type="submit" value="回退" onclick="$('vncmd').value='del_$key'">
</td>
</tr>
<tr>
<td class="b3">$arr['name']</td>
<td class="b3">$vrclassinfo[$arr['class']][0]</td>
<td class="b3" style="max-width:60px">$arr['stuff'][0]</td>
<td class="b3" style="max-width:60px">$arr['stuff'][1]</td>
<td class="b3" style="max-width:60px">$arr['stuff'][2]</td>
<td class="b3" style="max-width:60px">$arr['stuff'][3]</td>
<td class="b3" style="max-width:60px">$arr['stuff'][4]</td>
<td class="b3"></td>
<td class="b3">$arr['result'][0]</td>
<td class="b3" style="max-width:200px">$arr['result'][1]/$arr['result'][2]/$arr['result'][3]<!--{if !empty($arr['result'][4])}-->/$arr['result'][4]<!--{/if}--></td>
<td class="b3" style="text-align:center;">
<input type="submit" value="回退" onclick="$('vncmd').value='del_$key'">
</td>
</tr>
<!--{/loop}-->
</table>
<!--{else}-->
......
......@@ -15,7 +15,7 @@
<span class="skilldesc">
<span tooltip="满足条件时自动触发" class="gold">【被动技】</span>
选择任一单体减半防御属性,你视为具有它。<br>
当前选择是:<span class="yellow b"><!--{if !empty($nchoice)}-->$itemspkinfo[$nchoice]<!--{else}--><!--{/if}--></span>
当前选择是:<span class="yellow"><!--{if !empty($nchoice)}-->$itemspkinfo[$nchoice]<!--{else}--><!--{/if}--></span>
&nbsp;
变更选择为:
<select name="upgpara" id="upgpara" onchange="$('mode').value='revskpts';$('command').value='upgskill_c1_veteran';postCmd('gamecmd','command.php');this.disabled=true;">
......@@ -40,12 +40,15 @@
</tr>
</table>
<!--{if $unlock_c1_veteran_flag}-->
<!--{eval $unlock_desc = parse_skilllockdesc('c1_veteran',$unlock_c1_veteran_flag);}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">18级时解锁</span>
<span class="yellow">
$unlock_desc
</span>
</td>
</tr>
</table>
......
<!-- 注意:大部分技能可以直接通过编辑配置文件完成 -->
<!-- 可能的、需要新建模板的情况:你的技能需要在面板内执行比较复杂的、单靠配置文件无法实现的操作 -->
<tr>
<td class="b1" width="40">
<span>{$cskills['c3_enchant']['name']}</span>
</td>
<td>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
<!--{eval $unlock_c3_enchant_flag = check_skill_unlock('c3_enchant',$uidata);}-->
<!--{if $unlock_c3_enchant_flag}-->
<div style="position:relative; height:100%; width:100%;" onmouseover="skill_unacquired_mouseover.call(this,event)" onmouseout="skill_unacquired_mouseout.call(this,event)">
<div class="skill_unacquired">
<!--{/if}-->
<!-- ↑↑↑ 存在解锁条件的技能才需要有这一部分 ↑↑↑ -->
<table class="skilltable">
<tr>
<td class="skilldesc_left b3">
<span class="skilldesc">
<!-- 技能介绍,自己填任意内容或使用下面的方式 -->
<!--{eval $c3_enchant_desc = parse_skilldesc('c3_enchant',$uidata);}-->
{$c3_enchant_desc}
<span style="height:4px; display:block;">&nbsp;</span>
......@@ -35,17 +30,15 @@
</td>
</tr>
</table>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
<!--{if $unlock_c3_enchant_flag}-->
<!--{eval $unlock_desc = parse_skilllockdesc('c3_enchant',$unlock_c3_enchant_flag);}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
<!-- 未满足解锁条件时显示的文本,自己填或使用下面的方式 -->
<!--{eval $c3_enchant_lockdesc = $cskills['c3_enchant']['lockdesc'][$unlock_c3_enchant_flag];}-->
$c3_enchant_lockdesc
$unlock_desc
</span>
</td>
</tr>
......@@ -53,6 +46,5 @@
</div>
</div>
<!--{/if}-->
<!-- ↑↑↑ 存在解锁条件的技能才需要有这一部分 ↑↑↑ -->
</td>
</tr>
\ No newline at end of file
......@@ -26,14 +26,14 @@
</tr>
</table>
<!--{if $unlock_c4_roar_flag}-->
<!--{eval $unlock_desc = parse_skilllockdesc('c4_roar',$unlock_c4_roar_flag);}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
<!--{eval $c4_roar_lockdesc = $cskills['c4_roar']['lockdesc'][$unlock_c4_roar_flag];}-->
$c4_roar_lockdesc
$unlock_desc
</span>
</td>
<!--{if !empty($unlock_c4_roar_flag) && $unlock_c4_roar_flag == 'skillpara|c4_roar-active'}-->
......
......@@ -26,14 +26,14 @@
</tr>
</table>
<!--{if $unlock_c4_sniper_flag}-->
<!--{eval $unlock_desc = parse_skilllockdesc('c4_sniper',$unlock_c4_sniper_flag);}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
<!--{eval $c4_sniper_lockdesc = $cskills['c4_sniper']['lockdesc'][$unlock_c4_sniper_flag];}-->
$c4_sniper_lockdesc
$unlock_desc
</span>
</td>
<!--{if !empty($unlock_c4_sniper_flag) && $unlock_c4_sniper_flag == 'skillpara|c4_sniper-active'}-->
......
......@@ -45,13 +45,15 @@
</tr>
</table>
<!--{if $unlock_skid_flag}-->
<!--{eval $unlock_desc = parse_skilllockdesc($skid,$unlock_skid_flag);}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<!--{eval $skid_lockdesc = $cskill['lockdesc'][$unlock_skid_flag];}-->
<span class="yellow">$skid_lockdesc</span>
<span class="yellow">
$unlock_desc
</span>
</td>
</tr>
</table>
......
<!-- 注意:大部分技能可以直接通过编辑配置文件完成 -->
<!-- 可能的、需要新建模板的情况:你的技能需要在面板内执行比较复杂的、单靠配置文件无法实现的操作 -->
<!--{eval $cskill = $cskills[$skid];}-->
<!--{if isset($cskill['maxlvl'])}-->
<!--{eval $now_clvl = get_skilllvl($skid,$uidata); $max_lvl_flag = $now_clvl >= $cskill['maxlvl'] ? 1 : 0;}-->
......@@ -11,13 +9,11 @@
<span>{$cskill['name']}</span>
</td>
<td>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
<!--{eval $unlock_flag = check_skill_unlock($skid,$uidata);}-->
<!--{if $unlock_flag}-->
<div style="position:relative; height:100%; width:100%;" onmouseover="skill_unacquired_mouseover.call(this,event)" onmouseout="skill_unacquired_mouseout.call(this,event)">
<div class="skill_unacquired">
<!--{/if}-->
<!-- ↑↑↑ 存在解锁条件的技能才需要有这一部分 ↑↑↑ -->
<table class="skilltable">
<tr>
<td class="skilldesc_left b3">
......@@ -36,20 +32,15 @@
</td>
</tr>
</table>
<!-- ↓↓↓ 存在解锁条件的技能才需要有这一部分 ↓↓↓ -->
<!--{if $unlock_flag}-->
<!--{eval $unlock_desc = parse_skilllockdesc($skid,$unlock_flag);}-->
</div>
<div class="skill_unacquired_hint">
<table class="skilltable">
<tr>
<td valign="center" align="center">
<span class="yellow">
<!-- 未满足解锁条件时显示的文本,自己填或使用下面的方式 -->
<!--{if is_array($unlock_flag)}-->
<!--{eval $unlock_cd = $unlock_flag[1]; $unlock_flag = $unlock_flag[0]; $unlock_flag = str_replace("[:cd:]","$unlock_cd",$unlock_flag);}-->
<!--{/if}-->
<!--{eval $unlock_flag = is_array($cskill['lockdesc']) ? $cskill['lockdesc'][$unlock_flag] : $cskill['lockdesc']; $unlock_flag = isset($unlock_cd) ? str_replace("[:cd:]","$unlock_cd",$unlock_flag) : $unlock_flag;}-->
$unlock_flag
$unlock_desc
</span>
</td>
</tr>
......@@ -57,6 +48,5 @@
</div>
</div>
<!--{/if}-->
<!-- ↑↑↑ 存在解锁条件的技能才需要有这一部分 ↑↑↑ -->
</td>
</tr>
\ No newline at end of file
......@@ -84,7 +84,27 @@ $language = array
'tutorial' => '游戏教程',
'enterturorial' => '观看游戏教程',
'nexttutorial' => '下一篇教程',
# vnworld
'vcreator' => '作者',
'vstatus' => '提交状态',
'viclass' => '道具分组',
'stf0' => '合成材料一',
'stf1' => '合成材料二',
'stf2' => '合成材料三',
'stf3' => '合成材料四',
'stf4' => '合成材料五',
'stf5' => '合成材料六',
'vitm' => '合成结果',
'vitmk' => '道具用途',
'vitme' => '道具效果',
'vitms' => '道具耐久',
'vitmsk' => '物品属性',
'veitmsk' => '编辑物品属性',
'vedit' => '编辑',
'veback' => '回退',
# in-game
'name' => '姓名',
'gender' => '性别',
'icon' => '头像',
......
This diff is collapsed.
......@@ -6,42 +6,45 @@
<span class="grey">(提交合成可能存在延迟,如果发现页面上没有显示,请等一会儿再刷新看看。)</span><br>
<a href="vn_postitem.php"><input type="button" value="创建一个新的合成"></a>
<br><br>
<!--{if !empty($temp_carr)}-->
<table>
<!--{if !empty($carr)}-->
<table cellSpacing=3 cellPadding=2>
<tr>
<td class="b1" height=20px width="100px">$log_tips[1]</td>
<td class="b1" width="60px">$result_tips[9]</td>
<td class="b1" width="100px">$stuff_tips[0]</td>
<td class="b1" width="100px">$stuff_tips[1]</td>
<td class="b1" width="100px">$stuff_tips[2]</td>
<td class="b1" width="100px">$stuff_tips[3]</td>
<td class="b1" width="100px">$stuff_tips[4]</td>
<td class="b1" height=20px width="100px">{lang vcreator}</td>
<td class="b1">{lang vstatus}</td>
<td class="b1" width="60px">{lang viclass}</td>
<td class="b1">{lang stf0}</td>
<td class="b1">{lang stf1}</td>
<td class="b1">{lang stf2}</td>
<td class="b1">{lang stf3}</td>
<td class="b1">{lang stf4}</td>
<td class="b1" width="25px"></td>
<td class="b1" style="padding-left: 5px; padding-right: 5px;">$result_tips[0]</td>
<td class="b1" style="padding-left: 2px; padding-right: 2px;">{lang vitm}</td>
<td class="b1" style="padding-left: 3px; padding-right: 3px;">{lang vitmsk}</td>
<td class="b1" width="45px">编辑</td>
<td class="b1">$log_tips[2]</td>
</tr>
<!--{loop $temp_carr $cid $cinfo}-->
<!--{loop $carr $cid $cinfo}-->
<tr>
<td class="b3">$cinfo['name']</td>
<td class="b3"><!--{if isset($cinfo['stuff'][0])}-->$vrclassinfo[$cinfo['class']][0]<!--{else}-->$vrclassinfo['item'][0]<!--{/if}--></td>
<td class="b3"><!--{if isset($cinfo['stuff'][0])}-->$cinfo['stuff'][0]<!--{else}-->-<!--{/if}--></td>
<td class="b3"><!--{if isset($cinfo['stuff'][1])}-->$cinfo['stuff'][1]<!--{else}-->-<!--{/if}--></td>
<td class="b3"><!--{if isset($cinfo['stuff'][2])}-->$cinfo['stuff'][2]<!--{else}-->-<!--{/if}--></td>
<td class="b3"><!--{if isset($cinfo['stuff'][3])}-->$cinfo['stuff'][3]<!--{else}-->-<!--{/if}--></td>
<td class="b3"><!--{if isset($cinfo['stuff'][4])}-->$cinfo['stuff'][4]<!--{else}-->-<!--{/if}--></td>
<td class="b3">$cinfo['creator']</td>
<td class="b3">$check_tips[$cinfo['istatus']]</td>
<td class="b3">$vrclassinfo[$cinfo['class']][0]</td>
<td class="b3" style="max-width:100px">$cinfo['stf0']</td>
<td class="b3" style="max-width:100px">$cinfo['stf1']</td>
<td class="b3" style="max-width:100px">$cinfo['stf2']</td>
<td class="b3" style="max-width:100px">$cinfo['stf3']</td>
<td class="b3" style="max-width:100px">$cinfo['stf4']</td>
<td class="b3"></td>
<td class="b3">$cinfo['result'][0]</td>
<td class="b3" >$cinfo['itm_desc']</td>
<td class="b3" style="max-width:200px">$cinfo['result']</td>
<td class="b3">
<!--{if ($cinfo['name']==$udata['username']||$udata['groupid']>=$vnmix_editor_group||$udata['username']==$gamefounder) && $cinfo['status']!=1}-->
<!--{if ($cinfo['creator']==$udata['username']||$udata['groupid']>=$vnmix_editor_group||$udata['username']==$gamefounder) && $cinfo['istatus']!=1}-->
<form method="post" action="vn_postitem.php" name="vn_postitem" onsubmit="vn_postitem.php" style="margin: 0px">
<input type="hidden" name="editor" value="$cinfo['name']">
<input type="hidden" name="editor" value="$cuser">
<input type="hidden" name="editid" value="$cid">
<input type="submit" name="vnmode" value="编辑">
</form>
<!--{/if}-->
</td>
<td class="b3">$check_tips[$cinfo['status']]</td>
</tr>
<!--{/loop}-->
</table>
......
This diff is collapsed.
<?php
define('CURSCRIPT', 'dbup');
require './include/common.inc.php';
if(!$cuser||!$cpass) { gexit($_ERROR['no_login'],__file__,__line__); }
$result = $db->query("SELECT * FROM {$tablepre}users WHERE username='$cuser'");
if(!$db->num_rows($result)) { gexit($_ERROR['login_check'],__file__,__line__); }
$udata = $db->fetch_array($result);
if($udata['password'] != $cpass) { gexit($_ERROR['wrong_pw'], __file__, __line__); }
elseif(($udata['groupid'] <= 1)&&($cuser!==$gamefounder)) { gexit($_ERROR['no_admin'], __file__, __line__); }
$query = $db->query("SHOW TABLES LIKE '{$tablepre}vnmixitem'", 'SILENT');
//print_r($query);
if(!$db->num_rows($query))
{
$sqldir = GAME_ROOT.'./gamedata/sql/';
$sql = file_get_contents("{$sqldir}vnworld.sql");
$sql = str_replace("\r", "\n", str_replace('bra_', ' '.$tablepre, $sql));
$db->queries($sql);
echo "Mysql Update Fish.<br>";
}
else
{
echo "No Update.<br>";
}
$vcdir = config('queue_vnmixitem',1);
if(file_exists($vcdir))
{
include $vcdir;
foreach($carr as $key => $arr)
{
$vr = Array();
$vr['class'] = $arr['class'] ?: 'item';
$vr['istatus'] = $arr['status'];
$vr['creator'] = $arr['name'];
for($i=0;$i<5;$i++)
{
$vr['stf'.$i] = $arr['stuff'][$i] ?: '';
}
$vr['itm'] = $arr['result'][0] ?: '';
$vr['itmk'] = $arr['result'][1] ?: '';
$vr['itme'] = $arr['result'][2] ?: '';
$vr['itms'] = $arr['result'][3] ?: '';
$vr['itmsk'] = $arr['result'][4] ? implode('',$arr['result'][4]) : '';
$db->array_insert("{$tablepre}vnmixitem",$vr);
}
echo "Old data clear.<br>";
}
?>
\ No newline at end of file
......@@ -20,51 +20,21 @@ if($udata['groupid'] <= 0) { gexit($_ERROR['user_ban'], __file__, __line__); }
$vtips = isset($_GET['vtips']) ? $check_infos[$_GET['vtips']] : '';
if(!isset($vnmode)){$vnmode = 'none';}
global $gamefounder;
global $gamefounder;
if($vnmode=='none')
{
//读取提交过的历史记录。
$cache_file = config('queue_vnmixitem',$gamecfg);
if(file_exists($cache_file))
include_once GAME_ROOT.'./include/vnworld/vnmix.func.php';
$carr = get_queue_vnmix_list();
if(!empty($carr))
{
$temp_vniteminfo = $vn_iteminfo + $vn_gm_iteminfo;
require($cache_file);
if(isset($carr))
foreach($carr as $cid => $cinfo)
{
$temp_carr = $carr;
foreach($temp_carr as $cid => $cinfo)
$carr[$cid] = parse_queue_vnmix_info($cinfo);
for($i=0;$i<5;$i++)
{
// 格式化素材来源
foreach($cinfo['stuff'] as $sid => $snm)
{
include_once config('npc',$gamecfg);
include_once config('addnpc',$gamecfg);
include_once config('evonpc',$gamecfg);
$tooltipinfo = get_item_place($snm);
if(!empty($tooltipinfo))
{
$temp_carr[$cid]['stuff'][$sid] = "<span tooltip=\"".$tooltipinfo."\">".$snm."</span>";
}
$tooltipinfo = '';
}
// 格式化名称
$cinfo['result'][0] = parse_info_desc($cinfo['result'][0],'m');
// 格式化类别
$cinfo['result'][1] = parse_info_desc($cinfo['result'][1],'k');
// 格式化属性
if(isset($cinfo['result'][4]) && is_array($cinfo['result'][4]))
{
$temp_carr[$cid]['spkinfo'] = parse_info_desc($cinfo['result'][4],'sk',$cinfo['result'][1]);
/*foreach($cinfo['result'][4] as $sk)
{
if(!empty($temp_carr[$cid]['spkinfo'])) $temp_carr[$cid]['spkinfo'] .= '+'.parse_itm_desc($sk,'sk');
else $temp_carr[$cid]['spkinfo'] = parse_info_desc($sk,'sk');
}*/
}
// 汇总合成结果至一段内
$temp_carr[$cid]['result'][0] = $cinfo['result'][0].'/'.$cinfo['result'][1].'/'.$cinfo['result'][2].'/'.$cinfo['result'][3];
if(isset($temp_carr[$cid]['spkinfo'])) $temp_carr[$cid]['result'][0].='/'.$temp_carr[$cid]['spkinfo'];
if(empty($carr[$cid]['stf'.$i])) $carr[$cid]['stf'.$i] = "<span class='grey'>-</span>";
}
}
}
......
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