Commit ef2bdbfc authored by hisuinohoshi's avatar hisuinohoshi

Elements

update:{elementmix.func.php,elementmix.htm,elementmix_1.php}
change:{command.php,item.func.php,news.func.php,js}
为元素合成添加了一些大成功、大失败事件;
添加了固定、随机配方,理论上来说可以不开小号单人完成任一流程;
为提示纸条增加了一些元素大师可以看到的额外tips,当然捡纸条主要作用是解锁配方;
但是现在配方只能靠脑子或者场外工具记,不知道有没有闲置的player表字段能让我循环利用一下存一下玩家获得的配方。
TODO:除了记忆配方以外,剩下的一个是慢慢磨平衡性,一个是装备生成的属性太多会让界面变得很丑……呃啊,要想想。
parent 26dc1695
...@@ -126,7 +126,6 @@ if($hp > 0){ ...@@ -126,7 +126,6 @@ if($hp > 0){
$mode = 'rest'; $mode = 'rest';
} }
} elseif($command == 'itemmain') { } elseif($command == 'itemmain') {
//保险起见 在这里检测下两种伪造提交情况 比较丑陋!
if(($club == 20 && $itemcmd == 'itemmix') || ($club != 20 && ($itemcmd == 'elementmix' || $itemcmd == 'elementbag'))) if(($club == 20 && $itemcmd == 'itemmix') || ($club != 20 && ($itemcmd == 'elementmix' || $itemcmd == 'elementbag')))
{ {
$log .= "你的手突然掐住了你的头左右摇摆!<br><span class='yellow'>“你还想要干什么,啊?你还想要干什么!!”</span><br>看来你的手和脑子之间起了一点小摩擦。<br><br>"; $log .= "你的手突然掐住了你的头左右摇摆!<br><span class='yellow'>“你还想要干什么,啊?你还想要干什么!!”</span><br>看来你的手和脑子之间起了一点小摩擦。<br><br>";
...@@ -136,8 +135,10 @@ if($hp > 0){ ...@@ -136,8 +135,10 @@ if($hp > 0){
{ {
if($club == 20) if($club == 20)
{ {
global $elements_info;
include_once GAME_ROOT.'./include/game/elementmix.func.php'; include_once GAME_ROOT.'./include/game/elementmix.func.php';
$emax = get_emix_itme_max(); $emax = get_emix_itme_max();
foreach($elements_info as $e_key=>$e_info) ${'etaginfo'.$e_key} ="<span title=\"".print_elements_tags($e_key)."\">";
} }
$mode = $itemcmd; $mode = $itemcmd;
} }
...@@ -306,9 +307,9 @@ if($hp > 0){ ...@@ -306,9 +307,9 @@ if($hp > 0){
foreach($elements_info as $e_key=>$e_info) foreach($elements_info as $e_key=>$e_info)
{ {
global ${'element'.$e_key}; global ${'element'.$e_key};
//偷个懒 只对合法参数进行判断 非法参数就不额外判断发log了…… $m_e_key = $e_key + 1;//这样就不用污染原本的js了
${'emitm'.$e_key.'_num'} = round( ${'emitm'.$e_key.'_num'}); ${'emitm'.$e_key.'_num'} = round( ${'emitm'.$e_key.'_num'});
if(${'element'.$e_key} && ${'emitm'.$e_key}>=0 && ${'emitm'.$e_key.'_num'}>0 && ${'emitm'.$e_key.'_num'}<=${'element'.$e_key}) if(${'mitm'.$m_e_key}>=0 && ${'element'.$e_key} && ${'emitm'.$e_key.'_num'}>0 && ${'emitm'.$e_key.'_num'}<=${'element'.$e_key})
{ {
//打入参与合成的元素编号与数量 //打入参与合成的元素编号与数量
$e_mixlist[$e_key] = ${'emitm'.$e_key.'_num'}; $e_mixlist[$e_key] = ${'emitm'.$e_key.'_num'};
...@@ -316,8 +317,8 @@ if($hp > 0){ ...@@ -316,8 +317,8 @@ if($hp > 0){
} }
if(count($e_mixlist)>0) if(count($e_mixlist)>0)
{ {
if($lvl>=5 && $emitme_r) $er = $emitme_r; $er = ($lvl>=15 && $emitme_r && $change_emr==1) ? $emitme_r : NULL;
if($lvl>=15 && $emitme_max_r) $emr = $emitme_max_r; $emr = ($lvl>=5 && $emitme_max_r && $change_emax==1) ? $emitme_max_r : NULL;
include_once GAME_ROOT.'./include/game/elementmix.func.php'; include_once GAME_ROOT.'./include/game/elementmix.func.php';
element_mix($e_mixlist,$emr,$er); element_mix($e_mixlist,$emr,$er);
} }
......
...@@ -4,9 +4,15 @@ ...@@ -4,9 +4,15 @@
/********元素大师配置文件********/ /********元素大师配置文件********/
//wo bei global gaofengle, shui neng jiujiu wo... //wei shenme hui zheyang ne....
//你怎么回事 搞特殊化? global $no_type_to_e_list,$no_itm_to_e_list,$no_itmk_to_e_list,$no_itmsk_to_e_list,$no_emix_circulation;
global $corpse_to_e_lvl_r; global $split_itm_fix,$split_spitm_fix,$split_spcorpse_fix;
global $split_corpse_lvl_r,$split_default_itmk_r,$split_itmk_r,$split_default_itmsk_fix,$split_itmsk_fix;
global $temp_etags;
global $max_emix_itme_start,$max_emix_itme_up;
global $emix_list,$random_emix_list,$dommix_list,$submix_list,$random_submix_list,$itmk_to_itmsk_tags;
global $emix_luck_info,$emix_tips_arr,$emix_name_brackets_arr,$emix_name_prefix_arr,$emix_name_meta_arr,$emix_name_tail_arr;
global $emix_slip;
//过滤选项: //过滤选项:
//不可以被拆解的NPC类型 //不可以被拆解的NPC类型
...@@ -25,128 +31,112 @@ ...@@ -25,128 +31,112 @@
//$enable_emix_research_mode = 0; //$enable_emix_research_mode = 0;
/********拆解相关配置********/ /********拆解相关配置********/
//系数: //定值:(顺序:优先判定全词匹配→之后判定关键词匹配)
//拆解的对象等级与获得元素的数量关系(默认:等级*1) 什么,小兵竟然有30级!? //拆解【特定道具】(全词匹配) 固定会获得的元素、数量
$corpse_to_e_lvl_r = 1; $split_itm_fix = Array
//拆解【特定道具】(全词匹配)时 固定会获得的元素、数量 (
//应该还有一些拆掉会触发别的事件的道具,这个特事特判吧 /*** 秘钥分解 ***/
$itm_to_e_fix = Array //分解冰炎钥匙 获得 随机配方_2 的第 0,1 条素材
'冰炎钥匙·冰' => 'r_2-0',
'冰炎钥匙·炎' => 'r_2-1',
//分解三女主歌词卡 获得 随机配方_3 的第 0,1,2 条素材
'歌词卡片【海洋】' => 'r_3-0',
'歌词卡片【大地】' => 'r_3-1',
'歌词卡片【星空】' => 'r_3-2',
//分解黑色碎片、十字发卡 获得 随机配方_4 的第 0,1 条素材
'黑色碎片' => 'r_4-0',
'十字发卡' => 'r_4-1',
//分解琉璃血 获得随机配方_5 的第 1 条素材
'琉璃血' => 'r_5-1',
/*** 道具分解 ***/
'◆火之碎片' => Array(0=>77,1=>77,2=>77,3=>77,4=>77,5=>77), //全元素+77
'白色方块' => Array(0=>110), //昼闪闪+100
'黑色方块' => Array(5=>110), //夜静静+100
'消音器' => Array(5=>22), //夜静静+22
'打火机' => Array(1=>111), //暖洋洋+111
'树叶' => Array(3=>88), //郁萌萌+88
'毒药' => Array(5=>21), //夜静静+21
'电池' => Array(0=>15,4=>17), //亮晶晶+15、昼闪闪+17
'バカ⑨制冰块' => Array(2=>19,5=>21), //冷冰冰+19、夜静静+21
);
//拆解【特定道具】(关键词匹配,顺序越靠前优先级越高) 固定会获得的元素、数量
$split_spitm_fix = Array
( (
'◆火之碎片' => Array(0=>7,1=>7,2=>7,3=>7,4=>7,5=>7), '宝石方块' => 200, //随机元素+200
'消音器' => Array(5=>21), //拆消音器固定获得21个夜静静 '方块' => 100, //随机元素+100
'打火机' => Array(1=>113), //拆打火机固定获得113个暖洋洋
'树叶' => Array(3=>77), //拆树叶获得77个郁萌萌
'毒药' => Array(5=>21), //拆毒药固定获得21个夜静静
'电池' => Array(0=>15,4=>17), //拆电池获得15个亮晶晶、7个昼闪闪
'バカ⑨制冰块' => Array(2=>19,5=>21), //拆这个东西会获得19个冷冰冰……和21个夜静静……
); );
//拆解【特定道具】(关键词匹配,顺序越靠前优先级越高)时的元素数量修正 //拆解【特定类别NPC尸体】会获得的元素、数量
$itm_to_e_r = Array $split_spcorpse_fix = Array
( (
'宝石方块' => 200, //拆宝石方块获得200倍元素 /*** 秘钥分解 ***/
'方块' => 100, //拆方块获得100倍元素 //分解种火尸体 获得 随机配方_0 的第 r(随机) 条素材
92 => 'r_0-r',
//分解执行官尸体 获得 随机配方_1 的第 0,1,2 条素材
7 => Array('电击使 御坂 美琴'=> 'r_1-0','班主任 坂持 金发'=> 'r_1-1','花之领主 风见 幽香'=> 'r_1-2',),
//分解武神尸体 获得随机配方_5 的第 0 条素材
21 => 'r_5-0',
); );
//哪些类别的道具能参与到上面的道具名特判里,暂时没用
$itm_to_e_r_kfliter = Array(); //系数:
//拆解【特定类别】时 固定会获得的元素、数量 //拆解的对象等级与获得元素的数量关系(默认:等级*1) 什么,小兵竟然有30级!?
//没有特殊标注时,拆解类别对应的元素与元素的主要特征挂钩 $split_corpse_lvl_r = 1;
$itmk_to_e_fix = Array(); //任意【类别】对获取元素数量的系数修正(默认:0.8)(基础的元素数量:道具(效果+耐久)/2 *该系数)
//拆解【特定类别】时获得元素数量的修正系数(默认:1倍)(基础的元素数量:效果+耐久/2 *系数 *浮动) $split_default_itmk_r = 0.8;
$itmk_to_e_r = Array //指定【类别】对获取元素数量的系数修正
$split_itmk_r = Array
( (
//拆解陷阱 //陷阱
'T' => 0.3, 'TN' => 0.3,
//拆解复合武器获得的元素数量x2.5 //(*拆解复合武器 x1.5)
//(*)现在拆解复合武器 会当成2把武器进行判断 'WGK' => 1.5,
'WJ' => 1.5, 'WCF' => 1.5,
//拆解补给品获得的元素数量x0.01 'WCP' => 1.5,
'H' => 0.01, 'WKF' => 1.5,
'HH' => 0.01, 'WKP' => 1.5,
'HS' => 0.01, 'WFK' => 1.5,
'HB' => 0.02, 'WDG' => 1.5,
'P' => 0.04, 'WDF' => 1.5,
//拆解药剂 x10 'WJ' => 1.2,
//补给品x0.05
'HH' => 0.03,
'HS' => 0.03,
'HB' => 0.05,
'PB2' => 0.035,
'PB' => 0.03,
'PH' => 0.02,
'PS' => 0.02,
//药剂 x10
'C' => 10, 'C' => 10,
//拆解强化药物……这也舍得拆? //强化药物……这也舍得拆?
'ME'=> 18, 'ME'=> 18,
'MH'=> 17, 'MH'=> 17,
'M'=> 10, 'M'=> 10,
'V'=> 3, 'V'=> 10,
'VV'=> 5, 'VV'=> 15,
//拆解弹药……这也要拆!? //弹药……这也要拆!?
'GBh' => 5, 'GBh' => 5,
'GBr' => 0.003, 'GBr' => 0.003,
'GBi' => 0.005, 'GBi' => 0.005,
'GBe' => 0.005, 'GBe' => 0.005,
'GB' => 0.004, 'GB' => 0.004,
); );
//拆解【特定属性】时 固定会获得的元素、数量 //单个任意【属性】对标的元素数量(默认:50)
//没有特殊标注时,拆解类别对应的元素与元素的次要特征挂钩 $split_default_itmsk_fix = 50;
$itmsk_to_e_fix = Array(); //特定【属性】对标的元素数量
$split_itmsk_fix = Array
/********合成相关配置********/
//【特征】:每个元素带有若干个【主要特征】与【次要特征】。
//【主要特征】:用于决定合成产物的【类别】,合成时【投入份数最多】的元素会显现其主要特征;
//【次要特征】:用于决定合成产物的【属性】。
//元素特征预设模板(关闭研究模式的情况下,每局游戏内元素的特征依此模板固定。)
$temp_etags = Array
(
//dom => 主要特征(类别) sub => 次要特征(属性)
//max_d(s)_tags => 仅在研究模式开启的情况下生效,用于限定元素随机生成的标签上限
0 => Array('dom' => Array('WP','DH'), 'sub' => Array('e','P','E','x'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //亮晶晶
1 => Array('dom' => Array('WG','HH'), 'sub' => Array('u','G','U','c'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //暖洋洋
2 => Array('dom' => Array('WC','HS'), 'sub' => Array('i','C','I','H'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //冷冰冰
3 => Array('dom' => Array('WK','DB'), 'sub' => Array('p','K','q','z'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //郁萌萌
4 => Array('dom' => Array('WD','DA'), 'sub' => Array('d','D','R','M'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //昼闪闪
5 => Array('dom' => Array('WF','DF'), 'sub' => Array('w','F','W','S'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //夜静静
);
//合成结果-类别:
//主要特征组合配方:合成时存在多个【主要特征】(投入了多种占比最高、且数量相同的元素),依此表检查是否有特殊变化
//obbs:满足条件时有obbs%的概率组合,不设置即为100%组合;random:开启研究模式的情况下,随机为此配方生成random个合成条件。
$emix_dom_mixlist = array
(
Array('stuff'=>Array('WG','WK'),'result'=>'WGK'), //射+斩=枪刃
Array('stuff'=>Array('WC','WF'),'result'=>'WCF'), //投+符=符札
Array('stuff'=>Array('WC','WP'),'result'=>'WCP'), //投+殴=重物
Array('stuff'=>Array('WK','WF'),'result'=>'WKF'), //斩+符=灵刃
Array('stuff'=>Array('WK','WP'),'result'=>'WKP'), //斩+殴=重剑
Array('stuff'=>Array('WF','WK','DA'),'result'=>'WFK'), //符+斩=魔刃……?等等……?只能再加个DA凑数了
Array('stuff'=>Array('WD','WG'),'result'=>'WDG'), //爆+射=巨炮
Array('stuff'=>Array('WD','WF'),'result'=>'WDF'), //爆+符=落魂
Array('stuff'=>Array('HH','HS'),'result'=>'HB'), //回命+回体=命体回复
Array('stuff'=>Array('HH','WF'),'result'=>'HM',), //回命+灵=歌魂增加
Array('stuff'=>Array('HS','WD'),'result'=>'HT'), //回体+爆=歌魂恢复
Array('stuff'=>Array('WG','WG'),'result'=>'WJ','obbs'=>30,), //射+射=重枪(30%概率)
//我认为这里应该有一个配方 可以合出有毒补给或者地雷(
);
//合成结果-效果与耐久:
//效果初始上限值(合成出的道具/装备效果不会超过这个值)
$max_emix_itme_start = 45;
//每1级能够提升的上限值(有浮动,具体计算方法在get_emix_itme_max()内)
$max_emix_itme_up = 29;
//合成时默认的效果/耐久比例(效果*0.55 耐久*(1-0.55))(等级变高后,合成时可以自己控制这一比例)
$default_emix_itme_r = 0.55;
//合成结果-属性:
//默认(未定义)属性价值:合成时投入的元素份数(减去用来生成效果、耐久的部分后)大于此值才有概率生成对应属性。
$emix_sub_tags_default_values = 50;
//属性价值表:不在表内的属性会使用默认的特征价值。
$emix_sub_tags_values = Array
( (
//物理攻击: //物理攻击:
'R' => 11, //馄饨伤害 'R' => 11, //馄饨伤害
'N' => 68, //冲击 'N' => 68, //冲击
'n' => 89, //贯穿 'n' => 89, //贯穿
'r' => 112, //连击 'r' => 144, //连击
//属性攻击: //属性攻击:
'u' => 52, //火焰 'u' => 52, //火焰
'i' => 34, //冻气 'i' => 34, //冻气
'w' => 49, //音波 'w' => 49, //音波
'e' => 39, //带电 'e' => 39, //带电
'p' => 51, //带毒 'p' => 51, //带毒
'd' => 77, //爆炸 'd' => Array('default'=>77,'WD'=>22,'WDG'=>33,'WDF'=>33), //爆炸 出现在爆炸物上时降低价值
'f' => 78, //灼焰 'f' => 78, //灼焰
'k' => 79, //冰华 'k' => 79, //冰华
//物理防御类:14 //物理防御类:14
...@@ -178,38 +168,103 @@ ...@@ -178,38 +168,103 @@
'o' => 66, //一发 'o' => 66, //一发
'z' => 77, //天然 'z' => 77, //天然
'x' => 777, //奇迹 'x' => 777, //奇迹
'Z' => 1, //菁英
); );
//属性价值修正(根据道具类别判断)
$emix_sub_tags_values_fix = Array /********合成相关配置********/
//【特征】:每个元素带有若干个【主要特征】与【次要特征】。
//【主要特征】:用于决定合成产物的【类别】,合成时【投入份数最多】的元素会显现其主要特征。投入单数份元素时提供【第一个主特征】,否则提供【第二个主特征】
//【次要特征】:用于决定合成产物的【属性】。
//元素特征预设模板(关闭研究模式的情况下,每局游戏内元素的特征依此模板固定。)
$temp_etags = Array
( (
'HH' => Array('z'=>-66,), //补给品生成天然属性所需的价值-66……但是为什么呢? //dom => 主要特征(类别) sub => 次要特征(属性)
'HS' => Array('z'=>-66,), //max_d(s)_tags => 仅在研究模式开启的情况下生效,用于限定元素随机生成的标签上限
'WD' => Array('d'=>-40,), //爆系武器生成爆炸属性需要的价值-40 0 => Array('dom' => Array('WD','DF'), 'sub' => Array('d','D','R','z'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //亮晶晶
'WDG' => Array('d'=>-20,), 1 => Array('dom' => Array('WG','DA'), 'sub' => Array('u','G','U','c'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //暖洋洋
'WDF' => Array('d'=>-20,), 2 => Array('dom' => Array('WC','DH'), 'sub' => Array('i','C','I','M'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //冷冰冰
3 => Array('dom' => Array('WK','HS'), 'sub' => Array('p','K','q','H'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //郁萌萌
4 => Array('dom' => Array('WP','HH'), 'sub' => Array('e','P','E','x'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //昼闪闪
5 => Array('dom' => Array('WF','DB'), 'sub' => Array('w','F','W','S'), 'max_d_tags'=>2, 'max_s_tags'=>4,), //夜静静
); );
//次要特征组合配方:将次要特征转化为道具属性时,检查是否满足组合条件。 //合成出的道具效果上限值(0级时):
//两个配方存在重复元素时,排在前面的会优先生成,可能新增条目的时候要注意下顺序……大概?。 $max_emix_itme_start = 45;
$emix_sub_mixlist = array //每等级能够提升的道具效果上限(具体计算方法在get_emix_itme_max()内)
$max_emix_itme_up = 29;
//固定合成配方:投入固定数量元素 输出指定结果
$emix_list = Array
(
//子弹杯里伏特加加冰 兑小可可乐
Array('stuff'=>Array(1=>58,5=>18),'result'=>Array('大卫·马丁内斯','HB',58,18,'p'),),
//UG:投入全种类元素各1份
Array('stuff'=>Array(0=>1,1=>1,2=>1,3=>1,4=>1,5=>1,),'result'=>Array('Untainted Glory','A',1,1,'Z'),),
//仪水镜:投入全种类元素各7份
Array('stuff'=>Array(0=>7,1=>7,2=>7,3=>7,4=>7,5=>7,),'result'=>Array('仪水镜','Y',1,1,),),
);
//随机的固定合成配方(?):需要的素材随机 输出的结果固定 //随机指的是在每局生成临时配置文件时决定 不是完全随机
$random_emix_list = Array
(
//'stuff'=> 键名=>随机元素在数组中的自然排序的位置 键值=> 'r_x-y' 的格式等同于 rand(x,y)
//'class'=>'hidden' 不会被提示纸条揭露的配方
//0.电掣召唤仪:分解种火尸体随机获得:数量分别在1~10、10~20、20~30、30~40、40~50之间的5种不同元素
0 => Array('stuff'=>Array(0=>'r1-10',1=>'r10-20',2=>'r20-30',3=>'r30-40',4=>'r40-50'),'result'=>Array('电掣召唤仪','Y',1,1,)),
//1.游戏解除钥匙(执行官ID卡):分解执行官尸体时依次获得:数量在1000~2000之间的3种不同元素
1 => Array('class'=>'hidden','stuff'=>Array(0=>'r1000-2000',1=>'r1000-2000',2=>'r1000-2000'),'result'=>Array('游戏解除钥匙','Y',1,1,)),
//2.游戏解除钥匙(真红暮):分解冰炎钥匙火·冰时依次获得:数量在10000~99999之间的2种不同元素
2 => Array('class'=>'hidden','stuff'=>Array(0=>'r10000-99999',1=>'r10000-99999'),'result'=>Array('游戏解除钥匙','Y',1,1,)),
//3.破灭之诗:分解三女主歌词卡时依次获得:数量在100~999之间的3种不同元素
3 => Array('class'=>'hidden','stuff'=>Array(0=>'r100-999',1=>'r100-999',2=>'r100-999'),'result'=>Array('破灭之诗','Y',1,1,95)),
//4.黑色发卡:分解黑色碎片、十字发卡时依次获得:数量在500~1000、10000~29999之间的2种不同元素
4 => Array('class'=>'hidden','stuff'=>Array(0=>'r500-1000',1=>'r10000-29999'),'result'=>Array('黑色发卡','X',1,1,)),
//5.『C.H.A.O.S』:分解武神尸体、琉璃血时依次获得:数量在39999~59999、39999~79999之间的2种不同元素
5 => Array('class'=>'hidden','stuff'=>Array(0=>'r39999-59999',1=>'r39999-79999'),'result'=>Array('『C.H.A.O.S』','Y',1,1,)),
//单人脱出系列:大师要有大师风范,不准跑路!
);
//主要特征组合配方:合成时存在多个主要特征,依此表检查是否有特殊变化
//obbs:满足条件时有obbs%的概率组合,不设置即为100%组合;random:开启研究模式的情况下,随机为此配方生成random个合成条件。
$dommix_list = array
( (
Array('stuff'=>Array('e','w','p','c'),'result'=>'n','obbs'=>50), //音+电+毒+重击辅助=贯穿(50%概率) Array('stuff'=>Array('WG','WK'),'result'=>'WGK','obbs'=>77,), //射+斩=枪刃
Array('stuff'=>Array('x','z','o'),'result'=>'Z','obbs'=>7), //奇迹+天然+一发=菁英 Array('stuff'=>Array('WC','WF'),'result'=>'WCF','obbs'=>77,), //投+符=符札
Array('stuff'=>Array('u','i'),'result'=>'d','obbs'=>50), //火+冻=爆炸 Array('stuff'=>Array('WC','WP'),'result'=>'WCP','obbs'=>77,), //投+殴=重物
Array('stuff'=>Array('i','e'),'result'=>'d','obbs'=>50), //冻+电=爆炸 Array('stuff'=>Array('WK','WF'),'result'=>'WKF','obbs'=>77,), //斩+符=灵刃
Array('stuff'=>Array('w','u'),'result'=>'d','obbs'=>50), //音+火=爆炸 Array('stuff'=>Array('WK','WP'),'result'=>'WKP','obbs'=>77,), //斩+殴=重剑
Array('stuff'=>Array('WF','WK','DA'),'result'=>'WFK','obbs'=>77,), //符+斩=魔刃……?等等……?只能再加个DA凑数了
Array('stuff'=>Array('WD','WG'),'result'=>'WDG','obbs'=>77,), //爆+射=巨炮
Array('stuff'=>Array('WD','WF'),'result'=>'WDF','obbs'=>77,), //爆+符=落魂
Array('stuff'=>Array('HH','HS'),'result'=>'HB','obbs'=>77,), //回命+回体=命体回复
Array('stuff'=>Array('HH','WF'),'result'=>'HM','obbs'=>77,), //回命+灵=歌魂增加
Array('stuff'=>Array('HS','WD'),'result'=>'HT','obbs'=>77,), //回体+爆=歌魂恢复
Array('stuff'=>Array('WG','WG'),'result'=>'WJ','obbs'=>30,), //射+射=重枪(30%概率)
//我认为这里应该有一个配方 可以合出有毒补给或者地雷(
);
//次要特征组合配方:将次要特征转化为道具属性时,检查是否满足组合条件。两个配方存在重复元素时,排在前面的会优先生成。
$submix_list = array
(
Array('stuff'=>Array('x','z'),'result'=>'Z','obbs'=>13), //奇迹+天然=菁英
Array('stuff'=>Array('u','i'),'result'=>'d','obbs'=>Array('default'=>30,'WD'=>98,'WDG'=>75,'WDF'=>75),), //火+冻=爆炸
Array('stuff'=>Array('i','e'),'result'=>'d','obbs'=>Array('default'=>30,'WD'=>98,'WDG'=>75,'WDF'=>75),), //冻+电=爆炸
Array('stuff'=>Array('w','i'),'result'=>'d','obbs'=>Array('default'=>30,'WD'=>98,'WDG'=>75,'WDF'=>75),), //音+冻=爆炸
//冴冴来发挥奇思妙想吧 //冴冴来发挥奇思妙想吧
//还应该有一些合出连击物防属防或者其他乱七八糟属性的配方,头皮好痒,感觉要长脑子了
); );
//属性组合配方概率修正(根据道具类别判断) //随机的次要特征组合配方 注意:指定属性(sk_*)一定要放到最前面
$emix_sub_mix_obbs_fix = Array //可能会生成重复配方,但是也无所谓~
$random_submix_list = Array
( (
'WD' => Array('d'=>50,), //爆系武器生成爆炸属性的概率+50 //连击:随机1个价值在10以上,1个价值在20以上,1个价值在30以上的次要特征
'WDG' => Array('d'=>25,), Array('stuff'=>Array(0=>'v_10',1=>'v_20',2=>'v_30'),'result'=>'r','obbs'=>50),
'WDF' => Array('d'=>25,), //冲击:随机1个价值在20以上特征+1个随机“攻击”标签特征
Array('stuff'=>Array(0=>'tags_W',1=>'v_20'),'result'=>'N','obbs'=>50),
//贯穿:重击辅助+随机2个价值在30以上的次要特征
Array('stuff'=>Array(0=>'sk_c',1=>'v_30',2=>'v_30'),'result'=>'n','obbs'=>50),
//属性防御:随机1个价值在30以上+2个随机“防御”标签特征
Array('stuff'=>Array(0=>'v_30',1=>'tags_D',2=>'tags_D'),'result'=>'a','obbs'=>50),
//全系防御:随机2个价值在30以上的次要特征+1个随机“防御”标签特征
Array('stuff'=>Array(0=>'v_30',1=>'v_30',2=>'tags_D'),'result'=>'A','obbs'=>50),
); );
//合成结果-名字: //合成结果-名字:
//什么!?原来是万智牌!? $emix_luck_info = Array(-2 => '自己要倒大霉了QAQ……',1 => '这次合成的结果应该没什么特别之处。', 2=>'这次合成的结果还算不错。', 3=>'这次合成的结果似乎相当不错!' ,4=>'有什么大好事要发生了!');
//合成过程中随机产生的东西 //合成过程中随机产生的东西
$emix_tips_arr = Array('天然','喜悦','灵感','奇迹','爱','期待','愤怒','悲伤','乐子','苦闷','既视感','疯狂','幸运','RP','罪业'); $emix_tips_arr = Array('天然','喜悦','灵感','奇迹','爱','期待','愤怒','悲伤','乐子','苦闷','既视感','疯狂','幸运','RP','罪业');
//括在名字外围的符号 //括在名字外围的符号
...@@ -228,13 +283,13 @@ ...@@ -228,13 +283,13 @@
//元词缀,随便挑一个非主元素的 //元词缀,随便挑一个非主元素的
$emix_name_meta_arr = Array $emix_name_meta_arr = Array
( (
0 => Array('乱序之','宝石纹','镭射型','镜面纹','藏书之','晶化型','化合型','糖浆制','石纹','杂糅型','透明纹'),//'亮晶晶' 0 => Array('乱序之','宝石纹','镭射型','镜面纹','藏书','晶化','化合型','糖浆','石纹','杂糅','透明纹'),//'亮晶晶'
1 => Array('燃素之','篝火之','黄昏之','晌午型','凤凰型','猩红之','暖石制','强袭型','破坏型','苹果制','血制'),//'暖洋洋' 1 => Array('燃素之','篝火之','黄昏之','晌午','凤凰型','猩红之','暖石','强袭型','破坏型','苹果制','血纹'),//'暖洋洋'
2 => Array('迅捷化','鱼纹','操弄之','碎心型','旁观之','路人之','狡黠之','凛风之','北极型','雾之','魔咒制','激流之'),//'冷冰冰' 2 => Array('迅捷化','鱼纹','操弄之','碎心','旁观之','路人之','狡黠之','凛风之','北极星','雾之','魔咒','激流之'),//'冷冰冰'
3 => Array('生命之','蔷薇纹','根须制','咖啡制','妖精型','吱吱乱叫之','生姜型','拿铁制','叶形纹','癌化','仿制'),//'郁萌萌' 3 => Array('生命之','蔷薇纹','根须','咖啡','妖精','吱吱乱叫之','生姜','拿铁','叶形纹','风化','仿制','纺锤状'),//'郁萌萌'
4 => Array('启示之','神之','王国制','旭日之','英雄之','荣光之','灯笼型','萤火之','神父之','麻将纹','骑士之'),//'昼闪闪' 4 => Array('启示之','神之','王国制','旭日之','英雄之','荣光之','灯笼状','萤火之','神父之','麻将','骑士之'),//'昼闪闪'
5 => Array('怪异化','黑洞之','视界之','牧人羊型','往事之','循环之','吊诡之','小鬼之','刻奇之','五芒星型','爬行化'),//'夜静静' 5 => Array('怪异化','黑洞之','视界之','牧人羊型','往事之','循环之','吊诡之','小鬼之','刻奇之','五芒星','爬行'),//'夜静静'
6 => Array('空白之','留声型','映像型','回响型','气动型','姐妹之','差分机','飞艇型','纸制','彩玻璃制','以太制','黄铜制','贤者之'),//拓展1 6 => Array('空白之','留声型','映像型','回响型','气动型','姐妹之','差分机','飞艇型','纸制','彩玻璃制','以太制','黄铜制','贤者之'),//拓展1
); );
//词尾 //词尾
$emix_name_tail_arr = Array $emix_name_tail_arr = Array
...@@ -254,20 +309,27 @@ ...@@ -254,20 +309,27 @@
); );
/********研究模式配置********/ /********研究模式配置********/
//元素初始化时可分配的主要特征列表 //特征的“特征”……
//在随机为元素分配特征时,会优先从不同键名内挑选特征。可以通过在不同键名内加入相同的特征,加大其出现的概率。 //嘛总之就是那个意思:武器上不会出现防御,防具上不会出现攻击属性这样……
$emix_dom_tags = Array $itmk_to_itmsk_tags = Array
( (
'att' => Array('WP','WK','WC','WG','WD','WF'), //攻击面特征
'def' => Array('DB','DH','DA','DF'), 'W' => Array('u','e','i','w','p','d','r','f','k','R','S','o','n','N'),
'misc' => Array('HH','HS'), //防御面特征
'D' => Array('P','K','C','G','D','F','U','E','I','W','q','M','a','A','B','b'),
//杂项特征
'misc' => Array('z','x','c','h','H','l','g','Z'),
); );
//元素初始化时可分配的次要特征列表:
$emix_sub_tags = Array //提示纸条:
$emix_slip = Array
( (
'att' => Array('u','e','i','w','p','d','R'), 0 => '“在元素合成时,投入份数最多的元素会成为‘主元素’,其展现出的‘主特征’会影响所合成道具的‘用途’”<br>“这点你已经知道了对吧?”<br>“但如果投入其他元素的‘份数’与‘主元素’很接近的话……也许它们的‘主特征’会混合起来?”<br>',
'def' => Array('P','K','C','G','D','F','U','E','I','W','q'), 1 => '“在元素合成时,投入的元素所展现出的‘次要特征’会影响所合成道具的‘属性’”<br>“这点你已经知道了对吧?”<br>“但如果把不同元素的‘特征’混合起来的话,它们有时会彼此反应,从而衍生出新的‘特征’。”<br>',
'misc' => Array('M','S','o','z','x','c','H','l','g'), 2 => '“补给品、子弹这些消耗品,能分解出来的元素很少,有种说法是元素们讨厌这种被消耗的感觉。”<br>“但是从书本或强化药物这种价值不菲的消耗品上获得的元素又会变多。”<br>“很有哲理吧?”<br>',
3 => '“如果在分解元素的过程中遇到了什么奇怪的状况,找个本子记录下来会比较好。”<br>“说不定以后会派上用处的。”<br>',
4 => '“如果实在不知道该合成什么的话,不妨试试把每种元素都丢1份进去看看。”<br>“说实话我也不知道会发生什么,所以出了事不要怨我啊!”<br>',
5 => '“据说元素们在变化成具体形状时会发出奇怪的动静……说不定是在用元素语骂人呢?”<br>',
6 => '“据说要将元素的‘次要特征’附着在物品上时,会产生某种奇特的发酵物的味道。”<br>“其实元素合成的原理和腌咸菜也差不多吧?”<br>',
); );
?> ?>
...@@ -9,34 +9,52 @@ ...@@ -9,34 +9,52 @@
include_once config('elementmix',$gamecfg); include_once config('elementmix',$gamecfg);
/********界面交互部分********/ /********界面交互部分********/
//显示元素数量
function print_elements_info() function print_elements_info()
{ {
global $elements_info,$temp_etags,$iteminfo,$itemspkinfo,$log; global $elements_info,$log;
$log.="你在你的小口袋里翻找起来……<br>"; $log.="当前的<span class='lime'>元素存量</span>如下:<br><span class='grey'>(将鼠标悬浮在元素上可以查看其特征)</span><br>";
$log.="当前的<span class='lime'>元素存量</span>如下:<br>";
foreach($elements_info as $e_key=>$e_info) foreach($elements_info as $e_key=>$e_info)
{ {
global ${'element'.$e_key}; global ${'element'.$e_key};
if(${'element'.$e_key}) if(${'element'.$e_key})
{ {
$log.="【{$e_info}{${'element'.$e_key}} 份】<br>"; $log.="<span title=\"".print_elements_tags($e_key)."\">";
$log.="<span class='grey'>已了解的特征:</span>"; $log.="◆ {$e_info}{${'element'.$e_key}} 份;";
foreach($temp_etags[$e_key] as $tk => $tarr) $log.="</span><br>";
}
}
$log.="<br>";
}
//显示元素标签……卧槽怎么会这样
function print_elements_tags($e_key)
{
global $temp_etags,$iteminfo,$itemspkinfo;
$tinfo="已了解的特征:";
foreach($temp_etags[$e_key] as $tk => $tarr)
{
foreach($tarr as $tm)
{
if($tk == 'dom')
{ {
foreach($tarr as $tm) $tinfo.= "[主]".$iteminfo[$tm]." ";
{ }
$log.= $tk=='dom' ? "<span class='grey'>【{$iteminfo[$tm]}】</span>" : "<span class='grey'>【{$itemspkinfo[$tm]}】</span>"; else
} {
//……这样真的好吗
$tt = $itemspkinfo[$tm];
$ta = mb_strpos($tt,'>',0,'utf-8')+1;
$tb = mb_strpos($tt,'</span>',0,'utf-8');
$tinfo.= "[次]".mb_substr($tt,$ta,$tb-$ta,'utf-8')." ";
} }
$log.="<br>";
} }
} }
$log.="总之就是这么一回事了。<br>"; return $tinfo;
} }
/********拆解元素部分********/ /********拆解元素部分********/
//过滤掉不能拆解的道具 不能分解返回1 能分解返回0 //过滤掉不能拆解的道具(数组) 不能分解返回1 能分解返回0
function split_to_elements_filter($i) function split_to_elements_filter($i)
{ {
global $no_itm_to_e_list,$no_itmk_to_e_list,$no_itmsk_to_e_list; global $no_itm_to_e_list,$no_itmk_to_e_list,$no_itmsk_to_e_list;
...@@ -67,7 +85,7 @@ ...@@ -67,7 +85,7 @@
$ev_arr = Array(); $ev_arr = Array();
if($edata) if($edata)
{ {
global $elements_info,$no_type_to_e_list,$corpse_to_e_lvl_r; global $elements_info,$no_type_to_e_list,$split_corpse_lvl_r,$split_spcorpse_fix,$typeinfo;
global $log,$rp; global $log,$rp;
//过滤不能分解的尸体 //过滤不能分解的尸体
if(in_array($edata['type'],$no_type_to_e_list)) if(in_array($edata['type'],$no_type_to_e_list))
...@@ -76,9 +94,43 @@ ...@@ -76,9 +94,43 @@
return; return;
} }
//成功从尸体中提炼元素 //成功从尸体中提炼元素
$log.="你用指尖轻轻一点,{$edata['name']}便化作点点荧光四散而去……<br>"; $log.="<span class='grey'>{$edata['name']}化作点点荧光四散开来……</span><br>";
//处理绑定有秘钥的尸体
if($split_spcorpse_fix[$edata['type']])
{
$ek_arr = Array(); unset($ekey); unset($ev);
//获取缓存文件
$re_list = merge_random_emix_list();
//还原配方与素材键名
$e_list = is_array($split_spcorpse_fix[$edata['type']]) ? $split_spcorpse_fix[$edata['type']][$edata['name']] : $split_spcorpse_fix[$edata['type']];
$e_list = explode('-',str_replace('r_','',$e_list));
//$e_list[0]:配方键名 $e_list[1]:素材所在数组内的位置(不是元素编号)
if($e_list[1] == 'r')
{
//返回随机素材
$ekey = array_rand($re_list[$e_list[0]]['stuff']);
$ev = $re_list[$e_list[0]]['stuff'][$ekey];
}
else
{
//返回指定位置素材 遍历配方 找到它的家
$e_sort = 0;
foreach($re_list[$e_list[0]]['stuff'] as $stuff_key => $stuff_num)
{
if($e_sort == $e_list[1])
{
$ekey = $stuff_key;
$ev = $stuff_num;
break;
}
$e_sort ++;
}
}
$log.="<span class='grey'>你发现从{$typeinfo[$edata['type']]}身上飘落的<span class='red'>{$ev}</span>份{$elements_info[$ekey]}样子有点奇怪……怎么回事呢?</span><br>";
$ek_arr[$ekey] += $ev;
}
//根据尸体等级计算能获得的全种类元素数量 //根据尸体等级计算能获得的全种类元素数量
$ev_lvl = ceil($edata['lvl']*$corpse_to_e_lvl_r); $ev_lvl = ceil($edata['lvl']*$split_corpse_lvl_r);
//把尸体上的装备道具一起打包 //把尸体上的装备道具一起打包
$corpse_itm_arr = pack_corpse($edata); $corpse_itm_arr = pack_corpse($edata);
//计算从尸体的装备上能获得的元素种类与数量 //计算从尸体的装备上能获得的元素种类与数量
...@@ -87,7 +139,7 @@ ...@@ -87,7 +139,7 @@
foreach($elements_info as $e_key=>$e_info) foreach($elements_info as $e_key=>$e_info)
{ {
global ${'element'.$e_key}; global ${'element'.$e_key};
$add_ev = $ev_arr[$e_key] + $ev_lvl; $add_ev = $ev_arr[$e_key] + $ev_lvl + $ek_arr[$e_key];
//如果尸体上有元素,一并获取,不过现在还不能在npc配置文件里预设NPC出生时带的元素 //如果尸体上有元素,一并获取,不过现在还不能在npc配置文件里预设NPC出生时带的元素
//瞄了眼NPC初始化的函数,要改的话不如一步到位都改了。 //瞄了眼NPC初始化的函数,要改的话不如一步到位都改了。
//TODO:创建一个同步player表字段的函数,在NPC初始化时对NPC数据格式化,插入数据库时用格式化后的数组,这样以后添加新字段也不再需要动初始化函数了 //TODO:创建一个同步player表字段的函数,在NPC初始化时对NPC数据格式化,插入数据库时用格式化后的数组,这样以后添加新字段也不再需要动初始化函数了
...@@ -97,7 +149,7 @@ ...@@ -97,7 +149,7 @@
$edata['element'.$e_key] = 0; $edata['element'.$e_key] = 0;
} }
${'element'.$e_key} += $add_ev; ${'element'.$e_key} += $add_ev;
$log.="提取到{$add_ev}{$e_info}!<br>"; $log.="获得{$add_ev}{$e_info}!<br>";
} }
//销毁尸体 //销毁尸体
destory_corpse($edata); destory_corpse($edata);
...@@ -142,7 +194,7 @@ ...@@ -142,7 +194,7 @@
return; return;
} }
//分解道具获得元素 //分解道具获得元素
$log.="你用指尖轻轻一点,".${'itm'.$iid}."便化作点点荧光四散而去……<br>"; $log.="<span class='grey'>".${'itm'.$iid}."化作点点荧光四散开来……</span><br>";
//计算能获得的元素种类与数量 //计算能获得的元素种类与数量
$i_arr = get_evalues_by_iarr($i_arr); $i_arr = get_evalues_by_iarr($i_arr);
//增加对应的元素 //增加对应的元素
...@@ -150,7 +202,7 @@ ...@@ -150,7 +202,7 @@
{ {
global ${'element'.$e_key}; global ${'element'.$e_key};
${'element'.$e_key} += $ev; ${'element'.$e_key} += $ev;
$log.="提取到{$ev}{$elements_info[$e_key]}!<br>"; $log.="获得{$ev}{$elements_info[$e_key]}!<br>";
} }
//销毁道具 //销毁道具
${'itm'.$iid} = ${'itmk'.$iid} = ${'itmsk'.$iid} = ''; ${'itm'.$iid} = ${'itmk'.$iid} = ${'itmsk'.$iid} = '';
...@@ -161,8 +213,8 @@ ...@@ -161,8 +213,8 @@
$ep_dice = rand(0,100); $ep_dice = rand(0,100);
if($ep_dice>70) if($ep_dice>70)
{ {
$rp = max(0,$rp-$ep_dice); $rp = $rp-$ep_dice;
//$log.="忽闻遥远天外飞来一句赞叹:“感谢你对幻境环卫事业作出的贡献!”<br>"; //rp可以为负吗?
} }
$log.="<br>"; $log.="<br>";
} }
...@@ -175,84 +227,158 @@ ...@@ -175,84 +227,158 @@
function get_evalues_by_iarr($iarr) function get_evalues_by_iarr($iarr)
{ {
global $log,$nosta,$elements_info,$temp_etags; global $log,$nosta,$elements_info,$temp_etags;
global $itm_to_e_fix,$itm_to_e_r,$itmk_to_e_fix,$itmk_to_e_r,$itmsk_to_e_fix; global $split_itm_fix,$split_spitm_fix,$split_itmk_r,$split_default_itmk_r;
global $emix_sub_tags_values,$emix_sub_tags_default_values; global $split_itmsk_fix,$split_default_itmsk_fix;
$ev_arr = Array(); $ev_ir = 1;//道具名关联的价值修正系数 对所有拆解出的元素都生效 $ev_arr = Array();
//通过缓存文件获取翻转数组……是不是真的有必要这么搞啊……? //获取缓存文件
$cache_file = GAME_ROOT."./gamedata/bak/elementmix.bak"; $cache_file = GAME_ROOT."./gamedata/bak/elementmix.bak";
$flip_etags_arr = file_exists($cache_file) ? openfile_decode($cache_file) : flip_temp_etags($temp_etags); if(!file_exists($cache_file)) create_random_emix_list();
$flip_etags_arr = openfile_decode($cache_file);
//开始计算元素价值 //开始计算元素价值
foreach($iarr as $i => $t) foreach($iarr as $i => $t)
{ {
//检查拆解固定道具时的事件 //最优先:检查拆解特定道具(全名匹配)时的事件
//通过道具名为道具关联一个元素 if($split_itm_fix[$t['itm']])
if($itm_to_e_fix[$t['itm']])
{ {
foreach($itm_to_e_fix[$t['itm']] as $ekey=>$ev) unset($ekey);unset($ev);
//处理秘钥道具
if(strpos($split_itm_fix[$t['itm']],'r_')===0)
{ {
//还原配方与素材键名 暂时不考虑秘钥道具=>array的情况 有需要的情况再现加
//$e_list[0]:配方键名 $e_list[1]:素材所在数组内的位置(不是元素编号)
$e_list = explode('-',str_replace('r_','',$split_itm_fix[$t['itm']]));
//返回随机素材
if($e_list[1] == 'r')
{
$ekey = array_rand($flip_etags_arr['random_emix_list'][$e_list[0]]['stuff']);
$ev = $flip_etags_arr['random_emix_list'][$e_list[0]]['stuff'][$ekey];
}
//返回指定位置素材 遍历配方 找到它的家
else
{
$e_sort = 0;
foreach($flip_etags_arr['random_emix_list'][$e_list[0]]['stuff'] as $stuff_key => $stuff_num)
{
if($e_sort == $e_list[1])
{
$ekey = $stuff_key;
$ev = $stuff_num;
break;
}
$e_sort ++;
}
}
$log.="<span class='grey'>你发现构成{$t['itm']}的<span class='red'>{$ev}</span>份{$elements_info[$ekey]}样子有点奇怪……怎么回事呢?</span><br>";
$ev_arr[$ekey] += $ev; $ev_arr[$ekey] += $ev;
//润!
continue;
} }
//道具在特判列表里 不再继续计算后面的内容 直接跳到下一个道具 foreach($split_itm_fix[$t['itm']] as $ekey=>$ev)
continue;
}
//处理道具类别:道具类别不在特殊处理列表里 对其子类别进行过滤 只保留主类别
//if(!$itmk_to_e_r[$t['itmk']] && !$itmk_to_e_fix[$t['itmk']]) $t['itmk'] = filter_itemkind($t['itmk']);
//过滤不能分解的道具
if(split_to_elements_filter($t)) continue;
//通过道具名(关键词匹配)获取价值修正 这个修正对所有获得的元素类都生效!重要的事情说三遍……三遍了吗?
//如果这个列表里东西变多了 可以考虑加一个类别限制条件 比如类别是Y/Z/X才会去过条件
foreach($itm_to_e_r as $ev_i => $ev_r)
{
//echo "开始匹配{$t['itm']}与{$ev_i}是否相符";
if(preg_match("/$ev_i/",$t['itm']))
{ {
$ev_ir = $ev_r; $ev_arr[$ekey] += $ev;
//echo "获取到了evir{$ev_r}";
break;
} }
//echo "【DEBUG】检查到了特殊道具【{$t['itm']}】<br>";
continue; //道具在特判列表里 不再继续计算后面的内容 直接跳到下一个道具
}
//次优先:检查拆解特定道具(关键词匹配)时的事件
foreach($split_spitm_fix as $spitm=>$sp_ev)
{
$sp_flag = 0;
if(preg_match("/$spitm/",$t['itm']))
{
//没有指定获得哪种元素 随机获得一种元素
if(!is_array($sp_ev))
{
$ev_arr[array_rand($elements_info)] += $sp_ev;
}
else
{
foreach ($sp_ev as $ekey=>$ev)
$ev_arr[$ekey] += $ev;
unset($ekey);unset($ev);
}
$sp_flag = 1;//道具在特判列表里 不再继续计算后面的内容 直接跳到下一个道具
//echo "【DEBUG】检查到了特殊道具【{$t['itm']}】<br>";
}
} }
//道具不能分解 跳过
if(split_to_elements_filter($t) || $sp_flag) continue;
//通过道具的效果、耐久,确定原始价值 //通过道具的效果、耐久,确定原始价值
if($t['itms'] == $nosta) $t['itms'] = rand(1,10); if($t['itms'] == $nosta) $t['itms'] = rand(1,10);
$base_ev = round(($t['itme']+$t['itms'])/2); $base_ev = round(($t['itme']+$t['itms'])/2);
//通过道具类别为道具关联一个或多个元素 //echo "【DEBUG】{$t['itm']}的基础价值是{$base_ev}<br>";
//能找到源头元素的情况下绑定源头元素 否则绑定随机元素 返回了多个类别则多次处理
if(is_array($t['itmk'])) //通过道具类别获取价值修正
$k_t = $t['itmk'];
if($split_itmk_r[$k_t])
{ {
foreach($t['itmk'] as $kind) //存在对应修正 优先获取
$ekey = $flip_etags_arr['flip_d_tag'][$kind] ? $flip_etags_arr['flip_d_tag'][$kind] : array_rand($elements_info); $k_ev_r = $split_itmk_r[$k_t];
//价值修正
$base_ev *= $itmk_to_e_r[$kind] ? $itmk_to_e_r[$kind] : 1;
$ev_arr[$ekey] += ceil($base_ev*$ev_ir);
echo "【DEBUG】【{$kind}{$t['itm']}分解出了{$base_ev}{$elements_info[$ekey]}<br>";
} }
else else
{ {
$ekey = $flip_etags_arr['flip_d_tag'][$t['itmk']] ? $flip_etags_arr['flip_d_tag'][$t['itmk']] : array_rand($elements_info); //不存在对应修正 先尝试过滤类别
//类别价值修正 $k_t = filter_itemkind($k_t);
$base_ev *= $itmk_to_e_r[$t['itmk']] ? $itmk_to_e_r[$t['itmk']] : 1; //没有对应修正关系则返回默认类别的分解系数
$ev_arr[$ekey] += ceil($base_ev*$ev_ir); $k_ev_r = $split_itmk_r[$k_t] ? $split_itmk_r[$k_t] : $split_default_itmk_r;
echo "【DEBUG】【{$t['itmk']}{$t['itm']}分解出了{$base_ev}{$elements_info[$ekey]}<br>"; }
//应用价值修正
$base_ev = ceil($base_ev*$k_ev_r);
//echo "【DEBUG】{$t['itm']}的类别价值修正系数是{$k_ev_r},修正后的价值是{$base_ev}。<br>";
//通过道具类别关联元素
$k_t = $t['itmk']; $k_ekey = '';
if($flip_etags_arr['flip_d_tag'][$k_t])
{
//存在对应元素 优先获取
$k_ekey = $flip_etags_arr['flip_d_tag'][$k_t];
} }
//通过道具属性为道具关联一个或多个元素 else
{
//不存在对应元素 先尝试过滤类别
$k_t = filter_itemkind($k_t);
//还是没有对应元素 返回随机一种元素
$k_ekey = $flip_etags_arr['flip_d_tag'][$k_t] ? $flip_etags_arr['flip_d_tag'][$k_t] : array_rand($elements_info);
}
//echo "【DEBUG】【{$t['itmk']}】{$t['itm']}关联到的元素是【{$elements_info[$k_ekey]}】<br>";
//应用 类别=>元素 的价值
$ev_arr[$k_ekey] += $base_ev;
//通过属性计算道具的附加价值
if(isset($t['itmsk'])) if(isset($t['itmsk']))
{ {
$t['itmsk'] = get_itmsk_array($t['itmsk']); $t['itmsk'] = get_itmsk_array($t['itmsk']);
foreach($t['itmsk'] as $tsk) foreach($t['itmsk'] as $tsk)
{ {
//获取单个属性关联的元素 没有则随机挑选一个元素
$ekey = $flip_etags_arr['flip_s_tag'][$tsk] ? $flip_etags_arr['flip_s_tag'][$tsk] : array_rand($elements_info); $ekey = $flip_etags_arr['flip_s_tag'][$tsk] ? $flip_etags_arr['flip_s_tag'][$tsk] : array_rand($elements_info);
if(isset($ekey)) if(isset($ekey))
{ {
$add_ev = 0; $add_ev = 0;
//获取属性价值 //获取属性价值
$add_ev = $emix_sub_tags_values[$tsk] ? $emix_sub_tags_values[$tsk] : $emix_sub_tags_default_values; if($split_itmsk_fix[$tsk])
echo "【DEBUG】{$add_ev}{$emix_sub_tags_default_values}{$emix_sub_tags_values[$tsk]}<br>"; {
//获取属性价值修正 if(is_array($split_itmsk_fix[$tsk]))
if($emix_sub_tags_values_fix[$t['itmk']]) $add_ev = max(0,$add_ev+$emix_sub_tags_values_fix[$t['itmk']]); {
echo "【DEBUG】{$add_ev}份<br>"; $add_ev = $split_itmsk_fix[$tsk][$t['itmk']] ? $split_itmsk_fix[$tsk][$t['itmk']] : $split_itmsk_fix[$tsk]['default'];
}
else
{
$add_ev = $split_itmsk_fix[$tsk];
}
}
else
{
$add_ev = $split_default_itmsk_fix;
}
//入列! //入列!
$ev_arr[$ekey] += $add_ev; $ev_arr[$ekey] += $add_ev;
echo "【DEBUG】{$t['itm']}的【属性{$tsk}】分解出了{$add_ev}{$elements_info[$ekey]}<br>"; //echo "【DEBUG】{$t['itm']}的【属性{$tsk}】分解出了{$add_ev}份{$elements_info[$ekey]}<br>";
} }
} }
} }
...@@ -265,22 +391,28 @@ ...@@ -265,22 +391,28 @@
//元素喝茶 //元素喝茶
function element_mix($emlist,$eitme_max_r=NULL,$eitme_r=NULL) function element_mix($emlist,$eitme_max_r=NULL,$eitme_r=NULL)
{ {
global $log,$elements_info,$default_emix_itme_r,$no_emix_circulation,$iteminfo,$itemspkinfo; global $now,$name,$log,$iteminfo,$itemspkinfo,$elements_info;
global $emix_tips_arr,$emix_name_brackets_arr,$emix_name_prefix_arr,$emix_name_meta_arr,$emix_name_tail_arr; global $no_emix_circulation;
global $emix_luck_info,$emix_tips_arr,$emix_name_brackets_arr,$emix_name_prefix_arr,$emix_name_meta_arr,$emix_name_tail_arr;
global $itm0,$itmk0,$itme0,$itms0,$itmsk0;
if(!$emlist) if(!$emlist)
{ {
$log.="你不能用不存在的东西合成!<br>"; $log.="你不能用不存在的东西合成!<br>";
return; return;
} }
//输入了合法的元素参数,先初始化一些变量。 //输入了合法的元素参数,先初始化一些变量。
$c_times = 0; $total_enum = 0; $dom_ekey = -1; $dom_enum = -1; $multi_dom_ekey = Array(); $c_times = 0; $total_enum = 0; $dom_ekey = -1; $dom_enum = -1; $multi_dom_ekey = Array(); $emix_flag = NULL; $emix_fix = NULL;
//自定义效/耐比的阈值:2%~98% //自定义效/耐比的阈值:2%~98%
if(isset($eitme_r)) $eitme_r = min(98,max(2,$eitme_r)); $eitme_r /= 100; $eitme_r = isset($eitme_r) ? min(98,max(2,$eitme_r)) : rand(2,98);
$eitme_r /= 100;
//自定义最大效果的阈值:1%~100% //自定义最大效果的阈值:1%~100%
$eitme_max_r = isset($eitme_max_r) ? min(100,max(1,$eitme_max_r)) : 100; $eitme_max_r /= 100; $eitme_max_r = isset($eitme_max_r) ? min(100,max(1,$eitme_max_r)) : 100;
$eitme_max_r /= 100;
//对参与合成的元素按投入数量降序排序,筛出投入数量最多的元素作为主元素 //对参与合成的元素按投入数量降序排序,筛出投入数量最多的元素作为主元素
arsort($emlist); arsort($emlist);
$log.="从口袋中抓出了"; $log.="从口袋中抓出了:<br>";
foreach($emlist as $ekey=>$enum) foreach($emlist as $ekey=>$enum)
{ {
if($c_times == 0) if($c_times == 0)
...@@ -291,8 +423,8 @@ ...@@ -291,8 +423,8 @@
} }
else else
{ {
//其他元素投入了与主元素相同的数量 把其他元素登记到备选主元素列表里 //其他投入的元素数量与主元素数量相差10以内 也可以提供主要特征
if($enum == $dom_enum) $multi_dom_ekey[$ekey]=$enum; if($enum >= ($dom_enum-10)) $multi_dom_ekey[$ekey]=$enum;
//log修正 //log修正
$log.="、"; $log.="、";
} }
...@@ -304,27 +436,57 @@ ...@@ -304,27 +436,57 @@
global ${'element'.$ekey}; global ${'element'.$ekey};
${'element'.$ekey} -= $enum; ${'element'.$ekey} -= $enum;
} }
$log.="。<br>……感觉有点紧张。<br>开始合成了。<br>";
//在开始随机合成前,先检查是否存在固定合成。 $log.="。<br>你紧张地搓了搓手。<br>合成开始了。<br>";
//(TODO:固定的元素合成列表)
//一些想法:元素大师不能合成结局道具啊! //检查是否存在固定合成(其实放最顶层也行 放这里只是为了输出上面一段log)
//一个思路:分解指定关键道具,生成5~4位数随机值的指定元素,把元素=>作为秘钥的随机值保存在每局重置的临时文件里。 $emix_fix = check_in_emix_list($emlist);
//把分解数个关键道具获得的元素=>秘钥 重新进行元素合成,就可以得到结局道具。 if($emix_fix)
{
$log.="<br>但是出现结果的速度比你想象中要快得多!<br>你还没反应过来,元素们就把一样东西吐了出来!<br><br>";
$itm0 = $emix_fix[0]; $itmk0 = $emix_fix[1]; $itmsk0 = $emix_fix[4];
$itme0 = $emix_fix[2]; $itms0 = $emix_fix[3];
include_once GAME_ROOT.'./include/game/itemmain.func.php';
itemget();
addnews($now,'emix_success',$name,$emix_fix[0]);
return;
}
//开始随机合成: //开始随机合成:
//(TODO:合成的大成功、大失败事件) $log.="<span class='grey'>…加入了一点{$emix_tips_arr[array_rand($emix_tips_arr)]}…</span><br>";
//(可能的事件:增加效果、升级/改变/增加属性、道具爆炸扣血)
$emix_dice = rand(1,20)+rand(1,20)+rand(1,20)+rand(1,20)+rand(1,20);
$log.="<span class='grey'>加入了一点{$emix_tips_arr[array_rand($emix_tips_arr)]}……</span><br>"; //掷骰:
$emix_dice = rand(1,100);
switch($emix_dice)
{
case $emix_dice<=5:
//大成功
$emix_flag = 4;
break;
case $emix_dice<=15:
//出色表现
$emix_flag = 3;
break;
case $emix_dice<=50:
//成功
$emix_flag = 2;
break;
case $emix_dice<=96:
//普通
$emix_flag = 1;
break;
default:
//哇 这下便样衰了!(道具会带有灵魂绑定属性 可恶 为什么诅咒属性不见了)
$emix_flag = -2;
}
$log.="<span class='grey'>你感觉{$emix_luck_info[$emix_flag]}</span><br>";
//生成道具类别: //生成道具类别:
$emix_itmk = ''; $emix_itmk = '';
//获取主特征: //获取主特征:
$emix_itmk_tags = Array(); $emix_itmk_tags = Array();
$emix_itmk_tags[] = get_emix_dom_tags($dom_ekey,$dom_enum); $emix_itmk_tags[] = get_emix_dom_tags($dom_ekey,$dom_enum);
//存在复数个主元素,获取多个主特征 //有备选的主特征列表,依次获取
if(count($multi_dom_ekey)>0) if(count($multi_dom_ekey)>0)
{ {
foreach($multi_dom_ekey as $md_ekey=>$md_enum) foreach($multi_dom_ekey as $md_ekey=>$md_enum)
...@@ -332,29 +494,31 @@ ...@@ -332,29 +494,31 @@
$emix_itmk_tags[] = get_emix_dom_tags($md_ekey,$md_enum); $emix_itmk_tags[] = get_emix_dom_tags($md_ekey,$md_enum);
} }
} }
//用获取到的主特征(是个数组)确定道具类别(理论上来说可以存在多个重复的主特征,也许可以加入些套娃配方) //用获取到的主特征(是个数组)确定道具类别
$emix_itmk = get_emix_itmk($emix_itmk_tags); $emix_itmk = get_emix_itmk($emix_itmk_tags,$emix_flag);
$log.="{$elements_info[$dom_ekey]}<span class='clan'>的形状变得有些像{$iteminfo[$emix_itmk]}。</span><br>"; $log.="<span class='clan'>你观察到自己投入进去的那坨混合物慢慢有了形状,它似乎能被用作<span class='yellow'>{$iteminfo[$emix_itmk]}</span>。</span><br>";
$log.="<span class='grey'>再加一些{$emix_tips_arr[array_rand($emix_tips_arr)]}…</span><br>"; $log.="<span class='grey'>…再加一些{$emix_tips_arr[array_rand($emix_tips_arr)]}…</span><br>";
//生成道具效果、耐久: //生成道具效果、耐久:
$emix_itme = 0; $emix_itms = 0; $emix_itme = 0; $emix_itms = 0;
//根据投入的元素总量 计算其中能够转化为效果、耐久的部分(不会超过当前等级的理论上限值) //根据投入的元素总量 计算其中能够转化为效果、耐久的部分(不会超过当前等级的理论上限值)
$cost_enum = get_emix_max_cost($total_enum,$eitme_max_r); $cost_enum = get_emix_max_cost($total_enum,$eitme_max_r);
//获取道具效果耐久比例。$eitem_r:解锁自定义比例功能后,合成时设定的效/耐比。 //获取道具效耐比(随机2~98)。$eitem_r:解锁自定义比例功能后,可以自己设置固定的效耐比。
$emix_itme_r = $eitme_r ? $eitme_r : $default_emix_itme_r; $emix_itme_r = $eitme_r;
$emix_itms_r = 1-$emix_itme_r; $emix_itms_r = 1-$emix_itme_r;
//计算道具效果、耐久 //计算道具效果、耐久
$emix_itme = ceil($cost_enum*$emix_itme_r); //只投入1份元素,至少也会有1点效果、1点耐久。你赚了我亏了好吧! $emix_itme = ($emix_flag==4) ? $cost_enum : ceil($cost_enum*$emix_itme_r*($emix_flag/10 + 1)); //只投入1份元素,至少也会有1点效果、1点耐久。你赚了我亏了好吧!
$emix_itms = ceil($cost_enum*$emix_itms_r); $emix_itms = ($emix_flag==4) ? '∞' : ceil($cost_enum*$emix_itms_r*($emix_flag/10 + 1));
if(strpos($emix_itmk,'D')===0 && $emix_itms=='∞') $emix_itms = $emix_itme;
$log.="<span class='clan'>你有听到</span>{$elements_info[array_rand($emlist)]}<span class='clan'>在雾气中的低语吗?</span><br>"; $log.="<span class='clan'>在那形状愈发明晰的时候,你听到<span class='yellow'>{$cost_enum}</span>份</span>{$elements_info[$dom_ekey]}<span class='clan'>在升腾的雾气种喃喃呓语。</span><br>";
$log.="<span class='grey'>哎呀,不小心混入了一点{$emix_tips_arr[array_rand($emix_tips_arr)]}…</span><br>"; $log.="<span class='grey'>…哎呀,不小心混入了一点{$emix_tips_arr[array_rand($emix_tips_arr)]}…</span><br>";
//生成道具属性: //生成道具属性:
$emix_itmsk = $no_emix_circulation ? Array('v') : Array(); $emix_itmsk = ($no_emix_circulation || $emix_flag==-2) ? Array('v') : Array(); //是否固定带有灵魂绑定属性
$emix_itmsk_max = $no_emix_circulation ? 4 : 5; $emix_itmsk_max = ($no_emix_circulation || $emix_flag==-2) ? 4 : 5; //最多能生成几个属性
//获取次要特征:
$emix_itmsk_tags = Array(); $emix_itmsk_tags = Array();
foreach($emlist as $ekey=>$enum) foreach($emlist as $ekey=>$enum)
{ {
...@@ -366,27 +530,26 @@ ...@@ -366,27 +530,26 @@
//基本逻辑:低面板出属性代价低,高面板出属性代价高。 //基本逻辑:低面板出属性代价低,高面板出属性代价高。
if($enum>0) if($enum>0)
{ {
//get_emix_sub_tags()返回的是一个数组。 //获取次要特征
//(可选)第四个参数:返回的标签数量上限。暂定2个,是否有必要用升级解锁等方式拓展这个数量? $tmp_emix_itmsk_tags = Array();
$tmp_emix_itmsk_tags = get_emix_sub_tags($ekey,$enum,$emix_itmk,2); $tmp_emix_itmsk_tags = get_emix_sub_tags($ekey,$enum,$emix_itmk,$emix_flag);
$emix_itmsk_tags = array_merge($tmp_emix_itmsk_tags,$emix_itmsk_tags); $emix_itmsk_tags = array_merge($tmp_emix_itmsk_tags,$emix_itmsk_tags);
} }
} }
//获取到了次要特征 //获取到了次要特征,把次要特征转化为道具属性:
if(count($emix_itmsk_tags)>0) if(count($emix_itmsk_tags)>0)
{ {
//把次要特征转化为道具属性。第三个参数:能保留的属性数量上限 //第三个参数:能保留的属性数量上限
$emix_itmsk = array_merge($emix_itmsk,get_emix_itmsk($emix_itmsk_tags,$emix_itmk,$emix_itmsk_max)); $emix_itmsk = array_merge($emix_itmsk,get_emix_itmsk($emix_itmsk_tags,$emix_itmk,$emix_itmsk_max));
} }
$log.="<span class='clan'>闻到了";
if($emix_itmsk) $log.="{$itemspkinfo[$emix_itmsk[array_rand($emix_itmsk)]]}、";
$log.="硫磺、</span>{$elements_info[array_rand($emlist)]}<span class='clan'>与某种发酵物混合的味道。</span><br>";
//把itmsk从数组转回字符串 //把itmsk从数组转回字符串
$emix_itmsk = get_itmsk_strlen($emix_itmsk); $emix_itmsk = get_itmsk_strlen($emix_itmsk);
$log.="<span class='clan'>闻到了硫磺、莎草纸、</span>{$elements_info[array_rand($emlist)]}<span class='clan'>与</span><span class='yellow'>".(count($emix_itmsk_tags)+1)."种发酵物</span><span class='clan'>混合的味道。</span><br>";
//(TODO:合成事件结算阶段) //(TODO:合成事件结算阶段)
$log.="<span class='grey'>最后再加上一点{$emix_tips_arr[array_rand($emix_tips_arr)]}……</span><br>"; $log.="<span class='grey'>…最后再加一点{$emix_tips_arr[array_rand($emix_tips_arr)]}…</span><br><br>";
$log.="……结束了……?<br><br>"; $log.="结束了…?<br><br>";
//出生了!为孩子起个可爱的名字吧 //出生了!为孩子起个可爱的名字吧
$emix_itm = ''; $emix_itm_prefix = ''; $emix_itm_meta = ''; $emix_itm_tail = ''; $emix_name_brackets = ''; $emix_itm = ''; $emix_itm_prefix = ''; $emix_itm_meta = ''; $emix_itm_tail = ''; $emix_name_brackets = '';
...@@ -419,18 +582,18 @@ ...@@ -419,18 +582,18 @@
//根据类别获取词尾 如果没有对应类别的词尾则生成泛用性词尾 //根据类别获取词尾 如果没有对应类别的词尾则生成泛用性词尾
$emix_itm_tail = $emix_name_tail_arr[$tmp_kind] ? $emix_name_tail_arr[$tmp_kind][array_rand($emix_name_tail_arr[$tmp_kind])] : $emix_name_tail_arr['0'][array_rand($emix_name_tail_arr['0'])]; $emix_itm_tail = $emix_name_tail_arr[$tmp_kind] ? $emix_name_tail_arr[$tmp_kind][array_rand($emix_name_tail_arr[$tmp_kind])] : $emix_name_tail_arr['0'][array_rand($emix_name_tail_arr['0'])];
} }
//根据合成出的道具效果生成一个能大幅提升时髦值的括号 //(只有生成的是武器时才会)根据合成出的道具效果生成一个能大幅提升时髦值的括号
$emix_name_brackets = $emix_itme/100; if(strpos($emix_itmk,'W')===0)
$emix_name_brackets += rand(-1,1); {
$emix_name_brackets = min(max(0,$emix_name_brackets),count($emix_name_brackets_arr)); $emix_name_brackets = ($emix_itme/100) + rand(-1,1);
$emix_name_brackets = explode('+',$emix_name_brackets_arr[$emix_name_brackets]); $emix_name_brackets = min(max(0,$emix_name_brackets),count($emix_name_brackets_arr)-rand(1,2));
$emix_name_brackets = explode('+',$emix_name_brackets_arr[$emix_name_brackets]);
}
//出生! //出生!
$emix_itm = $emix_name_brackets[0].$emix_itm_prefix.$emix_itm_meta.$emix_itm_tail.$emix_name_brackets[1]; $emix_itm = $emix_name_brackets[0].$emix_itm_prefix.$emix_itm_meta.$emix_itm_tail.$emix_name_brackets[1];
global $now,$name;
if($emix_itm && $emix_itmk && $emix_itme && $emix_itms) if($emix_itm && $emix_itmk && $emix_itme && $emix_itms)
{ {
global $itm0,$itmk0,$itme0,$itms0,$itmsk0;
$itm0 = $emix_itm; $itmk0 = $emix_itmk; $itmsk0 = $emix_itmsk; $itm0 = $emix_itm; $itmk0 = $emix_itmk; $itmsk0 = $emix_itmsk;
$itme0 = $emix_itme; $itms0 = $emix_itms; $itme0 = $emix_itme; $itms0 = $emix_itms;
include_once GAME_ROOT.'./include/game/itemmain.func.php'; include_once GAME_ROOT.'./include/game/itemmain.func.php';
...@@ -465,90 +628,130 @@ ...@@ -465,90 +628,130 @@
//通过自定义上限系数修正 //通过自定义上限系数修正
$max_enum *= $emr; $max_enum *= $emr;
//判断投入数量有没有超过理论上限 //判断投入数量有没有超过理论上限
$max_cost = min($max_enum,$total_enum); $max_cost = min(round($max_enum),$total_enum);
return $max_cost; return $max_cost;
} }
//判断是否存在固定合成
function check_in_emix_list($emlist)
{
global $emix_list,$random_emix_list;
//先检查固定合成
foreach($emix_list as $elist)
{
if(!array_diff($emlist,$elist['stuff']) && count($emlist) == count($elist['stuff']))
{
//echo "【DEBUG】检测到了固定合成{$elist['result'][0]}<br>";
return $elist['result'];
}
}
//再检查随机合成:尝试获取随机合成配方
$r_emix_list = merge_random_emix_list();
foreach($r_emix_list as $rid => $relist)
{
if(!array_diff($emlist,$relist['stuff']) && count($emlist) == count($relist['stuff']))
{
//echo "【DEBUG】检测到了固定随机合成{$relist['result'][0]}<br>";
return $r_emix_list[$rid]['result'];
}
}
}
//获取元素主特征 //获取元素主特征
function get_emix_dom_tags($ekey,$enum) function get_emix_dom_tags($ekey,$enum)
{ {
global $elements_info,$temp_etags; global $elements_info,$temp_etags;
$e_dom_tags = $temp_etags[$ekey]['dom']; //拉取元素对应的主特征
$e_dom_tag = is_array($e_dom_tags) ? $e_dom_tags[array_rand($e_dom_tags)] : $e_dom_tags; $dom_tag = $temp_etags[$ekey]['dom'];
return $e_dom_tag; //只有一个主特征 直接返回
if(count($dom_tag)==1) return $dom_tag[0];
//有多个主特征 按规律返回
//判断投入的元素是单数还是双数份
$tag_flag = fmod($enum,2);
//规律:投入单数份元素,返回第0个主特征;否则返回第1个主特征。如果以后有第2、3、4个主特征呢?以后的事情以后再说吧。
$dom_tag = $tag_flag ? $dom_tag[0] : $dom_tag[1];
return $dom_tag;
} }
//根据主特征输出道具类别 //根据主特征输出道具类别
function get_emix_itmk($dom_tags) function get_emix_itmk($dom_tags,$emix_flag=NULL)
{ {
global $emix_dom_mixlist; global $dommix_list;
$emix_itmk = 'E'; //DEBUG用 $emix_itmk = ''; $obbs_fix = 0;
//根据合成表现修正概率
if($emix_flag) $obbs_fix = $emix_flag*10;
if(count($dom_tags)>1) if(count($dom_tags)>1)
{ {
//存在复数个主特征,判断能否进行组合 //存在复数个主特征,判断能否进行组合
$mixflag = false; $mixflag = false;
foreach($emix_dom_mixlist as $minfo) foreach($dommix_list as $minfo)
{ {
//直接抄合成匹配逻辑了 有一种野性的美 //直接抄合成匹配逻辑了 有一种野性的美
if(!array_diff($dom_tags,$minfo['stuff']) && !array_diff($minfo['stuff'],$dom_tags) && count($dom_tags) == count($minfo['stuff'])) if(!array_diff($dom_tags,$minfo['stuff']) && !array_diff($minfo['stuff'],$dom_tags) && count($dom_tags) == count($minfo['stuff']))
{ {
if($minfo['obbs'] && rand(1,100)>$minfo['obbs']) continue; //配方为概率合成 掷骰判定没通过 跳过 if($minfo['obbs'] && (rand(1,100)-$obbs_fix)>$minfo['obbs']) continue; //配方为概率合成 掷骰判定没通过 跳过
$emix_itmk = $minfo['result']; $emix_itmk = $minfo['result'];
$mixflag = true; $mixflag = true;
break; break;
} }
} }
//没有匹配的组合 随机挑一个吧 //没有匹配的组合 随机返回一个主特征作为类别
if(!$mixflag) $emix_itmk = $dom_tags[array_rand($dom_tags)]; if(!$mixflag) $emix_itmk = $dom_tags[array_rand($dom_tags)];
} }
else else
{ {
//只有一个主特征 //只有一个主特征 直接让它作为类别返回
$emix_itmk = $dom_tags[0]; $emix_itmk = $dom_tags[0];
} }
return $emix_itmk; return $emix_itmk;
} }
//获取元素次要特征 $tag_max:输出的次要特征数量上限 //获取元素次要特征
function get_emix_sub_tags($ekey,$enum,$kind,$tag_max=4) function get_emix_sub_tags($ekey,$enum,$kind,$emix_flag)
{ {
global $elements_info,$temp_etags,$emix_sub_tags_values,$emix_sub_tags_default_values,$emix_sub_tags_values_fix; global $elements_info,$temp_etags;
$ev_sub_tags = Array(); global $split_default_itmsk_fix,$split_itmsk_fix;
//可惜没有诅咒属性了……
$subtags = Array();
//获取元素所有的次要特征
$e_sub_tags = $temp_etags[$ekey]['sub']; $e_sub_tags = $temp_etags[$ekey]['sub'];
//根据价值筛选出符合条件的次要特征 //筛选出投入数量大于属性价值的次要特征
foreach($e_sub_tags as $etag) foreach($e_sub_tags as $etag)
{ {
//获取特征价值 //获取属性价值
$evalues = $emix_sub_tags_values[$etag] ? $emix_sub_tags_values[$etag] : $emix_sub_tags_default_values; if($split_itmsk_fix[$etag])
//根据道具类别获取特征价值修正(暂时没有) {
if(isset($emix_sub_tags_values_fix[$kind][$ekey])) if(is_array($split_itmsk_fix[$etag]))
{
$evalues = $split_itmsk_fix[$etag][$kind] ? $split_itmsk_fix[$etag][$kind] : $split_itmsk_fix[$etag]['default'];
}
else
{
$evalues = $split_itmsk_fix[$etag];
}
}
else
{ {
$evalues_fix = $emix_sub_tags_values_fix[$kind][$ekey]; $evalues = $split_default_itmsk_fix;
$evalues += $evalues_fix;
} }
//配吗? //配吗?
if($enum >= $evalues) $ev_sub_tags[$etag] = $evalues; if($enum >= $evalues) $sub_tags[$etag] = $evalues;
} }
//从特征中进一步挑选出高价值对象、限制生成的特征个数 //扣除元素存量,并随机生成特征:
//参数里传进来道具类别了,如果想限制类似【武器上不能有防御属性】【防具上不能有攻击属性】,可以在这里判断。
//但是我觉得来点乱七八糟的属性也挺好的(
$e_sub_tags = Array(); $tn = 0; $e_sub_tags = Array(); $tn = 0;
if(count($ev_sub_tags)>0) if(count($sub_tags)>0)
{ {
//对价值数组降序排序 优先生成高价值属性 //骰一个生成的次要特征上限
arsort($ev_sub_tags); $tag_max = rand(0,count($sub_tags)) + $emix_flag;
foreach($ev_sub_tags as $skey=>$values) do{
{ $skey = array_rand($sub_tags);
if($enum >= $values) $enum -= $sub_tags[$skey];
{ $e_sub_tags[]=$skey;
//扣除存款,输出对应特征 unset($sub_tags[$skey]);
$enum -= $values; $tn++;
$e_sub_tags[]=$skey; }while($tn < $tag_max && count($sub_tags)>0);
$tn++;
}
//到达可生成的特征上限 返回
if($tn >= $tag_max) break;
}
} }
return $e_sub_tags; return $e_sub_tags;
} }
...@@ -556,24 +759,34 @@ ...@@ -556,24 +759,34 @@
//根据次要特征输出道具属性 $max_sk:输出的属性数量上限 //根据次要特征输出道具属性 $max_sk:输出的属性数量上限
function get_emix_itmsk($sub_tags,$kind,$max_sk=5) function get_emix_itmsk($sub_tags,$kind,$max_sk=5)
{ {
global $emix_sub_mixlist,$emix_sub_mix_obbs_fix; global $submix_list,$itmk_to_itmsk_tags;
$sk_value = Array(); $sk_value = Array();
//对传入的次要特征进行组合判断 //对传入的次要特征进行组合判断
if(count($sub_tags)>1) if(count($sub_tags)>1)
{ {
//存在复数个次要特征,判断能否进行组合 //存在复数个次要特征,判断能否进行组合
$mixflag = false; //尝试获取随机配方
foreach($emix_sub_mixlist as $minfo) $r_submix_list = merge_random_emix_list(1);
//合并固定配方与随机配方
$submix_list = array_merge_recursive($r_submix_list,$submix_list);
foreach($submix_list as $minfo)
{ {
//属性组合就不要求数量一一对应了 先到先得 //属性组合就不要求数量一一对应了 先到先得
//逻辑:匹配素材数量>=要求素材数量 感觉有点问题 但又好像没有问题 暂时就这么搞! //逻辑:匹配素材数量>=要求素材数量 感觉有点问题 但又好像没有问题 暂时就这么搞!<-傻了吧 没做重复属性判断
if(count(array_intersect($sub_tags,$minfo['stuff'])) >= count($minfo['stuff'])) if(count(array_intersect($sub_tags,$minfo['stuff'])) >= count($minfo['stuff']) && !in_array($minfo['result'],$sk_value))
{ {
//配方为概率合成 掷骰判定 //配方为概率合成 掷骰判定
if($minfo['obbs']) if($minfo['obbs'])
{ {
//获取概率修正 //获取概率修正
if(isset($emix_sub_mix_obbs_fix[$kind][$minfo['result']])) $minfo['obbs'] += $emix_sub_mix_obbs_fix[$kind][$minfo['result']]; if(is_array($minfo['obbs']))
{
$obbs = $minfo['obbs'][$kind] ? $minfo['obbs'][$kind] : $minfo['obbs']['default'];
}
else
{
$obbs = $minfo['obbs'];
}
if(rand(1,100)>$minfo['obbs']) continue; if(rand(1,100)>$minfo['obbs']) continue;
} }
//配对成功!消除素材特征 //配对成功!消除素材特征
...@@ -583,14 +796,25 @@ ...@@ -583,14 +796,25 @@
} }
//把组合结果丢进待生成的属性队列内 //把组合结果丢进待生成的属性队列内
$sk_value[] = $minfo['result']; $sk_value[] = $minfo['result'];
$mixflag = true;
break; break;
} }
} }
} }
//将次要特征合并进待生成的属性队列内 //将次要特征合并进待生成的属性队列内
$sk_value = array_merge($sk_value,$sub_tags); $sk_value = array_merge($sk_value,$sub_tags);
//从尾部筛出过滤属性数量 //将传入的道具类别与特征对比,过滤掉一些乱七八糟的属性:
$kind = substr($kind,0,1); //只用道具类别的首字母判断……这个叫什么?大类!
foreach($sk_value as $key_sk => $sk)
{
//来点反人类的:
//武器上不会生成“防御性”属性
if($kind=='W' && array_search($sk,$itmk_to_itmsk_tags['D'])) unset($sk_value[$key_sk]);
//防具、道具上不会生成“攻击性”属性
if($kind!='W' && array_search($sk,$itmk_to_itmsk_tags['W'])) unset($sk_value[$key_sk]);
//补给品只会生成杂项属性
if($kind=='H' && !array_search($sk,$itmk_to_itmsk_tags['misc'])) unset($sk_value[$key_sk]);
}
//从尾部筛出超过生成上限的属性
while(count($sk_value)>$max_sk) while(count($sk_value)>$max_sk)
{ {
//shuffle($sub_tags); //按照原顺序筛出,可以优先保留组合出的属性 //shuffle($sub_tags); //按照原顺序筛出,可以优先保留组合出的属性
...@@ -603,6 +827,7 @@ ...@@ -603,6 +827,7 @@
function flip_temp_etags($tags_arr) function flip_temp_etags($tags_arr)
{ {
$cache_arr = Array(); $cache_arr = Array();
//翻转标签
foreach($tags_arr as $eid=>$earr) foreach($tags_arr as $eid=>$earr)
{ {
foreach($earr['dom'] as $dom_tag) foreach($earr['dom'] as $dom_tag)
...@@ -617,29 +842,119 @@ ...@@ -617,29 +842,119 @@
return $cache_arr; return $cache_arr;
} }
//将翻转后的标签数组保存在临时文件里 只在有人用了对应社团卡时执行一次 //打印随机合成结果 记得先执行上面那个翻转数组 把翻转后的数组传进这里 才能确保生成随机属性组合时每个素材都有源头元素
//如果不想用这个的话 也可以直接用flip_temp_etags() 但是每次拆东西的时候都要遍历一遍…… function create_random_emix_list($cache_arr)
{
global $elements_info,$split_itmsk_fix,$split_default_itmsk_fix,$itmk_to_itmsk_tags;
global $random_emix_list,$random_submix_list;
$emix_arr = Array();
//先处理随机合成
foreach($random_emix_list as $eid=>$elist)
{
$emix_arr['random_emix_list'][$eid]['stuff'] = Array(); //缓存文件里只保存键值和配方
foreach($elist['stuff'] as $ekey=>$enum)
{
do{
$ekey = array_rand($elements_info);
}while(isset($emix_arr['random_emix_list'][$eid]['stuff'][$ekey]));
$enum = explode('-',substr($enum,1));
$enum = rand($enum[0],$enum[1]);
$emix_arr['random_emix_list'][$eid]['stuff'][$ekey]=$enum;
}
}
//然后处理随机属性……呃啊
//所有参与属性组合的“特征” 都应该存在于传入的$cache_arr(翻转数组)里 这样才能确保它是有“源头”的
foreach($random_submix_list as $sid=>$slist)
{
$emix_arr['random_smix_list'][$sid]['stuff'] = Array();
foreach($slist['stuff'] as $skey=>$snum)
{
$skey = '';
if(strpos($snum,'sk_')===0)
{
$skey = str_replace('sk_','',$snum);
}
elseif(strpos($snum,'v_')===0)
{
$snum = str_replace('v_','',$snum);
do{
$skey = array_rand($cache_arr['flip_s_tag']);
$sv = $split_itmsk_fix[$skey] ? $split_itmsk_fix[$skey] : $split_default_itmsk_fix;
if(is_array($sv)) $sv = $sv['default'];
}while($sv<$snum || in_array($emix_arr['random_smix_list'][$sid]['stuff']));
}
elseif(strpos($snum,'tags_')===0)
{
$snum = $itmk_to_itmsk_tags[str_replace('tags_','',$snum)];
do{
shuffle($snum);
$skey = $snum[0];
}while(in_array($emix_arr['random_smix_list'][$sid]['stuff']) || !array_key_exists($skey,$cache_arr['flip_s_tag']));
}
$emix_arr['random_smix_list'][$sid]['stuff'][] = $skey;
}
}
return array_merge($emix_arr,$cache_arr);
}
//合并随机合成模板与素材
function merge_random_emix_list($type=0)
{
global $random_emix_list,$random_submix_list;
//获取缓存文件
$cache_file = GAME_ROOT."./gamedata/bak/elementmix.bak";
if(!file_exists($cache_file)) create_emix_cache_file();
$cache_file = openfile_decode($cache_file);
//用已生成的随机配方替换模板配方
if($type == 0)
{
$list = $random_emix_list;
foreach($list as $rkey => $rlist)
{
$list[$rkey]['stuff'] = $cache_file['random_emix_list'][$rkey]['stuff'];
}
}
else
{
$list = $random_submix_list;
foreach($list as $rkey => $rlist)
{
$list[$rkey]['stuff'] = $cache_file['random_smix_list'][$rkey]['stuff'];
}
}
return $list;
}
//生成元素合成相关的临时配置文件 只在有人用了对应社团卡时执行一次
//如果不想用这个的话 也可以直接调用对应的数组生成模块
//研究模式随机生成的一些东西也会以这种方式储存 //研究模式随机生成的一些东西也会以这种方式储存
function create_flip_temp_etags_cache_file($tags_arr) function create_emix_cache_file()
{ {
global $gamecfg,$gamenum,$log; global $temp_etags,$gamecfg,$gamenum,$log;
$file = GAME_ROOT."./gamedata/bak/elementmix.bak"; $file = GAME_ROOT."./gamedata/bak/elementmix.bak";
if(file_exists($file)) if(file_exists($file))
{ {
//检查本局游戏是不是已经生成过配置文件了 //检查本局游戏是不是已经生成过配置文件了
$tmp_arr = openfile_decode($file); $check = openfile_decode($file);
if($tmp_arr['gamenum'] == $gamenum) if($check['gamenum'] == $gamenum)
{ {
//$log.="【DEBUG】配置文件已存在,请不要重复生成。<br>";
return; return;
$log.="【DEBUG】如果你看到这条信息,请转告管理员:“调试完记得把注释去掉!”<br>";
}
else
{
//文件是旧的,直接删掉
unlink($file);
} }
} }
//翻转标签 //翻转标签
$tags_arr = flip_temp_etags($tags_arr); $cache_arr = flip_temp_etags($temp_etags);
//生成随机合成
$cache_arr = create_random_emix_list($cache_arr);
//加入本局游戏编号 //加入本局游戏编号
$tags_arr['gamenum'] = $gamenum; $cache_arr['gamenum'] = $gamenum;
//写入文件 //写入文件
writeover_encode($file,$tags_arr); writeover_encode($file,$cache_arr);
//$log.="【DEBUG】生成了本局游戏对应的临时配置文件。<br>"; //$log.="【DEBUG】生成了本局游戏对应的临时配置文件。<br>";
return; return;
} }
...@@ -724,8 +1039,8 @@ ...@@ -724,8 +1039,8 @@
//过滤杂项道具类别(可以作为一个通用型函数) //过滤杂项道具类别(可以作为一个通用型函数)
//$check_dualwep:1=复合武器会返回一个带有2个武器类别的数组;0=不还原复合武器的类别 //$check_dualwep:1=复合武器会返回一个带有2个武器类别的数组;0=不还原复合武器的类别
//在分解道具流程里,会先检查道具类别是否存在于$itmk_to_e_r内,不存在才会尝试使用该函数过滤掉乱七八糟的类型。 //在分解道具流程里,会先检查道具类别是否存在于$split_itmk_r内,不存在才会尝试使用该函数过滤掉乱七八糟的类型。
function filter_itemkind($kind,$check_dualwep=1) function filter_itemkind($kind,$check_dualwep=0)
{ {
global $iteminfo; global $iteminfo;
//武器: //武器:
...@@ -741,7 +1056,7 @@ ...@@ -741,7 +1056,7 @@
} }
else else
{ //可能只有游戏王卡牌了? { //可能只有游戏王卡牌了?
$kind = 'W'.substr($kind,1,2); $kind = substr($kind,0,2);
} }
break; break;
//饰品、药剂、强化药物、技能书、陷阱、回复道具 一锅端了吧 //饰品、药剂、强化药物、技能书、陷阱、回复道具 一锅端了吧
......
...@@ -5,7 +5,7 @@ if (! defined ( 'IN_GAME' )) { ...@@ -5,7 +5,7 @@ if (! defined ( 'IN_GAME' )) {
} }
function itemuse($itmn) { function itemuse($itmn) {
global $mode, $log, $nosta, $pid, $name, $state, $now,$nick,$achievement; global $mode, $log, $nosta, $pid, $name, $state, $now,$nick,$achievement,$club;
if ($itmn < 1 || $itmn > 6) { if ($itmn < 1 || $itmn > 6) {
$log .= '此道具不存在,请重新选择。'; $log .= '此道具不存在,请重新选择。';
$mode = 'command'; $mode = 'command';
...@@ -1733,21 +1733,61 @@ function itemuse($itmn) { ...@@ -1733,21 +1733,61 @@ function itemuse($itmn) {
$itme = $itms = 0; $itme = $itms = 0;
death ( 's_escape', '', 0, $itm ); death ( 's_escape', '', 0, $itm );
} elseif ($itm == '测试用元素口袋'){ } elseif ($itm == '测试用元素口袋'){
//-----------------------// global $elements_info;
//冴冴可以把这一段放在使用社团卡后执行的事件里 $log.="【DEBUG】你不知道从哪里摸出来一大堆元素!<br>";
include_once config('elementmix',$gamecfg);
$tags_arr = $temp_etags;
include_once GAME_ROOT.'./include/game/elementmix.func.php';
create_flip_temp_etags_cache_file($tags_arr);
//-----------------------//
global $elements_info,$club,$url;
if(!$club || $club!=20) $club=20;
$log.="什么!你从身上不知道哪个角落摸出来一大包元素!<br>";
foreach($elements_info as $e_key=>$e_info) foreach($elements_info as $e_key=>$e_info)
{ {
global ${'element'.$e_key}; global ${'element'.$e_key};
${'element'.$e_key} += 10000; ${'element'.$e_key} += 100000;
$log.="获得了100000份".$elements_info[$e_key]."!<br>";
}
//初始化元素合成缓存文件
include_once GAME_ROOT.'./include/game/elementmix.func.php';
create_emix_cache_file();
} elseif ($itm == '测试用元素大师社团卡'){
//-----------------------//
//这是一张测试用卡 冴冴可以挑一些用得上的放在使用社团卡后执行的事件里
global $elements_info,$sparkle;
//未选择社团情况下才可以用社团卡
if($club)
{
$log.="你已经是有身份的人了!不能再使用社团卡。<br>";
} }
//反正是测试用的 发段怪log
$log.="你拿起<span class='yellow'>$itm</span>左右端详着……<br>
你将目光扫过卡片上若隐若现的纹理,突然发现这张卡内似乎别有洞天。<br>
透过纹理,你看到一群奇装异服的小人们,围坐在一处颇具古典风格的露天广场上。<br>
广场中央有一人,正抬手指天,慷慨陈词。<br>
你听不到它们在说什么,但演讲者那极富感染力的动作勾起了你的好奇心,<br>
你不由自主得沿着它指的方向望去——<br>
<br>
洁白如镜的天穹上,倒映出的是你的脸。<br>
<br>
你赶忙移开视线,但小人们已经发现了你。<br>
从广场再到远处的平原上,数以十计、百计、千计、万计,
一眼望不到头的小人们从你视野的尽头涌出,挤向你所在的方向。<br>
就在此时,你突然感到手心一烫,下意识地便将手里的卡片丢了出去。<br>
眼前亦真亦幻的怪异景象登时消失不见了。<br>
<br>
你低下头,发现卡片已经被烧掉一半了,<br>
在被火焰烧灼得卷曲起的边缘处,漏出了某样东西的一角。<br>
你捡起卡片,甩了甩,便看到一个足足有卡片五倍甚至四倍大的东西从里面掉了出来!<br>";
$log.="<br>获得了<span class='sparkle'>{$sparkle}元素口袋{$sparkle}</span>!<br>";
$log.="……这到底是怎么一回事呢?<br><br>";
//社团变更
$club = 20;
//获取初始元素与第一条配方
$dice = rand(0,5);
global ${'element'.$dice};
${'element'.$dice} += 200+$dice;
//初始化元素合成缓存文件
include_once GAME_ROOT.'./include/game/elementmix.func.php';
create_emix_cache_file();
//销毁道具
$itm = $itmk = $itmsk = '';
$itme = $itms = 0;
//-----------------------//
} elseif ($itm == '提示纸条A') { } elseif ($itm == '提示纸条A') {
$log .= '你读着纸条上的内容:<br>“执行官其实都是幻影,那个红暮的身上应该有召唤幻影的玩意。”<br>“用那个东西然后打倒幻影的话能用游戏解除钥匙出去吧。”<br>'; $log .= '你读着纸条上的内容:<br>“执行官其实都是幻影,那个红暮的身上应该有召唤幻影的玩意。”<br>“用那个东西然后打倒幻影的话能用游戏解除钥匙出去吧。”<br>';
} elseif ($itm == '提示纸条B') { } elseif ($itm == '提示纸条B') {
...@@ -1898,11 +1938,37 @@ function itemuse($itmn) { ...@@ -1898,11 +1938,37 @@ function itemuse($itmn) {
$log .= " <span class=\"yellow\">$itm</span> 该如何使用呢?<br>"; $log .= " <span class=\"yellow\">$itm</span> 该如何使用呢?<br>";
} }
//元素大师使用提示纸条的特殊效果:
if($club == 20 && strpos($itmk,'Y')===0 && strpos($itm,'提示纸条')!==false)
{
$log.="<br>就在你读完内容打算把纸条收起来时,你愕然发现纸条背面竟然还有字!<br><br>";
include_once config('elementmix',$gamecfg);
$log.= $emix_slip[array_rand($emix_slip)];
//除商店纸条外:提供一条元素特征(TODO)、或一条固定配方、或一条随机属性组合
if(!preg_match('/(A|B|C|D)/',$itm))
{
$log .= "“附:见面有缘,再送你一条提示吧:”<br>";
/*** TODO:把这一块封装进一个函数里 ***/
$log .= "<span class='yellow'>“将带有";
global $itemspkinfo;
include_once GAME_ROOT.'./include/game/elementmix.func.php';
$s_list = merge_random_emix_list(1); $s_id = array_rand($s_list);
foreach($s_list[$s_id]['stuff'] as $skey) $log .= "【$itemspkinfo[$skey]】";
$s_result = $itemspkinfo[$random_submix_list[$s_id]['result']];
$log .= "特征的元素组合起来,就有机会组合出【{$s_result}】属性。”</span><br>";
/*** TODO:把这一块封装进一个函数里 ***/
}
//阅后即焚
$log .="<br>……说这么多鬼记得住啊!<br>你思考了一下,决定把{$itm}吃进肚子里,以便慢慢消化其中的知识。<br>";
$itms--;
}
if (($itms <= 0) && ($itm)) { if (($itms <= 0) && ($itm)) {
$log .= "<span class=\"red\">$itm</span> 用光了。<br>"; $log .= "<span class=\"red\">$itm</span> 用光了。<br>";
$itm = $itmk = $itmsk = ''; $itm = $itmk = $itmsk = '';
$itme = $itms = 0; $itme = $itms = 0;
} }
} else { } else {
$log .= "你使用了道具 <span class=\"yellow\">$itm</span> 。<br>但是什么也没有发生。<br>"; $log .= "你使用了道具 <span class=\"yellow\">$itm</span> 。<br>但是什么也没有发生。<br>";
} }
......
...@@ -52,25 +52,19 @@ function demiSecTimerStarter(msec){ ...@@ -52,25 +52,19 @@ function demiSecTimerStarter(msec){
timerid = setInterval("demiSecTimer()",itv); timerid = setInterval("demiSecTimer()",itv);
} }
function itemmixchooser(type=NULL){ function itemmixchooser(){
var istart = 1; for(i=1;i<=6;i++){
var iend = 6; var mname = 'mitm'+i;
var iname = 'mitm';
if(type==20)
{
istart = 0;
iend = 5;
iname = 'emitm';
}
for(i=istart;i<=iend;i++){
var mname = iname+i;
if($(mname) != null){ if($(mname) != null){
if($(mname).checked){ if($(mname).checked){
$(mname).value=i; $(mname).value=i;
} }
} }
} }
if($('change_emr') != null && $('change_emr').checked) $('change_emr').value=1;
if($('change_emax') != null && $('change_emax').checked) $('change_emax').value=1;
} }
//icon select //icon select
//function iconMover(){ //function iconMover(){
// gd = document.valid.gender[0].checked ? 'm' : 'f'; // gd = document.valid.gender[0].checked ? 'm' : 'f';
...@@ -358,6 +352,11 @@ function getEmitmeR(type=0) { ...@@ -358,6 +352,11 @@ function getEmitmeR(type=0) {
var r = document.getElementById("emitme_r").value; var r = document.getElementById("emitme_r").value;
$('s_emitme_r').innerHTML = r; $('s_emitme_r').innerHTML = r;
$('s_emitms_r').innerHTML = 100-r; $('s_emitms_r').innerHTML = 100-r;
$('sr_warning').innerHTML = '';
if(r>79 || r<21)
{
$('sr_warning').innerHTML = '警告:过度干预可能引发灾难性的后果!';
}
} }
} }
......
...@@ -273,7 +273,7 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') { ...@@ -273,7 +273,7 @@ function nparse_news($start = 0, $range = 0 ){//$type = '') {
} elseif($news == 'present') { } elseif($news == 'present') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}打开了{$b},获得了{$c}!</span><br>\n"; $newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}打开了{$b},获得了{$c}!</span><br>\n";
} elseif($news == 'emix_success') { } elseif($news == 'emix_success') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}将零散的元素重新组合成{$b}!</span><br>\n"; $newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"yellow\">{$a}用零散的元素组合出{$b}!</span><br>\n";
} elseif($news == 'emix_failed') { } elseif($news == 'emix_failed') {
$newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}试图把零散的元素重新组合起来,但是失败了!哎呀呀、这可真是……</span><br>\n"; $newsinfo .= "<li>{$hour}{$min}{$sec}秒,<span class=\"red\">{$a}试图把零散的元素重新组合起来,但是失败了!哎呀呀、这可真是……</span><br>\n";
} else { } else {
......
...@@ -7,45 +7,62 @@ ...@@ -7,45 +7,62 @@
<br> <br>
<!--元素选取模块--> <!--元素选取模块-->
<!--{if $element0}--> <!--{if $element0}-->
<input type="checkbox" id="emitm0" name="emitm0" value="-1"><a onclick="$('emitm0').click();" href="javascript:void(0);"> $elements_info[0] 放入:</a> <input type="checkbox" id="mitm1" name="mitm1" value="-1"><a onclick="$('mitm1').click();" href="javascript:void(0);">$etaginfo0 $elements_info[0] 放入:</span></a>
<input type="number" style="width:50px" name="emitm0_num" value="$element0" min="0" max="$element0" oninput="if(value>$element0)value=$element0;if(value<0)value=0" /><br> <input type="number" style="width:50px" name="emitm0_num" value="$element0" min="0" max="$element0" oninput="if(value>$element0)value=$element0;if(value<0)value=0" /><br>
<!--{/if}--> <!--{/if}-->
<!--{if $element1}--> <!--{if $element1}-->
<input type="checkbox" id="emitm1" name="emitm1" value="-1"><a onclick="$('emitm1').click();" href="javascript:void(0);"> $elements_info[1] 放入:</a> <input type="checkbox" id="mitm2" name="mitm2" value="-1"><a onclick="$('mitm2').click();" href="javascript:void(0);">$etaginfo1 $elements_info[1] 放入:</span></a>
<input type="number" style="width:50px" name="emitm1_num" value="$element1" min="0" max="$element1" oninput="if(value>$element1)value=$element1;if(value<0)value=0" /><br> <input type="number" style="width:50px" name="emitm1_num" value="$element1" min="0" max="$element1" oninput="if(value>$element1)value=$element1;if(value<0)value=0" /><br>
<!--{/if}--> <!--{/if}-->
<!--{if $element2}--> <!--{if $element2}-->
<input type="checkbox" id="emitm2" name="emitm2" value="-1"><a onclick="$('emitm2').click();" href="javascript:void(0);"> $elements_info[2] 放入:</a> <input type="checkbox" id="mitm3" name="mitm3" value="-1"><a onclick="$('mitm3').click();" href="javascript:void(0);">$etaginfo2 $elements_info[2] 放入:</span></a>
<input type="number" style="width:50px" name="emitm2_num" value="$element2" min="0" max="$element2" oninput="if(value>$element2)value=$element2;if(value<0)value=0" /><br> <input type="number" style="width:50px" name="emitm2_num" value="$element2" min="0" max="$element2" oninput="if(value>$element2)value=$element2;if(value<0)value=0" /><br>
<!--{/if}--> <!--{/if}-->
<!--{if $element3}--> <!--{if $element3}-->
<input type="checkbox" id="emitm3" name="emitm3" value="-1"><a onclick="$('emitm3').click();" href="javascript:void(0);"> $elements_info[3] 放入:</a> <input type="checkbox" id="mitm4" name="mitm4" value="-1"><a onclick="$('mitm4').click();" href="javascript:void(0);">$etaginfo3 $elements_info[3] 放入:</span></a>
<input type="number" style="width:50px" name="emitm3_num" value="$element3" min="0" max="$element3" oninput="if(value>$element3)value=$element3;if(value<0)value=0" /><br> <input type="number" style="width:50px" name="emitm3_num" value="$element3" min="0" max="$element3" oninput="if(value>$element3)value=$element3;if(value<0)value=0" /><br>
<!--{/if}--> <!--{/if}-->
<!--{if $element4}--> <!--{if $element4}-->
<input type="checkbox" id="emitm4" name="emitm4" value="-1"><a onclick="$('emitm4').click();" href="javascript:void(0);"> $elements_info[4] 放入:</a> <input type="checkbox" id="mitm5" name="mitm5" value="-1"><a onclick="$('mitm5').click();" href="javascript:void(0);">$etaginfo4 $elements_info[4] 放入:</span></a>
<input type="number" style="width:50px" name="emitm4_num" value="$element4" min="0" max="$element4" oninput="if(value>$element4)value=$element4;if(value<0)value=0" /><br> <input type="number" style="width:50px" name="emitm4_num" value="$element4" min="0" max="$element4" oninput="if(value>$element4)value=$element4;if(value<0)value=0" /><br>
<!--{/if}--> <!--{/if}-->
<!--{if $element5}--> <!--{if $element5}-->
<input type="checkbox" id="emitm5" name="emitm5" value="-1"><a onclick="$('emitm5').click();" href="javascript:void(0);"> $elements_info[5] 放入:</a> <input type="checkbox" id="mitm6" name="mitm6" value="-1"><a onclick="$('mitm6').click();" href="javascript:void(0);">$etaginfo5 $elements_info[5] 放入:</span></a>
<input type="number" style="width:50px" name="emitm5_num" value="$element5" min="0" max="$element5" oninput="if(value>$element5)value=$element5;if(value<0)value=0" /><br> <input type="number" style="width:50px" name="emitm5_num" value="$element5" min="0" max="$element5" oninput="if(value>$element5)value=$element5;if(value<0)value=0" /><br>
<!--{/if}--> <!--{/if}-->
<br> <br>
<!--5级后解锁:效果、耐久比例调节--> <!--自带:通过投入元素数量的奇偶决定道具类别-->
<span class="yellow">&nbsp;&nbsp;【数术】</span><br>
&nbsp; › 投入份数<span class="lime">最多(±10)</span>的一种或多种元素<br>
会成为<span class="lime">主元素</span>,影响合成结果的<span class="lime">类型</span><br>
&nbsp; › 投入的主元素为<span class="redseed"></span>|<span class="blueseed"></span>数份时,元素会展<br>
<span class="redseed">第一</span>|<span class="blueseed">第二</span>个主特征。<br>
<br>
<!--5级后解锁:最大生成效果调节-->
<!--{if $lvl>=5}--> <!--{if $lvl>=5}-->
<span class="yellow">&nbsp;【调谐】:</span><br> <span class="yellow">&nbsp;&nbsp;【节制】</span><span class="grey">(勾选启用)</span><input type="checkbox" id="change_emr" name="change_emr" value="-1"><br>
&nbsp; - 你能够干涉元素合成结果的<span class="lime b">效耐比率</span><br> &nbsp; › 你可以主动限制元素合成结果的<span class="lime">效耐上限</span><br>
&nbsp; - 当前:效果占比<span class="yellow b"><span id="s_emitme_r" name="s_emitme_r">55</span>%】</span>&nbsp;耐久占比<span class="yellow b"><span id="s_emitms_r" name="s_emitms_r">45</span>%】</span><br> &nbsp; › 当前:生成道具的效果+耐久上限<span class="yellow"><span id="s_emitme_max" name="s_emitme_max">$emax</span></span><br>
<input type="range" class="range" style="width:220px" id="emitme_r" name="emitme_r" min="2" max="98" value="55" onclick="getEmitmeR(0)"><br> <input type="range" class="range" step="0.1" style="width:220px" id="emitme_max_r" name="emitme_max_r" min="1" max="100" value="100" onchange="getEmitmeR(1)"><br>
<br>
<!--{else}-->
<span class="grey">&nbsp;&nbsp;【节制】(5级后解锁):<br>
&nbsp; › 解锁后可以限制元素合成的<span class="lime">效耐上限</span><br></span>
<br> <br>
<!--{/if}--> <!--{/if}-->
<!--15级后解锁:最大生成效果调节--> <!--15级后解锁:效果、耐久比例调节-->
<!--{if $lvl>=15}--> <!--{if $lvl>=15}-->
<span class="yellow">&nbsp;【节制】:</span><br> <span class="yellow">&nbsp;&nbsp;【预言】</span><span class="grey">(勾选启用)</span><input type="checkbox" id="change_emax" name="change_emax" value="-1"><br>
&nbsp; - 你可以主动限制元素合成结果的<span class="lime b">效果上限</span><br> &nbsp; › 你能够干涉元素合成结果的<span class="lime">效耐占比</span><br>
&nbsp; - 当前:生成道具的效果上限<span class="yellow b"><span id="s_emitme_max" name="s_emitme_max">$emax</span></span><br> &nbsp; › 当前:效果占比<span class="yellow"><span id="s_emitme_r" name="s_emitme_r">55</span>%】</span>&nbsp;耐久占比<span class="yellow"><span id="s_emitms_r" name="s_emitms_r">45</span>%】</span><br>
<input type="range" class="range" style="width:220px" id="emitme_max_r" name="emitme_max_r" min="1" max="100" value="100" onclick="getEmitmeR(1)"><br> &nbsp; <span id="sr_warning" name="sr_warning" class="red"></span>
<input type="range" class="range" style="width:220px" id="emitme_r" name="emitme_r" min="2" max="98" value="55" onchange="getEmitmeR(0)"><br>
<br>
<!--{else}-->
<span class="grey">&nbsp;&nbsp;【预言】(15级后解锁):<br>
&nbsp; › 解锁后能够干涉元素合成结果的<span class="lime">效耐占比</span><br>
&nbsp; › 当前:效果、耐久占比会在<span class="lime">2%~98%</span>间浮动。</span><br>
<br> <br>
<!--{/if}--> <!--{/if}-->
<input type="button" class="cmdbutton" name="submit" value="提交" onclick="$('command').value='elementmix';itemmixchooser($club);postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" name="submit" value="提交" onclick="$('command').value='elementmix';itemmixchooser();postCmd('gamecmd','command.php');this.disabled=true;">
<input type="button" class="cmdbutton" name="submit" value="放弃" onclick="postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" name="submit" value="放弃" onclick="postCmd('gamecmd','command.php');this.disabled=true;">
\ No newline at end of file
...@@ -10,5 +10,5 @@ ...@@ -10,5 +10,5 @@
<!--{if $itms5}--><input type="checkbox" id="mitm5" name="mitm5" value="0"><a onclick="$('mitm5').click();" href="javascript:void(0);">$itm5/$itme5/$itms5</a><br><!--{/if}--> <!--{if $itms5}--><input type="checkbox" id="mitm5" name="mitm5" value="0"><a onclick="$('mitm5').click();" href="javascript:void(0);">$itm5/$itme5/$itms5</a><br><!--{/if}-->
<!--{if $itms6}--><input type="checkbox" id="mitm6" name="mitm6" value="0"><a onclick="$('mitm6').click();" href="javascript:void(0);">$itm6/$itme6/$itms6</a><br><!--{/if}--> <!--{if $itms6}--><input type="checkbox" id="mitm6" name="mitm6" value="0"><a onclick="$('mitm6').click();" href="javascript:void(0);">$itm6/$itme6/$itms6</a><br><!--{/if}-->
<br> <br>
<input type="button" class="cmdbutton" name="submit" value="提交" onclick="$('command').value='itemencase';itemmixchooser(0);postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" name="submit" value="提交" onclick="$('command').value='itemencase';itemmixchooser();postCmd('gamecmd','command.php');this.disabled=true;">
<input type="button" class="cmdbutton" name="submit" value="放弃" onclick="postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" name="submit" value="放弃" onclick="postCmd('gamecmd','command.php');this.disabled=true;">
\ No newline at end of file
...@@ -10,5 +10,5 @@ ...@@ -10,5 +10,5 @@
<!--{if $itms5}--><input type="checkbox" id="mitm5" name="mitm5" value="0"><a onclick="$('mitm5').click();" href="javascript:void(0);">$itm5/$itme5/$itms5</a><br><!--{/if}--> <!--{if $itms5}--><input type="checkbox" id="mitm5" name="mitm5" value="0"><a onclick="$('mitm5').click();" href="javascript:void(0);">$itm5/$itme5/$itms5</a><br><!--{/if}-->
<!--{if $itms6}--><input type="checkbox" id="mitm6" name="mitm6" value="0"><a onclick="$('mitm6').click();" href="javascript:void(0);">$itm6/$itme6/$itms6</a><br><!--{/if}--> <!--{if $itms6}--><input type="checkbox" id="mitm6" name="mitm6" value="0"><a onclick="$('mitm6').click();" href="javascript:void(0);">$itm6/$itme6/$itms6</a><br><!--{/if}-->
<br> <br>
<input type="button" class="cmdbutton" name="submit" value="提交" onclick="$('command').value='itemmix';itemmixchooser(0);postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" name="submit" value="提交" onclick="$('command').value='itemmix';itemmixchooser();postCmd('gamecmd','command.php');this.disabled=true;">
<input type="button" class="cmdbutton" name="submit" value="放弃" onclick="postCmd('gamecmd','command.php');this.disabled=true;"> <input type="button" class="cmdbutton" name="submit" value="放弃" onclick="postCmd('gamecmd','command.php');this.disabled=true;">
\ No newline at end of file
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