'use strict'; game.import('character',function(lib,game,ui,get,ai,_status){ return { name:'gwent', character:{ gw_huoge:['male','qun',3,['yinzhang']], gw_aisinie:['female','wu',3,['huihun']], gw_enxier:['male','wei',4,['gwbaquan']], gw_kaerweite:['male','shu',4,['gwjiquan']], gw_falanxisika:['female','wu',3,['shewu']], gw_haluo:['male','qun',4,['nuhou']], gw_airuiting:['male','wei',4,['kuanglie']], gw_laduoweide:['male','wei',4,['gwxiaoshou']], gw_dagong:['male','qun',4,['tianbian']], // gw_bulanwang:['male','qun',3,[]], // gw_kuite:['male','qun',3,[]], // gw_fuertaisite:['male','qun',3,[]], // gw_hengsaite:['male','qun',3,[]], gw_fulisi:['male','qun',3,['lanquan']], // gw_gaier:['male','shu',3,['hunmo']], gw_jieluote:['male','qun',6,['fayin']], gw_yenaifa:['female','qun',3,['xuezhou']], gw_telisi:['female','wei',3,['huandie']], gw_xili:['female','wu',3,['fengjian']], gw_luoqi:['male','wei',4,['gwzhanjiang']], gw_yioufeisi:['male','wu',4,['gwchuanxin']], // gw_aigeleisi:['male','wu',4,[]], gw_aokeweisite:['male','qun',4,['yunhuo']], // gw_kaxier:['male','wu',4,[]], // gw_luobo:['male','wu',4,[]], // gw_mieren:['male','wu',4,[]], // gw_sanhanya:['male','wu',4,[]], // gw_shanhu:['male','wu',4,[]], // gw_zhangyujushou:['male','wu',4,[]], // gw_zhuoertan:['male','wu',4,[]], }, characterIntro:{ gw_huoge:'那个老年痴呆?不知道他是活着还是已经被制成标本了!', gw_aisinie:'树精皇后有着熔银做成的眼睛,冰冷铸钢的心脏。', gw_gaier:'画作应该要传达情绪,而不是字句。', gw_enxier:'我可没什么耐心,最好小心点,否则脑袋不保', gw_yenaifa:'魔法是艺术、混沌与科学的结合。因为魔法的确是一门技艺也是一种诅咒。', gw_telisi:'我可以照顾我自己,相信我。', gw_jieluote:'如果要付出这种代价才能拯救世界,那最好还是让世界消逝吧。', gw_xili:'我想去哪,就去哪。', gw_luoqi:'是个爱国者…还是个货真价实的王八蛋。', gw_yioufeisi:'国王还是乞丐,两者有何区别,人类少一个算一个', }, skill:{ yunhuo:{ trigger:{player:'phaseBegin'}, filter:function(event,player){ return game.roundNumber%4==0&&event.skill!='yunhuo2'; }, forced:true, content:function(){ 'step 0' player.addSkill('yunhuo2'); event.list=player.getEnemies().sortBySeat(); 'step 1' if(event.list.length){ var target=event.list.shift(); player.line(target,'fire'); if(target.countCards('h')){ target.randomDiscard('h',false); } else{ target.damage('fire'); } event.redo(); } 'step 2' game.delayx(); } }, yunhuo2:{ trigger:{player:'phaseAfter'}, forced:true, popup:false, silent:true, priority:-50, content:function(){ player.insertPhase(); player.removeSkill('yunhuo2'); } }, yinzhang:{ enable:'phaseUse', usable:1, filterCard:true, position:'he', check:function(card){ return 8-get.value(card) }, content:function(){ 'step 0' var list=get.typeCard('spell_silver').randomGets(3); if(!list.length){ event.finish(); return; } var dialog=ui.create.dialog('选择一张加入你的手牌',[list,'vcard'],'hidden'); player.chooseButton(dialog,true); 'step 1' player.gain(game.createCard(result.links[0][2]),'draw'); }, ai:{ order:8, result:{ player:1 }, } }, tianbian:{ trigger:{player:'phaseUseBegin'}, direct:true, content:function(){ 'step 0' var num1=0,num2=0; var choice; if(player.hasUnknown(2)){ if(game.dead.length==0){ choice='选项二'; } else{ choice='cancel2'; } } else{ game.countPlayer(function(current){ var att=get.attitude(player,current); if(att>0){ num1++; } else if(att<0){ num2++; } }); choice=(num1>num2)?'选项一':'选项二'; } player.chooseControl('选项一','选项二','cancel2',function(){ return choice; }).set('prompt',get.prompt('tianbian')).set('choiceList',['随机使用一张对全场有正面效果的牌','随机使用一张对全场有负面效果的牌']); 'step 1' if(result.control!='cancel2'){ player.logSkill('tianbian'); var list=[]; for(var i in lib.card){ if(lib.inpile.contains(i)&& lib.card[i].selectTarget==-1&& lib.card[i].type!='equip'&& lib.card[i].ai&&lib.card[i].ai.tag&& lib.card[i].ai.tag.multitarget){ if(lib.card[i].ai.tag.multineg){ if(result.control=='选项二'){ list.push(i); } } else{ if(result.control=='选项一'){ list.push(i); } } } } var name=null; while(list.length){ name=list.randomRemove(); if(game.hasPlayer(function(current){ return player.canUse(name,current) })){ break; } else{ name=null; } } if(name){ var targets=game.filterPlayer(function(current){ return player.canUse(name,current); }); targets.sortBySeat(); player.useCard({name:name},targets); } } } }, gwxiaoshou:{ enable:'phaseUse', usable:2, filterTarget:function(card,player,target){ return target.isMaxHp(); }, check:function(card){return 7-get.value(card);}, position:'he', filterCard:true, content:function(){ target.damage(); }, ai:{ result:{ target:function(player,target){ return get.damageEffect(target,player); }, }, order:7 } }, kuanglie:{ trigger:{player:'useCardToBegin'}, filter:function(event,player){ return event.target&&event.target!=player&&event.target.countCards('he')&&get.color(event.card)=='black'; }, init:function(player){ player.storage.kuanglie=0; }, forced:true, content:function(){ trigger.target.randomDiscard(); player.storage.kuanglie++; if(player.storage.kuanglie%2==0){ player.draw(); } } }, kuanglie2:{}, gwjiquan:{ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return target!=player&&target.countCards('he'); }, selectTarget:[1,Infinity], content:function(){ 'step 0' player.gainPlayerCard(target,'he',true); 'step 1' target.useCard({name:'sha'},player); }, ai:{ threaten:1.4, order:7, result:{ target:function(player,target){ if(player.getEquip('tengjia')||player.getEquip('bagua')) return -1; if(get.effect(player,{name:'sha'},target,player)>=0) return -1; if(!player.hasShan()){ if(ui.selected.targets.length) return 0; if(player.hp>=4) return -1; if(player.hp>=3&&target.hp==1) return -1; return 0; } var num=player.countCards('h','shan'); if(num<1){ num=1; } if(ui.selected.targets.length>=num){ return 0; } return -1; } } } }, nuhou:{ enable:'phaseUse', usable:1, position:'he', filterCard:true, check:function(card){ return 7-get.value(card) }, content:function(){ 'step 0' var list=player.getEnemies(); list.sortBySeat(); event.list=list; 'step 1' if(event.list.length){ var current=event.list.shift(); var he=current.getCards('he'); player.line(current,'green'); if(he.length){ current.discard(he.randomGet()); current.addExpose(0.2); } event.redo(); } }, ai:{ order:8.5, result:{ player:1 }, }, }, shewu:{ enable:'phaseUse', usable:1, position:'he', filterCard:true, selectCard:[1,3], check:function(card){ if(!ui.selected.cards.length){ return 8-get.value(card) } var player=_status.event.player; if(player.isDamaged()){ var hs=player.getCards('h'); var num=0; for(var i=0;i=3){ return 6-get.value(card); } } return 0; }, content:function(){ player.draw(3); if(cards.length>=2){ player.addTempSkill('shewu_dist','phaseAfter'); } if(cards.length==3){ player.recover(); } }, ai:{ order:4, result:{ player:1 }, threaten:1.6 }, subSkill:{ dist:{ mod:{ targetInRange:function(){ return true; } } } } }, gwzhanjiang:{ trigger:{global:'phaseBegin'}, direct:true, filter:function(event,player){ return !player.hasSkill('gwzhanjiang2')&&event.player!=player; }, content:function(){ 'step 0' var bool=(get.effect(trigger.player,{name:'sha'},player,player)>0&& Math.abs(get.attitude(player,trigger.player))>1&& game.hasPlayer(function(current){ return get.attitude(current,player)>0&¤t.hasSha(); })); var next=player.chooseToDiscard(get.prompt('gwzhanjiang',trigger.player),'he'); next.ai=function(card){ if(bool) return 7-get.value(card); return 0; }; next.logSkill=['gwzhanjiang',trigger.player]; 'step 1' if(result.bool){ player.addTempSkill('gwzhanjiang2',{player:'phaseBegin'}); event.targets=game.filterPlayer(function(current){ return current!=trigger.player; }); event.targets.sortBySeat(trigger.player); event.num=0; } else{ event.finish(); } 'step 2' if(event.targets.length){ event.current=event.targets.shift(); if(event.current.hasSha()){ event.current.addTempSkill('gwzhanjiang3','gwzhanjiangAfter'); event.current.chooseToUse({name:'sha'},'是否对'+get.translation(trigger.player)+'使用一张杀?',trigger.player,-1); } else{ event.redo(); } } else{ event.finish(); } 'step 3' if(result.bool){ event.num++; if(event.num>=2){ return; } } event.goto(2); }, ai:{ expose:0.2, threaten:1.4 }, }, gwzhanjiang2:{}, gwzhanjiang3:{ trigger:{player:'useCard'}, filter:function(event){ return event.card.name=='sha'&&event.getParent(2).name=='gwzhanjiang'; }, forced:true, popup:false, content:function(){ player.draw(); } }, gwchuanxin_old:{ trigger:{player:'shaAfter'}, filter:function(event,player){ if(player.storage.gwchuanxin&&player.storage.gwchuanxin.length>=4) return false; return event.target.isAlive(); }, check:function(event,player){ return get.effect(event.target,{name:'sha'},player,player)>0 }, logTarget:'target', logLine:false, content:function(){ 'step 0' event.card=get.cards()[0]; player.showCards(event.card,get.translation(player)+'对'+get.translation(trigger.player)+'发动了【穿心】'); 'step 1' if(player.storage.gwchuanxin&&!player.storage.gwchuanxin.contains(get.suit(event.card))){ player.useCard({name:'sha'},[event.card],trigger.target,false); } }, group:['gwchuanxin_count1','gwchuanxin_count2'], subSkill:{ count1:{ trigger:{global:'phaseBegin'}, forced:true, popup:false, silent:true, content:function(){ player.storage.gwchuanxin=[]; } }, count2:{ trigger:{player:'useCard'}, forced:true, popup:false, silent:true, // filter:function(event){ // return event.card&&event.card.name=='sha'; // }, content:function(){ for(var i=0;i0 }, logTarget:'target', // logLine:false, content:function(){ 'step 0' var cards=get.cards(); player.showCards(cards,get.translation(player)+'发动了【穿心】'); event.bool=(get.color(cards[0])=='black'); 'step 1' if(event.bool){ player.useCard({name:'sha'},trigger.target,false).animate=false; } }, mod:{ attackFrom:function(from,to,distance){ return distance-from.hp; } } }, fengjian:{ trigger:{player:'useCard'}, direct:true, filter:function(event,player){ var type=get.type(event.card,'trick'); return type=='trick'&&game.hasPlayer(function(current){ return player.canUse('sha',current,false)&&!event.targets.contains(current); }); }, content:function(){ "step 0" player.chooseTarget(get.prompt('fengjian'),function(card,player,target){ return player.canUse('sha',target,false)&&!trigger.targets.contains(target); }).ai=function(target){ return get.effect(target,{name:'sha',nature:'thunder'},player,player); } "step 1" if(result.bool){ player.logSkill('fengjian'); player.useCard({name:'sha',nature:'thunder'},result.targets,false); player.addTempSkill('qianxing',{player:'phaseBegin'}); } }, ai:{ expose:0.2, threaten:1.5, noautowuxie:true, }, // group:'fengjian_hide', // subSkill:{ // hide:{ // trigger:{source:'damageEnd'}, // forced:true, // popup:false, // filter:function(event,player){ // return event.getParent(3).name=='fengjian'; // }, // content:function(){ // player.addTempSkill('qianxing',{player:'phaseBegin'}); // } // } // } }, huandie:{ trigger:{player:'phaseBegin'}, direct:true, content:function(){ 'step 0' player.chooseTarget(get.prompt('huandie'),[0,game.countPlayer()],function(card,player,target){ return target!=player; }).ai=function(target){ return get.attitude(player,target); } 'step 1' if(result.bool){ result.targets.sortBySeat(); result.targets.unshift(player); player.logSkill('huandie',result.targets); game.asyncDrawAuto(result.targets,function(current){ return current==player?1:2; }); player.addTempSkill('huandie_discard','phaseAfter'); } }, ai:{ threaten:1.5 }, subSkill:{ discard:{ trigger:{player:'phaseEnd'}, forced:true, filter:function(event,player){ return game.hasPlayer(function(current){ return current.countCards('h')>current.hp; }); }, logTarget:function(){ return game.filterPlayer(function(current){ return current.countCards('h')>current.hp; }).sortBySeat(); }, content:function(){ 'step 0' var list=game.filterPlayer(function(current){ return current.countCards('h')>current.hp; }).sortBySeat(); event.list=list; 'step 1' if(event.list.length){ event.list.shift().chooseToDiscard('h',true,2); event.redo(); } } } } }, xuezhou:{ trigger:{player:'phaseBegin'}, direct:true, unique:true, forceunique:true, intro:{ content:function(storage,player){ var name=get.translation(player); if(storage==1){ return '每当一名角色('+name+'除外)受到一次伤害,该角色失去一点体力,'+name+'回复一点体力'; } else if(storage==2){ return '每当一名角色('+name+'除外)造成一次伤害,该角色失去一点体力,'+name+'(若不是受伤害角色)回复一点体力'; } else{ return '未发动'; } } }, content:function(){ 'step 0' var next=player.chooseControl('选项一','选项二','cancel2',function(){ if(Math.random()<0.65) return 0; return 1; }); next.prompt=get.prompt('xuezhou'); next.choiceList=[ '每当一名其他角色受到一次伤害,该角色失去一点体力,你回复一点体力', '每当一名其他角色造成一次伤害,该角色失去一点体力,你(若不是受伤害角色)回复一点体力' ]; 'step 1' if(result.control=='cancel2'){ player.unmarkSkill('xuezhou'); delete _status.xuezhou; } else{ player.logSkill('xuezhou'); player.storage.xuezhou=result.index+1; player.syncStorage('xuezhou'); player.markSkill('xuezhou'); _status.xuezhou=player; } }, ai:{ threaten:2.5 }, global:'xuezhou_hp' }, xuezhou_hp:{ trigger:{source:'damageEnd',player:'damageEnd'}, filter:function(event,player){ if(!_status.xuezhou) return false; if(player==_status.xuezhou) return false; if(!player.isIn()||!_status.xuezhou.isIn()) return false; switch(_status.xuezhou.storage.xuezhou){ case 1:return player==event.player; case 2:return player==event.source; default:return false; } }, forced:true, popup:false, silent:true, content:function(){ 'step 0' game.delayx(); 'step 1' _status.xuezhou.logSkill('xuezhou',player); player.loseHp(); if(_status.xuezhou!=trigger.player){ _status.xuezhou.recover(); } } }, fayin:{ trigger:{player:'shaBegin'}, direct:true, filter:function(event,player){ return player.countCards('he')>0; }, content:function(){ 'step 0' var target=trigger.target; var bool=get.attitude(player,target)<0; var next=player.chooseToDiscard('he',get.prompt('fayin',target)); next.ai=function(card){ if(bool) return 7-get.value(card); return 0; }; next.logSkill=['fayin',target]; 'step 1' if(result.bool){ var target=trigger.target; var num=5; if(target.isMad()){ num=4; } switch(Math.floor(Math.random()*num)){ case 0:target.randomDiscard(2);break; case 1:target.damage('fire');break; case 2:player.changeHujia();break; case 3:target.turnOver();target.draw();break; case 4:target.goMad({player:'phaseBegin'});break; } } } }, gwbaquan:{ enable:'phaseUse', usable:1, filterTarget:function(card,player,target){ return target!=player&&target.countCards('h')>0; }, content:function(){ 'step 0' var hs=target.getCards('h'); player.gain(hs,target); target.$giveAuto(hs,player); event.hs=hs; 'step 1' var damage=(target.hp>=player.hp&&get.damageEffect(target,player,player)>0); var hs=event.hs; if(damage&&target.hp>1){ for(var i=0;i=8){ damage=false;break; } } } player.chooseCard(hs.length,true,'选择还给'+get.translation(target)+'的牌').ai=function(card){ if(damage){ return hs.contains(card)?1:0; } else{ return -get.value(card,player,'raw'); } } if(!event.isMine()) game.delay(); 'step 2' target.gain(result.cards,player); player.$giveAuto(result.cards,target); event.hs2=result.cards; if(player.hp>target.hp){ event.finish(); } 'step 3' for(var i=0;i0){ target.draw(dh,false); target.$draw(dh); game.delay(0.5); } else if(dh<0){ target.chooseToDiscard(-dh,true); if(player!=target) player.useCard({name:'sha'},target,false); } }, ai:{ order:11, result:{ target:function(player,target){ var dh=Math.min(3,player.hp)-target.countCards('h'); if(dh<0){ dh+=get.sgn(get.effect(target,{name:'sha'},player,target)); } return dh; } } } }, hunmo_old2:{ trigger:{player:['phaseBegin','phaseEnd']}, direct:true, content:function(){ 'step 0' player.chooseTarget(get.prompt('hunmo'),[1,game.countPlayer()],function(card,player,target){ return target.countCards('h')!=Math.min(3,target.hp); }).ai=function(target){ return get.attitude(player,target)*(Math.min(3,target.hp)-target.countCards('h')); } 'step 1' if(result.bool){ player.logSkill('hunmo',result.targets); event.targets=result.targets.slice(0); event.targets.sortBySeat(); } else{ event.finish(); } 'step 2' if(event.targets.length){ var target=event.targets.shift(); var dh=Math.min(3,target.hp)-target.countCards('h'); if(dh>0){ target.draw(dh,false); target.$draw(dh); } else if(dh<0){ target.chooseToDiscard(-dh,true).delay=false; } game.delay(0.5); event.redo(); } } }, huihun:{ trigger:{player:'phaseEnd'}, filter:function(event,player){ if(!player.storage.huihun) return false; for(var i=0;i=2) break; } } player.gain(list,'gain2','log'); }, ai:{ threaten:1.8, }, group:['huihun_count','huihun_count2'], subSkill:{ count:{ trigger:{player:'useCard'}, forced:true, popup:false, silent:true, filter:function(event,player){ return _status.currentPhase==player; }, content:function(){ if(!player.storage.huihun){ player.storage.huihun=[]; } for(var i=0;i