=0) return 10;
- if(target.hp>=4) return 5;
- if(target.hp==3){
- if(player.countCards('h')<=2&&game.hasPlayer(function(current){
- return current.hp<=1&&get.attitude(player,current)<0;
- })){
- return 3;
- }
- }
- return 0;
- }
- }
- }
- },
- diancai:{
- audio:2,
- trigger:{global:'phaseUseEnd'},
- filter:function(event,player){
- if(_status.currentPhase==player) return false;
- var num=0;
- player.getHistory('lose',function(evt){
- if(evt.cards2&&evt.getParent('phaseUse')==event) num+=evt.cards2.length;
- });
- return num>=player.hp;
- },
- content:function(){
- 'step 0'
- var num=player.maxHp-player.countCards('h');
- if(num>0){
- player.draw(num);
- }
- },
- },
- diaodu:{
- audio:2,
- group:"diaodu_use",
- subfrequent:['use'],
- subSkill:{
- use:{
- trigger:{
- player:"useCard",
- },
- audio:"diaodu",
- frequent:true,
- prompt:'是否发动【调度】摸一张牌?',
- filter:function (event,player){
- return get.type(event.card)=='equip'
- },
- content:function (){
- player.draw('nodelay');
- },
- ai:{
- reverseEquip:true,
- effect:{
- target:function (card,player,target,current){
- if(player==target&&get.type(card)=='equip') return [1,3];
- },
- },
- },
- },
- },
- trigger:{
- player:"phaseUseBegin",
- },
- filter:function (event,player){
- return game.hasPlayer(function(current){
- return current!=player&¤t.countGainableCards(player,'e')>0;
- });
- },
- direct:true,
- content:function (){
- 'step 0'
- player.chooseTarget(get.prompt2('diaodu'),function(card,player,current){
- return current!=player&¤t.countGainableCards(player,'e')>0;
- }).ai=function(target){
- var num=get.attitude(_status.event.player,target);
- if(target.isDamaged()&&target.getEquip('baiyin')&&num>0) return 2*num
- return -num;
- };
- 'step 1'
- if(result.bool){
- event.target1=result.targets[0];
- player.logSkill('diaodu',event.target1);
- player.line(event.target1,'diaodu');
- player.gainPlayerCard(event.target1,'e',true);
- }
- else event.finish();
- 'step 2'
- if(result.bool){
- event.card=result.cards[0];
- player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){
- return current!=player&¤t!=event.target1;
- });
- }
- else event.finish();
- 'step 3'
- if(result.bool){
- var target=result.targets[0];
- player.line(target,'green');
- target.gain(card,player,'give');
- }
- },
- },
- zhengbi:{
- trigger:{player:'phaseUseBegin'},
- filter:function(event,player){
- //if(event.player!=player) return false;
- return game.hasPlayer(function(current){return current!=player&¤t.isHealthy()})||player.countCards('h',{type:'basic'});
- },
- content:function(){
- 'step 0'
- var choices=[];
- if(game.hasPlayer(function(current){return current.isHealthy()})) choices.push('选择一名未受伤的角色');
- if(player.countCards('h',{type:'basic'})) choices.push('交给一名角色一张基本牌');
- player.chooseControl(choices,ui.create.dialog('征辟选择一项
','hidden')).set('ai',function(){
- if(choices.length>1){
- return 1;
- }
- return 0;
- });
- 'step 1'
- if(result.control=='选择一名未受伤的角色') player.chooseTarget('征辟选择一名未受伤的角色,你对其使用牌没有次数和距离限制直到回合结束
',function(card,player,target){
- return target!=player&&target.isHealthy();
- },true);
- else player.chooseCardTarget({
- prompt:'征辟交给一名其他角色一张基本牌,然后该角色交给你一张非基本牌或两张基本牌
',
- position:'h',
- filterCard:function(card){return get.type(card)=='basic'},
- filterTarget:function(card,player,target){
- return target!=player;
- },
- ai1:function(card){return 7-get.value(card)},
- //ai2:function(card,player,target){}
- }).set('forced',true);
- 'step 2'
- event.target=result.targets[0];
- player.line(result.targets,'green');
- if(result.cards.length){
- event.cards=result.cards;
- result.targets[0].gain(result.cards,player,'give');
- }
- else{
- player.storage.zhengbi_eff1=result.targets[0];
- player.addTempSkill('zhengbi_eff1');
- event.finish();
- }
- 'step 3'
- var choices=[];
- if(target.countCards('he',{type:['trick','delay','equip']})) choices.push('一张非基本牌');
- if(target.countCards('h',{type:'basic'})>1) choices.push('两张基本牌');
- if(choices.length) target.chooseControl(choices,ui.create.dialog('征辟交给'+get.translation(player)+'
')).set('ai',function(event,player){
- if(choices.length>1){
- if(player.countCards('he',{type:['trick','delay','equip']},function(card){return get.value(card)<7})) return 0;
- return 1;
- }
- return 0;
- });
- else{
- if(target.countCards('h')){
- var cards=target.getCards('h');
- player.gain(cards,target,'giveAuto');
- event.finish();
- }
- else event.finish();
- }
- 'step 4'
- var check=(result.control=='一张非基本牌');
- target.chooseCard('he',(check?1:2),{type:(check?['trick','delay','equip']:'basic')},true);
- 'step 5'
- if(result.cards){
- player.gain(result.cards,target,'giveAuto');
- }
- },
- subSkill:{
- eff1:{
- sub:true,
- mod:{
- targetInRange:function (card,player,target){
- if(target==player.storage.zhengbi_eff1) return true;
- },
- cardUsable:function (card,player,num){
- if(typeof num=='number'&&player.storage.zhengbi_eff1&&player.storage.zhengbi_eff1.isAlive()) return num+100;
- },
- playerEnabled:function (card,player,target){
- if(player.storage.zhengbi_eff1.isAlive()&&player.storage.zhengbi_eff1&&target!=player.storage.zhengbi_eff1){
- var num=player.getCardUsable(card)-100;
- if(num<=0) return false;
- }
- },
- },
- onremove:true,
- },
- eff2:{sub:true},
- }
- },
- fengying:{
- limited:true,
- enable:'phaseUse',
- position:'h',
- filterCard:true,
- selectCard:-1,
- filter:function(event,player){
- return !player.storage.fengying&&player.countCards('h')>0;
- },
- filterTarget:function(card,player,target){
- return target==player;
- },
- selectTarget:-1,
- discard:false,
- lose:false,
- content:function(){
- 'step 0'
- player.awakenSkill('fengying');
- player.storage.fengying=true;
- player.insertPhase();
- var evt=_status.event.getParent('phaseUse');
- if(evt&&evt.name=='phaseUse'){
- evt.skipped=true;
- }
- 'step 1'
- var cards=player.getCards('h');
- player.discard(cards);
- player.chooseTarget('请选择至多'+cards.length+'名角色,令这些角色将手牌摸至手牌上限。',[1,cards.length],function(card,player,target){
- return target.countCards('h')2){
- return Math.min(5,target.maxHp)-target.countCards('h');
- }
- return att/3;
- });
- 'step 2'
- if(result.bool){
- var list=result.targets;
- list.sort(lib.sort.seat);
- player.line(list,'thunder');
- game.asyncDraw(list,function(current){
- return current.maxHp-current.countCards('h');
- });
- }
- },
- skillAnimation:'epic',
- animationColor:'gray',
- ai:{
- order:0.1,
- result:{
- player:0,
- }
- },
- },
- //新服曹笨
- 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')){
- if(get.position(card)=='e') return num/player.hp;
- return num*player.hp;
- }
- },
- },
- subSkill:{
- count:{
- forced:true,
- silent:true,
- popup:false,
- trigger:{
- player:"loseEnd",
- },
- filter:function(event,player){
- return event.es.length>0;
- },
- content:function (){
- lib.skill.xinshanjia.sync(player);
- },
- },
- },
- 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 bool=true;
- if(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];
- },
- },
- },
- },
- //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=Math.max(1,player.getDamagedHp());
- player.chooseTarget('是否发动【誓仇】,令至多'+num+'名其他角色也成为此【杀】的目标?',[1,num],function(card,player,target){
- return target!=player&&!trigger.targets.contains(target)&&player.canUse({name:'sha'},target);
- }).ai=function(target){
- return get.effect(target,{name:'sha'},_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);
- }
- },
- },
- //新大小乔
- "new_xingwu":{
- audio:"xingwu",
- trigger:{
- player:"phaseDiscardBegin",
- },
- direct:true,
- intro:{
- content:"cards",
- onunmark:function(storage,player){
- if(storage&&storage.length){
- player.$throw(storage,1000);
- game.cardsDiscard(storage);
- game.log(storage,'被置入了弃牌堆');
- storage.length=0;
- }
- },
- },
- init:function (player){
- if(!player.storage.new_xingwu) player.storage.new_xingwu=[];
- },
- content:function (){
- 'step 0'
- player.chooseCard(get.prompt2('new_xingwu')).set('ai',function(card){
- var player=_status.event.player;
- for(var i=0;i0&&
- get.attitude(player,current)<0)
- })) return 0;
- }
- return 7-get.value(card);
- });
- 'step 1'
- if(result.bool){
- player.logSkill('new_xingwu');
- if(player.storage.new_xingwu.length<2){
- player.$give(result.cards,player,false);
- }
- player.lose(result.cards,ui.special,'toStorage');
- player.storage.new_xingwu=player.storage.new_xingwu.concat(result.cards);
- player.markSkill('new_xingwu');
- player.syncStorage('new_xingwu');
- }
- else{
- event.finish();
- }
- 'step 2'
- var suitlist=[];
- for(var i=0;i0) return -1;
- return get.damageEffect(target,player,player)*target.sex=='male'?2:1+target.countCards('e')/2;
- });
- }
- 'step 4'
- if(result.bool){
- var target=result.targets[0];
- var num=target.sex=="male"?2:1;
- target.damage(num);
- event.target=target;
- player.line(target,'green');
- }
- else{
- event.finish();
- }
- 'step 5'
- if(event.target&&event.target.isAlive()){
- var es=event.target.getCards('e');
- if(es.length){
- event.target.discard(es);
- }
- }
- },
- ai:{
- threaten:1.5,
- },
- },
- "new_luoyan":{
- group:["new_luoyan_tianxiang","new_luoyan_liuli"],
- },
- "new_luoyan_tianxiang":{
- inherit:"retianxiang",
- filter:function (event,player){
- if(!player.storage.new_xingwu||!player.storage.new_xingwu.length) return false;
- if(player.hasSkill('retianxiang')||player.hasSkill('tianxiang')) return false;
- return lib.skill.retianxiang.filter(event,player);
- },
- audio:"tianxiang",
- },
- "new_luoyan_liuli":{
- inherit:"liuli",
- filter:function (event,player){
- if(!player.storage.new_xingwu||!player.storage.new_xingwu.length) return false;
- if(player.hasSkill('liuli')) return false;
- return lib.skill.liuli.filter(event,player);
- },
- audio:"liuli",
- },
- //新孙鲁育
- "new_meibu":{
- audio:"meibu",
- trigger:{
- global:"phaseUseBegin",
- },
- filter:function (event,player){
- return event.player!=player&&event.player.isAlive()&&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','phaseUseEnd');
- 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.getEquip(2)!=undefined;
- 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.isEmpty(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.getEquip(2);
- event.e=e;
- if(target==player) event.choice='获得一张防具牌';
- else if(e){
- player.chooseControl('弃置一张装备牌','获得一张防具牌').set('ai',function(){
- if(_status.event.player.getEquip(2)){
- 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');
- 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;
- },
- },
- trigger:{
- player:"useCard1",
- },
- forced:true,
- popup:false,
- onremove:true,
- firstDo: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.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:true,
- 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:'gameDrawAfter',
- player:'enterGame',
- },
- forced:true,
- filter:function(){
- return game.players.length>1;
- },
- 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;
- });
- '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==event.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'){
- player.chooseTarget('弃置一名角色区域内的一张牌',function(card,player,target){
- return target.countCards('hej');
- }).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{
- 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(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.chooseBool(get.prompt2('chouce'));
- }
- else{
- event.finish();
- }
- 'step 5'
- if(result.bool){
- player.logSkill('chouce');
- event.goto(1);
- }
- },
- 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,-2];
- if(!target.hasFriend()) return;
- 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];
- }
- }
- }
- }
- },
- fuqi:{
- audio:2,
- forced:true,
- trigger:{
- player:"useCard",
- },
- filter:function(event,player){
- 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(){
- trigger.directHit.addArray(game.filterPlayer(function(current){
- return current!=player&&get.distance(current,player)<=1;
- }));
- },
- },
- wylianji:{
- enable:'phaseUse',
- audio:2,
- usable:1,
- filter:function(event,player){
- return player.hasCard(lib.skill.wylianji.filterCard);
- },
- 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;
- },
- 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;
- }
- 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,'noanimate','nopopup');
- game.delay();
- 'step 2'
- game.updateRoundNumber();
- var card=cards[0];
- var bool1=game.hasPlayer(function(current){
- return current!=player&&target.canUse(card,current);
- });
- 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();
- }
- '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.getEquip(1);
- if(equip1){
- 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();
- }
- }
- 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){
- 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;
- }
- }
- 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');
- player.addSkill('jingong');
- }
- }
- }
- },
- jingong:{
- audio:2,
- enable:'phaseUse',
- filter:function(event,player){
- return player.countCards('he',function(card){
- return card.name=='sha'||get.type(card)=='equip';
- });
- },
- delay:false,
- usable:1,
- content:function(){
- 'step 0'
- var list=get.inpile('trick').randomGets(2);
- if(Math.random()<0.5){
- list.push('wy_meirenji');
- }
- else{
- list.push('wy_xiaolicangdao');
- }
- 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;
- },
- },
- },
- },
- 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;
- },
- 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;
- }
- }
- }
- },
- content:function(){
- '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){
- if(get.position(card)=='h') return false;
- },
- },
- intro:{
- content:'不能使用或打出手牌'
- }
- },
-
- huoshui:{
- audio:2,
- enable:'phaseUse',
- unique:true,
- forceunique:true,
- filter:function(event,player){
- if(player.name1=='gz_zoushi') return player.isUnseen(0);
- return player.isUnseen(1);
- },
- content:function(){
- if(player.name1=='gz_zoushi') player.showCharacter(0);
- else player.showCharacter(1);
- },
- global:'huoshui_mingzhi'
- },
- huoshui_mingzhi:{
- ai:{
- nomingzhi:true,
- skillTagFilter:function(player){
- if(_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('huoshui')){
- return true;
- }
- return false;
- }
- }
- },
- qingcheng:{
- audio:2,
- enable:'phaseUse',
- filter:function(event,player){
- return player.countCards('he',{type:'equip'})&&game.hasPlayer(function(current){
- return current!=player&&!current.isUnseen(2);
- });
- },
- filterCard:{type:'equip'},
- position:'he',
- filterTarget:function(card,player,target){
- return !target.isUnseen(2);
- },
- check:function(card){
- return 6-get.value(card,_status.event.player);
- },
- content:function(){
- 'step 0'
- if(get.is.jun(target)){
- event._result={control:'副将'};
- }
- else{
- var choice='主将';
- var skills=lib.character[target.name2][3];
- for(var i=0;i=0) return 0;
- if(player.hasCard(function(card){
- return get.tag(card,'damage')&&player.canUse(card,target,true,true);
- })){
- if(target.maxHp>3) return -0.5;
- return -1;
- }
- return 0;
- }
- }
- }
- },
- qingcheng_ai:{
- ai:{
- effect:{
- target:function(card){
- if(get.tag(card,'damage')) return 2;
- }
- }
- }
- },
- zhuoshui:{
- audio:'huoshui',
- trigger:{player:'phaseZhunbeiBegin'},
- forced:true,
- content:function(){
- game.countPlayer(function(current){
- if(current!=player&&!current.hasSkill('fengyin')){
- player.line(current,'green');
- current.addTempSkill('fengyin');
- }
- });
- }
- },
- zqingcheng:{
- audio:'qingcheng',
- enable:'phaseUse',
- filter:function(event,player){
- return player.countCards('he',{type:'equip'});
- },
- filterCard:{type:'equip'},
- position:'he',
- filterTarget:function(card,player,target){
- return target!=player;
- },
- check:function(card){
- var player=_status.event.player;
- if(game.hasPlayer(function(current){
- return get.attitude(player,current)>2&¤t.isTurnedOver();
- })){
- return 10-get.value(card,player);
- }
- return 6-get.value(card,player);
- },
- content:function(){
- 'step 0'
- target.turnOver();
- 'step 1'
- target.draw(2);
- },
- ai:{
- order:8,
- result:{
- target:function(player,target){
- if(target.hasSkillTag('noturn')) return 0;
- if(target.isTurnedOver()) return 2;
- return -0.5;
- }
- }
- }
- },
- zfengshi:{
- audio:2,
- trigger:{player:'useCardToPlayered'},
- filter:function(event,player){
- 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.target.chooseToDiscard('e',true);
- }
- },
- chuanxin:{
- audio:2,
- trigger:{source:'damageBegin2'},
- filter:function(event,player){
- 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;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:{
- maixie_defend:true,
- }
- },
- hengjiang2:{
- mark:true,
- charlotte:true,
- intro:{
- content:'手牌上限-#'
- },
- mod:{
- maxHandcard:function(player,num){
- return num-player.storage.hengjiang2;
- }
- },
- 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;
- },
- content:function(){
- "step 0"
- event.count=trigger.num;
- "step 1"
- event.count--;
- var source=_status.currentPhase;
- if(source.hasSkill('rehengjiang2')){
- source.storage.rehengjiang2++;
- source.storage.rehengjiang3.push(player);
- source.storage.rehengjiang3.sortBySeat(source);
- source.updateMarks();
- }
- else{
- source.storage.rehengjiang3=[player];
- source.storage.rehengjiang2=1;
- source.addTempSkill('rehengjiang2');
- }
- "step 2"
- if(event.count){
- 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,
- }
- },
- rehengjiang2:{
- mark:true,
- charlotte:true,
- intro:{
- content:'手牌上限-#'
- },
- mod:{
- maxHandcard:function(player,num){
- return num-player.storage.rehengjiang2;
- }
- },
- onremove:function(player){
- delete player.storage.rehengjiang2;
- delete player.storage.rehengjiang3;
- },
- trigger:{player:'phaseDiscardEnd'},
- filter:function(event,player){
- if(event.cards&&event.cards.length) return false;
- var players=player.storage.rehengjiang3;
- for(var i=0;i1){
- 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);
- '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(target.identity!='ye'&&target.identity!='unknown'&&game.hasPlayer(function(current){
- if(!player.canUse('sha',current,false)) return false;
- if(target==current) return false;
- if(get.mode()=='guozhan'){
- return target.identity==current.identity;
- }
- return true;
- })){
- var str='对一名';
- if(get.mode()=='guozhan'){
- str+=get.translation(target.identity)+'势力的';
- }
- player.chooseTarget(str+'角色使用一张杀',true,function(card,player,target){
- if(!player.canUse('sha',target,false)) return false;
- if(get.mode()=='guozhan'){
- return target.identity==_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.identity);
- }
- else{
- player.useCard({name:'sha',isCard:true},target,false);
- event.finish();
- }
- }
- else{
- trigger.cancel();
- 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;
- });
- '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');
- event.target.gain(hs,player,'giveAuto');
- }
- 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');
- }
- else{
- player.gain(event.cards2,target,'giveAuto');
- }
- },
- 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()) 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){
- event.target.gain(result.cards,player,'giveAuto');
- }
- },
- ai:{
- expose:0.2,
- threaten:1.4
- }
- },
- fuman:{
- audio:2,
- enable:'phaseUse',
- filterTarget:function(card,player,target){
- return !target.hasSkill('fuman2')&&target!=player;
- },
- filter:function(event,player){
- return player.countCards('h','sha');
- },
- discard:false,
- lose:false,
- delay:false,
- filterCard:{name:'sha'},
- content:function(){
- target.gain(cards,player,'giveAuto');
- target.storage.fuman3=cards[0];
- target.storage.fuman2=player;
- target.addTempSkill('fuman2',{player:'phaseAfter'});
- },
- check:function(card){
- return 6-get.value(card);
- },
- ai:{
- order:2,
- result:{
- target:function(player,target){
- if(!target.hasSha()) return 1.2;
- return 1;
- }
- }
- }
- },
- fuman2:{
- mod:{
- aiOrder:function(player,card,num){
- if(card==player.storage.fuman3&&player.storage.fuman2.isIn()) return num+get.sgn(get.attitude(player,player.storage.fuman2));
- },
- },
- trigger:{player:'useCard'},
- forced:true,
- filter:function(event,player){
- return event.cards.contains(player.storage.fuman3)&&player.storage.fuman2.isIn();
- },
- mark:true,
- intro:{
- content:'下个回合结束之前使用“抚蛮”牌时,令$一张牌'
- },
- content:function(){
- 'step 0'
- game.delayx();
- 'step 1'
- player.line(player.storage.fuman2,'green');
- player.storage.fuman2.draw();
- },
- onremove:function(player){
- delete player.storage.fuman2;
- delete player.storage.fuman3;
- },
- },
- qizhou:{
- trigger:{player:['phaseBefore','equipEnd','loseEnd']},
- forced:true,
- popup:false,
- derivation:['mashu','reyingzi','duanbing','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(to==from.storage.fenxun2){
- 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()&&!_status.connectMode) game.delayx();
- event.target=result.targets[0];
- }
- else{
- event.finish();
- }
- 'step 2'
- player.logSkill('duanbing',event.target);
- trigger.targets.push(event.target);
- },
- ai:{
- effect:{
- 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;
- }
- }
- }
- }
- },
- 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:'phaseBegin'},
- 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);
- 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(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('h','shan')) return true;
- if(filter({name:'shan'},player,event)&&player.countCards('h','sha')) return true;
- if(filter({name:'tao'},player,event)&&player.countCards('h','jiu')) return true;
- if(filter({name:'jiu'},player, event)&&player.countCards('h','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,
- save: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;
- case 'save':name='jiu';break;
- }
- if(!player.countCards('h',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+=0.3;
- return max;
- }
- return 4;
- },
- },
- },
- }
- },
- yjixi:{
- init:function(player){
- player.storage.yjixi=0;
- },
- derivation:'wangzun',
- trigger:{player:'phaseJieshuBegin'},
- forced:true,
- filter:function(event,player){
- return player.storage.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'
- target.gain(cards,player,'giveAuto');
- 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) 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;
- }
- }
- },
- shichou:{
- //audio:1,
- skillAnimation:true,
- animationColor:'orange',
- unique:true,
- limited:true,
- mark:false,
- trigger:{player:'phaseZhunbeiBegin'},
- zhuSkill:true,
- direct:true,
- filter:function(event,player){
- if(!player.hasZhuSkill('shichou'))return false;
- if(player.countCards('he')<2) return false;
- return !player.storage.shichou;
- },
- init:function(player){
- if(player.hasZhuSkill('shichou')){
- player.markSkill('shichou');
- player.storage.shichou=false;
- }
- },
- content:function(){
- "step 0"
- player.chooseCardTarget({
- prompt:get.prompt2('shichou'),
- selectCard:2,
- filterTarget:function(card,player,target){
- return target.group=='shu'&&target!=player;
- },
- filterCard:true,
- position:'he',
- ai1:function(card){
- return 7-get.value(card);
- },
- ai2:function(target){
- var player=_status.event.player;
- if(player.hasUnknown()) return 0;
- var att=get.attitude(player,target);
- if(att<=0){
- if(target.hp==1) return (10-att)/2;
- return 10-att;
- }
- else{
- if(target.hp==1) return 0;
- return (10-att)/4;
- }
- },
- });
- "step 1"
- if(!result.bool) return;
- var target=result.targets[0];
- var cards=result.cards;
- player.storage.shichou=true;
- player.logSkill('shichou',target);
- player.awakenSkill('shichou');
- target.gain(cards,player,'giveAuto');
- player.storage.shichou_target=target;
- player.addSkill('shichou2');
- target.markSkillCharacter('shichou',player,'誓仇','代替'+get.translation(player)+'承受伤害直到首次进入濒死状态');
- },
- intro:{
- content:'limited'
- },
- },
- shichou2:{
- group:'shichou3',
- trigger:{player:'damageBegin3'},
- forced:true,
- popup:false,
- content:function(){
- trigger.player=player.storage.shichou_target;
- trigger.shichou4=true;
- trigger.player.addSkill('shichou4');
- player.logSkill('shichou2',player.storage.shichou_target);
- game.delay(0.5);
- },
- ai:{
- effect:{
- target:function(card,player,target,current){
- if(get.tag(card,'damage')){
- if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
- if(get.attitude(player,target)>0) return [0,0];
- var eff=get.damageEffect(target.storage.shichou_target,player,target);
- if(eff>0){
- return [0,1];
- }
- else if(eff<0){
- return [0,-2];
- }
- else{
- return [0,0];
- }
- }
- }
- }
- }
- },
- shichou3:{
- trigger:{global:['dying','dieBegin']},
- forced:true,
- popup:false,
- //priority:10,
- filter:function(event,player){
- return event.player==player.storage.shichou_target;
- },
- content:function(){
- trigger.player.unmarkSkill('shichou');
- delete player.storage.shichou_target;
- player.removeSkill('shichou2');
- }
- },
- shichou4:{
- trigger:{player:['damageAfter','damageCancelled']},
- forced:true,
- popup:false,
- audio:false,
- content:function(){
- if(!trigger.shichou4) return;
- if(event.triggername=='damageAfter'&&trigger.num){
- player.draw(trigger.num);
- }
- player.removeSkill('shichou4');
- }
- },
- zhaolie:{
- trigger:{player:'phaseDrawBegin2'},
- direct:true,
- filter:function(event,player){
- return !event.numFixed;
- },
- content:function(){
- 'step 0'
- player.chooseTarget(get.prompt2('zhaolie'),function(card,player,target){
- return target!=player&&player.inRange(target);
- }).set('ai',function(target){
- var player=_status.event.player;
- if(get.attitude(player,target)>0) return 0;
- return get.damageEffect(target,player,player);
- });
- 'step 1'
- if(result.bool){
- trigger.num--;
- player.storage.zhaolie=result.targets[0];
- player.logSkill('zhaolie',result.targets);
- player.addTempSkill('zhaolie2','phaseDrawAfter');
- }
- }
- },
- zhaolie2:{
- trigger:{player:'phaseDrawEnd'},
- forced:true,
- popup:false,
- content:function(){
- 'step 0'
- event.cards=get.cards(3);
- player.showCards(event.cards);
- 'step 1'
- event.basic=[];
- event.nonbasic=[];
- event.todis=[];
- for(var i=0;i1?0:7-get.value(card);
- case 2:return 8-get.value(card);
- case 3:return 10-get.value(card);
- default:return 0;
- }
- }).set('num',num);
- }
- 'step 2'
- var num=event.nonbasic.length;
- var undone=false;
- if(num==0){
- if(event.basic.length){
- result.targets[0].gain(event.basic,'gain2','log');
- }
- }
- else{
- if(result.bool){
- if(event.basic.length){
- player.gain(event.basic,'gain2','log');
- }
- }
- else{
- player.storage.zhaolie.damage(num);
- if(event.basic.length){
- undone=true;
- }
- }
- }
- if(!undone){
- delete player.storage.zhaolie;
- event.finish();
- }
- 'step 3'
- if(player.storage.zhaolie.isAlive()){
- player.storage.zhaolie.gain(event.basic,'gain2','log');
- }
- else{
- game.cardsDiscard(event.basic);
- }
- delete player.storage.zhaolie;
- }
- },
- 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:['gainAfter','loseAfter']},
- direct:true,
- filter:function(event,player){
- if(event.name=='lose'&&event.type=='gain'&&event.getParent().player==player) return false;
- if(event.name=='gain') return event.cards&&event.cards.length>1;
- return event.cards2&&event.cards2.length>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:'gameDrawAfter',player:'enterGame'},
- forced:true,
- 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;
- },
- init:function(player){
- if(!player.storage.tuifeng) player.storage.tuifeng=[];
- },
- 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.lose(result.cards,ui.special,'toStorage');
- player.$give(result.cards,player,false);
- for(var i=0;i0;
- },
- content:function(){
- player.draw(2*player.storage.tuifeng.length);
- player.addTempSkill('tuifeng3');
- player.storage.tuifeng3=player.storage.tuifeng.length;
- player.unmarkSkill('tuifeng');
- }
- },
- tuifeng3:{
- mod:{
- cardUsable:function(card,player,num){
- if(card.name=='sha'&&player.storage.tuifeng3) return num+player.storage.tuifeng3;
- }
- },
- onremove: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;
- targets[0].gain(cards,player,'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,
- 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.sex=='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.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){
- 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.goto(3);
- 'step 2'
- if(!result.bool){
- player.draw();
- }
- 'step 3'
- if(event.num1<=event.num2){
- player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;});
- }
- 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;
- },
- 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('h')>0;
- },
- intro:{
- content:'cards',
- onunmark:function(storage,player){
- if(storage&&storage.length){
- player.$throw(storage,1000);
- game.cardsDiscard(storage);
- game.log(storage,'被置入了弃牌堆');
- storage.length=0;
- }
- 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;i=5) return false;
- if(nh2>nh2&&event.source.isDead()) return false;
- return true;
- },
- direct:true,
- content:function(){
- "step 0"
- var num1=player.countCards('h');
- var num2=trigger.source.countCards('h');
- if(num1>num2){
- var next=player.chooseToDiscard([num2+1,num1],'贲育:是否弃置至少'+(num2+1)+'张手牌,并对'+get.translation(trigger.source)+'造成一点伤害?');
- 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&&_status.event.num<=2){
- return 8-get.value(card);
- }
- return -1;
- });
- next.set('num',num2+1);
- }
- else{
- event.draw=true;
- event.num=Math.min(num2,5)-num1;
- player.chooseBool(get.prompt2('benyu'));
- }
- "step 1"
- if(result.bool){
- if(event.draw){
- player.logSkill('benyu',trigger.source);
- player.draw(event.num);
- }
- else{
- trigger.source.damage(player);
- }
- }
- },
- },
- 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});
- if(!event.isMine()&&!_status.connectMode) game.delay();
- 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);
- }
- }
- },
- mouduan:{
- audio:1,
- init2:function(player){
- game.broadcastAll(function(player){
- player._mouduan_mark=player.mark('武',{
- content:'拥有技能【激昂】、【谦逊】'
- });
- },player);
- player.addAdditionalSkill('mouduan',['jiang','qianxun']);
- },
- onremove:function(player){
- game.broadcastAll(function(player){
- if(player._mouduan_mark){
- player._mouduan_mark.delete();
- delete player._mouduan_mark;
- }
- },player);
- player.removeAdditionalSkill('mouduan');
- },
- trigger:{player:'loseEnd'},
- forced:true,
- filter:function(event,player){
- return player._mouduan_mark&&player._mouduan_mark.name=='武'&&player.countCards('h')<=2;
- },
- content:function(){
- game.broadcastAll(function(player){
- if(!player._mouduan_mark) return;
- player._mouduan_mark.name='文';
- player._mouduan_mark.skill='文';
- player._mouduan_mark.firstChild.innerHTML='文';
- player._mouduan_mark.info.content='拥有技能【英姿】、【克己】';
- },player);
- player.addAdditionalSkill('mouduan',['yingzi','keji']);
- },
- group:'mouduan2'
- },
- mouduan2:{
- audio:1,
- trigger:{global:'phaseZhunbeiBegin'},
- //priority:5,
- filter:function(event,player){
- return player._mouduan_mark&&player._mouduan_mark.name=='文'&&player.countCards('h')>2;
- },
- direct:true,
- content:function(){
- 'step 0'
- player.chooseToDiscard('he','谋断:是否弃置一张牌将标记变为“武”?').ai=function(){
- return -1;
- }
- 'step 1'
- if(result.bool&&player.countCards('h')>2){
- game.broadcastAll(function(player){
- if(!player._mouduan_mark) return;
- player._mouduan_mark.name='武';
- player._mouduan_mark.skill='武';
- player._mouduan_mark.firstChild.innerHTML='武';
- player._mouduan_mark.info.content='拥有技能【激昂】、【谦逊】';
- },player);
- player.addAdditionalSkill('mouduan',['jiang','qianxun']);
- }
- }
- },
- tanhu:{
- audio:1,
- 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.bool){
- target.addTempSkill('tanhu2');
- }
- },
- ai:{
- 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;
- return -1;
- }
- },
- order:9,
- },
- group:'tanhu3'
- },
- tanhu2:{
- mark:true,
- intro:{
- content:'已成为探虎目标'
- }
- },
- tanhu3:{
- mod:{
- globalFrom:function(from,to){
- if(to.hasSkill('tanhu2')) return -Infinity;
- },
- wuxieRespondable:function(card,player,target){
- if(target&&target.hasSkill('tanhu2')) return false;
- }
- }
- },
- 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;i=2&&he<=3){
- return '弃牌';
- }
- if(player.maxHp-player.hp>=3&&he<=5){
- return '弃牌';
- }
- if(player.maxHp-player.hp>3){
- return '弃牌';
- }
- return '出杀';
- }
- return '出杀';
- }).set('prompt','弃置'+get.translation(trigger.player)+get.cnNumber(player.maxHp-player.hp)+'张牌,或对任意一名角色使用一张杀');
- 'step 1'
- if(result.control=='弃牌'){
- player.line(trigger.player,'green');
- if(player.hp1) 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;
- },
- content:function(){
- 'step 0'
- player.chooseToCompare(target).set('preserve','win');
- 'step 1'
- if(result.bool&&result.target){
- event.type=true;
- event.card=result.target;
- player.chooseTarget('将'+get.translation(result.target)+'交给一名角色',function(card,player,target){
- return target.hp<=player.hp;
- }).set('ai',function(target){
- var att=get.attitude(_status.event.player,target);
- if(_status.event.du) return -att;
- return att;
- }).set('du',event.card.name=='du');
- target.addTempSkill('dahe2');
- }
- else{
- event.type=false;
- if(player.countCards('h')){
- player.showHandcards();
- player.chooseToDiscard('h',true);
- }
- }
- 'step 2'
- if(event.type){
- if(result.bool){
- player.line(result.targets,'green');
- result.targets[0].gain(event.card,'gain2');
- }
- }
- },
- ai:{
- 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(player.canUse('sha',target)&&(player.countCards('h','sha'))){
- return -2;
- }
- return -0.5;
- }
- },
- order:9,
- }
- },
- dahe2:{
- mark:true,
- intro:{
- content:'非红桃闪无效'
- },
- mod:{
- cardRespondable:function(card,player){
- if(card.name=='shan'&&get.suit(card)!='heart') return false;
- },
- cardEnabled:function(card,player){
- if(card.name=='shan'&&get.suit(card)!='heart') return false;
- },
- }
- },
- xunzhi:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- 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;
- }
- }
- },
- junwei:{
- trigger:{player:'phaseJieshuBegin'},
- direct:true,
- filter:function(event,player){
- return player.storage.yinling&&player.storage.yinling.length>=3;
- },
- content:function(){
- 'step 0'
- if(player.storage.yinling.length>3){
- player.chooseButton(3,[get.prompt('junwei'),'hidden',player.storage.yinling]).set('ai',function(button){
- return 1;
- });
- }
- else{
- player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',player.storage.yinling]).set('dialogselectx',true).set('choice',true);
- event.cards=player.storage.yinling.slice(0);
- }
- 'step 1'
- if(result.bool){
- player.logSkill('junwei');
- var cards=event.cards||result.links;
- for(var i=0;i1) return 1;
- if(_status.event.player.hp>=3) return 0;
- return 1;
- }).set('nshan',nshan);
- }
- }
- else{
- event.finish();
- }
- 'step 3'
- if(!event.directfalse&&result.bool) game.delay();
- ui.clear();
- 'step 4'
- if(!event.directfalse&&result.bool){
- event.cards=result.cards;
- event.target.$throw(result.cards);
- player.chooseTarget('将'+get.translation(event.cards)+'交给一名角色',true,function(card,player,target){
- return target!=_status.event.getParent().target;
- }).set('ai',function(target){
- return get.attitude(_status.event.player,target)/(target.countCards('h','shan')+1);
- });
- }
- else{
- event.target.loseHp();
- delete event.cards;
- }
- 'step 5'
- if(event.cards){
- player.line(result.targets,'green');
- result.targets[0].gain(event.cards,'gain2');
- game.log(player,'将',event.cards,'交给',result.targets[0]);
- event.finish();
- }
- else{
- if(event.target.countCards('e')){
- player.choosePlayerCard('e','将'+get.translation(event.target)+'的一张装备牌移出游戏',true,event.target);
- }
- else{
- event.finish();
- }
- }
- 'step 6'
- if(result.bool){
- var card=result.links[0];
- if(event.target.storage.junwei2){
- event.target.storage.junwei2.push(card);
- event.target.markSkill('junwei2');
- }
- else{
- event.target.storage.junwei2=[card];
- }
- event.target.lose(card,ui.special,'toStorage');
- event.target.addSkill('junwei2');
- event.target.syncStorage('junwei2');
- }
- }
- },
- junwei2:{
- mark:true,
- intro:{
- content:'cards',
- onunmark:function(storage,player){
- if(storage&&storage.length){
- player.$throw(storage,1000);
- game.cardsDiscard(storage);
- game.log(storage,'被置入了弃牌堆');
- storage.length=0;
- }
- },
- },
- trigger:{player:'phaseJieshuBegin'},
- forced:true,
- content:function(){
- 'step 0'
- if(player.storage.junwei2.length){
- var card=player.storage.junwei2.shift();
- player.equip(card);
- event.redo();
- }
- 'step 1'
- player.removeSkill('junwei2');
- delete player.storage.junwei2;
- }
- },
- yinling:{
- enable:'phaseUse',
- filterCard:{color:'black'},
- position:'he',
- intro:{
- content:'cards',
- onunmark:'throw'
- },
- filter:function(event,player){
- return player.countCards('he',{color:'black'})>0&&player.storage.yinling.length<4;
- },
- filterTarget:function(card,player,target){
- return target.countCards('he')>0&&target!=player;
- },
- init:function(player){
- player.storage.yinling=[];
- },
- check:function(card){
- return 6-get.value(card);
- },
- content:function(){
- 'step 0'
- player.choosePlayerCard('hej',target,true);
- 'step 1'
- if(result.bool&&result.links&&result.links.length){
- target.$give(result.links,player,false);
- target.lose(result.links,ui.special,'toStorage');
- player.storage.yinling.push(result.links[0]);
- player.markSkill('yinling');
- player.syncStorage('yinling');
- }
- },
- ai:{
- order:10.1,
- expose:0.1,
- result:{
- target:function(player,target){
- if(target.hasSkill('tuntian')) return 0;
- var es=target.getCards('e');
- var nh=target.countCards('h');
- var noe=(es.length==0||target.hasSkillTag('noe'));
- var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp=0){
- return -1.5;
- }
- return 2;
- }
- return -1.5;
- },
- },
- }
- },
- yanxiao:{
- audio:2,
- enable:'phaseUse',
- filterCard:{suit:'diamond'},
- filterTarget:true,
- check:function(card){
- return 7-get.value(card);
- },
- position:'he',
- filter:function(event,player){
- return player.countCards('he',{suit:'diamond'})>0;
- },
- discard:false,
- //lose:false,
- visible:true,
- toStorage:true,
- prepare:'give',
- content:function(){
- //player.lose(cards,ui.special,'toStorage','visible');
- if(target.hasSkill('yanxiao2')&&target.storage.yanxiao2){
- target.storage.yanxiao2.push(cards[0]);
- target.syncStorage('yanxiao2');
- target.markSkill('yanxiao2');
- }
- else{
- target.storage.yanxiao2=cards.slice(0);
- target.syncStorage('yanxiao2');
- target.addSkill('yanxiao2');
- }
- },
- ai:{
- order:8,
- result:{
- target:function(player,target){
- if(target.storage.yanxiao2&&target.storage.yanxiao2.length) return 0;
- if(target.countCards('j')) return 1;
- return 0;
- }
- }
- }
- },
- yanxiao2:{
- audio:'yanxiao',
- mark:true,
- intro:{
- content:'cards',
- onunmark:function(storage,player){
- if(storage&&storage.length){
- player.$throw(storage,1000);
- game.cardsDiscard(storage);
- game.log(storage,'被置入了弃牌堆');
- storage.length=0;
- }
- },
- },
- trigger:{player:'phaseJudgeBegin'},
- forced:true,
- content:function(){
- var cards=player.storage.yanxiao2.concat(player.getCards('j'));
- player.gain(cards,'gain2','log','fromStorage');
- delete player.storage.yanxiao2;
- player.removeSkill('yanxiao2');
- },
- ai:{
- effect:{
- target:function(card){
- if(get.type(card)=='delay') return [0,0.1];
- }
- }
- }
- },
- anxian:{
- audio:2,
- group:['anxian_source','anxian_target'],
- subSkill:{
- source:{
- audio:"anxian",
- trigger:{source:'damageBegin2'},
- filter:function(event,player){
- return event.card&&event.card.name=='sha';
- },
- check:function(event,player){
- if(get.damageEffect(event.player,player,player)<=0) return true;
- return false;
- },
- content:function(){
- 'step 0'
- if(trigger.player.countCards('h')){
- trigger.player.chooseToDiscard(true);
- }
- 'step 1'
- player.draw();
- trigger.cancel();
- }
- },
- target:{
- audio:"anxian",
- trigger:{target:'useCardToTargeted'},
- direct:true,
- filter:function(event,player){
- return event.card.name=='sha'&&player.countCards('h');
- },
- content:function(){
- "step 0"
- var next=player.chooseToDiscard(get.prompt2('anxian'));
- next.set('ai',function(card){
- var player=_status.event.player;
- var trigger=_status.event.getTrigger();
- if(get.attitude(player,trigger.player)>0){
- return 9-get.value(card);
- }
- if(player.countCards('h',{name:'shan'})) return -1;
- return 7-get.value(card);
- });
- next.logSkill='anxian';
- "step 1"
- if(result.bool){
- trigger.player.draw();
- trigger.getParent().excluded.push(player);
- }
- },
- }
- }
- },
- 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.sex=='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.isAlive()){
- 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,
- init:function(player){
- if(!player.storage.yinbing) player.storage.yinbing=[];
- },
- 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.storage.yinbing);
- 'step 1'
- var card=result.links[0];
- player.storage.yinbing.remove(card);
- game.cardsDiscard(card);
- player.$throw(card);
- game.log(player,'将',card,'置入弃牌堆');
- player.syncStorage('yinbing');
- if(player.storage.yinbing.length==0){
- player.unmarkSkill('yinbing');
- }
- }
- }
- },
- group:'yinbing_discard'
- },
- juedi:{
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- return player.storage.yinbing&&player.storage.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.storage.yinbing.length);
- 'step 1'
- if(result.bool){
- player.line(result.targets[0],'green');
- if(result.targets[0]==player){
- player.$throw(player.storage.yinbing,1000);
- var num=player.maxHp-player.countCards('h');
- if(num>0) player.draw(num);
- game.cardsDiscard(player.storage.yinbing);
- player.storage.yinbing=[];
- player.syncStorage('yinbing');
- player.unmarkSkill('yinbing');
- }
- else{
- var target=result.targets[0];
- target.recover();
- target.gain(player.storage.yinbing.slice(0),'gain2','log','fromStorage');
- target.draw(player.storage.yinbing.length);
- player.storage.yinbing.length=0;
- }
- player.syncStorage('yinbing');
- player.unmarkSkill('yinbing');
- }
- }
- },
- 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.getEquip(1)||target.getEquip(2);
- },
- content:function(){
- 'step 0'
- var e1=target.getEquip(1);
- var e2=target.getEquip(2);
- event.e1=e1;
- event.e2=e2;
- if(e1&&e2){
- player.chooseControl('武器牌','防具牌').set('ai',function(){
- if(_status.event.player.getEquip(2)){
- return '武器牌';
- }
- return '防具牌';
- });
- }
- else if(e1){
- 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:'cards',
- onunmark:function(storage,player){
- if(storage&&storage.length){
- player.$throw(storage,1000);
- game.cardsDiscard(storage);
- game.log(storage,'被置入了弃牌堆');
- storage.length=0;
- }
- },
- },
- init:function(player,skill){
- if(!player.storage[skill]) player.storage.fentian=[];
- },
- 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){
- event.target.$give(result.links,player,false);
- event.target.lose(result.links,ui.special,'toStorage');
- player.storage.fentian=player.storage.fentian.concat(result.links);
- player.syncStorage('fentian');
- player.markSkill('fentian');
- }
- 'step 3'
- game.delayx();
- },
- mod:{
- attackFrom:function(from,to,distance){
- return distance-from.storage.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.storage.fentian&&player.storage.fentian.length>=3&&!player.storage.zhiri;
- },
- 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.storage.fentian&&player.storage.fentian.length>=2;
- },
- filterTarget:true,
- prompt:'移去两张“焚”并令一名角色失去一点体力',
- content:function(){
- 'step 0'
- player.chooseCardButton(2,'移去两张“焚”并令'+get.translation(target)+'失去一点体力',player.storage.fentian,true);
- 'step 1'
- if(result.bool){
- player.$throw(result.links);
- for(var i=0;iplayer.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.hasSkill('fenxin_nei')){
- if(!player.countCards('h',{color:'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));
- 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.hasSkill('fenxin_nei')){
- if(!player.countCards('h',{color:'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'));
- 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:{},
- zhong:{},
- nei:{}
- },
- ai:{
- combo:'jieyuan'
- }
- },
- fenxin_old:{
- mode:['identity'],
- trigger:{source:'dieBegin'},
- init:function(player){
- player.storage.fenxin=false;
- },
- intro:{
- content:'limited'
- },
- skillAnimation:'epic',
- animationColor:'fire',
- unique:true,
- limited:true,
- audio:2,
- mark:true,
- filter:function(event,player){
- if(player.storage.fenxin) return false;
- return event.player.identity!='zhu'&&player.identity!='zhu'&&
- player.identity!='mingzhong'&&event.player.identity!='mingzhong';
- },
- check:function(event,player){
- if(player.identity==event.player.identity) return Math.random()<0.5;
- var stat=get.situation();
- switch(player.identity){
- case 'fan':
- if(stat<0) return false;
- if(stat==0) return Math.random()<0.6;
- return true;
- case 'zhong':
- if(stat>0) return false;
- if(stat==0) return Math.random()<0.6;
- return true;
- case 'nei':
- if(event.player.identity=='fan'&&stat<0) return true;
- if(event.player.identity=='zhong'&&stat>0) return true;
- if(stat==0) return Math.random()<0.7;
- return false;
- }
- },
- prompt:function(event,player){
- return '焚心:是否与'+get.translation(event.player)+'交换身份?';
- },
- content:function(){
- game.broadcastAll(function(player,target,shown){
- var identity=player.identity;
- player.identity=target.identity;
- if(shown||player==game.me){
- player.setIdentity();
- }
- target.identity=identity;
- },player,trigger.player,trigger.player.identityShown);
- player.line(trigger.player,'green');
- player.storage.fenxin=true;
- player.awakenSkill('fenxin_old');
- }
- },
- xisheng:{
- enable:'chooseToUse',
- usable:1,
- viewAs:{name:'tao'},
- viewAsFilter:function(player){
- return player!=_status.currentPhase&&player.countCards('he')>1;
- },
- selectCard:2,
- filterCard:true,
- position:'he',
- ai:{
- save:true,
- skillTagFilter:function(){
- return lib.skill.xisheng.viewAsFilter.apply(this,arguments)
- },
- },
- },
- shulv:{
- inherit:'zhiheng',
- prompt:'弃置一张牌并摸一张牌',
- selectCard:1,
- filter:function(event,player){
- return player.countCards('h')>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(){
- player.gain(get.cardPile(function(card){
- return get.type(card,'trick')=='trick';
- }),'gain2');
- },
- ai:{
- effect:{
- target:function(card,player,target,current){
- if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3];
- }
- },
- threaten:1.3
- }
- },
- yuhua:{
- trigger:{player:'phaseDiscardBegin'},
- forced:true,
- audio:2,
- filter:function(event,player){
- return event.parent.name=='phaseDiscard'&&player.countCards('h',{type:'basic'})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{
- 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'
- 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&&player.countCards('h')>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('h')){
- 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.backup('mozhix');
- }
- }
- }
- "step 2"
- if(result&&result.bool) event.goto(1);
- },
- },
- mozhix:{
- filterCard:function(card){
- return get.itemtype(card)=='card';
- },
- selectCard:1,
- popname:true,
- },
- chenqing2:{},
- ranshang:{
- audio:2,
- trigger:{player:'damageEnd'},
- filter:function(event,player){
- return event.nature=='fire';
- },
- forced:true,
- check:function(){
- return false;
- },
- content:function(){
- player.addMark('ranshang',trigger.num);
- },
- intro:{
- name2:'燃',
- content:'mark'
- },
- ai:{
- 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;
- }
- }
- },
- group:'ranshang2'
- },
- ranshang2:{
- audio:2,
- trigger:{player:'phaseJieshuBegin'},
- forced:true,
- filter:function(event,player){
- return player.countMark('ranshang')>0;
- },
- content:function(){
- player.loseHp(player.countMark('ranshang'));
- }
- },
- hanyong:{
- trigger:{player:'useCard'},
- filter:function(event,player){
- return game.roundNumber>player.hp&&event.card&&
- (event.card.name=='nanman'||event.card.name=='wanjian');
- },
- content:function(){
- trigger.baseDamage++;
- },
- },
- 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'},
- init:function(player){
- if(!player.storage.yishe) player.storage.yishe=[];
- },
- filter:function(event,player){
- return !player.storage.yishe||!player.storage.yishe.length;
- },
- intro:{
- content:'cards'
- },
- content:function(){
- 'step 0'
- player.draw(2);
- player.chooseCard(2,'he',true,'选择两张牌作为“米”');
- 'step 1'
- player.storage.yishe=result.cards;
- player.lose(result.cards,ui.special,'toStorage');
- player.syncStorage('yishe');
- player.markSkill('yishe');
- }
- },
- bushi:{
- audio:2,
- trigger:{player:'damageEnd',source:'damageEnd'},
- filter:function(event,player){
- if(event._notrigger.contains(event.player)) return false;
- return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive();
- },
- direct:true,
- content:function(){
- 'step 0'
- event.count=trigger.num;
- 'step 1'
- trigger.player.chooseCardButton('选择获得一张“米”',player.storage.yishe);
- 'step 2'
- if(result.bool){
- event.count--;
- player.logSkill('bushi');
- trigger.player.gain(result.links[0],'draw2','log','fromStorage');
- player.storage.yishe.remove(result.links[0]);
- player.syncStorage('yishe');
- if(player.storage.yishe.length==0){
- player.recover();
- player.unmarkSkill('yishe');
- }
- else{
- player.markSkill('yishe');
- if(event.count>0) event.goto(1);
- }
- }
- }
- },
- midao:{
- audio:2,
- //unique:true,
- trigger:{global:'judge'},
- direct:true,
- filter:function(event,player){
- return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive();
- },
- content:function(){
- "step 0"
- var list=player.storage.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);
- 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){
- event.forceDie=true;
- player.respond(result.links,'midao','highlight','noOrdering');
- result.cards=result.links;
- var card=result.cards[0];
- event.card=card;
- player.storage.yishe.remove(card);
- if(player.storage.yishe.length==0){
- player.unmarkSkill('yishe');
- if(player.hasSkill('yishe')){
- player.logSkill('yishe');
- player.recover();
- }
- }
- else player.markSkill('yishe');
- }
- 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,'的判定牌改为',card);
- game.delay(2);
- }
- },
- ai:{
- 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 evt2=event.getParent('phaseUse');
- if(evt2.player!=player) return false;
- return player.getHistory('useCard',function(evt){
- return ['sha','juedou'].contains(evt.card.name)&&evt.getParent('phaseUse')==evt2;
- }).indexOf(event.getParent())==0;
- },
- direct:true,
- content:function(){
- 'step 0'
- player.chooseControl('draw_card','加伤害','cancel2').set('prompt',get.prompt2('fengpo'));
- 'step 1'
- if(result.control&&result.control!='cancel2'){
- player.logSkill('fengpo',trigger.target);
- var nd=trigger.target.countCards('h',{suit:'diamond'});
- if(result.control=='draw_card'){
- player.draw(nd);
- }
- else{
- var trigger2=trigger.getParent();
- if(typeof trigger2.baseDamage!='number'){
- trigger2.baseDamage=1;
- }
- trigger2.baseDamage+=nd;
- }
- }
- }
- },
- 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:{},
- 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.isAlive()&&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[i];
- }
- 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;i0&&get.attitude(player,event.player)<0;
- },
- prompt:function(event){
- return get.translation(event.source)+'即将对'+get.translation(event.player)+'造成伤害,'+get.prompt('fuji');
- },
- logTarget:'source',
- content:function(){
- trigger.source.judge().callback=lib.skill.fuji.callback;
- },
- callback:function(){
- var evt=event.getParent(2);
- if(event.judgeResult.color=='black'){
- //game.cardsDiscard(card);
- evt._trigger.num++;
- }
- else{
- evt._trigger.source.gain(card,'gain2');
- }
- },
- },
- fulu:{
- trigger:{player:'useCard1'},
- filter:function(event,player){
- if(event.card.name=='sha'&&!event.card.nature) return true;
- },
- audio:true,
- check:function(event,player){
- var eff=0;
- for(var i=0;i=0;
- },
- content:function(){
- trigger.card.nature='thunder';
- if(get.itemtype(trigger.card)=='card'){
- var next=game.createEvent('fulu_clear');
- next.card=trigger.card;
- event.next.remove(next);
- trigger.after.push(next);
- next.setContent(function(){
- delete card.nature;
- });
- }
- }
- },
- guiming:{
- unique:true,
- zhuSkill:true,
- },
- canshi:{
- audio:2,
- trigger:{player:'phaseDrawBegin1'},
- check:function(event,player){
- var num=game.countPlayer(function(current){
- if(player.hasZhuSkill('guiming')&¤t.group=='wu') return true;
- return current.isDamaged();
- });
- return num>3;
- },
- 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;
- var type=get.type(event.card,'trick');
- return type=='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'},
- 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.prompt2('kunfen')).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:'retiaoxin',
- 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('retiaoxin');
- 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:['gainEnd','loseEnd'],
- global:'die',
- },
- silent:true,
- firstDo:true,
- filter:function(event,player){
- if(event.name=='lose') return event.hs.length>0;
- return true;
- },
- 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'},
- //priority:9,
- audio:2,
- direct:true,
- filter:function(event){
- return event&&event.source;
- },
- 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';
- if(!source.storage.jilei2||!source.storage.jilei2.contains('basic')) return 'basic';
- if(_status.currentPhase!=source) return 'trick';
- if(lib.filter.cardUsable({name:'sha'},source)&&source.countCards('h')>=2) return 'basic';
- return 'trick';
- }).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'))) return false;
- },
- cardUsable:function(card,player){
- if(player.storage.jilei2.contains(get.type(card,'trick'))) return false;
- },
- cardRespondable:function(card,player){
- if(player.storage.jilei2.contains(get.type(card,'trick'))) return false;
- },
- cardSavable:function(card,player){
- if(player.storage.jilei2.contains(get.type(card,'trick'))) 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;
- }
- }
- }
- },
- xinmanjuan:{
- audio:'manjuan',
- forced:true,
- priority:15,
- trigger:{player:'gainAfter'},
- filter:function(event,player){
- return event.type!='xinmanjuan';
- },
- content:function(){
- "step 0"
- player.lose(trigger.cards,ui.discardPile,'visible');
- player.$throw(trigger.cards,1000);
- game.log(player,'将',trigger.cards,'置入了弃牌堆')
- "step 1"
- event.cards=trigger.cards.slice(0);
- if(_status.currentPhase!=player) event.finish();
- "step 2"
- event.card=event.cards.shift();
- event.togain=[];
- var number=get.number(event.card);
- for(var i=0;imaxval){
- maxval=tempval;
- }
- }
- maxval+=cards.length-1;
- var next=player.chooseToDiscard('he',{suit:suits});
- next.set('ai',function(card){
- return _status.event.maxval-get.value(card);
- });
- next.set('maxval',maxval);
- next.set('dialog',[get.prompt(event.name),'hidden',cards])
- next.logSkill=event.name;
- event.cards=cards;
- }
- "step 2"
- if(result.bool){
- player.gain(event.cards,'gain2','log');
- }
- },
- ai:{
- threaten:1.3
- }
- },
- zuixiang:{
- skillAnimation:true,
- animationColor:'gray',
- audio:true,
- unique:true,
- mark:true,
- trigger:{player:'phaseZhunbeiBegin'},
- //priority:10,
- filter:function(event,player){
- if(player.storage.zuixiang) return false;
- return true;
- },
- check:function(event,player){
- return player.countCards('h')0;
- },
- filterCard:{name:'sha'},
- check:function(card){return 6-get.value(card)},
- content:function(){
- 'step 0'
- var list=lib.group.slice(0);
- list.remove('shen');
- 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','请选择一个势力').ai=function(){return 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.getStorage('rezhoufu2').length;
- },
- check:function(card){
- return 6-get.value(card)
- },
- position:'he',
- discard:false,
- toStorage:true,
- prepare:'give',
- content:function(){
- if(!target.storage.rezhoufu2_markcount) target.storage.rezhoufu2_markcount=0;
- target.markAuto('rezhoufu2',cards);
- },
- ai:{
- order:1,
- result:{
- target:-1,
- },
- },
- group:['rezhoufu_judge','rezhoufu_losehp'],
- subSkill:{
- judge:{
- audio:'zhoufu',
- trigger:{global:'judgeBefore'},
- forced:true,
- filter:function(event,player){
- return !event.directresult&&event.player.getStorage('rezhoufu2').length;
- },
- logTarget:'player',
- content:function(){
- var cards=[trigger.player.getStorage('rezhoufu2')[0]];
- trigger.directresult=cards[0];
- trigger.player.unmarkAuto('rezhoufu2',cards);
- },
- },
- losehp:{
- audio:'zhoufu',
- trigger:{global:'phaseEnd'},
- forced:true,
- filter:function(event,player){
- return event.player.hasSkill('rezhoufu3')&&event.player.isAlive();
- },
- logTarget:'player',
- content:function(){
- trigger.player.loseHp();
- },
- },
- },
- },
- rezhoufu2:{
- intro:{
- content:'cards',
- onunmark:function(storage,player){
- if(storage&&storage.length){
- player.$throw(storage,1000);
- game.cardsDiscard(storage);
- game.log(storage,'被置入了弃牌堆');
- storage.length==0;
- }
- player.addTempSkill('rezhoufu3');
- delete player.storage.rezhoufu2_markcount;
- },
- },
- },
- rezhoufu3:{},
- reyingbing:{
- audio:'yingbin',
- trigger:{global:'useCard'},
- forced:true,
- filter:function(event,player){
- var cards=event.player.getStorage('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){
- var cards=trigger.player.getStorage('rezhoufu2');
- trigger.player.$throw(cards);
- game.delayx();
- player.gain(cards,'gain2','log');
- cards.length=0;
- trigger.player.unmarkSkill('rezhoufu2');
- }
- else trigger.player.markSkill('rezhoufu2');
- },
- },
- zhoufu:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filterCard:true,
- filterTarget:function(card,player,target){
- return player!=target&&!target.hasSkill('zhoufu2');
- },
- prepare:'throw',
- discard:false,
- //lose:false,
- visible:true,
- toStorage:true,
- content:function(){
- //player.lose(cards,ui.special,'toStorage');
- target.$gain2(cards);
- target.storage.zhoufu2=cards[0];
- target.addSkill('zhoufu2');
- target.storage.zhoufu3=player;
- //ui.special.appendChild(cards[0]);
- target.syncStorage('zhoufu2');
- },
- check:function(card){
- return 6-get.value(card)
- },
- ai:{
- expose:0.1,
- order:1,
- result:{
- target:-1
- }
- }
- },
- zhoufu2:{
- trigger:{player:'judgeBefore'},
- forced:true,
- //priority:10,
- mark:'card',
- filter:function(event){
- return !event.directresult;
- },
- content:function(){
- "step 0"
- trigger.directresult=player.storage.zhoufu2;
- delete player.storage.zhoufu2;
- player.removeSkill('zhoufu2');
- delete player.storage.zhoufu2_markcount;
- if(player.storage.zhoufu3.isIn()){
- player.storage.zhoufu3.line(player,'green');
- }
- "step 1"
- player.addTempSkill('zhoufu3');
- },
- intro:{
- content:'card',
- onunmark:function(storage,player){
- if(storage){
- player.$throw(storage,1000);
- game.cardsDiscard(storage);
- game.log(storage,'被置入了弃牌堆');
- }
- delete player.storage.zhoufu2;
- },
- }
- },
- zhoufu3:{
- trigger:{global:'phaseEnd'},
- silent:true,
- content:function(){
- if(player.storage.zhoufu3.isIn()){
- player.storage.zhoufu3.logSkill('zhoufu',player);
- player.loseHp();
- }
- delete player.storage.zhoufu3;
- },
- onremove:true
- },
- yingbin:{
- audio:2,
- trigger:{global:'useCard'},
- filter:function(event,player){
- return event.player.hasSkill('zhoufu2')&&event.player.storage.zhoufu3==player&&
- get.suit(event.player.storage.zhoufu2)==get.suit(event.card);
- },
- forced:true,
- autodelay:true,
- content:function(){
- player.draw();
- if(trigger.player.storage.zhoufu2_markcount==1){
- trigger.player.removeSkill('zhoufu2');
- delete trigger.player.storage.zhoufu2;
- delete trigger.player.storage.zhoufu2_markcount;
- delete trigger.player.storage.zhoufu3;
- }
- else{
- trigger.player.storage.zhoufu2_markcount=1;
- trigger.player.updateMarks();
- }
- }
- },
- 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.getEquip(1);
- });
- 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.getEquip(1);
- });
- 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;
- },
- 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"
- trigger.target.gain(result.cards,player,'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'},
- filter:function(event,player){
- if(event.type!='discard') return false;
- for(var i=0;i1;
- });
- }
- player.chooseCardButton(get.prompt('lirang'),event.cards,[1,event.cards.length]).set('ai',function(button){
- if(!_status.event.goon||ui.selected.buttons.length) return 0;
- if(button.link.name=='du') return 2;
- return 1;
- }).set('goon',goon);
- }
- else{
- event.finish();
- }
- "step 2"
- if(result.bool){
- event.togive=result.links.slice(0);
- player.chooseTarget('将'+get.translation(result.links)+'交给一名角色',true,function(card,player,target){
- return target!=player;
- }).set('ai',function(target){
- var att=get.attitude(_status.event.player,target);
- if(_status.event.enemy){
- return -att;
- }
- else{
- if(att>2) return att/Math.sqrt(1+target.countCards('h'));
- return att/Math.sqrt(1+target.countCards('h'))/5;
- }
- }).set('enemy',get.value(event.togive[0],player,'raw')<0);
- }
- else{
- //game.cardsDiscard(event.cards);
- event.finish();
- }
- "step 3"
- if(result.bool){
- if(!event.logged){
- player.logSkill('lirang',result.targets);
- event.logged=true;
- }
- else player.line(result.targets,'green');
- for(var i=0;i