2769 lines
108 KiB
JavaScript
2769 lines
108 KiB
JavaScript
import { game } from '../noname.js';
|
||
game.import('character',function(lib,game,ui,get,ai,_status){
|
||
return {
|
||
//clan n.宗派;(尤指苏格兰的)宗族,氏族,家族;庞大的家族;帮派;小集团
|
||
name:'clan',
|
||
connect:true,
|
||
character:{
|
||
clan_wuxian:['female','shu',3,['clanyirong','clanguixiang','clanmuyin'],['clan:陈留吴氏']],
|
||
clan_wuban:['male','shu',4,['clanzhanding','clanmuyin'],['clan:陈留吴氏']],
|
||
clan_xunshu:['male','qun',3,['clanshenjun','clanbalong','clandaojie'],['clan:颍川荀氏']],
|
||
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:颍川韩氏']],
|
||
clan_wukuang:['male','qun',4,['clanlianzhu','clanmuyin'],['clan:陈留吴氏']],
|
||
clan_wangling:['male','wei',4,['clanbolong','clanzhongliu'],['clan:太原王氏']],
|
||
clan_zhongyan:['female','jin',3,['clanguangu','clanxiaoyong','clanbaozu'],['clan:颍川钟氏']],
|
||
clan_wangyun:['male','qun',3,['clanjiexuan','clanmingjie','clanzhongliu'],['clan:太原王氏']],
|
||
clan_wanghun:['male','jin',3,['clanfuxun','clanchenya','clanzhongliu'],['clan:太原王氏']],
|
||
clan_zhonghui:['male','wei','3/4',['clanyuzhi','clanxieshu','clanbaozu'],['clan:颍川钟氏']],
|
||
clan_zhongyu:['male','wei',3,['clanjiejian','clanhuanghan','clanbaozu'],['clan:颍川钟氏']],
|
||
clan_wanglun:['male','jin',3,['clanqiuxin','clanjianyuan','clanzhongliu'],['clan:太原王氏']],
|
||
clan_xunyou:['male','wei',3,['clanbaichu','clandaojie'],['clan:颍川荀氏']],
|
||
clan_wuqiao:['male','jin',4,['clanqiajue','clanmuyin'],['clan:陈留吴氏']],
|
||
},
|
||
characterSort:{
|
||
clan:{
|
||
clan_wu:['clan_wuxian','clan_wuban','clan_wukuang','clan_wuqiao'],
|
||
clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan','clan_xunyou'],
|
||
clan_han:['clan_hanshao','clan_hanrong'],
|
||
clan_wang:['clan_wangling','clan_wangyun','clan_wanghun','clan_wanglun'],
|
||
clan_zhong:['clan_zhongyan','clan_zhonghui','clan_zhongyu'],
|
||
},
|
||
},
|
||
/** @type { importCharacterConfig['skill'] } */
|
||
skill:{
|
||
//族吴乔
|
||
clanqiajue:{
|
||
audio:2,
|
||
trigger:{player:'phaseDrawBegin'},
|
||
filter(event,player){
|
||
return player.countCards('he',card=>{
|
||
if(_status.connectMode&&get.position(card)=='h') return true;
|
||
return get.color(card,player)=='black'&&lib.filter.cardDiscardable(card,player);
|
||
})>0;
|
||
},
|
||
direct:true,
|
||
async content(event,trigger,player){
|
||
const {result:{bool}}=await player.chooseToDiscard((card,player)=>{
|
||
return get.color(card,player)=='black'&&lib.filter.cardDiscardable(card,player);
|
||
},'he')
|
||
.set('prompt','当前手牌点数和为'+player.getCards('h').reduce((sum,card)=>sum+get.number(card),0)+','+get.prompt('clanqiajue'))
|
||
.set('prompt2',lib.translate.clanqiajue_info.slice(lib.translate.clanqiajue_info.indexOf('弃置')).slice(0,-1))
|
||
.set('ai',card=>{
|
||
const player=get.event('player'),goon=get.position(card)=='h';
|
||
let num=player.getCards('h').reduce((sum,card)=>sum+get.number(card),0);
|
||
if(num-(goon?get.number(card):0)>30) return 0;
|
||
return goon?get.number(card):1/(get.value(card)||0.5);
|
||
}).set('logSkill','clanqiajue');
|
||
if(bool){
|
||
player.when({player:['phaseDrawEnd','phaseDrawCancelled','phaseUseSkipped']})
|
||
.filter(evt=>evt==trigger)
|
||
.then(()=>{
|
||
const cards=player.getCards('h'),num=cards.reduce((sum,card)=>sum+get.number(card),0);
|
||
if(cards.length) player.showCards(cards,get.translation(player)+'【跒倔】展示');
|
||
if(num>30){
|
||
player.popup('杯具');
|
||
lib.skill.chenliuwushi.change(player,-2);
|
||
}
|
||
else{
|
||
player.popup('洗具');
|
||
const next=player.phaseDraw();
|
||
event.next.remove(next);
|
||
trigger.getParent('phase').next.push(next);
|
||
}
|
||
})
|
||
}
|
||
},
|
||
},
|
||
//族荀攸
|
||
clanbaichu:{
|
||
derivation:'qice',
|
||
audio:2,
|
||
trigger:{player:'useCardAfter'},
|
||
filter(event,player){
|
||
const storage=player.storage.clanbaichu||{};
|
||
if(Object.values(storage).includes(event.card.name)) return true;
|
||
const suit=get.suit(event.card);
|
||
if(suit=='none') return false;
|
||
if(!player.hasSkill('qice')) return true;
|
||
const key=`${suit}+${get.type2(event.card)}`;
|
||
return !(key in storage)
|
||
},
|
||
forced:true,
|
||
content(){
|
||
'step 0'
|
||
var storage=player.storage.clanbaichu||{},suit=get.suit(trigger.card);
|
||
if(suit!='none'){
|
||
var key=`${suit}+${get.type2(trigger.card)}`;
|
||
if(key in storage){
|
||
if(!player.hasSkill('qice')){
|
||
player.addTempSkills('qice','roundStart');
|
||
player.popup('奇策');
|
||
// game.log(player,'获得了技能','#g【奇策】');
|
||
}
|
||
event.goto(2);
|
||
}
|
||
else{
|
||
var list=lib.inpile.filter(name=>get.type(name)=='trick');
|
||
list.removeArray(Object.values(storage));
|
||
if(list.length>0){
|
||
var dialog=['百出:选择记录一种普通锦囊牌',[list,'vcard']];
|
||
player.chooseButton(dialog,true).set('ai',function(button){
|
||
var player=_status.event.player,name=button.link[2];
|
||
if(name==_status.event.getTrigger().card.name) return 1919810;
|
||
if(name=='wuxie') return 114514;
|
||
return get.effect(player,{name:name},player,player)*(1+player.countCards('hs',name));
|
||
});
|
||
}
|
||
else event.goto(2);
|
||
}
|
||
}
|
||
else event.goto(2);
|
||
'step 1'
|
||
if(result.bool){
|
||
var key=`${get.suit(trigger.card)}+${get.type2(trigger.card)}`,name=result.links[0][2];
|
||
if(!player.storage.clanbaichu) player.storage.clanbaichu={};
|
||
player.storage.clanbaichu[key]=name;
|
||
player.markSkill('clanbaichu');
|
||
game.log(player,'记录了','#y'+get.translation(name));
|
||
game.delayx();
|
||
}
|
||
'step 2'
|
||
if(Object.values(player.getStorage('clanbaichu')).includes(trigger.card.name)){
|
||
player.chooseDrawRecover(true);
|
||
}
|
||
},
|
||
intro:{
|
||
markcount(storage){
|
||
return Object.keys(storage).length;
|
||
},
|
||
content(storage){
|
||
if(!storage) return '当前暂无记录';
|
||
const keys=Object.keys(storage).map(i=>i.split('+'));
|
||
keys.sort((a,b)=>{
|
||
if(a[0]!=b[0]) return lib.suit.indexOf(b[0])-lib.suit.indexOf(a[0]);
|
||
return lib.sort.name(a[1],b[1]);
|
||
});
|
||
return keys.map(item=>{
|
||
return `<li>${get.translation(item[0])}+${get.translation(item[1])}:【${get.translation(storage[item.join('+')])}】`;
|
||
}).join('<br>');
|
||
},
|
||
},
|
||
},
|
||
//族王沦
|
||
clanqiuxin:{
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
filterTarget:lib.filter.notMe,
|
||
usable:1,
|
||
content(){
|
||
'step 0'
|
||
var str=get.translation(player);
|
||
target.chooseControl().set('choiceList',[
|
||
str+'下次对你使用【杀】后,其视为对你使用任意普通锦囊牌',
|
||
str+'下次对你使用任意普通锦囊牌后,其视为对你使用【杀】',
|
||
]).set('ai',function(){
|
||
var target=_status.event.player;
|
||
var player=_status.event.target;
|
||
var num1=get.effect(target,get.autoViewAs({name:'sha'},[]),player,player);
|
||
if(!player.canUse(get.autoViewAs({name:'sha'},[]),target)) num1=0;
|
||
var num2=0;
|
||
for(var name of lib.inpile){
|
||
if(get.type(name)!='trick') continue;
|
||
if(!player.canUse(get.autoViewAs({name:name},[]),target)) continue;
|
||
if(num2<get.effect(target,get.autoViewAs({name:name},[]),player,player)) num2=get.effect(target,get.autoViewAs({name:name},[]),player,player);
|
||
}
|
||
return num1>=num2?1:0;
|
||
}).set('target',player);
|
||
'step 1'
|
||
player.addSkill('clanqiuxin_effect');
|
||
player.markAuto('clanqiuxin_effect',[[target,result.index]]);
|
||
},
|
||
ai:{
|
||
order:9,
|
||
result:{
|
||
target(player,target){
|
||
var cards=player.getCards('hs',card=>{
|
||
if(get.name(card,player)!='sha'&&get.type(card,player)!='trick') return false;
|
||
return player.hasValueTarget(card);
|
||
});
|
||
if(cards.some(card=>player.canUse(card,target)&&get.effect(target,card,player,player)>0)){
|
||
var att=get.attitude(player,target);
|
||
if(att>0) return 9;
|
||
if(att<0) return -6;
|
||
return 0;
|
||
}
|
||
else{
|
||
var att=get.attitude(player,target);
|
||
if(att<0) return -3;
|
||
if(att>0) return 1;
|
||
return 2;
|
||
}
|
||
},
|
||
},
|
||
},
|
||
subSkill:{
|
||
effect:{
|
||
charlotte:true,
|
||
onremove:true,
|
||
intro:{
|
||
content(storage,player){
|
||
var str='';
|
||
for(var i=0;i<storage.length;i++){
|
||
var list=storage[i];
|
||
var strx=['【杀】','任意普通锦囊牌'];
|
||
if(list[1]) strx.reverse();
|
||
str+='对'+get.translation(list[0])+'使用'+strx[0]+'后,视为对其使用'+strx[1];
|
||
str+='<br>';
|
||
}
|
||
str=str.slice(0,-4);
|
||
return str;
|
||
},
|
||
},
|
||
trigger:{player:'useCardAfter'},
|
||
filter(event,player){
|
||
if(!event.targets||!event.targets.length) return false;
|
||
if(event.card.name=='sha') return event.targets.some(target=>{
|
||
return player.getStorage('clanqiuxin_effect').some(list=>list[0]==target&&list[1]==0);
|
||
});
|
||
if(get.type(event.card)=='trick') return event.targets.some(target=>{
|
||
return player.getStorage('clanqiuxin_effect').some(list=>list[0]==target&&list[1]==1);
|
||
});
|
||
return false;
|
||
},
|
||
forced:true,
|
||
popup:false,
|
||
content(){
|
||
'step 0'
|
||
var list;
|
||
if(trigger.card.name=='sha') list=player.getStorage('clanqiuxin_effect').filter(listx=>trigger.targets.includes(listx[0])&&listx[1]==0);
|
||
if(get.type(trigger.card)=='trick') list=player.getStorage('clanqiuxin_effect').filter(listx=>trigger.targets.includes(listx[0])&&listx[1]==1);
|
||
player.unmarkAuto('clanqiuxin_effect',list);
|
||
var targets=list.map(listx=>listx[0]);
|
||
event.targets=targets;
|
||
'step 1'
|
||
var target=event.targets.shift();
|
||
event.target=target;
|
||
var list=[];
|
||
for(var name of lib.inpile){
|
||
if(name!='sha'&&get.type(name)!='trick') continue;
|
||
if(trigger.card.name=='sha'&&get.type(name)!='trick') continue;
|
||
if(name=='sha'&&get.type(trigger.card)!='trick') continue;
|
||
if(!player.canUse(get.autoViewAs({name:name},[]),target)) continue;
|
||
list.push([get.translation(get.type(name)),'',name]);
|
||
}
|
||
if(!list.length) event.goto(3);
|
||
else{
|
||
player.chooseButton(['求心:视为对'+get.translation(target)+'使用一张牌',[list,'vcard']],true).set('ai',function(button){
|
||
var player=_status.event.player;
|
||
var target=_status.event.target;
|
||
return get.effect(target,{name:button.link[2],nature:button.link[3]},player,player);
|
||
}).set('target',target);
|
||
}
|
||
'step 2'
|
||
if(result.bool){
|
||
var card={
|
||
name:result.links[0][2],
|
||
nature:result.links[0][3],
|
||
};
|
||
player.useCard(card,target,false);
|
||
}
|
||
'step 3'
|
||
if(event.targets.length) event.goto(1);
|
||
else if(!player.getStorage('clanqiuxin_effect').length) player.removeSkill('clanqiuxin_effect');
|
||
},
|
||
},
|
||
},
|
||
},
|
||
clanjianyuan:{
|
||
inherit:'clanchenya',
|
||
filter(event,player){
|
||
for(var phase of lib.phaseName){
|
||
var evt=event.getParent(phase);
|
||
if(evt&&evt.name==phase){
|
||
if(event.player.getHistory('useCard',evtx=>evtx.getParent(phase)==evt).length) return lib.skill.clanchenya.filter(event,player);
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
content(){
|
||
'step 0'
|
||
var num=0;
|
||
for(var phase of lib.phaseName){
|
||
var evt=trigger.getParent(phase);
|
||
if(evt&&evt.name==phase){
|
||
num+=trigger.player.getHistory('useCard',evtx=>evtx.getParent(phase)==evt).length;
|
||
}
|
||
}
|
||
trigger.player.chooseCard('是否重铸任意张牌名字数为'+num+'的牌?',[1,Infinity],'he',(card,player)=>_status.event.cards.includes(card)&&player.canRecast(card)).set('ai',card=>{
|
||
var val=get.value(card);
|
||
return 6-val;
|
||
}).set('cards',trigger.player.getCards('he',card=>{
|
||
return get.cardNameLength(card)==num;
|
||
}));
|
||
'step 1'
|
||
if(result.bool) trigger.player.recast(result.cards);
|
||
},
|
||
},
|
||
//族钟毓
|
||
clanjiejian:{
|
||
audio:2,
|
||
trigger:{player:'useCardToPlayered'},
|
||
filter(event,player){
|
||
if(!event.isFirstTarget||get.type(event.card)=='equip') return false;
|
||
return get.cardNameLength(event.card)==player.getHistory('useCard').indexOf(event.getParent())+1;
|
||
},
|
||
direct:true,
|
||
locked:false,
|
||
content(){
|
||
'step 0'
|
||
var num=get.cardNameLength(trigger.card);
|
||
event.num=num;
|
||
player.chooseTarget(get.prompt('clanjiejian'),'令一名目标角色摸'+get.cnNumber(num)+'张牌',function(card,player,target){
|
||
return _status.event.getTrigger().targets.includes(target);
|
||
}).set('ai',target=>get.attitude(_status.event.player,target));
|
||
'step 1'
|
||
if(result.bool){
|
||
var target=result.targets[0];
|
||
player.logSkill('clanjiejian',target);
|
||
target.draw(num);
|
||
}
|
||
},
|
||
ai:{
|
||
threaten:3,
|
||
effect:{
|
||
player(card,player,target){
|
||
if(!target||typeof card!=='object'||player._clanjiejian_mod_temp||get.type(card)==='equip'||
|
||
get.attitude(player,target)<=0||get.cardNameLength(card)!==player.getHistory('useCard').length+1) return;
|
||
let targets=[target],evt=_status.event.getParent('useCard');
|
||
targets.addArray(ui.selected.targets);
|
||
if(evt&&evt.card==card) targets.addArray(evt.targets);
|
||
return [1,0.8*get.cardNameLength(card)/targets.length];
|
||
}
|
||
}
|
||
},
|
||
mod:{
|
||
aiOrder(player,card,num){
|
||
if(typeof card=='object'&&get.type(card)!=='equip'){
|
||
let cs=get.cardNameLength(card)-player.getHistory('useCard').length-1;
|
||
if(cs<0) return num;
|
||
if(cs>0) return num/3;
|
||
player._clanjiejian_mod_temp=true;
|
||
let bool=game.hasPlayer(target=>{
|
||
if(get.attitude(player,target)<=0||!player.canUse(card,target,null,true)) return false;
|
||
return get.effect(target,card,player,player)+get.effect(target,{name:'draw'},player,player)>0;
|
||
});
|
||
delete player._clanjiejian_mod_temp;
|
||
if(bool) return num+15;
|
||
}
|
||
},
|
||
},
|
||
},
|
||
clanhuanghan:{
|
||
audio:2,
|
||
trigger:{player:'damageEnd'},
|
||
filter(event,player){
|
||
if(!event.card) return false;
|
||
var num=get.cardNameLength(event.card);
|
||
return typeof num=='number'&&num>0;
|
||
},
|
||
check(event,player){
|
||
let num=get.cardNameLength(event.card)-player.getDamagedHp();
|
||
if(num>=0) return true;
|
||
if(num<-1) return false;
|
||
if(player.hasSkill('clanbaozu',null,false,false)&&player.awakenedSkills.includes('clanbaozu')&&player.getHistory('useSkill',evt=>{
|
||
return evt.skill=='clanhuanghan';
|
||
}).length) return true;
|
||
return false;
|
||
},
|
||
content(){
|
||
'step 0'
|
||
player.draw(get.cardNameLength(trigger.card));
|
||
if(player.isDamaged()) player.chooseToDiscard(player.getDamagedHp(),'he',true);
|
||
'step 1'
|
||
if(player.getHistory('useSkill',evt=>evt.skill=='clanhuanghan').length>1&&player.hasSkill('clanbaozu',null,false,false)&&player.awakenedSkills.includes('clanbaozu')){
|
||
player.restoreSkill('clanbaozu');
|
||
player.popup('保族');
|
||
game.log(player,'恢复了技能','#【保族】');
|
||
}
|
||
},
|
||
ai:{
|
||
threaten:3,
|
||
effect:{
|
||
target(card,player,target){
|
||
if(!get.tag(card,'damage')||player.hasSkillTag('jueqing',false,target)) return;
|
||
let num=get.cardNameLength(card)-target.getDamagedHp();
|
||
if(num>0) return [1,num+0.1];
|
||
}
|
||
}
|
||
},
|
||
},
|
||
//族钟会
|
||
clanyuzhi:{
|
||
mod:{
|
||
aiOrder(player,card,num){
|
||
if(card.name=='tao') return num/114514;
|
||
},
|
||
},
|
||
audio:2,
|
||
trigger:{global:'roundStart'},
|
||
direct:true,
|
||
locked:true,
|
||
content(){
|
||
'step 0'
|
||
player.unmarkSkill('clanyuzhi');
|
||
var num1=0,num2=0,num3=0,bool=true;
|
||
var history=player.actionHistory;
|
||
for(var i=history.length-2;i>=0;i--){
|
||
for(var evt of history[i].gain){
|
||
if(evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi'){
|
||
if(bool) num1+=evt.cards.length;
|
||
else num2+=evt.cards.length;
|
||
}
|
||
}
|
||
if(bool) num3+=history[i].useCard.length;
|
||
if(history[i].isRound){
|
||
if(bool) bool=false;
|
||
else break;
|
||
}
|
||
}
|
||
event.num1=num1;
|
||
if(num1>0&&(num2>0&&num1>num2)||num1>num3){
|
||
player.logSkill('clanyuzhi');
|
||
if(num2>0&&num1>num2) game.log(player,'的野心已开始膨胀','#y('+num1+'张>'+num2+'张)');
|
||
if(num1>num3) game.log(player,'的行动未达到野心','#y('+num3+'张<'+num1+'张)');
|
||
if(player.hasSkill('clanbaozu',null,false,false)) player.chooseBool('迂志:是否失去〖保族〗?','若选择“否”,则你失去1点体力').set('choice',player.awakenedSkills.includes('clanbaozu'));
|
||
else event._result={bool:false};
|
||
}
|
||
else event.goto(2);
|
||
'step 1'
|
||
if(result.bool){
|
||
player.removeSkills('clanbaozu');
|
||
}
|
||
else player.loseHp();
|
||
'step 2'
|
||
if(!player.countCards('h')) event.finish();
|
||
'step 3'
|
||
player.chooseToDiscard('迂志:请弃置一张手牌','摸此牌牌名字数的牌。下一轮开始时,若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数,则你失去1点体力。',true,function(card,player){
|
||
var num=get.cardNameLength(card);
|
||
return typeof num=='number'&&num>0;
|
||
}).set('logSkill','clanyuzhi').set('ai',function(card){
|
||
if(_status.event.dying&&_status.event.num>0&&get.cardNameLength(card)>_status.event.num) return 1/get.cardNameLength(card);//怂
|
||
return get.cardNameLength(card);//勇
|
||
}).set('dying',player.hp+player.countCards('hs',{name:['tao','jiu']})<1).set('num',event.num1);
|
||
'step 4'
|
||
if(result.bool){
|
||
player.draw(get.cardNameLength(result.cards[0]));
|
||
player.storage.clanyuzhi=get.cardNameLength(result.cards[0]);
|
||
player.markSkill('clanyuzhi');
|
||
}
|
||
},
|
||
ai:{
|
||
threaten:3,
|
||
nokeep:true,
|
||
},
|
||
onremove:true,
|
||
intro:{content:'本轮野心:#张'},
|
||
},
|
||
clanxieshu:{
|
||
audio:2,
|
||
trigger:{player:'damageEnd',source:'damageSource'},
|
||
filter(event,player){
|
||
if(!event.card||player.isLinked()) return false;
|
||
if(game.getGlobalHistory('everything',evt=>{
|
||
if(evt.name!='damage'||!evt.card) return false;
|
||
return evt.player==player||(evt.source&&evt.source==player);
|
||
}).indexOf(event)!=0) return false;
|
||
var num=get.cardNameLength(event.card);
|
||
return typeof num=='number'&&num>0&&player.countCards('he')>0;
|
||
},
|
||
direct:true,
|
||
content(){
|
||
'step 0'
|
||
var num=get.cardNameLength(trigger.card),str='';
|
||
if(player.getDamagedHp()>0) str+=('并摸'+get.cnNumber(player.getDamagedHp())+'张牌');
|
||
player.chooseToDiscard(get.prompt('clanxieshu'),'横置武将牌,弃置'+get.cnNumber(num)+'张牌'+str,'he',num).set('ai',function(card){
|
||
var player=_status.event.player;
|
||
var num=_status.event.num;
|
||
var num2=player.getDamagedHp();
|
||
if(num<num2) return 8-get.value(card);
|
||
if(num==num2||num2>=(2+num-num2)) return lib.skill.zhiheng.check(card);
|
||
return 0;
|
||
}).set('num',num).logSkill='clanxieshu';
|
||
'step 1'
|
||
if(result.bool){
|
||
player.link(true);
|
||
if(player.getDamagedHp()>0) player.draw(player.getDamagedHp());
|
||
}
|
||
},
|
||
ai:{threaten:3},
|
||
},
|
||
//族王浑
|
||
clanfuxun:{
|
||
mod:{
|
||
aiOrder(player,card,num){
|
||
if(player.isPhaseUsing()&&get.type(card)=='equip'&&get.equipValue(card,player)>0) return num+3;
|
||
},
|
||
},
|
||
locked:false,
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
usable:1,
|
||
filterCard:true,
|
||
position:'h',
|
||
discard:false,
|
||
lose:false,
|
||
delay:false,
|
||
selectCard(){
|
||
var player=_status.event.player;
|
||
if(ui.selected.targets.length&&!ui.selected.targets[0].countGainableCards(player,'h')) return 1;
|
||
return [0,1];
|
||
},
|
||
filterTarget(card,player,target){
|
||
if(player==target) return false;
|
||
if(!ui.selected.cards.length) return target.countGainableCards(player,'h')>0;
|
||
return true;
|
||
},
|
||
check(card){
|
||
var player=_status.event.player;
|
||
var evtx=_status.event.getParent('phaseUse');
|
||
var targets=game.filterPlayer(target=>target!=player&&lib.skill.clanfuxun.ai.result.target(player,target)!=0);
|
||
targets.sort((a,b)=>Math.abs(lib.skill.clanfuxun.ai.result.target(player,b))-Math.abs(lib.skill.clanfuxun.ai.result.target(player,a)));
|
||
if(evtx&&targets.length){
|
||
var target=targets[0];
|
||
if(!target.hasHistory('lose',evt=>{
|
||
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
|
||
})&&!target.hasHistory('gain',evt=>{
|
||
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
|
||
})&&Math.abs(player.countCards('h')-target.countCards('h'))==2){
|
||
if(player.countCards('h')>target.countCards('h')) return 1/(get.value(card)||0.5);
|
||
return -1;
|
||
}
|
||
if(card.name=='du') return 20;
|
||
return -1;
|
||
}
|
||
if(card.name=='du') return 20;
|
||
return -1;
|
||
},
|
||
content(){
|
||
'step 0'
|
||
if(cards.length){
|
||
player.give(cards,target);
|
||
}
|
||
else{
|
||
player.gainPlayerCard(target,'h',true);
|
||
}
|
||
'step 1'
|
||
var evtx=event.getParent('phaseUse');
|
||
if(player.countCards('h')==target.countCards('h')&&evtx&&!target.hasHistory('lose',evt=>{
|
||
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
|
||
})&&!target.hasHistory('gain',evt=>{
|
||
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
|
||
})&&player.countCards('he')){
|
||
var list=[];
|
||
for(var name of lib.inpile){
|
||
if(get.type(name)!='basic') continue;
|
||
if(player.hasUseTarget({name:name})) list.push(['基本','',name]);
|
||
if(name=='sha'){
|
||
for(var nature of lib.inpile_nature){
|
||
if(player.hasUseTarget({name:name,nature:nature})) list.push(['基本','',name,nature]);
|
||
}
|
||
}
|
||
}
|
||
if(list.length){
|
||
player.chooseButton(['是否将一张牌当做一种基本牌使用?',[list,'vcard']]).set('ai',button=>{
|
||
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
|
||
});
|
||
}
|
||
else event.finish();
|
||
}
|
||
else event.finish();
|
||
'step 2'
|
||
if(result.bool){
|
||
var card={
|
||
name:result.links[0][2],
|
||
nature:result.links[0][3]
|
||
};
|
||
game.broadcastAll(function(card){
|
||
lib.skill.clanfuxun_backup.viewAs=card;
|
||
},card);
|
||
var next=player.chooseToUse();
|
||
next.set('openskilldialog','将一张牌当做'+get.translation(card)+'使用');
|
||
next.set('norestore',true);
|
||
next.set('addCount',false);
|
||
next.set('_backupevent','clanfuxun_backup');
|
||
next.set('custom',{
|
||
add:{},
|
||
replace:{window(){}}
|
||
});
|
||
next.backup('clanfuxun_backup');
|
||
}
|
||
},
|
||
ai:{
|
||
order(item,player){
|
||
var evtx=_status.event.getParent('phaseUse');
|
||
if(game.hasPlayer(current=>{
|
||
if(current==player||!evtx||get.attitude(player,current)==0) return false;
|
||
return !current.hasHistory('lose',evt=>{
|
||
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
|
||
})&&!current.hasHistory('gain',evt=>{
|
||
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
|
||
})&&Math.abs(player.countCards('h')-current.countCards('h'))==2;
|
||
})) return 10;
|
||
return 2;
|
||
},
|
||
result:{
|
||
target(player,target){
|
||
var evtx=_status.event.getParent('phaseUse');
|
||
var num=get.sgn(get.attitude(player,target));
|
||
var targets=game.filterPlayer(current=>{
|
||
if(current==player||!evtx||get.attitude(player,current)==0) return false;
|
||
return !current.hasHistory('lose',evt=>{
|
||
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
|
||
})&&!current.hasHistory('gain',evt=>{
|
||
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
|
||
})&&Math.abs(player.countCards('h')-current.countCards('h'))==2;
|
||
});
|
||
if(targets.includes(target)){
|
||
if(player.countCards('h')<target.countCards('h')) return get.sgn(num+0.5)*Math.sqrt(2-num);
|
||
else return num*(2+num);
|
||
}
|
||
return get.sgn(num+0.5)*(1-num)*0.25;
|
||
},
|
||
},
|
||
},
|
||
subSkill:{
|
||
backup:{
|
||
filterCard(card){
|
||
return get.itemtype(card)=='card';
|
||
},
|
||
position:'hes',
|
||
filterTarget:lib.filter.filterTarget,
|
||
selectCard:1,
|
||
check(card){
|
||
var player=_status.event.player;
|
||
if(player.hasSkill('clanzhongliu')&&get.position(card)!='h') return 10-get.value(card);
|
||
return 5-get.value(card);
|
||
},
|
||
log:false,
|
||
precontent(){
|
||
delete event.result.skill;
|
||
},
|
||
},
|
||
}
|
||
},
|
||
clanchenya:{
|
||
audio:2,
|
||
trigger:{
|
||
global:['useSkillAfter','logSkill'],
|
||
},
|
||
filter(event,player){
|
||
if(event.type!='player') return false;
|
||
var skill=event.sourceSkill||event.skill;
|
||
var info=get.info(skill);
|
||
if(info.charlotte) return false;
|
||
var translation=get.skillInfoTranslation(skill,event.player);
|
||
if(!translation) return false;
|
||
var match=translation.match(/“?出牌阶段限一次/g);
|
||
if(!match||match.every(value=>value!='出牌阶段限一次')) return false;
|
||
return event.player.countCards('h')>0;
|
||
},
|
||
check(event,player){
|
||
return get.attitude(player,event.player)>0;
|
||
},
|
||
logTarget:'player',
|
||
content(){
|
||
'step 0'
|
||
var num=trigger.player.countCards('h');
|
||
trigger.player.chooseCard('是否重铸任意张牌名字数为'+num+'的牌?',[1,Infinity],'he',(card,player)=>_status.event.cards.includes(card)&&player.canRecast(card)).set('ai',card=>{
|
||
var val=get.value(card);
|
||
return 6-val;
|
||
}).set('cards',trigger.player.getCards('he',card=>{
|
||
return get.cardNameLength(card)==num;
|
||
}));
|
||
'step 1'
|
||
if(result.bool) trigger.player.recast(result.cards);
|
||
}
|
||
},
|
||
//族王允
|
||
clanjiexuan:{
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
limited:true,
|
||
zhuanhuanji:'number',
|
||
mark:true,
|
||
marktext:'☯',
|
||
intro:{
|
||
markcount:()=>0,
|
||
content(storage){
|
||
return '限定技,转换技。你可以将一张'+((storage||0)%2?'黑色牌当【过河拆桥】':'红色牌当【顺手牵羊】')+'使用。';
|
||
},
|
||
},
|
||
viewAs(cards,player){
|
||
var storage=player.storage.clanjiexuan;
|
||
var name=(storage||0)%2?'guohe':'shunshou';
|
||
return {name:name};
|
||
},
|
||
check(card){
|
||
var player=_status.event.player;
|
||
var storage=player.storage.clanjiexuan;
|
||
var name=(storage||0)%2?'guohe':'shunshou';
|
||
var fix=player.hasSkill('clanzhongliu')&&get.position(card)!='h'?2:1;
|
||
return (get.value({name:name},player)-get.value(card))*fix;
|
||
},
|
||
position:'hes',
|
||
filterCard(card,player){
|
||
var storage=player.storage.clanjiexuan;
|
||
return get.color(card)==((storage||0)%2?'black':'red');
|
||
},
|
||
prompt(){
|
||
var storage=_status.event.player.storage.clanjiexuan;
|
||
if((storage||0)%2) return '将一张黑色牌当【过河拆桥】使用';
|
||
return '将一张红色牌当【顺手牵羊】使用';
|
||
},
|
||
skillAnimation:true,
|
||
animationColor:'thunder',
|
||
precontent(){
|
||
'step 0'
|
||
var skill='clanjiexuan';
|
||
player.logSkill(skill);
|
||
player.changeZhuanhuanji(skill);
|
||
player.awakenSkill(skill,true);
|
||
delete event.result.skill;
|
||
},
|
||
ai:{
|
||
order(item,player){
|
||
player=player||_status.event.player;
|
||
var storage=_status.event.player.storage.clanjiexuan;
|
||
var name=(storage||0)%2?'guohe':'shunshou';
|
||
return get.order({name:name})+0.1;
|
||
},
|
||
},
|
||
},
|
||
clanmingjie:{
|
||
init(player){
|
||
player.addSkill('clanmingjie_record');
|
||
},
|
||
initSkill(skill){
|
||
if(!lib.skill[skill]){
|
||
lib.skill[skill]={
|
||
charlotte:true,
|
||
mark:true,
|
||
marktext:'戒',
|
||
intro:{content:'已被$指定为【铭戒】目标'},
|
||
};
|
||
lib.translate[skill]='铭戒';
|
||
lib.translate[skill+'_bg']='戒';
|
||
}
|
||
},
|
||
onremove(player){
|
||
player.removeSkill('clanmingjie_record');
|
||
},
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
limited:true,
|
||
filterTarget(card,player,target){
|
||
return !target.hasSkill('clanmingjie_'+player.playerid);
|
||
},
|
||
skillAnimation:true,
|
||
animationColor:'thunder',
|
||
content(){
|
||
player.awakenSkill('clanmingjie');
|
||
player.addSkill('clanmingjie_effect');
|
||
var skill='clanmingjie_'+player.playerid;
|
||
game.broadcastAll(lib.skill.clanmingjie.initSkill,skill);
|
||
target.addTempSkill(skill,{player:'phaseAfter'});
|
||
target.storage[skill]=player;
|
||
},
|
||
ai:{
|
||
order:10,
|
||
result:{
|
||
target(player,target){
|
||
if(player.hasSkill('clanzhongliu')||player.hp==1){
|
||
if(!player.hasCard(card=>{
|
||
var info=get.info(card);
|
||
if(info.allowMultiple==false) return false;
|
||
if(!lib.filter.targetEnabled2(card,player,target)) return false;
|
||
return game.hasPlayer(current=>{
|
||
return player.canUse(card,current)&&get.effect(current,card,player,player)>0&¤t!=target&&get.effect(target,card,player,player)>0;
|
||
});
|
||
},'hs')) return 0;
|
||
}
|
||
else{
|
||
if(player.countCards('hs',card=>{
|
||
var info=get.info(card);
|
||
if(info.allowMultiple==false) return false;
|
||
if(!lib.filter.targetEnabled2(card,player,target)) return false;
|
||
return game.hasPlayer(current=>{
|
||
return player.canUse(card,current)&&get.effect(current,card,player,player)>0&¤t!=target&&get.effect(target,card,player,player)>0;
|
||
});
|
||
})<3) return 0;
|
||
}
|
||
return get.sgnAttitude(player,target);
|
||
},
|
||
},
|
||
},
|
||
subSkill:{
|
||
effect:{
|
||
charlotte:true,
|
||
audio:'clanmingjie',
|
||
trigger:{player:'useCard2'},
|
||
filter(event,player){
|
||
var card=event.card;
|
||
var info=get.info(card);
|
||
if(info.allowMultiple==false) return false;
|
||
if(event.targets&&!info.multitarget){
|
||
return game.filterPlayer().some(current=>{
|
||
if(!current.hasSkill('clanmingjie_'+player.playerid)) return false;
|
||
return !event.targets.includes(current)&&lib.filter.targetEnabled2(card,player,current)&&lib.filter.targetInRange(card,player,current);
|
||
});
|
||
}
|
||
return false;
|
||
},
|
||
direct:true,
|
||
content(){
|
||
'step 0'
|
||
player.chooseTarget(get.prompt('clanmingjie_effect'),'令任意【铭戒】目标角色成为'+get.translation(trigger.card)+'的目标',function(card,player,target){
|
||
var trigger=_status.event.getTrigger();
|
||
if(trigger.targets.includes(target)||!target.isIn()||!target.hasSkill('clanmingjie_'+player.playerid)) return false;
|
||
return lib.filter.targetEnabled2(trigger.card,player,target)&&lib.filter.targetInRange(trigger.card,player,target);
|
||
},[1,Infinity]).set('ai',function(target){
|
||
var player=_status.event.player;
|
||
var trigger=_status.event.getTrigger();
|
||
return get.effect(target,trigger.card,player,player);
|
||
});
|
||
'step 1'
|
||
if(result.bool){
|
||
var targets=result.targets.sortBySeat();
|
||
player.logSkill('clanmingjie_effect',targets);
|
||
trigger.targets.addArray(targets);
|
||
game.log(targets,'成为了',trigger.card,'的额外目标');
|
||
}
|
||
},
|
||
group:'clanmingjie_targeted',
|
||
},
|
||
targeted:{
|
||
charlotte:true,
|
||
trigger:{global:'phaseEnd'},
|
||
filter(event,player){
|
||
var cards=player.getStorage('clanmingjie_record').slice();
|
||
cards=cards.filterInD('d');
|
||
if(!cards.length) return false;
|
||
var history=player.getHistory('useSkill',evt=>evt.skill=='clanmingjie');
|
||
if(history.length){
|
||
var targets=history.reduce((list,evt)=>list.addArray(evt.targets),[]);
|
||
if(event.player!=player&&targets.includes(event.player)) return true;
|
||
}
|
||
if(player.actionHistory.length>=2){
|
||
for(var i=player.actionHistory.length-2;i>=0;i--){
|
||
if(!player.actionHistory[i].isMe) continue;
|
||
var history2=player.actionHistory[i].useSkill.filter(evt=>evt.skill=='clanmingjie');
|
||
if(history2.length){
|
||
var targets2=history2.reduce((list,evt)=>list.addArray(evt.targets),[]);
|
||
if(targets2.includes(event.player)) return true;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
forced:true,
|
||
popup:false,
|
||
content(){
|
||
'step 0'
|
||
var cards=player.getStorage('clanmingjie_record').slice();
|
||
cards=cards.filterInD('d');
|
||
event.cards=cards;
|
||
'step 1'
|
||
player.chooseButton(['铭戒:是否使用这些牌?',cards]).set('filterButton',button=>{
|
||
return _status.event.player.hasUseTarget(button.link);
|
||
}).set('ai',button=>{
|
||
return _status.event.player.getUseValue(button.link);
|
||
});
|
||
'step 2'
|
||
if(result.bool){
|
||
var card=result.links[0];
|
||
event.cards.remove(card);
|
||
player.$gain2(card,false);
|
||
game.delayx();
|
||
player.chooseUseTarget(card,true);
|
||
}
|
||
else event.finish();
|
||
'step 3'
|
||
if(event.cards.filter(card=>{
|
||
return get.position(card,true)=='d'&&player.hasUseTarget(card);
|
||
}).length) event.goto(1);
|
||
},
|
||
},
|
||
record:{
|
||
charlotte:true,
|
||
trigger:{
|
||
global:['shaMiss','eventNeutralized','useCard1','phaseAfter'],
|
||
},
|
||
filter(event,player){
|
||
if(event.name=='useCard'){
|
||
return get.suit(event.card)=='spade';
|
||
}
|
||
if(event.name=='phase') return true;
|
||
if(event.type!='card') return false;
|
||
return true;
|
||
},
|
||
silent:true,
|
||
forced:true,
|
||
content(){
|
||
'step 0'
|
||
if(trigger.name=='phase'){
|
||
delete player.storage.clanmingjie_record;
|
||
return;
|
||
}
|
||
player.markAuto('clanmingjie_record',trigger.cards);
|
||
}
|
||
},
|
||
}
|
||
},
|
||
//族钟琰
|
||
clanguangu:{
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
usable:1,
|
||
zhuanhuanji:true,
|
||
mark:true,
|
||
marktext:'☯',
|
||
intro:{
|
||
content(storage){
|
||
return '转换技。出牌阶段限一次,你可以观看'+(storage?'一名角色的至多四张手':'牌堆顶的至多四张')+'牌,然后可以使用其中的一张牌。';
|
||
},
|
||
},
|
||
filter(event,player){
|
||
if(player.storage.clanguangu) return game.hasPlayer(current=>{
|
||
return current.countCards('h');
|
||
});
|
||
return true;
|
||
},
|
||
chooseButton:{
|
||
dialog(event,player){
|
||
var dialog=ui.create.dialog('观骨:选择观看牌堆的牌数','hidden');
|
||
if(player.storage.clanguangu) dialog.forceDirect=true;
|
||
return dialog;
|
||
},
|
||
chooseControl(event,player){
|
||
var list=[1,2,3,4].map(i=>{
|
||
return get.cnNumber(i,true);
|
||
});
|
||
list.push('cancel2');
|
||
return list;
|
||
},
|
||
check(button,player){
|
||
var ret;
|
||
if(!player.hasSkill('clanxiaoyong')) ret=4;
|
||
else{
|
||
var list=[4,3,2,1];
|
||
player.getHistory('useCard',evt=>{
|
||
var len=get.cardNameLength(evt.card);
|
||
list.remove(len);
|
||
});
|
||
if(list.length) ret=list[0];
|
||
else ret=4;
|
||
}
|
||
return get.cnNumber(ret,true);
|
||
},
|
||
backup(result,player){
|
||
return {
|
||
audio:'clanguangu',
|
||
filterCard:()=>false,
|
||
selectCard:-1,
|
||
filterTarget(card,player,target){
|
||
if(player.storage.clanguangu) return true;
|
||
return false;
|
||
},
|
||
selectTarget(){
|
||
var player=_status.event.player;
|
||
if(player.storage.clanguangu) return 1;
|
||
return -1;
|
||
},
|
||
num:result.index+1,
|
||
content(){
|
||
'step 0'
|
||
player.changeZhuanhuanji('clanguangu');
|
||
if(!targets.length){
|
||
var num=lib.skill.clanguangu_backup.num;
|
||
var cards=get.cards(num);
|
||
event.cards=cards.slice(0);
|
||
while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild);
|
||
game.updateRoundNumber();
|
||
event.goto(2);
|
||
}
|
||
else{
|
||
var ret;
|
||
if(!player.hasSkill('clanxiaoyong')) ret=4;
|
||
else{
|
||
var list=[4,3,2,1];
|
||
player.getHistory('useCard',evt=>{
|
||
var len=get.cardNameLength(evt.card);
|
||
list.remove(len);
|
||
});
|
||
if(list.length) ret=list[0];
|
||
else ret=4;
|
||
}
|
||
player.choosePlayerCard(target,'h',true,[1,4]).set('prompt','观骨:观看'+get.translation(target)+'的至多四张牌').set('ai',button=>{
|
||
if(ui.selected.buttons.length>=_status.event.num) return 0;
|
||
return Math.random();
|
||
}).set('num',ret);
|
||
}
|
||
'step 1'
|
||
if(result.bool){
|
||
event.cards=result.links;
|
||
}
|
||
else{
|
||
event.finish();
|
||
}
|
||
'step 2'
|
||
var count=cards.length;
|
||
event.getParent().viewedCount=count;
|
||
player.chooseButton(['观骨:是否使用其中一张牌?',cards]).set('filterButton',button=>{
|
||
var player=_status.event.player;
|
||
var card=button.link;
|
||
var cardx={
|
||
name:get.name(card,get.owner(card)),
|
||
nature:get.nature(card,get.owner(card)),
|
||
cards:[card],
|
||
}
|
||
return player.hasUseTarget(cardx,null,false);
|
||
}).set('ai',button=>{
|
||
var len=_status.event.len;
|
||
var card=button.link;
|
||
var fix=1;
|
||
if(get.cardNameLength(card)==len) fix=2;
|
||
return fix*_status.event.player.getUseValue(card);
|
||
}).set('len',function(){
|
||
if(!player.hasSkill('clanxiaoyong')) return 0;
|
||
var list=[];
|
||
player.getHistory('useCard',evt=>{
|
||
var len=get.cardNameLength(evt.card);
|
||
list.add(len);
|
||
});
|
||
if(!list.includes(count)) return count;
|
||
if(list.length) return list.randomGet();
|
||
return 4;
|
||
}());
|
||
'step 3'
|
||
if(result.bool){
|
||
var card=result.links[0];
|
||
cards.remove(card);
|
||
var cardx={
|
||
name:get.name(card,get.owner(card)),
|
||
nature:get.nature(card,get.owner(card)),
|
||
cards:[card],
|
||
}
|
||
var next=player.chooseUseTarget(cardx,[card],true,false).set('oncard',(card)=>{
|
||
var owner=_status.event.getParent().owner;
|
||
if(owner) owner.$throw(card.cards);
|
||
});
|
||
if(card.name===cardx.name&&get.is.sameNature(card,cardx,true)) next.viewAs=false;
|
||
var owner=get.owner(card);
|
||
if(owner!=player&&get.position(card)=='h'){
|
||
next.throw=false;
|
||
next.set('owner',owner);
|
||
}
|
||
}
|
||
},
|
||
ai:{
|
||
order:10,
|
||
result:{
|
||
target(player,target){
|
||
return -Math.min(target.countCards('h'),4)/2;
|
||
},
|
||
},
|
||
}
|
||
}
|
||
},
|
||
prompt(result){
|
||
if(result.index>0) return '点击“确定”以观看牌堆顶牌';
|
||
return '观骨:选择观看牌的目标';
|
||
},
|
||
},
|
||
subSkill:{
|
||
backup:{},
|
||
},
|
||
ai:{
|
||
order:10,
|
||
result:{
|
||
player:1,
|
||
}
|
||
},
|
||
},
|
||
clanxiaoyong:{
|
||
audio:2,
|
||
trigger:{
|
||
player:'useCard',
|
||
},
|
||
filter(event,player){
|
||
var len=get.cardNameLength(event.card);
|
||
if(player.hasHistory('useCard',function(evt){
|
||
return evt!=event&&get.cardNameLength(evt.card)==len;
|
||
},event)) return false;
|
||
if(!player.getStat().skill.clanguangu) return false;
|
||
var history=player.getAllHistory('useSkill',evt=>{
|
||
return evt.skill=='clanguangu_backup';
|
||
}).map(evt=>evt.event);
|
||
if(!history.length) return false;
|
||
var num=0;
|
||
for(var i=history.length-1;i>=0;i--){
|
||
var evt=history[i];
|
||
if(evt.viewedCount){
|
||
num=evt.viewedCount;
|
||
break;
|
||
}
|
||
}
|
||
if(num&&len==num) return true;
|
||
return false;
|
||
},
|
||
forced:true,
|
||
content(){
|
||
'step 0'
|
||
delete player.getStat().skill.clanguangu;
|
||
game.log(player,'重置了','#g【观骨】');
|
||
},
|
||
mod:{
|
||
aiOrder(player,card,num){
|
||
if(!player.hasSkill('clanguangu')||!player.getStat().skill.clanguangu) return;
|
||
var history=player.getAllHistory('useSkill',evt=>{
|
||
return evt.skill=='clanguangu_backup';
|
||
}).map(evt=>evt.event);
|
||
if(!history.length) return;
|
||
var numx=0;
|
||
for(var i=history.length-1;i>=0;i--){
|
||
var evt=history[i];
|
||
if(evt.viewedCount){
|
||
numx=evt.viewedCount;
|
||
break;
|
||
}
|
||
}
|
||
if(numx==get.cardNameLength(card)){
|
||
if(!player.hasHistory('useCard',evt=>{
|
||
return numx==get.cardNameLength(evt.card);
|
||
})){
|
||
return num+9;
|
||
}
|
||
}
|
||
},
|
||
}
|
||
},
|
||
clanbaozu:{
|
||
audio:2,
|
||
audioname:['clan_zhongyan','clan_zhonghui','clan_zhongyu'],
|
||
trigger:{global:'dying'},
|
||
clanSkill:true,
|
||
limited:true,
|
||
skillAnimation:true,
|
||
animationColor:'water',
|
||
filter(event,player){
|
||
return (event.player==player||event.player.hasClan('颍川钟氏'))&&event.player.hp<=0&&!event.player.isLinked();
|
||
},
|
||
logTarget:'player',
|
||
check(event,player){
|
||
return lib.skill.wanlan.check(event,player);
|
||
},
|
||
content(){
|
||
'step 0'
|
||
player.awakenSkill('clanbaozu');
|
||
'step 1'
|
||
trigger.player.link(true);
|
||
trigger.player.recover();
|
||
},
|
||
},
|
||
//族王淩
|
||
clanbolong:{
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
usable:1,
|
||
filter(event,player){
|
||
return player.countCards('he')>0;
|
||
},
|
||
filterTarget:lib.filter.notMe,
|
||
content(){
|
||
'step 0'
|
||
var num=player.countCards('h');
|
||
var str='是否交给其'+get.cnNumber(num)+'张牌,然后视为你对其使用一张【酒】?或者点击“取消”,令其交给你一张牌,然后其视为对你使用一张雷【杀】。';
|
||
if(!num||target.countCards('he')<num) event._result={bool:false};
|
||
else target.chooseCard(get.translation(player)+'对你发动了【驳龙】',str,num,'he').set('ai',card=>{
|
||
if(_status.event.canGive) return 5+Math.max(0,3-_status.event.player.hp)/1.5-get.value(card);
|
||
return 0;
|
||
}).set('canGive',function(){
|
||
if(get.attitude(target,player)>1) return true;
|
||
if(!player.hasSha()&&player.countCards('h')<=4) return true;
|
||
var sha={name:'sha',nature:'thunder',isCard:true};
|
||
if(game.hasPlayer(current=>{
|
||
return player.canUse(sha,current,true,true)&&get.effect(current,sha,player,target)<0&&!current.countCards('hs',['shan','caochuan']);
|
||
})) return false;
|
||
return true;
|
||
}());
|
||
'step 1'
|
||
if(result.bool){
|
||
var cards=result.cards;
|
||
target.give(cards,player);
|
||
if(lib.filter.targetEnabled2({name:'jiu',isCard:true},target,player)) target.useCard({name:'jiu',isCard:true},player,false);
|
||
event.finish();
|
||
}
|
||
else{
|
||
player.chooseCard('驳龙:交给'+get.translation(target)+'一张牌',get.translation(target)+'拒绝给牌,请交给其一张牌然后视为对其使用一张雷【杀】',true,'he');
|
||
}
|
||
'step 2'
|
||
if(result.bool){
|
||
var cards=result.cards;
|
||
player.give(cards,target);
|
||
var sha={name:'sha',nature:'thunder',isCard:true};
|
||
if(player.canUse(sha,target,false,false)) player.useCard(sha,target,false);
|
||
}
|
||
},
|
||
ai:{
|
||
order(item,player){
|
||
return get.order({name:'jiu'})+0.01;
|
||
},
|
||
threaten:2,
|
||
result:{
|
||
target(player,target){
|
||
if(player.hasCard(card=>{
|
||
return get.value(card)<5&&!['shan','tao','jiu','wuxie','caochuan'].includes(get.name(card));
|
||
},'he')) return -1;
|
||
return 0;
|
||
},
|
||
}
|
||
}
|
||
},
|
||
clanzhongliu:{
|
||
audio:2,
|
||
audioname:['clan_wangling','clan_wangyun','clan_wanghun','clan_wanglun'],
|
||
trigger:{player:'useCard'},
|
||
forced:true,
|
||
clanSkill:true,
|
||
filter(event,player){
|
||
if(!event.cards.length) return true;
|
||
return !game.hasPlayer2(current=>{
|
||
if(!current.hasClan('太原王氏')&¤t!=player) return false;
|
||
return current.hasHistory('lose',evt=>{
|
||
return evt.getParent()==event&&evt.hs.length>0;
|
||
});
|
||
});
|
||
},
|
||
content(){
|
||
'step 0'
|
||
var skills=player.getStockSkills(true,true);
|
||
game.expandSkills(skills);
|
||
var resetSkills=[];
|
||
var suffixs=['used','round','block','blocker'];
|
||
for(var skill of skills){
|
||
var info=get.info(skill);
|
||
if(typeof info.usable=='number'){
|
||
if(player.hasSkill('counttrigger')&&player.storage.counttrigger[skill]&&player.storage.counttrigger[skill]>=1){
|
||
delete player.storage.counttrigger[skill];
|
||
resetSkills.add(skill);
|
||
}
|
||
if(typeof get.skillCount(skill)=='number'&&get.skillCount(skill)>=1){
|
||
delete player.getStat('skill')[skill];
|
||
resetSkills.add(skill);
|
||
}
|
||
}
|
||
if(info.round&&player.storage[skill+'_roundcount']){
|
||
delete player.storage[skill+'_roundcount'];
|
||
resetSkills.add(skill);
|
||
}
|
||
if(player.storage[`temp_ban_${skill}`]){
|
||
delete player.storage[`temp_ban_${skill}`];
|
||
}
|
||
if(player.awakenedSkills.includes(skill)){
|
||
player.restoreSkill(skill);
|
||
resetSkills.add(skill);
|
||
}
|
||
for(var suffix of suffixs){
|
||
if(player.hasSkill(skill+'_'+suffix)){
|
||
player.removeSkill(skill+'_'+suffix);
|
||
resetSkills.add(skill);
|
||
}
|
||
}
|
||
}
|
||
if(resetSkills.length){
|
||
var str='';
|
||
for(var i of resetSkills){
|
||
str+='【'+get.translation(i)+'】、';
|
||
}
|
||
game.log(player,'重置了技能','#g'+str.slice(0,-1));
|
||
}
|
||
}
|
||
},
|
||
//族吴匡
|
||
clanlianzhu:{
|
||
audio:2,
|
||
zhuanhuanji:true,
|
||
mark:true,
|
||
marktext:'☯',
|
||
intro:{
|
||
content(storage){
|
||
var str='转换技。每名角色A的出牌阶段限一次。';
|
||
if(!storage) str+='A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1。';
|
||
else str+='A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1';
|
||
return str;
|
||
},
|
||
},
|
||
global:'clanlianzhu_global',
|
||
subSkill:{
|
||
global:{
|
||
forceaudio:true,
|
||
audio:'clanlianzhu',
|
||
enable:'phaseUse',
|
||
filter:(event,player)=>game.hasPlayer(current=>lib.skill.clanlianzhu_global.filterTarget(null,player,current)),
|
||
filterCard:(card,player)=>game.hasPlayer(current=>current.hasSkill('clanlianzhu')&&!current.hasSkill('clanlianzhu_targeted')&&!current.storage.clanlianzhu)&&player.canRecast(card),
|
||
selectCard:[0,1],
|
||
check(card){
|
||
return 5-get.value(card);
|
||
},
|
||
filterTarget(card,player,target){
|
||
return target.hasSkill('clanlianzhu')&&!target.hasSkill('clanlianzhu_targeted')&&(!target.storage.clanlianzhu||target.storage.clanlianzhu&&game.hasPlayer(current=>{
|
||
if(current==player||current==target) return false;
|
||
return current.inRangeOf(player)||current.inRangeOf(target);
|
||
}));
|
||
},
|
||
selectTarget(){
|
||
var player=_status.event.player;
|
||
var count=game.countPlayer(current=>lib.skill.clanlianzhu_global.filterTarget(null,player,current));
|
||
return count==1?-1:1;
|
||
},
|
||
filterOk(){
|
||
var target=ui.selected.targets[0];
|
||
if(!target) return false;
|
||
if(!target.storage.clanlianzhu){
|
||
return ui.selected.cards.length==1;
|
||
}
|
||
return ui.selected.cards.length==0;
|
||
},
|
||
position:'he',
|
||
discard:false,
|
||
lose:false,
|
||
delay:false,
|
||
prompt(){
|
||
var player=_status.event.player;
|
||
var bocchi=[],kita=[];
|
||
game.countPlayer(function(target){
|
||
if(target.hasSkill('clanlianzhu')&&!target.hasSkill('clanlianzhu_targeted')){
|
||
if(target.storage.clanlianzhu){
|
||
if(game.hasPlayer(current=>{
|
||
if(current==player||current==target) return false;
|
||
return current.inRangeOf(player)||current.inRangeOf(target);
|
||
})) kita.add(target);
|
||
}
|
||
else{
|
||
if(player.countCards('he')>0) bocchi.add(target);
|
||
}
|
||
}
|
||
});
|
||
bocchi.sortBySeat();
|
||
kita.sortBySeat();
|
||
var str='';
|
||
if(bocchi.length){
|
||
str+='重铸一张牌,然后令';
|
||
bocchi.forEach((current,i)=>{
|
||
str+=get.translation(current);
|
||
if(i<bocchi.length-1) str+='或'
|
||
});
|
||
str+='选择是否重铸一张牌';
|
||
if(kita.length) str+='。<br>或者';
|
||
}
|
||
if(kita.length){
|
||
str+='令';
|
||
kita.forEach((current,i)=>{
|
||
str+=get.translation(current);
|
||
if(i<kita.length-1) str+='或'
|
||
});
|
||
str+='选择一名目标,然后对其进行集火';
|
||
}
|
||
str+='。';
|
||
return str;
|
||
},
|
||
content(){
|
||
'step 0'
|
||
target.addTempSkill('clanlianzhu_targeted','phaseUseAfter');
|
||
if(target.storage.clanlianzhu) event.goto(4);
|
||
target.changeZhuanhuanji('clanlianzhu');
|
||
'step 1'
|
||
player.recast(cards);
|
||
'step 2'
|
||
if(!target.countCards('he')&&!_status.connectMode) event._result={bool:false};
|
||
else target.chooseCard('he','联诛:是否重铸一张牌?',lib.filter.cardRecastable);
|
||
'step 3'
|
||
if(result.bool){
|
||
target.recast(result.cards);
|
||
if(get.color(cards[0])!=get.color(result.cards[0])) lib.skill.chenliuwushi.change(target,-1);
|
||
}
|
||
event.finish();
|
||
'step 4'
|
||
target.chooseTarget('联诛:选择其与你使用【杀】的目标',true,(card,player,target)=>{
|
||
if(target==player||target==_status.event.sourcex) return false;
|
||
return target.inRangeOf(player)||target.inRangeOf(_status.event.sourcex);
|
||
}).set('ai',target=>{
|
||
return get.effect(target,{name:'sha'},_status.event.player,_status.event.player);
|
||
}).set('sourcex',player);
|
||
'step 5'
|
||
if(result.bool){
|
||
var targetx=result.targets[0];
|
||
event.targetx=targetx;
|
||
target.line(targetx);
|
||
event.targets=[player,target];
|
||
event.cards=[];
|
||
if(!event.isMine()&&!event.isOnline()) game.delayx();
|
||
}
|
||
else event.finish();
|
||
'step 6'
|
||
var current=targets.shift();
|
||
current.chooseToUse(function(card,player,event){
|
||
if(get.name(card)!='sha') return false;
|
||
return lib.filter.filterCard.apply(this,arguments);
|
||
},'联诛:是否对'+get.translation(event.targetx)+'使用一张杀?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
|
||
if(target!=_status.event.sourcex&&!ui.selected.targets.includes(_status.event.sourcex)) return false;
|
||
return lib.filter.targetEnabled.apply(this,arguments);
|
||
}).set('sourcex',event.targetx).set('addCount',false);
|
||
'step 7'
|
||
if(result.bool) cards.push(result.card);
|
||
if(targets.length>0) event.goto(6);
|
||
'step 8'
|
||
if(cards.length>1&&get.color(cards)!='none') lib.skill.chenliuwushi.change(target,1);
|
||
},
|
||
ai:{
|
||
order:4.1,
|
||
result:{
|
||
player(player,target){
|
||
if(!target.storage.clanlianzhu&&player.hasCard(card=>get.value(card)<5,'he')) return 1;
|
||
return 0;
|
||
},
|
||
target(player,target){
|
||
if(target.storage.clanlianzhu&&player.hasSha()) return 1;
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
targeted:{charlotte:true}
|
||
}
|
||
},
|
||
//族韩韶
|
||
clanfangzhen:{
|
||
audio:2,
|
||
trigger:{player:'phaseUseBegin'},
|
||
filter(event,player){
|
||
return game.hasPlayer(current=>!current.isLinked());
|
||
},
|
||
direct:true,
|
||
content(){
|
||
'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=>{
|
||
if(get.name(cardx)!='sha') return false;
|
||
return game.hasNature(cardx,'linked');
|
||
});
|
||
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((2*get.effect(target,{name:'draw'},player,player)+0.6*get.effect(player,{name:'draw'},player,player)),get.recoverEffect(target,player,player));
|
||
}
|
||
return Math.max((2*get.effect(target,{name:'draw'},player,player)+0.6*get.effect(player,{name:'draw'},player,player)),get.recoverEffect(target,player,player));
|
||
}).set('goon',player.countCards('hs',card=>{
|
||
return get.name(card)=='jiu'&&player.hasUseTarget(card);
|
||
})&&player.countCards('hs',card=>{
|
||
if(get.name(card)!='sha') return false;
|
||
return game.hasNature(card,'linked');
|
||
}));
|
||
'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 (2*get.effect(target,{name:'draw'},player,player)+0.6*get.effect(player,{name:'draw'},player,player))>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(event,player){
|
||
return player.getStorage('clanfangzhen_remove').includes(game.roundNumber);
|
||
},
|
||
content(){
|
||
player.removeSkills('clanfangzhen');
|
||
}
|
||
}
|
||
}
|
||
},
|
||
clanliuju:{
|
||
audio:2,
|
||
trigger:{player:'phaseUseEnd'},
|
||
filter(event,player){
|
||
return game.hasPlayer(current=>player.canCompare(current));
|
||
},
|
||
direct:true,
|
||
content(){
|
||
'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(card,player,target){
|
||
if(player==target) return false;
|
||
return player.canUse(card,target);
|
||
},
|
||
selectTarget:[1,Infinity],
|
||
check(card){
|
||
return 6-get.value(card);
|
||
},
|
||
position:'he',
|
||
limited:true,
|
||
clanSkill:true,
|
||
skillAnimation:true,
|
||
animationColor:'soil',
|
||
precontent(){
|
||
player.logSkill('clanxumin');
|
||
player.awakenSkill('clanxumin');
|
||
delete event.result.skill;
|
||
},
|
||
ai:{
|
||
order:7,
|
||
result:{target:1}
|
||
},
|
||
},
|
||
//族韩融
|
||
//我们连和!(?)
|
||
clanlianhe:{
|
||
audio:2,
|
||
trigger:{player:'phaseUseBegin'},
|
||
filter(event,player){
|
||
return game.hasPlayer(current=>!current.isLinked());
|
||
},
|
||
direct:true,
|
||
content(){
|
||
'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(event,player){
|
||
return player.getStorage('clanlianhe_effect').includes(event.player);
|
||
},
|
||
marktext:'连',
|
||
intro:{content:'已选择目标:$'},
|
||
content(){
|
||
'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)+'张牌',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(event,player){
|
||
return game.hasPlayer(current=>player.canCompare(current));
|
||
},
|
||
direct:true,
|
||
content(){
|
||
'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(3)==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.includes('clanxumin')) return 'clanxumin';
|
||
return list[0];
|
||
}
|
||
});
|
||
}
|
||
else{
|
||
player.gain(cards,'gain2');
|
||
event.finish();
|
||
}
|
||
'step 6'
|
||
player.removeSkills(result.control);
|
||
},
|
||
ai:{
|
||
expose:0.1,
|
||
}
|
||
},
|
||
//族荀谌
|
||
clansankuang:{
|
||
audio:2,
|
||
trigger:{player:'useCardAfter'},
|
||
direct:true,
|
||
forced:true,
|
||
filter(event,player){
|
||
if(!game.hasPlayer(current=>current!=player)) return false;
|
||
var card=event.card,type=get.type2(card);
|
||
for(var i=player.actionHistory.length-1; i>=0; i--){
|
||
var history=player.actionHistory[i].useCard;
|
||
for(var evt of history){
|
||
if(evt==event) continue;
|
||
if(get.type2(evt.card)==type) return false;
|
||
}
|
||
if(player.actionHistory[i].isRound) break;
|
||
}
|
||
return true;
|
||
},
|
||
getNum(player){
|
||
return (player.countCards('ej')>0)+(player.isDamaged())+(Math.max(0,player.hp)<player.countCards('h'));
|
||
},
|
||
content(){
|
||
'step 0'
|
||
var cards=trigger.cards.filterInD('oe');
|
||
player.chooseTarget('三恇:选择一名其他角色','令其交给你至少X张牌'+(cards.length?',然后其获得'+get.translation(cards):'')+'(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)',true,lib.filter.notMe).set('ai',target=>{
|
||
var att=get.attitude(player,target),num=lib.skill.clansankuang.getNum(target);
|
||
if(num==0) return att;
|
||
if(_status.event.goon) return -att;
|
||
return -Math.sqrt(Math.abs(att))-lib.skill.clansankuang.getNum(target);
|
||
}).set('goon',Math.max.apply(Math,trigger.cards.map(i=>get.value(i)))<=5||trigger.cards.filterInD('oe').length==0)
|
||
'step 1'
|
||
if(result.bool){
|
||
var target=result.targets[0],num=lib.skill.clansankuang.getNum(target),num2=target.countCards('he');
|
||
event.target=target;
|
||
player.logSkill('clansankuang',target);
|
||
if(num2==0) event._result={bool:false};
|
||
else if(num2<=num) event._result={bool:true,cards:target.getCards('he')};
|
||
else{
|
||
var cards=trigger.cards.filterInD('oe');
|
||
target.chooseCard('he',num>0,[num,Infinity]).set('ai',get.unuseful).set('prompt',num>0?
|
||
'是否交给'+get.translation(player)+'任意张牌'+(cards.length?'并获得'+get.translation(cards):'')+'?':
|
||
'交给'+get.translation(player)+'至少'+get.cnNumber(num)+'张牌');
|
||
}
|
||
}else event.finish();
|
||
'step 2'
|
||
if(result.bool){
|
||
var cards=result.cards;
|
||
target.give(cards,player);
|
||
game.delayx();
|
||
}
|
||
else event.finish();
|
||
'step 3'
|
||
if(trigger.cards.filterInD().length) target.gain(trigger.cards.filterInD(),'gain2','bySelf');
|
||
else if(trigger.cards.filterInD('e').length) target.gain(trigger.cards.filterInD('e'),get.owner(trigger.cards.filterInD('e')[0]),'give');
|
||
},
|
||
ai:{
|
||
reverseOrder:true,
|
||
skillTagFilter(player){
|
||
if(player.getHistory('useCard',evt=>get.type(evt.card)=='equip').length>0) return false;
|
||
},
|
||
effect:{
|
||
target(card,player,target){
|
||
if(player==target&&get.type(card)=='equip'&&!player.getHistory('useCard',evt=>get.type(evt.card)=='equip').length==0) return [1,3];
|
||
},
|
||
},
|
||
threaten:1.6,
|
||
},
|
||
},
|
||
clanbeishi:{
|
||
audio:2,
|
||
trigger:{
|
||
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
|
||
},
|
||
forced:true,
|
||
filter(event,player){
|
||
var history=player.getAllHistory('useSkill',evt=>evt.skill=='clansankuang');
|
||
if(!history.length) return false;
|
||
var target=history[0].targets[0];
|
||
if(target.countCards('h')) return false;
|
||
var evt=event.getl(target);
|
||
return evt&&evt.hs&&evt.hs.length;
|
||
},
|
||
content(){
|
||
player.recover();
|
||
}
|
||
},
|
||
//族荀淑
|
||
clanshenjun:{
|
||
audio:2,
|
||
trigger:{
|
||
global:'useCard',
|
||
},
|
||
forced:true,
|
||
locked:false,
|
||
filter(event,player){
|
||
return (event.card.name=='sha'||get.type(event.card)=='trick')&&player.countCards('h',event.card.name)>0;
|
||
},
|
||
content(){
|
||
var cards=player.getCards('h',trigger.card.name);
|
||
player.showCards(cards,get.translation(player)+'发动了【神君】');
|
||
player.markSkill('clanshenjun');
|
||
player.addGaintag(cards,'clanshenjun');
|
||
for(var name of lib.phaseName){
|
||
var evt=_status.event.getParent(name);
|
||
if(!evt||evt.name!=name) continue;
|
||
player.addTempSkill('clanshenjun_viewAs',name+'After');
|
||
break;
|
||
}
|
||
},
|
||
marktext:'君',
|
||
intro:{
|
||
markcount(storage,player){
|
||
return player.countCards('h',card=>card.hasGaintag('clanshenjun'));
|
||
},
|
||
mark(dialog,content,player){
|
||
var cards=player.getCards('h',card=>card.hasGaintag('clanshenjun'));
|
||
if(cards.length){
|
||
dialog.addAuto(cards);
|
||
}
|
||
else return '无展示牌';
|
||
},
|
||
},
|
||
subSkill:{
|
||
viewAs:{
|
||
trigger:{global:['phaseZhunbeiEnd','phaseJudgeEnd','phaseDrawEnd','phaseUseEnd','phaseDiscardEnd','phaseJieshuEnd']},
|
||
filter(event,player){
|
||
return player.countCards('h',card=>card.hasGaintag('clanshenjun'))>0;
|
||
},
|
||
forced:true,
|
||
charlotte:true,
|
||
content(){
|
||
'step 0'
|
||
var cards=player.getCards('h',card=>card.hasGaintag('clanshenjun'));
|
||
var list=[],names=[];
|
||
for(var card of cards){
|
||
var name=get.name(card),nature=get.nature(card);
|
||
var namex=name;
|
||
if(nature&&nature.length){
|
||
namex+=nature;
|
||
if(names.includes(namex)) continue;
|
||
list.push([get.type(card),'',name,nature]);
|
||
}
|
||
else{
|
||
if(names.includes(namex)) continue;
|
||
list.push([get.type(card),'',name]);
|
||
}
|
||
names.push(namex);
|
||
}
|
||
list.sort((a,b)=>{
|
||
var del1=lib.inpile.indexOf(a[2])-lib.inpile.indexOf(b[2]);
|
||
if(del1!=0) return del1;
|
||
var a1=0,b1=0;
|
||
if(a.length>3) a1=(lib.nature.get(a)||0);
|
||
if(b.length>3) b1=(lib.nature.get(b)||0);
|
||
return a1-b1;
|
||
})
|
||
player.chooseButton(['是否将'+get.cnNumber(cards.length)+'张牌当下列一张牌使用?',[list,'vcard']]).set('ai',function(button){
|
||
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
|
||
});
|
||
'step 1'
|
||
if(result.bool){
|
||
var name=result.links[0][2],nature=result.links[0][3];
|
||
var cards=player.getCards('h',card=>card.hasGaintag('clanshenjun'));
|
||
game.broadcastAll(function(num,card){
|
||
lib.skill.clanshenjun_backup.selectCard=num;
|
||
lib.skill.clanshenjun_backup.viewAs=card;
|
||
},cards.length,{name:name,nature:nature});
|
||
var next=player.chooseToUse();
|
||
next.set('openskilldialog','将'+get.cnNumber(cards.length)+'张牌当做'+(get.translation(nature)||'')+'【'+get.translation(name)+'】使用');
|
||
next.set('norestore',true);
|
||
next.set('addCount',false);
|
||
next.set('_backupevent','clanshenjun_backup');
|
||
next.set('custom',{
|
||
add:{},
|
||
replace:{window(){}}
|
||
});
|
||
next.backup('clanshenjun_backup');
|
||
}
|
||
}
|
||
},
|
||
backup:{
|
||
filterCard(card){
|
||
return get.itemtype(card)=='card';
|
||
},
|
||
position:'hes',
|
||
filterTarget:lib.filter.filterTarget,
|
||
check:(card)=>6-get.value(card),
|
||
log:false,
|
||
precontent(){
|
||
delete event.result.skill;
|
||
},
|
||
}
|
||
}
|
||
},
|
||
clanbalong:{
|
||
audio:2,
|
||
trigger:{
|
||
player:['damageEnd','recoverEnd','loseHpEnd'],
|
||
},
|
||
forced:true,
|
||
filter(event,player){
|
||
if(game.getGlobalHistory('changeHp',evt=>evt.player==player).length!=1) return false;
|
||
var cards=player.getCards('h'),map={};
|
||
if(!cards.length) return false;
|
||
for(var card of cards){
|
||
var type=get.type2(card);
|
||
if(typeof map[type]!='number') map[type]=0;
|
||
map[type]++;
|
||
}
|
||
var list=[];
|
||
for(var i in map){
|
||
if(map[i]>0) list.push([i,map[i]]);
|
||
}
|
||
list.sort((a,b)=>b[1]-a[1]);
|
||
return list[0][0]=='trick'&&(list.length==1||list[0][1]>list[1][1]);
|
||
},
|
||
content(){
|
||
player.showHandcards(get.translation(player)+'发动了【八龙】');
|
||
player.drawTo(game.countPlayer());
|
||
}
|
||
},
|
||
//族荀粲
|
||
clanyunshen:{
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
usable:1,
|
||
filterTarget(card,player,target){
|
||
return player!=target&&target.isDamaged();
|
||
},
|
||
content(){
|
||
'step 0'
|
||
target.recover();
|
||
'step 1'
|
||
var name=get.translation(target);
|
||
player.chooseControl().set('choiceList',[name+'视为对你使用一张冰【杀】','你视为对'+name+'使用一张冰【杀】']).set('prompt','熨身:请选择一项').set('ai',()=>_status.event.choice).set('choice',function(){
|
||
var card={name:'sha',nature:'ice',isCard:true};
|
||
var eff=get.effect(player,card,target,player),eff2=get.effect(target,card,player,player);
|
||
if(eff>eff2) return '选项一';
|
||
else return '选项二';
|
||
}());
|
||
'step 2'
|
||
var players=[target,player];
|
||
if(result.control=='选项二') players.reverse();
|
||
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,
|
||
expose:0.2,
|
||
result:{
|
||
target(player,target){
|
||
var eff=get.recoverEffect(target,player,player);
|
||
if(eff>0) return 1;
|
||
else if(get.effect(target,{name:'sha',nature:'ice',isCard:true},player,player)>eff) return -1;
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
clanshangshen:{
|
||
audio:2,
|
||
trigger:{global:'damageEnd'},
|
||
filter(event,player){
|
||
if(!event.hasNature()||!event.player.isIn()) return false;
|
||
return game.countPlayer2(current=>{
|
||
return current.hasHistory('damage',evt=>{
|
||
return evt.hasNature()&&evt!=event;
|
||
});
|
||
})==0;
|
||
},
|
||
logTarget:'player',
|
||
check(event,player){
|
||
if(get.attitude(player,event.player)<=2) return false;
|
||
if(event.player.countCards('h')>=4) return false;
|
||
return true;
|
||
},
|
||
content(){
|
||
player.executeDelayCardEffect('shandian');
|
||
trigger.player.drawTo(4);
|
||
},
|
||
ai:{expose:0.25}
|
||
},
|
||
clanfenchai:{
|
||
audio:2,
|
||
init(player){
|
||
if(player.getStorage('clanfenchai').length>0) return;
|
||
var history=player.getHistory('useSkill',evt=>{
|
||
if(evt.type!='player') return false;
|
||
var skill=evt.sourceSkill||evt.skill,targets=evt.targets;
|
||
var info=get.info(skill);
|
||
if(!info||info.charlotte) return false;
|
||
if(targets&&targets.length){
|
||
if(targets.filter(i=>player.differentSexFrom(i)).length>0) return true;
|
||
}
|
||
return false;
|
||
});
|
||
if(history.length){
|
||
var evt=history[0],targets=evt.targets;
|
||
player.markAuto('clanfenchai',targets.filter(i=>player.differentSexFrom(i)));
|
||
}
|
||
},
|
||
trigger:{
|
||
player:['logSkill','useSkillAfter'],
|
||
},
|
||
forced:true,
|
||
silent:true,
|
||
onremove:true,
|
||
marktext:'钗',
|
||
intro:{
|
||
content:(storage,player)=>'对象:'+get.translation(storage),
|
||
},
|
||
group:'clanfenchai_audio',
|
||
filter(event,player){
|
||
if(event.type!='player') return false;
|
||
var targets=event.targets;
|
||
if(!targets||!targets.length) return false;
|
||
var info=get.info(event.sourceSkill||event.skill);
|
||
if(!info||info.charlotte) return false;
|
||
if(player.getStorage('clanfenchai').length!=0) return false;
|
||
return targets.filter(i=>player.differentSexFrom(i)).length>0;
|
||
},
|
||
content(){
|
||
player.markAuto('clanfenchai',trigger.targets.filter(i=>player.differentSexFrom(i)));
|
||
},
|
||
subSkill:{
|
||
audio:{
|
||
audio:'clanfenchai',
|
||
forced:true,
|
||
trigger:{player:'judge'},
|
||
filter(event,player){
|
||
return player.getStorage('clanfenchai').length;
|
||
},
|
||
content(){}
|
||
}
|
||
},
|
||
mod:{
|
||
suit(card,suit){
|
||
var player=get.owner(card)||_status.event.player;
|
||
if(!player||!player.judging||player.judging[0]!=card) return;
|
||
var storage=player.getStorage('clanfenchai');
|
||
if(!storage.length) return;
|
||
return storage.filter(i=>i.isIn()).length>0?'heart':'spade';
|
||
}
|
||
}
|
||
},
|
||
//族荀采
|
||
clanlieshi:{
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
filter(event,player){
|
||
return !player.isDisabledJudge()||player.countCards('h',card=>['sha','shan'].includes(get.name(card)))>0;
|
||
},
|
||
chooseButton:{
|
||
dialog(event,player){
|
||
var dialog=ui.create.dialog('烈誓:选择一项','hidden');
|
||
dialog.add([lib.skill.clanlieshi.choices.slice(),'textbutton']);
|
||
return dialog;
|
||
},
|
||
filter(button,player){
|
||
var link=button.link;
|
||
if(link=='damage') return !player.isDisabledJudge();
|
||
var num=player.countCards('h',link);
|
||
return num>0&&num==player.getDiscardableCards(player,'h').filter(i=>get.name(i)==link).length;
|
||
},
|
||
check(button){
|
||
var player=_status.event.player;
|
||
switch (button.link){
|
||
case 'damage':
|
||
if(get.damageEffect(player,player,player,'fire')>=0) return 10;
|
||
if(player.hp>=Math.max(2,3-player.getFriends().length)&&game.countPlayer(current=>get.attitude(player,current)<0&¤t.countCards('h',card=>['sha','shan'].includes(get.name(card))))) return 0.8+Math.random();
|
||
return 0;
|
||
case 'shan':
|
||
if(player.countCards('h','shan')==1) return 8+Math.random();
|
||
return 1+Math.random();
|
||
case 'sha':
|
||
if(player.countCards('h','sha')==1) return 8+Math.random();
|
||
return 0.9+Math.random();
|
||
}
|
||
},
|
||
backup(links){
|
||
var next=get.copy(lib.skill['clanlieshi_backupx']);
|
||
next.choice=links[0];
|
||
return next;
|
||
},
|
||
prompt(links){
|
||
if(links[0]=='damage') return '废除判定区并受到1点火焰伤害';
|
||
return '弃置所有【'+get.translation(links[0])+'】';
|
||
},
|
||
},
|
||
choices:[
|
||
['damage','废除判定区并受到1点火焰伤害'],
|
||
['shan','弃置所有【闪】'],
|
||
['sha','弃置所有【杀】'],
|
||
],
|
||
ai:{
|
||
order(item,player){
|
||
if(!player) return;
|
||
var eff=get.damageEffect(player,player,player,'fire'),disabled=!player.isDisabledJudge();
|
||
if((player.countCards('h','sha')==1||player.countCards('h','shan')==1)&&eff<0&&!disabled) return 8;
|
||
else if(eff>=0&&!disabled) return 5.8;
|
||
if(!disabled&&!player.countCards('h',card=>['sha','shan'].includes(get.name(card)))){
|
||
if((!player.hasSkill('clanhuanyin')||!player.canSave(player))&&player.hp<=1) return 0;
|
||
if(player.canSave(player)&&player.hp==1&&player.countCards('h')<=1) return 2.6;
|
||
if(player.hp<Math.max(2,3-player.getFriends().length)||!game.countPlayer(current=>get.attitude(player,current)<0&¤t.countCards('h',card=>['sha','shan'].includes(get.name(card))))) return 0;
|
||
}
|
||
return 2.5;
|
||
},
|
||
expose:0.2,
|
||
result:{player:1},
|
||
},
|
||
subSkill:{
|
||
backup:{},
|
||
backupx:{
|
||
audio:'clanlieshi',
|
||
selectCard:-1,
|
||
selectTarget:-1,
|
||
filterCard:()=>false,
|
||
filterTarget:()=>false,
|
||
multitarget:true,
|
||
content(){
|
||
'step 0'
|
||
var choice=lib.skill.clanlieshi_backup.choice;
|
||
event.choice=choice;
|
||
if(choice=='damage'){
|
||
player.damage('fire');
|
||
if(!player.isDisabledJudge()) player.disableJudge();
|
||
}else{
|
||
var cards=player.getCards('h',choice);
|
||
if(cards.length) player.discard(cards);
|
||
}
|
||
'step 1'
|
||
if(!player.isIn()||!game.hasPlayer(current=>current!=player)) event.finish();
|
||
else player.chooseTarget('烈誓:令一名其他角色选择另一项',lib.filter.notMe,true).set('ai',target=>{
|
||
var player=_status.event.player,chosen=_status.event.getParent().choice,att=get.attitude(player,target);
|
||
if(chosen=='damage'){
|
||
if(att>0) return 0;
|
||
return -att/2+target.countCards('h',card=>['sha','shan'].includes(get.name(card)));
|
||
}
|
||
return get.damageEffect(target,player,player,'fire');
|
||
});
|
||
'step 2'
|
||
if(result.bool){
|
||
var target=result.targets[0];
|
||
event.target=target;
|
||
player.line(target,'fire');
|
||
var list=[],choice=event.choice;
|
||
var choiceList=lib.skill.clanlieshi.choices.slice();
|
||
choiceList=choiceList.map((link,ind,arr)=>{
|
||
link=link[1];
|
||
var ok=true;
|
||
if(arr[ind][0]==choice){
|
||
link+='('+get.translation(player)+'已选)';
|
||
ok=false;
|
||
}
|
||
if(ind==0){
|
||
if(target.isDisabledJudge()) ok=false;
|
||
}
|
||
else if(ind>0){
|
||
var name=ind==1?'shan':'sha';
|
||
if(!target.countCards('h',name)) ok=false;
|
||
}
|
||
if(!ok) link='<span style="opacity:0.5">'+link+'</span>';
|
||
else list.push('选项'+get.cnNumber(ind+1,true));
|
||
return link;
|
||
});
|
||
if(!list.length){
|
||
game.log(target, "没有能执行的选项");
|
||
event.finish();
|
||
return;
|
||
}
|
||
target.chooseControl(list).set('choiceList',choiceList).set('ai',()=>{
|
||
var controls=_status.event.controls.slice(),player=_status.event.player,user=_status.event.getParent().player;
|
||
if(controls.length==1) return controls[0];
|
||
if(controls.includes('选项一')&&get.damageEffect(player,user,player,'fire')>=0) return '选项一';
|
||
if(controls.includes('选项一')&&player.hp<=2&&player.countCards('h',card=>['sha','shan'].includes(get.name(card)))<=3) controls.remove('选项一');
|
||
if(controls.length==1) return controls[0];
|
||
if(player.getCards('h','sha').reduce((p,c)=>p+get.value(c,player),0)>player.getCards('h','sha').reduce((p,c)=>p+get.value(c,player),0)){
|
||
if(controls.includes('选项三')) return '选项三';
|
||
}
|
||
else if(controls.includes('选项二')) return '选项二';
|
||
return controls.randomGet();
|
||
});
|
||
} else event.finish();
|
||
'step 3'
|
||
if(result.control=='选项一'){
|
||
if(!target.isDisabledJudge()) target.disableJudge();
|
||
target.damage('fire');
|
||
}
|
||
else{
|
||
var cards=target.getCards('h',result.control=='选项二'?'shan':'sha');
|
||
if(cards.length) target.discard(cards);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
clandianzhan:{
|
||
audio:2,
|
||
trigger:{player:'useCardAfter'},
|
||
forced:true,
|
||
filter(event,player){
|
||
if(!lib.suit.includes(get.suit(event.card))) return false;
|
||
var card=event.card,suit=get.suit(card);
|
||
for(var i=player.actionHistory.length-1; i>=0; i--){
|
||
var history=player.actionHistory[i].useCard;
|
||
for(var evt of history){
|
||
if(evt==event) continue;
|
||
if(get.suit(evt.card)==suit) return false;
|
||
}
|
||
if(player.actionHistory[i].isRound) break;
|
||
}
|
||
return event.targets&&event.targets.length==1&&!event.targets[0].isLinked()||
|
||
player.hasCard(card=>get.suit(card)==get.suit(event.card)&&player.canRecast(card),'h');
|
||
},
|
||
content(){
|
||
'step 0'
|
||
if(trigger.targets&&trigger.targets.length==1){
|
||
trigger.targets[0].link(true);
|
||
}
|
||
var cards=player.getCards('h',card=>get.suit(card)==get.suit(trigger.card)&&player.canRecast(card));
|
||
if(cards.length>0) player.recast(cards);
|
||
'step 1'
|
||
player.draw();
|
||
}
|
||
},
|
||
clanhuanyin:{
|
||
audio:2,
|
||
trigger:{player:'dying'},
|
||
forced:true,
|
||
check:()=>true,
|
||
filter(event){
|
||
return event.player.countCards('h')<4;
|
||
},
|
||
content(){
|
||
player.drawTo(4);
|
||
}
|
||
},
|
||
clandaojie:{
|
||
audio:2,
|
||
audioname:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan','clan_xunyou'],
|
||
trigger:{player:'useCardAfter'},
|
||
filter(event,player){
|
||
return get.type(event.card,null,false)=='trick'&&!get.tag(event.card,'damage')&&event.cards.filterInD().length>0&&player.getHistory('useCard',evt=>{
|
||
return get.type(evt.card,null,false)=='trick'&&!get.tag(evt.card,'damage');
|
||
}).indexOf(event)==0;
|
||
},
|
||
forced:true,
|
||
clanSkill:true,
|
||
content(){
|
||
'step 0'
|
||
var skills=player.getSkills(null,false,false).filter(skill=>{
|
||
var info=get.info(skill);
|
||
if(!info||info.charlotte||!get.is.locked(skill)||get.skillInfoTranslation(skill,player).length==0) return false;
|
||
return true;
|
||
});
|
||
player.chooseControl(skills,'cancel2').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','蹈节:失去一个锁定技,或点“取消”失去1点体力').set('ai',()=>{
|
||
var player=_status.event.player,choices=_status.event.controls.slice();
|
||
var negs=choices.filter(i=>{
|
||
var info=get.info(i);
|
||
if(!info||!info.ai) return false;
|
||
return info.ai.neg||info.ai.halfneg;
|
||
});
|
||
if(negs.length) return negs.randomGet();
|
||
if(get.effect(player,{name:'losehp'},player,player)>=0) return 'cancel2';
|
||
if(player.hp>3) return 'cancel2';
|
||
return Math.random()<0.75?'clandaojie':choices.randomGet();
|
||
});
|
||
'step 1'
|
||
if(result.control!='cancel2'){
|
||
player.removeSkills(result.control);
|
||
}
|
||
else{
|
||
player.loseHp();
|
||
}
|
||
'step 2'
|
||
var targets=game.filterPlayer(current=>current==player||current.hasClan('颍川荀氏'));
|
||
if(targets.length==1) event._result={bool:true,targets:targets};
|
||
else player.chooseTarget('蹈节:将'+get.translation(trigger.cards.filterInD())+'交给一名颍川荀氏角色',true,(card,player,target)=>{
|
||
return target==player||target.hasClan('颍川荀氏')
|
||
}).set('ai',target=>get.attitude(_status.event.player,target));
|
||
'step 3'
|
||
if(result.bool){
|
||
var target=result.targets[0];
|
||
player.line(target,'green');
|
||
target.gain(trigger.cards.filterInD(),player,'gain2');
|
||
}
|
||
},
|
||
},
|
||
//族吴班
|
||
clanzhanding:{
|
||
audio:2,
|
||
enable:'chooseToUse',
|
||
viewAsFilter(player){
|
||
return player.countCards('hes')>0;
|
||
},
|
||
viewAs:{name:'sha'},
|
||
filterCard:true,
|
||
position:'hes',
|
||
selectCard:[1,Infinity],
|
||
check(card){
|
||
return 6-ui.selected.cards.length-get.value(card);
|
||
},
|
||
onuse(links,player){
|
||
lib.skill.chenliuwushi.change(player,-1);
|
||
player.addTempSkill('clanzhanding_effect');
|
||
},
|
||
ai:{
|
||
order:1,
|
||
respondSha:true,
|
||
skillTagFilter(player){
|
||
return player.countCards('hes')>0;
|
||
},
|
||
},
|
||
subSkill:{
|
||
effect:{
|
||
trigger:{player:'useCardAfter'},
|
||
forced:true,
|
||
popup:false,
|
||
filter(event,player){
|
||
return event.skill=='clanzhanding';
|
||
},
|
||
content(){
|
||
if(player.hasHistory('sourceDamage',function(evt){
|
||
return evt.card==trigger.card;
|
||
})){
|
||
var num1=player.countCards('h'),num2=player.getHandcardLimit();
|
||
if(num1<num2) player.draw(Math.min(5,num2-num1));
|
||
}
|
||
else if(trigger.addCount!==false){
|
||
trigger.addCount=false;
|
||
player.getStat().card.sha--;
|
||
}
|
||
},
|
||
},
|
||
},
|
||
},
|
||
//族吴苋
|
||
clanyirong:{
|
||
audio:2,
|
||
enable:'phaseUse',
|
||
usable:2,
|
||
filter(event,player){
|
||
var num1=player.countCards('h'),num2=player.getHandcardLimit();
|
||
return num1!=num2;
|
||
},
|
||
selectCard(){
|
||
var player=_status.event.player;
|
||
var num1=player.countCards('h'),num2=player.getHandcardLimit();
|
||
if(num1>num2) return num1-num2;
|
||
return [0,1];
|
||
},
|
||
filterCard(card,player){
|
||
var num1=player.countCards('h'),num2=player.getHandcardLimit();
|
||
return num1>num2;
|
||
},
|
||
check(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(card){
|
||
var num=1;
|
||
if(_status.event.player.getUseValue(card,null,true)<=0) num=1.5;
|
||
return (15-get.value(card))*num;
|
||
},
|
||
prompt(){
|
||
var player=_status.event.player;
|
||
var num1=player.countCards('h'),num2=player.getHandcardLimit();
|
||
var str='<span class="text center">';
|
||
if(num1>num2){
|
||
str+=('弃置'+get.cnNumber(num1-num2)+'张牌,然后手牌上限+1。')
|
||
}
|
||
else{
|
||
str+=('摸'+get.cnNumber(Math.min(8,num2-num1))+'张牌,然后手牌上限-1。');
|
||
}
|
||
str+=('<br>※当前手牌上限:'+num2);
|
||
var num3=((_status.event.getParent().phaseIndex||0)+1);
|
||
if(num3>0){
|
||
str+=(';阶段数:'+num3)
|
||
}
|
||
str+='</span>';
|
||
return str;
|
||
},
|
||
content(){
|
||
'step 0'
|
||
if(cards.length){
|
||
lib.skill.chenliuwushi.change(player,1);
|
||
event.finish();
|
||
}
|
||
else{
|
||
var num1=player.countCards('h'),num2=player.getHandcardLimit();
|
||
if(num1<num2) player.draw(Math.min(8,num2-num1));
|
||
}
|
||
'step 1'
|
||
lib.skill.chenliuwushi.change(player,-1);
|
||
},
|
||
ai:{
|
||
order(item,player){
|
||
var num=player.getHandcardLimit(),numx=((_status.event.getParent().phaseIndex||0)+1);
|
||
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,
|
||
},
|
||
},
|
||
clanguixiang:{
|
||
audio:2,
|
||
trigger:{
|
||
player:'phaseChange',
|
||
},
|
||
forced:true,
|
||
filter(event,player){
|
||
if(event.phaseList[event.num].startsWith('phaseUse')) return false;
|
||
var num1=player.getHandcardLimit()-1,num2=event.num;
|
||
return num1==num2;
|
||
},
|
||
content(){
|
||
trigger.phaseList[trigger.num]='phaseUse|clanguixiang';
|
||
game.delayx();
|
||
},
|
||
},
|
||
clanmuyin:{
|
||
audio:2,
|
||
clanSkill:true,
|
||
audioname:['clan_wuxian','clan_wuban','clan_wukuang','clan_wuqiao'],
|
||
trigger:{player:'phaseBegin'},
|
||
isMax(player){
|
||
var num=player.getHandcardLimit();
|
||
return !game.hasPlayer(function(current){
|
||
return current!=player&¤t.getHandcardLimit()>num;
|
||
});
|
||
},
|
||
filter(event,player){
|
||
return game.hasPlayer(function(current){
|
||
return (current==player||current.hasClan('陈留吴氏'))&&!lib.skill.clanmuyin.isMax(current);
|
||
});
|
||
},
|
||
direct:true,
|
||
content(){
|
||
'step 0'
|
||
player.chooseTarget(get.prompt('clanmuyin'),'令一名陈留吴氏角色的手牌上限+1',function(card,player,current){
|
||
return (current==player||current.hasClan('陈留吴氏'))&&!lib.skill.clanmuyin.isMax(current);
|
||
}).set('ai',function(target){
|
||
return get.attitude(_status.event.player,target);
|
||
});
|
||
'step 1'
|
||
if(result.bool){
|
||
var target=result.targets[0];
|
||
player.logSkill('clanmuyin',target);
|
||
lib.skill.chenliuwushi.change(target,1);
|
||
game.delayx();
|
||
}
|
||
},
|
||
},
|
||
chenliuwushi:{
|
||
charlotte:true,
|
||
change(player,num){
|
||
player.addSkill('chenliuwushi');
|
||
var info=player.storage;
|
||
if(typeof info.chenliuwushi!='number') info.chenliuwushi=0;
|
||
info.chenliuwushi+=num;
|
||
if(info.chenliuwushi==0) player.unmarkSkill('chenliuwushi');
|
||
else player.markSkill('chenliuwushi');
|
||
if(num>=0) game.log(player,'的手牌上限','#y+'+num);
|
||
else game.log(player,'的手牌上限','#g'+num);
|
||
},
|
||
mod:{
|
||
maxHandcard(player,num){
|
||
var add=player.storage.chenliuwushi;
|
||
if(typeof add=='number') return num+add;
|
||
},
|
||
},
|
||
markimage:'image/card/handcard.png',
|
||
intro:{
|
||
content(num,player){
|
||
var str='<li>手牌上限';
|
||
if(num>=0) str+='+';
|
||
str+=num;
|
||
str+='<br><li>当前手牌上限:';
|
||
str+=player.getHandcardLimit();
|
||
return str;
|
||
},
|
||
},
|
||
},
|
||
},
|
||
characterReplace:{
|
||
wuban:['clan_wuban','dc_wuban','wuban','xin_wuban'],
|
||
},
|
||
characterIntro:{
|
||
xunshu:'荀淑(83年~149年),字季和,为郎陵侯相,颍川颍阴人(今河南省许昌市)人。汉和帝至汉桓帝时人物,以品行高洁著称。有子八人,号八龙。年轻时有高尚的德行,学问渊博,不喜欢雕章琢句,徒在文字上用功,不注重实际的学识。因此,常常被俗儒看不起。但州里却称他有知人之明。安帝时,征召任为郎中,后来再升当涂长。离职还乡里。他的孙子荀彧是曹操部下著名的谋士。',
|
||
xuncai:'荀采(生卒年不详),字女荀,颍川人,东汉名士荀爽之女。荀采聪慧敏捷而有才艺。十七岁时,荀采嫁给阴瑜。两年后阴瑜去世。荀采不愿意改嫁,但荀爽答应把荀采嫁给同郡人郭奕。荀采趁着旁人没有防备,用粉在门上写下:“尸还阴”,而后自缢而死。',
|
||
xuncan:'荀粲(210年—238年),字奉倩,颍川郡颍阴县(今河南省许昌市)人。三国时期曹魏大臣、玄学家,太尉荀彧幼子。个性简贵,不轻易交接常人,所交之辈皆一时俊杰。聪颖过人,善谈玄理,名噪一时。娶大将军曹洪之女为妻,生活美满。景初二年,面对妻子去世,悲痛过度而死,时年二十九,成语“荀令伤神”与之有关。',
|
||
hanshao:'韩韶(生卒年不详),字仲黄,颍川舞阳(今河南省漯河市)人,东汉桓帝时出仕。任郡吏,有政绩,继而被征入司徒府。他公正廉明,尽心民事,视民苦如在己身,政绩卓著。汉永寿二年(公元156年),泰山贼公孙举率流寇数千骚扰嬴县,守令因不能拒敌安民,多受制裁,朝廷命尚书府从三府(司徒、司马、司空)属员中,选择能治理民事,又能拒寇入侵的官员,前往镇守。韩韶被封为“嬴长”到嬴县上任,他是莱芜历史上唯一的一位“嬴长”。',
|
||
hanrong:'韩融(127年~196年),字元长,颍川舞阳(今属河南省漯河市)人。赢长韩韶子,献帝时大臣。中平五年(188年),融与荀爽、陈纪等十四人并博士征,不至。董卓废立,融等复俱公车征。初平元年(190年)六月,融为大鸿胪,奉命与执金吾胡母班等出使关东。献帝东迁,为李傕、郭汜等所败,融为太仆,奉命至弘农与傕、汜连和,使其放遣公卿百官及宫女妇人。',
|
||
wukuang:'吴匡(生卒年不详),兖州陈留(今河南开封市)人。东汉末年大臣,大将军何进部将。光熹元年(公元189年),汉灵帝死后,十常侍干预朝政,大将军何进谋诛宦官,但失败被杀,吴匡联合曹操、袁绍等杀尽宦官,攻杀车骑将军何苗。兴平二年(公元195年)十月,李傕、郭汜后悔放汉献帝东归洛阳,于是联合起来追击,曹操遂起兵平乱,但在回朝后,曹操挟天子以令诸侯,实行专权,但遭到吴匡反对。',
|
||
wanghun:'王浑(223年~297年),字玄冲,太原郡晋阳县(今山西省太原市)人。魏晋时期名臣,曹魏司空王昶的儿子。王浑早年为大将军曹爽的掾吏,高平陵政变后,循例免官,出任怀县县令、散骑侍郎等职,袭封京陵县侯。西晋王朝建立后,加号扬烈将军,历任征虏将军、东中郎将、豫州刺史等职,积极筹划伐吴方略。咸宁五年(279年),配合镇南将军杜预灭亡吴国,迁征东大将军、左仆射、司徒公,晋爵京陵县公。晋惠帝司马衷即位,加任侍中衔。楚王司马玮发动政变,有意寻求支持,遭到严词拒绝。楚王司马玮死后,复任司徒、录尚书事。元康七年(297年),王浑去世,享年七十五岁,谥号为元。《唐会要》尊为“魏晋八君子”之一。',
|
||
zhongyu:'钟毓(?-263年),字稚叔,颍川长社(今河南长葛市)人。三国时期魏国大臣,太傅钟繇之子、司徒钟会之兄。出身颍川钟氏,机灵敏捷,有其父之遗风。十四岁时,起家散骑侍郎。太和初年,迁黄门侍郎,袭封定陵县侯。正始年间,拜散骑常侍,迁魏郡太守,入为侍中、御史中丞、廷尉 [5] 。随平诸葛诞的淮南叛乱,拜青州刺史、后将军,都督徐州、荆州诸军事。景元四年(263年),去世,追赠车骑将军,谥号为惠,著有文集五卷(见《隋书·经籍志》及《两唐书·经籍志》),传于世。',
|
||
wanglun:'王沦(233年-257年)字太冲,出身太原晋阳王姓世族(今山西省太原市),王昶三子,王浑、王深之弟,王湛之兄。醇粹简远,崇尚老庄之学,心思平淡。二十多时被举荐为孝廉,没有前往,后任大将军参军。257年,诸葛诞不满司马氏篡权而在寿春起义,王沦跟随司马昭征讨,遭遇疾疫去世,时年二十五,时人惜之,司马昭为他流泪。其兄著诔文《表德论》,表述其德行,说“因为畏惧帝王的典章制度,不能写墓志铭,于是撰写过往的事迹,刻在墓的背面。”',
|
||
wuqiao:'吴乔,西晋人物,蜀车骑将军吴懿之孙。李雄建立成汉政权,他沦落益州,长达三十年,始终不向李雄屈服。',
|
||
},
|
||
dynamicTranslate:{
|
||
clanlianzhu(player){
|
||
if(player.storage.clanlianzhu) return '转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1;<span class="bluetext">阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1</span>。';
|
||
return '转换技。每名角色A的出牌阶段限一次。<span class="bluetext">阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1</span>;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。';
|
||
},
|
||
clanguangu(player){
|
||
if(player.storage.clanguangu) return '转换技,出牌阶段限一次。阴:你可以观看牌堆顶的至多四张牌;<span class="bluetext">阳:你可以观看一名角色的至多四张手牌。</span>然后你可以使用其中的一张牌。';
|
||
return '转换技,出牌阶段限一次。<span class="bluetext">阴:你可以观看牌堆顶的至多四张牌;</span>阳:你可以观看一名角色的至多四张手牌。然后你可以使用其中的一张牌。';
|
||
},
|
||
clanjiexuan(player){
|
||
if(player.storage.clanjiexuan) return '限定技,转换技。阴:你可以将一张红色牌当【顺手牵羊】使用;<span class="bluetext">阳:你可以将一张黑色牌当【过河拆桥】使用。</span>';
|
||
return '限定技,转换技。<span class="bluetext">阴:你可以将一张红色牌当【顺手牵羊】使用;</span>阳:你可以将一张黑色牌当【过河拆桥】使用。';
|
||
},
|
||
},
|
||
translate:{
|
||
clan_wuxian_prefix:'族',
|
||
clan_wuban_prefix:'族',
|
||
clan_xunshu_prefix:'族',
|
||
clan_xunchen_prefix:'族',
|
||
clan_xuncai_prefix:'族',
|
||
clan_xuncan_prefix:'族',
|
||
clan_hanshao_prefix:'族',
|
||
clan_hanrong_prefix:'族',
|
||
clan_wukuang_prefix:'族',
|
||
clan_wangling_prefix:'族',
|
||
clan_zhongyan_prefix:'族',
|
||
clan_wangyun_prefix:'族',
|
||
clan_wanghun_prefix:'族',
|
||
clan_zhonghui_prefix:'族',
|
||
clan_zhongyu_prefix:'族',
|
||
clan_wanglun_prefix:'族',
|
||
clan_xunyou_prefix:'族',
|
||
clan_wuqiao_prefix:'族',
|
||
|
||
clan_wuxian:'族吴苋',
|
||
clanyirong:'移荣',
|
||
clanyirong_info:'出牌阶段限两次。若你的手牌数:小于X,则你可以将手牌摸至X张(至多摸八张),然后X-1;大于X,则你可以将手牌弃置至X张,然后X+1。(X为你的手牌上限)',
|
||
clanguixiang:'贵相',
|
||
clanguixiang_info:'锁定技。你的非出牌阶段开始前,若此阶段即将成为你本回合内的第X个阶段(X为你的手牌上限),则你终止此阶段,改为进行一个出牌阶段。',
|
||
clanmuyin:'穆荫',
|
||
clanmuyin_info:'宗族技。回合开始时,你可以选择一名手牌上限不为全场最多的陈留吴氏角色。该角色的手牌上限+1。',
|
||
chenliuwushi:'陈留·吴氏',
|
||
clan_wuban:'族吴班',
|
||
clanzhanding:'斩钉',
|
||
clanzhanding_info:'你可以将任意张牌当做【杀】使用并你令你的手牌上限-1。你以此法使用的【杀】结算结束后,若你因此【杀】造成过伤害,则你将手牌摸至手牌上限(至多摸五张),否则你令此【杀】不计入次数限制。',
|
||
clan_xunshu:'族荀淑',
|
||
clanshenjun:'神君',
|
||
clanshenjun_info:'当一名角色使用【杀】或普通锦囊牌时,若你手牌中有该牌名的牌,你展示之,且这些牌称为“神君”。然后本阶段结束时,你可以将等同于你“神君”数张牌当做一张“神君”牌使用。',
|
||
clanbalong:'八龙',
|
||
clanbalong_info:'锁定技。当你于一回合内首次{回复体力后或受到伤害后或失去体力后},若你手牌中唯一最多的类别为锦囊牌,你展示所有手牌并摸至角色数张。',
|
||
clandaojie:'蹈节',
|
||
clandaojie_info:'宗族技,锁定技。当你每回合第一次使用非伤害类普通锦囊牌后,你须失去一个锁定技或失去1点体力,令一名颍川荀氏角色获得此牌对应的所有实体牌。',
|
||
clan_xuncai:'族荀采',
|
||
clanlieshi:'烈誓',
|
||
clanlieshi_info:'出牌阶段,你可以选择一项:1.废除判定区并受到你造成的1点火焰伤害;2.弃置所有【闪】;3.弃置所有【杀】。然后令一名其他角色从你未选择的选项中选择一项。',
|
||
clandianzhan:'点盏',
|
||
clandianzhan_info:'锁定技。当你每轮第一次使用一种花色的牌后:若此牌的目标数为1,你横置此牌目标;若你有此花色的手牌,你重铸这些牌。然后你摸一张牌。',
|
||
clanhuanyin:'还阴',
|
||
clanhuanyin_info:'锁定技。当你进入濒死状态时,将手牌补至四张。',
|
||
clan_xunchen:'族荀谌',
|
||
clansankuang:'三恇',
|
||
clansankuang_info:'锁定技。当你每轮第一次使用一种类别的牌后,你令一名其他角色交给你至少X张牌,然后于装备区或处理区内获得你使用的牌对应的所有实体牌(X为以下条件中其满足的项数:场上有牌、已受伤、体力值小于手牌数)。',
|
||
clanbeishi:'卑势',
|
||
clanbeishi_info:'锁定技。当一名角色失去最后的手牌后,若其是你首次发动〖三恇〗的目标角色,你回复1点体力。',
|
||
clan_xuncan:'族荀粲',
|
||
clanyunshen:'熨身',
|
||
clanyunshen_info:'出牌阶段限一次。你可以令一名其他角色回复1点体力,然后选择一项:1.你视为对其使用一张冰【杀】;2.其视为对你使用一张冰【杀】。',
|
||
clanshangshen:'伤神',
|
||
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_wukuang:'族吴匡',
|
||
clanlianzhu:'联诛',
|
||
clanlianzhu_info:'转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。',
|
||
clan_wangling:'族王淩',
|
||
clanbolong:'驳龙',
|
||
clanbolong_info:'出牌阶段限一次。你可以令一名其他角色选择一项:1.你交给其一张牌,然后视为对其使用一张雷【杀】;2.交给你等同于你手牌数的牌,然后视为对你使用一张【酒】。',
|
||
clanzhongliu:'中流',
|
||
clanzhongliu_info:'宗族技,锁定技。当你使用牌时,若此牌对应的实体牌均不为太原王氏角色的手牌,你重置武将牌上的技能。',
|
||
clan_zhongyan:'族钟琰',
|
||
clanguangu:'观骨',
|
||
clanguangu_info:'转换技,出牌阶段限一次。阴:你可以观看牌堆顶的至多四张牌;阳:你可以观看一名角色的至多四张手牌。然后你可以使用其中的一张牌。',
|
||
clanxiaoyong:'啸咏',
|
||
clanxiaoyong_info:'锁定技。当你于回合内首次使用字数为X的牌时,你重置〖观骨〗(X为你上次发动〖观骨〗观看的牌数)。',
|
||
clanbaozu:'保族',
|
||
clanbaozu_info:'宗族技,限定技。当一名颍川钟氏角色进入濒死状态时,你可以令其横置并回复1点体力。',
|
||
clan_wangyun:'族王允',
|
||
clanjiexuan:'解悬',
|
||
clanjiexuan_info:'限定技,转换技。阴:你可以将一张红色牌当【顺手牵羊】使用;阳:你可以将一张黑色牌当【过河拆桥】使用。',
|
||
clanmingjie:'铭戒',
|
||
clanmingjie_info:'限定技。出牌阶段,你可以选择一名角色,然后你获得此下效果:①你使用牌时你可以指定其为额外目标直到其下个回合结束。②其下个回合结束时(若该角色为你则改为你的下下个回合结束时),你可以使用本回合使用过的黑桃牌和被抵消过的牌。',
|
||
clan_wanghun:'族王浑',
|
||
clanfuxun:'抚循',
|
||
clanfuxun_info:'出牌阶段限一次。你可以获得或交给一名其他角色一张手牌,然后若其手牌数与你相等且于此阶段仅以此法获得或失去过牌,你可以将一张牌当任意基本牌使用。',
|
||
clanchenya:'沉雅',
|
||
clanchenya_info:'当一名角色发动“出牌阶段限一次”的技能后,你可以令其重铸任意张牌名字数为X的牌(X为其手牌数)。',
|
||
clan_zhonghui:'族钟会',
|
||
clanyuzhi:'迂志',
|
||
clanyuzhi_info:'锁定技。新的一轮开始时,你依次执行以下项:①若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数,你失去1点体力或失去〖保族〗。②你弃置一张手牌,然后摸X张牌(X为此牌牌名字数)。',
|
||
clanxieshu:'挟术',
|
||
clanxieshu_info:'当你每回合首次因牌造成或受到伤害后,你可以横置武将牌,然后弃置Y张牌并摸你已损失体力值张牌(Y为此牌牌名字数)。',
|
||
clan_zhongyu:'族钟毓',
|
||
clanjiejian:'捷谏',
|
||
clanjiejian_info:'当你于一回合使用第X张牌指定第一个目标后,若此牌不为装备牌,则你可以令一名目标角色摸X张牌。(X为此牌牌名字数)',
|
||
clanhuanghan:'惶汗',
|
||
clanhuanghan_info:'当你受到牌造成的伤害后,你可以摸X张牌并弃置Y张牌(X为此牌牌名字数,Y为你已损失的体力值),然后若此次技能发动不为你本回合首次发动此技能,你重置技能〖保族〗。',
|
||
clan_wanglun:'族王沦',
|
||
clanqiuxin:'求心',
|
||
clanqiuxin_info:'出牌阶段限一次,你可以令一名其他角色选择一项:①你对其使用【杀】;②你对其使用任意普通锦囊牌。当你执行其选择的选项后,你视为执行另一项。',
|
||
clanjianyuan:'简远',
|
||
clanjianyuan_info:'当一名角色发动“出牌阶段限一次”的技能后,你可以令其重铸任意张牌名字数为X的牌(X为其本阶段的使用牌数)。',
|
||
clan_xunyou:'族荀攸',
|
||
clanbaichu:'百出',
|
||
clanbaichu_info:'锁定技,当你使用一张牌结算完毕后,若你:未记录过此牌的花色和类型组合,则你记录此组合并记录一个普通锦囊牌名,否则你于本轮获得技能〖奇策〗;已记录此牌牌名,你回复1点体力或摸一张牌。',
|
||
clan_wuqiao:'族吴乔',
|
||
clanqiajue:'跒倔',
|
||
clanqiajue_info:'摸牌阶段开始时,你可以弃置一张黑色牌。若如此做,此阶段结束时,你展示手牌,若这些牌的点数和大于30,你的手牌上限-2,否则你执行一个额外的摸牌阶段。',
|
||
|
||
clan_wu:'陈留·吴氏',
|
||
clan_xun:'颍川·荀氏',
|
||
clan_han:'颍川·韩氏',
|
||
clan_wang:'太原·王氏',
|
||
clan_zhong:'颍川·钟氏',
|
||
},
|
||
};
|
||
});
|