diff --git a/audio/die/duanwei.mp3 b/audio/die/duanwei.mp3 new file mode 100644 index 000000000..b94abd7e8 Binary files /dev/null and b/audio/die/duanwei.mp3 differ diff --git a/audio/die/liangxing.mp3 b/audio/die/liangxing.mp3 new file mode 100644 index 000000000..0a1506e38 Binary files /dev/null and b/audio/die/liangxing.mp3 differ diff --git a/audio/die/shen_guojia.mp3 b/audio/die/shen_guojia.mp3 new file mode 100644 index 000000000..3fb4d8001 Binary files /dev/null and b/audio/die/shen_guojia.mp3 differ diff --git a/audio/die/sp_kongrong.mp3 b/audio/die/sp_kongrong.mp3 new file mode 100644 index 000000000..5bfb80a7d Binary files /dev/null and b/audio/die/sp_kongrong.mp3 differ diff --git a/audio/die/wangfuzhaolei.mp3 b/audio/die/wangfuzhaolei.mp3 new file mode 100644 index 000000000..234756a9b Binary files /dev/null and b/audio/die/wangfuzhaolei.mp3 differ diff --git a/audio/die/wangling.mp3 b/audio/die/wangling.mp3 new file mode 100644 index 000000000..84cd051cf Binary files /dev/null and b/audio/die/wangling.mp3 differ diff --git a/audio/die/zhouchu.mp3 b/audio/die/zhouchu.mp3 new file mode 100644 index 000000000..396e2d4e1 Binary files /dev/null and b/audio/die/zhouchu.mp3 differ diff --git a/audio/die/zhouqun.mp3 b/audio/die/zhouqun.mp3 new file mode 100644 index 000000000..8072d7b4f Binary files /dev/null and b/audio/die/zhouqun.mp3 differ diff --git a/audio/skill/chuhai1.mp3 b/audio/skill/chuhai1.mp3 new file mode 100644 index 000000000..0eda61550 Binary files /dev/null and b/audio/skill/chuhai1.mp3 differ diff --git a/audio/skill/chuhai2.mp3 b/audio/skill/chuhai2.mp3 new file mode 100644 index 000000000..e7225af33 Binary files /dev/null and b/audio/skill/chuhai2.mp3 differ diff --git a/audio/skill/langmie1.mp3 b/audio/skill/langmie1.mp3 new file mode 100644 index 000000000..bebc3226d Binary files /dev/null and b/audio/skill/langmie1.mp3 differ diff --git a/audio/skill/langmie2.mp3 b/audio/skill/langmie2.mp3 new file mode 100644 index 000000000..b13ba4a1a Binary files /dev/null and b/audio/skill/langmie2.mp3 differ diff --git a/audio/skill/lulve1.mp3 b/audio/skill/lulve1.mp3 new file mode 100644 index 000000000..d48d39bb0 Binary files /dev/null and b/audio/skill/lulve1.mp3 differ diff --git a/audio/skill/lulve2.mp3 b/audio/skill/lulve2.mp3 new file mode 100644 index 000000000..225ca4810 Binary files /dev/null and b/audio/skill/lulve2.mp3 differ diff --git a/audio/skill/lxzhuixi1.mp3 b/audio/skill/lxzhuixi1.mp3 new file mode 100644 index 000000000..d39e74d5b Binary files /dev/null and b/audio/skill/lxzhuixi1.mp3 differ diff --git a/audio/skill/lxzhuixi2.mp3 b/audio/skill/lxzhuixi2.mp3 new file mode 100644 index 000000000..811e6ce6e Binary files /dev/null and b/audio/skill/lxzhuixi2.mp3 differ diff --git a/audio/skill/mouli1.mp3 b/audio/skill/mouli1.mp3 new file mode 100644 index 000000000..59107c780 Binary files /dev/null and b/audio/skill/mouli1.mp3 differ diff --git a/audio/skill/mouli2.mp3 b/audio/skill/mouli2.mp3 new file mode 100644 index 000000000..fa685f46b Binary files /dev/null and b/audio/skill/mouli2.mp3 differ diff --git a/audio/skill/sghuishi1.mp3 b/audio/skill/sghuishi1.mp3 new file mode 100644 index 000000000..7cec62796 Binary files /dev/null and b/audio/skill/sghuishi1.mp3 differ diff --git a/audio/skill/sghuishi2.mp3 b/audio/skill/sghuishi2.mp3 new file mode 100644 index 000000000..a2e45d7ee Binary files /dev/null and b/audio/skill/sghuishi2.mp3 differ diff --git a/audio/skill/shuishi1.mp3 b/audio/skill/shuishi1.mp3 new file mode 100644 index 000000000..97eb0a4d4 Binary files /dev/null and b/audio/skill/shuishi1.mp3 differ diff --git a/audio/skill/shuishi2.mp3 b/audio/skill/shuishi2.mp3 new file mode 100644 index 000000000..7f16a1d84 Binary files /dev/null and b/audio/skill/shuishi2.mp3 differ diff --git a/audio/skill/splirang1.mp3 b/audio/skill/splirang1.mp3 new file mode 100644 index 000000000..bba67abc9 Binary files /dev/null and b/audio/skill/splirang1.mp3 differ diff --git a/audio/skill/splirang2.mp3 b/audio/skill/splirang2.mp3 new file mode 100644 index 000000000..9c1e254f9 Binary files /dev/null and b/audio/skill/splirang2.mp3 differ diff --git a/audio/skill/spmingshi1.mp3 b/audio/skill/spmingshi1.mp3 new file mode 100644 index 000000000..bce2dc41b Binary files /dev/null and b/audio/skill/spmingshi1.mp3 differ diff --git a/audio/skill/spmingshi2.mp3 b/audio/skill/spmingshi2.mp3 new file mode 100644 index 000000000..86cc66f81 Binary files /dev/null and b/audio/skill/spmingshi2.mp3 differ diff --git a/audio/skill/stianyi1.mp3 b/audio/skill/stianyi1.mp3 new file mode 100644 index 000000000..160e8143d Binary files /dev/null and b/audio/skill/stianyi1.mp3 differ diff --git a/audio/skill/stianyi2.mp3 b/audio/skill/stianyi2.mp3 new file mode 100644 index 000000000..b12d078d4 Binary files /dev/null and b/audio/skill/stianyi2.mp3 differ diff --git a/audio/skill/tiansuan1.mp3 b/audio/skill/tiansuan1.mp3 new file mode 100644 index 000000000..84b7409c4 Binary files /dev/null and b/audio/skill/tiansuan1.mp3 differ diff --git a/audio/skill/tiansuan2.mp3 b/audio/skill/tiansuan2.mp3 new file mode 100644 index 000000000..e229f02e8 Binary files /dev/null and b/audio/skill/tiansuan2.mp3 differ diff --git a/audio/skill/xianghai1.mp3 b/audio/skill/xianghai1.mp3 new file mode 100644 index 000000000..135506cc0 Binary files /dev/null and b/audio/skill/xianghai1.mp3 differ diff --git a/audio/skill/xianghai2.mp3 b/audio/skill/xianghai2.mp3 new file mode 100644 index 000000000..44b180287 Binary files /dev/null and b/audio/skill/xianghai2.mp3 differ diff --git a/audio/skill/xunyi1.mp3 b/audio/skill/xunyi1.mp3 new file mode 100644 index 000000000..340aaddf6 Binary files /dev/null and b/audio/skill/xunyi1.mp3 differ diff --git a/audio/skill/xunyi2.mp3 b/audio/skill/xunyi2.mp3 new file mode 100644 index 000000000..776ea12a0 Binary files /dev/null and b/audio/skill/xunyi2.mp3 differ diff --git a/audio/skill/zifu1.mp3 b/audio/skill/zifu1.mp3 new file mode 100644 index 000000000..97ec357c8 Binary files /dev/null and b/audio/skill/zifu1.mp3 differ diff --git a/audio/skill/zifu2.mp3 b/audio/skill/zifu2.mp3 new file mode 100644 index 000000000..929004d5d Binary files /dev/null and b/audio/skill/zifu2.mp3 differ diff --git a/audio/skill/zuoxing1.mp3 b/audio/skill/zuoxing1.mp3 new file mode 100644 index 000000000..c4474a66d Binary files /dev/null and b/audio/skill/zuoxing1.mp3 differ diff --git a/audio/skill/zuoxing2.mp3 b/audio/skill/zuoxing2.mp3 new file mode 100644 index 000000000..38e0d0838 Binary files /dev/null and b/audio/skill/zuoxing2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 178805809..21fdfcb20 100644 --- a/card/extra.js +++ b/card/extra.js @@ -757,7 +757,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ })) return false; if(event.card.name=='nanman') return true; if(event.card.name=='wanjian') return true; - if(event.card.name=='chuqibuyi') return true; + //if(event.card.name=='chuqibuyi') return true; return false; }, content:function(){ @@ -776,7 +776,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ target:target, card:card })) return; - if(card.name=='nanman'||card.name=='wanjian'||card.name=='chuqibuyi') return 'zerotarget'; + //if(card.name=='nanman'||card.name=='wanjian'||card.name=='chuqibuyi') return 'zerotarget'; + if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget'; if(card.name=='sha'){ var equip1=player.getEquip(1); if(equip1&&equip1.name=='zhuque') return 1.9; @@ -940,7 +941,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ guding_info:'锁定技,当你使用【杀】对目标角色造成伤害时,若其没有手牌,此伤害+1。', guding_skill:'古锭刀', tengjia:'藤甲', - tengjia_info:'锁定技,【南蛮入侵】、【万箭齐发】、【出其不意】和普通【杀】对你无效。当你受到火焰伤害时,该伤害+1。', + //tengjia_info:'锁定技,【南蛮入侵】、【万箭齐发】、【出其不意】和普通【杀】对你无效。当你受到火焰伤害时,该伤害+1。', + tengjia_info:'锁定技,【南蛮入侵】、【万箭齐发】和普通【杀】对你无效。当你受到火焰伤害时,该伤害+1。', tengjia1:'藤甲', tengjia2:'藤甲', tengjia3:'藤甲', diff --git a/card/guozhan.js b/card/guozhan.js index df898de89..03f85a86c 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -425,10 +425,31 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return target!=player&&(get.mode()!='guozhan'||_status.mode=='yingbian'||_status.mode=='free'||target.countCards('e')>0); }, enable:true, - yingbian_prompt:'此牌的效果改为依次执行所有选项', + yingbian_prompt:function(card){ + var str=''; + if(get.cardtag(card,'yingbian_all')){ + str+='此牌的效果改为依次执行所有选项'; + } + if(!str.length||get.cardtag(card,'yingbian_add')){ + if(str.length) str+=';'; + str+='当你使用此牌选择目标后,你可为此牌增加一个目标'; + } + return str; + }, + yingbian:function(event){ + var card=event.card,bool=false; + if(get.cardtag(card,'yingbian_all')){ + bool=true; + card.yingbian_all=true; + game.log(card,'执行所有选项'); + } + if(!bool||get.cardtag(card,'yingbian_add')){ + event.yingbian_addTarget=true; + } + }, content:function(){ 'step 0' - if(event.card.yingbian){ + if(event.card.yingbian_all){ target.discard(target.getCards('e',function(card){ return lib.filter.cardDiscardable(card,target,'shuiyanqijunx'); })); @@ -485,13 +506,21 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, yingbian:function(card,player,targets,viewer){ if(get.attitude(viewer,player)<=0) return 0; - if(targets.filter(function(current){ - return get.damageEffect(current,player,player,'thunder')>0&¤t.countCards('e',function(card){ - return get.value(card,current)<=0; - })<2&¤t.countCards('e',function(card){ - return get.value(card,current)>0; - })>0; - }).length) return 6; + var base=0; + if(get.cardtag(card,'yingbian_all')){ + if(targets.filter(function(current){ + return get.damageEffect(current,player,player,'thunder')>0&¤t.countCards('e',function(card){ + return get.value(card,current)<=0; + })<2&¤t.countCards('e',function(card){ + return get.value(card,current)>0; + })>0; + }).length) base+=6; + } + if(get.cardtag(card,'yingbian_add')){ + if(game.hasPlayer(function(current){ + return !targets.contains(current)&&lib.filter.targetEnabled2(card,player,current)&&get.effect(current,card,player,player)>0; + })) base+=6; + } return 0; }, result:{ diff --git a/card/standard.js b/card/standard.js index 3ce5c2a32..98844990b 100644 --- a/card/standard.js +++ b/card/standard.js @@ -84,20 +84,34 @@ game.import('card',function(lib,game,ui,get,ai,_status){ range:{attack:1}, selectTarget:1, yingbian_prompt:function(card){ - if(lib.linked.contains(card.nature)){ - return '此牌的伤害值基数+1'; + var str=''; + if(get.cardtag(card,'yingbian_hit')){ + str+='此牌不可被响应'; } - else{ - return '当你使用此牌选择目标后,你可为此牌增加一个目标'; + if(get.cardtag(card,'yingbian_damage')){ + if(str.length) str+=';'; + str+='此牌的伤害值基数+1'; } + if(!str.length||get.cardtag(card,'yingbian_add')){ + if(str.length) str+=';'; + str+='当你使用此牌选择目标后,你可为此牌增加一个目标'; + } + return str; }, yingbian:function(event){ - if(lib.linked.contains(event.card.nature)){ + var card=event.card,bool=false; + if(get.cardtag(card,'yingbian_hit')){ + bool=true; + event.directHit.addArray(game.players); + game.log(card,'不可被响应'); + } + if(get.cardtag(card,'yingbian_damage')){ + bool=true; if(typeof event.baseDamage!='number') event.baseDamage=1; event.baseDamage++; game.log(event.card,'的伤害值基数+1'); } - else{ + if(!bool||get.cardtag(card,'yingbian_add')){ event.yingbian_addTarget=true; } }, @@ -174,6 +188,34 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } }, ai:{ + yingbian:function(card,player,targets,viewer){ + if(get.attitude(viewer,player)<=0) return 0; + var base=0,hit=false; + if(get.cardtag(card,'yingbian_hit')){ + hit=true; + if(targets.filter(function(target){ + return target.hasShan()&&get.attitude(viewer,target)<0&&get.damageEffect(target,player,viewer,get.nature(card))>0; + })) base+=5; + } + if(get.cardtag(card,'yingbian_all')){ + if(game.hasPlayer(function(current){ + return !targets.contains(current)&&lib.filter.targetEnabled2(card,player,current)&&get.effect(current,card,player,player)>0; + })) base+=5; + } + if(get.cardtag(card,'yingbian_damage')){ + if(targets.filter(function(target){ + return get.attitude(player,target)<0&&(hit||!target.mayHaveShan()||player.hasSkillTag('directHit_ai',true,{ + target:target, + card:card, + },true))&&!target.hasSkillTag('filterDamage',null,{ + player:player, + card:card, + jiu:true, + }) + })) base+=5; + } + return base; + }, canLink:function(player,target,card){ if(!target.isLinked()&&!player.hasSkill('wutiesuolian_skill')) return false; if(target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{ @@ -287,9 +329,25 @@ game.import('card',function(lib,game,ui,get,ai,_status){ cardcolor:'red', notarget:true, nodelay:true, - yingbian_prompt:'当你声明使用此牌后,你摸一张牌', + yingbian_prompt:function(card){ + var str=''; + if(get.cardtag(card,'yingbian_gain')){ + str+='当你声明使用此牌时,你获得此牌响应的目标牌'; + } + if(!str.length||get.cardtag(card,'yingbian_draw')){ + if(str.length) str+=';'; + str+='当你声明使用此牌时,你摸一张牌'; + } + return str; + }, yingbian:function(event){ - event.player.draw(); + var bool=false; + if(get.cardtag(event.card,'yingbian_damage')){ + bool=true; + var cardx=event.respondTo; + if(cardx&&cardx[1]&&cardx[1].cards&&cardx[1].cards.filterInD('od').length) player.gain(cardx[1].cards.filterInD('od'),'gain2','log'); + } + if(!bool||get.cardtag(event.card,'yingbian_draw')) event.player.draw(); }, content:function(){ event.result='shaned'; @@ -764,6 +822,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ selectTarget:-1, cardcolor:'red', reverseOrder:true, + yingbian_prompt:'当你使用此牌选择目标后,你可为此牌减少一个目标', + yingbian:function(event){ + event.yingbian_removeTarget=true; + }, filterTarget:function(card,player,target){ //return target.hp0; }, - yingbian_prompt:'此牌的效果改为依次执行所有选项', + yingbian_prompt:function(card){ + var str=''; + if(get.cardtag(card,'yingbian_all')){ + str+='此牌的效果改为依次执行所有选项'; + } + if(get.cardtag(card,'yingbian_hit')){ + if(str.length) str+=';'; + str+='此牌不可被响应'; + } + if(!str.length||get.cardtag(card,'yingbian_add')){ + if(str.length) str+=';'; + str+='当你使用此牌选择目标后,你可为此牌增加一个目标'; + } + return str; + }, + yingbian:function(event){ + var card=event.card,bool=false; + if(get.cardtag(card,'yingbian_all')){ + bool=true; + card.yingbian_all=true; + game.log(card,'执行所有选项'); + } + if(get.cardtag(card,'yingbian_hit')){ + bool=true; + event.directHit.addArray(game.players); + game.log(card,'不可被响应'); + } + if(!bool||get.cardtag(card,'yingbian_add')){ + event.yingbian_addTarget=true; + } + }, content:function(){ var dist=get.distance(player,target); - if(dist>1||card.yingbian) player.discardPlayerCard(target,'hej',true); - if(dist<=1||card.yingbian) player.gainPlayerCard(target,'hej',true); + if(dist>1||card.yingbian_all) player.discardPlayerCard(target,'hej',true); + if(dist<=1||card.yingbian_all) player.gainPlayerCard(target,'hej',true); }, fullskin:true, postAi:function(targets){ @@ -34,16 +64,29 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, yingbian:function(card,player,targets,viewer){ if(get.attitude(viewer,player)<=0) return 0; - if(targets.filter(function(current){ - var att=get.attitude(player,current); - if(att<=0) return current.countCards('he',function(card){ - return get.value(card,current)>0; - })>1; - return current.countCards('ej',function(card){ - return get.position(card)=='j'||get.value(card,current)<=0; - })>1; - }).length) return 6; - return 0; + var base=0; + if(get.cardtag(card,'yingbian_all')){ + if(targets.filter(function(current){ + var att=get.attitude(player,current); + if(att<=0) return current.countCards('he',function(card){ + return get.value(card,current)>0; + })>1; + return current.countCards('ej',function(card){ + return get.position(card)=='j'||get.value(card,current)<=0; + })>1; + }).length) base+=6; + } + if(get.cardtag(card,'yingbian_add')){ + if(game.hasPlayer(function(current){ + return !targets.contains(current)&&lib.filter.targetEnabled2(card,player,current)&&get.effect(current,card,player,player)>0; + })) base+=5; + } + if(get.cardtag(card,'yingbian_hit')){ + if(game.hasPlayer(function(current){ + return get.attitude(current,player)<0&¤t.hasWuxie(); + })) base+=3*targets.length; + } + return base; }, basic:{ order:7.5, @@ -357,7 +400,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ forced:true, audio:true, filter:function(event,player){ - if(event.targets.length<2||(event.card.name!='sha'&&get.type(event.card)!='trick')) return false; + if(event.targets.length<2||(event.card.name!='sha'&&(get.type(event.card)!='trick'||get.color(event.card)!='black'))) return false; if(player.hasSkillTag('unequip2')) return false; if(event.player.hasSkillTag('unequip',false,{ name:event.card?event.card.name:null, @@ -372,7 +415,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){ global:'heiguangkai_ai', }, tongque_skill:{ - ai:{forceYingbian:true}, + trigger:{player:'useCard1'}, + equipSkill:true, + forced:true, + filter:function(event,player){ + return !event.card.yingbian&&get.is.yingbian(event.card)&&player.getHistory('useCard',function(evt){ + return get.is.yingbian(evt.card) + }).indexOf(event)==0; + }, + content:function(){ + trigger.card.yingbian=true; + var info=get.info(trigger.card); + if(info&&info.yingbian) info.yingbian(trigger); + player.addTempSkill('yingbian_changeTarget'); + }, }, tianjitu_skill:{ audio:true, @@ -404,17 +460,19 @@ game.import('card',function(lib,game,ui,get,ai,_status){ audio:'taigongyinfu_skill', trigger:{player:'phaseUseBegin'}, equipSkill:true, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return !current.isLinked(); - }); - }, + //filter:function(event,player){ + // return game.hasPlayer(function(current){ + // return !current.isLinked(); + // }); + //}, direct:true, content:function(){ 'step 0' - player.chooseTarget(function(card,player,target){ - return !target.isLinked(); - },'是否发动【太公阴符】横置一名角色?').set('ai',function(target){ + player.chooseTarget( + //function(card,player,target){ + // return !target.isLinked(); + //}, + '是否发动【太公阴符】横置一名角色?').set('ai',function(target){ return get.effect(target,{name:'tiesuo'},_status.event.player,_status.event.player); }); 'step 1' @@ -686,7 +744,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ai:{ effect:{ player:function(card,player,target){ - if(typeof card!='object'||!target||get.name(card)!='sha'&&get.type(card)!='trick') return; + if(typeof card!='object'||!target||get.name(card)!='sha'&&(get.type(card)!='trick'||get.color(card)!='black')) return; var info=get.info(card); var targets=[]; targets.addArray(ui.selected.targets); @@ -748,14 +806,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){ wutiesuolian_info:'锁定技,当你使用【杀】指定目标后,若其:已横置,你观看其手牌。未横置,其横置。', heiguangkai:'黑光铠', heiguangkai_skill:'黑光铠', - heiguangkai_info:'锁定技,当你成为【杀】或普通锦囊牌的目标后,若此牌的目标数大于1,则你令此牌对你无效。', + heiguangkai_info:'锁定技,当你成为【杀】或黑色普通锦囊牌的目标后,若此牌的目标数大于1,则你令此牌对你无效。', tongque:'铜雀', - tongque_info:'你使用带有【应变】效果的牌可以无视条件直接生效。', + tongque_skill:'铜雀', + tongque_info:'锁定技,你于一回合内使用的第一张带有【应变】效果的牌无视条件直接生效。', tianjitu:'天机图', tianjitu_skill:'天机图', tianjitu_info:'锁定技,当此牌进入你的装备区时,你弃置一张不为此【天机图】的牌。当此牌离开你的装备区后,你将手牌摸至五张。', taigongyinfu:'太公阴符', - taigongyinfu_info:'出牌阶段开始时,你可以横置一名角色。出牌阶段结束时,你可以重铸一张手牌。', + taigongyinfu_info:'出牌阶段开始时,你可以横置或重置一名角色。出牌阶段结束时,你可以重铸一张手牌。', taigongyinfu_skill:'太公阴符', taigongyinfu_link:'太公阴符', yingbian_zhuzhan_tag:'助战', @@ -764,9 +823,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){ yingbian_canqu_tag:'残躯', _yingbian:'应变', yingbian_changeTarget:'应变', + yingbian_add_tag:'(目标+)', + yingbian_remove_tag:'(目标-)', + yingbian_draw_tag:'(摸牌)', + yingbian_all_tag:'(双项)', + yingbian_hit_tag:'(强命)', + yingbian_gain_tag:'(反甲)', + yingbian_damage_tag:'(伤害+)', }, list:[ - ['spade',1,'juedou',null,['yingbian_fujia']], + ['spade',1,'juedou'], ['spade',1,'taigongyinfu'], ['spade',1,'guding'], ['spade',2,'cixiong'], @@ -775,10 +841,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['spade',2,'suijiyingbian'], ['spade',3,'jiu'], ['spade',3,'zhujinqiyuan'], - ['spade',3,'shuiyanqijunx',null,['yingbian_zhuzhan']], + ['spade',3,'shuiyanqijunx',null,['yingbian_zhuzhan','yingbian_add']], ['spade',4,'sha','thunder'], ['spade',4,'guohe'], - ['spade',4,'shuiyanqijunx',null,['yingbian_zhuzhan']], + ['spade',4,'shuiyanqijunx',null,['yingbian_zhuzhan','yingbian_add']], ['spade',5,'sha','thunder'], ['spade',5,'qinglong'], ['spade',5,'jueying'], @@ -787,35 +853,35 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['spade',6,'qinggang'], ['spade',7,'sha','ice'], ['spade',7,'sha','ice'], - ['spade',7,'nanman',null,['yingbian_fujia']], + ['spade',7,'nanman',null,['yingbian_fujia','yingbian_remove']], ['spade',8,'sha','ice'], ['spade',8,'sha','ice'], ['spade',8,'sha','ice'], - ['spade',9,'sha',null,['yingbian_canqu']], - ['spade',9,'sha',null,['yingbian_canqu']], + ['spade',9,'sha',null,['yingbian_canqu','yingbian_add']], + ['spade',9,'sha',null,['yingbian_canqu','yingbian_add']], ['spade',9,'jiu'], - ['spade',10,'sha',null,['yingbian_canqu']], - ['spade',10,'sha',null,['yingbian_canqu']], + ['spade',10,'sha'], + ['spade',10,'sha',null,['yingbian_zhuzhan','yingbian_add']], ['spade',10,'bingliang'], ['spade',11,'wuxie'], ['spade',11,'shunshou'], ['spade',11,'tiesuo'], - ['spade',12,'zhujinqiyuan',null,['yingbian_zhuzhan']], + ['spade',12,'zhujinqiyuan',null,['yingbian_zhuzhan','yingbian_hit']], ['spade',12,'tiesuo'], ['spade',12,'zhangba'], - ['spade',13,'wuxie',null,['yingbian_kongchao']], - ['spade',13,'nanman',null,['yingbian_fujia']], + ['spade',13,'wuxie',null,['yingbian_kongchao','yingbian_draw']], + ['spade',13,'nanman',null,['yingbian_fujia','yingbian_remove']], ['spade',13,'dawan'], - ['heart',1,'taoyuan'], - ['heart',1,'wanjian'], + ['heart',1,'taoyuan',null,['yingbian_fujia','yingbian_remove']], + ['heart',1,'wanjian',null,['yingbian_fujia','yingbian_remove']], ['heart',1,'wuxie'], - ['heart',2,'shan',null,['yingbian_kongchao']], - ['heart',2,'shan',null,['yingbian_kongchao']], - ['heart',2,'guohe',null,['yingbian_zhuzhan']], + ['heart',2,'shan',null,['yingbian_kongchao','yingbian_draw']], + ['heart',2,'shan',null,['yingbian_kongchao','yingbian_draw']], + ['heart',2,'guohe',null,['yingbian_zhuzhan','yingbian_add']], ['heart',3,'wugu'], ['heart',3,'tao'], - ['heart',3,'chuqibuyi',null,['yingbian_zhuzhan']], + ['heart',3,'chuqibuyi'], ['heart',4,'sha','fire'], ['heart',4,'tao'], ['heart',4,'wugu'], @@ -834,7 +900,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['heart',9,'tao'], ['heart',9,'shan'], ['heart',9,'dongzhuxianji'], - ['heart',10,'sha','fire',['yingbian_canqu']], + ['heart',10,'sha','fire',['yingbian_kongchao','yingbian_damage']], ['heart',10,'sha'], ['heart',10,'sha'], ['heart',11,'sha'], @@ -844,24 +910,24 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['heart',12,'shan'], ['heart',12,'guohe'], ['heart',12,'shandian'], - ['heart',13,'wuxie',null,['yingbian_kongchao']], + ['heart',13,'wuxie',null,['yingbian_kongchao','yingbian_gain']], ['heart',13,'shan'], ['heart',13,'zhuahuang'], - ['club',1,'juedou',null,['yingbian_fujia']], + ['club',1,'juedou'], ['club',1,'zhuge'], ['club',1,'huxinjing'], - ['club',2,'sha',null,['yingbian_kongchao']], + ['club',2,'sha',null,['yingbian_kongchao','yingbian_add']], ['club',2,'heiguangkai'], ['club',2,'tengjia'], ['club',2,'renwang'], - ['club',3,'sha',null,['yingbian_kongchao']], + ['club',3,'sha',null,['yingbian_kongchao','yingbian_add']], ['club',3,'jiu'], - ['club',3,'zhujinqiyuan',null,['yingbian_zhuzhan']], - ['club',4,'sha',null,['yingbian_kongchao']], + ['club',3,'zhujinqiyuan',null,['yingbian_zhuzhan','yingbian_add']], + ['club',4,'sha',null,['yingbian_kongchao','yingbian_add']], ['club',4,'bingliang'], - ['club',4,'zhujinqiyuan',null,['yingbian_zhuzhan']], - ['club',5,'sha',null,['yingbian_kongchao']], + ['club',4,'zhujinqiyuan',null,['yingbian_zhuzhan','yingbian_add']], + ['club',5,'sha'], ['club',5,'sha','thunder'], ['club',5,'dilu'], ['club',6,'sha'], @@ -869,7 +935,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['club',6,'lebu'], ['club',7,'sha'], ['club',7,'sha','thunder'], - ['club',7,'nanman'], + ['club',7,'nanman',null,['yingbian_fujia','yingbian_remove']], ['club',8,'sha'], ['club',8,'sha','thunder'], ['club',8,'sha'], @@ -880,12 +946,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['club',10,'sha','thunder'], ['club',10,'tiesuo'], ['club',11,'sha'], - ['club',11,'sha',null,['yingbian_canqu']], + ['club',11,'sha',null,['yingbian_canqu','yingbian_add']], ['club',11,'tiesuo'], ['club',12,'wuxie'], ['club',12,'tianjitu'], ['club',12,'tiesuo'], - ['club',13,'wuxie'], + ['club',13,'wuxie',null,['yingbian_canqu','yingbian_draw']], ['club',13,'tongque'], ['club',13,'tiesuo'], @@ -893,13 +959,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['diamond',1,'zhuge'], ['diamond',1,'wuxinghelingshan'], ['diamond',2,'tao'], - ['diamond',2,'shan',null,['yingbian_kongchao']], - ['diamond',2,'shan',null,['yingbian_kongchao']], + ['diamond',2,'shan',null,['yingbian_kongchao','yingbian_draw']], + ['diamond',2,'shan',null,['yingbian_kongchao','yingbian_draw']], ['diamond',3,'tao'], ['diamond',3,'shan'], ['diamond',3,'shunshou'], - ['diamond',4,'sha','fire',['yingbian_canqu']], - ['diamond',4,'shan'], + ['diamond',4,'sha','fire',['yingbian_kongchao','yingbian_damage']], + ['diamond',4,'shan',null,['yingbian_canqu','yingbian_gain']], ['diamond',4,'shunshou'], ['diamond',5,'sha','fire'], ['diamond',5,'shan'], @@ -910,7 +976,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['diamond',7,'sha'], ['diamond',7,'shan'], ['diamond',7,'shan'], - ['diamond',8,'sha',null,['yingbian_canqu']], + ['diamond',8,'sha',null,['yingbian_canqu','yingbian_hit']], ['diamond',8,'shan'], ['diamond',8,'shan'], ['diamond',9,'sha'], diff --git a/character/diy.js b/character/diy.js index 692bf885f..e1520d28c 100755 --- a/character/diy.js +++ b/character/diy.js @@ -492,8 +492,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player==event.player||!player.getStorage('tenzen_yixing').length) return false; return event.targets.length==1&&(event.card.name=='sha'||get.type(event.card)=='trick'); }, - prompt:function(event){ - return '获得武将牌上的一张“兴”,并于'+get.translation(event.card)+'结算完成后视为对'+get.translation(event.player)+'使用一张同名牌'; + prompt2:function(event){ + return '获得一张“兴”,且'+get.translation(event.card)+'结算完成后可以弃置两张牌,视为对'+get.translation(event.player)+'使用一张同名牌'; }, check:function(event,player){ if(!player.storage.tenzen_lingyu&&player.getStorage('tenzen_yixing').length<3) return false; @@ -517,18 +517,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.getParent().after.push(next); next.player=player; next.target=trigger.player; - next.setContent(function(){ - var card=event.getParent().card; - card={ - name:card.name, - nature:card.nature, - isCard:true, - }; - if(player.canUse(card,target,false)) player.useCard(card,target,false,'tenzen_yixing'); - }); + next.setContent(lib.skill.tenzen_yixing.content_extra); }, }, }, + content_extra:function(){ + 'step 0' + var card=event.getParent().card; + event.card={ + name:card.name, + nature:card.nature, + isCard:true, + }; + if(player.countCards('he')>1&&target&&target.isIn()&&player.canUse(event.card,target,false)){ + player.chooseToDiscard('he',2,'是否弃置两张牌,视为对'+get.translation(target)+'使用'+get.translation(event.card)+'?').set('ai',function(card){ + return 5-get.value(card); + }); + } + else event.finish(); + 'step 1' + if(result.bool) player.useCard(card,target,false,'tenzen_yixing'); + }, }, tenzen_lingyu:{ trigger:{player:'phaseZhunbeiBegin'}, @@ -537,7 +546,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'water', filter:function(event,player){ - return player.getStorage('tenzen_yixing').length>1; + return player.getStorage('tenzen_yixing').length>=player.hp; }, content:function(){ player.awakenSkill('tenzen_lingyu'); @@ -550,7 +559,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tenzen_tianquan:{ trigger:{player:'useCardToPlayered'}, filter:function(event,player){ - return (event.card.name=='sha'||event.card.name=='juedou')&&event.targets.length==1&&player.getStorage('tenzen_yixing').length>0; + return (event.card.name=='sha'||event.card.name=='juedou')&&event.targets.length==1&&player.getStorage('tenzen_yixing').length>1; }, logTarget:'target', usable:1, @@ -560,15 +569,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' //player.viewHandcards(trigger.target); - player.chooseButton(['选择移去一张“兴”',player.storage.tenzen_yixing],true); + player.chooseButton(['选择移去两张“兴”',player.storage.tenzen_yixing],true,2); 'step 1' if(result.bool){ player.unmarkAuto('tenzen_yixing',result.links); var cards=get.cards(5); player.showCards(cards,get.translation(player)+'发动了【天全】'); game.cardsGotoOrdering(cards).relatedEvent=trigger.getParent(); - game.log(player,'移去了',result.links[0]); - player.$throw(result.links[0],1500); + game.log(player,'移去了',result.links); + player.$throw(result.links,1500); game.cardsDiscard(result.links); //ui.cardPile.insertBefore(result.links[0],ui.cardPile.firstChild); var num=cards.filter(function(card){ @@ -14974,12 +14983,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kyouko_gongmian_info:'①出牌阶段,你可以选择一名未以此法选择过的角色,若其手牌:大于你,你获得其一张牌,然后交给其一张牌;小于你,其交给你一张牌,然后你交给其一张牌;等于你,你与其各摸一张牌。②出牌阶段结束时,你可以获得一名其他角色区域内的至多X张牌,然后交给其等量的牌。③弃牌阶段开始时,若X不小于你的体力值,你可以获得一名手牌数少于你的角色的所有手牌,然后将手牌数的一半(向上取整)交给该角色。(X为你本回合内发动过〖共勉①〗的次数)', key_tenzen:'加纳天善', tenzen_yixing:'弈兴', - tenzen_yixing_info:'当有角色因【杀】或【决斗】而受到伤害后,若其在你的攻击范围内或你在伤害来源的攻击范围内,你可以摸一张牌,然后将一张牌置于武将牌上,称为“兴”。当你成为其他角色使用【杀】或普通锦囊牌的唯一目标后,你可以获得一张“兴”,并于此牌结算完成后视为对其使用一张名称相同的牌。', + tenzen_yixing_info:'当有角色因【杀】或【决斗】而受到伤害后,若其在你的攻击范围内或你在伤害来源的攻击范围内,你可以摸一张牌,然后将一张牌置于武将牌上,称为“兴”。当你成为其他角色使用【杀】或普通锦囊牌的唯一目标后,你可以获得一张“兴”,并可于此牌结算完成后弃置两张牌,视为对其使用一张名称相同的牌。', //若对方为水织静久则无法触发〖弈兴〗 tenzen_lingyu:'领域', - tenzen_lingyu_info:'觉醒技,准备阶段,若你的“兴”超过一张,则你减1点体力上限并获得技能〖天全〗。若你以此法失去了体力,则你摸两张牌。', + tenzen_lingyu_info:'觉醒技,准备阶段,若你的“兴”不小于你的体力值,则你减1点体力上限并获得技能〖天全〗。若你以此法失去了体力,则你摸两张牌。', tenzen_tianquan:'天全', - tenzen_tianquan_info:'每回合限一次,当你使用【杀】或【决斗】指定唯一目标后,你可以移去一张“兴”并展示牌堆顶的五张牌。这些牌中每有一张基本牌,响应此牌需要的【闪】/【杀】的数量便+1。此牌结算完成后,若此牌造成过伤害,则你获得这些牌中的非基本牌。', + tenzen_tianquan_info:'每回合限一次,当你使用【杀】或【决斗】指定唯一目标后,你可以移去两张“兴”并展示牌堆顶的五张牌。这些牌中每有一张基本牌,响应此牌需要的【闪】/【杀】的数量便+1。此牌结算完成后,若此牌造成过伤害,则你获得这些牌中的非基本牌。', noname:"小无", noname_zhuyuan:"祝愿", diff --git a/character/mobile.js b/character/mobile.js index 12b22f883..ded163fcf 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,10 +6,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian"], + mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun"], mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"], mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"], - mobile_shijixin:['wujing','sp_mifuren','sp_xinpi'], + mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong'], mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], @@ -18,6 +18,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + sp_kongrong:['male','qun',3,['spmingshi','splirang']], + zhouchu:['male','wu',4,['xianghai','chuhai']], + wangfuzhaolei:['male','shu',4,['xunyi']], + wangling:['male','wei',4,['mouli','zifu']], + zhouqun:['male','shu',3,['tiansuan']], re_zhurong:['female','shu',4,['juxiang','relieren']], re_jiangwei:['male','shu',4,['retiaoxin','zhiji']], wujing:['male','wu',4,['heji']], @@ -106,6 +111,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + zhouchu:'周处(236—297年),字子隐,吴郡阳羡(今江苏宜兴)人。西晋大臣、将领,东吴鄱阳太守周鲂之子。少时纵情肆欲,为祸乡里。后来改过自新,拜访名人陆机和陆云,浪子回头,发奋读书,留下“周处除三害”的传说,拜东观左丞,迁无难都督,功业胜过父亲。吴国灭亡后,出仕西晋,拜新平太守,转广汉太守,治境有方。入为散骑常侍,迁御史中丞,刚正不阿。得罪梁孝王司马肜。元康七年,出任建威将军,前往关中,讨伐氐羌齐万年叛乱,遇害于沙场。追赠平西将军,谥号为孝。', + wangfuzhaolei:'王甫(?—222年),字国山,广汉郪(今四川三台县)人,三国时期蜀汉重臣。刘璋时,为益州书佐,之后归降刘备,先后担任绵竹令、荆州议曹从事,并在夷陵之战中阵亡。其子王祐,官至尚书右选郎。赵累,蜀汉大将关羽部下都督。后来吴将吕蒙袭取荆州,赵累被吴将潘璋等在临沮擒获。', + wangling:'王凌(172年~251年6月15日),字彦云,太原郡祁县(今山西省祁县)人,三国时期曹魏将领,东汉司徒王允之侄。王凌出身太原王氏祁县房。举孝廉出身,授发干县令,迁中山太守。颇有政绩,迁司空(曹操)掾属。魏文帝曹丕即位,拜散骑常侍、兖州刺史。参加洞口之战,跟从张辽击败吴将吕范,加号建武将军,封宜城亭侯。太和二年(228年),王凌参与石亭之战,跟从曹休征伐东吴,力挽狂澜,历任扬豫二州刺史,治境有方。齐王曹芳继位,拜征东将军,联合孙礼击败吴将全琮,进封南乡侯,授车骑将军、仪同三司,正始九年(248年),代高柔为司空。嘉平元年(249年),代蒋济为太尉。嘉平三年(251年),不满太傅司马懿专擅朝政,联合兖州刺史令狐愚谋立楚王曹彪为帝,事泄自尽,时年八十岁,夷灭三族。', + zhouqun:'周群(生卒年不详),字仲直,巴西阆中(今四川阆中)人。周群年少时随父周舒学习占验天算之术。后来刘璋聘请周群为师友从事,其预言大多得以应验。刘备割据益州,任命周群为儒林校尉。曾劝说刘备攻汉中必定不利,事后得到应验,被举荐为茂才。', dongzhao:'董昭(156年-236年7月4日),字公仁,济阴定陶(今山东省菏泽市定陶区)人。东汉末年曹魏谋士、重臣、开国元勋。董昭年轻时被举为孝廉,后担任袁绍帐下参军。多有战功,但是袁绍听信谗言,董昭不得已离开袁绍投奔张杨。张杨率军迎接汉献帝时,董昭随行,并拜为议郎。后与曹操在洛阳相见,又建议曹操将汉献帝迎接到许昌。董昭自此成为曹操的谋士。建安年间(198年)历任河南尹、冀州牧、徐州牧、魏郡太守等职,多有功劳,深受曹操器重。曹操受封魏公、魏王的谋划都是出自董昭之手。曹丕继魏王位后,董昭任将作大匠。曹丕称帝后,升任大鸿胪。此后先后担任侍中、太常、光禄大夫、太仆等重要职位。魏明帝曹叡即位后转任卫尉。太和六年(232年)升任司徒。青龙四年(236年)卒,时年八十一,谥曰定。', wujing:'吴景,本吴郡吴县(今江苏苏州)人,后迁居吴郡钱塘(今浙江杭州),孙坚妻子吴夫人(武烈皇后)之弟,孙策和孙权的舅舅,东汉末年将领。吴景因追随孙坚征伐有功,被任命为骑都尉。袁术上表举荐吴景兼任丹杨太守,讨伐前任太守周昕,占据丹杨。后遭扬州刺史刘繇逼迫,再度依附袁术,袁术任用他为督军中郎将,与孙贲共同进击樊能等人。又在秣陵攻打笮融、薛礼。袁术与刘备争夺徐州时,任吴景为广陵太守。建安二年(197年),吴景放弃广陵东归孙策,孙策任他为丹杨太守。朝廷使者吴景为扬武将军,郡守之职照旧。建安八年(203年),吴景死于任上。', nanhualaoxian:'南华老仙,是古典小说《三国演义》中的虚拟人物。其原型来自道教典籍中对庄子的封号,又称“南华仙人”、“南华真人”等。在古典小说《三国演义》通行本的第一回中,描述了南华老仙将《太平要术》赠送给张角的情节。', @@ -167,13 +176,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ly_piliche:{ fullskin:true, - vanish:true, + //vanish:true, derivation:'liuye', type:'equip', subtype:'equip1', distance:{attackFrom:-8}, skills:['ly_piliche'], - destroy:'polu' + //destroy:'polu' }, "wolong_card":{ type:"takaramono", @@ -343,6 +352,632 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + spmingshi:{ + audio:2, + trigger:{player:'damageEnd'}, + forced:true, + logTarget:'source', + filter:function(event,player){ + return event.source&&player!=event.source&&event.source.countCards('he')>0; + }, + content:function(){ + 'step 0' + event.count=trigger.num; + 'step 1' + event.count--; + trigger.source.chooseToDiscard('he',true); + 'step 2' + if(event.count>0&&result.bool&&lib.skill.spmingshi.filter(trigger,player)) event.goto(1); + }, + ai:{ + threaten:0.8, + maixie:true, + maixie_defend:true, + }, + }, + splirang:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var hs=player.getCards('h'); + if(!hs.length) return false; + for(var i of hs){ + if(!lib.filter.cardDiscardable(i,player,'splirang')) return false; + } + return true; + }, + filterCard:true, + selectCard:-1, + content:function(){ + 'step 0' + cards=cards.filterInD('d'); + if(!cards.length||player.hp<1) event.goto(3); + else player.chooseButton(['将任意张牌交给一名其他角色',cards],[1,Math.min(cards.length,player.hp)]).set('ai',function(button){ + return get.value(button.link); + }); + 'step 1' + if(result.bool){ + event.cards=result.links; + player.chooseTarget(true,'令一名角色获得'+get.translation(event.cards),lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.hasSkillTag('nogain')) att/=10; + if(target.hasJudge('lebu')) att/=5; + return att; + }); + } + else event.goto(3); + 'step 2' + if(result.targets&&result.targets.length){ + var target=result.targets[0]; + player.line(target,'green'); + target.gain(cards,'gain2'); + } + 'step 3' + player.draw(); + }, + ai:{ + order:0.1, + result:{ + player:function(player){ + var hs=player.getCards('h'); + if(hs.length<=player.hp&&game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0&&!current.hasJudge('lebu')&&!current.hasSkillTag('nogain'); + })) return 1; + if(get.value(hs,player)<6) return 1; + return 0; + }, + }, + }, + }, + xianghai:{ + audio:2, + global:'xianghai_g', + mod:{ + cardname:function(card){ + if(get.type(card,null,false)=='equip') return 'jiu'; + }, + }, + ai:{ + threaten:2, + }, + }, + xianghai_g:{ + mod:{ + maxHandcard:function(player,num){ + return num-game.countPlayer(function(current){ + return current!=player&¤t.hasSkill('xianghai'); + }); + }, + }, + }, + chuhai:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.hasSkillTag('noCompareSource'); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0&& + !target.hasSkillTag('noCompareTarget'); + }, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.canCompare(target)) player.chooseToCompare(target); + else event.finish(); + 'step 2' + if(result.bool){ + player.storage.chuhai2=target; + player.addTempSkill('chuhai2','phaseUseEnd'); + if(target.countCards('h')>0){ + player.viewHandcards(target); + var types=[],cards=[],hs=target.getCards('h'); + for(var i of hs){ + types.add(get.type2(i,target)); + } + for(var i of types){ + var card=get.cardPile(function(card){ + return get.type2(card,false)==i; + }); + if(card) cards.push(card); + } + if(cards.length) player.gain(cards,'gain2','log'); + } + } + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(player.countCards('hs',function(card){ + return get.tag(card,'damage')>0&&player.canUse(card,target,null,true)&& + get.effect(target,card,player,player)>0&&player.hasValueTarget(card,null,true); + })>0) return -3; + return -1; + }, + }, + }, + }, + chuhai2:{ + trigger:{source:'damageSource'}, + forced:true, + charlotte:true, + onremove:true, + filter:function(event,player){ + if(event.player!=player.storage.chuhai2) return false; + for(var i=1;i<6;i++){ + if(player.isEmpty(i)) return true; + } + return false; + }, + content:function(){ + for(var i=1;i<7;i++){ + if(player.isEmpty(i)){ + var sub='equip'+i,card=get.cardPile(function(card){ + return get.subtype(card,false)==sub&&!get.cardtag(card,'gifts'); + }); + if(card){ + player.$gain2(card); + game.delayx(); + player.equip(card); + break; + } + } + } + }, + }, + xunyi:{ + audio:2, + trigger:{ + global:['gameDrawAfter','dieAfter'], + player:'enterGame', + }, + direct:true, + filter:function(event,player){ + if(event.name=='die') return event.player==player.storage.xunyi2; + return !player.storage.xunyi2; + }, + content:function(){ + 'step 0' + player.removeSkill('xunyi2'); + player.chooseTarget(lib.filter.notMe,get.prompt2('xunyi')).set('ai',function(target){ + var player=_status.event.player; + return Math.max(1+get.attitude(player,target)*get.threaten(target),Math.random()); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('xunyi',target); + player.storage.xunyi2=target; + player.addSkill('xunyi2'); + } + }, + }, + xunyi2:{ + audio:'xunyi', + trigger:{global:'damageSource'}, + forced:true, + charlotte:true, + filter:function(event,player){ + var list=[player,player.storage.xunyi2]; + return list.contains(event.source)&&!list.contains(event.player); + }, + logTarget:function(event,player){ + return player.storage.xunyi2; + }, + content:function(){ + (player==trigger.source?player.storage.xunyi2:player).draw(); + }, + group:'xunyi3', + mark:true, + intro:{content:'效果目标:$'}, + }, + xunyi3:{ + audio:'xunyi', + trigger:{global:'damageEnd'}, + forced:true, + charlotte:true, + filter:function(event,player){ + var list=[player,player.storage.xunyi2]; + return list.contains(event.player)&&!list.contains(event.source)&& + (player==event.player?player.storage.xunyi2:player).countCards('he')>0; + }, + logTarget:function(event,player){ + return player.storage.xunyi2; + }, + content:function(){ + (player==trigger.player?player.storage.xunyi2:player).chooseToDiscard('he',true); + }, + }, + mouli:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterCard:true, + position:'h', + filterTarget:lib.filter.notMe, + discard:false, + lose:false, + delay:false, + check:function(card){ + return 8-get.value(card); + }, + content:function(){ + target.gain(cards,player,'giveAuto'); + if(!target.storage.mouli2) target.storage.mouli2=[]; + if(!target.storage.mouli3) target.storage.mouli3=[]; + target.storage.mouli2.add(player); + target.storage.mouli3.push(player); + target.addSkill('mouli_effect'); + }, + ai:{ + threaten:1.2, + order:4, + result:{ + target:1, + }, + }, + subSkill:{ + effect:{ + trigger:{player:'useCard'}, + forced:true, + charlotte:true, + filter:function(event,player){ + if(event.card.name!='sha'&&event.card.name!='shan') return false; + for(var i of player.storage.mouli3){ + if(i.isIn()) return true; + } + return false; + }, + logTarget:function(event,player){ + return player.storage.mouli3; + }, + content:function(){ + 'step 0' + game.delayx(); + player.storage.mouli3.sortBySeat(); + if(player.storage.mouli3.length==1){ + player.storage.mouli3[0].draw(3); + player.storage.mouli3.length=0; + event.finish(); + } + else game.asyncDraw(player.storage.mouli3,3); + 'step 1' + player.storage.mouli3.length=0; + game.delayx(); + }, + group:['mouli_sha','mouli_shan','mouli_clear'], + mark:true, + intro:{ + content:'已因$获得“谋立”效果', + }, + }, + sha:{ + enable:'chooseToUse', + viewAs:{name:'sha'}, + filterCard:{color:'black'}, + position:'he', + prompt:'将一张黑色牌当做杀使用', + check:function(card){ + return 6-get.value(card); + }, + viewAsFilter:function(player){ + return player.countCards('he',{color:'black'})>0; + }, + ai:{ + respondSha:true, + skillTagFilter:function(player){ + return player.countCards('he',{color:'black'})>0; + }, + }, + }, + shan:{ + enable:'chooseToUse', + viewAs:{name:'shan'}, + filterCard:{color:'red'}, + position:'he', + prompt:'将一张红色牌当做闪使用', + check:function(card){ + return 7-get.value(card); + }, + viewAsFilter:function(player){ + return player.countCards('he',{color:'red'})>0; + }, + ai:{ + respondShan:true, + skillTagFilter:function(player){ + return player.countCards('he',{color:'red'})>0; + }, + }, + }, + clear:{ + trigger:{global:['phaseBegin','dieAfter']}, + forced:true, + silent:true, + popup:false, + lastDo:true, + forceDie:true, + filter:function(event,player){ + if(event.name=='die'&&player==event.player) return true; + return player.storage.mouli2.contains(event.player); + }, + content:function(){ + if(trigger.name=='die'&&player==trigger.player){ + player.removeSkill('mouli_effect'); + delete player.storage.mouli2; + delete player.storage.mouli3; + return; + } + player.storage.mouli2.remove(trigger.player); + while(player.storage.mouli3.contains(trigger.player)) player.storage.mouli3.remove(trigger.player); + if(!player.storage.mouli2.length) player.removeSkill('mouli_effect'); + }, + }, + }, + }, + zifu:{ + audio:2, + trigger:{global:'dieAfter'}, + forced:true, + filter:function(event,player){ + return event.player.storage.mouli2&&event.player.storage.mouli2.contains(player); + }, + content:function(){ + player.loseMaxHp(2); + }, + ai:{ + combo:'mouli', + neg:true, + }, + }, + tiansuan:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.tiansuan2; + }, + content:function(){ + 'step 0' + player.chooseControl('上上签','上签','中签','下签','下下签','cancel2').set('prompt','天算:是否增加其中一个命运签的权重?').set('ai',function(){ + return Math.random()<0.5?0:4; + }); + 'step 1' + var list=[0,1,1,2,2,2,3,3,4]; + if(result.control!='cancel2') list.push(result.index); + var num=list.randomGet(); + event.num=num; + var str=get.translation(player)+'抽取的命运签为:'+lib.skill['tiansuan2_'+num].name; + game.log(player,'抽取出了','#g'+lib.skill['tiansuan2_'+num].name); + event.dialog=ui.create.dialog(str); + event.videoId=lib.status.videoId++; + game.broadcast('createDialog',event.videoId,str); + game.pause(); + setTimeout(function(){ + game.resume(); + },1500); + 'step 2' + event.dialog.close(); + game.broadcast('closeDialog',event.videoId); + player.chooseTarget(true,'令一名角色获得“'+lib.skill['tiansuan2_'+num].name+'”').set('ai',lib.skill['tiansuan2_'+num].aiCheck); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + game.log(player,'令',target,'获得了命运签'); + player.storage.tiansuan2=target; + player.storage.tiansuan3='tiansuan2_'+num; + player.addTempSkill('tiansuan2',{player:'phaseBegin'}); + target.addSkill('tiansuan2_'+num); + if(num<2&&target.countGainableCards(player,target==player?'e':'he')>0){ + var next=player.gainPlayerCard(target,target==player?'e':'he',true); + if(num==0) next.visible=true; + } + else game.delayx(); + } + }, + derivation:'tiansuan_faq', + ai:{ + order:7, + result:{ + player:1, + }, + }, + }, + tiansuan2:{ + charlotte:true, + onremove:function(player,skill){ + if(player.storage.tiansuan2) player.storage.tiansuan2.removeSkill(player.storage.tiansuan3); + delete player.storage.tiansuan2; + delete player.storage.tiansuan3; + }, + }, + tiansuan2_0:{ + name:'上上签', + trigger:{player:'damageBegin4'}, + forced:true, + charlotte:true, + content:function(){ + trigger.cancel(); + }, + mark:true, + intro:{ + content:'当你受到伤害时,防止此伤害。', + }, + aiCheck:function(target){ + if(target.hasSkill('tiansuan2_0')) return 0; + var player=_status.event.player; + var att=get.attitude(player,target); + if(target.countCards('e',function(card){ + return get.value(card,target)<=0; + })) att*=2; + return att/Math.sqrt(Math.max(1,target.hp)); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')&&!player.hasSkillTag('jueqing',false,target)) return 'zerotarget'; + } + }, + }, + }, + tiansuan2_1:{ + name:'上签', + trigger:{player:'damageBegin4'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return event.num>1; + }, + content:function(){ + trigger.num=1; + }, + group:'tiansuan2_damage', + mark:true, + intro:{ + content:'当你受到伤害时,你令伤害值改为1;当你受到1点伤害后,你摸一张牌。', + }, + aiCheck:function(target){ + if(target.hasSkill('tiansuan2_1')) return 0; + var player=_status.event.player; + var att=get.attitude(player,target); + if(target.countCards('e',function(card){ + return get.value(card,target)<=0; + })) att*=2; + if(target.hp==1) return att/2; + return att/Math.sqrt(Math.max(1,target.hp)); + }, + ai:{ + filterDamage:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.player){ + if(arg.player.hasSkillTag('jueqing',false,player)) return false; + } + }, + effect:{ + target:function(card,player,target,current){ + if(target&&target.hp>1&&get.tag(card,'damage')&&!player.hasSkillTag('jueqing',false,target)) return 0.8; + } + }, + }, + }, + tiansuan2_damage:{ + trigger:{player:'damageEnd'}, + charlotte:true, + content:function(){ + player.draw(trigger.num); + }, + }, + tiansuan2_2:{ + name:'中签', + trigger:{player:'damageBegin4'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return event.num>1; + }, + content:function(){ + trigger.num=1; + }, + mark:true, + intro:{ + content:'当你受到伤害时,你令伤害属性改为火属性并将伤害值改为1。', + }, + aiCheck:function(target){ + if(target.hasSkill('tiansuan2_2')) return 0; + var player=_status.event.player; + target.addSkill('tiansuan2_ai'); + var num=get.damageEffect(target,player,player,'fire'); + target.removeSkill('tiansuan2_ai'); + return num; + }, + group:['tiansuan2_fire','tiansuan2_ai'], + }, + tiansuan2_ai:{ + ai:{ + filterDamage:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.player){ + if(arg.player.hasSkillTag('jueqing',false,player)) return false; + } + }, + }, + }, + tiansuan2_fire:{ + trigger:{player:'damageBefore'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return event.nature!='fire'; + }, + content:function(){ + trigger.nature='fire'; + }, + }, + tiansuan2_3:{ + name:'下签', + trigger:{player:'damageBegin3'}, + forced:true, + charlotte:true, + content:function(){ + trigger.num++; + }, + mark:true, + intro:{ + content:'当你受到伤害时,你令此伤害+1。', + }, + aiCheck:function(target){ + if(target.hasSkill('tiansuan2_3')) return 0; + var player=_status.event.player; + var att=get.attitude(player,target); + return -att/Math.sqrt(Math.max(1,target.hp)); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')&&!player.hasSkillTag('jueqing',false,target)&¤t<0) return 1.3; + } + }, + }, + }, + tiansuan2_4:{ + name:'下下签', + trigger:{player:'damageBegin3'}, + forced:true, + charlotte:true, + content:function(){ + trigger.num++; + }, + mod:{ + cardEnabled:function(card,player){ + if(card.name=='tao'||card.name=='jiu') return false; + }, + cardSavable:function(card,player){ + if(card.name=='tao'||card.name=='jiu') return false; + }, + }, + mark:true, + intro:{ + content:'当你受到伤害时,你令此伤害+1。你不能使用【酒】或【桃】。', + }, + aiCheck:function(target){ + if(target.hasSkill('tiansuan2_4')) return 0; + var player=_status.event.player; + var att=get.attitude(player,target); + return -att/Math.sqrt(Math.max(1,target.hp)); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')&&!player.hasSkillTag('jueqing',false,target)&¤t<0) return 1.3; + } + }, + }, + }, relieren:{ shaRelated:true, audio:2, @@ -7609,39 +8244,61 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, polu:{ audio:2, - trigger:{player:['phaseZhunbeiBegin','damageEnd']}, + trigger:{player:'phaseZhunbeiBegin'}, forced:true, filter:function(event,player){ - return !player.getEquip('ly_piliche'); + if(!lib.inpile.contains('ly_piliche')) return true; + return !!get.cardPile(function(card){ + return card.name=='ly_piliche'; + }); }, content:function(){ - if(trigger.name=='phaseZhunbei'){ - player.useCard(game.createCard('ly_piliche','diamond',1),player); + var card; + if(!lib.inpile.contains('ly_piliche')){ + card=game.createCard2('ly_piliche','diamond',1); + lib.inpile.push('ly_piliche'); } - else{ - player.draw(trigger.num); - } - } + else card=get.cardPile(function(card){ + return card.name=='ly_piliche'; + }); + player.chooseUseTarget(card,true,'nopopup'); + }, + group:'polu_damage', + subSkill:{ + damage:{ + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event,player){ + return !player.getEquip('ly_piliche'); + }, + content:function(){ + 'step 0' + event.count=trigger.num; + 'step 1' + event.count--; + player.draw(); + 'step 2' + var card=get.cardPile2(function(card){ + return get.subtype(card,false)=='equip1'&&player.canUse(card,player); + }); + if(card) player.chooseUseTarget(card,true,'nopopup'); + 'step 3' + if(event.count>0&&!player.getEquip('ly_piliche')) event.goto(1); + }, + }, + }, }, ly_piliche:{ trigger:{source:'damageSource'}, check:function(event,player){ - return get.attitude(player,event.player)<0; + return get.attitude(player,event.player)*get.value(event.player.getDiscardableCards(player,'e'),event.player)>0; }, filter:function(event,player){ - if(event.card&&get.type(event.card)=='delay') return false; - return event.player.isIn()&&(event.player.getEquip(2)||event.player.getEquip(3)); + return player!=event.player&&event.player.countDiscardableCards(player,'e')>0; }, logTarget:'player', content:function(){ - var equip2=trigger.player.getEquip(2); - var equip3=trigger.player.getEquip(3); - var cards=[]; - if(equip2) cards.push(equip2); - if(equip3) cards.push(equip3); - if(cards.length){ - trigger.player.discard(cards); - } + player.discardPlayerCard(trigger.player,'e',true,trigger.player.countCards('e')); } }, xinzhilve:{ @@ -8201,7 +8858,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ly_piliche:'霹雳车', ly_piliche_info:'当你对其他角色造成伤害后,若造成伤害的牌不为延时锦囊牌,你可以弃置其装备区里的防具牌与+1坐骑牌;当你失去此装备时,销毁之。', polu:'破橹', - polu_info:'锁定技,回合开始时,若你的装备区里没有【霹雳车】,你使用之;当你受到1点伤害后,若你的装备区里没有【霹雳车】,你摸一张牌。', + polu_info:'锁定技,回合开始时,若【霹雳车】未加入游戏或在牌堆/弃牌堆内,则你使用之;当你受到1点伤害后,若你的装备区里没有【霹雳车】,则你摸一张牌并使用牌堆中的一张随机武器牌。', choulve:'筹略', choulve_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌,若其如此做,视为你使用上一张对你过造成伤害且不为延时锦囊牌的牌。', tunchu:'屯储', @@ -8666,12 +9323,44 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spchijie_info:'每回合限一次。当你成为其他角色使用牌的唯一目标时,你可判定。若结果大于6,则你取消此牌的所有目标。', reduoji:'夺冀', reduoji_info:'出牌阶段限一次,你可将一张牌置于其他角色的武将牌上,称为“冀”。当有装备牌因使用而进入一名角色的装备区后,若该角色有“冀”且其为使用者,则你获得此装备牌,其移去一个“冀”并摸一张牌。一名其他角色的回合结束后,若其有“冀”,则你获得其的所有“冀”。', - re_jiangwei:'界姜维', + re_jiangwei:'手杀姜维', retiaoxin:'挑衅', retiaoxin_info:'出牌阶段限一次,你可以指定一名有牌的其他角色,该角色需对你使用一张【杀】,否则你弃置其一张牌。', - re_zhurong:'界祝融', + re_zhurong:'手杀祝融', relieren:'烈刃', relieren_info:'当你使用【杀】指定目标后,你可以和目标角色进行拼点。若你赢,你获得其一张牌。若你没赢,你获得对方的拼点牌,其获得你的拼点牌。', + zhouqun:'周群', + tiansuan:'天算', + tiansuan_info:'出牌阶段限一次,若场上没有因你产生的“命运签”,则你可以抽取一张“命运签”,然后令一名角色获得“命运签”直到你的下回合开始。若你以此法抽取的“命运签”为:上上签,你观看其手牌;上上签/上签,你获得其区域内的一张牌。', + tiansuan_faq:'【命运签】说明', + tiansuan_faq_info:'当你抽取“命运签”时,你可以令其中一种命运签的权重+1。
上上签(权重1):当你受到伤害时,防止此伤害。
上签(权重2):当你受到伤害时,你令伤害值改为1;当你受到1点伤害后,你摸一张牌。
中签(权重3):当你受到伤害时,你令伤害属性改为火属性并将伤害值改为1。
下签(权重2):当你受到伤害时,你令此伤害+1。
下下签(权重1):当你受到伤害时,你令此伤害+1。你不能使用【酒】或【桃】。', + tiansuan2_0:'命运签', + tiansuan2_1:'命运签', + tiansuan2_2:'命运签', + tiansuan2_damage:'命运签', + tiansuan2_fire:'命运签', + tiansuan2_3:'命运签', + tiansuan2_4:'命运签', + wangling:'王凌', + mouli:'谋立', + mouli_info:'出牌阶段限一次,你可以将一张手牌交给一名其他角色,其获得如下效果直到你的下回合开始:其可以将黑色牌当做【杀】,红色牌当做【闪】使用。其第一次触发“使用【杀】/【闪】结算完成后”的时机时,你摸三张牌。', + zifu:'自缚', + zifu_info:'锁定技,当有角色死亡时,若其因你获得的“谋立”效果未过期,则你减2点体力上限。', + wangfuzhaolei:'王甫赵累', + xunyi:'殉义', + xunyi2:'殉义', + xunyi3:'殉义', + xunyi_info:'游戏开始时,或当上一个拥有“殉义”效果的角色死亡后,你可以选择一名角色获得如下效果:当其/你对二者之外的角色造成伤害后,你/其摸一张牌;当其/你受到二者之外的角色造成的伤害后,你/其弃置一张牌。', + zhouchu:'周处', + xianghai:'乡害', + xianghai_info:'锁定技,其他角色的手牌上限-1。你手牌区的装备牌均视为【酒】。', + chuhai:'除害', + chuhai_info:'出牌阶段限一次,你可以摸一张牌,然后和一名其他角色拼点。若你赢,则你观看其手牌,并从牌堆/弃牌堆中获得其手牌中包含的类型的牌各一张,且当你于此阶段内对其造成伤害后,你将牌堆/弃牌堆中的一张装备牌置于你的一个空置装备栏内。', + sp_kongrong:'孔融', + spmingshi:'名士', + spmingshi_info:'锁定技,当你受到1点伤害后,伤害来源弃置一张牌。', + splirang:'礼让', + splirang_info:'出牌阶段限一次,你可以弃置所有手牌,然后将其中的至多X张牌交给一名其他角色(X为你的体力值),之后摸一张牌。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/rank.js b/character/rank.js index 589373f36..4b35f7ed7 100644 --- a/character/rank.js +++ b/character/rank.js @@ -472,6 +472,8 @@ window.noname_character_rank={ 'ns_zhangning', 'huangchengyan', 'zhongyan', + 'wangling', + 'zhouchu', ], bp:[ 'chess_diaochan', @@ -680,6 +682,8 @@ window.noname_character_rank={ 'shen_guojia', 'ol_jiangwei', 'key_tenzen', + 'jsp_liubei', + 'liangxing', ], b:[ 'diy_feishi', @@ -861,6 +865,7 @@ window.noname_character_rank={ 'shibao', 'zhangmiao', 'ol_zhurong', + 'sp_kongrong', ], bm:[ 'diy_xizhenxihong', @@ -1009,6 +1014,7 @@ window.noname_character_rank={ 'sp_fuwan', 're_chengpu', 're_niujin', + 'wangfuzhaolei', ], c:[ 'xiahoudun', @@ -1350,6 +1356,7 @@ window.noname_character_rank={ 'jin_yanghuiyu', 'xiahoujie', 'ruanyu', + 'zhouqun', 'ns_chentai', 'ns_huangwudie', 'ns_sunyi', @@ -1672,6 +1679,9 @@ window.noname_character_rank={ 'ol_jiangwei', 'ol_zhurong', 'huangchengyan', + 'liangxing', + 'wangling', + 'zhouchu', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index 059f5de9c..49ad998be 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -351,7 +351,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, //界曹彰 xinjiangchi:{ - trigger:{player:'phaseDrawEnd'}, + trigger:{player:'phaseUseBegin'}, direct:true, content:function(){ 'step 0' @@ -362,9 +362,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.countCards('he',function(card){ return lib.filter.cardDiscardable(card,player,'xinjiangchi')>0; })>0) list.push('弃置一张牌,本回合可以多使用一张【杀】且无距离限制'); - player.chooseControl('cancel2').set('prompt',get.prompt('xinjiangchi')).set('choiceList',list); + player.chooseControl('cancel2').set('prompt',get.prompt('xinjiangchi')).set('choiceList',list).set('ai',function(){ + var player=_status.event.player; + if(!player.countCards('hs',function(card){ + return get.name(card)=='sha'&&player.hasValueTarget(card,false); + })) return 1; + return 0; + }); 'step 1' if(result.control!='cancel2'){ + player.logSkill('xinjiangchi'); switch(result.index){ case 0:{ player.draw(); @@ -9536,7 +9543,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ollihuo4:'疠火', ollihuo_info:'你使用普通的【杀】可以改为火【杀】,若此【杀】造成过伤害,你失去1点体力;你使用火【杀】可以多选择一个目标。你每回合使用的第一张牌如果是【杀】,则此【杀】结算完毕后可置于你的武将牌上。', xinjiangchi:'将驰', - xinjiangchi_info:'摸牌阶段结束时,你可选择:①摸一张牌。②摸两张牌,然后本回合内不能使用或打出【杀】。③弃置一张牌,然后本回合内可以多使用一张【杀】,且使用【杀】无距离限制。', + xinjiangchi_info:'出牌阶段开始时,你可选择:①摸一张牌。②摸两张牌,然后本回合内不能使用或打出【杀】。③弃置一张牌,然后本回合内可以多使用一张【杀】,且使用【杀】无距离限制。', re_chenqun:'界陈群', redingpin:'定品', redingpin_info:'出牌阶段,你可以弃置一张本回合未使用过/弃置过的类型的牌并选择一名角色。其进行判定,若结果为:黑色,其摸X张牌(X为其体力值且至多为3)且本回合内不能再成为〖定品〗的目标;红桃,你令此次弃置的牌不计入〖定品〗弃置牌合法性的检测;方片,你将武将牌翻面。', diff --git a/character/sp.js b/character/sp.js index 3efb874c1..b77083252 100755 --- a/character/sp.js +++ b/character/sp.js @@ -10,8 +10,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zhongdan:["cuiyan","huangfusong"], sp_star:["sp_xiahoushi","jsp_zhaoyun","huangjinleishi","sp_pangtong","sp_daqiao","sp_ganning","sp_xiahoudun","sp_lvmeng","sp_zhangfei","sp_liubei"], sp_sticker:['sp_gongsunzan','sp_simazhao','sp_wangyuanji','sp_xinxianying','sp_liuxie'], - sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan"], - sp_guozhan2:["mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","kongrong","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","huaxin","luyusheng","zongyu"], + sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan","luyusheng"], + sp_guozhan2:["mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","huaxin","zongyu"], //sp_single:["niujin"], sp_others:["hanba","caiyang"], }, @@ -139,7 +139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jiangfei:['male','shu',3,['reshengxi','shoucheng']], jiangqing:['male','wu',4,['shangyi','zniaoxiang']], hetaihou:['female','qun',3,['zhendu','qiluan']], - kongrong:['male','qun',3,['lirang','mingshi']], + //kongrong:['male','qun',3,['lirang','mingshi']], dingfeng:['male','wu',4,['reduanbing','refenxun']], //bianfuren:['female','wei',3,['wanwei','yuejian']], shamoke:['male','shu',4,['gzjili']], @@ -1242,7 +1242,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:'player', usable:1, filter:function(event,player){ - if(player==event.player||get.color(event.card)!='black'||event.player.isDead()) return false; + var color=get.color(event.card); + if(player==event.player||event.player.isDead()||(get.mode()=='guozhan'&&color!='black')) return false; var type=get.type(event.card); return type=='basic'||type=='trick'; }, @@ -1252,42 +1253,49 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' trigger.player.chooseControl().set('choiceList',[ - '本回合内不能再使用黑色牌', + '本回合内不能再使用'+get.translation(get.color(trigger.card))+'牌', '令'+get.translation(trigger.card)+'对'+get.translation(player)+'无效', ]).set('prompt',get.translation(player)+'发动了【贞特】,请选择一项').set('ai',function(){ var player=_status.event.player; var target=_status.event.getParent().player; - var card=_status.event.getTrigger().card; + var card=_status.event.getTrigger().card,color=get.color(card); if(get.effect(target,card,player,player)<=0) return 1; var hs=player.countCards('h',function(card){ - return get.color(card,player)=='black'&&player.hasValueTarget(card,null,true); + return get.color(card,player)==color&&player.hasValueTarget(card,null,true); }); if(!hs.length) return 0; if(hs>1) return 1; return Math.random()>0.5?0:1; }); 'step 1' - if(result.index==0) trigger.player.addTempSkill('zhente2'); + if(result.index==0){ + trigger.player.addTempSkill('zhente2'); + trigger.player.storage.zhente2.add(get.color(trigger.card)); + trigger.player.markSkill('zhente2'); + } else trigger.excluded.add(player); }, }, zhente2:{ mod:{ - cardEnabled:function(card){ - if(get.color(card)=='black') return false; + cardEnabled:function(card,player){ + if(player.getStorage('zhente2').contains(get.color(card))) return false; }, - cardSavable:function(card){ - if(get.color(card)=='black') return false; + cardSavable:function(card,player){ + if(player.getStorage('zhente2').contains(get.color(card))) return false; }, }, - mark:true, charlotte:true, - intro:{content:'本回合内不能使用黑色牌'}, + onremove:true, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + intro:{content:'本回合内不能使用$牌'}, }, zhiwei:{ audio:2, trigger:{ - player:['enterGame','showCharacterAfter'], + player:['enterGame','showCharacterAfter','phaseBegin'], global:['gameDrawAfter'], }, direct:true, @@ -4022,7 +4030,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:"phaseUseBegin", }, intro:{ - content:"本局游戏内已失去过#张装备区内的牌", + content:"本局游戏内已失去过#张装备牌", }, frequent:true, sync:function(player){ @@ -17247,10 +17255,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luyusheng:'陆郁生', zhente:'贞特', zhente2:'贞特', - zhente_info:'每回合限一次,当你成为其他角色使用黑色基本牌或黑色普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用黑色牌;2.此牌对你无效。 ', + zhente_info:'每回合限一次,当你成为其他角色使用基本牌或普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用与此牌颜色相同的牌;2.此牌对你无效。 ', + zhente_info_guozhan:'每回合限一次,当你成为其他角色使用黑色基本牌或黑色普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用黑色牌;2.此牌对你无效。 ', zhiwei:'至微', zhiwei2:'至微', - zhiwei_info:'游戏开始时,你选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。', + zhiwei_info:'游戏开始时/你的回合开始时,若场上没有因此法被选择过的角色存活,则你选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。', zhiwei_info_guozhan:'你明置此武将牌时,选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。该角色死亡时,若你的两个武将牌均明置,你暗置此武将牌。 ', zhuixi:'追袭', zhuixi_info:'锁定技,你使用【杀】的次数上限+1。', diff --git a/character/sp2.js b/character/sp2.js index 4d399f3cc..5831fac36 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,10 +4,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + jsp_liubei:['male','qun',4,['jsprende']], duanwei:['male','qun',4,['langmie']], re_niujin:['male','wei',4,['recuorui','reliewei']], zhangmiao:['male','qun',4,['mouni','zongfan']], - liangxing:['male','qun',4,['lulve','lxzhuixi'],['unseen']], + liangxing:['male','qun',4,['lulve','lxzhuixi']], ruanyu:['male','wei',3,['xingzuo','miaoxian']], xiahoujie:['male','wei',5,['liedan','zhuangdan']], caosong:['male','wei',4,['cslilu','csyizheng']], @@ -87,7 +88,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ sp2:{ - sp_whlw:["xurong","lijue","zhangji","fanchou","guosi"], + sp_whlw:["xurong","lijue","zhangji","fanchou","guosi","duanwei","liangxing"], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], sp_longzhou:["xf_tangzi","xf_huangquan","xf_sufei","sp_liuqi"], sp_zizouqi:["mangyachang","xugong","zhangchangpu"], @@ -97,15 +98,172 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui','liubian'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], - sp_xuzhou:['re_taoqian','caosong'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','zhaozhong','ruanyu','liangxing','zhangmiao','re_niujin','duanwei'], + sp_xuzhou:['re_taoqian','caosong','zhangmiao'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','zhaozhong','ruanyu','liangxing','re_niujin'], sp_mini:["mini_sunquan","mini_zuoci","mini_jiangwei","mini_diaochan","mini_zhangchunhua"], sp_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], sp_yongjian:["ns_chendao","yj_caoang"], - sp_s:["ns_jiaxu","ns_caoanmin"], + sp_s:["ns_jiaxu","ns_caoanmin","jsp_liubei"], } }, skill:{ + jsprende:{ + audio:'rerende', + enable:'phaseUse', + filterCard:true, + selectCard:[1,Infinity], + discard:false, + lose:false, + delay:false, + filterTarget:function(card,player,target){ + return player!=target; + }, + onremove:true, + check:function(card){ + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0; + if(!ui.selected.cards.length&&card.name=='du') return 20; + var player=get.owner(card); + if(ui.selected.cards.length>=Math.max(2,player.countCards('h')-player.hp)) return 0; + if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ + var players=game.filterPlayer(); + for(var i=0;i=3&& + get.attitude(players[i],player)>=3){ + return 11-get.value(card); + } + } + if(player.countCards('h')>player.hp) return 10-get.value(card); + if(player.countCards('h')>2) return 6-get.value(card); + return -1; + } + return 10-get.value(card); + }, + content:function(){ + 'step 0' + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'&&!evt.jsprende){ + var next=game.createEvent('jsprende_clear'); + _status.event.next.remove(next); + evt.after.push(next); + evt.jsprende=true; + next.player=player; + next.setContent(function(){ + delete player.storage.jsprende; + }); + } + target.gain(cards,player,'giveAuto'); + if(typeof player.storage.jsprende!='number'){ + player.storage.jsprende=0; + } + if(player.storage.jsprende>=0){ + player.storage.jsprende+=cards.length; + if(player.storage.jsprende>=2){ + var list=[]; + if(lib.filter.cardUsable({name:'sha'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ + return player.canUse('sha',current); + })){ + list.push(['基本','','sha']); + list.push(['基本','','sha','fire']); + list.push(['基本','','sha','thunder']); + list.push(['基本','','sha','ice']); + } + if(lib.filter.cardUsable({name:'tao'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ + return player.canUse('tao',current); + })){ + list.push(['基本','','tao']); + } + if(lib.filter.cardUsable({name:'jiu'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ + return player.canUse('jiu',current); + })){ + list.push(['基本','','jiu']); + } + if(list.length){ + player.chooseButton(['是否视为使用一张基本牌?',[list,'vcard']]).set('ai',function(button){ + var player=_status.event.player; + var card={name:button.link[2],nature:button.link[3]}; + if(card.name=='tao'){ + if(player.hp==1||(player.hp==2&&!player.hasShan())||player.needsToDiscard()){ + return 5; + } + return 1; + } + if(card.name=='sha'){ + if(game.hasPlayer(function(current){ + return player.canUse(card,current)&&get.effect(current,card,player,player)>0 + })){ + if(card.nature=='fire') return 2.95; + if(card.nature=='thunder'||card.nature=='ice') return 2.92; + return 2.9; + } + return 0; + } + if(card.name=='jiu'){ + return 0.5; + } + return 0; + }); + } + else{ + event.finish(); + } + player.storage.jsprende=-1; + } + else{ + event.finish(); + } + } + else{ + event.finish(); + } + 'step 1' + if(result&&result.bool&&result.links[0]){ + var card={name:result.links[0][2],nature:result.links[0][3]}; + player.chooseUseTarget(card,true); + } + }, + ai:{ + fireAttack:true, + order:function(skill,player){ + if(player.hp1){ + return 10; + } + return 4; + }, + result:{ + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ + if(target.hasSkillTag('nodu')) return 0; + return -10; + } + if(target.hasJudge('lebu')) return 0; + var nh=target.countCards('h'); + var np=player.countCards('h'); + if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ + if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0; + } + return Math.max(1,5-nh); + } + }, + effect:{ + target:function(card,player,target){ + if(player==target&&get.type(card)=='equip'){ + if(player.countCards('e',{subtype:get.subtype(card)})){ + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0; + })){ + return 0; + } + } + } + } + }, + threaten:0.8 + } + }, //狼灭 langmie:{ trigger:{global:'phaseUseEnd'}, @@ -352,6 +510,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseTarget(get.prompt2('lulve'),function(card,player,target){ var hs=player.countCards('h'),ts=target.countCards('h'); return target!=player&&ts>0&&hs>ts; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.isTurnedOver()) return att/10; + if(!player.hasShan()&&target.canUse({name:'sha',isCard:true},player,false)&&get.effect(player,{name:'sha',isCard:true},target,player)<0&&player.hp<4) return 0; + return -att*Math.sqrt(target.countCards('h')); }); 'step 1' if(result.bool){ @@ -363,6 +526,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ '将所有手牌交给'+str+',然后其将武将牌翻面', '将武将牌翻面,然后视为对'+str+'使用【杀】', ]).set('ai',function(){ + var player=_status.event.player,target=_status.event.getParent().player; + if(player.isTurnedOver()) return 1; + if(!target.hasShan()&&player.canUse({name:'sha',isCard:true},target,false)&&get.effect(target,{name:'sha',isCard:true},player,player)<0) return 0; return Math.random()<0.5?0:1; }); } @@ -8567,6 +8733,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //jin_yanghuiyu:['jin_yanghuiyu','yanghuiyu'], chunyuqiong:['chunyuqiong','re_chunyuqiong'], taoqian:['taoqian','re_taoqian'], + sp_liubei:['sp_liubei','jsp_liubei'], }, translate:{ lijue:"李傕", @@ -9047,6 +9214,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ langmie:'狼灭', langmie_damage:'狼灭', langmie_info:'其他角色的出牌阶段结束时,若其本阶段内使用过的牌中有名称相同的牌,则你可以摸一张牌;其他角色的结束阶段开始时,若其本回合内一次性造成过大于1点的伤害,则你可以弃置一张牌并对其造成1点伤害。', + jsp_liubei:'群刘备', + jsp_liubei_ab:'刘备', + jsprende:'仁德', + jsprende_info:'出牌阶段,你可以将至少一张手牌交给其他角色;若你于此阶段内给出的牌首次达到两张,你可以视为使用一张基本牌', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/yingbian.js b/character/yingbian.js index e462221c3..5d57491ec 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -840,6 +840,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhuosheng:{ audio:2, locked:false, + init:function(player){ + player.addSkill('zhuosheng_count'); + if(game.phaseNumber>0){ + var hs=player.getCards('h'),all=player.getAllHistory(),cards=[]; + for(var i=all.length-1;i>=0;i--){ + for(var j of all[i].gain){ + cards.addArray(j.cards); + } + if(all[i].isRound) break; + } + cards=cards.filter(function(i){ + return hs.contains(i); + }); + if(cards.length) player.addGaintag(cards,'zhuosheng'); + } + }, onremove:function(player){ player.removeSkill('zhuosheng_count'); player.removeGaintag('zhuosheng'); @@ -932,25 +948,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, silent:{ trigger:{ - player:['enterGame','useCard1'], - global:'gameDrawAfter', + player:'useCard1', }, silent:true, firstDo:true, filter:function(event,player){ - if(event.name=='useCard') return get.mode()!='guozhan'&&get.type(event.card)=='basic'&&lib.skill.zhuosheng.filterx(event,player)&&event.addCount!==false; - return true; + return get.mode()!='guozhan'&&get.type(event.card)=='basic'&&lib.skill.zhuosheng.filterx(event,player)&&event.addCount!==false; }, content:function(){ - if(trigger.name=='useCard'){ - trigger.addCount=false; - var stat=player.getStat(); - if(stat&&stat.card&&stat.card[trigger.card.name]) stat.card[trigger.card.name]--; - } - else{ - player.addSkill('zhuosheng_count'); - player.addGaintag(player.getCards('h'),'zhuosheng'); - } + trigger.addCount=false; + var stat=player.getStat(); + if(stat&&stat.card&&stat.card[trigger.card.name]) stat.card[trigger.card.name]--; }, }, }, diff --git a/game/asset.js b/game/asset.js index 44c2cd52e..a932d8342 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.8', + 'v1.9.110.8.2', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -729,6 +729,14 @@ window.noname_asset_list=[ 'audio/die/ruanyu.mp3', 'audio/die/zhangmiao.mp3', 'audio/die/re_guotufengji.mp3', + 'audio/die/duanwei.mp3', + 'audio/die/liangxing.mp3', + 'audio/die/shen_guojia.mp3', + 'audio/die/sp_kongrong.mp3', + 'audio/die/wangfuzhaolei.mp3', + 'audio/die/wangling.mp3', + 'audio/die/zhouchu.mp3', + 'audio/die/zhouqun.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3219,6 +3227,36 @@ window.noname_asset_list=[ 'audio/skill/rejigong2.mp3', 'audio/skill/shifei_re_guotufengji1.mp3', 'audio/skill/shifei_re_guotufengji2.mp3', + 'audio/die/chuhai1.mp3', + 'audio/die/chuhai2.mp3', + 'audio/die/langmie1.mp3', + 'audio/die/langmie2.mp3', + 'audio/die/lulve1.mp3', + 'audio/die/lulve2.mp3', + 'audio/die/lxzhuixi1.mp3', + 'audio/die/lxzhuixi2.mp3', + 'audio/die/mouli1.mp3', + 'audio/die/mouli2.mp3', + 'audio/die/sghuishi1.mp3', + 'audio/die/sghuishi2.mp3', + 'audio/die/shuishi1.mp3', + 'audio/die/shuishi2.mp3', + 'audio/die/splirang1.mp3', + 'audio/die/splirang2.mp3', + 'audio/die/spmingshi1.mp3', + 'audio/die/spmingshi2.mp3', + 'audio/die/stianyi1.mp3', + 'audio/die/stianyi2.mp3', + 'audio/die/tiansuan1.mp3', + 'audio/die/tiansuan2.mp3', + 'audio/die/xianghai1.mp3', + 'audio/die/xianghai2.mp3', + 'audio/die/xunyi1.mp3', + 'audio/die/xunyi2.mp3', + 'audio/die/zifu1.mp3', + 'audio/die/zifu2.mp3', + 'audio/die/zuoxing1.mp3', + 'audio/die/zuoxing2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -3700,6 +3738,10 @@ window.noname_asset_list=[ 'image/card/gz_haolingtianxia.png', 'image/card/gz_kefuzhongyuan.png', 'image/card/gz_wenheluanwu.png', + 'image/card/baiyidujiang.png', + 'image/card/binglinchengxia.png', + 'image/card/luojingxiashi.png', + 'image/card/toushiche.png', 'image/character/shenpei.jpg', 'image/character/re_menghuo.jpg', @@ -4078,6 +4120,13 @@ window.noname_asset_list=[ 'image/character/re_guotufengji.jpg', 'image/character/shen_guojia.jpg', 'image/character/zhongyan.jpg', + 'image/character/jsp_liubei.jpg', + 'image/character/liangxing.jpg', + 'image/character/sp_kongrong.jpg', + 'image/character/wangfuzhaolei.jpg', + 'image/character/wangling.jpg', + 'image/character/zhouchu.jpg', + 'image/character/zhouqun.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 404f415dd..8856f880b 100644 --- a/game/game.js +++ b/game/game.js @@ -22,6 +22,12 @@ cardMove:[], custom:[], }], + cardtag:{ + yingbian_zhuzhan:[], + yingbian_kongchao:[], + yingbian_fujia:[], + yingbian_canqu:[], + }, }; var lib={ configprefix:'noname_0.9_', @@ -4118,7 +4124,7 @@ nopointer:true, }, enableai:{ - name:'AI可选', + name:'随机选将可用', init:false }, hide:{ @@ -24385,6 +24391,7 @@ } _status.cardtag[tag].add(this.cardid); tagstr+=lib.translate[tag+'_tag']; + //if(i主公BOSSAI禁选
隐匿技
',newCharacter); + var options=ui.create.div('.add_skill.options','主公BOSS仅点将可用
隐匿技
',newCharacter); var addSkill=ui.create.div('.add_skill','添加技能
',newCharacter); var list=[]; for(var i in lib.character){ @@ -44810,6 +44817,9 @@ } } lib.inpile.sort(lib.sort.card); + for(var i in _status.cardtag){ + if(!_status.cardtag[i].length) delete _status.cardtag[i]; + } game.broadcastAll(function(num,pile,top,cardtag){ if(ui.cardPileNumber) ui.cardPileNumber.innerHTML='0轮 剩余牌: '+num; lib.inpile=pile; @@ -52299,7 +52309,7 @@ } } if(node._banning=='offline'){ - var cfg=ui.create.div('.config','AI可选',page); + var cfg=ui.create.div('.config','随机选将可用',page); cfg.classList.add('toggle'); cfg.listen(function(){ this.classList.toggle('on'); diff --git a/game/update.js b/game/update.js index c4cd47ac4..2afb34f2d 100644 --- a/game/update.js +++ b/game/update.js @@ -1,22 +1,23 @@ window.noname_update={ - version:'1.9.110.8.1', - update:'1.9.110.8', + version:'1.9.110.8.2', + update:'1.9.110.8.1', changeLog:[ - '兵临城下(斗地主)', + '梁兴、群刘备、孔融、王甫赵累、王凌、周处、周群', + '应变牌堆调整', 'bug修复', ], files:[ - //'card/extra.js', + 'card/extra.js', //'card/gujian.js', - //'card/guozhan.js', + 'card/guozhan.js', //'card/gwent.js', //'card/huanlekapai.js', //'card/mtg.js', //'card/sp.js', - //'card/standard.js', + 'card/standard.js', //'card/swd.js', //'card/yunchou.js', - //'card/yingbian.js', + 'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', 'character/diy.js', @@ -25,21 +26,21 @@ window.noname_update={ //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', //'character/old.js', //'character/ow.js', - //'character/rank.js', - //'character/refresh.js', + 'character/rank.js', + 'character/refresh.js', //'character/shenhua.js', - //'character/sp.js', - //'character/sp2.js', + 'character/sp.js', + 'character/sp2.js', //'character/tw.js', //'character/standard.js', //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', - //'character/yingbian.js', + 'character/yingbian.js', //'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', @@ -55,7 +56,7 @@ window.noname_update={ //'mode/single.js', //'mode/stone.js', //'mode/tafang.js', - //'mode/versus.js', + 'mode/versus.js', 'game/game.js', //'game/keyWords.js', //'game/NoSleep.js', diff --git a/image/character/jsp_liubei.jpg b/image/character/jsp_liubei.jpg new file mode 100644 index 000000000..23cefe8bc Binary files /dev/null and b/image/character/jsp_liubei.jpg differ diff --git a/image/character/liangxing.jpg b/image/character/liangxing.jpg new file mode 100644 index 000000000..4cb6695f8 Binary files /dev/null and b/image/character/liangxing.jpg differ diff --git a/image/character/sp_kongrong.jpg b/image/character/sp_kongrong.jpg new file mode 100644 index 000000000..27d9680cb Binary files /dev/null and b/image/character/sp_kongrong.jpg differ diff --git a/image/character/wangfuzhaolei.jpg b/image/character/wangfuzhaolei.jpg new file mode 100644 index 000000000..c8b09c817 Binary files /dev/null and b/image/character/wangfuzhaolei.jpg differ diff --git a/image/character/wangling.jpg b/image/character/wangling.jpg new file mode 100644 index 000000000..035fb355d Binary files /dev/null and b/image/character/wangling.jpg differ diff --git a/image/character/zhouchu.jpg b/image/character/zhouchu.jpg new file mode 100644 index 000000000..75f49f6f2 Binary files /dev/null and b/image/character/zhouchu.jpg differ diff --git a/image/character/zhouqun.jpg b/image/character/zhouqun.jpg new file mode 100644 index 000000000..7a2fc1e12 Binary files /dev/null and b/image/character/zhouqun.jpg differ diff --git a/mode/doudizhu.js b/mode/doudizhu.js index 521a69fcf..4f9611e01 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1903,7 +1903,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ forced:true, ruleSkill:true, filter:function(event,player){ - return game.roundNumber>14; + return _status.mode=='binglin'&&game.roundNumber>14; }, content:function(){ player.loseHp(); @@ -2007,6 +2007,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.removeMark('binglin_shaxue',1,false); }, intro:{content:'剩余次数:#'}, + ai:{ + viewHandcard:true, + skillTagFilter:function(player,tag,arg){ + return player!=arg&&arg.hasSkill('binglin_shaxue'); + }, + }, }, binglin_neihong:{charlotte:true}, toushiche_skill:{ @@ -2539,7 +2545,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ else if(choices.length==1) event._result={index:0}; else player.chooseControl().set('choiceList',choices).set('ai',function(){ var evt=_status.event.getParent(); - return get.attitude(evt.player,evt.target)>0?1:0; + return get.attitude(evt.player,evt.target)>0?0:1; }); 'step 1' if(result.index+event.addIndex==0){ diff --git a/mode/versus.js b/mode/versus.js index 21d509187..34d4d52e8 100644 --- a/mode/versus.js +++ b/mode/versus.js @@ -2640,7 +2640,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ lib.character[name][1]='wei'; return true; }); - event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','re_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','guotufengji','chunyuqiong'].filter(function(name){ + event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','jsp_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','guotufengji','chunyuqiong'].filter(function(name){ if(!Array.isArray(lib.character[name])) return false; lib.character[name][1]='qun'; return true; @@ -2716,7 +2716,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ lib.character[name][1]='wei'; return true; }); - event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','re_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','guotufengji','chunyuqiong'].filter(function(name){ + event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','jsp_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','guotufengji','chunyuqiong'].filter(function(name){ if(!Array.isArray(lib.character[name])) return false; lib.character[name][1]='qun'; return true;