v1.9.120.2

This commit is contained in:
Spmario233 2023-03-31 19:34:38 +08:00
parent 9c2222b61a
commit 83c7a2a8e2
160 changed files with 9811 additions and 2541 deletions

BIN
audio/die/clan_hanrong.mp3 Normal file

Binary file not shown.

BIN
audio/die/clan_hanshao.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_caozhi.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_chenqun.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_yangbiao.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/die/macheng.mp3 Normal file

Binary file not shown.

BIN
audio/die/mengjie.mp3 Normal file

Binary file not shown.

BIN
audio/die/ol_huangzhong.mp3 Normal file

Binary file not shown.

BIN
audio/die/ol_liuba.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_fazheng.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_jiangwei.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_liubei.mp3 Normal file

Binary file not shown.

BIN
audio/die/wuanguo.mp3 Normal file

Binary file not shown.

BIN
audio/die/yj_weiyan.mp3 Normal file

Binary file not shown.

BIN
audio/die/zhujianping.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/clanlianhe1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/clanlianhe2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/clanliuju1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/clanliuju2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/dcjinjie1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjinjie2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjiushi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjiushi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjue1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjue2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcqingren1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcqingren2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dctianji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dctianji2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/dcyinlu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyinlu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyouqi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyouqi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dczhaohan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dczhaohan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/diezhang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/diezhang2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/duanwan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/duanwan2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/mbaosi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbaosi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbguli1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbguli2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olchenglie1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olchenglie2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/oltongduo1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/oltongduo2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olzhubi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olzhubi2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/repindi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/repindi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbenyuan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbenyuan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbjijiang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbjijiang2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbrende1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbrende2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbrende3.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbtiaoxin1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbtiaoxin2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbxuanhuo1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbxuanhuo2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbzhangwu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbzhangwu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbzhiji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbzhiji2.mp3 Normal file

Binary file not shown.

View File

@ -2142,6 +2142,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
"step 0"
player.chooseToUse(get.prompt('qinglong',trigger.target),function(card,player,event){
if(get.name(card)!='sha') return false;
if(player.getEquip('qinglong')==card) return false;
return lib.filter.filterCard.apply(this,arguments);
},trigger.target,-1).set('addCount',false).logSkill='qinglong_skill';
}
@ -2217,7 +2218,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
skillTagFilter:function(player,tag,arg){
if(player._guanshi_temp) return;
player._guanshi_temp=true;
var bool=(get.attitude(player,arg.target)<0&&arg.card.name=='sha'&&player.countCards('he',function(card){
var bool=(get.attitude(player,arg.target)<0&&arg.card&&arg.card.name=='sha'&&player.countCards('he',function(card){
return card!=player.getEquip('guanshi')&&card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card))&&get.value(card)<5;
})>1);
delete player._guanshi_temp;
@ -2576,6 +2577,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
};
event.settle=function(){
if(event.respondWuxie) event.trigger('eventNeutralized');
if(!event.state){
if(event.triggername=='phaseJudge'){
trigger.untrigger();
@ -2712,7 +2714,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
game.players[i].hideTimer();
}
'step 8'
if(event.wuxieresult2._sendskill) lib.skill[event.wuxieresult2._sendskill[0]]=event.wuxieresult2._sendskill[1];
if(event.wuxieresult2&&event.wuxieresult2._sendskill) lib.skill[event.wuxieresult2._sendskill[0]]=event.wuxieresult2._sendskill[1];
if(event.wuxieresult&&event.wuxieresult2&&event.wuxieresult2.skill){
var info=get.info(event.wuxieresult2.skill);
if(info&&info.precontent&&!game.online){
@ -2725,7 +2727,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
'step 9'
if(event.wuxieresult){
var next=event.wuxieresult.useResult(event.wuxieresult2);
if(event.stateplayer&&event.statecard) next.respondTo=[event.stateplayer,event.statecard];
if(event.stateplayer&&event.statecard){
event.respondWuxie=true;
next.respondTo=[event.stateplayer,event.statecard];
}
else if(event.triggername!='phaseJudge'){
next.respondTo=[trigger.player,trigger.card];
}

View File

@ -619,8 +619,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
if(event._zengyu_denied){
player.$throw(cards[0],1000);
player.lose(cards,ui.discardPile,'visible');
player.loseToDiscardpile(cards);
}
else{
if(get.type(cards[0],false)=='equip'){

View File

@ -11,14 +11,391 @@ game.import('character',function(lib,game,ui,get,ai,_status){
clan_xunchen:['male','qun',3,['clansankuang','clanbeishi','clandaojie'],['clan:颍川荀氏']],
clan_xuncai:['female','qun',3,['clanlieshi','clandianzhan','clanhuanyin','clandaojie'],['clan:颍川荀氏']],
clan_xuncan:['male','wei',3,['clanyunshen','clanshangshen','clanfenchai','clandaojie'],['clan:颍川荀氏']],
clan_hanshao:['male','qun',3,['clanfangzhen','clanliuju','clanxumin'],['clan:颍川韩氏']],
clan_hanrong:['male','qun',3,['clanlianhe','clanhuanjia','clanxumin'],['clan:颍川韩氏']],
},
characterSort:{
clan:{
clan_wu:['clan_wuxian','clan_wuban'],
clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan']
clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan'],
clan_han:['clan_hanshao','clan_hanrong'],
},
},
skill:{
//族韩韶
clanfangzhen:{
audio:2,
trigger:{player:'phaseUseBegin'},
filter:function(event,player){
return game.hasPlayer(current=>!current.isLinked());
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('clanfangzhen'),(card,player,target)=>{
return !target.isLinked();
}).set('ai',target=>{
var player=_status.event.player;
if(_status.event.goon&&target!=player){
target.classList.add('linked');
target.classList.add('linked2');
try{
var cards=player.getCards('hs',cardx=>{
return get.name(cardx)=='sha'&&lib.linked.contains(get.nature(cardx));
});
cards.map(i=>[i,get.effect(target,i,player,player)]);
cards.sort((a,b)=>b[1]-a[1]);
}
catch(e){
target.classList.remove('linked');
target.classList.remove('linked2');
}
target.classList.remove('linked');
target.classList.remove('linked2');
var eff=cards[0][1];
if(eff>0) return eff;
return Math.max((get.effect(target,{name:'wuzhong'},player,player)+get.effect(player,{name:'wuzhong'},player,player)/3),get.recoverEffect(target,player,player));
}
return Math.max((get.effect(target,{name:'wuzhong'},player,player)+get.effect(player,{name:'wuzhong'},player,player)/3),get.recoverEffect(target,player,player));
}).set('goon',player.countCards('hs',card=>{
return get.name(card)=='jiu'&&player.hasUseTarget(card);
})&&player.countCards('hs',card=>{
return get.name(card)=='sha'&&lib.linked.contains(get.nature(card));
}));
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('clanfangzhen',target);
player.addSkill('clanfangzhen_remove');
player.markAuto('clanfangzhen_remove',[target.getSeatNum()]);
target.link(true);
var choices=['选项一'],choiceList=[
'摸两张牌,然后交给'+get.translation(target)+'两张牌',
'令'+get.translation(target)+'回复1点体力'
];
if(target.isDamaged()) choices.push('选项二');
else choiceList[1]='<span style="opacity:0.5; ">'+choiceList[1]+'</span>';
player.chooseControl(choices).set('prompt','放赈:请选择一项').set('choiceList',choiceList).set('ai',()=>{
var player=_status.event.player,target=_status.event.getParent().target;
if(!target.isDamaged()) return 0;
if(get.attitude(player,target)<=0&&player.countCards('he',card=>get.value(card)<0)>=2) return 0;
return (get.effect(target,{name:'wuzhong'},player,player)+get.effect(player,{name:'wuzhong'},player,player)/3)>get.recoverEffect(target,player,player)?0:1;
});
}
else event.finish();
'step 2'
if(result.control=='选项一'){
player.draw(2);
if(player==target) event.finish();
}
else{
target.recover();
event.finish();
}
'step 3'
if(!player.countCards('he')) event.finish();
else if(player.countCards('he')<=2) event._result={bool:true,cards:player.getCards('he')};
else{
player.chooseCard('放赈:交给'+get.translation(target)+'两张牌','he',2,true);
}
'step 4'
if(result.bool){
player.give(result.cards,target);
}
},
ai:{
expose:0.2,
},
subSkill:{
remove:{
trigger:{global:'roundStart'},
onremove:true,
forced:true,
locked:false,
charlotte:true,
filter:function(event,player){
return player.getStorage('clanfangzhen_remove').contains(game.roundNumber);
},
content:function(){
player.removeSkill('clanfangzhen');
}
}
}
},
clanliuju:{
audio:2,
trigger:{player:'phaseUseEnd'},
filter:function(event,player){
return game.hasPlayer(current=>player.canCompare(current));
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('clanliuju'),'与一名其他角色拼点,输的角色可以使用任意张拼点牌中的非基本牌',(card,player,target)=>{
return player.canCompare(target);
}).set('ai',target=>{
var player=_status.event.player;
var ts=target.getCards('h').sort((a,b)=>get.number(a)-get.number(b));
if(get.attitude(player,target)<0){
var hs=player.getCards('h').sort((a,b)=>get.number(a)-get.number(b));
if(!hs.length||!ts.length) return 0;
if(get.type(hs[0],null,false)=='basic'&&get.value(hs[0])>6) return 0;
if(get.number(hs[0])<get.number(ts[0])||get.type(hs[0],null,false)=='basic') return 1;
return Math.random()-0.7;
}
return get.type(ts[0])!='basic';
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('clanliuju',target);
player.chooseToCompare(target).set('small',true);
}
else event.finish();
'step 2'
if(!result.tie){
var loser=result.bool?target:player;
var cards=[];
game.getGlobalHistory('cardMove',evt=>{
if(evt.getParent(2)==event) cards.addArray(evt.cards.filter(i=>{
return get.position(i,true)=='d'&&get.type(i,null,false)!='basic';
}));
});
event.loser=loser;
event.distance=[get.distance(player,target),get.distance(target,player)];
if(cards.length) event.cards=cards;
else event.finish();
}
else event.finish();
'step 3'
var cardsx=cards.filter(i=>get.position(i,true)=='d'&&event.loser.hasUseTarget(i));
if(!cardsx.length) event.goto(6);
else event.loser.chooseButton(['留驹:是否使用其中的一张牌?',cardsx]).set('filterButton',button=>{
return _status.event.player.hasUseTarget(button.link);
}).set('ai',button=>{
return _status.event.player.getUseValue(button.link)+0.1;
});
'step 4'
if(result.bool){
var card=result.links[0];
event.cards.remove(card);
event.loser.$gain2(card,false);
game.delayx();
event.loser.chooseUseTarget(true,card,false);
}
else event.goto(6);
'step 5'
if(cards.filter(i=>get.position(i,true)=='d'&&event.loser.hasUseTarget(i)).length) event.goto(3);
'step 6'
if(get.distance(player,target)!=event.distance[0]||get.distance(target,player)!=event.distance[1]){
player.restoreSkill('clanxumin');
game.log(player,'重置了','#g【恤民】');
}
}
},
clanxumin:{
audio:2,
audioname:['clan_hanshao','clan_hanrong'],
enable:'phaseUse',
viewAs:{name:'wugu'},
filterCard:true,
filterTarget:function(card,player,target){
if(player==target) return false;
return player.canUse(card,target);
},
selectTarget:[1,Infinity],
check:function(card){
return 6-get.value(card);
},
position:'he',
limited:true,
clanSkill:true,
skillAnimation:true,
animationColor:'soil',
precontent:function(){
player.logSkill('clanxumin');
player.awakenSkill('clanxumin');
delete event.result.skill;
},
ai:{
order:7,
result:{target:1}
},
},
//族韩融
//我们连和!(?)
clanlianhe:{
audio:2,
trigger:{player:'phaseUseBegin'},
filter:function(event,player){
return game.hasPlayer(current=>!current.isLinked());
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('clanlianhe'),2,(card,player,target)=>{
return !target.isLinked();
}).set('ai',target=>{
var att=get.attitude(_status.event.player,target);
if(att>0) att/=1.2;
return Math.abs(att);
});
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
targets.forEach(i=>i.link(true));
player.logSkill('clanlianhe',targets);
player.addSkill('clanlianhe_effect');
player.markAuto('clanlianhe_effect',targets);
}
},
subSkill:{
effect:{
trigger:{global:['phaseUseEnd','die']},
charlotte:true,
forced:true,
locked:false,
popup:false,
onremove:true,
filter:function(event,player){
return player.getStorage('clanlianhe_effect').contains(event.player);
},
marktext:'连',
intro:{content:'已选择目标:$'},
content:function(){
'step 0'
player.unmarkAuto('clanlianhe_effect',[trigger.player]);
if(trigger.name=='die') event.finish();
'step 1'
if(trigger.player.hasHistory('gain',evt=>{
return evt.getParent().name=='draw'&&evt.getParent('phaseUse')==trigger;
})) event.finish();
else{
player.logSkill('clanlianhe_effect',trigger.player);
var num=0;
trigger.player.getHistory('gain',evt=>{
if(evt.getParent('phaseUse')!=trigger) return false;
num+=evt.cards.length;
});
num=Math.min(num,3);
event.num=num;
if(num<=1) event._result={bool:false};
else{
var pos=player==trigger.player?'e':'he';
trigger.player.chooseCard('连和:交给'+get.translation(player)+get.cnNumber(num-1)+'张牌,或点“取消”令其摸'+get.cnNumber(num+1)+'张牌',true,num-1,pos).set('ai',card=>{
if(_status.event.draw) return 0;
return 5-get.value(card);
}).set('draw',get.attitude(trigger.player,player)>=0);
}
}
'step 2'
if(result.bool){
trigger.player.give(result.cards,player);
}
else player.draw(num+1);
}
}
}
},
clanhuanjia:{
audio:2,
trigger:{player:'phaseUseEnd'},
filter:function(event,player){
return game.hasPlayer(current=>player.canCompare(current));
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('clanhuanjia'),'与一名其他角色拼点,赢的角色可以使用一张拼点牌。若此牌未造成过伤害,你获得另一张拼点牌,否则你失去一个技能',(card,player,target)=>{
return player.canCompare(target);
}).set('ai',target=>{
var player=_status.event.player;
if(get.attitude(player,target)<=0){
var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
if(!hs.length||!ts.length) return 0;
if(get.number(hs[0])>get.number(ts[0])&&(!get.tag(hs[0],'damage')&&player.hasValueTarget(hs[0]))) return 1;
return Math.random()-0.4;
}
return 0;
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('clanhuanjia',target);
player.chooseToCompare(target);
}
else event.finish();
'step 2'
if(!result.tie){
var winner=result.bool?player:target;
var cards=[];
game.getGlobalHistory('cardMove',evt=>{
if(evt.getParent(2)==event) cards.addArray(evt.cards.filterInD('d'));
});
event.winner=winner;
if(cards.length) event.cards=cards;
else event.finish();
}
else event.finish();
'step 3'
var cardsx=cards.filter(i=>get.position(i,true)=='d'&&event.winner.hasUseTarget(i));
if(!cardsx.length) event.goto(6);
else event.winner.chooseButton(['缓颊:是否使用其中的一张牌?',cardsx]).set('filterButton',button=>{
return _status.event.player.hasUseTarget(button.link);
}).set('ai',button=>{
var damage=1;
if(_status.event.att>2&&get.tag(button.link,'damage')) damage*=2;
return _status.event.player.getUseValue(button.link)*damage+0.1;
}).set('att',get.attitude(event.winner,player));
'step 4'
if(result.bool){
var card=result.links[0];
event.card=card;
event.cards.remove(card);
event.winner.$gain2(card,false);
game.delayx();
event.winner.chooseUseTarget(true,card,false);
}
'step 5'
if(game.hasPlayer2(current=>{
return current.hasHistory('sourceDamage',evt=>evt.cards&&evt.cards[0]==card);
})){
var skills=player.getSkills(null,false,false).filter(skill=>{
var info=get.info(skill);
if(!info||get.is.empty(info)||info.charlotte) return false;
return true;
});
player.chooseControl(skills).set('choiceList',skills.map(i=>{
return '<div class="skill">【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】</div><div>'+get.skillInfoTranslation(i,player)+'</div>';
})).set('displayIndex',false).set('prompt','恤民:失去一个技能').set('ai',()=>{
var choices=_status.event.controls.slice();
var value=(skill)=>get.skillRank(skill,'in')+get.skillRank(skill,'out');
choices=choices.map(skill=>[skill,value(skill)]);
var list=choices.sort((a,b)=>a[1]-b[1])[0];
if(list[1]<2) return list[0];
else{
if(_status.event.controls.contains('clanxumin')) return 'clanxumin';
return list[0];
}
});
}
else{
player.gain(cards,'gain2');
event.finish();
}
'step 6'
player.removeSkill(result.control);
player.popup(result.control);
game.log(player,'失去了技能','#g【'+get.translation(result.control)+'】');
},
ai:{
expose:0.1,
}
},
//族荀谌
clansankuang:{
audio:2,
@ -63,7 +440,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx();
}
'step 3'
if(trigger.cards.filterInD('ej').length) target.gain(trigger.cards.filterInD('ej'),player,'giveAuto','bySelf');
if(trigger.cards.filterInD('ej').length) target.gain(trigger.cards.filterInD('ej'),get.owner(trigger.cards.filterInD('ej')[0]),'giveAuto','bySelf');
else if(trigger.cards.filterInD('od').length) target.gain(trigger.cards.filterInD('od'),'gain2','bySelf');
},
ai:{
@ -229,7 +606,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
var players=[target,player];
if(result.control=='选项二') players.reverse();
players[0].useCard({name:'sha',nature:'ice',isCard:true},players[1],false,'noai');
var card={name:'sha',nature:'ice',isCard:true};
if(players[0].canUse(card,players[1],false)) players[0].useCard(card,players[1],false,'noai');
},
ai:{
order:2,
@ -267,6 +645,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.judge(lib.card.shandian.judge,event.judgestr).judge2=lib.card.shandian.judge2;
game.delayx(1.5);
'step 1'
var name='shandian';
if(event.cancelled&&!event.direct){
if(lib.card[name].cancel){
var next=game.createEvent(name+'Cancel');
next.setContent(lib.card[name].cancel);
next.cards=[];
next.card=get.autoViewAs({name:name});
next.player=player;
}
}
else{
var next=game.createEvent(name);
next.setContent(function(){
if(result.bool==false){
player.damage(3,'thunder','nosource');
}
});
next._result=result;
next.cards=[];
next.card=get.autoViewAs({name:name});
next.player=player;
}
'step 2'
trigger.player.drawTo(4);
},
ai:{expose:0.25}
@ -328,7 +729,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
suit:function(card,suit){
var player=get.owner(card)||_status.event.player;
if(!player||!player.judging||player.judging[0]!=card) return;
return player.getStorage('clanfenchai').filter(i=>i.isIn()).length>0?'heart':'spade';
var storage=player.getStorage('clanfenchai');
if(!storage.length) return;
return storage.filter(i=>i.isIn()).length>0?'heart':'spade';
}
}
},
@ -470,7 +873,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.control=='选项一'){
if(!target.storage._disableJudge) target.disableJudge();
target.damage('fire');
}else{
}
else{
var cards=target.getCards('h',result.control=='选项二'?'shan':'sha');
if(cards.length) target.discard(cards);
}
@ -493,12 +897,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
if(player.actionHistory[i].isRound) break;
}
return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()||
return event.targets&&event.targets.length==1&&(!event.targets[0].isLinked()||
player.getCards('h',card=>get.suit(card)==get.suit(event.card)).filter(card=>{
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
if(mod!='unchanged') return true;
return false;
}).length==0;
}).length==0);
},
content:function(){
'step 0'
@ -649,7 +1053,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return num1>num2;
},
check:function(card){
return 6-ui.selected.cards.length-get.value(card);
var player=_status.event.player;
if(player.countCards('h',function(card){
return lib.skill.clanyirong.checkx(card)>0;
})+1<(player.countCards('h')-player.getHandcardLimit())) return 0;
return lib.skill.clanyirong.checkx(card);
},
checkx:function(card){
var num=1;
if(_status.event.player.getUseValue(card,null,true)<=0) num=1.5;
return (15-get.value(card))*num;
},
prompt:function(){
var player=_status.event.player;
@ -684,9 +1097,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
ai:{
order:function(item,player){
var num1=player.countCards('h'),num2=player.getHandcardLimit();
if(num1-num2==1) return 8;
return 1;
var num=player.getHandcardLimit(),numx=player.countMark('clanguixiang_count');
if(num==5&&numx==4&&player.getStat('skill').clanyirong) return 0;
if(player.countCards('h')==num+1&&num!=2&&(num<=4||num>4&&numx>4)) return 10;
return 0.5;
},
result:{player:1},
threaten:5,
@ -817,6 +1231,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xunshu:'荀淑83年149年字季和为郎陵侯相颍川颍阴人今河南省许昌市人。汉和帝至汉桓帝时人物以品行高洁著称。有子八人号八龙。年轻时有高尚的德行学问渊博不喜欢雕章琢句徒在文字上用功不注重实际的学识。因此常常被俗儒看不起。但州里却称他有知人之明。安帝时征召任为郎中后来再升当涂长。离职还乡里。他的孙子荀彧是曹操部下著名的谋士。',
xuncai:'荀采(生卒年不详),字女荀,颍川人,东汉名士荀爽之女。荀采聪慧敏捷而有才艺。十七岁时,荀采嫁给阴瑜。两年后阴瑜去世。荀采不愿意改嫁,但荀爽答应把荀采嫁给同郡人郭奕。荀采趁着旁人没有防备,用粉在门上写下:“尸还阴”,而后自缢而死。',
xuncan:'荀粲210年—238年字奉倩颍川郡颍阴县今河南省许昌市人。三国时期曹魏大臣、玄学家太尉荀彧幼子。个性简贵不轻易交接常人所交之辈皆一时俊杰。聪颖过人善谈玄理名噪一时。娶大将军曹洪之女为妻生活美满。景初二年面对妻子去世悲痛过度而死时年二十九成语“荀令伤神”与之有关。',
hanshao:'韩韶生卒年不详字仲黄颍川舞阳今河南省漯河市东汉桓帝时出仕。任郡吏有政绩继而被征入司徒府。他公正廉明尽心民事视民苦如在己身政绩卓著。汉永寿二年公元156年泰山贼公孙举率流寇数千骚扰嬴县守令因不能拒敌安民多受制裁朝廷命尚书府从三府司徒、司马、司空属员中选择能治理民事又能拒寇入侵的官员前往镇守。韩韶被封为“嬴长”到嬴县上任他是莱芜历史上唯一的一位“嬴长”。',
hanrong:'韩融127年196年字元长颍川舞阳今属河南省漯河市人。赢长韩韶子献帝时大臣。中平五年188年融与荀爽、陈纪等十四人并博士征不至。董卓废立融等复俱公车征。初平元年190年六月融为大鸿胪奉命与执金吾胡母班等出使关东。献帝东迁为李傕、郭汜等所败融为太仆奉命至弘农与傕、汜连和使其放遣公卿百官及宫女妇人。',
},
translate:{
clan_wuxian:'族吴苋',
@ -856,9 +1272,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
clanshangshen_info:'当一名角色受到属性伤害后,若本回合此前没有角色或已死亡的角色受到过属性伤害,你可以进行目标角色为你的【闪电】的特殊的使用流程,然后其将手牌摸至四张。',
clanfenchai:'分钗',
clanfenchai_info:'锁定技。若你首次发动技能指定的异性目标角色中:存在存活角色,你的判定牌视为♥;不存在存活角色,你的判定牌视为♠。',
clan_hanshao:'族韩韶',
clanfangzhen:'放赈',
clanfangzhen_info:'出牌阶段开始时你可以横置一名角色并选择一项1.摸两张牌然后交给其两张牌2.令其回复1点体力。然后第X轮游戏开始时你失去〖放赈〗X为其座位号。',
clanliuju:'留驹',
clanliuju_info:'出牌阶段结束时你可以与一名角色A拼点输的角色可以使用任意张拼点牌中的非基本牌。然后若你至A的距离或A至你的距离发生了变化你重置〖恤民〗。',
clanxumin:'恤民',
clanxumin_info:'宗族技,限定技。你可以将一张牌当做【五谷丰登】对任意名其他角色使用。',
clan_hanrong:'族韩融',
clanlianhe:'连和',
clanlianhe_info:'出牌阶段开始时你可以横置两名角色。这些角色于自己的下个出牌阶段结束时若其此阶段未摸牌其令你摸X+1张牌或交给你X-1张牌X为其此阶段获得的牌数且至多为3。',
clanhuanjia:'缓颊',
clanhuanjia_info:'出牌阶段结束时,你可以与一名角色拼点。赢的角色可以使用一张拼点牌。然后若此牌:未造成过伤害,你获得另一张拼点牌;造成过伤害,你失去一个技能。',
clan_wu:'陈留·吴氏',
clan_xun:'颍川·荀氏',
clan_han:'颍川·韩氏',
},
};
});

View File

@ -88,6 +88,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_seira:['female','key',3,['seira_xinghui','seira_yuanying']],
key_kiyu:['female','key',3,['kiyu_yuling','kiyu_rexianyu']],
key_tomoyo:['female','key',4,['tomoyo_wuwei','tomoyo_zhengfeng']],
key_minagi:['female','key',3,['minagi_peiquan','minagi_huanliu']],
key_michiru:['female','key',3,['michiru_sheyuan']],
ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']],
ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']],
@ -172,13 +174,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_caimao:['male','qun',4,['nsdingzhou']],
ns_luyusheng:['female','wu',3,['nshuaishuang','nsfengli']],
ns_chengpu:['male','wu',4,['decadelihuo','decadechunlao']],
ns_sundeng:['male','wu',4,['xinkuangbi']],
ns_duji:['male','wei',3,['xinfu_andong','xinyingshi']],
old_jiakui:['male','wei',4,['tongqu','xinwanlan']],
ol_guohuai:['male','wei',3,['rejingce']],
junk_zhangrang:['male','qun',3,['junktaoluan']],
old_bulianshi:['female','wu',3,['anxu','zhuiyi']],
junk_sunquan:['male','shen',4,['junkyuheng','junkdili'],['wei']],
ol_maliang:['male','shu',3,['zishu','yingyuan']],
ol_maliang:['male','shu',3,['zishu','xinyingyuan']],
junk_liubei:['male','shu',4,['junkrende','jijiang'],['zhu']],
junk_huangyueying:['female','shu',3,['junkjizhi','junkqicai']],
},
characterFilter:{
key_jojiro:function(mode){
@ -206,14 +211,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"],
diy_yijiang2:["key_yuuki","key_tenzen","key_kyouko","key_kotarou","key_kyou",
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu','key_tomoyo'],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu','key_tomoyo','key_minagi','key_michiru'],
diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"],
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"],
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu",'ns_sundeng','ns_duji'],
diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji"],
diy_noname:['noname'],
diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi","key_mia","key_kano","db_key_liyingxia","key_erika","key_satomi"],
diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan','ol_maliang'],
diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan','ol_maliang','junk_liubei','junk_huangyueying'],
},
},
characterIntro:{
@ -312,6 +317,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_seira:'#b阿开木木W🍀',
key_kiyu:'#b无面◎隐者',
key_tomoyo:'#b长发及腰黑长直',
key_minagi:'#b无面◎隐者',
ns_huangchengyan:'#g竹邀月',
ns_sunchensunjun:'#gVenusjeu',
@ -534,6 +540,273 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_lucia:['key_shizuru'],
},
skill:{
//远野美凪&远野小满
minagi_peiquan:{
enable:'phaseUse',
filter:function(event,player){
return player.hasCard((card)=>card.hasGaintag('minagi_tag'),'h');
},
filterCard:function(card){
return card.hasGaintag('minagi_tag');
},
position:'h',
filterTarget:lib.filter.notMe,
discard:false,
lose:false,
delay:false,
promptfunc:()=>'出牌阶段你可以赠予一张“米券”然后执行一项本回合内未被选择过的效果⒈对其造成1点伤害⒉摸两张牌⒊弃置其的两张牌⒋亮出牌堆顶的一张牌然后你可以使用之。',
check:function(card){
var player=_status.event.player;
if(get.cardtag(card,'gifts')&&get.type(card,false)=='equip'&&game.hasPlayer(function(current){
return current!=player&&current.canEquip(card,true)&&!current.hasSkillTag('refuseGifts')&&get.effect(current,card,player,player)>0;
})) return 2;
return 1+Math.random();
},
content:function(){
'step 0'
var next=game.createEvent('_yongjian_zengyu');
next.player=player;
next.target=target;
next.cards=cards;
next.setContent(lib.skill._yongjian_zengyu.content);
'step 1'
var list=player.getStorage('minagi_peiquan_yukito');
if(list.length>=4) event.finish();
else{
var yukito=get.translation(target);
player.chooseButton([
'配券:请选择一项执行',
[[
['damage','选项一:对'+yukito+'造成1点伤害'],
['draw','选项二:摸两张牌'],
['discard','选项三:弃置'+yukito+'的两张牌'],
['use','选项四:亮出牌堆顶的一张牌,然后可以使用之'],
],'textbutton']
],true).set('list',list).set('filterButton',function(button){
return !_status.event.list.contains(button.link);
}).set('ai',function(button){
var player=_status.event.player,target=_status.event.getParent().target;
switch(button.link){
case 'damage':return get.damageEffect(target,player,player);
case 'draw':return get.effect(player,{name:'wuzhong'},player,player)
case 'discard':return get.effect(target,{name:'guohe_copy2'},player,player)*Math.min(1.6,target.countCards('he'));
case 'use':return _status.event.getRand('minagi_peiquan')*4;
}
});
}
'step 2'
player.markAuto('minagi_peiquan_yukito',result.links);
player.addTempSkill('minagi_peiquan_yukito');
switch(result.links[0]){
case 'damage':target.damage('nocard');break;
case 'draw':player.draw(2);break;
case 'discard':player.discardPlayerCard(target,2,'he',true);break;
}
if(result.links[0]!='use') event.finish();
'step 3'
var card=get.cards()[0];
game.cardsGotoOrdering(card);
player.showCards(card);
player.chooseUseTarget(card,'是否使用'+get.translation(card)+'');
},
ai:{
order:4,
result:{
player:function(player,target){
var baseEffect=Math.min(3,get.effect(target,'_yongjian_zengyu',player,player));
var choices=['damage','draw','discard','use'];
choices.removeArray(player.getStorage('minagi_peiquan_yukito'));
if(choices.length<=0) return baseEffect;
var eff=Math.max.apply(Math,choices.map(function(choice){
switch(choice){
case 'damage':return get.damageEffect(target,player,player);
case 'draw':return get.effect(player,{name:'wuzhong'},player,player);
case 'discard':return get.effect(target,{name:'guohe_copy2'},player,player)*Math.min(1.6,target.countCards('he'));
case 'use':return _status.event.getRand('minagi_peiquan')*4;
}
}));
return baseEffect+eff;
},
},
},
group:'minagi_peiquan_umareta',
subSkill:{
yukito:{charlotte:true,onremove:true},
umareta:{
trigger:{
global:'phaseBefore',
player:'enterGame',
},
forced:true,
filter:function(event,player){
return (event.name!='phase'||game.phaseNumber==0)&&player.countCards('h')>0;
},
content:function(){
var hs=player.getCards('h');
player.addGaintag(hs,'minagi_tag');
},
},
},
},
minagi_huanliu:{
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
content:function(){
'step 0'
player.chooseTarget(lib.filter.notMe,get.prompt('minagi_huanliu'),'和一名其他角色进行“协力”,并获得“远野小满”的所有对应技能').set('ai',function(target){
return get.threaten(target)*Math.sqrt(1+target.countCards('h'))*((target.isTurnedOver()||target.hasJudge('lebu'))?0.1:1);
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('minagi_huanliu',target);
player.chooseCooperationFor(target,'minagi_huanliu').set('ai',function(button){
var base=0;
switch(button.link){
case 'cooperation_damage':base=0.1;break;
case 'cooperation_draw':base=0.6;break;
case 'cooperation_discard':base=0.1;break;
case 'cooperation_use':base=0.3;break;
}
return base+Math.random();
});
player.addAdditionalSkill('cooperation',['minagi_huanliu_effect','michiru_sheyuan']);
}
else event.finish();
'step 2'
game.delayx();
},
subSkill:{
effect:{
charlotte:true,
trigger:{global:'phaseJieshuBegin'},
forced:true,
logTarget:'player',
filter:function(event,player){
return player.checkCooperationStatus(event.player,'minagi_huanliu')&&player.countCards('h')>0;
},
content:function(){
game.log(player,'和',trigger.player,'的协力成功');
var hs=player.getCards('h');
player.addGaintag(hs,'minagi_tag');
game.delayx();
},
},
},
derivation:'michiru_sheyuan',
},
michiru_sheyuan:{
charlotte:true,
enable:'chooseToUse',
filter:function(event,player){
if(player.hasSkill('michiru_sheyuan_round')) return false;
var hs=player.getCards('h');
if(!hs.length) return false;
for(var i of hs){
if(i.hasGaintag('minagi_tag')) return false;
if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false;
}
for(var name of lib.inpile){
var type=get.type(name);
if(type!='basic'&&type!='trick') return false;
var card=get.autoViewAs({name:name},hs)
if(event.filterCard(card,player,event)) return true;
if(name=='sha'){
for(var nature of lib.inpile_nature){
card.nature=nature;
if(event.filterCard(card,player,event)) return true;
}
}
}
return false;
},
hiddenCard:function(player,name){
var type=get.type(name);
if(type!='basic'&&type!='trick') return false;
if(player.hasSkill('michiru_sheyuan_round')) return false;
var hs=player.getCards('h');
if(!hs.length) return false;
if(_status.connectMode) return true;
for(var i of hs){
if(i.hasGaintag('minagi_tag')) return false;
if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false;
}
return true;
},
chooseButton:{
dialog:function(event,player){
var list=[],hs=player.getCards('h');
for(var name of lib.inpile){
var type=get.type(name);
if(type!='basic'&&type!='trick') continue;
var card=get.autoViewAs({name:name},hs);
if(event.filterCard(card,player,event)) list.push([type,'',name]);
if(name=='sha'){
for(var nature of lib.inpile_nature){
card.nature=nature;
if(event.filterCard(card,player,event)) list.push([type,'',name,nature]);
}
}
}
return ui.create.dialog('舍愿',[list,'vcard'],'hidden');
},
check:function(button){
var player=_status.event.player;
var card={
name:button.link[2],
nature:button.link[3],
};
if(_status.event.getParent().type=='phase') return player.getUseValue(card,null,true);
return 1;
},
backup:function(links,player){
return {
viewAs:{
name:links[0][2],
nature:links[0][3],
},
filterCard:true,
position:'h',
selectCard:-1,
onuse:function(result,player){
player.addTempSkill('michiru_sheyuan_round','roundStart');
},
}
},
prompt:function(links,player){
return '将所有手牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用,然后摸等量的牌';
},
},
ai:{
respondSha:true,
respondShan:true,
skillTagFilter:function(player,tag,arg){
return lib.skill.michiru_sheyuan.hiddenCard(player,'s'+tag.slice(8));
},
order:1,
result:{
player:function(player){
if(_status.event.dying) return get.attitude(player,_status.event.dying);
return 1;
},
},
},
subSkill:{
round:{
charlotte:true,
trigger:{player:'useCardAfter'},
forced:true,
popup:false,
filter:function(event,player){
return event.skill=='michiru_sheyuan_backup';
},
content:function(){
player.draw(trigger.cards.length);
},
},
backup:{},
},
},
//坂上智代
tomoyo_wuwei:{
enable:['chooseToUse','chooseToRespond'],
@ -11451,6 +11724,94 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//2013标准包双蜀黑
junkjizhi:{
audio:'jizhi',
trigger:{player:'useCard'},
frequent:true,
filter:function(event,player){
return get.type(event.card)=='trick'&&event.card.isCard;
},
content:function(){
'step 0'
var card=get.cards()[0];
event.card=card;
game.cardsGotoOrdering(card);
player.showCards(card,get.translation(player)+'发动了【集智】');
if(get.type(card)!='basic'){
player.gain(card,'gain2');
event.finish();
}
else if(!player.countCards('h')) event.finish();
'step 1'
player.chooseCard('h','是否用一张手牌交换'+get.translation(card)+'','若选择「取消」,则'+get.translation(card)+'将被置入弃牌堆。');
'step 2'
if(result.bool){
var card=result.cards[0];
player.$throw(card,1000);
game.log(player,'将',card,'置于牌堆顶');
player.lose(card,ui.cardPile,'visible','insert');
player.gain(event.card,'gain2');
}
},
},
junkqicai:{
mod:{
targetInRange:function(card,player,target,now){
var type=get.type(card);
if(type=='trick'||type=='delay') return true;
},
canBeDiscarded:function(card){
if(get.position(card)=='e'&&!['equip3','equip4','equip6'].contains(get.subtype(card))) return false;
},
},
},
junkrende:{
audio:'rende',
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.countCards('h')>0;
},
filterTarget:lib.filter.notMe,
filterCard:true,
selectCard:[1,Infinity],
position:'h',
discard:false,
lose:false,
delay:false,
content:function(){
'step 0'
event.num=cards.length;
event.targets=targets.slice(0);
player.give(cards,target);
if(event.num>1) player.recover();
'step 1'
if(player.countCards('h')>0&&game.hasPlayer(current=>(current!=player&&!targets.contains(current)))){
player.chooseCardTarget({
prompt:'是否继续分配剩余的手牌',
prompt2:'操作提示:请先选择要分配的手牌,然后再选择一名角色,该角色将获得你选择的所有手牌。',
filterCard:true,
selectCard:[1,Infinity],
filterTarget:function(card,player,target){
return target!=player&&!_status.event.getParent().targets.contains(target);
},
});
}
else event.finish();
'step 2'
if(result.bool){
var target=result.targets[0],cards=result.cards;
player.line(target,'green');
player.give(cards,target);
targets.add(target);
event.num+=cards.length;
if(num<2&&event.num>1) player.recover();
event.goto(1);
}
},
},
//十周年削弱版张让
junktaoluan:{
audio:'taoluan',
enable:'chooseToUse',
@ -15057,29 +15418,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
diyjizhi:{
audio:2,
usable:3,
trigger:{player:'useCard'},
frequent:true,
filter:function(event){
var type=get.type(event.card,'trick');
return (type=='trick'||type=='equip')&&event.card.isCard;
},
content:function(){
"step 0"
var cards=get.cards();
player.gain(cards,'gain2','log');
if(get.type(cards[0])!='basic'){
event.finish();
}
"step 1"
player.chooseToDiscard('h',true);
},
ai:{
threaten:1.4
}
},
yiesheng:{
enable:'phaseUse',
filterCard:{color:'black'},
@ -16591,7 +16929,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
group:'junkyuheng_remove',
derivation:['bingyi','shenxing','xiashu','anxu','rezhiheng','xinanguo','lanjiang','xinfu_guanwei','oldimeng','xindiaodu'],
derivation:['olbingyi','shenxing','xiashu','old_anxu','rezhiheng','xinanguo','lanjiang','xinfu_guanwei','oldimeng','xindiaodu','xingxue','jiexun','olhongyuan','xinfu_youdi'],
subSkill:{
remove:{
audio:'yuheng',
@ -17423,6 +17761,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tomoyo_zhengfeng_info:'使命技。①准备阶段你可以令攻击范围内的一名角色进行判定。若如此做你获得如下效果直到下回合开始你视为在该角色的攻击范围内且当该角色使用与判定牌颜色相同的牌时你摸一张牌。②失败结束阶段若你于本回合内未发动过〖整风①〗则你可以减1点体力上限。你失去〖武威〗摸两张牌并回复1点体力然后获得〖长誓〗。',
tomoyo_changshi:'长誓',
tomoyo_changshi_info:'锁定技。一名攻击范围内包含你的角色回复体力后你获得1点护甲一名攻击范围内包含你的角色一次性获得至少两张牌后你摸一张牌。',
key_minagi:'远野美凪',
minagi_peiquan:'配券',
minagi_peiquan_info:'锁定技。①游戏开始时你将你所有的手牌记录为“米券”。②出牌阶段你可以赠予一张“米券”然后执行一项本回合内未被选择过的效果⒈对其造成1点伤害⒉摸两张牌⒊弃置其的两张牌⒋亮出牌堆顶的一张牌然后你可以使用之。',
minagi_huanliu:'幻流',
minagi_huanliu_info:'准备阶段开始时,你可与一名其他角色进行协力,并获得“远野小满”的所有技能直到目标角色的结束阶段开始。若“协力”成功,则你可以将所有手牌记录为“米券”',
key_michiru:'远野小满',
michiru_sheyuan:'舍愿',
michiru_sheyuan_info:'每轮限一次。若你没有“米券”,则你可以将所有手牌当做任意基本牌或普通锦囊牌使用,然后摸等量的牌。',
minagi_tag:'米券',
noname:"小无",
noname_zhuyuan:"祝愿",
@ -17641,8 +17988,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
nsnongquan_info:'出牌阶段,你可以将最后一张手牌当作【无中生有】使用',
nsdufu:'毒妇',
nsdufu_info:'每当你即将造成一次伤害时,你可以为此伤害重新指定伤害来源',
diyjizhi:'集智',
diyjizhi_info:'当你使用一张装备牌或锦囊牌时你可以摸一张牌并展示之若此牌是基本牌你须弃置一张手牌每回合限3次',
yiesheng:'回雪',
yiesheng_info:'出牌阶段,你可以弃置任意数量的黑色手牌,然后摸等量的牌。',
liangji:'环计',
@ -17760,6 +18105,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
nshanlang_info:'准备阶段,你可以和至多三名角色拼点。然后若这些角色中有拼点牌唯一最大的角色,则你可以令该角色从牌堆中获得一张不符合“四象天阵”的牌。',
junk_zhangrang:'四花张让',
junk_zhangrang_ab:'张让',
junktaoluan:'滔乱',
junktaoluan3:'滔乱',
junktaoluan4:'滔乱',
@ -17769,8 +18115,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_caimao:'蔡瑁',
nsdingzhou:'定州',
nsdingzhou_info:'出牌阶段限一次你可以选择一名区域内有牌的其他角色。你随机获得其区域内的一张牌然后摸一张牌。若你以此法获得了两张颜色不同的牌则你失去1点体力。',
junk_sunquan:'改版神孙权',
junk_sunquan_ab:'神孙权',
junkyuheng:'驭衡',
junkyuheng_info:'锁定技。①回合开始时,你须弃置任意张花色不同的牌,从<span style="font-family: yuanli">东吴命运线·改</span>中随机获得等量的技能。②回合结束时,你失去所有因〖驭衡①〗获得的技能,然后摸等量的牌。',
junkdili:'帝力',
@ -17781,13 +18125,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
junkquandao_info:'锁定技。当你使用【杀】或普通锦囊牌时若你手牌中的【杀】或普通锦囊牌的数量之差X不为0则你弃置X张数量较多的一种牌然后你摸一张牌。',
junkchigang:'持纲',
junkchigang_info:'转换技,锁定技。判定阶段开始前,你取消此阶段。然后你获得一个额外的:阴,摸牌阶段;阳,出牌阶段。',
junk_liubei:'削弱刘备',
junk_liubei_ab:'刘备',
junkrende:'仁德',
junkrende_info:'出牌阶段限一次你可以将任意张手牌交给其他角色。若你给出的牌多于一张则你回复1点体力。',
junk_huangyueying:'削弱黄月英',
junk_huangyueying_ab:'黄月英',
junkjizhi:'集智',
junkjizhi_info:'当你使用非转化的普通锦囊牌时你可以展示牌堆顶的一张牌A。若A不为基本牌则你获得A。否则你选择一项⒈将A置入弃牌堆。⒉将一张手牌置于牌堆顶然后获得A。',
junkqicai:'奇才',
junkqicai_info:'锁定技。①你使用锦囊牌无距离限制。②你装备区内的非坐骑牌不能被其他角色弃置。',
ol_guohuai_ab:'郭淮',
junk_zhangrang_ab:'张让',
old_jiakui:'通渠贾逵',
ol_guohuai:'三血郭淮',
old_jiakui_ab:'贾逵',
old_bulianshi_ab:'步练师',
old_bulianshi:'RE步练师',
ol_maliang:'削弱版马良',
old_bulianshi:'削弱步练师',
ol_maliang:'削弱马良',
ol_maliang_ab:'马良',
diy_tieba:'吧友设计',
diy_xushi:'玩点论杀·虚实篇',
diy_default:'常规',
@ -17796,12 +18152,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
diy_yijiang:'设计比赛2020',
diy_yijiang2:'设计比赛2021',
diy_yijiang3:'设计比赛2022',
diy_fakenews:'假新闻',
diy_trashbin:'杀海拾遗',
old_jiakui:'贾逵重制',
ol_guohuai:'三血郭淮',
diy_fakenews:'杀海流言',
diy_trashbin:'垃圾桶',
ns_chengpu:'铁索程普',
ns_chengpu_ab:'程普',
ns_sundeng:'画饼孙登',
ns_sundeng_ab:'孙登',
ns_duji:'画饼杜畿',
ns_duji_ab:'杜畿',
},
};
});

View File

@ -27,7 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shen_zhangfei:['male','shen',4,['shencai','xunshi'],['shu']],
tw_shen_guanyu:['male','shen',4,['twwushen','twwuhun'],['shu']],
shen_machao:['male','shen',4,['shouli','hengwu'],['shu']],
shen_sunquan:['male','shen',4,['dili','yuheng'],['wei']],
shen_sunquan:['male','shen',4,['junkyuheng','junkdili'],['wu']],
shen_jiangwei:['male','shen',4,['jiufa','tianren','pingxiang'],['shen']],
key_kagari:['female','shen',3,['kagari_zongsi'],['key']],
key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']],
@ -95,7 +95,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
jingce:{
audio:'shelie',
trigger:{player:['phaseJieshu','useCard1']},
trigger:{player:['phaseJieshuBegin','useCard1']},
filter:function(event,player){
if(player.hasSkill('twshelie_round')||player!=_status.currentPhase) return false;
var list=[];
@ -234,7 +234,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name2:'黄',
content:'mark',
markcount:function(storage,player){
return storage.toString().slice(-2);
return (storage||0).toString().slice(-2);
},
},
content:function(){
@ -252,7 +252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
mod:{
aiOrder:function(player,card,num){
if((get.number(card)+player.countMark('yizhao'))%10>10) return num+10;
if(Math.floor((get.number(card)+player.countMark('yizhao')%10)/10)==1) return num+10;
},
},
ai:{
@ -311,7 +311,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{player:'damageBegin4'},
check:function(event,player){
return get.damageEffect(player,event.source,event.source,event.nature)<=0;
return get.damageEffect(player,event.source,player,event.nature)<=0;
},
content:function(){
'step 0'
@ -1993,11 +1993,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
combo:'scfuhai',
threaten:3,
order:2,
order:9,
result:{
player:function(player,target){
if(player.maxHp==1) return -2.5;
return -0.25;
},
target:function(player,target){
if(target.isHealthy()) return -2;
return -1;
if(!target.hasMark('yingba_mark')) return -1;
return -0.2;
},
},
},
@ -2085,6 +2090,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player.getDamagedHp();
},
},
ai:{
effect:{
target:function(card,player,target){
if(get.tag(card,'recover')&&_status.event.type=='phase'&&!player.needsToDiscard()) return 0.2;
}
}
},
trigger:{player:'damageBegin2'},
forced:true,
filter:function(event,player){
@ -2584,10 +2596,66 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.targets.addArray(targets);
},
},
// reshuishi:{
// audio:'shuishi',
// enable:'phaseUse',
// usable:1,
// filter:function(event,player){
// return player.maxHp<10;
// },
// content:function(){
// 'step 0'
// event.cards=[];
// event.suits=[];
// 'step 1'
// player.judge(function(result){
// var evt=_status.event.getParent('reshuishi');
// if(evt&&evt.suits&&evt.suits.contains(get.suit(result))) return 0;
// return 1;
// }).set('callback',function(){
// event.getParent().orderingCards.remove(event.judgeResult.card);
// }).judge2=function(result){
// return result.bool?true:false;
// };
// 'step 2'
// event.cards.push(result.card);
// if(result.bool&&player.maxHp<10){
// event.suits.push(result.suit);
// player.gainMaxHp();
// event.goto(1);
// }
// else{
// cards=cards.filterInD();
// if(cards.length) player.chooseTarget('将'+get.translation(cards)+'交给一名角色',true).set('ai',function(target){
// var player=_status.event.player;
// var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h'));
// if(target.hasSkillTag('nogain')) att/=10;
// return att;
// });
// else event.finish();
// }
// 'step 3'
// if(result.bool){
// var target=result.targets[0];
// event.target=target;
// player.line(target,'green');
// target.gain(cards,'gain2').giver=player;
// }
// 'step 4'
// if(target.isMaxHandcard()) player.loseMaxHp();
// },
// ai:{
// order:1.2,
// result:{
// player:1,
// },
// },
// },
reshuishi:{
audio:'shuishi',
enable:'phaseUse',
usable:1,
frequent:true,
filter:function(event,player){
return player.maxHp<10;
},
@ -2600,20 +2668,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var evt=_status.event.getParent('reshuishi');
if(evt&&evt.suits&&evt.suits.contains(get.suit(result))) return 0;
return 1;
}).set('callback',function(){
event.getParent().orderingCards.remove(event.judgeResult.card);
}).judge2=function(result){
}).set('callback',lib.skill.reshuishi.callback).judge2=function(result){
return result.bool?true:false;
};
'step 2'
event.cards.push(result.card);
if(result.bool&&player.maxHp<10){
event.suits.push(result.suit);
player.gainMaxHp();
event.goto(1);
}
else{
cards=cards.filterInD();
var cards=cards.filterInD();
if(cards.length) player.chooseTarget('将'+get.translation(cards)+'交给一名角色',true).set('ai',function(target){
var player=_status.event.player;
var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h'));
@ -2621,7 +2680,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return att;
});
else event.finish();
}
'step 3'
if(result.bool){
var target=result.targets[0];
@ -2629,11 +2687,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.line(target,'green');
target.gain(cards,'gain2').giver=player;
}
else event.finish();
'step 4'
if(target.isMaxHandcard()) player.loseMaxHp();
},
callback:function(){
'step 0'
var evt=event.getParent(2);
event.getParent().orderingCards.remove(event.judgeResult.card);
evt.cards.push(event.judgeResult.card);
if(event.getParent().result.bool&&player.maxHp<10){
evt.suits.push(event.getParent().result.suit);
player.gainMaxHp();
player.chooseBool('是否继续发动【慧识】?').set('frequentSkill','reshuishi');
}
else event._result={bool:false};
'step 1'
if(result.bool) event.getParent(2).redo();
},
ai:{
order:1.2,
order:9,
result:{
player:1,
},
@ -3928,8 +4001,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player.hasMark('baonu')){
player.chooseControlList([
'移去一枚【暴怒】标记',
'失去点体力'
'失去1点体力'
],true).set('ai',function(event,player){
if(get.effect(player,{name:'losehp'},player,player)>=0) return 1;
if(player.storage.baonu>6) return 0;
if(player.hp+player.num('h','tao')>3) return 1;
return 0;
@ -6747,7 +6821,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dangmo:'荡魔',
dangmo_info:'当你于出牌阶段内使用第一张【杀】选择目标后你可以为此牌增加至多Y-1个目标Y为你的体力值。',
reshuishi:'慧识',
reshuishi_info:'出牌阶段限一次若你的体力上限小于10你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同且你的体力上限小于10则你加1点体力上限重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多则你减1点体力上限。',
reshuishi_info:'出牌阶段限一次若你的体力上限小于10你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同且你的体力上限小于10则你加1点体力上限,且可以重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多则你减1点体力上限。',
resghuishi:'辉逝',
resghuishi_info:'限定技出牌阶段你可选择一名角色。若你的体力上限不小于存活人数且其有未发动的觉醒技则你令其中一个技能无视发动条件否则其摸四张牌。然后你减2点体力上限。',
qizhengxiangsheng:'奇正相生',

View File

@ -873,6 +873,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content_phase:function(){
'step 0'
event.forceDie=true;
event.list=[player].concat(player.storage.lianjing_targets);
event.exlist=[];
event.list.sortBySeat();

View File

@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
characterSort:{
mobile:{
mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang"],
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong'],
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong','yj_weiyan'],
mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"],
mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong','sp_yanghu'],
mobile_shijiren:['caizhenji','xiangchong','sp_huaxin','sp_xujing','zhangzhongjing','sp_zhangwen','liuzhang','qiaogong'],
@ -15,8 +15,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing','sp_lvfan','sp_huangfusong','sp_zhujun','liuba'],
mobile_sunben:["re_sunben"],
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji","re_xunyu","re_dianwei"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"],
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji","re_xunyu","re_dianwei","xin_zhoutai"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun",'re_caozhi'],
mobile_yijiang2:["xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui","re_bulianshi"],
mobile_yijiang3:["re_liru","xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"],
mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen","xin_jushou","xin_wuyi","xin_zhuhuan","re_chenqun"],
@ -26,9 +26,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
xin_zhoutai:['male','wu',4,['buqu','new_fenji']],
re_caozhi:['male','wei',3,['reluoying','rejiushi','chengzhang']],
yj_weiyan:['male','qun',5,['mbguli','mbaosi']],
re_chenqun:['male','wei',3,['redingpin','refaen']],
xin_caoxiu:['male','wei',4,['qianju','xinqingxi']],
xin_zhuhuan:['male','wu',4,['fenli','xinpingkou'],['unseen']],
xin_zhuhuan:['male','wu',4,['fenli','xinpingkou']],
sp_pengyang:['male','shu',3,['spdaming','spxiaoni']],
wangjun:['male','qun',4,['zhujian','duansuo']],
xin_zhuzhi:['male','wu',4,['sbanguo']],
@ -183,6 +186,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']],
},
characterIntro:{
fuqian:'傅金[qiān] ( ? ~263年义阳治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅金官至关中都督。魏国攻伐蜀汉时,傅金和蒋舒防守阳安关,兵败战死。',
wangjun:'王濬207年286年字士治小名阿童弘农郡湖县今河南省灵宝市阌乡人。西晋时期名将。王濬出身世家博学多闻容颜英俊多谋善战。举秀才出身起家河东郡从事。泰始八年272年担任广汉太守平定益州叛乱迁益州刺史。利用长江上游地势之利修造战船组建强大的水军。上书晋武帝促成晋灭吴之战。咸宁六年280年率兵顺流而下熔毁横江铁链攻克丹阳郡率先攻取石头城接受吴末帝孙皓投降完成西晋统一大业。凭借功勋拜辅国将军、步兵校尉册封襄阳侯。为避猜忌纵情享受累迁特进、抚军大将军、开府仪同三司、散骑常侍、后军将军等。太康六年十二月286年1月18日王濬去世享年八十岁谥号为“武”安葬于柏谷山。',
yangfu:'杨阜172年—244年字义山汉天水冀县今甘谷县东南人。三国时期曹魏名臣。汉献帝建安初年任凉州从事旋拜安定长史韦康任刺史后辟为别驾改任州参军后因讨马超有功赐爵关内侯。曹操征汉中时杨阜担任益州刺史回来后又担任武都太守。魏明帝时由将作大匠改少府。杨阜不但卓识远见而且刚正不阿敢于直言对朝廷弊政多有诤谏六次进言谏魏明帝应勤政爱民魏明帝对他颇有敬畏之心。杨阜勤政廉洁在宫内担任少府时专管宝器、珍膳、衣物等而他死后则家无馀财。皇帝让杨阜的孙子杨豹继任了少府之职。原甘谷县文昌宫西侧有杨氏家祠内悬“两代尚书”匾额。',
ruanhui:'阮氏女,是指三国时期曹魏名士许允之妻阮氏,陈留尉氏人。阮氏女是中国古代四大丑女之一,貌丑而见识非凡。她出身士族之家,是卫尉阮共(字伯彦)之女、阮侃(字德如)之妹。嫁与许允后生有二子:许奇,官至司隶校尉;许猛,官至幽州刺史。',
@ -615,6 +619,90 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//☆胃炎
mbguli:{
audio:2,
enable:'phaseUse',
filterCard:true,
selectCard:-1,
position:'h',
filter:function(event,player){
if(player.hasSkill('mbguli_used')) return false;
var hs=player.getCards('h');
if(!hs.length) return false;
for(var card of hs){
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2===false) return false;
}
return event.filterCard(get.autoViewAs({name:'sha'},hs));
},
viewAs:{
name:'sha',
storage:{mbguli:true}
},
onuse:function(links,player){
player.addTempSkill('mbguli_used','phaseUseAfter');
},
ai:{
order:1,
threaten:1.14,
unequip:true,
unequip_ai:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.name=='sha'&&arg.card&&arg.card.storage&&arg.card.storage.mbguli) return true;
return false;
}
},
subSkill:{
used:{
audio:'mbguli',
trigger:{global:'useCardAfter'},
charlotte:true,
prompt2:'失去1点体力然后将手牌摸至体力上限',
check:function(event,player){
var num=player.maxHp-player.countCards('h');
return num>=3&&player.hp>=2||num>=2&&player.hp>=3;
},
filter:function(event,player){
return event.card.storage&&event.card.storage.mbguli&&game.hasPlayer2(current=>{
return current.hasHistory('sourceDamage',evt=>evt.card==event.card);
});
},
content:function(){
'step 0'
player.loseHp();
'step 1'
player.drawTo(player.maxHp);
}
}
},
},
mbaosi:{
audio:2,
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
return player.inRange(event.player)&&player.isPhaseUsing()&&event.player.isIn()&&!player.getStorage('mbaosi_inf').contains(event.player);
},
logTarget:'player',
content:function(){
player.addTempSkill('mbaosi_inf','phaseUseAfter');
player.markAuto('mbaosi_inf',[trigger.player]);
},
subSkill:{
inf:{
charlotte:true,
onremove:true,
forced:true,
intro:{content:'对$使用牌无次数限制'},
mod:{
cardUsableTarget:function(card,player,target){
if(player.getStorage('mbaosi_inf').contains(target)) return true;
},
},
}
}
},
// 界曹休
xinqingxi:{
audio:2,
@ -935,6 +1023,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:3,
trigger:{global:'phaseBefore',player:'enterGame'},
forced:true,
locked:false,
direct:true,
group:['sbanguo_move','sbanguo_damage','sbanguo_dying'],
filter:function(event,player){
@ -1122,7 +1211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var card of cards){
var num=i+1;
if(cards2.slice(0,num).contains(card)) continue;
if(get.tag(card,'damage')&&i>0) count+=get.effect(player,{name:'wuzhong'},player)/4;
if(get.tag(card,'damage')&&i>0) count+=get.effect(player,{name:'wuzhong'},player)/2;
var targets2=targets.filter(current=>{
return player.canUse(card,current,false)&&get.distance(player,current)<=num&&get.effect(current,card,player,player)>0;
});
@ -1219,7 +1308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
},
content:function(){
player.draw(3);
player.draw(5);
},
mod:{
aiOrder:function(player,card,num){
@ -1559,7 +1648,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
trigger:{player:'damageBegin4'},
filter:function(event){
return event.nature=='thunder';
return event.nature!='thunder';
},
content:function(){
trigger.cancel();
@ -2251,7 +2340,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
result:{player:1},
},
subSkill:{
draw:{inherit:'jianying'},
draw:{inherit:'jianying',audio:'jianying',audioname:['xin_jushou']},
},
},
//刘巴
@ -2597,6 +2686,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=0;
for(var i of cards) num+=get.number(i,player);
num=num%13;
if(num==0) num=13;
var card=get.cardPile2(function(card){
return get.number(card,false)==num;
});
@ -3116,7 +3206,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
sptaoluan:{
audio:2,
trigger:{global:'judgeEnd'},
trigger:{global:'judgeFixing'},
usable:1,
filter:function(event,player){
return event.result&&event.result.suit=='spade';
@ -3131,6 +3221,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{
evt.finish();
evt._triggered=null;
var nexts=trigger.next.slice();
for(var next of nexts){
if(next.name=='judgeCallback') trigger.next.remove(next);
}
var evts=game.getGlobalHistory('cardMove',function(evt){
return evt.getParent(2)==trigger.getParent();
});
var cards=[];
for(var i=evts.length-1;i>=0;i--){
var evt=evts[i];
for(var card of evt.cards){
if(get.position(card,true)=='o') cards.push(card);
}
}
trigger.orderingCards.addArray(cards);
}
var list=[];
if(get.position(trigger.result.card)=='d') list.push(0);
@ -4084,7 +4189,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
subSkill:{
draw:{
audio:'spxiangzhen',
audio:2,
trigger:{global:'useCardAfter'},
forced:true,
filter:function(event,player){
@ -14696,8 +14800,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=player.getExpansions('rebiaozhao'),cards2=event.getd();
if(!cards.length||!cards2.length) return false;
var num=get.number(cards[0]);
for(var i=0;i<event.cards.length;i++){
if(get.number(event.cards[i])==num) return true;
var cards=event.getd();
for(var card of cards){
if(get.number(card)==num) return true;
}
return false;
},
@ -16300,12 +16405,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:true,
},
"yizan_use":{
audio:'yizan_respond_shan',
intro:{
content:"已发动过#次",
},
enable:["chooseToUse","chooseToRespond"],
hiddenCard:function(player,name){
if(!['sha','shan','tao','jiu'].contains(name)) return false;
if(get.type(name)!='basic') return false;
if(!player.storage.yizan&&player.countCards('hes')<2) return false;
return player.hasCard(function(card){
return get.type(card)=='basic';
@ -16313,31 +16419,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filter:function(event,player){
if(!player.storage.yizan&&player.countCards('hes')<2) return false;
if(event.filterCard({name:'sha'},player,event)||
event.filterCard({name:'shan'},player,event)||
event.filterCard({name:'jiu'},player,event)||
event.filterCard({name:'tao'},player,event)){
return player.hasCard(function(card){
if(!player.hasCard(function(card){
return get.type(card)=='basic';
},'hs');
},'hs')) return false;
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(event.filterCard({name:name},player,event)) return true;
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(event.filterCard({name:'sha',nature:nature},player,event)) return true;
}
}
}
return false;
},
chooseButton:{
dialog:function(event,player){
var list=[];
if(event.filterCard({name:'sha'},player,event)){
list.push(['基本','','sha']);
for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(event.filterCard({name:name},player,event)){
list.push(['基本','',name]);
}
if(event.filterCard({name:'shan'},player,event)){
list.push(['基本','','shan']);
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(event.filterCard({name:name,nature:nature},player,event)) list.push(['基本','','sha',nature]);
}
if(event.filterCard({name:'tao'},player,event)){
list.push(['基本','','tao']);
}
if(event.filterCard({name:'jiu'},player,event)){
list.push(['基本','','jiu']);
}
return ui.create.dialog('翊赞',[list,'vcard'],'hidden');
},
@ -17676,6 +17784,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
perfectPair:{
wujing:['sunce','sunben','wuguotai'],
simazhao:['simayi','jin_simayi','jin_wangyuanji'],
xugong:['yanbaihu'],
},
characterReplace:{
caochun:['caochun','old_caochun'],
@ -17686,7 +17795,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
weiwenzhugezhi:['weiwenzhugezhi','re_weiwenzhugezhi'],
xugong:['xugong','re_xugong'],
liuzan:['re_liuzan','liuzan'],
sufei:['sp_sufei','xf_sufei'],
sufei:['yj_sufei','sp_sufei','xf_sufei'],
jiakui:['jiakui','old_jiakui'],
shenpei:['shenpei','sp_shenpei'],
wangcan:['tw_wangcan','wangcan','sp_wangcan'],
@ -17711,6 +17820,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qiaogong:['tw_qiaogong','qiaogong'],
sp_chendong:['tw_chendong','sp_chendong'],
sp_jiangqing:['tw_jiangqing','sp_jiangqing'],
zhaotongzhaoguang:['dc_zhaotongzhaoguang','zhaotongzhaoguang'],
yangbiao:['yangbiao','dc_yangbiao'],
qiaozhou:['yj_qiaozhou','qiaozhou'],
sunhanhua:['dc_qiaozhou','sunhanhua'],
},
translate:{
liuzan:'手杀留赞',
@ -17914,7 +18027,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_sunben:'那个男人',
//孙笨
yangbiao:'杨彪',
yangbiao:'手杀杨彪',
zhaohan:'昭汉',
zhaohan_info:'锁定技你的第1-4个准备阶段开始时你加1点体力上限并回复1点体力你的第5-7个准备阶段开始时你减1点体力上限。',
rangjie:'让节',
@ -18480,7 +18593,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spshiji:'势击',
spshiji_info:'当你对其他角色造成属性伤害时,若你的手牌数不为全场唯一最多,则你可以观看其手牌。你令其弃置其中的所有红色牌,然后摸等量的牌。',
sptaoluan:'讨乱',
sptaoluan_info:'每回合限一次。一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)',
sptaoluan_info:'每回合限一次。一名角色的判定结果确定时,若结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)',
sp_zhujun:'手杀朱儁',
yangjie:'佯解',
yangjie_info:'出牌阶段限一次你可以摸一张牌并和一名其他角色A拼点。当你以此法展示你的拼点牌时你令此牌点数-XX为你已损失的体力值。若你没赢则你可以令另一名其他角色B获得两张拼点牌然后其视为对A使用一张火【杀】。',
@ -18508,7 +18621,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xingtu:'行图',
xingtu_info:'锁定技。①当你使用有点数的牌结算结束后你将此牌点数记录为X。②当你使用牌时若X÷Y的余数为0则你摸一张牌Y为此牌的点数。③你使用Y÷X的余数为0的牌无次数限制Y为此牌的点数。',
juezhi:'爵制',
juezhi_info:'出牌阶段你可以弃置至少两张牌然后从牌堆中获得一张点数为X的牌X为这些牌的点数和除以13后的余数)。',
juezhi_info:'出牌阶段你可以弃置至少两张牌然后从牌堆中获得一张点数为X的牌X为这些牌的点数和除以13后的余数且当余数为0时X为13)。',
sp_jianggan:'手杀蒋干',
spdaoshu:'盗书',
spdaoshu_info:'每轮限一次。一名敌方角色的出牌阶段开始时,若其有手牌,则你可以令其视为使用一张【酒】。其须声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你随机获得其五张手牌,否则你不能响应其使用的牌直到回合结束。',
@ -18570,7 +18683,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hannan_info:'出牌阶段限一次。你可以与一名角色拼点赢的角色对没赢的角色造成2点伤害。',
xin_wuyi:'手杀吴懿',
sbbenxi:'奔袭',
sbbenxi_info:'出牌阶段开始时,你可以弃置至少一张牌,然后你于此阶段获得如下效果:①你至其他角色距离-X②当你使用的下一张基本牌或普通锦囊牌A选择目标后你可以额外指定X名距离为1的角色为目标③牌A结算结束后若此牌造成过伤害你摸张牌X为你以此法弃置的牌数。',
sbbenxi_info:'出牌阶段开始时,你可以弃置至少一张牌,然后你于此阶段获得如下效果:①你至其他角色距离-X②当你使用的下一张基本牌或普通锦囊牌A选择目标后你可以额外指定X名距离为1的角色为目标③牌A结算结束后若此牌造成过伤害你摸张牌X为你以此法弃置的牌数。',
xin_zhuzhi:'手杀朱治',
sbanguo:'安国',
sbanguo_info:'①游戏开始时你令一名其他角色获得1枚“安国”标记有“安国”的角色手牌上限基数等于体力上限。②出牌阶段开始时你可以将一名有“安国”的角色的所有“安国”移动给一名本局游戏未获得过“安国”的其他角色。③当你受到伤害时若有有“安国”的角色且伤害值不小于你的体力值且此伤害没有来源或来源没有“安国”防止此伤害。④一名角色进入濒死状态时若其有你因〖安国①〗获得的“安国”你移去其该“安国”令其将体力回复至1点。然后你选择一项1.若你的体力值大于1你失去体力至1点2.若你的体力上限大于1你将体力上限减至1。最后你令其获得X点护甲X为你以此法失去的体力值或减少的体力上限。',
@ -18590,6 +18703,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xin_caoxiu:'手杀曹休',
xinqingxi:'倾袭',
xinqingxi_info:'每回合限一次。当你对其他角色造成伤害时你可以令其选择一项1.弃置X张手牌X为4减去你至其的距离至少为12.令此伤害+1。',
yj_weiyan:'☆魏延',
mbguli:'孤厉',
mbguli_info:'出牌阶段限一次。你可以将所有手牌当做一张无视防具的【杀】使用。此牌结算结束后若此牌造成过伤害你可以失去1点体力并将手牌摸至X张X为你的体力上限。',
mbaosi:'骜肆',
mbaosi_info:'锁定技。当你于出牌阶段对一名攻击范围内的角色造成伤害后,你于此阶段对其使用牌无次数限制。',
xin_zhoutai:'手杀周泰',
mobile_standard:'手杀异构·标准包',
mobile_shenhua:'手杀异构·神话再临',

File diff suppressed because it is too large Load Diff

View File

@ -109,6 +109,7 @@ window.noname_character_rank={
'clan_xuncai',
'zhujianping',
'liuzhang',
'ol_wanglang',
'key_kamome',
'key_yukine',
'key_inari',
@ -456,6 +457,7 @@ window.noname_character_rank={
'caoren',
'ol_xiahouyuan',
're_huangzhong',
'ol_huangzhong',
'ol_weiyan',
'zhoutai',
're_xunyu',
@ -563,6 +565,10 @@ window.noname_character_rank={
'tw_zhangji',
'tw_liyàn',
'xuelingyun',
'dc_zhaotongzhaoguang',
'mengjie',
'yj_qiaozhou',
'yj_sufei',
],
bp:[
'chess_diaochan',
@ -880,6 +886,9 @@ window.noname_character_rank={
'tw_zhangning',
'xia_tongyuan',
'xia_wangyue',
'dc_huanghao',
'dc_yangbiao',
'ns_sundeng',
],
b:[
'diy_feishi',
@ -1151,6 +1160,11 @@ window.noname_character_rank={
'tw_yufuluo',
'tw_zongyu',
'xia_xushu',
'clan_hanrong',
'clan_hanshao',
'dc_fuwan',
'ns_duji',
'yj_weiyan',
],
bm:[
'diy_xizhenxihong',
@ -1174,7 +1188,7 @@ window.noname_character_rank={
'sunce',
'sunjian',
'zhurong',
'old_zhoutai',
'xin_zhoutai',
'old_caoren',
'pangtong',
'yanyan',
@ -1330,6 +1344,10 @@ window.noname_character_rank={
'tw_yangyi',
'tw_zhouchu',
'tw_zhugeguo',
'dc_caozhi',
'hanlong',
'oldre_liubiao',
'wuanguo',
],
c:[
'xiahoudun',
@ -1383,6 +1401,12 @@ window.noname_character_rank={
'tw_furong',
'tw_niujin',
'tw_zhangnan',
'macheng',
'old_caorui',
'old_dingfeng',
'old_gaoshun',
'old_huanghao',
'old_liubiao',
],
d:[
'lvmeng',
@ -1414,6 +1438,11 @@ window.noname_character_rank={
'tw_guanqiujian',
'tw_xiahouen',
'tw_yl_luzhi',
'junk_huangyueying',
'junk_liubei',
'new_caoren',
'old_handang',
'old_zhoutai',
],
rarity:{
legend:[
@ -1576,6 +1605,8 @@ window.noname_character_rank={
'key_seira',
'key_kiyu',
'key_tomoyo',
'key_minagi',
'key_michiru',
'noname',
],
epic:[
@ -1771,6 +1802,8 @@ window.noname_character_rank={
'tw_zhangning',
'tw_zhugeguo',
'xuelingyun',
'dc_zhaotongzhaoguang',
'mengjie',
'key_kano',
'key_haruko',
'key_akiko',
@ -2033,7 +2066,6 @@ window.noname_character_rank={
'xiahoushi',
'guotufengji',
'ns_chendao',
'old_jiakui',
'caozhang',
'key_jojiro',
'key_doruji',
@ -2227,6 +2259,15 @@ window.noname_character_rank={
'xia_liyàn',
'xia_tongyuan',
'xia_wangyue',
'clan_hanrong',
'clan_hanshao',
'dc_yangbiao',
'ns_duji',
'ns_sundeng',
'ol_huangzhong',
'yj_qiaozhou',
'yj_sufei',
'yj_weiyan',
],
junk:[
'sunshao',
@ -2259,6 +2300,13 @@ window.noname_character_rank={
'xin_wuyi',
'xin_zhuzhi',
'tw_xiahouen',
'ol_maliang',
'old_bulianshi',
'junk_huangyueying',
'junk_liubei',
'old_jiakui',
'new_caoren',
'old_zhoutai',
],
}
};

View File

@ -5,21 +5,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
characterSort:{
refresh:{
refresh_standard:["re_caocao","re_simayi","re_guojia","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong",'re_gongsunzan'],
refresh_feng:['caoren','ol_xiahouyuan','re_huangzhong','ol_weiyan','ol_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'],
refresh_feng:['caoren','ol_xiahouyuan','ol_weiyan','ol_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji','ol_huangzhong'],
refresh_huo:["ol_sp_zhugeliang","ol_xunyu","ol_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"],
refresh_lin:['re_menghuo','ol_sunjian','re_caopi','ol_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'],
refresh_shan:['ol_jiangwei','ol_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai','re_zhanghe'],
refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu','re_chengong'],
refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou'],
refresh_yijiang1:['xin_wuguotai','xin_gaoshun','dc_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu','re_chengong'],
refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao','re_xunyou','re_guanzhang'],
refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','dc_liru','re_manchong','re_fuhuanghou','re_guanping','re_liufeng'],
refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','dc_chenqun','re_caifuren','re_guyong','re_jushou','re_zhuhuan'],
refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen'],
refresh_yijiang6:['re_guohuanghou','re_sundeng'],
refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong'],
refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici','re_caiyong','re_mazhong','re_wenpin'],
},
},
connect:true,
character:{
dc_caozhi:['male','wei',3,['reluoying','dcjiushi']],
ol_huangzhong:['male','shu',4,['xinliegong','remoshi']],
re_wenpin:['male','wei',5,['rezhenwei'],['unseen']],
re_guanzhang:['male','shu',4,['fuhun','retongxin'],['unseen']],
re_mazhong:['male','shu',4,['refuman']],
dc_chenqun:['male','wei',3,['repindi','refaen']],
re_sundeng:['male','wu',4,['rekuangbi']],
@ -82,7 +86,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_guohuai:['male','wei',4,['decadejingce']],
re_wuyi:['male','shu',4,['xinbenxi'],['clan:陈留吴氏']],
re_zhuran:['male','wu',4,['xindanshou']],
re_caozhi:['male','wei',3,['reluoying','rejiushi','chengzhang']],
ol_pangtong:['male','shu',3,['ollianhuan','olniepan'],[]],
re_zhangyi:['male','shu',5,['rewurong','reshizhi']],
xin_wuguotai:['female','wu',3,['xinganlu','xinbuyi']],
@ -119,13 +122,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_xiahouyuan:['male','wei',4,['xinshensu','shebian']],
caoren:['male','wei',4,['xinjushou','xinjiewei']],
re_huangzhong:['male','shu',4,['xinliegong']],
ol_weiyan:['male','shu',4,['xinkuanggu','reqimou']],
ol_xiaoqiao:['female','wu',3,['oltianxiang','olhongyan','piaoling']],
zhoutai:['male','wu',4,['buqu','fenji']],
ol_pangde:['male','qun',4,['mashu','rejianchu']],
ol_xuhuang:['male','wei',4,['olduanliang','oljiezi']],
ol_sp_zhugeliang:["male","shu",3,["bazhen","rehuoji","rekanpo","cangzhuo"],[]],
ol_sp_zhugeliang:["male","shu",3,["bazhen","olhuoji","olkanpo","cangzhuo"],[]],
re_yanwen:["male","qun",4,["reshuangxiong"],[]],
ol_yuanshao:['male','qun',4,['olluanji','olxueyi'],['zhu']],
re_menghuo:['male','shu',4,['huoshou','rezaiqi']],
@ -153,8 +155,298 @@ game.import('character',function(lib,game,ui,get,ai,_status){
perfectPair:{
sunben:['zhouyu','taishici','daqiao'],
re_xushu:['zhaoyun','sp_zhugeliang'],
re_guohuai:['xiahouyuan','zhanghe'],
},
skill:{
//OL界火诸葛
olhuoji:{
audio:'rehuoji',
trigger:{player:'huogongBegin'},
forced:true,
locked:false,
popup:false,
group:'olhuoji_viewAs',
content:function(){
trigger.setContent(lib.skill.olhuoji.huogongContent);
},
huogongContent:function(){
"step 0"
if(target.countCards('h')==0){
event.finish();
return;
}
event._result={cards:target.getCards('h').randomGets(1)};
"step 1"
event.dialog=ui.create.dialog(get.translation(target)+'展示的手牌',result.cards);
event.videoId=lib.status.videoId++;
game.broadcast('createDialog',event.videoId,get.translation(target)+'展示的手牌',result.cards);
game.addVideo('cardDialog',null,[get.translation(target)+'展示的手牌',get.cardsInfo(result.cards),event.videoId]);
event.card2=result.cards[0];
game.log(target,'展示了',event.card2);
event._result={};
player.chooseToDiscard({color:get.color(event.card2)},'he',function(card){
var evt=_status.event.getParent();
if(get.damageEffect(evt.target,evt.player,evt.player,'fire')>0){
return 7-get.value(card,evt.player);
}
return -1;
}).set('prompt',false);
game.delay(2);
"step 2"
if(result.bool){
target.damage('fire',event.baseDamage||1);
}
else{
target.addTempSkill('huogong2');
}
event.dialog.close();
game.addVideo('cardDialog',null,event.videoId);
game.broadcast('closeDialog',event.videoId);
},
subSkill:{viewAs:{inherit:'rehuoji',audio:'rehuoji'}}
},
olkanpo:{
trigger:{player:'useCard'},
forced:true,
locked:false,
popup:false,
group:'olkanpo_viewAs',
filter:function(event,player){
return event.card.name=='wuxie';
},
content:function(){
trigger.directHit.addArray(game.players);
},
subSkill:{viewAs:{inherit:'rekanpo',audio:'rekanpo'}}
},
//新杀界曹植
dcjiushi:{
audio:2,
trigger:{
player:'useCardAfter',
},
filter:function(event,player){
return event.card.name=='jiu';
},
forced:true,
locked:false,
content:function(){
player.addTempSkill('dcjiushi_sha',{player:'phaseEnd'});
player.addMark('dcjiushi_sha',1,false);
},
group:['dcjiushi_use','dcjiushi_record','dcjiushi_damage'],
subSkill:{
use:{
audio:'dcjiushi',
enable:'chooseToUse',
hiddenCard:function(player,name){
if(name=='jiu') return !player.isTurnedOver();
return false;
},
filter:function(event,player){
if(player.isTurnedOver()) return false;
return event.filterCard({name:'jiu',isCard:true},player,event);
},
content:function(){
if(_status.event.getParent(2).type=='dying'){
event.dying=player;
event.type='dying';
}
player.turnOver();
player.useCard({name:'jiu',isCard:true},player);
},
ai:{
order:5,
result:{
player:function(player){
if(_status.event.parent.name=='phaseUse'){
if(player.countCards('h','jiu')>0) return 0;
if(player.getEquip('zhuge')&&player.countCards('h','sha')>1) return 0;
if(!player.countCards('h','sha')) return 0;
var targets=[];
var target;
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(get.attitude(player,players[i])<0){
if(player.canUse('sha',players[i],true,true)){
targets.push(players[i]);
}
}
}
if(targets.length){
target=targets[0];
}
else{
return 0;
}
var num=get.effect(target,{name:'sha'},player,player);
for(var i=1;i<targets.length;i++){
var num2=get.effect(targets[i],{name:'sha'},player,player);
if(num2>num){
target=targets[i];
num=num2;
}
}
if(num<=0) return 0;
var e2=target.getEquip(2);
if(e2){
if(e2.name=='tengjia'){
if(!player.countCards('h',{name:'sha',nature:'fire'})&&!player.getEquip('zhuque')) return 0;
}
if(e2.name=='renwang'){
if(!player.countCards('h',{name:'sha',color:'red'})) return 0;
}
if(e2.name=='baiyin') return 0;
}
if(player.getEquip('guanshi')&&player.countCards('he')>2) return 1;
return target.countCards('h')>3?0:1;
}
if(player==_status.event.dying||player.isTurnedOver()) return 3;
}
},
effect:{
target:function(card,player,target){
if(card.name=='guiyoujie') return [0,0.5];
if(target.isTurnedOver()){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(target.hp==1) return;
return [1,target.countCards('h')/2];
}
}
}
}
},
},
record:{
trigger:{player:'damageBegin3'},
silent:true,
firstDo:true,
filter:function(event,player){
return player.isTurnedOver();
},
content:function(){
trigger.dcjiushi=true;
}
},
damage:{
audio:'dcjiushi',
trigger:{player:'damageEnd'},
check:function(event,player){
return player.isTurnedOver();
},
prompt:'是否发动【酒诗】,将武将牌翻面?',
filter:function(event,player){
if(event.dcjiushi){
return true;
}
return false;
},
content:function(){
delete trigger.dcjiushi;
player.turnOver();
}
},
sha:{
charlotte:true,
onremove:true,
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num+player.countMark('dcjiushi_sha');
},
},
},
}
},
//OL界黄忠
remoshi:{
audio:2,
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
return event.player.isIn()&&event.card&&event.card.name=='sha'&&event.cards.filterInD('od').length&&event.notLink()&&[2,3,4,6].some(i=>event.player.getEquip(i));
},
group:'remoshi_retrieve',
content:function(){
trigger.player.addSkill('remoshi_stuck')
trigger.player.addToExpansion(trigger.cards.filterInD('od'),'gain2').gaintag.add('remoshi_stuck');
},
subSkill:{
retrieve:{
audio:'remoshi',
trigger:{
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
filter:function(event,player){
return game.hasPlayer(current=>{
if(event.name=='gain'&&current==player) return false;
var cards=current.getExpansions('remoshi_stuck');
if(!cards.length) return false;
var evt=event.getl(current);
if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true;
});
},
direct:true,
forced:true,
content:function(){
'step 0'
var targets=game.filterPlayer(current=>{
var cards=current.getExpansions('remoshi_stuck');
if(!cards.length) return false;
var evt=trigger.getl(current);
if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true;
});
event.targets=targets;
'step 1'
var target=targets.shift();
var cards=target.getExpansions('remoshi_stuck');
if(cards.length){
player.logSkill('remoshi_retrieve',target);
player.gain(cards,target,'give','bySelf');
game.delayx();
}
if(targets.length) event.redo();
},
},
stuck:{
marktext:'矢',
charlotte:true,
intro:{
name:'没矢',
name2:'矢',
content:'expansion',
markcount:'expansion',
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
}
}
},
//界文聘
rezhenwei:{
inherit:'zhenwei',
filter:function(event,player){
if(player==event.target||player==event.player) return false;
if(!player.countCards('he')) return false;
if(event.targets.length>1) return false;
if(!event.target) return false;
if(event.target.hp>player.hp) return false;
var card=event.card;
if(card.name=='sha') return true;
if(get.color(card)=='black'&&get.type(card,'trick')=='trick') return true;
return false;
},
},
//界关张……
retongxin:{
mod:{
attackRange:(player,num)=>num+2
}
},
//马忠
refuman:{
audio:2,
@ -458,7 +750,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(four) return get.value(button.link)+(given.map(i=>get.suit(i)).contains(get.suit(button.link))?0:10);
if(ui.selected.buttons.length==0) return get.value(button.link);
return 0;
}).set('goon',game.hasPlayer(current=>get.attitude(player,current)>0));
}).set('goon',game.hasPlayer(current=>current!=player&&get.attitude(player,current)>0));
}
else{
event.goto(6);
@ -1405,6 +1697,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
popup:false,
charlotte:true,
onremove:function(player){
delete player.getStat().skill.rezhanjue_draw;
},
filter:function(event,player){
return event.skill=='rezhanjue';
},
@ -4684,6 +4979,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
redingpin2:{charlotte:true},
refaen:{
audio:2,
audioname:['dc_chenqun'],
trigger:{global:['turnOverAfter','linkAfter']},
logTarget:'player',
filter:function(event,player){
@ -6819,44 +7115,82 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
hanzhan_gain:{
trigger:{
player:['chooseToCompareAfter','compareMultipleAfter'],
target:['chooseToCompareAfter','compareMultipleAfter']
global:'chooseToCompareAfter',
},
audio:'hanzhan',
filter:function(event,player){
if(event.preserve) return false;
var list=[];
if(event.name=='compareMultiple') list.addArray([event.card1,event.card2]);
else if(!event.compareMultiple) list.addArray(event.cards);
return list.filter(function(card){
return card.name=='sha'&&get.position(card,true)=='o';
}).length>0;
if(player!=event.player&&player!=event.target&&(!event.targets||!event.targets.contains(player))) return false;
for(var i of event.lose_list){
if(Array.isArray(i[1])){
for(var j of i[1]){
if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o') return true;
}
}
else{
var j=i[1];
if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o') return true;
}
}
return false;
},
frequent:true,
prompt2:function(trigger,player){
var list=[];
if(trigger.name=='compareMultiple') list.addArray([trigger.card1,trigger.card2]);
else if(!trigger.compareMultiple) list.addArray(trigger.cards);
var cards=list.filter(function(card){
return card.name=='sha'&&get.position(card,true)=='o';
});
cards.sort(function(a,b){
return get.number(b)-get.number(a);
});
if(cards.length>1&&get.number(cards[0])>get.number(cards[1])) cards.splice(1);
prompt2:function(event,player){
var cards=[],max=0;
for(var i of event.lose_list){
if(Array.isArray(i[1])){
for(var j of i[1]){
if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){
var num=get.number(j,i[0]);
if(num>max){
cards=[];
max=num;
}
if(num==max) cards.push(j);
}
}
}
else{
var j=i[1];
if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){
var num=get.number(j,i[0]);
if(num>max){
cards=[];
max=num;
}
if(num==max) cards.push(j);
}
}
}
return '获得'+get.translation(cards);
},
content:function(){
var list=[];
if(trigger.name=='compareMultiple') list.addArray([trigger.card1,trigger.card2]);
else if(!trigger.compareMultiple) list.addArray(trigger.cards);
var cards=list.filter(function(card){
return card.name=='sha'&&get.position(card,true)=='o';
});
cards.sort(function(a,b){
return get.number(b)-get.number(a);
});
if(cards.length>1&&get.number(cards[0])>get.number(cards[1])) cards.splice(1);
var cards=[],max=0;
for(var i of trigger.lose_list){
if(Array.isArray(i[1])){
for(var j of i[1]){
if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){
var num=get.number(j,i[0]);
if(num>max){
cards=[];
max=num;
}
if(num==max) cards.push(j);
}
}
}
else{
var j=i[1];
if(get.name(j,i[0])=='sha'&&get.position(j,true)=='o'){
var num=get.number(j,i[0]);
if(num>max){
cards=[];
max=num;
}
if(num==max) cards.push(j);
}
}
}
player.gain(cards,'gain2');
},
},
@ -7562,11 +7896,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
reluoying:{
audio:2,
audioname:['dc_caozhi'],
group:['reluoying_discard','reluoying_judge'],
subfrequent:['judge'],
subSkill:{
discard:{
audio:'reluoying',
audioname:['dc_caozhi'],
trigger:{global:['loseAfter','loseAsyncAfter']},
filter:function(event,player){
if(event.type!='discard'||event.getlx===false) return false;
@ -7606,6 +7942,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
judge:{
audio:'reluoying',
audioname:['dc_caozhi'],
trigger:{global:'cardsDiscardAfter'},
direct:true,
filter:function(event,player){
@ -7940,12 +8277,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.recover(3-player.hp);
}
'step 5'
player.chooseControl('bazhen','rehuoji','rekanpo').set('prompt','选择获得一个技能').ai=function(){
return ['rehuoji','bazhen'].randomGet();
player.chooseControl('bazhen','olhuoji','olkanpo').set('prompt','选择获得一个技能').ai=function(){
return ['olhuoji','bazhen'].randomGet();
};
'step 6'
player.addSkillLog(result.control);
},
derivation:['bazhen','olhuoji','olkanpo'],
ai:{
order:1,
skillTagFilter:function(player,tag,target){
@ -8954,10 +9292,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
list.push(i);
}
}
game.countPlayer2(function(current){
game.countPlayer(function(current){
list.remove(current.name);
list.remove(current.name1);
list.remove(current.name2);
if(current.storage.huashen&&current.storage.huashen.owned){
for(var i in current.storage.huashen.owned) list.removeArray(current.storage.huashen.owned[i]);
}
if(current.storage.rehuashen&&current.storage.rehuashen.character) list.removeArray(current.storage.rehuashen.character)
});
_status.characterlist=list;
@ -9116,13 +9457,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
check:function(button){
var player=_status.event.player;
var rand=_status.event.getParent().getRand('reguhuo');
var hasEnemy=game.hasPlayer(function(current){
return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0;
});
var card={name:button.link[2],nature:button.link[3]};
var val=_status.event.getParent().type=='phase'?player.getUseValue(card):1;
if(val<=0) return 0;
if(hasEnemy){
if(hasEnemy&&rand>0.3){
if(!player.countCards('h',function(cardx){
if(card.name==cardx.name){
if(card.name!='sha') return true;
@ -9142,20 +9484,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
suit:'none',
number:null,
},
filterCard:function(card,player,target){
var result=true;
var suit=card.suit,number=card.number;
card.suit='none';card.number=null;
var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod!='unchanged') result=mod;
card.suit=suit;card.number=number;
return result;
},
position:'hs',
ignoreMod:true,
ai1:function(card){
var player=_status.event.player;
var hasEnemy=game.hasPlayer(function(current){
return current!=player&&!current.hasSkill('rechanyuan')&&(get.realAttitude||get.attitude)(current,player)<0;
});
var rand=_status.event.getRand('reguhuo');
var cardx=lib.skill.reguhuo_backup.viewAs;
if(hasEnemy){
if(hasEnemy&&rand>0.3){
if(card.name==cardx.name&&(card.name!='sha'||card.nature==cardx.nature)) return 10;
return 0;
}
return 6-get.value(card);
},
filterCard:true,
precontent:function(){
player.logSkill('reguhuo');
var card=event.result.cards[0];
event.result.card.suit=get.suit(card);
event.result.card.number=get.number(card);
},
}
},
prompt:function(links){
@ -9184,6 +9542,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
suit:'none',
number:null,
},
filterCard:function(card,player,target){
var result=true;
var suit=card.suit,number=card.number;
card.suit='none';card.number=null;
var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod!='unchanged') result=mod;
card.suit=suit;card.number=number;
return result;
},
position:'hs',
ignoreMod:true,
viewAsFilter:function(player){
return player.countCards('hs')&&!player.hasSkill('reguhuo_phase');
},
@ -9199,9 +9568,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return 6-get.value(card);
},
precontent:function(){
player.logSkill('reguhuo');
var card=event.result.cards[0];
event.result.card.suit=get.suit(card);
event.result.card.number=get.number(card);
},
prompt:'将一张牌当做【闪】使用或打出',
filterCard:true,
position:'hs',
ai:{
order:4,
},
@ -9213,6 +9586,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
suit:'none',
number:null,
},
filterCard:function(card,player,target){
var result=true;
var suit=card.suit,number=card.number;
card.suit='none';card.number=null;
var mod=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod!='unchanged') result=mod;
card.suit=suit;card.number=number;
return result;
},
ignoreMod:true,
check:function(card){
var player=_status.event.player;
var hasEnemy=game.hasPlayer(function(current){
@ -9225,12 +9608,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return 6-get.value(card);
},
precontent:function(){
player.logSkill('reguhuo');
var card=event.result.cards[0];
event.result.card.suit=get.suit(card);
event.result.card.number=get.number(card);
},
viewAsFilter:function(player){
return player.countCards('hs')&&!player.hasSkill('reguhuo_phase');
},
filterCard:true,
prompt:'将一张牌当做【无懈可击】使用',
position:'hs',
ai:{
order:4,
},
@ -9252,7 +9639,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.fake=false;
var card=trigger.cards[0];
if(card.name!=trigger.card.name||(card.name=='sha'&&(trigger.card.nature||card.nature)&&trigger.card.nature!=card.nature)) event.fake=true;
player.logSkill('reguhuo');
//player.logSkill('reguhuo');
player.line(trigger.targets,get.nature(trigger.card));
event.cardTranslate=get.translation(trigger.card.name);
trigger.card.number=get.number(card);
@ -9459,7 +9846,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
xinleiji_misa:{
audio:'xinleiji',
trigger:{player:'judgeAfter'},
trigger:{player:'judgeEnd'},
direct:true,
disableReason:['暴虐','助祭','弘仪','孤影'],
filter:function(event,player){
@ -10279,7 +10666,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_guanzhang:'old_fuhun',
xin_zhangfei:'paoxiao_re_zhangfei',
},
audioname:['re_zhangfei','guanzhang','xiahouba'],
audioname:['re_zhangfei','guanzhang','xiahouba','re_guanzhang'],
trigger:{player:'useCard1'},
forced:true,
filter:function(event,player){
@ -10351,29 +10738,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:"retishen",
},
"new_tishen2":{
audio:'retishen',
trigger:{
target:"shaUnhirt",
global:'useCardAfter',
},
filter:function (event,player){
if(get.itemtype(event.cards)!='cards') return false;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].isInPile()){
return true;
}
}
return false;
return event.card.name=='sha'&&event.targets&&event.targets.contains(player)&&!player.hasHistory('damage',evt=>evt.card==event.card)&&event.cards.filterInD('od').length;
},
forced:true,
nopop:true,
charlotte:true,
content:function (){
player.logSkill('new_tishen');
var list=[];
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].isInPile()){
list.push(trigger.cards[i]);
}
}
player.gain(list,'gain2');
player.gain(trigger.cards.filterInD('od'),'gain2');
},
},
new_qingjian:{
@ -11043,7 +11418,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(list.length){
player.chooseButton(['是否视为使用一张基本牌?',[list,'vcard']]).set('ai',function(button){
var player=_status.event.player;
var card={name:button.link[2],nature:button.link[3]};
var card={name:button.link[2],nature:button.link[3],isCard:true};
if(card.name=='tao'){
if(player.hp==1||(player.hp==2&&!player.hasShan())||player.needsToDiscard()){
return 5;
@ -11284,16 +11659,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'damageEnd'},
direct:true,
filter:function(event,player){
return (event.source&&event.source.countGainableCards(player,'he')&&event.num>0&&event.source!=player);
return (event.source&&event.source.countGainableCards(player,event.source!=player?'he':'e')&&event.num>0);
},
content:function(){
"step 0"
event.count=trigger.num;
"step 1"
event.count--;
player.gainPlayerCard(get.prompt('refankui',trigger.source),trigger.source,get.buttonValue,'he').set('logSkill',[event.name,trigger.source]);
player.gainPlayerCard(get.prompt('refankui',trigger.source),trigger.source,get.buttonValue,trigger.source!=player?'he':'e').set('logSkill',[event.name,trigger.source]);
"step 2"
if(result.bool&&event.count>0&&trigger.source.countGainableCards(player,'he')>0) event.goto(1);
if(result.bool&&event.count>0&&trigger.source.countGainableCards(player,trigger.source!=player?'he':'e')>0) event.goto(1);
},
ai:{
maixie_defend:true,
@ -13073,9 +13448,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reqiangxi:"强袭",
"reqiangxi_info":"出牌阶段对每名其他角色限一次你可以选择一项1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成一点伤害。",
rehuoji:"火计",
"rehuoji_info":"出牌阶段,你可一张红色牌当作【火攻】使用。",
rehuoji_info:"出牌阶段,你可一张红色牌当作【火攻】使用。",
rekanpo:"看破",
"rekanpo_info":"你可以将一张黑色牌当作【无懈可击】使用。",
rekanpo_info:"你可以将一张黑色牌当作【无懈可击】使用。",
reshuangxiong:"双雄",
"reshuangxiong_info":"摸牌阶段,你可以放弃摸牌。若如此做,你展示牌堆顶的两张牌并选择获得其中的一张。然后,你本回合内可以将与此牌颜色不同的一张手牌当做【决斗】使用。当你受到【决斗】造成的伤害时,你可以获得对方于此决斗中打出的所有【杀】",
"reshuangxiong2":"双雄",
@ -13084,8 +13459,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reguanxing:'观星',
reguanxing_info:'准备阶段你可以观看牌堆顶的5张牌存活角色小于4时改为3张并将其以任意顺序置于牌堆项或牌堆底若你将〖观星〗的牌都放在了牌堆底则你可以在结束阶段再次发动〖观星〗。',
reluoshen:'洛神',
reluoshen_info:'准备阶段,你可以进行判定,若结果为黑色则获得此判定牌,且可重复此流程直到出现红色的判定结果。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限',
reluoshen_info_guozhan:'准备阶段,你可以进行判定,若为黑色则可以继续判定,直到出现红色。然后你获得所有黑色的判定牌。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限(结果为黑色的判定牌于此过程中不会进入弃牌堆)',
reluoshen_info:'准备阶段,你可以进行判定,若结果为黑色则获得此判定牌,且可重复此流程直到出现红色的判定结果。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限',
reluoshen_info_guozhan:'准备阶段,你可以进行判定,若为黑色则可以继续判定,直到出现红色。然后你获得所有黑色的判定牌。你通过〖洛神〗获得的牌,不计入当前回合的手牌上限(结果为黑色的判定牌于此过程中不会进入弃牌堆)',
rejieyin:'结姻',
rejieyin_info:'出牌阶段限一次你可以选择一名男性角色并弃置一张手牌或将装备区内的一张装备牌置于其装备区你与其体力较高的角色摸一张牌体力值较低的角色回复1点体力。',
rebiyue:'闭月',
@ -13122,7 +13497,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"new_repaoxiao":"咆哮",
"new_repaoxiao_info":"锁定技,出牌阶段,你使用【杀】没有数量限制。若你于此出牌阶段内使用过【杀】,则你本回合内使用【杀】没有距离限制。",
"new_tishen":"替身",
"new_tishen_info":"出牌阶段结束时,你可以弃置你所有的锦囊牌与坐骑牌。若如此做,直到你的下个回合开始,你获得所有以你为目标且未对你造成伤害的【杀】。",
"new_tishen_info":"出牌阶段结束时,你可以弃置你所有的锦囊牌与坐骑牌。若如此做,直到你的下个回合开始,当一张【杀】结算结束后,若你是此牌目标且你未受到此牌伤害,你获得此牌对应的所有实体牌。",
"new_tishen2":"替身",
"new_tishen2_info":"",
"new_qingjian":"清俭",
@ -13232,7 +13607,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reguhuo_ally_bg:'真',
reguhuo_betray_bg:'假',
rehuashen:'化身',
rehuashen_info:'游戏开始,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。你的每个准备阶段和结束后,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技、隐匿技、使命技、主公技等特殊技能)。',
rehuashen_info:'游戏开始,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。回合开始时或回合结束时,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技、隐匿技、使命技、主公技等特殊技能)。',
rexinsheng:'新生',
rexinsheng_info:'当你受到1点伤害后你可以获得一张新的化身牌。',
re_menghuo:'界孟获',
@ -13292,7 +13667,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_xiaoqiao:'界小乔',
rehongyan:'红颜',
rehongyan_info:'锁定技,你区域内的黑桃牌和黑桃判定牌均视为红桃。当你于回合外正面朝上失去红桃牌后,若你的手牌数小于体力值,你摸一张牌。',
re_caozhi:'曹植',
re_caozhi:'手杀曹植',
reluoying:'落英',
reluoying_discard:'落英',
reluoying_judge:'落英',
@ -13641,6 +14016,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_mazhong:'界马忠',
refuman:'抚蛮',
refuman_info:'出牌阶段每名角色限一次。你可以弃置一张牌,令一名其他角色从弃牌堆中获得一张【杀】。然后其于其下个回合结束前使用或打出此牌时,你与其各摸一张牌。',
re_guanzhang:'界关兴张苞',
retongxin:'同心',
retongxin_info:'锁定技。你的攻击范围+2。',
re_wenpin:'界文聘',
rezhenwei:'镇卫',
rezhenwei_info:'当一名其他角色成为【杀】或黑色锦囊牌的目标时使用者不是你若该角色的体力值不大于你且此牌的目标角色数为1你可以弃置一张牌。若如此做你选择一项1、摸一张牌然后将此【杀】或黑色锦囊牌转移给你2、令此【杀】或黑色锦囊牌无效然后将此【杀】或黑色锦囊牌置于使用者的武将牌旁若如此做当前回合结束后使用者获得使用者武将牌旁的这些牌。',
ol_huangzhong:'界黄忠',
remoshi:'没矢',
remoshi_info:'锁定技。①当你使用【杀】对目标角色造成伤害后,若其装备区里有防具牌或坐骑牌,你将此【杀】对应的实体牌置于其武将牌上。②当有“没矢”牌的角色失去防具牌或坐骑牌后,你获得其“没矢”牌。',
dc_caozhi:'界曹植',
dcjiushi:'酒诗',
dcjiushi_info:'①当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。②当你受到伤害后,若你的武将牌于受到伤害时背面向上,你可以翻面。③当你使用【酒】后,你使用【杀】的次数上限+1直到你的下个回合结束。',
olhuoji:'火计',
olhuoji_info:'①你可以将一张红色牌当【火攻】使用。②你使用【火攻】的作用效果改为“目标角色随机展示一张手牌A然后你可以弃置一张与A颜色相同的牌对目标造成1点火属性伤害”。',
olkanpo:'看破',
olkanpo_info:'①你可以将一张黑色牌当【无懈可击】使用。②你使用的【无懈可击】不可被响应。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

View File

@ -8,7 +8,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sb_yujin:['male','wei',4,['sbxiayuan','sbjieyue']],
sb_huaxiong:['male','qun','3/4/1',['new_reyaowu','sbyangwei']],
liucheng:['female','qun',3,['splveying','spyingwu']],
sp_yangwan:['female','shu',3,['spmingxuan','spxianchou']],
sp_yangwan:['female','qun',3,['spmingxuan','spxianchou']],
sb_huangzhong:['male','shu',4,['sbliegong']],
sb_lvmeng:['male','wu',4,['sbkeji','sbdujiang']],
sb_sunshangxiang:['female','shu',4,['sbjieyin','sbliangzhu','sbxiaoji']],
@ -25,17 +25,665 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sb_xuhuang:['male','wei',4,['sbduanliang','sbshipo']],
sb_zhangfei:['male','shu',4,['sbpaoxiao','sbxieji']],
sb_zhaoyun:['male','shu',4,['sblongdan','sbjizhu']],
sb_liubei:['male','shu',4,['sbrende','sbzhangwu','sbjijiang'],['zhu']],
sb_jiangwei:['male','shu',4,['sbtiaoxin','sbzhiji']],
sb_fazheng:['male','shu',3,['sbxuanhuo','sbenyuan'],['unseen']],
},
characterSort:{
sb:{
sb_zhi:['sb_sunquan','sb_zhouyu','sb_zhangjiao','sb_caocao','sb_zhenji'],
sb_shi:['sb_xuhuang','sb_machao'],
sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei'],
sb_zhi:['sb_sunquan','sb_zhouyu','sb_zhangjiao','sb_caocao','sb_zhenji','sb_liubei'],
sb_shi:['sb_xuhuang','sb_machao','sb_fazheng'],
sb_tong:['liucheng','sp_yangwan','sb_xiahoushi','sb_zhangfei','sb_zhaoyun'],
sb_yu:['sb_yujin','sb_lvmeng','sb_huangzhong','sb_huanggai','sb_zhouyu','sb_caoren','sb_ganning'],
sb_neng:['sb_huaxiong','sb_sunshangxiang'],
sb_neng:['sb_huaxiong','sb_sunshangxiang','sb_jiangwei'],
}
},
skill:{
//法正
sbxuanhuo:{
audio:2,
enable:'phaseUse',
usable:1,
group:'sbxuanhuo_rob',
filterTarget:function(card,player,target){
return !target.hasMark('sbxuanhuo_mark')&&player!=target;
},
filterCard:true,
position:'he',
discard:false,
lose:false,
delay:false,
check:function(card){
return 6.5-get.value(card);
},
content:function(){
'step 0'
player.give(cards,target);
'step 1'
target.addMark('sbxuanhuo_mark');
var history=target.getAllHistory('lose');
if(history.length){
history[history.length-1].sbxuanhuo_mark=true;
}
},
getNum:function(current,skill){
var num=0;
var history=current.getAllHistory('lose');
if(history.length){
for(var i=history.length-1;i>=0;i--){
var evt=history[i];
if(evt.sbxuanhuo_mark) break;
if(typeof skill=='string'){
if(evt.getParent(2).name==skill) num+=evt.cards2.length;
}
else{
var evtx=evt.getParent(),player=skill;
if(evtx.name=='gain'){
var cards=evtx.cards;
if(evtx.player==player&&cards.length>0) num+=cards.length;
}
else if(evtx.name=='loseAsync'){
if(evtx.type!='gain'||evtx.giver) return false;
var cards=evtx.getl(current).cards2;
var cardsx=evtx.getg(player);
if(cardsx.length>0) num+=cardsx.length;
}
}
}
}
return num;
},
ai:{
order:9,
result:{
target:function(player,target){
return -Math.sqrt(Math.max(target.hp,1));
}
}
},
subSkill:{
mark:{
marktext:'眩',
intro:{
name:'眩惑',
name2:'眩',
markcount:()=>0,
content:'已获得“眩”标记',
}
},
rob:{
audio:'sbxuanhuo',
trigger:{
global:['gainAfter','loseAsyncAfter'],
},
forced:true,
locked:false,
direct:true,
filter:function(event,player){
var evt=event.getParent('phaseDraw');
if(evt&&evt.name=='phaseDraw') return false;
return game.hasPlayer(current=>{
if(!event.getg(current).length||!current.hasMark('sbxuanhuo_mark')) return false;
if(evt&&evt.player==current) return false;
if(lib.skill.sbxuanhuo.getNum(current,'sbxuanhuo_rob')>=5) return false;
return current.hasCard(card=>lib.filter.canBeGained(card,current,player),'he');
});
},
content:function(){
'step 0'
var evt=trigger.getParent('phaseDraw');
var targets=game.filterPlayer(current=>{
if(!trigger.getg(current).length||!current.hasMark('sbxuanhuo_mark')) return false;
if(evt&&evt.player==current) return false;
if(lib.skill.sbxuanhuo.getNum(current,'sbxuanhuo_rob')>=5) return false;
return current.hasCard(card=>lib.filter.canBeGained(card,current,player),'he');
});
event.targets=targets;
'step 1'
var target=targets.shift();
player.logSkill('sbxuanhuo',target);
var hs=target.getCards('h',card=>lib.filter.canBeGained(card,target,player));
if(hs.length) player.gain(hs.randomGet(),target,'giveAuto');
if(targets.length>0) event.redo();
},
}
}
},
sbenyuan:{
audio:2,
forced:true,
direct:true,
trigger:{player:'phaseZhunbeiBegin'},
filter:function(event,player){
return game.hasPlayer(current=>current.hasMark('sbxuanhuo_mark'));
},
content:function(){
'step 0'
var targets=game.filterPlayer(current=>current.hasMark('sbxuanhuo_mark'));
event.targets=targets;
'step 1'
var target=targets.shift();
event.target=target;
player.logSkill('sbenyuan',target);
target.removeMark('sbxuanhuo_mark',target.countMark('sbxuanhuo_mark'));
var num=lib.skill.sbxuanhuo.getNum(target,player);
if(num>=3){
player.chooseCard('恩怨:交给'+get.translation(target)+'两张牌',true,2,'he');
}
else{
target.loseHp();
player.recover();
event.goto(3);
}
'step 2'
if(result.bool) player.give(result.cards,target);
'step 3'
if(targets.length) event.goto(1);
}
},
//姜维
sbtiaoxin:{
audio:2,
enable:'phaseUse',
usable:1,
chargeSkill:true,
filter:function(event,player){
return player.hasMark('charge');
},
filterTarget:lib.filter.notMe,
selectTarget:function(){
return [1,_status.event.player.countMark('charge')];
},
multiline:true,
group:'sbtiaoxin_backflow',
content:function(){
'step 0'
target.chooseToUse(function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},'挑衅:对'+get.translation(player)+'使用一张杀,或交给其一张牌').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
return lib.filter.filterTarget.apply(this,arguments);
}).set('sourcex',player);
'step 1'
if(!result.bool&&target.countCards('he')>0){
target.chooseCard('he','交给'+get.translation(player)+'一张牌',true);
}
else event.finish();
'step 2'
if(result.bool){
target.give(result.cards,player);
}
},
contentAfter:function(){
player.removeMark('charge',targets.length);
},
ai:{
threaten:1.2,
order:4,
expose:0.2,
result:{
target:function(player,target){
if(target.countGainableCards(player,'he')==0) return 0;
return -1;
},
player:function(player,target){
if(!target.canUse('sha',player)) return 0;
if(target.countCards('h')==0) return 0;
if(target.countCards('h')==1) return -0.1;
if(player.hp<=2) return -2;
if(player.countCards('h','shan')==0) return -1;
return -0.5;
}
},
},
subSkill:{
backflow:{
audio:'sbtiaoxin',
trigger:{
player:['loseAfter','enterGame'],
global:['loseAsyncAfter','phaseBefore']
},
forced:true,
filter:function(event,player){
if(player.countMark('charge')>=4) return false;
if(event.name.indexOf('lose')==0){
if(event.type!='discard') return false;
var evt=event.getParent('phaseDiscard');
return evt&&evt.player==player&&event.getl(player).cards2.length>0;
}
else{
return (event.name!='phase'||game.phaseNumber==0);
}
},
content:function(){
var num=Math.min(4-player.countMark('charge'),trigger.name.indexOf('lose')==0?trigger.getl(player).cards2.length:2);
if(num>0) player.addMark('charge',num);
}
}
}
},
sbzhiji:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
juexingji:true,
forced:true,
skillAnimation:true,
animationColor:'fire',
filter:function(event,player){
var len=0;
player.getAllHistory('useSkill',evt=>{
if(evt.skill!='sbtiaoxin') return false;
len+=evt.targets.length;
});
return len>=5;
},
content:function(){
'step 0'
player.awakenSkill('sbzhiji');
player.loseMaxHp();
'step 1'
player.chooseTarget('志继:是否令任意名角色获得“北伐”标记?',[1,Infinity]).set('ai',target=>-get.attitude(player,target));
'step 2'
if(result.bool){
player.line(result.targets,'fire');
result.targets.forEach(target=>{
target.addAdditionalSkill('sbzhiji_'+player.playerid,'sbzhiji_beifa');
target.markAuto('sbzhiji_beifa',[player]);
});
player.addTempSkill('sbzhiji_clear',{player:'phaseBegin'});
if(!event.isMine()&&!event.isOnline()) game.delayx();
}
},
subSkill:{
beifa:{
charlotte:true,
mark:true,
marktext:'伐',
intro:{
name:'北伐',
name2:'北伐',
content:'使用牌只能指定$和自己为目标',
},
mod:{
playerEnabled:function(card,player,target){
if(player!=target&&player.getStorage('sbzhiji_beifa').contains(target)) return false;
}
}
},
clear:{
charlotte:true,
onremove:function(player){
game.countPlayer(function(current){
current.removeAdditionalSkill('sbzhiji_'+player.playerid);
});
}
}
}
},
//刘备
sbrende:{
audio:3,
enable:['chooseToUse','chooseToRespond'],
filter:function(event,player){
if(event.type=='wuxie'||player.hasSkill('sbrende_used')) return false;
if(player.countMark('sbrende')<2) return false;
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
var card={name:name,isCard:true};
if(event.filterCard(card,player,event)) return true;
if(name=='sha'){
for(var nature of lib.inpile_nature){
card.nature=nature;
if(event.filterCard(card,player,event)) return true;
}
}
}
return false;
},
group:'sbrende_give',
chooseButton:{
dialog:function(event,player){
var dialog=ui.create.dialog('仁德');
if(event.type=='phase'){
dialog._chosenOpt=[];
var table=document.createElement('div');
table.classList.add('add-setting');
table.style.margin='0';
table.style.width='100%';
table.style.position='relative';
var list=['视为使用基本牌','交给其他角色牌'];
for(var i of list){
var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
td.innerHTML='<span>'+i+'</span>';
td.link=i;
if(i==list[0]){
td.classList.add('bluebg');
dialog._chosenOpt.add(td);
}
td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){
if(_status.dragged) return;
if(_status.clicked) return;
if(_status.justdragged) return;
_status.tempNoButton=true;
_status.clicked=true;
setTimeout(function(){
_status.tempNoButton=false;
},500);
var link=this.link;
if(link=='交给其他角色牌') game.uncheck();
var current=this.parentNode.querySelector('.bluebg');
if(current){
current.classList.remove('bluebg');
dialog._chosenOpt.remove(current);
}
dialog._chosenOpt.add(this);
this.classList.add('bluebg');
game.check();
});
table.appendChild(td);
dialog.buttons.add(td);
}
dialog.content.appendChild(table);
}
var cards=[];
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
var card={name:name,isCard:true};
if(event.filterCard(card,player,event)) cards.push(['基本','',name]);
if(name=='sha'){
for(var nature of lib.inpile_nature){
card.nature=nature;
if(event.filterCard(card,player,event)) cards.push(['基本','',name,nature]);
}
}
}
dialog.add([cards,'vcard'])
return dialog;
},
check:function(button,player){
if(typeof button.link=='string') return -1;
if(_status.event.getParent().type!='phase') return 1;
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
},
select:function(){
var opts=_status.event.dialog._chosenOpt;
return opts&&opts.length&&opts[0].link=='交给其他角色牌'?0:1;
},
backup:function(links,player){
var isUse=links.length==1;
var backup=get.copy(lib.skill['sbrende_'+(isUse?'use':'give')]);
if(isUse) backup.viewAs={name:links[0][2],nature:links[0][3],isCard:true};
return backup;
},
prompt:function(links,player){
var isUse=links.length==1;
return (isUse?('移去2枚“仁望”视为使用或打出'+(get.translation(links[0][3])||'')+get.translation(links[0][2]))
:'###仁德###出牌阶段每名角色限一次。你可以将任意张牌交给一名其他角色然后你获得等量“仁望”标记至多为8');
}
},
hiddenCard:function(player,name){
return get.type(name)=='basic'&&player.countMark('sbrende')>1&&player.hasSkill('sbrende_used');
},
marktext:'仁',
intro:{
name:'仁望',
name2:'仁望',
content:'mark',
},
ai:{
respondSha:true,
respondShan:true,
skillTagFilter:function(player){
return player.countMark('sbrende')>0&&!player.hasSkill('sbrende_used');
},
order:function(item,player){
if(lib.skill.sbzhangwu.ai.result.player(player)>0) return 9.1;
return 0.5;
},
result:{
player:function(player){
if(_status.event.dying){
return get.attitude(player,_status.event.dying);
}
return _status.event.type=='phase'&&player.countMark('sbrende')<=2?0:1;
},
},
},
subSkill:{
backup:{},
used:{charlotte:true},
given:{onremove:true},
use:{
audio:'sbrende',
filterCard:()=>false,
selectCard:-1,
popname:true,
precontent:function(){
player.logSkill('sbrende_use');
delete event.result.skill;
player.removeMark('sbrende',2);
player.addTempSkill('sbrende_used');
}
},
give:{
audio:'sbrende',
enable:'phaseUse',
filterCard:true,
selectCard:[1,Infinity],
position:'he',
discard:false,
lose:false,
delay:false,
filter:function(event,player){
return player.countMark('sbrende')<2||player.hasSkill('sbrende_used');
},
filterTarget:function(card,player,target){
if(player.getStorage('sbrende_given').contains(target)) return false;
return player!=target;
},
prompt:function(event){
return '出牌阶段每名角色限一次。你可以将任意张牌交给一名其他角色然后你获得等量“仁望”标记至多为8';
},
check:function(card){
var player=get.owner(card);
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0;
if(ui.selected.cards.length+player.countMark('sbrende')>8) return 0;
if(!ui.selected.cards.length&&card.name=='du') return 20;
if(ui.selected.cards.length>=Math.max(2,player.countCards('he')-player.hp)) return 0;
if(player.countCards('he')<=1){
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(players[i].hasSkill('haoshi')&&
!players[i].isTurnedOver()&&
!players[i].hasJudge('lebu')&&
get.attitude(player,players[i])>=3&&
get.attitude(players[i],player)>=3){
return 11-get.value(card);
}
}
if(player.countCards('he')>player.hp) return 10-get.value(card);
if(player.countCards('he')>2) return 6-get.value(card);
return -1;
}
return 18-(ui.selected.cards.length+player.countMark('sbrende'))-get.value(card);
},
content:function(){
player.addTempSkill('sbrende_given','phaseUseAfter');
player.markAuto('sbrende_given',[target]);
player.give(cards,target);
var num=Math.min(8-player.countMark('sbrende'),cards.length);
if(num>0) player.addMark('sbrende',num);
},
ai:{
order:function(skill,player){
return player.countMark('sbrende')<2?6.8:5.8;
},
result:{
target:function(player,target){
if(!player.hasFriend()&&player.hasSkill('sbzhangwu')&&ui.selected.cards.length&&
get.value(ui.selected.cards[0])<(lib.skill.sbzhangwu.filterTarget(null,player,target)?3:5)) return -0.1;
if(target.hasSkillTag('nogain')) return 0;
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
if(target.hasSkillTag('nodu')) return 0;
return -10;
}
if(target.hasJudge('lebu')) return 0;
var nh=target.countCards('h');
return Math.max(1,5-nh);
}
},
threaten:1.1
},
}
},
},
sbzhangwu:{
audio:2,
enable:'phaseUse',
skillAnimation:'epic',
animationColor:'legend',
limited:true,
filter:function(event,player){
if(game.roundNumber<=1) return false;
if(!game.hasPlayer(current=>lib.skill.sbzhangwu.filterTarget(null,player,current))) return false;
return true;
},
filterTarget:function(card,player,target){
if(target==player) return false;
return game.hasPlayer2(current=>{
return current.hasAllHistory('useSkill',evt=>{
if(evt.skill!='sbrende_give') return false;
var targets=evt.targets;
if(targets.contains(target)) return true;
return false;
});
})
},
selectTarget:-1,
multiline:true,
content:function(){
'step 0'
player.awakenSkill('sbzhangwu');
var num=Math.min(game.roundNumber-1,3);
var cards=target.getCards('he'),count=cards.length;
if(count==0) event.finish();
else if(count<=num) event._result={bool:true,cards:cards};
else target.chooseCard('章武:交给'+get.translation(player)+get.cnNumber(num)+'张牌',true,'he',num);
'step 1'
if(result.bool){
target.give(result.cards,player);
}
},
contentAfter:function(){
'step 0'
player.gainMaxHp();
'step 1'
player.removeSkill('sbrende');
game.log(player,'失去了技能','#g【'+get.translation('sbrende')+'】');
game.delayx();
},
ai:{
order:9,
combo:'sbrende',
result:{
player:function(player,target){
var targets=game.filterPlayer(current=>lib.skill.sbzhangwu.filterTarget(null,player,current));
if(!targets) return 0;
var eff=0;
for(var target of targets){
eff+=get.effect(target,{name:'shunshou_copy2'},player,player);
}
return eff>15?1:0;
},
}
}
},
sbjijiang:{
audio:2,
trigger:{player:'phaseUseEnd'},
zhuSkill:true,
unique:true,
direct:true,
filter:function(event,player){
if(!player.hasZhuSkill('sbjijiang')) return false;
return game.hasPlayer(current=>{
if(current.group!='shu'||player==current||current.hp<player.hp) return false;
return game.hasPlayer(currentx=>current.inRange(currentx));
});
},
content:function(){
'step 0'
var next=player.chooseTarget(get.prompt2('sbjijiang'),2);
next.set('filterTarget',(card,player,target)=>{
if(!ui.selected.targets.length) return true;
var current=ui.selected.targets[0];
if(current.group=='shu'&&current.hp>=player.hp&&current!=player){
return current.inRange(target);
}
else{
return target.group=='shu'&&target.hp>=player.hp&&target.inRange(current)&&target!=player;
}
})
next.set('targetprompt',target=>{
var player=_status.event.player;
if(target.group=='shu'&&target.hp>=player.hp&&target!=player&&!ui.selected.targets.some(i=>{
return i!=target&&i.hp>=player.hp&&i.group=='shu';
})) return '进行选择';
return '出杀对象';
});
next.set('ai',target=>{
var player=_status.event.player;
if(ui.selected.targets.length){
var current=ui.selected.targets[0];
if(current.group=='shu'&&current.hp>=player.hp){
return -get.attitude(player,target);
}
return Math.abs(get.attitude(player,current));
}
else{
if(target.group=='shu'&&target.hp>=player.hp&&game.hasPlayer(current=>{
return get.attitude(player,current)<0;
})) return 10;
return 1;
}
})
'step 1'
if(result.bool){
var targets=result.targets;
event.targets=targets;
if(targets[0].group!='shu'||targets[0].hp<player.hp) targets.reverse();
player.logSkill('sbjijiang',targets,false);
player.line2(targets);
var choiceList=[
'视为对'+get.translation(targets[1])+'使用一张【杀】',
'你的下一个出牌阶段开始前,跳过此阶段'
];
targets[0].chooseControl().set('choiceList',choiceList).set('ai',()=>{
return _status.event.choice;
}).set('choice',get.effect(targets[1],{name:'sha'},targets[0],targets[0])>get.effect(targets[0],{name:'lebu'},targets[0],targets[0])?0:1);
}
else event.finish();
'step 2'
if(result.index==0){
targets[0].useCard({name:'sha',isCard:true},targets[1],false);
}
else{
targets[0].addSkill('sbjijiang_skip');
}
},
subSkill:{
skip:{
trigger:{player:'phaseUseBefore'},
charlotte:true,
forced:true,
content:function(){
trigger.cancel();
player.removeSkill('sbjijiang_skip');
}
},
}
},
//赵云
sblongdan:{
audio:2,
@ -112,9 +760,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
hiddenCard:function(player,name){
if(get.type(name)!='basic'||!player.hasSkill('charge')) return false;
if(!marked&&name!='sha'&&name!='shan') return false;
if(get.type(name)!='basic'||!player.hasMark('charge')) return false;
var marked=player.hasSkill('sblongdan_mark',null,null,false);
if(!marked&&name!='sha'&&name!='shan') return false;
return player.hasCard(lib.skill.sblongdan.getFilter(name,player),'hs');
},
ai:{
@ -148,7 +796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mark:{charlotte:true},
draw:{
charlotte:true,
trigger:{player:'useCardAfter'},
trigger:{player:['useCardAfter','respondAfter']},
forced:true,
popup:false,
filter:function(event,player){
@ -228,7 +876,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
mod:{
cardUsable:function(card){
if(card.name=='sha') return true;
if(card.name=='sha') return Infinity;
},
targetInRange:function(card,player,target){
if(card.name=='sha'&&player.getEquip(1)) return true;
@ -707,8 +1355,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else {
trigger.target.loseToDiscardpile(cards);
trigger.targets.remove(player);
trigger.getParent().triggeredTargets2.remove(player);
trigger.targets.remove(trigger.target);
trigger.getParent().triggeredTargets2.remove(trigger.target);
trigger.untrigger();
}
},
@ -1076,6 +1724,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:'enterGame',
},
forced:true,
locked:false,
group:'sbguidao_defend',
filter:function(event,player){
if(player.countMark('sbguidao')>=8) return false;
@ -1149,15 +1798,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhuSkill:true,
filter:function(event,player){
if(!player.hasZhuSkill('sbhuangtian')||!player.hasSkill('sbguidao',null,false,false)) return false;
if(player==event.source||event.source.group!='qun') return false;
if(!event.source||player==event.source||event.source.group!='qun') return false;
if(player.hasSkill('sbguidao')&&player.countMark('sbguidao')>=8) return false;
if(player.countMark('sbhuangtian_count')>999) return false;
// if(player.countMark('sbhuangtian_count')>999) return false;
return true;
},
content:function(){
player.addMark('sbguidao',1);
player.addTempSkill('sbhuangtian_count','roundStart');
player.addMark('sbhuangtian_count',1,false);
// player.addTempSkill('sbhuangtian_count','roundStart');
// player.addMark('sbhuangtian_count',1,false);
}
},
count:{onremove:true}
@ -1267,11 +1916,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filterCard:true,
selectCard:[1,2],
check:function(card){
if(ui.selected.cards.length+_status.event.player.hujia>=5) return 0;
return 6.5-get.value(card);
},
position:'he',
group:['sbjushou_damage','sbjushou_draw'],
content:function(){
player.turnOver();
player.changeHujia(cards.length);
player.changeHujia(cards.length,null,true);
},
ai:{
order:5,
@ -1305,7 +1958,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.turnOver();
}
else {
player.changeHujia(1);
player.changeHujia(1,null,true);
}
},
ai:{
@ -1440,7 +2093,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.claimSuit=lib.skill.sbfanjian_backup.suit;
event.cardSuit=suit;
player.addTempSkill('sbfanjian_guessed');
player.markAuto('sbfanjian_guessed',[suit]);
var claim=get.translation(event.claimSuit+'2');
player.chat('我声明'+claim);
game.log(player,'声明了','#y'+claim);
@ -1449,13 +2101,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player,user=_status.event.getParent().player,claim=_status.event.getParent().claimSuit,suit=_status.event.getParent().cardSuit;
if(player.isTurnedOver()) return 2;
var lose=get.effect(player,{name:'losehp'},user,player);
if(user.getStorage('sbfanjian_guessed').contains(claim)&&claim==suit) return lose>0?0:1;
if(user.getStorage('sbfanjian_guessed').contains(claim)&&claim==suit) return lose<=0?0:1;
if(get.attitude(player,user)>0) return 0;
var list=[0,1];
if(player.hp<=1&&player.getFriends().length>0) list.push(2);
return list.randomGet();
});
'step 1'
player.markAuto('sbfanjian_guessed',[event.cardSuit]);
if(result.index==2){
game.log(target,'选择','#y不猜测');
target.chat('不猜!');
@ -1521,13 +2174,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
position:'he',
filterTarget:lib.filter.notMe,
ai1:function(card){
if(player.hp<=1&&!player.canSave(player)) return 0;
if(get.value(card,player)>=5&&!game.hasPlayer(current=>{
if(player.hp<=1&&!player.canSave(player)||player.hujia>=5) return 0;
if(get.value(card,player)>6&&!game.hasPlayer(current=>{
return current!=player&&get.attitude(current,player)>0&&!current.hasSkillTag('nogain');
})) return 0;
if(player.hp>=2&&(card.name=='tao'||(card.name=='jiu'&&player.countCards('hs',cardx=>{
return cardx!=card&&get.tag(cardx,'save');
})))) return 10;
})))&&player.hujia<=1) return 10;
if(player.hp<=1&&!player.canSave(player)) return 0;
return 1/Math.max(0.1,get.value(card));
},
@ -1538,7 +2191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
att*=val>=0?1:-1;
}
if(target.hasSkillTag('nogain')) att/=9;
return 4+att;
return 15+att;
},
});
'step 1'
@ -1556,13 +2209,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
locked:false,
filter:function(event,player){
return player.isIn();
return player.isIn()&&player.hujia<5;
},
content:function(){
'step 0'
event.count=trigger.num;
'step 1'
player.changeHujia(2);
player.changeHujia(2,null,true);
'step 2'
if(--event.count>0){
player.logSkill('sbkurou_gain');
@ -1577,7 +2230,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 1.2;
}
if(get.tag(card,'loseHp')){
if(target.hp<=1) return;
if(target.hp<=1||target.hujia>=5) return;
return [1,1];
}
}
@ -1697,7 +2350,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
onremove:true,
content:function(){
'step 0'
player.chooseControl('变化','不变').set('prompt','统业:猜测场上装备数是否于你下回合准备阶段前发生变化').set('ai',()=>(game.countPlayer()<=4?Math.random():1)<0.4?0:1);
player.chooseControl('变化','不变').set('prompt','统业:猜测场上装备数是否于你下回合准备阶段前发生变化').set('ai',()=>(game.countPlayer()<=4?Math.random():1)<0.4);
'step 1'
if(result.control=='变化'){
player.addSkill('sbtongye_change',1);
@ -1856,7 +2509,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
if(result.bool){
target.give(result.cards,player);
target.changeHujia(1);
target.changeHujia(1,null,true);
event.goto(4);
}else{
if(!game.hasPlayer(current=>current!=player&&current!=target)||target.hasSkill('sbjieyin_marked')) event._result={bool:false};
@ -1884,6 +2537,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
subSkill:{
fail:{
audio:'sbjieyin',
trigger:{global:'dieAfter'},
dutySkill:true,
forced:true,
@ -1898,7 +2552,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.log(player,'使命失败');
player.changeGroup('wu');
player.recover();
player.gain(player.getExpansions('sbliangzhu'),'gain2','fromStorage');
player.gain(player.getExpansions('sbliangzhu'),'gain2');
player.loseMaxHp();
}
},
@ -2069,16 +2723,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
check:function(card){
var player=_status.event.player;
if(_status.event.player.hp==1&&player.canSave(player)) return 0;
if(_status.event.player.hp==1&&player.canSave(player)&&player.hujia<=3) return 0;
return 6-get.value(card);
},
content:function(){
if(cards.length){
player.changeHujia(1);
player.changeHujia(1,null,true);
player.addTempSkill('sbkeji_discard','phaseUseAfter');
}else{
}
else{
player.loseHp();
player.changeHujia(2);
player.changeHujia(2,null,true);
player.addTempSkill('sbkeji_losehp','phaseUseAfter');
}
},
@ -2097,6 +2752,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
order:1,
result:{
player:function(player,target){
if(player.hujia>=5) return 0;
if(player.hp==1&&!player.canSave(player)&&!player.hasCard(card=>{
return lib.filter.cardDiscardable(card,player,'sbkeji')&&get.value(card)<6;
},'h')){
@ -2137,6 +2793,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
check:function(event,player){
return event.target.countGainableCards(player,'he')>0||player.countCards('hs',{name:'sha'})>0;
},
logTarget:'target',
content:function(){
'step 0'
player.changeHujia(-1);
@ -2192,8 +2849,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(result.bool){
var target=trigger.player;
player.logSkill('sbxiayuan',target);
target.changeHujia(trigger.hujia);
target.changeHujia(trigger.hujia,null,true);
game.delayx();
}
else player.removeSkill('sbxiayuan_round');
@ -2215,7 +2871,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var target=result.targets[0];
event.target=target;
player.logSkill('sbjieyue',target);
target.changeHujia(1);
target.changeHujia(1,null,true);
target.chooseCard('he','是否交给'+get.translation(player)+'一张牌?').set('ai',(card)=>0.1-get.value(card));
}
else event.finish();
@ -2485,6 +3141,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
player.removeMark('splveying',2);
player.draw();
player.chooseUseTarget('sha',false);
},
ai:{combo:'splveying'},
@ -2662,7 +3319,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
splveying:'掠影',
splveying_info:'锁定技。①每回合限两次当你使用【杀】指定目标后你获得一个“椎”。②当你使用的【杀】结算结束后若你的“椎”数大于1则你弃置两个“椎”然后弃置所有目标角色的各一张手牌。',
spyingwu:'莺舞',
spyingwu_info:'若你拥有〖掠影〗①每回合限两次当你使用非伤害类普通锦囊牌指定目标后你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后若你的“椎”数大于1则你弃置两个“椎”,然后可以视为使用一张【杀】。',
spyingwu_info:'若你拥有〖掠影〗①每回合限两次当你使用非伤害类普通锦囊牌指定目标后你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后若你的“椎”数大于1则你弃置两个“椎”并摸一张牌,然后可以视为使用一张【杀】。',
sb_huangzhong:'谋黄忠',
sbliegong:'烈弓',
sbliegong_info:'①若你的装备区内没有武器牌则你手牌区内所有【杀】的属性视为无属性。②当你使用牌时或成为其他角色使用牌的目标后你记录此牌的花色。③当你使用【杀】指定唯一目标后若你〖烈弓②〗的记录不为空则你可亮出牌堆顶的X张牌X为你〖烈弓②〗记录过的花色数-1令此【杀】的伤害值基数+YY为亮出牌中被〖烈弓②〗记录过花色的牌的数量且目标角色不能使用〖烈弓②〗记录过花色的牌响应此【杀】。此【杀】使用结算结束后你清除〖烈弓②〗的记录。',
@ -2721,7 +3378,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sbguidao:'鬼道',
sbguidao_info:'①游戏开始时你获得4枚“道兵”标记。②“道兵”上限为8。③一名角色受到属性伤害后你获得2枚“道兵”。④当你受到伤害时你可以弃2枚“道兵”并防止此伤害。然后若当前回合角色不为你〖鬼道③〗于你下回合开始前无效。',
sbhuangtian:'黄天',
sbhuangtian_info:'主公技锁定技。①回合开始时若本回合为你的第一个回合且游戏轮数为1且游戏内没有【太平要术】你装备【太平要术】。②其他群势力角色造成伤害后若你于本轮因〖黄天②〗获得的“道兵”数不超过999且你有〖鬼道〗你获得1枚“道兵”。',
sbhuangtian_info:'主公技锁定技。①回合开始时若本回合为你的第一个回合且游戏轮数为1且游戏内没有【太平要术】你装备【太平要术】。②其他群势力角色造成伤害后若你有〖鬼道〗你获得1枚“道兵”。',
sb_caocao:'谋曹操',
sbjianxiong:'奸雄',
sbjianxiong_info:'①游戏开始时你可获得至多2枚“治世”标记。②当你受到伤害后你可获得伤害牌摸1-X张牌X为“治世”数然后你可弃1枚“治世”。',
@ -2747,7 +3404,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sbshipo_info:'结束阶段你可以令一名体力少于你的角色或所有判定区有【兵粮寸断】的其他角色选择一项1.交给你一张手牌2.受到1点伤害。所有目标角色选择完成后你可以将任意张你以此法获得的牌交给一名其他角色。',
sb_zhangfei:'谋张飞',
sbpaoxiao:'咆哮',
sbpaoxiao_info:'锁定技。①你使用【杀】无距离限制。②若你的装备区内有武器牌,则你使用【杀】无距离限制。③当你于出牌阶段内使用第二张及以后【杀】时,你获得如下效果:{此【杀】不可被响应且伤害值基数+1此【杀】指定目标后目标角色的非锁定技于本回合内失效此【杀】造成伤害后若目标角色存活则你失去1点体力并随机弃置一张手牌。}',
sbpaoxiao_info:'锁定技。①你使用【杀】无次数限制。②若你的装备区内有武器牌,则你使用【杀】无距离限制。③当你于出牌阶段内使用第二张及以后【杀】时,你获得如下效果:{此【杀】不可被响应且伤害值基数+1此【杀】指定目标后目标角色的非锁定技于本回合内失效此【杀】造成伤害后若目标角色存活则你失去1点体力并随机弃置一张手牌。}',
sbxieji:'协击',
sbxieji_info:'准备阶段开始时你可以和一名其他角色进行协力。其的下个结束阶段开始时若你与其协力成功则你可以选择至多三名其他角色。你对这些角色视为使用一张【杀】且当此【杀】因执行牌面效果造成伤害后你摸X张牌X为伤害值。',
sb_zhaoyun:'谋赵云',
@ -2757,6 +3414,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sbjizhu_info:'准备阶段开始时,你可以和一名其他角色进行协力。其的下个结束阶段开始时,若你与其协力成功,则你修改〖龙胆〗直到你的下个结束阶段开始。',
sblongdan_shabi:'龙胆',
sblongdan_shabi_info:'蓄力技1/3。①你可以消耗1点蓄力值将一张基本牌当做任意基本牌使用或打出然后摸一张牌。②一名角色的回合结束时你获得1点蓄力值。',
sb_liubei:'谋刘备',
sbrende:'仁德',
sbrende_info:'①出牌阶段每名角色限一次。你可以将任意张牌交给一名其他角色然后你获得等量“仁望”标记至多为8。②每回合限一次。你可以移去2枚“仁望”视为使用或打出一张基本牌。',
sbzhangwu:'章武',
sbzhangwu_info:'限定技。出牌阶段你可以令所有于本局游戏成为过〖仁德①〗目标的其他角色依次交给你X张牌然后你加1点体力上限失去〖仁德〗X为游戏轮数-1且至多为3。',
sbjijiang:'激将',
sbjijiang_info:'主公技。出牌阶段结束时你可以选择一名体力值不小于你的其他蜀势力角色A和一名在A攻击范围内的角色B。A选择一项1.视为对B使用一张【杀】2.下一个出牌阶段开始前,跳过此阶段。',
sb_jiangwei:'谋姜维',
sbtiaoxin:'挑衅',
sbtiaoxin_info:'蓄力技2/4。①出牌阶段限一次。你可以选择至多X名角色X为你的蓄力值令这些角色选择一项1.对你使用一张【杀】2.交给你一张牌。然后你消耗等同于你选择的目标数的蓄力值。②当你于弃牌阶段弃置牌后,你获得等量蓄力值。',
sbzhiji:'志继',
sbzhiji_info:'觉醒技。准备阶段若你发动〖挑衅①〗选择过共计5个目标你减1点体力上限令任意名角色获得“北伐”标记并获得如下效果直到你的下回合开始其使用牌只能指定你或其为目标。',
sb_fazheng:'谋法正',
sbxuanhuo:'眩惑',
sbxuanhuo_info:'①出牌阶段限一次。你可以将一张牌交给一名没有“眩”标记的其他角色然后令其获得“眩”标记。②当有“眩”的其他角色于摸牌阶段外获得牌后若你以此法于其本次获得“眩”的期间内获得其的牌数小于5你随机获得其一张手牌。',
sbenyuan:'恩怨',
sbenyuan_info:'锁定技。准备阶段若场上存在有“眩”的角色你移去该角色的“眩”且你于其本次获得“眩”的期间内获得其的牌数不小于3你交给其两张牌小于3其失去1点体力你回复1点体力。',
sb_zhi:'谋攻篇·知',
sb_shi:'谋攻篇·识',

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan"],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"],
sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan','zhangzhi'],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong'],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng'],
sp_liesi:['mizhu','weizi','ol_liuba'],
sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
@ -28,6 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
macheng:['male','shu',4,['mashu','olchenglie']],
zhangzhi:['male','qun',3,['olbixin','olximo']],
ol_liuba:['male','shu',3,['oltongduo','olzhubi']],
ol_furong:['male','shu',4,['olxiaosi']],
@ -182,6 +183,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//kaisa:["male","western",4,["zhengfu"]],
},
characterIntro:{
macheng:'马承,蜀汉骠骑将军马超之子。仕蜀汉,马超死后继承其斄乡侯爵位。',
zhangzhi:'张芝—192年字伯英敦煌郡渊泉县今甘肃省瓜州县人。东汉书法家、“草书之祖”大司农张奂的儿子。出身名门拒绝朝廷征召潜心研习书法。擅长草书中的章草将古代当时字字区别、笔画分离的草法改为上下牵连富于变化的新写法富有独创性在当时影响很大。李志敏评价“张芝创造了草书问世以来的第一座高峰精熟神妙兼善章今”。 没有真迹传世,仅存《八月帖》等刻帖。汉献帝初平三年,去世于家中,著有《笔心论》,与钟繇、王羲之和王献之并称“书中四贤”。',
ahuinan:'阿会喃,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第三洞元帅;与董荼那等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同董荼那共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。',
xiahouxuan:'夏侯玄209年254年字泰初《三国志》等作太初沛国谯县今安徽省亳州市人。三国时期曹魏大臣、思想家、文学家征南大将军夏侯尚之子大将军曹爽的表弟。夏侯玄少年有名望仪表出众时人称为“朗朗如日月之入怀”。魏文帝黄初六年225年袭封昌陵乡侯。魏明帝时历任散骑黄门侍郎、羽林监。少帝曹芳继位后拜散骑常侍、中护军保卫皇宫。后任征西将军任内与曹爽策划骆谷之役大失人心。高平陵政变后被夺去兵权改任大鸿胪、太常卿。嘉平六年254年中书令李丰与外戚张缉密谋杀死大将军司马师改以夏侯玄执政。事泄被杀夷灭三族夏侯玄死时年仅四十六岁。著有文集三卷如今已佚。政治上提出了“审官择人”、“除重官”、“改服制”等制度被太傅司马懿评价“皆大善”。博学多识才华出众精通玄学成为“四聪”之一与何晏等人开创了魏晋玄学的先河是早期的玄学领袖人物。',
@ -663,6 +665,216 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//马承
olchenglie:{
audio:2,
trigger:{player:'useCard2'},
filter:function(event,player){
if(event.card.name!='sha') return false;
return game.hasPlayer(function(current){
return !event.targets.contains(current)&&player.canUse(event.card,current);
});
},
direct:true,
shaRelated:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('olchenglie'),'为'+get.translation(trigger.card)+'多指定至多两个目标,并发动后续效果',[1,2],(card,player,target)=>{
var evt=_status.event.getTrigger();
return !evt.targets.contains(target)&&player.canUse(evt.card,target);
}).set('ai',function(target){
var player=_status.event.player,evt=_status.event.getTrigger();
return get.effect(target,evt.card,player,player);
});
'step 1'
if(result.bool){
if(!event.isMine()&&!event.isOnline()) game.delayx();
event.targets=result.targets;
}
else event.finish();
'step 2'
player.logSkill('olchenglie',targets);
trigger.targets.addArray(targets);
var targets=trigger.targets;
event.targets=targets;
event.given=[];
var cards=get.cards(targets.length);
event.cards=cards.slice();
player.showCards(event.cards,get.translation(player)+'发动了【骋烈】');
while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild);
'step 3'
game.updateRoundNumber();
var hs=player.getCards('h');
var next=player.chooseToMove('骋烈:是否交换一张牌?');
next.set('list',[
['〖骋烈〗展示',event.cards,'olchenglie'],
['你的手牌',hs],
]);
next.set('filterMove',function(from,to,moved){
if(typeof to=='number') return false;
var player=_status.event.player;
var hs=player.getCards('h');
var changed=hs.filter(function(card){
return !moved[1].contains(card);
});
var changed2=moved[1].filter(function(card){
return !hs.contains(card);
});
if(changed.length<1) return true;
var pos1=(moved[0].contains(from.link)?0:1),pos2=(moved[0].contains(to.link)?0:1);
if(pos1==pos2) return true;
if(pos1==0){
if(changed.contains(from.link)) return true;
return changed2.contains(to.link);
}
if(changed2.contains(from.link)) return true;
return changed.contains(to.link);
});
next.set('processAI',function(list){
var cards1=list[0][1].slice(),cards2=list[1][1].slice();
var card1=cards1.sort((a,b)=>get.value(b)-get.value(a))[0];
var card2=cards2.sort((a,b)=>get.value(a)-get.value(b))[0];
if(get.value(card1)>get.value(card2)){
cards1.remove(card1);
cards2.remove(card2);
cards1.push(card2);
cards2.push(card1);
}
return [cards1,cards2];
});
'step 4'
var moved=result.moved;
var hs=player.getCards('h'),ts=event.cards;
var card1,card2;
for(var i of moved[0]){
if(!ts.contains(i)) card1=i;
}
for(var i of moved[1]){
if(!hs.contains(i)) card2=i;
}
if(card1&&card2){
player.$throw(1,1000);
event.cards.forEach((i,ind,arr)=>{
if(i==card2) arr[ind]=card1;
})
player.lose(card1,ui.cardPile).set('insert_index',event=>event.cardx).set('cardx',card2);
player.gain(card2,'draw');
game.log(player,'交换了一张牌');
}
'step 5'
if(event.cards.length==1) event._result={bool:true,links:event.cards};
else player.chooseButton(['骋烈:将这些牌置于目标角色的武将牌上',event.cards],true);
'step 6'
if(result.bool){
var card=result.links[0];
event.card=card;
player.chooseTarget('将'+get.translation(card)+'置于一名目标角色的武将牌上',true,(card,player,target)=>{
return _status.event.getTrigger().targets.contains(target)&&!_status.event.getParent().given.contains(target);
}).set('ai',target=>{
var color=_status.event.color,player=_status.event.player;
var evt=_status.event.getTrigger();
if(color=='red'){
var eff=get.effect(target,evt.card,player,target),att=get.attitude(player,target);
if(eff>=0&&att<0) return -1;
if(eff<0&&att<0&&target.hasCard(card=>['shan','caochuan'].contains(get.name(card)),'hs')) return 10;
}
return 1;
}).set('color',get.color(card));
}
else event.finish();
'step 7'
if(result.bool){
var target=result.targets[0];
player.line(target);
event.given.push(target);
target.addToExpansion(card).gaintag.add('olchenglie');
player.addTempSkill('olchenglie_effect','phaseUseAfter');
if(!trigger.card.storage) trigger.card.storage={};
trigger.card.storage.olchenglie=player;
target.storage.olchenglie_viewer=player;
event.cards.remove(card);
var cardx=player==game.me||player.isUnderControl()?card:1;
player.$give(cardx,target,false);
}
else event.finish();
'step 8'
if(event.cards.length) event.goto(5);
else if(!event.isMine()&&!event.isOnline()) game.delayx();
},
marktext:'骋',
intro:{
markcount:'expansion',
mark:function(dialog,content,player){
var content=player.getExpansions('olchenglie');
if(content&&content.length){
if(game.me==player.storage.olchenglie_viewer){
dialog.addAuto(content);
}
else{
return '有'+get.cnNumber(content.length)+'张扣置的“骋烈”牌';
}
}
},
content:function(content,player){
var content=player.getExpansions('olchenglie');
if(content&&content.length){
if(game.me==player.storage.olchenglie_viewer){
return get.translation(content);
}
return '有'+get.cnNumber(content.length)+'张扣置的“骋烈”牌';
}
}
},
subSkill:{
effect:{
trigger:{global:'useCardAfter'},
forced:true,
charlotte:true,
forceDie:true,
popup:false,
filter:function(event,player){
return event.card.storage&&event.card.storage.olchenglie;
},
content:function(){
'step 0'
var targets=game.filterPlayer(current=>{
var cards=current.getExpansions('olchenglie');
return cards.some(i=>get.color(i,false)=='red');
}).sortBySeat();
event.targets=targets;
var togive=trigger.card.storage.olchenglie;
event.togive=togive;
if(!targets.length||!togive.isIn()) event.goto(3);
'step 1'
var target=event.targets.shift();
event.target=target;
player.line(target);
if(target.hasHistory('useCard',evt=>{
return evt.respondTo&&evt.respondTo[1]==trigger.card;
})){
if(target.countCards('he')) target.chooseCard('骋烈:交给'+get.translation(event.togive)+'一张牌',true,'he');
}
else{
target.recover();
}
'step 2'
if(result.bool){
target.give(result.cards,event.togive);
}
if(targets.length) event.goto(1);
'step 3'
game.filterPlayer(current=>{
var cards=current.getExpansions('olchenglie');
return cards.length;
}).forEach(i=>{
i.loseToDiscardpile(i.getExpansions('olchenglie'));
delete i.storage.olchenglie_viewer;
});
}
}
},
},
//新贺齐
olqizhou:{
audio:'qizhou',
trigger:{
@ -978,15 +1190,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.chooseToDiscard('h',true,'效死:弃置一张基本牌',{type:'basic'});
}
'step 1'
var cards2=cards.filterInD('d');
var cards2=cards.slice(0);
if(result.bool){
cards2=cards2.addArray(result.cards.filterInD('d'));
cards2=cards2.addArray(result.cards);
}
event.cards2=cards2;
'step 2'
if (!event.cards2.length) event.finish();
else player.chooseButton(['效死:是否使用其中的一张牌?',event.cards2]).set('filterButton',button=>{
return _status.event.player.hasUseTarget(button.link,false,false);
var cardsx=event.cards2.filter(i=>get.position(i,true)=='d'&&player.hasUseTarget(i,false));
if(!cardsx.length) event.goto(5);
else player.chooseButton(['效死:是否使用其中的一张牌?',cardsx]).set('filterButton',button=>{
return _status.event.player.hasUseTarget(button.link,false);
}).set('ai',button=>{
if(button.link.name=='jiu') return 10;
return _status.event.player.getUseValue(button.link);
@ -999,8 +1212,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx();
player.chooseUseTarget(true,card,false,'nodistance');
}
else event.goto(5);
'step 4'
if(event.cards2.filter(i=>player.hasUseTarget(i,false,false)).length) event.goto(2);
if(event.cards2.filter(i=>get.position(i,true)=='d'&&player.hasUseTarget(i,false)).length) event.goto(2);
'step 5'
if(event.draw) player.draw();
},
@ -2060,7 +2274,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
direct:true,
filter:function(event,player){
if(event.player!=_status.currentPhase||event.targets.length!=1||event.type!='card') return false;
if(event.player!=_status.currentPhase||!event.targets||event.targets.length!=1||event.type!='card') return false;
return lib.skill.cihuang.getList(player,event.player,true);
},
getList:function(player,target,bool){
@ -4994,6 +5208,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lanjiang:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
audioname:['heqi'],
content:function(){
'step 0'
var ph=player.countCards('h');
@ -6056,8 +6271,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseDiscardBefore'},
forced:true,
content:function(){
trigger.setContent(lib.skill.olsujian.phaseDiscard);
},
phaseDiscard:function(){
'step 0'
trigger.cancel();
game.log(player,'进入了弃牌阶段');
event.num=player.needsToDiscard();
if(event.num<=0) event.finish();
else{
if(lib.config.show_phase_prompt){
player.popup('弃牌阶段');
}
}
event.trigger('phaseDiscard');
'step 1'
var cards=lib.skill.olsujian.update(player);
if(!cards.length) event.finish();
else{
@ -6069,7 +6296,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
]).set('ai',function(){
var cards=_status.event.getParent().cards,player=_status.event.player;
if(!game.hasPlayer(function(current){
return get.attitude
return get.attitude(player,current)>0;
})) return 1;
if(game.hasPlayer(function(current){
var att=get.attitude(player,current);
@ -6081,7 +6308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 0;
});
}
'step 1'
'step 2'
if(result.index==1){
cards=event.cards.filter(function(i){
return lib.filter.cardDiscardable(i,player,'olsujian');
@ -6089,11 +6316,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(cards.length){
event.num=cards.length;
player.discard(cards);
event.cards=cards;
}
else event.finish();
}
else event.goto(4);
'step 2'
'step 3'
if(game.hasPlayer(function(current){
return current!=player&&current.countDiscardableCards(player,'he')>0;
})){
@ -6109,17 +6337,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
}
else event.finish();
'step 3'
'step 4'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
player.discardPlayerCard(target,true,[1,num]);
}
event.finish();
'step 4'
'step 5'
if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
event.given_map={};
'step 5'
'step 6'
player.chooseCardTarget({
filterCard:function(card){
return card.hasGaintag('olsujian');
@ -6139,7 +6367,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.value(card,target)*get.attitude(player,target);
},
});
'step 6'
'step 7'
if(result.bool){
var res=result.cards,target=result.targets[0].playerid;
player.removeGaintag('olsujian',res);
@ -6150,7 +6378,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(cards.length) event.goto(5);
}
else event.finish();
'step 7'
'step 8'
if(_status.connectMode){
game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
}
@ -6168,6 +6396,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
giver:player,
animate:'giveAuto',
}).setContent('gaincardMultiple');
'step 9'
event.cards=[];
},
update:function(player){
player.removeGaintag('olsujian');
@ -10502,7 +10732,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
player.awakenSkill('moucheng');
player.removeSkill('wylianji');
player.addSkill('jingong');
game.log(player,'失去了技能','#g【连计】');
player.addSkillLog('jingong');
}
}
}
@ -11586,7 +11817,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return target!=player;
},
content:function(){
player.storage.fenxun2=target;
player.markAuto('fenxun2',[target]);
player.addTempSkill('fenxun2');
},
check:function(card){
@ -11634,7 +11865,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
mod:{
globalFrom:function(from,to){
if(to==from.storage.fenxun2){
if(from.getStorage('fenxun2').contains(to)){
return -Infinity;
}
}
@ -12970,11 +13201,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else player.addMark('regushe2',1,false);
'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);
if(event.num1<=event.num2){
player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;});
}
else event.goto(3);
'step 2'
@ -12982,8 +13210,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.draw();
}
'step 3'
if(event.num1<=event.num2){
player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -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.finish();
'step 4'
@ -13024,26 +13255,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
forced:true,
filter:function(event,player){
if(player!=event.target&&event.iwhile) return false;
// if(player!=event.target&&event.iwhile) return false;
return (player==event.player?event.num1:event.num2)<=player.countMark('regushe');
},
content:function(){
if(player==trigger.target||!trigger.iwhile){
trigger[player==trigger.player?'num1':'num2']+=player.countMark('regushe');
game.log(player,'的拼点牌点数+'+player.countMark('regushe'));
}
game.delayx();
var cards=[trigger.card1];
if(trigger.cardlist) cards.addArray(trigger.cardlist);
else cards.push(trigger.card2);
cards.sort(function(a,b){
return get.number(b)-get.number(a);
});
var num=get.number(cards[0]);
for(var i=1;i<cards.length;i++){
if(get.number(cards[i])<num){
cards.splice(i);
break;
}
}
// var cards=[trigger.card1];
// if(trigger.cardlist) cards.addArray(trigger.cardlist);
// else cards.push(trigger.card2);
// cards.sort(function(a,b){
// return get.number(b)-get.number(a);
// });
// var num=get.number(cards[0]);
// for(var i=1;i<cards.length;i++){
// if(get.number(cards[i])<num){
// cards.splice(i);
// break;
// }
// }
// cards=cards.filterInD();
var cards=[];
if(trigger.num1>trigger.num2) cards.push(trigger.card1);
if(trigger.num1<trigger.num2) cards.push(trigger.card2);
cards=cards.filterInD();
if(cards.length) player.gain(cards,'gain2');
},
@ -13098,11 +13335,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
'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);
if(event.num1<=event.num2){
player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -1;});
}
else event.goto(3);
'step 2'
@ -13110,8 +13344,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.draw();
}
'step 3'
if(event.num1<=event.num2){
player.chooseToDiscard('he','弃置一张牌,或摸一张牌').set('ai',function(){return -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.finish();
'step 4'
@ -13661,21 +13898,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.hasSkill('dangxian')){
list.push('dangxian');
}
if(!player.hasSkill('zhiman')){
list.push('zhiman');
if(!player.hasSkill('rezhiman')){
list.push('rezhiman');
}
if(list.length){
player.chooseControl(list).set('prompt','选择获得一项技能');
}
'step 1'
player.addSkill(result.control);
if(result.control){
player.addSkillLog(result.control);
player.popup(result.control);
game.log(player,'获得技能','【'+get.translation(result.control)+'】');
}
},
ai:{
threaten:2.4
},
derivation:['wusheng','dangxian','zhiman'],
derivation:['new_rewusheng','dangxian','rezhiman'],
},
xiefang:{
mod:{
@ -13858,6 +14096,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
zhenwei:{
audio:2,
audioname:['re_wenpin'],
trigger:{
global:'useCardToTarget'
},
@ -15967,14 +16206,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
oldcihuai3:{
trigger:{
player:['gainEnd','loseEnd'],
global:'die',
player:['loseAfter'],
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter','die'],
},
silent:true,
firstDo:true,
filter:function(event,player){
if(event.name=='lose') return event.hs.length>0;
return true;
if(event.name=='die') return true;
var evt=event.getl(player);
return evt&&evt.hs&&evt.hs.length>0;
},
content:function(){
player.removeSkill('oldcihuai2');
@ -16058,13 +16298,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
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;
if(player.storage.jilei2.contains(get.type(card,'trick'))){
var hs=player.getCards('h'),cards=[card];
if(Array.isArray(card.cards)) cards.addArray(card.cards);
for(var i of cards){
if(hs.contains(i)) return false;
}
}
},
cardRespondable:function(card,player){
if(player.storage.jilei2.contains(get.type(card,'trick'))) return false;
if(player.storage.jilei2.contains(get.type(card,'trick'))){
var hs=player.getCards('h'),cards=[card];
if(Array.isArray(card.cards)) cards.addArray(card.cards);
for(var i of cards){
if(hs.contains(i)) return false;
}
}
},
cardSavable:function(card,player){
if(player.storage.jilei2.contains(get.type(card,'trick'))) return false;
if(player.storage.jilei2.contains(get.type(card,'trick'))){
var hs=player.getCards('h'),cards=[card];
if(Array.isArray(card.cards)) cards.addArray(card.cards);
for(var i of cards){
if(hs.contains(i)) return false;
}
}
},
},
},
@ -16118,7 +16376,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
naman:{
audio:2,
trigger:{global:'respondEnd'},
trigger:{global:'respondAfter'},
filter:function(event,player){
if(event.card.name!='sha') return false;
if(event.player==player) return false;
@ -16162,7 +16420,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
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]};
player.chooseControl(list).set('prompt','请选择一个势力').set('ai',function(){return _status.event.group}).set('group',list2[0]);
'step 1'
player.popup(result.control+2,get.groupnature(result.control));
game.log(player,'选择了','#g'+get.translation(result.control+2));
@ -20177,7 +20435,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
caohong:['tw_re_caohong','caohong','tw_caohong'],
xiahouba:['xiahouba','tw_xiahouba'],
maliang:['maliang','re_maliang','tw_maliang','ol_maliang','old_maliang'],
dingfeng:['dingfeng','tw_dingfeng'],
dingfeng:['dingfeng','tw_dingfeng','old_dingfeng'],
zumao:['zumao','tw_zumao'],
beimihu:['tw_beimihu','beimihu'],
panfeng:['re_panfeng','panfeng'],
@ -20190,7 +20448,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guansuo:['guansuo','ol_guansuo'],
zhangxingcai:['zhangxingcai','old_zhangxingcai'],
lisu:['ol_lisu','lisu'],
fuwan:['fuwan','sp_fuwan','tw_fuwan'],
fuwan:['dc_fuwan','fuwan','sp_fuwan','tw_fuwan'],
huaxin:['ol_huaxin','huaxin','sp_huaxin'],
xujing:['xujing','tw_sp_xujing','sp_xujing'],
zhaoxiang:['zhaoxiang','tw_zhaoxiang'],
@ -20209,11 +20467,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
huangchengyan:['huangchengyan','dc_huangchengyan'],
puyuan:['puyuan','ol_puyuan'],
huangzu:['dc_huangzu','huangzu'],
huojun:['huojun','tw_huojun'],
huojun:['dc_huojun','huojun','tw_huojun'],
zhaoyǎn:['dc_zhaoyǎn','zhaoyǎn'],
furong:['ol_furong','tw_furong','furong'],
daxiaoqiao:['tw_daxiaoqiao','daxiaoqiao'],
zhugeguo:['tw_zhugeguo','zhugeguo'],
wanglang:['wanglang','ol_wanglang'],
tengfanglan:['dc_tengfanglan','tengfanglan'],
},
translate:{
"xinfu_lingren":"凌人",
@ -20524,7 +20784,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fenyue:'奋钺',
fenyue2:'奋钺',
fenyue2_bg:'钺',
fenyue_info:'出牌阶段限X次你可以与一名角色拼点若你赢你选择一项1.令其不能使用或打出手牌直到回合结束2.视为你对其使用了【杀】(不计入次数限制。若你没赢你结束出牌阶段。X为存活的忠臣数',
fenyue_info:'出牌阶段限X次你可以与一名角色拼点若你赢你选择一项1.令其不能使用或打出手牌直到回合结束2.视为对其使用一张【杀】(不计入次数。若你没赢你结束出牌阶段。X为存活的忠臣数',
zfengshi:'锋矢',
zfengshi_info:'当你使用【杀】指定目标后,你可以令目标弃置装备区内的一张牌。',
@ -20607,7 +20867,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
regushe_info:'出牌阶段若X小于7则你可以用一张手牌与至多三名角色同时拼点然后依次结算拼点结果没赢的角色选择一项1.弃置一张牌2.令你摸一张牌。若你没赢你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时你死亡。X为你的“饶舌”标记数与本回合因“鼓舌”拼点而胜利的次数之和',
rejici:'激词',
rejici2:'激词',
rejici_info:'锁定技,当你展示拼点牌若此牌的点数不大于X则你令此牌点数+X并获得此次拼点中点数最大的拼点牌。当你死亡时你令杀死你的角色弃置7-X张牌并失去1点体力X为你的“饶舌”标记数',
rejici_info:'锁定技。①当你的拼点牌亮出若此牌的点数不大于X则你令此牌点数+X并获得此次拼点中点数最大的拼点牌。当你死亡时你令杀死你的角色弃置7-X张牌并失去1点体力X为你的“饶舌”标记数',
gushe:'鼓舌',
gushe_bg:'舌',
gushe_info:'出牌阶段限一次你可以用一张手牌与至多三名角色同时拼点然后依次结算拼点结果没赢的角色选择一项1.弃置一张牌2.令你摸一张牌。若你没赢你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时你死亡。',
@ -20627,9 +20887,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
luanzhan:'乱战',
luanzhan_info:'你使用【杀】或黑色普通锦囊牌可以额外选择X名角色为目标当你使用【杀】或黑色普通锦囊牌指定目标后若此牌的目标角色数小于X则X减至0。X为你于本局游戏内造成过伤害的次数',
zhengnan:'征南',
zhengnan_info:'其他角色死亡后,你可以摸三张牌并获得下列技能中的任意一个:〖武圣〗、 〖当先〗和〖制蛮〗。',
zhengnan_info:'其他角色死亡后,你可以摸三张牌并获得下列技能中的任意一个:〖武圣〗、〖当先〗和〖制蛮〗。',
xinzhengnan:'征南',
xinzhengnan_info:'当一名角色进入濒死状态时若你未因其发动过〖征南〗则你回复1点体力并摸一张牌并获得下列技能中的任意一个〖武圣〗、 〖当先〗和〖制蛮〗(若技能全部拥有则改为摸三张牌。你以此法获得的〖当先〗结算时视为已发动过〖伏枥〗)。',
xinzhengnan_info:'当一名角色进入濒死状态时若你未因其发动过〖征南〗则你回复1点体力并摸一张牌并获得下列技能中的任意一个〖武圣〗、〖当先〗和〖制蛮〗(若技能全部拥有则改为摸三张牌。你以此法获得的〖当先〗结算时视为已发动过〖伏枥〗)。',
xiefang:'撷芳',
xiefang_info:'锁定技,你计算与其他角色的距离时-X。X为女性角色数',
qizhi:'奇制',
@ -20856,8 +21116,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reyingbing_info:'锁定技,有“咒”的角色使用与“咒”颜色相同的牌时,你摸一张牌;若这是你第二次因该“咒”摸牌,则你获得该"咒"。',
yingbin_info:'锁定技,有“咒”的角色使用与“咒”花色相同的牌时,你摸一张牌;当你因同一名角色的同一张“咒”的效果摸第二张牌时,移去该“咒”。',
zhoufu_info:'出牌阶段限一次你可以将一张手牌置于一名没有“咒”的其他角色的武将牌旁称为“咒”。当有“咒”的角色判定时其改为将“咒”作为判定牌一名角色的回合结束时若有角色于此回合因判定而移除过“咒”则你令这些角色各失去1点体力。',
yanzheng_info:'若你的手牌数大于你的体力值,则你可以将你装备区内的牌当【无懈可击】使用。',
kuiwei_info:'结束阶段开始时你可以摸2+X张牌并记录X然后将你的武将牌翻面X为场上所有角色装备区内武器牌数目之和。你的下个摸牌阶段开始时你弃置X张牌。',
yanzheng_info:'若你的手牌数大于你的体力值,则你可以将你装备区内的牌当【无懈可击】使用。',
kuiwei_info:'结束阶段开始时你可以摸2+X张牌并翻面。你的下个摸牌阶段开始时你弃置X张牌X为当前时机场上所有角色装备区内武器牌数之和。',
tongji_info:'锁定技。若你的手牌数大于你的体力值,则攻击范围包含你的其他角色使用【杀】时不能指定你以外的角色为目标。',
wangzun_info:'其他角色的准备阶段开始时,你可以摸一张牌。若如此做,该角色此回合的手牌上限-1。然后你不能再发动〖妄尊〗直到回合开始。',
kaikang_info:'当一名角色成为【杀】的目标后若你至该角色的距离为1你可以摸一张牌。若如此做你交给其一张牌并展示之。若为装备牌该角色可以使用此牌。',
@ -21042,7 +21302,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olxiuhao_info:'每回合限一次。当你受到其他角色造成的伤害时,或对其他角色造成伤害时,你可防止此伤害,然后令伤害来源摸两张牌。',
olsujian:'素俭',
olsujian_given:'已分配',
olsujian_info:'锁定技。弃牌阶段开始前,你跳过此阶段。然后你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌。',
olsujian_info:'锁定技。弃牌阶段开始前,你将此阶段的规则改为:{你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌}。',
ol_wangrong:'OL王荣',
olfengzi:'丰姿',
olfengzi_info:'出牌阶段限一次。当你使用有目标的基本牌或普通锦囊牌时,你可弃置一张与此牌类型相同的牌,然后令此牌结算两次。',
@ -21240,6 +21500,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olqizhou_info:'锁定技。每个回合开始前,或当你装备区内的牌发生变化后,你失去所有因此技能获得过的额外技能,然后根据你装备区内的花色数获得对应的技能。至少一种:〖短兵〗、至少两种:〖英姿〗、至少三种:〖奋威〗、至少四种:〖澜江〗。',
olshanxi:'闪袭',
olshanxi_info:'出牌阶段限一次。你可以选择一名攻击范围内不包含你的其他角色展示你与其的至多X张手牌X为你的空装备栏数。若这些牌中有【闪】则你弃置这些【闪】然后获得对方的一张未展示的牌。',
macheng:'马承',
olchenglie:'骋烈',
olchenglie_info:'当你使用【杀】选择目标后你可以令至多两名角色也成为此牌目标并展示牌堆顶的等同于目标数张牌然后你可以将一张手牌与其中一张牌交换将这些牌扣置于每名目标角色武将牌上称为“骋烈”牌。此牌结算结束后1.若有红色“骋烈”牌的角色响应过此【杀】其交给你一张牌未响应此【杀】其回复1点体力2.有“骋烈”牌的角色将其“骋烈”牌置入弃牌堆。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

File diff suppressed because it is too large Load Diff

View File

@ -86,7 +86,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhouyu:['huanggai','xiaoqiao','zhouyi'],
sunquan:['zhoutai'],
lvbu:['diaochan','lvlingqi'],
machao:['madai','mayunlu'],
machao:['madai','mayunlu','yangwan'],
zhangliao:['zangba'],
ganning:['lingtong','xf_sufei'],
guanyu:['zhangfei','liaohua'],
@ -273,10 +273,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
logTarget:'source',
preHidden:true,
filter:function(event,player){
return (event.source&&event.source.countGainableCards(player,'he')&&event.num>0&&event.source!=player);
return (event.source&&event.source.countGainableCards(player,event.source!=player?'he':'e')&&event.num>0);
},
content:function(){
player.gainPlayerCard(true,trigger.source,'he');
player.gainPlayerCard(true,trigger.source,trigger.source!=player?'he':'e');
},
ai:{
maixie_defend:true,
@ -2460,7 +2460,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangliao:['re_zhangliao','zhangliao'],
sp_zhangliao:['sp_zhangliao','yj_zhangliao'],
xiahoudun:['re_xiahoudun','xin_xiahoudun','xiahoudun'],
liubei:['re_liubei','liubei'],
liubei:['re_liubei','liubei','junk_liubei'],
guanyu:['re_guanyu','guanyu'],
zhangfei:['re_zhangfei','tw_zhangfei','xin_zhangfei','old_zhangfei','zhangfei'],
zhaoyun:['re_zhaoyun','old_zhaoyun','zhaoyun'],
@ -2468,7 +2468,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
machao:['re_machao','machao'],
sp_machao:['sp_machao','old_machao'],
zhugeliang:['re_zhugeliang','zhugeliang'],
huangyueying:['re_huangyueying','huangyueying'],
huangyueying:['re_huangyueying','huangyueying','junk_huangyueying'],
sunquan:['re_sunquan','sunquan'],
zhouyu:['re_zhouyu','zhouyu'],
luxun:['re_luxun','luxun'],

View File

@ -532,7 +532,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=player.countCards('hs',card=>get.tag(card,'damage')&&game.hasPlayer(current=>get.effect(current,card,player,player)>0));
if(num<=0) return 0;
if(num>=3) num=3;
if(button.link[2]=='hw_bn_'+num) return 10;
if(button.link[2]=='tw_bn_'+num) return 10;
return 1;
}).set('filterButton',(button)=>{
var player=_status.event.player;
@ -1065,7 +1065,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target==player) return 0;
return get.effect(target,{name:'sha'},player,player);
}).reduce((p,c)=>p+c,0),eff2=list2.map(target=>get.effect(target,{name:'wuzhong'},player,player)).reduce((p,c)=>p+c,0);
if(_status.event.control.contains('选项二')&&eff2>eff) return '选项二';
if(_status.event.controls.contains('选项二')&&eff2>eff) return '选项二';
if(eff>0) return 0;
return 'cancel2';
});
@ -1292,7 +1292,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var choiceList=[
'令'+target+'获得牌堆里的一张【杀】',
'令'+target+'将一张牌交给另一名角色,然后'+target+'摸两张牌',
'背水!依次执行以上所有选项,并将所有手牌交给'+target,
'背水!将所有手牌交给'+target+',然后依次执行以上所有选项',
];
var list=['选项一'];
if(trigger.player.countCards('h')) list.push('选项二');
@ -1308,7 +1308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '选项一';
}).set('list',list);
'step 1'
if(result.control=='背水!'&&player!=trigger.player) player.gain(player.getCards('h'),trigger.player);
if(result.control=='背水!'&&player!=trigger.player) player.give(player.getCards('h'),trigger.player);
if(result.control!='选项二'){
var card=get.cardPile2(function(card){
return card.name=='sha';
@ -1386,6 +1386,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
backup:function(links){
var backup={
audio:'twzhuidu',
target:_status.event.result.targets[0],
choice:links[0],
filterTarget:function(card,player,target){
@ -1455,16 +1456,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
var target=_status.currentPhase;
if(result.bool){
var num=1-player.hp;
if(num>0) player.recover(num);
}
else{
target.gainMaxHp();
target.recover();
target.draw();
var num=player.maxHp-player.hp;
if(num>0) player.recover(num);
}
else{
var num=1-player.hp;
if(num>0) player.recover(num);
}
},
},
//王凌
@ -1496,7 +1497,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
intro:{content:'已使用牌名:$'},
subSkill:{
achieve:{
audio:'mibei1',
audio:'mibei',
skillAnimation:true,
animationColor:'water',
},
@ -1514,7 +1515,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
fail:{
audio:'mibei2',
audio:'mibei',
trigger:{player:'phaseUseEnd'},
forced:true,
filter:function(event,player){
@ -1585,7 +1586,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'chooseToUse',
filter:function(event,player){
if(event.type=='wuxie') return false;
if(player.hasSkill('tw_mouli_used')) return false;
if(player.hasSkill('twmouli_used')) return false;
if(!Array.isArray(event.twmouli)) return false;
for(var card of event.twmouli){
if(event.filterCard(card,player,event)) return true;
@ -1893,8 +1894,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map=_status.event.getParent().given_map;
var togive=_status.event.getParent().togive;
var num=(map[player.playerid]||[]).length,num2=(map[target.playerid]||[]).length;
var value=_status.event.value,eff=num2?0:get.effect(target,{name:'losehp'},player,player);
if(num2+togive.length>=num&&player!=target) return value*Math.sign(att)+eff+1000;
var value=_status.event.value,eff=get.effect(target,{name:'losehp'},player,player);
if(num2+togive.length==num&&player!=target) return value*Math.sign(att)+eff+1000;
else{
if(value<0) return -att+1000;
else if(att>0) return 1.5*att/(1+target.countCards('h'))+(player==target?eff/3:0)+1000;
@ -1993,9 +1994,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
locked:false,
filter:function(event,player){
return player.getHistory('lose',function(evt){
return evt.getParent(2).name=='twboming';
}).length>1;
var num=0;
for(var target of game.filterPlayer(i=>i!=player)){
target.getHistory('gain',evt=>num+=evt.cards.length);
if(num>1) return true;
}
return false;
},
content:function(){
player.draw(2);
@ -2036,9 +2040,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
}
},
check:function(event,player){
return get.attitude(player,event.player)<0;
},
logTarget:function(event,player){
if(event.name=='gain') return event.player;
else{
@ -2132,14 +2133,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
check:function(event,player){
return get.attitude(player,event.target)<0;
},
direct:true,
logTarget:'target',
content:function(){
'step 0'
player.chooseToDiscard('he',get.prompt2('twxuhe',trigger.target)).set('ai',card=>{
return 5.5-get.value(card);
}).set('logSkill',['twxuhe',trigger.target]);
'step 1'
if(result.bool){
trigger.target.chooseControl().set('choiceList',[
'受到'+get.translation(player)+'对你造成的1点伤害',
'令'+get.translation(player)+'使用的下一张牌对你造成的伤害+2'
@ -2150,8 +2146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})>0) return 0;
return 1;
});
}else event.finish();
'step 2'
'step 1'
var target=trigger.target;
switch (result.index){
case 0:
@ -2225,8 +2220,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var suit in map) map[suit]=Math.abs(map[suit]);
var bool=game.hasPlayer(current=>get.attitude(player,current)>0&&player!=current);
var list=lib.suit.slice().sort((a,b)=>(bool?1:-1)*((map[b]||0)-(map[a]||0)));
debugger;
if(bool&&list[0]>0||!bool||player.hasMark('twjiexun')) return list[0];
if(bool&&map[list[0]]>0||!bool||player.hasMark('twjiexun')) return list[0];
return 'cancel2';
}).set('prompt2',get.skillInfoTranslation('twjiexun',player)+'<br>'+str);
'step 1'
@ -2254,7 +2248,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.logSkill('twjiexun',target);
if(player.hasMark('twjiexun')||event.num1) player.addExpose(0.2);
player.popup(event.suit);
game.log(player,'选择了','#g'+get.translation(event.suit),'花色');
game.log(player,'选择了','#y'+get.translation(event.suit));
player.addMark('twjiexun',1,false);
if(event.num1) target.draw(event.num1);
}
@ -2627,26 +2621,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
subSkill:{
after:{
trigger:{player:'useCardAfter'},
trigger:{global:'useCardAfter'},
filter:function(event,player){
return event.card.storage&&event.card.storage.twqingkou;
},
charlotte:true,
direct:true,
content:function(){
var target=trigger.targets[0];
if(player.hasHistory('sourceDamage',function(evt){
var targets=game.filterPlayer(current=>{
return current.hasHistory('sourceDamage',function(evt){
return evt.card==trigger.card;
})){
player.draw();
});
}).sortBySeat();
for(var target of targets){
target.draw();
if(target==player){
player.skip('phaseJudge');
game.log(player,'跳过了','#y判定阶段');
player.skip('phaseDiscard');
game.log(player,'跳过了','#y弃牌阶段');
}
if(target.hasHistory('sourceDamage',function(evt){
return evt.card==trigger.card;
})) target.draw();
}
},
},
},
@ -2770,6 +2765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(event.cards.length>1){
player.chooseCardButton('攸业:请选择要分配的牌',true,event.cards,[1,event.cards.length]).set('ai',function(button){
if(ui.selected.buttons.length) return 0;
return get.value(button.link,_status.event.player);
});
}
@ -2787,8 +2783,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},event.cards.length==1).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(_status.event.enemy) return Math.max(0.01,100-att);
else if(att>0) return Math.max(0.1,att/(1+target.countCards('h')));
else return Math.max(0.01,(100-att)/10);
else if(att>0) return Math.max(0.1,att/(1+target.countCards('h')+(_status.event.getParent().given_map[target.playerid]||0)));
else return Math.max(0.01,(100+att)/100);
}).set('enemy',get.value(cards[0],player,'raw')<0);
}
'step 3'
@ -2812,6 +2808,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
player.line(source,'green');
list.push([source,event.given_map[i]]);
game.log(source,'获得了',event.given_map[i]);
}
game.loseAsync({
gain_list:list,
@ -3025,13 +3022,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else map[id].shanRequired=2;
},
mod:{
attackRange:function(player,num){
return num+player.getStorage('twxiangyu_range').length;
},
},
subSkill:{
lose:{
trigger:{
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
filter:function(event,player){
return game.hasPlayer(function(current){
return player==_status.currentPhase&&game.hasPlayer(function(current){
if(player.getStorage('twxiangyu_range').contains(current)) return false;
var evt=event.getl(current);
return evt&&evt.cards2&&evt.cards2.length>0;
@ -3057,11 +3059,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '攻击范围+'+num;
},
},
mod:{
attackRange:function(player,num){
return num+player.getStorage('twxiangyu_range').length;
},
},
charlotte:true,
onremove:true,
},
},
@ -3583,6 +3581,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var target2=result.targets[0];
event.target2=target2;
player.line(target2);
var vcards=[];
if(target.canUse({name:'sha',isCard:true},target2,false)) vcards.push(['基本','','sha']);
if(target.canUse({name:'juedou',isCard:true},target2,false)) vcards.push(['锦囊','','juedou']);
if(!vcards.length){
@ -4424,6 +4423,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
2:{
audio:'nzry_zhenliang_1',
trigger:{global:'damageBegin4'},
filter:function(event,player){
if(_status.currentPhase==player||!player.storage.twzhenliang) return false;
@ -4477,7 +4477,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=1;
if((!target.mayHaveShan()||player.hasSkillTag('directHit_ai',true,{
target:target,
card:trigger.card,
card:{name:'sha'},
},true))&&!target.hasSkillTag('filterDamage',null,{
player:player,
card:{name:'sha'},
@ -4729,7 +4729,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var card of cards) if(list.contains(get.type2(card))) list.remove(get.type2(card));
for(var type of event.player.getStorage('twjiaohua_gained')) if(list.contains(type)) list.remove(type);
var name=event.player==player?'你':get.translation(event.player);
return '令'+name+'从牌堆或弃牌堆中获得一张'+list.map(i=>get.translation(i)+'牌').join('、').replace(/(.*)、/, '$1或');
return '令'+name+'从牌堆或弃牌堆中获得一张'+(event.player.isUnderControl(true)?list.map(i=>get.translation(i)+'牌').join('、').replace(/(.*)、/, '$1或'):'本次未获得的类别的牌');
},
logTarget:'player',
content:function(){
@ -5256,6 +5256,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
card=get.autoViewAs({name:'sha'},[card]);
return lib.filter.filterTarget.apply(this,arguments);
},
selectTarget:function(){
var card=get.card(),player=get.player();
if(!card) return;
card=get.autoViewAs({name:'sha'},[card]);
var range=[1,1];
game.checkMod(card,player,range,'selectTarget',player);
return range;
},
ai1:function(card){
var player=_status.event.player,target=_status.event.getParent().player;
var eff=get.effect(target,get.autoViewAs({name:'sha'},[card]),player,player);
@ -5369,7 +5377,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player.countCards('he',card=>get.type(card)!='basic')) list.push('背水!')
else list2[2]='<span style="opacity:0.5">'+list2[2]+'</span>';
list.push('cancel2');
player.chooseControl(list).set('prompt','直辩:选择一项').set('choiceList',list2).set('ai',function(target){
player.chooseControl(list).set('prompt','直辩:选择一项').set('choiceList',list2).set('ai',function(){
var target=_status.event.getParent().target;
if(_status.event.controls.contains('背水!')&&player.isDamaged()&&(target.countCards('h')||target.countCards('e',function(card){
return player.canEquip(card)&&get.value(card,target)>=4+player.getDamagedHp();
}))) return 2;
@ -5538,7 +5547,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!i.isIn()||!player.canUse(card,i,false)) return;
}
if(trigger.addedTarget&&!trigger.addedTarget.isIn()) return;
if(trigger.addedTargets&&trigger.addedTargetfs.length){
if(trigger.addedTargets&&trigger.addedTargets.length){
for(var i of trigger.addedTargets){
if(!i.isIn()) return;
}
@ -5787,7 +5796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
logTarget:'player',
content:function(){
trigger.cancel();
target.damage(trigger.source,trigger.nature,trigger.num).set('card',trigger.card).set('cards',trigger.cards).twgonghuan=true;
player.damage(trigger.source,trigger.nature,trigger.num).set('card',trigger.card).set('cards',trigger.cards).twgonghuan=true;
},
},
//桥蕤
@ -6486,19 +6495,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'useCardToPlayer'},
filter:function(event,player){
if(!event.isFirstTarget||!get.tag(event.card,'damage')) return false;
return !player.hasSkillTag('noCompareSource')&&game.hasPlayer(target=>player.canCompare(target));
return !player.hasSkillTag('noCompareSource')&&game.hasPlayer(target=>{
return target!=player&&target.countCards('h')>0&&!target.hasSkillTag('noCompareTarget');
});
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('twzhenhu'),[1,3],function(card,player,target){
return player.canCompare(target);
return target!=player&&target.countCards('h')>0&&!target.hasSkillTag('noCompareTarget');
}).set('ai',function(target){
var player=_status.event.player,targets=_status.event.getTrigger().targets;
var num=0;
if(player.hasSkill('twlvren')) num+=2*(ui.selected.targets.length+1);
if(player.hasSkill('twchuanshu_effect')) num+=3;
var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
if(hs.length==0) return -1;
var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
if(Math.min(13,get.number(hs[0])+num)<=get.number(ts[0])) return -1;
return get.effect(target,{name:'guohe_copy2'},player,player)/2+(targets.contains(target)?get.damageEffect(target,player,player):0);
@ -6756,7 +6768,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.winner){
var targets=[player].addArray(event.targets).sortBySeat(player);
targets.remove(result.winner);
result.winner.useCard({name:'sha',nature:'fire',isCard:true},targets,'noai').set('addCount',false);
var card={name:'sha',nature:'fire',isCard:true};
var targetsx=targets.filter(function(target){
return result.winner.canUse(card,target,false);
});
if(targetsx.length) result.winner.useCard(card,targetsx,'noai').set('addCount',false);
}
}
}
@ -6858,7 +6874,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.$compareMultiple(event.card1,targets,cards);
game.log(player,'的拼点牌为',event.card1);
player.animate('target');
// game.delay(0,1000);
game.delay(0,1000);
'step 3'
event.target=null;
event.trigger('compare');
@ -6869,7 +6885,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.card2=event.cardlist[event.iwhile];
event.num2=event.getNum(event.card2);
game.log(event.target,'的拼点牌为',event.card2);
event.tempplayer.line(event.target);
//event.tempplayer.line(event.target);
delete event.player;
event.trigger('compare');
}
@ -6887,7 +6903,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.winner=i[0];
}
else if(event.winner&&i[1]==event.maxNum&&i[0]!=event.winner){
delete event.winner;
event.winner=null;
}
}
'step 6'
@ -6952,9 +6968,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
effect:{
audio:'twchuanshu',
trigger:{
player:['compare','useCardAfter'],
player:'compare',
target:'compare',
source:'damageBegin1',
},
direct:true,
forced:true,
@ -6976,44 +6991,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
filter:function(event,player,name){
if(name=='compare'){
if(event.player==player&&event.iwhile>0) return false;
return (player==event.player?event.num1:event.num2)<13;
}
else if(event.name=='useCard'){
return !player.getStorage('twchuanshu_clear').contains(player)&&event.card.name=='sha'&&player.getHistory('sourceDamage',evt=>{
return evt.card==event.card;
}).length&&player.hasMark('twchuanshu_mark');
}
return event.card&&event.card.name=='sha'&&!player.getStorage('twchuanshu_effect').contains(event.player)&&player.hasMark('twchuanshu_mark');
},
content:function(){
if(event.triggername=='compare'){
game.log(player,'的拼点牌点数+3');
trigger.num1=Math.min(13,trigger.num1+3);
}
else if(trigger.name=='useCard'){
var num=0;
player.getHistory('sourceDamage',evt=>{
if(evt.card==trigger.card){
num+=evt.num;
}
if(player==trigger.player) trigger.num1=Math.min(13,trigger.num1+3);
else trigger.num2=Math.min(13,trigger.num2+3);
},
group:'twchuanshu_damage',
},
damage:{
trigger:{player:['useCard','useCardAfter']},
forced:true,
charlotte:true,
filter:function(event,player,name){
if(name=='useCard') return (event.card.name=='sha'&&player.hasMark('twchuanshu_mark'));
return event._twchuanshu&&player.hasHistory('sourceDamage',function(evt){
return evt.card==event.card&&evt.getParent().type=='card';
});
var targets=player.getStorage('twchuanshu_effect');
targets.sortBySeat(_status.currentPhase);
for(var target of targets){
if(target.isIn()){
target.logSkill('twchuanshu_effect',player);
target.draw(num);
}
}
player.removeMark('twchuanshu_mark',player.countMark('twchuanshu_mark'),false);
},
content:function(){
if(event.triggername=='useCard'){
var num=player.countMark('twchuanshu_mark');
trigger.baseDamage+=num;
trigger._twchuanshu=num;
player.removeMark('twchuanshu_mark',num);
}
else{
trigger.num+=player.countMark('twchuanshu_mark');
}
var num1=trigger._twchuanshu;
var num2=0;
player.getHistory('sourceDamage',function(evt){
if(evt.card==trigger.card&&evt.getParent().type=='card') num2+=evt.num;
});
player.draw(num1*num2);
}
},
},
clear:{
trigger:{player:'phaseBegin'},
forced:true,
@ -7172,10 +7186,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player;
list[0]=num;
list[1]=(get.effect(target,{name:'guohe_copy2'},player,player)>0?((target.hp-damageNum<player.hp)?num:(num-Math.min(player.getCards('he'),num-1))):0);
if(_status.event.yimie(trigger,player,target)) list[2]=(get.recoverEffect(target,player,player)>get.damageEffect(target,player,player)?(Math.min(num-1,target.getDamagedHp())):(num-1))*2;
if(_status.event.yimie(trigger,player,target,damageNum)) list[2]=(get.recoverEffect(target,player,player)>get.damageEffect(target,player,player)?(Math.min(num-1,target.getDamagedHp())):(num-1))*2;
return Math.max.apply(Math,list);
}).set('yimie',function(trigger,player,target){
}).set('yimie',function(trigger,player,target,damageNum){
var hit=true;
var att=get.attitude(player,target);
if(get.type(trigger.card)=='trick'&&trigger.player.countCards('hs',{name:'wuxie'})) hit=false;
if(trigger.card.name=='huogong'&&trigger.player.countCards('h',function(card){
var list=[];
@ -7402,6 +7417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
xianfu:{
audio:'twsuizheng',
trigger:{global:'damageEnd'},
filter:function(event,player){
return player.getStorage('twsuizheng').contains(event.player)&&event.player.isIn();
@ -7451,12 +7467,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
player.awakenSkill('twtuidao');
var list1=['equip3','equip4'],list2=['basic','trick','equip'];
var list1=['equip3','equip4'].map(i=>get.translation(i)),list2=['basic','trick','equip'].map(i=>get.translation(i));
var targets=player.getStorage('twsuizheng'),str=get.translation(targets);
if(targets.length) str='与'+str;
player.chooseButton(2,true,[
'颓盗:废除你'+str+'的一个坐骑栏废除并选择一个类别',
'坐骑栏',
[list1,'tdnodes'],
'类别',
[list2,'tdnodes'],
]).set('filterButton',function(button){
var list=_status.event.list,link=button.link;
@ -7469,17 +7487,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player;
var list=_status.event.list,link=button.link;
if(list.contains(link)){
if(player.isDisabled(4)) return 'equip4';
if(player.isDisabled(3)) return 'equip3';
return 'equip4'
if(player.isDisabled(4)) return '攻击马';
if(player.isDisabled(3)) return '防御马';
return '攻击马';
}
if(!list.contains(link)){
var player=_status.event.player;
var targets=player.getStorage('twsuizheng');
for(var target of targets){
if(target.isIn()){
var listx=[0,0,0],list2=['basic','trick','equip'];
for(var i of target.getCards('he')) listx[list2.indexOf(get.type2(i))]++;
var listx=[0,0,0],list2=['basic','trick','equip'].map(i=>get.translation(i));
for(var i of target.getCards('he')) listx[list2.indexOf(get.translation(get.type2(i)))]++;
return list2[listx.indexOf(Math.max.apply(Math,listx))];
}
}
@ -7487,8 +7505,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}).set('list',list1);
'step 1'
if(!['equip3','equip4'].contains(result.links[0])) result.links.reverse();
var subtype=result.links[0],type=result.links[1];
if(result.links[0].indexOf('马')==-1) result.links.reverse();
var subtype=result.links[0]=='防御马'?'equip3':'equip4',type={基本:'basic',锦囊:'trick',装备:'equip'}[result.links[1]];
player.disableEquip(subtype);
var targets=player.getStorage('twsuizheng')
for(var target of targets){
@ -9657,7 +9675,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
popup:false,
charlotte:true,
content:function(){
var list=player.storage.twzhouhu_mahou;
var list=player.storage.twzhouzu_mahou;
list[1]--;
if(list[1]==0){
game.log(player,'的“咒诅”魔法生效');
@ -9668,8 +9686,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.removeSkill('twzhouzu_mahou');
}
else{
game.log(player,'的“咒”魔法剩余','#g'+(list[1])+'回合');
player.markSkill('twzhouhu_mahou');
game.log(player,'的“咒”魔法剩余','#g'+(list[1])+'回合');
player.markSkill('twzhouzu_mahou');
}
},
mark:true,
@ -11071,6 +11089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
twmoukui:{
audio:'moukui',
trigger:{player:'useCardToPlayered'},
direct:true,
preHidden:true,
@ -12484,6 +12503,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
perfectPair:{
tw_liufuren:['yuanshao'],
tw_xiahoushang:['caopi'],
},
characterReplace:{
tw_caocao:['tw_caocao','yj_caocao'],
},
@ -12706,7 +12729,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twqingtao_info:'①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。',
tw_jiangji:'蒋济',
twjichou:'急筹',
twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。',
twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。',
twjilun:'机论',
twjilun_info:'当你受到伤害后你可以摸X张牌X为〖急筹①〗记录数且至少为1至多为5或视为使用一张〖急筹①〗记录过且未被〖机论〗记录过的普通锦囊牌并记录此牌。',
tw_niufudongxie:'牛辅董翓',
@ -12764,12 +12787,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twxingluan_info:'结束阶段你可以亮出牌堆顶的六张牌然后你可以选择一种类型的牌并分配给任意角色每名角色至多三张。然后所有以此法获得过牌且获得的牌数不少于你的角色失去1点体力。',
tw_xujing:'TW许靖',
twboming:'博名',
twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若你本回合因〖博名①〗失去了不少于两张牌,你摸两张牌。',
twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若所有其他角色于此回合获得的牌数之和大于1,你摸两张牌。',
twejian:'恶荐',
twejian_info:'当其他角色获得你的牌后若其有其他与此牌类型相同的牌你可以令其选择一项1.受到你造成的1点伤害2.弃置这些牌。',
tw_zhangfei:'TW张飞',
twxuhe:'虚吓',
twxuhe_info:'当你使用的【杀】被【闪】抵消时,你可以弃置一张牌,令其选择一项1.受到你造成的1点伤害2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。',
twxuhe_info:'当你使用的【杀】被【闪】抵消时,你可以令其选择一项1.受到你造成的1点伤害2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。',
tw_xuezong:'TW薛综',
twjiexun:'诫训',
twjiexun_info:'结束阶段你可以选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌然后其弃置X张牌。若其以此法弃置了所有牌你选择一项1.摸X张牌然后将X归零2.修改〖复难〗和〖诫训〗X为此前〖诫训〗的发动次数。',
@ -12791,7 +12814,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twluanlve_info:'①出牌阶段你可以将X张【杀】当做【顺手牵羊】对一名本阶段未成为过【顺手牵羊】的目标的角色使用X为你以此法使用【顺手牵羊】的次数。②当你使用牌时若此牌为【顺手牵羊】你令此牌不能被响应。',
tw_fengxí:'冯习',
twqingkou:'轻寇',
twqingkou_info:'准备阶段,你可以视为对一名其他角色使用一张【决斗】。然后此牌的伤害来源摸一张牌,若该角色为你,你跳过本回合的判定阶段和弃牌阶段。',
twqingkou_info:'准备阶段,你可以视为对一名其他角色使用一张【决斗】。然后此牌的伤害来源摸一张牌,若伤害来源包括你,你跳过本回合的判定阶段和弃牌阶段。',
tw_zhangji:'张既',
twdingzhen:'定镇',//丁真
twdingzhen_info:'一轮游戏开始时你可以选择任意名你至其距离不大于X的角色X为你的体力值这些角色选择一项1.弃置一张【杀】2.本轮其于回合内使用的第一张牌不能指定你为目标。',
@ -12919,7 +12942,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
wangxing:'妄行',
twxiawei:'狭威',
twxiawei_info:'①游戏开始时你将牌堆中的两张基本牌置于武将牌上称为“威”。②回合开始时你将所有“威”置入弃牌堆。③你可以将“威”如手牌般使用或打出。④妄行准备阶段你可以将牌堆顶的X+1张牌置于武将牌上称为“威”。',
twqiongji:'技',
twqiongji:'技',
twqiongji_info:'锁定技。①每回合限一次。当你使用或打出“威”后,你摸一张牌。②当你受到伤害时,若你没有“威”,此伤害+1。',
tw_bianfuren:'TW卞夫人',
twwanwei:'挽危',

View File

@ -1479,9 +1479,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
characterReplace:{
duji:['re_duji','duji'],
duji:['re_duji','duji','ns_duji'],
sp_taishici:['re_sp_taishici','sp_taishici'],
mazhong:['mazhong','re_mazhong'],
wenpin:['re_wenpin','wenpin'],
},
translate:{
xinghuoliaoyuan:'星火燎原',

Some files were not shown because too many files have changed in this diff Show More