current!=player&&player.canUse(card,current,false)&&!player.inRange(current));
+ for(var target of targets){
+ eff+=get.effect(target,card,player,player);
+ }
+ delete _status._olkenshang_aiChecking;
+ if(eff>0) return [0,eff/Math.max(0.01,get.attitude(player,player))];
+ },
+ },
+ },
+ subSkill:{
+ effect:{
+ audio:'olkenshang',
+ trigger:{player:'useCard2'},
+ charlotte:true,
+ logTarget:function(event,player){
+ return game.filterPlayer(current=>current!=player&&player.canUse(event.card,current,false)&&!player.inRange(current));
+ },
+ prompt2:'将此牌目标改为攻击范围外的所有其他角色',
+ group:'olkenshang_after',
+ check:function(event,player){
+ var eff1=0,eff2=0;
+ for(var target of event.targets){
+ eff1+=get.effect(target,event.card,event.player,player);
+ }
+ var targets=game.filterPlayer(current=>current!=player&&player.canUse(event.card,current,false)&&!player.inRange(current));
+ for(var target of targets){
+ eff2+=get.effect(target,event.card,event.player,player);
+ }
+ return eff2>eff1;
+ },
+ filter:function(event,player){
+ return event.card.name=='sha'&&event.card.storage&&event.card.storage.olkenshang&&event.targets.length&&game.filterPlayer(current=>current!=player&&player.canUse(event.card,current,false)&&!player.inRange(current)).length;
+ },
+ content:function(){
+ 'step 0'
+ trigger.targets.removeArray(trigger.targets);
+ var targets=game.filterPlayer(current=>current!=player&&player.canUse(trigger.card,current,false)&&!player.inRange(current));
+ if(targets.length) trigger.targets.addArray(targets);
+ }
+ },
+ after:{
+ audio:'olkenshang',
+ trigger:{player:'useCardAfter'},
+ forced:true,
+ charlotte:true,
+ filter:function(event,player){
+ if(event.card.name!='sha'||!event.card.storage||!event.card.storage.olkenshang) return false;
+ var num=0;
+ game.countPlayer2(current=>{
+ current.getHistory('damage',evt=>{
+ if(evt.card==event.card) num+=evt.num;
+ })
+ });
+ return num>0;
+ },
+ content:function(){
+ 'step 0'
+ var num=0,len=trigger.cards.length;
+ game.countPlayer2(current=>{
+ current.getHistory('damage',evt=>{
+ if(evt.card==trigger.card) num+=evt.num;
+ })
+ });
+ if(len>num){
+ player.draw(num);
+ event.finish();
+ }
+ else{
+ var skills=player.getSkills(null,false,false).filter(skill=>{
+ var info=get.info(skill);
+ if(!info||info.charlotte||get.skillInfoTranslation(skill,player).length==0) return false;
+ return true;
+ });
+ if(skills.length==1) event._result={control:skills[0]};
+ else player.chooseControl(skills).set('choiceList',skills.map(i=>{
+ return '【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
'+get.skillInfoTranslation(i,player)+'
';
+ })).set('displayIndex',false).set('prompt','垦伤:选择失去一个技能').set('ai',()=>{
+ var choices=_status.event.controls.slice();
+ var negs=choices.filter(i=>{
+ var info=get.info(i);
+ if(!info||!info.ai) return false;
+ return info.ai.neg||info.ai.halfneg;
+ });
+ if(negs.length) return negs.randomGet();
+ if(choices.contains('mashu')) return 'mashu';
+ return choices.randomGet();
+ });
+ }
+ 'step 1'
+ player.removeSkill(result.control);
+ player.popup(result.control);
+ game.log(player,'失去了技能','#g【'+get.translation(result.control)+'】');
+ }
+ }
+ },
+ },
+ //董荼那
+ oljianman:{
+ audio:2,
+ trigger:{global:'phaseEnd'},
+ forced:true,
+ direct:true,
+ filter:function(event,player){
+ var history=game.getGlobalHistory('useCard',evt=>{
+ return get.type(evt.card)=='basic';
+ });
+ if(history.length<2) return false;
+ var users=history.slice(0,2).map(i=>i.player);
+ var list=users.filter(user=>user==player);
+ if(list.length==1){
+ var target=users.filter(user=>user!=player)[0];
+ return target&&target.isIn()&&target.countDiscardableCards(player,'he');
+ }
+ if(list.length==2){
+ return history.slice(0,2).some(evt=>{
+ var card=evt.card;
+ return player.hasUseTarget({name:card.name,nature:card.nature,isCard:true});
+ });
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var history=game.getGlobalHistory('useCard',evt=>{
+ return get.type(evt.card)=='basic';
+ });
+ var list=history.slice(0,2).map(i=>i.player).filter(user=>user==player);
+ if(list.length==1) {
+ var users=history.slice(0,2).map(i=>i.player);
+ var target=users.filter(user=>user!=player)[0];
+ player.logSkill('oljianman',target);
+ player.discardPlayerCard(target,'he',true);
+ event.finish();
+ }
+ else if(list.length==2){
+ var evts=history.slice(0,2);
+ var vcard=[];
+ for(var evt of evts){
+ var card=evt.card;
+ if(vcard.length&&vcard[0][2]==card.name&&vcard[0][3]==card.nature) continue;
+ if(player.hasUseTarget({name:card.name,nature:card.nature,isCard:true})){
+ vcard.push(['基本','',card.name,card.nature]);
+ }
+ }
+ if(vcard.length==1) event._result={bool:true,links:[vcard[0]]};
+ else{
+ player.chooseButton(['鹣蛮:视为使用其中一张牌',[vcard,'vcard']]).set('ai',function(button){
+ return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
+ });
+ }
+ }
+ else event.finish();
+ 'step 1'
+ if(result.bool){
+ var card={name:result.links[0][2],nature:result.links[0][3],isCard:true};
+ player.chooseUseTarget(card,true).set('logSkill','oljianman').set('prompt','鹣蛮:选择'+get.translation(card)+'的目标');
+ }
+ }
+
+ },
+ //张华
+ olbihun:{
+ audio:2,
+ trigger:{player:'useCardToPlayer'},
+ forced:true,
+ filter:function(event,player){
+ return event.isFirstTarget&&player.countCards('h')>player.getHandcardLimit()&&event.targets.some(target=>target!=player);
+ },
+ //group:'olbihun_give',
+ content:function(){
+ if(trigger.targets.length==1){
+ var cards=trigger.cards.filterInD();
+ if(cards.length){
+ game.delayx();
+ trigger.targets[0].gain(cards,'gain2');
+ }
+ }
+ var targets=trigger.targets.filter(target=>target!=player);
+ trigger.targets.removeArray(targets);
+ trigger.getParent().triggeredTargets1.removeArray(targets);
+ },
+ ai:{
+ threaten:0.8,
+ halfneg:true,
+ effect:{
+ player:function(card,player,target){
+ if((!card.isCard||!card.cards)&&get.itemtype(card)!='card') return;
+ if(target&&player!=target&&player.countCards('h')>player.getHandcardLimit()) return [0,0,0,0.5];
+ },
+ },
+ },
+ /*subSkill:{
+ give:{
+ trigger:{player:'useCardAfter'},
+ filter:function(event,player){
+ return event._olbihun&&event._olbihun.isIn()&&event.cards.filterInD().length;
+ },
+ forced:true,
+ popup:false,
+ content:function(){
+ trigger._olbihun.gain(trigger.cards.filterInD(),'gain2');
+ }
+ }
+ }*/
+ },
+ olchuanwu:{
+ audio:2,
+ trigger:{
+ player:'damageEnd',
+ source:'damageSource',
+ },
+ forced:true,
+ filter:function(event,player){
+ return player.getAttackRange()>0;
+ },
+ content:function(){
+ var skills=game.filterSkills(player.getStockSkills(true,true),player);
+ var num=Math.min(player.getAttackRange(),skills.length);
+ skills=skills.slice(0,num);
+ player.disableSkill('olchuanwu',skills);
+ player.addTempSkill('olchuanwu_restore');
+ var str='';
+ for(var i of skills){
+ str+='【'+get.translation(i)+'】、';
+ player.popup(i);
+ }
+ str=str.slice(0,-1);
+ game.log(player,'的技能','#g'+str,'失效了');
+ player.draw(num);
+ },
+ subSkill:{
+ restore:{
+ charlotte:true,
+ forced:true,
+ popup:false,
+ onremove:function(player){
+ player.enableSkill('olchuanwu');
+ game.log(player,'恢复了技能');
+ }
+ }
+ }
+ },
+ oljianhe:{
+ audio:2,
+ enable:'phaseUse',
+ filterTarget:function(card,player,target){
+ return !player.getStorage('oljianhe_chosen').contains(target);
+ },
+ filterCard:function(card,player){
+ if(ui.selected.cards.length){
+ var cardx=ui.selected.cards[0];
+ if(get.type(cardx)=='equip') return get.type(card)=='equip';
+ return get.name(card)==get.name(cardx);
+ }
+ var cards=player.getCards('he');
+ for(var cardx of cards){
+ if(card!=cardx){
+ if(get.type(cardx)=='equip'&&get.type(card)=='equip') return true;
+ if(get.name(card)==get.name(cardx)) return true;
+ }
+ }
+ return false;
+ },
+ selectCard:[2,Infinity],
+ position:'he',
+ complexCard:true,
+ discard:false,
+ visible:true,
+ prepare:'throw',
+ loseTo:'discardPile',
+ delay:0.5,
+ check:function(card){
+ if(get.type(card)=='equip') return 15-get.value(card);
+ return 7-get.value(card);
+ },
+ content:function(){
+ 'step 0'
+ player.draw(cards.length);
+ player.addTempSkill('oljianhe_chosen','phaseUseAfter');
+ player.markAuto('oljianhe_chosen',[target]);
+ 'step 1'
+ var type=get.type2(cards[0]);
+ target.chooseCard(get.translation(player)+'对你发动了【剑合】','请重铸'+get.cnNumber(cards.length)+'张'+get.translation(type)+'牌,或点“取消”受到1点雷电伤害',cards.length,'he',(card,player)=>{
+ return get.type2(card)==_status.event.type&&player.canRecast(card);
+ }).set('ai',card=>{
+ if(_status.event.goon) return (get.type(card)=='equip'?15:7)-get.value(card);
+ return 0;
+ }).set('type',type).set('goon',get.damageEffect(target,player,target,'thunder')<0);
+ 'step 2'
+ if(result.bool){
+ target.recast(result.cards);
+ }
+ else{
+ target.damage(player,'thunder');
+ }
+ 'step 3'
+ game.delayx();
+ },
+ ai:{
+ order:function(item,player){
+ if(player.hasSkill('olbihun')&&player.countCards('h')>player.getHandcardLimit()) return 11;
+ return 4;
+ },
+ threaten:2.4,
+ expose:0.1,
+ result:{
+ target:function(player,target){
+ var cards=ui.selected.cards,type=get.type2(cards[0]);
+ if(target.countCards('he',card=>{
+ return get.type(card)==type&&get.value(card)<=5;
+ })>=cards.length) return 1;
+ return -1;
+ }
+ }
+ },
+ subSkill:{
+ chosen:{
+ charlotte:true,
+ onremove:true,
+ intro:{content:'本阶段已对$发动过技能'},
+ }
+ }
+ },
+ //屈晃
+ olqiejian:{
+ audio:2,
+ trigger:{
+ global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ direct:true,
+ filter:function(event,player){
+ return game.hasPlayer(current=>{
+ if(current.countCards('h')) return false;
+ var evt=event.getl(current);
+ return evt&&evt.hs&&evt.hs.length&&!player.getStorage('olqiejian_ban').contains(current);
+ });
+ },
+ content:function(){
+ 'step 0'
+ event.targets=game.filterPlayer(current=>{
+ if(current.countCards('h')) return false;
+ var evt=trigger.getl(current);
+ return evt&&evt.hs&&evt.hs.length&&!player.getStorage('olqiejian_ban').contains(current);
+ }).sortBySeat(_status.currentPhase);
+ 'step 1'
+ var target=targets.shift();
+ event.target=target;
+ if(target.isIn()){
+ player.chooseBool(get.prompt2('olqiejian',target)).set('ai',()=>{
+ return _status.event.bool;
+ }).set('bool',get.attitude(player,target)>0||target.hasCard(card=>{
+ return get.value(card,target)*get.sgnAttitude(player,target)<-6;
+ },'ej'));
+ }
+ else event.goto(5);
+ 'step 2'
+ if(result.bool){
+ player.logSkill('olqiejian',target);
+ player.draw('nodelay');
+ target.draw();
+ }
+ else event.goto(5);
+ 'step 3'
+ player.chooseTarget('切谏:选择一名角色','弃置你或其场上的一张牌;或点击“取消”令你于本轮不能再对其发动此技能',(card,player,target)=>{
+ return (target==player||target==_status.event.getParent().target)&&target.countDiscardableCards(player,'ej')>0;
+ }).set('ai',target=>{
+ var sign=get.sgnAttitude(_status.event.player,target);
+ return 6-target.getCards('ej').map(i=>{
+ var val=0;
+ if(get.position(i)=='e') val=get.value(i,target);
+ else{
+ val=get.effect(player,{
+ name:i.viewAs||i.name,
+ cards:[i],
+ },target,target);
+ }
+ return sign*val;
+ }).sort((a,b)=>a-b)[0];
+ });
+ 'step 4'
+ if(result.bool){
+ var targetx=result.targets[0];
+ player.discardPlayerCard(targetx,'ej',true);
+ }
+ else{
+ player.addTempSkill('olqiejian_ban','roundStart');
+ player.markAuto('olqiejian_ban',[target]);
+ }
+ 'step 5'
+ if(targets.length) event.goto(1);
+ },
+ subSkill:{
+ ban:{
+ onremove:true,
+ charlotte:true,
+ intro:{
+ content:'本轮不能再对$发动〖切谏〗'
+ }
+ }
+ }
+ },
+ olnishou:{
+ audio:2,
+ trigger:{
+ player:'loseAfter',
+ global:['loseAsyncAfter','equipAfter'],
+ },
+ forced:true,
+ filter:function(event,player){
+ var phaseName;
+ for(var name of lib.phaseName){
+ var evt=event.getParent(name);
+ if(!evt||evt.name!=name) continue;
+ phaseName=name;
+ }
+ var cards=event.getd(player,'es');
+ return cards.length&&(cards.some(card=>{
+ if(get.position(card,true)!='d') return false;
+ return player.hasUseTarget(get.autoViewAs({name:'shandian'},[card]));
+ })||phaseName&&!player.hasSkill('olnishou_swap'));
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var cards=trigger.getd(player,'es');
+ var choices=[];
+ var choiceList=[
+ '将'+(cards.length?get.translation(cards[0]):'这些牌中第一张能当【闪电】对你使用的牌')+'当【闪电】使用',
+ '本阶段结束时,你与一名手牌数最少的角色交换手牌'
+ ];
+ cards=cards.filter(card=>{
+ if(get.position(card,true)!='d') return false;
+ return player.hasUseTarget(get.autoViewAs({name:'shandian'},[card]));
+ });
+ event.cards=cards;
+ var phaseName;
+ for(var name of lib.phaseName){
+ var evt=trigger.getParent(name);
+ if(!evt||evt.name!=name) continue;
+ phaseName=name;
+ }
+ if(cards.length) choices.push('选项一');
+ else choiceList[0]=''+choiceList[0]+'';
+ if(phaseName&&!player.hasSkill('olnishou_swap')) choices.push('选项二');
+ else choiceList[1]=''+choiceList[1]+'';
+ event.phaseName=phaseName;
+ if(!choices.length) event.finish();
+ else player.chooseControl(choices).set('choiceList',choiceList).set('prompt','泥首:选择一项').set('ai',()=>0);
+ 'step 1'
+ player.logSkill('olnishou');
+ game.log(player,'选择了','#y'+result.control);
+ if(result.control=='选项一'){
+ var card=cards[0];
+ player.chooseUseTarget({name:'shandian'},[card],true);
+ }
+ else{
+ var name=event.phaseName;
+ player.storage.olnishou_swap=name;
+ player.addTempSkill('olnishou_swap',name+'After');
+ }
+ },
+ subSkill:{
+ swap:{
+ audio:'olnishou',
+ charlotte:true,
+ forced:true,
+ direct:true,
+ onremove:true,
+ trigger:{global:['phaseZhunbeiEnd','phaseJudgeEnd','phaseDrawEnd','phaseUseEnd','phaseDiscardEnd','phaseJieshuEnd']},
+ content:function(){
+ 'step 0'
+ if(trigger.name!=player.storage.olnishou_swap||!event.player.isIn()){
+ player.removeSkill('olnishou_swap');
+ event.finish(); return;
+ }
+ player.chooseTarget('泥首:与一名手牌数最少的角色交换手牌',true,(card,player,target)=>{
+ return target.isMinHandcard();
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('olnishou_swap',target);
+ if(target!=player){
+ player.swapHandcards(target);
+ }
+ }
+ 'step 2'
+ player.removeSkill('olnishou_swap');
+ }
+ }
+ }
+ },
+ //马承
+ olchenglie:{
+ audio:2,
+ trigger:{player:'useCard2'},
+ filter:function(event,player){
+ if(event.card.name!='sha') return false;
+ return game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&player.canUse(event.card,current);
+ });
+ },
+ direct:true,
+ shaRelated:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('olchenglie'),'为'+get.translation(trigger.card)+'多指定至多两个目标,并发动后续效果',[1,2],(card,player,target)=>{
+ var evt=_status.event.getTrigger();
+ return !evt.targets.contains(target)&&player.canUse(evt.card,target);
}).set('ai',function(target){
- return -get.attitude(_status.event.player,target);
+ var player=_status.event.player,evt=_status.event.getTrigger();
+ return get.effect(target,evt.card,player,player);
+ });
+ 'step 1'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.targets=result.targets;
+ }
+ else event.finish();
+ 'step 2'
+ player.logSkill('olchenglie',targets);
+ trigger.targets.addArray(targets);
+ var targets=trigger.targets;
+ event.targets=targets;
+ event.given=[];
+ var cards=get.cards(targets.length);
+ event.cards=cards.slice();
+ player.showCards(event.cards,get.translation(player)+'发动了【骋烈】');
+ while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild);
+ 'step 3'
+ game.updateRoundNumber();
+ var hs=player.getCards('h');
+ var next=player.chooseToMove('骋烈:是否交换一张牌?');
+ next.set('list',[
+ ['〖骋烈〗展示',event.cards,'olchenglie'],
+ ['你的手牌',hs],
+ ]);
+ next.set('filterMove',function(from,to,moved){
+ if(typeof to=='number') return false;
+ var player=_status.event.player;
+ var hs=player.getCards('h');
+ var changed=hs.filter(function(card){
+ return !moved[1].contains(card);
+ });
+ var changed2=moved[1].filter(function(card){
+ return !hs.contains(card);
+ });
+ if(changed.length<1) return true;
+ var pos1=(moved[0].contains(from.link)?0:1),pos2=(moved[0].contains(to.link)?0:1);
+ if(pos1==pos2) return true;
+ if(pos1==0){
+ if(changed.contains(from.link)) return true;
+ return changed2.contains(to.link);
+ }
+ if(changed2.contains(from.link)) return true;
+ return changed.contains(to.link);
+ });
+ next.set('processAI',function(list){
+ var cards1=list[0][1].slice(),cards2=list[1][1].slice();
+ var card1=cards1.sort((a,b)=>get.value(b)-get.value(a))[0];
+ var card2=cards2.sort((a,b)=>get.value(a)-get.value(b))[0];
+ if(get.value(card1)>get.value(card2)){
+ cards1.remove(card1);
+ cards2.remove(card2);
+ cards1.push(card2);
+ cards2.push(card1);
+ }
+ return [cards1,cards2];
+ });
+ 'step 4'
+ var moved=result.moved;
+ var hs=player.getCards('h'),ts=event.cards;
+ var card1,card2;
+ for(var i of moved[0]){
+ if(!ts.contains(i)) card1=i;
+ }
+ for(var i of moved[1]){
+ if(!hs.contains(i)) card2=i;
+ }
+ if(card1&&card2){
+ player.$throw(1,1000);
+ event.cards.forEach((i,ind,arr)=>{
+ if(i==card2) arr[ind]=card1;
+ })
+ player.lose(card1,ui.cardPile).set('insert_index',event=>event.cardx).set('cardx',card2);
+ player.gain(card2,'draw');
+ game.log(player,'交换了一张牌');
+ }
+ 'step 5'
+ game.cardsGotoOrdering(event.cards);
+ 'step 6'
+ if(event.cards.length==1) event._result={bool:true,links:event.cards};
+ else player.chooseButton(['骋烈:将这些牌置于目标角色的武将牌上',event.cards],true);
+ game.updateRoundNumber();
+ 'step 7'
+ if(result.bool){
+ var card=result.links[0];
+ event.card=card;
+ player.chooseTarget('将'+get.translation(card)+'置于一名目标角色的武将牌上',true,(card,player,target)=>{
+ return _status.event.getTrigger().targets.contains(target)&&!_status.event.getParent().given.contains(target);
+ }).set('ai',target=>{
+ var color=_status.event.color,player=_status.event.player;
+ var evt=_status.event.getTrigger();
+ if(color=='red'){
+ var eff=get.effect(target,evt.card,player,target),att=get.attitude(player,target);
+ if(eff>=0&&att<0) return -1;
+ if(eff<0&&att<0&&target.hasCard(card=>['shan','caochuan'].contains(get.name(card)),'hs')) return 10;
+ }
+ return 1;
+ }).set('color',get.color(card));
+ }
+ else event.finish();
+ 'step 8'
+ if(result.bool){
+ var target=result.targets[0];
+ player.line(target);
+ event.given.push(target);
+ target.addToExpansion(card).gaintag.add('olchenglie');
+ player.addTempSkill('olchenglie_effect','phaseUseAfter');
+ if(!trigger.card.storage) trigger.card.storage={};
+ trigger.card.storage.olchenglie=player;
+ target.storage.olchenglie_viewer=player;
+ event.cards.remove(card);
+ var cardx=player==game.me||player.isUnderControl()?card:1;
+ player.$give(cardx,target,false);
+ }
+ else event.finish();
+ 'step 9'
+ if(event.cards.length) event.goto(6);
+ else if(!event.isMine()&&!event.isOnline()) game.delayx();
+ },
+ marktext:'骋',
+ intro:{
+ markcount:'expansion',
+ mark:function(dialog,content,player){
+ var content=player.getExpansions('olchenglie');
+ if(content&&content.length){
+ if(game.me==player.storage.olchenglie_viewer){
+ dialog.addAuto(content);
+ }
+ else{
+ return '有'+get.cnNumber(content.length)+'张扣置的“骋烈”牌';
+ }
+ }
+ },
+ content:function(content,player){
+ var content=player.getExpansions('olchenglie');
+ if(content&&content.length){
+ if(game.me==player.storage.olchenglie_viewer){
+ return get.translation(content);
+ }
+ return '有'+get.cnNumber(content.length)+'张扣置的“骋烈”牌';
+ }
+ }
+ },
+ subSkill:{
+ effect:{
+ trigger:{global:'useCardAfter'},
+ forced:true,
+ charlotte:true,
+ forceDie:true,
+ popup:false,
+ filter:function(event,player){
+ return event.card.storage&&event.card.storage.olchenglie;
+ },
+ content:function(){
+ 'step 0'
+ var targets=game.filterPlayer(current=>{
+ var cards=current.getExpansions('olchenglie');
+ return cards.some(i=>get.color(i,false)=='red');
+ }).sortBySeat();
+ event.targets=targets;
+ var togive=trigger.card.storage.olchenglie;
+ event.togive=togive;
+ if(!targets.length||!togive.isIn()) event.goto(3);
+ 'step 1'
+ var target=event.targets.shift();
+ event.target=target;
+ player.line(target);
+ if(target.hasHistory('useCard',evt=>{
+ return evt.respondTo&&evt.respondTo[1]==trigger.card;
+ })){
+ if(target.countCards('he')) target.chooseCard('骋烈:交给'+get.translation(event.togive)+'一张牌',true,'he');
+ }
+ else{
+ target.recover();
+ }
+ 'step 2'
+ if(result.bool){
+ target.give(result.cards,event.togive);
+ }
+ if(targets.length) event.goto(1);
+ 'step 3'
+ game.filterPlayer(current=>{
+ var cards=current.getExpansions('olchenglie');
+ return cards.length;
+ }).forEach(i=>{
+ i.loseToDiscardpile(i.getExpansions('olchenglie'));
+ delete i.storage.olchenglie_viewer;
+ });
+ }
+ }
+ },
+ },
+ //新贺齐
+ olqizhou:{
+ audio:'qizhou',
+ trigger:{
+ player:'loseAfter',
+ global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter','phaseBefore'],
+ },
+ forced:true,
+ onremove:true,
+ filter:function(event,player){
+ if(event.name!='phase'&&(event.name!='equip'||event.player!=player)){
+ var evt=event.getl(player);
+ if(!evt||!evt.es||!evt.es.length) return false;
+ }
+ var num=player.countMark('olqizhou');
+ return lib.skill.olqizhou.getSuitNum(player)!=num;
+ },
+ content:function(){
+ lib.skill.olqizhou.applyChange(player);
+ },
+ getSuitNum:function(player){
+ var suits=[],es=player.getCards('e');
+ for(var i of es) suits.add(get.suit(i,player));
+ return Math.min(4,suits.length);
+ },
+ applyChange:function(player){
+ player.removeAdditionalSkill('olqizhou');
+ var num=lib.skill.olqizhou.getSuitNum(player);
+ player.storage.olqizhou=num;
+ if(num>0) player.addAdditionalSkill('olqizhou',lib.skill.olqizhou.derivation.slice(0,num));
+ },
+ derivation:['reduanbing','reyingzi','fenwei','lanjiang'],
+ },
+ olshanxi:{
+ audio:'shanxi',
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return player.countCards('e')<5&&game.hasPlayer((current)=>lib.skill.olshanxi.filterTarget(null,player,current));
+ },
+ filterTarget:function(card,player,target){
+ return (target!=player&&player.countCards('h')+target.countCards('h')>0&&!player.inRangeOf(target));
+ },
+ content:function(){
+ 'step 0'
+ var cards1=player.getCards('h'),cards2=target.getCards('h');
+ var num=5-player.countCards('e');
+ var dialog=['闪袭:选择展示至多'+get.cnNumber(num)+'张牌'];
+ if(cards1.length>0){
+ dialog.push('你的手牌
');
+ dialog.push(cards1);
+ }
+ if(cards2.length>0){
+ dialog.push(''+get.translation(target)+'的手牌
');
+ if(player.hasSkillTag('viewHandcard',null,target,true)) dialog.push(cards2);
+ else dialog.push([cards2.randomSort(),'blank']);
+ }
+ player.chooseButton(dialog,[1,num],true).set('ai',function(button){
+ var player=_status.event.player,target=_status.event.getParent().target;
+ var card=button.link,cards=ui.selected.buttons.map(button=>button.link);
+ var hs=player.getCards('h'),discard=false;
+ for(var i of cards){
+ if(hs.contains(i)){
+ discard=true;
+ break;
+ }
+ }
+ if(hs.contains(card)){
+ if(discard||get.name(card)!='shan') return 0;
+ if(target.hasCard(card=>get.value(card,target)>5,'e')) return 2;
+ return 0;
+ }
+ if(discard&&!target.hasCard(function(cardx){
+ return cardx!=card&&!cards.contains(cardx)&&get.value(cardx,target)>0;
+ },'he')) return 0;
+ return 1+Math.random();
+ });
+ 'step 1'
+ if(result.bool){
+ event.cards=result.links;
+ var list1=[],list2=[];
+ var hs=player.getCards('h');
+ for(var card of result.links){
+ if(hs.contains(card)){
+ list1.push(card);
+ }
+ else{
+ list2.push(card);
+ }
+ }
+ event.list1=list1;
+ event.list2=list2;
+ event.videoId=lib.status.videoId++;
+ game.broadcastAll(function(player,target,list1,list2,id){
+ var dialog=ui.create.dialog(player+'对'+target+'发动了【闪袭】');
+ dialog.videoId=id;
+ if(list1.length>0){
+ dialog.add(''+player+'展示的牌
');
+ dialog.add(list1);
+ }
+ if(list2.length>0){
+ dialog.add(''+target+'被展示的牌
');
+ dialog.add(list2);
+ }
+ },get.translation(player),get.translation(target),list1,list2,event.videoId)
+ game.delay(4);
+ }
+ else event.finish();
+ 'step 2'
+ game.broadcastAll('closeDialog',event.videoId);
+ var list1=event.list1.filter((card)=>get.name(card,player)=='shan');
+ var list2=event.list2.filter((card)=>get.name(card,target)=='shan');
+ if(list1.length&&list2.length){
+ game.loseAsync({
+ lose_list:[
+ [player,list1],
+ [target,list2]
+ ],
+ discarder:player,
+ }).setContent('discardMultiple');
+ }
+ else if(list2.length){
+ target.discard(list2);
+ }
+ else if(list1.length) player.discard(list1);
+ else event.finish();
+ 'step 3'
+ if(target.hasCard(function(card){
+ return !cards.contains(card)&&lib.filter.canBeGained(card,player,target);
+ },'he')) player.gainPlayerCard(target,true,'he').set('filterButton',function(button){
+ return !_status.event.cards.contains(button.link);
+ }).set('cards',cards);
+ },
+ ai:{
+ order:14,
+ result:{
+ target:function(player,target){
+ return -target.countCards('h');
+ },
+ },
+ },
+ },
+ //刘巴
+ oltongduo:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('oltongduo'),function(card,player,target){
+ return target!=player&&target.countCards('h')>0;
+ }).set('ai',function(target){
+ var att=get.attitude(_status.event.player,target);
+ if(att>0) return Math.sqrt(att)/10;
+ return 5-att;
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('oltongduo',target);
+ target.chooseCard('h',true,'统度:将一张手牌交给'+get.translation(player)+',然后其于此阶段结束时将此牌置于牌堆顶');
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(result.bool){
+ player.addTempSkill('oltongduo_put');
+ event.target.give(result.cards,player,true).gaintag.add('oltongduo');
+ }
+ },
+ subSkill:{
+ put:{
+ trigger:{player:'phaseUseEnd'},
+ charlotte:true,
+ forced:true,
+ filter:function(event,player){
+ return player.hasCard(card=>card.hasGaintag('oltongduo'),'h');
+ },
+ content:function(){
+ var cards=player.getCards('h',card=>card.hasGaintag('oltongduo'));
+ player.lose(cards,ui.cardPile,'insert');
+ game.log(player,'将',get.cnNumber(cards.length)+'张牌','置于牌堆顶');
+ game.broadcastAll(function(player){
+ var cardx=ui.create.card();
+ cardx.classList.add('infohidden');
+ cardx.classList.add('infoflip');
+ player.$throw(cardx,1000,'nobroadcast');
+ },player);
+ },
+ onremove:function(player){
+ player.removeGaintag('oltongduo');
+ },
+ }
+ }
+ },
+ olzhubi:{
+ audio:2,
+ enable:'phaseUse',
+ group:'olzhubi_replace',
+ filter:function(event,player){
+ return (player.getStat('skill').olzhubi||0)0;
+ },
+ content:function(){
+ 'step 0'
+ target.chooseCard('he',true,'铸币:请重铸一张牌',lib.filter.cardRecastable);
+ 'step 1'
+ if(result.bool){
+ target.recast(result.cards,null,player=>player.draw().set('log',false).gaintag=['olzhubi_tag']);
+ }
+ },
+ ai:{
+ order:6,
+ result:{
+ target:function(player,target){
+ if(target.hasCard(card=>card.hasGaintag('olzhubi_tag'),'h')) return 0.5;
+ return 1;
+ }
+ }
+ },
+ subSkill:{
+ replace:{
+ trigger:{global:'phaseJieshuBegin'},
+ filter:function(event,player){
+ return event.player.hasCard(card=>card.hasGaintag('olzhubi_tag'),'h');
+ },
+ forced:true,
+ locked:false,
+ logTarget:'player',
+ content:function(){
+ 'step 0'
+ var cards=get.bottomCards(5);
+ event.cards2=cards;
+ game.cardsGotoOrdering(cards);
+ var player=trigger.player;
+ var next=player.chooseToMove('铸币:用任意“币”交换牌堆底等量张牌');
+ var hs=player.getCards('h',card=>card.hasGaintag('olzhubi_tag'));
+ next.set('filterMove',function(from,to){
+ return typeof to!='number';
+ });
+ next.set('list',[
+ ['牌堆底',cards],
+ ['你的手牌',hs,'olzhubi_tag']
+ ]);
+ next.set('processAI',function(list){
+ var all=list[0][1].concat(list[1][1]),cards=all.slice(0);
+ var num=_status.event.num;
+ cards.sort(function(a,b){
+ return get.value(b)-get.value(a);
+ });
+ return [cards.slice(num),cards.slice(0,num)];
+ });
+ next.set('num',hs.length);
+ 'step 1'
+ if(result.bool){
+ event.forceDie=true;
+ var cards=result.moved[0];
+ event.cards=cards;
+ var player=trigger.player;
+ var hs=player.getCards('h');
+ var lose=[],gain=event.cards2;
+ for(var i of cards){
+ if(hs.contains(i)) lose.push(i);
+ else gain.remove(i);
+ }
+ if(lose.length) player.lose(lose,ui.cardPile);
+ if(gain.length) player.gain(gain,'draw');
+ }
+ else event.finish();
+ 'step 2'
+ for(var i of cards){
+ if(!(('hejsdx').includes(get.position(i,true)))){
+ i.fix();
+ ui.cardPile.appendChild(i);
+ }
+ }
+ game.updateRoundNumber();
+ }
+ },
+ }
+ },
+ //傅肜
+ olxiaosi:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filterTarget:function(card,player,target){
+ return target.countCards('h')>0&&player!=target;
+ },
+ filterCard:function(card,player,target){
+ return get.type(card)=='basic';
+ },
+ check:function(card){
+ var player=_status.event.player;
+ if(player.hasValueTarget(card)) return 10-get.value(card);
+ return 0.1;
+ },
+ content:function(){
+ 'step 0'
+ if(target.countCards('h',card=>{
+ return get.type(card)=='basic'&&lib.filter.cardDiscardable(card,target,'olxiaosi');
+ })==0) event.draw=true;
+ else{
+ target.chooseToDiscard('h',true,'效死:弃置一张基本牌',{type:'basic'});
+ }
+ 'step 1'
+ var cards2=cards.slice(0);
+ if(result.bool){
+ cards2=cards2.addArray(result.cards);
+ }
+ event.cards2=cards2;
+ 'step 2'
+ var cardsx=event.cards2.filter(i=>get.position(i,true)=='d'&&player.hasUseTarget(i,false));
+ if(!cardsx.length) event.goto(5);
+ else player.chooseButton(['效死:是否使用其中的一张牌?',cardsx]).set('filterButton',button=>{
+ return _status.event.player.hasUseTarget(button.link,false);
+ }).set('ai',button=>{
+ if(button.link.name=='jiu') return 10;
+ return _status.event.player.getUseValue(button.link);
});
'step 3'
if(result.bool){
- player.line(result.targets[0],'green');
- player.discardPlayerCard(result.targets[0],'he',true);
- event.count--;
+ var card=result.links[0];
+ event.cards2.remove(card);
+ player.$gain2(card,false);
+ game.delayx();
+ player.chooseUseTarget(true,card,false,'nodistance');
}
- else event.finish();
+ else event.goto(5);
'step 4'
- if(event.count) event.goto(2);
- else event.finish();
+ if(event.cards2.filter(i=>get.position(i,true)=='d'&&player.hasUseTarget(i,false)).length) event.goto(2);
'step 5'
- var next=player.chooseTarget(2,function(card,player,target){
- if(player==target) return false;
- if(ui.selected.targets.length){
- var from=ui.selected.targets[0];
- if(target.isMin()) return false;
- var es=from.getCards('e');
- for(var i=0;i{
+ return get.type(evt.card)=='basic';
+ });
+ if(history.length<2) return false;
+ var users=history.slice(0,2).map(i=>i.player);
+ var list=users.filter(user=>user==player);
+ if(list.length==1) return true;
+ if(list.length==0){
+ var evtx=history[2];
+ if(evtx){
+ var name=evtx.card.name,nature=evtx.card.nature;
+ if(evtx&&player.hasUseTarget({name:name,nature:nature,isCard:true})) return true;
+ }
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var history=game.getGlobalHistory('useCard',evt=>{
+ return get.type(evt.card)=='basic';
+ });
+ var list=history.slice(0,2).map(i=>i.player).filter(user=>user==player);
+ if(list.length==1) {
+ player.logSkill('jueman');
+ player.draw();
+ }
+ else if(list.length==0){
+ var evtx=history[2],name=evtx.card.name,nature=evtx.card.nature;
+ player.chooseUseTarget({name:name,nature:nature,isCard:true},true).set('logSkill','jueman');
+ }
+ }
+ },
+ //张芝
+ olbixin:{
+ audio:2,
+ trigger:{
+ global:['phaseZhunbeiBegin','phaseJieshuBegin'],
+ },
+ direct:true,
+ onremove:['olbixin','olbixin_basic','olbixin_trick','olbixin_equip'],
+ group:'olbixin_full',
+ map:{基本:'basic',锦囊:'trick',装备:'equip'},
+ filter:function(event,player){
+ var count=player.countMark('olbixin');
+ if(count>0&&event.player!=player) return false;
+ if(count>1&&event.name=='phaseZhunbei') return false;
+ if(count>2) return false;
+ var num=count>=3?3:1;
+ var types=['basic','trick','equip'].filter(type=>{
+ return player.countMark('olbixin_'+type)0;
+ },
+ getList:function(player,event){
+ var natures=lib.inpile_nature.slice(0),used=[];
+ var history=player.actionHistory;
+ for(var i=history.length-1;i>=0;i--){
+ var info=history[i];
+ for(var evt of info.useCard){
+ var name=evt.card.name;
+ if(get.type(name)!='basic') continue;
+ if(name=='sha'){
+ if(evt.card.nature) natures.remove(evt.card.nature);
+ else used.push(name);
}
- return false;
+ else used.push(name);
+ };
+ if(info.isRound) break;
+ }
+ var vcards=[];
+ for(var name of lib.inpile){
+ if(get.type(name)!='basic') continue;
+ if(!event){
+ if(name=='sha'){
+ if(!used.contains('sha')&&player.hasUseTarget({name:'sha'})) vcards.push(['基本','','sha']);
+ for(var nature of natures) {
+ if(player.hasUseTarget({name:'sha',nature:nature})) vcards.push(['基本','','sha',nature]);
+ }
+ }
+ else if(!used.contains(name)&&player.hasUseTarget({name:name})) vcards.push(['基本','',name]);
}
else{
- return target.countCards('e')>0;
- }
- });
- next.set('ai',function(target){
- var player=_status.event.player;
- var att=get.attitude(player,target);
- var sgnatt=get.sgn(att);
- if(ui.selected.targets.length==0){
- if(att>0){
- if(target.countCards('e',function(card){
- return get.value(card,target)<0&&game.hasPlayer(function(current){
- return current!=player&¤t!=target&&get.attitude(player,current)<0&¤t.canEquip(card)&&get.effect(current,card,player,player)>0;
- });
- })>0) return 9;
- }
- else if(att<0){
- if(game.hasPlayer(function(current){
- if(current!=target&¤t!=player&&get.attitude(player,current)>0){
- var es=target.getCards('e');
- for(var i=0;i0&¤t.canEquip(es[i])&&get.effect(current,es[i],player,player)>0) return true;
- }
- }
- })){
- return -att;
+ if(name=='sha'){
+ if(!used.contains('sha')&&event.filterCard({name:'sha'},player,event)) vcards.push(['基本','','sha']);
+ for(var nature of natures) {
+ if(event.filterCard({name:'sha',nature:nature},player,event)) vcards.push(['基本','','sha',nature]);
}
}
- return 0;
+ else if(!used.contains(name)&&event.filterCard({name:name},player,event)) vcards.push(['基本','',name]);
}
- var es=ui.selected.targets[0].getCards('e');
- var i;
- var att2=get.sgn(get.attitude(player,ui.selected.targets[0]));
- for(i=0;i摸'+get.cnNumber(player.countMark('olbixin')>=3?1:3)+'张牌,然后将所有指定类型的手牌当一张基本牌使用'];
+ dialog.push([types.map(i=>get.translation(i)),'tdnodes']);
+ dialog.push([list,'vcard']);
+ player.chooseButton(dialog,2).set('filterButton',button=>{
+ var player=_status.event.player,count=player.countMark('olbixin'),num=count>=3?3:1;
+ var type=typeof button.link;
+ if(ui.selected.buttons.length&&type==typeof ui.selected.buttons[0].link) return false;
+ if(type=='string'&&player.countMark('olbixin_'+lib.skill.olbixin.map[button.link])>=num) return false;
+ if(type!='string'&&!player.hasUseTarget({name:button.link[2],nature:button.link[3]})) return false;
+ return true;
+ }).set('ai',button=>{
+ var list=_status.event.list;
+ var type=typeof button.link;
+ if(type=='string') return (1.2-list.indexOf(lib.skill.olbixin.map[button.link]))*10;
+ return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
+ }).set('list',types.map(i=>[i,player.getCards('h',{type:i}).map(i=>get.value(i)).reduce((p,c)=>p+c,0)]).sort((a,b)=>a[1]-b[1]).map(i=>i[0]));
+ }else event.finish();
+ 'step 1'
if(result.bool){
- player.line2(result.targets,'green');
- event.targets=result.targets;
- }
- else{
- event.finish();
- }
- 'step 7'
- game.delay();
- 'step 8'
- if(targets.length==2){
- player.choosePlayerCard('e',true,function(button){
- var player=_status.event.player;
- var targets0=_status.event.targets0;
- var targets1=_status.event.targets1;
- if(get.attitude(player,targets0)>get.attitude(player,targets1)){
- if(get.value(button.link,targets0)<0) return get.effect(targets1,button.link,player,player);
- return 0;
- }
- else{
- return get.value(button.link,targets0)*get.effect(targets1,button.link,player,player);
- }
- },targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
- var targets1=_status.event.targets1;
- return targets1.canEquip(button.link);
- });
- }
- else{
- event.finish();
- }
- 'step 9'
- if(result.bool&&result.links.length){
- var link=result.links[0];
- event.targets[1].equip(link);
- event.targets[0].$give(link,event.targets[1])
- game.delay();
- event.result={bool:true};
+ if(typeof result.links[0]!='string') result.links.reverse();
+ var type=result.links[0],name=result.links[1][2],nature=result.links[1][3];
+ player.logSkill('olbixin');
+ game.log(player,'声明了',type+'牌');
+ type=lib.skill.olbixin.map[type];
+ event.type=type;
+ event.card={name:name,nature:nature};
+ player.addMark('olbixin_'+type,1,false);
+ player.draw(player.countMark('olbixin')>=3?1:3);
+ game.delayx();
+ }else event.finish();
+ 'step 2'
+ if(player.hasCard(card=>get.type2(card)==event.type,'h')){
+ var cards=player.getCards('h',card=>get.type2(card)==event.type);
+ var cardx=get.autoViewAs(card,cards);
+ if(player.hasUseTarget(cardx,true,false)){
+ player.chooseUseTarget(cardx,cards,true,false).set('prompt','选择'+get.translation(cardx)+'('+get.translation(cards)+')的目标');
+ }
}
},
- canMoveCard:function(player,withatt){
- return game.hasPlayer(function(current){
- if(player==current) return false;
- var att=get.sgn(get.attitude(player,current));
- if(!withatt||att!=0){
- var es=current.getCards('e');
- for(var i=0;i=3?3:1;
+ var types=['basic','trick','equip'].filter(type=>{
+ return player.countMark('olbixin_'+type)0;
+ },
+ prompt:'你可以声明一种牌的类型(每种类型限三次),并选择一种你本轮未使用过且有合法目标的的基本牌。你摸一张牌,然后若你有此类型的手牌,你将所有此类型的手牌当此基本牌使用。',
+ chooseButton:{
+ dialog:function(event,player){
+ var list=lib.skill.olbixin.getList(player,event);
+ var types=['basic','trick','equip'];
+ return ui.create.dialog(
+ '###笔心###摸一张牌,然后将所有指定类型的手牌当一张基本牌使用
',
+ [types.map(i=>get.translation(i)),'tdnodes'],
+ [list,'vcard']
+ );
+ },
+ filter:function(button,player){
+ var player=_status.event.player,count=player.countMark('olbixin'),num=count>=3?3:1;
+ var type=typeof button.link;
+ if(ui.selected.buttons.length&&type==typeof ui.selected.buttons[0].link) return false;
+ if(type=='string'&&player.countMark('olbixin_'+lib.skill.olbixin.map[button.link])>=num) return false;
+ if(type!='string'&&!_status.event.getParent().filterCard({name:button.link[2],nature:button.link[3]},player,_status.event.getParent())) return false;
+ return true;
+ },
+ select:2,
+ check:function(button){
+ var types=['basic','trick','equip'];
+ var type=typeof button.link;
+ var player=_status.event.player;
+ var list=types.map(i=>[i,player.getCards('h',{type:i}).map(i=>get.value(i)).reduce((p,c)=>p+c,0)]).sort((a,b)=>a[1]-b[1]).map(i=>i[0]);
+ if(type=='string') return (1.2-list.indexOf(button.link)+Math.sqrt(3-player.countMark('olbixin_'+lib.skill.olbixin.map[button.link])))*10;
+ if(_status.event.getParent().type!='phase') return 1;
+ return player.getUseValue({name:button.link[2],nature:button.link[3]});
+ },
+ backup:function(links,player){
+ if(typeof links[0]!='string') links.reverse();
+ return {
+ popname:true,
+ position:'h',
+ filterCard:()=>false,
+ selectCard:-1,
+ type:lib.skill.olbixin.map[links[0]],
+ viewAs:{name:links[1][2],nature:links[1][3]},
+ precontent:function(){
+ 'step 0'
+ player.logSkill('olbixin');
+ var type=lib.skill.olbixin_full_backup.type;
+ game.log(player,'声明了',type,'牌');
+ delete event.result.skill;
+ player.addMark('olbixin_'+type,1,false);
+ player.draw(player.countMark('olbixin')>=3?1:3);
+ 'step 1'
+ var cards=player.getCards('h',card=>get.type2(card)==lib.skill.olbixin_full_backup.type);
+ var cardsx=cards.filter(i=>game.checkMod(i,player,'unchanged','cardEnabled2',player)!==false);
+ if(cardsx.length&&cardsx.length==cards.length){
+ event.result.cards=cards;
+ game.delayx();
+ }
+ else{
+ event.cancel();
+ event.getParent().set('olbixin',true);
+ event.getParent().goto(0);
+ }
+ },
}
+ },
+ prompt:function(links,player){
+ return '摸一张牌,然后将所有'+get.translation(links[0])+'牌当做'+(get.translation(links[1][3])||'')+get.translation(links[1][2])+'使用';
+ }
+ },
+ hiddenCard:function(player,name){
+ var count=player.countMark('olbixin');
+ if(!lib.inpile.contains(name)||get.type(name)!='basic'||count<3) return false;
+ var types=['basic','trick','equip'].filter(type=>{
+ return player.countMark('olbixin_'+type)<3;
+ });
+ return types.length;
+ },
+ ai:{
+ fireAttack:true,
+ respondSha:true,
+ respondShan:true,
+ skillTagFilter:function(player){
+ var count=player.countMark('olbixin');
+ if(count<3) return;
+ var types=['basic','trick','equip'].filter(type=>{
+ return player.countMark('olbixin_'+type)<3;
+ });
+ if(types.length) return true;
+ },
+ order:1,
+ result:{
+ player:function(player){
+ if(_status.event.dying) return get.attitude(player,_status.event.dying);
+ return 1;
+ },
+ },
+ },
+ },
+ full_backup:{},
+ }
+ },
+ olximo:{
+ audio:3,
+ trigger:{player:'logSkill'},
+ derivation:'olfeibai',
+ filter:function(event,player){
+ return event.skill=='olbixin'&&player.countMark('olbixin')<3;
+ },
+ forced:true,
+ content:function(){
+ player.addMark('olbixin',1,false);
+ game.log(player,'删除了','#g【笔心】','描述的前五个字符');
+ if(player.countMark('olbixin')==3){
+ game.log(player,'交换了','#g【笔心】','方括号中的两个数字');
+ player.removeSkill('olximo');
+ game.log(player,'失去了技能','#g【洗墨】');
+ player.addSkillLog('olfeibai');
+ }
+ },
+ ai:{
+ combo:'olbixin',
+ }
+ },
+ olfeibai:{
+ audio:2,
+ trigger:{
+ source:'damageBegin1',
+ player:'recoverBegin',
+ },
+ filter:function(event,player){
+ var storage=player.storage.olfeibai;
+ var evt=event.getParent(),card=event.card;
+ if(evt.player!=player||!card) return false;
+ if(storage&&event.name=='recover'){
+ return get.color(card)!='red';
+ }
+ if(!storage&&event.name=='damage'){
+ return get.color(card)!='black';
+ }
+ return false;
+ },
+ content:function(){
+ player.changeZhuanhuanji('olfeibai');
+ trigger.num++;
+ },
+ zhuanhuanji:true,
+ forced:true,
+ mark:true,
+ marktext:'☯',
+ intro:{
+ content:function(storage,player){
+ if(storage) return '转换技。当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。';
+ return '转换技。当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1。';
+ },
+ },
+ },
+ //新诸葛瑾
+ olhuanshi:{
+ audio:'huanshi',
+ trigger:{global:'judge'},
+ filter:function(event,player){
+ return player.countCards('h')>0;
+ },
+ logTarget:'player',
+ prompt2:function(event,player){
+ var str=(get.translation(event.player)+'的'+event.judgestr+'判定为'+get.translation(event.player.judging[0])+'。你可以令其观看你的牌,其选择一张牌进行改判。');
+ if(!player.hasSkill('olhuanshi_mark',null,null,false)) str+='然后你可以重铸任意张牌。';
+ return str;
+ },
+ check:function(event,player){
+ if(get.attitude(player,event.player)<=0) return false;
+ var cards=player.getCards('he');
+ var judge=event.judge(event.player.judging[0]);
+ for(var i=0;ijudge) return true;
+ if(_status.currentPhase!=player&&judge2==judge&&get.color(cards[i])=='red'&&get.useful(cards[i])<5) return true;
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var target=trigger.player;
+ var judge=trigger.judge(target.judging[0]);
+ var attitude=get.attitude(target,player);
+ target.choosePlayerCard('请选择代替判定的牌','he','visible',true,player).set('ai',function(button){
+ var card=button.link;
+ var judge=_status.event.judge;
+ var attitude=_status.event.attitude;
+ var result=trigger.judge(card)-judge;
+ var player=_status.event.player;
+ if(result>0){
+ return 20+result;
+ }
+ if(result==0){
+ if(_status.currentPhase==player) return 0;
+ if(attitude>=0){
+ return get.color(card)=='red'?7:0-get.value(card);
+ }
+ else{
+ return get.color(card)=='black'?10:0+get.value(card);
}
}
+ if(attitude>=0){
+ return get.color(card)=='red'?0:-10+result;
+ }
+ else{
+ return get.color(card)=='black'?0:-10+result;
+ }
+ }).set('filterButton',function(button){
+ var player=_status.event.target;
+ var card=button.link;
+ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
+ if(mod2!='unchanged') return mod2;
+ var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
+ if(mod!='unchanged') return mod;
+ return true;
+ }).set('judge',judge).set('attitude',attitude);
+ 'step 1'
+ if(result.bool){
+ event.card=result.links[0];
+ player.respond(event.card,'highlight','noOrdering').nopopup=true;
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(result.bool){
+ if(trigger.player.judging[0].clone){
+ trigger.player.judging[0].clone.classList.remove('thrownhighlight');
+ game.broadcast(function(card){
+ if(card.clone){
+ card.clone.classList.remove('thrownhighlight');
+ }
+ },trigger.player.judging[0]);
+ game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone]));
+ }
+ game.cardsDiscard(trigger.player.judging[0]);
+ trigger.player.judging[0]=event.card;
+ trigger.orderingCards.add(event.card);
+ game.log(trigger.player,'的判定牌改为',event.card);
+ game.delay(2);
+ }
+ if(!player.countCards('h')||player.hasSkill('olhuanshi_mark',null,null,false)) event.finish();
+ 'step 3'
+ player.chooseCard('是否重铸任意张手牌?','操作提示:选择要重铸的牌并点击“确定”',[1,player.countCards('h')],lib.filter.cardRecastable).set('ai',function(card){
+ var player=_status.event.player,cards=ui.selected.cards;
+ if(!player.hasSkill('olmingzhe')) return 5-get.value(card);
+ for(var i of cards){
+ if(get.color(i,player)=='red') return 5-get.value(card);
+ }
+ return 7.5-get.value(card);
});
+ 'step 4'
+ if(result.bool){
+ player.addTempSkill('olhuanshi_mark');
+ player.recast(result.cards);
+ }
+ },
+ ai:{
+ rejudge:true,
+ tag:{
+ rejudge:1,
+ }
+ },
+ subSkill:{mark:{charlotte:true}},
+ },
+ olhongyuan:{
+ audio:'hongyuan',
+ trigger:{
+ player:'gainAfter',
+ global:'loseAsyncAfter',
+ },
+ direct:true,
+ filter:function(event,player){
+ var cards=event.getg(player);
+ return cards.length>=2&&!player.hasSkill('olhongyuan_blocker',null,null,false);
+ },
+ content:function(){
+ 'step 0'
+ var max=Math.min(2,game.countPlayer()-1,player.countCards('he'));
+ player.chooseCardTarget({
+ prompt:get.prompt('olhongyuan'),
+ prompt2:'操作提示:按顺序选择任意张要交出的牌,并按任意顺序选择等量的获得牌的角色',
+ filterCard:true,
+ selectCard:[1,max],
+ position:'he',
+ filterTarget:lib.filter.notMe,
+ selectTarget:[1,max],
+ filterOk:function(){
+ return ui.selected.cards.length==ui.selected.targets.length;
+ },
+ ai1:function(card){
+ var player=_status.event.player;
+ var num=game.countPlayer(function(current){
+ return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain');
+ });
+ if(num<=ui.selected.cards.length) return -get.value(card);
+ if(!player.hasSkill('olmingzhe')) return 4-Math.max(player.getUseValue(card),get.value(card,player));
+ if(ui.selected.cards.length&&get.color(card)=='red') return 6-get.value(card);
+ return 4-Math.max(player.getUseValue(card),get.value(card,player));
+ },
+ ai2:function(target){
+ var player=_status.event.player,att=get.attitude(player,target);
+ var card=ui.selected.cards[ui.selected.targets.length];
+ if(!card) return att;
+ var val=get.value(card,target);
+ if(val<0) return -att*Math.sqrt(-val);
+ return att*Math.sqrt(val+2);
+ },
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('olhongyuan',result.targets);
+ player.addTempSkill('olhongyuan_blocker',['phaseZhunbeiBefore','phaseJudgeBefore','phaseDrawBefore','phaseUseBefore','phaseDiscardBefore','phaseJieshuBefore','phaseBefore']);
+ var map=[];
+ for(var i=0;i0) player.showCards(cards,get.translation(player)+'发动了【明哲】');
+ }
+ player.draw();
+ },
+ },
+ //吕范
+ xindiaodu:{
+ audio:"diaodu",
+ group:'xindiaodu_use',
+ frequent:true,
+ preHidden:true,
+ isFriendOf:function(player,target){
+ if(get.mode()=='guozhan') return player.isFriendOf(target);
+ return player.group==target.group;
+ },
+ subSkill:{
+ temp:{charlotte:true},
+ use:{
+ trigger:{
+ global:"useCard",
+ },
+ filter:function(event,player){
+ return get.type(event.card)=='equip'&&event.player.isIn()&&
+ lib.skill.xindiaodu.isFriendOf(player,event.player)&&(player==event.player||player.hasSkill('xindiaodu'))&&!event.player.hasSkill('xindiaodu_temp');
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var next=trigger.player.chooseBool('是否发动【调度】摸一张牌?');
+ if(player.hasSkill('xindiaodu')) next.set('frequentSkill','xindiaodu');
+ if(player==trigger.player) next.setHiddenSkill('xindiaodu');
+ 'step 1'
+ if(result.bool){
+ player.logSkill('xindiaodu',trigger.player);
+ trigger.player.draw('nodelay');
+ trigger.player.addTempSkill('xindiaodu_temp');
+ }
+ },
+ },
+ },
+ trigger:{
+ player:"phaseUseBegin",
+ },
+ filter:function(event,player){
+ return game.hasPlayer(function(current){
+ return lib.skill.xindiaodu.isFriendOf(current,player)&¤t.countGainableCards(player,'e')>0;
+ });
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('xindiaodu'),function(card,player,current){
+ return lib.skill.xindiaodu.isFriendOf(current,player)&¤t.countGainableCards(player,'e')>0;
+ }).setHiddenSkill(event.name).ai=function(target){
+ var num=1;
+ if(target.hasSkill('gzxiaoji')) num+=2.5;
+ if(target.isDamaged()&&target.getEquip('baiyin')) num+=2.5;
+ if(target.hasSkill('xuanlve')) num+=2;
+ return num;
+ };
+ 'step 1'
+ if(result.bool){
+ event.target1=result.targets[0];
+ player.logSkill('xindiaodu',event.target1);
+ player.line(event.target1,'xindiaodu');
+ player.gainPlayerCard(event.target1,'e',true);
+ }
+ else event.finish();
+ 'step 2'
+ if(result.bool&&player.getCards('h').contains(result.cards[0])){
+ event.card=result.cards[0];
+ player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){
+ return current!=player&¤t!=_status.event.target1&&lib.skill.xindiaodu.isFriendOf(current,player)
+ }).set('target1',event.target1);
+ }
+ else event.finish();
+ 'step 3'
+ if(result.bool){
+ var target=result.targets[0];
+ player.line(target,'green');
+ player.give(card,target);
+ }
+ },
+ },
+ //夏侯玄
+ olhuanfu:{
+ audio:2,
+ trigger:{
+ player:'useCardToPlayered',
+ target:'useCardToTargeted',
+ },
+ filter:function(event,player){
+ if(event.card.name!='sha') return false;
+ if(player==event.player&&!event.isFirstTarget) return false;
+ if(event.olhuanfu_map&&event.olhuanfu_map[player.playerid]) return false;
+ return player.maxHp>0&&player.countCards('he')>0;
+ },
+ shaRelated:true,
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseToDiscard('he',[1,player.maxHp],get.prompt('olhuanfu'),'通过弃牌,预测'+(player==trigger.player?'你':get.translation(trigger.player))+'使用的'+get.translation(trigger.card)+'能造成多少伤害。如果弃置的牌数等于总伤害,则你摸两倍的牌。').set('predict',function(){
+ var target=trigger.target;
+ if(player==target){
+ if(trigger.targets.length>1||player.hasShan()||get.effect(player,trigger.card,trigger.player,player)==0) return 0;
+ }
+ else{
+ var target=trigger.target;
+ if(trigger.targets.length>1||target.mayHaveShan()) return 0;
+ }
+ var num=trigger.getParent().baseDamage;
+ var map=trigger.getParent().customArgs,id=target.playerid;
+ if(map[id]){
+ if(typeof map[id].baseDamage=='number') num=map[id].baseDamage;
+ if(typeof map[id].extraDamage=='number') num+=map[id].extraDamage;
+ }
+ if(target.hasSkillTag('filterDamage',null,{
+ player:trigger.player,
+ card:trigger.card,
+ })) num=1;
+ return num;
+ }()).set('ai',function(card){
+ var num=_status.event.predict,player=_status.event.player;
+ if(ui.selected.cards.length>=num) return 0;
+ if(player.countCards('he',function(card){
+ return get.value(card)<6+num;
+ })0&¤t<0&&target.countCards('he')>0) return 0.7;
+ },
},
- reverseEquip:true,
- noe:true
+ },
+ subSkill:{
+ lottery:{
+ trigger:{global:'useCardAfter'},
+ forced:true,
+ charlotte:true,
+ filter:function(event,player){
+ var map=event.olhuanfu_map;
+ if(!map||!map[player.playerid]) return false;
+ var num=0;
+ event.player.getHistory('sourceDamage',function(evt){
+ if(evt.card==event.card&&evt.getParent().type=='card') num+=evt.num;
+ });
+ return num==map[player.playerid];
+ },
+ content:function(){
+ player.draw(2*trigger.olhuanfu_map[player.playerid]);
+ },
+ },
+ },
+ },
+ olqingyi:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return player.hasCard(function(card){
+ return lib.filter.cardDiscardable(card,player,'olqingyi');
+ },'he')&&game.hasPlayer(current=>lib.skill.olqingyi.filterTarget(null,player,current));
+ },
+ selectTarget:[1,2],
+ filterTarget:function(card,player,target){
+ return target!=player&&target.countCards('he')>0;
+ },
+ multitarget:true,
+ multiline:true,
+ content:function(){
+ 'step 0'
+ var list=[player];
+ list.addArray(targets);
+ list.sortBySeat();
+ event.list=list;
+ for(var target of event.list){
+ if(!target.hasCard(function(card){
+ return lib.filter.cardDiscardable(card,target,'olqingyi');
+ },'he')){
+ event.finish();
+ break;
+ }
+ }
+ 'step 1'
+ player.chooseCardOL(event.list,'he',true,'清议:选择弃置一张牌',function(card,player){
+ return lib.filter.cardDiscardable(card,player,'olqingyi');
+ }).set('ai',get.unuseful);
+ 'step 2'
+ var lose_list=[],cards=[];
+ for(var i=0;ievt.skill=='olqingyi');
+ if(!history.length) return false;
+ var color=false;
+ for(var evt of history){
+ var list=[player];
+ list.addArray(evt.targets);
+ for(var target of list){
+ target.getHistory('lose',function(evtx){
+ if(color===true||evtx.getParent(2).name!='olqingyi') return false;
+ for(var card of evtx.cards){
+ if(color===true||get.position(card,true)!='d') continue;
+ var color2=get.color(card,false);
+ if(!color) color=color2;
+ else if(color!=color2) color=true;
+ }
+ });
+ if(color===true) return true;
+ }
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var history=player.getHistory('useSkill',(evt)=>evt.skill=='olqingyi'),cards=[];
+ for(var evt of history){
+ var list=[player];
+ list.addArray(evt.targets);
+ for(var target of list){
+ target.getHistory('lose',function(evtx){
+ if(evtx.getParent(2).name!='olqingyi') return false;
+ for(var card of evtx.cards){
+ if(get.position(card,true)=='d') cards.add(card);
+ }
+ });
+ }
+ }
+ player.chooseButton(['清议:选择获得两张异色牌',cards],2).set('filterButton',function(button){
+ if(!ui.selected.buttons.length) return true;
+ return get.color(button.link,false)!=get.color(ui.selected.buttons[0].link,false);
+ }).set('ai',function(button){
+ return get.value(button.link,_status.event.player);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('olqingyi_gain');
+ player.gain(result.links,'gain2');
+ }
+ },
+ },
+ },
+ },
+ olzeyue:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ limited:true,
+ skillAnimation:true,
+ animationColor:'water',
+ direct:true,
+ filter:function(event,player){
+ var sources=[],history=player.actionHistory;
+ for(var i=history.length-1;i>=0;i--){
+ if(i=0;i--){
+ if(i=0) return 0;
+ return get.threaten(target,player);
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('olzeyue',target);
+ player.awakenSkill('olzeyue');
+ event.target=target;
+ var skills=target.getStockSkills('一!','五!');
+ skills=skills.filter(function(skill){
+ var info=get.info(skill);
+ if(info&&!info.charlotte&&!get.is.locked(skill,target)&&target.hasSkill(skill,null,null,false)) return true;
+ });
+ if(skills.length==1) event._result={control:skills[0]};
+ else player.chooseControl(skills).set('prompt','令'+get.translation(target)+'的一个技能失效');
+ }
+ else event.finish();
+ 'step 2'
+ var skill=result.control;
+ target.disableSkill('olzeyue_'+player.playerid,skill);
+ target.storage['olzeyue_'+player.playerid]=true;
+ player.addSkill('olzeyue_round');
+ player.markAuto('olzeyue_round',[target]);
+ if(!player.storage.olzeyue_map) player.storage.olzeyue_map={};
+ player.storage.olzeyue_map[target.playerid]=0;
+ game.log(target,'的技能','#g【'+get.translation(skill)+'】','被失效了');
+ },
+ ai:{threaten:3},
+ subSkill:{
+ round:{
+ trigger:{global:'roundStart'},
+ forced:true,
+ charlotte:true,
+ popup:false,
+ filter:function(event,player){
+ var storage=player.getStorage('olzeyue_round');
+ for(var source of storage){
+ if(source.isIn()&&source.canUse('sha',player,false)) return true;
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ event.targets=player.storage.olzeyue_round.slice(0).sortBySeat();
+ event.target=event.targets.shift();
+ event.forceDie=true;
+ 'step 1'
+ var map=player.storage.olzeyue_map;
+ if(target.storage['olzeyue_'+player.playerid]) map[target.playerid]++;
+ event.num=map[target.playerid]-1;
+ if(event.num<=0) event.finish();
+ 'step 2'
+ event.num--;
+ target.useCard(player,{name:'sha',isCard:true},false,'olzeyue_round');
+ 'step 3'
+ var key='olzeyue_'+player.playerid;
+ if(target.storage[key]&&player.hasHistory('damage',function(evt){
+ return evt.card.name=='sha'&&evt.getParent().type=='card'&&evt.getParent(3)==event;
+ })){
+ for(var skill in target.disabledSkills){
+ if(target.disabledSkills[skill].contains(key)) game.log(target,'恢复了技能','#g【'+get.translation(skill)+'】');
+ }
+ delete target.storage[key];
+ target.enableSkill(key);
+ }
+ if(event.num>0&&player.isIn()&&target.isIn()&&target.canUse('sha',player,false)){
+ event.goto(2);
+ }
+ else if(event.targets.length>0){
+ event.target=event.targets.shift();
+ event.goto(1);
+ }
+ },
+ },
+ },
+ },
+ //邓忠
+ dzkanpo:{
+ audio:2,
+ trigger:{source:'damageSource'},
+ filter:function(event,player){
+ return event.getParent().type=='card'&&event.card&&event.card.name=='sha'&&event.player.countCards('he')>0;
+ },
+ logTarget:'player',
+ content:function(){
+ var suit=get.suit(trigger.card);
+ var next=player.gainPlayerCard(trigger.player,'h','visible');
+ next.set('suit',suit);
+ next.set('filterButton',function(button){
+ var evt=_status.event;
+ return get.suit(button.link,evt.target)==evt.suit;
+ });
+ },
+ group:'dzkanpo_sha',
+ subSkill:{
+ sha:{
+ enable:'chooseToUse',
+ usable:1,
+ viewAs:{name:'sha'},
+ viewAsFilter:function(player){
+ return player.countCards('hs')>0;
+ },
+ filterCard:true,
+ position:'hs',
+ prompt:'将一张手牌当做【杀】使用',
+ check:function(card){
+ return 6-get.value(card);
+ },
+ ai:{
+ respondSha:true,
+ skillTagFilter:function(player){
+ if(player.getStat('skill').dzkanpo_sha) return false;
+ if(!player.countCards('hs')) return false;
+ },
+ },
+ },
+ },
+ },
+ dzgengzhan:{
+ audio:2,
+ trigger:{
+ global:['loseAfter','loseAsyncAfter'],
+ },
+ usable:1,
+ filter:function(event,player){
+ if(event.type!='discard'||event.getlx===false||player==_status.currentPhase||!event.isPhaseUsing()) return false;
+ for(var card of event.cards){
+ if(get.position(card,true)=='d'&&get.name(card,event.hs&&event.hs.contains(card)?event.player:false)=='sha') return true;
+ }
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var cards=trigger.cards.filter(function(card){
+ return (get.position(card,true)=='d'&&get.name(card,trigger.hs&&trigger.hs.contains(card)?trigger.player:false)=='sha')
+ });
+ player.chooseButton(['是否发动【更战】获得一张杀?',cards]).set('ai',function(button){
+ return get.value(button.link,_status.event.player);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('dzgengzhan');
+ player.gain(result.links,'gain2');
+ }
+ else player.storage.counttrigger.dzgengzhan--;
+ },
+ group:'dzgengzhan_add',
+ subSkill:{
+ add:{
+ audio:'dzgengzhan',
+ trigger:{global:'phaseJieshuBegin'},
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ return player!=event.player&&!event.player.hasHistory('useCard',function(evt){
+ return evt.card.name=='sha';
+ });
+ },
+ logTarget:'player',
+ content:function(){
+ player.addTempSkill('dzgengzhan_effect',{player:'phaseUseAfter'});
+ player.addMark('dzgengzhan_effect',1,false);
+ game.delayx();
+ },
+ },
+ effect:{
+ onremove:true,
+ charlotte:true,
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+player.countMark('dzgengzhan_effect');
+ },
+ },
+ intro:{content:'使用杀的次数上限+#'},
+ },
+ },
+ },
+ //王衍
+ yangkuang:{
+ audio:2,
+ trigger:{player:'recoverEnd'},
+ filter:function(event,player){
+ return player.isHealthy();
+ },
+ logTarget:function(event,player){
+ return _status.currentPhase||player;
+ },
+ check:function(event,player){
+ var target=(_status.currentPhase||player);
+ if(get.attitude(player,target)>0) return true;
+ if(player.countCards('h')>target.countCards('h')) return true;
+ if(!target.getCardUsable('sha')) return true;
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseUseTarget('jiu',true);
+ 'step 1'
+ var target=_status.currentPhase;
+ if(target) target.draw('nodelay');
+ player.draw();
+ },
+ },
+ cihuang:{
+ audio:2,
+ trigger:{
+ global:['eventNeutralized','shaMiss'],
+ },
+ direct:true,
+ filter:function(event,player){
+ if(event.player!=_status.currentPhase||!event.targets||event.targets.length!=1||event.type!='card'||!player.countCards('he')) return false;
+ return lib.skill.cihuang.getList(player,event.player,true);
+ },
+ getList:function(player,target,bool){
+ var natures=lib.inpile_nature.slice(0);
+ var tricks=[];
+ for(var name of lib.inpile){
+ var info=lib.card[name];
+ if(!info||info.type!='trick'||info.notarget||((info.selectTarget&&info.selectTarget!=1)&&(info.selectTarget!=-1||!info.toself))) continue;
+ tricks.push(name);
+ }
+ var history=player.actionHistory;
+ for(var i=history.length-1;i>=0;i--){
+ var info=history[i];
+ for(var evt of info.useCard){
+ var name=evt.card.name;
+ if(name=='sha'){
+ if(evt.card.nature) natures.remove(evt.card.nature);
+ }
+ else tricks.remove(name);
+ };
+ if(info.isRound) break;
+ }
+ var vcards=[];
+ for(var i of natures){
+ if(player.canUse({
+ name:'sha',
+ nature:i,
+ isCard:true,
+ },target)){
+ if(bool) return true;
+ else vcards.push(['基本','','sha',i]);
+ }
+ }
+ for(var i of tricks){
+ if(player.canUse({
+ name:i,
+ isCard:true,
+ },target)){
+ if(bool) return true;
+ else vcards.push(['锦囊','',i]);
+ }
+ }
+ if(bool) return false;
+ return vcards;
+ },
+ content:function(){
+ 'step 0'
+ var target=trigger.player;
+ var list=lib.skill.cihuang.getList(player,target);
+ if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
+ player.chooseButton([get.prompt('cihuang',target),'将一张牌当以下的一张牌对'+get.translation(target)+'使用
',[list,'vcard']]).set('ai',function(button){
+ var card={
+ name:button.link[2],
+ nature:button.link[3],
+ storage:{cihuang:true},
+ },player=_status.event.player,target=_status.event.getTrigger().player;
+ return get.effect(target,card,player,player);
+ });
+ 'step 1'
+ if(result.bool){
+ var card={
+ name:result.links[0][2],
+ nature:result.links[0][3],
+ storage:{cihuang:true},
+ };
+ event.card=card;
+ player.chooseCard('he','雌黄:将一张牌当'+get.translation(card)+'对'+get.translation(trigger.player)+'使用',function(card,player){
+ return player.canUse(get.autoViewAs(_status.event.getParent().card,[card]),_status.event.target,false);
+ }).set('target',trigger.player).set('ai',function(card){
+ if(get.effect(_status.event.target,get.autoViewAs(_status.event.getParent().card,[card]),player)<=0) return false;
+ return 6-get.value(card);
+ });
+ }
+ else event._result={bool:false};
+ 'step 2'
+ if(_status.connectMode){game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});}
+ if(result.bool){
+ player.useCard(get.autoViewAs(event.card,result.cards),result.cards,false,trigger.player,'cihuang').oncard=function(card,player){
+ _status.event.directHit.addArray(game.filterPlayer());
+ };
+ }
+ },
+ ai:{
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ return arg&&arg.card&&arg.card.storage&&arg.card.storage.cihuang;
+ },
+ },
+ },
+ sanku:{
+ audio:2,
+ trigger:{player:'dying'},
+ forced:true,
+ group:'sanku_nogain',
+ content:function(){
+ 'step 0'
+ player.loseMaxHp();
+ 'step 1'
+ var num=player.maxHp-player.hp;
+ if(num>0) player.recover(num);
+ },
+ ai:{halfneg:true},
+ subSkill:{
+ nogain:{
+ audio:'sanku',
+ trigger:{player:'gainMaxHpBegin'},
+ forced:true,
+ content:function(){
+ trigger.cancel();
+ }
+ }
}
},
- rechunlao:{
+ //霍峻
+ qiongshou:{
+ audio:2,
+ trigger:{
+ player:'enterGame',
+ global:'phaseBefore',
+ },
+ forced:true,
+ filter:function(event,player){
+ if(event.name=='phase'&&game.phaseNumber!=0) return false;
+ return player.hasEnabledSlot();
+ },
+ content:function(){
+ var list=[];
+ for(var i=1;i<6;i++){
+ for(var j=0;j0)||(!player.storage.fenrui&&game.hasPlayer(function(current){
+ return current!=player&¤t.countCards('e')0){
+ var str='弃置一张牌,恢复一个装备栏并使用一张对应装备牌';
+ player.chooseToDiscard('he',get.prompt('fenrui'),str).set('ai',function(card){
+ return 7-get.value(card);
+ }).logSkill='fenrui';
+ }
+ else event.goto(3);
+ 'step 1'
+ if(result.bool){
+ player.chooseToEnable().set('ai',function(){
+ var player=_status.event.player;
+ var list=[2,5,1,3,4];
+ for(var i of list){
+ if(player.hasDisabledSlot(i)) return 'equip'+i;
+ }
+ });
+ }
+ else{
+ var es=player.countCards('e');
+ if(player.storage.fenrui||!game.hasPlayer(function(current){
+ return current!=player&¤t.countCards('e')0&&game.hasPlayer(function(current){
+ return current!=player&¤t.countCards('e')target.countCards('e');
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var num=player.countCards('e')-target.countCards('e');
+ if(get.attitude(player,target)>=0) return 0;
+ if(num>=Math.min(2,player.hp,target.hp)) return get.damageEffect(target,player,player);
+ return 0;
+ });
+ }
+ else event.finish();
+ 'step 4'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('fenrui_animate',target);
+ player.storage.fenrui=true;
+ player.unmarkSkill('fenrui');
+ game.delayx();
+ target.damage(player.countCards('e')-target.countCards('e'));
+ }
+ },
+ group:'fenrui_animate',
+ mark:true,
+ intro:{content:'王炸尚未使用'},
+ subSkill:{
+ animate:{
+ skillAnimation:true,
+ animationColor:'fire',
+ },
+ },
+ },
+ //曹宪曹华
+ huamu:{
+ audio:2,
+ trigger:{player:'useCardAfter'},
+ locked:false,
+ filter:function(event,player){
+ var color=get.color(event.card);
+ if(color=='none') return false;
+ if(!player.hasHistory('lose',function(evt){
+ return evt.hs.length>0&&evt.getParent()==event;
+ })||!event.cards.filterInD('oe').length) return false;
+ var history=game.getGlobalHistory('useCard');
+ var index=history.indexOf(event);
+ if(index<1) return false;
+ var evt=history[index-1],color2=get.color(evt.card);
+ return color!=color2&&color2!='none';
+ },
+ prompt2:(event)=>'将'+get.translation(event.cards.filterInD('oe'))+'置于武将牌上',
+ check:function(event,player){
+ if(!game.hasPlayer(function(current){
+ return current.hasSkill('qianmeng',null,null,false)&&get.attitude(player,current)>0;
+ })) return false;
+ var cards=event.cards.filterInD('e');
+ if(!cards.length) return true;
+ var card=cards[0];
+ if(get.owner(card)==player){
+ if(get.value(card,player)<=0) return true;
+ var subtype=get.subtype(card);
+ if(player.hasCard('hs',function(card){
+ return get.subtype(card)==subtype&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
+ })) return true;
+ }
+ return false;
+ },
+ content:function(){
+ var cards=trigger.cards.filterInD('oe');
+ player.addToExpansion(cards,'gain2').gaintag.add('huamu');
+ },
+ ai:{
+ reverseOrder:true,
+ combo:'qianmeng',
+ },
+ mod:{
+ aiOrder:function(player,card,num){
+ if(typeof card=='object'){
+ var history=game.getGlobalHistory('useCard');
+ if(!history.length) return;
+ var evt=history[history.length-1];
+ if(evt&&evt.card&&get.color(evt.card)!='none'&&get.color(card)!='none'&&get.color(evt.card)!=get.color(card)){
+ return num+4;
+ }
+ }
+ },
+ },
+ marktext:'木',
+ intro:{
+ name:'灵杉&玉树',
+ markcount:function(storage,player){
+ var red=[],black=[];
+ var cards=player.getExpansions('huamu');
+ for(var i of cards){
+ var color=get.color(i,false);
+ (color=='red'?red:black).push(i);
+ }
+ return (''+black.length+'/'+red.length);
+ },
+ content:'expansion',
+ mark:function(dialog,storage,player){
+ var red=[],black=[];
+ var cards=player.getExpansions('huamu');
+ for(var i of cards){
+ var color=get.color(i,false);
+ (color=='red'?red:black).push(i);
+ }
+ if(black.length){
+ dialog.addText('灵杉');
+ dialog.addSmall(black);
+ }
+ if(red.length){
+ dialog.addText('玉树');
+ dialog.addSmall(red);
+ }
+ },
+ },
+ },
+ qianmeng:{
+ audio:2,
+ trigger:{
+ global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ filter:function(event,player){
+ if(event.name=='addToExpansion'){
+ if(event.gaintag.contains('huamu')){
+ var cards=event.player.getExpansions('huamu'),red=cards.filter(function(i){
+ return get.color(i,false)=='red';
+ });
+ if(cards.length==red.length||red.length==0||cards.length==red.length*2) return true;
+ }
+ }
+ if(event.name=='lose'&&event.getlx!==false){
+ for(var i in event.gaintag_map){
+ if(event.gaintag_map[i].contains('huamu')){
+ var cards=event.player.getExpansions('huamu'),red=cards.filter(function(i){
+ return get.color(i,false)=='red';
+ });
+ return (cards.length==red.length||red.length==0||cards.length==red.length/2);
+ }
+ }
+ return false;
+ }
+ return game.getGlobalHistory('cardMove',function(evt){
+ if(evt.name!='lose'||event!=evt.getParent()) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('huamu')){
+ var cards=evt.player.getExpansions('huamu'),red=cards.filter(function(i){
+ return get.color(i,false)=='red';
+ });
+ return (cards.length==red.length||red.length==0||cards.length==red.length/2);
+ }
+ }
+ return false;
+ }).length>0;
+ },
+ forced:true,
+ content:function(){
+ player.draw();
+ },
+ ai:{combo:'huamu'},
+ },
+ liangyuan:{
+ enable:'chooseToUse',
+ hiddenCard:function(player,name){
+ if(name=='tao'){
+ return !player.hasSkill('liangyuan_tao',null,null,false)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='red';
+ }).length>0;
+ });
+ }
+ else if(name=='jiu'){
+ return !player.hasSkill('liangyuan_jiu',null,null,false)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='black';
+ }).length>0;
+ })
+ }
+ return false;
+ },
+ filter:function(event,player){
+ if(event.type=='wuxie') return false;
+ if(!player.hasSkill('liangyuan_tao',null,null,false)&&event.filterCard({name:'tao'},player,event)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='red';
+ }).length>0;
+ })) return true;
+ if(!player.hasSkill('liangyuan_jiu',null,null,false)&&event.filterCard({name:'jiu'},player,event)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='black';
+ }).length>0;
+ })) return true;
+ return false;
+ },
+ chooseButton:{
+ dialog:function(){
+ return ui.create.dialog('良缘',[['tao','jiu'],'vcard'],'hidden');
+ },
+ filter:function(button,player){
+ var evt=_status.event.getParent();
+ var name=button.link[2],color=(name=='tao')?'red':'black';
+ if(player.hasSkill('liangyuan_'+name,null,null,false)) return false;
+ var cards=[];
+ game.countPlayer(function(current){
+ cards.addArray(current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ }));
+ });
+ if(!cards.length) return false;
+ var card=get.autoViewAs({name:name},cards);
+ return evt.filterCard(card,player,evt);
+ },
+ check:function(button){
+ if(_status.event.getParent().type!='phase') return 1;
+ var player=_status.event.player;
+ var name=button.link[2],color=(name=='tao')?'red':'black';
+ var cards=[];
+ game.countPlayer(function(current){
+ cards.addArray(current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ }));
+ });
+ var card=get.autoViewAs({name:name},cards);
+ return player.getUseValue(card,null,true);
+ },
+ backup:function(links,player){
+ var name=links[0][2],color=(name=='tao')?'red':'black';
+ var cards=[];
+ game.countPlayer(function(current){
+ cards.addArray(current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ }));
+ });
+ if(!cards.length) return false;
+ var card=get.autoViewAs({name:name},cards);
+ return {
+ viewAs:card,
+ color:color,
+ selectCard:-1,
+ filterCard:()=>false,
+ precontent:function(){
+ player.addTempSkill('liangyuan_'+event.result.card.name,'roundStart');
+ player.logSkill('liangyuan');
+ var list=[],color=lib.skill.liangyuan_backup.color;
+ var cards=[];
+ game.countPlayer(function(current){
+ var cardsx=current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ });
+ if(cardsx.length){
+ cards.addArray(cardsx);
+ list.push([current,cardsx]);
+ current.$throw(cardsx);
+ game.log(current,'将',cardsx,'化作“'+(color=='black'?'灵杉':'玉树')+'”良缘')
+ }
+ });
+ event.result.cards=cards;
+ delete event.result.skill;
+ event.result._apply_args={'throw':false};
+ game.loseAsync({
+ lose_list:list,
+ }).setContent('chooseToCompareLose');
+ },
+ }
+ },
+ prompt:function(links,player){
+ var name=links[0][2],color=(name=='tao')?'玉树':'灵杉';
+ return '将场上所有的“'+color+'”当做【'+get.translation(name)+'】使用';
+ },
+ },
+ subSkill:{
+ tao:{charlotte:true},
+ jiu:{charlotte:true},
+ },
+ ai:{
+ order:function(item,player){
+ if(!player) player=_status.event.player;
+ return get.order({name:lib.skill.liangyuan.hiddenCard(player,'jiu')?'jiu':'tao'})+4;
+ },
+ result:{
+ player:function(player){
+ if(_status.event.dying) return get.attitude(player,_status.event.dying);
+ return 1;
+ },
+ },
+ combo:'huamu',
+ threaten:3,
+ },
+ },
+ jisi:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ direct:true,
+ limited:true,
+ skillAnimation:true,
+ animationColor:'metal',
+ filter:function(event,player){
+ var skills=player.getStockSkills('一!','五!').filter(function(skill){
+ if(skill=='jisi') return false;
+ var info=get.info(skill);
+ return info&&!info.charlotte;
+ });
+ var history=player.getAllHistory('useSkill');
+ for(var i of history){
+ if(skills.contains(i.sourceSkill)||skills.contains(i.skill)) return true;
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var skills2=[];
+ var skills=player.getStockSkills('只!','因!').filter(function(skill){
+ if(skill=='jisi') return false;
+ var info=get.info(skill);
+ return info&&!info.charlotte;
+ });
+ var history=player.getAllHistory('useSkill');
+ for(var i of history){
+ if(skills.contains(i.sourceSkill)) skills2.add(i.sourceSkill);
+ if(skills.contains(i.skill)) skills2.add(i.skill);
+ if(skills.length==skills2.length) break;
+ }
+ event.skills2=skills2;
+ var str='令一名其他角色获得';
+ for(var i=0;i1) str+='中的一个技能';
+ str+='然后你';
+ if(player.countCards('h')>0) str+='弃置所有手牌,并';
+ str+='视为对其使用一张【杀】';
+ player.chooseTarget(get.prompt('jisi'),str,lib.filter.notMe).set('ai',function(target){
+ if(!_status.event.goon) return false;
+ var att=get.attitude(player,target);
+ if(att<4) return false;
+ var eff=get.effect(target,{name:'sha',isCard:true},player,player);
+ if(eff>=0) return att+eff;
+ if(target.hp<=2) return false;
+ return att/Math.max(1,-eff);
+ }).set('goon',function(){
+ if(player.hasUnknown()||player.identity=='nei') return false;
+ var hs=player.getCards('h');
+ if(!hs.length||get.value(hs,player)<=9-player.hp) return true;
+ return false;
+ }());
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('jisi',target);
+ player.awakenSkill('jisi');
+ var list=event.skills2;
+ if(list.length==0) event._result={control:list[0]};
+ player.chooseControl(list).set('prompt','令'+get.translation(target)+'获得一个技能').set(
+ 'ai',()=>_status.event.choice
+ ).set('choice',list.contains('qianmeng')?'qianmeng':list.randomGet());
+ }
+ else event.finish();
+ 'step 2'
+ target.addSkill(result.control);
+ 'step 3'
+ var num=player.countCards('h');
+ if(num>0) player.chooseToDiscard('h',num,true);
+ 'step 4'
+ if(player.canUse('sha',target,false)) player.useCard(false,target,{
+ name:'sha',
+ isCard:true,
+ },'noai')
+ },
+ },
+ //周处
+ shanduan:{
+ audio:2,
+ init:function(player,name){
+ player.storage[name]=[1,2,3,4];
+ },
+ trigger:{player:'phaseBegin'},
+ forced:true,
+ popup:false,
+ content:function(){
+ trigger._shanduan=(player.storage.shanduan||[1,2,3,4]).slice(0);
+ player.storage.shanduan=[1,2,3,4]
+ },
+ group:['shanduan_draw','shanduan_use','shanduan_discard','shanduan_damage'],
+ ai:{
+ notemp:true,
+ threaten:3.6,
+ },
+ subSkill:{
+ damage:{
+ audio:'shanduan',
+ trigger:{player:'damageEnd'},
+ forced:true,
+ locked:false,
+ filter:(event,player)=>player!=_status.currentPhase,
+ content:function(){
+ if(!player.storage.shanduan) player.storage.shanduan=[1,2,3,4];
+ var list=player.storage.shanduan;
+ for(var i=0;i0;
+ },
+ content:function(){
+ 'step 0'
+ var list=trigger.getParent()._shanduan;
+ if(list.length==1) event._result={index:0};
+ else player.chooseControl(list).set('prompt','善断:为摸牌阶段的摸牌数分配一个数值').set('choice',list.indexOf(Math.max.apply(Math,list))).set('ai',()=>_status.event.choice);
+ 'step 1'
+ var list=trigger.getParent()._shanduan;
+ var num=list[result.index];
+ trigger.num=num;
+ list.remove(num);
+ game.log(player,'给','#g摸牌阶段的摸牌数','分配的数值是','#y'+num);
+ },
+ },
+ use:{
+ audio:'shanduan',
+ trigger:{player:'phaseUseBegin'},
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ var list=event.getParent()._shanduan;
+ return list&&list.length>0;
+ },
+ content:function(){
+ 'step 0'
+ var list=trigger.getParent()._shanduan;
+ if(list.length==1) event._result={index:0};
+ else player.chooseControl(list).set('prompt','善断:为攻击范围基数分配一个数值').set('list',list).set('ai',function(){
+ var player=_status.event.player,list=_status.event.list,card={name:'sha'};
+ if(player.hasSha()&&(player.hasValueTarget(card,false,true)&&!player.hasValueTarget(card,null,true))){
+ var range=1;
+ var equips=player.getCards('e');
+ for(var i=0;i1&&distance<=(i-range)) return true;
+ return false;
+ })) return list.indexOf(i);
+ }
+ }
+ return list.indexOf(Math.min.apply(Math,list));
+ });
+ 'step 1'
+ var list=trigger.getParent()._shanduan;
+ var num=list[result.index];
+ if(!player.storage.shanduan_effect) player.storage.shanduan_effect={};
+ player.storage.shanduan_effect.range=num;
+ player.addTempSkill('shanduan_effect');
+ list.remove(num);
+ game.log(player,'给','#g攻击范围的基数','分配的数值是','#y'+num);
+ if(list.length==0) event.finish();
+ else if(list.length==1) event._result={index:0};
+ else player.chooseControl(list).set('prompt','为使用【杀】的次数上限分配一个数值').set('list',list).set('ai',function(){
+ var player=_status.event.player,list=_status.event.list;
+ var sha=player.countCards('hs',function(card){
+ return get.name(card)=='sha'&&player.hasValueTarget(card,null,true);
+ });
+ var max=player.getCardUsable('sha');
+ if(sha<=max){
+ var listx=list.slice(0).sort();
+ for(var i of listx){
+ if(max+i>=sha) return list.indexOf(i);
+ }
+ return list.indexOf(Math.max.apply(Math,list))
+ }
+ return list.indexOf(Math.min.apply(Math,list));
+ });
+ 'step 2'
+ var list=trigger.getParent()._shanduan;
+ var num=list[result.index];
+ if(!player.storage.shanduan_effect) player.storage.shanduan_effect={};
+ player.storage.shanduan_effect.sha=num;
+ game.log(player,'给','#g使用【杀】的次数上限','分配的数值是','#y'+num);
+ list.remove(num);
+ },
+ },
+ discard:{
+ audio:'shanduan',
+ trigger:{player:'phaseDiscardBegin'},
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ var list=event.getParent()._shanduan;
+ return list&&list.length>0;
+ },
+ content:function(){
+ 'step 0'
+ var list=trigger.getParent()._shanduan;
+ if(list.length==1) event._result={index:0};
+ else player.chooseControl(list).set('prompt','善断:为手牌上限基数分配一个数值').set('choice',list.indexOf(Math.max.apply(Math,list))).set('ai',()=>_status.event.choice);
+ 'step 1'
+ var list=trigger.getParent()._shanduan;
+ var num=list[result.index];
+ if(!player.storage.shanduan_effect) player.storage.shanduan_effect={};
+ player.storage.shanduan_effect.limit=num;
+ player.addTempSkill('shanduan_effect');
+ list.remove(num);
+ game.log(player,'给','#g手牌上限的基数','分配的数值是','#y'+num);
+ },
+ },
+ effect:{
+ charlotte:true,
+ onremove:true,
+ mod:{
+ attackRangeBase:function(player){
+ var map=player.storage.shanduan_effect;
+ if(typeof map.range!='number') return;
+ var range=1;
+ var equips=player.getCards('e',function(card){
+ return !ui.selected.cards||!ui.selected.cards.contains(card);
+ });
+ for(var i=0;i8-get.value(card),
+ popname:true,
+ viewAs:{
+ name:links[0][2],
+ nature:links[0][3],
+ },
+ precontent:function(){
+ var name=event.result.card.name;
+ player.addTempSkill('yilie_count','roundStart');
+ player.markAuto('yilie_count',[name]);
+ },
+ }
+ },
+ prompt:function(links,player){
+ var name=links[0][2];
+ var nature=links[0][3];
+ return '将两张颜色相同的手牌当做'+(get.translation(nature)||'')+get.translation(name)+'使用';
+ },
+ },
+ ai:{
+ order:function(item,player){
+ return 2.6;
+ },
+ respondShan:true,
+ respondSha:true,
+ fireAttack:true,
+ skillTagFilter:function(player,tag){
+ var hs=player.getCards('hs');
+ if(hs.length<2) return false;
+ var bool=false,map={};
+ for(var card of hs){
+ var color=get.color(card);
+ if(!map[color]) map[color]=true;
+ else{
+ bool=true;
+ break;
+ }
+ }
+ if(!bool) return false;
+ var storage=player.storage.yilie_count;
+ var name;
+ switch(tag){
+ case 'respondShan':name='shan';break;
+ default:name='sha';break;
+ }
+ if(storage&&storage.contains(name)) return false;
+ },
+ result:{
+ player:function(player){
+ if(_status.event.dying) return get.attitude(player,_status.event.dying);
+ return 1;
+ }
+ }
+ },
+ subSkill:{
+ count:{charlotte:true,onremove:true},
+ backup:{audio:'yilie'},
+ },
+ },
+ //赵俨
+ tongxie:{
+ audio:2,
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('tongxie'),'选择至多两名其他角色作为“同协角色”',lib.filter.notMe,[0,2]).set('ai',function(target){
+ return get.attitude(_status.event.player,target);
+ });
+ 'step 1'
+ if(result.bool){
+ var targets=result.targets;
+ targets.add(player);
+ player.logSkill('tongxie',targets);
+ player.addTempSkill('tongxie_effect',{player:'phaseBegin'});
+ player.markAuto('tongxie_effect',targets);
+ var min=player.countCards('h'),min_player=player;
+ for(var i of targets){
+ if(i==player) continue;
+ var num=i.countCards('h');
+ if(num0) return true;
+ if(i.hasSha()) return true;
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ event.targets=player.getStorage('tongxie_effect').filter(function(i){
+ return i!==trigger.player;
+ }).sortBySeat();
+ event.target=trigger.targets[0];
+ 'step 1'
+ var current=targets.shift();
+ if(current.isIn()&&target.isIn()&¤t.canUse('sha',target,false)&&(_status.connectMode||current.hasSha())){
+ current.chooseToUse(function(card,player,event){
+ if(get.name(card)!='sha') return false;
+ return lib.filter.filterCard.apply(this,arguments);
+ },'同协:是否对'+get.translation(target)+'使用一张杀?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
+ if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
+ return lib.filter.targetEnabled.apply(this,arguments);
+ }).set('sourcex',target).set('logSkill','tongxie_effect').set('addCount',false);
+ if(targets.length>0) event.redo();
+ }
+ },
+ group:['tongxie_damage','tongxie_count'],
+ },
+ damage:{
+ audio:'tongxie',
+ charlotte:true,
+ trigger:{global:'damageBegin4'},
+ filter:function(event,player){
+ var list=player.getStorage('tongxie_effect');
+ if(!list.contains(event.player)) return false;
+ for(var i of list){
+ if(i!=event.player&&i.isIn()&&!i.hasSkill('tongxie_count2',null,null,false)) return true;
+ }
+ return false;
+ },
+ forced:true,
+ popup:false,
+ content:function(){
+ 'step 0'
+ event.targets=player.getStorage('tongxie_effect').filter(function(i){
+ return i!=trigger.player&&i.isIn()&&!i.hasSkill('tongxie_count2',null,null,false);
+ }).sortBySeat();
+ event.num=0;
+ 'step 1'
+ var target=targets[num];
+ event.num++;
+ event.target=target;
+ target.chooseBool('同协:是否为'+get.translation(trigger.player)+'阻挡伤害?','失去1点体力,防止'+get.translation(trigger.player)+'即将受到的'+get.cnNumber(trigger.num)+'点伤害').set('ai',function(){
+ var player=_status.event.player,target=_status.event.getTrigger().player;
+ var trigger=_status.event.getTrigger();
+ var eff1=get.damageEffect(target,trigger.source,player,trigger.nature);
+ if(trigger.num>1) eff1=Math.min(-1,eff1)*trigger.num;
+ var eff2=get.effect(player,{name:'losehp'},player,player);
+ return eff2>eff1;
+ });
+ 'step 2'
+ if(result.bool){
+ target.logSkill('tongxie_damage',trigger.player);
+ trigger.cancel();
+ target.loseHp();
+ }
+ else if(num=to.hp) return -Infinity;
+ },
+ },
+ trigger:{player:'useCardToPlayered'},
+ shaRelated:true,
+ filter:function(event,player){
+ return event.card.name=='sha'&&event.target.countCards('he')>0&&get.distance(player,event.target)==1;
+ },
+ forced:true,
+ logTarget:'target',
+ content:function(){
+ 'step 0'
+ var target=trigger.target;
+ event.target=target;
+ if(target.countCards('e')==0) event._result={index:0};
+ else target.chooseControl().set('choiceList',[
+ '弃置一张牌',
+ '重铸装备区的所有牌',
+ ]).set('ai',function(card){
+ var min=Infinity,equ=0,es=player.getCards('e'),hs=player.getCards('he');
+ for(var i of hs){
+ var val=get.value(i);
+ min=Math.min(min,val);
+ if(es.contains(i)) equ+=val;
+ }
+ equ/=es.length;
+ if(min1) return;
+ var card=get.cards()[0];
+ if(!card) return;
+ game.log(player,'展示了',card);
+ event.cardsx.push(card);
+ event.cards2[index].push(card);
+ game.broadcastAll(function(id,card,name,index){
+ var dialog=get.idDialog(id);
+ if(!dialog) return;
+ var button=ui.create.button(card,'card',dialog.buttonss[index]);
+ button.querySelector('.info').innerHTML=(name+'|'+get.strNumber(card.number));
+ },event.videoId,card,function(target){
+ if(target._tempTranslate) return target._tempTranslate;
+ var name=target.name;
+ if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
+ return get.translation(name);
+ }(player),index);
+ }
+ };
+ event.players=game.filterPlayer();
+ event.cardsx=[];
+ event.cards2=[[],[]];
+ event.videoId=lib.status.videoId++;
+ event.ai_targets=[];
+ game.broadcastAll(function(name,id){
+ var dialog=ui.create.dialog(name+'发起了“锻造”','hidden','forcebutton');
+ dialog.videoId=id;
+ dialog.classList.add('scroll1');
+ dialog.classList.add('scroll2');
+ dialog.classList.add('fullwidth');
+ dialog.classList.add('fullheight');
+ dialog.buttonss=[];
+
+ var list=['协力锻造的玩家','妨碍锻造的玩家']
+ for(var i=0;i'+list[i]+'');
+ var buttons=ui.create.div('.buttons',dialog.content);
+ dialog.buttonss.push(buttons);
+ buttons.classList.add('popup');
+ buttons.classList.add('guanxing');
+ }
+ dialog.open();
+ },get.translation(player),event.videoId)
+ for(var i=0;i0) num=0;
+ else if(att<0) num=1;
+ sendback({index:num},target);
+ if(_status.connectMode) target.hideTimer();
+ if(!event.ai_targets.length){
+ clearInterval(event.interval);
+ if(event.withai) game.resume();
+ }
+ },750);
+ },500)
+ }
+ 'step 1'
+ if(event.withme){
+ if(_status.connectMode) game.me.unwait(result);
+ else{
+ var index=result.index;
+ game.log(game.me,'选择了',['#b助力锻造','#g妨碍锻造','#b什么都不做'][index])
+ if(index>1) return;
+ var card=get.cards()[0];
+ if(!card) return;
+ game.log(game.me,'展示了',card);
+ event.cardsx.push(card);
+ event.cards2[index].push(card);
+ game.broadcastAll(function(id,card,name,index){
+ var dialog=get.idDialog(id);
+ if(!dialog) return;
+ var button=ui.create.button(card,'card',dialog.buttonss[index]);
+ button.querySelector('.info').innerHTML=(name+'|'+get.strNumber(card.number));
+ },event.videoId,card,function(target){
+ if(target._tempTranslate) return target._tempTranslate;
+ var name=target.name;
+ if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
+ return get.translation(name);
+ }(game.me),index);
+ }
+ }
+ 'step 2'
+ if(event.withol&&!event.resultOL){
+ game.pause();
+ }
+ 'step 3'
+ if(event.ai_targets.length>0){
+ event.withai=true;
+ game.pause();
+ }
+ 'step 4'
+ game.delay(2);
+ var num1=0,num2=0;
+ for(var i of event.cards2[0]) num1+=get.number(i,false);
+ for(var i of event.cards2[1]) num2+=get.number(i,false);
+ var result=2;
+ if(num10) result=1;
+ event.duanzao_result=result;
+ game.broadcastAll(function(id,result){
+ var dialog=get.idDialog(id);
+ if(dialog) dialog.content.firstChild.innerHTML=['锻造失败…','锻造成功','完美锻造!'][result];
+ },event.videoId,result)
+ 'step 5'
+ game.cardsGotoOrdering(event.cardsx);
+ game.broadcastAll('closeDialog',event.videoId);
+ 'step 6'
+ var subtype=get.subtype(cards[0]);
+ if(subtype!='equip1'&&subtype!='equip2') subtype='others';
+ var card_map={
+ equip1:[
+ ['diamond',13,'bintieshuangji'],
+ ['diamond',1,'wuxinghelingshan'],
+ ['spade',13,'wutiesuolian'],
+ ['diamond',12,'wushuangfangtianji'],
+ ['spade',6,'chixueqingfeng'],
+ ['spade',5,'guilongzhanyuedao'],
+ ],
+ equip2:[
+ ['club',1,'huxinjing'],
+ ['club',2,'heiguangkai'],
+ ['spade',2,'linglongshimandai'],
+ ['club',1,'hongmianbaihuapao'],
+ ['spade',2,'qimenbagua'],
+ ['spade',9,'guofengyupao'],
+ ],
+ others:[
+ ['diamond',1,'zhaogujing'],
+ ['spade',5,'sanlve'],
+ ['club',12,'tianjitu'],
+ ['spade',2,'taigongyinfu'],
+ ['diamond',1,'shufazijinguan'],
+ ['club',4,'xuwangzhimian'],
+ ],
+ };
+ if(!_status.olshengong_map) _status.olshengong_map={};
+ if(!_status.olshengong_maken) _status.olshengong_maken={};
+ var list=card_map[subtype];
+ for(var i=0;i0;
+ },
+ content:function(){
+ player.draw(player.countMark('olshengong_draw'));
+ },
+ },
+ },
+ },
+ olqisi:{
+ audio:2,
+ trigger:{player:'phaseDrawBegin2'},
+ filter:function(event,player){
+ return !event.numFixed&&event.num>0;
+ },
+ check:function(event,player){
+ if(player.hasEmptySlot(2)||player.hasEmptySlot(5)||player.hasEmptySlot(1)) return true;
+ return false;
+ },
+ prompt2:'摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。',
+ content:function(){
+ 'step 0'
+ player.chooseControl('equip1','equip2','equip6','equip5').set('prompt','选择获得一种副类别的装备牌').set('ai',function(card){
+ if(player.hasEmptySlot(2)) return 'equip2';
+ if(player.hasEmptySlot(5)) return 'equip5';
+ if(player.hasEmptySlot(1)) return 'equip1';
+ return 'equip6';
+ });
+ 'step 1'
+ var card=get.cardPile(function(card){
+ var type=get.subtype(card);
+ if(result.control=='equip6') return (type=='equip3'||type=='equip4');
+ return type==result.control;
+ });
+ if(card){
+ trigger.num--;
+ player.gain(card,'gain2');
+ }
+ },
+ group:'olqisi_init',
+ subSkill:{
+ init:{
+ audio:'olqisi',
+ trigger:{
+ global:'phaseBefore',
+ player:'enterGame',
+ },
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ return (event.name!='phase'||game.phaseNumber==0);
+ },
+ content:function(){
+ 'step 0'
+ var i=0;
+ var list=[];
+ while(i++<2){
+ var card=get.cardPile(function(card){
+ if(get.type(card)!='equip') return false;
+ return list.length==0||get.subtype(card)!=get.subtype(list[0]);
+ });
+ if(card) list.push(card);
+ }
+ if(!list.length){event.finish();return;}
+ event.list=list;
+ player.gain(event.list,'gain2');
+ 'step 1'
+ game.delay(1);
+ var card=event.list.shift();
+ if(player.getCards('h').contains(card)){
+ player.$give(card,player,false)
+ player.equip(card);
+ }
+ if(event.list.length) event.redo();
+ },
+ },
+ },
+ },
+ //蒲元衍生
+ zhaogujing_skill:{
+ equipSkill:true,
trigger:{player:'phaseUseEnd'},
direct:true,
- audio:2,
filter:function(event,player){
- return player.countCards('h')>0&&(_status.connectMode||player.countCards('h','sha')>0)&&!player.getExpansions('rechunlao').length;
+ return player.hasCard(function(card){
+ if(_status.connectMode) return true;
+ var type=get.type(card,player);
+ return type=='basic'||type=='trick';
+ },'h');
},
+ content:function(){
+ 'step 0'
+ player.chooseCard('h',get.prompt('zhaogujing_skill'),'展示并视为使用一张基本牌或普通锦囊牌',function(card,player){
+ var type=get.type(card,player);
+ return type=='basic'||type=='trick';
+ }).set('ai',function(card){
+ var player=_status.event.player,name=get.name(card,player);
+ if(name=='jiu') return 0;
+ return player.getUseValue({
+ name:name,
+ nature:get.nature(card,player),
+ isCard:true,
+ })
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('zhaogujing_skill');
+ player.showCards(result.cards,get.translation(player)+'发动了【照骨镜】');
+ var card={
+ name:get.name(result.cards[0],player),
+ nature:get.nature(result.cards[0],player),
+ isCard:true,
+ }
+ player.chooseUseTarget(card,true,false);
+ }
+ },
+ },
+ sanlve_skill:{
+ equipSkill:true,
+ mod:{
+ maxHandcard:function(player,num){
+ return num+1;
+ },
+ attackRange:function(player,num){
+ return num+1;
+ },
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+1;
+ },
+ },
+ },
+ xuwangzhimian:{
+ equipSkill:true,
+ trigger:{player:'phaseDrawBegin2'},
+ forced:true,
+ filter:function(event,player){
+ return !event.numFixed;
+ },
+ content:function(){
+ trigger.num+=2;
+ },
+ mod:{
+ maxHandcard:function(player,num){
+ return num-1;
+ }
+ }
+ },
+ shufazijinguan_skill:{
+ equipSkill:true,
+ trigger:{
+ player:"phaseZhunbeiBegin",
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ player.chooseTarget(get.prompt('shufazijinguan'),'对一名其他角色造成1点伤害',function(card,player,target){
+ return player!=target;
+ }).set('ai',function(target){
+ return get.damageEffect(target,player,player);
+ });
+ "step 1"
+ if(result.bool){
+ player.logSkill('shufazijinguan_skill',result.targets[0]);
+ result.targets[0].damage();
+ }
+ },
+ },
+ qimenbagua:{
+ equipSkill:true,
+ trigger:{target:'useCardToBefore'},
+ forced:true,
+ filter:function(event,player){
+ if(event.card.name!='sha') return false;
+ if(player.hasSkillTag('unequip2')) return false;
+ if(event.player.hasSkillTag('unequip',false,{
+ name:event.card?event.card.name:null,
+ target:player,
+ card:event.card
+ })) return false;
+ return true;
+ },
+ content:function(){
+ trigger.cancel();
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target){
+ if(card.name!='sha') return;
+ if(target.hasSkillTag('unequip2')||player.hasSkillTag('unequip',false,{
+ name:card?card.name:null,
+ target:player,
+ card:card
+ })||player.hasSkillTag('unequip_ai',false,{
+ name:card?card.name:null,
+ target:player,
+ card:card
+ })) return;
+ return 'zerotarget';
+ }
+ }
+ }
+ },
+ guofengyupao:{
+ equipSkill:true,
+ mod:{
+ targetEnabled:function(card,player,target){
+ if(player==target||get.type(card)!='trick') return;
+ if(target.hasSkillTag('unequip2')) return;
+ if(player.hasSkillTag('unequip',false,{
+ name:card?card.name:null,
+ target:player,
+ card:card
+ })) return;
+ return false;
+ }
+ }
+ },
+ hongmianbaihuapao_skill:{
+ equipSkill:true,
+ trigger:{
+ player:"damageBegin4",
+ },
+ filter:function(event,player){
+ if(!lib.linked.contains(event.nature)) return false;
+ if(player.hasSkillTag('unequip2')) return false;
+ if(event.source&&event.source.hasSkillTag('unequip',false,{
+ name:event.card?event.card.name:null,
+ target:player,
+ card:event.card
+ })) return false;
+ return true;
+ },
+ forced:true,
+ content:function(){
+ trigger.cancel();
+ },
+ ai:{
+ nofire:true,
+ nothunder:true,
+ effect:{
+ target:function(card,player,target,current){
+ if(!get.tag(card,'natureDamage')) return;
+ if(!target.hasSkillTag('unequip2')&&!player.hasSkillTag('unequip',false,{
+ name:card?card.name:null,
+ target:player,
+ card:card
+ })&&!player.hasSkillTag('unequip_ai',false,{
+ name:card?card.name:null,
+ target:player,
+ card:card
+ })) return 'zerotarget';
+ },
+ },
+ },
+ },
+ linglongshimandai_skill:{
+ equipSkill:true,
+ trigger:{
+ target:"useCardToTargeted",
+ },
+ filter:function(event,player){
+ if(event.targets&&event.targets.length>1||event.player==player) return false;
+ if(player.hasSkillTag('unequip2')) return false;
+ var evt=event.getParent();
+ if(evt.player&&evt.player.hasSkillTag('unequip',false,{
+ name:evt.card?evt.card.name:null,
+ target:player,
+ card:evt.card
+ })) return false;
+ return true;
+ },
+ audio:true,
+ check:function(event,player){
+ return get.effect(player,event.card,event.player,player)<=0;
+ },
+ prompt2:(event)=>('进行一次判定。若结果为♥,则'+get.translation(event.card)+'对你无效'),
+ content:function(){
+ "step 0"
+ player.judge('linglongshimandai',function(card){return (get.suit(card)=='heart')?1.5:-0.5}).judge2=function(result){
+ return result.bool?true:false;
+ };
+ "step 1"
+ if(result.judge>0){
+ trigger.getParent().excluded.add(player);
+ }
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target,effect){
+ if(effect>0||player.hasSkillTag('unequip',false,{
+ name:card?card.name:null,
+ target:player,
+ card:card
+ })||player.hasSkillTag('unequip_ai',false,{
+ name:card?card.name:null,
+ target:player,
+ card:card
+ })) return;
+ return 0.75;
+ },
+ },
+ },
+ },
+ bintieshuangji_skill:{
+ trigger:{player:'shaMiss'},
+ filter:function(event,player){
+ return player.hp>0;
+ },
+ prompt2:function(event,player){
+ var prompt='失去1点体力,然后';
+ var cards=event.cards.filterInD();
+ if(cards.length) prompt+=('获得'+get.translation(cards)+'、');
+ prompt+='摸一张牌、本回合使用【杀】的次数上限+1';
+ return prompt;
+ },
+ check:function(event,player){
+ if(get.effect(player,{name:'losehp'},player,player)>0) return true;
+ return player.hp>event.target.hp&&event.cards.filterInD().length>0;
+ },
+ content:function(){
+ 'step 0'
+ player.loseHp();
+ 'step 1'
+ var cards=trigger.cards.filterInD();
+ if(cards.length) player.gain(cards,'gain2');
+ player.draw();
+ 'step 2'
+ player.addTempSkill('bintieshuangji_skill_effect');
+ player.addMark('bintieshuangji_skill_effect',1,false);
+ },
+ subSkill:{
+ effect:{
+ charlotte:true,
+ intro:{content:'使用【杀】的次数上限+#'},
+ onremove:true,
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+player.countMark('bintieshuangji_skill_effect');
+ },
+ },
+ },
+ },
+ },
+ chixueqingfeng:{
+ equipSkill:true,
+ trigger:{player:'useCardToPlayered'},
+ filter:function(event){
+ return event.card.name=='sha';
+ },
+ logTarget:'target',
+ forced:true,
+ content:function(){
+ var target=trigger.target;
+ target.addTempSkill('chixueqingfeng2');
+ target.markAuto('chixueqingfeng2',[trigger.card])
+ },
+ ai:{
+ unequip_ai:true,
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ if(arg&&arg.card&&arg.card.name=='sha') return true;
+ return false;
+ }
+ }
+ },
+ chixueqingfeng2:{
+ equipSkill:true,
+ trigger:{global:'useCardAfter'},
+ forced:true,
+ charlotte:true,
+ popup:false,
+ firstDo:true,
+ onremove:true,
+ filter:function(event,player){
+ return player.storage.chixueqingfeng2&&player.storage.chixueqingfeng2.contains(event.card);
+ },
+ content:function(){
+ player.storage.chixueqingfeng2.remove(trigger.card);
+ if(!player.storage.chixueqingfeng2.length) player.removeSkill('chixueqingfeng2');
+ },
+ mark:true,
+ marktext:'※',
+ intro:{
+ content:'防具技能无效,且不能使用或打出手牌',
+ },
+ mod:{
+ cardEnabled2:function(card){
+ if(get.position(card)=='h') return false;
+ },
+ },
+ ai:{
+ unequip2:true,
+ },
+ },
+ guilongzhanyuedao:{
+ equipSkill:true,
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ return event.card&&event.card.name=='sha'&&get.color(event.card)=='red';
+ },
+ content:function(){
+ trigger.directHit.addArray(game.players);
+ },
+ ai:{
+ unequip_ai:true,
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ if(arg&&arg.card&&arg.card.name=='sha'&&get.color(arg.card)=='red') return true;
+ return false;
+ }
+ }
+ },
+ wushuangfangtianji_skill:{
+ equipSkill:true,
+ trigger:{
+ source:"damageSource",
+ },
+ filter:function(event,player){
+ return event.card&&event.card.name=='sha'&&event.getParent().type=='card';
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var target=trigger.player;
+ var choices=['摸一张牌'];
+ if(target.hasCard(function(card){
+ return lib.filter.canBeDiscarded(card,player,target);
+ },'he')) choices.push('弃置'+get.translation(target)+'的一张牌');
+ player.chooseControl('cancel2').set('choiceList',choices).set('prompt',get.prompt('wushuangfangtianji_skill')).set('ai',function(){
+ var player=_status.event.player,target=_status.event.getTrigger().player;
+ if(target.hasCard(function(card){
+ return lib.filter.canBeDiscarded(card,player,target);
+ },'he')&&get.effect(target,{name:'guohe_copy2'},player,player)>get.effect(player,{name:'wuzhong'},player,player)/2) return 1;
+ return 0;
+ });
+ 'step 1'
+ if(result.control=='cancel2') return;
+ if(result.index==0){
+ player.logSkill('wushuangfangtianji_skill');
+ player.draw();
+ }
+ else{
+ var target=trigger.player;
+ player.logSkill('wushuangfangtianji_skill',target);
+ player.discardPlayerCard(target,'he',true);
+ }
+ },
+ },
+ //芮姬
+ qiaoli:{
+ audio:2,
+ enable:'chooseToUse',
+ viewAs:{name:'juedou'},
+ viewAsFilter:function(player){
+ return player.hasCard(function(card){
+ return get.type(card)=='equip';
+ },'ehs')
+ },
+ filterCard:{type:'equip'},
+ check:function(card){
+ if(get.position(card)=='e') return 7.5-get.value(card);
+ return 12-_status.event.player.getUseValue(card);
+ },
+ position:'hes',
+ group:['qiaoli_effect','qiaoli_gain','qiaoli_norespond'],
+ ai:{
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ return arg&&arg.card&&arg.card.name=='juedou'&&_status.event.skill=='qiaoli';
+ },
+ },
+ subSkill:{
+ norespond:{
+ trigger:{player:'useCard1'},
+ forced:true,
+ charlotte:true,
+ popup:false,
+ filter:function(event,player){
+ if(event.skill!='qiaoli') return false;
+ var card=event.cards[0];
+ return get.subtype(card)!='equip1';
+ },
+ content:function(){
+ trigger.directHit.addArray(game.filterPlayer(function(current){
+ return current!=player;
+ }));
+ },
+ },
+ effect:{
+ trigger:{player:'useCardAfter'},
+ forced:true,
+ charlotte:true,
+ popup:false,
+ filter:function(event,player){
+ if(event.skill!='qiaoli') return false;
+ var card=event.cards[0];
+ return get.subtype(card)=='equip1';
+ },
+ content:function(){
+ 'step 0'
+ var card=trigger.cards[0];
+ var num=1;
+ var info=get.info(card,false);
+ if(info&&info.distance&&typeof info.distance.attackFrom=='number') num-=info.distance.attackFrom;
+ player.draw(num);
+ 'step 1'
+ var cards=result;
+ if(get.itemtype(cards)!='cards'){
+ event.finish(5);
+ return;
+ }
+ var hs=player.getCards('h');
+ cards=cards.filter(function(card){
+ return hs.contains(card);
+ });
+ if(!cards.length){
+ event.finish(5);
+ return;
+ }
+ event.cards=cards;
+ if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
+ event.given_map={};
+ 'step 2'
+ player.chooseCardTarget({
+ filterCard:function(card){
+ return _status.event.cards.contains(card)&&!card.hasGaintag('qiaoli_given');
+ },
+ cards:cards,
+ filterTarget:lib.filter.notMe,
+ selectCard:[1,cards.length],
+ prompt:'是否将获得的牌分配给其他角色?',
+ ai1:function(card){
+ return -1;
+ },
+ ai2:function(target){
+ return -1;
+ },
+ });
+ 'step 3'
+ if(result.bool){
+ var res=result.cards,target=result.targets[0].playerid;
+ player.addGaintag(res,'qiaoli_given');
+ cards.removeArray(res);
+ if(!event.given_map[target]) event.given_map[target]=[];
+ event.given_map[target].addArray(res);
+ if(cards.length) event.goto(2);
+ }
+ 'step 4'
+ if(_status.connectMode){
+ game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
+ }
+ var map=[],cards=[];
+ for(var i in event.given_map){
+ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
+ player.line(source,'green');
+ map.push([source,event.given_map[i]]);
+ cards.addArray(event.given_map[i]);
+ }
+ if(map.length) game.loseAsync({
+ gain_list:map,
+ player:player,
+ cards:cards,
+ giver:player,
+ animate:'giveAuto',
+ }).setContent('gaincardMultiple');
+ },
+ },
+ gain:{
+ audio:'qiaoli',
+ trigger:{player:'phaseJieshuBegin'},
+ forced:true,
+ filter:function(event,player){
+ return player.hasHistory('useCard',function(evt){
+ return evt.skill=='qiaoli';
+ })
+ },
+ content:function(){
+ var card=get.cardPile2(function(card){
+ return get.type(card)=='equip';
+ });
+ if(card) player.gain(card,'gain2');
+ },
+ },
+ },
+ },
+ qingliang:{
+ audio:2,
+ trigger:{target:'useCardToTarget'},
+ usable:1,
+ filter:function(event,player){
+ return player!=event.player&&player.countCards('h')>0;
+ },
+ logTarget:'player',
+ check:function(event,player){
+ if(get.attitude(player,event.player)>0||event.player.hasSkillTag('nogain')) return true;
+ var eff=get.effect(player,event.card,event.player,player);
+ if(eff>=0) return false;
+ var suits=[],banned=[],hs=player.getCards('h');
+ for(var i of hs){
+ var suit=get.suit(i,player);
+ suits.add(suit);
+ if(!lib.filter.cardDiscardable(i,player,'qingliang')) banned.add(suit);
+ }
+ suits.removeArray(banned);
+ for(var i of suits){
+ var cards=player.getCards('h',function(card){
+ return get.suit(card,player)==i;
+ });
+ if((-eff/2-get.value(cards,player))>0) return true;
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ player.showHandcards(get.translation(player)+'发动了【清靓】');
+ 'step 1'
+ var suits=[],banned=[],hs=player.getCards('h');
+ for(var i of hs){
+ var suit=get.suit(i,player);
+ suits.add(suit);
+ if(!lib.filter.cardDiscardable(i,player,'qingliang')) banned.add(suit);
+ }
+ if(suits.length>banned.length){
+ player.chooseControl().set('choiceList',[
+ '和'+get.translation(trigger.player)+'各摸一张牌',
+ '弃置一种花色的所有手牌,令'+get.translation(trigger.card)+'对自己无效',
+ ]).set('ai',function(){
+ var player=_status.event.player,event=_status.event.getTrigger();
+ if(get.attitude(player,event.player)>0||event.player.hasSkillTag('nogain')) return 0;
+ return 1;
+ });
+ event.suits=suits;
+ suits.removeArray(banned);
+ suits.sort();
+ }
+ else{
+ event._result={index:0};
+ }
+ 'step 2'
+ if(result.index==0){
+ var list=[player,trigger.player].sortBySeat();
+ list[0].draw('nodelay');
+ list[1].draw();
+ event.finish();
+ }
+ else{
+ if(event.suits.length==1) event._result={control:event.suits[0]};
+ else player.chooseControl(event.suits).set('prompt','选择弃置一种花色的所有牌').set('ai',function(){
+ var player=_status.event.player,list=_status.event.controls.slice(0);
+ var gett=function(suit){
+ var cards=player.getCards('h',function(card){
+ return get.suit(card,player)==suit;
+ });
+ return get.value(cards);
+ }
+ return list.sort(function(b,a){
+ return gett(b)-gett(a);
+ })[0];
+ });
+ }
+ 'step 3'
+ var cards=player.getCards('h',function(card){
+ return get.suit(card)==result.control;
+ });
+ if(cards.length) player.discard(cards);
+ trigger.targets.remove(player);
+ trigger.getParent().triggeredTargets2.remove(player);
+ trigger.untrigger();
+ },
+ },
+ //卫兹
+ yuanzi:{
+ audio:2,
+ trigger:{global:'phaseZhunbeiBegin'},
+ logTarget:'player',
+ filter:function(event,player){
+ return player!=event.player&&event.player.isIn()&&player.countCards('h')>0&&!player.hasSkill('yuanzi_round',null,null,false);
+ },
+ check:function(event,player){
+ if(get.attitude(player,event.player)<=4) return false;
+ if(event.player.hasJudge('lebu')) return false;
+ return game.hasPlayer(function(current){
+ return event.player!=player&&game.hasPlayer(function(current){
+ return current!=player&¤t!=event.player&&event.player.inRange(current)&&get.attitude(event.player,current)<0;
+ });
+ })
+ },
+ content:function(){
+ var cards=player.getCards('h');
+ player.give(cards,trigger.player);
+ player.addTempSkill('yuanzi_effect');
+ player.addTempSkill('yuanzi_round','roundStart');
+ },
+ subSkill:{
+ effect:{
+ charlotte:true,
+ audio:'yuanzi',
+ trigger:{global:'damageSource'},
+ forced:true,
+ filter:function(event,player){
+ var source=event.source;
+ return source&&source==_status.currentPhase&&player.countCards('h')<=source.countCards('h');
+ },
+ content:function(){
+ player.draw(2);
+ },
+ },
+ round:{charlotte:true},
+ },
+ },
+ liejie:{
+ audio:2,
+ trigger:{player:'damageEnd'},
+ direct:true,
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ content:function(){
+ 'step 0'
+ var source=trigger.source;
+ var prompt2='弃置至多三张牌并摸等量的牌';
+ if(source) prompt2+=(',若弃置的牌中有红色牌,则弃置'+get.translation(source)+'至多等量的牌');
+ var next=player.chooseToDiscard('he',[1,3],get.prompt('liejie'),prompt2);
+ next.set('ai',function(card){
+ return 6-get.value(card);
+ })
+ if(source) next.logSkill=['liejie',source];
+ else next.logSkill='liejie';
+ 'step 1'
+ if(result.bool){
+ var cards=result.cards;
+ player.draw(cards.length);
+ if(trigger.source){
+ var num=cards.filter(function(i){
+ return get.color(i,player)=='red';
+ }).length;
+ if(num>0) player.discardPlayerCard(trigger.source,'he',[1,num]).set('forceAuto',true);
+ }
+ }
+ },
+ },
+ //滕芳兰
+ luochong:{
+ audio:2,
+ trigger:{player:['phaseZhunbeiBegin','damageEnd']},
+ direct:true,
+ filter:function(event,player){
+ if(event.name=='damage'){
+ var history=player.getHistory('damage');
+ if(history.indexOf(event)!=0) return false;
+ }
+ var storage1=player.storage.luochong_round,storage2=player.getStorage('luochong');
+ if(!storage1) storage1=[[],[]];
+ for(var i=0;i<4;i++){
+ if(!storage1[0].contains(i)&&!storage2.contains(i)&&game.hasPlayer(function(current){
+ return !storage1[1].contains(current)&&lib.skill.luochong.filterx[i](current);
+ })) return true;
+ }
+ return false;
+ },
+ filterx:[
+ (target)=>target.isDamaged(),
+ ()=>true,
+ (target)=>target.countCards('he')>0,
+ ()=>true,
+ ],
+ onremove:true,
+ content:function(){
+ 'step 0'
+ var list=[];
+ var choiceList=[
+ '令一名角色回复1点体力。',
+ '令一名角色失去1点体力。',
+ '令一名角色弃置两张牌。',
+ '令一名角色摸两张牌。',
+ ];
+ var storage1=player.storage.luochong_round,storage2=player.getStorage('luochong');
+ if(!storage1) storage1=[[],[]];
+ for(var i=0;i<4;i++){
+ if(storage2.contains(i)){
+ choiceList[i]=(''+choiceList[i]+'');
+ }
+ else if(storage1[0].contains(i)||!game.hasPlayer(function(current){
+ return !storage1[1].contains(current)&&lib.skill.luochong.filterx[i](current);
+ })){
+ choiceList[i]=(''+choiceList[i]+'');
+ }
+ else list.push('选项'+get.cnNumber(i+1,true))
+ }
+ list.push('cancel2');
+ player.chooseControl(list).set('prompt',get.prompt('luochong')).set('choiceList',choiceList).set('ai',function(){
+ var player=_status.event.player;
+ var list=_status.event.controls.slice(0);
+ var listx=(player.storage.luochong_round||[[],[]])[1];
+ var gett=function(choice){
+ if(choice=='cancel2') return 0.1;
+ var max=0,func={
+ 选项一:function(current){
+ if(current.isDamaged()) max=Math.max(max,get.recoverEffect(current,player,player));
+ },
+ 选项二:function(target){
+ max=Math.max(max,get.effect(target,{name:'losehp'},player,player));
+ },
+ 选项三:function(target){
+ var num=target.countDiscardableCards(player,'he');
+ if(num>0) max=Math.max(max,Math.sqrt(Math.min(2,num))*get.effect(target,{name:'guohe_copy2'},player,player));
+ },
+ 选项四:function(target){
+ max=Math.max(max,get.effect(target,{name:'wuzhong'},player,player));
+ },
+ }[choice];
+ game.countPlayer(function(current){
+ if(!listx.contains(current)) func(current);
+ });
+ return max;
+ };
+ return list.sort(function(a,b){
+ return gett(b)-gett(a);
+ })[0];
+ });
+ 'step 1'
+ if(result.control!='cancel2'){
+ var index=['选项一','选项二','选项三','选项四'].indexOf(result.control);
+ event.index=index;
+ var listx=(player.storage.luochong_round||[[],[]])[1];
+ var list=[
+ ['选择一名角色,令其回复1点体力',function(target){
+ var player=_status.event.player;
+ return get.recoverEffect(target,player,player);
+ }],
+ ['选择一名角色,令其失去1点体力',function(target){
+ return get.effect(target,{name:'losehp'},player,player);
+ }],
+ ['选择一名角色,令其弃置两张牌',function(target){
+ var player=_status.event.player;
+ return get.effect(target,{name:'guohe_copy2'},player,player)*Math.sqrt(Math.min(2,target.countCards('he')));
+ }],
+ ['选择一名角色,令其摸两张牌',function(target){
+ var player=_status.event.player;
+ return get.effect(target,{name:'wuzhong'},player,player);
+ }]
+ ][index];
+ var targets=game.filterPlayer(function(current){
+ return !listx.contains(current)&&lib.skill.luochong.filterx[event.index](current);
+ })
+ var next=player.chooseTarget(list[0],true,function(card,player,target){
+ return _status.event.targets.contains(target);
+ });
+ next.set('targets',targets);
+ next.set('ai',list[1]);
+ }
+ else event.finish();
+ 'step 2'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('luochong',target);
+ if(player!=target) player.addExpose(0.2);
+ player.addTempSkill('luochong_round','roundStart');
+ if(!player.storage.luochong_round) player.storage.luochong_round=[[],[]];
+ player.storage.luochong_round[0].push(event.index);
+ player.storage.luochong_round[1].push(target);
+ switch(event.index){
+ case 0:
+ target.recover();
+ break;
+ case 1:
+ target.loseHp();
+ break;
+ case 2:
+ target.chooseToDiscard(true,'he',2);
+ break;
+ case 3:
+ target.draw(2);
+ break;
+ }
+ }
+ },
+ subSkill:{
+ round:{
+ charlotte:true,
+ onremove:true,
+ },
+ },
+ },
+ aichen:{
+ audio:2,
+ trigger:{player:'dying'},
+ forced:true,
+ filter:function(event,player){
+ return player.hasSkill('luochong',null,null,false)&&player.getStorage('luochong').length<3;
+ },
+ content:function(){
+ 'step 0'
+ //var num=1-player.hp;
+ //if(num>0) player.recover(num);
+ var list=[];
+ var choiceList=[
+ '令一名角色回复1点体力。',
+ '令一名角色失去1点体力。',
+ '令一名角色弃置两张牌。',
+ '令一名角色摸两张牌。',
+ ];
+ var storage2=player.getStorage('luochong');
+ for(var i=0;i<4;i++){
+ if(storage2.contains(i)){
+ choiceList[i]=(''+choiceList[i]+'');
+ }
+ else list.push('选项'+get.cnNumber(i+1,true))
+ }
+ player.chooseControl(list).set('prompt','哀尘:选择移去一个〖落宠〗的选项').set('choiceList',choiceList).set('ai',function(){
+ var controls=_status.event.controls.slice(0);
+ var list=['选项三','选项四','选项二','选项一'];
+ for(var i of list){
+ if(controls.contains(i)) return i;
+ }
+ return 0;
+ });
+ 'step 1'
+ var index=['选项一','选项二','选项三','选项四'].indexOf(result.control);
+ player.markAuto('luochong',[index]);
+ game.log(player,'移去了','#g【落宠】','的','#y'+[
+ '令一名角色回复1点体力',
+ '令一名角色失去1点体力',
+ '令一名角色弃置两张牌',
+ '令一名角色摸两张牌',
+ ][index],'的选项');
+ },
+ },
+ //SP孟获
+ spmanwang:{
+ audio:2,
+ enable:'phaseUse',
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ filterCard:true,
+ position:'he',
+ selectCard:[1,Infinity],
+ check:function(card){
+ var player=_status.event.player;
+ var max=Math.min(player.isDamaged()?3:2,4-player.countMark('spmanwang'));
+ if(!max&&!player.hasSkill('sppanqin')) return 0;
+ if(max==0&&ui.selected.length>0) return 0;
+ return 7-ui.selected.cards.length-get.value(card);
+ },
+ content:function(){
+ var num=Math.min(cards.length,4-player.countMark('spmanwang'));
+ if(num>=1) player.addSkill('sppanqin');
+ if(num>=2) player.draw();
+ if(num>=3) player.recover();
+ if(num>=4){
+ player.draw(2);
+ player.removeSkill('sppanqin');
+ }
+ },
+ intro:{content:'已经移去过#个选项'},
+ ai:{
+ order:2,
+ result:{
+ player:function(player,target){
+ if(player.getUseValue({name:'nanman'})<=0) return 0;
+ if(player.getStat('skill').spmanwang&&player.hasSkill('sppanqin')) return 0;
+ return 1;
+ },
+ },
+ },
+ derivation:'sppanqin',
+ },
+ sppanqin:{
+ audio:2,
+ trigger:{player:['phaseUseEnd','phaseDiscardEnd']},
+ filter:function(event,player){
+ var cards=[],bool=true;
+ player.getHistory('lose',function(evt){
+ if(!bool||evt.type!='discard'||evt.getParent(event.name)!=event) return false;
+ for(var i of evt.cards2){
+ if(get.position(i,true)=='d'){
+ cards.add(i);
+ if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) bool=false;
+ }
+ }
+ });
+ if(!bool||!cards.length) return false;
+ return player.hasUseTarget(get.autoViewAs({name:'nanman'},cards));
+ },
+ prompt2:function(event,player){
+ var cards=[];
+ player.getHistory('lose',function(evt){
+ if(evt.type!='discard'||evt.getParent(event.name)!=event) return false;
+ for(var i of evt.cards2){
+ if(get.position(i,true)=='d'){
+ cards.add(i);
+ }
+ }
+ });
+ return '将'+get.translation(cards)+'(共计'+get.cnNumber(cards.length)+'张牌)当做【南蛮入侵】使用'
+ },
+ check:function(event,player){
+ var cards=[],bool=true;
+ player.getHistory('lose',function(evt){
+ if(!bool||evt.type!='discard'||evt.getParent(event.name)!=event) return false;
+ for(var i of evt.cards2){
+ if(get.position(i,true)=='d'){
+ cards.add(i);
+ if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) bool=false;
+ }
+ }
+ });
+ if(!bool||!cards.length) return false;
+ return player.hasValueTarget(get.autoViewAs({name:'nanman'},cards));
+ },
+ content:function(){
+ 'step 0'
+ var cards=[];
+ player.getHistory('lose',function(evt){
+ if(evt.type!='discard'||evt.getParent(trigger.name)!=trigger) return false;
+ for(var i of evt.cards2){
+ if(get.position(i,true)=='d'){
+ cards.add(i);
+ }
+ }
+ });
+ player.chooseUseTarget(true,{name:'nanman'},cards);
+ player.addTempSkill('sppanqin_eff');
+ },
+ subSkill:{
+ eff:{
+ trigger:{player:'useCard'},
+ charlotte:true,
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event.card.name=='nanman'&&event.getParent(2).name=='sppanqin'&&player.countMark('spmanwang')<4&&player.hasSkill('spmanwang',null,null,false)&&event.cards.length<=event.targets.length;
+ },
+ content:function(){
+ player.addMark('spmanwang',1,false);
+ switch(player.countMark('spmanwang')){
+ case 1:
+ player.draw(2);
+ player.removeSkill('sppanqin');
+ break;
+ case 2:
+ player.recover();
+ break;
+ case 3:
+ player.draw();
+ break;
+ case 4:
+ player.addSkill('sppanqin');
+ break;
+ }
+ },
+ }
+ }
+ },
+ //清河公主
+ zengou:{
+ audio:2,
+ trigger:{global:'useCard'},
+ filter:function(event,player){
+ return event.card.name=='shan'&&player.inRange(event.player)&&(player.hp>0||player.hasCard(function(card){
+ return get.type(card)!='basic'&&lib.filter.cardDiscardable(card,player,'zengou');
+ },'eh'))
+ },
+ logTarget:'player',
+ check:function(event,player){
+ if(get.attitude(player,event.player)>=0) return false;
+ if(get.damageEffect(event.player,event.getParent(3).player,player,get.nature(event.card))<=0) return false;
+ if(player.hasCard(function(card){
+ return get.type(card)!='basic'&&get.value(card)<7&&lib.filter.cardDiscardable(card,player,'zengou');
+ },'eh')) return true;
+ return player.hp>Math.max(1,event.player.hp);
+ },
+ content:function(){
+ 'step 0'
+ trigger.all_excluded=true;
+ var str='弃置一张非基本牌';
+ if(player.hp>0) str+=',或点「取消」失去一点体力';
+ var next=player.chooseToDiscard(str,function(card){
+ return get.type(card)!='basic';
+ },'he').set('ai',function(card){
+ return 7-get.value(card);
+ });
+ if(player.hp<=0) next.set('forced',true);
+ 'step 1'
+ if(!result.bool) player.loseHp();
+ 'step 2'
+ var cards=trigger.cards.filterInD();
+ if(cards.length) player.gain(cards,'gain2');
+ },
+ },
+ qhzhangji:{
+ audio:2,
+ trigger:{global:'phaseJieshuBegin'},
+ direct:true,
+ filter:function(event,player){
+ if(!event.player.isIn()) return false;
+ if(player.getHistory('sourceDamage').length>0) return true;
+ if(player.getHistory('damage').length>0) return event.player.countCards('he')>0;
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ event.target=trigger.player;
+ if(player.getHistory('sourceDamage').length) player.chooseBool(get.prompt('qhzhangji',event.target),'令'+get.translation(event.target)+'摸两张牌').set('choice',get.attitude(player,event.target)>0).set('ai',()=>_status.event.choice);
+ else event.goto(2);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('qhzhangji',target);
+ event.logged=true;
+ target.draw(2);
+ }
+ 'step 2'
+ if(target.isIn()&&target.countCards('he')>0&&player.getHistory('damage').length>0) player.chooseBool(get.prompt('qhzhangji',event.target),'令'+get.translation(event.target)+'弃置两张牌').set('choice',get.attitude(player,event.target)<0).set('ai',()=>_status.event.choice);
+ else event.finish();
+ 'step 3'
+ if(result.bool){
+ if(!event.logged) player.logSkill('qhzhangji',target);
+ target.chooseToDiscard('he',true,2);
+ }
+ },
+ },
+ //十周年夏侯霸
+ rebaobian:{
+ audio:2,
+ trigger:{player:'damageEnd'},
+ filter:function(event,player){
+ for(var i of lib.skill.rebaobian.derivation){
+ if(!player.hasSkill(i,null,null,false)) return true;
+ }
+ return false;
+ },
+ forced:true,
+ content:function(){
+ for(var i of lib.skill.rebaobian.derivation){
+ if(!player.hasSkill(i,null,null,false)){
+ player.addSkillLog(i);
+ break;
+ }
+ }
+ },
+ ai:{
+ maixie:true,
+ effect:{
+ target:function(card,player,target){
+ if(get.tag(card,'damage')&&!target.hasSkill('oltiaoxin',null,null,false)){
+ if(!target.hasFriend()) return;
+ if(target.hp>=4) return [0,1];
+ }
+ }
+ }
+ },
+ derivation:['oltiaoxin','new_repaoxiao','xinshensu'],
+ },
+ //范强张达
+ yuanchou:{
+ audio:2,
+ trigger:{
+ player:'useCardToPlayered',
+ target:'useCardToTargeted',
+ },
+ filter:function(event){
+ return event.card.name=='sha'&&get.color(event.card)=='black';
+ },
+ forced:true,
+ logTarget:'target',
+ content:function(){
+ trigger.target.addTempSkill('qinggang2');
+ trigger.target.storage.qinggang2.add(trigger.card);
+ },
+ ai:{
+ unequip_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ if(arg&&arg.name=='sha'&&get.color(arg.card)=='black') return true;
+ return false;
+ }
+ },
+ global:'yuanchou_ai',
+ subSkill:{
+ ai:{
+ unequip_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ if(arg&&arg.name=='sha'&&get.color(arg.card)=='black'&&arg.target&&arg.target.hasSkill('yuanchou')) return true;
+ return false;
+ }
+ },
+ },
+ },
+ juesheng:{
+ audio:2,
+ enable:'phaseUse',
+ limited:true,
+ skillAnimation:true,
+ animationColor:'orange',
+ viewAs:{name:'juedou',isCard:true},
+ filterCard:()=>false,
+ selectCard:-1,
+ precontent:function(){
+ player.awakenSkill('juesheng');
+ player.addTempSkill('juesheng_counter');
+ },
+ ai:{
+ result:{
+ player:function(player,target){
+ return target.getAllHistory('useCard',(evt)=>evt.card.name=='sha').length*lib.card.juedou.ai.result.player.apply(this,arguments);
+ },
+ target:function(player,target){
+ var num=target.getAllHistory('useCard',(evt)=>evt.card.name=='sha').length;
+ if(numevt.card.name=='sha').length);
+ target.addTempSkill('juesheng',{player:'phaseAfter'});
+ },
+ },
+ },
+ },
+ //田之间
+ saodi:{
+ audio:2,
+ trigger:{
+ player:'useCardToPlayer',
+ },
+ direct:true,
+ filter:function(event,player){
+ if(event.targets.length!=1||event.target==player||event.target.hasSkill('nodis')) return false;
+ if(event.card.name!='sha'&&get.type(event.card)!='trick') return false;
+ var target=event.target;
+ var left=[],right=[],left2=player,right2=player;
+ while(left2!=target&&right2!=target){
+ left2=left2.getPrevious();
+ right2=right2.getNext();
+ if(left2!=target) left.push(left2);
+ if(right2!=target) right.push(right2);
+ }
+ if(target==left2){
+ for(var i of left){
+ if(lib.filter.targetEnabled2(event.card,player,i)) return true;
+ }
+ }
+ if(target==right2){
+ for(var i of right){
+ if(lib.filter.targetEnabled2(event.card,player,i)) return true;
+ }
+ }
+ return false;
+ },
+ aiJudge:function(card,player,target,bool){
+ var left=[],right=[],left2=player,right2=player,left3=false,right3=false;
+ var eff_left=0,eff_right=0;
+ while(left2!=target&&right2!=target){
+ left2=left2.getPrevious();
+ right2=right2.getNext();
+ if(left2!=target) left.push(left2);
+ if(right2!=target) right.push(right2);
+ }
+ if(target==left2){
+ for(var i of left){
+ if(lib.filter.targetEnabled2(card,player,i)){
+ left3=true;
+ eff_left+=get.effect(i,card,player,player);
+ }
+ }
+ }
+ if(target==right2){
+ for(var i of right){
+ if(lib.filter.targetEnabled2(card,player,i)){
+ right3=true;
+ eff_right+=get.effect(i,card,player,player);
+ }
+ }
+ }
+ if(left3&&right3){
+ if(!bool) return Math.max(eff_left,eff_right);
+ if(eff_left>Math.max(0,eff_right)) return '↖顺时针';
+ if(eff_right>Math.max(0,eff_left)) return '逆时针↗';
+ return 'cancel2';
+ }
+ else if(left3){
+ if(bool) return eff_left>0?'↖顺时针':'cancel2';
+ return eff_left;
+ }
+ else if(right3){
+ if(bool) return eff_right>0?'逆时针↗':'cancel2';
+ return eff_right;
+ }
+ else return bool?'cancel2':0;
+ },
+ content:function(){
+ 'step 0'
+ var choices=[];
+ var target=trigger.target;
+ var left=[],right=[],left2=player,right2=player;
+ while(left2!=target&&right2!=target){
+ left2=left2.getPrevious();
+ right2=right2.getNext();
+ if(left2!=target) left.push(left2);
+ if(right2!=target) right.push(right2);
+ }
+ if(target==left2){
+ for(var i of left){
+ if(lib.filter.targetEnabled2(trigger.card,player,i)){
+ choices.push('↖顺时针');
+ break;
+ }
+ }
+ }
+ if(target==right2){
+ for(var i of right){
+ if(lib.filter.targetEnabled2(trigger.card,player,i)){
+ choices.push('逆时针↗');
+ break;
+ }
+ }
+ }
+ choices.push('cancel2');
+ player.chooseControl(choices).set('prompt',get.prompt('saodi')).set('prompt2','令自己和'+get.translation(trigger.target)+'某个方向之间的所有角色均成为'+get.translation(trigger.card)+'的目标').set('choices',choices).set('ai',function(){
+ var evt=_status.event.getTrigger();
+ return lib.skill.saodi.aiJudge(evt.card,evt.player,evt.target,true);
+ });
+ 'step 1'
+ if(result.control!='cancel2'){
+ var targets=[];
+ if(result.control=='↖顺时针'){
+ var current=player.getPrevious();
+ while(current!=trigger.target){
+ if(lib.filter.targetEnabled2(trigger.card,player,current)) targets.push(current);
+ current=current.getPrevious();
+ }
+ }
+ else{
+ var current=player.getNext();
+ while(current!=trigger.target){
+ if(lib.filter.targetEnabled2(trigger.card,player,current)) targets.push(current);
+ current=current.getNext();
+ }
+ }
+ event.targets=targets;
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ }
+ else event.finish();
+ 'step 2'
+ player.logSkill('saodi',targets);
+ trigger.targets.addArray(targets);
+ },
+ ai:{
+ effect:{
+ player_use:function(card,player,target){
+ if(!target||player._saodi_judging||ui.selected.targets.length||player==target||target.hasSkill('nodis')) return;
+ if(typeof card!='object'||card.name!='sha'&&get.type(card)!='trick') return false;
+ player._saodi_judging=true;
+ var effect=lib.skill.saodi.aiJudge(card,player,target);
+ delete player._saodi_judging;
+ if(effect>0) return [1,effect/Math.max(0.01,get.attitude(player,player))];
+ },
+ },
+ },
+ },
+ zhuitao:{
+ audio:2,
+ direct:true,
+ locked:false,
+ trigger:{player:'phaseZhunbeiBegin'},
+ filter:function(event,player){
+ var storage=player.getStorage('zhuitao');
+ return game.hasPlayer(function(current){
+ return current!=player&&!storage.contains(current);
+ });
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('zhuitao'),'令自己至一名其他角色的距离-1',function(card,player,target){
+ return target!=player&&!player.getStorage('zhuitao').contains(target);
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target);
+ if(att<0&&get.distance(player,target)==2) return 100;
+ return get.distance(player,target)*(1-get.sgn(att)/3);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('zhuitao',result.targets[0]);
+ player.markAuto('zhuitao',result.targets);
+ game.delayx();
+ }
+ },
+ intro:{
+ content:'至$的距离-1',
+ onunmark:true,
+ },
+ onremove:true,
+ mod:{
+ globalFrom:function(player,target,distance){
+ if(player.getStorage('zhuitao').contains(target)) return distance-1;
+ },
+ },
+ group:'zhuitao_remove',
+ subSkill:{
+ remove:{
+ audio:'zhuitao',
+ trigger:{
+ source:'damageSource',
+ },
+ forced:true,
+ filter:function(event,player){
+ return player.getStorage('zhuitao').contains(event.player);
+ },
+ logTarget:'player',
+ content:function(){
+ player.unmarkAuto('zhuitao',[trigger.player]);
+ },
+ },
+ },
+ },
+ //生鱼片
+ olfengji:{
+ audio:2,
+ trigger:{player:'phaseDrawBegin2'},
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ return !player.numFixed;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget('丰积:请选择增加摸牌的目标','令自己本回合的额定摸牌数-1,且目标下回合的额定摸牌数+2。或者点击「取消」,令自己的额定摸牌数+1',lib.filter.notMe).set('ai',function(target){
+ var player=_status.event.player;
+ if(target.hasJudge('lebu')||target.hasJudge('bingliang')) return 0;
+ var att=get.attitude(player,target),dist=get.distance(player,target,'absolute');
+ if(_status.event.goon){
+ return att/dist;
+ }
+ if(game.countPlayer(function(current){
+ return current!=player&¤t!=target&&get.attitude(player,current)<0&&get.distance(player,current,'absolute')=target.hp) return 0;
+ return att/dist;
+ }).set('goon',player.skipList.contains('lebu'));
+ 'step 1'
+ if(!player.storage.olfengji_draw) player.storage.olfengji_draw=0;
+ if(result.bool){
+ var target=result.targets[0];
+ player.line(target,'thunder');
+ player.storage.olfengji_draw--;
+ if(!target.storage.olfengji_draw) target.storage.olfengji_draw=0;
+ target.storage.olfengji_draw+=2;
+ target.addTempSkill('olfengji_draw',{player:'phaseAfter'});
+ target.markSkill('olfengji_draw');
+ }
+ else{
+ player.storage.olfengji_draw++;
+ }
+ player.addTempSkill('olfengji_draw');
+ player.markSkill('olfengji_draw');
+ 'step 2'
+ player.chooseTarget('丰积:请选择增加使用杀次数的目标','令自己本回合使用杀的次数上限-1,且目标下回合使用杀的次数上限+2。或者点击「取消」,令自己使用杀的次数上限+1',lib.filter.notMe).set('ai',function(target){
+ var player=_status.event.player;
+ if(target.countMark('olfengji_draw')>0&&target.getCardUsable('sha')<2) return get.attitude(player,target);
+ return 0;
+ });
+ 'step 3'
+ if(!player.storage.olfengji_sha) player.storage.olfengji_sha=0;
+ if(result.bool){
+ var target=result.targets[0];
+ player.line(target,'fire');
+ player.storage.olfengji_sha--;
+ if(!target.storage.olfengji_sha) target.storage.olfengji_sha=0;
+ target.storage.olfengji_sha+=2;
+ target.addTempSkill('olfengji_sha',{player:'phaseAfter'});
+ target.markSkill('olfengji_sha');
+ }
+ else{
+ player.storage.olfengji_sha++;
+ }
+ player.addTempSkill('olfengji_sha');
+ player.markSkill('olfengji_sha');
+ },
+ subSkill:{
+ sha:{
+ charlotte:true,
+ onremove:true,
+ intro:{
+ content:function(storage){
+ return '使用【杀】的次数上限'+(storage>=0?'+':'')+storage;
+ },
+ },
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+player.storage.olfengji_sha;
+ },
+ },
+ },
+ draw:{
+ charlotte:true,
+ onremove:true,
+ intro:{
+ content:function(storage){
+ return '额定摸牌数'+(storage>=0?'+':'')+storage;
+ },
+ },
+ trigger:{player:'phaseDrawBegin2'},
+ forced:true,
+ filter:function(event,player){
+ return !event.numFixed;
+ },
+ content:function(){
+ trigger.num+=player.storage.olfengji_draw;
+ },
+ },
+ },
+ },
+ //朱灵
+ jixian:{
+ audio:2,
+ trigger:{player:'phaseDrawAfter'},
+ direct:true,
+ filter:function(event,player){
+ return game.hasPlayer(function(current){
+ return current!=player&&lib.skill.jixian.getNum(player,current)>0&&player.canUse('sha',current,false);
+ })
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('jixian'),'视为对一名满足条件的角色使用一张【杀】',function(card,player,target){
+ return target!=player&&lib.skill.jixian.getNum(player,target)>0&&player.canUse('sha',target,false);
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ return get.effect(target,{name:'sha'},player,player)*Math.sqrt(lib.skill.jixian.getNum(player,target));
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('jixian',target);
+ var num=lib.skill.jixian.getNum(player,target);
+ player.useCard({name:'sha',isCard:true},target,false);
+ if(num>0) player.draw(num);
+ }
+ else event.finish();
+ 'step 2'
+ if(!player.hasHistory('sourceDamage',function(evt){
+ var card=evt.card;
+ if(!card||card.name!='sha') return false;
+ var evtx=evt.getParent('useCard');
+ return evtx.card==card&&evtx.getParent()==event;
+ })) player.loseHp();
+ },
+ getNum:function(player,target){
+ var num=0;
+ if(target.isHealthy()) num++;
+ if(target.getEquips(2).length) num++;
+ var countSkill=function(player){
+ return player.getSkills(null,false,false).filter(function(skill){
+ var info=get.info(skill);
+ if(!info||info.charlotte) return false;
+ if(info.zhuSkill) return player.hasZhuSkill(skill);
+ return true;
+ }).length;
+ }
+ if(countSkill(player)(current==player||current.countCards('h')>=ph)).sortBySeat();
+ player.line(targets,'green');
+ event.targets=targets;
+ event.num=0;
+ 'step 1'
+ var target=targets[num];
+ event.num++;
+ if(target.isIn()){
+ event.target=target;
+ target.chooseBool('是否令'+(player==target?'自己':get.translation(player))+'摸一张牌?').set('ai',()=>get.attitude(_status.event.player,_status.event.getParent().player)>0);
+ }
+ else{
+ event.goto(event.num0&&player.getExpansions('spolzhouxuan').length<5;
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseCard('h',get.prompt('spolzhouxuan'),[1,5-player.getExpansions('spolzhouxuan').length],'将至多'+get.cnNumber(5-player.getExpansions('spolzhouxuan').length)+'张手牌置于武将牌上').set('ai',function(card){
+ if(ui.selected.cards.length>=player.needsToDiscard()) return 6-get.value(card);
+ return 100-get.useful(card);
+ });
+ 'step 1'
+ if(result.bool){
+ var cards=result.cards;
+ player.logSkill('spolzhouxuan');
+ player.addToExpansion(cards,player,'give').gaintag.add('spolzhouxuan');
+ }
+ },
+ marktext:'旋',
intro:{
content:'expansion',
markcount:'expansion',
@@ -8748,2528 +8351,1073 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
+ group:['spolzhouxuan_use','spolzhouxuan_discard'],
+ subSkill:{
+ use:{
+ audio:'spolzhouxuan',
+ trigger:{player:'useCard'},
+ filter:function(event,player){
+ return player.getExpansions('spolzhouxuan').length>0;
+ },
+ forced:true,
+ locked:false,
+ content:function(){
+ 'step 0'
+ player.loseToDiscardpile(player.getExpansions('spolzhouxuan').randomGet());
+ 'step 1'
+ var num=1;
+ if(!player.isMaxHandcard(true)) num+=player.getExpansions('spolzhouxuan').length;
+ player.draw(num);
+ },
+ },
+ discard:{
+ audio:'spolzhouxuan',
+ trigger:{player:'phaseUseEnd'},
+ filter:function(event,player){
+ return player.getExpansions('spolzhouxuan').length>0;
+ },
+ forced:true,
+ locked:false,
+ content:function(){
+ player.loseToDiscardpile(player.getExpansions('spolzhouxuan'));
+ },
+ },
+ },
+ },
+ //董昭
+ olxianlve:{
+ audio:2,
+ mode:['identity'],
+ trigger:{
+ global:'phaseZhunbeiBegin',
+ },
+ direct:true,
+ filter:function(event,player){
+ return event.player==game.zhu&&event.player.isZhu;
+ },
content:function(){
'step 0'
- player.chooseCard([1,Math.max(1,player.countCards('h','sha'))],get.prompt('rechunlao'),'将任意张【杀】置于武将牌上作为“醇”',{name:'sha'}).set('ai',function(){
- return 1;
+ var list=lib.inpile.filter(function(i){
+ return get.type2(i)=='trick';
+ }).map(function(i){
+ return ['锦囊','',i];
+ });
+ if(!list.length) event.finish();
+ else player.chooseButton([get.prompt('olxianlve'),[list,'vcard']]).set('ai',function(button){
+ switch(button.link[2]){
+ case 'wuxie': return 0.6+Math.random();
+ case 'wuzhong': case 'dongzhuxianji':return 0.5+Math.random();
+ case 'guohe': case 'zhujinqiyuan': return 0.4+Math.random();
+ default: return Math.random();
+ }
});
'step 1'
if(result.bool){
- player.logSkill('rechunlao');
- player.addToExpansion('gain2',result.cards).gaintag.add('rechunlao');
+ var name=result.links[0][2];
+ player.logSkill('olxianlve');
+ player.storage.olxianlve=name;
+ player.markSkill('olxianlve');
+ game.log(player,'声明了','#g'+get.translation(name));
}
},
- ai:{
- threaten:1.4
- },
- group:'rechunlao2'
- },
- rechunlao2:{
- enable:'chooseToUse',
- filter:function(event,player){
- return event.type=='dying'&&event.dying&&event.dying.hp<=0&&player.getExpansions('rechunlao').length>0;
- },
- filterTarget:function(card,player,target){
- return target==_status.event.dying;
- },
- direct:true,
- delay:false,
- selectTarget:-1,
- content:function(){
- "step 0"
- player.chooseCardButton(get.translation('rechunlao'),player.getExpansions('rechunlao'),true);
- "step 1"
- if(result.bool){
- player.logSkill('rechunlao');
- event.type='dying';
- player.loseToDiscardpile(result.links);
- target.useCard({name:'jiu',isCard:true},target);
- var nature=get.nature(result.links[0]);
- if(nature=='fire') player.recover();
- if(nature=='thunder') player.draw(2);
- }
- },
- ai:{
- order:6,
- skillTagFilter:function(player){
- return player.getExpansions('rechunlao').length>0;
- },
- save:true,
- result:{
- target:3
- },
- threaten:1.6
- },
- },
- reluoying:{
- audio:2,
- audioname:['dc_caozhi'],
- group:['reluoying_discard','reluoying_judge'],
- subfrequent:['judge'],
+ intro:{content:'已声明【$】'},
+ group:['olxianlve_use','olxianlve_count'],
subSkill:{
- discard:{
- audio:'reluoying',
- audioname:['dc_caozhi'],
- trigger:{global:['loseAfter','loseAsyncAfter']},
+ count:{
+ trigger:{global:'useCard1'},
+ silent:true,
+ forced:true,
+ popup:false,
+ firstDo:true,
filter:function(event,player){
- if(event.type!='discard'||event.getlx===false) return false;
- var cards=event.cards.slice(0);
- var evt=event.getl(player);
- if(evt&&evt.cards) cards.removeArray(evt.cards);
- for(var i=0;i0) return val*get.attitude(player,target)*2;
+ return get.value(card,target)*get.attitude(player,target);
+ },
+ });
+ 'step 3'
if(result.bool){
- player.logSkill(event.name);
- player.gain(result.links,'gain2','log');
+ var res=result.cards,target=result.targets[0].playerid;
+ player.addGaintag(res,'olxianlve');
+ cards.removeArray(res);
+ if(!event.given_map[target]) event.given_map[target]=[];
+ event.given_map[target].addArray(res);
+ if(result.targets[0].isPhaseUsing()&&get.type2(res[0])=='trick') event.ai_list.push(res[0].name);
+ if(cards.length) event.goto(2);
+ }
+ 'step 4'
+ if(_status.connectMode){
+ game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
+ }
+ var map=[],cards=[];
+ for(var i in event.given_map){
+ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
+ player.line(source,'green');
+ map.push([source,event.given_map[i]]);
+ cards.addArray(event.given_map[i]);
+ }
+ if(map.length) game.loseAsync({
+ gain_list:map,
+ player:player,
+ cards:cards,
+ giver:player,
+ animate:'giveAuto',
+ }).setContent('gaincardMultiple')
+ 'step 5'
+ var list=lib.inpile.filter(function(i){
+ return get.type2(i)=='trick';
+ }).map(function(i){
+ return ['锦囊','',i];
+ });
+ if(!list.length) event.finish();
+ else player.chooseButton([get.prompt('olxianlve'),[list,'vcard']]).set('list',event.ai_list).set('ai',function(button){
+ if(_status.event.list.contains(button.link[2])) return 2+Math.random();
+ switch(button.link[2]){
+ case 'wuxie': return 0.6+Math.random();
+ case 'wuzhong': case 'dongzhuxianji':return 0.5+Math.random();
+ case 'guohe': case 'zhujinqiyuan': return 0.4+Math.random();
+ default: return Math.random();
+ }
+ });
+ 'step 6'
+ if(result.bool){
+ var name=result.links[0][2];
+ player.storage.olxianlve=name;
+ player.markSkill('olxianlve');
+ game.log(player,'声明了','#g'+get.translation(name));
}
},
},
- judge:{
- audio:'reluoying',
- audioname:['dc_caozhi'],
- trigger:{global:'cardsDiscardAfter'},
- direct:true,
- filter:function(event,player){
- var evt=event.getParent().relatedEvent;
- if(!evt||evt.name!='judge') return;
- if(evt.player==player) return false;
- if(get.position(event.cards[0],true)!='d') return false;
- return (get.suit(event.cards[0])=='club');
- },
- content:function(){
- "step 0"
- player.chooseButton(['落英:选择要获得的牌',trigger.cards],[1,trigger.cards.length]).set('ai',function(button){
- return get.value(button.link,_status.event.player,'raw');
- });
- "step 1"
- if(result.bool){
- player.logSkill(event.name);
- player.gain(result.links,'gain2','log');
- }
- }
- }
- }
+ },
},
- chengzhang:{
- trigger:{player:'phaseZhunbeiBegin'},
- derivation:'rejiushi_mark',
- forced:true,
- unique:true,
- juexingji:true,
+ olzaowang:{
+ mode:['identity'],
+ audio:2,
+ enable:'phaseUse',
+ limited:true,
skillAnimation:true,
animationColor:'water',
- filter:function(event,player){
- var num=0;
- player.getAllHistory('sourceDamage',function(evt){
- num+=evt.num;
- });
- if(num>=7) return true;
- player.getAllHistory('damage',function(evt){
- num+=evt.num;
- });
- return num>7;
- },
+ filterTarget:true,
content:function(){
- player.markSkill('rejiushi_mark');
- player.awakenSkill('chengzhang');
- player.storage.chengzhang=true;
- player.recover();
- player.draw();
- },
- },
- rejiushi:{
- audio:2,
- group:['rejiushi1','rejiushi2','rejiushi3','rejiushi_gain'],
- subfrequent:['gain'],
- subSkill:{
- gain:{
- audio:'rejiushi',
- trigger:{player:'turnOverAfter'},
- frequent:true,
- filter:function(event,player){
- return player.storage.chengzhang==true;
- },
- prompt:'是否发动【酒诗】,获得牌堆中的一张锦囊牌?',
- content:function(){
- var card=get.cardPile2(function(card){
- return get.type2(card)=='trick';
- });
- if(card) player.gain(card,'gain2','log');
- },
- },
- },
- },
- rejiushi1:{
- hiddenCard:function(player,name){
- if(name=='jiu') return !player.isTurnedOver();
- return false;
- },
- audio:'rejiushi',
- enable:'chooseToUse',
- filter:function(event,player){
- if(player.classList.contains('turnedover')) return false;
- return event.filterCard({name:'jiu',isCard:true},player,event);
- },
- content:function(){
- if(_status.event.getParent(2).type=='dying'){
- event.dying=player;
- event.type='dying';
- }
- player.turnOver();
- player.useCard({name:'jiu',isCard:true},player);
+ player.awakenSkill('olzaowang');
+ target.gainMaxHp();
+ target.recover();
+ target.draw(3);
+ target.addSkill('olzaowang2');
},
ai:{
- order:5,
+ order:2,
result:{
- player:function(player){
- if(_status.event.parent.name=='phaseUse'){
- if(player.countCards('h','jiu')>0) return 0;
- if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0;
- if(!player.countCards('h','sha')) return 0;
- var targets=[];
- var target;
- var players=game.filterPlayer();
- for(var i=0;inum){
- target=targets[i];
- num=num2;
- }
- }
- if(num<=0) return 0;
- var e2=target.getEquip(2);
- if(e2){
- if(e2.name=='tengjia'){
- if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0;
- }
- if(e2.name=='renwang'){
- if(!player.countCards('h',{name:'sha',color:'red'})) return 0;
- }
- if(e2.name=='baiyin') return 0;
- }
- if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1;
- return target.countCards('h')>3?0:1;
- }
- if(player==_status.event.dying||player.isTurnedOver()) return 3;
- }
- },
- effect:{
- target:function(card,player,target){
- if(card.name=='guiyoujie') return [0,0.5];
- if(target.isTurnedOver()){
- if(get.tag(card,'damage')){
- if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
- if(target.hp==1) return;
- return [1,target.countCards('h')/2];
- }
- }
- }
- }
- },
- },
- rejiushi2:{
- trigger:{player:'damageBegin3'},
- silent:true,
- firstDo:true,
- filter:function(event,player){
- return player.classList.contains('turnedover');
- },
- content:function(){
- trigger.rejiushi=true;
- }
- },
- rejiushi3:{
- audio:'rejiushi',
- trigger:{player:'damageEnd'},
- check:function(event,player){
- return player.isTurnedOver();
- },
- filter:function(event,player){
- if(event.rejiushi){
- return true;
- }
- return false;
- },
- prompt:function(event,player){
- var str='是否发动【酒诗】,将武将牌翻面';
- if(!player.storage.chengzhang) str+=',并获得牌堆中的一张锦囊牌';
- str+='?'
- return str;
- },
- content:function(){
- delete trigger.rejiushi;
- player.turnOver();
- if(!player.storage.chengzhang){
- var card=get.cardPile2(function(card){
- return get.type2(card)=='trick';
- });
- if(card) player.gain(card,'gain2','log');
- }
- }
- },
- rejiushi_mark:{
- mark:true,
- marktext:'改',
- intro:{
- content:'当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。当你受到伤害后,若你的武将牌背面向上,你可以翻面。当你翻面时,你获得牌堆中的一张随机锦囊。',
- },
- },
- rehongyan:{
- audio:2,
- mod:{
- suit:function(card,suit){
- if(suit=='spade') return 'heart';
- }
- },
- trigger:{player:'loseEnd'},
- filter:function(event,player){
- if(player==_status.currentPhase||!event.visible||player.hp<=player.countCards('h')) return false;
- for(var i=0;i0);
- })){
- return 1;
- }
- return 0;
- }
- }
- }
- },
- reqimou2:{
- onremove:true,
- mod:{
- cardUsable:function(card,player,num){
- if(typeof player.storage.reqimou2=='number'&&card.name=='sha'){
- return num+player.storage.reqimou2;
- }
- },
- globalFrom:function(from,to,distance){
- if(typeof from.storage.reqimou2=='number'){
- return distance-from.storage.reqimou2;
- }
- }
- }
- },
- olniepan:{
- audio:2,
- unique:true,
- enable:'chooseToUse',
- mark:true,
- skillAnimation:true,
- limited:true,
- animationColor:'orange',
- init:function(player){
- player.storage.olniepan=false;
- },
- filter:function(event,player){
- if(player.storage.olniepan) return false;
- if(event.type=='dying'){
- if(player!=event.dying) return false;
- return true;
- }
- return false;
- },
- content:function(){
- 'step 0'
- player.awakenSkill('olniepan');
- player.storage.olniepan=true;
- player.discard(player.getCards('hej'));
- 'step 1'
- player.link(false);
- 'step 2'
- player.turnOver(false);
- 'step 3'
- player.draw(3);
- 'step 4'
- if(player.hp<3){
- player.recover(3-player.hp);
- }
- 'step 5'
- player.chooseControl('bazhen','olhuoji','olkanpo').set('prompt','选择获得一个技能').ai=function(){
- return ['olhuoji','bazhen'].randomGet();
- };
- 'step 6'
- player.addSkillLog(result.control);
- },
- derivation:['bazhen','olhuoji','olkanpo'],
- ai:{
- order:1,
- skillTagFilter:function(player,tag,target){
- if(player!=target||player.storage.olniepan) return false;
- },
- save:true,
- result:{
- player:function(player){
- if(player.hp<=0) return 10;
- if(player.hp<=2&&player.countCards('he')<=1) return 10;
- return 0;
- }
- },
- threaten:function(player,target){
- if(!target.storage.olniepan) return 0.6;
- }
- },
- intro:{
- content:'limited'
- }
- },
- rewurong:{
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return player.countCards('h')>0;
- },
- filterTarget:function(card,player,target){
- return target!=player&&target.countCards('h')>0;
- },
- content:function(){
- "step 0"
- if(target.countCards('h')==0||player.countCards('h')==0){
- event.finish();
- return;
- }
- "step 1"
- var sendback=function(){
- if(_status.event!=event){
- return function(){
- event.resultOL=_status.event.resultOL;
- };
- }
- };
- if(player.isOnline()){
- player.wait(sendback);
- event.ol=true;
- player.send(function(){
- game.me.chooseCard(true).set('glow_result',true).ai=function(){
- return Math.random();
- };
- game.resume();
- });
- }
- else{
- event.localPlayer=true;
- var hasShan=!target.countCards('h','shan');
- player.chooseCard(true).set('glow_result',true).ai=function(card){
- if(hasShan&&get.name(card)=='sha') return 1;
- return Math.random();
- }
- }
- if(target.isOnline()){
- target.wait(sendback);
- event.ol=true;
- target.send(function(){
- var rand=Math.random()<0.4;
- game.me.chooseCard(true).set('glow_result',true).ai=function(card){
- if(rand) return card.name=='shan'?1:0;
- return card.name=='shan'?0:1;
- };
- game.resume();
- });
- }
- else{
- event.localTarget=true;
- }
- "step 2"
- if(event.localPlayer){
- event.card1=result.cards[0];
- }
- if(event.localTarget){
- var rand=Math.random()<0.4;
- target.chooseCard(true).set('glow_result',true).ai=function(card){
- if(rand) return card.name=='shan'?1:0;
- return card.name=='shan'?0:1;
- };
- }
- "step 3"
- if(event.localTarget){
- event.card2=result.cards[0];
- }
- if(!event.resultOL&&event.ol){
- game.pause();
- }
- "step 4"
- try{
- if(!event.card1) event.card1=event.resultOL[player.playerid].cards[0];
- if(!event.card2) event.card2=event.resultOL[target.playerid].cards[0];
- if(!event.card1||!event.card2){
- throw('err');
- }
- }
- catch(e){
- console.log(e);
- event.finish();
- return;
- }
- game.broadcastAll(function(card1,card2){
- card1.classList.remove('glow');
- card2.classList.remove('glow');
- },event.card1,event.card2);
- "step 5"
- game.broadcastAll(function(){
- ui.arena.classList.add('thrownhighlight');
- });
- game.addVideo('thrownhighlight1');
- player.$compare(event.card1,target,event.card2);
- game.delay(4);
- "step 6"
- var next=game.createEvent('showCards');
- next.player=player;
- next.cards=[event.card1];
- next.setContent('emptyEvent');
- game.log(player,'展示了',event.card1);
- "step 7"
- var next=game.createEvent('showCards');
- next.player=target;
- next.cards=[event.card2];
- next.setContent('emptyEvent');
- game.log(target,'展示了',event.card2);
- "step 8"
- var name1=get.name(event.card1);
- var name2=get.name(event.card2);
- if(name1=='sha'&&name2!='shan'){
- //player.discard(event.card1).set('animate',false);
- target.$gain2(event.card2);
- var clone=event.card1.clone;
- if(clone){
- clone.style.transition='all 0.5s';
- clone.style.transform='scale(1.2)';
- clone.delete();
- game.addVideo('deletenode',player,get.cardsInfo([clone]));
- }
- game.broadcast(function(card){
- var clone=card.clone;
- if(clone){
- clone.style.transition='all 0.5s';
- clone.style.transform='scale(1.2)';
- clone.delete();
- }
- },event.card1);
- target.damage('nocard');
- }
- else if(name1!='sha'&&name2=='shan'){
- //player.discard(event.card1).set('animate',false);
- target.$gain2(event.card2);
- var clone=event.card1.clone;
- if(clone){
- clone.style.transition='all 0.5s';
- clone.style.transform='scale(1.2)';
- clone.delete();
- game.addVideo('deletenode',player,get.cardsInfo([clone]));
- }
- game.broadcast(function(card){
- var clone=card.clone;
- if(clone){
- clone.style.transition='all 0.5s';
- clone.style.transform='scale(1.2)';
- clone.delete();
- }
- },event.card1);
- player.gainPlayerCard(target,true,'he');
- }
- else{
- player.$gain2(event.card1);
- target.$gain2(event.card2);
- }
- game.broadcastAll(function(){
- ui.arena.classList.remove('thrownhighlight');
- });
- game.addVideo('thrownhighlight2');
- },
- ai:{
- order:6,
- result:{
- target:-1,
- }
- }
- },
- cangzhuo:{
- trigger:{player:'phaseDiscardBegin'},
- frequent:true,
- audio:2,
- filter:function(event,player){
- return player.getHistory('useCard',function(card){
- return get.type(card.card,'trick')=='trick';
- }).length==0;
- },
- content:function(){
- player.addTempSkill('cangzhuo2');
- },
- },
- cangzhuo2:{
- mod:{
- ignoredHandcard:function(card,player){
- if(get.type(card,'trick')=='trick'){
- return true;
- }
- },
- cardDiscardable:function(card,player,name){
- if(name=='phaseDiscard'&&get.type(card,'trick')=='trick') return false;
- }
- },
- },
- shebian:{
- trigger:{player:'turnOverEnd'},
- check:function(event,player){
- return player.canMoveCard(true,true);
- },
- filter:function(event,player){
- return player.canMoveCard(null,true);
- },
- content:function(){
- player.moveCard().nojudge=true;
- },
- },
- rexianzhen:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filterTarget:function(card,player,target){
- return player.canCompare(target);
- },
- filter:function(event,player){
- return player.countCards('h')>0;
- },
- content:function(){
- "step 0"
- player.chooseToCompare(target);
- "step 1"
- if(result.player&&get.name(result.player,player)=='sha') player.addTempSkill('rexianzhen4');
- if(result.bool){
- player.storage[event.name]=target;
- player.addTempSkill(event.name+2);
- }
- else{
- player.addTempSkill(event.name+3);
- }
- },
- ai:{
- order:function(name,player){
- var cards=player.getCards('h');
- if(player.countCards('h','sha')==0){
- return 1;
- }
- for(var i=0;i11&&get.value(cards[i])<7){
- return 9;
- }
- }
- return get.order({name:'sha'})-1;
- },
- result:{
- player:function(player){
- if(player.countCards('h','sha')>0) return 0;
- var num=player.countCards('h');
- if(num>player.hp) return 0;
- if(num==1) return -2;
- if(num==2) return -1;
- return -0.7;
- },
target:function(player,target){
- var num=target.countCards('h');
- if(num==1) return -1;
- if(num==2) return -0.7;
- return -0.5
+ if(player.hasUnknown(2)) return 0;
+ if(target.identity=='zhong') return 20;
+ if(target.identity=='zhu') return 10;
+ if(target.identity=='nei') return 5;
+ if(!target.hasFriend()) return 5;
+ return 0;
},
},
- threaten:1.3
- }
+ },
},
- rexianzhen2:{
+ olzaowang2:{
charlotte:true,
- mod:{
- targetInRange:function(card,player,target){
- if(target==player.storage.rexianzhen) return true;
- },
- cardUsableTarget:function(card,player,target){
- if(target==player.storage.rexianzhen) return true;
- }
- },
- ai:{
- unequip:true,
- skillTagFilter:function(player,tag,arg){
- if(arg.target!=player.storage.rexianzhen) return false;
- },
- }
- },
- rexianzhen3:{
- charlotte:true,
- mod:{
- cardEnabled:function(card){if(card.name=='sha') return false}
- }
- },
- rexianzhen4:{
- mod:{
- ignoredHandcard:function(card,player){
- if(get.name(card)=='sha'){
- return true;
- }
- },
- cardDiscardable:function(card,player,name){
- if(name=='phaseDiscard'&&get.name(card)=='sha'){
- return false;
- }
- },
- },
- },
- rejinjiu:{
- mod:{
- cardname:function(card,player){
- if(card.name=='jiu') return 'sha';
- },
- },
- ai:{
- skillTagFilter:function(player){
- if(!player.countCards('h','jiu')) return false;
- },
- respondSha:true,
- },
- audio:2,
- trigger:{player:['useCard1','respond']},
- firstDo:true,
+ trigger:{global:'dieBegin'},
forced:true,
filter:function(event,player){
- return event.card.name=='sha'&&!event.skill&&
- event.cards.length==1&&event.cards[0].name=='jiu';
+ return event.player.identity=='zhu'&&(player.identity=='zhong'||player.identity=='mingzhong');
},
- content:function(){},
- group:'rejinjiu2',
- global:'rejinjiu3',
- },
- rejinjiu3:{
- mod:{
- cardEnabled:function(card,player){
- if(card.name=='jiu'&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('rejinjiu')) return false;
- },
- cardSavable:function(card,player){
- if(card.name=='jiu'&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('rejinjiu')) return false;
- },
- },
- },
- rejinjiu2:{
- audio:'rejinjiu',
- forced:true,
- trigger:{player:'damageBegin3'},
- filter:function(event,player){
- return event.getParent(2).jiu==true;
- },
- content:function(){
- trigger.num-=trigger.getParent(2).jiu_add;
- },
- ai:{
- filterDamage:true,
- skillTagFilter:function(player,tag,arg){
- return arg&&arg.jiu==true;
- },
- },
- },
- repojun:{
- shaRelated:true,
- audio:2,
- trigger:{player:'useCardToPlayered'},
- direct:true,
- filter:function(event,player){
- return event.card.name=='sha'&&event.target.hp>0&&event.target.countCards('he')>0;
- },
- content:function(){
- 'step 0'
- var next=player.choosePlayerCard(trigger.target,'he',[1,Math.min(trigger.target.hp,trigger.target.countCards('he'))],get.prompt('repojun',trigger.target));
- next.set('ai',function(button){
- if(!_status.event.goon) return 0;
- var val=get.value(button.link);
- if(button.link==_status.event.target.getEquip(2)) return 2*(val+3);
- return val;
- });
- next.set('goon',get.attitude(player,trigger.target)<=0);
- next.set('forceAuto',true);
- 'step 1'
- if(result.bool){
- var target=trigger.target;
- player.logSkill('repojun',target);
- target.addSkill('repojun2');
- target.addToExpansion('giveAuto',result.cards,target).gaintag.add('repojun2');
- }
- },
- ai:{
- unequip_ai:true,
- directHit_ai:true,
- skillTagFilter:function(player,tag,arg){
- if(get.attitude(player,arg.target)>0) return false;
- if(tag=='directHit_ai') return arg.target.hp>=Math.max(1,arg.target.countCards('h')-1);
- if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true;
- return false;
- }
- },
- group:'repojun3',
- },
- repojun3:{
- audio:'repojun',
- trigger:{source:'damageBegin1'},
- forced:true,
- locked:false,
logTarget:'player',
- filter:function(event,player){
- var target=event.player;
- return event.getParent().name=='sha'&&player.countCards('h')>=target.countCards('h')&&player.countCards('e')>=target.countCards('e');
- },
+ skillAnimation:true,
+ animationColor:'orange',
content:function(){
- trigger.num++;
+ game.broadcastAll(function(player,target){
+ target.identity=player.identity;
+ if(player.identity=='mingzhong') game.zhong=target;
+ delete target.isZhu;
+ player.identity='zhu';
+ game.zhu=player;
+ player.showIdentity();
+ target.showIdentity();
+ },player,trigger.player);
+ event.trigger('zhuUpdate');
},
- },
- repojun2:{
- trigger:{global:'phaseEnd'},
- forced:true,
- popup:false,
- charlotte:true,
- filter:function(event,player){
- return player.getExpansions('repojun2').length>0;
- },
- content:function(){
- 'step 0'
- var cards=player.getExpansions('repojun2');
- player.gain(cards,'draw');
- game.log(player,'收回了'+get.cnNumber(cards.length)+'张“破军”牌');
- 'step 1'
- player.removeSkill('repojun2');
- },
- intro:{
- markcount:'expansion',
- mark:function(dialog,storage,player){
- var cards=player.getExpansions('repojun2');
- if(player.isUnderControl(true)) dialog.addAuto(cards);
- else return '共有'+get.cnNumber(cards.length)+'张牌';
+ mark:true,
+ marktext:'王',
+ intro:{content:'造了个王'},
+ group:'olzaowang2_kill',
+ subSkill:{
+ kill:{
+ trigger:{player:'die'},
+ forced:true,
+ forceDie:true,
+ skillAnimation:true,
+ animationColor:'wood',
+ filter:function(event,player){
+ return player.identity=='fan'&&event.source&&(event.source.identity=='zhu'||event.source.identity=='zhong'||event.source.identity=='mingzhong');
+ },
+ content:function(){
+ game.over((game.me.identity=='zhu'||game.me.identity=='zhong'||game.me.identity=='mingzhong'));
+ },
},
},
},
- sishu:{
+ //冯方女
+ zhuangshu:{
audio:2,
- trigger:{player:'phaseUseBegin'},
+ trigger:{global:'phaseBegin'},
direct:true,
+ filter:function(event,player){
+ return event.player.isIn()&&event.player.hasEmptySlot(5)&&player.hasCard(lib.skill.zhuangshu.filterCard,'he');
+ },
+ filterCard:function(card){
+ if(_status.connectMode) return true;
+ var type=get.type2(card);
+ return type=='basic'||type=='trick'||type=='equip';
+ },
content:function(){
'step 0'
- player.chooseTarget(get.prompt2('sishu')).ai=function(target){
- var att=get.attitude(_status.event.player,target);
- if(target.countMark('sishu2')%2==1) return -att;
- return att;
- }
+ player.chooseToDiscard('he',get.prompt('zhuangshu',trigger.player),'弃置一张牌,并根据此牌的类型,按如下关系将一张宝物牌置入该角色的装备区:{<基本牌,【琼梳】>,<锦囊牌,【犀梳】>,<装备牌,【金梳】>}。',function(card){
+ var type=get.type2(card);
+ return type=='basic'||type=='trick'||type=='equip';
+ }).set('ai',function(card){
+ var player=_status.event.player;
+ if(get.attitude(player,_status.event.getTrigger().player)<4) return 0;
+ var name='zhuangshu_'+get.type2(card,player);
+ if(game.hasPlayer(function(current){
+ return current.getEquip(name)&&get.attitude(player,current)>0;
+ })) return 0;
+ return 7-get.value(card);
+ }).logSkill=['zhuangshu',trigger.player];
'step 1'
if(result.bool){
- var target=result.targets[0];
- player.logSkill('sishu',target)
- target.addSkill('sishu2');
- target.addMark('sishu2',1,false);
- }
- },
- },
- sishu2:{
- charlotte:true,
- marktext:'思',
- intro:{
- name:'思蜀',
- content:'本局游戏内计算【乐不思蜀】的效果时反转#次',
- },
- mod:{
- judge:function(player,result){
- if(_status.event.cardname=='lebu'&&player.countMark('sishu2')%2==1){
- if(result.bool==false){
- result.bool=true;
+ var name='zhuangshu_'+get.type2(result.cards[0],result.cards[0].original=='h'?player:false);
+ if(lib.card[name]&&trigger.player.isIn&&trigger.player.hasEmptySlot(5)){
+ var target=game.findPlayer(function(current){
+ var equip=current.getEquip(name);
+ return equip&&equip.name==name;
+ });
+ if(target){
+ var card=target.getEquip(name);
+ target.$give(card,trigger.player,false);
}
else{
- result.bool=false;
+ var card=game.createCard(name,lib.card[name].suit,12);
+ trigger.player.$gain2(card,false);
}
+ game.delayx();
+ trigger.player.equip(card);
}
}
},
+ group:'zhuangshu_gameStart',
+ subSkill:{
+ gameStart:{
+ trigger:{global:'phaseBefore'},
+ direct:true,
+ filter:function(event,player){
+ return game.phaseNumber==0;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseButton([get.prompt('zhuangshu'),[['zhuangshu_basic','zhuangshu_trick','zhuangshu_equip'],'vcard']]).set('filterButton',function(button){
+ return !game.hasPlayer(function(current){
+ return current.getEquip(button.link[2]);
+ })
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('zhuangshu');
+ var name=result.links[0][2],card=game.createCard(name,lib.card[name].suit,12);
+ player.$gain2(card,false);
+ game.delayx();
+ player.equip(card);
+ }
+ },
+ },
+ },
},
- olruoyu:{
- skillAnimation:true,
- animationColor:'fire',
+ chuiti:{
audio:2,
- unique:true,
- juexingji:true,
- zhuSkill:true,
- keepSkill:true,
- derivation:['rejijiang','sishu'],
- trigger:{player:'phaseZhunbeiBegin'},
- forced:true,
+ usable:1,
+ trigger:{
+ global:['loseAfter','loseAsyncAfter'],
+ },
+ direct:true,
filter:function(event,player){
- if(!player.hasZhuSkill('olruoyu')) return false;
- return player.isMinHp();
+ if(event.type!='discard'||event.getlx===false) return false;
+ return game.hasPlayer(function(current){
+ if(player!=current){
+ var cards=current.getEquips(5);
+ if(!cards.some(card=>card.name.indexOf('zhuangshu_')==0)) return false;
+ }
+ var evt=event.getl(current);
+ if(!evt||!evt.cards2) return false;
+ for(var i of evt.cards2){
+ if(get.position(i,true)=='d'&&player.hasUseTarget(i)) return true;
+ }
+ return false;
+ });
},
content:function(){
'step 0'
- player.awakenSkill('olruoyu');
- player.gainMaxHp();
+ var cards=[];
+ game.countPlayer(function(current){
+ if(player!=current){
+ var cards2=current.getEquips(5);
+ if(!cards2.some(card=>card.name.indexOf('zhuangshu_')==0)) return false;
+ }
+ var evt=trigger.getl(current);
+ for(var i of evt.cards2){
+ if(get.position(i,true)=='d'&&player.hasUseTarget(i)) cards.push(i);
+ }
+ return false;
+ });
+ player.chooseButton(['垂涕:是否使用其中的一张牌?',cards]).set('ai',function(button){
+ return _status.event.player.getUseValue(button.link);
+ });
'step 1'
- if(player.hp<3) player.recover(3-player.hp);
- game.log(player,'获得了技能','#g【思蜀】','和','#g【激将】');
- player.addSkill('sishu');
- if(player.hasSkill('olruoyu')){
- player.addSkill('rejijiang');
+ if(result.bool){
+ player.$gain2(result.links[0],false);
+ game.delayx();
+ player.chooseUseTarget(true,result.links[0],false).logSkill='chuiti';
}
- else{
- player.addAdditionalSkill('olruoyu','rejijiang');
- }
- if(!player.isZhu){
- player.storage.zhuSkill_olruoyu=['rejijiang'];
- }
- else{
- event.trigger('zhuUpdate');
- }
- }
- },
- olfangquan:{
- audio:2,
- audioname:['shen_caopi'],
- trigger:{player:'phaseUseBefore'},
- filter:function(event,player){
- return player.countCards('h')>0&&!player.hasSkill('olfangquan3');
+ else player.storage.counttrigger.chuiti--;
},
+ },
+ zhuangshu_basic:{
+ equipSkill:true,
+ trigger:{player:'damageBegin2'},
direct:true,
- content:function(){
- "step 0"
- var fang=player.countMark('olfangquan2')==0&&player.hp>=2&&player.countCards('h')<=player.hp+1;
- player.chooseBool(get.prompt2('olfangquan')).set('ai',function(){
- if(!_status.event.fang) return false;
- return game.hasPlayer(function(target){
- if(target.hasJudge('lebu')||target==player) return false;
- if(get.attitude(player,target)>4){
- return (get.threaten(target)/Math.sqrt(target.hp+1)/Math.sqrt(target.countCards('h')+1)>0);
- }
- return false;
- });
- }).set('fang',fang);
- "step 1"
- if(result.bool){
- player.logSkill('olfangquan');
- trigger.cancel();
- player.addTempSkill('olfangquan2');
- player.addMark('olfangquan2',1,false);
- }
- }
- },
- olfangquan2:{
- trigger:{player:'phaseDiscardBegin'},
- forced:true,
- popup:false,
- audio:false,
- onremove:true,
- content:function(){
- "step 0"
- event.count=player.countMark(event.name);
- player.removeMark(event.name,event.count,false);
- "step 1"
- event.count--;
- player.chooseToDiscard('是否弃置一张牌并令一名其他角色进行一个额外回合?').set('logSkill','olfangquan').ai=function(card){
- return 20-get.value(card);
- };
- "step 2"
- if(result.bool){
- player.chooseTarget(true,'请选择进行额外回合的目标角色',lib.filter.notMe).ai=function(target){
- if(target.hasJudge('lebu')) return -1;
- if(get.attitude(player,target)>4){
- return get.threaten(target)/Math.sqrt(target.hp+1)/Math.sqrt(target.countCards('h')+1);
- }
- return -1;
- };
- }
- else event.finish();
- "step 3"
- var target=result.targets[0];
- player.line(target,'fire');
- target.markSkillCharacter('olfangquan',player,'放权','进行一个额外回合');
- target.insertPhase();
- target.addSkill('olfangquan3');
- if(event.count>0) event.goto(1);
- }
- },
- olfangquan3:{
- trigger:{player:['phaseAfter','phaseCancelled']},
- forced:true,
- popup:false,
- audio:false,
- content:function(){
- player.unmarkSkill('olfangquan');
- player.removeSkill('olfangquan3');
- }
- },
- olluanji:{
- inherit:'luanji',
- audioname:['shen_caopi'],
- audio:2,
- line:false,
- group:'olluanji_remove',
- check:function(card){
- return 7-get.value(card);
+ filter:function(event,player){
+ var equip=player.getEquip('zhuangshu_basic');
+ return event.num<=player.countCards('he',function(card){
+ return card!=equip;
+ })
},
- },
- olluanji_remove:{
+ content:function(){
+ 'step 0'
+ player.chooseToDiscard('he',trigger.num,get.prompt('zhuangshu_basic'),'弃置'+get.cnNumber(trigger.num)+'张牌并防止伤害',function(card,player){
+ return card!=player.getEquip('zhuangshu_basic');
+ }).set('ai',function(card){
+ var player=_status.event.player;
+ return 4+player.getUseValue(card)-get.value(card,player);
+ });
+ 'step 1'
+ if(result.bool) trigger.cancel();
+ },
+ /*usable:1,
trigger:{player:'useCard2'},
direct:true,
filter:function(event,player){
- return event.card.name=='wanjian'&&event.targets.length>0;
+ if(event.targets.length!=1) return false;
+ if(event.card.name!='sha'&&get.type(event.card)!='trick') return false;
+ var info=get.info(event.card);
+ if(info.allowMultiple==false) return false;
+ if(event.targets&&!info.multitarget){
+ var target=event.targets[0],hp=target.hp,hs=target.countCards('h'),card=event.card;
+ return game.hasPlayer(function(current){
+ return current!=target&¤t!=player&&(current.hp==hp||current.countCards('h')==hs)&&lib.filter.targetEnabled2(card,player,current);
+ });
+ }
+ return false;
},
- line:false,
content:function(){
'step 0'
- player.chooseTarget(get.prompt('olluanji'),'为'+get.translation(trigger.card)+'减少一个目标',function(card,player,target){
- return _status.event.targets.contains(target)
- }).set('targets',trigger.targets).set('ai',function(target){
- var player=_status.event.player;
- return -get.effect(target,_status.event.getTrigger().card,player,player)
+ player.chooseTarget(get.prompt('zhuangshu_basic'),'为'+get.translation(trigger.card)+'增加一个满足条件的额外目标',function(card,player,current){
+ var card=_status.event.getTrigger().card,target=_status.event.target,hp=target.hp,hs=target.countCards('h');
+ return current!=target&¤t!=player&&(current.hp==hp||current.countCards('h')==hs)&&lib.filter.targetEnabled2(card,player,current);
+ }).set('target',trigger.targets[0]).set('ai',function(target){
+ var card=_status.event.getTrigger().card,player=_status.event.player;
+ return get.effect(target,card,player,player);
});
'step 1'
if(result.bool){
- player.logSkill('olluanji',result.targets);
- trigger.targets.remove(result.targets[0]);
+ if(player!=event.player&&!player.isOnline()) game.delayx();
+ }
+ else{
+ player.storage.counttrigger.zhuangshu_basic--;
+ event.finish();
+ }
+ 'step 2'
+ var targets=result.targets;
+ player.logSkill('zhuangshu_basic',targets);
+ trigger.targets.addArray(targets);
+ trigger.directHit.addArray(targets);
+ },*/
+ },
+ zhuangshu_trick:{
+ trigger:{player:['phaseJudgeBefore']},
+ equipSkill:true,
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseControl('判定阶段','弃牌阶段','cancel2').set('prompt',get.prompt('zhuangshu_trick')).set('prompt2','跳过本回合的判定阶段或弃牌阶段').set('ai',function(){
+ var player=_status.event.player;
+ if(player.hasCard(function(card){
+ return get.effect(player,{
+ name:card.viewAs||card.name,
+ cards:[card],
+ },player,player)<0;
+ },'j')) return '判定阶段';
+ return '弃牌阶段';
+ });
+ 'step 1'
+ if(result.control!='cancel2'){
+ player.logSkill('zhuangshu_trick');
+ if(result.control=='判定阶段'){
+ trigger.cancel();
+ game.log(player,'跳过了','#y判定阶段');
+ }
+ else{
+ player.skip('phaseDiscard');
+ game.log(player,'跳过了','#g弃牌阶段');
+ }
}
},
},
- olxueyi:{
- audio:2,
- trigger:{global:'phaseBefore',player:'enterGame'},
+ zhuangshu_equip:{
+ trigger:{player:'phaseUseEnd'},
forced:true,
- zhuSkill:true,
- unique:true,
+ equipSkill:true,
filter:function(event,player){
- return (event.name!='phase'||game.phaseNumber==0)&&player.hasZhuSkill('olxueyi');
+ return player.countCards('h')0||!player.needsToDiscard();
- },
- filter:function(event,player){
- return player.hasZhuSkill('olxueyi')&&player.hasMark('olxueyi');
- },
- content:function(){
- player.removeMark('olxueyi',1);
- player.draw();
+ player.drawTo(Math.min(5,player.getHandcardLimit()));
},
},
- olhunzi:{
- audio:2,
- audioname:['re_sunyi'],
- inherit:'hunzi',
+ //杨仪
+ oljuanxia:{
+ trigger:{player:'phaseJieshuBegin'},
+ direct:true,
content:function(){
- player.loseMaxHp();
- //player.recover();
- player.addSkill('reyingzi');
- player.addSkill('gzyinghun');
- player.addTempSkill('olhunzi_effect');
- game.log(player,'获得了技能','#g【英姿】','和','#g【英魂】');
- player.awakenSkill(event.name);
- player.storage[event.name]=true;
+ 'step 0'
+ player.chooseTarget(get.prompt2('oljuanxia'),lib.filter.notMe).set('ai',function(target){
+ var player=_status.event.player,list=[];
+ for(var name of lib.inpile){
+ var info=lib.card[name];
+ if(!info||info.type!='trick'||info.notarget||(info.selectTarget&&info.selectTarget!=1)) continue;
+ if(!player.canUse(name,target,false)) continue;
+ var eff=get.effect(target,{name:name},player,player)
+ if(eff>0) list.push(eff);
+ }
+ list.sort().reverse();
+ if(!list.length) return 0;
+ return list[0]+(list[1]||0)+(list[2]||0);
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('oljuanxia',target);
+ }
+ else event.finish();
+ 'step 2'
+ var list=[];
+ for(var name of lib.inpile){
+ var info=lib.card[name];
+ if(!info||info.type!='trick'||info.notarget||(info.selectTarget&&info.selectTarget!=1)) continue;
+ list.push(name);
+ }
+ if(!list.length) event.finish();
+ else{
+ event.list=list;
+ event.count=0;
+ }
+ 'step 3'
+ var list=event.list.filter(function(name){
+ return player.canUse(name,target,false);
+ });
+ if(list.length){
+ var next=player.chooseButton(['视为对'+get.translation(target)+'使用一张牌',[list,'vcard']]).set('ai',function(button){
+ var evt=_status.event.getParent();
+ return get.effect(evt.target,{name:button.link[2]},evt.player,evt.player);
+ });
+ if(event.count==0) next.set('forced',true);
+ }
+ else{
+ event.stopped=true;
+ event.goto(5);
+ }
+ 'step 4'
+ if(result.bool){
+ event.count++;
+ var name=result.links[0][2];
+ event.list.remove(name);
+ player.useCard({name:name,isCard:true},target,false);
+ }
+ else event.stopped=true;
+ 'step 5'
+ if(target.isIn()&&event.count>0){
+ if(event.count<3&&!event.stopped&&event.list.length>0) event.goto(3);
+ else{
+ target.addTempSkill('oljuanxia_counter',{player:'phaseAfter'});
+ if(!target.storage.oljuanxia_counter) target.storage.oljuanxia_counter={};
+ if(!target.storage.oljuanxia_counter[player.playerid]) target.storage.oljuanxia_counter[player.playerid]=0;
+ target.storage.oljuanxia_counter[player.playerid]+=event.count;
+ }
+ }
},
subSkill:{
- effect:{
- trigger:{player:'phaseJieshuBegin'},
+ counter:{
+ trigger:{player:'phaseEnd'},
forced:true,
- popup:false,
charlotte:true,
- content:function(){
- player.chooseDrawRecover(2,true);
- },
- },
- },
- },
- olzhiba:{
- audio:2,
- unique:true,
- zhuSkill:true,
- global:'olzhiba2',
- },
- olzhiba2:{
- ai:{
- order:1,
- result:{
- target:function(player,target){
- if(player.hasZhuSkill('olzhiba')&&!player.hasSkill('olzhiba3')&&target.group=='wu'){
- if(player.countCards('h',function(card){
- var val=get.value(card);
- if(val<0) return true;
- if(val<=5){
- return get.number(card)>=12;
- }
- if(val<=6){
- return get.number(card)>=13;
- }
- return false;
- })>0) return -1;
- return 0;
- }
- else{
- if(player.countCards('h','du')&&get.attitude(player,target)<0) return -1;
- if(player.countCards('h')<=player.hp) return 0;
- var maxnum=0;
- var cards2=target.getCards('h');
- for(var i=0;imaxnum){
- maxnum=get.number(cards2[i]);
- }
- }
- if(maxnum>10) maxnum=10;
- if(maxnum<5&&cards2.length>1) maxnum=5;
- var cards=player.getCards('h');
- for(var i=0;i0||target.countCards('h',function(card){
- var val=get.value(card);
- if(val<0) return true;
- if(val<=5){
- return get.number(card)>=12;
- }
- if(val<=6){
- return get.number(card)>=13;
+ onremove:true,
+ filter:function(event,player){
+ var map1=(_status.connectMode?lib.playerOL:game.playerMap),map2=player.storage.oljuanxia_counter;
+ if(!map2) return false;
+ for(var i in map2){
+ if(map1[i]&&map1[i].isIn()&&player.canUse('sha',map1[i],false)) return true;
}
return false;
- })>0)).set('ai',function(){return _status.event.choice});
- }
- else event._result={bool:true};
- 'step 3'
- if(result.bool) event.getParent().zhiba_target=target;
- else{
- game.log(target,'拒绝了',player,'的拼点请求');
- target.chat('拒绝');
- }
- },
- content:function(){
- 'step 0'
- event.source=event.getParent().zhiba_target;
- if(!event.source){
- event.finish();
- }
- 'step 1'
- player.chooseToCompare(target).set('small',target==source&&get.attitude(player,target)>0).clear=false;
- 'step 2'
- if(player==source&&result.bool||target==source&&!result.bool){
- event.cards=[result.player,result.target].filterInD('d');
- if(!event.cards.length) event.finish();
- else source.chooseControl('ok','cancel2').set('dialog',['是否获得拼点牌?',event.cards]).set('ai',function(){
- if(get.value(event.cards,source,'raw')<=0) return false;
- return true;
- });
- }
- else event.finish();
- 'step 3'
- if(result.control!='cancel2') source.gain(event.cards,'gain2','log');
- else ui.clear();
- },
- },
- olzhiba3:{},
- rehuashen:{
- audio:2,
- unique:true,
- direct:true,
- content:function(){
- "step 0"
- _status.noclearcountdown=true;
- event.videoId=lib.status.videoId++;
- var cards=player.storage.rehuashen.character.slice(0);
- var skills=[];
- var sto=player.storage.rehuashen;
- for(var i in player.storage.rehuashen.map){
- skills.addArray(player.storage.rehuashen.map[i]);
- }
- var cond='out';
- if(event.triggername=='phaseBegin'){
- cond='in';
- }
- skills.randomSort();
- skills.sort(function(a,b){
- return get.skillRank(b,cond)-get.skillRank(a,cond);
- });
- event.aiChoice=skills[0];
- var choice='更换技能';
- if(event.aiChoice==player.storage.rehuashen.current2||get.skillRank(event.aiChoice,cond)<1) choice='弃置化身';
- if(player.isOnline2()){
- player.send(function(cards,id){
- var dialog=ui.create.dialog('是否发动【化身】?',[cards,'character']);
- dialog.videoId=id;
- },cards,event.videoId);
- }
- event.dialog=ui.create.dialog(get.prompt('rehuashen'),[cards,'character']);
- event.dialog.videoId=event.videoId;
- if(!event.isMine()){
- event.dialog.style.display='none';
- }
- if(event.triggername=='rehuashen') event._result={control:'更换技能'};
- else player.chooseControl('弃置化身','更换技能','cancel2').set('ai',function(){
- return _status.event.choice;
- }).set('choice',choice);
- "step 1"
- event.control=result.control;
- if(event.control=='cancel2'){
- if(player.isOnline2()){
- player.send('closeDialog',event.videoId);
- }
- delete _status.noclearcountdown;
- if(!_status.noclearcountdown){
- game.stopCountChoose();
- }
- event.dialog.close();
- event.finish();return;
- }
- if(!event.logged){player.logSkill('rehuashen');event.logged=true}
- var next=player.chooseButton(true).set('dialog',event.videoId);
- if(event.control=='弃置化身'){
- next.set('selectButton',[1,2]);
- next.set('filterButton',function(button){
- return button.link!=_status.event.current;
- });
- next.set('current',player.storage.rehuashen.current);
- }
- else{
- next.set('ai',function(button){
- return player.storage.rehuashen.map[button.link].contains(_status.event.choice)?2.5:1+Math.random();
- });
- next.set('choice',event.aiChoice);
- }
- var prompt=event.control=='弃置化身'?'选择制衡至多两张化身':'选择要切换的化身';
- var func=function(id,prompt){
- var dialog=get.idDialog(id);
- if(dialog){
- dialog.content.childNodes[0].innerHTML=prompt;
- }
- }
- if(player.isOnline2()){
- player.send(func,event.videoId,prompt);
- }
- else if(event.isMine()){
- func(event.videoId,prompt);
- }
- "step 2"
- if(result.bool&&event.control!='弃置化身'){
- event.card=result.links[0];
- var func=function(card,id){
- var dialog=get.idDialog(id);
- if(dialog){
- for(var i=0;i0;
- },
- banned:['lisu','sp_xiahoudun','xushao','zhoutai','old_zhoutai','shixie'],
- addHuashen:function(player){
- if(!player.storage.rehuashen) return;
- if(!_status.characterlist){
- lib.skill.pingjian.initList();
- }
- _status.characterlist.randomSort();
- var bool=false;
- for(var i=0;i<_status.characterlist.length;i++){
- var name=_status.characterlist[i];
- if(name.indexOf('zuoci')!=-1||name.indexOf('key')==0||lib.skill.rehuashen.banned.contains(name)||player.storage.rehuashen.character.contains(name)) continue;
- var skills=lib.character[name][3];
- for(var j=0;j【'+get.translation(lib.translate[storage.current2+'_ab']||get.translation(storage.current2).slice(0,2))+'】
'+get.skillInfoTranslation(storage.current2,player)+'
');
- if(storage&&storage.character.length){
- if(player.isUnderControl(true)){
- dialog.addSmall([storage.character,'character']);
- }
- else{
- dialog.addText('共有'+get.cnNumber(storage.character.length)+'张“化身”');
- }
- }
- else{
- return '没有化身';
- }
- },
- content:function(storage,player){
- return '共有'+get.cnNumber(storage.character.length)+'张“化身”'
- },
- markcount:function(storage,player){
- if(storage&&storage.character) return storage.character.length;
- return 0;
- },
- },
- },
- rehuashen_init:{
- trigger:{
- global:'phaseBefore',
- player:'enterGame',
- },
- forced:true,
- popup:false,
- filter:function(event,player){
- return (event.name!='phase'||game.phaseNumber==0);
- },
- content:function(){
- lib.skill.rehuashen.addHuashens(player,3);
- player.syncStorage('rehuashen');
- player.markSkill('rehuashen');
- var next=game.createEvent('rehuashen');
- next.player=player;
- next._trigger=trigger;
- next.triggername='rehuashen';
- next.setContent(lib.skill.rehuashen.content);
- },
- },
- rexingsheng:{audio:2},
- rexinsheng:{
- //mode:['identity','single','doudizhu'],
- unique:true,
- audio:'rexingsheng',
- trigger:{player:'damageEnd'},
- frequent:true,
- content:function(){
- lib.skill.rehuashen.addHuashens(player,trigger.num);
- player.syncStorage('rehuashen');
- player.updateMarks('rehuashen');
- },
- },
- reguhuo:{
- audio:2,
- derivation:'rechanyuan',
- enable:['chooseToUse','chooseToRespond'],
- hiddenCard:function(player,name){
- return (lib.inpile.contains(name)&&player.countCards('h')>0&&!player.hasSkill('reguhuo_phase'));
- },
- filter:function(event,player){
- if(!player.countCards('hs')||player.hasSkill('reguhuo_phase')) return false;
- for(var i of lib.inpile){
- if(i=='shan'||i=='wuxie') continue;
- var type=get.type(i);
- if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true;
- if(i=='sha'){
- for(var j of lib.inpile_nature){
- if(event.filterCard({name:i,nature:j},player,event)) return true;
- }
- }
- }
- return false;
- },
- chooseButton:{
- dialog:function(){
- var list=[];
- for(var i of lib.inpile){
- if(i=='shan'||i=='wuxie') continue;
- var type=get.type(i);
- if(type=='basic'||type=='trick') list.push([type,'',i]);
- if(i=='sha'){
- for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
- }
- }
- return ui.create.dialog('蛊惑',[list,'vcard']);
- },
- filter:function(button,player){
- var evt=_status.event.getParent();
- return evt.filterCard({name:button.link[2],nature:button.link[3]},player,evt);
- },
- check:function(button){
- var player=_status.event.player;
- var rand=_status.event.getParent().getRand('reguhuo');
- var hasEnemy=game.hasPlayer(function(current){
- return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0;
- });
- var card={name:button.link[2],nature:button.link[3]};
- var val=_status.event.getParent().type=='phase'?player.getUseValue(card):1;
- if(val<=0) return 0;
- if(hasEnemy&&rand>0.3){
- if(!player.countCards('h',function(cardx){
- if(card.name==cardx.name){
- if(card.name!='sha') return true;
- return get.nature(card)==get.nature(cardx);
- }
- return false;
- })) return 0;
- return 3*val;
- }
- return val;
- },
- backup:function(links,player){
- return {
- viewAs:{
- name:links[0][2],
- nature:links[0][3],
- suit:'none',
- number:null,
- },
- filterCard:function(card,player,target){
- var result=true;
- var suit=card.suit,number=card.number;
- card.suit='none';card.number=null;
- var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player);
- if(mod!='unchanged') result=mod;
- card.suit=suit;card.number=number;
- return result;
- },
- position:'hs',
- ignoreMod:true,
- ai1:function(card){
- var player=_status.event.player;
- var hasEnemy=game.hasPlayer(function(current){
- return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0;
- });
- var rand=_status.event.getRand('reguhuo');
- var cardx=lib.skill.reguhuo_backup.viewAs;
- if(hasEnemy&&rand>0.3){
- if(card.name==cardx.name&&(card.name!='sha'||card.nature==cardx.nature)) return 10;
- return 0;
- }
- return 6-get.value(card);
- },
- precontent:function(){
- player.logSkill('reguhuo');
- var card=event.result.cards[0];
- event.result.card.suit=get.suit(card);
- event.result.card.number=get.number(card);
- },
- }
- },
- prompt:function(links){
- return '将一张手牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用';
- },
- },
- ai:{
- fireAttack:true,
- respondShan:true,
- respondSha:true,
- skillTagFilter:function(player){
- if(!player.countCards('hs')||player.hasSkill('reguhuo_phase')) return false;
- },
- order:10,
- result:{
- player:1,
- },
- threaten:1.3,
- },
- group:['reguhuo_shan','reguhuo_wuxie','reguhuo_guess'],
- },
- reguhuo_shan:{
- enable:['chooseToUse','chooseToRespond'],
- viewAs:{
- name:'shan',
- suit:'none',
- number:null,
- },
- filterCard:function(card,player,target){
- var result=true;
- var suit=card.suit,number=card.number;
- card.suit='none';card.number=null;
- var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player);
- if(mod!='unchanged') result=mod;
- card.suit=suit;card.number=number;
- return result;
- },
- position:'hs',
- ignoreMod:true,
- viewAsFilter:function(player){
- return player.countCards('hs')&&!player.hasSkill('reguhuo_phase');
- },
- check:function(card){
- var player=_status.event.player;
- var hasEnemy=game.hasPlayer(function(current){
- return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0;
- });
- var cardx='shan';
- if(hasEnemy){
- if(card.name==cardx) return 10;
- return 0;
- }
- return 6-get.value(card);
- },
- precontent:function(){
- player.logSkill('reguhuo');
- var card=event.result.cards[0];
- event.result.card.suit=get.suit(card);
- event.result.card.number=get.number(card);
- },
- prompt:'将一张牌当做【闪】使用或打出',
- ai:{
- order:4,
- },
- },
- reguhuo_wuxie:{
- enable:'chooseToUse',
- viewAs:{
- name:'wuxie',
- suit:'none',
- number:null,
- },
- filterCard:function(card,player,target){
- var result=true;
- var suit=card.suit,number=card.number;
- card.suit='none';card.number=null;
- var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player);
- if(mod!='unchanged') result=mod;
- card.suit=suit;card.number=number;
- return result;
- },
- ignoreMod:true,
- check:function(card){
- var player=_status.event.player;
- var hasEnemy=game.hasPlayer(function(current){
- return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0;
- });
- var cardx='wuxie';
- if(hasEnemy){
- if(card.name==cardx) return 10;
- return 0;
- }
- return 6-get.value(card);
- },
- precontent:function(){
- player.logSkill('reguhuo');
- var card=event.result.cards[0];
- event.result.card.suit=get.suit(card);
- event.result.card.number=get.number(card);
- },
- viewAsFilter:function(player){
- return player.countCards('hs')&&!player.hasSkill('reguhuo_phase');
- },
- prompt:'将一张牌当做【无懈可击】使用',
- ai:{
- order:4,
- },
- },
- reguhuo_guess:{
- trigger:{
- player:['useCardBefore','respondBefore'],
- },
- forced:true,
- silent:true,
- popup:false,
- charlotte:true,
- firstDo:true,
- filter:function(event,player){
- return event.skill&&event.skill.indexOf('reguhuo_')==0;
- },
- content:function(){
- 'step 0'
- player.addTempSkill('reguhuo_phase');
- event.fake=false;
- var card=trigger.cards[0];
- if(card.name!=trigger.card.name||(card.name=='sha'&&(trigger.card.nature||card.nature)&&trigger.card.nature!=card.nature)) event.fake=true;
- //player.logSkill('reguhuo');
- player.line(trigger.targets,get.nature(trigger.card));
- event.cardTranslate=get.translation(trigger.card.name);
- trigger.card.number=get.number(card);
- trigger.card.suit=get.suit(card);
- //trigger.line=false;
- trigger.skill='reguhuo_backup';
- if(trigger.card.name=='sha'&&trigger.card.nature) event.cardTranslate=get.translation(trigger.card.nature)+event.cardTranslate;
- player.popup(event.cardTranslate,trigger.name=='useCard'?'metal':'wood');
- event.prompt='是否质疑'+get.translation(player)+'声明的'+event.cardTranslate+'?';
- game.log(player,'声明了','#y'+event.cardTranslate);
- event.targets=game.filterPlayer(function(current){
- return current!=player&&!current.hasSkill('rechanyuan');
- }).sortBySeat();
- event.targets2=event.targets.slice(0);
- player.lose(card,ui.ordering).relatedEvent=trigger;
- if(!event.targets.length) event.goto(5);
- else if(_status.connectMode) event.goto(3);
- event.betrays=[];
- 'step 1'
- event.target=targets.shift();
- event.target.chooseButton([event.prompt,[['reguhuo_ally','reguhuo_betray'],'vcard']],true,function(button){
- var player=_status.event.player;
- var evt=_status.event.getParent('reguhuo_guess');
- if(!evt) return Math.random();
- var ally=button.link[2]=='reguhuo_ally';
- if(ally&&(player.hp<=1||get.attitude(player,evt.player)>=0)) return 1.1;
- return Math.random();
- });
- 'step 2'
- if(result.links[0][2]=='reguhuo_betray'){
- event.betrays.push(target);
- target.addExpose(0.2);
- }
- event.goto(targets.length?1:5);
- 'step 3'
- var list=event.targets.map(function(target){
- return [target,[event.prompt,[['reguhuo_ally','reguhuo_betray'],'vcard']],true];
- });
- player.chooseButtonOL(list).set('switchToAuto',function(){
- _status.event.result='ai';
- }).set('processAI',function(){
- var choice=Math.random()>0.5?'reguhuo_ally':'reguhuo_betray';
- var player=_status.event.player;
- var evt=_status.event.getParent('reguhuo_guess');
- if(player.hp<=1||evt&&(get.realAttitude||get.attitude)(player,evt.player)>=0) choice='reguhuo_ally';
- return {
- bool:true,
- links:[['','',choice]],
- }
- });
- 'step 4'
- for(var i in result){
- if(result[i].links[0][2]=='reguhuo_betray'){
- event.betrays.push(lib.playerOL[i]);
- lib.playerOL[i].addExpose(0.2);
- }
- }
- 'step 5'
- for(var i of event.targets2){
- var b=event.betrays.contains(i);
- i.popup(b?'质疑':'不质疑',b?'fire':'wood');
- game.log(i,b?'#y质疑':'#g不质疑');
- }
- game.delay();
- 'step 6'
- player.showCards(trigger.cards);
- if(event.betrays.length){
- event.betrays.sortBySeat();
- if(event.fake){
- game.asyncDraw(event.betrays);
- trigger.cancel();
- trigger.getParent().goto(0);
- game.log(player,'声明的','#y'+event.cardTranslate,'作废了')
- }
- else{
- var next=game.createEvent('reguhuo_final',false);
- event.next.remove(next);
- trigger.after.push(next);
- next.targets=event.betrays;
- next.setContent(lib.skill.reguhuo_guess.contentx);
- event.finish();
- }
- }
- else event.finish();
- 'step 7'
- game.delayx();
- },
- contentx:function(){
- 'step 0'
- event.target=targets.shift();
- event.target.chooseToDiscard('弃置一张牌或失去1点体力').set('ai',function(card){
- return 9-get.value(card);
- });
- 'step 1'
- if(!result.bool) target.loseHp();
- 'step 2'
- target.addSkill('rechanyuan');
- if(targets.length) event.goto(0);
- },
- },
- reguhuo_backup:{},
- reguhuo_phase:{},
- rechanyuan:{
- init:function(player,skill){
- player.addSkillBlocker(skill);
- },
- onremove:function(player,skill){
- player.removeSkillBlocker(skill);
- },
- charlotte:true,
- locked:true,
- skillBlocker:function(skill,player){
- return skill!='chanyuan'&&skill!='rechanyuan'&&!lib.skill[skill].charlotte&&player.hp<=1;
- },
- mark:true,
- intro:{
- content:function(storage,player,skill){
- var str='锁定技,你不能于〖蛊惑〗的结算流程中进行质疑。当你的体力值不大于1时,你的其他技能失效。';
- var list=player.getSkills(null,false,false).filter(function(i){
- return lib.skill.rechanyuan.skillBlocker(i,player);
- });
- if(list.length) str+=('
失效技能:'+get.translation(list))
- return str;
- }
- }
- },
- botu:{
- audio:2,
- trigger:{player:'phaseAfter'},
- frequent:true,
- filter:function(event,player){
- var history=player.getHistory('useCard',function(evt){
- return evt.isPhaseUsing();
- });
- var suits=[];
- for(var i=0;i1&&get.number(card)<10) return 5;
- return 4;
- }
- if(suit=='club') return 2;
- return 0;
- },
- content:function(){
- player.judge(lib.skill.xinleiji.judgeCheck).judge2=function(result){
- return result.bool?true:false;
- };
- },
- ai:{
- useShan:true,
- effect:{
- target:function(card,player,target,current){
- if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
- target:target,
- card:card,
- },true)){
- var hastarget=game.hasPlayer(function(current){
- return get.attitude(target,current)<0;
- });
- var be=target.countCards('e',{color:'black'});
- if(target.countCards('h','shan')&&be){
- if(!target.hasSkill('xinguidao')) return 0;
- return [0,hastarget?target.countCards('he')/2:0];
- }
- if(target.countCards('h','shan')&&target.countCards('h')>2){
- if(!target.hasSkill('xinguidao')) return 0;
- return [0,hastarget?target.countCards('h')/4:0];
- }
- if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){
- return [0,0];
- }
- if(target.countCards('h')==0){
- return [1.5,0];
- }
- if(target.countCards('h')==1&&!be){
- return [1.2,0];
- }
- if(!target.hasSkill('xinguidao')) return [1,0.05];
- return [1,Math.min(0.5,(target.countCards('h')+be)/4)];
- }
- }
- }
- }
- },
- xinleiji_misa:{
- audio:'xinleiji',
- trigger:{player:'judgeEnd'},
- direct:true,
- disableReason:['暴虐','助祭','弘仪','孤影'],
- filter:function(event,player){
- return !lib.skill.xinleiji_misa.disableReason.contains(event.judgestr)&&['spade','club'].contains(event.result.suit);
- },
- content:function(){
- 'step 0'
- event.num=1+['club','spade'].indexOf(trigger.result.suit);
- event.logged=false;
- if(event.num==1&&player.isDamaged()){
- event.logged=true;
- player.logSkill('xinleiji');
- player.recover();
- }
- player.chooseTarget('雷击:是否对一名角色造成'+event.num+'点雷电伤害?',lib.filter.notMe).ai=function(target){
- var player=_status.event.player;
- return get.damageEffect(target,player,player,'thunder');
- };
- 'step 1'
- if(result.bool&&result.targets&&result.targets.length){
- if(!event.logged) player.logSkill('xinleiji',result.targets);
- else player.line(result.targets,'thunder');
- result.targets[0].damage(event.num,'thunder');
- }
- },
- },
- xinguidao:{
- audio:2,
- trigger:{global:'judge'},
- filter:function(event,player){
- return player.countCards('hes',{color:'black'})>0;
- },
- direct:true,
- content:function(){
- "step 0"
- player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
- get.translation(trigger.player.judging[0])+','+get.prompt('xinguidao'),'hes',function(card){
- if(get.color(card)!='black') return false;
- var player=_status.event.player;
- var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
- if(mod2!='unchanged') return mod2;
- var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
- if(mod!='unchanged') return mod;
- return true;
- }).set('ai',function(card){
- var trigger=_status.event.getTrigger();
- var player=_status.event.player;
- var judging=_status.event.judging;
- var result=trigger.judge(card)-trigger.judge(judging);
- var attitude=get.attitude(player,trigger.player);
- if(attitude==0||result==0){
- if(trigger.player!=player) return 0;
- if(game.hasPlayer(function(current){
- return get.attitude(player,current)<0;
- })){
- var checkx=lib.skill.xinleiji.judgeCheck(card,true)-lib.skill.xinleiji.judgeCheck(judging);
- if(checkx>0) return checkx;
- }
- return 0;
- };
- if(attitude>0){
- return result;
- }
- else{
- return -result;
- }
- }).set('judging',trigger.player.judging[0]);
- "step 1"
- if(result.bool){
- player.respond(result.cards,'highlight','xinguidao','noOrdering');
- }
- else{
- event.finish();
- }
- "step 2"
- if(result.bool){
- player.$gain2(trigger.player.judging[0]);
- player.gain(trigger.player.judging[0]);
- var card=result.cards[0];
- if(get.suit(card)=='spade'&&get.number(card)>1&&get.number(card)<10) player.draw('nodelay');
- trigger.player.judging[0]=result.cards[0];
- trigger.orderingCards.addArray(result.cards);
- game.log(trigger.player,'的判定牌改为',result.cards[0]);
- }
- "step 3"
- game.delay(2);
- },
- ai:{
- rejudge:true,
- tag:{
- rejudge:1
- }
- }
- },
- reqingguo:{
- mod:{
- aiValue:function(player,card,num){
- if(get.name(card)!='shan'&&get.color(card)!='black') return;
- var cards=player.getCards('hs',function(card){
- return get.name(card)=='shan'||get.color(card)=='black';
- });
- cards.sort(function(a,b){
- return (get.name(b)=='shan'?1:2)-(get.name(a)=='shan'?1:2);
- });
- var geti=function(){
- if(cards.contains(card)){
- return cards.indexOf(card);
- }
- return cards.length;
- };
- if(get.name(card)=='shan') return Math.min(num,[6,4,3][Math.min(geti(),2)])*0.6;
- return Math.max(num,[6.5,4,3][Math.min(geti(),2)]);
- },
- aiUseful:function(){
- return lib.skill.reqingguo.mod.aiValue.apply(this,arguments);
- },
- },
- locked:false,
- audio:2,
- enable:['chooseToRespond','chooseToUse'],
- filterCard:function(card){
- return get.color(card)=='black';
- },
- position:'hes',
- viewAs:{name:'shan'},
- viewAsFilter:function(player){
- if(!player.countCards('hes',{color:'black'})) return false;
- },
- prompt:'将一张黑色牌当闪打出',
- check:function(){return 1},
- ai:{
- order:2,
- respondShan:true,
- skillTagFilter:function(player){
- if(!player.countCards('hes',{color:'black'})) return false;
- },
- effect:{
- target:function(card,player,target,current){
- if(get.tag(card,'respondShan')&¤t<0) return 0.6
- }
- }
- }
- },
- reqiangxi:{
- subSkill:{
- off:{
- sub:true,
- },
- },
- audio:2,
- enable:"phaseUse",
- filterCard:function (card){
- return get.subtype(card)=='equip1';
- },
- selectCard:function (){
- return [0,1];
- },
- filterTarget:function (card,player,target){
- if(player==target) return false;
- if(target.hasSkill('reqiangxi_off')) return false;
- return player.inRange(target);
- },
- content:function (){
- "step 0"
- if(cards.length==0){
- player.loseHp();
- }
- "step 1"
- target.addTempSkill('reqiangxi_off');
- target.damage('nocard');
- },
- check:function (card){
- return 10-get.value(card);
- },
- position:"he",
- ai:{
- order:8.5,
- result:{
- target:function (player,target){
- if(!ui.selected.cards.length){
- if(player.hp<2) return 0;
- if(target.hp>=player.hp) return 0;
- }
- return get.damageEffect(target,player);
+ list.sortBySeat();
+ event.num=0;
+ event.targets=list;
+ 'step 1'
+ var target=targets[num];
+ event.target=target;
+ if(target.isIn()&&player.canUse('sha',target,false)) player.chooseBool('狷狭:是否视为对'+get.translation(target)+'依次使用'+get.cnNumber(player.storage.oljuanxia_counter[target.playerid])+'张【杀】?').set('goon',get.effect(target,{name:'sha'},player,player)>0).set('ai',()=>_status.event.goon);
+ 'step 2'
+ event.num++;
+ if(result.bool) event.count=player.storage.oljuanxia_counter[target.playerid];
+ else if(event.num0) event.redo();
+ else if(event.numplayer.hp){
- return 6-get.value(card);
- }
- return 4-get.value(card)
- },
- ai:{
- fireAttack:true,
- },
- },
- rekanpo:{
- mod:{
- aiValue:function(player,card,num){
- if(get.name(card)!='wuxie'&&get.color(card)!='black') return;
- var cards=player.getCards('hs',function(card){
- return get.name(card)=='wuxie'||get.color(card)=='black';
- });
- cards.sort(function(a,b){
- return (get.name(b)=='wuxie'?1:2)-(get.name(a)=='wuxie'?1:2);
- });
- var geti=function(){
- if(cards.contains(card)){
- return cards.indexOf(card);
- }
- return cards.length;
- };
- if(get.name(card)=='wuxie') return Math.min(num,[6,4,3][Math.min(geti(),2)])*0.6;
- return Math.max(num,[6,4,3][Math.min(geti(),2)]);
- },
- aiUseful:function(){
- return lib.skill.rekanpo.mod.aiValue.apply(this,arguments);
- },
- },
- locked:false,
- audio:2,
- audioname:['ol_sp_zhugeliang','ol_pangtong'],
- position:"hes",
- enable:"chooseToUse",
- filterCard:function (card){
- return get.color(card)=='black';
- },
- viewAsFilter:function (player){
- return player.countCards('hes',{color:'black'})>0;
- },
- viewAs:{
- name:"wuxie",
- },
- prompt:"将一张黑色牌当无懈可击使用",
- check:function (card){return 8-get.value(card)},
- },
- reshuangxiong:{
+ oldingcuo:{
trigger:{
- player:"phaseDrawBegin1",
+ player:'damageEnd',
+ source:'damageSource',
},
- group:"reshuangxiong2",
- audio:"shuangxiong",
- audioname:['re_yanwen'],
- check:function (event,player){
- if(player.countCards('h')>player.hp) return true;
- if(player.countCards('h')>3) return true;
- return false;
+ usable:1,
+ content:function(){
+ 'step 0'
+ player.draw(2);
+ 'step 1'
+ if(Array.isArray(result)&&result.length>1){
+ var color=get.color(result[0],player);
+ for(var i=1;i=1+event.num-event.player.hp) return false;
+ return true;
+ },
+ content:function(){
+ player.removeMark('zhaosong_trick',1);
+ player.removeSkill('zhaosong_trick');
+ //player.loseMaxHp();
+ if(player.hp<1) player.recover(1-player.hp);
+ player.draw();
+ },
+ },
+ equip:{
+ marktext:'赋',
+ intro:{
+ name:'诏颂(赋)',
+ name2:'赋',
+ content:'出牌阶段开始时,你可移去“赋”并弃置一名角色区域内的至多两张牌。',
+ },
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ charlotte:true,
+ onremove:true,
+ filter:function(event,player){
+ return player.hasMark('zhaosong_equip')&&game.hasPlayer(function(current){
+ return current.hasCard(function(card){
+ return lib.filter.canBeDiscarded(card,player,current);
+ },'hej');
+ });
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget('是否弃置“赋”标记?','弃置一名角色区域内的至多两张牌',function(card,player,current){
+ return current.hasCard(function(card){
+ return lib.filter.canBeDiscarded(card,player,current);
+ },'hej');
+ }).set('ai',function(target){
+ var player=_status.event.player,att=get.attitude(player,target)>0?2:1;
+ return get.effect(target,{name:'guohe_copy'},player,player)*att;
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('zhaosong_equip',target);
+ player.removeMark('zhaosong_equip',1);
+ player.removeSkill('zhaosong_equip');
+ player.discardPlayerCard(target,true,'hej',[1,2]);
+ }
+ },
+ },
+ },
+ },
+ lisi:{
+ audio:2,
+ trigger:{player:'useCardAfter'},
+ direct:true,
+ filter:function(event,player){
+ if(player==_status.currentPhase||!event.cards.filterInD().length) return false;
+ var hs=player.countCards('h');
+ return game.hasPlayer(function(current){
+ return current!=player&¤t.countCards('h')<=hs;
+ });
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('lisi'),'将'+get.translation(trigger.cards.filterInD())+'交给一名手牌数不大于你的其他角色',function(card,player,target){
+ return target!=player&&target.countCards('h')<=player.countCards('h');
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('lisi',target);
+ target.gain(trigger.cards.filterInD(),'gain2');
+ }
+ },
+ },
+ //王荣
+ olfengzi:{
+ audio:2,
+ trigger:{player:'useCard'},
+ direct:true,
+ usable:1,
+ filter:function(event,player){
+ if(event.olfengzi_buff||!event.targets.length||!player.isPhaseUsing()||player.hasSkill('olfengzi_buff')) return false;
+ var type=get.type(event.card,false);
+ if(type!='basic'&&type!='trick') return false;
+ return player.hasCard(function(i){
+ if(_status.connectMode) return true;
+ return get.type2(i,player)==type;
+ },'h');
+ },
+ content:function(){
+ 'step 0'
+ if(player!=game.me&&!player.isUnderControl()&&!player.isOnline()) game.delayx();
+ var type=get.type(trigger.card,false);
+ player.chooseToDiscard('h',get.prompt('olfengzi'),'弃置一张'+get.translation(type)+'牌,令'+get.translation(trigger.card)+'结算两次',function(card,player){
+ return get.type2(card,player)==_status.event.type;
+ }).set('type',type).set('ai',function(card){
+ var player=_status.event.player;
+ var trigger=_status.event.getTrigger();
+ if(trigger.card.name=='tiesuo') return 0;
+ var num=0;
+ for(var i of trigger.targets) num+=get.effect(i,trigger.card,player,player);
+ if(num<=0) return 0;
+ return 7-get.value(card);
+ }).logSkill='olfengzi';
+ 'step 1'
+ if(result.bool){
+ trigger.effectCount++;
+ }
+ else player.storage.counttrigger.olfengzi--;
+ },
+ /*subSkill:{
+ buff:{
+ trigger:{global:'useCardToTargeted'},
+ forced:true,
+ charlotte:true,
+ popup:false,
+ lastDo:true,
+ filter:function(event,player){
+ return (event.parent.olfengzi_buff==player&&event.targets.length==event.parent.triggeredTargets4.length);
+ },
+ content:function(){
+ trigger.getParent().targets=trigger.getParent().targets.concat(trigger.targets);
+ trigger.getParent().triggeredTargets4=trigger.getParent().triggeredTargets4.concat(trigger.targets);
+ },
+ onremove:function(player){
+ delete player.storage.counttrigger.olfengji;
+ },
+ },
+ },*/
+ },
+ oljizhan:{
+ audio:2,
+ trigger:{player:'phaseDrawBegin1'},
filter:function(event,player){
return !event.numFixed;
},
- content:function (){
- "step 0"
+ content:function(){
+ 'step 0'
trigger.changeToZero();
- event.cards=get.cards(2);
- event.videoId=lib.status.videoId++;
- game.broadcastAll(function(player,id,cards){
- var str;
- if(player==game.me&&!_status.auto){
- str='【双雄】选择获得其中一张牌';
- }
- else{
- str='双雄';
- }
- var dialog=ui.create.dialog(str,cards);
- dialog.videoId=id;
- },player,event.videoId,event.cards);
- event.time=get.utc();
- game.addVideo('showCards',player,['双雄',get.cardsInfo(event.cards)]);
- game.addVideo('delay',null,2);
- "step 1"
- var next=player.chooseButton([1,1],true);
- next.set('dialog',event.videoId);
- next.set('ai',function(button){
- var player=_status.event.player;
- var color=get.color(button.link);
- var value=get.value(button.link,player);
- if(player.countCards('h',{color:color})>player.countCards('h',['red','black'].remove(color)[0])) value+=5;
- return value;
- });
- "step 2"
- if(result.bool&&result.links){
- var cards2=[];
- for(var i=0;i_status.event.choice);
+ 'step 2'
+ var card=get.cards()[0];
+ game.cardsGotoOrdering(card);
+ event.cards.push(card);
+ var num=get.number(card,false);
+ if(num>event.num&&result.index==0||num0){
- game.delay(0,time);
- }
- "step 3"
- game.broadcastAll('closeDialog',event.videoId);
- var card2=event.card2;
- player.gain(card2,'gain2');
- player.addTempSkill('shuangxiong2');
- player.storage.shuangxiong=get.color(card2);
+ player.showCards(card);
+ 'step 3'
+ player.gain(cards,'gain2');
},
},
- "reshuangxiong2":{
- trigger:{
- player:"damageEnd",
- },
+ olfusong:{
+ audio:2,
+ forceDie:true,
+ trigger:{player:'die'},
+ skillAnimation:true,
+ animationColor:'gray',
direct:true,
- filter:function (event,player){
- var evt=event.getParent();
- return (evt&&evt.name=='juedou'&&evt[player==evt.player?'targetCards':'playerCards'].length)>0;
+ filter:function(event,player){
+ return game.hasPlayer(function(current){
+ return current.maxHp>player.maxHp;
+ });
},
- content:function (){
- "step 0"
- var evt=trigger.getParent();
- var cards=evt[player==evt.player?'targetCards':'playerCards'].slice(0);
- for(var i=0;iplayer.maxHp;
+ }).set('forceDie',true).set('ai',(target)=>get.attitude(_status.event.player,target));
+ 'step 1'
if(result.bool){
- player.logSkill('reshuangxiong');
- player.gain(cards,'gain2');
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('olfusong',target);
+ target.chooseControl('olfengzi','oljizhan').set('prompt','令'+get.translation(target)+'获得其中一个技能').set('ai',()=>(Math.random()>0.5?0:1));
}
+ else event.finish();
+ 'step 2'
+ target.addSkillLog(result.control);
},
},
-
- "new_yajiao":{
- audio:"reyajiao",
+ //邓芝
+ olxiuhao:{
+ audio:2,
trigger:{
- player:"loseEnd",
+ player:'damageBegin4',
+ source:'damageBegin2',
},
- frequent:true,
- filter:function (event,player){
- return player!=_status.currentPhase&&event.hs&&event.hs.length>0&&['useCard','respond'].contains(event.getParent().name);
+ usable:1,
+ filter:function(event,player){
+ return event.source&&event.source.isIn()&&event.source!=event.player;
},
- content:function (){
- "step 0"
- event.card=get.cards();
- player.showCards(event.card);
- event.same=false;
- if(get.type(event.card[0],'trick')==get.type(trigger.getParent().card,'trick')) event.same=true;
- player.chooseTarget('选择获得此牌的角色',true).set('ai',function(target){
- var att=get.attitude(_status.event.player,target);
- if(_status.event.du){
- if(target.hasSkillTag('nodu')) return 0;
- return -att;
- }
- if(!_status.event.same) att+=target==_status.event.player?1:0;
- if(att>0){
- return att+Math.max(0,5-target.countCards('h'));
- }
- return att;
- }).set('du',event.card.name=='du').set('same',event.same);
- "step 1"
- if(result.targets){
- player.line(result.targets,'green');
- result.targets[0].gain(event.card,'gain2');
- if(!event.same) player.chooseToDiscard(true,'he');
+ logTarget:function(event,player){
+ return player==event.player?event.source:event.player;
+ },
+ check:function(event,player){
+ _status.olxiuhao_judging=true;
+ var bool=false;
+ if(player==event.source){
+ if(get.attitude(player,event.player)>0) bool=true;
+ if(get.damageEffect(event.player,player,player,event.nature)<=0) bool=true;
}
+ else{
+ if(get.attitude(player,event.source)>0) bool=true;
+ if(get.damageEffect(player,event.source,player,event.nature)<0){
+ if(event.source.hasSkillTag('nogain')) bool=true;
+ if(event.num>=player.hp+player.countCards('hs',{name:['tao','jiu']})&&(!player.hasFriend()||player==get.zhu(player))) bool=true;
+ }
+ }
+ delete _status.olxiuhao_judging;
+ return bool;
+ },
+ content:function(){
+ trigger.cancel();
+ trigger.source.draw(2);
},
ai:{
effect:{
- target:function (card,player,target){
- if(get.tag(card,'respond')&&target.countCards('h')>1) return [1,0.2];
+ target:function(card,player,target){
+ if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(target,player)>0&&player!=target&&(!target.storage.counttrigger||!target.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5];
+ },
+ player:function(card,player,target){
+ if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(player,target)>0&&player!=target&&(!player.storage.counttrigger||!player.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5];
},
},
},
},
- "new_liyu":{
- audio:"liyu",
- trigger:{
- source:"damageSource",
+ olsujian:{
+ trigger:{player:'phaseDiscardBefore'},
+ forced:true,
+ content:function(){
+ trigger.setContent(lib.skill.olsujian.phaseDiscard);
},
- filter:function (event,player){
- if(event._notrigger.contains(event.player)) return false;
- return event.card&&event.card.name=='sha'&&event.player!=player&&event.player.isIn()&&event.player.countGainableCards(player,'hej')>0;
- },
- direct:true,
- content:function (){
+ phaseDiscard:function(){
'step 0'
- player.gainPlayerCard(get.prompt('new_liyu',trigger.player),trigger.player,'hej','visibleMove').set('ai',function(card){
- var player=_status.event.player;
- var evt=_status.event.target;
- if(get.attitude(player,evt)>0&&get.position(card)=='j') return 4+get.value(card);
- if(get.type(card)=='equip'){
- if(get.attitude(player,evt)>0&&game.hasPlayer(function(current){
- return (player.canUse({name:'juedou'},current)&¤t!=evt.target&&get.effect(current,{name:'juedou'},player,player)>2);
- })){
- return 5;
- }
- else if(game.hasPlayer(function(current){
- return (player.canUse({name:'juedou'},current)&¤t!=evt&¤t!=player&&get.effect(current,{name:'juedou'},player,player)<0);
- })){
- return 1;
- }
- else return 4;
- };
- return 3;
- }).set('logSkill',['new_liyu',trigger.player]);
+ game.log(player,'进入了弃牌阶段');
+ game.broadcastAll(function(player){
+ if(lib.config.show_phase_prompt){
+ player.popup('弃牌阶段',null,false);
+ }
+ },player);
+ event.trigger('phaseDiscard');
'step 1'
- if(result.bool){
- if(get.type(result.cards[0])!='equip'){
- trigger.player.draw();
- event.finish();
- }
+ var cards=lib.skill.olsujian.update(player);
+ if(!cards.length) event.finish();
else{
- if(!game.hasPlayer(function(current){
- return current!=player&¤t!=trigger.player&&player.canUse('juedou',current);
- })){
- event.finish();
- return;
- }
- trigger.player.chooseTarget(true,function(card,player,target){
- var evt=_status.event.getParent();
- return evt.player.canUse({name:'juedou'},target)&&target!=_status.event.player;
- },'请选择一名角色,视为'+get.translation(player)+'对其使用【决斗】').set('ai',function(target){
- var evt=_status.event.getParent();
- return get.effect(target,{name:'juedou'},evt.player,_status.event.player)-2;
+ event.cards=cards;
+ var str=get.translation(cards);
+ player.chooseControl().set('choiceList',[
+ '将'+str+'分配给任意名其他角色',
+ '弃置'+str+'并弃置一名其他角色至多等量的牌',
+ ]).set('ai',function(){
+ var cards=_status.event.getParent().cards,player=_status.event.player;
+ if(!game.hasPlayer(function(current){
+ return get.attitude(player,current)>0;
+ })) return 1;
+ if(game.hasPlayer(function(current){
+ var att=get.attitude(player,current);
+ return att!=0&¤t.countDiscardableCards(player,'he',function(i){
+ if(att>0) return get.value(i,current)>=4;
+ return get.value(i,current)<=0;
+ })>=cards.length&&get.effect(current,{name:'guohe_copy2'},player,player)>0;
+ })) return 1;
+ return 0;
});
+ }
+ 'step 2'
+ if(result.index==1){
+ cards=event.cards.filter(function(i){
+ return lib.filter.cardDiscardable(i,player,'olsujian');
+ });
+ if(cards.length){
+ event.num=cards.length;
+ player.discard(cards);
+ event.cards=cards;
}
+ else event.finish();
+ }
+ else event.goto(5);
+ 'step 3'
+ if(game.hasPlayer(function(current){
+ return current!=player&¤t.countDiscardableCards(player,'he')>0;
+ })){
+ player.chooseTarget(true,'弃置一名其他角色的至多'+get.cnNumber(num)+'张牌',function(card,player,current){
+ return current!=player&¤t.countDiscardableCards(player,'he')>0;
+ }).set('ai',function(current){
+ var att=get.attitude(player,current);
+ if(current.countDiscardableCards(player,'he',function(i){
+ if(att>0) return get.value(i,current)>=4;
+ return get.value(i,current)<=0;
+ })>=num) return 4*get.effect(current,{name:'guohe_copy2'},player,player);
+ return get.effect(current,{name:'guohe_copy2'},player,player);
+ });
}
else event.finish();
- 'step 2'
- if(result.targets){
- player.useCard({name:'juedou',isCard:true},result.targets[0],'noai');
- }
- },
- ai:{
- halfneg:true,
- },
- },
- new_retuxi:{
- audio:"retuxi",
- trigger:{
- player:"phaseDrawBegin2",
- },
- direct:true,
- preHidden:true,
- filter:function(event,player){
- return event.num>0&&!event.numFixed&&game.hasPlayer(function(target){
- return target.countCards('h')>0&&player!=target;
- });
- },
- content:function (){
- "step 0"
- var num=get.copy(trigger.num);
- if(get.mode()=='guozhan'&&num>2) num=2;
- player.chooseTarget(get.prompt('new_retuxi'),'获得至多'+get.translation(num)+'名角色的各一张手牌,然后少摸等量的牌',[1,num],function(card,player,target){
- return target.countCards('h')>0&&player!=target;
- },function(target){
- var att=get.attitude(_status.event.player,target);
- if(target.hasSkill('tuntian')) return att/10;
- return 1-att;
- }).setHiddenSkill('new_retuxi');
- "step 1"
+ 'step 4'
if(result.bool){
- result.targets.sortBySeat();
- player.logSkill('new_retuxi',result.targets);
- player.gainMultiple(result.targets);
- trigger.num-=result.targets.length;
+ var target=result.targets[0];
+ player.line(target,'green');
+ player.discardPlayerCard(target,true,[1,num]);
}
- else{
- event.finish();
- }
- "step 2"
- if(trigger.num<=0) game.delay();
- },
- ai:{
- threaten:1.6,
- expose:0.2,
- },
- },
- "new_reyiji":{
- audio:"reyiji",
- trigger:{
- player:"damageEnd",
- },
- frequent:true,
- filter:function (event){
- return (event.num>0)
- },
- content:function (){
- 'step 0'
- event.count=trigger.num;
- 'step 1'
- player.draw(2);
- event.count--;
+ event.finish();
+ 'step 5'
if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
event.given_map={};
- event.num=2;
- 'step 2'
+ 'step 6'
player.chooseCardTarget({
filterCard:function(card){
- return get.itemtype(card)=='card'&&!card.hasGaintag('reyiji_tag');
+ return card.hasGaintag('olsujian');
},
filterTarget:lib.filter.notMe,
- selectCard:[1,event.num],
+ selectCard:[1,cards.length],
+ forced:true,
prompt:'请选择要分配的卡牌和目标',
ai1:function(card){
if(!ui.selected.cards.length) return 1;
@@ -11282,22 +9430,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.value(card,target)*get.attitude(player,target);
},
});
- 'step 3'
+ 'step 7'
if(result.bool){
var res=result.cards,target=result.targets[0].playerid;
- player.addGaintag(res,'reyiji_tag');
- event.num-=res.length
+ player.removeGaintag('olsujian',res);
+ player.addGaintag(res,'olsujian_given');
+ cards.removeArray(res);
if(!event.given_map[target]) event.given_map[target]=[];
event.given_map[target].addArray(res);
- if(event.num>0) event.goto(2);
+ if(cards.length) event.goto(6);
}
- else if(event.num==2){
- if(_status.connectMode){
- game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
- }
- event.goto(5);
- }
- 'step 4'
+ else event.finish();
+ 'step 8'
if(_status.connectMode){
game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
}
@@ -11308,534 +9452,8640 @@ game.import('character',function(lib,game,ui,get,ai,_status){
map.push([source,event.given_map[i]]);
cards.addArray(event.given_map[i]);
}
- game.loseAsync({
+ if(map.length) game.loseAsync({
gain_list:map,
player:player,
cards:cards,
giver:player,
animate:'giveAuto',
}).setContent('gaincardMultiple');
- 'step 5'
- if(event.count>0&&player.hasSkill('new_reyiji')){
- player.chooseBool(get.prompt2('new_reyiji'));
+ 'step 9'
+ event.cards=[];
+ },
+ update:function(player){
+ player.removeGaintag('olsujian');
+ var hs=player.getCards('h');
+ player.getHistory('gain',function(evt){
+ hs.removeArray(evt.cards);
+ });
+ if(hs.length) player.addGaintag(hs,'olsujian');
+ return hs;
+ },
+ group:'olsujian_sync',
+ subSkill:{
+ sync:{
+ trigger:{player:['phaseBeginStart','gainBegin']},
+ forced:true,
+ popup:false,
+ firstDo:true,
+ filter:function(event,player){
+ if(event.name=='gain') return (player==_status.currentPhase)&&(event.getParent('olsujian').player!=player);
+ return true;
+ },
+ content:function(){
+ lib.skill.olsujian.update(player);
+ },
+ },
+ },
+ },
+ //卞夫人
+ fuwei:{
+ audio:'wanwei',
+ trigger:{
+ player:'loseAfter',
+ global:'gainAfter',
+ },
+ filter:function(event,player){
+ var evt=event;
+ if(event.name=='lose'){
+ if(event.type!='discard') return false;
+ evt=event.getParent();
+ }
+ if(evt[event.name=='gain'?'bySelf':'notBySelf']!=true) return false;
+ var evtx=event.getl(player);
+ return evtx&&evtx.cards2&&evtx.cards2.length>0;
+ },
+ prompt2:function(event,player){
+ var evt=event.getl(player),origins=evt.cards2.map(function(i){
+ return get.name(i,evt.hs.contains(i)?player:false);
+ });
+ return '从牌堆中获得'+get.translation(origins)+';若没有则改为摸一张牌';
+ },
+ usable:1,
+ content:function(){
+ var num=0,cards=[],evt=trigger.getl(player),origins=evt.cards2.map(function(i){
+ return get.name(i,evt.hs.contains(i)?player:false);
+ });
+ for(var i of origins){
+ var card=get.cardPile2(function(card){
+ return card.name==i&&!cards.contains(card);
+ });
+ if(card) cards.push(card);
+ else num++;
+ }
+ if(cards.length) player.gain(cards,'gain2');
+ if(num) player.draw(num);
+ },
+ },
+ yuejian:{
+ audio:2,
+ usable:2,
+ trigger:{global:'useCardAfter'},
+ filter:function(event,player){
+ return player!=event.player&&event.targets&&event.targets.contains(player)&&player.countCards('h')>0;
+ },
+ prompt2:function(event,player){
+ var suit=get.suit(event.card),hs=player.getCards('h'),cards=event.cards.filterInD();
+ if(!lib.suit.contains(suit)||!cards.length){
+ return '展示所有手牌,然后无事发生';
+ }
+ for(var i of hs){
+ if(get.suit(i)==suit){
+ return '展示所有手牌,然后无事发生';
+ }
+ }
+ return '展示所有手牌,然后获得'+get.translation(cards)+'';
+ },
+ check:function(event,player){
+ var suit=get.suit(event.card),hs=player.getCards('h'),cards=event.cards.filterInD();
+ if(!lib.suit.contains(suit)||!cards.length){
+ return false;
+ }
+ for(var i of hs){
+ if(get.suit(i)==suit){
+ return false;
+ }
+ }
+ return true;
+ },
+ content:function(){
+ 'step 0'
+ player.showHandcards(get.translation(player)+'发动了【约俭】');
+ var suit=get.suit(trigger.card),hs=player.getCards('h');
+ if(!lib.suit.contains(suit)){event.finish();return;}
+ for(var i of hs){
+ if(get.suit(i)==suit){
+ event.finish();
+ return;
+ }
+ }
+ 'step 1'
+ var cards=trigger.cards.filterInD();
+ if(cards.length) player.gain(cards,'gain2');
+ },
+ },
+ //杜袭
+ quxi:{
+ audio:2,
+ trigger:{player:'phaseUseEnd'},
+ direct:true,
+ limited:true,
+ skillAnimation:true,
+ animationColor:'water',
+ filter:function(event,player){
+ if(player.isTurnedOver()) return false;
+ var list=game.filterPlayer((target)=>target!=player&&!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
+ if(list.length<2) return false;
+ var nf=list[0].countCards('h');
+ for(var i=1;ihs&&!current.hasMark('quxi_gain')&&!current.hasMark('quxi_lose');
+ })) return get.attitude(player,target)/(Math.sqrt(1+target.countCards('h')));
+ return 0;
+ }
+ if(target.countCards('h')>ui.selected.targets[0].countCards('h')) return -get.attitude(_status.event.player,target);
+ return 0;
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('quxi',result.targets);
+ player.awakenSkill('quxi');
+ player.skip('phaseDiscard');
+ if(result.targets[0].countCards('h')>result.targets[1].countCards('h')) result.targets.reverse();
+ event.gainner=result.targets[0];
+ event.giver=result.targets[1];
+ player.turnOver();
}
else event.finish();
- 'step 6'
+ 'step 2'
+ event.gainner.gainPlayerCard(event.giver,true,'he');
+ 'step 3'
+ player.addSkill('quxi_effect');
+ event.gainner.addMark('quxi_gain',1);
+ event.giver.addMark('quxi_lose',1);
+ },
+ subSkill:{
+ effect:{
+ global:'quxi_gainlose',
+ trigger:{global:['roundStart','die']},
+ charlotte:true,
+ direct:true,
+ filter:function(event,player){
+ if(event.name=='die') return event.player.countMark('quxi_gain')>0||event.player.countMark('quxi_lose')>0;
+ return game.hasPlayer(function(target){
+ return target!=player&&(target.countMark('quxi_gain')>0||target.countMark('quxi_lose')>0)
+ });
+ },
+ content:function(){
+ 'step 0'
+ if(trigger.name=='die'){
+ var gain=trigger.player.countMark('quxi_gain'),lose=trigger.player.countMark('quxi_lose');
+ player.chooseTarget('是否令一名角色获得'+get.translation(trigger.player)+'的“'+(gain&&lose?'丰”和“歉':(gain?'丰':'歉'))+'”标记?',function(card,player,target){
+ return !target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose');
+ }).set('goon',gain-lose).set('ai',function(target){
+ var evt=_status.event;
+ return evt.goon*get.attitude(evt.player,target);
+ });
+ }
+ else event.goto(2);
+ 'step 1'
+ if(result.bool){
+ var targets=result.targets;
+ if(targets.length<2) targets.unshift(trigger.player);
+ player.logSkill('quxi_effect',targets,false);
+ player.line2(targets);
+ var gain=targets[0].countMark('quxi_gain'),lose=targets[0].countMark('quxi_lose');
+ if(gain){
+ targets[0].removeMark('quxi_gain',gain);
+ targets[1].addMark('quxi_gain',gain);
+ }
+ if(lose){
+ targets[0].removeMark('quxi_lose',lose);
+ targets[1].addMark('quxi_lose',lose);
+ }
+ game.delayx();
+ event.finish();
+ }
+ 'step 2'
+ if(game.hasPlayer(function(target){
+ return target.countMark('quxi_gain')>0;
+ })) player.chooseTarget(2,'是否转移“丰”标记?',function(card,player,target){
+ if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
+ return target.countMark('quxi_gain')>0;
+ }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
+ var player=_status.event.player;
+ if(!ui.selected.targets.length){
+ return -get.attitude(player,target);
+ }
+ return get.attitude(player,target);
+ });
+ else event.goto(4);
+ 'step 3'
+ if(result.bool){
+ var targets=result.targets;
+ player.logSkill('quxi_effect',targets,false);
+ player.line2(targets);
+ var gain=targets[0].countMark('quxi_gain');
+ if(gain){
+ targets[0].removeMark('quxi_gain',gain);
+ targets[1].addMark('quxi_gain',gain);
+ }
+ game.delayx();
+ }
+ 'step 4'
+ if(game.hasPlayer(function(target){
+ return target.countMark('quxi_lose')>0;
+ })) player.chooseTarget(2,'是否转移“歉”标记?',function(card,player,target){
+ if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
+ return target.countMark('quxi_lose')>0;
+ }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
+ var player=_status.event.player;
+ if(!ui.selected.targets.length){
+ return get.attitude(player,target);
+ }
+ return -get.attitude(player,target);
+ });
+ else event.finish();
+ 'step 5'
+ if(result.bool){
+ var targets=result.targets;
+ player.logSkill('quxi_effect',targets,false);
+ player.line2(targets);
+ var gain=targets[0].countMark('quxi_lose');
+ if(gain){
+ targets[0].removeMark('quxi_lose',gain);
+ targets[1].addMark('quxi_lose',gain);
+ }
+ game.delayx();
+ }
+ },
+ },
+ gainlose:{
+ trigger:{player:'phaseDrawBegin'},
+ forced:true,
+ filter:function(event,player){
+ if(event.numFixed) return false;
+ return player.countMark('quxi_gain')-player.countMark('quxi_lose')!=0;
+ },
+ content:function(){
+ trigger.num+=(player.countMark('quxi_gain')-player.countMark('quxi_lose'));
+ },
+ },
+ gain:{
+ marktext:'丰',
+ intro:{
+ name:'驱徙(丰)',
+ name2:'丰',
+ content:'mark',
+ },
+ },
+ lose:{
+ marktext:'歉',
+ intro:{
+ name:'驱徙(歉)',
+ name2:'歉',
+ content:'mark',
+ },
+ },
+ },
+ },
+ bixiong:{
+ trigger:{
+ player:'loseAfter',
+ global:'loseAsyncAfter',
+ },
+ forced:true,
+ filter:function(event,player){
+ if(event.type!='discard'||event.getlx===false||event.getParent('phaseDiscard').player!=player) return false;
+ var evt=event.getl(player);
+ return evt&&evt.hs&&evt.hs.length>0;
+ },
+ content:function(){
+ var cards=[],hs=trigger.getl(player).hs;
+ for(var i of hs) cards.add(get.suit(i,player));
+ player.addTempSkill('bixiong2',{player:'phaseBegin'});
+ player.markAuto('bixiong2',cards);
+ },
+ },
+ bixiong2:{
+ onremove:true,
+ mod:{
+ targetEnabled:function(card,player,target){
+ if(target.getStorage('bixiong2').contains(get.suit(card))) return false;
+ },
+ },
+ intro:{content:'不能成为$牌的目标'},
+ },
+ //高干
+ juguan:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return event.filterCard({
+ name:'sha',
+ },player,event)||event.filterCard({
+ name:'juedou',
+ },player,event);
+ },
+ chooseButton:{
+ dialog:function(){
+ return ui.create.dialog('拒关',[['sha','juedou'],'vcard']);
+ },
+ filter:function(button,player){
+ var evt=_status.event.getParent();
+ return evt.filterCard({
+ name:button.link[2],
+ },player,evt);
+ },
+ check:function(button){
+ return _status.event.player.getUseValue({
+ name:button.link[2],
+ })*(button.link[2]=='juedou'?3:1);
+ },
+ backup:function(links){
+ return {
+ audio:'juguan',
+ viewAs:{name:links[0][2]},
+ filterCard:true,
+ check:function(card){
+ return 6-get.value(card);
+ },
+ position:'hs',
+ onuse:function(result,player){
+ player.addTempSkill('juguan_effect');
+ },
+ }
+ },
+ prompt:function(links){
+ return '将一张手牌当做'+get.translation(links[0][2])+'使用';
+ },
+ },
+ ai:{
+ order:function(item,player){
+ return Math.max(get.order({name:'sha'}),get.order({name:'juedou'}))+0.2;
+ },
+ result:{player:1},
+ },
+ subSkill:{
+ effect:{
+ trigger:{global:'damage'},
+ forced:true,
+ charlotte:true,
+ firstDo:true,
+ silent:true,
+ popup:false,
+ filter:function(event,player){
+ var evt=event.getParent('useCard');
+ return event.card&&evt&&event.card==evt.card&&evt.skill=='juguan_backup'&&evt.player==player;
+ },
+ content:function(){
+ player.addSkill('juguan_draw');
+ player.markAuto('juguan_draw',[trigger.player]);
+ },
+ },
+ draw:{
+ audio:'juguan',
+ trigger:{player:'phaseDrawBegin'},
+ forced:true,
+ charlotte:true,
+ onremove:true,
+ content:function(){
+ player.removeSkill('juguan_draw');
+ if(!trigger.numFixed) trigger.num+=2;
+ },
+ group:'juguan_clear',
+ intro:{
+ content:'若没有受到$的伤害,则下个摸牌阶段多摸两张牌',
+ },
+ },
+ clear:{
+ trigger:{player:'damage'},
+ forced:true,
+ charlotte:true,
+ firstDo:true,
+ silent:true,
+ popup:false,
+ filter:function(event,player){
+ return player.storage.juguan_draw&&player.storage.juguan_draw.contains(event.source);
+ },
+ content:function(){
+ player.unmarkAuto('juguan_draw',[trigger.source]);
+ if(!player.storage.juguan_draw||!player.storage.juguan_draw.length) player.removeSkill('juguan_draw');
+ },
+ },
+ },
+ },
+ //OL鲍三娘
+ olwuniang:{
+ audio:'xinfu_wuniang',
+ trigger:{player:'useCardAfter'},
+ usable:1,
+ filter:function(event,player){
+ return event.card.name=='sha'&&event.targets.length==1&&event.targets[0].isIn();
+ },
+ logTarget:'targets',
+ content:function(){
+ 'step 0'
+ var target=trigger.targets[0];
+ target.chooseToUse(function(card,player,event){
+ if(get.name(card)!='sha') return false;
+ return lib.filter.filterCard.apply(this,arguments);
+ },'武娘:是否对'+get.translation(player)+'使用一张杀?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
+ if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
+ return lib.filter.filterTarget.apply(this,arguments);
+ }).set('sourcex',player);
+ 'step 1'
+ player.addTempSkill('olwuniang2');
+ player.addMark('olwuniang2',1,false);
+ player.draw();
+ },
+ },
+ olwuniang2:{
+ onremove:true,
+ charlotte:true,
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+player.countMark('olwuniang2');
+ },
+ },
+ },
+ olxushen:{
+ derivation:'olzhennan',
+ audio:'xinfu_xushen',
+ trigger:{player:'dying'},
+ limited:true,
+ skillAnimation:true,
+ animationColor:'fire',
+ filter:function(event,player){
+ return player.hp<1;
+ },
+ content:function(){
+ 'step 0'
+ player.awakenSkill('olxushen');
+ player.addSkill('olzhennan');
+ player.recover(1-player.hp);
+ 'step 1'
+ if(!player.isDying()&&!game.hasPlayer(function(current){
+ return current.name1=='guansuo'||current.name2=='guansuo';
+ })){
+ player.chooseTarget(function(card,player,current){
+ return current!=player&¤t.hasSex('male');
+ },'许身:是否令一名其他男性角色选择是否将其武将牌替换为“关索”?').set('ai',function(target){
+ return get.attitude(_status.event.player,target)-4;
+ });
+ }
+ else event.finish();
+ 'step 2'
+ if(!result.bool){
+ event.finish();
+ return;
+ }
+ var target=result.targets[0];
+ event.target=target;
+ player.line(target,'fire');
+ target.chooseBool('许身:是否将自己的一张武将牌替换为“关索”?');
+ 'step 3'
if(result.bool){
- player.logSkill('new_reyiji');
+ if(target.name2!=undefined){
+ target.chooseControl(target.name1,target.name2).set('prompt','请选择要更换的武将牌');
+ }
+ else event._result={control:target.name1};
+ }
+ else event.finish();
+ 'step 4'
+ target.reinit(result.control,'guansuo');
+ if(target.name=='guansuo'&&target.group!='shu') target.changeGroup('shu');
+ if(_status.characterlist){
+ _status.characterlist.add(result.control);
+ _status.characterlist.remove('guansuo');
+ }
+ },
+ },
+ olzhennan:{
+ audio:'xinfu_zhennan',
+ enable:'phaseUse',
+ usable:1,
+ viewAs:{name:'nanman'},
+ filterCard:true,
+ selectCard:function(){
+ if(ui.selected.targets.length) return [ui.selected.targets.length,Math.min(ui.selected.targets.length+1,game.players.length-1)];
+ return [1,Infinity];
+ },
+ check:function(card){
+ var player=_status.event.player;
+ if(game.countPlayer(function(current){
+ return current!=player&&player.canUse('nanman',current)&&get.effect(current,{name:'nanman'},player,player)>0;
+ })<=ui.selected.cards.length) return 0;
+ return 6-get.value(card);
+ },
+ selectTarget:function(){
+ return ui.selected.cards.length;
+ },
+ ai:{
+ order:2,
+ },
+ group:'olzhennan2',
+ },
+ olzhennan2:{
+ trigger:{target:'useCardToBefore'},
+ forced:true,
+ locked:false,
+ audio:'olzhennan',
+ filter:function(event,player){
+ return event.card.name=='nanman';
+ },
+ content:function(){
+ trigger.cancel();
+ },
+ },
+ //黄承彦
+ guanxu:{
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return game.hasPlayer((current)=>lib.skill.guanxu.filterTarget(null,player,current));
+ },
+ filterTarget:function(card,player,target){
+ return target!=player&&target.countCards('h')>0;
+ },
+ content:function(){
+ 'step 0'
+ var cards=get.cards(5);
+ for(var i=cards.length-1;i>=0;i--){
+ ui.cardPile.insertBefore(cards[i],ui.cardPile.firstChild);
+ }
+ game.updateRoundNumber();
+ var hs=target.getCards('h');
+ var dialog=['观虚:选择要操作的牌',''+get.translation(target)+'的手牌
',hs,'牌堆顶
',cards];
+ player.chooseButton(dialog,2).set('filterButton',function(button){
+ if(ui.selected.buttons.length) return get.position(button.link)!=get.position(ui.selected.buttons[0].link);
+ return true;
+ }).set('cards1',hs).set('cards2',cards).set('ai',function(button){
+ var card=button.link,cards1=_status.event.cards1.slice(0);
+ var cards2=_status.event.cards2.slice(0),target=_status.event.getParent().target;
+ if(!ui.selected.buttons.length){
+ if(!cards1.contains(card)) return 0;
+ cards1.remove(card);
+ var suits=cards2.map(function(i){
+ return get.suit(i,target);
+ });
+ for(var i of lib.suit){
+ var num=cards1.filter(function(c){
+ return get.suit(c,target)==i;
+ }).length;
+ if(num>2||(num>1&&suits.contains(i))) return 20+get.value(card);
+ }
+ return get.value(card);
+ }
+ cards1.remove(ui.selected.buttons[0].link);
+ cards1.push(card);
+ for(var i of lib.suit){
+ if(cards1.filter(function(c){
+ return get.suit(c,target)==i;
+ }).length>2) return 20-get.value(card);
+ return get.value(ui.selected.buttons[0].link)-get.value(card);
+ }
+ });
+ 'step 1'
+ if(result.bool){
+ var cards=result.links;
+ if(get.position(cards[0])!='h') cards.reverse();
+ var next=target.lose(cards[0],ui.cardPile);
+ next.insert_index_card=cards[1];
+ next.insert_index=function(event){
+ return event.insert_index_card;
+ }
+ target.gain(cards[1],'draw');
+ }
+ else event.finish();
+ 'step 2'
+ game.updateRoundNumber();
+ var suits=[],map={},hs=target.getCards('h');
+ if(hs.length){
+ for(var i of hs){
+ if(!lib.filter.canBeDiscarded(i,player,target,'guanxu')) continue;
+ var suit=get.suit(i,target);
+ if(!map[suit]) map[suit]=1;
+ else map[suit]++;
+ if(map[suit]>2) suits.add(suit);
+ }
+ var next=player.discardPlayerCard(target,3,'visible','h');
+ next.set('suits',suits);
+ next.set('filterButton',function(button){
+ var suit=get.suit(button.link);
+ if(!ui.selected.buttons.length) return _status.event.suits.contains(suit);
+ return suit==get.suit(ui.selected.buttons[0].link)
+ });
+ if(suits.length) next.set('forced',true);
+ }
+ },
+ ai:{
+ order:9,
+ result:{
+ target:function(player,target){
+ if(target.countCards('h')>3) return -5;
+ if(target.countCards('h')==3) return -3;
+ return -0.5;
+ },
+ },
+ },
+ },
+ yashi:{
+ trigger:{player:'damageEnd'},
+ direct:true,
+ filter:function(event,player){
+ if(event.source&&event.source.isIn()) return true;
+ return game.hasPlayer((current)=>lib.skill.guanxu.filterTarget(null,player,current));
+ },
+ content:function(){
+ 'step 0'
+ event.addIndex=0;
+ var choiceList=[];
+ if(trigger.source&&trigger.source.isIn()){
+ choiceList.push('令'+get.translation(trigger.source)+'的所有非锁定技失效');
+ }
+ else event.addIndex++;
+ if(game.hasPlayer((current)=>lib.skill.guanxu.filterTarget(null,player,current))) choiceList.push('发动一次〖观虚〗');
+ player.chooseControl('cancel2').set('prompt',get.prompt('yashi')).set('choiceList',choiceList).set('ai',function(){
+ var player=_status.event.player,source=_status.event.getTrigger().source,index=_status.event.getParent().addIndex;
+ if(game.hasPlayer(function(current){
+ return current!=player&¤t.countCards('h')>3&&get.attitude(player,current)<0;
+ })) return 1-index;
+ if(source&&source.isIn()&&get.attitude(player,source)<0&&!source.hasSkill('fengyin')) return 0;
+ if(game.hasPlayer(function(current){
+ return current!=player&¤t.countCards('h')>0&&get.attitude(player,current)<0;
+ })) return 1-index;
+ return 'cancel2';
+ });
+ 'step 1'
+ if(result.control!='cancel2'){
+ if(result.index+event.addIndex==0){
+ var target=trigger.source;
+ player.logSkill('yashi',target);
+ //target.removeSkill('fengyin');
+ target.addTempSkill('fengyin',{player:'phaseBegin'});
+ event.finish();
+ }
+ else player.chooseTarget(true,'请选择〖观虚〗的目标',lib.skill.guanxu.filterTarget).set('ai',function(target){
+ var player=_status.event.player;
+ return get.effect(target,'guanxu',player,player);
+ });
+ }
+ else event.finish();
+ 'step 2'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('yashi',target);
+ var next=game.createEvent('yashi_guanxu');
+ next.player=player;
+ next.target=target;
+ next.setContent(lib.skill.guanxu.content);
+ }
+ },
+ },
+ //黄祖
+ wangong:{
+ audio:2,
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ return get.type(event.card,false)=='basic';
+ },
+ content:function(){
+ player.addSkill('wangong2');
+ },
+ },
+ wangong2:{
+ trigger:{player:'useCard1'},
+ forced:true,
+ popup:false,
+ firstDo:true,
+ charlotte:true,
+ content:function(){
+ player.removeSkill('wangong2');
+ if(trigger.card.name=='sha') trigger.baseDamage++;
+ },
+ mod:{
+ cardUsable:function(card){
+ if(card.name=='sha') return Infinity;
+ },
+ targetInRange:function(card){
+ if(card.name=='sha') return true;
+ },
+ },
+ mark:true,
+ intro:{
+ content:'使用【杀】无距离和次数限制且伤害+1',
+ },
+ },
+ //潘淑
+ weiyi:{
+ trigger:{global:'damageEnd'},
+ filter:function(event,player){
+ if(player.getStorage('weiyi').contains(event.player)||!event.player.isIn()) return false;
+ return event.player.hp>=player.hp||event.player.isDamaged();
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var list=[];
+ if(trigger.player.hp>=player.hp) list.push('失去体力');
+ if(trigger.player.hp<=player.hp&&trigger.player.isDamaged()) list.push('回复体力');
+ list.push('cancel2')
+ player.chooseControl(list).set('prompt',get.prompt2('weiyi',trigger.player)).set('ai',function(){
+ var player=_status.event.player,target=_status.event.getTrigger().player;
+ var att=get.attitude(player,target),eff=get.recoverEffect(target,player,player);
+ if(target.hp<=player.hp&&target.isDamaged()&&att>2&&eff>0){
+ if(player==target){
+ var storage=player.getStorage('weiyi');
+ if(player.hp>=2&&game.hasPlayer(function(current){
+ return current.hp==player.hp+1&&!storage.contains(current)&&get.attitude(player,current)<0;
+ })) return 'cancel2';
+ }
+ return '回复体力';
+ }
+ if(target.hp>=player.hp&&att<-2&&eff<0) return '失去体力';
+ return 'cancel2';
+ });
+ 'step 1'
+ if(result.control!='cancel2'){
+ var target=trigger.player;
+ player.logSkill('weiyi',target);
+ player.markAuto('weiyi',[target]);
+ target[result.control=='失去体力'?'loseHp':'recover']();
+ }
+ },
+ onremove:true,
+ intro:{
+ content:'已令$对汝威服',
+ },
+ },
+ jinzhi:{
+ audio:2,
+ enable:['chooseToUse','chooseToRespond'],
+ hiddenCard:function(player,name){
+ if(get.type(name)=='basic'&&lib.inpile.contains(name)&&player.countMark('jinzhi2')=player.countCards('he')) return false;
+ for(var i of lib.inpile){
+ if(get.type(i)=='basic'&&event.filterCard({name:i},player,event)) return true;
+ }
+ return false;
+ },
+ chooseButton:{
+ dialog:function(event,player){
+ var list=[];
+ for(var i of lib.inpile){
+ if(get.type(i)=='basic'&&event.filterCard({name:i},player,event)){
+ list.push(['基本','',i]);
+ if(i=='sha'){
+ for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
+ }
+ }
+ }
+ return ui.create.dialog('锦织',[list,'vcard'],'hidden')
+ },
+ check:function(button){
+ if(button.link[2]=='shan') return 3;
+ var player=_status.event.player;
+ if(button.link[2]=='jiu'){
+ if(player.getUseValue({name:'jiu'})<=0) return 0;
+ if(player.countCards('h','sha')) return player.getUseValue({name:'jiu'});
+ }
+ return player.getUseValue({name:button.link[2],nature:button.link[3]})/4;
+ },
+ backup:function(links,player){
+ return {
+ selectCard:player.countMark('jinzhi2')+1,
+ filterCard:function(card,player){
+ if(ui.selected.cards.length){
+ if(get.color(card)!=get.color(ui.selected.cards[0])) return false;
+ }
+ return lib.filter.cardDiscardable.apply(this,arguments);
+ },
+ complexCard:true,
+ viewAs:{
+ name:links[0][2],
+ nature:links[0][3],
+ suit:'none',
+ number:null,
+ isCard:true,
+ },
+ position:'he',
+ ignoreMod:true,
+ check:function(card){
+ var player=_status.event.player,color=get.color(card,player);
+ if(player.countCards('he',{color:color})<=player.countMark('jinzhi2')||(ui.selected.cards.length&&get.color(ui.selected.cards[0],player)!=color)) return -1;
+ if(lib.skill.jinzhi_backup.viewAs.name=='jiu'&&!player.countCards('h',function(cardx){
+ return card!=cardx&&!ui.selected.cards.contains(cardx)&&get.name(cardx,player)=='sha';
+ })) return 0;
+ return Math.min(0.01,6-get.value(card));
+ },
+ precontent:function(){
+ player.logSkill('jinzhi');
+ player.addTempSkill('jinzhi2','roundStart');
+ player.addMark('jinzhi2',1,false);
+ var cards=event.result.cards;
+ player.discard(cards);
+ player.draw();
+ event.result.card={
+ name:event.result.card.name,
+ nature:event.result.card.nature,
+ isCard:true,
+ };
+ event.result.cards=[];
+ delete event.result.skill;
+ if(cards.length>1){
+ var color=get.color(cards[0],player);
+ for(var i=1;i0&&player.countCards('h','sha')) return get.order({name:'jiu'})+1;
+ return 1;
+ },
+ respondShan:true,
+ respondSha:true,
+ skillTagFilter:function(player){
+ if(player.countMark('jinzhi2')>=player.countCards('he')) return false;
+ },
+ result:{
+ player:function(player){
+ if(_status.event.dying) return get.attitude(player,_status.event.dying);
+ return 1;
+ }
+ }
+ }
+ },
+ jinzhi2:{
+ onremove:true,
+ intro:{
+ content:'本轮已发动过#次',
+ },
+ },
+ //宗预
+ zyqiao:{
+ audio:2,
+ trigger:{target:'useCardToTargeted'},
+ logTarget:'player',
+ usable:2,
+ preHidden:true,
+ filter:function(event,player){
+ var source=event.player;
+ if(source==player) return false;
+ if(get.mode()=='guozhan'&&source.isFriendOf(player)) return false;
+ return source.countDiscardableCards(player,'he')>0;
+ },
+ check:function(event,player){
+ var target=event.player;
+ if(get.attitude(player,target)>=0) return false;
+ if(!player.countCards('he',function(card){
+ return lib.filter.cardDiscardable(card,player,'zyqiao');
+ })) return true;
+ if(player.countCards('he',(card)=>get.value(card,player)<5)) return true;
+ if(target.countCards('he',(card)=>get.value(card,target)>6)&&player.countCards('he',(card)=>get.value(card,player)<7)) return true;
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ player.discardPlayerCard(trigger.player,true,'he');
+ 'step 1'
+ if(player.countCards('he',function(card){
+ return lib.filter.cardDiscardable(card,player,'zyqiao');
+ })) player.chooseToDiscard('he',true);
+ },
+ },
+ chengshang:{
+ audio:2,
+ trigger:{player:'useCardAfter'},
+ filter:function(event,player){
+ if(!lib.suit.contains(get.suit(event.card,false))||typeof get.number(event.card)!='number') return false;
+ if(player.getHistory('sourceDamage',function(evt){
+ return evt.card==event.card;
+ }).length) return false;
+ var phsu=event.getParent('phaseUse');
+ if(!phsu||phsu.player!=player) return false;
+ if(player.getHistory('gain',function(evt){
+ return evt.getParent().name=='chengshang';
+ }).length) return false;
+ for(var i of event.targets){
+ if(i!=player&&(get.mode()!='guozhan'||i.isEnemyOf(player))) return true;
+ }
+ return false;
+ },
+ preHidden:true,
+ content:function(){
+ var suit=get.suit(trigger.card);
+ var number=get.number(trigger.card);
+ var cards=[];
+ for(var i=0;i0;
+ })){
+ delete player._reduanbingtmp;
+ return [1,1];
+ }
+ delete player._reduanbingtmp;
+ }
+ }
+ }
+ },
+ group:'reduanbing_sha',
+ subSkill:{
+ sha:{
+ audio:'duanbing',
+ audioname:['heqi'],
+ trigger:{player:'useCardToPlayered'},
+ forced:true,
+ filter:function(event,player){
+ return event.card.name=='sha'&&!event.getParent().directHit.contains(event.target)&&get.distance(player,event.target)<=1;
+ },
+ logTarget:'target',
+ content:function(){
+ var id=trigger.target.playerid;
+ var map=trigger.getParent().customArgs;
+ if(!map[id]) map[id]={};
+ if(typeof map[id].shanRequired=='number'){
+ map[id].shanRequired++;
+ }
+ else{
+ map[id].shanRequired=2;
+ }
+ },
+ ai:{
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ if(arg.card.name!='sha'||arg.target.countCards('h','shan')>1||get.distance(player,arg.target)>1) return false;
+ },
+ },
+ },
+ },
+ },
+ refenxun:{
+ audio:'fenxun',
+ enable:'phaseUse',
+ usable:1,
+ position:'he',
+ filterTarget:function(card,player,target){
+ return target!=player;
+ },
+ content:function(){
+ player.markAuto('refenxun2',targets);
+ player.addTempSkill('refenxun2');
+ },
+ ai:{
+ order:6.5,
+ result:{
+ player:function(player,target){
+ if(get.distance(player,target)<=1) return 0;
+ var hs=player.getCards('h','shunshou');
+ if(hs.length&&player.canUse(hs[0],target,false)){
+ return 1;
+ }
+ var geteff=function(current){
+ return player.canUse('sha',current,false,true)&&get.effect(current,{name:'sha'},player,player)>0;
+ }
+ if(player.hasSha()&&geteff(target)){
+ var num=game.countPlayer(function(current){
+ return current!=player&&get.distance(player,current)<=1&&geteff(current);
+ });
+ if(num==0){
+ if(game.hasPlayer(function(current){
+ return player.canUse('sha',current)&&geteff(current)&¤t!=target;
+ })){
+ return 1;
+ }
+ }
+ else if(num==1){
+ return 1;
+ }
+ }
+ return 0;
+ }
+ }
+ }
+ },
+ refenxun2:{
+ audio:'fenxun',
+ trigger:{
+ player:'phaseJieshuBegin',
+ },
+ forced:true,
+ charlotte:true,
+ filter:function(event,player){
+ return player.getHistory('sourceDamage',function(evt){
+ return player.storage.refenxun2.contains(evt.player);
+ }).length==0&&player.countCards('he',function(card){
+ return lib.filter.cardDiscardable(card,player,'refenxun2');
+ })>0;
+ },
+ content:function(){
+ player.chooseToDiscard('he',true);
+ },
+ onremove:true,
+ intro:{
+ content:'到$的距离视为1'
+ },
+ mod:{
+ globalFrom:function(from,to){
+ if(from.storage.refenxun2.contains(to)){
+ return -Infinity;
+ }
+ }
+ },
+ },
+ //蔡阳新技能
+ zhuixi:{
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+1;
+ },
+ },
+ },
+ //新塌顿
+ reluanzhan:{
+ audio:'luanzhan',
+ trigger:{
+ player:'damageEnd',
+ source:'damageSource',
+ },
+ forced:true,
+ locked:false,
+ content:function(){
+ player.addMark('reluanzhan',1,false);
+ },
+ intro:{content:'mark'},
+ ai:{notemp:true},
+ group:['reluanzhan_add','reluanzhan_remove'],
+ },
+ reluanzhan_add:{
+ trigger:{player:'useCard2'},
+ direct:true,
+ filter:function(event,player){
+ if(event.card.name!='sha'&&(get.color(event.card)!='black'||get.type(event.card)!='trick')||!player.countMark('reluanzhan')) return false;
+ var info=get.info(event.card);
+ if(info.allowMultiple==false) return false;
+ if(event.targets&&!info.multitarget){
+ if(game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current);
+ })){
+ return true;
+ }
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var num=player.countMark('reluanzhan');
+ var prompt2='为'+get.translation(trigger.card)+'增加至多'+get.cnNumber(num)+'个目标'
+ player.chooseTarget(get.prompt('reluanzhan'),function(card,player,target){
+ if(_status.event.targets.contains(target)) return false;
+ var player=_status.event.player;
+ return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target);
+ },[1,num]).set('prompt2',prompt2).set('ai',function(target){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ return get.effect(target,trigger.card,player,player);
+ }).set('card',trigger.card).set('targets',trigger.targets);
+ 'step 1'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.targets=result.targets;
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(event.targets){
+ player.logSkill('reluanzhan',event.targets);
+ trigger.targets.addArray(event.targets);
+ }
+ },
+ },
+ reluanzhan_remove:{
+ audio:'luanzhan',
+ trigger:{player:'useCardToPlayered'},
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ if(!event.isFirstTarget||(event.card.name!='sha'&&(get.color(event.card)!='black'||get.type(event.card)!='trick'))||!player.countMark('reluanzhan')) return false;
+ var info=get.info(event.card);
+ if(info.allowMultiple==false||info.multitarget) return false;
+ return event.targets.length';
+ td.link=i;
+ td.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
+ for(var j in lib.element.button){
+ td[j]=lib.element.button[j];
+ }
+ table.appendChild(td);
+ dialog.buttons.add(td);
+ }
+ dialog.content.appendChild(table);
+ var type=player.storage.youlong?'basic':'trick';
+ var list=[];
+ for(var name of lib.inpile){
+ if(player.storage.youlong2.contains(name)) continue;
+ if(get.type(name)!=type) continue;
+ if(event.filterCard({name:name,isCard:true},player,event)){
+ list.push([type,'',name]);
+ if(name=='sha'){
+ for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
+ }
+ }
+ }
+ dialog.add([list,'vcard']);
+ return dialog;
+ },
+ filter:function(button){
+ if(ui.selected.buttons.length&&typeof button.link==typeof ui.selected.buttons[0].link) return false;
+ return true;
+ },
+ select:2,
+ check:function(button){
+ var player=_status.event.player;
+ if(typeof button.link=='number'){
+ var card=player.getEquip(button.link);
+ if(card){
+ var val=get.value(card);
+ if(val>0) return 0;
+ return 5-val;
+ }
+ switch(button.link){
+ case 3:return 4.5;break;
+ case 4:return 4.4;break;
+ case 5:return 4.3;break;
+ case 2:return (3-player.hp)*1.5;break;
+ case 1:{
+ if(game.hasPlayer(function(current){
+ return (get.realAttitude||get.attitude)(player,current)<0&&get.distance(player,current)>1;
+ })) return 0;
+ return 3.2;
+ }
+ }
+ }
+ var name=button.link[2];
+ var evt=_status.event.getParent();
+ if(get.type(name)=='basic'){
+ if(name=='shan') return 2;
+ if(evt.type=='dying'){
+ if(get.attitude(player,evt.dying)<2) return false;
+ if(name=='jiu') return 2.1;
+ return 1.9;
+ }
+ if(evt.type=='phase') return player.getUseValue({name:name,nature:button.link[3],isCard:true});
+ return 1;
+ }
+ if(!['chuqibuyi','shuiyanqijunx','juedou','nanman','wanjian','shunshou','zhujinqiyuan'].contains(name)) return 0;
+ var card={name:name,isCard:true};
+ if(['shunshou','zhujinqiyuan'].contains(card.name)){
+ if(!game.hasPlayer(function(current){
+ return get.attitude(player,current)!=0&&get.distance(player,current)<=1&&player.canUse(card,current)&&get.effect(current,card,player,player)>0;
+ })) return 0;
+ return player.getUseValue(card)-7;
+ }
+ return player.getUseValue(card)-4;
+ },
+ backup:function(links,player){
+ if(typeof links[1]=='number') links.reverse();
+ var equip=links[0];
+ var name=links[1][2];
+ var nature=links[1][3];
+ return {
+ filterCard:function(){return false},
+ selectCard:-1,
+ equip:equip,
+ viewAs:{
+ name:name,
+ nature:nature,
+ isCard:true,
+ },
+ popname:true,
+ precontent:function(){
+ player.logSkill('youlong');
+ player.disableEquip(lib.skill.youlong_backup.equip);
+ delete event.result.skill;
+ player.addTempSkill('youlong_'+(player.storage.youlong||false),'roundStart');
+ player.changeZhuanhuanji('youlong');
+ player.storage.youlong2.add(event.result.card.name);
+ },
+ }
+ },
+ prompt:function(links,player){
+ if(typeof links[1]=='number') links.reverse();
+ var equip='equip'+links[0];
+ var name=links[1][2];
+ var nature=links[1][3];
+ return '废除自己的'+get.translation(equip)+'栏,视为使用'+(get.translation(nature)||'')+get.translation(name);
+ },
+ },
+ ai:{
+ respondSha:true,
+ respondShan:true,
+ skillTagFilter:function(player,tag,arg){
+ if(arg=='respond') return false;
+ if(!player.storage.youlong||player.hasSkill('youlong_true')) return false;
+ var name=(tag=='respondSha'?'sha':'shan');
+ return !player.storage.youlong2.contains(name);
+ },
+ order:1,
+ result:{
+ player:1,
+ },
+ },
+ },
+ youlong_true:{charlotte:true},
+ youlong_false:{charlotte:true},
+ luanfeng:{
+ audio:2,
+ audioname:['key_sakuya'],
+ trigger:{global:'dying'},
+ filter:function(event,player){
+ return event.player.maxHp>=player.maxHp&&event.player.hp<1;
+ },
+ limited:true,
+ skillAnimation:true,
+ animationColor:'soil',
+ logTarget:'player',
+ check:function(event,player){
+ if(get.attitude(player,event.player)<4) return false;
+ if(player.countCards('h',function(card){
+ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
+ if(mod2!='unchanged') return mod2;
+ var mod=game.checkMod(card,player,event.player,'unchanged','cardSavable',player);
+ if(mod!='unchanged') return mod;
+ var savable=get.info(card).savable;
+ if(typeof savable=='function') savable=savable(card,player,event.player);
+ return savable;
+ })>=1-event.player.hp) return false;
+ if(event.player==player||event.player==get.zhu(player)) return true;
+ return !player.hasUnknown();
+ },
+ content:function(){
+ 'step 0'
+ player.awakenSkill('luanfeng');
+ trigger.player.recover(3-trigger.player.hp);
+ 'step 1'
+ var list=[],target=trigger.player;
+ for(var i=1;i<6;i++){
+ for(var j=0;j0) target.enableEquip(list);
+ if(list.length<6) target.drawTo(6-list.length);
+ if(target.storage.kotarou_rewrite) target.storage.kotarou_rewrite=[];
+ if(player==target) player.storage.youlong2=[];
+ },
+ },
+ //曹爽,韩遂,何进
+ xiaoxi:{
+ audio:2,
+ audioname:['machao','hansui','pangde'],
+ trigger:{
+ player:'enterGame',
+ global:'phaseBefore',
+ },
+ filter:function(event,player){
+ return (event.name!='phase'||game.phaseNumber==0);
+ },
+ direct:true,
+ content:function(){
+ player.chooseUseTarget('sha',get.prompt('xiaoxi'),'视为使用一张【杀】').logSkill='xiaoxi';
+ },
+ },
+ spmouzhu:{
+ enable:'phaseUse',
+ audio:'mouzhu',
+ usable:1,
+ filter:function(event,player){
+ return game.hasPlayer((current)=>lib.skill.spmouzhu.filterTarget(null,player,current));
+ },
+ filterTarget:function(card,player,target){
+ if(!target.countCards('h')) return false;
+ return player!=target&&(target.hp==player.hp||get.distance(player,target)==1);
+ },
+ selectTarget:[1,Infinity],
+ content:function(){
+ 'step 0'
+ target.chooseCard('h','交给'+get.translation(player)+'一张牌',true);
+ 'step 1'
+ if(result.bool) target.give(result.cards,player);
+ 'step 2'
+ if(player.countCards('h')<=target.countCards('h')){
+ event.finish();
+ return;
+ }
+ var list=[];
+ if(target.canUse('sha',player,false)) list.push('sha');
+ if(target.canUse('juedou',player,false)) list.push('juedou');
+ if(!list.length) event.finish();
+ else if(list.length==1) event._result={control:list[0]};
+ else target.chooseControl(list).set('prompt','对'+get.translation(player)+'使用一张【杀】或【决斗】。').ai=function(){
+ return get.effect(player,{name:'sha'},target,target)>=get.effect(player,{name:'juedou'},target,target)?'sha':'juedou';
+ };
+ 'step 3'
+ target.useCard({name:result.control,isCard:true},player,'noai');
+ },
+ ai:{
+ order:7,
+ result:{
+ target:-1.2,
+ player:function(player,target){
+ if(ui.selected.targets.length) return 0;
+ if(target.countCards('h')-player.countCards('h')>1) return 1;
+ if(get.damageEffect(target,player,player,player)>0) return 1;
+ if(player.hp>3||player.countCards('h','sha')&&player.countCards('h','shan')) return 0;
+ if(player.hp>2) return -1.1;
+ return -2;
+ },
+ },
+ },
+ },
+ spyanhuo:{
+ audio:'yanhuo',
+ trigger:{player:'die'},
+ forceDie:true,
+ skillAnimation:true,
+ animationColor:'soil',
+ content:function(){
+ player.line(game.players,'green');
+ game.addGlobalSkill('spyanhuo_damage');
+ if(!_status.yanhuo) _status.yanhuo=0;
+ _status.yanhuo++;
+ },
+ subSkill:{
+ damage:{
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ return event.card.name=='sha';
+ },
+ content:function(){
+ trigger.baseDamage+=(_status.yanhuo||0);
+ },
+ },
+ },
+ },
+ spniluan:{
+ enable:'phaseUse',
+ audio:'niluan',
+ viewAs:{name:'sha'},
+ check:function(card){
+ return 5.1-get.value(card);
+ },
+ filterCard:{color:'black'},
+ position:'hes',
+ audio:'niluan',
+ viewAsFilter:function(player){
+ return player.countCards('hes',lib.skill.spniluan.filterCard)>0;
+ },
+ group:'spniluan_clear',
+ },
+ spniluan_clear:{
+ trigger:{player:'useCardAfter'},
+ forced:true,
+ silent:true,
+ charlotte:true,
+ filter:function(event,player){
+ return event.skill=='spniluan'&&event.addCount!==false&&player.getHistory('sourceDamage',function(card){
+ return card.card==event.card;
+ }).length==0;
+ },
+ content:function(){
+ trigger.addCount=false;
+ if(player.stat[player.stat.length-1].card.sha>0){
+ player.stat[player.stat.length-1].card.sha--;
+ }
+ },
+ },
+ spweiwu:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ viewAs:{
+ name:'shunshou',
+ storage:{spweiwu:true},
+ },
+ filterCard:{color:'red'},
+ position:'hes',
+ check:function(card){
+ return 7-get.value(card);
+ },
+ mod:{
+ targetInRange:function(card){
+ if(card.storage&&card.storage.spweiwu) return true;
+ },
+ },
+ },
+ tuogu:{
+ audio:2,
+ trigger:{global:'die'},
+ filter:function(event,player){
+ return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
+ var info=get.info(skill);
+ return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited&&!info.dutySkill;
+ }).length>0;
+ },
+ logTarget:'player',
+ skillAnimation:true,
+ limited:true,
+ animationColor:'thunder',
+ content:function(){
+ 'step 0'
+ player.awakenSkill('tuogu');
+ var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
+ var info=get.info(skill);
+ return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited&&!info.dutySkill;
+ });
+ if(list.length==1) event._result={control:list[0]};
+ else trigger.player.chooseControl(list).set('prompt','选择令'+get.translation(player)+'获得一个技能').set('forceDie',true).set('ai',function(){
+ return list.randomGet();
+ });
+ 'step 1'
+ player.addSkillLog(result.control);
+ game.broadcastAll(function(skill){
+ var list=[skill];game.expandSkills(list);
+ for(var i of list){
+ var info=lib.skill[i];
+ if(!info) continue;
+ if(!info.audioname2) info.audioname2={};
+ info.audioname2.caoshuang='tuogu';
+ }
+ },result.control);
+ },
+ },
+ retuogu:{
+ audio:'tuogu',
+ trigger:{global:'die'},
+ filter:function(event,player){
+ return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
+ var info=get.info(skill);
+ return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited&&!info.dutySkill;
+ }).length>0;
+ },
+ logTarget:'player',
+ check:function(event,player){
+ var list=event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
+ var info=get.info(skill);
+ return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited&&!info.dutySkill;
+ });
+ var negSkill=list.some(function(skill){
+ return get.skillRank(skill,'inout')<=0;
+ });
+ var att=get.sgnAttitude(event.player,player);
+ if(!player.storage.retuogu){
+ if(negSkill&&att<0) return false;
+ return true;
+ }
+ list.sort(function(a,b){
+ return att*(get.skillRank(b,'inout')-get.skillRank(a,'inout'));
+ })[0];
+ return get.skillRank(list[0],'inout')>=get.skillRank(player.storage.retuogu,'inout');
+ },
+ content:function(){
+ 'step 0'
+ var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
+ var info=get.info(skill);
+ return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited&&!info.dutySkill;
+ });
+ if(list.length==1) event._result={control:list[0]};
+ else trigger.player.chooseControl(list).set('prompt','选择令'+get.translation(player)+'获得一个技能').set('forceDie',true).set('ai',function(){
+ var att=get.sgnAttitude(_status.event.getTrigger().player,player);
+ if(att==0) return list.randomGet();
+ var listx=list.map(function(skill){
+ return [skill,get.skillRank(skill,'inout')];
+ }).sort(function(a,b){
+ return att*(b[1]-a[1]);
+ }).slice(0,2);
+ var listx2=[0];
+ if(Math.abs(listx[0][1]-listx[1][1])<=0.5&&Math.sign(listx[0][1])==Math.sign(listx[1][1])) listx2.push(1);
+ return listx[listx2.randomGet()][0];
+ });
+ 'step 1'
+ if(player.storage.retuogu) player.removeSkill(player.storage.retuogu);
+ player.storage.retuogu=result.control;
+ player.markSkill('retuogu');
+ player.addSkillLog(result.control);
+ game.broadcastAll(function(skill){
+ var list=[skill];
+ game.expandSkills(list);
+ for(var i of list){
+ var info=lib.skill[i];
+ if(!info) continue;
+ if(!info.audioname2) info.audioname2={};
+ info.audioname2.caoshuang='tuogu';
+ }
+ },result.control);
+ },
+ mark:true,
+ intro:{content:'当前托孤技能:$'},
+ },
+ shanzhuan:{
+ trigger:{source:'damageSource'},
+ audio:2,
+ direct:true,
+ filter:function(event,player){
+ return player!=event.player&&!event.player.isDisabledJudge()&&event.player.countCards('he')&&!event.player.countCards('j');
+ },
+ content:function(){
+ 'step 0'
+ player.choosePlayerCard(trigger.player,'he',get.prompt('shanzhuan',trigger.player)).set('ai',function(card){
+ if(get.attitude(_status.event.player,_status.event.target)>=0) return 0;
+ return get.buttonValue(card);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('shanzhuan',trigger.player);
+ var card=result.cards[0];
+ trigger.player.$throw(card);
+ game.delayx();
+ if(get.type(card,false)=='delay') trigger.player.addJudge(card);
+ else trigger.player.addJudge({name:get.color(card,false)=='red'?'lebu':'bingliang'},result.cards);
+ }
+ },
+ group:'shanzhuan_draw',
+ subfrequent:['draw'],
+ subSkill:{
+ draw:{
+ audio:'shanzhuan',
+ trigger:{player:'phaseEnd'},
+ frequent:true,
+ prompt:'是否发动【擅专】摸一张牌?',
+ filter:function(event,player){
+ return !player.getHistory('sourceDamage').length;
+ },
+ content:function(){
+ player.draw();
+ },
+ },
+ },
+ },
+ olxingshen:{
+ trigger:{player:'damageEnd'},
+ frequent:true,
+ audio:'xingshen',
+ content:function(){
+ 'step 0'
+ var next=player.draw();
+ if(get.isLuckyStar(player)||Math.random()<0.5) next.num=2;
+ var num=player.countMark('olxingshen');
+ if(num<6) player.addMark('olxingshen',Math.min(6-num,player.getDamagedHp()),false)
+ },
+ intro:{
+ content:'下一次发动〖严教〗时多展示X张牌',
+ },
+ },
+ //张道陵
+ zlhuji:{
+ mod:{
+ globalFrom:function(player,target,distance){
+ return distance-1;
+ },
+ },
+ trigger:{player:'damageEnd'},
+ forced:true,
+ filter:function(event,player){
+ return player!=_status.currentPhase;
+ },
+ content:function(){
+ 'step 0'
+ var func=function(result){
+ if(get.color(result)=='red') return 1;
+ return 0;
+ };
+ if(get.itemtype(trigger.source)!='player'||!player.canUse('sha',trigger.source,false)) func=function(result){
+ return 0;
+ };
+ else if(get.effect(trigger.source,{name:'sha'},player,player)<0) func=function(result){
+ if(get.color(result)=='red') return -1;
+ return 0;
+ };
+ player.judge(func).judge2=function(result){
+ return result.color=='red'?true:false;
+ };
+ 'step 1'
+ if(result.color=='red'&&get.itemtype(trigger.source)=='player'&&player.canUse('sha',trigger.source,false)){
+ player.useCard({name:'sha',isCard:true},trigger.source,false,'noai');
+ }
+ },
+ },
+ zlshoufu:{
+ enable:'phaseUse',
+ usable:1,
+ delay:false,
+ content:function(){
+ 'step 0'
+ player.draw();
+ 'step 1'
+ var filterTarget=function(card,player,target){
+ return target!=player&&!target.hasSkill('zlshoufu2');
+ };
+ if(!player.countCards('h')||!game.hasPlayer(function(current){
+ return filterTarget(null,player,current);
+ })) event.finish();
+ else player.chooseCardTarget({
+ forced:true,
+ prompt:'将一张手牌作为“箓”置于其他角色的武将牌上',
+ filterTarget:filterTarget,
+ filterCard:true,
+ position:'h',
+ ai1:function(card){
+ if(get.type(card,false)=='equip') return 1-get.value(card);
+ return 7-get.value(card);
+ },
+ ai2:function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target);
+ if(att>0) return -att;
+ return -att/get.distance(player,target,'absolute');
+ },
+ });
+ 'step 2'
+ var target=result.targets[0];
+ var cards=result.cards;
+ target.addToExpansion(cards,player,'give').gaintag.add('zlshoufu2');
+ player.line(target,'green');
+ target.addSkill('zlshoufu2');
+ 'step 3'
+ game.delayx();
+ },
+ ai:{
+ notemp:true,
+ order:1,
+ result:{
+ player:function(player){
+ if(game.hasPlayer(function(target){
+ return target!=player&&!target.hasSkill('zlshoufu2')&&get.attitude(player,target)<0;
+ })||!game.hasPlayer(function(target){
+ return target!=player&&!target.hasSkill('zlshoufu2')&&get.attitude(player,target)>0;
+ })) return 1;
+ return 0;
+ },
+ },
+ },
+ },
+ zlshoufu2:{
+ marktext:'箓',
+ intro:{
+ content:'expansion',
+ markcount:'expansion',
+ },
+ charlotte:true,
+ onremove:function(player,skill){
+ var cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ },
+ mod:{
+ cardEnabled:function(card,player){
+ if(player.getExpansions('zlshoufu2').filter(function(magic){
+ return get.type2(magic)==get.type2(card);
+ }).length) return false;
+ },
+ cardRespondable:function(card,player){
+ if(player.getExpansions('zlshoufu2').filter(function(magic){
+ return get.type2(magic)==get.type2(card);
+ }).length) return false;
+ },
+ cardSavable:function(card,player){
+ if(player.getExpansions('zlshoufu2').filter(function(magic){
+ return get.type2(magic)==get.type2(card);
+ }).length) return false;
+ },
+ },
+ trigger:{
+ player:['damageEnd','loseAfter'],
+ global:'loseAsyncAfter',
+ },
+ forced:true,
+ filter:function(event,player){
+ var storage=player.getExpansions('zlshoufu2');
+ if(!storage.length) return false;
+ if(event.name=='damage') return true;
+ if(event.type!='discard'||event.getlx===false||event.getParent('phaseDiscard').player!=player) return false;
+ var num=0,evt=event.getl(player);
+ if(!evt||!evt.cards2) return false;
+ for(var i of evt.cards2){
+ if(storage.filter(function(magic){
+ return get.type2(magic)==get.type2(i,event.hs.contains(i)?player:false);
+ }).length) num++;
+ }
+ return num>1;
+ },
+ content:function(){
+ player.removeSkill('zlshoufu2');
+ },
+ },
+ //蔡阳
+ yinka:{
+ trigger:{player:['drawBegin','judgeBegin']},
+ direct:true,
+ filter:function(){
+ return ui.cardPile.childNodes.length>0;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseButton(['印卡:请选择要置于牌堆'+(trigger.bottom?'底':'顶')+'的牌(先选择的在上)',Array.from(ui.cardPile.childNodes)],[1,trigger.num||1]);
+ 'step 1'
+ if(result.bool){
+ while(result.links.length){
+ if(trigger.bottom){
+ var card=result.links.shift();
+ ui.cardPile.removeChild(card);
+ ui.cardPile.appendChild(card);
+ }
+ else{
+ var card=result.links.pop();
+ ui.cardPile.removeChild(card);
+ ui.cardPile.insertBefore(card,ui.cardPile.firstChild)
+ }
+ }
+ }
+ },
+ ai:{isLuckyStar:true},
+ },
+ //新王允
+ xinlianji:{
+ enable:'phaseUse',
+ audio:'wylianji',
+ usable:1,
+ check:function(card){
+ return 5-get.value(card);
+ },
+ filterTarget:function(card,player,target){
+ if(ui.selected.targets.length) return true;
+ return target!=player;
+ },
+ filterCard:true,
+ selectTarget:2,
+ multitarget:true,
+ targetprompt:['打人','被打'],
+ content:function(){
+ 'step 0'
+ //player.addMark('xinlianji',1,false);
+ var card=get.cardPile2(function(card){
+ return get.subtype(card)=='equip1'&&targets[0].hasUseTarget(card);
+ });
+ if(card){
+ if(card.name=='qinggang'&&!lib.inpile.contains('qibaodao')){
+ card.remove();
+ card=game.createCard('qibaodao',card.suit,card.number);
+ }
+ targets[0].chooseUseTarget(card,true,'nopopup','nothrow');
+ }
+ else{
+ player.chat('没有装备牌了吗');
+ game.log('但是牌堆里已经没有装备牌了!');
+ }
+ 'step 1'
+ game.updateRoundNumber();
+ targets[0].chooseToUse('对'+get.translation(targets[1])+'使用一张杀,或将装备区里的武器牌交给一名其他角色',
+ {name:'sha'}).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
+ if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
+ return lib.filter.filterTarget.apply(this,arguments);
+ }).set('sourcex',targets[1]).set('addCount',false);
+ 'step 2'
+ var cards=targets[0].getEquips(1);
+ if(!result.bool&&cards.length){
+ event.cards=cards;
+ player.chooseTarget(true,'将'+get.translation(cards)+'交给一名其他角色').set('ai',function(target){
+ var card=_status.event.getParent().cards;
+ return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(cards[0]));
+ });
+ }
+ else event.finish();
+ 'step 3'
+ result.targets[0].gain(cards,result.targets[0],'give').giver=player;
+ },
+ ai:{
+ order:4,
+ result:{
+ target:function(player,target){
+ if(ui.selected.targets.length){
+ var pretarget=ui.selected.targets[0];
+ if(pretarget.hasSha()&&pretarget.canUse({name:'sha'},target)) return get.effect(target,{name:'sha'},pretarget,target);
+ return Math.random();
+ }
+ if(!target.getEquip(1)){
+ if(game.hasPlayer(function(current){
+ return current!=target&&!current.hasSkillTag('nogain')&&get.attitude(current,target)>0;
+ })) return 3;
+ return -3;
+ }
+ if(!game.hasPlayer(function(current){
+ return current!=target&&!current.hasSkillTag('nogain')&&get.attitude(current,target)>0;
+ })) return -6;
+ return 4-get.value(target.getEquip(1));
+ },
+ },
+ },
+ },
+ xinmoucheng:{
+ trigger:{player:'phaseZhunbeiBegin'},
+ audio:'moucheng',
+ forced:true,
+ juexingji:true,
+ skillAnimation:true,
+ animationColor:'gray',
+ derivation:'xinjingong',
+ unique:true,
+ filter:function(event,player){
+ return game.hasPlayer2(function(current){
+ return current.getAllHistory('sourceDamage',function(evt){
+ if(!evt.card||evt.card.name!='sha'||evt.getParent().type!='card') return false;
+ var evt2=evt.getParent(4);
+ return evt2&&evt2.name=='xinlianji'&&evt2.player==player;
+ }).length>0;
+ });
+ },
+ content:function(){
+ player.awakenSkill('xinmoucheng');
+ player.addSkill('xinjingong');
+ player.removeSkill('xinlianji');
+ },
+ },
+ xinjingong:{
+ audio:'jingong',
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return event.xinjingong_list&&player.countCards('hes',function(card){
+ return card.name=='sha'||get.type(card)=='equip';
+ });
+ },
+ onChooseToUse:function(event){
+ if(!game.online){
+ var evt=event.getParent();
+ if(evt.name!='phaseUse') return;
+ if(!evt.xinjingong_list){
+ var list=get.inpile('trick').randomGets(2);
+ if(Math.random()<0.5){
+ list.push('wy_meirenji');
+ }
+ else{
+ list.push('wy_xiaolicangdao');
+ }
+ evt.xinjingong_list=list;
+ }
+ if(!event.xinjingong_list) event.set('xinjingong_list',evt.xinjingong_list);
+ }
+ },
+ chooseButton:{
+ dialog:function(event,player){
+ var list=[];
+ for(var i of event.xinjingong_list) list.push(['锦囊','',i]);
+ return ui.create.dialog('矜功',[list,'vcard']);
+ },
+ filter:function(button,player){
+ return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent());
+ },
+ check:function(button){
+ return _status.event.player.getUseValue({name:button.link[2]});
+ },
+ backup:function(links,player){
+ return {
+ audio:'jingong',
+ filterCard:true,
+ popname:true,
+ position:'hes',
+ viewAs:{name:links[0][2]},
+ check:function(card){
+ return 6-get.value(card);
+ },
+ filterCard:function(card){
+ return card.name=='sha'||get.type(card)=='equip';
+ },
+ };
+ },
+ prompt:function(links,player){
+ return '将一张【杀】或装备牌当做'+get.translation(links[0][2])+'使用';
+ }
+ },
+ ai:{
+ order:2,
+ result:{
+ player:1
+ }
+ }
+ },
+ //孙邵
+ bizheng:{
+ trigger:{player:'phaseDrawEnd'},
+ direct:true,
+ audio:2,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('bizheng'),lib.filter.notMe).set('ai',function(target){
+ var player=_status.event.player;
+ if(player.countCards('h')>player.maxHp) return 0;
+ var att=get.attitude(player,target);
+ if(att<=0||target.hasSkillTag('nogain')) return 0;
+ if(target.maxHp-target.countCards('h')>=2) return att;
+ return att/2;
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('bizheng',target);
+ target.draw(2);
+ }
+ else event.finish();
+ 'step 2'
+ if(player.countCards('h')>player.maxHp) player.chooseToDiscard(2,'he',true);
+ 'step 3'
+ if(target.countCards('h')>target.maxHp) target.chooseToDiscard(2,'he',true);
+ },
+ ai:{
+ expose:0.25,
+ },
+ },
+ yidian:{
+ trigger:{player:'useCard2'},
+ filter:function(event,player){
+ var info=get.info(event.card);
+ if(info.allowMultiple==false) return false;
+ if(event.targets&&!info.multitarget){
+ for(var i=0;i0;
+ })){
+ player.chooseControl('cancel2').set('choiceList',[
+ '摸两张牌,然后弃置一张牌',
+ '获得场上的一张牌,然后弃置一张牌',
+ ]).set('prompt',get.prompt('neifa')).set('ai',function(){
+ if(game.hasPlayer(function(current){
+ var att=get.attitude(player,current);
+ if(att==0) return false;
+ if(att<0) return current.countCards('e',function(card){
+ return get.value(card,current)>5;
+ })>0;
+ return current.countCards('ej',function(card){
+ return get.position(card)=='j'||get.value(card,current)<=0;
+ })>0;
+ })) return 1;
+ return 0;
+ });
+ }
+ else{
+ player.chooseControl('ok','cancel2').set('prompt',get.prompt2('neifa'));
+ }
+ 'step 1'
+ if(result.control=='cancel2'){
+ delete _status.noclearcountdown;
+ if(!_status.noclearcountdown){
+ game.stopCountChoose();
+ }
+ event.finish();
+ return;
+ }
+ else if(result.index==1){
+ player.chooseTarget('请选择一名角色,获得其装备区或判定区内的一张牌',true,function(card,player,target){
+ return target.countGainableCards(player,'ej')>0;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target);
+ if(att>0&&target.countCards('ej',function(card){
+ return get.position(card)=='j'||get.value(card,target)<=0;
+ })) return 2*att;
+ else if(att<0&&target.countCards('e',function(card){
+ return get.value(card,target)>5;
+ })) return -att;
+ return -1;
+ });
+ }
+ else{
+ delete _status.noclearcountdown;
+ if(!_status.noclearcountdown){
+ game.stopCountChoose();
+ }
+ player.logSkill('neifa');
+ player.draw(2);
+ event.goto(3)
+ }
+ 'step 2'
+ delete _status.noclearcountdown;
+ if(!_status.noclearcountdown){
+ game.stopCountChoose();
+ }
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('neifa',target);
+ player.gainPlayerCard(target,'ej',true);
+ }
+ 'step 3'
+ player.chooseToDiscard(true,'he').set('ai',function(cardx){
+ var player=_status.event.player;
+ var num=0;
+ var hs=player.getCards('h');
+ var muniu=player.getEquip('muniu');
+ var subs=[];
+ if(muniu&&muniu.cards) hs=hs.concat(muniu.cards);
+ if(get.type(cardx)=='basic'){
+ var shas=hs.filter(function(card){
+ return card!=cardx&&get.name(card,player)=='sha'&&player.hasValueTarget(card);
+ });
+ var numx=player.countCards('h',function(card){
+ return get.type(card,player)!='basic';
+ });
+ num+=Math.min(numx,Math.max(0,shas.length-player.getCardUsable('sha')))*0.7;
+ num+=Math.min(player.getCardUsable('sha')+numx,shas.filter(function(card){
+ return game.countPlayer(function(current){
+ return player.canUse(card,current)&&get.effect(current,card,player,player)>0;
+ })>1;
+ }).length)*1.1;
+ var taos=Math.min(player.maxHp-player.hp,hs.filter(function(card){
+ return cardx!=card&&get.name(card,player)=='tao';
+ }).length);
+ num+=taos*player.getDamagedHp()*1.2;
+ }
+ else{
+ var numx=Math.sqrt(Math.min(5,player.countCards('h',function(card){
+ return get.type(card,player)=='basic';
+ })));
+ if(numx) num+=numx*Math.min(2,hs.filter(function(card){
+ if(card==cardx||get.type(card)!='equip'||!player.hasUseTarget(card)) return false;
+ subs.add(get.subtype(card));
+ return true;
+ }).length)*(2.5+player.countCards('e'))/2.5;
+ num+=hs.filter(function(card){
+ return card!=cardx&&get.type2(card)=='trick'&&player.hasValueTarget(card);
+ }).length*0.65;
+ }
+ if(get.position(cardx)=='e'&&cardx.name!='muniu'&&subs.contains(get.subtype(card))) num+=3;
+ return num*1.5-get.value(cardx);
+ });
+ 'step 4'
+ if(result.bool&&result.cards&&result.cards.length){
+ var name=get.type(result.cards[0])=='basic'?'neifa_basic':'neifa_nobasic';
+ player.addTempSkill(name);
+ var num=Math.min(5,player.countCards('h',function(cardx){
+ return (name=='neifa_basic')!=(get.type(cardx,player)=='basic')
+ }));
+ if(num>0) player.addMark(name,num,false);
+ else player.storage[name]=0;
+ }
+ },
+ ai:{
+ threaten:3,
+ },
+ },
+ neifa_basic:{
+ mark:true,
+ marktext:'伐',
+ onremove:true,
+ intro:{
+ name:'内伐 - 基本牌',
+ content:'本回合内不能使用锦囊牌和装备牌,且使用【杀】选择目标时可以多选择1个目标,且使用【杀】的目标次数上限+#。',
+ },
+ mod:{
+ cardEnabled:function(card,player){
+ if(['trick','equip'].contains(get.type(card,'trick'))) return false;
+ },
+ cardSavable:function(card,player){
+ if(['trick','equip'].contains(get.type(card,'trick'))) return false;
+ },
+ cardUsable:function(card,player,num){
+ if(card.name=='sha'){
+ return num+player.countMark('neifa_basic');
+ }
+ },
+ },
+ trigger:{player:'useCard2'},
+ filter:function(event,player){
+ if(event.card.name!='sha') return false;
+ return game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&player.canUse(event.card,current);
+ });
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('neifa'),'为'+get.translation(trigger.card)+'额外指定一个目标',function(card,player,target){
+ return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target);
+ }).set('sourcex',trigger.targets).set('ai',function(target){
+ var player=_status.event.player;
+ return get.effect(target,_status.event.card,player,player);
+ }).set('card',trigger.card);
+ 'step 1'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.targets=result.targets;
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ player.logSkill('neifa',event.targets);
+ trigger.targets.addArray(event.targets);
+ },
+ },
+ neifa_nobasic:{
+ trigger:{player:'useCard2'},
+ direct:true,
+ mark:true,
+ marktext:'伐',
+ onremove:true,
+ mod:{
+ cardEnabled:function(card,player){
+ if(get.type(card)=='basic') return false;
+ },
+ cardSavable:function(card,player){
+ if(get.type(card)=='basic') return false;
+ },
+ },
+ intro:{
+ name:'内伐 - 非基本牌',
+ content:'本回合内不能使用基本牌,且使用普通锦囊牌选择目标时可以多选择1个目标,且本回合的出牌阶段内前两次使用装备牌时摸#张牌。'
+ },
+ filter:function(event,player){
+ if(get.type(event.card)!='trick') return false;
+ if(event.targets&&event.targets.length>0) return true;
+ var info=get.info(event.card);
+ if(info.allowMultiple==false) return false;
+ if(event.targets&&!info.multitarget){
+ if(game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current);
+ })){
+ return true;
+ }
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var prompt2='为'+get.translation(trigger.card)+'增加或减少一个目标'
+ player.chooseTarget(get.prompt('neifa'),function(card,player,target){
+ var player=_status.event.player;
+ if(_status.event.targets.contains(target)) return true;
+ return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target);
+ }).set('prompt2',prompt2).set('ai',function(target){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1);
+ }).set('targets',trigger.targets).set('card',trigger.card);
+ 'step 1'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.targets=result.targets;
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(event.targets){
+ player.logSkill('neifa',event.targets);
+ if(trigger.targets.contains(event.targets[0])) trigger.targets.removeArray(event.targets);
+ else trigger.targets.addArray(event.targets);
+ }
+ },
+ group:'neifa_use',
+ ai:{
+ reverseOrder:true,
+ skillTagFilter:function(player){
+ if(player.storage.counttrigger&&player.storage.counttrigger.neifa_use>=2) return false;
+ },
+ effect:{
+ target:function(card,player,target){
+ if((!player.storage.counttrigger||!player.storage.counttrigger.neifa_use||player.storage.counttrigger.neifa_use<2)&&player==target&&get.type(card)=='equip') return [1,3];
+ },
+ },
+ },
+ },
+ neifa_use:{
+ audio:'neifa',
+ usable:2,
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ return get.type(event.card)=='equip'&&player.countMark('neifa_nobasic')>0;
+ },
+ content:function(){
+ player.draw(player.countMark('neifa_nobasic'));
+ },
+ },
+ //许靖
+ yuxu:{
+ audio:2,
+ trigger:{player:'useCardAfter'},
+ filter:function(event,player){
+ var evt=event.getParent('phaseUse');
+ if(!evt||evt.player!=player) return false;
+ return true;
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var draw=!player.hasMark('yuxu_used');
+ if(draw) player.chooseBool(get.prompt2('yuxu')).set('ai',()=>1);
+ else event.goto(2);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('yuxu');
+ player.draw();
+ player.addMark('yuxu_used',1,false);
+ player.addTempSkill('yuxu_used','phaseUseAfter');
+ }
+ event.finish();
+ 'step 2'
+ player.logSkill('yuxu');
+ player.removeMark('yuxu_used',player.countMark('yuxu_used'),false);
+ player.chooseToDiscard('he',true);
+ },
+ subSkill:{
+ used:{
+ charlotte:true,
+ onremove:true
+ }
+ }
+ },
+ xjshijian:{
+ audio:2,
+ trigger:{global:'useCardAfter'},
+ direct:true,
+ filter:function(event,player){
+ if(event.player==player) return false;
+ var evt=event.getParent('phaseUse');
+ if(!evt||evt.player!=event.player) return false;
+ return event.player.getHistory('useCard',function(evtt){
+ return evtt.getParent('phaseUse')==evt;
+ }).indexOf(event)==1&&player.countCards('he')>0;
+ },
+ content:function(){
+ 'step 0'
+ var next=player.chooseToDiscard('he',get.prompt('xjshijian',trigger.player),'弃置一张牌并令其获得技能〖誉虚〗至回合结束');
+ next.set('logSkill',['xjshijian',trigger.player]);
+ next.set('check',get.attitude(player,trigger.player)>0&&trigger.player.countCards('h')>2);
+ next.ai=function(card){
+ if(_status.event.check) return 5-get.value(card);
+ return -1;
+ };
+ 'step 1'
+ if(result.bool) trigger.player.addTempSkill('yuxu');
+ },
+ ai:{
+ expose:0.25,
+ },
+ },
+ //新1v1
+ yanhuo:{
+ audio:2,
+ trigger:{player:'die'},
+ forceDie:true,
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ direct:true,
+ skillAnimation:true,
+ animationColor:'thunder',
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('yanhuo'),function(card,player,target){
+ return target!=player&&target.countDiscardableCards(player,'he')>0
+ }).set('forceDie',true).ai=function(target){
+ return -target.countCards('he')*get.attitude(player,target);
+ };
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('yanhuo',target);
+ event.count=player.countCards('he');
+ }
+ else event.finish()
+ 'step 2'
+ if(target.countDiscardableCards(player,'he')){
+ player.line(target);
+ player.discardPlayerCard(target,'he',true).set('forceDie',true);
+ event.count--;
+ if(event.count) event.redo();
+ }
+ },
+ },
+ mouzhu:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filterTarget:function(card,player,target){
+ return target!=player&&target.countCards('h')>0;
+ },
+ content:function(){
+ 'step 0'
+ target.chooseCard('h','交给'+get.translation(player)+'一张手牌',true);
+ 'step 1'
+ if(result.bool) target.give(result.cards,player);
+ 'step 2'
+ if(player.countCards('h')<=target.countCards('h')){
+ event.finish();
+ return;
+ }
+ var list=[];
+ if(target.canUse('sha',player,false)) list.push('sha');
+ if(target.canUse('juedou',player,false)) list.push('juedou');
+ if(!list.length) event.finish();
+ else if(list.length==1) event._result={control:list[0]};
+ else target.chooseControl(list).set('prompt','对'+get.translation(player)+'使用一张【杀】或【决斗】。').ai=function(){
+ return get.effect(player,{name:'sha'},target,target)>=get.effect(player,{name:'juedou'},target,target)?'sha':'juedou';
+ };
+ 'step 3'
+ target.useCard({name:result.control,isCard:true},player,'noai');
+ },
+ ai:{
+ order:7,
+ result:{
+ target:-1.2,
+ player:function(player,target){
+ if(target.countCards('h')-player.countCards('h')>1) return 1;
+ if(get.damageEffect(target,player,player,player)>0) return 1;
+ if(player.hp>3||player.countCards('h','sha')&&player.countCards('h','shan')) return 0;
+ if(player.hp>2) return -1.1;
+ return -2;
+ },
+ },
+ },
+ },
+ niluan:{
+ audio:2,
+ trigger:{global:'phaseJieshuBegin'},
+ filter:function(event,player){
+ return event.player!=player&&(event.player.hp>player.hp||event.player.getHistory('useCard',function(card){
+ return card.card.name=='sha';
+ }).length>0);
+ },
+ direct:true,
+ content:function(){
+ var next=player.chooseToUse();
+ next.logSkill='niluan';
+ next.set('openskilldialog',get.prompt2('niluan'));
+ next.set('norestore',true);
+ next.set('_backupevent','niluanx');
+ next.set('custom',{
+ add:{},
+ replace:{window:function(){}}
+ });
+ next.backup('niluanx');
+ },
+ },
+ niluanx:{
+ viewAs:{name:'sha'},
+ filterCard:{color:'black'},
+ position:'hes',
+ selectCard:1,
+ check:function(card){return 5-get.value(card)},
+ },
+ cuorui:{
+ audio:2,
+ trigger:{
+ global:'phaseBefore',
+ player:'enterGame',
+ },
+ forced:true,
+ filter:function(event,player){
+ return player.maxHp>0&&!get.is.single()&&(event.name!='phase'||game.phaseNumber==0);
+ },
+ content:function(){
+ player.draw(Math.min(5,player.maxHp),false);
+ },
+ group:'cuorui_nojudge',
+ subSkill:{
+ nojudge:{
+ trigger:{
+ player:'phaseJudgeBefore',
+ },
+ forced:true,
+ audio:'cuorui',
+ filter:function(event,player){
+ return !player.storage.cuorui&&(get.is.single()||player.countCards('j'));
+ },
+ content:function(){
+ player.storage.cuorui=true;
+ trigger.cancel();
+ game.log(player,'跳过了','#g判定阶段');
+ },
+ },
+ },
+ },
+ liewei:{
+ audio:2,
+ trigger:{source:'dieAfter'},
+ frequent:true,
+ content:function(){
+ player.draw(3);
+ },
+ },
+ //蒋干
+ weicheng:{
+ audio:2,
+ trigger:{
+ global:'gainAfter',
+ player:'loseAsyncAfter',
+ },
+ //forced:true,
+ frequent:true,
+ filter:function(event,player){
+ if(event.name=='loseAsync'){
+ if(event.type!='gain'||player.hp>player.countCards('h')) return false;
+ var cards=event.getl(player).cards2;
+ return game.hasPlayer(function(current){
+ if(current==player) return false;
+ var cardsx=event.getg(current);
+ for(var i of cardsx){
+ if(cards.contains(i)) return true;
+ }
+ return false;
+ });
+ }
+ if(event.player!=player&&player.hp>player.countCards('h')){
+ var evt=event.getl(player);
+ return evt&&evt.hs&&evt.hs.length>0;
+ }
+ return false;
+ },
+ preHidden:true,
+ content:function(){
+ player.draw();
+ },
+ },
+ daoshu:{
+ audio:2,
+ enable:'phaseUse',
+ filterTarget:function(c,p,t){
+ return t!=p&&t.countGainableCards(p,'h')>0;
+ },
+ filter:function(e,p){
+ return !p.hasSkill('daoshu_used')
+ },
+ content:function(){
+ 'step 0'
+ player.chooseControl(lib.suit).set('prompt','请选择一个花色').ai=function(){return lib.suit.randomGet()};
+ 'step 1'
+ event.suit=result.control;
+ player.popup(event.suit+2);
+ game.log(player,'选择了',event.suit+2);
+ player.gainPlayerCard(target,true,'h','visibleMove');
+ 'step 2'
+ if(result.bool){
+ var suit2=get.suit(result.cards[0]);
+ if(suit2==event.suit){
+ target.damage();
+ event.finish();
+ }
+ else{
+ player.addTempSkill('daoshu_used','phaseUseEnd');
+ if(player.countCards('h',function(card){return get.suit(card)!=suit2})==0){
+ player.showHandcards();
+ event.finish();
+ }
+ else player.chooseCard('h',true,function(card){
+ return get.suit(card)!=_status.event.suit2
+ },'交给'+get.translation(target)+'一张不为'+get.translation(suit2)+'花色的牌').set('suit2',suit2);
+ }
+ }
+ else event.finish();
+ 'step 3'
+ player.give(result.cards,target,true);
+ },
+ ai:{
+ order:1,
+ result:{
+ target:-1,
+ },
+ },
+ subSkill:{
+ used:{sub:true},
+ },
+ },
+ //统率三军诸葛瑾和文聘
+ "zhenwei_three":{
+ global:"zhenwei_three_others",
+ subSkill:{
+ others:{
+ mod:{
+ globalTo:function (from,to,distance){
+ if(from.side!=to.side&&game.hasPlayer(function(current){
+ return current!=to&¤t.side==to.side&¤t.hasSkill('zhenwei_three');
+ }))return distance+1;
+ },
+ },
+ sub:true,
+ },
+ },
+ },
+ "huanshi_three":{
+ audio:"huanshi",
+ trigger:{
+ global:"judge",
+ },
+ filter:function (event,player){
+ return player.countCards('hes')>0&&player.side==event.player.side;
+ },
+ direct:true,
+ content:function (){
+ "step 0"
+ player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
+ get.translation(trigger.player.judging[0])+','+get.prompt('huanshi_three'),'hes',function(card){
+ var player=_status.event.player;
+ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
+ if(mod2!='unchanged') return mod2;
+ var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
+ if(mod!='unchanged') return mod;
+ return true;
+ }).set('ai',function(card){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ var judging=_status.event.judging;
+ var result=trigger.judge(card)-trigger.judge(judging);
+ var attitude=get.attitude(player,trigger.player);
+ if(attitude==0||result==0) return 0;
+ if(attitude>0){
+ return result-get.value(card)/2;
+ }
+ else{
+ return -result-get.value(card)/2;
+ }
+ }).set('judging',trigger.player.judging[0]);
+ "step 1"
+ if(result.bool){
+ player.respond(result.cards,'highlight','huanshi_three','noOrdering');
+ }
+ else{
+ event.finish();
+ }
+ "step 2"
+ if(result.bool){
+ if(trigger.player.judging[0].clone){
+ trigger.player.judging[0].clone.classList.remove('thrownhighlight');
+ game.broadcast(function(card){
+ if(card.clone){
+ card.clone.classList.remove('thrownhighlight');
+ }
+ },trigger.player.judging[0]);
+ game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone]));
+ }
+ game.cardsDiscard(trigger.player.judging[0]);
+ trigger.player.judging[0]=result.cards[0];
+ trigger.orderingCards.addArray(result.cards);
+ game.log(trigger.player,'的判定牌改为',result.cards[0]);
+ game.delay(2);
+ }
+ },
+ ai:{
+ rejudge:true,
+ tag:{
+ rejudge:1,
+ },
+ },
+ },
+ //英文版特典武将凯撒
+ zhengfu:{
+ trigger:{
+ player:"useCardToPlayered",
+ },
+ check:function (event,player){
+ return get.attitude(player,event.target)<0;
+ },
+ filter:function(event,player){
+ return event.card.name=='sha';
+ },
+ logTarget:"target",
+ line:false,
+ content:function (){
+ 'step 0'
+ player.line(trigger.target,{color:[220, 90, 139]});
+ player.chooseControl(['basic','trick','equip']).set('ai',function(){
+ var player=_status.event.target;
+ if(!player.countCards('h','sha')&&player.countCards('h','shan')) return 'trick';
+ return 'basic';
+ }).set('prompt','请选择一种牌的类别').set('target',trigger.target);
+ 'step 1'
+ trigger.target.chooseCard('he','交给'+get.translation(player)+'一张'+get.translation(result.control)+'牌,否则此【杀】不可被闪避。',function(card){
+ return get.type(card,'trick')==result.control;
+ }).set('ai',function(card){
+ var num=_status.event.num;
+ if(num==0) return 0;
+ if(card.name=='shan') return num>1?2:0;
+ return 8-get.value(card);
+ }).set('num',trigger.target.countCards('h','shan'))
+ 'step 2'
+ if(result.bool){
+ var cards=result.cards;
+ trigger.target.give(cards,player);
+ }
+ else{
+ trigger.getParent().directHit.add(trigger.target);
+ game.delay();
+ }
+ },
+ },
+ //变权移植
+ wanwei:{
+ trigger:{target:['rewriteGainResult','rewriteDiscardResult']},
+ direct:true,
+ preHidden:true,
+ filter:function(event,player){
+ return event.player!=player;
+ },
+ audio:2,
+ content:function(){
+ 'step 0'
+ var prompt='即将失去'+get.translation(trigger.result.cards)+',是否发动【挽危】?';
+ var next=player.choosePlayerCard(player,prompt,trigger.position);
+ next.set('ai',function(button){
+ return 20-get.value(button.link);
+ });
+ next.filterButton=trigger.filterButton;
+ next.selectButton=trigger.result.cards.length;
+ next.setHiddenSkill('wanwei');
+ 'step 1'
+ if(result.bool){
+ player.logSkill('wanwei');
+ trigger.result.cards=result.links.slice(0);
+ trigger.result.links=result.links.slice(0);
+ trigger.cards=result.links.slice(0);
+ trigger.untrigger();
+ }
+ }
+ },
+ gzjili:{
+ mod:{
+ aiOrder:function(player,card,num){
+ if(player.isPhaseUsing()&&get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')){
+ var range0=player.getAttackRange();
+ var range=0;
+ var info=get.info(card);
+ if(info&&info.distance&&info.distance.attackFrom){
+ range-=info.distance.attackFrom;
+ }
+ if(player.getEquip(1)){
+ var num=0;
+ var info=get.info(player.getEquip(1));
+ if(info&&info.distance&&info.distance.attackFrom){
+ num-=info.distance.attackFrom;
+ }
+ range0-=num;
+ }
+ range0+=range;
+ if(range0==(player.getHistory('useCard').length+player.getHistory('respond').length+2)&&player.countCards('h',function(cardx){
+ return get.subtype(cardx)!='equip1'&&player.getUseValue(cardx)>0;
+ })) return num+10;
+ }
+ },
+ },
+ trigger:{player:['useCard','respond']},
+ frequent:true,
+ locked:false,
+ preHidden:true,
+ filter:function(event,player){
+ return player.getHistory('useCard').length+player.getHistory('respond').length==player.getAttackRange();
+ },
+ audio:2,
+ content:function(){
+ player.draw(player.getHistory('useCard').length+player.getHistory('respond').length);
+ },
+ ai:{
+ threaten:1.8,
+ effect:{
+ target:function(card,player,target,current){
+ if(player!=target||!player.isPhaseUsing()) return;
+ if(get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')){
+ var range0=player.getAttackRange();
+ var range=0;
+ var info=get.info(card);
+ if(info&&info.distance&&info.distance.attackFrom){
+ range-=info.distance.attackFrom;
+ }
+ if(player.getEquip(1)){
+ var num=0;
+ var info=get.info(player.getEquip(1));
+ if(info&&info.distance&&info.distance.attackFrom){
+ num-=info.distance.attackFrom;
+ }
+ range0-=num;
+ }
+ range0+=range;
+ var delta=range0-(player.getHistory('useCard').length+player.getHistory('respond').length);
+ if(delta<0) return;
+ var num=player.countCards('h',function(card){
+ return (get.cardtag(card,'gifts')||get.subtype(card)!='equip1')&&player.getUseValue(card)>0;
+ });
+ if(delta==2&&num>0) return [1,3];
+ if(num>=delta) return 'zeroplayertarget';
+ }
+ },
+ },
+ }
+ },
+ xiongsuan:{
+ audio:2,
+ },
+ diancai:{
+ audio:2,
+ },
+ diaodu:{
+ audio:2,
+ },
+ zhengbi:{
+ audio:2,
+ },
+ fengying:{
+ audio:2,
+ },
+ //新服曹笨
+ xinshanjia:{
+ group:["xinshanjia_count"],
+ locked:false,
+ mod:{
+ aiValue:function(player,card,num){
+ if((player.storage.xinshanjia||0)<3&&get.type(card)=='equip'&&!get.cardtag(card,'gifts')){
+ return num/player.hp;
+ }
+ },
+ },
+ audio:"shanjia",
+ trigger:{
+ player:"phaseUseBegin",
+ },
+ intro:{
+ content:"本局游戏内已失去过#张装备牌",
+ },
+ frequent:true,
+ sync:function(player){
+ var history=player.actionHistory;
+ var num=0;
+ for(var i=0;i0) player.markSkill('xinshanjia');
+ },
+ content:function (){
+ 'step 0'
+ player.draw(3);
+ 'step 1'
+ lib.skill.xinshanjia.sync(player);
+ var num=3-player.storage.xinshanjia;
+ if(num>0){
+ player.chooseToDiscard('he',true,num).ai=get.disvalue;
+ }
+ 'step 2'
+ var bool1=true,bool2=true;
+ if(result.cards){
+ var cards=result.cards;
+ for(var i=0;i2) return false;
+ },
+ effect:{
+ target:function(card,player,target){
+ if(player.storage.xinshanjia<3&&get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3];
+ },
+ },
+ },
+ subSkill:{
+ count:{
+ forced:true,
+ silent:true,
+ popup:false,
+ trigger:{
+ player:"loseEnd",
+ },
+ filter:function(event,player){
+ return event.cards2&&event.cards2.length>0;
+ },
+ content:function (){
+ lib.skill.xinshanjia.sync(player);
+ },
+ },
+ sha:{
+ mark:true,
+ charlotte:true,
+ intro:{content:'使用【杀】的次数上限+1'},
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+1;
+ }
+ }
+ },
+ nodis:{
+ mark:true,
+ charlotte:true,
+ intro:{content:'使用牌无距离限制'},
+ mod:{
+ targetInRange:()=>true
+ }
+ }
+ }
+ },
+ //OL马超
+ ol_shichou:{
+ audio:2,
+ trigger:{
+ player:'useCard2',
+ },
+ direct:true,
+ filter:function(event,player){
+ return event.card&&event.card.name=='sha';//&&player.isDamaged();
+ },
+ content:function(){
+ 'step 0'
+ var num=player.getDamagedHp()+1;
+ player.chooseTarget('是否发动【誓仇】?','为'+get.translation(trigger.card)+'添加至多'+get.cnNumber(num)+'个目标',[1,num],function(card,player,target){
+ var evt=_status.event.getTrigger();
+ return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
+ }).set('ai',function(target){
+ return get.effect(target,_status.event.getTrigger().card,_status.event.player);
+ });
+ 'step 1'
+ if(result.bool&&result.targets&&result.targets.length){
+ var targets=result.targets;
+ player.logSkill('ol_shichou',targets);
+ player.line(targets,trigger.card.nature);
+ trigger.targets.addArray(targets);
+ trigger.ol_shichou=true;
+ player.addTempSkill('ol_shichou2');
+ }
+ },
+ },
+ ol_shichou2:{
+ trigger:{player:'useCardAfter'},
+ forced:true,
+ popup:false,
+ onremove:true,
+ filter:function(event,player){
+ return event.ol_shichou==true&&player.countMark('ol_shichou2')<3&&!player.getHistory('sourceDamage',function(evt){
+ return evt.card==event.card;
+ }).length&&event.cards.filterInD().length>0;
+ },
+ content:function(){
+ player.addMark('ol_shichou2',1,false);
+ player.gain(trigger.cards.filterInD(),'gain2');
+ },
+ },
+ //新大小乔
+ new_xingwu:{
+ audio:"xingwu",
+ trigger:{
+ player:"phaseDiscardBegin",
+ },
+ direct:true,
+ intro:{
+ content:"expansion",
+ markcount:'expansion',
+ onunmark:function(storage,player){
+ player.removeAdditionalSkill('new_luoyan');
+ },
+ },
+ onremove:function(player,skill){
+ var cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ },
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseCard('he',get.prompt('new_xingwu'),'将一张牌置于武将牌上作为“舞”').set('ai',function(card){
+ if(_status.event.goon) return 20-get.value(card);
+ return 7-get.value(card);
+ }).set('goon',player.needsToDiscard()||player.getStorage('new_xingwu').length>1);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('new_xingwu');
+ var cards=result.cards;
+ player.addToExpansion(cards,player,'give').gaintag.add('new_xingwu');
+ if(player.hasSkill('new_luoyan')) player.addAdditionalSkill('new_luoyan',['oltianxiang','liuli']);
+ }
+ else event.finish();
+ 'step 2'
+ game.delayx();
+ var choices=[];
+ event.addIndex=0;
+ if(player.getExpansions('new_xingwu').length>2){
+ choices.push('将三张“星舞”牌置入弃牌堆');
+ }
+ else event.addIndex++;
+ if(player.countCards('h',function(card){
+ return lib.filter.cardDiscardable(card,player,'new_xingwu');
+ })>1) choices.push('弃置两张手牌并将武将牌翻面');
+ if(choices.length){
+ player.chooseControl('cancel2').set('prompt','星舞:是否发射核弹?').set('choiceList',choices).set('ai',function(){
+ var player=_status.event.player;
+ if(player.getExpansions('new_xingwu').length>2) return 0;
+ if(player.isTurnedOver()||player.identity=='fan'||player.getEnemies().length==1) return 0;
+ return 'cancel2';
+ });
+ }
+ else event.finish();
+ 'step 3'
+ if(result.control!='cancel2'){
+ var num=result.index+event.addIndex;
+ if(num==1){
+ event.goto(5);
+ return;
+ }
+ if(player.getExpansions('new_xingwu').length>3) player.chooseButton(['请选择要移去的“星舞”牌',player.getExpansions('new_xingwu')],3,true);
+ else event._result={
+ bool:true,
+ links:player.getExpansions('new_xingwu').slice(0),
+ }
+ }
+ else event.finish();
+ 'step 4'
+ if(result.bool&&result.links&&result.links.length==3){
+ var cards=result.links;
+ player.loseToDiscardpile(cards);
+ event.goto(6);
+ }
+ else event.finish();
+ 'step 5'
+ player.chooseToDiscard(true,'h',2);
+ player.turnOver();
+ 'step 6'
+ player.chooseTarget('请选择【星舞】的目标','弃置其装备区内的所有牌。然后对其造成两点伤害(目标为女性角色则改为1点)',true,lib.filter.notMe).set('ai',function(target){
+ return -get.attitude(_status.event.player,target)*Math.sqrt(4+target.countCards('e',function(card){
+ return get.value(card,target)>0;
+ }))*(target.hasSex('female')?1:2);
+ });
+ 'step 7'
+ if(result.bool&&result.targets&&result.targets.length){
+ var target=result.targets[0];
+ player.line(target,'green');
+ var num=target.countCards('e');
+ if(num) player.discardPlayerCard(target,'e',num,true);
+ target.damage(target.hasSex('female')?1:2);
+ }
+ },
+ ai:{
+ threaten:1.5,
+ },
+ },
+ new_luoyan:{
+ init:function(player){
+ if(player.getStorage('new_xingwu').length) player.addAdditionalSkill('new_luoyan',['oltianxiang','liuli']);
+ },
+ onremove:function(player){
+ player.removeAdditionalSkill('new_luoyan');
+ },
+ derivation:['oltianxiang','liuli'],
+ locked:true,
+ },
+ //新孙鲁育
+ "new_meibu":{
+ audio:"meibu",
+ trigger:{
+ global:"phaseUseBegin",
+ },
+ filter:function (event,player){
+ return event.player!=player&&event.player.isIn()&&player.countCards('he')>0&&event.player.inRange(player);
+ },
+ direct:true,
+ derivation:["new_zhixi"],
+ checkx:function (event,player){
+ if(get.attitude(player,event.player)>=0) return false;
+ var e2=player.getEquip(2);
+ if(e2){
+ if(e2.name=='tengjia') return true;
+ if(e2.name=='bagua') return true;
+ }
+ return event.player.countCards('h')>event.player.hp;
+ },
+ content:function (){
+ "step 0"
+ var check=lib.skill.new_meibu.checkx(trigger,player);
+ player.chooseToDiscard(get.prompt2('new_meibu',trigger.player),'he').set('ai',function(card){
+ if(_status.event.check) return 6-get.value(card);
+ return 0;
+ }).set('check',check).set('logSkill','new_meibu');
+ "step 1"
+ if(result.bool){
+ var target=trigger.player;
+ var card=result.cards[0];
+ player.line(target,'green');
+ target.addTempSkill('new_zhixi','phaseUseAfter');
+ if(card.name!='sha'&&get.type(card)!='trick'&&get.color(card)!='black'){
+ target.addTempSkill('new_meibu_range','phaseUseEnd');
+ target.storage.meibu=player;
+ }
+ target.markSkillCharacter('new_meibu',player,'魅步','锁定技,出牌阶段,你至多可使用X张牌,你使用了锦囊牌后不能再使用牌(X为你的体力值)。');
+ }
+ },
+ ai:{
+ expose:0.2,
+ },
+ subSkill:{
+ range:{
+ mod:{
+ globalFrom:function (from,to,num){
+ if(to==from.storage.meibu){
+ return -Infinity;
+ }
+ },
+ },
+ sub:true,
+ },
+ },
+ },
+ "new_mumu":{
+ audio:"mumu",
+ trigger:{
+ player:"phaseUseBegin",
+ },
+ direct:true,
+ content:function (){
+ 'step 0'
+ player.chooseTarget(get.prompt('new_mumu'),'弃置一名角色装备区内的一张牌,或者获得一名角色装备区内的防具牌',function(card,player,target){
+ if(target==player) return target.getEquips(2).length>0;
+ return target.countCards('e')>0;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target)
+ if(target.getEquip(2)&&player.hasEmptySlot(2)){
+ return -2*att;
+ }
+ return -att;
+ });
+ 'step 1'
+ if(result.bool&&result.targets&&result.targets.length){
+ event.target=result.targets[0];
+ player.logSkill('new_mumu',event.target);
+ player.line(event.target,'green');
+ var e=event.target.getEquips(2);
+ event.e=e;
+ if(target==player) event.choice='获得一张防具牌';
+ else if(e.length>0){
+ player.chooseControl('弃置一张装备牌','获得一张防具牌').set('ai',function(){
+ if(_status.event.player.getEquips(2).length>0){
+ return '弃置一张装备牌';
+ }
+ return '获得一张防具牌';
+ });
+ }
+ else{
+ event.choice='弃置一张装备牌';
+ }
+ }
+ else event.finish();
+ 'step 2'
+ var choice=event.choice||result.control;
+ if(choice=='弃置一张装备牌'){
+ player.discardPlayerCard(event.target,'e',true);
+ }
+ else{
+ if(event.e){
+ player.gain(event.e,event.target,'give','bySelf');
+ player.addTempSkill('new_mumu2')
+ }
+ }
+ },
+ },
+ "new_zhixi":{
+ mod:{
+ cardEnabled:function(card,player){
+ if(player.storage.new_zhixi2||player.countMark('new_zhixi')>=player.hp) return false;
+ },
+ cardUsable:function(card,player){
+ if(player.storage.new_zhixi2||player.countMark('new_zhixi')>=player.hp) return false;
+ },
+ cardRespondable:function(card,player){
+ if(player.storage.new_zhixi2||player.countMark('new_zhixi')>=player.hp) return false;
+ },
+ cardSavable:function(card,player){
+ if(player.storage.new_zhixi2||player.countMark('new_zhixi')>=player.hp) return false;
+ },
+ },
+ trigger:{
+ player:"useCard1",
+ },
+ forced:true,
+ popup:false,
+ onremove:true,
+ firstDo:true,
+ init:function(player,skill){
+ player.storage[skill]=0;
+ var evt=_status.event.getParent('phaseUse');
+ if(evt&&evt.player==player){
+ player.getHistory('useCard',function(evtx){
+ if(evtx.getParent('phaseUse')==evt){
+ player.storage[skill]++;
+ if(get.type2(evtx.card)=='trick') player.storage.new_zhixi2=true;
+ }
+ });
+ }
+ },
+ onremove:function(player){
+ player.unmarkSkill('new_meibu');
+ delete player.storage.new_zhixi;
+ delete player.storage.new_zhixi2;
+ },
+ content:function(){
+ player.addMark('new_zhixi',1,false);
+ if(get.type2(trigger.card)=='trick') player.storage.new_zhixi2=true;
+ },
+ ai:{presha:true,pretao:true,nokeep:true},
+ },
+ "new_mumu2":{
+ mod:{
+ cardEnabled:function(card){
+ if(card.name=='sha') return false;
+ },
+ },
+ },
+ qingzhong:{
+ audio:2,
+ },
+ qingzhongx:{
+ audio:'weijing',
+ trigger:{player:'phaseUseBegin'},
+ check:function(event,player){
+ if(game.hasPlayer(function(current){
+ return current!=player&¤t.isMinHandcard()&&get.attitude(player,current)>0;
+ })){
+ return true;
+ }
+ if(player.countCards('h')<=2) return true;
+ // if(player.countCards('h')<=3&&!player.countCards('h','shan')) return true;
+ //if(player.countCards('h',{type:'basic'})<=1) return true;
+ return false;
+ },
+ content:function(){
+ player.draw(2);
+ player.addTempSkill('qingzhongx_give');
+ },
+ subSkill:{
+ give:{
+ trigger:{player:'phaseUseEnd'},
+ filter:function(event,player){
+ return !player.isMinHandcard(true);
+ },
+ audio:'weijing',
+ forced:true,
+ content:function(){
+ 'step 0'
+ var list=game.filterPlayer(function(current){
+ return current.isMinHandcard();
+ });
+ if(list.length==1){
+ if(list[0]!=player){
+ player.line(list[0],'green');
+ player.swapHandcards(list[0]);
+ }
+ event.finish();
+ }
+ else{
+ player.chooseTarget(true,'清忠:选择一名手牌最少的角色与其交换手牌',function(card,player,target){
+ return target.isMinHandcard();
+ }).set('ai',function(target){
+ return get.attitude(_status.event.player,target);
+ });
+ }
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ if(target!=player){
+ player.line(target,'green');
+ player.swapHandcards(target);
+ }
+ }
+ }
+ }
+ }
+ },
+ weijing:{
+ audio:2,
+ group:['weijing_sha','weijing_shan'],
+ subSkill:{
+ sha:{
+ audio:'qingzhong',
+ enable:'chooseToUse',
+ viewAs:{name:'sha',isCard:true},
+ filterCard:function(){return false},
+ viewAsFilter:function(player){
+ if(player.hasSkill('weijing_disable')) return false;
+ },
+ selectCard:-1,
+ mark:false,
+ precontent:function(){
+ player.addTempSkill('weijing_disable','roundStart');
+ },
+ prompt:'视为使用一张杀',
+ ai:{
+ order:function(){
+ var player=_status.event.player;
+ if(!player.hasShan()&&!game.hasPlayer(function(current){
+ return player.canUse('sha',current)&¤t.hp==1&&get.effect(current,{name:'sha'},player,player)>0;
+ })){
+ return 0;
+ }
+ return 2.95;
+ },
+ skillTagFilter:function(player,tag,arg){
+ if(player.hasSkill('weijing_disable')) return false;
+ if(arg!='use') return false;
+ },
+ respondSha:true,
+ }
+ },
+ shan:{
+ audio:'qingzhong',
+ enable:'chooseToUse',
+ viewAs:{name:'shan',isCard:true},
+ mark:false,
+ filterCard:function(){return false},
+ viewAsFilter:function(player){
+ if(player.hasSkill('weijing_disable')) return false;
+ return true;
+ },
+ onuse:function(event,player){
+ player.addTempSkill('weijing_disable','roundStart');
+ },
+ selectCard:-1,
+ prompt:'视为使用一张闪',
+ ai:{
+ order:function(){
+ var player=_status.event.player;
+ if(player.hasSkill('qingzhongx_give')) return 2.95;
+ return 3.15;
+ },
+ skillTagFilter:function(player){
+ if(player.hasSkill('weijing_disable')) return false;
+ },
+ respondShan:true,
+ }
+ },
+ disable:{
+ mark:true,
+ intro:{
+ content:'本轮已发动'
+ }
+ }
+ }
+ },
+ zishu:{
+ audio:2,
+ locked:true,
+ subSkill:{
+ discard:{
+ trigger:{global:'phaseEnd'},
+ audio:"zishu",
+ forced:true,
+ filter:function(event,player){
+ if(_status.currentPhase!=player){
+ var he=player.getCards('h');
+ var bool=false;
+ player.getHistory('gain',function(evt){
+ if(!bool&&evt&&evt.cards){
+ for(var i=0;i0) return false;
+ return event.cards.filterInD().length>0
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('yingyuan'),'将'+get.translation(trigger.cards)+'交给一名其他角色',function(card,player,target){
+ return target!=player;
+ }).set('ai',function(target){
+ if(target.hasJudge('lebu')) return 0;
+ var att=get.attitude(_status.event.player,target);
+ if(att<3) return 0;
+ if(target.hasSkillTag('nogain')) att/=10;
+ if(target.hasSha()&&_status.event.sha){
+ att/=5;
+ }
+ if(event.wuxie&&target.needsToDiscard(1)){
+ att/=5;
+ }
+ return att/(1+get.distance(player,target,'absolute'));
+ }).set('sha',trigger.cards[0].name=='sha').set('wuxie',trigger.cards[0].name=='wuxie');
+ 'step 1'
+ if(result.bool){
+ player.logSkill('yingyuan',result.targets[0]);
+ result.targets[0].gain(trigger.cards.filterInD(),'gain2');
+ player.getHistory('custom').push({yingyuan_name:trigger.card.name});
+ }
+ },
+ },
+ shuimeng:{
+ audio:2,
+ trigger:{player:'phaseUseAfter'},
+ direct:true,
+ filter:function(event,player){
+ return player.countCards('h');
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('shuimeng'),function(card,player,target){
+ return player.canCompare(target);
+ }).set('ai',function(target){
+ if(!_status.event.goon) return 0;
+ return -get.attitude(_status.event.player,target);
+ }).set('goon',player.needsToDiscard()||player.hasCard(function(card){
+ var val=get.value(card);
+ if(val<0) return true;
+ if(val<=5){
+ return card.number>=11;
+ }
+ if(val<=6){
+ return card.number>=12;
+ }
+ return false;
+ }));
+ 'step 1'
+ if(result.bool){
+ player.logSkill('shuimeng',result.targets);
+ event.target=result.targets[0];
+ player.chooseToCompare(event.target);
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(result.bool){
+ player.chooseUseTarget({name:'wuzhong',isCard:true},true);
+ }
+ else{
+ event.target.useCard({name:'guohe',isCard:true},player);
+ }
+ }
+ },
+ qianya:{
+ audio:2,
+ trigger:{target:'useCardToTargeted'},
+ direct:true,
+ filter:function(event,player){
+ return get.type(event.card,'trick')=='trick'&&player.countCards('h');
+ },
+ content:function(){
+ 'step 0'
+ var nh=player.countCards('h');
+ player.chooseCardTarget({
+ filterCard:true,
+ filterTarget:function(card,player,target){
+ return target!=player;
+ },
+ selectCard:[1,nh],
+ ai1:function(card){
+ var player=_status.event.player;
+ var cardname=_status.event.cardname;
+ if(_status.event.du) return -get.value(card,player,'raw');
+ else if(_status.event.shuimeng){
+ if(cardname=='wuzhong'){
+ if(player.needsToDiscard(2-ui.selected.cards.length)){
+ return 10-get.value(card,player,'raw');
+ }
+ }
+ else if(cardname=='guohe'){
+ if(player.needsToDiscard(-1-ui.selected.cards.length)){
+ return 10-get.value(card,player,'raw');
+ }
+ }
+ return 0;
+ }
+ else if(cardname=='lebu'){
+ if(player.needsToDiscard(1-ui.selected.cards.length)){
+ return 8-get.value(card,player,'raw');
+ }
+ else{
+ if(!ui.selected.cards.length){
+ return 6-get.value(card,player,'raw');
+ }
+ return 0;
+ }
+ }
+ else if(cardname=='shunshou'){
+ if(_status.event.nh<=2) return get.value(card,player,'raw');
+ }
+ else if(cardname=='huogong'){
+ if(player.hp==1) return get.value(card,player,'raw');
+ }
+ if(ui.selected.cards.length) return 0;
+ return 7-get.value(card,player,'raw');
+ },
+ ai2:function(target){
+ var att=get.attitude(_status.event.player,target);
+ var nh2=target.countCards('h');
+ var num=Math.sqrt(1+nh2);
+ var cardname=_status.event.cardname;
+ if(_status.event.du) return 0.5-att;
+ else if(_status.event.shuimeng){
+ return att/num;
+ }
+ else if(cardname=='lebu'){
+ return att/num;
+ }
+ else if(cardname=='shunshou'){
+ if(_status.event.nh<=2) return att/num;
+ }
+ else if(cardname=='huogong'){
+ if(_status.event.player.hp==1) return att/num;
+ }
+ if(_status.event.nh>nh2+1){
+ return att/num;
+ }
+ return 0;
+ },
+ du:player.hasCard(function(card){
+ return get.value(card,player,'raw')<0;
+ }),
+ shuimeng:trigger.getParent(2).name=='shuimeng',
+ nh:nh,
+ cardname:trigger.card.name,
+ prompt:get.prompt2('qianya')
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('qianya',result.targets);
+ player.give(result.cards,result.targets[0]);
+ }
+ }
+ },
+ xianfu:{
+ trigger:{
+ global:'phaseBefore',
+ player:'enterGame',
+ },
+ forced:true,
+ filter:function(event,player){
+ return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0);
+ },
+ audio:6,
+ content:function(){
+ 'step 0'
+ player.chooseTarget('请选择【先辅】的目标',lib.translate.xianfu_info,true,function(card,player,target){
+ return target!=player&&(!player.storage.xianfu2||!player.storage.xianfu2.contains(target));
+ }).set('ai',function(target){
+ var att=get.attitude(_status.event.player,target);
+ if(att>0) return att+1;
+ if(att==0) return Math.random();
+ return att;
+ }).animate=false;
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ if(!player.storage.xianfu2) player.storage.xianfu2=[];
+ player.storage.xianfu2.push(target);
+ player.addSkill('xianfu2');
+ }
+ }
+ },
+ xianfu_mark:{
+ marktext:'辅',
+ intro:{
+ name:'先辅',
+ content:'当你受到伤害后,$受到等量的伤害,当你回复体力后,$回复等量的体力'
+ },
+ },
+ xianfu2:{
+ audio:'xianfu',
+ charlotte:true,
+ trigger:{global:['damageEnd','recoverEnd']},
+ forced:true,
+ filter:function(event,player){
+ if(event.player.isDead()||!player.storage.xianfu2||!player.storage.xianfu2.contains(event.player)||event.num<=0) return false;
+ if(event.name=='damage') return true;
+ return player.isDamaged();
+ },
+ logTarget:'player',
+ content:function(){
+ 'step 0'
+ var target=trigger.player;
+ if(!target.storage.xianfu_mark) target.storage.xianfu_mark=[];
+ target.storage.xianfu_mark.add(player);
+ target.storage.xianfu_mark.sortBySeat();
+ target.markSkill('xianfu_mark');
+ game.delayx();
+ 'step 1'
+ player[trigger.name](trigger.num,'nosource');
+ },
+ onremove:function(player){
+ if(!player.storage.xianfu2) return;
+ game.countPlayer(function(current){
+ if(player.storage.xianfu2.contains(current)&¤t.storage.xianfu_mark){
+ current.storage.xianfu_mark.remove(player);
+ if(!current.storage.xianfu_mark.length) current.unmarkSkill('xianfu_mark');
+ else current.markSkill('xianfu_mark');
+ }
+ });
+ delete player.storage.xianfu2;
+ },
+ group:'xianfu3',
+ },
+ xianfu3:{
+ trigger:{global:'dieBegin'},
+ silent:true,
+ filter:function(event,player){
+ return event.player==player||player.storage.xianfu2&&player.storage.xianfu2.contains(player);
+ },
+ content:function(){
+ if(player==trigger.player) lib.skill.xianfu2.onremove(player);
+ else player.storage.xianfu2.remove(event.player);
+ }
+ },
+ chouce:{
+ trigger:{player:'damageEnd'},
+ content:function(){
+ 'step 0'
+ event.num=trigger.num;
+ 'step 1'
+ player.judge();
+ 'step 2'
+ event.color=result.color;
+ if(event.color=='black'){
+ if(game.hasPlayer(function(current){
+ return current.countDiscardableCards(player,'hej')>0;
+ })) player.chooseTarget('弃置一名角色区域内的一张牌',function(card,player,target){
+ return target.countDiscardableCards(player,'hej');
+ },true).set('ai',function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target);
+ if(att<0){
+ att=-Math.sqrt(-att);
+ }
+ else{
+ att=Math.sqrt(att);
+ }
+ return att*lib.card.guohe.ai.result.target(player,target);
+ });
+ else event.finish();
+ }
+ else{
+ var next=player.chooseTarget('令一名角色摸一张牌');
+ if(player.storage.xianfu2&&player.storage.xianfu2.length){
+ next.set('prompt2','(若目标为'+get.translation(player.storage.xianfu2)+'则改为摸两张牌)');
+ }
+ next.set('ai',function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h'));
+ if(target.hasSkillTag('nogain')) att/=10;
+ if(player.storage.xianfu2&&player.storage.xianfu2.contains(target)) return att*2;
+ return att;
+ })
+ }
+ 'step 3'
+ if(result.bool){
+ var target=result.targets[0];
+ player.line(target,'green');
+ if(event.color=='black'){
+ player.discardPlayerCard(target,'hej',true);
+ }
+ else{
+ if(player.storage.xianfu2&&player.storage.xianfu2.contains(target)){
+ if(!target.storage.xianfu_mark) target.storage.xianfu_mark=[];
+ target.storage.xianfu_mark.add(player);
+ target.storage.xianfu_mark.sortBySeat();
+ target.markSkill('xianfu_mark');
+ target.draw(2);
+ }
+ else{
+ target.draw();
+ }
+ }
+ }
+ 'step 4'
+ if(--event.num>0&&player.hasSkill('chouce')){
+ player.chooseBool(get.prompt2('chouce'));
+ }
+ else{
+ event.finish();
+ }
+ 'step 5'
+ if(result.bool){
+ player.logSkill('chouce');
event.goto(1);
}
},
ai:{
maixie:true,
- "maixie_hp":true,
- result:{
- effect:function (card,player,target){
+ maixie_hp:true,
+ effect:{
+ target:function(card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
- var num=1;
- if(get.attitude(player,target)>0){
- if(player.needsToDiscard()){
- num=0.7;
- }
- else{
- num=0.5;
- }
- }
- if(player.hp>=4) return [1,num*2];
- if(target.hp==3) return [1,num*1.5];
- if(target.hp==2) return [1,num*0.5];
+ if(target.hp>=4) return [1,get.tag(card,'damage')*1.5];
+ if(target.hp==3) return [1,get.tag(card,'damage')*1];
+ if(target.hp==2) return [1,get.tag(card,'damage')*0.5];
}
- },
- },
- threaten:0.6,
- },
- },
- "new_rejianxiong":{
- audio:"rejianxiong",
- audioname:['shen_caopi'],
- trigger:{
- player:"damageEnd",
- },
- content:function (){
- "step 0"
- if(get.itemtype(trigger.cards)=='cards'&&get.position(trigger.cards[0],true)=='o'){
- player.gain(trigger.cards,"gain2");
+ }
}
- player.draw('nodelay');
- },
- ai:{
- maixie:true,
- "maixie_hp":true,
- effect:{
- target:function (card,player,target){
- if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
- if(get.tag(card,'damage')&&player!=target){
- var cards=card.cards,evt=_status.event;
- if(evt.player==target&&card.name=='damage'&&evt.getParent().type=='card') cards=evt.getParent().cards.filterInD();
- if(target.hp<=1) return;
- if(get.itemtype(cards)!='cards') return;
- for(var i of cards){
- if(get.name(i,target)=='tao') return [1,5];
- }
- if(get.value(cards,target)>=(7+target.getDamagedHp())) return [1,3];
- return [1,0.6];
- }
- },
- },
- },
+ }
},
- "new_reluoyi":{
- audio:"reluoyi",
- trigger:{
- player:"phaseDrawBegin1",
- },
+ fuqi:{
+ audio:2,
forced:true,
- locked:false,
+ trigger:{
+ player:"useCard",
+ },
filter:function(event,player){
- return !event.numFixed;
+ return event.card&&(get.type(event.card)=='trick'||get.type(event.card)=='basic'&&!['shan','tao','jiu','du'].contains(event.card.name))&&game.hasPlayer(function(current){
+ return current!=player&&get.distance(current,player)<=1;
+ });
},
- content:function (){
- "step 0"
- var cards=get.cards(3);
- game.cardsGotoOrdering(cards);
- player.showCards(cards,'裸衣');
- var cardsx=[];
- for(var i=0;i=trigger.num;
- };
- "step 1"
- if(result.bool){
- if(cards.length) player.gain(cards,'gain2');
- //game.cardsDiscard(cards2);
- player.addTempSkill('reluoyi2',{player:'phaseBefore'});
- trigger.changeToZero();
- }
- //else game.cardsDiscard(cards);
- },
- },
- "new_rewusheng":{
- mod:{
- targetInRange:function (card){
- if(get.suit(card)=='diamond'&&card.name=='sha') return true;
- },
- },
- locked:false,
- audio:"wusheng",
- audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo','re_guanzhang','dc_jsp_guanyu'],
- enable:["chooseToRespond","chooseToUse"],
- filterCard:function(card,player){
- if(get.zhu(player,'shouyue')) return true;
- return get.color(card)=='red';
- },
- position:"hes",
- viewAs:{
- name:"sha",
- },
- viewAsFilter:function(player){
- if(get.zhu(player,'shouyue')){
- if(!player.countCards('hes')) return false;
- }
- else{
- if(!player.countCards('hes',{color:'red'})) return false;
- }
- },
- prompt:"将一张红色牌当杀使用或打出",
- check:function(card){
- var val=get.value(card);
- if(_status.event.name=='chooseToRespond') return 1/Math.max(0.1,val);
- return 5-val;
+ content:function(){
+ trigger.directHit.addArray(game.filterPlayer(function(current){
+ return current!=player&&get.distance(current,player)<=1;
+ }));
},
ai:{
- respondSha:true,
- skillTagFilter:function(player){
- if(get.zhu(player,'shouyue')){
- if(!player.countCards('hes')) return false;
- }
- else{
- if(!player.countCards('hes',{color:'red'})) return false;
- }
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ return get.distance(arg.target,player)<=1;
},
},
},
- "new_yijue":{
- audio:"yijue",
- enable:"phaseUse",
+ wylianji:{
+ enable:'phaseUse',
+ audio:2,
usable:1,
- position:"he",
- filterTarget:function (card,player,target){
- return player!=target&&target.countCards('h');
+ filter:function(event,player){
+ return player.hasCard(lib.skill.wylianji.filterCard);
},
- filterCard:true,
- check:function (card){
- return 8-get.value(card);
+ check:function(card){
+ if(card.name=='sha') return 1;
+ else{
+ if(get.tag(card,'damage')){
+ if(get.tag(card,'multineg')) return 5;
+ return 2;
+ }
+ }
+ return 0;
},
- content:function (){
- "step 0"
- if(!target.countCards('h')){
+ filterCard:function(card){
+ return get.name(card)=='sha'||(get.type(card,'trick')=='trick'&&get.color(card)=='black'&&!get.info(card).multitarget)&&get.info(card).enable;
+ },
+ filterTarget:function(card,player,target){
+ return target!=player&&!target.isMin()&&
+ (player.canUse(card,target,false)||game.hasPlayer(function(current){
+ return current!=player&&target.canUse(card,current);
+ }));
+ },
+ discard:false,
+ lose:true,
+ delay:false,
+ content:function(){
+ 'step 0'
+ player.showCards(get.translation(player)+'对'+get.translation(target)+'发动了【连计】',cards);
+ 'step 1'
+ var equip1=get.cardPile2(function(card){
+ return get.subtype(card)=='equip1';
+ });
+ if(!equip1){
+ player.popup('连计失败');
+ game.log('牌堆中无装备');
event.finish();
return;
}
- else target.chooseCard(true,'h').set('ai',function(card){
- var player=_status.event.player;
- if((player.hasShan()||player.hp<3)&&get.color(card)=='black') return 0.5;
- return Math.max(1,20-get.value(card));
+ if(equip1.name=='qinggang'&&!lib.inpile.contains('qibaodao')){
+ equip1.remove();
+ equip1=game.createCard2('qibaodao',equip1.suit,equip1.number);
+ }
+ target.$draw(equip1);
+ target.chooseUseTarget(true,equip1,'nothrow','nopopup');
+ game.delay();
+ 'step 2'
+ game.updateRoundNumber();
+ var card=cards[0];
+ var bool1=game.hasPlayer(function(current){
+ return current!=player&&target.canUse(card,current);
});
- "step 1"
- target.showCards(result.cards);
- event.card2=result.cards[0];
- if(get.color(event.card2)=='black'){
- if(!target.hasSkill('fengyin')){
- target.addTempSkill('fengyin');
- }
- target.addTempSkill('new_yijue2');
+ var bool2=player.canUse(card,target,false);
+ if(bool1&&bool2){
+ target.chooseControl(function(){
+ return 0;
+ }).set('choiceList',[
+ '对除'+get.translation(player)+'以外的角色使用'+get.translation(cards)+',并将装备区里的武器牌交给该牌的一个目标角色',
+ '视为'+get.translation(player)+'对你使用'+get.translation(cards)+',并将装备区内的武器牌交给'+get.translation(player)
+ ]);
+ }
+ else if(bool1){
+ event.directindex=0;
+ }
+ else if(bool2){
+ event.directindex=1;
+ }
+ else{
event.finish();
}
- else if(get.color(event.card2)=='red'){
- player.gain(event.card2,target,'give','bySelf');
- if(target.hp0;
- };
+ 'step 3'
+ var card=cards[0];
+ if(result&&typeof event.directindex!='number'){
+ event.directindex=result.index;
+ }
+ if(event.directindex==1){
+ event.insert(lib.skill.wylianji.content_use,{
+ player:player,
+ target:target,
+ card:card
+ })
+ }
+ else{
+ event.insert(lib.skill.wylianji.content_give,{
+ player:target,
+ card:card,
+ targets:game.filterPlayer(function(current){
+ return current!=player;
+ })
+ });
+ }
+ },
+ content_use:function(){
+ 'step 0'
+ player.useCard(card,target);
+ 'step 1'
+ if(!get.owner(card)){
+ target.gain(card,'gain2');
+ }
+ 'step 2'
+ var equip1=target.getEquips(1);
+ if(equip1.length){
+ game.delay();
+ target.give(equip1,player);
+ target.line(player);
+ }
+ },
+ content_give:function(){
+ 'step 0'
+ var select=get.select(get.info(card).selectTarget);
+ if(select[1]==-1){
+ for(var i=0;i1){
+ player.chooseTarget(true,'将'+get.translation(equip1)+'交给一名角色',function(card,player,target){
+ return _status.event.list.contains(target);
+ }).set('ai',function(target){
+ return get.attitude(player,target);
+ }).set('list',_status.event.list);
+ event.equip1=equip1;
+ }
+ else{
+ if(event.list.length==1){
+ player.give(equip1,event.list[0]);
+ player.line(event.list);
+ }
+ event.finish();
}
}
- "step 2"
- if(result.bool){
- target.recover();
+ else{
+ event.finish();
+ }
+ 'step 3'
+ if(result.bool&&result.targets.length&&event.equip1){
+ player.give(event.equip1,result.targets[0]);
+ player.line(result.targets);
}
},
ai:{
+ order:7,
result:{
target:function(player,target){
- var hs=player.getCards('h');
- if(hs.length<3) return 0;
- if(target.countCards('h')>target.hp+1&&get.recoverEffect(target)>0){
- return 1;
+ if(ui.selected.cards.length){
+ var card=ui.selected.cards[0];
+ var bool=(card.name!='sha');
+ if(game.hasPlayer(function(current){
+ return target.canUse(card,current,bool)&&get.effect(current,card,target,player)>0;
+ })){
+ var num=1;
+ if(target.getEquip(1)){
+ num=0.6;
+ }
+ if(target.hasSkillTag('noe')) 2*num;
+ return num;
+ }
}
- if(player.canUse('sha',target)&&(player.countCards('h','sha')||player.countCards('he',{color:'red'}))){
- return -2;
+ return 0;
+ }
+ }
+ }
+ },
+ moucheng:{
+ audio:2,
+ derivation:['jingong','wy_meirenji','wy_xiaolicangdao'],
+ trigger:{global:'damageEnd'},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event.source!=player&&event.getParent(2).name=='useCard'&&event.getParent(3).name=='wylianjiInserted';
+ },
+ init:function(player){
+ player.storage.moucheng=0;
+ },
+ intro:{
+ content:'已造成#点伤害'
+ },
+ unique:true,
+ juexingji:true,
+ content:function(){
+ player.storage.moucheng+=trigger.num;
+ if(player.hasSkill('moucheng')){
+ player.markSkill('moucheng');
+ player.syncStorage('moucheng');
+ }
+ if(player.storage.moucheng>=3){
+ event.trigger('mouchengAwaken');
+ }
+ },
+ group:'moucheng_awaken',
+ subSkill:{
+ awaken:{
+ trigger:{player:'mouchengAwaken'},
+ forced:true,
+ skillAnimation:true,
+ animationColor:'gray',
+ content:function(){
+ player.awakenSkill('moucheng');
+ player.removeSkill('wylianji');
+ game.log(player,'失去了技能','#g【连计】');
+ player.addSkillLog('jingong');
+ }
+ }
+ }
+ },
+ jingong:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return event.xinjingong_list&&player.countCards('hes',function(card){
+ return card.name=='sha'||get.type(card)=='equip';
+ });
+ },
+ onChooseToUse:function(event){
+ if(!game.online){
+ var evt=event.getParent();
+ if(evt.name!='phaseUse') return;
+ if(!evt.xinjingong_list){
+ var list=get.inpile('trick').randomGets(2);
+ if(Math.random()<0.5){
+ list.push('wy_meirenji');
}
- return -0.5;
- },
+ else{
+ list.push('wy_xiaolicangdao');
+ }
+ evt.xinjingong_list=list;
+ }
+ if(!event.xinjingong_list) event.set('xinjingong_list',evt.xinjingong_list);
+ }
+ },
+ chooseButton:{
+ dialog:function(event,player){
+ var list=[];
+ for(var i of event.xinjingong_list) list.push(['锦囊','',i]);
+ return ui.create.dialog('矜功',[list,'vcard']);
},
- order:9,
- directHit_ai:true,
- skillTagFilter:function(player,tag,arg){
- if(!arg.target.hasSkillTag('new_yijue2')) return false;
+ filter:function(button,player){
+ return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent());
+ },
+ check:function(button){
+ return _status.event.player.getUseValue({name:button.link[2]});
+ },
+ backup:function(links,player){
+ return {
+ audio:'jingong',
+ filterCard:true,
+ popname:true,
+ position:'hes',
+ viewAs:{name:links[0][2]},
+ check:function(card){
+ return 6-get.value(card);
+ },
+ filterCard:function(card){
+ return card.name=='sha'||get.type(card)=='equip';
+ },
+ precontent:function(){
+ player.addTempSkill('jingong2');
+ },
+ };
+ },
+ prompt:function(links,player){
+ return '将一张【杀】或装备牌当做'+get.translation(links[0][2])+'使用';
+ }
+ },
+ ai:{
+ order:2,
+ result:{
+ player:function(player){
+ if((player.hp<=2||player.needsToDiscard())&&!player.getStat('damage')) return 0;
+ return 1;
+ }
+ }
+ }
+ },
+ jingong2:{
+ trigger:{player:'phaseJieshuBegin'},
+ forced:true,
+ filter:function(event,player){
+ return !player.getStat('damage');
+ },
+ content:function(){
+ player.loseHp();
+ }
+ },
+ jingong3:{charlotte:true},
+ weikui:{
+ audio:'kuiwei',
+ enable:'phaseUse',
+ usable:1,
+ filterTarget:function(card,player,target){
+ return target!=player&&target.countCards('h');
+ },
+ content:function(){
+ 'step 0'
+ player.loseHp();
+ 'step 1'
+ if(target.countCards('h','shan')){
+ player.viewHandcards(target);
+ if(player.canUse({name:'sha',isCard:true},target,false)) player.useCard({name:'sha',isCard:true},target,false);
+ player.storage.weikui2=target;
+ player.addTempSkill('weikui2');
+ }
+ else{
+ player.discardPlayerCard(target,'visible',true,'h').set('ai',function(button){
+ return get.value(button.link,_status.event.target);
+ });
+ }
+ },
+ ai:{
+ order:8,
+ result:{
+ target:function(player,target){
+ if(player.hp<=2) return 0;
+ if(player.hp==3) return target.hp<=2?-1:0;
+ return -1;
+ }
+ }
+ }
+ },
+ weikui2:{
+ onremove:true,
+ mod:{
+ globalFrom:function(from,to){
+ if(to==from.storage.weikui2) return -Infinity;
+ }
+ },
+ mark:'character',
+ intro:{
+ content:'与$的距离视为1直到回合结束'
+ },
+ },
+ lizhan:{
+ audio:'yanzheng',
+ trigger:{player:'phaseJieshuBegin'},
+ direct:true,
+ filter:function(event,player){
+ for(var i=0;i=num) return false;
+ return player.countCards('h')>0;
+ },
+ filterTarget:function(event,player,target){
+ return player.canCompare(target);
+ },
+ content:function(){
+ 'step 0'
+ player.chooseToCompare(target);
+ 'step 1'
+ if(!result.bool) event.finish();
+ event.num=result.num1;
+ 'step 2'
+ if(num<=5&&target.countGainableCards(player,'he')>0) player.gainPlayerCard(target,'he',true);
+ 'step 3'
+ if(num<=9){
+ var card=get.cardPile2(function(x){
+ return x.name=='sha';
+ });
+ if(card) player.gain(card,'gain2');
+ }
+ 'step 4'
+ if(num<=13){
+ var card={name:'sha',nature:'thunder'};
+ if(player.canUse(card,target,false)) player.useCard(card,target,false);
+ }
+ },
+ ai:{
+ order:4,
+ result:{
+ target:function(player,target){
+ var sort=function(a,b){
+ return b.number-a.number;
+ };
+ var ps=player.getCards('h').sort(sort);
+ var ts=target.getCards('h').sort(sort);
+ if(ps[0].number>ts[0].number){
+ var effect=get.effect(target,{name:'sha',nature:'thunder'},player,player)
+ if(ps[0].number<6&&target.countCards('he')>1) effect-=2;
+ if(ps[0].number<10) effect-=1;
+ return effect;
+ }
+ return ps.length>=ts.length?-0.5:0;
+ },
},
},
},
- new_yijue2:{
- trigger:{
- player:"damageBegin1",
+ fenyue:{
+ audio:2,
+ enable:'phaseUse',
+ filter:function(event,player){
+ if(!player.countCards('h')) return false;
+ var num;
+ if(get.mode()=='identity'){
+ num=game.countPlayer(function(current){
+ return current.identity=='zhong'||current.identity=='mingzhong';
+ });
+ }
+ else{
+ num=1;
+ }
+ if(player.getStat().skill.fenyue>=num) return false;
+ return true;
},
- filter:function(event){
- return event.source&&event.source==_status.currentPhase&&event.card&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink();
+ filterTarget:function(card,player,target){
+ return player.canCompare(target);
+ },
+ ai:{
+ order:2.8,
+ result:{
+ target:function(player,target){
+ if(get.attitude(player,target)<0&&player.hasCard(function(card){
+ return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3;
+ })){
+ return get.effect(target,{name:'sha'},player,target);
+ }
+ else{
+ return 0;
+ }
+ }
+ }
},
- popup:false,
- forced:true,
- charlotte:true,
content:function(){
- trigger.num++;
- },
+ 'step 0'
+ player.chooseToCompare(target);
+ 'step 1'
+ if(result.bool){
+ player.chooseControl(function(){
+ return 1;
+ }).set('choiceList',[
+ '令'+get.translation(target)+'不能使用或打出手牌直到回合结束',
+ '视为对'+get.translation(target)+'使用一张杀(不计入次数限制)'
+ ]);
+ }
+ else{
+ var evt=_status.event.getParent('phaseUse');
+ if(evt&&evt.name=='phaseUse'){
+ evt.skipped=true;
+ }
+ event.finish();
+ }
+ 'step 2'
+ if(result.control=='选项一'){
+ target.addTempSkill('fenyue2');
+ }
+ else{
+ player.useCard({name:'sha',isCard:true},target,false);
+ }
+ }
+ },
+ fenyue2:{
mark:true,
mod:{
- cardEnabled2:function(card){
+ cardEnabled2:function (card){
if(get.position(card)=='h') return false;
},
},
intro:{
- content:"不能使用或打出手牌",
- },
+ content:'不能使用或打出手牌'
+ }
},
- paoxiao_re_zhangfei:{audio:2},
- "new_repaoxiao":{
- audio:"paoxiao",
- firstDo:true,
- audioname2:{
- old_guanzhang:'old_fuhun',
- xin_zhangfei:'paoxiao_re_zhangfei',
- },
- audioname:['re_zhangfei','guanzhang','xiahouba','re_guanzhang'],
- trigger:{player:'useCard1'},
- forced:true,
+
+ zfengshi:{
+ audio:2,
+ trigger:{player:'useCardToPlayered'},
filter:function(event,player){
- return event.card.name=='sha'&&(!event.audioed||!player.hasSkill('new_repaoxiao2'));
+ return event.card.name=='sha'&&event.target.countCards('e');
+ },
+ logTarget:'target',
+ check:function(event,player){
+ if(event.target.hasSkillTag('noe')) return false;
+ return get.attitude(player,event.target)<0;
},
content:function(){
- trigger.audioed=true;
- player.addTempSkill('new_repaoxiao2');
- },
- mod:{
- cardUsable:function (card,player,num){
- if(card.name=='sha') return Infinity;
- },
- },
- ai:{
- unequip:true,
- skillTagFilter:function (player,tag,arg){
- if(!get.zhu(player,'shouyue')) return false;
- if(arg&&arg.name=='sha') return true;
- return false;
- },
- },
+ trigger.target.chooseToDiscard('e',true);
+ }
},
- new_repaoxiao2:{
- charlotte:true,
- mod:{
- targetInRange:function (card,player){
- if(card.name=='sha') return true;
- },
- },
- },
- "new_tishen":{
- trigger:{
- player:"phaseUseEnd",
- },
- check:function (event,player){
- var num=0;
- var he=player.getCards('he');
- for(var i=0;ievt.card==event.card)&&event.cards.filterInD('od').length;
- },
- forced:true,
- charlotte:true,
- content:function (){
- player.gain(trigger.cards.filterInD('od'),'gain2');
- },
- },
- new_qingjian:{
- audio:"qingjian",
- trigger:{
- player:"gainAfter",
- global:'loseAsyncAfter',
- },
- direct:true,
- usable:1,
+ chuanxin:{
+ audio:2,
+ trigger:{source:'damageBegin2'},
+ preHidden:true,
filter:function(event,player){
- var evt=event.getParent('phaseDraw');
- if(evt&&evt.player==player) return false;
- return event.getg(player).length>0;
+ if(_status.currentPhase!=player) return false;
+ if(!_status.event.getParent('phaseUse')) return false;
+ if(event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.getParent().name==event.card.name){
+ if(get.mode()=='guozhan'){
+ return (event.player.identity!='qun'||player.identity=='ye')&&
+ !event.player.isUnseen()&&event.player.hasViceCharacter();
+ }
+ else{
+ var info=lib.character[event.player.name];
+ if(!info) return false;
+ var skills=event.player.getSkills();
+ for(var i=0;i=2) return 1;
+ return 0;
+ }).set('choiceList',['弃置装备区内的所有牌并失去一点体力',get.mode()=='guozhan'?'移除副将牌':'随机移除武将牌上的一个技能']);
+ }
+ else{
+ event._result={index:1};
+ }
+ 'step 1'
+ if(result.index==1){
+ if(get.mode()!='guozhan'){
+ var info=lib.character[trigger.player.name];
+ var skills=trigger.player.getSkills();
+ var list=[];
+ for(var i=0;i_status.event.player.countCards('h')) return 0;
- return att-4;
- },
- prompt:get.prompt2('new_qingjian'),
- });
- "step 1"
- if(result.bool){
- var target=result.targets[0];
- var cards=result.cards;
- var type=[];
- for(var i=0;i0;
+ },
+ logTarget:function(){
+ return _status.currentPhase;
+ },
+ content:function(){
+ var source=_status.currentPhase;
+ if(source.hasSkill('hengjiang2')){
+ source.storage.hengjiang2+=trigger.num;
+ source.storage.hengjiang3.add(player);
+ source.updateMarks();
+ }
+ else{
+ source.storage.hengjiang3=[player];
+ source.storage.hengjiang2=trigger.num;
+ source.addTempSkill('hengjiang2');
+ }
},
ai:{
- expose:0.3,
- },
+ maixie_defend:true,
+ }
},
- qingjian_add:{
+ hengjiang2:{
mark:true,
+ charlotte:true,
intro:{
- content:'手牌上限+#',
+ content:'手牌上限-#'
},
mod:{
maxHandcard:function(player,num){
- return num+player.countMark('qingjian_add');
- },
- },
- onremove:true,
- },
- new_reqingnang:{
- subSkill:{
- off:{
- sub:true,
- },
- "off2":{
- sub:true,
- },
- },
- audio:2,
- enable:"phaseUse",
- filterCard:true,
- check:function (card){
- var player=_status.event.player;
- if(game.countPlayer(function(current){
- return (get.recoverEffect(current,player,player)>0&&get.attitude(player,current)>2);
- })>1&&get.color(card)=='black'&&player.countCards('h',{color:'red'})>0) return 3-get.value(card);
- return 9-get.value(card);
- },
- filter:function (event,player){
- return !player.hasSkill('new_reqingnang_off2');
- },
- filterTarget:function (card,player,target){
- if(target.hp>=target.maxHp||target.hasSkill('new_reqingnang_off')) return false;
- return true;
- },
- content:function (){
- target.addTempSkill('new_reqingnang_off');
- if(get.color(cards[0])=='black') player.addTempSkill('new_reqingnang_off2');
- target.recover();
- },
- ai:{
- order:9,
- result:{
- target:function (player,target){
- if(target.hp==1) return 5;
- if(player==target&&player.countCards('h')>player.hp) return 5;
- return 2;
- },
- },
- threaten:2,
- },
- },
- reyaowu:{
- trigger:{player:'damageBegin3'},
- audio:'new_reyaowu',
- forced:true,
- filter:function(event){
- return event.card&&(get.color(event.card)!='red'||event.source&&event.source.isIn());
- },
- content:function(){
- trigger[get.color(trigger.card)!='red'?'player':'source'].draw();
- },
- },
- "new_reyaowu":{
- trigger:{
- player:"damageBegin3",
- },
- //priority:1,
- audio:2,
- audioname:['sb_huaxiong'],
- filter:function (event){
- return event.card&&event.card.name=='sha'&&(get.color(event.card)!='red'||event.source&&event.source.isIn());
- },
- forced:true,
- check:function (event){
- if(event.card&&(event.card.name=='sha')){
- return get.color(event.card)=='black';
+ return num-player.storage.hengjiang2;
}
},
- content:function (){
- if(get.color(trigger.card)!='red') player.draw();
- else trigger.source.chooseDrawRecover(true);
+ onremove:function(player){
+ delete player.storage.hengjiang2;
+ delete player.storage.hengjiang3;
+ },
+ trigger:{player:'phaseDiscardEnd'},
+ filter:function(event,player){
+ if(event.cards&&event.cards.length) return false;
+ var players=player.storage.hengjiang3;
+ for(var i=0;i0;
+ },
+ logTarget:function(){
+ return _status.currentPhase;
+ },
+ preHidden:true,
+ content:function(){
+ "step 0"
+ event.count=trigger.num;
+ "step 1"
+ event.count--;
+ var source=_status.currentPhase;
+ source.addTempSkill('rehengjiang2');
+ source.addMark('rehengjiang2',1,false);
+ player.addTempSkill('rehengjiang3');
+ "step 2"
+ if(event.count&&player.hasSkill('rehengjiang')){
+ player.chooseBool(get.prompt2('rehengjiang',_status.currentPhase)).set('ai',function(){
+ return lib.skill.rehengjiang.check(_status.event.getTrigger(),_status.event.player);
+ })
+ }
+ else event.finish();
+ "step 3"
+ if(result.bool){
+ player.logSkill('rehengjiang',_status.currentPhase);
+ event.goto(1);
+ }
+ },
+ ai:{
+ maixie_defend:true,
+ notemp:true,
+ }
+ },
+ rehengjiang2:{
+ mark:true,
+ charlotte:true,
+ onremove:true,
+ intro:{
+ content:'手牌上限-#'
+ },
+ mod:{
+ maxHandcard:function(player,num){
+ return num-player.storage.rehengjiang2;
+ }
+ },
+ },
+ rehengjiang3:{
+ audio:'hengjiang',
+ trigger:{global:'phaseEnd'},
+ forced:true,
+ charlotte:true,
+ filter:function(event,player){
+ if(!event.player.countMark('rehengjiang2')) return false;
+ if(event.player.hasHistory('lose',function(evt){
+ return evt.type=='discard'&&evt.cards2.length>0&&evt.getParent('phaseDiscard').player==event.player;
+ })) return false;
+ return true;
+ },
+ logTarget:'player',
+ content:function(){
+ var num=player.getHistory('useSkill',function(evt){
+ return evt.skill=='rehengjiang'&&evt.targets.contains(trigger.player);
+ }).length;
+ if(num>0) player.draw(num);
+ },
+ },
+ shuangren:{
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ preHidden:true,
+ filter:function(event,player){
+ return player.countCards('h')>0&&game.hasPlayer(function(current){
+ return current!=player&&player.canCompare(current);
+ })
+ },
+ content:function(){
+ 'step 0'
+ var goon;
+ if(player.needsToDiscard()>1){
+ goon=player.hasCard(function(card){
+ return card.number>10&&get.value(card)<=5;
+ });
+ }
+ else{
+ goon=player.hasCard(function(card){
+ return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3;
+ });
+ }
+ player.chooseTarget(get.prompt2('shuangren'),function(card,player,target){
+ return player.canCompare(target);
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ if(_status.event.goon&&get.attitude(player,target)<0){
+ return get.effect(target,{name:'sha'},player,player);
+ }
+ return 0;
+ }).set('goon',goon).setHiddenSkill(event.name);
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('shuangren',target);
+ player.chooseToCompare(target);
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(result.bool){
+ var target=event.target;
+ if(game.hasPlayer(function(current){
+ if(target==current) return false;
+ if(!player.canUse('sha',current,false)) return false;
+ return target.isFriendOf(current);
+ })){
+ var str='对一名与'+get.translation(target)+'势力相同的';
+ player.chooseTarget(str+'角色使用一张杀',true,function(card,player,target){
+ if(!player.canUse('sha',target,false)) return false;
+ if(get.mode()=='guozhan'){
+ return target.isFriendOf(_status.event.identity);
+ }
+ return true;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ return get.effect(target,{name:'sha'},player,player);
+ }).set('identity',target);
+ }
+ else{
+ player.useCard({name:'sha',isCard:true},target,false);
+ event.finish();
+ }
+ }
+ else{
+ player.addTempSkill('zishou2');
+ event.finish();
+ }
+ 'step 3'
+ if(result.bool&&result.targets&&result.targets.length){
+ player.useCard({name:'sha',isCard:true},result.targets[0],false);
+ }
+ }
+ },
+ kuanshi:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('kuanshi')).set('ai',function(target){
+ if(get.attitude(_status.event.player,target)>0){
+ return 1/Math.sqrt(target.hp+1);
+ }
+ return 0;
+ }).animate=false;
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('kuanshi');
+ target.storage.kuanshi2=player;
+ target.addSkill('kuanshi2');
+ }
+ }
+ },
+ kuanshi2:{
+ /*mark:'character',
+ intro:{
+ content:'下一次受到超过1点的伤害时,防止此伤害,然后$跳过下个回合的摸牌阶段'
+ },*/
+ trigger:{player:'damageBegin4'},
+ forced:true,
+ filter:function(event,player){
+ return event.num>1;
+ },
+ //priority:-11,
+ content:function(){
+ trigger.cancel();
+ player.storage.kuanshi2.skip('phaseDraw');
+ player.removeSkill('kuanshi2');
+ },
+ group:'kuanshi2_remove',
+ onremove:true,
+ subSkill:{
+ remove:{
+ trigger:{global:['phaseZhunbeiBegin','dieAfter']},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event.player==player.storage.kuanshi2;
+ },
+ content:function(){
+ player.removeSkill('kuanshi2');
+ }
+ }
+ }
+ },
+ xiashu:{
+ audio:2,
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ filter:function(event,player){
+ return player.countCards('h')>0;
+ },
+ content:function(){
+ 'step 0'
+ var maxval=0;
+ var hs=player.getCards('h');
+ for(var i=0;i0) return 0.1;
+ if(maxval>=8) return 0;
+ if(att==0) return 0.2;
+ if(dh>=3) return dh;
+ if(dh==2){
+ if(maxval<=7) return dh;
+ }
+ if(maxval<=6) return dh;
+ return 0;
+
+ }).set('maxval',maxval);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('xiashu',result.targets);
+ event.target=result.targets[0];
+ var hs=player.getCards('h');
+ player.give(hs,event.target);
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ var hs=event.target.getCards('h');
+ if(!hs.length){
+ event.finish();
+ return;
+ }
+ hs.sort(function(a,b){
+ return get.value(b,player,'raw')-get.value(a,player,'raw');
+ });
+ event.target.chooseCard([1,hs.length],'展示至少一张手牌',true).set('ai',function(card){
+ var rand=_status.event.rand;
+ var list=_status.event.list;
+ if(_status.event.att){
+ if(ui.selected.cards.length>=Math.ceil(list.length/2)) return 0;
+ var value=get.value(card);
+ if(_status.event.getParent().player.isHealthy()){
+ value+=(get.tag(card,'damage')?1.5:0)+(get.tag(card,'draw')?2:0);
+ }
+ return value;
+ }
+ if(ui.selected.cards.length>=Math.floor(list.length/2)) return 0;
+ return (list.indexOf(card)%2==rand)?1:0;
+ }).set('rand',(Math.random()<0.6)?1:0).set('list',hs).set('att',get.attitude(event.target,player)>0);
+ 'step 3'
+ event.target.showCards(result.cards);
+ event.cards1=result.cards;
+ event.cards2=event.target.getCards('h',function(card){
+ return !event.cards1.contains(card);
+ });
+ 'step 4'
+ var choice;
+ var num1=event.cards1.length;
+ var num2=event.cards2.length;
+ if(get.attitude(event.target,player)>0&&num1>=num2){
+ choice=0;
+ }
+ else if(num1==num2){
+ choice=(Math.random()<0.45)?0:1;
+ }
+ else if(num1>num2){
+ if(num1-num2==1){
+ choice=(Math.random()<0.6)?0:1;
+ }
+ else{
+ choice=0;
+ }
+ }
+ else{
+ if(num2-num1==1){
+ choice=(Math.random()<0.6)?1:0;
+ }
+ else{
+ choice=1;
+ }
+ }
+ player.chooseControl(function(event,player){
+ return _status.event.choice;
+ }).set('choiceList',['获得'+get.translation(event.target)+'展示的牌',
+ '获得'+get.translation(event.target)+'未展示的牌']).set('choice',choice);
+ 'step 5'
+ if(result.index==0){
+ player.gain(event.cards1,target,'give','bySelf');
+ }
+ else{
+ player.gain(event.cards2,target,'giveAuto','bySelf');
+ }
+ },
+ ai:{
+ expose:0.1
+ }
+ },
+ sheyan:{
+ audio:2,
+ trigger:{target:'useCardToTarget'},
+ filter:function(event,player){
+ if(!event.targets||!event.targets.contains(player)) return false;
+ var info=get.info(event.card);
+ if(info.type!='trick') return false;
+ if(info.multitarget) return false;
+ if(event.targets.length>1) return true;
+ return game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,event.player,current);
+ });
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var bool1=(trigger.targets.length>1);
+ var bool2=game.hasPlayer(function(current){
+ return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,trigger.player,current);
+ });
+ if(bool1&&bool2){
+ player.chooseControlList(get.prompt('sheyan'),['为'+get.translation(trigger.card)+'增加一个目标','为'+get.translation(trigger.card)+'减少一个目标'],function(event,player){
+ if(_status.event.add) return 0;
+ return 1;
+ }).set('add',get.effect(player,trigger.card,trigger.player,player)>=0);
+ }
+ else if(bool2){
+ event.type='add';
+ event.goto(2);
+ event.unchosen=true;
+ }
+ else{
+ event.type='remove';
+ event.goto(2);
+ event.unchosen=true;
+ }
+ 'step 1'
+ if(result.control=='cancel2'){
+ event.finish();
+ }
+ else if(result.index==1){
+ event.type='remove';
+ }
+ else{
+ event.type='add';
+ }
+ 'step 2'
+ if(event.type=='add'){
+ player.chooseTarget(event.unchosen?get.prompt('sheyan'):null,'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){
+ var trigger=_status.event.getTrigger();
+ return !trigger.targets.contains(target)&&lib.filter.targetEnabled2(trigger.card,trigger.player,target);
+ }).set('ai',function(target){
+ var trigger=_status.event.getTrigger();
+ return get.effect(target,trigger.card,trigger.player,_status.event.player);
+ });
+ }
+ else{
+ player.chooseTarget(event.unchosen?get.prompt('sheyan'):null,'为'+get.translation(trigger.card)+'减少一个目标',function(card,player,target){
+ return _status.event.targets.contains(target);
+ }).set('ai',function(target){
+ var trigger=_status.event.getTrigger();
+ return -get.effect(target,trigger.card,trigger.player,_status.event.player);
+ }).set('targets',trigger.targets);
+ }
+ 'step 3'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.target=result.targets[0];
+ }
+ else{
+ event.finish();
+ }
+ 'step 4'
+ player.logSkill('sheyan',event.target);
+ if(event.type=='add'){
+ trigger.targets.push(event.target);
+ }
+ else{
+ trigger.getParent().excluded.add(event.target);
+ }
+ },
+ ai:{
+ expose:0.2
+ }
+ },
+ bingzheng:{
+ audio:2,
+ trigger:{player:'phaseUseEnd'},
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('bingzheng'),function(card,player,target){
+ return target.countCards('h')!=target.hp;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target);
+ var nh=target.countCards('h');
+ if(att>0){
+ if(nh==target.hp-1){
+ if(player==target) return att+1;
+ return att+2;
+ }
+ if(player==target&&player.needsToDiscard()) return att/3;
+ return att;
+ }
+ else{
+ if(nh==target.hp+1) return -att;
+ if(nh==0) return 0;
+ return -att/2;
+ }
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('bingzheng',result.targets);
+ event.target=result.targets[0];
+ if(event.target.countCards('h')){
+ player.chooseControl(function(event,player){
+ var target=event.target;
+ if(get.attitude(player,target)<0) return 1;
+ return 0;
+ }).set('choiceList',['令'+get.translation(event.target)+'摸一张牌',
+ '令'+get.translation(event.target)+'弃置一张手牌']);
+ }
+ else{
+ event.directfalse=true;
+ }
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(event.directfalse||result.index==0){
+ event.target.draw();
+ }
+ else{
+ event.target.chooseToDiscard('h',true);
+ }
+ 'step 3'
+ if(event.target.countCards('h')==event.target.hp){
+ player.draw();
+ if(event.target==player){
+ event.finish();
+ return;
+ }
+ var next=player.chooseCard('是否交给'+get.translation(event.target)+'一张牌?','he');
+ next.set('ai',function(card){
+ if(get.position(card)!='h') return 0;
+ if(_status.event.shan&&card.name=='shan'){
+ return 11;
+ }
+ if(_status.event.goon){
+ return 10-get.value(card);
+ }
+ return -get.value(card,_status.event.player,'raw');
+ });
+ if(get.attitude(player,event.target)>1&&
+ player.countCards('h','shan')>1&&player.countCards('h')>event.target.countCards('h')){
+ next.set('shan',true);
+ }
+ if(get.attitude(player,event.target)>0&&player.needsToDiscard()){
+ next.set('goon',true);
+ }
+ }
+ else{
+ event.finish();
+ }
+ 'step 4'
+ if(result.bool){
+ player.give(result.cards,target);
+ }
+ },
+ ai:{
+ expose:0.2,
+ threaten:1.4
+ }
+ },
+ fuman:{
+ audio:2,
+ enable:'phaseUse',
+ filterTarget:function(card,player,target){
+ if(target==player) return false;
+ var stat=player.getStat('skill').fuman_targets;
+ return !stat||!stat.contains(target);
+ },
+ filter:function(event,player){
+ return player.countCards('h')>0&&game.hasPlayer((current)=>lib.skill.fuman.filterTarget(null,player,current));
+ },
+ discard:false,
+ lose:false,
+ delay:false,
+ filterCard:true,
+ content:function(){
+ player.give(cards,target).gaintag.add('fuman');
+ target.addSkill('fuman2');
+ player.addSkill('fuman_draw');
+ var stat=player.getStat('skill');
+ if(!stat.fuman_targets) stat.fuman_targets=[];
+ stat.fuman_targets.push(target);
+ },
+ check:function(card){
+ return 6-get.value(card);
+ },
+ ai:{
+ order:2,
+ result:{
+ target:function(player,target){
+ if(!target.hasSha()) return 1.2;
+ return 1;
+ }
+ }
+ },
+ subSkill:{
+ draw:{
+ trigger:{global:'useCardAfter'},
+ forced:true,
+ charlotte:true,
+ filter:function(event,player){
+ return event.player.hasHistory('lose',function(evt){
+ if(evt.getParent()!=event) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('fuman')) return true;
+ }
+ return false;
+ });
+ },
+ logTarget:'player',
+ content:function(){
+ player.draw(trigger.player.hasHistory('sourceDamage',function(evt){
+ return evt.card==trigger.card;
+ })?2:1);
+ },
+ },
+ },
+ },
+ fuman2:{
+ mod:{
+ aiOrder:function(player,card,num){
+ if(get.itemtype(card)=='card'&&card.hasGaintag('fuman')) return num+1;
+ },
+ cardname:function(card,player){
+ if(get.itemtype(card)=='card'&&card.hasGaintag('fuman')) return 'sha';
+ },
+ },
+ },
+ qizhou:{
+ trigger:{player:['phaseBefore','equipEnd','loseEnd']},
+ forced:true,
+ popup:false,
+ derivation:['mashu','reyingzi','reduanbing','fenwei'],
+ filter:function(event,player){
+ if(player.equiping) return false;
+ var suits=[];
+ var es=player.getCards('e');
+ for(var i=0;i0;
+ }
+ },
+ content:function(){
+ var suits=[];
+ var es=player.getCards('e');
+ for(var i=0;i0;
+ }
+ if(player.hasSha()&&geteff(target)){
+ var num=game.countPlayer(function(current){
+ return current!=player&&get.distance(player,current)<=1&&geteff(current);
+ });
+ if(num==0){
+ if(game.hasPlayer(function(current){
+ return player.canUse('sha',current)&&geteff(current)&¤t!=target;
+ })){
+ return 1;
+ }
+ }
+ else if(num==1){
+ return 1;
+ }
+ }
+ return 0;
+ }
+ }
+ }
+ },
+ fenxun2:{
+ mark:'character',
+ onremove:true,
+ intro:{
+ content:'到$的距离视为1'
+ },
+ mod:{
+ globalFrom:function(from,to){
+ if(from.getStorage('fenxun2').contains(to)){
+ return -Infinity;
+ }
+ }
+ }
+ },
+ duanbing:{
+ audio:2,
+ audioname:['heqi'],
+ trigger:{player:'useCard2'},
+ filter:function(event,player){
+ if(event.card.name!='sha') return false;
+ return game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&get.distance(player,current)<=1&&player.canUse(event.card,current);
+ });
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('duanbing'),'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){
+ return !_status.event.sourcex.contains(target)&&get.distance(player,target)<=1&&player.canUse(_status.event.card,target);
+ }).set('sourcex',trigger.targets).set('ai',function(target){
+ var player=_status.event.player;
+ return get.effect(target,_status.event.card,player,player);
+ }).set('card',trigger.card);
+ 'step 1'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.target=result.targets[0];
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ player.logSkill('duanbing',event.target);
+ trigger.targets.push(event.target);
},
ai:{
effect:{
- target:function (card,player,target,current){
- if(card.name=='sha'&&(get.color(card)=='red')&&get.attitude(player,target)<=0){
- return [1,0.8,1,0];
+ player:function(card,player,target,current,isLink){
+ if(!isLink&&card.name=='sha'){
+ if(player._duanbingtmp) return;
+ player._duanbingtmp=true;
+ if(get.effect(target,card,player,player)<=0){
+ delete player._duanbingtmp;
+ return;
+ }
+ if(game.hasPlayer(function(current){
+ return current!=target&&get.distance(player,current)<=1&&
+ player.canUse(card,current)&&get.effect(current,card,player,player)>0;
+ })){
+ delete player._duanbingtmp;
+ return [1,1];
+ }
+ delete player._duanbingtmp;
}
- if(card.name=='sha'&&(get.color(card)=='black')){
- return [1,0.4];
+ }
+ }
+ }
+ },
+ fuhan:{
+ audio:2,
+ trigger:{player:'phaseBegin'},
+ unique:true,
+ limited:true,
+ skillAnimation:true,
+ animationColor:'orange',
+ forceunique:true,
+ //filter:function(event,player){
+ // return player.storage.fanghun2>0;
+ //},
+ prompt:function(event,player){
+ var num=Math.max(2,player.storage.fanghun2||0);
+ num=Math.min(num,8);
+ return get.prompt('fuhan')+'(体力上限:'+num+')';
+ },
+ check:function(event,player){
+ var num=Math.max(2,player.storage.fanghun2||0);
+ if(num==1) return false;
+ if(player.hp<=1) return true;
+ if(num==2) return false;
+ if(num==3) return player.hp<3&&player.isMinHp();
+ return true;
+ },
+ content:function(){
+ 'step 0'
+ if(player.storage.fanghun) player.draw(player.storage.fanghun);
+ player.removeMark('fanghun',player.storage.fanghun);
+ event.num=Math.max(2,player.storage.fanghun2||0);
+ var list;
+ if(_status.characterlist){
+ list=[];
+ for(var i=0;i<_status.characterlist.length;i++){
+ var name=_status.characterlist[i];
+ if(lib.character[name][1]=='shu') list.push(name);
+ }
+ }
+ else if(_status.connectMode){
+ list=get.charactersOL(function(i){
+ return lib.character[i][1]!='shu';
+ });
+ }
+ else{
+ list=get.gainableCharacters(function(info){
+ return info[1]=='shu';
+ });
+ }
+ var players=game.players.concat(game.dead);
+ for(var i=0;i0) player.gainMaxHp(num);
+ else player.loseMaxHp(-num);
+ player.recover();
+ }
+ },
+ refuhan:{
+ audio:'fuhan',
+ trigger:{player:'phaseZhunbeiBegin'},
+ unique:true,
+ limited:true,
+ skillAnimation:true,
+ animationColor:'orange',
+ forceunique:true,
+ filter:function(event,player){
+ return player.countMark('fanghun')>0;
+ },
+ content:function(){
+ 'step 0'
+ if(player.storage.fanghun) player.draw(player.storage.fanghun);
+ player.removeMark('fanghun',player.storage.fanghun);
+ player.awakenSkill('refuhan');
+ 'step 1'
+ var list;
+ if(_status.characterlist){
+ list=[];
+ for(var i=0;i<_status.characterlist.length;i++){
+ var name=_status.characterlist[i];
+ if(lib.character[name][1]=='shu') list.push(name);
+ }
+ }
+ else if(_status.connectMode){
+ list=get.charactersOL(function(i){
+ return lib.character[i][1]!='shu';
+ });
+ }
+ else{
+ list=get.gainableCharacters(function(info){
+ return info[1]=='shu';
+ });
+ }
+ var players=game.players.concat(game.dead);
+ for(var i=0;i';
+ td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){
+ if(_status.dragged) return;
+ if(_status.justdragged) return;
+ _status.tempNoButton=true;
+ setTimeout(function(){
+ _status.tempNoButton=false;
+ },500);
+ var link=this.link;
+ if(!this.classList.contains('bluebg')){
+ if(rSkill.length>=2) return;
+ rSkill.add(link);
+ this.classList.add('bluebg');
+ }
+ else{
+ this.classList.remove('bluebg');
+ rSkill.remove(link);
+ }
+ });
+ }
+ dialog.content.appendChild(table);
+ dialog.add(' ');
+ dialog.open();
+
+ event.switchToAuto=function(){
+ event.dialog.close();
+ event.control.close();
+ game.resume();
+ _status.imchoosing=false;
+ };
+ event.control=ui.create.control('ok',function(link){
+ event.dialog.close();
+ event.control.close();
+ game.resume();
+ _status.imchoosing=false;
+ });
+ for(var i=0;i0;
+ if(name=='jiu') return player.countCards('hs','tao')>0;
+ return false;
+ },
+ audio:2,
+ marktext:'影',
+ intro:{
+ content:'mark',
+ name:'梅影',
+ },
+ trigger:{
+ source:'damageSource',
+ player:'damageEnd',
+ },
+ forced:true,
+ locked:false,
+ filter:function(event){
+ return event.card&&event.card.name=='sha';
+ },
+ content:function(){
+ player.addMark('fanghun',trigger.num||1);
+ player.addMark('fanghun2',trigger.num||1,false);
+ },
+ group:['fanghun_sha','fanghun_draw'],
+ subSkill:{
+ draw:{
+ trigger:{player:['useCardAfter','respondAfter']},
+ forced:true,
+ popup:false,
+ filter:function(event){
+ return event.skill=='fanghun_sha'||event.skill=='fanghun_shan';
+ },
+ content:function(){
+ player.draw();
+ }
+ },
+ sha:{
+ audio:'fanghun',
+ enable:['chooseToUse','chooseToRespond'],
+ prompt:'弃置一枚【梅影】标记,将杀当做闪,或将闪当做杀,或将桃当做酒,或将酒当做桃使用或打出',
+ viewAs:function(cards,player){
+ var name=false;
+ switch(get.name(cards[0],player)){
+ case 'sha':name='shan';break;
+ case 'shan':name='sha';break;
+ case 'tao':name='jiu';break;
+ case 'jiu':name='tao';break;
+ }
+ if(name) return {name:name};
+ return null;
+ },
+ position:'hs',
+ check:function(card){
+ var player=_status.event.player;
+ if(_status.event.type=='phase'){
+ var max=0;
+ var name2;
+ var list=['sha','tao','jiu'];
+ var map={sha:'shan',tao:'jiu',jiu:'tao'}
+ for(var i=0;i(name=='jiu'?1:0)&&player.getUseValue({name:name})>0){
+ var temp=get.order({name:name});
+ if(temp>max){
+ max=temp;
+ name2=map[name];
+ }
+ }
+ }
+ if(name2==get.name(card,player)) return 1;
+ return 0;
+ }
+ return 1;
+ },
+ filterCard:function(card,player,event){
+ event=event||_status.event;
+ var filter=event._backup.filterCard;
+ var name=get.name(card,player);
+ if(name=='sha'&&filter({name:'shan',cards:[card]},player,event)) return true;
+ if(name=='shan'&&filter({name:'sha',cards:[card]},player,event)) return true;
+ if(name=='tao'&&filter({name:'jiu',cards:[card]},player,event)) return true;
+ if(name=='jiu'&&filter({name:'tao',cards:[card]},player,event)) return true;
+ return false;
+ },
+ filter:function(event,player){
+ if(!player.storage.fanghun||player.storage.fanghun<=0) return false;
+ var filter=event.filterCard;
+ if(filter({name:'sha'},player,event)&&player.countCards('hs','shan')) return true;
+ if(filter({name:'shan'},player,event)&&player.countCards('hs','sha')) return true;
+ if(filter({name:'tao'},player,event)&&player.countCards('hs','jiu')) return true;
+ if(filter({name:'jiu'},player, event)&&player.countCards('hs','tao')) return true;
+ return false;
+ },
+ onrespond:function(){return this.onuse.apply(this,arguments)},
+ onuse:function(result,player){
+ player.removeMark('fanghun',1);
+ },
+ ai:{
+ respondSha:true,
+ respondShan:true,
+ skillTagFilter:function(player,tag){
+ if(!player.storage.fanghun||player.storage.fanghun<0) return false;
+ var name;
+ switch(tag){
+ case 'respondSha':name='shan';break;
+ case 'respondShan':name='sha';break;
+ }
+ if(!player.countCards('hs',name)) return false;
+ },
+ order:function(item,player){
+ if(player&&_status.event.type=='phase'){
+ var max=0;
+ var list=['sha','tao','jiu'];
+ var map={sha:'shan',tao:'jiu',jiu:'tao'}
+ for(var i=0;i(name=='jiu'?1:0)&&player.getUseValue({name:name})>0){
+ var temp=get.order({name:name});
+ if(temp>max) max=temp;
+ }
+ }
+ if(max>0) max+=((player.storage.refuhan||player.storage.twfuhan)?0.3:-0.3);
+ return max;
+ }
+ if(!player) player=_status.event.player;
+ return (player.storage.refuhan||player.storage.twfuhan)?4:1;
+ },
+ },
+ },
+ }
+ },
+ yjixi:{
+ derivation:'rewangzun',
+ trigger:{player:'phaseJieshuBegin'},
+ forced:true,
+ filter:function(event,player){
+ return player.countMark('yjixi')>=3;
+ },
+ skillAnimation:true,
+ animationColor:'gray',
+ unique:true,
+ juexingji:true,
+ content:function(){
+ 'step 0'
+ player.awakenSkill('yjixi');
+ player.gainMaxHp();
+ player.recover();
+ 'step 1'
+ var str='摸两张牌';
+ var mode=get.mode();
+ var choice='选项一';
+ if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){
+ var list=[];
+ var zhu=get.zhu(player);
+ if(zhu&&zhu!=player&&zhu.skills){
+ for(var i=0;i=6) return 0;
+ return 20-num;
+ }
+ else{
+ if(_status.event.player.needsToDiscard()){
+ return 7-num;
+ }
+ }
+ return 0;
+ },
+ discard:false,
+ lose:false,
+ delay:false,
+ content:function(){
+ 'step 0'
+ player.give(cards,target);
+ if(get.color(cards[0])=='black'){
+ target.chooseToDiscard(2,'he','弃置两张牌,或令'+get.translation(player)+'摸两张牌').set('ai',function(card){
+ if(_status.event.goon) return 7-get.value(card);
+ return 0;
+ }).set('goon',get.attitude(target,player)<0);
+ }
+ else{
+ event.finish();
+ }
+ 'step 1'
+ if(!result.bool){
+ player.draw(2);
+ }
+ },
+ ai:{
+ order:8,
+ expose:0.2,
+ result:{
+ target:function(player,target){
+ if(ui.selected.cards.length&&get.color(ui.selected.cards[0])=='red'){
+ if(target.countCards('h')0;
+ }
+ return false;
+ },
+ content:function(){
+ var cards=trigger.getl(player).cards2;
+ game.countPlayer(function(current){
+ if(current==player) return;
+ var hs=current.getCards('h'),cardsx=trigger.getg(current).filter(function(card){
+ return hs.contains(card)&&cards.contains(card)&&get.color(card,player)=='black';
+ });
+ if(cardsx.length>0){
+ current.addSkill('xiehui2');
+ current.addGaintag(cards,'xiehui');
+ }
+ });
+ }
+ },
+ xiehui2:{
+ mark:true,
+ intro:{
+ content:'不能使用、打出或弃置获得的黑色牌',
+ },
+ mod:{
+ cardDiscardable:function(card,player){
+ if(card.hasGaintag('xiehui')) return false;
+ },
+ cardEnabled2:function(card,player){
+ if(get.itemtype(card)=='card'&&card.hasGaintag('xiehui')) return false;
+ },
+ },
+ trigger:{player:'changeHp'},
+ forced:true,
+ popup:false,
+ charlotte:true,
+ filter:function(event){
+ return event.num<0;
+ },
+ content:function(){
+ player.removeSkill('xiehui2');
+ },
+ onremove:function(player){
+ player.removeGaintag('xiehui');
+ },
+ },
+ shanjia:{
+ sync:function(player){
+ if(game.online) return;
+ var history=player.actionHistory;
+ var num=0;
+ for(var i=0;i0) player.markSkill('shanjia');
+ },
+ audio:2,
+ intro:{
+ content:function(storage){
+ if(storage==0) return '未使用过装备牌';
+ return '已使用过'+storage+'张装备牌';
+ }
+ },
+ group:'shanjia2',
+ trigger:{player:'phaseUseBegin'},
+ frequent:true,
+ filter:function(event,player){
+ lib.skill.shanjia.sync(player);
+ return player.storage.shanjia>0;
+ },
+ content:function(){
+ 'step 0'
+ lib.skill.shanjia.sync(player);
+ player.draw(Math.min(7,player.storage.shanjia));
+ 'step 1'
+ player.chooseToDiscard('he',Math.min(7,player.storage.shanjia),true);
+ 'step 2'
+ var useCard=false;
+ if(result.bool&&result.cards){
+ for(var i=0;i0)
+ })){
+ return 6-get.value(card);
+ }
+ }
+ return 0;
+ },
+ content:function(){
+ player.loseHp();
+ switch(get.type(cards[0],'trick')){
+ case 'basic':player.addTempSkill('zhanyi_basic');break;
+ case 'equip':player.addTempSkill('zhanyi_equip');break;
+ case 'trick':player.addTempSkill('zhanyi_trick');player.draw(2);break;
+ }
+ },
+ ai:{
+ order:9.1,
+ result:{
+ player:1
+ }
+ }
+ },
+ zhanyi_basic:{
+ group:['zhanyi_basic_sha','zhanyi_basic_jiu','zhanyi_basic_tao']
+ },
+ zhanyi_basic_tao:{
+ enable:'chooseToUse',
+ filterCard:{type:'basic'},
+ viewAs:{name:'tao'},
+ viewAsFilter:function(player){
+ if(!player.countCards('h',{type:'basic'})) return false;
+ },
+ prompt:'将一张基本牌当桃使用',
+ check:function(card){
+ return 8-get.value(card);
+ },
+ ai:{
+ skillTagFilter:function(player){
+ if(!player.countCards('h',{type:'basic'})) return false;
+ },
+ save:true,
+ }
+ },
+ zhanyi_basic_sha:{
+ enable:'chooseToUse',
+ filterCard:{type:'basic'},
+ viewAs:{name:'sha'},
+ viewAsFilter:function(player){
+ if(!player.countCards('h',{type:'basic'})) return false;
+ },
+ prompt:'将一张基本牌当杀使用',
+ check:function(card){return 4-get.value(card)},
+ ai:{
+ skillTagFilter:function(player){
+ if(!player.countCards('h',{type:'basic'})) return false;
+ },
+ respondSha:true,
+ }
+ },
+ zhanyi_basic_jiu:{
+ enable:'chooseToUse',
+ filterCard:{type:'basic'},
+ viewAs:{name:'jiu'},
+ viewAsFilter:function(player){
+ if(!player.countCards('h',{type:'basic'})) return false;
+ },
+ prompt:'将一张基本牌当酒使用',
+ check:function(card){
+ if(_status.event.type=='dying') return 1;
+ return 4-get.value(card);
+ },
+ ai:{
+ skillTagFilter:function(player){
+ return player.countCards('h',{type:'basic'})>0&&player.hp<=0;
+ },
+ save:true,
+ }
+ },
+ zhanyi_equip:{
+ trigger:{player:'shaBegin'},
+ forced:true,
+ filter:function(event,player){
+ return event.target.countCards('he')>0;
+ },
+ check:function(event,player){
+ return get.attitude(player,event.target)<0;
+ },
+ content:function(){
+ trigger.target.chooseToDiscard('he',true,2);
+ }
+ },
+ zhanyi_trick:{
+ mod:{
+ targetInRange:function(){
+ return true;
+ }
+ }
+ },
+ dingpan:{
+ enable:'phaseUse',
+ filter:function(event,player){
+ var num;
+ var mode=get.mode();
+ if(mode=='identity'){
+ if(_status.mode=='purple') num=player.getEnemies().length;
+ else num=get.population('fan');
+ }
+ else if(mode=='versus'){
+ num=player.getEnemies().length;
+ }
+ else{
+ num=1;
+ }
+ if((player.getStat().skill.dingpan||0)>=num) return false;
+ return true;
+ },
+ filterTarget:function(card,player,target){
+ return target.countCards('e')>0;
+ },
+ content:function(){
+ 'step 0'
+ target.draw();
+ 'step 1'
+ var goon=get.damageEffect(target,player,target)>=0;
+ if(!goon&&target.hp>=4&&get.attitude(player,target)<0){
+ var es=target.getCards('e');
+ for(var i=0;i=8){
+ goon=true;break;
+ }
+ }
+ }
+ target.chooseControl(function(){
+ if(_status.event.goon) return '选项二';
+ return '选项一';
+ }).set('goon',goon).set('prompt','定叛').set('choiceList',['令'+get.translation(player)+'弃置你装备区里的一张牌','获得你装备区内的所有牌并受到一点伤害']);
+ 'step 2'
+ if(result.control=='选项一'){
+ player.discardPlayerCard(target,true,'e');
+ event.finish();
+ }
+ else{
+ target.gain(target.getCards('e'),'gain2');
+ }
+ 'step 3'
+ game.delay(0.5);
+ target.damage();
+ },
+ ai:{
+ order:7,
+ result:{
+ target:function(player,target){
+ if(get.damageEffect(target,player,target)>=0) return 2;
+ var att=get.attitude(player,target);
+ if(att==0) return 0;
+ var es=target.getCards('e');
+ if(att>0&&(target.countCards('h')>2||target.needsToDiscard(1))) return 0;
+ if(es.length==1&&att>0) return 0;
+ for(var i=0;i0){
+ return 1;
+ }
+ }
+ else if(val>=7){
+ if(att<0){
+ return -1;
+ }
+ }
+ }
+ return 0;
+ }
+ }
+ }
+ },
+ hongde:{
+ audio:2,
+ trigger:{
+ player:['loseAfter','gainAfter'],
+ global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ direct:true,
+ filter:function(event,player){
+ var num=event.getl(player).cards2.length;
+ if(event.getg) num=Math.max(num,event.getg(player).length)
+ return num>1;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('hongde'),'令一名其他角色摸一张牌',function(card,player,target){
+ return target!=player;
+ }).set('ai',function(target){
+ return get.attitude(player,target);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('hongde',result.targets);
+ result.targets[0].draw();
+ }
+ }
+ },
+ ziyuan:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filterCard:function(card){
+ var num=0;
+ for(var i=0;i0);
+ })){
+ return 10;
+ }
+ return 1;
+ },
+ result:{
+ player:function(player,target){
+ if(get.attitude(player,target)<0) return -1;
+ var eff=get.recoverEffect(target,player,player);
+ if(eff<0) return 0;
+ if(eff>0){
+ if(target.hp==1) return 3;
+ return 2;
+ }
+ if(player.needsToDiscard()) return 1;
+ return 0;
+ }
+ },
+ threaten:1.3
+ }
+ },
+ jugu:{
+ audio:2,
+ mod:{
+ maxHandcard:function(player,num){
+ return num+player.maxHp;
+ }
+ },
+ trigger:{global:'phaseBefore',player:'enterGame'},
+ forced:true,
+ filter:function(event,player){
+ return (event.name!='phase'||game.phaseNumber==0);
+ },
+ content:function(){
+ player.draw(player.maxHp);
+ }
+ },
+ tuifeng:{
+ audio:2,
+ trigger:{player:'damageEnd'},
+ direct:true,
+ notemp:true,
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseCard(get.prompt2('tuifeng'),'he',[1,trigger.num]).set('ai',function(card){
+ if(card.name=='du') return 20;
+ return 7-get.useful(card);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('tuifeng');
+ player.addToExpansion(result.cards,player,'give').gaintag.add('tuifeng');
+ }
+ },
+ onremove:function(player,skill){
+ var cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ },
+ marktext:'锋',
+ intro:{
+ content:'expansion',
+ markcount:'expansion',
+ },
+ group:'tuifeng2',
+ ai:{
+ threaten:0.8,
+ maixie:true,
+ maixie_hp:true
+ }
+ },
+ tuifeng2:{
+ audio:'tuifeng',
+ trigger:{player:'phaseZhunbeiBegin'},
+ forced:true,
+ filter:function(event,player){
+ return player.getExpansions('tuifeng').length>0;
+ },
+ content:function(){
+ var cards=player.getExpansions('tuifeng');
+ player.draw(2*cards.length);
+ player.addTempSkill('tuifeng3');
+ player.addMark('tuifeng3',cards.length,false);
+ player.loseToDiscardpile(cards);
+ }
+ },
+ tuifeng3:{
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+player.countMark('tuifeng3');
+ }
+ },
+ onremove:true,
+ charlotte:true,
+ },
+ weidi:{
+ trigger:{global:['gameStart','zhuUpdate']},
+ forced:true,
+ audio:2,
+ filter:function(event,player){
+ var mode=get.mode();
+ return (mode=='identity'||(mode=='versus'&&_status.mode=='four'));
+ },
+ content:function(){
+ var list=[];
+ var zhu=get.zhu(player);
+ if(zhu&&zhu!=player&&zhu.skills){
+ for(var i=0;i0;
+ },
+ init:function(player){
+ player.storage.jianshu=false;
+ },
+ filterTarget:function(card,player,target){
+ if(target==player) return false;
+ if(ui.selected.targets.length){
+ return ui.selected.targets[0]!=target&&!ui.selected.targets[0].hasSkillTag('noCompareSource')&&target.countCards('h')
+ &&!target.hasSkillTag('noCompareTarget');
+ }
+ return true;
+ },
+ filterCard:{color:'black'},
+ mark:true,
+ discard:false,
+ lose:false,
+ delay:false,
+ check:function(card){
+ if(_status.event.player.hp==1) return 8-get.value(card);
+ return 6-get.value(card);
+ },
+ selectTarget:2,
+ multitarget:true,
+ content:function(){
+ 'step 0'
+ player.awakenSkill('jianshu');
+ player.storage.jianshu=true;
+ player.give(cards,targets[0],'give');
+ 'step 1'
+ targets[0].chooseToCompare(targets[1]);
+ 'step 2'
+ if(result.bool){
+ targets[0].chooseToDiscard('he',2,true);
+ targets[1].loseHp();
+ }
+ else if(result.tie){
+ targets[0].loseHp()
+ targets[1].loseHp()
+ }
+ else{
+ targets[1].chooseToDiscard('he',2,true);
+ targets[0].loseHp();
+ }
+ },
+ intro:{
+ content:'limited'
+ },
+ ai:{
+ expose:0.4,
+ order:4,
+ result:{
+ target:function(player,target){
+ if(player.hasUnknown()) return 0;
+ if(ui.selected.targets.length) return -1;
+ return -0.5;
+ }
+ }
+ }
+ },
+ yongdi:{
+ audio:2,
+ audioname:['xinping'],
+ unique:true,
+ limited:true,
+ trigger:{player:'phaseZhunbeiBegin'},
+ animationColor:'thunder',
+ skillAnimation:'legend',
+ filter:function(event,player){
+ return !player.storage.yongdi;
+ },
+ init:function(player){
+ player.storage.yongdi=false;
+ },
+ mark:true,
+ intro:{
+ content:'limited'
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('yongdi'),function(card,player,target){
+ return (target.hasSex('male')||target.name=='key_yuri')&&target!=player;
+ }).set('ai',function(target){
+ if(!_status.event.goon) return 0;
+ var player=_status.event.player;
+ var att=get.attitude(player,target);
+ if(att<=1) return 0;
+ var mode=get.mode();
+ if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){
+ if(target.name&&lib.character[target.name]){
+ for(var i=0;i0;
+ },
+ multitarget:true,
+ multiline:true,
+ content:function(){
+ player.addTempSkill('regushe2');
+ player.chooseToCompare(targets).callback=lib.skill.regushe.callback;
+ },
+ intro:{
+ name:'饶舌',
+ content:'mark'
+ },
+ callback:function(){
+ 'step 0'
+ if(event.num1<=event.num2){
+ target.chat(lib.skill.gushe.chat[player.countMark('regushe')]);
+ game.delay();
+ player.addMark('regushe',1);
+ if(player.countMark('regushe')>=7){
+ player.die();
+ }
+ }
+ else player.addMark('regushe2',1,false);
+ 'step 1'
+ if(event.num1<=event.num2){
+ player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;});
+ }
+ else event.goto(3);
+ 'step 2'
+ if(!result.bool){
+ player.draw();
+ }
+ 'step 3'
+ if(event.num1>=event.num2){
+ target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){
+ if(_status.event.goon) return 6-get.value(card);
+ return 0;
+ }).set('goon',get.attitude(target,player)<0);
+ }
+ else event.finish();
+ 'step 4'
+ if(!result.bool) player.draw();
+ },
+ ai:{
+ order:7,
+ result:{
+ target:function(player,target){
+ var num=ui.selected.targets.length+1;
+ if(num+player.countMark('regushe')<=6) return -1;
+ var hs=player.getCards('h');
+ for(var i=0;i5&&player.countMark('regushe')+num<=6) return -1;
+ }
+ }
+ }
+ return 0;
+ },
+ }
+ },
+ marktext:'饶',
+ },
+ regushe2:{
+ charlotte:true,
+ onremove:true,
+ },
+ rejici:{
+ audio:'jici',
+ trigger:{
+ player:'compare',
+ target:'compare',
+ },
+ forced:true,
+ filter:function(event,player){
+ // if(player!=event.target&&event.iwhile) return false;
+ return (player==event.player?event.num1:event.num2)<=player.countMark('regushe');
+ },
+ content:function(){
+ if(player==trigger.target||!trigger.iwhile){
+ trigger[player==trigger.player?'num1':'num2']+=player.countMark('regushe');
+ game.log(player,'的拼点牌点数+'+player.countMark('regushe'));
+ }
+ game.delayx();
+ // var cards=[trigger.card1];
+ // if(trigger.cardlist) cards.addArray(trigger.cardlist);
+ // else cards.push(trigger.card2);
+ // cards.sort(function(a,b){
+ // return get.number(b)-get.number(a);
+ // });
+ // var num=get.number(cards[0]);
+ // for(var i=1;itrigger.num2) cards.push(trigger.card1);
+ if(trigger.num10) trigger.source.chooseToDiscard(num,true,'he');
+ trigger.source.loseHp();
+ },
+ },
+ gushe:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filterTarget:function(card,player,target){
+ return player.canCompare(target);
+ },
+ selectTarget:[1,3],
+ filter:function(event,player){
+ return player.countCards('h')>0;
+ },
+ multitarget:true,
+ multiline:true,
+ content:function(){
+ player.chooseToCompare(targets).callback=lib.skill.gushe.callback;
+ },
+ intro:{
+ name:'饶舌',
+ content:'mark'
+ },
+ chat:['粗鄙之语','天地不容','谄谀之臣','皓首匹夫,苍髯老贼','二臣贼子','断脊之犬','我从未见过有如此厚颜无耻之人!'],
+ callback:function(){
+ 'step 0'
+ if(event.num1<=event.num2){
+ target.chat(lib.skill.gushe.chat[player.countMark('gushe')]);
+ game.delay();
+ player.addMark('gushe',1);
+ if(player.countMark('gushe')>=7){
+ player.die();
+ }
+ }
+ 'step 1'
+ if(event.num1<=event.num2){
+ player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;});
+ }
+ else event.goto(3);
+ 'step 2'
+ if(!result.bool){
+ player.draw();
+ }
+ 'step 3'
+ if(event.num1>=event.num2){
+ target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){
+ if(_status.event.goon) return 6-get.value(card);
+ return 0;
+ }).set('goon',get.attitude(target,player)<0);
+ }
+ else event.finish();
+ 'step 4'
+ if(!result.bool) player.draw();
+ },
+ ai:{
+ order:7,
+ result:{
+ target:function(player,target){
+ var num=ui.selected.targets.length+1;
+ if(num>3) num=3;
+ var hs=player.getCards('h');
+ for(var i=0;i5&&player.countMark('gushe')+num<=6) return -1;
+ }
+ }
+ }
+ return 0;
+ },
+ }
+ }
+ },
+ jici:{
+ audio:2,
+ trigger:{player:'compare'},
+ filter:function(event,player){
+ return event.getParent().name=='gushe'&&!event.iwhile&&event.num1<=player.countMark('gushe');
+ },
+ content:function(){
+ if(trigger.num10;
+ },
+ filterTarget:function(card,player,target){
+ return target!=player&&target.countCards('he')>0&&player.inRange(target);
+ },
+ filterCard:{name:'sha'},
+ content:function(){
+ 'step 0'
+ target.chooseToDiscard('he',true);
+ 'step 1'
+ if(target.hp>=player.hp&&result.bool&&result.cards[0].name!='sha'){
+ player.useCard({name:'juedou',isCard:true},target);
+ }
+ },
+ ai:{
+ order:2,
+ result:{
+ target:function(player,target){
+ if(get.effect(target,{name:'juedou'},player,player)<=0){
+ return 0;
+ }
+ if(target.hpplayer.hp) return -0.1;
+ return 0;
+ }
+ var hs1=target.getCards('h','sha');
+ var hs2=player.getCards('h','sha');
+ if(hs1.length>hs2.length){
+ return 0;
+ }
+ var hsx=target.getCards('h');
+ if(hsx.length>2&&hs2.length<=1&&hsx[0].number<6){
+ return 0;
+ }
+ if(hsx.length>3&&hs2.length<=1){
+ return 0;
+ }
+ if(hs1.length>hs2.length-1&&hs1.length>0&&(hs2.length<=1||hs1[0].number>hs2[0].number)){
+ return 0;
+ }
+ return -1;
+ }
+ }
+ }
+ },
+ shefu:{
+ trigger:{player:'phaseJieshuBegin'},
+ direct:true,
+ audio:2,
+ init:function(player){
+ if(!player.storage.shefu) player.storage.shefu=[];
+ if(!player.storage.shefu2) player.storage.shefu2=[];
+ },
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ onremove:function(player,skill){
+ var cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ },
+ intro:{
+ content:'cards',
+ onunmark:function(storage,player){
+ player.storage.shefu=[];
+ player.storage.shefu2=[];
+ },
+ mark:function(dialog,content,player){
+ if(content&&content.length){
+ dialog.addAuto(content);
+ if(player.isUnderControl(true)){
+ var str='';
+ for(var i=0;i'+str+'')
+ }
+ }
+ },
+ },
+ content:function(){
+ 'step 0'
+ var list1=[],list2=[],list3=[];
+ for(var i=0;inh2&&event.source.isIn()) return true;
+ if(nh1num2&&trigger.source.isIn()) bool2=true;
+ if(bool1&&bool2){
+ event.chosen=true;
+ player.chooseControl('cancel2').set('prompt',get.prompt('benyu',trigger.source)).set('choiceList',[
+ '将手牌摸至'+get.cnNumber(Math.min(num2,5))+'张',
+ '弃置至少'+get.cnNumber(num2+1)+'张牌并对其造成1点伤害',
+ ])
+ }
+ else if(bool2) event.goto(3);
+ "step 1"
+ if(event.chosen){
+ if(result.control=='cancel2') event.finish();
+ else if(result.index==1) event.goto(3);
+ else event._result={bool:true};
+ }
+ else player.chooseBool(get.prompt('benyu',trigger.source),'将手牌摸至'+get.cnNumber(Math.min(trigger.source.countCards('h'),5))+'张');
+ "step 2"
+ if(result.bool){
+ player.logSkill('benyu',trigger.source);
+ player.drawTo(Math.min(trigger.source.countCards('h'),5));
+ }
+ event.finish();
+ "step 3"
+ var num=trigger.source.countCards('h')+1;
+ var args=[[num,player.countCards('he')],'he'];
+ if(event.chosen){
+ player.logSkill('benyu',trigger.source);
+ args.push(true);
+ }
+ else{
+ args.push(get.prompt('benyu',trigger.source));
+ args.push('弃置'+get.cnNumber(num)+'张牌并对其造成1点伤害');
+ }
+ var next=player.chooseToDiscard.apply(player,args);
+ if(!event.chosen) next.logSkill=['benyu',trigger.source];
+ next.set('ai',function(card){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ if(ui.selected.cards.length>=_status.event.num){
+ return -1;
+ }
+ if(get.damageEffect(trigger.source,player,player)>0&&(get.value(card,player)<0||_status.event.num<=2)){
+ return 8-get.value(card);
+ }
+ return -1;
+ });
+ next.set('num',num);
+ "step 4"
+ if(result.bool) trigger.source.damage();
+ },
+ },
+ jili:{
+ audio:2,
+ trigger:{
+ global:'useCardToTarget'
+ },
+ forced:true,
+ check:function(event,player){
+ return get.effect(player,event.card,event.player,player)>0;
+ },
+ filter:function(event,player){
+ if(get.color(event.card)!='red') return false;
+ if(!event.targets) return false;
+ if(event.player==player) return false;
+ if(event.targets.contains(player)) return false;
+ if(get.info(event.card).multitarget) return false;
+ var type=get.type(event.card);
+ if(type!='basic'&&type!='trick') return false;
+ if(lib.filter.targetEnabled2(event.card,event.player,player)){
+ for(var i=0;i0&&event.player!=player&&!player.hasSkill('zhidao2');
+ },
+ forced:true,
+ content:function(){
+ var num=0;
+ if(trigger.player.countCards('h')) num++;
+ if(trigger.player.countCards('e')) num++;
+ if(trigger.player.countCards('j')) num++;
+ if(num){
+ player.gainPlayerCard(trigger.player,num,'hej',true).set('filterButton',function(button){
+ for(var i=0;i0;
+ });
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('qizhi'),'弃置一名角色的一张牌,然后其摸一张牌',function(card,player,target){
+ return !_status.event.targets.contains(target)&&target.countCards('he')>0;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ if(target==player) return 2;
+ if(get.attitude(player,target)<=0){
+ return 1
+ }
+ return 0.5;
+ }).set('targets',trigger.targets);
+ 'step 1'
+ if(result.bool){
+ player.getHistory('custom').push({qizhi:true});
+ player.logSkill('qizhi',result.targets);
+ player.discardPlayerCard(result.targets[0],true,'he');
+ event.target=result.targets[0];
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ event.target.draw();
+ },
+ },
+ jinqu:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ check:function(event,player){
+ return player.getHistory('custom',function(evt){
+ return evt.qizhi==true;
+ }).length>=player.countCards('h');
+ },
+ prompt:function(event,player){
+ var num=player.getHistory('custom',function(evt){
+ return evt.qizhi==true;
+ }).length;
+ return '进趋:是否摸两张牌并将手牌弃置至'+get.cnNumber(num)+'张?';
+ },
+ content:function(){
+ 'step 0'
+ player.draw(2);
+ 'step 1'
+ var dh=player.countCards('h')-player.getHistory('custom',function(evt){
+ return evt.qizhi==true;
+ }).length;
+ if(dh>0){
+ player.chooseToDiscard(dh,true);
+ }
+ },
+ ai:{combo:'qizhi'},
+ },
+ jiaozi:{
+ audio:2,
+ trigger:{player:'damageBegin3',source:'damageBegin1'},
+ forced:true,
+ filter:function(event,player){
+ return player.isMaxHandcard(true);
+ },
+ content:function(){
+ trigger.num++;
+ },
+ ai:{presha:true},
+ },
+ jiqiao:{
+ audio:2,
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ filter:function(event,player){
+ return player.countCards('he',{type:'equip'})>0;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseToDiscard(get.prompt2('jiqiao'),[1,player.countCards('he',{type:'equip'})],'he',function(card){
+ return get.type(card)=='equip';
+ }).set('ai',function(card){
+ if(card.name=='bagua') return 10;
+ return 7-get.value(card);
+ }).logSkill='jiqiao';
+ 'step 1'
+ if(result.bool){
+ event.cards=get.cards(2*result.cards.length);
+ player.showCards(event.cards);
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ var gained=[];
+ var tothrow=[];
+ for(var i=0;islot=='equip2'||slot=='equip5')) return false;
+ },
+ /*cardDiscardable:function (card,player){
+ if(player.getEquip(5)) return;
+ if(get.position(card)=='e') return false;
+ },*/
+ }
+ },
+ linglong_bagua:{
+ audio:'linglong',
+ audioname2:{re_jsp_huangyueying:'relinglong'},
+ inherit:'bagua_skill',
+ filter:function(event,player){
+ if(!lib.skill.bagua_skill.filter(event,player)) return false;
+ if(!player.hasEmptySlot(2)) return false;
+ return true;
+ },
+ ai:{
+ respondShan:true,
+ effect:{
+ target:function(card,player,target){
+ if(player==target&&get.subtype(card)=='equip2'){
+ if(get.equipValue(card)<=7.5) return 0;
+ }
+ if(target.getEquip(2)) return;
+ return lib.skill.bagua_skill.ai.effect.target.apply(this,arguments);
+ }
+ }
+ },
+ },
+ zhenwei:{
+ audio:2,
+ audioname:['re_wenpin'],
+ trigger:{
+ global:'useCardToTarget'
+ },
+ direct:true,
+ filter:function(event,player){
+ if(player==event.target||player==event.player) return false;
+ if(!player.countCards('he')) return false;
+ if(event.targets.length>1) return false;
+ if(!event.target) return false;
+ if(event.target.hp>=player.hp) return false;
+
+ var card=event.card;
+ if(card.name=='sha') return true;
+ if(get.color(card)=='black'&&get.type(card,'trick')=='trick') return true;
+ return false;
+ },
+ content:function(){
+ "step 0"
+ var save=false;
+ if(get.attitude(player,trigger.target)>2){
+ if(trigger.card.name=='sha'){
+ if(player.countCards('h','shan')||player.getEquip(2)||
+ trigger.target.hp==1||player.hp>trigger.target.hp+1){
+ if(!trigger.target.countCards('h','shan')||trigger.target.countCards('h')0){
+ trigger.player.addSkill('zhenwei2');
+ trigger.player.addToExpansion(cards,'gain2').gaintag.add('zhenwei2');
+ }
+ trigger.targets.length=0;
+ trigger.getParent().triggeredTargets2.length=0;
+ }
+ },
+ ai:{
+ threaten:1.1
+ }
+ },
+ zhenwei2:{
+ audio:false,
+ intro:{
+ content:'expansion',
+ markcount:'expansion',
+ },
+ trigger:{global:'phaseEnd'},
+ forced:true,
+ charlotte:true,
+ onremove:function(player,skill){
+ var cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ },
+ content:function(){
+ 'step 0'
+ var cards=player.getExpansions('zhenwei2');
+ if(cards.length) player.gain(cards,'gain2');
+ 'step 1'
+ player.removeSkill('zhenwei2');
+ }
+ },
+ xunzhi:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ locked:false,
+ init:function(player){
+ player.storage.xunzhi=0;
+ },
+ filter:function(event,player){
+ var previous=player.getPrevious();
+ var next=player.getNext();
+ if(previous&&next){
+ return player.hp!=previous.hp&&player.hp!=next.hp;
+ }
+ return false;
+ },
+ check:function(event,player){
+ return player.hp>=3&&player.countCards('h')>player.hp+1+player.storage.xunzhi;
+ },
+ content:function(){
+ player.loseHp();
+ player.storage.xunzhi+=2;
+ },
+ mark:true,
+ intro:{
+ content:function(storage,player){
+ return '手牌上限+'+player.storage.xunzhi;
+ }
+ },
+ mod:{
+ maxHandcard:function(player,num){
+ if(typeof player.storage.xunzhi=='number'){
+ return num+player.storage.xunzhi;
+ }
+ }
+ }
+ },
+ yawang:{
+ audio:2,
+ trigger:{player:'phaseDrawBegin1'},
+ forced:true,
+ filter:function(event,player){
+ return !event.numFixed;
+ },
+ check:function(event,player){
+ var num=game.countPlayer(function(target){
+ return target.hp==player.hp;
+ });
+ if(!player.hasSkill('xunzhi2')){
+ var nh=player.countCards('h');
+ if(nh>5) return false;
+ if(num==3&&nh>3) return false;
+ }
+ return num>=3;
+ },
+ content:function(){
+ trigger.changeToZero();
+ var num=game.countPlayer(function(target){
+ return target.hp==player.hp;
+ });
+ if(num){
+ player.draw(num);
+ }
+ player.storage.yawang=num;
+ player.addTempSkill('yawang2');
+ }
+ },
+ yawang2:{
+ mod:{
+ cardEnabled:function(card,player){
+ if(_status.currentPhase!=player) return;
+ if(player.countUsed()>=player.storage.yawang) return false;
+ },
+ cardSavable:function(card,player){
+ if(_status.currentPhase!=player) return;
+ if(player.countUsed()>=player.storage.yawang) return false;
+ }
+ }
+ },
+ luoyan_tianxiang:{
+ inherit:'tianxiang',
+ filter:function(event,player){
+ if(!player.storage.xingwu||!player.storage.xingwu.length) return false;
+ if(player.hasSkill('tianxiang')) return false;
+ return lib.skill.tianxiang.filter(event,player);
+ },
+ },
+ luoyan_liuli:{
+ inherit:'liuli',
+ filter:function(event,player){
+ if(!player.storage.xingwu||!player.storage.xingwu.length) return false;
+ if(player.hasSkill('liuli')) return false;
+ return lib.skill.liuli.filter(event,player);
+ },
+ },
+ luoyan:{
+ group:['luoyan_tianxiang','luoyan_liuli'],
+ },
+ xingwu:{
+ audio:2,
+ group:['xingwu_color','xingwu_color2'],
+ subSkill:{
+ color:{
+ trigger:{player:'phaseZhunbeiBegin'},
+ silent:true,
+ content:function(){
+ player.storage.xingwu_color=['black','red'];
+ }
+ },
+ color2:{
+ trigger:{player:'useCard'},
+ silent:true,
+ filter:function(event,player){
+ return Array.isArray(player.storage.xingwu_color)&&_status.currentPhase==player;
+ },
+ content:function(){
+ player.storage.xingwu_color.remove(get.color(trigger.card));
+ }
+ }
+ },
+ trigger:{player:'phaseDiscardBegin'},
+ direct:true,
+ filter:function(event,player){
+ if(!player.storage.xingwu_color) return false;
+ var length=player.storage.xingwu_color.length;
+ if(length==0) return false;
+ var hs=player.getCards('h');
+ if(hs.length==0) return false;
+ if(length==2) return true;
+ var color=player.storage.xingwu_color[0];
+ for(var i=0;i0&&
+ get.attitude(player,current)<0)
+ })) return 0;
+ }
+ return 7-get.value(card);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('xingwu');
+ if(player.storage.xingwu.length<2){
+ player.$give(result.cards,player);
+ }
+ player.lose(result.cards,ui.special);
+ player.storage.xingwu=player.storage.xingwu.concat(result.cards);
+ player.markSkill('xingwu');
+ player.syncStorage('xingwu');
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(player.storage.xingwu.length==3){
+ player.$throw(player.storage.xingwu);
+ while(player.storage.xingwu.length){
+ player.storage.xingwu.shift().discard();
+ }
+ player.unmarkSkill('xingwu');
+ player.chooseTarget(function(card,player,target){
+ return target!=player&&target.hasSex('male');
+ },'对一名男性角色造成两点伤害并弃置其装备区内的牌').set('ai',function(target){
+ var player=_status.event.player;
+ if(get.attitude(player,target)>0) return -1;
+ return get.damageEffect(target,player,player)+target.countCards('e')/2;
+ });
+ }
+ else{
+ event.finish();
+ }
+ 'step 3'
+ if(result.bool){
+ var target=result.targets[0];
+ target.damage(2);
+ event.target=target;
+ player.line(target,'green');
+ }
+ else{
+ event.finish();
+ }
+ 'step 4'
+ if(event.target&&event.target.isIn()){
+ var es=event.target.getCards('e');
+ if(es.length){
+ event.target.discard(es);
+ }
+ }
+ },
+ ai:{
+ threaten:1.5
+ }
+ },
+ yinbing:{
+ trigger:{player:'phaseJieshuBegin'},
+ direct:true,
+ audio:2,
+ preHidden:true,
+ filter:function(event,player){
+ return player.countCards('he',{type:'basic'})0&&
+ (event.card.name=='sha'||event.card.name=='juedou');
+ },
+ content:function(){
+ 'step 0'
+ player.chooseCardButton('移去一张引兵牌',true,player.getExpansions('yinbing'));
+ 'step 1'
+ if(result.bool) player.loseToDiscardpile(result.links);
+ }
+ }
+ },
+ group:'yinbing_discard'
+ },
+ juedi:{
+ trigger:{player:'phaseZhunbeiBegin'},
+ filter:function(event,player){
+ return player.getExpansions('yinbing').length>0;
+ },
+ forced:true,
+ audio:2,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('juedi'),true,function(card,player,target){
+ return player.hp>=target.hp;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var att=get.attitude(player,target);
+ if(att<2) return att-10;
+ var num=att/10;
+ if(target==player){
+ num+=player.maxHp-player.countCards('h')+0.5;
+ }
+ else{
+ num+=_status.event.n2*2;
+ if(target.isDamaged()){
+ if(target.hp==1){
+ num+=3;
+ }
+ else if(target.hp==2){
+ num+=2;
+ }
+ else{
+ num+=0.5;
+ }
+ }
+ }
+ if(target.hasJudge('lebu')){
+ num/=2;
+ }
+ return num;
+ }).set('n2',player.getExpansions('yinbing').length);
+ 'step 1'
+ if(result.bool){
+ player.line(result.targets[0],'green');
+ var cards=player.getExpansions('yinbing');
+ if(result.targets[0]==player){
+ player.loseToDiscardpile(cards);
+ var num=player.maxHp-player.countCards('h');
+ if(num>0) player.draw(num);
+ }
+ else{
+ var target=result.targets[0];
+ target.recover();
+ player.give(cards,target,'give');
+ target.draw(cards.length);
+ }
+ }
+ }
+ },
+ meibu:{
+ trigger:{global:'phaseUseBegin'},
+ filter:function(event,player){
+ return event.player!=player&&get.distance(event.player,player,'attack')>1;
+ },
+ logTarget:'player',
+ check:function(event,player){
+ if(get.attitude(player,event.player)>=0) return false;
+ var e2=player.getEquip(2);
+ if(e2){
+ if(e2.name=='tengjia') return true;
+ if(e2.name=='bagua') return true;
+ }
+ return player.countCards('h','shan')>0;
+ },
+ content:function(){
+ var target=trigger.player;
+ target.addTempSkill('meibu_viewas');
+ target.addTempSkill('meibu_range');
+ target.storage.meibu=player;
+ target.markSkillCharacter('meibu',player,'魅步','锦囊牌均视为杀且'+get.translation(player)+'视为在攻击范围内');
+ },
+ ai:{
+ expose:0.2
+ },
+ subSkill:{
+ range:{
+ mod:{
+ targetInRange:function(card,player,target){
+ if(card.name=='sha'&&target==player.storage.meibu){
+ return true;
+ }
+ }
+ },
+ onremove:function(player){
+ game.broadcast(function(player){
+ if(player.marks.meibu){
+ player.marks.meibu.delete();
+ delete player.marks.meibu;
+ }
+ },player);
+ if(player.marks.meibu){
+ player.marks.meibu.delete();
+ delete player.marks.meibu;
+ game.addVideo('unmark',player,'meibu');
+ }
+ },
+ trigger:{player:'useCard'},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event.skill=='meibu_viewas'
+ },
+ content:function(){
+ player.removeSkill('meibu_viewas');
+ game.broadcastAll(function(player){
+ if(player.marks.meibu&&player.marks.meibu.info){
+ player.marks.meibu.info.content=player.marks.meibu.info.content.slice(8);
+ }
+ },player);
+ }
+ },
+ viewas:{
+ mod:{
+ cardEnabled:function(card,player){
+ if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
+ },
+ cardUsable:function(card,player){
+ if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
+ },
+ cardRespondable:function(card,player){
+ if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
+ },
+ cardSavable:function(card,player){
+ if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
+ },
+ },
+ enable:['chooseToUse','chooseToRespond'],
+ filterCard:function(card){
+ return get.type(card,'trick')=='trick';
+ },
+ viewAs:{name:'sha'},
+ check:function(){return 1},
+ ai:{
+ effect:{
+ target:function(card,player,target,current){
+ if(get.tag(card,'respondSha')&¤t<0) return 0.8
+ }
+ },
+ respondSha:true,
+ order:4,
+ useful:-1,
+ value:-1
+ }
+ }
+ }
+ },
+ mumu:{
+ enable:'phaseUse',
+ usable:1,
+ filterCard:function(card,player,target){
+ return card.name=='sha'||(get.type(card,'trick')=='trick'&&get.color(card)=='black');
+ },
+ check:function(card){
+ return 7-get.value(card);
+ },
+ filterTarget:function(card,player,target){
+ if(target==player) return false;
+ return target.getEquips(1).length>0||target.getEquips(2).length>0;
+ },
+ content:function(){
+ 'step 0'
+ var e1=target.getEquips(1);
+ var e2=target.getEquips(2);
+ event.e1=e1;
+ event.e2=e2;
+ if(e1.length&&e2.length){
+ player.chooseControl('武器牌','防具牌').set('ai',function(){
+ if(_status.event.player.getEquip(2)){
+ return '武器牌';
+ }
+ return '防具牌';
+ });
+ }
+ else if(e1.length){
+ event.choice='武器牌';
+ }
+ else{
+ event.choice='防具牌';
+ }
+ 'step 1'
+ var choice=event.choice||result.control;
+ if(choice=='武器牌'){
+ if(event.e1){
+ target.discard(event.e1);
+ }
+ player.draw();
+ }
+ else{
+ if(event.e2){
+ player.equip(event.e2);
+ target.$give(event.e2,player);
+ }
+ }
+ },
+ ai:{
+ order:8,
+ result:{
+ target:function(player,target){
+ if(target.getEquip(2)&&!player.getEquip(2)){
+ return -2;
+ }
+ return -1;
+ }
+ }
+ }
+ },
+ fentian:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ direct:true,
+ filter:function(event,player){
+ if(player.countCards('h')>=player.hp) return false;
+ return game.hasPlayer(function(current){
+ return player!=current&&player.inRange(current)&¤t.countCards('he');
+ });
+ },
+ intro:{
+ content:'expansion',
+ markcount:'expansion',
+ },
+ onremove:function(player,skill){
+ var cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget('焚天:选择一名攻击范围内的角色,将其一张牌置于你的武将牌上',true,function(card,player,target){
+ return player!=target&&player.inRange(target)&&target.countCards('he')>0;
+ }).set('ai',function(target){
+ return -get.attitude(_status.event.player,target)
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('fentian',result.targets);
+ event.target=result.targets[0];
+ player.choosePlayerCard(result.targets[0],'he',true);
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(result.bool){
+ player.addToExpansion(result.links,target,'give').gaintag.add('fentian');
+ }
+ },
+ mod:{
+ attackRange:function(from,distance){
+ return distance+from.getExpansions('fentian').length;
+ }
+ }
+ },
+ zhiri:{
+ trigger:{player:'phaseZhunbeiBegin'},
+ forced:true,
+ unique:true,
+ juexingji:true,
+ audio:2,
+ skillAnimation:true,
+ animationColor:'fire',
+ derivation:'xintan',
+ filter:function(event,player){
+ return player.getExpansions('fentian').length>=3;
+ },
+ content:function(){
+ player.loseMaxHp();
+ player.addSkill('xintan');
+ player.storage.zhiri=true;
+ player.awakenSkill('zhiri');
+ }
+ },
+ xintan:{
+ enable:'phaseUse',
+ usable:1,
+ audio:2,
+ unique:true,
+ filter:function(event,player){
+ return player.getExpansions('fentian').length>=2;
+ },
+ filterTarget:true,
+ prompt:'移去两张“焚”并令一名角色失去一点体力',
+ content:function(){
+ 'step 0'
+ player.chooseCardButton(2,'移去两张“焚”并令'+get.translation(target)+'失去一点体力',player.getExpansions('fentian'),true);
+ 'step 1'
+ if(result.bool){
+ player.loseToDiscardpile(result.links);
+ target.loseHp();
+ }
+ },
+ ai:{
+ order:8,
+ result:{
+ target:-1
+ }
+ }
+ },
+ danji:{
+ skillAnimation:true,
+ animationColor:'water',
+ trigger:{player:'phaseZhunbeiBegin'},
+ forced:true,
+ unique:true,
+ juexingji:true,
+ derivation:['mashu','nuzhan'],
+ filter:function(event,player){
+ var zhu=get.zhu(player);
+ if(zhu&&zhu.isZhu){
+ var name=zhu.name
+ while(name.indexOf('_')!=-1){
+ name=name.slice(name.indexOf('_')+1);
+ }
+ if(name.indexOf('liubei')==0) return false;
+ }
+ return !player.storage.danji&&player.countCards('h')>player.hp;
+ },
+ content:function(){
+ player.storage.danji=true;
+ player.loseMaxHp();
+ player.addSkill('mashu');
+ player.addSkill('nuzhan');
+ player.awakenSkill('danji');
+ }
+ },
+ nuzhan:{
+ audio:2,
+ popup:false,
+ silent:true,
+ firstDo:true,
+ trigger:{player:'useCard1'},
+ filter:function(event,player){
+ return event.card&&event.card.name=='sha'&&event.addCount!==false&&event.cards&&
+ event.cards.length==1&&get.type(event.cards[0],'trick')=='trick';
+ },
+ forced:true,
+ content:function(){
+ trigger.addCount=false;
+ if(player.stat[player.stat.length-1].card.sha>0){
+ player.stat[player.stat.length-1].card.sha--;
+ }
+ },
+ group:'nuzhan2'
+ },
+ nuzhan2:{
+ audio:'nuzhan',
+ trigger:{player:'useCard1'},
+ forced:true,
+ popup:false,
+ silent:true,
+ firstDo:true,
+ filter:function(event,player){
+ return event.card&&event.card.name=='sha'&&event.cards&&
+ event.cards.length==1&&get.type(event.cards[0])=='equip';
+ },
+ content:function(){
+ trigger.baseDamage++;
+ }
+ },
+ jieyuan:{
+ group:['jieyuan_more','jieyuan_less'],
+ subSkill:{
+ more:{
+ audio:true,
+ trigger:{source:'damageBegin1'},
+ direct:true,
+ filter:function(event,player){
+ if(!player.countCards(player.hasSkill('fenxin_nei')?'he':'h',function(card){
+ if(player.hasSkill('fenxin_nei')||(_status.connectMode&&get.position(card)=='h')) return true;
+ return get.color(card)=='black';
+ })) return false;
+ return (event.player.hp>=player.hp||player.hasSkill('fenxin_fan'))&&player!=event.player;
+ },
+ content:function(){
+ 'step 0'
+ var goon=(get.attitude(player,trigger.player)<0);
+ var next=player.chooseToDiscard(get.prompt('jieyuan',trigger.player),player.hasSkill('fenxin_nei')?'he':'h');
+ if(!player.hasSkill('fenxin_nei')){
+ next.set('filterCard',function(card){
+ return get.color(card)=='black';
+ });
+ next.set('prompt2','弃置一张黑色手牌令伤害+1');
+ }
+ else{
+ next.set('prompt2','弃置一张手牌令伤害+1');
+ }
+ next.set('ai',function(card){
+ if(_status.event.goon){
+ return 8-get.value(card);
+ }
+ return 0;
+ });
+ next.set('goon',goon);
+ next.logSkill=['jieyuan_more',trigger.player];
+ 'step 1'
+ if(result.bool){
+ trigger.num++;
+ }
+ }
+ },
+ less:{
+ audio:true,
+ trigger:{player:'damageBegin2'},
+ filter:function(event,player){
+ if(!player.countCards(player.hasSkill('fenxin_nei')?'he':'h',function(card){
+ if(player.hasSkill('fenxin_nei')||(_status.connectMode&&get.position(card)=='h')) return true;
+ return get.color(card)=='red';
+ })) return false;
+ return event.source&&(event.source.hp>=player.hp||player.hasSkill('fenxin_zhong'))&&player!=event.source;
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ var next=player.chooseToDiscard(get.prompt('jieyuan'),player.hasSkill('fenxin_nei')?'he':'h');
+ if(!player.hasSkill('fenxin_nei')){
+ next.set('filterCard',function(card){
+ return get.color(card)=='red';
+ });
+ next.set('prompt2','弃置一张红色手牌令伤害-1');
+ }
+ else{
+ next.set('prompt2','弃置一张手牌令伤害-1');
+ }
+ next.set('ai',function(card){
+ var player=_status.event.player;
+ if(player.hp==1||_status.event.getTrigger().num>1){
+ return 9-get.value(card);
+ }
+ if(player.hp==2){
+ return 8-get.value(card);
+ }
+ return 7-get.value(card);
+ });
+ next.logSkill='jieyuan_less';
+ "step 1"
+ if(result.bool){
+ trigger.num--;
+ }
+ }
+ }
+ },
+ ai:{
+ expose:0.2,
+ threaten:1.5
+ }
+ },
+ fenxin:{
+ mode:['identity'],
+ available:function(mode){
+ if(mode=='identity'&&_status.mode=='purple') return false;
+ },
+ trigger:{global:'dieAfter'},
+ filter:function(event,player){
+ return ['fan','zhong','nei'].contains(event.player.identity)&&!player.hasSkill('fenxin_'+event.player.identity);
+ },
+ forced:true,
+ content:function(){
+ player.addSkill('fenxin_'+trigger.player.identity);
+ player.markSkill('fenxin');
+ },
+ intro:{
+ mark:function(dialog,content,player){
+ if(player.hasSkill('fenxin_zhong')){
+ dialog.addText('你发动“竭缘”减少伤害无体力值限制');
+ }
+ if(player.hasSkill('fenxin_fan')){
+ dialog.addText('你发动“竭缘”增加伤害无体力值限制');
+ }
+ if(player.hasSkill('fenxin_nei')){
+ dialog.addText('将“竭缘”中的黑色手牌和红色手牌改为一张牌');
+ }
+ }
+ },
+ subSkill:{
+ fan:{charlotte:true},
+ zhong:{charlotte:true},
+ nei:{charlotte:true}
+ },
+ ai:{
+ combo:'jieyuan'
+ }
+ },
+ xisheng:{
+ enable:'chooseToUse',
+ usable:1,
+ viewAs:{name:'tao'},
+ viewAsFilter:function(player){
+ return player!=_status.currentPhase&&player.countCards('hes')>1;
+ },
+ selectCard:2,
+ filterCard:true,
+ position:'hes',
+ },
+ shulv:{
+ inherit:'zhiheng',
+ prompt:'弃置一张牌并摸一张牌',
+ selectCard:1,
+ filter:function(event,player){
+ return player.countCards('hs')>player.hp;
+ },
+ },
+ xiandeng:{
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+1;
+ },
+ targetInRange:function(card,player){
+ if(card.name=='sha'&&player.countUsed('sha',true)==0) return true;
+ },
+ },
+ },
+ qingyi:{
+ audio:2,
+ trigger:{player:'phaseJudgeBefore'},
+ direct:true,
+ content:function(){
+ "step 0"
+ var check= player.countCards('h')>2;
+ player.chooseTarget(get.prompt("qingyi"),"跳过判定阶段和摸牌阶段,视为对一名其他角色使用一张【杀】",function(card,player,target){
+ if(player==target) return false;
+ return player.canUse({name:'sha'},target,false);
+ }).set('check',check).set('ai',function(target){
+ if(!_status.event.check) return 0;
+ return get.effect(target,{name:'sha'},_status.event.player);
+ });
+ "step 1"
+ if(result.bool){
+ player.logSkill('qingyi',result.targets);
+ player.useCard({name:'sha',isCard:true},result.targets[0],false);
+ trigger.cancel();
+ player.skip('phaseDraw');
+ }
+ },
+ },
+ qingyi1:{
+ audio:true,
+ trigger:{player:'phaseZhunbeiBegin'},
+ direct:true,
+ content:function(){
+ "step 0"
+ player.addSkill('qingyi3');
+ var check= player.countCards('h')>2;
+ player.chooseTarget(get.prompt2('qingyi'),function(card,player,target){
+ if(player==target) return false;
+ return player.canUse({name:'sha'},target);
+ }).ai=function(target){
+ if(!check) return 0;
+ return get.effect(target,{name:'sha'},_status.event.player);
+ }
+ "step 1"
+ if(result.bool){
+ player.logSkill('qingyi1',result.targets);
+ player.useCard({name:'sha',isCard:true},result.targets[0],false);
+ player.skip('phaseJudge');
+ player.skip('phaseDraw');
+ }
+ player.removeSkill('qingyi3');
+ }
+ },
+ qingyi2:{
+ audio:true,
+ trigger:{player:'phaseUseBefore'},
+ direct:true,
+ filter:function(event,player){
+ return player.countCards('he',{type:'equip'})>0;
+ },
+ content:function(){
+ "step 0"
+ player.addSkill('qingyi3');
+ var check=player.countCards('h')<=player.hp;
+ player.chooseCardTarget({
+ prompt:get.prompt2('qingyi'),
+ filterCard:function(card,player){
+ return get.type(card)=='equip'&&lib.filter.cardDiscardable(card,player);
+ },
+ position:'he',
+ filterTarget:function(card,player,target){
+ if(player==target) return false;
+ return player.canUse({name:'sha'},target);
+ },
+ ai1:function(card){
+ if(!_status.event.check) return 0;
+ return 6-get.value(card);
+ },
+ ai2:function(target){
+ if(!_status.event.check) return 0;
+ return get.effect(target,{name:'sha'},_status.event.player);
+ },
+ check:check
+ });
+ "step 1"
+ if(result.bool){
+ player.logSkill('qingyi2',result.targets);
+ player.discard(result.cards[0]);
+ player.useCard({name:'sha',isCard:true},result.targets[0]);
+ trigger.cancel();
+ }
+ player.removeSkill('qingyi3');
+ }
+ },
+ qingyi3:{
+ mod:{
+ targetInRange:function(card,player,target,now){
+ return true;
+ }
+ },
+ },
+ qirang:{
+ audio:2,
+ trigger:{player:'equipEnd'},
+ frequent:true,
+ content:function(){
+ var card=get.cardPile(function(card){
+ return get.type(card,'trick')=='trick';
+ });
+ if(card){
+ var next=player.gain(card,'gain2');
+ if(get.type(card)=='trick') next.gaintag.add('qirang');
+ else{
+ player.addMark('qirang_mark',1,false);
+ player.addTempSkill('qirang_mark',{player:'phaseBegin'});
+ }
+ }
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target,current){
+ if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3];
+ }
+ },
+ threaten:1.3
+ },
+ group:'qirang_use',
+ subSkill:{
+ mark:{
+ charlotte:true,
+ onremove:function(player){
+ var evt=_status.event;
+ if(evt.name!='phase') evt=evt.getParent('phase');
+ if(evt&&evt.player==player){
+ if(!evt.qirang_num) evt.qirang_num=0;
+ evt.qirang_num+=player.storage.qirang_mark;
+ }
+ delete player.storage.qirang_mark;
+ },
+ intro:{
+ content:'下回合发动〖羽化〗时卜算量+#',
+ },
+ },
+ use:{
+ audio:'qirang',
+ trigger:{player:'useCard2'},
+ direct:true,
+ filter:function(event,player){
+ if(get.type(event.card)!='trick') return false;
+ if(!event.targets||event.targets.length!=1) return false;
+ var info=get.info(event.card);
+ if(info.allowMultiple==false) return false;
+ if(!player.hasHistory('lose',function(evt){
+ if(evt.getParent()!=event) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('qirang')) return true;
+ }
+ return false;
+ })) return false;
+ if(!info.multitarget){
+ if(game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current);
+ })){
+ return true;
+ }
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var prompt2='为'+get.translation(trigger.card)+'增加一个目标'
+ player.chooseTarget(get.prompt('qirang'),function(card,player,target){
+ var player=_status.event.player;
+ if(_status.event.targets.contains(target)) return false;
+ return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target);
+ }).set('prompt2',prompt2).set('ai',function(target){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ return get.effect(target,trigger.card,player,player)*(_status.event.targets.contains(target)?-1:1);
+ }).set('targets',trigger.targets).set('card',trigger.card);
+ 'step 1'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.targets=result.targets;
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(event.targets){
+ player.logSkill('qirang_use',event.targets);
+ trigger.targets.addArray(event.targets);
}
},
},
},
},
-
- reguanxing:{
- audio:'guanxing',
- audioname:['jiangwei','re_jiangwei','re_zhugeliang','gexuan','ol_jiangwei'],
+ yuhua:{
trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
- frequent:true,
- filter:function(event,player,name){
- if(name=='phaseJieshuBegin'){
- return player.hasSkill('reguanxing_on');
- }
- return true;
- },
+ forced:true,
+ audio:2,
content:function(){
"step 0"
- var num=game.countPlayer()<4?3:5;
- var cards=get.cards(num);
+ var num=1,evt=trigger.getParent();
+ if(evt.qirang_num) num+=evt.qirang_num;
+ var cards=get.cards(Math.min(5,num));
game.cardsGotoOrdering(cards);
var next=player.chooseToMove();
next.set('list',[
['牌堆顶',cards],
['牌堆底'],
]);
- next.set('prompt','观星:点击将牌移动到牌堆顶或牌堆底');
+ next.set('prompt','羽化:点击将牌移动到牌堆顶或牌堆底');
next.processAI=function(list){
var cards=list[0][1],player=_status.event.player;
var target=(_status.event.getTrigger().name=='phaseZhunbei')?player:player.next;
@@ -11888,643 +18138,337 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.updateRoundNumber();
game.delayx();
},
- subSkill:{
- on:{}
- }
- },
- reluoshen:{
- audio:2,
- locked:false,
- trigger:{player:'phaseZhunbeiBegin'},
- frequent:true,
- content:function(){
- "step 0"
- player.addTempSkill('reluoshen_add');
- event.cards=[];
- "step 1"
- var next=player.judge(function(card){
- if(get.color(card)=='black') return 1.5;
- return -1.5;
- });
- next.judge2=function(result){
- return result.bool;
- };
- if(get.mode()!='guozhan'&&!player.hasSkillTag('rejudge')) next.set('callback',function(){
- if(event.judgeResult.color=='black'&&get.position(card,true)=='o'){
- player.gain(card,'gain2').gaintag.add('reluoshen');
+ mod:{
+ ignoredHandcard:function(card,player){
+ if(get.type(card)!='basic'){
+ return true;
}
- });
- else next.set('callback',function(){
- if(event.judgeResult.color=='black') event.getParent().orderingCards.remove(card);
- });
- "step 2"
- if(result.bool){
- event.cards.push(result.card);
- player.chooseBool('是否再次发动【洛神】?').set('frequentSkill','reluoshen');
- }
- else{
- for(var i=0;i0;
- },
- check:function(card){
- var player=_status.event.player;
- if(get.position(card)=='e'){
- var subtype=get.subtype(card);
- if(!game.hasPlayer(function(current){
- return current!=player&¤t.hp!=player.hp&&get.attitude(player,current)>0&&!current.countCards('e',{subtype:subtype});
- })){
- return 0;
- }
- if(player.countCards('h',{subtype:subtype})) return 20-get.value(card);
- return 10-get.value(card);
- }
- else{
- if(player.countCards('e')) return 0;
- if(player.countCards('h',{type:'equip'})) return 0;
- return 8-get.value(card);
- }
- },
- filterTarget:function(card,player,target){
- if(!target.hasSex('male')) return false;
- var card=ui.selected.cards[0];
- if(!card) return false;
- if(get.position(card)=='e'&&!target.canEquip(card)) return false;
- return true;
- },
- discard:false,
- delay:false,
- lose:false,
- content:function(){
- 'step 0'
- if(get.position(cards[0])=='e') event._result={index:0};
- else if(get.type(cards[0])!='equip'||!target.canEquip(cards[0])) event._result={index:1};
- else player.chooseControl().set('choiceList',[
- '将'+get.translation(cards[0])+'置入'+get.translation(target)+'的装备区',
- '弃置'+get.translation(cards[0]),
- ]).ai=function(){return 1};
- 'step 1'
- if(result.index==0){
- player.$give(cards,target,false);
- target.equip(cards[0]);
- }
- else{
- player.discard(cards);
- }
- 'step 2'
- if(player.hp>target.hp){
- player.draw();
- if(target.isDamaged()) target.recover();
- }
- else if(player.hptarget.hp){
- if(target.isHealthy()){
- if(!player.needsToDiscard(1)||goon()) return 0.1;
- return 0;
- }
- return 1;
- }
- return 0;
- }
+ cardDiscardable:function(card,player,name){
+ if(name=='phaseDiscard'&&get.type(card)!='basic') return false;
}
- }
+ },
},
- rejiuyuan:{
+ chenqing:{
audio:2,
- zhuSkill:true,
- trigger:{global:'recoverBefore'},
+ trigger:{global:'dying'},
+ //priority:6,
+ filter:function(event,player){
+ return event.player.hp<=0&&!player.hasSkill('chenqing2');
+ },
direct:true,
- filter:function(event,player){
- return player!=event.player&&event.player.group=='wu'&&player.hp<=event.player.hp&&
- event.getParent().name!='rejiuyuan'&&player.hasZhuSkill('rejiuyuan',event.player)
- },
content:function(){
'step 0'
- trigger.player.chooseBool('是否对'+get.translation(player)+'发动【救援】?','改为令其回复1点体力,然后你摸一张牌').set('ai',function(){
- var evt=_status.event;
- return get.attitude(evt.player,evt.getParent().player)>0;
- });
- 'step 1'
- if(result.bool){
- player.logSkill('rejiuyuan');
- trigger.player.line(player,'green');
- trigger.cancel();
- player.recover();
- trigger.player.draw();
- }
- },
- },
- rezhiheng:{
- audio:2,
- audioname:['shen_caopi'],
- enable:'phaseUse',
- usable:1,
- position:'he',
- filterCard:lib.filter.cardDiscardable,
- discard:false,
- lose:false,
- delay:false,
- selectCard:[1,Infinity],
- check:function(card){
- var player=_status.event.player;
- if(get.position(card)=='h'&&!player.countCards('h','du')&&(player.hp>2||!player.countCards('h',function(card){
- return get.value(card)>=8;
- }))){
- return 1;
- }
- return 6-get.value(card)
- },
- content:function(){
- 'step 0'
- player.discard(cards);
- event.num=1;
- var hs=player.getCards('h');
- if(!hs.length) event.num=0;
- for(var i=0;i=Math.max(2,player.countCards('h')-player.hp)) return 0;
- if(player.hp==player.maxHp||player.storage.rerende<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.rerende){
- var next=game.createEvent('rerende_clear');
- _status.event.next.remove(next);
- evt.after.push(next);
- evt.rerende=true;
- next.player=player;
- next.setContent(lib.skill.rerende1.content);
- }
- if(!Array.isArray(player.storage.rerende2)){
- player.storage.rerende2=[];
- }
- player.storage.rerende2.push(target);
- player.give(cards,target);
- 'step 1'
- if(typeof player.storage.rerende!='number'){
- player.storage.rerende=0;
- }
- if(player.storage.rerende>=0){
- player.storage.rerende+=cards.length;
- if(player.storage.rerende>=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']);
- }
- for(var i of lib.inpile_nature){
- if(lib.filter.cardUsable({name:'sha',nature:i},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
- return player.canUse({name:'sha',nature:i},current);
- })){
- list.push(['基本','','sha',i]);
- }
- }
- 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],isCard:true};
- 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.rerende=-1;
+ player.chooseTarget(get.prompt2('chenqing'),function(card,player,target){
+ return target!=player&&target!=_status.event.getTrigger().player;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var trigger=_status.event.getTrigger();
+ if(get.attitude(player,trigger.player)>0){
+ var att1=get.attitude(target,player);
+ var att2=get.attitude(target,trigger.player);
+ var att3=get.attitude(player,target);
+ if(att3<0) return 0;
+ return att1/2+att2+att3;
}
else{
- event.finish();
+ return 0;
+ // return get.attitude(player,target);
}
+ });
+ 'step 1'
+ if(result.bool){
+ player.addTempSkill('chenqing2','roundStart');
+ event.target=result.targets[0];
+ event.target.draw(4);
+ player.logSkill('chenqing',event.target);
}
else{
event.finish();
}
'step 2'
- 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.rerende<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;
- }
+ var target=event.target;
+ var tosave=trigger.player;
+ var att=get.attitude(target,tosave);
+ var hastao=target.countCards('h','tao');
+ target.chooseToDiscard(4,true,'he').set('ai',function(card){
+ var hastao=_status.event.hastao;
+ var att=_status.event.att;
+ if(!hastao&&att>0){
+ var suit=get.suit(card);
+ for(var i=0;i0;
+ if(att<0&&ui.selected.cards.length==3){
+ var suit=get.suit(card);
+ for(var i=0;i0&&player.countCards('hs')>0;
+ },
+ content:function(){
+ "step 0"
+ event.count=2;
+ event.history=player.getHistory('useCard',function(evt){
+ return evt.isPhaseUsing()&&['basic','trick'].contains(get.type(evt.card));
+ })
+ "step 1"
+ event._result={};
+ if(event.count&&event.history.length&&player.countCards('hs')){
+ event.count--;
+ var card=event.history.shift().card;
+ card={name:card.name,nature:card.nature};
+ if(card.name!='jiu'&&lib.filter.cardEnabled(card)){
+ if(game.hasPlayer(function(current){
+ return player.canUse(card,current);
+ })){
+ lib.skill.mozhix.viewAs=card;
+ var next=player.chooseToUse();
+ if(next.isOnline()){
+ player.send(function(card){
+ lib.skill.mozhix.viewAs=card;
+ },card)
+ }
+ next.logSkill='mozhi';
+ next.set('openskilldialog','默识:将一张手牌当'+get.translation(card)+'使用');
+ next.set('norestore',true);
+ next.set('_backupevent','mozhix');
+ next.set('custom',{
+ add:{},
+ replace:{window:function(){}}
+ });
+ next.backup('mozhix');
+ }
+ }
+ }
+ "step 2"
+ if(result&&result.bool) event.goto(1);
+ },
+ },
+ mozhix:{
+ filterCard:function(card){
+ return get.itemtype(card)=='card';
+ },
+ selectCard:1,
+ position:'hs',
+ popname:true,
+ },
+ chenqing2:{charlotte:true},
+ ranshang:{
+ audio:2,
+ trigger:{player:'damageEnd'},
+ filter:function(event,player){
+ return event.nature=='fire';
+ },
+ forced:true,
check:function(){
return false;
},
content:function(){
- 'step 0'
- trigger.player.chooseTarget(function(card,player,target){
- var evt=_status.event.getParent();
- return evt.player.canUse({name:'juedou'},target)&&target!=_status.event.player;
- },get.prompt('liyu')).set('ai',function(target){
- var evt=_status.event.getParent();
- return get.effect(target,{name:'juedou'},evt.player,_status.event.player)-2;
- });
- 'step 1'
- if(result.bool){
- player.gainPlayerCard(trigger.player,'he',true);
- event.target=result.targets[0];
- trigger.player.line(player,'green');
- }
- else{
- event.finish();
- }
- 'step 2'
- if(event.target){
- player.useCard({name:'juedou',isCard:true},event.target,'noai');
- }
+ player.addMark('ranshang',trigger.num);
+ },
+ intro:{
+ name2:'燃',
+ content:'mark'
},
ai:{
- halfneg:true
- }
- },
- /*reqicai:{
- trigger:{player:'equipEnd'},
- frequent:true,
- content:function(){
- player.draw();
- },
- mod:{
- targetInRange:function(card,player,target,now){
- var type=get.type(card);
- if(type=='trick'||type=='delay') return true;
+ effect:{
+ target:function(card,player,target,current){
+ if(card.name=='sha'){
+ if(card.nature=='fire'||player.hasSkill('zhuque_skill')) return 2;
+ }
+ if(get.tag(card,'fireDamage')&¤t<0) return 2;
+ }
}
},
- },*/
- retuxi:{
+ group:'ranshang2'
+ },
+ ranshang2:{
audio:2,
- trigger:{player:'phaseDrawBegin2'},
- direct:true,
- filter:function(event){
- return event.num>0;
+ trigger:{player:'phaseJieshuBegin'},
+ forced:true,
+ filter:function(event,player){
+ return player.countMark('ranshang')>0;
},
content:function(){
- "step 0"
- player.chooseTarget(get.prompt('retuxi'),[1,trigger.num],function(card,player,target){
- return target.countCards('h')>0&&player!=target&&target.countCards('h')>=player.countCards('h');
- },function(target){
- var att=get.attitude(_status.event.player,target);
- if(target.hasSkill('tuntian')) return att/10;
- return 1-att;
- });
- "step 1"
- if(result.bool){
- player.logSkill('retuxi',result.targets);
- player.gainMultiple(result.targets);
- trigger.num-=result.targets.length;
+ player.loseHp(player.countMark('ranshang'));
+ if(player.countMark('ranshang')>2){
+ player.loseMaxHp(2);
+ player.draw(2);
}
- else{
- event.finish();
- }
- "step 2"
- if(trigger.num<=0) game.delay();
- },
- ai:{
- threaten:1.6,
- expose:0.2
}
},
- reguicai:{
+ hanyong:{
+ trigger:{player:'useCard'},
+ filter:function(event,player){
+ return event.card&&(event.card.name=='nanman'||event.card.name=='wanjian'||(event.card.name=='sha'&&!event.card.nature&&get.suit(event.card)=='spade'))&&player.isDamaged();
+ },
+ content:function(){
+ trigger.baseDamage++;
+ if(game.roundNumber<=player.hp) player.addMark('ranshang',1);
+ },
+ },
+ hanyong3:{
+ audio:false,
+ trigger:{source:'damageBegin1'},
+ forced:true,
+ onremove:true,
+ filter:function(event,player){
+ return event.card==player.storage.hanyong3;
+ },
+ content:function(){
+ trigger.num++;
+ }
+ },
+ yishe:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ filter:function(event,player){
+ return !player.getExpansions('yishe').length;
+ },
+ intro:{
+ content:'expansion',
+ markcount:'expansion',
+ },
+ content:function(){
+ 'step 0'
+ player.draw(2);
+ 'step 1'
+ var cards=player.getCards('he');
+ if(!cards.length) event.finish();
+ else if(cards.length<=2) event._result={bool:true,cards:cards};
+ else player.chooseCard(2,'he',true,'选择两张牌作为“米”');
+ 'step 2'
+ if(result.bool) player.addToExpansion(result.cards,player,'give').gaintag.add('yishe');
+ },
+ group:'yishe_recover',
+ ai:{combo:'bushi'},
+ subSkill:{
+ recover:{
+ audio:'yishe',
+ trigger:{
+ player:['loseAfter'],
+ global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ filter:function(event,player){
+ if(player.isHealthy()) return false;
+ var evt=event.getl(player);
+ if(!evt||!evt.xs||!evt.xs.length||player.getExpansions('yishe').length>0) return false;
+ if(event.name=='lose'){
+ for(var i in event.gaintag_map){
+ if(event.gaintag_map[i].contains('yishe')) return true;
+ }
+ return false;
+ }
+ return player.hasHistory('lose',function(evt){
+ if(event!=evt.getParent()) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('yishe')) return true;
+ }
+ return false;
+ });
+ },
+ forced:true,
+ content:function(){
+ player.recover();
+ },
+ },
+ },
+ },
+ bushi:{
+ audio:2,
+ trigger:{player:'damageEnd',source:'damageEnd'},
+ filter:function(event,player){
+ if(event._notrigger.contains(event.player)) return false;
+ return event.player.isIn()&&player.getExpansions('yishe').length>0;
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ event.count=trigger.num;
+ 'step 1'
+ trigger.player.chooseCardButton('选择获得一张“米”',player.getExpansions('yishe'));
+ 'step 2'
+ if(result.bool){
+ event.count--;
+ player.logSkill('bushi',trigger.player);
+ trigger.player.gain(result.links[0],'give',player,'bySelf');
+ }
+ else event.finish();
+ 'step 3'
+ if(event.count>0&&player.getExpansions('yishe').length&&player.hasSkill('bushi')){
+ event.goto(1);
+ }
+ },
+ ai:{combo:'yishe'},
+ },
+ midao:{
audio:2,
trigger:{global:'judge'},
direct:true,
filter:function(event,player){
- return player.countCards('hes')>0;
+ return player.getExpansions('yishe').length&&event.player.isIn();
},
content:function(){
"step 0"
- player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
- get.translation(trigger.player.judging[0])+','+get.prompt('reguicai'),'hes',function(card){
- var player=_status.event.player;
- var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
- if(mod2!='unchanged') return mod2;
- var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
- if(mod!='unchanged') return mod;
- return true;
- }).set('ai',function(card){
+ var list=player.getExpansions('yishe');
+ player.chooseButton([get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+get.translation(trigger.player.judging[0])+
+ ','+get.prompt('midao'),list,'hidden'],function(button){
+ var card=button.link;
var trigger=_status.event.getTrigger();
var player=_status.event.player;
var judging=_status.event.judging;
var result=trigger.judge(card)-trigger.judge(judging);
var attitude=get.attitude(player,trigger.player);
- if(attitude==0||result==0) return 0;
- if(attitude>0){
- return result-get.value(card)/2;
- }
- else{
- return -result-get.value(card)/2;
- }
- }).set('judging',trigger.player.judging[0]);
+ return result*attitude;
+ }).set('judging',trigger.player.judging[0]).set('filterButton',function(button){
+ var player=_status.event.player;
+ var card=button.link;
+ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
+ if(mod2!='unchanged') return mod2;
+ var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
+ if(mod!='unchanged') return mod;
+ return true;
+ });
"step 1"
if(result.bool){
- player.respond(result.cards,'reguicai','highlight','noOrdering');
+ event.forceDie=true;
+ player.respond(result.links,'midao','highlight','noOrdering');
+ result.cards=result.links;
+ var card=result.cards[0];
+ event.card=card;
}
else{
event.finish();
@@ -12543,7 +18487,2734 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.cardsDiscard(trigger.player.judging[0]);
trigger.player.judging[0]=result.cards[0];
trigger.orderingCards.addArray(result.cards);
- game.log(trigger.player,'的判定牌改为',result.cards[0]);
+ game.log(trigger.player,'的判定牌改为',card);
+ game.delay(2);
+ }
+ },
+ ai:{
+ combo:'yishe',
+ rejudge:true,
+ tag:{
+ rejudge:0.6
+ }
+ }
+ },
+ fengpo:{
+ shaRelated:true,
+ audio:2,
+ trigger:{
+ player:'useCardToPlayered',
+ },
+ filter:function(event,player){
+ if(event.targets.length!=1||!['sha','juedou'].contains(event.card.name)) return false;
+ var evtx=event.getParent();
+ return !player.hasHistory('useCard',function(evt){
+ return evt!=evtx&&evt.card.name==event.card.name;
+ },evtx)
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ var str1=get.translation(trigger.card),str2=get.translation(trigger.target);
+ player.chooseControl('摸X加1伤','摸1加X伤','cancel2').set('prompt',get.prompt('fengpo',trigger.target)).set('prompt2','你可以选择一项:1.摸X张牌,令'+str1+'的伤害+1;2.摸一张牌,令'+str1+'的伤害+X(X为'+str2+'的♦牌的数量)。');
+ 'step 1'
+ if(result.control&&result.control!='cancel2'){
+ player.logSkill('fengpo',trigger.target);
+ var nd=trigger.target.countCards('he',{suit:'diamond'});
+ var draw=1,damage=1;
+ if(result.control=='摸X加1伤') draw=nd;
+ else damage=nd;
+ player.draw(draw);
+ var trigger2=trigger.getParent();
+ if(typeof trigger2.baseDamage!='number'){
+ trigger2.baseDamage=1;
+ }
+ trigger2.baseDamage+=damage;
+ }
+ }
+ },
+ fengpo2:{
+ trigger:{source:'damageBegin1'},
+ filter:function(event){
+ return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink();
+ },
+ forced:true,
+ audio:false,
+ content:function(){
+ if(typeof player.storage.fengpo=='number'){
+ trigger.num+=player.storage.fengpo;
+ }
+ }
+ },
+ fengpo3:{charlotte:true},
+ biluan:{
+ audio:2,
+ trigger:{player:'phaseDrawBegin1'},
+ mark:true,
+ //unique:true,
+ intro:{
+ content:function(storage){
+ if(storage>0){
+ return '其他角色计算与你的距离时+'+storage;
+ }
+ else if(storage<0){
+ return '其他角色计算与你的距离时'+storage;
+ }
+ else{
+ return '无距离变化';
+ }
+ }
+ },
+ init:function(player){
+ if(typeof player.storage.biluan!='number') player.storage.biluan=0;
+ },
+ check:function(event,player){
+ if(player.countCards('h')>player.hp) return true;
+ if(player.hasJudge('lebu')) return true;
+ var ng=[];
+ var players=game.filterPlayer();
+ for(var i=0;i1){
+ nai++;
+ }
+ }
+ }
+ return nai>=2;
+ },
+ filter:function(event,player){
+ return !event.numFixed&&game.hasPlayer(function(current){
+ return current!=player&&get.distance(current,player)<=1;
+ });
+ },
+ content:function(){
+ var ng=[];
+ var players=game.filterPlayer();
+ for(var i=0;i1;
+ },
+ forced:true,
+ content:function(){
+ 'step 0'
+ player.chooseTarget(function(card,player,target){
+ return target==player||target==_status.event.source;
+ },true,'礼下:选择一个目标摸一张牌').set('ai',function(target){
+ return player==target?1:0;
+ }).set('source',trigger.player);
+ 'step 1'
+ if(result.targets.length){
+ result.targets[0].draw();
+ player.line(result.targets[0],'green');
+ }
+ player.storage.biluan--;
+ player.markSkill('biluan');
+ game.addVideo('storage',player,['biluan',player.storage.biluan]);
+ }
+ },
+ rebiluan2:{
+ mark:true,
+ charlotte:true,
+ intro:{
+ content:function(storage){
+ if(storage>0){
+ return '其他角色计算与你的距离时+'+storage;
+ }
+ else if(storage<0){
+ return '其他角色计算与你的距离时'+storage;
+ }
+ else{
+ return '无距离变化';
+ }
+ }
+ },
+ init:function(player){
+ if(typeof player.storage.rebiluan2!='number') player.storage.rebiluan2=0;
+ },
+ mod:{
+ globalTo:function(from,to,distance){
+ if(typeof to.storage.rebiluan2=='number'){
+ return distance+to.storage.rebiluan2;
+ }
+ }
+ }
+ },
+ rebiluan:{
+ audio:'biluan',
+ trigger:{player:'phaseJieshuBegin'},
+ checkx:function(player){
+ var ng=Math.min(4,game.countPlayer());
+ var nai=0;
+ for(var i=0;i1){
+ nai++;
+ }
+ }
+ }
+ return nai>=2;
+ },
+ filter:function(event,player){
+ return player.countCards('he')&&game.hasPlayer(function(current){
+ return current!=player&&get.distance(current,player)<=1;
+ });
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ player.chooseToDiscard('he',get.prompt2('rebiluan')).set('logSkill','rebiluan').set('check',lib.skill.rebiluan.checkx(player)).set('ai',function(card){
+ if(_status.event.check) return 6-get.value(card);
+ return 0;
+ });
+ "step 1"
+ if(result.bool){
+ player.addSkill('rebiluan2');
+ var ng=Math.min(4,game.countPlayer());
+ player.$damagepop(ng,'unknownx');
+ player.storage.rebiluan2+=ng;
+ player.markSkill('rebiluan2');
+ game.addVideo('storage',player,['rebiluan2',player.storage.rebiluan2]);
+ }
+ },
+ },
+ relixia:{
+ audio:'lixia',
+ trigger:{global:'phaseJieshuBegin'},
+ filter:function(event,player){
+ return event.player.isIn()&&event.player!=player&&!player.inRangeOf(event.player);
+ },
+ forced:true,
+ content:function(){
+ 'step 0'
+ if(trigger.player.isDead()){
+ event._result={bool:true,links:[0]};
+ return;
+ }
+ event.videoId=lib.status.videoId++;
+ var func=function(card,id,bool){
+ var list=[
+ '令自己摸一张牌',
+ '令XXX摸两张牌',
+ '令XXX回复1点体力',
+ ];
+ var choiceList=ui.create.dialog('【礼下】:请选择一至两项','forcebutton');
+ choiceList.videoId=id;
+ for(var i=0;i';
+ str+=list[i];
+ if(i==2&&!bool) str+='';
+ str+='';
+ var next=choiceList.add(str);
+ next.firstChild.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
+ next.firstChild.link=i;
+ for(var j in lib.element.button){
+ next[j]=lib.element.button[j];
+ }
+ choiceList.buttons.add(next.firstChild);
+ }
+ return choiceList;
+ };
+ if(player.isOnline2()){
+ player.send(func,get.translation(trigger.player),event.videoId,trigger.player.isDamaged());
+ }
+ event.dialog=func(get.translation(trigger.player),event.videoId,trigger.player.isDamaged());
+ if(player!=game.me||_status.auto){
+ event.dialog.style.display='none';
+ }
+ var next=player.chooseButton(true,[1,2]);
+ next.set('dialog',event.videoId);
+ next.set('filterButton',function(button){
+ if(button.link==2){
+ return _status.event.bool1;
+ };
+ return true;
+ });
+ next.set('bool1',trigger.player.isDamaged());
+ next.set('ai',function(button){
+ var player=_status.event.player;
+ var event=_status.event.getTrigger();
+ if(button.link&&get.attitude(player,event.player)<=0) return 0;
+ return button.link*Math.random();
+ });
+ "step 1"
+ if(event.videoId!=undefined){
+ if(player.isOnline2()){
+ player.send('closeDialog',event.videoId);
+ }
+ event.dialog.close();
+ }
+ var map=[
+ function(trigger,player,event){
+ player.draw();
+ },
+ function(trigger,player,event){
+ if(!result.links.contains(2)) player.line(trigger.player);
+ trigger.player.draw(2);
+ },
+ function(trigger,player,event){
+ player.line(trigger.player);
+ trigger.player.recover();
+ }
+ ];
+ result.links.sort();
+ for(var i=0;i3;
+ },
+ prompt:function(event,player){
+ var num=game.countPlayer(function(current){
+ if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true;
+ return current.isDamaged();
+ });
+ return '残蚀:是否改为摸'+get.cnNumber(num)+'张牌?';
+ },
+ filter:function(event,player){
+ return !event.numFixed;
+ },
+ content:function(){
+ trigger.changeToZero();
+ var num=game.countPlayer(function(current){
+ if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true;
+ return current.isDamaged();
+ });
+ if(num>0){
+ player.draw(num);
+ }
+ player.addTempSkill('canshi2');
+ }
+ },
+ canshi2:{
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ if(player.countCards('he')==0) return false;
+ var type=get.type(event.card,'trick');
+ return type=='basic'||type=='trick';
+ },
+ autodelay:true,
+ content:function(){
+ player.chooseToDiscard(true,'he');
+ }
+ },
+ chouhai:{
+ audio:2,
+ trigger:{player:'damageBegin3'},
+ forced:true,
+ check:function(){
+ return false;
+ },
+ filter:function(event,player){
+ return player.countCards('h')==0;
+ },
+ content:function(){
+ trigger.num++;
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target,current){
+ if(get.tag(card,'damage')&&target.countCards('h')==0) return [1,-2];
+ }
+ }
+ }
+ },
+ recanshi:{
+ audio:'canshi',
+ trigger:{player:'phaseDrawBegin2'},
+ check:function(event,player){
+ if(player.skipList.contains('phaseUse')||!player.countCards('h',function(card){
+ return get.type(card,'trick')=='trick'&&player.hasUseTarget(card);
+ })) return true;
+ var num=game.countPlayer(function(current){
+ if(player.hasZhuSkill('guiming')&¤t.group=='wu') return true;
+ return current.isDamaged();
+ });
+ return num>1;
+ },
+ prompt:function(event,player){
+ var num=game.countPlayer(function(current){
+ if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true;
+ return current.isDamaged();
+ });
+ return '残蚀:是否多摸'+get.cnNumber(num)+'张牌?';
+ },
+ filter:function(event,player){
+ return !event.numFixed&&game.hasPlayer(function(current){
+ if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true;
+ return current.isDamaged();
+ });
+ },
+ content:function(){
+ var num=game.countPlayer(function(current){
+ if(player.hasZhuSkill('guiming')&¤t.group=='wu'&¤t!=player) return true;
+ return current.isDamaged();
+ });
+ if(num>0){
+ trigger.num+=num;
+ }
+ player.addTempSkill('recanshi2');
+ }
+ },
+ recanshi2:{
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ if(player.countCards('he')==0) return false;
+ if(event.card.name=='sha') return true;
+ return get.type(event.card)=='trick';
+ },
+ autodelay:true,
+ content:function(){
+ player.chooseToDiscard(true,'he');
+ }
+ },
+ rechouhai:{
+ audio:'chouhai',
+ trigger:{player:'damageBegin3'},
+ forced:true,
+ check:function(){
+ return false;
+ },
+ filter:function(event,player){
+ return event.card&&event.card.name=='sha'&&player.countCards('h')==0;
+ },
+ content:function(){
+ trigger.num++;
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target,current){
+ if(card.name=='sha'&&target.countCards('h')==0) return [1,-2];
+ }
+ }
+ }
+ },
+ kunfen:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ locked:function(skill,player){
+ if(!player||!player.storage.kunfen) return true;
+ return false;
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ if(player.storage.kunfen||
+ (get.mode()=='guozhan'&&player.hiddenSkills.contains('kunfen'))){
+ if(!player.storage.kunfen){
+ event.skillHidden=true;
+ }
+ player.chooseBool(get.prompt('kunfen'),'结束阶段开始时,你可以失去1点体力,然后摸两张牌。').set('ai',function(){
+ var player=_status.event.player;
+ if(player.hp>3) return true;
+ if(player.hp==3&&player.countCards('h')<3) return true;
+ if(player.hp==2&&player.countCards('h')==0) return true;
+ return false;
+ });
+ }
+ else{
+ event.forced=true;
+ }
+ "step 1"
+ if(event.forced||result.bool){
+ player.logSkill('kunfen');
+ player.loseHp();
+ }
+ else{
+ event.finish();
+ }
+ "step 2"
+ player.draw(2);
+ },
+ ai:{
+ threaten:1.5
+ }
+ },
+ fengliang:{
+ skillAnimation:true,
+ animationColor:'thunder',
+ unique:true,
+ juexingji:true,
+ audio:2,
+ derivation:'oltiaoxin',
+ trigger:{player:'dying'},
+ //priority:10,
+ forced:true,
+ filter:function(event,player){
+ return !player.storage.kunfen;
+ },
+ content:function(){
+ "step 0"
+ player.loseMaxHp();
+ "step 1"
+ if(player.hp<2){
+ player.recover(2-player.hp);
+ }
+ "step 2"
+ player.addSkill('oltiaoxin');
+ player.storage.kunfen=true;
+ player.awakenSkill('fengliang');
+ },
+ },
+ zhuiji:{
+ mod:{
+ globalFrom:function(from,to){
+ if(from.hp>=to.hp) return -Infinity;
+ }
+ }
+ },
+ oldcihuai:{
+ audio:'cihuai',
+ trigger:{player:'phaseUseBegin'},
+ filter:function(event,player){
+ return player.countCards('h')>0;
+ },
+ check:function(event,player){
+ return !player.countCards('h','sha');
+ },
+ content:function(){
+ player.showHandcards();
+ if(!player.countCards('h','sha')) player.addTempSkill('oldcihuai2');
+ },
+ },
+ oldcihuai2:{
+ group:'oldcihuai3',
+ prompt:'视为使用一张杀',
+ enable:'chooseToUse',
+ viewAs:{name:'sha',isCard:true},
+ filterCard:function(){return false},
+ selectCard:-1,
+ ai:{
+ presha:true,
+ respondSha:true,
+ },
+ },
+ oldcihuai3:{
+ trigger:{
+ player:['loseAfter'],
+ global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter','die'],
+ },
+ silent:true,
+ firstDo:true,
+ filter:function(event,player){
+ if(event.name=='die') return true;
+ var evt=event.getl(player);
+ return evt&&evt.hs&&evt.hs.length>0;
+ },
+ content:function(){
+ player.removeSkill('oldcihuai2');
+ },
+ },
+ cihuai:{
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ filter:function(event,player){
+ return player.countCards('h','sha')==0;
+ },
+ content:function(){
+ "step 0"
+ player.chooseTarget(get.prompt2('cihuai'),function(card,player,target){
+ return player.canUse({name:'sha',isCard:true},target);
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ return get.effect(target,{name:'sha',isCard:true},player,player);
+ });
+ "step 1"
+ if(result.bool){
+ player.logSkill('cihuai');
+ player.showHandcards();
+ player.useCard({name:'sha',isCard:true},result.targets);
+ }
+ },
+ ai:{
+ expose:0.2,
+ }
+ },
+ jilei:{
+ trigger:{player:'damageEnd'},
+ audio:2,
+ direct:true,
+ filter:function(event){
+ return event.source&&event.source.isIn();
+ },
+ content:function(){
+ 'step 0'
+ player.chooseControl('basic','trick','equip','cancel2',function(){
+ var source=_status.event.source;
+ if(get.attitude(_status.event.player,source)>0) return 'cancel2';
+ var list=['basic','trick','equip'].filter(function(name){
+ return (!source.storage.jilei2||!source.storage.jilei2.contains(name));
+ });
+ if(!list.length) return 'cancel2';
+ if(list.contains('trick')&&source.countCards('h',function(card){
+ return get.type(card,source)=='trick'&&source.hasValueTarget(card);
+ })>1) return 'trick';
+ return list[0];
+ }).set('prompt',get.prompt2('jilei',trigger.source)).set('source',trigger.source);
+ 'step 1'
+ if(result.control!='cancel2'){
+ player.logSkill('jilei',trigger.source);
+ player.popup(get.translation(result.control)+'牌');
+ trigger.source.addTempSkill('jilei2',{player:'phaseBegin'});
+ trigger.source.storage.jilei2.add(result.control);
+ trigger.source.updateMarks('jilei2');
+ }
+ },
+ ai:{
+ maixie_defend:true,
+ threaten:0.7
+ }
+ },
+ jilei2:{
+ unique:true,
+ charlotte:true,
+ intro:{
+ content:function(storage){
+ return '不能使用、打出或弃置'+get.translation(storage)+'牌';
+ }
+ },
+ init:function(player,skill){
+ if(!player.storage[skill]) player.storage[skill]=[];
+ },
+ mark:true,
+ onremove:true,
+ mod:{
+ cardDiscardable:function(card,player){
+ if(player.storage.jilei2.contains(get.type(card,'trick'))) return false;
+ },
+ cardEnabled:function(card,player){
+ if(player.storage.jilei2.contains(get.type(card,'trick'))){
+ var hs=player.getCards('h'),cards=[card];
+ if(Array.isArray(card.cards)) cards.addArray(card.cards);
+ for(var i of cards){
+ if(hs.contains(i)) return false;
+ }
+ }
+ },
+ cardRespondable:function(card,player){
+ if(player.storage.jilei2.contains(get.type(card,'trick'))){
+ var hs=player.getCards('h'),cards=[card];
+ if(Array.isArray(card.cards)) cards.addArray(card.cards);
+ for(var i of cards){
+ if(hs.contains(i)) return false;
+ }
+ }
+ },
+ cardSavable:function(card,player){
+ if(player.storage.jilei2.contains(get.type(card,'trick'))){
+ var hs=player.getCards('h'),cards=[card];
+ if(Array.isArray(card.cards)) cards.addArray(card.cards);
+ for(var i of cards){
+ if(hs.contains(i)) return false;
+ }
+ }
+ },
+ },
+ },
+ danlao:{
+ audio:2,
+ filter:function(event,player){
+ return (event.card.name=='sha'||get.type(event.card)=='trick')&&event.targets&&event.targets.length>1;
+ },
+ check:function(event,player){
+ return event.getParent().excluded.contains(player)||get.tag(event.card,'multineg')||get.effect(player,event.card,event.player,player)<=0;
+ },
+ trigger:{target:'useCardToTargeted'},
+ content:function(){
+ trigger.getParent().excluded.add(player);
+ player.draw();
+ },
+ ai:{
+ effect:{
+ target:function(card){
+ if(get.type(card)!='trick') return;
+ if(card.name=='tiesuo') return [0,0];
+ if(card.name=='yihuajiemu') return [0,1];
+ if(get.tag(card,'multineg')) return [0,2];
+ }
+ }
+ }
+ },
+ taichen:{
+ enable:'phaseUse',
+ usable:1,
+ filterTarget:function(card,player,target){
+ return player.canUse('sha',target);
+ },
+ content:function(){
+ "step 0"
+ player.loseHp();
+ "step 1"
+ player.useCard({name:'sha',isCard:true},target,false);
+ },
+ ai:{
+ order:1,
+ result:{
+ target:function(player,target){
+ if(player.hp>2&&player.hp>target.hp&&target.countCards('he')<4){
+ return get.effect(target,{name:'sha'},player,target);
+ }
+ return 0;
+ }
+ }
+ }
+ },
+ naman:{
+ audio:2,
+ trigger:{global:'respondAfter'},
+ filter:function(event,player){
+ if(event.card.name!='sha') return false;
+ if(event.player==player) return false;
+ if(event.cards){
+ for(var i=0;i0;
+ },
+ filterCard:{name:'sha'},
+ check:function(card){return 6-get.value(card)},
+ content:function(){
+ 'step 0'
+ var list=lib.group.filter(function(group){
+ return ['wei','shu','wu','qun'].contains(group)||game.hasPlayer(function(current){
+ return current.group==group;
+ })
+ });
+ if(player.storage.xiemu2) list.removeArray(player.storage.xiemu2);
+ var list2=list.slice(0);
+ list2.sort(function(a,b){
+ return lib.skill.xiemu.count(b)-lib.skill.xiemu.count(a);
+ });
+ player.chooseControl(list).set('prompt','请选择一个势力').set('ai',function(){return _status.event.group}).set('group',list2[0]);
+ 'step 1'
+ player.popup(result.control+2,get.groupnature(result.control));
+ game.log(player,'选择了','#g'+get.translation(result.control+2));
+ player.addTempSkill('xiemu2',{player:'phaseBegin'});
+ player.storage.xiemu2.add(result.control);
+ player.updateMarks('xiemu2');
+ },
+ ai:{
+ order:1,
+ result:{player:1},
+ },
+ count:function(group){
+ var player=_status.event.player;
+ return game.countPlayer(function(current){
+ return current!=player&¤t.group==group&&get.attitude(current,player)<0;
+ });
+ },
+ },
+ xiemu2:{
+ onremove:true,
+ mark:true,
+ forced:true,
+ audio:'xiemu',
+ intro:{
+ content:function(storage){
+ return '已指定'+get.translation(storage)+'势力';
+ },
+ },
+ trigger:{
+ target:'useCardToTargeted'
+ },
+ init:function(player){
+ if(!player.storage.xiemu2) player.storage.xiemu2=[];
+ },
+ filter:function(event,player){
+ if(!player.storage.xiemu2) return false;
+ if(get.color(event.card)!='black') return false;
+ if(!event.player) return false;
+ if(event.player==player||!player.storage.xiemu2.contains(event.player.group)) return false;
+ return true;
+ },
+ content:function(){
+ player.draw(2);
+ },
+ },
+ oldxiemu:{
+ audio:'xiemu',
+ trigger:{target:'useCardToTargeted'},
+ filter:function(event,player){
+ if(get.color(event.card)!='black') return false;
+ if(!event.player) return false;
+ if(event.player==player) return false;
+ if(get.mode()!='guozhan') return false;
+ return player.countCards('h','sha')>0;
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ var next=player.chooseToDiscard('协穆:是否弃置一张杀并摸两张牌?',{name:'sha'});
+ next.set('ai',function(card){
+ return 9-get.value(card);
+ });
+ next.logSkill='xiemu';
+ "step 1"
+ if(result.bool){
+ player.draw(2);
+ }
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target){
+ if(get.color(card)=='black'&&target.countCards('h')>0){
+ return [1,0.5];
+ }
+ }
+ }
+ }
+ },
+ spmengjin:{
+ trigger:{player:'shaBegin'},
+ filter:function(event,player){
+ return event.target.countCards('he')>0;
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ var att=get.attitude(player,trigger.target);
+ player.choosePlayerCard(get.prompt('spmengjin',trigger.target),'he',trigger.target).ai=function(button){
+ var val=get.buttonValue(button);
+ if(att>0) return -val;
+ return val;
+ };
+ "step 1"
+ if(result.bool){
+ trigger.target.discard(result.links);
+ player.logSkill('spmengjin',trigger.target);
+ trigger.target.addTempSkill('mengjin2','shaAfter');
+ }
+ },
+ ai:{
+ expose:0.2
+ }
+ },
+ fenxun_old:{
+ audio:2,
+ trigger:{player:'shaBefore'},
+ direct:true,
+ filter:function(event,player){
+ return event.targets.length==1;
+ },
+ position:'he',
+ content:function(){
+ "step 0"
+ player.chooseCardTarget({
+ filterCard:lib.filter.cardDiscardable,
+ filterTarget:function(card,player,target){
+ var trigger=_status.event.getTrigger();
+ return lib.filter.targetEnabled(trigger.card,player,target)&&target!=trigger.targets[0];
+ },
+ ai1:function(card){
+ return 6-get.value(card);
+ },
+ ai2:function(target){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ return get.effect(target,trigger.card,player,player);
+ },
+ prompt:get.prompt2('fenxun')
+ });
+ "step 1"
+ if(result.bool){
+ player.discard(result.cards);
+ trigger.targets.push(result.targets[0]);
+ player.logSkill('fenxun',result.targets);
+ }
+ }
+ },
+ rezhoufu:{
+ audio:'zhoufu',
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ filterCard:true,
+ filterTarget:function(card,player,target){
+ return target!=player&&!target.getExpansions('rezhoufu2').length;
+ },
+ check:function(card){
+ return 6-get.value(card)
+ },
+ position:'he',
+ discard:false,
+ lose:false,
+ delay:false,
+ content:function(){
+ if(!target.storage.rezhoufu2_markcount) target.storage.rezhoufu2_markcount=0;
+ target.addToExpansion(cards,player,'give').gaintag.add('rezhoufu2');
+ target.addSkill('rezhoufu_judge');
+ },
+ ai:{
+ order:1,
+ result:{
+ target:-1,
+ },
+ },
+ group:['rezhoufu_losehp'],
+ subSkill:{
+ judge:{
+ audio:'zhoufu',
+ trigger:{player:'judgeBefore'},
+ forced:true,
+ charlotte:true,
+ filter:function(event,player){
+ return !event.directresult&&player.getExpansions('rezhoufu2').length;
+ },
+ content:function(){
+ var cards=[player.getExpansions('rezhoufu2')[0]];
+ trigger.directresult=cards[0];
+ },
+ },
+ losehp:{
+ audio:'zhoufu',
+ trigger:{global:'phaseEnd'},
+ forced:true,
+ filter:function(event,player){
+ return game.hasPlayer(function(current){
+ return current.hasHistory('lose',function(evt){
+ if(!evt||!evt.xs||!evt.xs.length) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('rezhoufu2')) return true;
+ }
+ return false;
+ });
+ });
+ },
+ logTarget:function(current){
+ return game.filterPlayer(function(current){
+ return current.hasHistory('lose',function(evt){
+ if(!evt||!evt.xs||!evt.xs.length) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('rezhoufu2')) return true;
+ }
+ return false;
+ });
+ }).sortBySeat();
+ },
+ content:function(){
+ var targets=game.filterPlayer(function(current){
+ return current.hasHistory('lose',function(evt){
+ if(!evt||!evt.xs||!evt.xs.length) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('rezhoufu2')) return true;
+ }
+ return false;
+ });
+ }).sortBySeat();
+ while(targets.length){
+ targets.shift().loseHp();
+ }
+ },
+ },
+ },
+ },
+ rezhoufu2:{
+ intro:{
+ content:'expansion',
+ },
+ },
+ rezhoufu3:{},
+ reyingbing:{
+ audio:'yingbin',
+ trigger:{global:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ var cards=event.player.getExpansions('rezhoufu2');
+ return cards.length&&get.color(cards[0])==get.color(event.card);
+ },
+ logTarget:'player',
+ content:function(){
+ 'step 0'
+ player.draw();
+ 'step 1'
+ trigger.player.storage.rezhoufu2_markcount++;
+ if(trigger.player.storage.rezhoufu2_markcount>=2){
+ delete trigger.player.storage.rezhoufu2_markcount;
+ var cards=trigger.player.getExpansions('rezhoufu2');
+ player.gain(cards,trigger.player,'give','bySelf');
+ }
+ else trigger.player.markSkill('rezhoufu2');
+ },
+ },
+ zhoufu:{
+ audio:2,
+ },
+ yingbin:{
+ audio:2,
+ },
+ kuiwei:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ check:function(event,player){
+ if(player.isTurnedOver()) return true;
+ var num=game.countPlayer(function(current){
+ return current.getEquip(1);
+ });
+ return num>1;
+ },
+ content:function(){
+ "step 0"
+ player.turnOver();
+ "step 1"
+ var num=game.countPlayer(function(current){
+ return current.getEquips(1).length;
+ });
+ player.draw(2+num);
+ player.addSkill('kuiwei2');
+ },
+ ai:{
+ effect:{
+ target:function(card){
+ if(card.name=='guiyoujie') return [0,2];
+ }
+ }
+ }
+ },
+ kuiwei2:{
+ trigger:{player:'phaseDrawBegin'},
+ forced:true,
+ audio:false,
+ content:function(){
+ var num=game.countPlayer(function(current){
+ return current.getEquips(1).length;
+ });
+ if(num>=player.countCards('he')){
+ player.discard(player.getCards('he'));
+ }
+ else if(num){
+ player.chooseToDiscard('he',num,true);
+ }
+ player.removeSkill('kuiwei2');
+ }
+ },
+ yanzheng:{
+ enable:'chooseToUse',
+ audio:2,
+ filter:function(event,player){
+ return player.hp0;
+ },
+ viewAsFilter:function(player){
+ return player.hp0;
+ },
+ filterCard:true,
+ position:'e',
+ viewAs:{name:'wuxie'},
+ prompt:'将一张装备区内的牌当无懈可击使用',
+ check:function(card){return 8-get.equipValue(card)},
+ threaten:1.2
+ },
+ tongji:{
+ global:'tongji_disable',
+ audio:2,
+ trigger:{global:"useCard1"},
+ forced:true,
+ filter:function (event,player){
+ return event.targets.contains(player)&&player!=event.player&&event.card.name=='sha'&&player.hp=0;
+ },
+ logTarget:'target',
+ content:function(){
+ "step 0"
+ player.draw();
+ if(trigger.target!=player){
+ player.chooseCard(true,'he','交给'+get.translation(trigger.target)+'一张牌').set('ai',function(card){
+ if(get.position(card)=='e') return -1;
+ if(card.name=='shan') return 1;
+ if(get.type(card)=='equip') return 0.5;
+ return 0;
+ });
+ }
+ else{
+ event.finish();
+ }
+ "step 1"
+ player.give(result.cards,trigger.target,'give');
+ game.delay();
+ event.card=result.cards[0];
+ "step 2"
+ if(trigger.target.getCards('h').contains(card)&&get.type(card)=='equip'){
+ trigger.target.chooseUseTarget(card);
+ }
+ },
+ ai:{
+ threaten:1.1
+ }
+ },
+ liangzhu:{
+ audio:2,
+ trigger:{global:'recoverAfter'},
+ direct:true,
+ filter:function(event,player){
+ return event.player.isPhaseUsing();
+ },
+ content:function(){
+ 'step 0'
+ if(player==trigger.player){
+ player.chooseControl('摸一张','摸两张','cancel2',function(){
+ return '摸两张';
+ }).set('prompt',get.prompt2('liangzhu'));
+ event.single=true;
+ }
+ else{
+ player.chooseTarget(get.prompt2('liangzhu'),function(card,player,target){
+ return target==_status.event.player||target==_status.event.target;
+ }).set('target',trigger.player).set('ai',function(target){
+ var player=_status.event.player;
+ if(player==target) return 1;
+ return get.attitude(player,target)-1.5;
+ });
+ }
+ 'step 1'
+ if(event.single){
+ if(result.control!='cancel2'){
+ player.logSkill('liangzhu',player);
+ if(result.control=='摸一张'){
+ player.draw();
+ }
+ else{
+ player.draw(2);
+ if(!player.storage.liangzhu) player.storage.liangzhu=[];
+ player.storage.liangzhu.add(player);
+ }
+ }
+ }
+ else if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('liangzhu',target);
+ if(target==player){
+ target.draw();
+ }
+ else{
+ target.draw(2);
+ if(target.storage.liangzhu){
+ target.storage.liangzhu.add(player);
+ }
+ else{
+ target.storage.liangzhu=[player];
+ }
+ }
+ }
+ },
+ ai:{
+ expose:0.1
+ }
+ },
+ fanxiang:{
+ skillAnimation:true,
+ animationColor:'fire',
+ audio:2,
+ unique:true,
+ juexingji:true,
+ forceunique:true,
+ derivation:'xiaoji',
+ trigger:{player:'phaseZhunbeiBegin'},
+ filter:function(event,player){
+ if(player.storage.fanxiang) return false;
+ return game.hasPlayer(function(current){
+ return current.storage.liangzhu&¤t.storage.liangzhu.contains(player)&¤t.isDamaged();
+ });
+ },
+ forced:true,
+ content:function(){
+ player.storage.fanxiang=true;
+ player.gainMaxHp();
+ player.recover();
+ player.removeSkill('liangzhu');
+ player.addSkill('xiaoji');
+ player.awakenSkill('fanxiang');
+ },
+ },
+ mingshi:{
+ audio:2,
+ trigger:{player:'damageBegin3'},
+ direct:true,
+ filter:function(event,player){
+ return event.source&&event.source.hp>player.hp;
+ },
+ content:function(){
+ "step 0"
+ var next=player.chooseToDiscard(get.prompt2('mingshi'),{color:'black'});
+ next.set('ai',function(card){
+ return 9-get.value(card);
+ });
+ next.set('logSkill','mingshi');
+ "step 1"
+ if(result.bool){
+ trigger.num--;
+ }
+ },
+ ai:{
+ threaten:0.8
+ }
+ },
+ lirang:{
+ audio:2,
+ trigger:{
+ player:'loseAfter',
+ global:'loseAsyncAfter',
+ },
+ filter:function(event,player){
+ if(!game.hasPlayer(current=>current!=player)) return false;
+ if(event.type!='discard'||event.getlx===false) return false;
+ var evt=event.getl(player);
+ if(!evt||!evt.cards2) return false;
+ for(var i=0;i1;
+ });
+ }
+ player.chooseButton(['礼让:是否分配本次弃置的牌?',event.cards],
+ [1,event.cards.length]).set('ai',function(button){
+ if(_status.event.goon&&ui.selected.buttons.length==0) return 1+Math.abs(get.value(button.link));
+ return 0;
+ }).set('goon',goon).setHiddenSkill('lirang');
+ 'step 2'
+ if(result.bool){
+ event.cards.removeArray(result.links);
+ event.togive=result.links.slice(0);
+ player.chooseTarget('选择一名其他角色获得'+get.translation(result.links),true,lib.filter.notMe).set('ai',function(target){
+ var att=get.attitude(_status.event.player,target);
+ if(_status.event.enemy){
+ return -att;
+ }
+ else if(att>0){
+ return att/(1+target.countCards('h'));
+ }
+ else{
+ return att/100;
+ }
+ }).set('enemy',get.value(event.togive[0],player,'raw')<0);
+ }
+ else event.goto(4);
+ 'step 3'
+ if(result.targets.length){
+ var id=result.targets[0].playerid,map=event.given_map;
+ if(!map[id]) map[id]=[];
+ map[id].addArray(event.togive);
+ }
+ if(cards.length>0) event.goto(1);
+ 'step 4'
+ if(_status.connectMode){
+ game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
+ }
+ var list=[],targets=[];
+ for(var i in event.given_map){
+ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
+ list.push([source,event.given_map[i]]);
+ targets.push(source);
+ }
+ if(targets.length){
+ player.logSkill('lirang',targets);
+ game.loseAsync({
+ gain_list:list,
+ giver:player,
+ animate:'gain2',
+ }).setContent('gaincardMultiple');
+ }
+ },
+ ai:{
+ expose:0.1,
+ effect:{
+ target:function(card,player,target,current){
+ if(target.hasFriend()&&get.tag(card,'discard')){
+ if(current<0) return 0;
+ return [1,1];
+ }
+ }
+ }
+ }
+ },
+ moukui:{
+ trigger:{player:'useCardToPlayered'},
+ direct:true,
+ filter:function(event,player){
+ return event.card.name=='sha';
+ },
+ audio:2,
+ content:function(){
+ "step 0"
+ var controls=['draw_card'];
+ if(trigger.target.countCards('he')){
+ controls.push('discard_card');
+ }
+ controls.push('cancel');
+ player.chooseControl(controls).set('ai',function(){
+ var trigger=_status.event.getTrigger();
+ if(trigger.target.countCards('he')&&get.attitude(_status.event.player,trigger.target)<0){
+ return 'discard_card';
+ }
+ else{
+ return 'draw_card';
+ }
+ }).set('prompt',get.prompt2('moukui'));
+ "step 1"
+ if(result.control=='draw_card'){
+ player.draw();
+ player.logSkill('moukui');
+ }
+ else if(result.control=='discard_card'&&trigger.target.countCards('he')){
+ player.discardPlayerCard(trigger.target,'he',true).logSkill=['moukui',trigger.target];
+ }
+ else event.finish();
+ "step 2"
+ player.addTempSkill('moukui2','shaEnd');
+ },
+ ai:{
+ expose:0.1
+ }
+ },
+ moukui2:{
+ audio:false,
+ trigger:{player:'shaMiss'},
+ forced:true,
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ content:function(){
+ trigger.target.discardPlayerCard(player,true);
+ }
+ },
+ shenxian:{
+ audio:2,
+ trigger:{global:['loseAfter','loseAsyncAfter']},
+ filter:function(event,player){
+ if(event.type!='discard'||_status.currentPhase==player||event.getlx===false) return false;
+ if(event.name=='lose'&&event.player==player) return false;
+ if(player.hasSkill('shenxian2')) return false;
+ var cards=event.cards.slice(0);
+ var evt=event.getl(player);
+ if(evt&&evt.cards) cards.removeArray(evt.cards);
+ for(var i=0;iplayer.storage.qiangwu) return Infinity;
+ }
+ },
+ trigger:{player:'useCard1'},
+ filter:function(event,player){
+ if(_status.currentPhase==player&&event.card.name=='sha'&&
+ get.number(event.card)>player.storage.qiangwu&&event.addCount!==false) return true;
+ return false;
+ },
+ forced:true,
+ popup:false,
+ firstDo:true,
+ content:function(){
+ trigger.addCount=false;
+ if(player.stat[player.stat.length-1].card.sha>0){
+ player.stat[player.stat.length-1].card.sha--;
+ }
+ },
+ },
+ zhendu:{
+ audio:2,
+ trigger:{global:'phaseUseBegin'},
+ filter:function(event,player){
+ return /*(get.mode()!='guozhan'||event.player!=player)&&*/event.player.isIn()&&player.countCards('h')>0&&event.player.hasUseTarget({name:'jiu'},null,true);
+ },
+ direct:true,
+ preHidden:true,
+ content:function(){
+ "step 0"
+ var nono=(Math.abs(get.attitude(player,trigger.player))<3);
+ if(player==trigger.player||get.damageEffect(trigger.player,player,player)<=0||!trigger.player.hasUseTarget({name:'jiu'},null,true)){
+ nono=true
+ }
+ else if(trigger.player.hp>2){
+ nono=true;
+ }
+ else if(trigger.player.hp>1&&player.countCards('h')<3&&(trigger.player.canUse('sha',player)&&!player.countCards('h','shan')&&trigger.player.countCards('h')>=3)){
+ nono=true;
+ }
+ var next=player.chooseToDiscard(get.prompt2('zhendu',trigger.player));
+ next.set('ai',function(card){
+ if(_status.event.nono) return -1;
+ return 7-get.useful(card);
+ });
+ next.set('logSkill',['zhendu',trigger.player]);
+ next.set('nono',nono);
+ next.setHiddenSkill('zhendu');
+ "step 1"
+ if(result.bool){
+ trigger.player.chooseUseTarget({name:'jiu'},true,'noTargetDelay','nodelayx');
+ }
+ else{
+ event.finish();
+ }
+ "step 2"
+ if(result.bool&&trigger.player!=player) trigger.player.damage();
+ },
+ ai:{
+ threaten:2,
+ expose:0.3
+ }
+ },
+ qiluan:{
+ audio:'qiluan2',
+ preHidden:true,
+ trigger:{global:'phaseEnd'},
+ frequent:true,
+ filter:function(event,player){
+ return game.hasPlayer2(function(current){
+ return current.getStat('kill')>0
+ });
+ },
+ prompt:function(event,player){
+ var num=game.countPlayer2(function(current){
+ return (current.getStat('kill')||0)*(current==player?3:1);
+ });
+ return get.prompt('qiluan')+'(可摸'+get.cnNumber(num)+'张牌)';
+ },
+ content:function(){
+ //if(get.mode()=='guozhan'){
+ // player.draw(3);
+ //}
+ //else{
+ player.draw(game.countPlayer2(function(current){
+ return (current.getStat('kill')||0)*(current==player?3:1);
+ }));
+ //}
+ },
+ subSkill:{
+ draw:{
+ trigger:{global:'dieAfter'},
+ frequent:true,
+ filter:function(event,player){
+ return /*get.mode()!='guozhan'&&*/player!=event.source;
+ },
+ content:function(){player.draw()},
+ },
+ },
+ },
+ qiluan2:{
+ audio:2,
+ },
+ zniaoxiang:{
+ shaRelated:true,
+ audio:2,
+ trigger:{player:'useCardToPlayered'},
+ forced:true,
+ filter:function(event,player){
+ return event.card.name=='sha'&&!event.getParent().directHit.contains(event.target);
+ },
+ //priority:-1,
+ logTarget:'target',
+ content:function(){
+ var id=trigger.target.playerid;
+ var map=trigger.getParent().customArgs;
+ if(!map[id]) map[id]={};
+ if(typeof map[id].shanRequired=='number'){
+ map[id].shanRequired++;
+ }
+ else{
+ map[id].shanRequired=2;
+ }
+ }
+ },
+ shangyi:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filterTarget:function(card,player,target){
+ return player!=target&&target.countCards('h');
+ },
+ content:function(){
+ "step 0"
+ player.chooseCardButton(target,target.getCards('h')).set('filterButton',function(button){
+ return get.color(button.link)=='black';
+ });
+ "step 1"
+ if(result.bool){
+ target.discard(result.links[0]);
+ }
+ },
+ ai:{
+ order:11,
+ result:{
+ target:function(player,target){
+ return -target.countCards('h');
+ }
+ },
+ threaten:1.1
+ },
+ },
+ shengxi:{
+ trigger:{player:'phaseDiscardBegin'},
+ frequent:true,
+ filter:function(event,player){
+ return !player.getStat('damage');
+ },
+ content:function(){
+ player.draw(2);
+ },
+ audio:2,
+ audioname:['liushan']
+ },
+ shoucheng:{
+ trigger:{
+ global:['equipAfter','addJudgeAfter','loseAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ audio:2,
+ direct:true,
+ filter:function(event,player){
+ return game.hasPlayer(function(current){
+ if(current==_status.currentPhase) return false;
+ var evt=event.getl(current);
+ return evt&&evt.hs&&evt.hs.length&¤t.countCards('h')==0;
+ });
+ },
+ content:function(){
+ "step 0"
+ event.list=game.filterPlayer(function(current){
+ if(current==_status.currentPhase) return false;
+ var evt=trigger.getl(current);
+ return evt&&evt.hs&&evt.hs.length;
+ }).sortBySeat(_status.currentPhase);
+ "step 1"
+ var target=event.list.shift();
+ event.target=target;
+ if(target.isIn()&&target.countCards('h')==0){
+ player.chooseBool(get.prompt2('shoucheng',target)).set('ai',function(){
+ return get.attitude(_status.event.player,_status.event.getParent().target)>0;
+ });
+ }
+ else event.goto(3);
+ "step 2"
+ if(result.bool){
+ player.logSkill(event.name,target);
+ target.draw();
+ }
+ "step 3"
+ if(event.list.length) event.goto(1);
+ },
+ ai:{
+ threaten:1.3,
+ expose:0.2,
+ noh:true,
+ }
+ },
+ hengzheng:{
+ audio:2,
+ trigger:{player:'phaseDrawBegin1'},
+ preHidden:true,
+ filter:function(event,player){
+ return !event.numFixed&&(player.hp==1||player.countCards('h')==0);
+ },
+ check:function(event,player){
+ var num=game.countPlayer(function(current){
+ if(current.countCards('he')&¤t!=player&&get.attitude(player,current)<=0){
+ return true;
+ }
+ if(current.countCards('j')&¤t!=player&&get.attitude(player,current)>0){
+ return true;
+ }
+ });
+ return num>=2;
+ },
+ content:function(){
+ "step 0"
+ var targets=game.filterPlayer();
+ targets.remove(player);
+ targets.sort(lib.sort.seat);
+ event.targets=targets;
+ event.num=0;
+ trigger.changeToZero();
+ player.line(targets,'green');
+ "step 1"
+ if(num【勇决】每当其他角色于回合内使用一张杀,若目标不是你,你可以获得之,每回合限一次
');
+ "step 1"
+ player.turnOver();
+ },
+ intro:{
+ content:'limited'
+ },
+ ai:{
+ order:4,
+ result:{
+ target:function(player,target){
+ if(target.isMin()) return 0;
+ if(player.hp>1){
+ if(game.phaseNumber2) return 0;
+ if(get.attitude(player,target)<5) return 0;
+ }
+ if(get.attitude(player,target)<5) return 0;
+ if(target.hp==1&&target.maxHp>2) return 0.2;
+ if(target==game.me) return 1.2;
+ return 1;
+ }
+ },
+ expose:0.5,
+ threaten:1.5
+ }
+ },
+ fenming:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ check:function(event,player){
+ var num=game.countPlayer(function(current){
+ if(current.isLinked()&¤t.countCards('he')){
+ return get.effect(current,{name:'guohe_copy2'},player,player);
+ }
+ });
+ return num<0;
+ },
+ filter:function(event,player){
+ return player.isLinked();
+ },
+ preHidden:true,
+ prompt:'是否发动【奋命】?',
+ logTarget:function(event,player){
+ return game.filterPlayer(function(current){
+ if(current.isLinked()&¤t.countCards('he')){
+ return true;
+ }
+ });
+ },
+ content:function(){
+ "step 0"
+ event.targets=game.filterPlayer(function(current){
+ if(current.isLinked()&¤t.countCards('he')){
+ return true;
+ }
+ });
+ event.num=0;
+ event.targets.sort(lib.sort.seat);
+ "step 1"
+ if(event.num=0);
+ trigger.player.chooseToDiscard('he','弃置一张装备牌并令'+get.translation(player)+'摸一张牌,或受到一点伤害',{type:'equip'}).set('ai',function(card){
+ if(_status.event.nono){
+ return 0;
+ }
+ if(_status.event.player.hp==1) return 10-get.value(card);
+ return 9-get.value(card);
+ }).set('nono',nono);
+ }
+ else{
+ event.finish();
+ }
+ "step 2"
+ if(result.bool){
+ player.draw();
+ }
+ else{
+ trigger.player.damage();
+ }
+ },
+ ai:{
+ expose:0.3,
+ threaten:1.3
+ }
+ },
+ suishi:{
+ audio:2,
+ trigger:{global:'dying'},
+ forced:true,
+ popup:false,
+ //priority:12,
+ check:function(){
+ return false;
+ },
+ filter:function(event,player){
+ return event.player!=player&&event.parent.name=='damage'&&event.parent.source&&event.parent.source!=event.player;
+ },
+ content:function(){
+ 'step 0'
+ var str;
+ if(trigger.parent.source==player){
+ str='随势:是否摸一张牌?';
+ }
+ else{
+ str='随势:是否令'+get.translation(player)+'摸一张牌?'
+ }
+ trigger.parent.source.chooseBool(str).set('ai',function(){
+ return get.attitude(_status.event.player,_status.event.target)>0;
+ }).set('target',player);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('suishi');
+ trigger.parent.source.line(player,'green');
+ player.draw();
+ }
+ },
+ group:'suishi2'
+ },
+ suishi2:{
+ trigger:{global:'dieAfter'},
+ forced:true,
+ popup:false,
+ check:function(){
+ return false;
+ },
+ filter:function(event,player){
+ return event.player!=player&&event.source&&event.source!=player&&event.source!=event.player;
+ },
+ content:function(){
+ 'step 0'
+ var str;
+ if(trigger.source==player){
+ str='随势:是否流失一点体力?';
+ }
+ else{
+ str='随势:是否令'+get.translation(player)+'流失一点体力?'
+ }
+ trigger.source.chooseBool(str).set('ai',function(){
+ return get.attitude(_status.event.player,_status.event.target)<0;
+ }).set('target',player);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('suishi');
+ trigger.source.line(player,'green');
+ player.loseHp();
+ }
+ },
+ },
+ sijian:{
+ trigger:{
+ player:'loseAfter',
+ global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ direct:true,
+ audio:2,
+ preHidden:true,
+ filter:function(event,player){
+ if(player.countCards('h')) return false;
+ if(event.name=='gain'&&event.player==player) return false;
+ var evt=event.getl(player);
+ return evt&&evt.hs&&evt.hs.length>0;
+ },
+ content:function(){
+ "step 0"
+ player.chooseTarget(get.prompt('sijian'),'弃置一名其他角色的一张牌',function(card,player,target){
+ return player!=target&&target.countCards('he')>0;
+ }).set('ai',function(target){
+ return -get.attitude(_status.event.player,target);
+ }).setHiddenSkill(event.name);
+ "step 1"
+ if(result.bool){
+ player.logSkill('sijian',result.targets);
+ event.target=result.targets[0];
+ player.discardPlayerCard(event.target,true);
+ }
+ else{
+ event.finish();
+ }
+ },
+ ai:{
+ expose:0.2,
+ }
+ },
+ quji:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ position:'he',
+ filterCard:true,
+ selectCard:function(){
+ var player=_status.event.player;
+ return player.getDamagedHp();
+ },
+ filterTarget:function(card,player,target){
+ return target.hp-1;
+ if(num==2) return att>0;
+ return att>1;
+ }
+ return false;
+ },
+ content:function(){
+ "step 0"
+ event.target=player;
+ event.player=trigger.player;
+ var prompt;
+ if(player==event.player) prompt='是否发动【郡兵】摸一张牌?';
+ else prompt=('###是否对'+get.translation(event.target)+'发动【郡兵】?###'+(event.player==event.target?'摸一张牌':'摸一张牌,将所有手牌交给该角色,然后该角色交给你等量的手牌'));
+ event.player.chooseBool(prompt).set('choice',lib.skill.junbing.checkx(event.target,event.player));
+ "step 1"
+ if(!result.bool){event.finish();return}
+ target.logSkill('junbing',player);
+ if(player==target) event.finish();
+ player.draw();
+ "step 2"
+ var cards=player.getCards('h');
+ player.give(cards,target);
+ event.num=cards.length;
+ "step 3"
+ var he=target.getCards('he');
+ if(!he.length) event.finish();
+ else if(he.length<=num) event._result={cards:he};
+ else target.chooseCard('选择还给'+get.translation(player)+'的牌',true,event.num,'he');
+ "step 4"
+ target.give(result.cards,player);
+ },
+ audio:2,
+ },
+ xiongyi:{
+ skillAnimation:true,
+ animationColor:'gray',
+ unique:true,
+ enable:'phaseUse',
+ audio:2,
+ limited:true,
+ filterTarget:function(card,player,target){
+ if(get.mode()=='guozhan'){
+ if(player==target) return true;
+ if(player.identity=='ye') return false;
+ if(player.identity=='unknown'){
+ if(_status.yeidentity.contains(player._group)){
+ return false;
+ }
+ else if(get.zhu(player)||get.population(player._group)+1<=get.population()/2){
+ return player._group==target.identity;
+ }
+ else{
+ return false;
+ }
+ }
+ return player.identity==target.identity;
+ }
+ else{
+ return true;
+ }
+ },
+ multitarget:true,
+ multiline:true,
+ selectTarget:function(){
+ if(get.mode()=='guozhan') return -1;
+ return [1,Infinity];
+ },
+ content:function(){
+ "step 0"
+ player.awakenSkill('xiongyi');
+ game.asyncDraw(targets,3);
+ "step 1"
+ if(player.isDamaged()){
+ if(get.mode()=='guozhan'){
+ if(player.isMinor(true)){
+ player.recover();
+ }
+ }
+ else if(player.isMinHp()){
+ player.recover();
+ }
+ }
+ },
+ ai:{
+ order:1,
+ result:{
+ target:function(player){
+ var num=player.countCards('h');
+ if(player.hp==1) return 1;
+ if(player.hp==2&&num<=2) return 1;
+ if(player.hp==3&&num<=1) return 1;
+ if(game.phaseNumber1){
+ event.num--;
+ event.goto(1);
+ }
+ }
+ },
+ ai:{
+ threaten:0.8,
+ expose:0.1
+ }
+ },
+ shushen:{
+ audio:2,
+ trigger:{player:'recoverAfter'},
+ direct:true,
+ content:function(){
+ "step 0"
+ event.count=trigger.num;
+ "step 1"
+ player.chooseTarget(get.prompt('shushen'),'令一名其他角色选择摸两张牌或回复1点体力',function(card,player,target){
+ return target!=player;
+ }).set('ai',function(target){
+ return get.attitude(_status.event.player,target);
+ });
+ "step 2"
+ if(result.bool){
+ event.count--;
+ player.logSkill('shushen',result.targets);
+ result.targets[0].chooseDrawRecover(2,true);
+ if(event.count) event.goto(1);
+ }
+ },
+ ai:{
+ threaten:0.8,
+ expose:0.1
+ }
+ },
+ shenzhi:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ check:function(event,player){
+ if(player.hp>2) return false;
+ var cards=player.getCards('h');
+ if(cards.length3) return false;
+ for(var i=0;i7||get.tag(cards[i],'recover')>=1) return false;
+ }
+ return true;
+ },
+ filter:function(event,player){
+ return player.countCards('h')>0;
+ },
+ preHidden:true,
+ content:function(){
+ "step 0"
+ var cards=player.getCards('h');
+ event.bool=cards.length>=player.hp;
+ player.discard(cards);
+ "step 1"
+ if(event.bool){
+ player.recover();
+ }
+ }
+ },
+ wuji:{
+ skillAnimation:true,
+ animationColor:'orange',
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ forced:true,
+ unique:true,
+ juexingji:true,
+ filter:function(event,player){
+ return player.getStat('damage')>=3&&!player.storage.wuji;
+ },
+ content:function(){
+ "step 0"
+ player.removeSkill('huxiao');
+ player.gainMaxHp();
+ "step 1"
+ player.recover();
+ player.awakenSkill('wuji');
+ player.storage.wuji=true;
+
+ var card=get.cardPile('qinglong','field');
+ if(card){
+ player.gain(card,'gain2','log');
+ }
+ }
+ },
+ xueji_old:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return player.hp0;
+ },
+ filterTarget:function(card,player,target){
+ return player!=target&&get.distance(player,target,'attack')<=1;
+ },
+ selectTarget:function(){
+ return [1,_status.event.player.maxHp-_status.event.player.hp];
+ },
+ position:'he',
+ filterCard:function(card){
+ return get.color(card)=='red';
+ },
+ check:function(card){
+ return 8-get.useful(card);
+ },
+ content:function(){
+ "step 0"
+ target.damage();
+ "step 1"
+ target.draw();
+ },
+ ai:{
+ order:7,
+ result:{
+ target:function(player,target){
+ return get.damageEffect(target,player);
+ }
+ },
+ threaten:function(player,target){
+ if(target.hp==1) return 2;
+ if(target.hp==2) return 1.5;
+ return 0.5;
+ },
+ maixie:true,
+ effect:{
+ target:function(card,player,target){
+ if(get.tag(card,'damage')){
+ if(target.hp==target.maxHp&&target.hasFriend()) return [0,1];
+ }
+ if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
+ }
+ }
+ }
+ },
+ xueji:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ return player.countCards('he',{color:'red'})>0;
+ },
+ filterTarget:true,
+ selectTarget:function(){
+ var player=_status.event.player
+ return [1,Math.max(1,player.getDamagedHp())];
+ },
+ position:'he',
+ filterCard:{color:'red'},
+ check:function(card){
+ return 8-get.value(card);
+ },
+ multitarget:true,
+ multiline:true,
+ line:'fire',
+ content:function(){
+ 'step 0'
+ event.delay=false;
+ for(var i=0;i=0;i--){
+ ui.cardPile.insertBefore(cards[i].fix(),ui.cardPile.firstChild);
+ }
+ var aozhan=player.hasSkill('aozhan');
+ player.chooseButton(['傲才:选择要'+(evt.name=='chooseToUse'?'使用':'打出')+'的牌',cards]).set('filterButton',function(button){
+ return _status.event.cards.contains(button.link);
+ }).set('cards',cards.filter(function(card){
+ if(aozhan&&card.name=='tao'){
+ return evt.filterCard({
+ name:'sha',isCard:true,cards:[card],
+ },evt.player,evt)||evt.filterCard({
+ name:'shan',isCard:true,cards:[card],
+ },evt.player,evt);
+ }
+ return evt.filterCard(card,evt.player,evt);
+ })).set('ai',function(button){
+ var evt=_status.event.getParent(3);
+ if(evt&&evt.ai){
+ var tmp=_status.event;
+ _status.event=evt;
+ var result=(evt.ai||event.ai1)(button.link,_status.event.player,evt);
+ _status.event=tmp;
+ return result;
+ }
+ return 1;
+ });
+ 'step 1'
+ var evt=event.getParent(2);
+ if(result.bool&&result.links&&result.links.length){
+ var name=result.links[0].name,aozhan=(player.hasSkill('aozhan')&&name=='tao');
+ if(aozhan){
+ name=evt.filterCard({
+ name:'sha',isCard:true,cards:[card],
+ },evt.player,evt)?'sha':'shan';
+ }
+ if(evt.name=='chooseToUse'){
+ game.broadcastAll(function(result,name){
+ lib.skill.aocai_backup.viewAs={name:name,cards:[result],isCard:true};
+ lib.skill.aocai_backup.prompt='选择'+get.translation(result)+'的目标';
+ },result.links[0],name);
+ evt.set('_backupevent','aocai_backup');
+ evt.backup('aocai_backup');
+ }
+ else{
+ delete evt.result.skill;
+ delete evt.result.used;
+ evt.result.card=get.autoViewAs(result.links[0]);
+ if(aozhan) evt.result.card.name=name;
+ evt.result.cards=[result.links[0]];
+ evt.redo();
+ return;
+ }
+ }
+ evt.goto(0);
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target,effect){
+ if(get.tag(card,'respondShan')) return 0.7;
+ if(get.tag(card,'respondSha')) return 0.7;
+ }
+ },
+ order:11,
+ respondShan:true,
+ respondSha:true,
+ result:{
+ player:function(player){
+ if(_status.event.dying) return get.attitude(player,_status.event.dying);
+ return 1;
+ }
+ }
+ }
+ },
+ aocai_backup:{
+ sourceSkill:'aocai',
+ precontent:function(){
+ delete event.result.skill;
+ var name=event.result.card.name;
+ event.result.cards=event.result.card.cards;
+ event.result.card=get.autoViewAs(event.result.cards[0]);
+ event.result.card.name=name;
+ },
+ filterCard:function(){return false},
+ selectCard:-1,
+ },
+ hongyuan:{
+ trigger:{player:'phaseDrawBegin2'},
+ direct:true,
+ audio:2,
+ filter:function(event,player){
+ return !event.numFixed&&event.num>0;
+ },
+ content:function(){
+ "step 0"
+ var check;
+ if(player.countCards('h')==0){
+ check=false;
+ }
+ else{
+ check=(game.countPlayer(function(current){
+ return player!=current&&get.attitude(player,current)>1;
+ })>=2);
+ }
+ if(get.is.versus()){
+ event.versus=true;
+ player.chooseBool(get.prompt2('hongyuan')).ai=function(){
+ return game.countPlayer(function(current){
+ return player.side==current.side;
+ })>2;
+ };
+ }
+ else{
+ player.chooseTarget(get.prompt2('hongyuan'),[1,2],function(card,player,target){
+ return player!=target;
+ },function(target){
+ if(!_status.event.check) return 0;
+ return get.attitude(_status.event.player,target);
+ }).set('check',check);
+ }
+ "step 1"
+ if(result.bool){
+ var targets;
+ if(event.versus){
+ targets=game.filterPlayer(function(current){
+ return current!=player&¤t.side==player.side;
+ });
+ }
+ else{
+ targets=result.targets;
+ }
+ player.logSkill('hongyuan',targets);
+ game.asyncDraw(targets);
+ trigger.num--;
+ }
+ },
+ },
+ huanshi:{
+ audio:2,
+ trigger:{global:'judge'},
+ filter:function(event,player){
+ return player.countCards('he')>0;
+ },
+ logTarget:'player',
+ check:function(event,player){
+ if(get.attitude(player,event.player)<=0) return false;
+ var cards=player.getCards('he');
+ var judge=event.judge(event.player.judging[0]);
+ for(var i=0;ijudge) return true;
+ if(_status.currentPhase!=player&&judge2==judge&&get.color(cards[i])=='red'&&get.useful(cards[i])<5) return true;
+ }
+ return false;
+ },
+ content:function(){
+ "step 0"
+ var target=trigger.player;
+ var judge=trigger.judge(target.judging[0]);
+ var attitude=get.attitude(target,player);
+ target.choosePlayerCard('请选择代替判定的牌','he','visible',true,player).set('ai',function(button){
+ var card=button.link;
+ var judge=_status.event.judge;
+ var attitude=_status.event.attitude;
+ var result=trigger.judge(card)-judge;
+ var player=_status.event.player;
+ if(result>0){
+ return 20+result;
+ }
+ if(result==0){
+ if(_status.currentPhase==player) return 0;
+ if(attitude>=0){
+ return get.color(card)=='red'?7:0-get.value(card);
+ }
+ else{
+ return get.color(card)=='black'?10:0+get.value(card);
+ }
+ }
+ if(attitude>=0){
+ return get.color(card)=='red'?0:-10+result;
+ }
+ else{
+ return get.color(card)=='black'?0:-10+result;
+ }
+ }).set('filterButton',function(button){
+ var player=_status.event.target;
+ var card=button.link;
+ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
+ if(mod2!='unchanged') return mod2;
+ var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
+ if(mod!='unchanged') return mod;
+ return true;
+ }).set('judge',judge).set('attitude',attitude);
+ "step 1"
+ if(result.bool){
+ event.card=result.links[0];
+ player.respond(event.card,'highlight','noOrdering').nopopup=true;
+ }
+ else{
+ event.finish();
+ }
+ "step 2"
+ if(result.bool){
+ if(trigger.player.judging[0].clone){
+ trigger.player.judging[0].clone.classList.remove('thrownhighlight');
+ game.broadcast(function(card){
+ if(card.clone){
+ card.clone.classList.remove('thrownhighlight');
+ }
+ },trigger.player.judging[0]);
+ game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone]));
+ }
+ game.cardsDiscard(trigger.player.judging[0]);
+ trigger.player.judging[0]=event.card;
+ trigger.orderingCards.add(event.card);
+ game.log(trigger.player,'的判定牌改为',event.card);
game.delay(2);
}
},
@@ -12554,830 +21225,121 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
- refankui:{
+ mingzhe:{
audio:2,
- trigger:{player:'damageEnd'},
- direct:true,
+ trigger:{
+ player:['useCard','respond','loseAfter'],
+ global:'loseAsyncAfter',
+ },
+ frequent:true,
filter:function(event,player){
- return (event.source&&event.source.countGainableCards(player,event.source!=player?'he':'e')&&event.num>0);
- },
- content:function(){
- "step 0"
- event.count=trigger.num;
- "step 1"
- event.count--;
- player.gainPlayerCard(get.prompt('refankui',trigger.source),trigger.source,get.buttonValue,trigger.source!=player?'he':'e').set('logSkill',[event.name,trigger.source]);
- "step 2"
- if(result.bool&&event.count>0&&trigger.source.countGainableCards(player,trigger.source!=player?'he':'e')>0&&player.hasSkill(event.name)) event.goto(1);
- },
- ai:{
- maixie_defend:true,
- effect:{
- target:function(card,player,target){
- if(player.countCards('he')>1&&get.tag(card,'damage')){
- if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5];
- if(get.attitude(target,player)<0) return [1,1];
- }
+ if(player==_status.currentPhase) return false;
+ if(event.name.indexOf('lose')!=0) return get.color(event.card)=='red';
+ if(event.type!='discard') return false;
+ var evt=event.getl(player);
+ if(evt&&evt.cards2){
+ for(var i=0;i0);
- },
- check:function(event,player){
- return (get.attitude(player,event.source)<=0);
- },
- logTarget:'source',
- preHidden:true,
- content:function(){
- "step 0"
- event.num=trigger.num;
- if(get.mode()=='guozhan') event.num=1;
- "step 1"
- player.judge(function(card){
- if(get.color(card)=='red') return 1;
- return 0;
- });
- "step 2"
- if(result.color=='black'){
- if(trigger.source.countCards('he')){
- player.discardPlayerCard(trigger.source,'he',true);
- }
- }
- else if(trigger.source.isIn()){
- trigger.source.damage();
- }
- event.num--;
- if(event.num>0&&player.hasSkill('reganglie')){
- player.chooseBool(get.prompt2('reganglie'));
- }
- else{
- event.finish();
- }
- "step 3"
- if(result.bool){
- player.logSkill('reganglie',trigger.source);
- event.goto(1);
- }
- },
- ai:{
- maixie_defend:true,
- expose:0.4
- }
- },
- qinxue:{
- skillAnimation:true,
- animationColor:'wood',
- audio:2,
- unique:true,
- juexingji:true,
- derivation:'gongxin',
- trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
- forced:true,
- filter:function(event,player){
- if(player.countCards('h')>=player.hp+2) return true;
return false;
},
- content:function(){
- player.awakenSkill('qinxue');
- player.loseMaxHp();
- player.chooseDrawRecover(2,true);
- player.addSkill('gongxin');
- }
- },
- qingjian:{
- audio:2,
- unique:true,
- trigger:{player:'gainAfter'},
- direct:true,
- usable:4,
- filter:function(event,player){
- var evt=event.getParent('phaseDraw');
- if(evt&&evt.player==player) return false;
- return event.getg(player).length>0;
- },
content:function(){
"step 0"
- event.cards=trigger.getg(player);
+ event.count=1;
+ if(trigger.name.indexOf('lose')==0){
+ event.count=0;
+ var evt=trigger.getl(player);
+ for(var i=0;i0) return -1;
- if(card.name=='du') return 20;
- return (_status.event.player.countCards('h')-_status.event.player.hp);
- },
- ai2:function(target){
- var att=get.attitude(_status.event.player,target);
- if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
- if(target.hasSkillTag('nodu')) return 0;
- return 1-att;
- }
- if(target.countCards('h')>_status.event.player.countCards('h')) return 0;
- return att-4;
- },
- prompt:'请选择要送人的卡牌'
- });
+ player.draw();
+ event.count--;
"step 2"
- if(result.bool){
- player.storage.qingjian++;
- player.logSkill('qingjian',result.targets);
- result.targets[0].gain(result.cards,player,'give');
- for(var i=0;i0;
- },
- filterTarget:function(card,player,target){
- return player!=target;
- },
- filterCard:true,
- check:function(card){
- return 8-get.value(card);
- },
- discard:false,
- lose:false,
- delay:false,
- content:function(){
- "step 0"
- target.storage.refanjian=cards[0];
- player.give(cards[0],target);
- "step 1"
- var suit=get.suit(target.storage.refanjian);
- if(!target.countCards('h')) event._result={control:'refanjian_hp'};
- else target.chooseControl('refanjian_card','refanjian_hp').ai=function(event,player){
- var cards=player.getCards('he',{suit:get.suit(player.storage.refanjian)});
- if(cards.length==1) return 0;
- if(cards.length>=2){
- for(var i=0;i=8) return 1;
- }
- if(cards.length>2&&player.hp>2) return 1;
- if(cards.length>3) return 1;
- return 0;
- }
- "step 2"
- if(result.control=='refanjian_card'){
- target.showHandcards();
- }
- else{
- target.loseHp();
- event.finish();
- }
- "step 3"
- var suit=get.suit(target.storage.refanjian);
- target.discard(target.getCards('he',function(i){
- return get.suit(i)==suit&&lib.filter.cardDiscardable(i,target,'refanjian');
- }));
- delete target.storage.refanjian;
- },
- ai:{
- order:9,
- result:{
- target:function(player,target){
- return -target.countCards('he')-(player.countCards('h','du')?1:0);
- }
- },
- threaten:2,
- }
- },
- reqianxun:{
- audio:2,
- trigger:{
- target:'useCardToBegin',
- player:'judgeBefore',
- },
- filter:function(event,player){
- if(player.countCards('h')==0) return false;
- if(event.getParent().name=='phaseJudge'){
- return true;
- }
- if(event.name=='judge') return false;
- if(event.targets&&event.targets.length>1) return false;
- if(event.card&&get.type(event.card)=='trick'&&event.player!=player) return true;
- },
- content:function(){
- var cards=player.getCards('h');
- player.addToExpansion(cards,'giveAuto',player).gaintag.add('reqianxun2');
- player.addSkill('reqianxun2');
- },
- ai:{
- effect:function(card,player,target){
- if(!target.hasFriend()) return;
- if(player==target) return;
- var type=get.type(card);
- var nh=target.countCards();
- if(type=='trick'){
- if(!get.tag(card,'multitarget')||get.info(card).singleCard){
- if(get.tag(card,'damage')){
- if(nh<3||target.hp<=2) return 0.8;
- }
- return [1,nh];
- }
- }
- else if(type=='delay'){
- return [0.5,0.5];
- }
- },
- }
- },
- reqianxun2:{
- trigger:{global:'phaseEnd'},
- forced:true,
- audio:false,
- content:function(){
- var cards=player.getExpansions('reqianxun2');
- if(cards.length) player.gain(cards,'draw');
- player.removeSkill('reqianxun2');
- },
- intro:{
- mark:function(dialog,storage,player){
- var cards=player.getExpansions('reqianxun2');
- if(player.isUnderControl(true)) dialog.addAuto(cards);
- else return '共有'+get.cnNumber(cards.length)+'张牌';
- },
- markcount:'expansion',
- }
- },
- relianying:{
- audio:2,
- trigger:{
- player:'loseAfter',
- global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
- },
- direct:true,
- filter:function(event,player){
- if(player.countCards('h')) return false;
- var evt=event.getl(player);
- return evt&&evt.hs&&evt.hs.length;
- },
- content:function(){
- "step 0"
- var num=trigger.getl(player).hs.length;
- player.chooseTarget(get.prompt('relianying'),'令至多'+get.cnNumber(num)+'名角色各摸一张牌',[1,num]).ai=function(target){
- var player=_status.event.player;
- if(player==target) return get.attitude(player,target)+10;
- return get.attitude(player,target);
- }
- "step 1"
- if(result.bool){
- player.logSkill('relianying',result.targets);
- game.asyncDraw(result.targets);
+ if(event.count){
+ player.chooseBool(get.prompt2('mingzhe')).set('frequentSkill','mingzhe');
}
else event.finish();
- "step 2"
- game.delay();
- },
- ai:{
- threaten:0.8,
- effect:{
- target:function(card){
- if(card.name=='guohe'||card.name=='liuxinghuoyu') return 0.5;
- }
- },
- noh:true,
- }
- },
- retishen:{
- audio:2,
- unique:true,
- mark:true,
- skillAnimation:true,
- animationColor:'soil',
- limited:true,
- trigger:{player:'phaseZhunbeiBegin'},
- init:function(player){
- player.storage.retishen=false;
- },
- filter:function(event,player){
- if(player.storage.retishen) return false;
- if(typeof player.storage.retishen2=='number'){
- return player.hp0){
- return att+Math.max(0,5-target.countCards('h'));
- }
- return att;
- }).set('du',event.card.name=='du');
- }
- else{
- player.chooseBool('是否弃置'+get.translation(event.card)+'?');
- event.disbool=true;
- }
- game.delay(2);
- "step 1"
- if(event.disbool){
- if(!result.bool){
- game.log(player,'展示了',event.card);
- ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild);
- }
- else{
- game.log(player,'展示并弃掉了',event.card);
- event.card.discard();
- }
- game.addVideo('deletenode',player,[get.cardInfo(event.node)]);
- event.node.delete();
- game.broadcast(function(card){
- ui.arena.classList.remove('thrownhighlight');
- if(card.clone){
- card.clone.delete();
- }
- },event.card);
- }
- else if(result.targets){
- player.line(result.targets,'green');
- result.targets[0].gain(event.card,'log');
- event.node.moveDelete(result.targets[0]);
- game.addVideo('gain2',result.targets[0],[get.cardInfo(event.node)]);
- game.broadcast(function(card,target){
- ui.arena.classList.remove('thrownhighlight');
- if(card.clone){
- card.clone.moveDelete(target);
- }
- },event.card,result.targets[0]);
- }
- else{
- game.log(player,'展示并弃掉了',event.card);
- event.card.discard();
- game.addVideo('deletenode',player,[get.cardInfo(event.node)]);
- event.node.delete();
- game.broadcast(function(card){
- ui.arena.classList.remove('thrownhighlight');
- if(card.clone){
- card.clone.delete();
- }
- },event.card);
- }
- game.addVideo('thrownhighlight2');
- ui.arena.classList.remove('thrownhighlight');
- },
- ai:{
- effect:{
- target:function(card,player,target){
- if(get.tag(card,'respond')&&target.countCards('h')>1) return [1,0.2];
- }
- }
- }
- },
- rejianxiong:{
- audio:2,
- audioname:['shen_caopi'],
- trigger:{player:'damageEnd'},
- filter:function(event,player){
- return get.itemtype(event.cards)=='cards'&&get.position(event.cards[0],true)=='o';
- },
- content:function(){
- player.gain(trigger.cards);
- player.$gain2(trigger.cards);
- player.draw();
- },
- ai:{
- maixie:true,
- maixie_hp:true,
- effect:{
- target:function(card,player,target){
- if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
- if(get.tag(card,'damage')) return [1,0.55];
- }
- }
- }
- },
- rejianxiong_old:{
- audio:2,
- trigger:{player:'damageEnd'},
- direct:true,
- content:function(){
- "step 0"
- if(get.itemtype(trigger.cards)=='cards'&&get.position(trigger.cards[0],true)=='o'){
- player.chooseControl('rejianxiong_mopai','rejianxiong_napai','cancel2').set('prompt',get.prompt('rejianxiong')).ai=function(){
- var trigger=_status.event.getTrigger();
- if(trigger.cards.length==1&&trigger.cards[0].name=='sha') return 0;
- return 1;
- };
- }
- else{
- player.chooseControl('rejianxiong_mopai','cancel2').set('prompt',get.prompt('rejianxiong'));
- }
- "step 1"
- if(result.control=='rejianxiong_napai'){
- player.logSkill('rejianxiong');
- player.gain(trigger.cards);
- player.$gain2(trigger.cards);
- }
- else if(result.control=='rejianxiong_mopai'){
- player.logSkill('rejianxiong');
- player.draw();
- }
- },
- ai:{
- maixie:true,
- maixie_hp:true,
- effect:{
- target:function(card,player,target){
- if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
- if(get.tag(card,'damage')&&player!=target) return [1,0.6];
- }
- }
- }
- },
- reyiji:{
- audio:2,
- trigger:{player:'damageEnd'},
- frequent:true,
- filter:function(event){
- return (event.num>0)
- },
- content:function(){
- "step 0"
- event.num=1;
- event.count=1;
- "step 1"
- player.gain(get.cards(2));
- player.$draw(2);
- "step 2"
- player.chooseCardTarget({
- filterCard:true,
- selectCard:[1,2],
- filterTarget:function(card,player,target){
- return player!=target&&target!=event.temp;
- },
- ai1:function(card){
- if(ui.selected.cards.length>0) return -1;
- if(card.name=='du') return 20;
- return (_status.event.player.countCards('h')-_status.event.player.hp);
- },
- ai2:function(target){
- var att=get.attitude(_status.event.player,target);
- if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
- if(target.hasSkillTag('nodu')) return 0;
- return 1-att;
- }
- return att-4;
- },
- prompt:'请选择要送人的卡牌'
- });
"step 3"
if(result.bool){
- player.lose(result.cards,ui.special,'toStorage');
- if(result.targets[0].hasSkill('reyiji2')){
- result.targets[0].storage.reyiji2=result.targets[0].storage.reyiji2.concat(result.cards);
- }
- else{
- result.targets[0].addSkill('reyiji2');
- result.targets[0].storage.reyiji2=result.cards;
- }
- player.$give(result.cards.length,result.targets[0],false);
- player.line(result.targets,'green');
- game.addVideo('storage',result.targets[0],['reyiji2',get.cardsInfo(result.targets[0].storage.reyiji2),'cards']);
- if(num==1){
- event.temp=result.targets[0];
- event.num++;
- event.goto(2);
- }
- else if(event.count0){
- if(player.needsToDiscard()){
- num=0.7;
- }
- else{
- num=0.5;
- }
- }
- if(player.hp>=4) return [1,num*2];
- if(target.hp==3) return [1,num*1.5];
- if(target.hp==2) return [1,num*0.5];
- }
- }
- },
- threaten:0.6
+ threaten:0.7
}
},
- reyiji2:{
- trigger:{player:'phaseDrawBegin'},
- forced:true,
- mark:true,
- popup:'遗计拿牌',
- audio:false,
- content:function(){
- player.$draw(player.storage.reyiji2.length);
- player.gain(player.storage.reyiji2,'fromStorage');
- delete player.storage.reyiji2;
- player.removeSkill('reyiji2');
- game.delay();
- },
- intro:{
- content:'cardCount'
- }
- },
- yijue:{
+
+ duwu:{
audio:2,
enable:'phaseUse',
- usable:1,
- filterTarget:function(card,player,target){
- return player!=target&&target.countCards('h');
- },
filter:function(event,player){
- return player.countCards('h')>0;
+ return player.hasSkill('duwu2')==false&&game.hasPlayer(function(current){
+ return current.hp>0&¤t.hp<=player.countCards('he')&&player.inRange(current);
+ });
+ },
+ filterCard:function(){
+ if(ui.selected.targets.length) return false;
+ return true;
+ },
+ position:'he',
+ selectCard:[1,Infinity],
+ complexSelect:true,
+ complexCard:true,
+ filterTarget:function(card,player,target){
+ return target!=player&&target.hp>0&&player.inRange(target)&&ui.selected.cards.length==target.hp;
+ },
+ check:function(card){
+ var player=_status.event.player;
+ if(game.hasPlayer(function(current){
+ return current!=player&¤t.hp>0&&player.inRange(current)&&ui.selected.cards.length==current.hp&&get.damageEffect(current,player,player)>0;
+ })) return 0;
+ switch(ui.selected.cards.length){
+ case 0:return 8-get.value(card);
+ case 1:return 6-get.value(card);
+ case 2:return 3-get.value(card);
+ default:return 0;
+ }
},
content:function(){
- "step 0"
- player.chooseToCompare(target).set('small',true);
- "step 1"
- if(result.bool){
- if(!target.hasSkill('fengyin')){
- target.addTempSkill('fengyin');
- }
- target.addTempSkill('yijue2');
- event.finish();
- }
- else if(target.hp0;
- };
- }
- else{
- event.finish();
- }
- "step 2"
- if(result.bool){
- target.recover();
- }
+ player.addTempSkill('duwu3');
+ target.damage('nocard');
},
ai:{
+ damage:true,
+ order:2,
result:{
target:function(player,target){
- var hs=player.getCards('h');
- if(hs.length<3) return 0;
- var bool=false;
- for(var i=0;i=9&&get.value(hs[i])<7){
- bool=true;
- break;
- }
- }
- if(!bool) return 0;
- if(target.countCards('h')>target.hp+1&&get.recoverEffect(target)>0){
- return 1;
- }
- if(player.canUse('sha',target)&&(player.countCards('h','sha')||player.countCards('he',{color:'red'}))){
- return -2;
- }
- return -0.5;
+ return get.damageEffect(target,player);
}
},
- order:9,
+ threaten:1.5,
+ expose:0.3
}
},
- yijue2:{
- mark:true,
- mod:{
- cardEnabled:function(){
- return false;
- },
- cardRespondable:function(){
- return false;
- },
- cardSavable:function(){
- return false;
- }
- },
- intro:{
- content:'不能使用或打出卡牌'
- }
- },
- retieji:{
- shaRelated:true,
- audio:2,
- audioname:['boss_lvbu3'],
- trigger:{player:'useCardToPlayered'},
- check:function(event,player){
- return get.attitude(player,event.target)<=0;
- },
+ duwu2:{charlotte:true},
+ duwu3:{
+ trigger:{global:'dyingAfter'},
+ forced:true,
+ popup:false,
+ charlotte:true,
filter:function(event,player){
- return event.card.name=='sha';
+ return event.player.isIn()&&event.reason&&event.reason.getParent().name=='duwu';
},
- logTarget:'target',
content:function(){
- "step 0"
- player.judge(function(){return 0});
- if(!trigger.target.hasSkill('fengyin')){
- trigger.target.addTempSkill('fengyin');
- }
- "step 1"
- var suit=result.suit;
- var target=trigger.target;
- var num=target.countCards('h','shan');
- target.chooseToDiscard('请弃置一张'+get.translation(suit)+'牌,否则不能使用闪抵消此杀','he',function(card){
- return get.suit(card)==_status.event.suit;
- }).set('ai',function(card){
- var num=_status.event.num;
- if(num==0) return 0;
- if(card.name=='shan') return num>1?2:0;
- return 8-get.value(card);
- }).set('num',num).set('suit',suit);
- "step 2"
- if(!result.bool){
- trigger.getParent().directHit.add(trigger.target);
- }
- },
- ai:{
- ignoreSkill:true,
- skillTagFilter:function(player,tag,arg){
- if(tag=='directHit_ai'){
- return get.attitude(player,arg.target)<=0;
- }
- if(!arg||arg.isLink||!arg.card||arg.card.name!='sha') return false;
- if(!arg.target||get.attitude(player,arg.target)>=0) return false;
- if(!arg.skill||!lib.skill[arg.skill]||lib.skill[arg.skill].charlotte||get.is.locked(arg.skill)||!arg.target.getSkills(true,false).contains(arg.skill)) return false;
- },
- directHit_ai:true,
+ player.loseHp();
+ player.addTempSkill('duwu2');
}
},
- reyicong:{
+ yicong:{
trigger:{
player:["changeHp"],
},
audio:2,
- audioname:{gongsunzan:'yicong'},
+ audioname:['re_gongsunzan'],
forced:true,
filter:function(event,player){
return get.sgn(player.hp-2.5)!=get.sgn(player.hp-2.5-event.num);
@@ -13385,7 +21347,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function (){},
mod:{
globalFrom:function(from,to,current){
- return current-1;
+ if(from.hp>2) return current-1;
},
globalTo:function(from,to,current){
if(to.hp<=2) return current+1;
@@ -13395,380 +21357,1651 @@ game.import('character',function(lib,game,ui,get,ai,_status){
threaten:0.8
}
},
- reqiaomeng:{
- audio:'qiaomeng',
- trigger:{source:'damageSource'},
- direct:true,
- filter:function(event,player){
- if(event._notrigger.contains(event.player)) return false;
- return event.card&&event.card.name=='sha'&&event.player.countDiscardableCards(player,'hej');
- },
- content:function(){
- "step 0"
- player.discardPlayerCard(get.prompt('reqiaomeng',trigger.player),'hej',trigger.player).set('logSkill',['reqiaomeng',trigger.player]);
- "step 1"
- if(result.bool){
- var card=result.cards[0];
- if(get.position(card)=='d'){
- if(get.subtype(card)=='equip3'||get.subtype(card)=='equip4'){
- player.gain(card,player,'gain2');
- }
- }
- }
+ yongsi:{
+ audio:'yongsi1',
+ group:['yongsi1','yongsi2'],
+ locked:true,
+ ai:{
+ threaten:2.2
}
},
- qiaomeng:{
+ yongsi1:{
audio:2,
- trigger:{source:'damageSource'},
- direct:true,
+ trigger:{player:'phaseDrawBegin2'},
+ forced:true,
filter:function(event,player){
- if(event._notrigger.contains(event.player)) return false;
- return event.card&&event.card.name=='sha'&&event.cards&&
- get.color(event.cards)=='black'&&event.player.countDiscardableCards(player,'hej');
+ return !event.numFixed;
+ },
+ content:function(){
+ trigger.num+=game.countGroup();
+ }
+ },
+ yongsi2:{
+ audio:2,
+ trigger:{player:'phaseDiscardBegin'},
+ forced:true,
+ content:function(){
+ player.chooseToDiscard(game.countGroup(),'he',true);
+ }
+ },
+ bifa:{
+ trigger:{player:'phaseJieshuBegin'},
+ direct:true,
+ audio:2,
+ filter:function(event,player){
+ return player.countCards('h')>0;
},
content:function(){
"step 0"
- player.discardPlayerCard(get.prompt('qiaomeng',trigger.player),'e',trigger.player).set('logSkill',['qiaomeng',trigger.player]);
+ player.chooseCardTarget({
+ filterCard:true,
+ filterTarget:function(card,player,target){
+ return player!=target&&!target.getExpansions('bifa2').length;
+ },
+ ai1:function(card){
+ return 7-get.value(card);
+ },
+ ai2:function(target){
+ var num=target.hasSkillTag('maixie')?2:0;
+ return -get.attitude(_status.event.player,target)-num;
+ },
+ prompt:get.prompt2('bifa'),
+ });
"step 1"
if(result.bool){
- var card=result.cards[0];
- if(get.position(card)=='d'){
- if(get.subtype(card)=='equip3'||get.subtype(card)=='equip4'){
- player.gain(card,player,'gain2');
+ event.forceDie=true;
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('bifa',result.targets[0]);
+ event.card=result.cards[0];
+ target.storage.bifa2=[result.cards[0],player];
+ if(!_status.connectMode&&player.isUnderControl(true)) player.$giveAuto(result.cards[0],target,false);
+ else player.$give(1,target,false);
+ target.addToExpansion(result.cards[0]).gaintag.add('bifa2');
+ }
+ else event.finish();
+ "step 2"
+ if(target.getExpansions('bifa2').contains(card)){
+ target.addSkill('bifa2');
+ }
+ else delete target.storage.bifa2;
+ },
+ ai:{
+ threaten:1.7,
+ expose:0.3
+ }
+ },
+ bifa2:{
+ trigger:{player:'phaseZhunbeiBegin'},
+ forced:true,
+ charlotte:true,
+ audio:false,
+ filter:function(event,player){
+ return player.storage.bifa2&&player.getExpansions('bifa2').contains(player.storage.bifa2[0]);
+ },
+ content:function(){
+ "step 0"
+ if(player.storage.bifa2[1].isIn()&&player.countCards('h')){
+ player.chooseCard(get.translation(player.storage.bifa2[1])+'的笔伐牌为:',function(card){
+ return get.type(card,'trick')==_status.event.type;
+ }).set('ai',function(card){
+ return 8-get.value(card);
+ }).set('type',get.type(player.storage.bifa2[0],'trick')).set('promptx',[[player.storage.bifa2[0]],'请交给其一张与此牌类别相同的手牌,否则失去1点体力' ]);
+ }
+ else{
+ event.directfalse=true;
+ }
+ "step 1"
+ if(result.bool&&!event.directfalse){
+ player.give(result.cards,player.storage.bifa2[1]);
+ player.gain(player.storage.bifa2[0],'draw');
+ }
+ else{
+ player.loseHp();
+ }
+ "step 2"
+ player.removeSkill('bifa2');
+ },
+ marktext:'檄',
+ intro:{
+ markcount:()=>1,
+ name:'笔伐',
+ content:'已成为〖笔伐〗的目标',
+ },
+ onremove:function(player,skill){
+ var cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ delete player.storage[skill];
+ },
+ },
+ songci:{
+ audio:2,
+ enable:'phaseUse',
+ filter:function(event,player){
+ if(!player.storage.songci) return true;
+ return game.hasPlayer(function(current){
+ return !player.storage.songci.contains(current);
+ });
+ },
+ init:function(player){
+ if(!player.storage.songci) player.storage.songci=[];
+ },
+ filterTarget:function(card,player,target){
+ return (!player.storage.songci||!player.storage.songci.contains(target));
+ },
+ content:function(){
+ if(target.countCards('h')>target.hp){
+ target.chooseToDiscard(2,'he',true);
+ }
+ else{
+ target.draw(2);
+ }
+ if(!player.storage.songci) player.storage.songci=[];
+ player.storage.songci.push(target);
+ player.storage.songci.sortBySeat();
+ player.markSkill('songci');
+ },
+ intro:{
+ content:'已对$发动过〖颂词〗'
+ },
+ ai:{
+ order:7,
+ threaten:1.6,
+ expose:0.2,
+ result:{
+ target:function(player,target){
+ if(target.countCards('h')<=target.hp){
+ return 1;
}
+ else if(target.countCards('h')>target.hp){
+ return -1;
+ }
+ }
+ }
+ },
+ group:'songci_draw',
+ },
+ songci_draw:{
+ audio:'songci',
+ trigger:{player:'phaseDiscardEnd'},
+ forced:true,
+ filter:function(event,player){
+ if(!player.storage.songci) return false;
+ return !game.hasPlayer(function(current){
+ return !player.storage.songci.contains(current);
+ });
+ },
+ content:function(){
+ player.draw();
+ },
+ },
+ baobian:{
+ audio:2,
+ trigger:{player:['phaseBefore','changeHp']},
+ forced:true,
+ popup:false,
+ init:function(player){
+ if(game.online) return;
+ player.removeAdditionalSkill('baobian');
+ var list=[];
+ if(player.hp<=3){
+ //if(trigger.num!=undefined&&trigger.num<0&&player.hp-trigger.num>1) player.logSkill('baobian');
+ list.push('oltiaoxin');
+ }
+ if(player.hp<=2){
+ list.push('olpaoxiao');
+ }
+ if(player.hp<=1){
+ list.push('xinshensu');
+ }
+ if(list.length){
+ player.addAdditionalSkill('baobian',list);
+ }
+ },
+ derivation:['oltiaoxin','olpaoxiao','xinshensu'],
+ content:function(){
+ player.removeAdditionalSkill('baobian');
+ var list=[];
+ if(player.hp<=3){
+ if(trigger.num!=undefined&&trigger.num<0&&player.hp-trigger.num>1) player.logSkill('baobian');
+ list.push('oltiaoxin');
+ }
+ if(player.hp<=2){
+ list.push('olpaoxiao');
+ }
+ if(player.hp<=1){
+ list.push('xinshensu');
+ }
+ if(list.length){
+ player.addAdditionalSkill('baobian',list);
+ }
+ },
+ ai:{
+ maixie:true,
+ effect:{
+ target:function(card,player,target){
+ if(get.tag(card,'damage')){
+ if(!target.hasFriend()) return;
+ if(target.hp>=4) return [0,1];
+ }
+ if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
- rekurou:{
+ chongzhen:{
+ group:['chongzhen1','chongzhen2'],
+ audio:'chongzhen1',
+ ai:{
+ combo:'ollongdan',
+ mingzhi:false,
+ effect:{
+ target:function(card,player,target,current){
+ if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){
+ if(get.attitude(target,player)<=0){
+ if(current>0) return;
+ if(target.countCards('h')==0) return 1.6;
+ if(target.countCards('h')==1) return 1.2;
+ if(target.countCards('h')==2) return [0.8,0.2,0,-0.2];
+ return [0.4,0.7,0,-0.7];
+ }
+ }
+ },
+ },
+ }
+ },
+ chongzhen1:{
+ audio:2,
+ trigger:{player:'useCard'},
+ filter:function(event,player){
+ if((event.card.name!='sha'&&event.card.name!='shan')||(event.skill!='longdan_shan'&&event.skill!='longdan_sha'&&
+ event.skill!='fanghun_shan'&&event.skill!='fanghun_sha'&&event.skill!='ollongdan')) return false;
+ var target=lib.skill.chongzhen1.logTarget(event,player);
+ return target&&target.countGainableCards(player,'h')>0;
+ },
+ logTarget:function(event,player){
+ if(event.card.name=='sha') return event.targets[0];
+ return event.respondTo[0];
+ },
+ prompt2:'当你因发动〖龙胆〗而使用或打出【杀】或【闪】时,你可以获得对方的一张手牌。',
+ content:function(){
+ var target=lib.skill.chongzhen1.logTarget(trigger,player);
+ player.gainPlayerCard(target,'h',true);
+ }
+ },
+ chongzhen2:{
+ audio:2,
+ trigger:{player:'respond'},
+ filter:function(event,player){
+ if(event.skill!='longdan_shan'&&event.skill!='longdan_sha'&&
+ event.skill!='fanghun_shan'&&event.skill!='fanghun_sha'&&event.skill!='ollongdan') return false;
+ return event.source&&event.source.countGainableCards(player,'h')>0;
+ },
+ logTarget:'source',
+ prompt2:'当你因发动〖龙胆〗而使用或打出【杀】或【闪】时,你可以获得对方的一张手牌。',
+ content:function(){
+ player.gainPlayerCard(trigger.source,'h',true);
+ }
+ },
+ lihun:{
audio:2,
enable:'phaseUse',
usable:1,
- filterCard:true,
- check:function(card){
- return 8-get.value(card);
+ filterTarget:function(card,player,target){
+ return player!=target&&target.hasSex('male');
},
+ filterCard:true,
position:'he',
content:function(){
- player.loseHp();
+ player.gainPlayerCard(target,true,'h',target.countCards('h'));
+ player.turnOver();
+ player.addSkill('lihun2');
+ player.storage.lihun=target;
+ },
+ check:function(card){return 8-get.value(card)},
+ ai:{
+ order:10,
+ result:{
+ player:function(player){
+ if(player.classList.contains('turnedover')) return 10;
+ return 0;
+ },
+ target:function(player,target){
+ if(target.countCards('h')>target.hp) return target.hp-target.countCards('h');
+ return 0;
+ }
+ },
+ threaten:1.5,
+ effect:{
+ target:function(card){
+ if(card.name=='guiyoujie') return [0,2];
+ }
+ }
+ },
+ },
+ lihun2:{
+ trigger:{player:'phaseUseEnd'},
+ forced:true,
+ popup:false,
+ audio:false,
+ content:function(){
+ "step 0"
+ var cards=player.getCards('he');
+ player.removeSkill('lihun2');
+ if(player.storage.lihun.classList.contains('dead')||player.storage.lihun.hp<=0||cards.length==0){
+ event.finish();
+ }
+ else{
+ if(cards.length0;
+ },
+ content:function(){
+ "step 0"
+ player.chooseCardTarget({
+ filterCard:function(card){
+ return get.type(card)=='equip';
+ },
+ position:'he',
+ filterTarget:function(card,player,target){
+ return target.canEquip(card);
+ },
+ ai1:function(card){
+ return 6-get.value(card);
+ },
+ ai2:function(target){
+ return get.attitude(_status.event.player,target)-3;
+ },
+ prompt:get.prompt2('yuanhu')
+ });
+ "step 1"
+ if(result.bool){
+ player.logSkill('yuanhu',result.targets);
+ var thisTarget=result.targets[0];
+ var thisCard=result.cards[0];
+ thisTarget.equip(thisCard);
+ event.target=thisTarget;
+ if(thisTarget!=player){
+ player.$give(thisCard,thisTarget,false);
+ }
+ switch(get.subtype(thisCard)){
+ case 'equip1':{
+ if(!game.hasPlayer(function(current){
+ return get.distance(thisTarget,current)<=1;
+ })){
+ event.finish();
+ return;
+ }
+ game.delay();
+ player.chooseTarget(true,function(card,player,target){
+ return get.distance(_status.event.thisTarget,target)<=1&&target.countCards('hej');
+ }).set('ai',function(target){
+ var attitude=get.attitude(_status.event.player,target);
+ if(attitude>0&&target.countCards('j')){
+ return attitude*1.5;
+ }
+ return -attitude;
+ }).set('thisTarget',thisTarget);
+ return;
+ }
+ case 'equip2':{
+ thisTarget.draw();event.finish();
+ return;
+ }
+ case 'equip5':{
+ event.finish();
+ return;
+ }
+ default:{
+ thisTarget.recover();
+ event.finish();
+ return;
+ }
+ }
+ }
+ else{
+ event.finish();
+ }
+ "step 2"
+ if(result.targets.length){
+ player.discardPlayerCard(true,result.targets[0],'hej');
+ }
+ },
+ },
+ tianming:{
+ audio:2,
+ trigger:{target:'useCardToTargeted'},
+ check:function(event,player){
+ var cards=player.getCards('h');
+ if(cards.length<=2){
+ for(var i=0;iplayers[1].hp&&players[0]!=player){
+ players[0].chooseBool(get.prompt2('tianming'));
+ event.player=players[0];
+ }
+ else{
+ event.finish();
+ }
+ "step 1"
+ if(result.bool){
+ player.chooseToDiscard(2,true,'he');
+ player.draw(2);
+ }
+ },
+ ai:{
+ effect:{
+ target:function(card,player,target,current){
+ if(card.name=='sha') return [1,0.5];
+ }
+ }
+ }
+ },
+ mizhao:{
+ enable:'phaseUse',
+ usable:1,
+ audio:2,
+ filter:function(event,player){
+ return player.countCards('h')>0;
+ },
+ filterCard:true,
+ selectCard:-1,
+ filterTarget:function(card,player,target){
+ return player!=target;
+ },
+ discard:false,
+ lose:false,
+ delay:false,
+ ai:{
+ order:1,
+ result:{
+ player:0,
+ target:function(player,target){
+ if(target.hasSkillTag('nogain')) return 0;
+ if(player.countCards('h')>1){
+ return 1;
+ }
+ var players=game.filterPlayer();
+ for(var i=0;i0){
+ return eff-10;
+ }
+ return eff;
+ }).set('target1',event.target1).set('forceDie',true);
+ "step 3"
+ if(result.targets.length){
+ event.target2=result.targets[0];
+ event.target1.line(event.target2);
+ event.target1.chooseToCompare(event.target2);
+ }
+ else{
+ event.finish();
+ }
+ "step 4"
+ if(!result.tie){
+ if(result.bool){
+ if(event.target1.canUse({name:'sha',isCard:true},event.target2,false)) event.target1.useCard({name:'sha',isCard:true},event.target2);
+ }
+ else if(event.target2.canUse({name:'sha',isCard:true},event.target1,false)){
+ event.target2.useCard({name:'sha',isCard:true},event.target1);
+ }
+ }
+ }
+ },
+ gongao:{
+ audio:2,
+ trigger:{global:'dieAfter'},
+ forced:true,
+ content:function(){
+ player.gainMaxHp();
+ player.recover();
+ },
+ ai:{
+ threaten:1.5
+ },
+ },
+ juyi:{
+ skillAnimation:true,
+ animationColor:'thunder',
+ audio:2,
+ derivation:['benghuai','weizhong'],
+ trigger:{player:'phaseZhunbeiBegin'},
+ filter:function(event,player){
+ return player.maxHp>game.countPlayer()&&!player.storage.juyi;
+ },
+ forced:true,
+ unique:true,
+ juexingji:true,
+ content:function(){
+ player.draw(player.maxHp);
+ player.addSkill('benghuai');
+ player.addSkill('weizhong');
+ player.storage.juyi=true;
+ player.awakenSkill('juyi');
+ }
+ },
+ weizhong:{
+ audio:2,
+ trigger:{player:['gainMaxHpEnd','loseMaxHpEnd']},
+ forced:true,
+ content:function(){
+ player.draw(player.isMinHandcard()?2:1);
+ },
+ },
+ kuangfu:{
+ trigger:{source:'damageSource'},
+ audio:2,
+ filter:function(event){
+ if(event._notrigger.contains(event.player)) return false;
+ return event.card&&event.card.name=='sha'&&event.player.countCards('e');
+ },
+ logTarget:'player',
+ preHidden:true,
+ check:function(event,player){
+ return get.attitude(player,event.player)<=0;
+ },
+ content:function(){
+ "step 0"
+ var neg=get.attitude(player,trigger.player)<=0;
+ player.choosePlayerCard('e',trigger.player).set('ai',function(button){
+ if(_status.event.neg){
+ return get.buttonValue(button);
+ }
+ return 0;
+ }).set('neg',neg);
+ "step 1"
+ if(result.bool){
+ event.card=result.links[0];
+ if(player.canEquip(event.card)){
+ player.chooseBool('是否将'+get.translation(event.card)+'置入自己的装备区?').ai=function(){
+ return true;
+ };
+ }
+ else event._result={bool:false};
+ }
+ else event.finish();
+ "step 2"
+ if(result.bool){
+ trigger.player.$give(event.card,player,false);
+ player.equip(event.card);
+ }
+ else trigger.player.discard(event.card);
+ }
+ },
+ "xinfu_lingren":{
+ usable:1,
+ audio:2,
+ trigger:{
+ player:"useCardToPlayered",
+ },
+ direct:true,
+ filter:function(event,player){
+ if(event.getParent().triggeredTargets3.length>1) return false;
+ if(!player.isPhaseUsing()) return false;
+ if(!['basic','trick'].contains(get.type(event.card))) return false;
+ if(get.tag(event.card,'damage')) return true;
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('xinfu_lingren'),'选择一名目标角色并猜测其手牌构成',function(card,player,target){
+ return _status.event.targets.contains(target);
+ }).set('ai',function(target){
+ return 2-get.attitude(_status.event.player,target);
+ }).set('targets',trigger.targets);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('xinfu_lingren',result.targets);
+ var target=result.targets[0];
+ event.target=target;
+ event.choice={
+ basic:false,
+ trick:false,
+ equip:false,
+ }
+ player.chooseButton(['凌人:猜测其有哪些类别的手牌',[['basic','trick','equip'],'vcard']],[0,3],true).set('ai',function(button){
+ switch(button.link[2]){
+ case 'basic':
+ var rand=0.95;
+ if(!target.countCards('h',{type:['basic']})) rand=0.05;
+ if(!target.countCards('h')) rand=0;
+ return Math.random()i[2]);
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ var list=[];
+ event.num=0;
+ ['basic','trick','equip'].forEach(type=>{
+ if(choices.contains(type)==target.hasCard({type:type},'h')) event.num++;
+ })
+ }
+ 'step 3'
+ player.popup('猜对'+get.cnNumber(event.num)+'项');
+ game.log(player,'猜对了'+get.cnNumber(event.num)+'项');
+ if(event.num>0){
+ target.addTempSkill('lingren_adddamage');
+ target.storage.lingren={
+ card:trigger.card,
+ //player:event.targett,
+ }
+ }
+ if(event.num>1) player.draw(2);
+ if(event.num>2){
+ player.addTempSkill('lingren_jianxiong',{player:'phaseBegin'});
+ player.addTempSkill('lingren_xingshang',{player:'phaseBegin'});
+ }
+ },
+ ai:{
+ threaten:2.4,
+ },
+ },
+ "lingren_adddamage":{
+ onremove:function (player){
+ delete player.storage.lingren;
+ },
+ trigger:{
+ player:"damageBegin3",
+ },
+ filter:function (event,player){
+ var info=player.storage.lingren;
+ return event.card&&event.card==info.card;
+ },
+ silent:true,
+ popup:false,
+ forced:true,
+ charlotte:true,
+ content:function (){
+ trigger.num++;
+ },
+ },
+ "lingren_jianxiong":{
+ audio:1,
+ trigger:{
+ player:"damageEnd",
+ },
+ content:function (){
+ "step 0"
+ if(get.itemtype(trigger.cards)=='cards'&&get.position(trigger.cards[0],true)=='o'){
+ player.gain(trigger.cards,"gain2");
+ }
+ player.draw("nodelay");
+ },
+ ai:{
+ maixie:true,
+ "maixie_hp":true,
+ effect:{
+ target:function (card,player,target){
+ if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
+ if(get.tag(card,'damage')&&player!=target) return [1,0.6];
+ },
+ },
+ },
+ },
+ "lingren_xingshang":{
+ audio:1,
+ inherit:'rexingshang',
+ },
+ "xinfu_fujian":{
+ audio:2,
+ trigger:{
+ player:"phaseJieshuBegin",
+ },
+ filter:function (event,player){
+ return !game.hasPlayer(function(current){
+ return current.countCards('h')==0;
+ });
+ },
+ forced:true,
+ content:function (){
+ event.num=0;
+ var list=game.filterPlayer(function(target){
+ if(target.isMinHandcard()) event.num=target.countCards('h');
+ return player!=target;
+ });
+ if(event.num<1){
+ event.finish();
+ }
+ else{
+ var target=list.randomGet();
+ var cards=target.getCards('h').randomGets(event.num);
+ player.line(target);
+ var content=[get.translation(target)+'的部分手牌',cards];
+ game.log(player,'观看了',target,'的部分手牌');
+ player.chooseControl('ok').set('dialog',content);
+ }
+ },
+ },
+ "xinfu_xionghuo":{
+ group:["xinfu_xionghuo_damage","xinfu_xionghuo_begin","xinfu_xionghuo_init"],
+ subSkill:{
+ begin:{
+ audio:'xinfu_xionghuo',
+ logTarget:'player',
+ line:false,
+ forced:true,
+ trigger:{
+ global:"phaseUseBegin",
+ },
+ filter:function (event,player){
+ return event.player.countMark('xionghuo')>0&&event.player!=player;
+ },
+ content:function (){
+ 'step 0'
+ trigger.player.removeMark('xionghuo',trigger.player.countMark('xionghuo'));
+ var list=[1,2,3];
+ var num=list.randomGet();
+ event.goto(num);
+ 'step 1'
+ player.line(trigger.player,'fire');
+ trigger.player.damage('fire');
+ if(!trigger.player.storage.xionghuo_disable) trigger.player.storage.xionghuo_disable=[];
+ trigger.player.storage.xionghuo_disable.push(player);
+ trigger.player.addTempSkill('xionghuo_disable','phaseAfter');
+ event.goto(4);
+ 'step 2'
+ player.line(trigger.player,'water');
+ trigger.player.loseHp();
+ trigger.player.addMark('xionghuo_low',1,false);
+ trigger.player.addTempSkill('xionghuo_low','phaseAfter');
+ event.goto(4);
+ 'step 3'
+ player.line(trigger.player,'green');
+ var card1=trigger.player.getCards('h').randomGet();
+ var card2=trigger.player.getCards('e').randomGet();
+ var list=[];
+ if(card1) list.push(card1);
+ if(card2) list.push(card2);
+ if(list.length>0){
+ player.gain(list,trigger.player,'giveAuto','bySelf');
+ }
+ 'step 4'
+ game.delay();
+ },
+ },
+ damage:{
+ audio:"xinfu_xionghuo",
+ sub:true,
+ forced:true,
+ trigger:{
+ source:"damageBegin1",
+ },
+ filter:function (event,player){
+ return event.player.countMark('xionghuo')>0&&event.player!=player;
+ },
+ content:function (){
+ trigger.num++;
+ },
+ },
+ init:{
+ audio:'xinfu_xionghuo',
+ trigger:{
+ global:"phaseBefore",
+ player:"enterGame",
+ },
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ return (event.name!='phase'||game.phaseNumber==0);
+ },
+ content:function(){
+ player.addMark("xionghuo",3);
+ },
+ },
+ },
+ audio:2,
+ enable:"phaseUse",
+ filter:function(event,player){
+ return player.countMark('xionghuo')>0;
+ },
+ filterTarget:function (card,player,target){
+ if(target.hasMark('xionghuo')) return false;
+ return player!=target>0;
+ },
+ content:function (){
+ player.removeMark('xionghuo',1);
+ target.addMark('xionghuo',1);
+ },
+ ai:{
+ order:11,
+ result:{
+ target:function(player,target){
+ if((player.countMark('xionghuo')>=2||!game.hasPlayer(function(current){
+ return current!=player&&get.attitude(player,current)<0&¤t.hasMark('xionghuo');
+ }))&&player.countCards('h',function(card){
+ return get.tag(card,'damage')&&player.canUse(card,target,null,true)
+ &&player.getUseValue(card)>0&&get.effect_use(target,card,player)>0
+ &&target.hasSkillTag('filterDamage',null,{
+ player:player,
+ card:card,
+ });
+ })) return 3/Math.max(1,target.hp);
+ if((!player.hasUnknown()&&game.countPlayer(function(current){
+ return get.attitude(player,current)<0;
+ })<=1)||player.countMark('xionghuo')>=2){
+ return -1;
+ }
+ return 0;
+ },
+ },
+ effect:{
+ player:function(card,player,target){
+ if(player!=target&&get.tag(card,'damage')&&target&&target.hasMark('xionghuo')&&!target.hasSkillTag('filterDamage',null,{
+ player:player,
+ card:card,
+ })) return [1,0,1,-2];
+ },
+ },
+ threaten:1.6,
+ },
+ },
+ xionghuo:{
+ marktext:"戾",
+ mark:true,
+ intro:{
+ name:'暴戾',
+ content:"mark",
+ },
+ locked:true,
+ },
+ "xionghuo_disable":{
+ mod:{
+ playerEnabled:function (card,player,target){
+ if(card.name=='sha'&&(player.storage.xionghuo_disable&&player.storage.xionghuo_disable.contains(target))) return false;
+ },
+ },
+ onremove:true,
+ charlotte:true,
+ mark:true,
+ marktext:"禁",
+ intro:{
+ content:"本回合内不能对$使用【杀】",
+ },
+ },
+ "xionghuo_low":{
+ mod:{
+ maxHandcard:function (player,num){
+ return num-player.countMark('xionghuo_low');
+ },
+ },
+ marktext:"减",
+ mark:true,
+ onremove:true,
+ charlotte:true,
+ intro:{
+ content:"本回合内手牌上限-#",
+ },
+ },
+ "xinfu_shajue":{
+ audio:2,
+ trigger:{
+ global:"dying",
+ },
+ filter:function (event,player){
+ return event.player.hp<0&&event.player!=player;
+ },
+ forced:true,
+ //priority:7,
+ content:function (){
+ if(trigger.parent.name=='damage'&&get.itemtype(trigger.parent.cards)=='cards'&&get.position(trigger.parent.cards[0],true)=='o'){
+ player.gain(trigger.parent.cards,"gain2");
+ }
+ player.addMark('xionghuo',1);
+ },
+ },
+ "xinfu_jianjie":{
+ derivation:["jianjie_faq"],
+ group:["xinfu_jianjie1","xinfu_jianjie2"],
+ audio:3,
+ trigger:{
+ player:"phaseZhunbeiBegin",
+ },
+ direct:true,
+ filter:function(event,player){
+ if(player.phaseNumber>1) return false;
+ return !game.hasPlayer(function(current){
+ return current.hasSkill('smh_huoji')||current.hasSkill('smh_lianhuan');
+ });
+ },
+ content:function(){
+ "step 0"
+ player.chooseTarget('请将「龙印」交给一名角色',true,function(card,player,target){
+ return target!=player;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ return 10+get.attitude(player,target);
+ });
+ "step 1"
+ if(result.bool&&result.targets&&result.targets.length){
+ var target=result.targets[0];
+ player.logSkill('xinfu_jianjie',target);
+ player.line(target,'fire');
+ target.addSkill('smh_huoji');
+ game.delay();
+ }
+ if(game.hasPlayer(function(current){
+ return !current.hasSkill('smh_huoji')&¤t!=player
+ })){
+ player.chooseTarget('请将「凤印」交给一名角色',true,function(card,player,target){
+ return target!=player&&!target.hasSkill('smh_huoji');
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ return 10+get.attitude(player,target);
+ });
+ }
+ else event.finish();
+ "step 2"
+ if(result.bool&&result.targets&&result.targets.length){
+ var target=result.targets[0];
+ player.logSkill('xinfu_jianjie',target);
+ player.line(target,'green');
+ target.addSkill('smh_lianhuan');
+ game.delay();
+ }
+ },
+ },
+ "xinfu_jianjie1":{
+ audio:3,
+ prompt:"你的第一个准备阶段,你令两名不同的角色分别获得龙印与凤印;出牌阶段限一次(你的第一个回合除外),或当拥有龙印、凤印的角色死亡时,你可以转移龙印、凤印。",
+ enable:"phaseUse",
+ usable:1,
+ filter:function (event,player){
+ if(player.phaseNumber==1) return false;
+ if(!game.hasPlayer(function(current){
+ return current.hasSkill('smh_huoji')||current.hasSkill('smh_lianhuan');
+ })) return false;
+ return true;
+ },
+ filterTarget:function (card,player,target){
+ if(ui.selected.targets.length==1){
+ return true;
+ }else{
+ return target.hasSkill('smh_huoji')||target.hasSkill('smh_lianhuan');
+ }
+ },
+ targetprompt:["移走印","得到印"],
+ selectTarget:2,
+ multitarget:true,
+ content:function (){
+ 'step 0'
+ if(targets[0].hasSkill('smh_huoji')&&targets[0].hasSkill('smh_lianhuan')){
+ player.chooseControl('龙印','凤印').set('prompt','请选择要移动的印');
+ }
+ else{
+ if(targets[0].hasSkill('smh_huoji')) event._result={control:'龙印'};
+ else event._result={control:'凤印'};
+ }
+ 'step 1'
+ if(result.control=='龙印'){
+ targets[0].removeSkill('smh_huoji');
+ targets[1].addSkill('smh_huoji');
+ }
+ else{
+ targets[0].removeSkill('smh_lianhuan');
+ targets[1].addSkill('smh_lianhuan');
+ }
},
ai:{
order:8,
result:{
- player:function(player){
- return get.effect(player,{name:'losehp'},player,player);
- }
- },
- }
- },
- zhaxiang:{
- trigger:{player:'loseHpEnd'},
- forced:true,
- audio:2,
- content:function(){
- var num=trigger.num;
- player.draw(3*num);
- if(_status.currentPhase==player){
- if(!player.storage.zhaxiang2) player.storage.zhaxiang2=0;
- player.storage.zhaxiang2+=num;
- player.addTempSkill('zhaxiang2',{player:'phaseAfter'});
- }
- else{
- game.trySkillAudio('zhaxiang',player);
- }
- },
- ai:{
- maihp:true,
- effect:function(card,player,target){
- if(get.tag(card,'damage')){
- if(player.hasSkillTag('jueqing',false,target)) return [1,1];
- return 1.2;
- }
- if(get.tag(card,'loseHp')){
- if(target.hp<=1) return;
- var using=target.isPhaseUsing();
- if(target.hp<=2) return [1,player.countCards('h')<=1&&using?3:0];
- if(using&&target.countCards('h',{name:'sha',color:'red'})) return [1,3];
- return [1,(target.countCards('h')<=target.hp||using&&game.hasPlayer(function(current){
- return current!=player&&get.attitude(player,current)<0&&player.inRange(current);
- }))?3:2]
- }
- }
- }
- },
- zhaxiang2:{
- mod:{
- targetInRange:function(card,player,target,now){
- if(card.name=='sha'&&get.color(card)=='red') return true;
- },
- cardUsable:function(card,player,num){
- if(card.name=='sha') return num+player.storage.zhaxiang2;
- }
- },
- onremove:true,
- trigger:{player:'useCard'},
- forced:true,
- filter:function(event,player){
- return event.card&&event.card.name=='sha'&&get.color(event.card)=='red';
- },
- content:function(){
- trigger.directHit.addArray(game.players);
- },
- ai:{
- directHit_ai:true,
- skillTagFilter:function(player,tag,arg){
- return arg.card.name=='sha'&&get.color(arg.card)=='red';
- },
- },
- },
- zhuhai:{
- audio:2,
- audioname:['gz_re_xushu'],
- trigger:{global:'phaseJieshuBegin'},
- direct:true,
- filter:function(event,player){
- return event.player.isIn()&&event.player.getStat('damage')&&
- lib.filter.targetEnabled({name:'sha'},player,event.player)&&(player.hasSha()||_status.connectMode&&player.countCards('h')>0);
- },
- content:function(){
- player.chooseToUse(function(card,player,event){
- if(get.name(card)!='sha') return false;
- return lib.filter.filterCard.apply(this,arguments);
- },'诛害:是否对'+get.translation(trigger.player)+'使用一张杀?').set('logSkill','zhuhai').set('complexSelect',true).set('filterTarget',function(card,player,target){
- if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
- return lib.filter.targetEnabled.apply(this,arguments);
- }).set('sourcex',trigger.player);
- }
- },
- qianxin:{
- skillAnimation:true,
- animationColor:'orange',
- audio:2,
- unique:true,
- juexingji:true,
- trigger:{source:'damageSource'},
- forced:true,
- derivation:'jianyan',
- filter:function(event,player){
- return player.hp2) return 'trick';
- return 'red';
- });
- "step 1"
- event.card=get.cardPile(function(card){
- if(get.color(card)==result.control) return true;
- if(get.type(card,'trick')==result.control) return true;
- return false;
- },'cardPile');
- if(!event.card){
- event.finish();
- return;
- }
- player.showCards([event.card]);
- "step 2"
- player.chooseTarget(true,'选择一名男性角色送出'+get.translation(event.card),function(card,player,target){
- return target.hasSex('male');
- }).set('ai',function(target){
- var att=get.attitude(_status.event.player,target);
- if(_status.event.neg) return -att;
- return att;
- }).set('neg',get.value(event.card,player,'raw')<0);
- "step 3"
- player.line(result.targets,'green');
- result.targets[0].gain(event.card,'gain2');
-
- },
- ai:{
- order:9,
- result:{
- player:function(player){
- if(game.hasPlayer(function(current){
- return current.hasSex('male')&&get.attitude(player,current)>0;
- })) return 2;
- return 0;
+ target:function (player,target){
+ if(ui.selected.targets.length==0){
+ return get.attitude(player,target)<0?-999:-3;
+ }
+ else{
+ return target.countCards('h')+1;
+ }
},
},
- threaten:1.2
- }
+ expose:0.4,
+ threaten:3,
+ },
},
- reguose:{
+ "smh_huoji":{
+ charlotte:true,
+ group:["smh_yeyan"],
+ mark:true,
+ marktext:"龙",
+ intro:{
+ name:"龙印",
+ content:"出牌阶段限三次,你可以将一张红色牌当【火攻】使用。
若你同时拥有「凤印」,则你视为拥有技能〖业炎〗。(发动〖业炎〗后,弃置龙印和凤印)",
+ },
+ usable:3,
audio:2,
- enable:'phaseUse',
- usable:1,
- discard:false,
- lose:false,
- delay:false,
- filter:function(event,player){
- return player.countCards('hes',{suit:'diamond'})>0;
+ enable:"chooseToUse",
+ position:"hes",
+ filterCard:function(card){
+ return get.color(card)=='red';
},
- position:'hes',
- filterCard:{suit:'diamond'},
- filterTarget:function(card,player,target){
- if(get.position(ui.selected.cards[0])!='s'&&lib.filter.cardDiscardable(ui.selected.cards[0],player,'reguose')&&target.hasJudge('lebu')) return true;
- if(player==target) return false;
- if(!game.checkMod(ui.selected.cards[0],player,'unchanged','cardEnabled2',player)) return false;
- return player.canUse({name:'lebu',cards:ui.selected.cards},target);
+ viewAs:{
+ name:"huogong",
+ nature:"fire",
},
- check:function(card){
- return 7-get.value(card);
+ viewAsFilter:function (player){
+ if(player.hasSkill('huoji')) return false;
+ if(!game.hasPlayer(function(current){
+ return current.hasSkill('xinfu_jianjie');
+ })) return false;
+ if(!player.countCards('hes',{color:'red'})) return false;
},
- content:function(){
- if(target.hasJudge('lebu')){
- player.discard(cards);
- target.discard(target.getJudge('lebu'));
+ prompt:"将一张红色牌当火攻使用",
+ check:function (card){
+ var player=_status.currentPhase;
+ if(player.countCards('h')>player.hp){
+ return 6-get.value(card);
}
- else{
- player.useCard({name:'lebu'},target,cards).audio=false;
- }
- player.draw();
+ return 4-get.value(card)
},
ai:{
- result:{
- target:function(player,target){
- if(target.hasJudge('lebu')) return -get.effect(target,{name:'lebu'},player,target);
- return get.effect(target,{name:'lebu'},player,target);
- }
- },
- order:9,
- }
+ fireAttack:true,
+ },
},
- fenwei:{
- skillAnimation:true,
- animationColor:'wood',
+ "smh_lianhuan":{
audio:2,
- audioname:['heqi'],
- unique:true,
+ charlotte:true,
+ enable:"phaseUse",
+ filter:function (event,player){
+ if(player.hasSkill('lianhuan')||player.hasSkill('xinlianhuan')) return false;
+ if(!game.hasPlayer(function(current){
+ return current.hasSkill('xinfu_jianjie');
+ })) return false;
+ if((player.getStat().skill.smh_lianhuan||0)+(player.getStat().skill.smh_lianhuan1||0)>=3) return false;
+ return player.countCards('hs',{suit:'club'})>0;
+ },
+ filterCard:function (card){
+ return get.suit(card)=='club';
+ },
+ viewAs:{
+ name:"tiesuo",
+ },
+ position:'hs',
+ prompt:"将一张梅花牌当铁锁连环使用",
+ check:function (card){return 6-get.value(card)},
mark:true,
- limited:true,
- trigger:{global:'useCardToPlayered'},
- //priority:5,
- filter:function(event,player){
- if(event.getParent().triggeredTargets3.length>1) return false;
- if(get.type(event.card)!='trick') return false;
- if(get.info(event.card).multitarget) return false;
- if(event.targets.length<2) return false;
- if(player.storage.fenwei) return false;
- return true;
+ marktext:"凤",
+ intro:{
+ name:"凤印",
+ content:"出牌阶段限三次,你可以将你的任意一张梅花手牌当作【铁索连环】使用或重铸。",
},
- init:function(player){
- player.storage.fenwei=false;
+ group:["smh_lianhuan1"],
+ },
+ "xinfu_jianjie2":{
+ trigger:{
+ global:"dieAfter",
},
+ forced:true,
direct:true,
- content:function(){
+ silent:true,
+ popup:false,
+ filter:function (event,player){
+ return event.player.hasSkill('smh_huoji')||event.player.hasSkill('smh_lianhuan');
+ },
+ content:function (){
"step 0"
- player.chooseTarget(get.prompt('fenwei'),
- [1,trigger.targets.length],function(card,player,target){
- return _status.event.targets.contains(target);
- }).set('ai',function(target){
- var trigger=_status.event.getTrigger();
- if(game.phaseNumber>game.players.length*2&&trigger.targets.length>=game.players.length-1&&!trigger.excluded.contains(target)){
- return -get.effect(target,trigger.card,trigger.player,_status.event.player);
- }
- return -1;
- }).set('targets',trigger.targets);
+ player.logSkill('xinfu_jianjie');
"step 1"
- if(result.bool){
- player.awakenSkill('fenwei');
- player.logSkill('fenwei',result.targets);
- player.storage.fenwei=true;
- trigger.getParent().excluded.addArray(result.targets);
+ if(trigger.player.hasSkill('smh_huoji')){
+ player.chooseTarget('请将'+get.translation(trigger.player)+'的「龙印」交给一名角色',true).set('ai',function(target){
+ var player=_status.event.player;
+ return 10+get.attitude(player,target);
+ });
+ }else event.goto(2);
+ "step 2"
+ if(result.bool&&result.targets&&result.targets.length){
+ var target=result.targets[0];
+ player.line(target,'fire');
+ target.addSkill('smh_huoji');
+ game.delay();
+ }
+ "step 3"
+ if(trigger.player.hasSkill('smh_lianhuan')){
+ player.chooseTarget('请将'+get.translation(trigger.player)+'的「凤印」交给一名角色',true).set('ai',function(target){
+ var player=_status.event.player;
+ return 10+get.attitude(player,target);
+ });
+ }else event.finish();
+ "step 4"
+ if(result.bool&&result.targets&&result.targets.length){
+ var target=result.targets[0];
+ player.line(target,'green');
+ target.addSkill('smh_lianhuan');
game.delay();
}
},
- intro:{
- content:'limited'
- }
},
- chulao:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filterTarget:function(card,player,target){
- if(player==target) return false;
- if(target.group=='unknown') return false;
- for(var i=0;i0;
+ "smh_lianhuan1":{
+ enable:"phaseUse",
+ filter:function (event,player){
+ if(player.hasSkill('lianhuan')||player.hasSkill('xinlianhuan')) return false;
+ if(!game.hasPlayer(function(current){
+ return current.hasSkill('xinfu_jianjie');
+ })) return false;
+ if((player.getStat().skill.smh_lianhuan||0)+(player.getStat().skill.smh_lianhuan1||0)>=3) return false;
+ return player.hasCard(card=>lib.skill.smh_lianhuan1.filterCard(card,player),'h');
},
- filter:function(event,player){
- return player.countCards('he')>0;
- },
- filterCard:true,
- position:'he',
- selectTarget:[1,Infinity],
+ filterCard:(card,player)=>get.suit(card)=='club'&&player.canRecast(card),
check:function(card){
- if(get.suit(card)=='spade') return 8-get.value(card);
- return 5-get.value(card);
+ return -1;
},
content:function(){
- "step 0"
- if(num==0&&get.suit(cards[0])=='spade') player.draw();
- player.choosePlayerCard(targets[num],'he',true);
- "step 1"
- if(result.bool){
- if(result.links.length) targets[num].discard(result.links[0]);
- if(get.suit(result.links[0])=='spade') targets[num].draw();
+ player.recast(cards);
+ },
+ discard:false,
+ lose:false,
+ delay:false,
+ prompt:"将一张梅花牌置入弃牌堆并摸一张牌",
+ ai:{
+ basic:{
+ order:1,
+ },
+ result:{
+ player:1
}
},
+ forced:true
+ },
+ "smh_yeyan":{
+ unique:true,
+ enable:"phaseUse",
+ audio:3,
+ skillAnimation:true,
+ animationColor:'gray',
+ prompt:"限定技,出牌阶段,你可以对一至三名角色造成至多共3点火焰伤害(你可以任意分配每名目标角色受到的伤害点数),若你将对一名角色分配2点或更多的火焰伤害,你须先弃置四张不同花色的手牌再失去3点体力。",
+ filter:function (event,player){
+ if(!game.hasPlayer(function(current){
+ return current.hasSkill('xinfu_jianjie');
+ })) return false;
+ return player.hasSkill('smh_lianhuan');
+ },
+ filterTarget:function (card,player,target){
+ var length=ui.selected.cards.length;
+ return (length==0||length==4);
+ },
+ filterCard:function (card){
+ var suit=get.suit(card);
+ for(var i=0;i1){
+ player.chooseCardButton('称好:请选择要分配的牌',true,event.cards,[1,event.cards.length]).set('ai',function(button){
+ if(ui.selected.buttons.length==0) return 1;
+ return 0;
+ });
+ }
+ else if(event.cards.length==1){
+ event._result={links:event.cards.slice(0),bool:true};
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(result.bool){
+ event.cards.removeArray(result.links);
+ event.togive=result.links.slice(0);
+ player.chooseTarget('选择一名角色获得'+get.translation(result.links),true).set('ai',function(target){
+ var att=get.attitude(_status.event.player,target);
+ if(_status.event.enemy){
+ return -att;
+ }
+ else if(att>0){
+ return att/(1+target.countCards('h'));
+ }
+ else{
+ return att/100;
+ }
+ }).set('enemy',get.value(event.togive[0],player,'raw')<0);
+ }
+ 'step 3'
+ if(result.targets.length){
+ var id=result.targets[0].playerid,map=event.given_map;
+ if(!map[id]) map[id]=[];
+ map[id].addArray(event.togive);
+ }
+ if(cards.length>0) event.goto(1);
+ 'step 4'
+ if(_status.connectMode){
+ game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
+ }
+ var list=[];
+ for(var i in event.given_map){
+ var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
+ player.line(source,'green');
+ list.push([source,event.given_map[i]]);
+ }
+ game.loseAsync({
+ gain_list:list,
+ giver:player,
+ animate:'draw',
+ }).setContent('gaincardMultiple');
+ },
+ },
+ "jianjie_faq":{},
+ "xinfu_wuniang":{
+ trigger:{
+ player:["useCard","respond"],
+ },
+ audio:2,
+ direct:true,
+ filter:function (event,player){
+ return event.card.name=='sha';
+ },
+ content:function (){
+ 'step 0'
+ player.chooseTarget(get.prompt('xinfu_wuniang'),'获得一名其他角色的一张牌,然后其和场上所有的“关索”摸一张牌。',function(card,player,target){
+ if(player==target) return false;
+ return target.countGainableCards(player,'he')>0;
+ }).set('ai',function(target){
+ return 10-get.attitude(_status.event.player,target);
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ player.logSkill('xinfu_wuniang',target);
+ player.line(target,'fire');
+ event.draws=game.filterPlayer(function(current){
+ if(current==target) return true;
+ return ['guansuo','old_guansuo'].contains(current.name)||['guansuo','old_guansuo'].contains(current.name2);
+ });
+ player.gainPlayerCard(target,'he',true);
+ }
+ else event.finish();
+ 'step 2'
+ game.asyncDraw(event.draws,1);
+ game.delay();
+ },
+ },
+ "xinfu_xushen":{
+ derivation:["xinfu_zhennan"],
+ audio:2,
+ subSkill:{
+ count:{
+ trigger:{
+ player:"recoverBegin",
+ },
+ forced:true,
+ silent:true,
+ popup:false,
+ filter:function (event,player){
+ if(!event.card||event.card.name!='tao') return false;
+ if(!event.source||!event.source.hasSex('male')) return false;
+ if(!player.isDying()) return false;
+ if(game.hasPlayer(function(current){
+ return current.name=='guansuo'||current.name2=='guansuo';
+ })) return false;
+ return true;
+ },
+ content:function (){
+ trigger.xinfu_xushen=true;
+ },
+ sub:true,
+ },
+ },
+ group:["xinfu_xushen_count"],
+ trigger:{
+ player:"recoverAfter",
+ },
+ limited:true,
+ init:function (player){
+ player.storage.xinfu_xushen=false;
+ },
+ filter:function (event,player){
+ if(player.storage.xinfu_xushen) return false;
+ if(player.isDying()) return false;
+ return event.xinfu_xushen==true;
+ },
+ direct:true,
+ skillAnimation:true,
+ animationColor:'fire',
+ content:function (){
"step 0"
- var cards=get.cards(4);
+ trigger.source.chooseBool('【许身】:是否将自己的一张武将牌替换为“关索”?').set('ai',function(){
+ return false;
+ });
+ "step 1"
+ if(result.bool){
+ player.awakenSkill('xinfu_xushen');
+ player.logSkill('xinfu_xushen',trigger.source);
+ if(trigger.source.name2!=undefined){
+ trigger.source.chooseControl(trigger.source.name,trigger.source.name2).set('prompt','请选择要更换的武将牌');
+ }else event._result={control:trigger.source.name};
+ }
+ else event.finish();
+ "step 2"
+ trigger.source.reinit(result.control,'guansuo');
+ if(_status.characterlist){
+ _status.characterlist.add(result.control);
+ _status.characterlist.remove('guansuo');
+ }
+ player.recover();
+ player.addSkill('xinfu_zhennan');
+ },
+ mark:true,
+ intro:{
+ content:"limited",
+ },
+ },
+
+ "xinfu_falu":{
+ subSkill:{
+ spade:{
+ marktext:'♠︎️',
+ intro:{
+ name:'紫薇',
+ content:'mark',
+ },
+ },
+ heart:{
+ marktext:'♥︎️',
+ intro:{
+ name:'玉清',
+ content:'mark',
+ },
+ },
+ club:{
+ marktext:'♣︎️',
+ intro:{
+ name:'后土',
+ content:'mark',
+ },
+ },
+ diamond:{
+ marktext:'♦︎',
+ intro:{
+ name:'勾陈',
+ content:'mark',
+ },
+ },
+ },
+ forced:true,
+ audio:2,
+ trigger:{
+ player:["loseAfter","enterGame"],
+ global:['loseAsyncAfter',"phaseBefore"],
+ },
+ filter:function (event,player){
+ if(event.name.indexOf('lose')!=0) return (event.name!='phase'||game.phaseNumber==0);
+ if(event.type!='discard'||event.getlx===false) return false;
+ var evt=event.getl(player);
+ for(var i=0;i=2) return false;
- return true;
- });
- next.set('filterOk',function(moved){
- return moved[1].length==2;
- });
- next.set('processAI',function(list){
- var cards=list[0][1].slice(0).sort(function(a,b){
- return get.value(b)-get.value(a);
- });
- return [cards,cards.splice(2)];
- })
- 'step 1'
+ next.set('prompt','点化:点击将牌移动到牌堆顶或牌堆底');
+ next.processAI=function(list){
+ var cards=list[0][1],player=_status.event.player;
+ var target=(_status.event.getTrigger().name=='phaseZhunbei')?player:player.next;
+ var att=get.sgn(get.attitude(player,target));
+ var top=[];
+ var judges=target.getCards('j');
+ var stopped=false;
+ if(player!=target||!target.hasWuxie()){
+ for(var i=0;i0)) break;
+ top.unshift(cards.shift());
+ }
+ }
+ bottom=cards;
+ return [top,bottom];
+ }
+ "step 1"
var top=result.moved[0];
var bottom=result.moved[1];
top.reverse();
@@ -13778,1221 +23011,1442 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(i=0;i-3;
- return get.attitude(player,event.player)>-3;
- },
- logTarget:function(event,player){
- if(event.player==player) return event.source;
- return event.player;
- },
- preHidden:true,
- content:function(){
- "step 0"
- event.count=trigger.num;
- "step 1"
- game.asyncDraw([trigger.player,trigger.source]);
- event.count--;
- "step 2"
- game.delay();
- "step 3"
- if(event.count&&player.hasSkill('wangxi')){
- player.chooseBool(get.prompt2('wangxi',lib.skill.wangxi.logTarget(trigger,player)))
- }
- else event.finish();
- "step 4"
- if(result.bool){
- player.logSkill('wangxi',lib.skill.wangxi.logTarget(trigger,player));
- event.goto(1);
- }
- },
ai:{
- maixie:true,
- maixie_hp:true
- }
- },
- refangquan:{
- audio:2,
- trigger:{player:'phaseUseBefore'},
- filter:function(event,player){
- return player.countCards('h')>0&&!player.hasSkill('fangquan3');
- },
- direct:true,
- content:function(){
- "step 0"
- var fang=player.countMark('fangquan2')==0&&player.hp>=2&&player.countCards('h')<=player.hp+1;
- player.chooseBool(get.prompt2('refangquan')).set('ai',function(){
- if(!_status.event.fang) return false;
- return game.hasPlayer(function(target){
- if(target.hasJudge('lebu')||target==player) return false;
- if(get.attitude(player,target)>4){
- return (get.threaten(target)/Math.sqrt(target.hp+1)/Math.sqrt(target.countCards('h')+1)>0);
- }
- return false;
- });
- }).set('fang',fang);
- "step 1"
- if(result.bool){
- player.logSkill('refangquan');
- trigger.cancel();
- player.addTempSkill('fangquan2','phaseAfter');
- player.addMark('fangquan2',1,false);
- player.addTempSkill('refangquan2');
- //player.storage.fangquan=result.targets[0];
- }
- }
- },
- refangquan2:{
- mod:{
- maxHandcardBase:function(player,num){
- return player.maxHp;
- },
+ threaten:2.2
},
},
- rehunzi:{
- inherit:'hunzi',
- filter:function(event,player){
- return player.hp<=2&&!player.storage.rehunzi;
- },
- ai:{
- threaten:function(player,target){
- if(target.hp<=2) return 2;
- return 0.5;
- },
- maixie:true,
- effect:{
- target:function(card,player,target){
- if(!target.hasFriend()) return;
- if(get.tag(card,'damage')==1&&target.hp==3&&!target.isTurnedOver()&&
- _status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1];
- }
- }
- }
- },
- rezhijian:{
- inherit:'zhijian',
- group:['rezhijian_use'],
- subfrequent:['use'],
- subSkill:{
- use:{
- audio:'rezhijian',
- trigger:{player:'useCard'},
- frequent:true,
- filter:function(event,player){
- return get.type(event.card)=='equip';
- },
- prompt:'是否发动【直谏】摸一张牌?',
- content:function(){
- player.draw('nodelay');
- },
- },
- },
- },
- retuntian:{
- audio:2,
- trigger:{
- player:'loseAfter',
- global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
- },
- frequent:true,
- filter:function(event,player){
- if(player==_status.currentPhase) return false;
- if(event.name=='gain'&&event.player==player) return false;
- var evt=event.getl(player);
- return evt&&evt.cards2&&evt.cards2.length>0;
- },
- content:function(){
- player.judge(function(card){
- return 1;
- }).callback=lib.skill.retuntian.callback;
- },
- callback:function(){
- 'step 0'
- if(event.judgeResult.suit=='heart'){
- player.gain(card,'gain2');
- event.finish();
- }
- else if(get.mode()=='guozhan'){
- player.chooseBool('是否将'+get.translation(card)+'作为“田”置于武将牌上?').set('frequentSkill','retuntian').ai=function(){
- return true;
- };
- }
- else event.directbool=true;
- 'step 1'
- if(!result.bool&&!event.directbool){
- //game.cardsDiscard(card);
- return;
- };
- player.addToExpansion(card,'gain2').gaintag.add('tuntian');
- },
- group:'tuntian_dist',
- locked:false,
- ai:{
- effect:{
- target:function(){
- return lib.skill.tuntian.ai.effect.target.apply(this,arguments);
- }
- },
- threaten:function(player,target){
- if(target.countCards('h')==0) return 2;
- return 0.5;
- },
- nodiscard:true,
- nolose:true
- }
- },
- rebeige:{
- audio:'beige',
- audioname:['re_caiwenji'],
- trigger:{global:'damageEnd'},
- filter:function(event,player){
- return (event.card&&event.card.name=='sha'&&event.source&&
- event.player.classList.contains('dead')==false&&player.countCards('he'));
- },
- direct:true,
- checkx:function(event,player){
- var att1=get.attitude(player,event.player);
- var att2=get.attitude(player,event.source);
- return att1>0&&att2<=0;
- },
- content:function(){
- "step 0"
- var next=player.chooseToDiscard('he',get.prompt2('rebeige',trigger.player));
- var check=lib.skill.beige.checkx(trigger,player);
- next.set('ai',function(card){
- if(_status.event.goon) return 8-get.value(card);
- return 0;
- });
- next.set('logSkill','rebeige');
- next.set('goon',check);
- "step 1"
- if(result.bool){
- trigger.player.judge();
- }
- else{
- event.finish();
- }
- "step 2"
- switch(result.suit){
- case 'heart':trigger.player.recover(trigger.num);break;
- case 'diamond':trigger.player.draw(3);break;
- case 'club':trigger.source.chooseToDiscard('he',2,true);break;
- case 'spade':trigger.source.turnOver();break;
- }
- },
- ai:{
- expose:0.3
- }
- },
- rexingshang:{
- audio:2,
- trigger:{global:'die'},
- filter:function(event,player){
- return player.isDamaged()||event.player.countCards('he')>0;
- },
- direct:true,
- content:function(){
- "step 0"
- var choice=[];
- if(player.isDamaged()) choice.push('回复体力');
- if(trigger.player.countCards('he')) choice.push('获得牌');
- choice.push('cancel2');
- player.chooseControl(choice).set('prompt',get.prompt2('rexingshang')).set('ai',function(){
- if(choice.length==2) return 0;
- if(get.value(trigger.player.getCards('he'))>8) return 1;
- return 0;
- });
- "step 1"
- if(result.control!='cancel2'){
- player.logSkill(event.name,trigger.player);
- if(result.control=='获得牌'){
- event.togain=trigger.player.getCards('he');
- player.gain(event.togain,trigger.player,'giveAuto','bySelf');
- }
- else player.recover();
- }
- },
- },
- refangzhu:{
- audio:2,
+ "xinfu_zhenyi":{
+ group:["zhenyi_spade","zhenyi_club","zhenyi_heart"],
trigger:{
player:"damageEnd",
},
+ audio:2,
+ filter:function (event,player){
+ //if(!event.nature) return false;
+ return player.hasMark('xinfu_falu_diamond');
+ },
+ prompt2:'弃置「勾陈♦」标记,从牌堆中获得每种类型的牌各一张。',
+ content:function (){
+ 'step 0'
+ player.removeMark('xinfu_falu_diamond');
+ event.num=0;
+ event.togain=[];
+ 'step 1'
+ var card=get.cardPile(function(card){
+ for(var i=0;i0) return list[0];
+ return 'cancel2';
+ }).set('judging',trigger.player.judging[0]);
+ "step 1"
+ if(result.control!='cancel2'){
+ player.addExpose(0.25);
+ player.removeMark('xinfu_falu_spade');
+ player.logSkill('xinfu_zhenyi',trigger.player);
+ //player.line(trigger.player);
+ player.popup(result.control);
+ game.log(player,'将判定结果改为了','#y'+get.translation(result.control+2)+5);
+ trigger.fixedResult={
+ suit:result.control,
+ color:get.color({suit:result.control}),
+ number:5,
+ };
+ }
+ },
+ ai:{
+ rejudge:true,
+ tag:{
+ rejudge:1,
+ },
+ expose:0.5,
+ },
+ },
+ "zhenyi_club":{
+ audio:'xinfu_zhenyi',
+ enable:"chooseToUse",
+ viewAsFilter:function(player){
+ if(player==_status.currentPhase) return false;
+ return player.hasMark('xinfu_falu_club')&&player.countCards('hs')>0;
+ },
+ filterCard:true,
+ position:"hs",
+ viewAs:{
+ name:"tao",
+ },
+ prompt:"弃置「后土♣」标记,将一张手牌当桃使用",
+ check:function(card){return 15-get.value(card)},
+ precontent:function(){
+ player.removeMark('xinfu_falu_club');
+ },
+ },
+ zhenyi_heart:{
+ trigger:{
+ source:"damageBegin1",
+ },
+ audio:'xinfu_zhenyi',
+ filter:function (event,player){
+ return player.hasMark('xinfu_falu_heart');
+ },
+ check:function (event,player){
+ if(get.attitude(player,event.player)>=0) return false;
+ if(event.player.hasSkillTag('filterDamage',null,{
+ player:player,
+ card:event.card,
+ })) return false;
+ return true;
+ //return player.hasMark('xinfu_falu_spade')||get.color(ui.cardPile.firstChild)=='black';
+ },
+ prompt2:function(event){
+ return '弃置「玉清♥」标记,令对'+get.translation(event.player)+'即将造成的伤害+1。';
+ },
+ logTarget:"player",
+ content:function(){
+ player.removeMark('xinfu_falu_heart');
+ trigger.num++;
+ },
+ },
+ "xinfu_zhennan":{
+ audio:2,
+ trigger:{
+ target:"useCardToTargeted",
+ },
+ filter:function (event,player){
+ return event.card.name=='nanman';
+ },
direct:true,
content:function (){
"step 0"
- player.chooseTarget(get.prompt2('refangzhu'),function(card,player,target){
- return player!=target
- }).ai=function(target){
- if(target.hasSkillTag('noturn')) return 0;
+ player.chooseTarget(get.prompt('xinfu_zhennan'),'对一名其他角色造成1-3点随机伤害',function(card,player,target){
+ return target!=player;
+ }).set('ai',function(target){
var player=_status.event.player;
- if(get.attitude(_status.event.player,target)==0) return 0;
- if(get.attitude(_status.event.player,target)>0){
- if(target.classList.contains('turnedover')) return 1000-target.countCards('h');
- if(player.getDamagedHp()<3) return -1;
- return 100-target.countCards('h');
- }
- else{
- if(target.classList.contains('turnedover')) return -1;
- if(player.getDamagedHp()>=3) return -1;
- return 1+target.countCards('h');
- }
- }
+ return get.damageEffect(target,player,player);
+ });
"step 1"
- if(result.bool){
- player.logSkill('refangzhu',result.targets);
- event.target=result.targets[0];
- if(player.isHealthy()) event._result={bool:false};
- else event.target.chooseToDiscard('he',player.getDamagedHp()).set('ai',function(card){
- var player=_status.event.player;
- if(player.isTurnedOver()||_status.event.getTrigger().player.getDamagedHp()>2) return -1;
- return (player.hp*player.hp)-get.value(card);
- }).set('prompt','弃置'+get.cnNumber(player.getDamagedHp())+'张牌并失去一点体力;或选择不弃置,将武将牌翻面并摸'+get.cnNumber(player.getDamagedHp())+'张牌。');
- }
- else event.finish();
- "step 2"
- if(result.bool){
- event.target.loseHp();
- }
- else{
- if(player.isDamaged()) event.target.draw(player.getDamagedHp());
- event.target.turnOver();
+ if(result.bool&&result.targets&&result.targets.length){
+ game.delay();
+ player.logSkill('xinfu_zhennan',result.targets);
+ var num=[1,2,3,1,1,2].randomGet();
+ if(get.isLuckyStar(player)) num=3;
+ //player.line(result.targets[0],'fire');
+ result.targets[0].damage(num);
}
},
ai:{
- maixie:true,
- "maixie_hp":true,
- effect:{
- target:function (card,player,target){
- if(get.tag(card,'damage')){
- if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5];
- if(target.hp<=1) return;
- if(!target.hasFriend()) return;
- var hastarget=false;
- var turnfriend=false;
- var players=game.filterPlayer();
- for(var i=0;i0&&players[i].isTurnedOver()){
- hastarget=true;
- turnfriend=true;
- }
- }
- if(get.attitude(player,target)>0&&!hastarget) return;
- if(turnfriend||target.hp==target.maxHp) return [0.5,1];
- if(target.hp>1) return [1,0.5];
- }
- },
- },
- },
- },
- repolu:{
- audio:1,
- trigger:{
- source:'dieAfter',
- player:'die',
- },
- forceDie:true,
- filter:function(event,player,name){
- return name=='die'||player.isIn();
- },
- direct:true,
- content:function(){
- 'step 0'
- if(!player.storage.repolu) player.storage.repolu=0;
- event.num=player.storage.repolu+1;
- player.chooseTarget([1,Infinity],get.prompt('repolu'),'令任意名角色摸'+get.cnNumber(event.num)+'张牌').set('forceDie',true).ai=function(target){
- return get.attitude(_status.event.player,target);
- };
- 'step 1'
- if(result.bool){
- player.storage.repolu++;
- result.targets.sortBySeat();
- player.logSkill('repolu',result.targets);
- game.asyncDraw(result.targets,num);
- }
- else event.finish();
- 'step 2'
- game.delay();
- },
- },
- oljiuchi:{
- mod:{
- cardUsable:function(card,player,num){
- if(card.name=='jiu') return Infinity;
- },
- },
- audio:2,
- enable:'chooseToUse',
- filterCard:function(card){
- return get.suit(card)=='spade';
- },
- viewAs:{name:'jiu'},
- position:'hs',
- viewAsFilter:function(player){
- return player.hasCard(card=>get.suit(card)=='spade','hs');
- },
- prompt:'将一张黑桃手牌当酒使用',
- check:function(cardx,player){
- if(player&&player==cardx.player) return true;
- if(_status.event.type=='dying') return 1;
- var player=_status.event.player;
- var shas=player.getCards('hs',function(card){
- return card!=cardx&&get.name(card,player)=='sha';
- });
- if(!shas.length) return -1;
- if(shas.length>1&&(player.getCardUsable('sha')>1||player.countCards('hs','zhuge'))){
- return 0;
- }
- shas.sort(function(a,b){
- return get.order(b)-get.order(a);
- });
- var card=false;
- if(shas.length){
- for(var i=0;i1+(player.storage.jiu||0)
- &&player.canUse(card,current,true,true)&&
- !current.hasSkillTag('filterDamage',null,{
- player:player,
- card:card,
- jiu:true,
- })&&
- get.effect(current,card,player)>0);
- })){
- return 4-get.value(cardx);
- }
- }
- return -1;
- },
- ai:{
- threaten:1.5,
- },
- trigger:{source:'damageEnd'},
- locked:true,
- forced:true,
- filter:function(event,player){
- if(event.name=='chooseToUse') return player.hasCard(card=>get.suit(card)=='spade','hs');
- return event.card&&event.card.name=='sha'&&event.getParent(2).jiu==true&&!player.hasSkill('oljiuchi_air');
- },
- content:function(){
- player.logSkill('oljiuchi');
- player.addTempSkill('oljiuchi_air');
- },
- subSkill:{
- air:{},
- },
- },
- rezaiqi:{
- count:function(){
- var num=0;
- game.countPlayer2(function(current){
- current.getHistory('lose',function(evt){
- if(evt.position==ui.discardPile){
- for(var i=0;i0;
- },
- trigger:{
- player:'phaseJieshuBegin'
- },
- content:function(){
- 'step 0'
- player.chooseTarget([1,lib.skill.rezaiqi.count()],get.prompt2('rezaiqi')).ai=function(target){
- return get.attitude(_status.event.player,target);
- };
- 'step 1'
- if(result.bool){
- var targets=result.targets;
- targets.sortBySeat();
- player.line(targets,'fire');
- player.logSkill('rezaiqi',targets);
- event.targets=targets;
- }
- else event.finish();
- 'step 2'
- event.current=targets.shift();
- if(player.isHealthy()) event._result={index:0};
- else event.current.chooseControl().set('choiceList',[
- '摸一张牌',
- '令'+get.translation(player)+'回复一点体力',
- ]).set('ai',function(){
- if(get.attitude(event.current,player)>0) return 1;
- return 0;
- });
- 'step 3'
- if(result.index==1){
- event.current.line(player);
- player.recover();
- }
- else event.current.draw();
- game.delay();
- if(targets.length) event.goto(2);
+ expose:0.25,
},
},
},
dynamicTranslate:{
- rejiushi:function(player){
- if(player.storage.chengzhang) return '当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。当你受到伤害后,若你的武将牌背面向上,你可以翻面。当你翻面时,你获得牌堆中的一张随机锦囊。';
- return '当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。当你受到伤害后,若你的武将牌背面向上,你可以翻面并获得牌堆中的一张随机锦囊。';
+ kunfen:function(player){
+ if(player.storage.kunfen) return '结束阶段开始时,你可以失去1点体力,然后摸两张牌。';
+ return '锁定技,结束阶段开始时,你失去1点体力,然后摸两张牌。';
},
- rejiaozhao:function(player){
- return ['出牌阶段限一次。你可以展示一张手牌,并令一名距离你最近的角色选择一种基本牌或普通锦囊牌的牌名。你可将此牌当做其声明的牌使用直到此阶段结束(你不是此牌的合法目标)。','出牌阶段限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用(你不是此牌的合法目标)。','出牌阶段每种类型各限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用。'][player.countMark('redanxin')];
+ jieyuan:function(player){
+ var str='当你对一名其他角色造成伤害时,'
+ if(!player.hasSkill('fenxin_fan')) str+='若其体力值大于或等于你的体力值,';
+ str+='你可弃置一张';
+ if(!player.hasSkill('fenxin_nei')) str+='黑色手';
+ str+='牌,令此伤害+1;当你受到一名其他角色造成的伤害时,';
+ if(!player.hasSkill('fenxin_zhong')) str+='若其体力值大于或等于你的体力值,';
+ str+='你可弃置一张'
+ if(!player.hasSkill('fenxin_nei')) str+='红色手';
+ str+='牌,令此伤害-1。';
+ return str;
+ },
+ youlong:function(player){
+ if(player.storage.youlong) return '转换技,阴,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的普通锦囊牌;阳,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的基本牌。';
+ return '转换技,阴,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的普通锦囊牌;阳,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的基本牌。';
+ },
+ luochong:function(player){
+ var storage=player.getStorage('luochong');
+ var str='准备阶段开始时/当你于一回合首次受到伤害后,你可选择本轮内未选择过的一项(每名角色每轮限选一次):'
+ var choiceList=[
+ '⒈令一名角色回复1点体力。',
+ '⒉令一名角色失去1点体力。',
+ '⒊令一名角色弃置两张牌。',
+ '⒋令一名角色摸两张牌。'
+ ];
+ for(var i=0;i<4;i++){
+ if(storage.contains(i)){
+ choiceList[i]=(''+choiceList[i]+'');
+ }
+ str+=choiceList[i];
+ }
+ return str;
+ },
+ spmanwang:function(player){
+ var num=4-player.countMark('spmanwang');
+ var str='出牌阶段,你可以弃置任意张牌。然后你依次执行以下选项中的前X项:';
+ var list=[
+ '⒈获得〖叛侵〗。',
+ '⒉摸一张牌。',
+ '⒊回复1点体力。',
+ '⒋摸两张牌并失去〖叛侵〗。',
+ ];
+ for(var i=0;i<4;i++){
+ if(i==num){
+ str+='';
+ }
+ str+=list[i];
+ }
+ if(num<4) str+='';
+ return str;
+ },
+ olbixin:function(player){
+ var count=player.countMark('olbixin');
+ if(count<3) return lib.translate.olbixin_info.slice(count*5);
+ return '你可以声明一种牌的类型(每种类型限[3]次),并选择一种你本轮未使用过且有合法目标的的基本牌。你摸[1]张牌,然后若你有此类型的手牌,你将所有此类型的手牌当此基本牌使用。';
+ },
+ olfeibai:function(player){
+ if(player.storage.olfeibai) return '转换技,锁定技。阴:当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1;阳:当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。';
+ return '转换技,锁定技。阴:当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1;阳:当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。'
+ },
+ olmiuyan:function(player){
+ if(player.storage.olmiuyan) return '转换技。你可以将一张黑色牌当做【火攻】使用。然后若此技能:处于阳状态且此牌造成了伤害,则你获得此阶段内所有被展示过的牌;处于阴状态且未造成伤害,则你令此技能失效直到本轮结束。';
+ return '转换技。你可以将一张黑色牌当做【火攻】使用。然后若此技能:处于阳状态且此牌造成了伤害,则你获得此阶段内所有被展示过的牌;处于阴状态且未造成伤害,则你令此技能失效直到本轮结束。';
+ },
+ olsaogu:function(player){
+ if(player.storage.olsaogu) return '转换技。①出牌阶段,你可以。阴:弃置两张牌(不能包含你本阶段弃置过的花色),然后使用其中的【杀】;阳:摸一张牌。②结束阶段,你可以弃置一张牌,令一名其他角色执行你当前〖扫谷①〗的分支。';
+ return '转换技。①出牌阶段,你可以。阴:弃置两张牌(不能包含你本阶段弃置过的花色),然后使用其中的【杀】;阳:摸一张牌。②结束阶段,你可以弃置一张牌,令一名其他角色执行你当前〖扫谷①〗的分支。';
},
},
+ characterReplace:{
+ caoshuang:['caoshuang','ns_caoshuang'],
+ caoang:['caoang','yj_caoang','tw_caoang'],
+ caohong:['tw_re_caohong','caohong','tw_caohong','yj_caohong'],
+ xiahouba:['xiahouba','tw_xiahouba'],
+ maliang:['maliang','re_maliang','tw_maliang','ol_maliang','old_maliang'],
+ dingfeng:['dingfeng','tw_dingfeng','old_dingfeng'],
+ zumao:['zumao','tw_zumao'],
+ beimihu:['tw_beimihu','beimihu'],
+ panfeng:['re_panfeng','panfeng','std_panfeng'],
+ sunluyu:['sunluyu','re_sunluyu'],
+ jin_simazhao:['jin_simazhao','simazhao','sp_simazhao'],
+ jin_wangyuanji:['jin_wangyuanji','wangyuanji','sp_wangyuanji'],
+ wangyun:['re_wangyun','wangyun','dc_wangyun','jsrg_wangyun','old_wangyun','pe_wangyun'],
+ zhangliang:['re_zhangliang','zhangliang'],
+ lingju:['lingju','old_lingju'],
+ guansuo:['guansuo','ol_guansuo'],
+ zhangxingcai:['zhangxingcai','old_zhangxingcai'],
+ lisu:['ol_lisu','lisu'],
+ fuwan:['fuwan','sp_fuwan','tw_fuwan'],
+ huaxin:['ol_huaxin','huaxin','sp_huaxin'],
+ xujing:['xujing','tw_xujing','sp_xujing'],
+ zhaoxiang:['zhaoxiang','tw_zhaoxiang'],
+ dengzhi:['ol_dengzhi','re_dengzhi','tw_dengzhi','dengzhi'],
+ wangrong:['wangrong','ol_wangrong'],
+ zongyu:['tw_zongyu','sp_zongyu','zongyu'],
+ ol_dongzhao:['ol_dongzhao','tw_dongzhao'],
+ mayunlu:['tw_mayunlu','mayunlu'],
+ zhuling:['ol_zhuling','dc_zhuling','zhuling'],
+ zangba:['tw_zangba','zangba'],
+ zhangbao:['zhangbao','re_zhangbao'],
+ jianggan:['jianggan','sp_jianggan'],
+ dc_jiben:['dc_jiben','sp_jiben'],
+ yangyi:['ol_yangyi','tw_yangyi','yangyi'],
+ tianyu:['tw_tianyu','tianyu'],
+ huangchengyan:['huangchengyan','dc_huangchengyan'],
+ puyuan:['puyuan','ol_puyuan'],
+ huangzu:['dc_huangzu','huangzu'],
+ huojun:['dc_huojun','huojun','tw_huojun'],
+ zhaoyǎn:['dc_zhaoyǎn','zhaoyǎn'],
+ furong:['ol_furong','tw_furong','furong'],
+ daxiaoqiao:['tw_daxiaoqiao','daxiaoqiao'],
+ zhugeguo:['tw_zhugeguo','zhugeguo'],
+ wanglang:['wanglang','ol_wanglang','old_wanglang'],
+ tengfanglan:['dc_tengfanglan','tengfanglan'],
+ zhangyì:['ol_zhangyì','zhangyì'],
+ yuantanyuanshang:['yuantanyuanshang','yuantanyuanxiyuanshang'],
+ ruiji:['dc_ruiji','ruiji'],
+ jsp_huangyueying:['jsp_huangyueying','re_jsp_huangyueying'],
+ ganfuren:['dc_ganfuren','ganfuren'],
+ wenqin:['wenqin','pe_wenqin'],
+ zhouqun:['ol_zhouqun','zhouqun'],
+ },
translate:{
- re_zhangliao:'界张辽',
- re_huangyueying:'新黄月英',
- re_simayi:'界司马懿',
- re_xuzhu:'界许褚',
- re_xiahoudun:'界夏侯惇',
- re_lvmeng:'界吕蒙',
- re_zhouyu:'界周瑜',
- re_luxun:'界陆逊',
- re_zhaoyun:'界赵云',
- re_guanyu:'界关羽',
- re_zhangfei:'界张飞',
- re_machao:'界马超',
- re_caocao:'界曹操',
- re_guojia:'界郭嘉',
- re_lvbu:'界吕布',
- re_huanggai:'界黄盖',
- re_daqiao:'界大乔',
- re_ganning:'界甘宁',
- re_huatuo:'界华佗',
- re_liubei:'界刘备',
+ "xinfu_lingren":"凌人",
+ "xinfu_lingren_info":"每回合限一次。当你于出牌阶段内使用带有「伤害」标签的基本牌或普通锦囊牌指定目标后,你可以猜测其中的一个目标的手牌中是否有基本牌,锦囊牌或装备牌。若你猜中的项目数:≥1,此牌对该角色的伤害+1;≥2,你摸两张牌;≥3,你获得技能〖奸雄〗和〖行殇〗直到下回合开始。",
+ "lingren_adddamage":"凌人",
+ "lingren_adddamage_info":"",
+ "lingren_jianxiong":"奸雄",
+ "lingren_jianxiong_info":"当你受到伤害后,你可以获得对你造成伤害的牌并摸一张牌。",
+ "lingren_xingshang":"行殇",
+ "lingren_xingshang_info":"当有角色死亡后,你可以选择一项:1.回复一点体力。2.获得该角色的所有牌。",
+ "xinfu_fujian":"伏间",
+ "xinfu_fujian_info":"锁定技,结束阶段开始时,你观看一名随机的其他角色的随机X张手牌。(X为场上手牌最少的角色的手牌数)",
+ "xinfu_xionghuo":"凶镬",
+ "xinfu_xionghuo_info":"游戏开始时,你获得3个“暴戾”标记。出牌阶段,你可以交给一名其他角色一个“暴戾”标记,你对有“暴戾”标记的其他角色造成伤害时,此伤害+1。有“暴戾”的其他角色的出牌阶段开始时,其移去所有“暴戾”标记并随机执行一项:1.受到1点火焰伤害且本回合不能对你使用【杀】;2.失去1点体力且本回合手牌上限-1;3.你随机获得其一张手牌和一张装备区的牌。",
+ xionghuo:"凶镬",
+ "xionghuo_info":"",
+ "xionghuo_disable":"凶镬",
+ "xionghuo_disable_info":"",
+ "xionghuo_low":"凶镬",
+ "xionghuo_low_info":"",
+ "xinfu_shajue":"杀绝",
+ "xinfu_shajue_info":"锁定技,其他角色进入濒死状态时,若其体力值小于0,则你获得一个“暴戾”标记,并获得使其进入濒死状态的牌。",
+ "xinfu_jianjie":"荐杰",
+ "xinfu_jianjie_info":"你的第一个准备阶段,你令两名其他角色分别获得龙印与凤印;出牌阶段限一次(你的第一个回合除外),或当拥有龙印、凤印的角色死亡时,你可以转移龙印、凤印。",
+ "xinfu_jianjie1":"荐杰",
+ "xinfu_jianjie1_info":"",
+ "smh_huoji":"火计",
+ "smh_huoji_info":"",
+ "smh_lianhuan":"连环",
+ "smh_lianhuan_info":"",
+ "xinfu_jianjie2":"荐杰",
+ "xinfu_jianjie2_info":"",
+ "smh_lianhuan1":"连铸",
+ "smh_lianhuan1_info":"",
+ "smh_yeyan":"业炎",
+ "smh_yeyan_info":"",
+ "xinfu_yinshi":"隐士",
+ "xinfu_yinshi_info":"锁定技,若你没有龙印、凤印且防具栏为空,则当你受到属性伤害或锦囊牌造成的伤害时,防止此伤害。",
+ "xinfu_chenghao":"称好",
+ "xinfu_chenghao_info":"当一名角色受到属性伤害后,若其存活且其武将牌横置且是伤害传导的起点,则你可以观看牌堆顶的X张牌并分配给任意角色。(X为横置的角色数量且包含该角色)",
+ "jianjie_faq":"关于龙凤印",
+ "jianjie_faq_info":"龙印效果:视为拥有〖火计〗。凤印效果:视为拥有〖连环〗。(均一回合限使用三次) 龙凤印齐全:视为拥有〖业炎〗,〖业炎〗发动后移除龙凤印。",
+ "xinfu_wuniang":"武娘",
+ "xinfu_wuniang_info":"当你使用或打出【杀】时,你可以获得一名其他角色的一张牌。若如此做,该角色和场上所有的“关索”各摸一张牌。",
+ "xinfu_xushen":"许身",
+ "xinfu_xushen_info":"限定技,当一名男性角色使用【桃】令你脱离濒死状态时,若场上没有“关索”,则其可以将自己的一张武将牌变更为“关索”。然后你回复一点体力,并获得技能〖镇南〗。",
+ "xinfu_zhennan":"镇南",
+ "xinfu_zhennan_info":"当你成为【南蛮入侵】的目标时,你可以对一名其他角色造成1-3点随机伤害。",
+ "xinfu_falu":"法箓",
+ "xinfu_falu_info":"锁定技,游戏开始时,你获得「紫薇」「后土」「玉清」「勾陈」标记各一个。当你的牌因弃置而进入弃牌堆后,根据这些牌的花色,你获得对应的标记:黑桃,你获得1枚「紫薇」;梅花,你获得1枚「后土」;红桃,你获得1枚「玉清」;方块,你获得1枚「勾陈」。(每种标记限拥有1个)",
+ "xinfu_dianhua":"点化",
+ "xinfu_dianhua_info":"准备阶段或结束阶段,你可以观看牌堆顶的X张牌(X为你的「紫薇」「后土」「玉清」「勾陈」标记数的总和)。若如此做,你将这些牌以任意顺序放回牌堆顶或牌堆底。",
+ "xinfu_zhenyi":"真仪",
+ "xinfu_zhenyi_info":"你可以在以下时机弃置相应的标记来发动以下效果:一名角色的判定牌生效前,你可以弃置一枚「紫薇」,然后将判定结果改为任意花色且点数为5;你的回合外,你可以弃置一枚「后土」,然后将你的一张手牌当【桃】使用;当你造成伤害时,你可以弃置一枚「玉清」,然后令此伤害+1;当你受到伤害后,你可以弃置一张「勾陈」,然后你从牌堆中随机获得三种类型的牌各一张。",
+ "zhenyi_spade":"真仪",
+ "zhenyi_spade_info":"",
+ "zhenyi_club":"真仪",
+ "zhenyi_club_info":"",
+ "zhenyi_heart":"真仪",
+ "zhenyi_heart_info":"",
+ zhangren:'张任',
+ zoushi:'邹氏',
+ zangba:'臧霸',
+ jiling:'纪灵',
+ gz_sp_dongzhuo:'董卓',
+ gz_zhangjiao:'张角',
+ litong:'李通',
+ mizhu:'糜竺',
+ buzhi:'步骘',
+ chenlin:'陈琳',
+ yuanshu:'SP袁术',
+ gongsunzan:'公孙瓒',
+ sp_diaochan:'SP貂蝉',
+ yangxiu:'杨修',
+ sp_zhaoyun:'SP赵云',
+ caohong:'曹洪',
+ liuxie:'刘协',
+ xiahouba:'夏侯霸',
+ zhugejin:'诸葛瑾',
+ zhugeke:'诸葛恪',
+ guanyinping:'关银屏',
+ ganfuren:'SP甘夫人',
+ sunhao:'孙皓',
+ chengyu:'程昱',
+ simalang:'司马朗',
+ tianfeng:'田丰',
+ sp_jiaxu:'SP贾诩',
+ maliang:'马良',
+ sp_caoren:'SP曹仁',
+ yuejin:'乐进',
+ mifuren:'糜夫人',
+ sp_dongzhuo:'SP董卓',
+ chendong:'陈武董袭',
+ jiangfei:'蒋琬费祎',
+ jiangqing:'蒋钦',
+ hetaihou:'何太后',
+ dingfeng:'丁奉',
+ zhangxingcai:'张星彩',
+ caoang:'曹昂',
+ kongrong:'孔融',
+ fuwan:'伏完',
+ sp_pangde:'SP庞德',
+ sp_sunshangxiang:'SP孙尚香',
+ zhugedan:'诸葛诞',
+ sp_machao:'SP马超',
+ sp_jiangwei:'SP姜维',
+ zhangbao:'OL张宝',
+ yangxiou:'杨修',
+ shixie:'士燮',
+ mayunlu:'马云騄',
+ zhanglu:'张鲁',
+ wutugu:'兀突骨',
+ mateng:'马腾',
+ sp_caiwenji:'SP蔡琰',
+ zhugeguo:'诸葛果',
+ lingcao:'凌操',
+ sunru:'手杀孙茹',
+ lingju:'灵雎',
+ lifeng:'李丰',
+ jsp_guanyu:'SP关羽',
+ zhuling:'朱灵',
+ sunluyu:'OL孙鲁育',
+ hanba:'旱魃',
+ panfeng:'OL潘凤',
+ gz_panfeng:'潘凤',
+ zumao:'祖茂',
+ daxiaoqiao:'大小乔',
+ cuiyan:'崔琰',
+ wenpin:'文聘',
+ jsp_huangyueying:'SP黄月英',
+ guansuo:'关索',
+ tadun:'蹋顿',
+ yanbaihu:'严虎',
+ wanglang:'王朗',
+ caochun:'曹纯',
+ dongbai:'OL董白',
+ zhaoxiang:'赵襄',
+ heqi:'贺齐',
+ kanze:'OL阚泽',
+ dongyun:'董允',
+ mazhong:'马忠',
+ huangfusong:'皇甫嵩',
+ wangyun:'王允',
+ sunqian:'孙乾',
+ xizhicai:'戏志才',
+ beimihu:'卑弥呼',
+ luzhi:'鲁芝',
+ bianfuren:'卞夫人',
+ ol_bianfuren:'卞夫人',
+ shamoke:'沙摩柯',
+ lvfan:'吕范',
+ liqueguosi:'李傕郭汜',
+ cuimao:'崔琰毛玠',
+ kaisa:"凯撒",
+
+
+ caoying:"曹婴",
+ simahui:"司马徽",
+ baosanniang:"OL鲍三娘",
+ pangdegong:"手杀庞德公",
+ zhaotongzhaoguang:"手杀赵统赵广",
+ majun:"马钧",
+ simazhao:"司马昭",
+ wangyuanji:"王元姬",
+
+ jianggan:"蒋干",
+ hejin:'何进',
+ hansui:'韩遂',
+ niujin:'牛金',
+ xujing:'许靖',
+ yuantanyuanshang:'袁谭袁尚',
+
+ xinfenyue:'奋钺',
+ xinfenyue_info:'出牌阶段限X次(X为与你不同阵营的存活角色数),你可以与一名其他角色拼点,若你赢,根据你拼点牌的点数依次执行以下效果:不大于5,你获得其一张牌;不大于9,你获得牌堆里的一张【杀】; 不大于K,视为你对其使用一张雷【杀】。',
+ neifa:'内伐',
+ neifa_info:'出牌阶段开始时,你可以摸两张牌或获得场上的一张牌,然后弃置一张牌。若弃置的牌是基本牌,本回合你不能使用锦囊和装备牌,且【杀】的使用次数+X且目标+1;若弃置的不是基本牌,本回合你不能使用基本牌,且使用普通锦囊牌选择目标时可以增加或减少一个目标,前两次使用装备牌时摸X张牌(X为你发动〖内伐〗弃牌后手牌中因〖内伐〗而不能使用的牌的数量且最多为5)。',
+ neifa_use:'内伐',
+ yuxu:'誉虚',
+ yuxu_info:'当你于出牌阶段内使用的牌结算结束后,若你此前于此阶段发动过〖誉虚〗的次数为:偶数,你可以摸一张牌;奇数,你弃置一张牌。',
+ yuxu2:'誉虚(弃牌)',
+ xjshijian:'实荐',
+ xjshijian_info:'一名其他角色于其回合内使用的第二张牌结算完成后,你可弃置一张牌并令其获得技能〖誉虚〗直到回合结束。',
+ mouzhu:'谋诛',
+ mouzhu_info:'出牌阶段限一次,你可以令一名有手牌的其他角色交给你一张手牌。然后若你的手牌数大于其,其选择视为对你使用一张【杀】或【决斗】。',
+ yanhuo:'延祸',
+ yanhuo_info:'当你死亡时,你可以依次弃置一名其他角色的X张牌。(X为你的牌数)',
+ niluan:'逆乱',
+ niluan_info:'其他角色的结束阶段开始时,若其本回合内使用过【杀】或其体力值大于你,则你可以将一张黑色牌当做【杀】使用。',
+ cuorui:'挫锐',
+ cuorui_info:'锁定技,游戏开始时,你摸X张牌(X为你的体力上限)。锁定技,限定技,判定阶段开始前,若你的判定区有牌,你跳过此阶段。',
+ cuorui_info_single:'锁定技,你的起始手牌数改为X+2(X为你剩余的备选武将数)。你跳过登场后的第一个判定阶段。',
+ liewei:'裂围',
+ liewei_info:'当你杀死一名角色后,你可以摸三张牌。',
- re_diaochan:'界貂蝉',
- re_huangyueying:'界黄月英',
- re_sunquan:'界孙权',
- re_sunshangxiang:'界孙尚香',
- re_zhugeliang:'界诸葛亮',
- re_zhenji:'界甄宓',
- re_huaxiong:"界华雄",
-
- "ol_sp_zhugeliang":"界卧龙",
- xin_yuanshao:"手杀袁绍",
- re_zhangjiao:'界张角',
- re_sunce:'界孙策',
- ol_yuanshao:'界袁绍',
- ol_liushan:'界刘禅',
-
- olfangquan:'放权',
- olfangquan_info:'出牌阶段开始前,你可以跳过此阶段。若如此做,弃牌阶段开始时,你可以弃置一张手牌,令一名其他角色进行一个额外回合。',
- olruoyu:'若愚',
- olruoyu_info:'主公技,觉醒技,准备阶段,若你的体力值为全场最少,则你加1点体力上限,将体力回复至3点,然后获得技能〖思蜀〗和〖激将〗。',
- sishu:'思蜀',
- sishu_info:'出牌阶段开始时,你可以选择一名角色。该角色本局游戏内【乐不思蜀】的判定效果反转。',
- olluanji:'乱击',
- olluanji_info:'你可以将两张花色相同的手牌当做【万箭齐发】使用。当你使用【万箭齐发】选择目标后,你可以为此牌减少一个目标。',
- olluanji_remove:'乱击',
- olxueyi:'血裔',
- olxueyi_info:'主公技,锁定技。①游戏开始时,你获得2X个“裔”标记(X为场上群势力角色的数目)。②出牌阶段开始时,你可以移去一个“裔”标记,然后摸一张牌。③你的手牌上限+Y(Y为“裔”标记数)。',
- olxueyi_draw:'血裔',
- olhunzi:'魂姿',
- olhunzi_info:'觉醒技,准备阶段,若你的体力值为1,你减1点体力上限并获得技能〖英姿〗和〖英魂〗;本回合的结束阶段,你摸两张牌或回复1点体力。',
- olzhiba:'制霸',
- olzhiba_info:'主公技,其他吴势力的角色的出牌阶段限一次,其可以与你拼点(你可拒绝此拼点)。若其没赢,你可以获得两张拼点牌。你的出牌阶段限一次,你可以和一名吴势力角色拼点,若你赢,你获得两张拼点牌。',
- olzhiba2:'制霸',
- xinleiji:'雷击',
- xinleiji_misa:'雷击',
- xinguidao:'鬼道',
- xinleiji_info:'①当你使用【闪】或【闪电】,或打出【闪】时,你可以进行判定。②当你的判定的判定牌生效后,若结果为:黑桃,你可对一名其他角色造成2点雷电伤害;梅花:你回复1点体力并可对一名其他其他角色造成1点雷电伤害。',
- xinleiji_append:'不能触发〖雷击〗的判定:〖暴虐〗、〖助祭〗、
〖弘仪〗、〖孤影〗。',
- xinleiji_faq:'不能触发〖雷击〗的判定',
- xinleiji_faq_info:'
董卓/界董卓〖暴虐〗
黄巾雷使〖助祭〗
羊徽瑜〖弘仪〗
鸣濑白羽〖孤影〗',
- xinguidao_info:'一名角色的判定牌生效前,你可以打出一张黑色牌作为判定牌并获得原判定牌。若你以此法打出的牌为黑桃2-9,则你摸一张牌。',
- xinhuangtian:'黄天',
- xinhuangtian2:'黄天',
- xinhuangtian_info:'主公技。其他群势力角色的出牌阶段限一次,该角色可以交给一张【闪】或黑桃手牌。',
- reqiangxi:"强袭",
- "reqiangxi_info":"出牌阶段对每名其他角色限一次,你可以选择一项:1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害;2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成一点伤害。",
- rehuoji:"火计",
- rehuoji_info:"出牌阶段,你可一张红色牌当作【火攻】使用。",
- rekanpo:"看破",
- rekanpo_info:"你可以将一张黑色牌当作【无懈可击】使用。",
- reshuangxiong:"双雄",
- "reshuangxiong_info":"摸牌阶段,你可以放弃摸牌。若如此做,你展示牌堆顶的两张牌并选择获得其中的一张。然后,你本回合内可以将与此牌颜色不同的一张手牌当做【决斗】使用。当你受到【决斗】造成的伤害时,你可以获得对方于此决斗中打出的所有【杀】",
- "reshuangxiong2":"双雄",
- "reshuangxiong2_info":"",
+ weicheng:'伪诚',
+ weicheng_info:'当其他角色获得你的手牌后,若你的手牌数小于体力值,你可以摸一张牌。',
+ daoshu:'盗书',
+ daoshu_info:'出牌阶段限一次。你可以选择一个花色并获得一名其他角色的一张手牌。若此牌花色与你选择的相同,则你对其造成1点伤害且你〖盗书〗于此阶段内可使用的次数上限+1。否则你须交给其一张与此牌花色不同的手牌(没有则展示手牌)。',
- reguanxing:'观星',
- reguanxing_info:'准备阶段,你可以观看牌堆顶的5张牌(存活角色小于4时改为3张),并将其以任意顺序置于牌堆项或牌堆底,若你将〖观星〗的牌都放在了牌堆底,则你可以在结束阶段再次发动〖观星〗。',
- reluoshen:'洛神',
- reluoshen_info:'准备阶段,你可以进行判定,若结果为黑色则获得此判定牌,且可重复此流程直到出现红色的判定结果。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限。',
- reluoshen_info_guozhan:'准备阶段,你可以进行判定,若为黑色则可以继续判定,直到出现红色。然后你获得所有黑色的判定牌。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限(结果为黑色的判定牌于此过程中不会进入弃牌堆)。',
- rejieyin:'结姻',
- rejieyin_info:'出牌阶段限一次,你可以选择一名男性角色并弃置一张手牌或将装备区内的一张装备牌置于其装备区,你与其体力较高的角色摸一张牌,体力值较低的角色回复1点体力。',
- rebiyue:'闭月',
- rebiyue_info:'结束阶段,你可以摸一张牌,若你没有手牌,则改为摸两张牌。',
- rejizhi:'集智',
- rejizhi_info:'当你使用锦囊牌时,你可以摸一张牌。若此牌为基本牌,则你可以弃置之,然后令本回合手牌上限+1。',
- reqicai:'奇才',
- reqicai_info:'锁定技,你使用锦囊牌无距离限制,你装备区内的防具牌和宝物牌不能被其他角色弃置。',
- rezhiheng:'制衡',
- rezhiheng_info:'出牌阶段限一次,你可以弃置任意张牌并摸等量的牌,若你在发动〖制衡〗时弃置了所有手牌,则你多摸一张牌。',
- rejiuyuan:'救援',
- rejiuyuan_info:'主公技,其他吴势力角色对自己使用【桃】时,若其体力值大于你,则其可以选择令你回复1点体力,然后其摸1张牌。',
+ xinshanjia:"缮甲",
+ xinshanjia_info:"出牌阶段开始时,你可以摸三张牌,然后弃置3-X张牌(X为你本局游戏内不因使用而失去过的装备牌的数目且至多为3)。若你没有以此法弃置:基本牌,此阶段你使用【杀】的次数上限+1;锦囊牌,此阶段你使用牌无距离限制;基本牌或锦囊牌,你可以视为使用一张【杀】。",
+ "new_meibu":"魅步",
+ "new_meibu_info":"其他角色的出牌阶段开始时,若你在其攻击范围内,你可以弃置一张牌,令该角色于本回合内获得技能〖止息〗。若你以此法弃置的牌不是【杀】或黑色锦囊牌,则本回合其与你的距离视为1。",
+ "new_mumu":"穆穆",
+ "new_mumu_info":"出牌阶段开始时,你可以选择一项:1.弃置一名其他角色装备区里的一张牌;2.获得一名角色装备区里的一张防具牌,若如此做,你本回合不能使用【杀】。",
+ new_zhixi:"止息",
+ new_zhixi_info:"锁定技。出牌阶段内,若你使用过锦囊牌或使用过的牌数不小于X,则你不能使用牌(X为你的体力值)。",
+ "new_mumu2":"穆穆",
+ "new_mumu2_info":"锁定技,你不能使用【杀】。",
+ new_xingwu:"星舞",
+ new_xingwu_info:"弃牌阶段开始时,你可以将一张牌置于武将牌上,称为“舞”。然后你可以选择一项:①将三张“舞”置入弃牌堆;②弃置两张手牌并将武将牌翻面。若如此做,你选择一名角色,该角色弃置其装备区的所有牌并受到2点伤害(若为女性,则改为1点)。",
+ "new_luoyan":"落雁",
+ "new_luoyan_info":"锁定技。若你的武将牌上有“舞”,则你视为拥有技能〖天香〗和〖流离〗。",
+ "new_luoyan_tianxiang":"天香",
+ "new_luoyan_tianxiang_info":"",
+ "new_luoyan_liuli":"流离",
+ "new_luoyan_liuli_info":"",
+ ol_shichou:"誓仇",
+ ol_shichou_info:"当你使用【杀】时,你可以令至多X+1名角色也成为此【杀】的目标。此牌结算结束后,若你未因【杀】造成过伤害,则你获得此【杀】(X为你已损失的体力值。每回合限获得三次)",
+ "zhenwei_three":"镇卫",
+ "zhenwei_three_info":"锁定技,敌方角色至己方其他角色的距离+1。",
+ "huanshi_three":"缓释",
+ "huanshi_three_info":"一名友方角色的判定牌生效前,你可打出一张牌代替之。",
+ zhengfu:"征服",
+ "zhengfu_info":"当你使用【杀】指定目标时,你可以选择一种牌的类别,然后除非目标角色交给你一种该类别的牌,否则其不能闪避此【杀】。",
+
+ yizan:"翊赞",
+ yizan_info:"你可以将两张牌(其中至少一张是基本牌)当任意基本牌牌使用",
+ yizan0:"翊赞",
+ yizan0_info:"你可以将两张牌(其中至少一张是基本牌)当任意基本牌牌使用",
+ yizan1:"翊赞",
+ yizan1_info:"你可以将两张牌(其中至少一张是基本牌)当【闪】打出",
+ yizan2:"翊赞",
+ yizan2_info:"你可以将一张基本牌当任意基本牌牌使用",
+ yizan3:"翊赞",
+ yizan3_info:"你可以将一张基本牌当【闪】打出 ",
+ yizan5:"翊赞",
+ yizan5_info:"你可以将两张牌(其中至少一张是基本牌)当【杀】打出",
+ yizan6:"翊赞",
+ yizan6_info:"你可以将一张基本牌当【杀】打出",
+ longyuan:"龙渊",
+ longyuan_info:"觉醒技 当你使用或打出基本牌时,若你已经已累计发动过3次【翊赞】,你将【翊赞】改为“你可以将一张基本牌当任意基本牌牌使用或打出”。",
+ wuniang:"武娘",
+ wuniang_info:"你使用或打出【杀】时,你可以获得一名其他角色的一张牌,然后该角色摸一张牌;若“关索”在场,你可令“关索”也摸一张牌",
+ zhennan:"镇南",
+ zhennan_info:"当你成为【南蛮入侵】的目标时,你可令一名其他角色随机受到一至三点伤害",
+ xushen:"许身",
+ xushen_info:"当其他男性角色令你脱离濒死状态时,若“关索”不在场,其可以选择是否用“关索”替换其武将牌,然后你回复一点体力并获得技能【镇南】",
+
+ wanwei:'挽危',
+ wanwei_info:'当你因被其他角色获得或弃置而失去牌时,你可以改为自己选择失去的牌。',
+ gzjili:'蒺藜',
+ gzjili_info:'当你于一回合内使用或打出第X张牌时,你可以摸X张牌(X为你的攻击范围)。',
+ xiongsuan:'凶算',
+ xiongsuan_info:'限定技,出牌阶段,你可以弃置一张手牌并选择一名角色,对其造成1点伤害,然后你摸三张牌。若该角色有已发动的限定技,则你选择其中一个限定技。此回合结束后,视为该限定技未发动过。',
+ diaodu:"调度",
+ diaodu_info:"当你使用装备牌时,你可以摸一张牌;出牌阶段开始时,你可以获得一名其他角色装备区里的一张牌,然后你可以将此牌交给另一名角色。",
+ diancai:'典财',
+ diancai_info:'其他角色的出牌阶段结束时,若你于此阶段失去了X张或更多的牌,则你可以将手牌摸至体力上限。(X为你的体力值)',
+ zhengbi:'征辟',
+ zhengbi_info:'出牌阶段开始时,你可以选择一项:选择一名未受伤的其他角色,你对其使用的牌无距离限制且不计入使用次数直到回合结束;或将一张基本牌交给一名其他角色,然后其交给你一张非基本牌或两张基本牌。',
+ fengying:'奉迎',
+ fengying_info:'限定技,出牌阶段,你可以弃置所有手牌。若如此做,你可以令等量的角色将手牌摸至X张(X为其体力上限且至多为5)。然后,你结束出牌阶段,并在当前回合结束后进行一个新的回合。',
+
+ qingzhong:'清忠',
+ qingzhongx:'清忠',
+ qingzhongx_info:'出牌阶段开始时,你可以摸两张牌,若如此做,此阶段结束时,你与手牌数最少的角色交换手牌。',
+ weijing:'卫境',
+ weijing_info:'每轮限一次,当你需要使用【杀】或【闪】时,你可以视为使用一张【杀】或【闪】。',
+ zishu:'自书',
+ zishu_info:'锁定技,你的回合外,你获得的牌均会在当前回合结束后置入弃牌堆;你的回合内,当你不因〖自书〗而获得牌时,你摸一张牌。',
+ yingyuan:'应援',
+ yingyuan_info:'当你于回合内使用的牌结算完成后,你可以将其交给一名其他角色(相同牌名的牌每回合限一次)。',
+ xinyingyuan:'应援',
+ xinyingyuan_info:'当你于回合内使用一张牌后,你可以令一名其他角色从牌堆获得一张与该牌类型相同的牌(每种类型的牌每回合限一次)。',
+ qianya:'谦雅',
+ qianya_info:'当你成为锦囊牌的目标后,你可以将任意张手牌交给一名其他角色。',
+ shuimeng:'说盟',
+ shuimeng_info:'出牌阶段结束时,你可以与一名角色拼点,若你赢,视为你使用【无中生有】;若你没赢,视为其对你使用【过河拆桥】。',
+ xianfu:'先辅',
+ xianfu2:'先辅',
+ xianfu2_bg:'辅',
+ xianfu_info:'锁定技,游戏开始时,你选择一名其他角色,当其受到伤害后,你受到等量的伤害,当其回复体力后,你回复等量的体力。',
+ chouce:'筹策',
+ chouce_info:'当你受到1点伤害后,你可以判定,若结果为:黑色,你弃置一名角色区域里的一张牌;红色,你选择一名角色,其摸一张牌,若其是〖先辅〗选择的角色,改为其摸两张牌。',
+ fuqi:'伏骑',
+ fuqi_info:'锁定技,当你使用牌时,你令所有与你距离为1的其他角色不能使用或打出牌响应此牌。',
+ jiaozi:'骄恣',
+ jiaozi_info:'锁定技,若你的手牌数为全场唯一最多,则当你造成或受到伤害时,此伤害+1。',
+ wy_meirenji:'美人计',
+ wy_meirenji_info:'出牌阶段,对一名有手牌的其他男性角色使用。每名女性角色各获得其一张手牌并将一张手牌交给你,然后比较你与其的手牌数,手牌少的角色对手牌多的角色造成1点伤害。',
+ wy_xiaolicangdao:'笑里藏刀',
+ wy_xiaolicangdao_info:'出牌阶段,对一名其他角色使用。该角色摸X张牌(X为其已损失的体力值且至多为5),然后你对其造成1点伤害。',
+ weikui:'伪溃',
+ weikui2:'伪溃',
+ weikui_info:'出牌阶段限一次,你可以失去1点体力并选择一名有手牌的其他角色,你观看其手牌:若其手牌中有【闪】,则视为你对其使用【杀】,且本回合你计算与其的距离视为1;若其手牌中没有【闪】,你弃置其中一张牌。',
+ lizhan:'励战',
+ lizhan_info:'结束阶段,你可以令任意名已受伤的角色摸一张牌。',
+ wylianji:'连计',
+ wylianji_info:'出牌阶段限一次,你可以展示一张【杀】或黑色锦囊牌,并令一名其他角色将牌堆中的随机一张武器牌置入装备区(可替换原装备)。然后该角色选择一项:1.对除你以外的角色使用该牌,并将装备区里的武器牌交给该牌的一个目标角色;2.令你对其使用此牌,然后获得此牌,并将装备区内的武器牌交给你。',
+ // from here
+ moucheng:'谋逞',
+ moucheng_info:'觉醒技,当其他角色使用因〖连计〗交给其的牌累计造成伤害达到3点后,你失去技能〖连计〗,然后获得技能〖矜功〗',
+ jingong:'矜功',
+ jingong2:'矜功',
+ jingong_backup:'矜功',
+ jingong_info:'出牌阶段限一次,你可以将一张装备牌或【杀】当做一张随机锦囊牌使用(三选一,其中一张为【美人计】或【笑里藏刀】),然后本回合的结束阶段,若你于本回合内未造成过伤害,你失去1点体力',
+ fenyue:'奋钺',
+ fenyue2:'奋钺',
+ fenyue2_bg:'钺',
+ fenyue_info:'出牌阶段限X次,你可以与一名角色拼点,若你赢,你选择一项:1.令其不能使用或打出手牌直到回合结束;2.视为对其使用一张【杀】(不计入次数)。若你没赢,你结束出牌阶段。(X为存活的忠臣数)',
+
+ zfengshi:'锋矢',
+ zfengshi_info:'当你使用【杀】指定目标后,你可以令目标弃置装备区内的一张牌。',
+ chuanxin:'穿心',
+ chuanxin_info:'当你于出牌阶段内使用【杀】或【决斗】对目标角色造成伤害时,你可以防止此伤害。若如此做,该角色选择一项:1.弃置装备区里的所有牌,若如此做,其失去1点体力;2.随机移除主武将牌上的一个技能。',
+ chuanxin_info_guozhan:'当你于出牌阶段内使用【杀】或【决斗】对目标角色造成伤害时,若其与你势力不同且有副将,你可以防止此伤害。若如此做,该角色选择一项:1.弃置装备区里的所有牌,若如此做,其失去1点体力;2.移除副将。',
+ hengjiang:'横江',
+ hengjiang2:'横江',
+ hengjiang_info:'当你受到1点伤害后,你可以令当前回合角色本回合的手牌上限-1。然后若其弃牌阶段内没有弃牌,则你摸一张牌。',
+ rehengjiang:'横江',
+ rehengjiang2:'横江',
+ rehengjiang3:'横江',
+ rehengjiang_info:'当你受到1点伤害后,你可以令当前回合角色本回合的手牌上限-1。然后若其弃牌阶段内没有弃牌,则你摸X张牌(X为你本回合内对其发动过〖横江〗的次数)。',
+ shuangren:'双刃',
+ shuangren_info:'出牌阶段开始时,你可以与一名角色拼点。若你赢,你视为对其或与其势力相同的另一名角色使用一张【杀】(不计入出牌阶段的次数限制);若你没赢,你本回合内不能对其他角色使用牌。',
+ xiashu:'下书',
+ xiashu_info:'出牌阶段开始时,你可以将所有手牌交给一名其他角色,然后该角色亮出任意数量的手牌(至少一张)。你选择一项:1.获得其亮出的手牌;2.获得其未亮出的手牌。',
+ kuanshi:'宽释',
+ kuanshi2:'宽释',
+ kuanshi_info:'结束阶段,你可以选择一名角色。直到你的下回合开始,该角色第一次受到大于1的伤害时,防止此伤害,然后你跳过下个回合的摸牌阶段。',
+ bingzheng:'秉正',
+ bingzheng_info:'出牌阶段结束时,你可以令手牌数不等于体力值的一名角色弃置一张手牌或摸一张牌。然后若其手牌数等于体力值,你摸一张牌,且可以交给该角色一张牌。',
+ sheyan:'舍宴',
+ sheyan_info:'当你成为普通锦囊牌的目标时(【借刀杀人】等带有指向目标的锦囊除外),你可以为此牌增加一个目标或令其对其中一个目标无效。(有效目标数至少为一)',
+ fuman:'抚蛮',
+ fuman2:'抚蛮',
+ fuman_info:'出牌阶段每名角色限一次,你可以将一张手牌交给一名其他角色并标记为“抚蛮”且“抚蛮”牌的牌名视为【杀】。然后当一名角色使用“抚蛮”牌结算结束后,你摸一张牌。若此牌造成过伤害,则改为摸两张牌。',
+ qizhou:'绮胄',
+ qizhou_info:'锁定技,你根据装备区里牌的花色数获得以下技能:1种或以上:〖马术〗;2种或以上:〖英姿〗;3种或以上:〖短兵〗;4种:〖奋威〗。',
+ shanxi:'闪袭',
+ shanxi_info:'出牌阶段限一次,你可以弃置一张红色基本牌,然后弃置攻击范围内的一名其他角色的一张牌。若弃置的牌是【闪】,你观看其手牌,若弃置的不是【闪】,其观看你的手牌。',
+ duanbing:'短兵',
+ duanbing_info:'当你使用【杀】选择目标后,你可以令一名距离为1的其他角色也成为此牌的目标。',
+ fanghun:'芳魂',
+ fanghun_info:'当你使用【杀】造成伤害或受到【杀】的伤害后,你获得X个“梅影”标记(X为伤害点数);你可以移去1个“梅影”标记来发动〖龙胆〗并摸一张牌。',
+ refanghun:'芳魂',
+ refanghun_info:'当你使用【杀】或成为【杀】的目标后,你获得1个“梅影”标记;你可以移去1个“梅影”标记来发动〖龙胆〗并摸一张牌。',
+ fanghun_sha:'龙胆',
+ fuhan:'扶汉',
+ fuhan_info:'限定技,回合开始时,你可以移去所有“梅影”标记并摸等量的牌,随机观看五名未登场的蜀势力角色,将武将牌替换为其中一名角色,并将体力上限数调整为本局游戏中移去“梅影”标记的数量(至少为2,至多为8),然后回复1点体力。',
+ refuhan:'扶汉',
+ refuhan_info:'限定技,回合开始时,你可以移去所有"梅影"标记并摸等量的牌,然后从X张蜀势力武将牌中选择并获得至多两个技能(限定技、觉醒技、隐匿技、使命技、主公技除外)。若此时你是体力值最低的角色,你回复1点体力(X为场上角色数,且X∈[4,+∞))。',
+ yjixi:'觊玺',
+ yjixi_info:'觉醒技,结束阶段,若你连续三回合没有因〖庸肆〗而失去过体力,则你增加1点体力上限并回复1点体力,然后选择一项:获得技能〖妄尊〗;摸两张牌并获得当前主公的主公技。',
+ xinyongsi:'庸肆',
+ xinyongsi1:'庸肆',
+ xinyongsi2:'庸肆',
+ xinyongsi_info:'锁定技,摸牌阶段,你令额定摸牌数改为X(X为势力数);弃牌阶段开始时,你选择一项:1.弃置一张牌;2.失去1点体力。',
+ xiehui:'黠慧',
+ xiehui2:'黠慧',
+ xiehui_info:'锁定技,你的黑色牌不计入手牌上限;其他角色获得你的黑色牌时,其不能使用、打出、弃置这些牌直到其体力值扣减为止。',
+ lianzhu:'连诛',
+ lianzhu_info:'出牌阶段限一次,你可以展示并交给一名其他角色一张牌,若此牌为黑色,其选择一项:1.你摸两张牌;2.弃置两张牌',
+ shanjia:'缮甲',
+ shanjia_info:'出牌阶段开始时,你可以摸X张牌,然后弃置等量的牌。若你以此法弃置了装备区内的牌,则你可以视为使用一张【杀】。(X为你于本局游戏内使用过的装备牌数且最大为7)',
+ tuifeng:'推锋',
+ tuifeng2:'推锋',
+ tuifeng_info:'1.当你受到伤害后,你可以将至多X张牌置于武将牌上(X为伤害值),称为“锋”。2.准备阶段开始时,若你的武将牌上有“锋”,你移去所有“锋”,摸2X张牌,然后你于此回合的出牌阶段内使用【杀】的次数上限+X。(X为你此次移去的“锋”数)',
+ ziyuan:'资援',
+ ziyuan_info:'出牌阶段限一次,你可以将任意张点数之和为13的手牌交给一名其他角色,然后该角色回复1点体力。',
+ jugu:'巨贾',
+ jugu_info:'锁定技,1.你的手牌上限+X。2.游戏开始时,你摸X张牌(X为你的体力上限)',
+ hongde:'弘德',
+ hongde_info:'当你一次获得或失去至少两张牌后,你可以令一名其他角色摸一张牌。',
+ dingpan:'定叛',
+ dingpan_info_identity:'出牌阶段限X次,你可以令一名装备区里有牌的角色摸一张牌,然后其选择一项:1.令你弃置其装备区里的一张牌;2.获得其装备区里的所有牌,若如此做,你对其造成1点伤害。(X为场上存活的反贼数)',
+ dingpan_info_versus:'出牌阶段限X次,你可以令一名装备区里有牌的角色摸一张牌,然后其选择一项:1.令你弃置其装备区里的一张牌;2.获得其装备区里的所有牌,若如此做,你对其造成1点伤害。(X为场上存活的敌方角色数)',
+ dingpan_info:'出牌阶段限一次,你可以令一名装备区里有牌的角色摸一张牌,然后其选择一项:1.令你弃置其装备区里的一张牌;2.获得其装备区里的所有牌,若如此做,你对其造成1点伤害。',
+ weidi:'伪帝',
+ weidi_info:'锁定技,你视为拥有当前主公的主公技。',
+ juesi:'决死',
+ juesi_info:'出牌阶段,你可以弃置一张【杀】并选择攻击范围内的一名有牌的其他角色,该角色弃置一张牌,然后若弃置的牌不是【杀】且你的体力值不大于该角色,你视为对其使用【决斗】。',
+ zhenlue:'缜略',
+ zhenlue_info:'锁定技,你使用的普通锦囊牌不能被【无懈可击】响应;你不能成为延时锦囊牌的目标。',
+ jianshu:'间书',
+ jianshu_info:'限定技,出牌阶段,你可以将一张黑色手牌交给一名其他角色,并选择另一名其他角色,然后令这两名角色拼点。赢的角色弃置两张牌,没赢的角色失去一点体力。',
+ yongdi:'拥嫡',
+ yongdi_info:'限定技,准备阶段开始时,你可令一名其他男性角色增加一点体力上限并回复1点体力,然后若该角色的武将牌上有主公技且其不为主公,其获得此主公技。',
+ regushe:'鼓舌',
+ regushe_info:'出牌阶段,若X小于7,则你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,没赢的角色选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时,你死亡。(X为你的“饶舌”标记数与本回合因“鼓舌”拼点而胜利的次数之和)',
+ rejici:'激词',
+ rejici2:'激词',
+ rejici_info:'锁定技。①当你的拼点牌亮出后,若此牌的点数不大于X,则你令此牌点数+X,并获得此次拼点中点数最大的拼点牌。②当你死亡时,你令杀死你的角色弃置7-X张牌并失去1点体力(X为你的“饶舌”标记数)。',
+ gushe:'鼓舌',
+ gushe_bg:'舌',
+ gushe_info:'出牌阶段限一次,你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,没赢的角色选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时,你死亡。',
+ jici:'激词',
+ jici_info:'当你因发动〖鼓舌〗而扣置的拼点牌亮出后,若点数小于X,你可令点数+X;若点数等于X,你可令你本回合发动〖鼓舌〗的次数上限+1。(X为你“饶舌”标记的数量)',
+ shefu:'设伏',
+ shefu2:'设伏',
+ shefu_bg:'伏',
+ shefu_info:'结束阶段开始时,你可以将一张牌移出游戏,称为「伏兵」。并为「伏兵」记录一个基本牌或锦囊牌的名称(须与其他「伏兵」记录的名称均不同)。你的回合外,当有其他角色使用与你记录的「伏兵」牌名相同的手牌时,你可以取消此牌的所有目标,然后移去该「伏兵」。若此时处于使用者的回合内,则你令使用者当前的所有非Charlotte技失效直至回合结束。',
+ benyu:'贲育',
+ benyu2:'贲育',
+ benyu_info:'当你受到伤害后,你可选择:①将手牌摸至与伤害来源手牌数相同(至多摸至5张);②弃置大于伤害来源手牌数的牌,然后对其造成1点伤害。',
+ zhidao:'雉盗',
+ zhidao_info:'锁定技,当你于你的回合内第一次对区域里有牌的其他角色造成伤害后,你获得其手牌、装备区和判定区里的各一张牌,然后直到回合结束,其他角色不能被选择为你使用牌的目标。',
+ jili:'寄篱',
+ jili_info:'锁定技,当一名其他角色成为红色基本牌或红色普通锦囊牌的目标时,若其与你的距离为1且你既不是此牌的使用者也不是目标,你也成为此牌的目标。',
+ luanzhan:'乱战',
+ luanzhan_info:'你使用【杀】或黑色普通锦囊牌可以额外选择X名角色为目标;当你使用【杀】或黑色普通锦囊牌指定目标后,若此牌的目标角色数小于X,则X减至0。(X为你于本局游戏内造成过伤害的次数)',
+ zhengnan:'征南',
+ zhengnan_info:'其他角色死亡后,你可以摸三张牌并获得下列技能中的任意一个:〖武圣〗、〖当先〗和〖制蛮〗。',
+ xinzhengnan:'征南',
+ xinzhengnan_info:'当一名角色进入濒死状态时,若你未因其发动过〖征南〗,则你回复1点体力并摸一张牌并获得下列技能中的任意一个:〖武圣〗、〖当先〗和〖制蛮〗(若技能全部拥有则改为摸三张牌。你以此法获得的〖当先〗结算时视为已发动过〖伏枥〗)。',
+ xiefang:'撷芳',
+ xiefang_info:'锁定技,你计算与其他角色的距离时-X。(X为女性角色数)',
+ qizhi:'奇制',
+ qizhi_info:'当你于回合内使用基本牌或锦囊牌指定目标后,你可以弃置不是此牌目标的一名角色的一张牌。若如此做,其摸一张牌。',
+ jinqu:'进趋',
+ jinqu_info:'结束阶段开始时,你可以摸两张牌,若如此做,你将手牌弃置至X张。(X为你于此回合发动过〖奇制〗的次数)',
+ jiqiao:'机巧',
+ jiqiao_info:'出牌阶段开始时,你可以弃置任意张装备牌,然后亮出牌堆顶两倍数量的牌并获得其中的非装备牌。',
+ linglong:'玲珑',
+ linglong_info:'锁定技,若你的装备区没有武器牌,则你使用【杀】的次数上限+1;若你的装备区没有防具牌,视为你装备着【八卦阵】;若你的装备区没有坐骑牌,你的手牌上限+1;若你的装备区没有宝物牌,则你视为拥有技能〖奇才〗。',
+ zhenwei:'镇卫',
+ zhenwei2:'镇卫',
+ zhenwei_info:'当一名其他角色成为【杀】或黑色锦囊牌的目标时(使用者不是你),若该角色的体力值小于你且此牌的目标角色数为1,你可以弃置一张牌。若如此做,你选择一项:1、摸一张牌,然后将此【杀】或黑色锦囊牌转移给你;2、令此【杀】或黑色锦囊牌无效,然后将此【杀】或黑色锦囊牌置于使用者的武将牌旁,若如此做,当前回合结束后,使用者获得使用者武将牌旁的这些牌。',
+ xingwu:'星舞',
+ xingwu_info:'弃牌阶段开始时,你可以将一张与你本回合使用的牌颜色均不同的手牌置于武将牌上:若你有至少三张“星舞”牌,你移去“星舞”牌并选择一名男性角色,该角色受到2点伤害并弃置其装备区的所有牌',
+ luoyan:'落雁',
+ luoyan_info:'锁定技。若你的武将牌上有“星舞牌”,你拥有“天香”和“流离”',
+ yinbing:'引兵',
+ yinbing_info:'结束阶段开始时,你可以将至少一张非基本牌置于武将牌上。每当你受到【杀】或【决斗】的伤害后,你移去一张「引兵」牌。',
+ juedi:'绝地',
+ juedi_info:'锁定技,准备阶段,若你的武将牌上有「引兵」牌,你选择一项:1.移去「引兵」牌,将手牌补至体力上限数;2.将「引兵」牌交给一名体力值不大于你的其他角色,其回复1点体力并摸等量的牌。',
+ kuangfu:'狂斧',
+ kuangfu_info:'当你使用【杀】造成伤害时,你可以选择一项:弃置其装备区内的一张牌,或将其装备区内的一张牌移动到你的装备区内。',
+ xintan:'心惔',
+ xintan_info:'出牌阶段限一次,你可以移去两张「焚」并选择一名角色,该角色失去一点体力。',
+ fentian:'焚天',
+ fentian_info:'锁定技,结束阶段开始时,若你的手牌数少于体力值,你须选择一名攻击范围内的角色,将其一张牌置于你的武将牌上,称为「焚」。锁定技,你的攻击范围+X(X为「焚」的数量)',
+ zhiri:'炙日',
+ zhiri_info:'觉醒技,准备阶段开始时,若你的「焚」的数量不小于3,你减1点体力上限,然后获得技能〖心惔〗',
+ meibu:'魅步',
+ meibu_info:'其他角色的出牌阶段开始时,若你不在其攻击范围内,你可以令该角色的锦囊牌均视为【杀】,直到该角色以此法使用了一张【杀】或回合结束。若如此做,则直到回合结束,视为你在其攻击范围内。',
+ mumu:'穆穆',
+ mumu_info:'出牌阶段限一次,你可以弃置一张【杀】或黑色锦囊牌,然后选择一项:弃置场上的一张武器牌,然后摸一张牌;或将场上的一张防具牌移动到你的装备区里(可替换原防具)。',
+ zhanyi:'战意',
+ zhanyi_basic_sha:'战杀',
+ zhanyi_basic_jiu:'战酒',
+ zhanyi_basic_tao:'战桃',
+ zhanyi_info:'出牌阶段限一次,你可以弃置一张牌并失去1点体力,然后根据你弃置的牌获得以下效果直到回合结束:基本牌,你可以将一张基本牌当作【杀】、【酒】或【桃】使用;锦囊牌,摸两张牌且你使用的牌无距离限制;装备牌,你使用【杀】指定目标角色后,其弃置两张牌。',
+ nuzhan:'怒斩',
+ nuzhan2:'怒斩',
+ nuzhan_info:'锁定技,你使用的由一张锦囊牌转化的【杀】不计入出牌阶段的次数限制;锁定技,你使用的由一张装备牌转化的【杀】的伤害值基数+1',
+ danji:'单骑',
+ danji_info:'觉醒技,准备阶段开始时,若你的手牌数大于你的体力值且本局游戏的主公不为刘备,你减1点体力上限,然后获得〖马术〗和〖怒斩〗。',
+ jieyuan:'竭缘',
+ jieyuan_more:'竭缘',
+ jieyuan_less:'竭缘',
+ jieyuan_info:'当你对一名其他角色造成伤害时,若其体力值大于或等于你的体力值,你可弃置一张黑色手牌,令此伤害+1;当你受到一名其他角色造成的伤害时,若其体力值大于或等于你的体力值,你可弃置一张红色手牌,令此伤害-1。',
+ fenxin:'焚心',
+ fenxin_info:'锁定技,一名其他角色死亡后,若其身份为:忠臣,你本局内发动〖竭缘〗减少伤害时无视体力值限制;反贼,你本局内发动〖竭缘〗增加伤害时无视体力值限制;内奸,你本局内选择发动〖竭缘〗的牌时无颜色和区域限制。',
+ qingyi:'轻逸',
+ qingyi1:'轻逸',
+ qingyi2:'轻逸',
+ qingyi_info:'你可以跳过判定阶段和摸牌阶段。若如此做,视为对一名角色使用了一张无距离限制的【杀】。',
+ xiandeng:'先登',
+ xiandeng_info:'锁定技,出牌阶段,你使用的第一张【杀】不计入次数且无距离限制。',
+ shulv:'熟虑',
+ shulv_info:'出牌阶段限一次,若你的手牌数大于体力值,则你可以弃置一张牌并摸一张牌。',
+ xisheng:'牺牲',
+ xisheng_info:'每名其他角色的回合限一次,你可以将两张牌当做【桃】使用。',
+ yuhua:'羽化',
+ yuhua_info:'锁定技。①你的非基本牌不计入手牌上限。②准备阶段和结束阶段开始时,你卜算1。',
+ qirang:'祈禳',
+ qirang_info:'当有装备牌进入你的装备区时,你可获得牌堆中的一张锦囊牌。若此牌为:普通锦囊牌,则当你使用此“祈禳”牌选择唯一目标后,可为此牌增加一个目标;延时锦囊牌,则你下回合发动〖羽化〗时的卜算量+1(至多为5)。',
+ biluan:'避乱',
+ biluan_info:'摸牌阶段开始时,若有与你距离不大于1的其他角色,你可以放弃摸牌。若如此做,本局内其他角色计算与你的距离时+X。(X为势力数)',
+ lixia:'礼下',
+ lixia_info:'锁定技,其他角色的结束阶段开始时,若你不在其攻击范围内,你摸一张牌或令其摸一张牌。本局内其他角色计算与你的距离时-1。',
+ rebiluan:'避乱',
+ rebiluan2:'避乱',
+ rebiluan_info:'结束阶段开始时,若有与你距离不大于1的其他角色,你可以弃置一张牌。若如此做,本局内其他角色计算与你的距离时+X。(X为场上角色数且至多为4)',
+ relixia:'礼下',
+ relixia_info:'锁定技,其他角色的结束阶段开始时,若你不在其攻击范围内,你选择一至两项:1.摸一张牌;2.其摸两张牌;3.其回复1点体力。本局内其他角色计算与你的距离时-X(X为你选择的选项数)。',
+ yishe:'义舍',
+ yishe_bg:'米',
+ yishe_info:'结束阶段开始时,若你的武将牌上没有「米」,则你可以摸两张牌。若如此做,你将两张牌置于武将牌上,称为「米」;当有「米」移至其他区域后,若你的武将牌上没有「米」,则你回复1点体力。',
+ bushi:'布施',
+ midao:'米道',
+ bushi_info:'当你受到1点伤害后,或其他角色受到你造成的1点伤害后,受到伤害的角色可以获得你的一张「米」',
+ midao_info:'一名角色的判定牌生效前,你可以打出一张「米」代替之。',
+ fengpo:'凤魄',
+ fengpo_info:'每种牌名各限一次。当你每回合使用的第一张【杀】或【决斗】指定目标后,若目标角色数为1,你可以选择一项:1.摸X张牌,令此牌的伤害值基数+1;2.摸一张牌,令此牌的伤害值基数+X(X为其♦牌的数量)。',
+ chenqing:'陈情',
+ chenqing_info:'每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后其弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】。',
+ mozhi:'默识',
+ mozhi_info:'结束阶段开始时,你可以将一张手牌当作你本回合出牌阶段内使用的第一张基本或普通锦囊牌使用。然后,你可以将一张手牌当做你本回合出牌阶段内使用的第二张基本或普通锦囊牌使用。(你不能通过此技能使用【酒】)',
+ ranshang:'燃殇',
+ ranshang2:'燃殇',
+ ranshang_info:'锁定技,当你受到1点火焰伤害后,你获得1枚“燃”标记;结束阶段开始时,你失去X点体力。若X大于2,则你减2点体力上限并摸两张牌。(X为“燃”标记的数量)',
+ hanyong:'悍勇',
+ hanyong_info:'当你使用【南蛮入侵】或【万箭齐发】或黑桃普通【杀】时,若你已受伤,则你可以令此牌的伤害值基数+1。然后若你的体力值不小于游戏轮数,则你获得一枚“燃”标记。',
- "new_yajiao":"涯角",
- "new_yajiao_info":"每当你于回合外使用或打出牌时,你可以亮出牌堆顶的一张牌,并将其交给一名角色。若此牌与你此次使用或打出的牌类别不同,则你弃置一张牌。",
- "new_liyu":"利驭",
- "new_liyu_info":"当你使用【杀】对一名其他角色造成伤害后,你可以获得其区域内的一张牌。若此牌不为装备牌,则其摸一张牌。若此牌为装备牌,则视为你对其选择的另一名角色使用一张【决斗】。",
- "new_retuxi":"突袭",
- "new_retuxi_info":"摸牌阶段摸牌时,你可以少摸任意张牌,然后获得等量的角色的各一张手牌。",
- "new_retuxi_info_guozhan":"摸牌阶段摸牌时,你可以少摸至多两张牌,然后获得等量的角色的各一张手牌。",
- reyiji_tag:'已分配',
- "new_reyiji":"遗计",
- "new_reyiji_info":"当你受到1点伤害后,你可以摸两张牌,然后可以将至多两张手牌交给其他角色。",
- "new_rejianxiong":"奸雄",
- "new_rejianxiong_info":"当你受到伤害后,你可以获得对你造成伤害的牌并摸一张牌。",
- "new_reluoyi":"裸衣",
- "new_reluoyi_info":"摸牌阶段开始时,你展示牌堆顶的三张牌。然后,你可以放弃摸牌。若如此做,你获得其中的基本牌、武器牌和【决斗】,且直到你的下回合开始,你使用的【杀】或【决斗】造成伤害时,此伤害+1。否则,你将这些牌置入弃牌堆。",
- "new_rewusheng":"武圣",
- "new_rewusheng_info":"你可以将一张红色牌当做【杀】使用或打出。你使用的方片杀没有距离限制。",
- "new_yijue":"义绝",
- "new_yijue_info":"出牌阶段限一次,你可以弃置一张牌并令一名有手牌的其他角色展示一张手牌。若此牌为黑色,则该角色不能使用或打出牌,非锁定技失效且受到来自你的红桃【杀】的伤害+1直到回合结束。若此牌为红色,则你可以获得此牌,并可以令其回复一点体力。",
- "new_yijue2":"义绝",
- "new_yijue2_info":"",
- "new_repaoxiao":"咆哮",
- "new_repaoxiao_info":"锁定技,出牌阶段,你使用【杀】没有数量限制。若你于此出牌阶段内使用过【杀】,则你本回合内使用【杀】没有距离限制。",
- "new_tishen":"替身",
- "new_tishen_info":"出牌阶段结束时,你可以弃置你所有的锦囊牌与坐骑牌。若如此做,直到你的下个回合开始,当一张【杀】结算结束后,若你是此牌目标且你未受到此牌伤害,你获得此牌对应的所有实体牌。",
- "new_tishen2":"替身",
- "new_tishen2_info":"",
- "new_qingjian":"清俭",
- "new_qingjian_info":"当你于摸牌阶段外获得牌时,你可以展示任意张牌并交给一名其他角色。然后,当前回合角色本回合的手牌上限+X(X为你给出的牌中包含的类别数)。每回合限一次。",
- "qingjian_add":"清俭",
- "qingjian_add_info":"",
- "new_reqingnang":"青囊",
- "new_reqingnang_info":"出牌阶段,你可以弃置一张手牌,令一名本回合内未成为过〖青囊〗的目标的角色回复一点体力。若你弃置的是黑色牌,则你本回合内不能再发动〖青囊〗。",
- "new_reyaowu":"耀武",
- "new_reyaowu_info":"锁定技,当一名角色使用【杀】对你造成伤害时,若此杀为红色,该角色回复1点体力或摸一张牌。否则你摸一张牌。",
- reyaowu:'耀武',
- reyaowu_info:'锁定技,当你受到牌造成的伤害时,若此牌为红色,则伤害来源摸一张牌;否则你摸一张牌。',
- reqingguo:'倾国',
- reqingguo_info:'你可以将一张黑色牌当做【闪】使用或打出。',
-
- qinxue:'勤学',
- retuxi:'突袭',
- reluoyi:'裸衣',
- reluoyi2:'裸衣',
- reganglie:'刚烈',
- qingjian:'清俭',
- reyingzi:'英姿',
- refanjian:'反间',
- refanjian_card:'弃牌',
- refanjian_hp:'流失体力',
- reqianxun:'谦逊',
- reqianxun2:'谦逊',
- relianying:'连营',
- retishen:'替身',
- retishen2:'替身',
- reyajiao:'涯角',
- rejianxiong:'奸雄',
- rejianxiong_mopai:'摸牌',
- rejianxiong_napai:'拿牌',
- reyiji:'遗计',
- reyiji2:'遗计',
- yijue:'义绝',
- yijue2:'义绝',
- retieji:'铁骑',
- refankui:'反馈',
- reyicong:'义从',
- qiaomeng:'趫猛',
- rekurou:'苦肉',
- zhaxiang:'诈降',
- zhaxiang2:'诈降',
- zhuhai:'诛害',
- qianxin:'潜心',
- jianyan:'荐言',
- reguicai:'鬼才',
- xunxun:'恂恂',
- wangxi:'忘隙',
- reguose:'国色',
- fenwei:'奋威',
- chulao:'除疠',
- liyu:'利驭',
- rerende:'仁德',
- rerende_info:'出牌阶段,你可以将至少一张手牌交给其他角色,然后你于此阶段内不能再以此法交给该角色牌;若你于此阶段内给出的牌首次达到两张,你可以视为使用一张基本牌',
- liyu_info:'当你使用【杀】对一名其他角色造成伤害后,该角色可令你获得其一张牌,若如此做,则视为你对其选择的另一名角色使用一张【决斗】',
- xunxun_info:'摸牌阶段,你可以观看牌堆顶的四张牌,然后将其中的两张牌置于牌堆顶,并将其余的牌以任意顺序置于牌堆底。',
- wangxi_info:'每当你对其他角色造成1点伤害后,或受到其他角色造成的1点伤害后,你可与该角色各摸一张牌。',
- reguose_info:'出牌阶段限一次,你可以选择一项:将一张方片花色牌当做【乐不思蜀】使用;或弃置一张方片花色牌并弃置场上的一张【乐不思蜀】。选择完成后,你摸一张牌。',
- fenwei_info:'限定技,当一名角色使用的锦囊牌指定了至少两名角色为目标时,你可以令此牌对其中任意名角色无效。',
- chulao_info:'出牌阶段限一次,若你有牌,你可以选择任意名势力各不相同的其他角色,你弃置你和这些角色的各一张牌。然后以此法弃置黑桃牌的角色各摸一张牌。',
- reguicai_info:'在任意角色的判定牌生效前,你可以打出一张牌代替之',
- zhuhai_info:'一名其他角色的结束阶段开始时,若该角色本回合造成过伤害,你可以对其使用一张【杀】。',
- qianxin_info:'觉醒技,当你造成一次伤害后,若你已受伤,你须减1点体力上限,并获得技能“荐言”。',
- jianyan_info:'出牌阶段限一次,你可以声明一种牌的类别或颜色,并亮出牌库中第一张符合你声明的牌,然后你令一名男性角色获得此牌',
- rekurou_info:'出牌阶段限一次,你可以弃置一张牌,然后失去1点体力。',
- zhaxiang_info:'锁定技 每当你失去1点体力后,你摸三张牌。然后若此时是你的出牌阶段,则直到回合结束,你使用红色【杀】无距离限制且不能被【闪】响应,你可以额外使用一张【杀】。',
- qiaomeng_info:'当你使用黑色【杀】对一名角色造成伤害后,你可以弃置该角色装备区里的一张牌,若此牌是坐骑牌,你于此牌置入弃牌堆后获得之。',
- reyicong_info:'锁定技,你计算与其他角色的距离时-1。若你的体力值不大于2,则其他角色计算与你的距离时+1。',
- refankui_info:'每当你受到1点伤害后,你可以获得伤害来源的一张牌。',
- retieji_info:'当你使用【杀】指定一名角色为目标后,你可以进行一次判定并令该角色的非锁定技失效直到回合结束,除非该角色弃置一张与判定结果花色相同的牌,否则不能使用【闪】抵消此【杀】。',
- yijue_info:'出牌阶段限一次,你可以与一名其他角色拼点,若你赢,则直到回合结束,该角色不能使用或打出手牌且其非锁定技失效,若你没赢,你可令该角色回复一点体力。',
- reyiji_info:'每当你受到1点伤害后,你可以摸两张牌。然后你可以在至多两名角色的武将牌旁边分别扣置至多两张手牌,这些角色的下个摸牌阶段开始时,该角色获得其武将牌旁的这些牌。',
- rejianxiong_info:'每当你受到伤害后,你可以获得对你造成伤害的牌,然后摸一张牌。',
- reyajiao_info:'每当你于回合外使用或打出一张手牌时,你可以亮出牌堆顶的一张牌,若此牌与你此次使用或打出的牌类别相同,你可以将之交给任意一名角色;若不同则你可以将之置入弃牌堆。',
- retishen_info:'限定技,准备阶段开始时,你可以将体力回复至等同于你上回合结束时的体力值,然后你每以此法回复1点体力,便摸一张牌。',
- reqianxun_info:'每当一张延时类锦囊牌或其他角色使用的普通锦囊牌生效时,若你是此牌的唯一目标,你可以将所有手牌置于你的武将牌上,若如此做,此回合结束时,你获得你武将牌上的所有牌。',
- relianying_info:'当你失去最后的手牌时,你可以令至多X名角色各摸一张牌(X为你此次失去的手牌数)。',
- reyingzi_info:'锁定技,摸牌阶段摸牌时,你额外摸一张牌;你的手牌上限为你的体力上限。',
- refanjian_info:'出牌阶段限一次,你可以展示一张手牌并将此牌交给一名其他角色。然后该角色选择一项:展示其手牌并弃置所有与此牌花色相同的牌,或失去一点体力。',
- qingjian_info:'每当你于摸牌阶段外获得牌时,你可以将其中任意牌以任意顺序交给其他角色,每回合最多发动四次',
- qinxue_info:'觉醒技。准备阶段或结束阶段开始时,若你的手牌数减体力值大于1,则你减一点体力上限,回复1点体力或摸两张牌,获得技能【攻心】。',
- retuxi_info:'摸牌阶段摸牌时,你可以少摸任意张牌,然后选择等量的手牌数大于或等于你的其他角色,获得这些角色的各一张手牌。',
- reluoyi_info:'你可以跳过摸牌阶段,然后展示牌堆顶的三张牌,获得其中的基本牌、武器牌和【决斗】,若如此做,直到你的下回合开始,你为伤害来源的【杀】或【决斗】造成的伤害+1。',
- reganglie_info:'当你受到1点伤害后,你可进行判定,若结果为:红色,你对伤害来源造成1点伤害,;黑色,你弃置伤害来源一张牌。',
- reganglie_info_guozhan:'当你受到伤害后,你可进行判定,若结果为:红色,你对伤害来源造成1点伤害,;黑色,你弃置伤害来源一张牌。',
- botu:'博图',
- botu_info:'回合结束时,若你本回合出牌阶段内使用的牌包含四种花色,则你可以进行一个额外回合。',
- rebotu:'博图',
- rebotu_info:'每轮限X次。回合结束时,若本回合内置入弃牌堆的牌中包含至少四种花色,则你可获得一个额外的回合。(X为存活角色数且至多为3)',
-
- xin_yuji:'界于吉',
- re_zuoci:'界左慈',
- reguhuo:"蛊惑",
- reguhuo_info:"每名角色的回合限一次,你可以扣置一张手牌当作一张基本牌或普通锦囊牌使用或打出。其他角色同时选择是否质疑。然后,你展示此牌。若有质疑的角色:若此牌为假,则此牌作废,且所有质疑者各摸一张牌;为真,则所有质疑角色于此牌结算完成后依次弃置一张牌或失去1点体力,并获得技能〖缠怨〗。",
- reguhuo_guess:"蛊惑",
- reguhuo_guess_info:"",
- rechanyuan:"缠怨",
- rechanyuan_info:"锁定技,你不能于〖蛊惑〗的结算流程中进行质疑。当你的体力值不大于1时,你的其他技能失效。",
- reguhuo_sha:"蛊惑",
- reguhuo_shan:"蛊惑",
- reguhuo_wuxie:"蛊惑",
- reguhuo_ally:'信任',
- reguhuo_betray:'质疑',
- reguhuo_ally_bg:'真',
- reguhuo_betray_bg:'假',
- rehuashen:'化身',
- rehuashen_info:'游戏开始时,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。回合开始时或回合结束时,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技、隐匿技、使命技、主公技等特殊技能)。',
- rexinsheng:'新生',
- rexinsheng_info:'当你受到1点伤害后,你可以获得一张新的化身牌。',
- re_menghuo:'界孟获',
- re_sunjian:'手杀孙坚',
- re_caopi:'界曹丕',
- oljiuchi:'酒池',
- oljiuchi_info:'你可以将一张黑桃手牌当做【酒】使用。锁定技,你使用【酒】无次数限制,且当你于回合内使用带有【酒】效果的【杀】造成伤害后,你令你的【崩坏】失效直到回合结束。',
- repolu:'破虏',
- repolu_info:'当你杀死一名角色/死亡时,你可以令任意名角色摸X+1张牌。(X为你此前发动过【破虏】的次数)',
- rexingshang:'行殇',
- rexingshang_info:'当其他角色死亡后,你可以选择一项:回复1点体力,或获得其所有牌。',
- refangzhu:'放逐',
- refangzhu_info:'当你受到伤害后,你可以令一名其他角色选择一项:摸X张牌并将武将牌翻面,或弃置X张牌并失去1点体力。(X为你已损失的体力值)',
- rezaiqi:'再起',
- rezaiqi_info:'结束阶段开始时,你可以令至多X名角色选择一项:1.摸一张牌,2.令你回复1点体力(X为本回合进入弃牌堆的红色牌数)',
- ol_jiangwei:'界姜维',
- ol_caiwenji:'界蔡琰',
- re_baosanniang:'手杀鲍三娘',
- retuntian:'屯田',
- rebeige:'悲歌',
- retuntian_info:'①当你于回合外失去牌后,你可以判定。若判定结果为♥,你获得此判定牌。否则你将此牌置于你的武将牌上,称为“田”。②你计算与其他角色的距离时-X(X为你武将牌上“田”的数目)。',
- rebeige_info:'当有角色受到【杀】造成的伤害后,你可以弃一张牌,并令其进行一次判定,若判定结果为:♥该角色回复X点体力(X为伤害点数);♦︎该角色摸三张牌;♣伤害来源弃两张牌;♠伤害来源将其武将牌翻面',
- re_liushan:'手杀刘禅',
- re_sunben:'界孙笨',
- re_zhangzhang:'手杀张昭张纮',
- rehunzi:'魂姿',
- rehunzi_info:'觉醒技,准备阶段,若你的体力值不大于2,你减1点体力上限,并获得技能〖英姿〗和〖英魂〗。',
- rezhijian:'直谏',
- rezhijian_info:'出牌阶段,你可以将手牌中的一张装备牌置于一名其他角色装备区里(不得替换原装备),然后摸一张牌。当你使用装备牌时,你可以摸一张牌。',
- refangquan:'放权',
- refangquan_info:'你可跳过你的出牌阶段,若如此做,你本回合的手牌上限为你的体力上限,且回合结束时,你可以弃置一张手牌并令一名其他角色进行一个额外的回合。',
- xin_gaoshun:'界高顺',
- repojun:'破军',
- repojun2:'破军',
- repojun3:'破军',
- repojun_info:'当你使用【杀】指定目标后,你可以将其的至多X张牌置于其武将牌上(X为其体力值),然后其于当前回合结束时获得这些牌。当你因执行【杀】的效果而对一名角色造成伤害时,若该角色的手牌数和装备区内的牌数均不大于你,则此伤害+1。',
- rexianzhen:'陷阵',
- rexianzhen_info:'出牌阶段限一次,你可以和一名其他角色拼点。若你赢,你本回合内对其使用牌没有次数和距离限制且无视其防具。若你没赢,你本回合内不能使用【杀】。若你以此法失去的拼点牌为【杀】,则你的【杀】不计入本回合的手牌上限。',
- rejinjiu:'禁酒',
- rejinjiu_info:'锁定技,你的【酒】均视为【杀】。其他角色不能于你的回合内使用【酒】。当你受到酒【杀】的伤害时,你令此伤害-X(X为影响过此【杀】的伤害值的【酒】的数量)',
- rejinjiu2:'禁酒',
- rejinjiu3:'禁酒',
- ol_xiahouyuan:'界夏侯渊',
- shebian:'设变',
- shebian_info:'当你的武将牌翻面后,你可以移动场上的一张装备牌。',
- cangzhuo:'藏拙',
- cangzhuo_info:'弃牌阶段开始时,若你本回合内没有使用过锦囊牌,则你的锦囊牌不计入手牌上限。',
- re_zhangyi:'界张嶷',
- rewurong:'怃戎',
- rewurong_info:'出牌阶段限一次,你可以令一名其他角色与你同时展示一张手牌:若你展示的是【杀】且该角色展示的不是【闪】,则你对其造成1点伤害;若你展示的不是【杀】且该角色展示的是【闪】,则你获得其一张牌',
- ol_pangtong:'界庞统',
- olniepan:'涅槃',
- olniepan_info:'限定技,当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。然后你选择获得以下技能中的一个:〖八阵〗/〖火计〗/〖看破〗',
- ol_weiyan:'界魏延',
- reqimou:'奇谋',
- reqimou_info:'限定技,出牌阶段,你可以失去任意点体力并摸等量的牌,然后直到回合结束,你计算与其他角色的距离时-X,且你可以多使用X张【杀】(X为你失去的体力值)',
- ol_xiaoqiao:'界小乔',
- rehongyan:'红颜',
- rehongyan_info:'锁定技,你区域内的黑桃牌和黑桃判定牌均视为红桃。当你于回合外正面朝上失去红桃牌后,若你的手牌数小于体力值,你摸一张牌。',
- re_caozhi:'手杀曹植',
- reluoying:'落英',
- reluoying_discard:'落英',
- reluoying_judge:'落英',
- reluoying_info:'当其他角色的梅花牌因弃置或判定而进入弃牌堆后,你可以获得之。',
- rejiushi:'酒诗',
- rejiushi_info:'当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。当你受到伤害后,若你的武将牌背面向上,你可以翻面并获得牌堆中的一张随机锦囊。',
- rejiushi1:'酒诗',
- rejiushi3:'酒诗',
- rejiushi_mark:'酒诗·改',
- rejiushi_mark_info:'当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。当你受到伤害后,若你的武将牌背面向上,你可以翻面。当你翻面时,你获得牌堆中的一张随机锦囊。',
- chengzhang:'成章',
- chengzhang_info:'觉醒技,准备阶段开始时,若你造成伤害与受到伤害值之和累计7点或以上,则你回复1点体力并摸1张牌,然后改写〖酒诗〗。',
- re_wuyi:'界吴懿',
- re_zhuran:'界朱然',
- re_quancong:'界全琮',
- re_liaohua:'界廖化',
- re_guohuai:'界郭淮',
- re_chengpu:'界程普',
- rechunlao:'醇醪',
- rechunlao2:'醇醪',
- rechunlao_info:'出牌阶段结束时,若你没有“醇”,你可以将至少一张【杀】置于你的武将牌上,称为“醇”。当一名角色处于濒死状态时,你可以移去一张“醇”,视为该角色使用一张【酒】,然后若此“醇”的属性为:火,你回复1点体力、雷,你摸两张牌。',
- re_caozhang:'界曹彰',
- yujin_yujin:'界于禁',
- rexuanfeng:'旋风',
- rexuanfeng_info:'当你失去装备区内的牌时,或于弃牌阶段弃置了两张或更多的手牌后,你可以依次弃置一至两名其他角色的共计两张牌,或将一名其他角色装备区内的一张牌移动到另一名其他角色的装备区内。',
- olpaoxiao:'咆哮',
- olpaoxiao2:'咆哮',
- olpaoxiao_info:'①锁定技,你使用【杀】无次数限制。②锁定技,当你使用的【杀】被【闪】抵消时,你获得一枚“咆”(→)当你因【杀】造成伤害时,你弃置所有“咆”并令伤害值+X(X为“咆”数)。回合结束后,你弃置所有“咆”。',
- oltishen:'替身',
- oltishen_info:'限定技,准备阶段,你可以将体力回复至上限,然后摸X张牌(X为你回复的体力值)。',
- ollongdan:'龙胆',
- ollongdan_info:'你可以将一张【杀】当做【闪】、【闪】当做【杀】、【酒】当做【桃】、【桃】当做【酒】使用或打出。',
- olyajiao:'涯角',
- olyajiao_info:'当你于回合外因使用或打出而失去手牌后,你可以展示牌堆顶的一张牌。若这两张牌的类别相同,你可以将展示的牌交给一名角色;若类别不同,你可弃置攻击范围内包含你的角色区域里的一张牌。',
- regongji:'弓骑',
- regongji_info:'出牌阶段限一次,你可以弃置一张非基本牌,然后弃置一名其他角色的一张牌。锁定技,当你的装备区内有坐骑牌时,你的攻击范围无限。',
- ol_sunjian:'界孙坚',
- wulie:'武烈',
- wulie2:'武烈',
- wulie_info:'限定技,结束阶段,你可以失去任意点体力并指定等量的其他角色。这些角色各获得一枚「烈」。有「烈」的角色受到伤害时,其移去一枚「烈」,然后防止此伤害。',
- re_sunluban:'界孙鲁班',
- re_masu:'界马谡',
- ol_pangde:'界庞德',
- rejianchu:'鞬出',
- rejianchu_info:'当你使用【杀】指定一名角色为目标后,你可以弃置其一张牌,若以此法弃置的牌不为基本牌,此【杀】不可被【闪】响应且你本回合使用【杀】的次数上限+1,为基本牌,该角色获得此【杀】',
- re_taishici:'界太史慈',
- hanzhan:'酣战',
- hanzhan_gain:'酣战',
- hanzhan_info:'①当你发起拼点时,或成为拼点的目标时,你可以令对方选择拼点牌的方式改为随机选择一张手牌。②当你拼点结束后,你可以获得本次拼点的拼点牌中点数最大的【杀】。',
- re_jianyong:'界简雍',
- xin_xusheng:'界徐盛',
- decadepojun:'破军',
- decadepojun2:'破军',
- decadepojun_info:'当你使用【杀】指定目标后,你可以将其的至多X张牌置于其武将牌上(X为其体力值)。若这些牌中:有装备牌,你将这些装备牌中的一张置于弃牌堆;有锦囊牌,你摸一张牌。其于回合结束时获得其武将牌上的这些牌。',
- re_wangyi:'界王异',
- wangyi:'王异',
- guanzhang:'关兴张苞',
- rezishou:'自守',
- rezishou2:'自守',
- rezishou_info:'摸牌阶段,你可以多摸X张牌(X为存活势力数)。若如此做,本回合你对其他角色造成伤害时,防止此伤害。',
- rezongshi:'宗室',
- rezongshi_info:'锁定技,你的手牌上限+X(X为存活势力数)。准备阶段,若你的手牌数大于体力值,则你本回合内使用【杀】无次数限制。',
- ol_dongzhuo:'界董卓',
- olbaonue:'暴虐',
- olbaonue_info:'主公技,其他群雄角色造成1点伤害后,你可进行判定,若为♠,你回复1点体力并获得判定牌。',
- re_panzhangmazhong:'界潘璋马忠',
- re_hanhaoshihuan:'界韩浩史涣',
- xinyicong:'义从',
- xinyicong_info:'锁定技,你计算与其他角色的距离时-X,其他角色计算与你的距离时+Y。(X为你的体力值-1,Y为你的已损失体力值-1)',
- oltianxiang:'天香',
- oltianxiang_info:'当你受到伤害时,你可以弃置一张红桃牌,防止此伤害并选择一名其他角色,然后你选择一项:1.令其受到伤害来源对其造成的1点伤害,然后摸X张牌(X为其已损失体力值且至多为5);2.令其失去1点体力,然后获得你弃置的牌。',
- olhongyan:'红颜',
- olhongyan_info:'锁定技,你的黑桃牌的花色视为红桃。若你的装备区内有红桃牌,则你的手牌上限基数视为体力上限。',
- piaoling:'飘零',
- piaoling_info:'结束阶段,你可以进行判定。若判定结果为红桃,则你选择一项:1.将此牌交给一名角色。若你交给了自己,则你弃置一张牌。2.将此牌置于牌堆顶。',
- decadelihuo:'疠火',
- decadelihuo2:'疠火',
- decadelihuo3:'疠火',
- decadelihuo_info:'当你声明使用普【杀】后,你可以将此【杀】改为火【杀】。当你使用火【杀】选择目标时,可以选择一个额外目标。你使用的火【杀】结算完成后,若此【杀】的目标数大于1且你因此【杀】造成过伤害,则你失去1点体力。',
- decadechunlao:'醇醪',
- decadechunlao2:'醇醪',
- decadechunlao_info:'你可以对其他角色使用【酒(使用方法②)】。当你需要使用【酒】时,若你的武将牌未横置,则你可以将武将牌横置,然后视为使用【酒】。当你受到或造成伤害后,若伤害值大于1且你的武将牌横置,则你可以重置武将牌。',
- re_liru:'手杀李儒',
- rejuece:'绝策',
- rejuece_info:'结束阶段,你可以对一名本回合内失去过牌的角色造成1点伤害。',
- remieji:'灭计',
- remieji_info:'出牌阶段限一次,你可以将一张黑色锦囊牌置于牌堆顶,然后令一名有牌的其他角色选择一项:交给你一张锦囊牌,或依次弃置两张非锦囊牌。',
- re_manchong:'界满宠',
- rejunxing:'峻刑',
- rejunxing_info:'出牌阶段限一次,你可以弃置任意张手牌并选择一名其他角色。该角色选择一项:1.弃置X张牌并失去1点体力。2.翻面并摸X张牌。(X为你弃置的牌数)',
- re_gongsunzan:'OL公孙瓒',
- reqiaomeng:'趫猛',
- reqiaomeng_info:'当你使用【杀】对一名角色造成伤害后,你可以弃置该角色区域内的一张牌。若此牌为坐骑牌,则你于此弃置事件结算结束后获得此牌。',
- ol_dengai:'界邓艾',
- oltuntian:'屯田',
- olzaoxian:'凿险',
- oltuntian_info:'①当你于回合外失去牌后,或于回合内因弃置而失去【杀】后,你可以判定。若判定结果不为♥,则你将此牌置于你的武将牌上,称为“田”。②你计算与其他角色的距离时-X(X为你武将牌上“田”的数目)。',
- olzaoxian_info:'觉醒技,准备阶段,若你武将牌上“田”的数量达到3张或更多,则你减1点体力上限,并获得技能〖急袭〗。你于当前回合结束后进行一个额外的回合。',
- re_sunxiu:'界孙休',
- re_caoxiu:'界曹休',
- xin_lingtong:'界凌统',
- decadexuanfeng:'旋风',
- decadexuanfeng_info:'当你于弃牌阶段弃置过至少两张牌,或当你失去装备区里的牌后,若场上没有处于濒死状态的角色,则你可以弃置至多两名其他角色的共计两张牌。若此时处于你的回合内,你可以对其中一名目标角色造成1点伤害。',
- yongjin:'勇进',
- yongjin_info:'限定技,出牌阶段,你可以依次移动场上的至多三张不同的装备牌。',
- xin_liubiao:'界刘表',
- decadezishou:'自守',
- decadezishou_zhiheng:'自守',
- decadezishou_info:'摸牌阶段,你可以多摸X张牌(X为存活势力数);然后本回合你对其他角色造成伤害时,防止此伤害。结束阶段,若你本回合没有使用牌指定其他角色为目标,你可以弃置任意张花色不同的手牌,然后摸等量的牌。',
- decadezongshi:'宗室',
- decadezongshi_info:'锁定技,你的手牌上限+X(X为存活势力数)。你的回合外,若你的手牌数大于等于手牌上限,则当你成为延时类锦囊牌或无颜色的牌的目标后,你令此牌对你无效。',
- re_fazheng:'界法正',
- reenyuan:'恩怨',
- reenyuan1:'恩怨',
- reenyuan2:'恩怨',
- reenyuan_info:'当你获得一名其他角色的至少两张牌后,你可以令其摸一张牌。当你受到1点伤害后,你可令伤害来源选择一项:①失去1点体力。②交给你一张手牌。若此牌不为♥,则你摸一张牌。',
- rexuanhuo:'眩惑',
- rexuanhuo_info:'摸牌阶段结束时,你可以交给一名其他角色两张手牌,然后该角色选择一项:1. 视为对你选择的另一名角色使用任意一种【杀】或【决斗】,2. 交给你所有手牌。',
- re_fuhuanghou:'界伏寿',
- reqiuyuan:'求援',
- reqiuyuan_info:'当你成为【杀】的目标时,你可选择另一名其他角色。除非该角色交给你一张除【杀】以外的基本牌,否则其也成为此【杀】的目标且该角色不能响应此【杀】。',
- rezhuikong:'惴恐',
- rezhuikong_info:'其他角色的回合开始时,若你已受伤,你可与其拼点:若你赢,本回合该角色只能对自己使用牌;若你没赢,你获得其拼点的牌,然后其视为对你使用一张【杀】。',
- re_gongsunyuan:'界公孙渊',
- rehuaiyi:'怀异',
- rehuaiyi_info:'出牌阶段限一次,你可以展示所有手牌,若这些牌的颜色:全部相同,你摸一张牌,并将此技能于本阶段内改为“限两次”,然后终止此技能的结算流程;不全部相同,则你选择一种颜色并弃置该颜色的所有手牌,然后你可以获得至多X名角色的各一张牌(X为你以此法弃置的手牌数)。若你以此法获得的牌不少于两张,则你失去1点体力。',
- re_caozhen:'界曹真',
- residi:'司敌',
- residi_push:'司敌',
- residi2:'司敌',
- residi3:'司敌',
- residi_info:'结束阶段,你可以将一张非基本牌置于武将牌上,称为“司”。其他角色的出牌阶段开始时,你可以移去一张“司”。若如此做,其本阶段内不能使用或打出与“司”颜色相同的牌。此阶段结束时,若其于此阶段内未使用过:【杀】,你视为对其使用一张【杀】。锦囊牌,你摸两张牌。',
- gz_re_xushu:'徐庶',
- re_zhangchunhua:'界张春华',
- xin_handang:'界韩当',
- xingongji:'弓骑',
- xingongji2:'弓骑',
- xingongji_info:'出牌阶段限一次,你可以弃置一张牌,然后你的攻击范围视为无限且使用与此牌花色相同的【杀】无次数限制直到回合结束。若你以此法弃置的牌为装备牌,则你可以弃置一名其他角色的一张牌。',
- xinjiefan:'解烦',
- xinjiefan_info:'限定技,出牌阶段,你可以选择一名角色,令攻击范围内含有该角色的所有角色依次选择一项:1.弃置一张武器牌;2.令其摸一张牌。然后若游戏轮数为1,则你于此回合结束时恢复此技能。',
- gzquanji:'权计',
- gzquanji_info:'每回合每项各限一次。当你受到伤害后或造成伤害后,你可以摸一张牌,然后你将一张牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。',
- gzpaiyi:'排异',
- gzpaiyi_backup:'排异',
- gzpaiyi_info:'出牌阶段限一次。你可以移去一张“权”并选择一名角色。令其摸X张牌(X为你的“权”数且至多为7)。然后若其手牌数大于你,则你对其造成1点伤害。',
- ol_zhurong:'界祝融',
- changbiao:'长标',
- changbiao_info:'出牌阶段限一次,你可以将任意张手牌当做【杀】使用(无距离限制)。若你因此【杀】对目标角色造成过伤害,则你于出牌阶段结束时摸X张牌(X为此【杀】对应的实体牌数量)。',
- re_zhoucang:'界周仓',
- rezhongyong:'忠勇',
- rezhongyong_info:'当你使用【杀】后,你可以将此【杀】以及目标角色使用的【闪】交给一名其他角色,若其获得的牌中有红色,则其可以对你攻击范围内的角色使用一张【杀】。若其获得的牌中有黑色,其摸一张牌。',
- ollihuo:'疠火',
- ollihuo2:'疠火',
- ollihuo3:'疠火',
- ollihuo4:'疠火',
- ollihuo_info:'你使用普通的【杀】可以改为火【杀】,若此【杀】造成过伤害,你失去1点体力;你使用火【杀】可以多选择一个目标。你每回合使用的第一张牌如果是【杀】,则此【杀】结算完毕后可置于你的武将牌上。',
- xinjiangchi:'将驰',
- xinjiangchi_info:'出牌阶段开始时,你可选择:①摸一张牌。②摸两张牌,然后本回合内不能使用或打出【杀】。③弃置一张牌,然后本回合内可以多使用一张【杀】,且使用【杀】无距离限制。',
- re_chenqun:'手杀陈群',
- redingpin:'定品',
- redingpin_info:'出牌阶段,你可以弃置一张本回合未使用过/弃置过的类型的牌并选择一名角色。其进行判定,若结果为:黑色,其摸X张牌(X为其体力值且至多为3)且本回合内不能再成为〖定品〗的目标;红桃,你令此次弃置的牌不计入〖定品〗弃置牌合法性的检测;方片,你将武将牌翻面。',
- refaen:'法恩',
- refaen_info:'一名角色翻面或横置后,你可令其摸一张牌。',
- dcfaen:'法恩',
- dcfaen_info:'一名角色翻至正面或横置后,你可令其摸一张牌。',
- reshizhi:'矢志',
- reshizhi_info:'锁定技,若你的体力值为1,则你的【闪】视为【杀】,且当你使用对应的实体牌为一张【闪】的非转化普通杀造成伤害后,你回复1点体力。',
- re_guotufengji:'界郭图逢纪',
- rejigong:'急攻',
- rejigong2:'急攻',
- rejigong_info:'出牌阶段开始时,你可以摸至多三张牌。若如此做,你本回合的手牌上限基数改为X,且弃牌阶段结束时,若X不小于Y,则你回复1点体力。(X为你本回合内造成的伤害值之和,Y为你本回合内因〖急攻〗摸牌而获得的牌的数量总和)',
- ol_jiangwei:'界姜维',
- oltiaoxin:'挑衅',
- oltiaoxin_info:'出牌阶段限一次,你可以选择一名攻击范围内包含你的角色。然后除非该角色对你使用一张【杀】且此【杀】对你造成伤害,否则你弃置其一张牌,然后将此技能于此出牌阶段内修改为出牌阶段限两次。 ',
- olzhiji:'志继',
- olzhiji_info:'觉醒技,准备阶段或结束阶段,若你没有手牌,你回复1点体力或摸两张牌,然后减1点体力上限,获得〖观星〗。',
- decadezhenjun:'镇军',
- decadezhenjun_info:'准备阶段或结束阶段,你可以弃置一名角色X张牌(X为其手牌数减体力值且至少为1),若其中没有装备牌,你选择一项:1.你弃一张牌;2.该角色摸等量的牌。',
- decadejingce:'精策',
- decadejingce_info:'结束阶段,若你本回合使用过的牌数不小于你的体力值,则你可执行一个摸牌阶段或出牌阶段;若这些牌包含的花色数也不小于你的体力值,则你将“或”改为“并”。',
- re_guanping:'界关平',
- relongyin:'龙吟',
- relongyin_info:'当一名角色于其出牌阶段内使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数。若此【杀】为红色,则你摸一张牌;若你以此法弃置的牌与此【杀】点数相同,则你重置“竭忠”。',
- jiezhong:'竭忠',
- jiezhong_info:'限定技,出牌阶段开始时,你可以将手牌补至体力上限(至多摸五张)。',
- re_caifuren:'界蔡夫人',
- reqieting:'窃听',
- reqieting_info:'其他角色的回合结束时,若其本回合内未造成过伤害,则你可将其装备区内的一张牌置于你的装备区内;若其本回合内未对其他角色使用过牌,则你可摸一张牌。',
- rexianzhou:'献州',
- rexianzhou_info:'限定技。出牌阶段,你可将装备区内的所有牌交给一名其他角色。你回复X点体力,然后对其攻击范围内的至多X名角色各造成1点伤害(X为你以此法给出的牌数)。',
- xin_zhonghui:'界钟会',
- xinquanji:'权计',
- xinquanji_info:'①当你受到1点伤害后,或你的牌被其他角色获得后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”。②你的手牌上限+X(X为“权”的数量)。',
- xinzili:'自立',
- xinzili_info:'觉醒技。准备阶段,若你的“权”数大于2,则你回复1点体力并摸两张牌,减1点体力上限并获得〖排异〗。',
- xinpaiyi:'排异',
- xinpaiyi_backup:'排异',
- xinpaiyi_info:'出牌阶段每项各限一次,你可移去一张“权”并选择一项:①令一名角色摸X张牌。②对至多X名角色各造成1点伤害。(X为“权”数)',
- re_guyong:'界顾雍',
- reshenxing:'慎行',
- reshenxing_info:'出牌阶段,你可以弃置X张牌(X为你本阶段内发动过〖慎行〗的次数且至少为0,至多为2),然后摸一张牌。',
- rebingyi:'秉壹',
- rebingyi_info:'结束阶段,你可展示所有手牌。若这些牌:颜色均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数);点数均相同,则你摸一张牌。',
- re_jiaxu:'界贾诩',
- rewansha:'完杀',
- rewansha_info:'锁定技。①你的回合内,不处于濒死状态的其他角色不能使用【桃】。②当有角色于你的回合内进入濒死状态时,你令其以外的所有其他角色的非锁定技失效直到此濒死状态结算结束。',
- reluanwu:'乱武',
- reluanwu_info:'限定技,出牌阶段,你可令所有其他角色依次选择一项:①对距离最近(或之一)的角色使用一张【杀】;②失去1点体力。结算完成后,你可视为使用一张【杀】(无距离限制)。',
- reweimu:'帷幕',
- reweimu_info:'锁定技。①你不能成为黑色锦囊牌的目标。②当你于回合内受到伤害时,你防止此伤害并摸2X张牌(X为伤害值)。',
- ol_lusu:'界鲁肃',
- olhaoshi:'好施',
- olhaoshi_info:'摸牌阶段开始时,你可以多摸两张牌。然后摸牌阶段结束时,若你的手牌数大于5,则你将手牌数的一半(向下取整)交给一名手牌最少其他角色并获得如下效果直到你下回合开始:当你成为【杀】或普通锦囊牌的目标后,其可以交给你一张手牌。',
- oldimeng:'缔盟',
- oldimeng_info:'出牌阶段限一次,你可令两名满足X≤Y的其他角色交换手牌并获得如下效果:出牌阶段结束时,你弃置X张牌(X为这两名角色手牌数之差的绝对值;Y为你的手牌数)。',
-
- rejijiang:'激将',
- rejijiang1:'激将',
- rejijiang2:'激将',
- rejijiang_info:'主公技。①当你需要使用或打出【杀】时,你可以令其他蜀势力角色依次选择是否打出一张【杀】。若有角色响应,则你视为使用或打出了此【杀】。②每回合限一次。当有蜀势力角色于回合外使用或打出【杀】时,其可以令你摸一张牌。',
- xin_yufan:'界虞翻',
- xinzongxuan:'纵玄',
- xinzongxuan_info:'当你的牌因弃置而进入弃牌堆后,你可将其中的任意张牌置于牌堆顶。若剩余的牌中有锦囊牌,则你可以令一名其他角色获得其中的一张。',
- xinzhiyan:'直言',
- xinzhiyan_info:'结束阶段开始时,你可令一名角色摸一张牌(正面朝上移动)。若此牌为基本牌,则你摸一张牌。若此牌为装备牌,则其回复1点体力并使用此装备牌。',
- re_xiahoushi:'界夏侯氏',
- reqiaoshi:'樵拾',
- reqiaoshi_info:'其他角色的结束阶段开始时,若你的手牌数与其相等,则你可以与其各摸一张牌。若这两张牌花色相同,则你可以重复此步骤。',
- reyanyu:'燕语',
- reyanyu2:'燕语',
- reyanyu_info:'①出牌阶段,你可以重铸【杀】。②出牌阶段结束时,你可以令一名其他男性角色摸X张牌(X为你本阶段内发动过〖燕语①〗的次数且至多为3)。',
- rehujia:'护驾',
- rehujia_info:'主公技。①当你需要使用或打出一张【闪】时,你可以令其他魏势力角色选择是否打出一张【闪】。若有角色响应,则你视为使用或打出了一张【闪】。②每回合限一次。当有魏势力角色于回合外使用或打出【闪】时,其可以令你摸一张牌。',
- ol_xuhuang:'界徐晃',
- olduanliang:'断粮',
- olduanliang_info:'你可以将一张黑色非锦囊牌当做【兵粮寸断】使用。若你于当前回合内未造成过伤害,则你使用【兵粮寸断】无距离限制。',
- oljiezi:'截辎',
- oljiezi_info:'①当有角色跳过摸牌阶段后,你可选择一名角色。若该角色:手牌数为全场最少且没有“辎”,则其获得一枚“辎”。否则其摸一张牌。②一名角色的摸牌阶段结束时,若其有“辎”,则你移去其“辎”,然后令其获得一个额外的摸牌阶段。',
- re_madai:'界马岱',
- reqianxi:'潜袭',
- reqianxi_info:'准备阶段开始时,你可摸一张牌,然后弃置一张牌并选择一名距离为1的其他角色。该角色于本回合内:{不能使用或打出与此牌颜色相同的牌,且其装备区内与此牌颜色相同的防具牌无效,且当其回复体力时,你摸两张牌。}',
- re_guohuanghou:'界郭皇后',
- rejiaozhao:'矫诏',
- rejiaozhao_info:'出牌阶段限一次。你可以展示一张手牌,并令一名距离你最近的角色选择一种基本牌或普通锦囊牌的牌名。你可将此牌当做其声明的牌使用直到此阶段结束(你不是此牌的合法目标)。',
- rejiaozhao_lv2:'矫诏·升级 Lv.1',
- rejiaozhao_lv2_info:'出牌阶段限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用(你不是此牌的合法目标)。',
- rejiaozhao_lv3:'矫诏·升级 Lv.2',
- rejiaozhao_lv3_info:'出牌阶段每种类型各限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用。',
- redanxin:'殚心',
- redanxin_info:'当你受到伤害后,你可以摸一张牌并升级〖矫诏〗。',
- xin_wuguotai:'界吴国太',
- xinganlu:'甘露',
- xinganlu_info:'出牌阶段限一次。你可以令两名角色交换装备区内的牌,然后若这两名角色装备区内牌数差的绝对值大于你已损失的体力值,则你弃置两张手牌。',
- xinbuyi:'补益',
- xinbuyi_info:'一名角色进入濒死状态时,你可展示其一张手牌。若此牌不为基本牌,则其弃置此牌并回复1点体力。若其以此法弃置的牌移动前为其的唯一一张手牌,则其摸一张牌。',
- decadexianzhen:'陷阵',
- decadexianzhen2:'陷阵',
- decadexianzhen_info:'每回合限一次。出牌阶段,你可以和一名其他角色拼点。若你赢:本回合你无视该角色的防具,且对其使用牌没有次数和距离限制,且本回合对其使用牌造成伤害时,此伤害+1(每种牌名每回合限一次);若你没赢:你本回合内不能使用【杀】,且【杀】不计入手牌上限。',
- decadejinjiu:'禁酒',
- decadejinjiu_info:'锁定技。你的【酒】的牌名均视为【杀】且点数视为K;你的回合内,其他角色不能使用【酒】。',
- dc_xushu:'界徐庶',
- rezhuhai:'诛害',
- rezhuhai_info:'其他角色的回合结束时,若其本回合内造成过伤害,则你可以选择一项:⒈将一张手牌当做【杀】对其使用。⒉视为对其使用一张【过河拆桥】。',
- xsqianxin:'潜心',
- xsqianxin_info:'觉醒技。当你造成伤害后,若你已受伤,则你减1点体力上限并获得〖荐言〗。',
- rejianyan:'荐言',
- rejianyan_info:'出牌阶段每项各限一次。你可选择一种颜色或一种牌的类别,然后系统从牌堆中检索出一张满足该条件的牌并展示之。然后你将此牌交给一名男性角色或Key势力角色。',
- re_zhanghe:'界张郃',
- reqiaobian:'巧变',
- reqiaobian_info:'①游戏开始时,你获得两枚“变”。②判定阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。③摸牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后可以获得至多两名其他角色的各一张手牌。④出牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后你可以移动场上的一张牌。⑤弃牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。⑥结束阶段,若你的〖巧变⑥〗记录中不包含你的手牌数,则你获得一枚“变”并记录你的手牌数。',
- olbeige:'悲歌',
- olbeige_info:'当有角色受到渠道为【杀】的伤害后,若你有牌,你可令其进行判定。然后你可弃置一张牌,根据判定结果执行以下的一个选项:♥,其回复1点体力;♦,其摸两张牌;♣,伤害来源弃置两张牌️;♠,伤害来源将武将牌翻面。若你弃置的牌与判定结果:点数相同,则你获得你弃置的牌;花色相同,则你获得判定牌。',
- dc_bulianshi:'界步练师',
- dcanxu:'安恤',
- dcanxu_info:'出牌阶段限一次,你可以选择两名手牌数不同的其他角色,令其中手牌少的角色获得手牌多的角色的一张手牌并展示之。然后若此牌不为黑桃,则你摸一张牌;若这两名角色手牌数相等,则你回复1点体力。',
- dczhuiyi:'追忆',
- dczhuiyi_info:'当你死亡时,你可以令一名不为击杀者的其他角色摸X张牌(X为存活角色数),然后其回复1点体力。',
- re_jushou:'界沮授',
- dcshibei:'矢北',
- dcshibei_info:'锁定技,当你于一回合内第一次受到伤害后,你回复1点体力;当你于一回合内第二次受到伤害后,你失去1点体力。',
- dcjianying:'渐营',
- dcjianying_info:'当你使用与你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。',
- re_duji:'界杜畿',
- reandong:'安东',
- reandong_info:'当你受到其他角色造成的伤害时,你可以令伤害来源选择一项:⒈防止此伤害。然后其♥牌不计入本回合的手牌上限;⒉你观看其手牌并获得其中的所有♥牌,若其没有手牌,则你下次发动〖安东〗时改为自行选择。',
- reyingshi:'应势',
- reyingshi_info:'出牌阶段开始时,你可以展示一张手牌,选择一名角色A和一名其他角色B。A可以对B使用一张【杀】,然后获得你展示的牌。若A因此【杀】造成过伤害,则A获得牌堆中与展示牌花色点数相同的其他牌。',
- dcqiaomeng:'趫猛',
- dcqiaomeng_info:'当你使用黑色牌指定第一个目标后,你可以弃置目标角色中一名其他角色的一张牌。若你以此法弃置的牌为:装备牌,你获得此牌;锦囊牌,你令此牌不可被响应。',
- dc_gongsunzan:'界公孙瓒',
- re_liuchen:'界刘谌',
- rezhanjue:'战绝',
- rezhanjue_effect:'战绝',
- rezhanjue_info:'出牌阶段,若你本阶段内因〖战绝〗获得过的牌数小于3,则你可以将所有不具有“勤王”标记的手牌当做【决斗】使用。此【决斗】使用结算结束后,你摸一张牌。然后所有因此【决斗】受到过伤害的角色也各摸一张牌。',
- reqinwang:'勤王',
- reqinwang_info:'主公技。出牌阶段限一次,你可以令所有其他蜀势力角色依次选择是否交给你一张【杀】,然后你可以令选择是的角色摸一张牌。',
- shizhan:'势斩',
- shizhan_info:'出牌阶段限两次,你可以选择一名其他角色。该角色视为对你使用一张【决斗】。',
- ol_xunyu:'界荀彧',
- oljieming:'节命',
- oljieming_info:'当你受到1点伤害后或死亡时,你可令一名角色摸X张牌。然后若其手牌数大于X,则其将手牌弃置至X张(X为其体力上限且至多为5)。',
- re_liufeng:'界刘封',
- rexiansi:'陷嗣',
- rexiansi2:'陷嗣',
- rexiansi_info:'①准备阶段开始时,你可以将一至两名角色的各一张牌置于你的武将牌上,称为“逆”。②当一名角色需要对你使用【杀】时,其可以移去两张“逆”,然后视为对你使用一张【杀】。③若你的“逆”数大于体力值,则你可以移去一张“逆”并视为使用一张【杀】。',
- re_sp_taishici:'界SP太史慈',
- re_sp_taishici_ab:'太史慈',
- rejixu:"击虚",
- rejixu_info:"出牌阶段限一次。若你有手牌,则你可以选择至多X名角色,令这些角色猜测你的手牌区中是否有【杀】。若你:有【杀】,则你本阶段使用【杀】的次数上限+Y,且当你于本阶段内使用【杀】指定目标后,你可以令这Y名角色也成为此【杀】的目标;没有【杀】,则你弃置这Y名角色的各一张牌。然后你摸Y张牌(X为你的体力值,Y为这些角色中猜错的角色数)。",
- ol_dianwei:'界典韦',
- olqiangxi:'强袭',
- olqiangxi_info:'出牌阶段限两次。你可以弃置一张武器牌或受到1点无来源伤害,然后对一名本回合内未成为过〖强袭〗目标的其他角色造成1点伤害。',
- olningwu:'狞恶',
- olningwu_info:'锁定技。当一名角色A于一回合内第二次受到伤害后,若A或伤害来源为你,则你摸一张牌,然后弃置其装备区或判定区内的一张牌。',
- re_zhuhuan:'界朱桓',
- refenli:'奋励',
- refenli_info:'若你的手牌数为全场最多,你可以跳过判定阶段和摸牌阶段;若你的体力值为全场最多,你可以跳过出牌阶段;若你的装备区里有牌且数量为全场最多,你可以跳过弃牌阶段。',
- //破界石不值钱了 就逮着免费突破硬削是吧
- repingkou:'平寇',
- repingkou_info:'回合结束时,你可以对至多X名其他角色各造成1点伤害(X为你本回合跳过的阶段数)。若你选择的角色数小于X,则你可以弃置其中一名角色装备区内的一张牌',
- dc_liru:'界李儒',
- dcmieji:'灭计',
- dcmieji_info:'出牌阶段限一次,你可以展示一张武器牌或黑色锦囊牌。你将此牌置于牌堆顶,然后令一名有手牌的其他角色选择一项:⒈弃置一张锦囊牌;⒉依次弃置两张非锦囊牌。',
- dcfencheng:'焚城',
- dcfencheng_info:'限定技。出牌阶段,你可以指定一名其他角色,令从其开始的其他角色依次选择一项:⒈弃置至少X张牌(X为上一名角色弃置的牌数+1)。⒉你对其造成2点伤害。',
- oljiang:'激昂',
- oljiang_info:'①当你使用【决斗】或红色【杀】指定第一个目标后,或成为【决斗】或红色【杀】的目标后,你可以摸一张牌。②当有【决斗】或红色【杀】于每回合内首次因弃置而进入弃牌堆后,你可以失去1点体力并获得这些牌。',
- re_xunyou:'界荀攸',
- reqice:'奇策',
- reqice_info:'出牌阶段限X次(X为你的“奇策”数+1),你可以将所有手牌当做任意一张普通锦囊牌使用。',
- rezhiyu:'智愚',
- rezhiyu_info:'当你受到伤害后,你可以摸一张牌,然后展示所有手牌,令伤害来源弃置一张手牌。若你展示的牌颜色均相同,你获得1枚“奇策”直到下回合结束且获得来源弃置的牌。',
- re_caiyong:'界蔡邕',
- rebizhuan:'辟撰',
- rebizhuan_bg:'书',
- rebizhuan_info:'①当你使用♠牌时,或成为其他角色使用♠牌的目标后,你可以将牌堆顶的一张牌置于武将牌上,称为“书”(你至多拥有四张“书”)。②你的手牌上限+X(X为“书”数)。',
- retongbo:'通博',
- retongbo_info:'摸牌阶段结束时,你可以用任意手牌交换等量“书”。然后若“书”数至少为4,你可以将四张“书”任意交给其他角色。若你交出的牌花色各不相同,你回复1点体力且“书”的上限+1(至多增加等同存活角色数的上限)。',
- re_chengong:'界陈宫',
- remingce:'明策',
- remingce_info:'出牌阶段限一次。你可以将一张【杀】或装备牌交给一名其他角色,其选择一项:1.视为对你选择的另一名角色使用一张【杀】,且若此牌造成伤害,则执行选项2;2.你与其各摸一张牌。',
- re_sundeng:'界孙登',
- rekuangbi:'匡弼',
- rekuangbi_info:'出牌阶段开始时,你可以令一名其他角色将至多三张牌置于你的武将牌上直到此阶段结束。然后当你使用牌时,若你:有与此牌花色相同的“匡弼”牌,你移去其中一张并与其各摸一张牌;没有与此牌花色相同的“匡弼”牌,你随机移去一张“匡弼”牌并摸一张牌。',
- dc_chenqun:'界陈群',
- repindi:'品第',
- repindi_info:'出牌阶段每名角色限一次。你可以弃置一张本阶段未以此法弃置过的类型的牌并选择一名角色,你选择一项:1.其摸X张牌;2.其弃置X张牌(X为你本回合发动〖品第〗的次数)。然后若其已受伤,你横置或重置。',
- re_mazhong:'界马忠',
- refuman:'抚蛮',
- refuman_info:'出牌阶段每名角色限一次。你可以弃置一张牌,令一名其他角色从弃牌堆中获得一张【杀】。然后其于其下个回合结束前使用或打出此牌时,你与其各摸一张牌。',
- re_guanzhang:'界关兴张苞',
- retongxin:'同心',
- retongxin_info:'锁定技。你的攻击范围+2。',
- re_wenpin:'界文聘',
- rezhenwei:'镇卫',
- rezhenwei_info:'当一名其他角色成为【杀】或黑色锦囊牌的目标时(使用者不是你),若该角色的体力值不大于你且此牌的目标角色数为1,你可以弃置一张牌。若如此做,你选择一项:1、摸一张牌,然后将此【杀】或黑色锦囊牌转移给你;2、令此【杀】或黑色锦囊牌无效,然后将此【杀】或黑色锦囊牌置于使用者的武将牌旁,若如此做,当前回合结束后,使用者获得使用者武将牌旁的这些牌。',
- ol_huangzhong:'界黄忠',
- remoshi:'没矢',
- remoshi_info:'锁定技。①当你使用【杀】对目标角色造成伤害后,若其装备区里有防具牌或坐骑牌,你将此【杀】对应的实体牌置于其武将牌上。②当有“没矢”牌的角色失去防具牌或坐骑牌后,你获得其“没矢”牌。',
- dc_caozhi:'界曹植',
- dcjiushi:'酒诗',
- dcjiushi_info:'①当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。②当你受到伤害后,若你的武将牌于受到伤害时背面向上,你可以翻面。③当你使用【酒】后,你使用【杀】的次数上限+1直到你的下个回合结束。',
- olhuoji:'火计',
- olhuoji_info:'①你可以将一张红色牌当【火攻】使用。②你使用【火攻】的作用效果改为“目标角色随机展示一张手牌A,然后你可以弃置一张与A颜色相同的牌,对目标造成1点火属性伤害”。',
- olkanpo:'看破',
- olkanpo_info:'①你可以将一张黑色牌当【无懈可击】使用。②你使用的【无懈可击】不可被响应。',
- xinwangxi:'忘隙',
- xinwangxi_info:'当你对其他角色造成1点伤害后,或受到其他角色造成的1点伤害后,你可以摸两张牌,然后交给其一张牌。',
- ol_yanwen:'界颜良文丑',
- olshuangxiong:'双雄',
- olshuangxiong_info:'①摸牌阶段结束时,你可以弃置一张牌。若如此做,你本回合内可以将一张与此牌颜色不同的牌当做【决斗】使用。②结束阶段,你从弃牌堆中获得本回合内对你造成伤害的所有牌。',
- re_zhuzhi:'界朱治',
- reanguo:'安国',
- reanguo_info:'出牌阶段限一次。你可以选择一名其他角色,若其:手牌数为全场最少,其摸一张牌;体力值为全场最低,其回复1点体力;装备区内牌数为全场最少,其随机使用一张装备牌。然后若该角色有未执行的效果且你满足条件,你执行之。若你与其执行了全部分支,你可以重铸任意张牌。',
- dcyicong:'义从',
- dcyicong_info:'锁定技。①你至其他角色的距离-1。②若你已损失的体力值不小于2,则其他角色至你的距离+1。',
- re_zhangsong:'界张松',
- rexiantu:'献图',
- rexiantu_info:'其他角色的出牌阶段开始时,你可以摸两张牌,然后将两张牌交给该角色。然后此阶段结束时,若其于此阶段没有造成过伤害,你失去1点体力。',
- re_jsp_huangyueying:'界SP黄月英',
- re_jsp_huangyueying_ab:'黄月英',
- rejiqiao:'机巧',
- rejiqiao_info:'出牌阶段开始时,你可以弃置任意张牌,然后亮出牌堆顶X张牌(X为你以此法弃置的牌数与其中装备牌数之和),你获得其中所有非装备牌。',
- relinglong:'玲珑',
- relinglong_info:'锁定技。若你的装备区:有空置的防具栏,你视为拥有〖八卦阵〗;有空置的两种坐骑栏,你的手牌上限+2;有空置的宝物栏,你视为拥有〖奇才〗;以上均满足:你使用的【杀】或普通锦囊牌不可被响应。',
- ol_zhangzhang:'界张昭张纮',
- olzhijian:'直谏',
- olzhijian_info:'出牌阶段,你可以将一张装备牌置于其他角色的装备区(可替换原装备),然后摸一张牌。',
- olguzheng:'固政',
- olguzheng_info:'每阶段限一次。当其他角色的至少两张牌因弃置而进入弃牌堆后,你可以令其获得其中一张牌,然后你可以获得剩余的牌。',
- re_caochong:'界曹冲',
- rechengxiang:'称象',
- rechengxiang_info:'当你受到伤害后,你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于13的牌。若你获得的牌点数之和为13,你复原武将牌。',
- re_caorui:'界曹叡',
- rexingshuai:'兴衰',
- rexingshuai_info:'主公技,限定技。当你进入濒死状态时,你可令其他魏势力角色依次选择是否令你回复1点体力。然后这些角色依次受到1点伤害。有〖明鉴〗效果的角色于其回合内杀死角色后,你重置〖兴衰〗。',
- xin_zhangliang:'界张梁',
- rejijun:'集军',
- rejijun_info:'当你使用目标角色含有自己的牌结算完毕后,你可以进行一次判定并将判定牌置于武将牌上,称为“方”。',
- refangtong:'方统',
- refangtong_info:'结束阶段,你可以将一张手牌置于武将牌上,称为“方”。若如此做,你可以移去任意张“方”并对一名其他角色造成1点雷属性伤害(若你移去的“方”的点数和大于36,则改为造成3点雷属性伤害)。',
- re_simalang:'界司马朗',
- requji:'去疾',
- requji_info:'出牌阶段限一次,你可以弃置至多X张牌并令等量名角色回复1点体力,然后仍处于受伤状态的目标角色摸一张牌,若你以此法弃置了黑色牌,你失去1点体力。',
- rejunbing:'郡兵',
- rejunbing_info:'一名角色的结束阶段,若其手牌数小于其体力值,其可以摸一张牌并将所有手牌交给你,然后你可以交给其等量的牌。',
- re_zhugedan:'界诸葛诞',
- regongao:'功獒',
- regongao_info:'锁定技。一名其他角色首次进入濒死状态时,你增加1点体力上限,然后回复1点体力。',
- rejuyi:'举义',
- rejuyi_info:'觉醒技。准备阶段,若你已受伤,且你的体力上限大于场上的存活角色数,你将手牌数摸至体力上限,然后获得技能〖崩坏〗和〖威重〗。',
- reweizhong:'威重',
- reweizhong_info:'锁定技。当你的体力上限增加或减少时,你摸两张牌。',
-
- refresh_standard:'界限突破·标',
- refresh_feng:'界限突破·风',
- refresh_huo:'界限突破·火',
- refresh_lin:'界限突破·林',
- refresh_shan:'界限突破·山',
- refresh_yijiang1:'界限突破·将1',
- refresh_yijiang2:'界限突破·将2',
- refresh_yijiang3:'界限突破·将3',
- refresh_yijiang4:'界限突破·将4',
- refresh_yijiang5:'界限突破·将5',
- refresh_yijiang6:'界限突破·原6',
- refresh_xinghuo:'界限突破·星火',
+ yicong:'义从',
+ yongsi:'庸肆',
+ yongsi1:'庸肆',
+ yongsi2:'庸肆',
+ bifa:'笔伐',
+ bifa2:'笔伐',
+ songci:'颂词',
+ songci_draw:'颂词',
+ baobian:'豹变',
+ lihun:'离魂',
+ chongzhen:'冲阵',
+ chongzhen1:'冲阵',
+ chongzhen2:'冲阵',
+ yuanhu:'援护',
+ tianming:'天命',
+ mizhao:'密诏',
+ duwu:'黩武',
+ duwu3:'黩武',
+ mingzhe:'明哲',
+ huanshi:'缓释',
+ hongyuan:'弘援',
+ aocai:'傲才',
+ aocai2:'傲才',
+ aocai2_backup:'傲才',
+ aocai3:'傲才',
+ huxiao:'虎啸',
+ huxiao3:'虎啸',
+ xueji:'雪恨',
+ wuji:'武继',
+ shushen:'淑慎',
+ shenzhi:'神智',
+ xiongyi:'雄异',
+ junbing:'郡兵',
+ junbing2:'郡兵',
+ quji:'去疾',
+ sijian:'死谏',
+ suishi:'随势',
+ suishi2:'随势',
+ xiaoguo:'骁果',
+ duanxie:'断绁',
+ fenming:'奋命',
+ guixiu:'闺秀',
+ cunsi:'存嗣',
+ yongjue:'勇决',
+ hengzheng:'横征',
+ shengxi:'生息',
+ shoucheng:'守成',
+ shangyi:'尚义',
+ zniaoxiang:'鸟翔',
+ zhendu:'鸩毒',
+ qiluan:'戚乱',
+ qiluan2:'戚乱',
+ qiluan3:'戚乱',
+ shenxian:'甚贤',
+ oldshenxian:'甚贤',
+ qiangwu:'枪舞',
+ moukui:'谋溃',
+ moukui2:'谋溃',
+ lirang:'礼让',
+ mingshi:'名士',
+ liangzhu:'良助',
+ kaikang:'慷忾',
+ wangzun:'妄尊',
+ tongji:'同疾',
+ kuiwei:'溃围',
+ kuiwei2:'溃围',
+ yanzheng:'严整',
+ zhoufu:'咒缚',
+ zhoufu2:'咒缚',
+ zhoufu3:'咒缚',
+ yingbin:'影兵',
+ reyingbing:'影兵',
+ rezhoufu:'咒缚',
+ rezhoufu2:'咒缚',
+ fenxun:'奋迅',
+ fenxun2:'奋迅',
+ spmengjin:'猛进',
+ xiemu:'协穆',
+ xiemu2:'协穆',
+ oldxiemu:'协穆',
+ naman:'纳蛮',
+ taichen:'抬榇',
+ jilei:'鸡肋',
+ jilei2:'鸡肋',
+ jilei2_bg:'肋',
+ yawang:'雅望',
+ xunzhi:'殉志',
+ fanxiang:'返乡',
+ fanxiang_info:'觉醒技,准备阶段开始时,若场上有已受伤且你发动过〖良助〗的选项二的角色,则你加1点体力上限并回复1点体力,失去技能〖良助〗并获得技能〖枭姬〗',
+ xunzhi_info:'准备阶段开始时,若你的上家和下家与你的体力值均不相等,你可以失去1点体力。若如此做,你本局内手牌上限+2。',
+ yawang_info:'锁定技,摸牌阶段开始时,你改为摸X张牌,然后你于本回合的出牌阶段内至多使用X张牌(X为与你体力值相等的角色数)',
+ jilei_info:'当你受到有来源的伤害后,你可以声明一种牌的类别。若如此做,你令伤害来源不能使用、打出或弃置此类别的手牌直到其下个回合开始。',
+ danlao:'啖酪',
+ danlao_info:'当你成为【杀】或普通锦囊牌的目标后,若此牌的目标数大于1,则你可以摸一张牌,令此牌对你无效。',
+ gongao:'功獒',
+ zhuiji:'追击',
+ chouhai:'仇海',
+ chouhai_info:'锁定技,当你受到伤害时,若你没有手牌,此伤害+1。',
+ rechouhai:'仇海',
+ rechouhai_info:'锁定技,当你受到渠道为【杀】的伤害时,若你没有手牌,此伤害+1。',
+ guiming:'归命',
+ guiming_info:'主公技,锁定技,你将残蚀描述中的“已受伤角色”改为“已受伤角色或其他吴势力角色”',
+ canshi:'残蚀',
+ canshi2:'残蚀',
+ canshi_info:'摸牌阶段开始时,你可以改为摸X张牌(X为已受伤的角色数),若如此做,当你于此回合内使用基本牌或锦囊牌时,你弃置一张牌。',
+ recanshi:'残蚀',
+ recanshi2:'残蚀',
+ recanshi_info:'摸牌阶段开始时,你可以多摸X张牌(X为已受伤的角色数),若如此做,当你于此回合内使用【杀】或普通锦囊牌时,你弃置一张牌。',
+ zhuiji_info:'锁定技,你与体力值不大于你的角色的距离视为1。',
+ kunfen:'困奋',
+ kunfen_info:'锁定技,结束阶段开始时,你失去1点体力,然后摸两张牌。',
+ fengliang:'逢亮',
+ fengliang_info:'觉醒技,当你进入濒死状态时,你减1点体力上限,将体力值回复至2点,获得技能〖挑衅〗并将〖困奋〗改为非锁定技。',
+ oldcihuai:'刺槐',
+ oldcihuai2:'刺槐',
+ oldcihuai_info:'出牌阶段开始时,你可以展示手牌。若其中没有【杀】,则当你于此阶段内手牌数变化之前/有角色死亡之前需要使用【杀】时,你可以使用无对应实体牌的【杀】。',
+ cihuai:'刺槐',
+ cihuai_info:'出牌阶段开始时,若你的手牌中没有【杀】,则你可以展示你的手牌,视为对一名角色使用一张【杀】。',
+ gongao_info:'锁定技,当一名角色死亡后,你增加一点体力上限,回复一点体力。',
+ juyi:'举义',
+ juyi_info:'觉醒技,准备阶段开始时,若你的体力上限大于存活角色数,你摸等同于体力上限张数的牌,然后获得技能〖崩坏〗和〖威重〗。',
+ weizhong:'威重',
+ weizhong_info:'锁定技,当你的体力上限增加或减少时,你摸一张牌。若你的手牌数为全场最少,则你改为摸两张牌。',
+ taichen_info:'出牌阶段限一次,你可以失去1点体力,视为对一名角色使用一张【杀】。(不计入出牌阶段的使用次数限制)',
+ naman_info:'当其他角色打出的【杀】结算结束后,你可以获得此牌对应的所有实体牌。',
+ xiemu_info:'出牌阶段限一次,你可以弃置一张【杀】并选择一个势力。若如此做,直到你的下回合开始时,当你成为该势力的其他角色使用的黑色牌的目标后,你摸两张牌。',
+ oldxiemu_info:'当你成为其他角色使用的黑色牌的目标后,你可以弃置一张【杀】,然后摸两张牌。',
+ spmengjin_info:'当你使用【杀】指定目标后,你可以弃置目标角色的一张牌。',
+ fenxun_info:'出牌阶段限一次,你可以弃置一张牌并选择一名其他角色,你于本回合内至其的距离视为1。',
+ rezhoufu_info:'①出牌阶段限一次。你可以用一张牌对一名其他角色施“咒”,且当其判定时,将“咒”作为判定牌。②一名角色的回合结束时,你令本回合移除过“咒”的角色各失去1点体力。',
+ reyingbing_info:'锁定技,有“咒”的角色使用与“咒”颜色相同的牌时,你摸一张牌;若这是你第二次因该“咒”摸牌,则你获得该"咒"。',
+ yingbin_info:'锁定技,有“咒”的角色使用与“咒”花色相同的牌时,你摸一张牌;当你因同一名角色的同一张“咒”的效果摸第二张牌时,移去该“咒”。',
+ zhoufu_info:'出牌阶段限一次,你可以将一张手牌置于一名没有“咒”的其他角色的武将牌旁,称为“咒”。当有“咒”的角色判定时,其改为将“咒”作为判定牌;一名角色的回合结束时,若有角色于此回合因判定而移除过“咒”,则你令这些角色各失去1点体力。',
+ yanzheng_info:'若你的手牌数大于你的体力值,则你可以将你装备区内的牌当做【无懈可击】使用。',
+ kuiwei_info:'结束阶段开始时,你可以摸2+X张牌并翻面。你的下个摸牌阶段开始时,你弃置X张牌(X为当前时机场上所有角色装备区内武器牌数之和)。',
+ tongji_info:'锁定技。若你的手牌数大于你的体力值,则攻击范围包含你的其他角色使用【杀】时不能指定你以外的角色为目标。',
+ wangzun_info:'其他角色的准备阶段开始时,你可以摸一张牌。若如此做,该角色此回合的手牌上限-1。然后你不能再发动〖妄尊〗直到回合开始。',
+ kaikang_info:'当一名角色成为【杀】的目标后,若你至该角色的距离为1,你可以摸一张牌。若如此做,你交给其一张牌并展示之。若为装备牌,该角色可以使用此牌。',
+ liangzhu_info:'当一名角色于其出牌阶段内回复体力时,你可以选择一项:1、摸一张牌;2、令该角色摸两张牌。',
+ mingshi_info:'当你受到伤害时,若伤害来源的体力值大于你,你可以弃置一张黑色手牌,令伤害值-1。',
+ lirang_info:'当你的牌因弃置而置入弃牌堆后,你可以将其中的任意张牌交给其他角色。',
+ moukui_info:'当你使用【杀】指定目标后,你可以选择一项:摸一张牌,或弃置其一张牌。若如此做,当此【杀】被【闪】抵消时,目标角色弃置你的一张牌。 ',
+ qiangwu_info:'出牌阶段,你可以进行判定。若如此做,直到回合结束,你使用点数小于判定结果的【杀】时不受距离限制,且你使用点数大于判定结果的【杀】时无使用次数限制。',
+ shenxian_info:'每名角色的回合限一次,你的回合外,当有其他角色因弃置而失去基本牌时,你可以摸一张牌。',
+ oldshenxian_info:'你的回合外,每当有其他角色因弃置而失去基本牌时,你可以摸一张牌。',
+ qiluan_info:'一名角色的回合结束时,你可以摸3X+Y张牌。(X为你本回合内杀死过的角色数,Y为本回合内其他角色杀死过的角色数)',
+ //qiluan_info_guozhan:'一名角色的回合结束时,若你于回合内杀死过角色,则你可以摸三张牌。',
+ zhendu_info:'一名角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用了一张【酒】。若该角色不是你,你对其造成一点伤害。',
+ //zhendu_info_guozhan:'其他角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用了一张【酒】。若如此做,你对其造成一点伤害。',
+ shangyi_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后弃置其中的一张黑色牌。',
+ zniaoxiang_info:'锁定技,当你使用【杀】指定目标后,你令目标角色响应此【杀】所需要使用的【闪】的数目+1。',
+ shoucheng_info:'当一名角色于其回合外失去手牌时,若其没有手牌,则你可令该角色摸一张牌。',
+ shengxi_info:'弃牌阶段开始时,若你本回合内未造成过伤害,则你可以摸两张牌。',
+ hengzheng_info:'摸牌阶段开始时,若你的体力值为1或你没有手牌,则你可以放弃摸牌,改为获得每名其他角色区域内的一张牌。',
+ cunsi_info:'限定技,出牌阶段,你可以将所有手牌交给一名男性角色。该角色获得技能【勇决】,然后你将武将牌翻面。',
+ yongjue_info:'每回合限一次。当其他角色于回合内使用的【杀】结算完成后,若你不是此【杀】的目标角色,则你可以获得之。',
+ guixiu_info:'当你成为【杀】的目标后,若你的手牌数小于体力值,则你可以摸一张牌。',
+ fenming_info:'结束阶段开始时,若你处于横置状态,你可以弃置所有处于横置状态的角色的各一张牌。',
+ duanxie_info:'出牌阶段限一次,你可以令至多X名其他角色横置(X为你已损失的体力值且至少为1),然后你横置。',
+ xiaoguo_info:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌,然后你摸一张牌;2.受到你对其造成的1点伤害。',
+ sijian_info:'当你失去最后的手牌时,你可以弃置一名其他角色的一张牌。',
+ suishi_info:'当其他角色进入濒死状态时,伤害来源可以令你摸一张牌;当其他角色死亡时,伤害来源可以令你失去1点体力',
+ quji_info:'出牌阶段限一次,你可以弃置X张牌(X为你已损失的体力值),然后令至多X名已受伤的角色各回复1点体力。若你以此法弃置的牌中有黑色牌,你失去一点体力。',
+ junbing_info:'一名角色的结束阶段开始时,若其手牌数不大于1,该角色可以摸一张牌。若如此做,该角色将所有手牌交给你,然后你交给其等量的牌。',
+ xiongyi_info:'限定技,出牌阶段,你可以选择任意名角色,这些角色各摸三张牌。然后若你的体力值最小,你回复1点体力。',
+ xiongyi_info_guozhan:'限定技,出牌阶段,你可以令与你势力相同的所有角色各摸三张牌,然后若你的势力是角色最少的势力(或之一),则你回复1点体力。',
+ shenzhi_info:'准备阶段开始时,你可以弃置所有手牌。若你以此法弃置的牌数不小于X,你回复1点体力(X为你的体力值)。',
+ shushen_info:'当你回复1点体力时,你可以令一名其他角色选择回复1点体力或摸两张牌。',
+ wuji_info:'觉醒技,结束阶段开始时,若你于此回合内造成过3点或更多伤害,你加1点体力上限并回复1点体力,失去〖虎啸〗,然后从场上、牌堆或弃牌堆中获得【青龙偃月刀】',
+ xueji_info:'出牌阶段限一次,你可以弃置一张红色牌,然后选择至多X名角色,横置这些角色并对其中一名角色造成1点火焰伤害。(X为你已损失的体力值且至少为1)',
+ huxiao_info:'锁定技,当你造成火属性伤害时,该角色摸一张牌。然后,你于此回合内对其使用牌没有次数限制。',
+ aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌(若你没有手牌则改为四张)。若你观看的牌中有此牌,你可以使用打出之。',
+ aocai_info_guozhan:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌。若你观看的牌中有此牌,你可以使用打出之。',
+ hongyuan_info:'摸牌阶段,你可以少摸一张牌并指定至多两名其他角色。若如此做,这些角色各摸一张牌。',
+ hongyuan_info_combat:'摸牌阶段,你可以少摸一张牌。若如此做,其他友方角色各摸一张牌。',
+ huanshi_info:'一名角色的判定牌生效前,你可令其观看你的手牌。若如此做,该角色选择你的一张牌,你打出此牌代替之。',
+ mingzhe_info:'当你于回合外使用或打出红色牌,或因弃置失去一张红色牌后,你可以摸一张牌。',
+ duwu_info:'出牌阶段,你可以弃置X张牌对你攻击范围内的一名其他角色造成1点伤害(X为该角色的体力值)。若该角色因此法进入濒死状态且存活,则你于濒死状态结算后失去1点体力,且本回合不能再发动〖黩武〗。',
+ tianming_info:'当你成为【杀】的目标时,你可以弃置两张牌(不足则全弃,无牌则不弃),然后摸两张牌;若此时全场体力值最多的角色仅有一名且不是你,该角色也可以如此做。',
+ mizhao_info:'出牌阶段限一次,你可以将所有手牌交给一名其他角色。若如此做,你令该角色与你指定的另一名有手牌的角色拼点,视为拼点赢的角色对没赢的角色使用一张【杀】。',
+ yuanhu_info:'结束阶段开始时,你可以将一张装备牌置于一名角色的装备区里,然后根据此装备牌的类型执行以下对应效果。武器牌:弃置该角色距离1以内的一名角色区域中的一张牌;防具牌:该角色摸一张牌;坐骑牌:该角色回复1点体力。',
+ lihun_info:'出牌阶段限一次,你可以弃置一张牌并选择一名其他男性角色。若如此做,你将武将牌翻面并获得其所有手牌。出牌阶段结束时,你交给其X张牌。(X为该角色的体力值)',
+ chongzhen_info:'当你因发动〖龙胆〗而使用或打出【杀】或【闪】时,你可以获得对方的一张手牌。',
+ bifa_info:'结束阶段开始时,你可以将一张手牌移出游戏并指定一名其他角色。该角色的准备阶段开始时,其观看你移出游戏的牌并选择一项:交给你一张与此牌类型相同的手牌并获得此牌;或将此牌置入弃牌堆,然后失去1点体力。',
+ songci_info:'①出牌阶段,你可以选择一名未以此法选择过的角色。若其手牌数:大于其体力值,其弃置两张牌;不大于其体力值,其摸两张牌。②弃牌阶段结束时,若你已对场上所有存活角色发动过〖颂词①〗,则你摸一张牌。',
+ yongsi_info:'锁定技。①摸牌阶段,你多摸X张牌。②弃牌阶段开始时,你弃置X张牌。(X为场上势力数)',
+ yicong_info:'锁定技,当你的体力值大于2时,你计算与其他角色的距离时-1;当你的体力值不大于2时,其他角色计算与你的距离时+1。',
+ baobian_info:'锁定技,若你的体力值为3或更少,你视为拥有技能〖挑衅〗;若你的体力值为2或更少;你视为拥有技能〖咆哮〗;若你的体力值为1,你视为拥有技能〖神速〗。',
+ rebaobian:'豹变',
+ rebaobian_info:'锁定技。当你受到伤害后,你获得以下技能中第一个未拥有的技能:〖挑衅〗/〖咆哮〗/〖神速〗。',
+ bingzhao:'秉诏',
+ bingzhao_info:'主公技,游戏开始时,你选择一个其他势力。当你对该势力的角色发动〖骨疽〗时,其可令你额外摸一张牌。',
+ sunshao:'孙邵',
+ bizheng:'弼政',
+ bizheng_info:'摸牌阶段结束时,你可以令一名其他角色摸两张牌。然后,若你的手牌数大于体力上限,你弃置两张牌。若其的手牌数大于体力上限,其弃置两张牌。',
+ yidian:'佚典',
+ yidian_info:'当你使用牌选择目标时,若弃牌堆中没有与此牌名称相同的牌,则你可以为此牌增加一个目标(无距离限制)。',
+ xinlianji:'连计',
+ xinlianji_info:'出牌阶段限一次,你可以弃置一张手牌,令一名角色使用牌堆中的一张随机武器牌。然后其选择一项:对你指定的一名角色使用一张【杀】,或令你将其装备区里的武器牌交给任意角色。',
+ xinmoucheng:'谋逞',
+ xinmoucheng_info:'觉醒技,准备阶段,若有角色因你发动〖连计〗使用【杀】而造成过伤害,则你失去〖连计〗并获得〖矜功〗。',
+ xinjingong:'矜功',
+ xinjingong_backup:'矜功',
+ xinjingong_info:'出牌阶段限一次,你可以将一张【杀】或装备牌当做三张随机锦囊牌中的一张使用。',
+ caiyang:'蔡阳',
+ yinka:'印卡',
+ zhangling:'张陵',
+ zlhuji:'虎骑',
+ zlhuji_info:'锁定技,你与其他角色的距离-1,当你于回合外受到伤害后,你可进行判定,若结果为红色,视为你对伤害来源使用一张【杀】(无距离限制)。',
+ zlshoufu:'授符',
+ zlshoufu2:'授符',
+ zlshoufu_info:'出牌阶段限一次,你可摸一张牌,然后将一张手牌置于一名没有【箓】的角色的武将牌上,称为【箓】;其不能使用和打出与【箓】同类型的牌。该角色受到伤害后,或于弃牌阶段弃置至少两张与【箓】同类型的牌后,将【箓】置入弃牌堆。',
+ ol_zhangchangpu:'OL张昌蒲',
+ olxingshen:'省身',
+ olxingshen_info:'当你受到伤害后,你可以随机摸至多两张牌。若如此做,你获得X个“省”,且下一次发动〖严教〗展示牌时移去所有“省”并多展示等量的牌。(X为你已损失的体力值,且你至多拥有6个“省”)',
+ caoshuang:'曹爽',
+ tuogu:'托孤',
+ tuogu_info:'限定技,一名角色死亡时,你可以令其选择其武将牌上的一个技能(主公技,限定技,觉醒技,隐匿技、使命技等特殊技能除外),然后你获得其选择的技能。',
+ retuogu:'托孤',
+ retuogu_info:'一名角色死亡时,你可以令其选择其武将牌上的一个技能(主公技,限定技,觉醒技,隐匿技、使命技等特殊技能除外),然后你获得其选择的技能并失去上次因〖托孤〗获得的技能。',
+ shanzhuan:'擅专',
+ shanzhuan_info:'当你对其他角色造成伤害后,若其判定区没有牌,则你你可以将其的一张牌置于其的判定区。若此牌不为延时锦囊牌且此牌为:红色,此牌视为【乐不思蜀】;黑色,此牌视为【兵粮寸断】。回合结束时,若你本回合内未造成伤害,你可摸一张牌。',
+ spniluan:'逆乱',
+ spniluan_info:'出牌阶段,你可以将一张黑色牌当做【杀】使用。此【杀】使用结算完成后,若你未因此【杀】造成过伤害,则你令此【杀】不计入使用次数。',
+ spweiwu:'违忤',
+ spweiwu_info:'出牌阶段限一次,你可以将一张红色牌当无距离限制的【顺手牵羊】使用。',
+ spmouzhu:'谋诛',
+ spmouzhu_backup:'谋诛',
+ spmouzhu_info:'出牌阶段限一次,你可以选择任意名“距离为1”或“体力值等于你”的其他角色,这些角色依次进行以下结算:交给你一张手牌,然后若其手牌数小于你,则其视为对你使用一张【杀】或【决斗】。',
+ spyanhuo:'延祸',
+ spyanhuo_info:'当你死亡时,你可增加如下全局技能:当有角色使用【杀】时,此【杀】的伤害值基数+1。',
+ xiaoxi:'骁袭',
+ xiaoxi_info:'当你登场时,你可以视为使用一张【杀】。',
+ quyi:'OL麴义',
+ wolongfengchu:'卧龙凤雏',
+ youlong:'游龙',
+ youlong_info:'转换技,阴,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的普通锦囊牌;阳,每轮限一次,你可以废除你的一个装备栏,视为使用一张未以此法使用过的基本牌。',
+ luanfeng:'鸾凤',
+ //luanfeng_info_fullinfo:'限定技,一名角色进入濒死状态时,若其体力上限不小于你,你可令其回复至3点体力,恢复其被废除的装备栏,令其手牌补至6-X张(X为以此法恢复的装备栏数量),重置其因“改写”使用过的牌名。若该角色是你,重置你因“游龙”使用过的牌名。',
+ luanfeng_info:'限定技,一名角色进入濒死状态时,若其体力上限不小于你,你可令其回复至3点体力,恢复其被废除的装备栏,令其手牌补至6-X张(X为以此法恢复的装备栏数量)。若该角色是你,重置你因“游龙”使用过的牌名。',
+ ol_xinxianying:'辛宪英',
+ reluanzhan:'乱战',
+ reluanzhan_add:'乱战',
+ reluanzhan_remove:'乱战',
+ reluanzhan_info:'当你受到或造成伤害后,你获得一个“乱”。当你使用【杀】或黑色普通锦囊牌选择目标后,你可为此牌增加至多X个目标。当你使用这些牌指定第一个目标后,若此牌目标数小于X,则你移去X/2(向上取整)个“乱”。(X为“乱”数)',
+ zhuixi:'追摄',
+ zhuixi_info:'锁定技,你使用【杀】的次数上限+1。',
+ reduanbing:'短兵',
+ reduanbing_info:'你使用【杀】选择目标后,可以为此【杀】增加一名距离为1的额外目标。你对距离为1的角色使用的【杀】需两张【闪】才能抵消。',
+ refenxun:'奋迅',
+ refenxun2:'奋迅',
+ refenxun_info:'出牌阶段限一次,你可以选择一名其他角色,然后本回合你计算与其的距离视为1;结束阶段开始时,若你未对其造成过伤害,你弃一张牌。',
+ zongyu:'宗预',
+ zyqiao:'气傲',
+ zyqiao_info:'每回合限两次。当你成为其他角色使用牌的目标后,你可以弃置其一张牌,然后你弃置一张牌。',
+ zyqiao_info_guozhan:'每回合限两次。当你成为其他势力的角色使用牌的目标后,你可以弃置其一张牌,然后你弃置一张牌。',
+ chengshang:'承赏',
+ chengshang_info:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。',
+ chengshang_info_guozhan:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。',
+ panshu:'OL潘淑',
+ weiyi:'威仪',
+ weiyi_info:'每名角色限一次。当有角色受到伤害后,你可选择:①若其体力值不小于你,则其失去1点体力。②若其体力值不大于你且其已受伤,则其回复1点体力。',
+ jinzhi:'锦织',
+ jinzhi2:'锦织',
+ jinzhi_info:'当你需要使用或打出一张基本牌时,你可弃置X+1张颜色相同的牌并摸一张牌,然后视为你使用或打出了此牌。(X为你于本轮内发动此技能的次数)',
+ yanxiao_card:'言笑',
+ yanxiao_global:'言笑',
+ yanxiao_card_info:'判定阶段开始时,你获得判定区内的所有牌。',
+ huangzu:'OL黄祖',
+ wangong:'挽弓',
+ wangong2:'挽弓',
+ wangong_info:'锁定技,当你使用基本牌时,你获得如下效果:当你使用下一张牌时,若此牌为【杀】,则此牌无次数和距离限制且伤害+1。',
+ huangchengyan:'OL黄承彦',
+ guanxu:'观虚',
+ guanxu_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后你可将其中一张手牌与牌堆顶5张牌中的一张交换。若如此做,你弃置其手牌中3张花色相同的牌。',
+ yashi:'雅士',
+ yashi_info:'当你受到一次伤害后,你可选择一项:1. 令伤害来源的非锁定技无效直到其下个回合开始;2. 对一名其他角色发动〖观虚〗。',
+ olwuniang:'武娘',
+ olwuniang_info:'每回合限一次,当你于回合内使用的【杀】结算完成后,若此【杀】对应的目标数为1,则你可以令目标角色选择是否对你使用使用【杀】。你于其选择结算完成后摸一张牌,且本回合内使用【杀】的次数上限+1。',
+ olxushen:'许身',
+ olxushen_info:'限定技,当你进入濒死状态时,你可将体力回复至1点并获得技能〖镇南〗。然后若场上没有存活的“关索”,则你可以令一名其他男性角色选择是否将一张武将牌替换为“关索”。',
+ olzhennan:'镇南',
+ olzhennan2:'镇南',
+ olzhennan_info:'【南蛮入侵】对你无效。出牌阶段限一次,你可以将任意张手牌当做【南蛮入侵】对等量的角色使用。',
+ gaogan:'高干',
+ juguan:'拒关',
+ juguan_backup:'拒关',
+ juguan_info:'出牌阶段限一次,你可将一张手牌当【杀】或【决斗】使用。若受到此牌伤害的角色未在你的下回合开始前对你造成过伤害,你的下个摸牌阶段摸牌数+2。',
+ duxi:'杜袭',
+ quxi:'驱徙',
+ quxi_info:'限定技。出牌阶段结束时,你可跳过下个弃牌阶段并选择两名手牌数不同的其他角色。你将武将牌翻至背面,令这两名角色中手牌数较少的角色获得另一名角色的一张牌并获得一枚“丰”,另一名角色获得一枚“歉”。拥有“丰”/“歉”的角色的摸牌阶段额定摸牌数+1/-1。拥有“丰”/“歉”的角色死亡时,或一轮游戏开始时,你可转移“丰”/“歉”。',
+ bixiong:'避凶',
+ bixiong2:'避凶',
+ bixiong_info:'锁定技,当你于弃牌阶段弃置手牌后,你不能成为与这些牌花色相同的牌的目标直到你下回合开始。',
+ fuwei:'扶危',
+ fuwei_info:'每回合限一次。当你的牌被其他角色弃置或获得后,你可从牌堆中获得一张与此牌名称相同的牌(若没有则改为摸一张牌)。',
+ yuejian:'约俭',
+ yuejian_info:'每回合限两次。当其他角色对你使用的牌A结算结束后,你可展示所有手牌。若牌A有花色且你的手牌中没有同花色的牌,则你获得牌A对应的所有实体牌。',
+ ol_dengzhi:'OL邓芝',
+ olxiuhao:'修好',
+ olxiuhao_info:'每回合限一次。当你受到其他角色造成的伤害时,或对其他角色造成伤害时,你可防止此伤害,然后令伤害来源摸两张牌。',
+ olsujian:'素俭',
+ olsujian_given:'已分配',
+ olsujian_info:'锁定技。弃牌阶段开始前,你将此阶段的规则改为:{你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌}。',
+ ol_wangrong:'OL王荣',
+ olfengzi:'丰姿',
+ olfengzi_info:'出牌阶段限一次。当你使用有目标的基本牌或普通锦囊牌时,你可弃置一张与此牌类型相同的牌,然后令此牌结算两次。',
+ oljizhan:'吉占',
+ oljizhan_info:'摸牌阶段开始时,你可以放弃摸牌。你展示牌堆顶的一张牌,并猜测牌堆顶的下一张牌点数大于或小于此牌。若你猜对,你可继续重复此流程。然后你获得以此法展示的所有牌。',
+ olfusong:'赋颂',
+ olfusong_info:'当你死亡时,你可以选择一名体力上限大于你的其他角色。其选择获得〖吉占〗或〖丰姿〗。',
+ zuofen:'左棻',
+ zhaosong:'诏颂',
+ zhaosong_info:'一名其他角色的摸牌阶段结束时,若其没有因〖诏颂〗而获得的标记,则你可令其正面向上交给你一张手牌。根据此牌的类型,该角色获得对应的标记和效果:
锦囊牌:“诔”标记。当拥有者进入濒死状态时,其可弃置所有“诔”,将体力回复至1点并摸1张牌。
装备牌:“赋”标记。拥有者的出牌阶段开始时,其可弃置所有“赋”,弃置一名角色区域内的至多两张牌。
基本牌:“颂”标记。当使用者使用仅指定一个目标的【杀】时,其可弃置“颂”,为此【杀】增加至多两个目标。',
+ lisi:'离思',
+ lisi_info:'当你于回合外使用的牌结算结束后,你可将其交给一名手牌数不大于你的其他角色。',
+ ol_yangyi:'杨仪',
+ oljuanxia:'狷狭',
+ oljuanxia_info:'结束阶段,你可以选择一名其他角色。你依次视为对其使用至多三种单目标普通锦囊牌。然后其下回合结束时,可视为对你使用等量的【杀】。',
+ oldingcuo:'定措',
+ oldingcuo_info:'每回合限一次。当你受到或造成伤害后,你可摸两张牌。若这两张牌颜色不同,则你弃置一张手牌。',
+ fengfangnv:'OL冯妤',
+ zhuangshu:'妆梳',
+ zhuangshu_info:'①游戏开始时,你可将{【琼梳】,【犀梳】,【金梳】}中的一张牌置于装备区。②一名角色的回合开始时,若其宝物区为空,则你可以弃置一张牌,并根据此牌的类型,按如下关系将一张宝物牌置入该角色的装备区:{<基本牌,【琼梳】>,<锦囊牌,【犀梳】>,<装备牌,【金梳】>}。',
+ chuiti:'垂涕',
+ chuiti_info:'每回合限一次。当你或拥有〖妆梳〗牌角色的牌因弃置而进入弃牌堆后,你可使用其中的一张牌。',
+ zhuangshu_basic:'琼梳',
+ zhuangshu_basic_bg:'琼',
+ zhuangshu_basic_info:'当你受到伤害时,你可以弃置X张牌并防止此伤害(X为伤害值)。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。',
+ zhuangshu_trick:'犀梳',
+ zhuangshu_trick_bg:'犀',
+ zhuangshu_trick_info:'判定阶段开始前,你可选择:①跳过此阶段。②跳过本回合的弃牌阶段。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。',
+ zhuangshu_equip:'金梳',
+ zhuangshu_equip_bg:'金',
+ zhuangshu_equip_info:'锁定技。出牌阶段结束时,你将手牌摸至手牌上限(至多摸五张)。当此牌不因交换装备或移动至其他装备区而离开你的装备区后,销毁之。',
+ ol_dongzhao:'董昭',
+ olxianlve:'先略',
+ olxianlve_info:'①主公的回合开始时,你可声明并记录一个锦囊牌的名称并移除先前的记录。②每回合限一次,其他角色使用〖先略〗记录过的锦囊牌后,你可摸两张牌并可以分配给任意其他角色,然后你可声明并记录一个锦囊牌的名称并移除先前的记录。',
+ olzaowang:'造王',
+ olzaowang2:'造王',
+ olzaowang_info:'限定技。出牌阶段,你可以令一名角色加1点体力上限,回复1点体力并摸三张牌,且获得如下效果:主公死亡时,若其身份为忠臣,则其和主公交换身份牌;其死亡时,若其身份为反贼且伤害来源的身份为主公或忠臣,则以主忠胜利结束本局游戏。',
+ sp_ol_zhanghe:'SP张郃',
+ spolzhouxuan:'周旋',
+ spolzhouxuan_info:'①弃牌阶段开始时,你可将任意张置于武将牌上,称为“旋”(你至多拥有五张“旋”)。②当你使用牌时,你随机将一张“旋”置入弃牌堆,然后摸一张牌(若你的手牌数不为全场唯一最多则额外摸X张牌,X为“旋”数)。③出牌阶段结束时,你将所有“旋”置入弃牌堆。',
+ wuyan:'吾彦',
+ lanjiang:'澜疆',
+ lanjiang_info:'结束阶段,你可以选择所有手牌数不小于你的角色。这些角色依次选择是否令你摸一张牌。然后你可以对其中一名手牌数等于你的角色造成1点伤害,随后可以对其中一名手牌数小于你的角色摸一张牌。',
+ ol_zhuling:'OL朱灵',
+ jixian:'急陷',
+ jixian_info:'摸牌阶段结束时,你可以选择一名满足以下至少一项条件的角色:⒈装备区内有防具牌;⒉拥有的普通技能数大于你;⒊体力值等于体力上限。你视为对其使用一张【杀】,然后摸X张牌(X为其于此【杀】结算前满足的条件数);若此【杀】未造成伤害,则你失去1点体力。',
+ ol_chendeng:'OL陈登',
+ olfengji:'丰积',
+ olfengji_info:'摸牌阶段开始时,你选择:⒈本回合摸牌阶段的额定摸牌数-1,且令一名其他角色下回合摸牌阶段的额定摸牌数+2;⒉本回合摸牌阶段的额定摸牌数+1。然后你选择:⒈本回合使用【杀】的次数上限-1,且令一名其他角色下回合使用【杀】的次数上限+2;⒉本回合使用【杀】的次数上限+1。',
+ tianyu:'田豫',
+ saodi:'扫狄',
+ saodi_info:'当你使用【杀】或普通锦囊牌指定唯一其他角色为目标时,你可从逆时针方向和顺时针方向中选择一个你与其之间角色最少的方向。你令该方向下你与其之间的所有能成为此牌额外目标的角色均成为此牌的目标。',
+ zhuitao:'追讨',
+ zhuitao_info:'①准备阶段,你可选择一名未被〖追讨〗记录过的其他角色。②你至所有〖追讨〗记录过的角色的距离-1。③当你对一名被〖追讨〗记录过的角色造成伤害时,你从〖追讨〗记录里移除该角色。',
+ fanjiangzhangda_ab:'范疆张达',
+ fanjiangzhangda:'范强张达',
+ yuanchou:'怨仇',
+ yuanchou_info:'锁定技。当你使用黑色【杀】指定目标角色后或成为黑色【杀】的目标角色后,你令目标角色的防具技能无效直到此【杀】被抵消或造成伤害。',
+ juesheng:'决生',
+ juesheng_info:'限定技。出牌阶段,你可视为使用一张【决斗】。当你因此【决斗】造成伤害时,你将伤害值改为X(X为目标角色本局游戏内使用过【杀】的数量且至少为1)且令目标角色获得此技能直到其下回合结束。',
+ qinghegongzhu:'清河公主',
+ zengou:'谮构',
+ zengou_info:'当有角色使用【闪】时,若其在你的攻击范围内,则你可以弃置一张非基本牌或失去1点体力,然后取消此【闪】的目标并获得其对应的实体牌。',
+ qhzhangji:'长姬',
+ qhzhangji_info:'一名角色的回合结束时,若你本回合内:造成过伤害,则你可以令其摸两张牌;受到过伤害,则你可以令其弃置两张牌。',
+ sp_menghuo:'SP孟获',
+ spmanwang:'蛮王',
+ spmanwang_info:'出牌阶段,你可以弃置任意张牌。然后你依次执行以下选项中的前X项:⒈获得〖叛侵〗。⒉摸一张牌。⒊回复1点体力。⒋摸两张牌并失去〖叛侵〗。',
+ sppanqin:'叛侵',
+ sppanqin_info:'出牌阶段或弃牌阶段结束时,你可将你于本阶段内弃置且位于弃牌堆的所有牌当做【南蛮入侵】使用。然后若此牌被使用时对应的实体牌数不大于此牌的目标数,则你执行并移除〖蛮王〗中的最后一个选项。',
+ tengfanglan:'OL滕芳兰',
+ luochong:'落宠',
+ luochong_info:'准备阶段开始时/当你于一回合内首次受到伤害后,你可选择本轮内未选择过的一项(每名角色每轮限选一次):⒈令一名角色回复1点体力。⒉令一名角色失去1点体力。⒊令一名角色弃置两张牌。⒋令一名角色摸两张牌。',
+ aichen:'哀尘',
+ aichen_info:'锁定技。当你进入濒死状态时,若〖落宠〗中的剩余选项数大于1,则你选择移去〖落宠〗中的一个选项。',
+ weizi:'卫兹',
+ yuanzi:'援资',
+ yuanzi_info:'每轮限一次。其他角色的准备阶段开始时,你可将所有手牌交给该角色。若如此做,当该角色于本回合内造成伤害后,若其手牌数不小于你,则你摸两张牌。',
+ liejie:'烈节',
+ liejie_info:'当你受到伤害后,你可以弃置至多三张牌,摸等量的牌,然后可弃置伤害来源的至多X张牌(X为你以此法弃置的红色牌的数量)。',
+ ruiji:'OL芮姬',
+ qiaoli:'巧力',
+ qiaoli_info:'①你可以将一张装备牌当做【决斗】使用。若此【决斗】对应的实体牌:为武器牌,当你以此法声明使用【决斗】后,你摸X张牌(X为此牌的攻击范围),且可以将其中任意张牌分配给其他角色;不为武器牌,此牌不可被响应。②结束阶段开始时,若你于本回合内发动过〖巧力①〗,则你从牌堆中获得一张装备牌。',
+ qiaoli_given:'已分配',
+ qingliang:'清靓',
+ qingliang_info:'每回合限一次。当你成为其他角色使用牌的目标时,你可展示所有手牌,然后选择一项:⒈你与其各摸一张牌,⒉取消此目标,然后弃置你手牌中一种花色的所有牌。',
+ chixueqingfeng:'赤血青锋',
+ chixueqingfeng2:'赤血青锋',
+ chixueqingfeng_info:'锁定技,当你使用【杀】指定目标后,你令目标角色不能使用或打出手牌且防具技能无效直到此【杀】结算结束。',
+ wushuangfangtianji:'无双方天戟',
+ wushuangfangtianji_skill:"无双方天戟",
+ wushuangfangtianji_info:"当你因执行【杀】的效果而造成伤害后,你可选择一项:⒈摸一张牌;⒉弃置目标角色的一张牌。",
+ guilongzhanyuedao:'鬼龙斩月刀',
+ guilongzhanyuedao_info:'锁定技,你使用的红色【杀】不可被响应。',
+ bintieshuangji:'镔铁双戟',
+ bintieshuangji_skill:'镔铁双戟',
+ bintieshuangji_info:'当你使用的【杀】被抵消后,你可失去1点体力。获得此【杀】对应的所有实体牌,摸一张牌,且本回合使用【杀】的次数上限+1。',
+ linglongshimandai:"玲珑狮蛮带",
+ linglongshimandai_info:"当你成为其他角色使用的牌的唯一目标后,你可以进行判定。若判定结果为♥,则此牌对你无效。",
+ linglongshimandai_skill:"玲珑狮蛮带",
+ hongmianbaihuapao_skill:"红棉百花袍",
+ hongmianbaihuapao:"红棉百花袍",
+ hongmianbaihuapao_info:"锁定技,当你受到属性伤害时,防止此伤害。",
+ qimenbagua:'奇门八卦',
+ qimenbagua_info:'锁定技,【杀】对你无效。',
+ guofengyupao:'国风玉袍',
+ guofengyupao_info:'锁定技,你不是其他角色使用普通锦囊牌的合法目标。',
+ shufazijinguan:'束发紫金冠',
+ shufazijinguan_skill:"束发紫金冠",
+ shufazijinguan_info:"准备阶段,你可以对一名其他角色造成1点伤害。",
+ sanlve:'三略',
+ sanlve_skill:'三略',
+ sanlve_info:'锁定技。你的攻击范围+1。你的手牌上限+1。你使用【杀】的次数上限+1。',
+ zhaogujing:'照骨镜',
+ zhaogujing_skill:'照骨镜',
+ zhaogujing_info:'出牌阶段结束时,你可展示手牌中的一张基本牌或普通锦囊牌,然后你视为使用一张牌名和属性与此牌相同的牌。',
+ xuwangzhimian:'虚妄之冕',
+ xuwangzhimian_info:'锁定技,摸牌阶段,你令额定摸牌数+2;你的手牌上限-1。',
+ ol_puyuan:'OL蒲元',
+ olshengong:'神工',
+ olshengong_info:'出牌阶段每项限一次。你可以弃置一张武器牌/防具牌/其他装备牌,并发起一次“锻造”。然后你从锻造结果中选择一张牌,置于一名角色的装备区内(可替换原装备)。当有因你发动〖神工〗而加入游戏的牌进入弃牌堆后,你将此牌移出游戏,然后你于当前回合结束后摸一张牌。',
+ olqisi:'奇思',
+ olqisi_info:'①游戏开始时,你获得两张副类别不同的牌,并将这些牌置入你的装备区。②摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。',
+ olzhuiji:'追击',
+ olzhuiji_info:'锁定技。①你至体力值不大于你的角色的距离为1。②当你使用【杀】指定距离为1的角色为目标后,你令其选择一项:⒈弃置一张牌。⒉重铸装备区内的所有牌。',
+ zhaoyǎn:'OL赵俨',
+ tongxie:'同协',
+ tongxie_info:'出牌阶段开始时,你可以选择包括你在内的至多三名角色(你与这些角色均称为“同协角色”)。这些角色中手牌数唯一最少的角色摸一张牌,且你获得如下效果直到你下回合开始:①当有“同协角色”对唯一目标角色使用的【杀】结算结束后,其他“同协角色”可以依次对目标角色使用一张【杀】(无距离和次数限制,且不能再触发此效果)。②当有“同协角色”受到伤害时,其他“同协角色”(本回合内失去过体力的角色除外)可以防止此伤害,失去1点体力。',
+ jin_zhouchu:'周处',
+ shanduan:'善断',
+ shanduan_info:'锁定技。①回合开始时,你生成数组R=[1,2,3,4]。②摸牌阶段开始时,你从数组R中选择并移除一个数字A。你本阶段的额定摸牌数改为A。③出牌阶段开始时,你从数组R中选择并移除两个数字B和C。你将你本阶段内的攻击范围基数最小值和使用【杀】的次数上限基础值改为B和C。④弃牌阶段开始时,你从数组R中选择并移除一个数字D。你令你本回合的手牌上限基数改为D。⑤当你于回合外受到伤害后,你令下回合生成的R中最小的一个数字+1。',
+ yilie:'义烈',
+ yilie_info:'每轮每种牌名限一次。你可以将两张颜色相同的手牌当做任意一种基本牌使用。',
+ caoxiancaohua:'曹宪曹华',
+ huamu:'化木',
+ huamu_info:'当你使用手牌后,若此牌和本回合内上一张被使用的牌颜色不同,则你可以将此牌对应的所有{位于处理区或装备区}的实体牌置于你的武将牌上。这些牌中的黑色牌称为“灵杉”,红色牌称为“玉树”。',
+ qianmeng:'前盟',
+ qianmeng_info:'锁定技。当有牌移动事件结算结束后,若有角色的“灵杉”和“玉树”数量发生了变化,且二者数量相等或有一项为0,则你摸一张牌',
+ liangyuan:'良缘',
+ liangyuan_info:'每轮每项各限一次。你可以将场上所有的“灵杉”/“玉树”置于处理区,然后将这些牌当做【酒】/【桃】使用。',
+ jisi:'羁肆',
+ jisi_info:'限定技。准备阶段,你可以令一名其他角色获得你武将牌上的一个已发动过的其他技能。然后你弃置所有手牌,并视为对其使用一张【杀】(无距离关系的限制)。',
+ huojun:'OL霍峻',
+ qiongshou:'穷守',
+ qiongshou_info:'锁定技。①游戏开始时,你废除所有装备栏并摸四张牌。②你的手牌上限+4。',
+ fenrui:'奋锐',
+ fenrui_info:'结束阶段,你可以弃置一张牌并恢复一个装备栏。系统检索一张对应的装备牌,你使用之。然后你可以选择一名装备区内牌数小于你的其他角色,对其造成X点伤害(X为你与其装备区内的牌数之差,且每局限一次)。',
+ wangyan:'王衍',
+ yangkuang:'阳狂',
+ yangkuang_info:'当你回复体力后,若你的体力值等于体力上限,则你可以视为使用一张【酒】,然后当前回合角色摸一张牌,你摸一张牌。',
+ cihuang:'雌黄',
+ cihuang_info:'当有牌被抵消后,若此牌的目标数为1且此牌的使用者A为当前回合角色,则你可以将一张牌当做一张你本轮内未使用过的属性【杀】或单目标锦囊牌对A使用(不可被响应)。',
+ sanku:'三窟',
+ sanku_info:'锁定技。①当你进入濒死状态时,你减1点体力上限,然后将体力回复至体力上限。②当你加体力上限前,取消之。',
+ dengzhong:'邓忠',
+ dzkanpo:'勘破',
+ dzkanpo_info:'①当你因执行【杀】的效果而造成伤害后,你可以观看目标角色的手牌,然后获得其中一张与此【杀】花色相同的牌。②每回合限一次,你可以将一张手牌当做【杀】使用。',
+ dzgengzhan:'更战',
+ dzgengzhan_info:'①其他角色的出牌阶段限一次,当有【杀】因弃置而进入弃牌堆后,你可以获得这些【杀】。②其他角色的结束阶段,若其本回合内未使用过【杀】,则你下个出牌阶段使用【杀】的次数上限+1。',
+ xiahouxuan:'夏侯玄',
+ olhuanfu:'宦浮',
+ olhuanfu_info:'当你使用【杀】指定第一个目标后,或成为【杀】的目标后,你可以弃置X张牌(X∈[1, 你的体力上限])。此【杀】结算结束后,若此【杀】累计因执行效果而造成的伤害值等于X,则你摸2X张牌。',
+ olqingyi:'清议',
+ olqingyi_info:'①出牌阶段限一次,你可以选择至多两名有牌的其他角色。你和这些角色同时弃置一张牌,然后若这些牌类型均相同,则你重复此流程。②结束阶段开始时,若你本回合内发动〖清议①〗弃置的牌包含两种颜色,则你获得每种颜色的牌各一张。',
+ olzeyue:'迮阅',
+ olzeyue_info:'限定技。准备阶段,你可以选择一名于你的上个回合结束后对你造成过伤害的角色A及其武将牌上的一个非锁定技B,令A的B失效。然后每轮游戏开始时,A依次视为对你使用X张【杀】(X为B失效状态下经过的完整轮数)。当你因这些【杀】受到伤害后,你令A恢复技能B。',
+ xindiaodu:"调度",
+ xindiaodu_info:"①每回合限一次,与你势力相同的角色使用装备牌时,其可以摸一张牌。②出牌阶段开始时,你可以获得与你势力相同的一名角色装备区内的一张牌,然后你可以将此牌交给另一名与你势力相同的其他角色。",
+ olhuanshi:'缓释',
+ olhuanshi_info:'一名角色的判定牌生效前,你可以令其观看你的手牌并选择你的一张牌,你打出此牌代替判定牌。然后你可以重铸任意张牌(每回合限重铸一次)。',
+ olhongyuan:'弘援',
+ olhongyuan_info:'每阶段限一次。当你一次性获得至少两张牌以后,你可以将至多两张牌交给等量名角色。',
+ olmingzhe:'明哲',
+ olmingzhe_info:'锁定技。当你于出牌阶段外失去红色牌后,你展示这些牌中所有背面朝上移动的牌(没有则不展示),然后摸一张牌。',
+ ahuinan:'阿会喃',
+ jueman:'蟨蛮',
+ jueman_info:'锁定技。一名角色的回合结束时,若本回合被使用过的基本牌数不小于2,且前两张基本牌的使用者:均不为你,你视为使用本回合被使用的第三张基本牌;有且仅有其中之一为你,你摸一张牌。',
+ ol_liuba:'OL刘巴',
+ oltongduo:'统度',
+ oltongduo_info:'准备阶段,你可以令一名角色交给你一张手牌,然后出牌阶段结束时,你将此牌置于牌堆顶。',
+ olzhubi:'铸币',
+ olzhubi_tag:'币',
+ olzhubi_info:'①出牌阶段限X次(X为你的体力上限)。你可以令一名角色重铸一张牌,以此法获得的牌称为“币”。②一名角色的结束阶段,若其有“币”,其观看牌堆底的五张牌,然后可以用任意“币”交换其中等量张牌。',
+ ol_furong:'傅肜',
+ olxiaosi:'效死',
+ olxiaosi_info:'出牌阶段限一次。你可以选择一名有手牌的其他角色并弃置一张基本牌。若其有可被弃置的基本牌,其弃置一张基本牌。然后你可以以任意顺序使用你与其以此法弃置的牌(无距离和次数限制)。最后若其未以此法弃置牌,你摸一张牌。',
+ zhangzhi:'张芝',
+ olbixin:'笔心',
+ olbixin_info:'一名角色的准备阶段或结束阶段,你可以声明一种牌的类型(每种类型限[1]次),并选择一种你本轮未使用过且有合法目标的的基本牌。你摸[3]张牌,然后若你有此类型的手牌,你将所有此类型的手牌当此基本牌使用。',
+ olximo:'洗墨',
+ olximo_info:'锁定技。当你发动〖笔心〗后,你移除其描述的前五个字符。若你已发动三次〖笔心〗,交换中括号中的两个数字,失去〖洗墨〗并获得〖飞白〗。',
+ olfeibai:'飞白',
+ olfeibai_info:'转换技,锁定技。阴:当你因执行你使用的非黑色牌的效果而造成伤害时,此伤害值+1;阳:当你因执行你使用的非红色牌的效果而回复体力时,此回复值+1。',
+ olqizhou:'绮冑',
+ olqizhou_info:'锁定技。每个回合开始前,或当你装备区内的牌发生变化后,你失去所有因此技能获得过的额外技能,然后根据你装备区内的花色数获得对应的技能。至少一种:〖短兵〗、至少两种:〖英姿〗、至少三种:〖奋威〗、至少四种:〖澜江〗。',
+ olshanxi:'闪袭',
+ olshanxi_info:'出牌阶段限一次。你可以选择一名攻击范围内不包含你的其他角色,展示你与其的至多X张手牌(X为你的空装备栏数)。若这些牌中有【闪】,则你弃置这些【闪】,然后获得对方的一张未展示的牌。',
+ macheng:'马承',
+ olchenglie:'骋烈',
+ olchenglie_info:'当你使用【杀】选择目标后,你可以令至多两名角色也成为此牌目标,并展示牌堆顶的等同于目标数张牌,然后你可以将一张手牌与其中一张牌交换,将这些牌扣置于每名目标角色武将牌上,称为“骋烈”牌。此牌结算结束后:1.若有红色“骋烈”牌的角色:响应过此【杀】,其交给你一张牌;未响应此【杀】,其回复1点体力;2.有“骋烈”牌的角色将其“骋烈”牌置入弃牌堆。',
+ quhuang:'屈晃',
+ olqiejian:'切谏',
+ olqiejian_info:'当一名角色失去最后的手牌后,你可以摸一张牌,然后令其摸一张牌,你选择一项:1.弃置你或其场上的一张牌;2.你于本轮不能再对其发动此技能。',
+ olnishou:'泥首',
+ olnishou_info:'锁定技。当你装备区里的牌进入弃牌堆后,你选择一项:1.将这些牌中第一张能当【闪电】对你使用的牌当【闪电】使用;2.本阶段结束时,你与一名手牌数最少的角色交换手牌。',
+ zhanghua:'张华',
+ olbihun:'弼昏',
+ olbihun_info:'锁定技。当你使用牌指定其他角色为目标时,若你的手牌数大于手牌上限且若此牌的目标数:大于1,取消此目标;为1,其获得此牌。',
+ olchuanwu:'穿屋',
+ olchuanwu_info:'锁定技。当你造成或受到伤害后,你令武将牌上的前X个技能失效直到回合结束。然后你摸等同于你此次失效的技能数张牌(X为你的攻击范围)。',
+ oljianhe:'剑合',
+ oljianhe_info:'出牌阶段每名角色限一次。你可以重铸至少两张同名牌或至少两张装备牌,然后令一名角色选择一项:1.重铸等量张与你以此法重铸的牌类型相同的牌;2.受到你造成的1点雷电伤害。',
+ dongtuna:'董荼那',
+ oljianman:'鹣蛮',
+ oljianman_info:'锁定技。一名角色的回合结束时,若本回合被使用过的基本牌数不小于2,且前两张基本牌的使用者:均为你,你视为使用其中的一张牌;有且仅有其中之一为你,你弃置另一名使用者一张牌。',
+ maxiumatie:'马休马铁',
+ olkenshang:'垦伤',
+ olkenshang_info:'你可以将任意张牌当【杀】使用,然后你可以将此牌目标改为所有你攻击范围外的角色。此牌结算结束后,若此牌对应的实体牌数大于X,你摸X张牌(X为此牌造成过的伤害值),否则你失去一个技能。',
+ rekenshang:'垦伤',
+ rekenshang_info:'你可以将至少两张牌当【杀】使用,然后你可以将此牌目标改为等量名角色。此牌结算结束后,若此牌对应的实体牌数大于X,你摸X张牌(X为此牌造成过的伤害值)。',
+ ol_zhujun:'OL朱儁',
+ olcuipo:'摧破',
+ olcuipo_info:'锁定技。当你使用牌时,若此牌是你本回合使用的第X张牌(X为此牌牌名的字数),则:{若此牌为【杀】或伤害类锦囊牌,则此牌的伤害值基数+1,否则你摸一张牌}。',
+ ol_zhangyì:'OL张翼',
+ oldianjun:'殿军',
+ oldianjun_info:'锁定技。回合结束时,你受到1点无来源伤害,然后执行一个额外的出牌阶段。',
+ olkangrui:'亢锐',
+ olkangrui_info:'当一名角色于其回合内首次受到伤害后,你可以摸一张牌并选择一项:1.令其回复1点体力;2.令其于本回合下次造成的伤害+1。然后当其于本回合造成伤害时,其本回合手牌上限基数为0。',
+ wangguan:'王瓘',
+ olmiuyan:'谬焰',
+ olmiuyan_tag:'invisible',
+ olmiuyan_info:'转换技。你可以将一张黑色牌当做【火攻】使用。然后若此技能:处于阳状态且此牌造成了伤害,则你获得此阶段内所有被展示过的手牌;处于阴状态且未造成伤害,则你令此技能失效直到本轮结束。',
+ olshilu:'失路',
+ olshilu_info:'锁定技。当你受到伤害后,你摸X张牌(X为你的体力值且至多为5)。然后你展示攻击范围内一名角色的一张手牌,令此牌的牌名视为【杀】。',
+ ol_huban:'OL胡班',
+ olhuiyun:'晖云',
+ olhuiyun_tag:'invisible',
+ olhuiyun_info:'每轮每项各限一次。你可以将一张牌当【火攻】使用。此牌结算结束后,你选择一项,令目标角色选择是否执行:1.使用展示的牌,然后重铸所有手牌;2.使用一张手牌,然后重铸展示牌;3.摸一张牌。',
+ sunhong:'孙弘',
+ olxianbi:'险诐',
+ olxianbi_info:'出牌阶段限一次。你可以选择一名角色,然后将手牌摸至或弃置至等同于其装备区里的牌数(至多摸五张),且当你因此弃置一张牌后,你随机获得弃牌堆中的另一张类型相同的牌。',
+ olzenrun:'谮润',
+ olzenrun_info:'每阶段限一次。当你摸牌时,你可以改为获得一名其他角色等量的牌,然后其选择一项:1.摸等量的牌;2.令你本局游戏不能再对其发动〖险诐〗和〖谮润〗。',
+ luoxian:'罗宪',
+ oldaili:'带砺',
+ oldaili_tag:'带砺',
+ oldaili_info:'一名角色的回合结束时,若你被展示过的手牌数为偶数,则你可以翻面,摸三张牌并展示之。',
+ zhangshiping:'张世平',
+ olhongji:'鸿济',
+ olhongji_info:'每轮每项各限一次。一名角色的准备阶段,若其手牌数最少/最多,你可以令其于本回合第一个摸牌阶段/出牌阶段后执行一个额外的摸牌阶段/出牌阶段(若其条件同时满足则只能选择一项)。',
+ olxinggu:'行贾',
+ olxinggu_info:'①游戏开始时,你将牌堆中的三张坐骑牌扣置于武将牌上。②结束阶段,你可以将一张〖行贾①〗牌置于一名其他角色的装备区,然后你从牌堆获得一张♦牌。',
+ lushi:'卢氏',
+ olzhuyan:'驻颜',
+ olzhuyan_info:'每名角色每项各限一次。结束阶段,你可以令一名角色将以下一项调整至与其上一个准备阶段结束后相同:1.体力值;2.手牌数(体力值至多失去至1,手牌数至多摸至5;若其未执行过准备阶段则改为游戏开始时)。',
+ olleijie:'雷劫',
+ olleijie_info:'准备阶段,你可以令一名角色判定,若结果为♠2~9,其受到2点雷电伤害,否则其摸两张牌。',
+ ol_liuyan:'OL刘焉',
+ olpianan:'偏安',
+ olpianan_info:'锁定技。游戏开始或弃牌阶段结束时,你弃置所有不为【闪】的手牌(没有则不弃)。若你的手牌数小于体力值,你获得牌堆或弃牌堆中的前X张【闪】(X为你的体力值与手牌数的差)。',
+ olyinji:'殷积',
+ olyinji_info:'锁定技。结束阶段,若你的体力值不为唯一最大,你选择回复1点体力或加1点体力上限。',
+ olkuisi:'窥伺',
+ olkuisi_info:'锁定技。摸牌阶段开始时,你跳过此阶段,然后观看牌堆顶的四张牌并可以使用其中任意张。若你以此法使用的牌数不为2或3,你减1点体力上限。',
+ ol_wanglang:'OL王朗',
+ oljici:'激词',
+ oljici_info:'当你的拼点牌亮出后,若点数不大于X,你可令点数+X并令〖鼓舌〗视为未发动过(X为你的“饶舌”标记数)。',
+ ol_mengda:'OL孟达',
+ olgoude:'苟得',
+ olgoude_info:'一名角色的回合结束时,若有与你势力相同的角色执行过以下项,则你可以执行这些角色未执行过的一项:1.摸一张牌;2.弃置一名角色的一张手牌;3.使用一张无对应实体牌的【杀】;4.变更势力。',
+ haopu:'郝普',
+ olzhenying:'镇荧',
+ olzhenying_info:'出牌阶段限两次。你可以选择一名手牌数不大于你的其他角色,你与其同时将手牌摸或弃置至至多两张。然后你与其中手牌数较少的角色视为对另一名角色使用一张【决斗】。',
+ ol_wenqin:'文钦',
+ olguangao:'犷骜',
+ olguangao_info:'当你/其他角色使用【杀】时,你/该角色可以额外指定一个目标/你为目标(有距离限制)。然后若你的手牌数为偶数,你摸一张牌并令此牌对任意目标无效(可不选)。',
+ olhuiqi:'彗企',
+ olhuiqi_info:'觉醒技。一名角色回合结束后,若仅有三名角色于此回合成为过牌的目标,你获得〖偕举〗并获得一个额外的回合。',
+ olxieju:'偕举',
+ olxieju_info:'出牌阶段限一次。你可以令任意名本回合成为过牌的目标的角色依次视为使用一张【杀】。',
+ ol_zhouqun:'周群',
+ oltianhou:'天候',
+ oltianhou_info:'锁定技。准备阶段,你观看牌堆顶的一张牌,且可以用你的一张牌交换此牌。然后你展示牌堆顶的牌,令一名角色根据此牌的花色获得对应的技能直到你下个准备阶段开始:♠〖骤雨〗;♥〖烈暑〗;♣〖严霜〗;♦〖凝雾〗。',
+ olchenshuo:'谶说',
+ olchenshuo_info:'结束阶段,你可以展示一张手牌,然后展示牌堆顶的一张牌。若这两张牌类型/花色/点数/牌名字数中任一项相同且已展示的牌数小于3,则你重复此流程,然后获得所有所有展示牌。',
+ oltianhou_spade:'骤雨',
+ oltianhou_spade_miehuo:'骤雨',
+ oltianhou_spade_info:'锁定技。其他角色造成火属性伤害时,取消之;一名角色受到雷属性伤害后,所有与其座次相邻的角色失去1点体力。',
+ oltianhou_heart:'烈暑',
+ oltianhou_heart_info:'锁定技。其他角色的结束阶段开始时,若其体力值为全场最大,则其失去1点体力。',
+ oltianhou_club:'严霜',
+ oltianhou_club_info:'锁定技。其他角色的结束阶段开始时,若其体力值为全场最小,则其失去1点体力。',
+ oltianhou_diamond:'凝雾',
+ oltianhou_diamond_info:'锁定技。其他角色使用【杀】指定与其座次不相邻唯一目标时,则其判定。若判定结果的点数大于此【杀】,则此【杀】对其无效。',
+ duanjiong:'段颎',
+ olsaogu:'扫谷',
+ olsaogu_info:'转换技。①出牌阶段,你可以。阴:弃置两张牌(不能包含你本阶段弃置过的花色),然后使用其中的【杀】;阳:摸一张牌。②结束阶段,你可以弃置一张牌,令一名其他角色执行你当前〖扫谷①〗的分支。',
+ olcuorui:'挫锐',
+ olcuorui_info:'锁定技。①游戏开始时,你将手牌摸至场上存活人数张(至多摸至8张)。②当你成为延时锦囊牌的目标后,你跳过下个判定阶段。',
+ olmouzhu:'谋诛',
+ olmouzhu_info:'出牌阶段限一次,你可以令一名有手牌的其他角色交给你一张手牌。然后若其手牌数小于你,其视为使用一张【杀】或【决斗】。',
+ olyanhuo:'延祸',
+ olyanhuo_info:'当你死亡时,你可以弃置杀死你的角色至多X张牌(X为你的牌数)。',
+ olniluan:'逆乱',
+ olniluan_info:'体力值大于你的其他角色的结束阶段,若其本回合内使用过【杀】,则你可以将一张黑色牌当作【杀】对其使用(无距离限制)。',
+ olxiaoxi:'骁袭',
+ olxiaoxi_info:'新的一轮开始时,你可以视为使用一张无距离限制的【杀】。',
+
+ sp_tianji:'天极·皇室宗亲',
+ sp_sibi:'四弼·辅国文曲',
+ sp_tianzhu:'天柱·势冠一方',
+ sp_nvshi:'女史·留史巾帼',
+ sp_shaowei:'少微·能人异士',
+ sp_huben:'虎贲·勇冠三军',
+ sp_liesi:'列肆·豪商巨贾',
+ sp_default:"天同·同名异势",
+ sp_qifu:'灯愿·祈福武将',
+ sp_wanglang:'OL·限定专属',
+ sp_zhongdan:"忠胆英杰",
+ sp_guozhan:"国战",
+ sp_guozhan2:"国战移植",
+ sp_others:"其他",
+ sp_waitforsort:'等待分包',
},
};
});