diff --git a/game/config.js b/game/config.js
index e88957795..93bcd8b79 100755
--- a/game/config.js
+++ b/game/config.js
@@ -38,7 +38,7 @@ window.config={
qunyingzhuan:'群英',
swd:'剧情',
- character_play_config:'角色卡牌',
+ character_play_config:'技能卡牌',
soldier_play_config:'士兵模式',
strategy_play_config:'尔虞我诈',
wuxing_play_config:'五行生克',
diff --git a/game/game.js b/game/game.js
index 009717d56..973e549ff 100755
--- a/game/game.js
+++ b/game/game.js
@@ -641,7 +641,7 @@
name:'玩法',
config:{
character:{
- name:'角色卡牌',
+ name:'技能卡牌',
init:false,
restart:true,
onclick:function(bool){
@@ -654,6 +654,16 @@
game.saveConfig('plays',lib.config.plays);
}
},
+ character_num_playpackconfig:{
+ name:'卡牌比例',
+ init:'0.05',
+ item:{
+ '0.02':'2%',
+ '0.05':'5%',
+ '0.1':'10%',
+ '0.2':'20%',
+ }
+ },
soldier:{
name:'士兵模式',
init:false,
@@ -682,6 +692,16 @@
game.saveConfig('plays',lib.config.plays);
}
},
+ wuxing_num_playpackconfig:{
+ name:'带属性卡牌',
+ init:'0.3',
+ item:{
+ '0.1':'10%',
+ '0.2':'20%',
+ '0.3':'30%',
+ '0.5':'50%',
+ }
+ },
weather:{
name:'天气变化',
init:false,
@@ -696,13 +716,74 @@
game.saveConfig('plays',lib.config.plays);
}
},
+ // weather_noqing_playpackconfig:{
+ // name:'异常天气出现概率',
+ // init:'0.5',
+ // item:{
+ // '0.1':'10%',
+ // '0.3':'30%',
+ // '0.5':'50%',
+ // '0.7':'70%',
+ // }
+ // },
+ weather_chance_playpackconfig:{
+ name:'天气效果触发概率',
+ init:'0.2',
+ item:{
+ '0.1':'10%',
+ '0.2':'20%',
+ '0.3':'30%',
+ '0.5':'50%',
+ },
+ onclick:function(item){
+ game.saveConfig('weather_chance_playpackconfig',item);
+ _status.weatherchance=parseFloat(lib.config.weather_chance_playpackconfig)||0;
+ var chancestr=parseInt(_status.weatherchance*100)+'%';
+ for(var i in lib.translate){
+ if(i.indexOf('__weather_')==0){
+ lib.translate[i.slice(1)]=lib.translate[i].replace(/&weather&/,chancestr);
+ }
+ }
+ }
+ },
+ weather_duration_playpackconfig:{
+ name:'异常天气持续时间',
+ init:'[3,6]',
+ item:{
+ '[3,3]':'3~6回合',
+ '[3,6]':'3~9回合',
+ '[6,3]':'6~9回合',
+ '[6,6]':'6~12回合',
+ }
+ },
+ weather_qingduration_playpackconfig:{
+ name:'晴朗天气持续时间',
+ init:'[3,6]',
+ item:{
+ '[3,3]':'3~6回合',
+ '[3,6]':'3~9回合',
+ '[6,3]':'6~9回合',
+ '[6,6]':'6~12回合',
+ }
+ },
update:function(config,map){
for(var i in map){
- if(lib.config.plays.contains(i)){
- map[i].classList.add('on');
+ if(i.indexOf('_playpackconfig')!=-1){
+ map[i].classList.add('indent');
+ if(lib.config.plays.contains(i.slice(0,i.indexOf('_')))){
+ map[i].show();
+ }
+ else{
+ map[i].hide();
+ }
}
else{
- map[i].classList.remove('on');
+ if(lib.config.plays.contains(i)){
+ map[i].classList.add('on');
+ }
+ else{
+ map[i].classList.remove('on');
+ }
}
}
}
@@ -7553,6 +7634,26 @@
if(content.type=='delay'){
game.delay(content.content);
}
+ else if(content.type=='play'){
+ window.play={};
+ if(!event.playtoload){
+ event.playtoload=1;
+ }
+ else{
+ event.playtoload++;
+ }
+ var script=lib.init.js('play',content.name);
+ script.addEventListener('load',function(){
+ var play=window.play[content.name]
+ if(play&&play.video){
+ play.video(content.init);
+ }
+ event.playtoload--;
+ if(event.playtoload==0){
+ delete window.play;
+ }
+ });
+ }
else if(typeof content.player=='string'&&game.playerMap[content.player]&&
game.playerMap[content.player].classList&&
!game.playerMap[content.player].classList.contains('obstacle')){
@@ -11992,7 +12093,10 @@
var autoskillNodes=[];
var banskillNodes=[];
var banskill;
- if(mode=='skill'){
+ if(mode=='playpack'){
+ page.style.paddingBottom='10px';
+ }
+ else if(mode=='skill'){
var autoskillexpanded=false;
var banskillexpanded=false;
ui.create.div('.config.more','自动发动
>
',page,function(){
diff --git a/game/package.js b/game/package.js
index b655088f1..56f1b412a 100755
--- a/game/package.js
+++ b/game/package.js
@@ -36,7 +36,7 @@ card.pack={
compensate:'补充卡牌',
};
play.pack={
- character:'武将卡牌',
+ character:'技能卡牌',
soldier:'士兵模式',
wuxing:'五行生克',
weather:'天气变化',
diff --git a/layout/default/layout.css b/layout/default/layout.css
index 8016055ca..e62eb90b2 100755
--- a/layout/default/layout.css
+++ b/layout/default/layout.css
@@ -864,6 +864,14 @@ div[data-color="unknownm"]{
font-family:'huangcao';
font-size: 24px;
color:white !important;
+ pointer-events: none;
+}
+div:hover>.wunature{
+ /*opacity: 0.5;*/
+}
+.button.noclick .wunature,
+.player.treasure .wunature{
+ display: none;
}
.player .actcount.hp{
left: -24px;
diff --git a/layout/default/menu.css b/layout/default/menu.css
index 441ab05d9..fbe8b310f 100644
--- a/layout/default/menu.css
+++ b/layout/default/menu.css
@@ -202,7 +202,7 @@
.menu.main>.menu-content>div>.right.pane>div>.config.indent,
.menu.main>.menu-content>div>.right.pane>div>.config.toggle.indent{
left:12px !important;
- width: calc(100% - 20px) !important;
+ width: calc(100% - 32px) !important;
}
.menu.main>.menu-content>div>.right.pane>div:not(.expanded)>.config.auto-hide,
.menu.main>.menu-content>div>.right.pane>div>.config.hidden{
diff --git a/layout/mobile/layout.css b/layout/mobile/layout.css
index 4f5ee5cd1..55af88694 100644
--- a/layout/mobile/layout.css
+++ b/layout/mobile/layout.css
@@ -113,6 +113,9 @@
top:10px;
left:2px;
}
+#arena:not(.chess) .player[data-position='0']:not(.minskin) .wunature{
+ top:84px;
+}
#arena:not(.chess) .player.fullskin2[data-position='0']:not(.minskin)>.avatar,
#arena:not(.chess) .player.fullskin2[data-position='0']:not(.minskin)>.avatar2{
diff --git a/layout/newlayout/global.css b/layout/newlayout/global.css
index 0eb4122ad..fdb2b4c87 100644
--- a/layout/newlayout/global.css
+++ b/layout/newlayout/global.css
@@ -37,6 +37,9 @@
.player .wunature{
top:137px;
}
+.player.minskin .wunature{
+ top:80px;
+}
.player .actcount.hp{
top: 18px;
left: 15px;
diff --git a/play/character.js b/play/character.js
index adc97cc6a..b56523a2f 100755
--- a/play/character.js
+++ b/play/character.js
@@ -1,6 +1,12 @@
play.character={
- mode:['identity','guozhan','versus'],
- init:function(){
+ // mode:['identity','guozhan','versus'],
+ video:function(list){
+ this.init(list);
+ for(var i in this.skill){
+ lib.skill[i]=this.skill[i];
+ }
+ },
+ init:function(videolist){
var list=[],list2=[];
var i,j,name;
for(i in lib.character){
@@ -11,7 +17,19 @@ play.character={
list.push(i);
}
list.randomSort();
- list=list.splice(0,Math.ceil(lib.card.list.length/20));
+ list=list.splice(0,Math.ceil(lib.card.list.length*(parseFloat(lib.config.character_num_playpackconfig)||0)));
+ if(_status.video){
+ if(videolist){
+ list=videolist;
+ }
+ }
+ else{
+ lib.video.push({
+ type:'play',
+ init:list,
+ name:'character'
+ });
+ }
var suit=['heart','diamond','club','spade'];
for(i=0;i牌堆中随机加入5%的角色牌出牌阶段对自己使用,'+
+ '技能卡牌':'- 牌堆中随机加入5%的技能牌
- 出牌阶段对自己使用,'+
'随机获得卡牌对应角色的一项技能直到使用者的下一个出牌阶段开始'+
- '
- 一个角色最多只能通过角色卡牌获得一个技能,新获得技能后将失去之前以此法获得的技能'+
+ '
- 一个角色最多只能通过技能卡牌获得一个技能,新获得技能后将失去之前以此法获得的技能'+
'
- 不能获得主公技、限定技、觉醒技等特殊技能,以及场上只能唯一存在的技能'+
'
- 若卡牌对应角色没有可获得的技能,目标摸两张牌'
},
@@ -88,10 +106,34 @@ play.character={
mark:'card',
intro:{
name:function(storage,player){
- return get.translation(player.additionalSkills.charactercard);
+ if(_status.video){
+ if(player.marks.charactercard&&player.marks.charactercard.name){
+ var name=player.marks.charactercard.name;
+ if(name){
+ name=name.slice(0,name.indexOf('_charactercard'));
+ return get.translation(name);
+ }
+ }
+ return '';
+ }
+ else{
+ return get.translation(player.additionalSkills.charactercard);
+ }
},
content:function(storage,player){
- return lib.translate[player.additionalSkills.charactercard+'_info'];
+ if(_status.video){
+ if(player.marks.charactercard&&player.marks.charactercard.name){
+ var name=player.marks.charactercard.name;
+ if(name){
+ name=name.slice(0,name.indexOf('_charactercard'));
+ return get.skillintro(name,true,true);
+ }
+ }
+ return '';
+ }
+ else{
+ return lib.translate[player.additionalSkills.charactercard+'_info'];
+ }
},
onunmark:function(storage,player){
delete player.additionalSkills.charactercard;
diff --git a/play/soldier.js b/play/soldier.js
index 3c0581312..4de868301 100755
--- a/play/soldier.js
+++ b/play/soldier.js
@@ -702,30 +702,30 @@ play.soldier={
qunbing_info:'判定阶段和回合结束阶段前,你可以令一名群势力角色摸一张牌',
},
help:{
- '士兵模式':'
- 游戏开始阶段,场上所有角色随机获得3名士兵。
- 回合开始阶段,你获得一名士兵的技能。
- 当你即将受到伤害时,你可以选择一名士兵替你承受此次伤害,然后失去此士兵',
- // '轻步兵':'回合结束阶段,你回复一点体力。',
- // '重步兵':'锁定技,回合结束阶段,你回复一点体力;黑【杀】对你无效;你计算与其他角色的距离时始终+1。',
- // '轻骑兵':'你使用的【杀】可额外指定一个目标。',
- // '重骑兵':'你使用的【杀】可额外指定一个目标。锁定技,目标角色需要额外出一张【闪】才能闪避你的【杀】;你计算与其他角色的距离时始终+1。',
- // '弓箭兵':'锁定技,你的攻击范围无限;你不能对距离1以内的角色使用【杀】。',
- // '强弩兵':'锁定技,你的【杀】无视防具;你的攻击范围+1;距离2以外的角色不能成为你【杀】的目标。',
- // '长枪兵':'你的【杀】可指定距离2以内的目标。',
- // '圆盾兵':'锁定技,你不能成为点数小于8的【杀】的目标。',
- // '刀剑兵':'锁定技,你使用的点数大于8的杀不可闪避',
- // '水军':'你防止非属性伤害;你受到的属性伤害+1。',
- // '军医':'出牌阶段限一次,你可以令一名其他角色恢复一点体力。',
- // '火箭兵':'你可以将一张普通【杀】当作火【杀】使用。锁定技,你使用的火【杀】无距离限制,且需要额外出一张【闪】才能闪避;你使用火【杀】指定目标后,失去一点体力。',
- // '斥候':'出牌阶段开始时,你可以观看一名角色的手牌',
- // '通信兵':'出牌阶段,你可以给其他角色一张牌,并摸一张牌;其他角色可以在其出牌阶段给你一张牌,并摸一张牌。',
- // '运输兵':'出牌阶段,你可以观看牌堆顶的X张牌,并其中获得Y张牌(X为你体力上限,Y为你当前体力值)。',
- // '轻车兵':'锁定技,其他角色计算与你的距离时始终-1;你的【杀】指定目标后,视为对其他在攻击范围内的所有角色各使用了一张【杀】。',
- // '重车兵':'锁定技,其他角色计算与你的距离时始终-1;你的【杀】指定目标后,视为对其他在攻击范围内的所有角色各使用了一张【杀】;距离1以内的角色不能指定你成为【杀】目标;你不能使用装备牌;你计算与其他角色的距离时始终+1。',
- // '斧兵':'你使用【杀】指定目标后,你可以弃置其防具。你的【杀】指定目标时,若其没有防具,你对其造成伤害+1。',
- // '器械兵':'你每失去一次装备区的牌,可立即将一名其他角色的装备牌置于你的装备区(不可替换已有装备)',
- // '骑射手':'你使用的【杀】可额外指定一个目标。锁定技,你的攻击范围无限;你不能对距离1以内的角色使用【杀】;你的【杀】指定目标后须进行一次判定:若为♠,该【杀】无效。',
- // '蜀兵':'判定阶段和回合结束阶段前,你可以令一名蜀势力角色摸一张牌',
- // '魏兵':'判定阶段和回合结束阶段前,你可以令一名魏势力角色摸一张牌',
- // '吴兵':'判定阶段和回合结束阶段前,你可以令一名吴势力角色摸一张牌',
- // '群兵':'判定阶段和回合结束阶段前,你可以令一名群势力角色摸一张牌',
+ '士兵模式':'
- 游戏开始阶段,场上所有角色随机获得3名士兵。
- 回合开始阶段,你获得一名士兵的技能。
- 当你即将受到伤害时,你可以选择一名士兵替你承受此次伤害,然后失去此士兵'+
+ '
- 轻步兵:回合结束阶段,你回复一点体力。'+
+ '
- 重步兵:锁定技,回合结束阶段,你回复一点体力;黑【杀】对你无效;你计算与其他角色的距离时始终+1。'+
+ '
- 轻骑兵:你使用的【杀】可额外指定一个目标。'+
+ '
- 重骑兵:你使用的【杀】可额外指定一个目标。锁定技,目标角色需要额外出一张【闪】才能闪避你的【杀】;你计算与其他角色的距离时始终+1。'+
+ '
- 弓箭兵:锁定技,你的攻击范围无限;你不能对距离1以内的角色使用【杀】。'+
+ '
- 强弩兵:锁定技,你的【杀】无视防具;你的攻击范围+1;距离2以外的角色不能成为你【杀】的目标。'+
+ '
- 长枪兵:你的【杀】可指定距离2以内的目标。'+
+ '
- 圆盾兵:锁定技,你不能成为点数小于8的【杀】的目标。'+
+ '
- 刀剑兵:锁定技,你使用的点数大于8的杀不可闪避'+
+ '
- 水军:你防止非属性伤害;你受到的属性伤害+1。'+
+ '
- 军医:出牌阶段限一次,你可以令一名其他角色恢复一点体力。'+
+ '
- 火箭兵:你可以将一张普通【杀】当作火【杀】使用。锁定技,你使用的火【杀】无距离限制,且需要额外出一张【闪】才能闪避;你使用火【杀】指定目标后,失去一点体力。'+
+ '
- 斥候:出牌阶段开始时,你可以观看一名角色的手牌'+
+ '
- 通信兵:出牌阶段,你可以给其他角色一张牌,并摸一张牌;其他角色可以在其出牌阶段给你一张牌,并摸一张牌。'+
+ '
- 运输兵:出牌阶段,你可以观看牌堆顶的X张牌,并其中获得Y张牌(X为你体力上限,Y为你当前体力值)。'+
+ '
- 轻车兵:锁定技,其他角色计算与你的距离时始终-1;你的【杀】指定目标后,视为对其他在攻击范围内的所有角色各使用了一张【杀】。'+
+ '
- 重车兵:锁定技,其他角色计算与你的距离时始终-1;你的【杀】指定目标后,视为对其他在攻击范围内的所有角色各使用了一张【杀】;距离1以内的角色不能指定你成为【杀】目标;你不能使用装备牌;你计算与其他角色的距离时始终+1。'+
+ '
- 斧兵:你使用【杀】指定目标后,你可以弃置其防具。你的【杀】指定目标时,若其没有防具,你对其造成伤害+1。'+
+ '
- 器械兵:你每失去一次装备区的牌,可立即将一名其他角色的装备牌置于你的装备区(不可替换已有装备)'+
+ '
- 骑射手:你使用的【杀】可额外指定一个目标。锁定技,你的攻击范围无限;你不能对距离1以内的角色使用【杀】;你的【杀】指定目标后须进行一次判定:若为♠,该【杀】无效。'+
+ '
- 蜀兵:判定阶段和回合结束阶段前,你可以令一名蜀势力角色摸一张牌'+
+ '
- 魏兵:判定阶段和回合结束阶段前,你可以令一名魏势力角色摸一张牌'+
+ '
- 吴兵:判定阶段和回合结束阶段前,你可以令一名吴势力角色摸一张牌'+
+ '
- 群兵:判定阶段和回合结束阶段前,你可以令一名群势力角色摸一张牌'
}
}
diff --git a/play/weather.js b/play/weather.js
index 5ba5fc04b..01ce282b2 100644
--- a/play/weather.js
+++ b/play/weather.js
@@ -4,7 +4,28 @@ play.weather={
if(_status.video) return;
_status.weather='qing';
_status.weatherlife=Math.ceil(Math.random()*3);
+ _status.weatherchance=parseFloat(lib.config.weather_chance_playpackconfig)||0;
+ var chancestr=parseInt(_status.weatherchance*100)+'%';
+ for(var i in lib.translate){
+ if(i.indexOf('_weather_')==0){
+ lib.translate['_'+i]=lib.translate[i];
+ lib.translate[i]=lib.translate[i].replace(/&weather&/,chancestr);
+ }
+ }
ui.weather=ui.create.system('晴',null,true);
+ lib.setPopped(ui.weather,function(){
+ var uiintro=ui.create.dialog('hidden');
+ var weatherinfo=get.translation('_weather_'+_status.weather+'_info');
+ uiintro.add(get.translation('_weather_'+_status.weather));
+ if(weatherinfo.length<=0){
+ uiintro.add('
'+weatherinfo+'
');
+ }
+ else{
+ uiintro.add(''+weatherinfo+'
');
+ }
+ uiintro.add(ui.create.div('.placeholder.slim'));
+ return uiintro;
+ },220);
},
skill:{
_weatherchange:{
@@ -12,12 +33,17 @@ play.weather={
filter:function(){
return ui.weather?true:false;
},
+ forced:true,
content:function(){
if(_status.weather!='qing'&&Math.random()<0.5){
_status.weather='qing';
}
else{
- _status.weather=['qing','yu','bao','wu','xue','feng','lei'].randomGet(_status.weather);
+ var weathers=['qing','yu','shuang','bao','wu','xue','feng','lei'];
+ if(lib.config.mode!='chess'){
+ weathers.remove('xue');
+ }
+ _status.weather=weathers.randomGet(_status.weather);
}
ui.weather.innerHTML=lib.translate['_weather_'+_status.weather];
}
@@ -27,18 +53,18 @@ play.weather={
_weather_qing:'晴',
_weather_qing_info:'没有任何事情发生',
_weather_yu:'雨',
- _weather_yu_info:'每当一名角色受到火焰伤害,有30%的机率令此伤害-1',
+ _weather_yu_info:'在一名角色的回合结束阶段,若场上没有洪水,有&weather&的机率将一张洪水置于其判定区',
_weather_shuang:'霜',
- _weather_shuang_info:'霜',
+ _weather_shuang_info:'每当一名角色受到火焰伤害,有&weather&的机率令此伤害-1',
_weather_wu:'雾',
- _weather_wu_info:'雾',
+ _weather_wu_info:'所有角色使用的杀有&weather&的机率失效',
_weather_bao:'雹',
- _weather_bao_info:'每名角色在回合结束阶段有20%的机率受到一点伤害',
+ _weather_bao_info:'每名角色在回合结束阶段有&weather&的机率受到一点伤害',
_weather_xue:'雪',
- _weather_xue_info:'雪',
+ _weather_xue_info:'每名角色在回合结束阶段有&weather&的机率随机移动1格',
_weather_feng:'风',
- _weather_feng_info:'当一名角色受到火焰伤害时,有30%的机率令距离其1以内的一名其他角色受到一点火焰伤害',
+ _weather_feng_info:'当一名角色受到火焰伤害后,有&weather&的机率令距离其1以内的一名其他角色受到一点火焰伤害',
_weather_lei:'雷',
- _weather_lei_info:'在一名角色的回合结束阶段,有30%的机率将一张闪电置于其判定区',
- }
+ _weather_lei_info:'在一名角色的回合结束阶段,若场上没有闪电,有&weather&的机率将一张闪电置于其判定区',
+ },
};
diff --git a/play/wuxing.js b/play/wuxing.js
index de61fa56d..1154070b4 100755
--- a/play/wuxing.js
+++ b/play/wuxing.js
@@ -2,6 +2,23 @@ play.wuxing={
init:function(){
// lib.nature.push('metal','wood','water','soil');
lib.card.list.splice(Math.floor(lib.card.list.length*Math.random()),0,['spade',5,'wuxingpan']);
+ if(!_status.video){
+ lib.video.push({
+ type:'play',
+ name:'wuxing'
+ });
+ }
+ },
+ video:function(){
+ for(var i in this.translate){
+ lib.translate[i]=this.translate[i];
+ }
+ for(var i in this.card){
+ lib.card[i]=this.card[i];
+ }
+ for(var i in this.skill){
+ lib.skill[i]=this.skill[i];
+ }
},
element:{
player:{
@@ -9,6 +26,7 @@ play.wuxing={
if(player.node.wuxing){
player.node.wuxing.remove();
}
+ if(_status.video) return;
var node=ui.create.div('.wunature',player);
var list=['metal','wood','water','fire','soil'];
var nature=list.randomGet();
@@ -20,9 +38,10 @@ play.wuxing={
},
card:{
init:function(card){
+ if(_status.video) return;
if(card.name=='wuxingpan') return;
if(card.wunature) return;
- if(Math.random()>1/3) return;
+ if(Math.random()>(parseFloat(lib.config.wuxing_num_playpackconfig)||0)) return;
var node=ui.create.div('.wunature',card);
var list=['metal','wood','water','fire','soil'];
var nature=list.randomGet();
@@ -30,6 +49,9 @@ play.wuxing={
node.dataset.nature=nature;
node.innerHTML=get.translation(nature);
card.node.wuxing=node;
+ if(!card.suit||!card.number){
+ card.node.wuxing.style.display='none';
+ }
}
}
},
@@ -144,7 +166,7 @@ play.wuxing={
}
}
},
- wuxing:{
+ wuxingpan_skill:{
enable:'phaseUse',
usable:1,
filterCard:true,
@@ -170,7 +192,7 @@ play.wuxing={
wuxingpan:{
type:'equip',
subtype:'equip5',
- skills:['wuxing'],
+ skills:['wuxingpan_skill'],
fullskin:true
}
},
@@ -190,8 +212,9 @@ play.wuxing={
fireColor2:'rgba(255,51,0,0.3)',
soilColor2:'rgba(163,98,0,0.3)',
wuxingpan:'五行盘',
- wuxing:'五行',
- wuxing_info:'出牌阶段,你可以永久改变一张手牌的五行属性,每阶段限一次',
+ wuxingpan_skill:'五行',
+ wuxingpan_skill_info:'出牌阶段限一次,你可以永久改变一张手牌的五行属性',
+ wuxingpan_info:'出牌阶段限一次,你可以永久改变一张手牌的五行属性',
},
help:{
'五行生克':'- 每名角色在游戏开始时随机获得一个属性
- 牌堆中三分之一的牌会随机获得一个属性
- 当一名成为相克属性卡牌的目标时,'+