commit
11ef8585f3
|
@ -232,7 +232,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
case '鹤':
|
||||
return true;
|
||||
case '猿':
|
||||
return game.hasPlayer(target=>target!=playertarget.countGainableCards(player,'e'));
|
||||
return game.hasPlayer(target=>target!=player&&target.countGainableCards(player,'e'));
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1634,9 +1634,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcminze:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
return !player.hasSkill('dcminze_ban');
|
||||
},
|
||||
filterTarget:function(card,player,target){
|
||||
if(player.getStorage('dcminze_targeted').includes(target)) return false;
|
||||
return target.countCards('h')<player.countCards('h');
|
||||
|
@ -1653,16 +1650,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
delay:false,
|
||||
group:'dcminze_draw',
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.give(cards,target);
|
||||
player.addTempSkill('dcminze_targeted','phaseUseAfter');
|
||||
player.markAuto('dcminze_targeted',[target]);
|
||||
player.addTempSkill('dcminze_given');
|
||||
player.markAuto('dcminze_given',cards.map(i=>get.name(i,player)));
|
||||
'step 1'
|
||||
if(target.countCards('h')>player.countCards('h')){
|
||||
player.addTempSkill('dcminze_ban','phaseUseAfter');
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:6.5,
|
||||
|
@ -1670,7 +1662,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
subSkill:{
|
||||
targeted:{onremove:true,charlotte:true},
|
||||
ban:{charlotte:true},
|
||||
given:{
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
|
@ -11494,7 +11485,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dczuowei_info:'当你于回合内使用牌时,你可以根据你的手牌数执行对应效果:大于X,令此牌不可被响应;等于X,对一名其他角色造成1点伤害;小于X,摸两张牌且不能于本回合再触发该选项(X为你装备区里牌的数量且至少为1)。',
|
||||
liuchongluojun:'刘宠骆俊',
|
||||
dcminze:'悯泽',
|
||||
dcminze_info:'①出牌阶段每名角色限一次。你可以将至多两张牌名不同的牌交给一名手牌数小于你的角色,若其因此手牌数大于你,〖悯泽①〗于此阶段失效。②结束阶段,你将手牌摸至X张(X为你本回合因〖悯泽①〗失去过的牌的牌名数且至多为5)。',
|
||||
dcminze_info:'①出牌阶段每名角色限一次。你可以将至多两张牌名不同的牌交给一名手牌数小于你的角色。②结束阶段,你将手牌摸至X张(X为你本回合因〖悯泽①〗失去过的牌的牌名数且至多为5)。',
|
||||
dcjini:'击逆',
|
||||
dcjini_info:'当你受到伤害后,你可以重铸至多Y张手牌(Y为你的体力上限减本回合你以此法重铸过的牌数)。若你以此法获得了【杀】,你可以对伤害来源使用一张无视距离且不可被响应的【杀】。',
|
||||
yuechen:'乐綝',
|
||||
|
|
|
@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
connect:true,
|
||||
characterSort:{
|
||||
mobile:{
|
||||
mobile_default:['mb_chengui','mb_huban','mb_xianglang','yanxiang','xin_wuban','laimin','baoxin','jiangji','liwei','xin_guozhao',"miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi'],
|
||||
mobile_default:['xin_huojun','muludawang','mb_chengui','mb_huban','mb_xianglang','yanxiang','xin_wuban','laimin','baoxin','jiangji','liwei','xin_guozhao',"miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi'],
|
||||
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong','yj_weiyan','yj_zhoubuyi'],
|
||||
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
|
||||
mobile_shenhua_feng:['re_xiaoqiao',"xin_zhoutai"],
|
||||
|
@ -26,6 +26,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
character:{
|
||||
xin_huojun:['male','shu',4,['sidai','jieyu'],['character:tw_huojun','die_audio:tw_huojun']],
|
||||
muludawang:['male','qun','3/3/1',['shoufa','yuxiang','zhoulin']],
|
||||
mb_chengui:['male','qun',3,['guimou','zhouxian']],
|
||||
mb_huban:['male','wei',4,['mbyilie']],
|
||||
mb_xianglang:['male','shu',3,['naxue','yijie']],
|
||||
|
@ -176,6 +178,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
scs_gaowang:['male','qun','',['scsmiaoyu'],['unseen','sex:male_castrated']],
|
||||
},
|
||||
characterIntro:{
|
||||
muludawang:'古典小说《三国演义》中的虚构人物,八纳洞主,孟获盟友。擅驱兽法,能行风雨,控制猛兽并指挥它们作战。在法术帮助下最初对蜀军取得一些胜利,但在诸葛亮的喷火木兽将他的动物吓跑后战败,最后死于乱军之中。',
|
||||
laimin:'来敏(165年—261年),字敬达,义阳新野人,东汉太中大夫来歙之后,司空来艳之子,三国时期蜀汉官员。东汉末年,逢董卓之乱,来敏跟随姐夫黄琬到荆州避难,黄琬是刘璋祖母的侄子,来敏又与姐姐来氏入蜀,被刘璋引为宾客。来敏喜欢读书,尤其喜欢《左氏春秋》。刘备平定益州后,以来敏为典学校尉,后立太子,来敏为家令。刘禅继位后,任命来敏为虎贲中郎将,诸葛亮驻汉中,请来敏为军祭酒、辅军将军。却因其口出狂言而被罢官,诸葛亮死后,来敏历任大长秋、光禄大夫、执慎将军等职,期间多次因说错话而被免官,蜀汉景耀年间,来敏去世,时年九十七岁。',
|
||||
shichangshi:'十常侍,指中国东汉(公元25年—220年)灵帝时期(168年-189年)操纵政权的十二个宦官:张让、赵忠、夏恽、郭胜、孙璋、毕岚、栗嵩、段珪、高望、张恭、韩悝、宋典(在小说《三国演义》里,十常侍指的是指张让、赵忠、封谞、段珪、曹节、侯览、蹇硕、程旷、夏恽、郭胜十人),他们都任职中常侍。玩弄小皇帝于股掌之中,以至灵帝称“张常侍是我父,赵常侍是我母”。十常侍自己横征暴敛,卖官鬻爵,他们的父兄子弟遍布天下,横行乡里,祸害百姓,无官敢管。人民不堪剥削、压迫,纷纷起来反抗。当时一些比较清醒的官吏,已看出宦官集团的黑暗腐败,导致大规模农民起义的形势。郎中张钧在给皇帝的奏章中明确指出,黄巾起义是外戚宦官专权逼出来的,他说:“张角所以能兴兵作乱,万人所以乐附之者,其源皆由十常侍多放父兄、子弟、婚宗、宾客典据州郡,辜确财利,侵略百姓,百姓之怨无所告诉,故谋议不轨,聚为‘盗贼’。”后被曹操、袁绍所歼。',
|
||||
sunzhang:'孙璋(?-189年?)东汉末期汉灵帝的宦官,官居中常侍,为十常侍之一,在张让、赵忠之下位居第三。光熹元年(189年),张让、赵忠、段珪等诛杀何进,袁绍率军入宫,诛杀孙璋。',
|
||||
|
@ -391,6 +394,255 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
skill:{
|
||||
//霍骏
|
||||
sidai:{
|
||||
audio:'twsidai',
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
locked:false,
|
||||
limited:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'fire',
|
||||
filter:function(event,player){
|
||||
var cards=player.getCards('h',{type:'basic'});
|
||||
if(!cards.length) return false;
|
||||
for(var i of cards){
|
||||
if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false;
|
||||
}
|
||||
return event.filterCard(get.autoViewAs({name:'sha',storage:{sidai:true}},cards),player,event);
|
||||
},
|
||||
viewAs:{name:'sha',storage:{sidai:true}},
|
||||
filterCard:{type:'basic'},
|
||||
selectCard:-1,
|
||||
check:()=>1,
|
||||
onuse:function(result,player){
|
||||
player.awakenSkill('sidai');
|
||||
player.addTempSkill('sidai_tao');
|
||||
player.addTempSkill('sidai_shan');
|
||||
},
|
||||
ai:{
|
||||
order:function(item,player){
|
||||
return get.order({name:'sha'},player)+0.1;
|
||||
},
|
||||
result:{
|
||||
target:function(player,target){
|
||||
var cards=ui.selected.cards.slice(0);
|
||||
var names=[];
|
||||
for(var i of cards) names.add(i.name);
|
||||
if(names.length<player.hp) return 0;
|
||||
if(player.hasUnknown()&&(player.identity!='fan'||!target.isZhu)) return 0;
|
||||
if(get.attitude(player,target)>=0) return -20;
|
||||
return lib.card.sha.ai.result.target.apply(this,arguments);
|
||||
},
|
||||
},
|
||||
},
|
||||
subSkill:{
|
||||
tao:{
|
||||
trigger:{source:'damageSource'},
|
||||
filter:function(event,player){
|
||||
if(!event.card||!event.card.storage||!event.card.storage.sidai||!event.player.isIn()) return false;
|
||||
for(var i of event.cards){
|
||||
if(i.name=='tao') return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
content:function(){
|
||||
trigger.player.loseMaxHp();
|
||||
},
|
||||
},
|
||||
shan:{
|
||||
trigger:{player:'useCardToPlayered'},
|
||||
filter:function(event,player){
|
||||
if(!event.card||!event.card.storage||!event.card.storage.sidai||!event.target.isIn()) return false;
|
||||
for(var i of event.cards){
|
||||
if(i.name=='shan') return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
content:function(){
|
||||
'step 0'
|
||||
trigger.target.chooseToDiscard('h',{type:'basic'},'弃置一张基本牌,否则不能响应'+get.translation(trigger.card)).set('ai',function(card){
|
||||
var player=_status.event.player;
|
||||
if(player.hasCard('hs',function(cardx){
|
||||
return cardx!=card&&get.name(cardx,player)=='shan';
|
||||
})) return 12-get.value(card);
|
||||
return 0;
|
||||
});
|
||||
'step 1'
|
||||
if(!result.bool) trigger.directHit.add(trigger.target);
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
jieyu:{
|
||||
audio:'twjieyu',
|
||||
trigger:{player:'phaseJieshuBegin'},
|
||||
filter:function(event,player){
|
||||
for(var i=0;i<ui.discardPile.childElementCount;i++){
|
||||
if(get.type(ui.discardPile.childNodes[i])=='basic') return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
prompt2:function(event,player){
|
||||
const num=lib.skill.jieyu.getNum(player,true);
|
||||
return '获得弃牌堆中'+get.cnNumber(num)+'张'+(num>1?'牌名各不相同的':'')+'基本牌';
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const num=lib.skill.jieyu.getNum(player,false);
|
||||
let gains=[],names=lib.inpile.filter(name=>get.type(name)=='basic').randomGets(num);
|
||||
names.forEach(name=>{
|
||||
let card=get.discardPile(card=>card.name==name);
|
||||
if(name) gains.push(card);
|
||||
});
|
||||
if(gains.length) player.gain(gains,'gain2');
|
||||
},
|
||||
getNum:function(player,goon){
|
||||
let num=3,bool=goon;
|
||||
const history=game.getAllGlobalHistory('everything');
|
||||
for(let i=history.length-1;i>=0;i--){
|
||||
const evt=history[i];
|
||||
if(evt.name=='useSkill'&&evt.player==player&&evt.skill=='jieyu'){
|
||||
if(!bool) bool=true;
|
||||
else break;
|
||||
}
|
||||
if(evt.name=='useCard'&&evt.player!=player&&evt.targets&&evt.targets.includes(player)&&get.tag(evt.card,'damage')){
|
||||
num--;
|
||||
if(num==1) break;
|
||||
}
|
||||
}
|
||||
return num;
|
||||
},
|
||||
},
|
||||
//木鹿大王
|
||||
shoufa:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:'damageEnd',
|
||||
source:'damageSource',
|
||||
},
|
||||
filter:function(event,player,name){
|
||||
if(name=='damageSource'&&player.getHistory('sourceDamage').indexOf(event)!=0) return false;
|
||||
return game.hasPlayer(target=>{
|
||||
if(name=='damageEnd') return get.distance(player,target)>2;
|
||||
return get.distance(player,target)<=2;
|
||||
});
|
||||
},
|
||||
direct:true,
|
||||
async content(event,trigger,player){
|
||||
const zhoufa=player.storage.zhoulin_zhoufa;
|
||||
const str=zhoufa?[
|
||||
'令其受到1点无来源伤害',
|
||||
'你随机获得其一张牌',
|
||||
'你随机弃置其装备区的一张牌',
|
||||
'令其摸一张牌',
|
||||
][['豹','鹰','熊','兔'].indexOf(zhoufa)]:'令其随机执行一个效果';
|
||||
const {result:{bool,targets}}=await player.chooseTarget(get.prompt('shoufa'),'选择一名距离'+(event.triggername=='damageEnd'?'':'不')+'大于2的角色,'+str,(card,player,target)=>{
|
||||
const name=_status.event.name;
|
||||
if(name=='damageEnd'&&get.distance(player,target)<=2) return false;
|
||||
if(name=='damageSource'&&get.distance(player,target)>2) return false;
|
||||
const zhoufa=player.storage.zhoulin_zhoufa;
|
||||
if(!zhoufa) return true;
|
||||
if(zhoufa=='豹'||zhoufa=='兔') return true;
|
||||
if(zhoufa=='鹰') return target.countCards('he');
|
||||
return target.countDiscardableCards(player,'e');
|
||||
}).set('ai',target=>{
|
||||
const player=_status.event.player;
|
||||
const zhoufa=player.storage.zhoulin_zhoufa;
|
||||
if(!zhoufa) return -get.attitude(player,target);
|
||||
switch(zhoufa){
|
||||
case '豹':
|
||||
return get.damageEffect(target,player,player);
|
||||
case '鹰':
|
||||
return get.effect(target,{name:'guohe_copy2'},player,player);
|
||||
case '熊':
|
||||
let att=get.attitude(player,target),eff=0;
|
||||
target.getCards('e',card=>{
|
||||
var val=get.value(card,target);
|
||||
eff=Math.max(eff,-val*att);
|
||||
});
|
||||
return eff;
|
||||
case '兔':
|
||||
return get.effect(target,{name:'draw'},player,player);
|
||||
}
|
||||
}).set('name',event.triggername);
|
||||
if(!bool) return;
|
||||
const target=targets[0];
|
||||
player.logSkill('shoufa',target);
|
||||
const shoufa=zhoufa?zhoufa:['豹','鹰','熊','兔'].randomGet();
|
||||
game.log(target,'执行','#g'+shoufa,'效果');
|
||||
switch(shoufa){
|
||||
case '豹':
|
||||
target.damage('nosource');
|
||||
break;
|
||||
case '鹰':
|
||||
player.gain(target.getGainableCards(player,'he'),target,'giveAuto');
|
||||
break;
|
||||
case '熊':
|
||||
target.discard(target.getGainableCards(player,'e').randomGet()).discarder=player;
|
||||
break;
|
||||
case '兔':
|
||||
target.draw();
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
yuxiang:{
|
||||
mod:{
|
||||
globalFrom(from,to,distance){
|
||||
if(from.hujia>0) return distance-1;
|
||||
},
|
||||
globalTo(from,to,distance){
|
||||
if(to.hujia>0) return distance+1;
|
||||
},
|
||||
},
|
||||
audio:2,
|
||||
trigger:{player:'damageBegin2'},
|
||||
filter:function(event,player){
|
||||
return player.hujia>0&&event.hasNature('fire');
|
||||
},
|
||||
forced:true,
|
||||
async content(event,trigger,player){
|
||||
trigger.num++;
|
||||
},
|
||||
},
|
||||
zhoulin:{
|
||||
audio:2,
|
||||
limited:true,
|
||||
unique:true,
|
||||
enable:'phaseUse',
|
||||
skillAnimation:true,
|
||||
animationColor:'fire',
|
||||
async content(event,trigger,player){
|
||||
player.awakenSkill('zhoulin');
|
||||
player.changeHujia(2,null,true);
|
||||
const {result:{control}}=await player.chooseControl('豹','鹰','熊','兔').set('ai',()=>'豹').set('prompt','选择一个固定效果');
|
||||
if(control){
|
||||
player.popup(control);
|
||||
game.log(player,'选择了','#g'+control,'效果');
|
||||
player.addTempSkill('zhoulin_zhoufa');
|
||||
player.storage.zhoulin_zhoufa=control;
|
||||
player.markSkill('zhoulin_zhoufa');
|
||||
game.broadcastAll(function(player,zhoufa){
|
||||
if(player.marks.zhoulin_zhoufa) player.marks.zhoulin_zhoufa.firstChild.innerHTML=zhoufa;
|
||||
},player,control);
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:12,
|
||||
result:{player:1},
|
||||
},
|
||||
subSkill:{
|
||||
zhoufa:{
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
intro:{content:'已选择$效果'},
|
||||
},
|
||||
}
|
||||
},
|
||||
//陈珪
|
||||
guimou:{
|
||||
audio:2,
|
||||
|
@ -15380,6 +15632,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
mobilexingxue:function(player){
|
||||
return lib.translate[(player.storage.mobileyanzhu?'mobilexingxuex':'mobilexingxue')+'_info'];
|
||||
},
|
||||
shoufa:function(player){
|
||||
const zhoufa=player.storage.zhoulin_zhoufa;
|
||||
if(!zhoufa) return '当你受到伤害后/于一回合首次造成伤害后,你可以选择一名与你距离大于/不大于2的角色,令其随机执行以下一项:豹,令其受到1点无来源伤害;鹰,你随机获得其一张牌;熊,你随机弃置其装备区的一张牌;兔,令其摸一张牌。';
|
||||
let str='当你受到伤害后/于一回合首次造成伤害后,你可以选择一名与你距离大于/不大于2的角色,';
|
||||
str+=[
|
||||
'令其受到1点无来源伤害',
|
||||
'你随机获得其一张牌',
|
||||
'你随机弃置其装备区的一张牌',
|
||||
'令其摸一张牌',
|
||||
][['豹','鹰','熊','兔'].indexOf(zhoufa)];
|
||||
return str;
|
||||
},
|
||||
},
|
||||
perfectPair:{
|
||||
simazhao:['simayi','jin_simayi','jin_wangyuanji'],
|
||||
|
@ -16247,6 +16511,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
mbyilie2:'义烈',
|
||||
mbyilie3:'义烈',
|
||||
mbyilie_info:'锁定技。①游戏开始时,你选择一名其他角色,然后你获得以下效果:其受到伤害时,若你的“烈”标记数小于2,则你获得等同于伤害值的“烈”标记,然后防止此伤害;其对其他角色造成伤害后,你回复1点体力。②结束阶段,若你有“烈”标记,你摸X张牌并失去X点体力,然后移去所有“烈”标记(X为你拥有的“烈”标记数)。',
|
||||
muludawang:'木鹿大王',
|
||||
shoufa:'兽法',
|
||||
shoufa_info:'当你受到伤害后/于一回合首次造成伤害后,你可以选择一名与你距离大于/不大于2的角色,令其随机执行以下一项:豹,令其受到1点无来源伤害;鹰,你随机获得其一张牌;熊,你随机弃置其装备区的一张牌;兔,令其摸一张牌。',
|
||||
yuxiang:'御象',
|
||||
yuxiang_info:'锁定技,若你有护甲值,则:①你计算与其他角色的距离-1,其他角色计算与你的距离+1;②当你受到火焰伤害时,此伤害+1。',
|
||||
zhoulin:'咒鳞',
|
||||
zhoulin_info:'限定技,出牌阶段,你可以获得2点护甲值,然后选择一个“兽法”效果,你发动〖兽法〗的执行效果改为你选择的效果直到你的下个回合结束。',
|
||||
xin_huojun:'手杀霍峻',
|
||||
xin_huojun_prefix:'手杀',
|
||||
sidai:'伺怠',
|
||||
sidai_info:'限定技,出牌阶段,你可以将手牌区内的所有基本牌当做【杀】使用。若此牌对应的实体牌中:包含【闪】,则目标角色成为此牌的目标后,需弃置一张基本牌,否则不可响应此牌;包含【桃】,则当目标角色受到此牌的伤害后,其减1点体力上限。',
|
||||
jieyu:'竭御',
|
||||
jieyu_info:'结束阶段,你可以从弃牌堆中获得共X张不同牌名的基本牌(X为3-你上次发动〖竭御〗至今你成为其他角色使用伤害类卡牌目标的次数,且X至少为1)。',
|
||||
|
||||
mobile_standard:'手杀异构·标准包',
|
||||
mobile_shenhua_feng:'手杀异构·其疾如风',
|
||||
|
|
412
character/sb.js
412
character/sb.js
|
@ -5,6 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'sb',
|
||||
connect:true,
|
||||
character:{
|
||||
sb_caopi:['male','wei',3,['sbxingshang','sbfangzhu','sbsongwei'],['zhu']],
|
||||
sb_guanyu:['male','shu',4,['sbwusheng','sbyijue']],
|
||||
sb_huangyueying:['female','shu',3,['sbjizhi','sbqicai']],
|
||||
sb_sp_zhugeliang:['male','shu',3,['sbhuoji','sbkanpo']],
|
||||
|
@ -55,6 +56,392 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
skill:{
|
||||
//曹丕
|
||||
sbxingshang:{
|
||||
audio:2,
|
||||
trigger:{global:['die','damageEnd']},
|
||||
usable:1,
|
||||
forced:true,
|
||||
locked:false,
|
||||
async content(event,trigger,player){
|
||||
player.addMark('sbxingshang',1);
|
||||
},
|
||||
marktext:'颂',
|
||||
intro:{
|
||||
name:'颂',
|
||||
content:'mark',
|
||||
},
|
||||
ai:{threaten:2.5},
|
||||
group:'sbxingshang_use',
|
||||
subSkill:{
|
||||
use:{
|
||||
audio:'sbxingshang',
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
return game.hasPlayer(target=>{
|
||||
if(player.countMark('sbxingshang')>1) return true;
|
||||
return player.countMark('sbxingshang')&&(target.isLinked()||target.isTurnedOver());
|
||||
});
|
||||
},
|
||||
usable:1,
|
||||
chooseButton:{
|
||||
dialog:function(){
|
||||
var dialog=ui.create.dialog(
|
||||
'行殇:请选择你要执行的一项',
|
||||
[[
|
||||
[1,' ⒈复原一名角色的武将牌 '],
|
||||
[2,' ⒉令一名角色摸'+Math.min(5,Math.max(1,game.dead.length))+'张牌 '],
|
||||
],'tdnodes'],
|
||||
[[
|
||||
[3,' ⒊令一名体力上限小于10的角色加1点体力上限并回复1点体力,然后随机恢复一个被废除的装备栏 '],
|
||||
],'tdnodes'],
|
||||
[[
|
||||
[4,' ⒋获得一名已阵亡角色的所有技能,然后失去武将牌上的所有技能 '],
|
||||
],'tdnodes']
|
||||
);
|
||||
return dialog;
|
||||
},
|
||||
filter:function(button,player){
|
||||
if(button.link>player.countMark('sbxingshang')) return false;
|
||||
switch(button.link){
|
||||
case 1:
|
||||
return game.hasPlayer(target=>target.isLinked()||target.isTurnedOver());
|
||||
case 2:
|
||||
return true;
|
||||
case 3:
|
||||
return game.hasPlayer(target=>target.maxHp<10);
|
||||
case 4:
|
||||
return game.dead.length;
|
||||
}
|
||||
},
|
||||
check:function(button){
|
||||
let player=_status.event.player;
|
||||
switch(button.link){
|
||||
case 1:
|
||||
return game.filterPlayer(current=>get.attitude(player,current)>0).reduce((list,target)=>{
|
||||
let num=0;
|
||||
if(target.isLinked()) num+=0.5;
|
||||
if(target.isTurnedOver()) num+=10;
|
||||
list.push(num);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 2:
|
||||
return Math.min(5,Math.max(1,game.dead.length));
|
||||
case 3:
|
||||
return game.filterPlayer().reduce((list,target)=>{
|
||||
list.push(get.recoverEffect(target,player,player));
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 4:
|
||||
return game.dead.reduce((list,target)=>{
|
||||
let num=0;
|
||||
if(target.name&&lib.character[target.name]) num+=get.rank(target.name,true);
|
||||
if(target.name2&&lib.character[target.name2]) num+=get.rank(target.name2,true);
|
||||
list.push(num);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
}
|
||||
},
|
||||
backup:function(links,player){
|
||||
return {
|
||||
num:links[0],
|
||||
audio:'sbxingshang',
|
||||
filterTarget:function(card,player,target){
|
||||
switch(lib.skill.sbxingshang_use_backup.num){
|
||||
case 1:
|
||||
return target=>target.isLinked()||target.isTurnedOver();
|
||||
case 2:
|
||||
return true;
|
||||
case 3:
|
||||
return target.maxHp<10;
|
||||
case 4:
|
||||
return target==player;
|
||||
}
|
||||
},
|
||||
selectTarget:()=>lib.skill.sbxingshang_use_backup.num==4?-1:1,
|
||||
async content(event,trigger,player){
|
||||
const target=event.targets[0];
|
||||
const num=lib.skill.sbxingshang_use_backup.num;
|
||||
player.removeMark('sbxingshang',num);
|
||||
switch(num){
|
||||
case 1:
|
||||
if(target.isLinked()) target.link(false);
|
||||
if(target.isTurnedOver()) target.turnOver();
|
||||
break;
|
||||
case 2:
|
||||
target.draw(Math.min(5,Math.max(1,game.dead.length)));
|
||||
break;
|
||||
case 3:
|
||||
target.gainMaxHp();
|
||||
target.recover();
|
||||
let list=[];
|
||||
for (let i=1;i<=5;i++){
|
||||
if(target.hasDisabledSlot(i)) list.push('equip'+i);
|
||||
}
|
||||
if(list.length) target.enableEquip(list.randomGet());
|
||||
break;
|
||||
case 4:
|
||||
let map={};
|
||||
game.dead.forEach(target=>map[target.playerid]=get.translation(target));
|
||||
const {result:{control}}=await player.chooseControl(Object.values(map)).set('ai',()=>{
|
||||
const getNum=(target)=>{
|
||||
let num=0;
|
||||
if(target.name&&lib.character[target.name]) num+=get.rank(target.name,true);
|
||||
if(target.name2&&lib.character[target.name2]) num+=get.rank(target.name2,true);
|
||||
return num;
|
||||
};
|
||||
let controls=_status.event.controls.slice();
|
||||
controls=controls.map(name=>[name,game.dead.find(target=>_status.event.map[target.playerid]==name)]);
|
||||
controls.sort((a,b)=>getNum(b[1])-getNum(a[1]));
|
||||
return controls[0][0];
|
||||
}).set('prompt','获得一名已阵亡角色的所有技能').set('map',map);
|
||||
if(control){
|
||||
const target2=game.dead.find(targetx=>map[targetx.playerid]==control);
|
||||
player.line(target2);
|
||||
game.log(player,'选择了',target2);
|
||||
const skills=target2.getStockSkills(true,true);
|
||||
const skills2=player.getStockSkills(true,true);
|
||||
player.addSkillLog(skills);
|
||||
player.removeSkillLog(skills2);
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
result:{
|
||||
target:function(player,target){
|
||||
switch(lib.skill.sbxingshang_use_backup.num){
|
||||
case 1:
|
||||
let num=0;
|
||||
if(target.isLinked()) num+=0.5;
|
||||
if(target.isTurnedOver()) num+=10;
|
||||
return num;
|
||||
case 2:
|
||||
return 1;
|
||||
case 3:
|
||||
return get.recoverEffect(target,player,player);
|
||||
case 4:
|
||||
return 1;
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
prompt:function(links,player){
|
||||
switch(links[0]){
|
||||
case 1:
|
||||
return '复原一名角色的武将牌';
|
||||
case 2:
|
||||
return '令一名角色摸'+get.cnNumber(Math.min(5,Math.max(1,game.dead.length)))+'张牌';
|
||||
case 3:
|
||||
return '令一名体力上限小于10的角色加1点体力上限并回复1点体力,然后随机恢复一个被废除的装备栏';
|
||||
case 4:
|
||||
return '获得一名已阵亡角色的所有技能,然后失去武将牌上的所有技能';
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:9,
|
||||
result:{player:1},
|
||||
},
|
||||
},
|
||||
use_backup:{},
|
||||
},
|
||||
},
|
||||
sbfangzhu:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
return player.countMark('sbxingshang')>1;
|
||||
},
|
||||
usable:1,
|
||||
chooseButton:{
|
||||
dialog:function(){
|
||||
var dialog=ui.create.dialog('放逐:请选择你要执行的一项','hidden');
|
||||
dialog.add([[
|
||||
[1,'移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束'],
|
||||
[2,'移去2个“颂”标记,令一名其他角色不能响应除其外的角色使用的牌直到其回合结束'],
|
||||
[3,'移去3个“颂”标记,令一名其他角色将武将牌翻面'],
|
||||
[4,'移去3个“颂”标记,令一名其他角色只能使用你选择的一种类型的牌直到其回合结束']
|
||||
],'textbutton']);
|
||||
return dialog;
|
||||
},
|
||||
filter:function(button,player){
|
||||
if(button.link>2&&player.countMark('sbxingshang')<3) return false;
|
||||
if(button.link==4) return game.hasPlayer(target=>target!=player&&!target.hasSkill('sbfangzhu_ban'));
|
||||
return true;
|
||||
},
|
||||
check:function(button){
|
||||
let player=_status.event.player;
|
||||
switch(button.link){
|
||||
case 1:
|
||||
return game.filterPlayer(current=>get.attitude(player,current)<0).reduce((list,target)=>{
|
||||
let num=0;
|
||||
if(target.name&&lib.character[target.name]) num+=get.rank(target.name,true);
|
||||
if(target.name2&&lib.character[target.name2]) num+=get.rank(target.name2,true);
|
||||
list.push(num);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 2:
|
||||
return 0;
|
||||
case 3:
|
||||
return game.filterPlayer(target=>target!=player&&!target.hasSkill('sbfangzhu_ban')).reduce((list,target)=>{
|
||||
if(get.attitude(player,target)>0&&target.isTurnedOver()) list.push(10*target.countCards('hs')+1);
|
||||
else if(get.attitude(player,target)<0&&!target.isTurnedOver()) list.push(5*target.countCards('hs')+1);
|
||||
else list.push(0);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 4:
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
backup:function(links,player){
|
||||
return {
|
||||
num:links[0],
|
||||
audio:'sbfangzhu',
|
||||
filterTarget:lib.filter.notMe,
|
||||
async content(event,trigger,player){
|
||||
const target=event.target;
|
||||
const num=lib.skill.sbfangzhu_backup.num;
|
||||
player.removeMark('sbxingshang',num>2?3:2);
|
||||
switch(num){
|
||||
case 1:
|
||||
target.removeSkill('baiban');
|
||||
target.addTempSkill('baiban',{player:'phaseEnd'});
|
||||
break;
|
||||
case 2:
|
||||
target.addTempSkill('sbfangzhu_kill',{player:'phaseEnd'});
|
||||
break;
|
||||
case 3:
|
||||
target.turnOver();
|
||||
break;
|
||||
case 4:
|
||||
const {result:{control}}=await player.chooseControl('basic','trick','equip').set('ai',()=>'equip').set('prompt','放逐:请选择'+get.translation(target)+'仅能使用的类别的牌');
|
||||
if(control){
|
||||
player.line(target);
|
||||
player.popup(get.translation(control)+'牌');
|
||||
target.addTempSkill('sbfangzhu_ban',{player:'phaseEnd'});
|
||||
target.markAuto('sbfangzhu_ban',[control]);
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
result:{
|
||||
target:function(player,target){
|
||||
switch(lib.skill.sbfangzhu_backup.num){
|
||||
case 1:
|
||||
let num=0;
|
||||
if(target.name&&lib.character[target.name]) num+=get.rank(target.name,true);
|
||||
if(target.name2&&lib.character[target.name2]) num+=get.rank(target.name2,true);
|
||||
return num;
|
||||
case 2:
|
||||
return 0;
|
||||
case 3:
|
||||
if(get.attitude(player,target)>0&&target.isTurnedOver()) return 10*target.countCards('hs')+1;
|
||||
if(get.attitude(player,target)<0&&!target.isTurnedOver()) return -5*target.countCards('hs')+1;
|
||||
return 0;
|
||||
case 4:
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
prompt:function(links,player){
|
||||
switch(links[0]){
|
||||
case 1:
|
||||
return '移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束';
|
||||
case 2:
|
||||
return '移去2个“颂”标记,令一名其他角色不能响应除其外的角色使用的牌直到其回合结束';
|
||||
case 3:
|
||||
return '移去3个“颂”标记,令一名其他角色将武将牌翻面';
|
||||
case 4:
|
||||
return '移去3个“颂”标记,令一名其他角色只能使用你选择的一种类型的牌直到其回合结束';
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:9,
|
||||
result:{player:1},
|
||||
},
|
||||
subSkill:{
|
||||
backup:{},
|
||||
kill:{
|
||||
charlotte:true,
|
||||
mark:true,
|
||||
marktext:'禁',
|
||||
intro:{content:'不能响应其他角色使用的牌'},
|
||||
trigger:{global:'useCard1'},
|
||||
filter:function(event,player){
|
||||
return event.player!=player;
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
async content(event,trigger,player){
|
||||
trigger.directHit.add(player);
|
||||
},
|
||||
},
|
||||
ban:{
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
mark:true,
|
||||
marktext:'禁',
|
||||
intro:{
|
||||
markcount:()=>0,
|
||||
content:'只能使用$牌',
|
||||
},
|
||||
mod:{
|
||||
cardEnabled:function(card,player){
|
||||
if(!player.getStorage('sbfangzhu_ban').includes(get.type2(card))) return false;
|
||||
},
|
||||
cardSavable:function(card,player){
|
||||
if(!player.getStorage('sbfangzhu_ban').includes(get.type2(card))) return false;
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
sbsongwei:{
|
||||
audio:2,
|
||||
trigger:{player:'phaseUseBegin'},
|
||||
filter:function(event,player){
|
||||
return game.hasPlayer(target=>target.group=='wei'&&target!=player);
|
||||
},
|
||||
zhuSkill:true,
|
||||
forced:true,
|
||||
locked:false,
|
||||
async content(event,trigger,player){
|
||||
player.addMark('sbxingshang',game.countPlayer(target=>target.group=='wei'&&target!=player));
|
||||
},
|
||||
group:'sbsongwei_delete',
|
||||
subSkill:{
|
||||
delete:{
|
||||
audio:'sbsongwei',
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
return game.hasPlayer(target=>lib.skill.sbsongwei.subSkill.delete.filterTarget(null,player,target));
|
||||
},
|
||||
filterTarget:function(card,player,target){
|
||||
return target!=player&&target.group=='wei'&&target.getStockSkills(false,true).length;
|
||||
},
|
||||
skillAnimation:true,
|
||||
animationColor:'thunder',
|
||||
async content(event,trigger,player){
|
||||
player.awakenSkill('sbsongwei_delete');
|
||||
event.target.removeSkillLog(event.target.getStockSkills(false,true));
|
||||
},
|
||||
ai:{
|
||||
order:13,
|
||||
result:{
|
||||
target:function(player,target){
|
||||
return -target.getStockSkills(false,true).length;
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//关羽
|
||||
//矢
|
||||
sbwusheng:{
|
||||
|
@ -254,19 +641,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
filter:function(event,player){
|
||||
if(!game.hasPlayer(target=>target!=player&&target.hasEmptySlot(2))) return false;
|
||||
return player.countCards('h',card=>lib.skill.sbqicai.filterCardx(card,player))||event.sbqicai&&event.sbqicai.length;
|
||||
},
|
||||
filterCardx:function(card,player){
|
||||
if(player.getStorage('sbqicai').includes(card.name)) return false;
|
||||
return get.type(card)=='equip'&&get.subtype(card)=='equip2';
|
||||
//if(player.getStorage('sbqicai').includes(card.name)) return false;
|
||||
return get.type(card)=='equip'&&get.hasPlayer(target=>target!=player&&target.hasEmptySlot(get.subtype(card)));
|
||||
},
|
||||
usable:1,
|
||||
chooseButton:{
|
||||
dialog:function(event,player){
|
||||
const list1=player.getCards('h',card=>lib.skill.sbqicai.filterCardx(card,player));
|
||||
const list2=event.sbqicai;
|
||||
var dialog=ui.create.dialog('###奇才###<div class="text center">请选择一张防具牌置入一名其他角色的装备区</div>');
|
||||
var dialog=ui.create.dialog('###奇才###<div class="text center">请选择一张装备牌置入一名其他角色的装备区</div>');
|
||||
if(list1.length){
|
||||
dialog.add('<div class="text center">手牌区</div>');
|
||||
dialog.add(list1);
|
||||
|
@ -281,7 +667,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
check:function(button){
|
||||
var player=_status.event.player;
|
||||
var num=get.value(button.link);
|
||||
if(!game.hasPlayer(target=>target!=player&&target.hasEmptySlot(2)&&get.attitude(player,target)>0)) num=1/(get.value(button.link)||0.5);
|
||||
if(!game.hasPlayer(target=>target!=player&&target.hasEmptySlot(get.subtype(button.link))&&get.attitude(player,target)>0)) num=1/(get.value(button.link)||0.5);
|
||||
if(get.owner(button.link)) return num;
|
||||
return num*5;
|
||||
},
|
||||
|
@ -310,7 +696,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
target.$gain2(cards);
|
||||
game.delayx();
|
||||
}
|
||||
player.markAuto('sbqicai',[cards[0].name]);
|
||||
//player.markAuto('sbqicai',[cards[0].name]);
|
||||
target.equip(cards[0]);
|
||||
player.addSkill('sbqicai_gain');
|
||||
lib.skill.sbqicai.updateCounter(player,target,0);
|
||||
|
@ -556,7 +942,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sbkanpo:{
|
||||
init:function(player){
|
||||
if(!player.storage.sbkanpo){
|
||||
player.storage.sbkanpo=[3,[],[]];
|
||||
player.storage.sbkanpo=[4,[],[]];
|
||||
player.markSkill('sbkanpo');
|
||||
}
|
||||
},
|
||||
|
@ -5951,7 +6337,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sbhuoji:'火计',
|
||||
sbhuoji_info:'使命技。①使命:出牌阶段限一次。你可以对一名其他角色造成1点火焰伤害,然后你对所有与其势力相同的不为其的其他角色各造成1点火焰伤害。②成功:准备阶段,若你本局游戏已造成的火焰伤害不小于本局游戏总角色数,则你失去〖火计〗和〖看破〗,然后获得〖观星〗和〖空城〗。③失败:使命成功前进入濒死状态。',
|
||||
sbkanpo:'看破',
|
||||
sbkanpo_info:'①一轮游戏开始时,你清除〖看破①〗记录的牌名,然后你可以依次记录任意个未于上次发动〖看破①〗记录清除过的非装备牌牌名(对其他角色不可见,每局游戏至多记录3个牌名)。②其他角色使用你〖看破①〗记录过的牌名的牌时,你可以移去一个〖看破①〗中的此牌名的记录令此牌无效,然后你摸一张牌。',
|
||||
sbkanpo_info:'①一轮游戏开始时,你清除〖看破①〗记录的牌名,然后你可以依次记录任意个未于上次发动〖看破①〗记录清除过的非装备牌牌名(对其他角色不可见,每局游戏至多记录4个牌名)。②其他角色使用你〖看破①〗记录过的牌名的牌时,你可以移去一个〖看破①〗中的此牌名的记录令此牌无效,然后你摸一张牌。',
|
||||
sbguanxing:'观星',
|
||||
sbguanxing_info:'①准备阶段,你将所有“星”置入弃牌堆,将牌堆顶的X张牌置于你的武将牌上,称为“星”(X为7-此前发动〖观星①〗次数的三倍,且X至少为0)。然后你可以将任意张“星”置于牌堆顶。②结束阶段,若你未于本回合的准备阶段将“星”置于过牌堆顶,你可以将任意张“星”置于牌堆顶。③你可以如手牌般使用或打出“星”。',
|
||||
sbkongcheng:'空城',
|
||||
|
@ -5960,7 +6346,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sb_huangyueying_prefix:'谋',
|
||||
sbqicai:'奇才',
|
||||
sbqicai_backup:'奇才',
|
||||
sbqicai_info:'①出牌阶段限一次。你可以将手牌中或弃牌堆中的一张防具牌置于一名其他角色的防具栏,然后其获得如下效果:当其得到普通锦囊牌后,其将此牌交给你(限三张)。②你使用锦囊牌无距离限制。',
|
||||
sbqicai_info:'①出牌阶段限一次。你可以将手牌中或弃牌堆中的一张装备牌置于一名其他角色的对应装备栏,然后其获得如下效果:当其得到普通锦囊牌后,其将此牌交给你(限三张)。②你使用锦囊牌无距离限制。',
|
||||
sbjizhi:'集智',
|
||||
sbjizhi_info:'锁定技,当你使用一张普通锦囊牌时,你摸一张牌,且此牌本回合不计入你的手牌上限。',
|
||||
sb_guanyu:'谋关羽',
|
||||
|
@ -5970,6 +6356,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sbwusheng_info:'你可以将一张手牌当作任意【杀】使用或打出。出牌阶段开始时,你可以选择一名非主公的其他角色,本阶段对其使用【杀】无距离和次数限制,使用【杀】指定其为目标后摸一张牌,对其使用五张【杀】后不能对其使用【杀】。',
|
||||
sbyijue:'义绝',
|
||||
sbyijue_info:'锁定技,每名角色每局游戏限一次,当你对一名角色造成大于等于其体力值的伤害时,你防止此伤害,且本回合你使用牌指定其为目标后,取消之。',
|
||||
sb_caopi:'谋曹丕',
|
||||
sb_caopi_prefix:'谋',
|
||||
sbxingshang:'行殇',
|
||||
sbxingshang_info:'①每回合限一次,当一名角色死亡时或受到伤害时,你获得1个“颂”标记。②出牌阶段限一次,你可以:1.移去1个“颂”标记,令一名角色复原武将牌;2.移去2个“颂”标记,令一名角色摸X张牌(X为场上阵亡角色数,且X至少为1,至多为5);3.移去3个“颂”标记,令一名体力上限小于10的角色加1点体力上限,回复1点体力,随机恢复一个已废除的装备栏;4.移去4个“颂”标记,获得一名阵亡角色武将牌上的所有技能,然后你失去武将牌上的所有技能。',
|
||||
sbfangzhu:'放逐',
|
||||
sbfangzhu_info:'出牌阶段限一次,你可以:1.移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束;2.移去2个“颂”标记,令一名其他角色不能响应除其以为的角色使用的牌直到其回合结束;3.移去2个“颂”标记,令一名其他角色将武将牌翻面;4.移去2个“颂”标记,令一名其他角色只能使用你选择的一种类型的牌直到其回合结束。',
|
||||
sbsongwei:'颂威',
|
||||
sbsongwei_info:'①出牌阶段开始时,你获得Y个“颂”标记(Y为场上其他魏势力角色数)。②每局游戏限一次,出牌阶段,你可以令一名其他魏势力角色失去所有武将牌的技能。',
|
||||
|
||||
sb_zhi:'谋攻篇·知',
|
||||
sb_shi:'谋攻篇·识',
|
||||
|
|
|
@ -7718,7 +7718,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_yuanshao:['re_yuanshao','ol_yuanshao','xin_yuanshao','sb_yuanshao'],
|
||||
pangde:['re_pangde','ol_pangde','pangde'],
|
||||
yanwen:['yanwen','ol_yanwen','re_yanwen'],
|
||||
caopi:['caopi','re_caopi','ps_caopi'],
|
||||
caopi:['caopi','re_caopi','ps_caopi','sb_caopi'],
|
||||
xuhuang:['re_xuhuang','ol_xuhuang','sb_xuhuang','xuhuang'],
|
||||
menghuo:['menghuo','re_menghuo','sb_menghuo'],
|
||||
zhurong:['zhurong','ol_zhurong','re_zhurong','sb_zhurong'],
|
||||
|
|
|
@ -862,16 +862,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(evt.gaintag_map[i].includes('dcjiaoxia_used')) return true;
|
||||
}
|
||||
return false;
|
||||
}).length&&player.getHistory('sourceDamage',evt=>evt.card==event.card).length&&!['delay','equip'].includes(get.type(event.cards[0],player));
|
||||
}).length&&player.getHistory('sourceDamage',evt=>evt.card==event.card).length&&player.hasUseTarget(event.cards[0]);
|
||||
},
|
||||
direct:true,
|
||||
content:function(){
|
||||
var card={
|
||||
name:get.name(trigger.cards[0],player),
|
||||
nature:get.nature(trigger.cards[0],player),
|
||||
isCard:true,
|
||||
};
|
||||
player.chooseUseTarget(card,get.prompt('dcjiaoxia'),false,false).set('prompt2','视为使用'+get.translation(card)).logSkill='dcjiaoxia';
|
||||
player.chooseUseTarget(trigger.cards[0],get.prompt('dcjiaoxia'),false,false).set('prompt2','使用'+get.translation(card)).logSkill='dcjiaoxia';
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -5335,10 +5330,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
reliewei:{
|
||||
audio:'liewei',
|
||||
trigger:{global:'dying'},
|
||||
frequent:true,
|
||||
filter:function(event,player){
|
||||
return player==_status.currentPhase;
|
||||
return player==_status.currentPhase||player.getHistory('useSkill',evt=>evt.skill=='reliewei').length<player.getHp();
|
||||
},
|
||||
frequent:true,
|
||||
content:function(){
|
||||
player.draw();
|
||||
},
|
||||
|
@ -10895,7 +10890,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
jiaojie:'狡黠',
|
||||
jiaojie_info:'锁定技,你的红色牌不计入手牌上限。你使用黑色牌无距离和次数限制。',
|
||||
dcjiaoxia:'狡黠',
|
||||
dcjiaoxia_info:'①出牌阶段开始时,你可以令自己的所有手牌于此阶段均视为【杀】。若如此做,你使用以此法转化的【杀】造成伤害后,你可以视为使用此牌对应的原卡牌。②出牌阶段,你对你本阶段未使用过【杀】的角色使用【杀】无距离和次数限制。',
|
||||
dcjiaoxia_info:'①出牌阶段开始时,你可以令自己的所有手牌于此阶段均视为【杀】。若如此做,你使用以此法转化的【杀】造成伤害后,你可以使用此牌对应的原卡牌。②出牌阶段,你对你本阶段未使用过【杀】的角色使用【杀】无距离和次数限制。',
|
||||
dchumei:'狐魅',
|
||||
dchumei_info:'出牌阶段各限一次,你可以选择一名体力值不大于X的角色,令其:①摸一张牌。②交给你一张牌。③回复1点体力。(X为你本阶段造成的伤害数)',
|
||||
buchen:'不臣',
|
||||
|
@ -10953,7 +10948,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
recuorui:'摧锐',
|
||||
recuorui_info:'限定技,出牌阶段,你可以依次获得至多X名角色的各一张手牌(X为你的体力值)。',
|
||||
reliewei:'裂围',
|
||||
reliewei_info:'当有角色于你的回合内进入濒死状态时,你可以摸一张牌。',
|
||||
reliewei_info:'每回合限Y次,当有角色于你的回合内进入濒死状态时,你可以摸一张牌(Y为你的体力值,若当前回合角色为你,则Y为Infinity)。',
|
||||
duanwei:'段煨',
|
||||
langmie:'狼灭',
|
||||
langmie_damage:'狼灭',
|
||||
|
|
|
@ -2654,7 +2654,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcjianguo:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
filter:function(event,player){
|
||||
return !player.hasSkill('dcjianguo_0')||!player.hasSkill('dcjianguo_1');
|
||||
},
|
||||
chooseButton:{
|
||||
dialog:function(event,player){
|
||||
var dialog=ui.create.dialog('谏国:请选择一项','hidden');
|
||||
|
@ -2664,6 +2666,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
],'textbutton']);
|
||||
return dialog;
|
||||
},
|
||||
filter:function(button,player){
|
||||
if(button.link=='discard'&&player.hasSkill('dcjianguo_0')) return false;
|
||||
if(button.link=='draw'&&player.hasSkill('dcjianguo_1')) return false;
|
||||
return true;
|
||||
},
|
||||
check:function(button){
|
||||
var player=_status.event.player;
|
||||
if(button.link=='discard'){
|
||||
|
@ -2701,6 +2708,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
subSkill:{
|
||||
'0':{charlotte:true},
|
||||
'1':{charlotte:true},
|
||||
backup:{audio:'dcjianguo'},
|
||||
discard:{
|
||||
audio:'dcjianguo',
|
||||
|
@ -2709,16 +2718,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
selectCard:-1,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.addTempSkill('dcjianguo_0','phaseUseAfter');
|
||||
target.draw();
|
||||
game.delayex();
|
||||
'step 1'
|
||||
var num=Math.floor(target.countCards('h')/2);
|
||||
var num=Math.ceil(target.countCards('h')/2);
|
||||
if(num>0) target.chooseToDiscard(num,true,'谏国:请弃置'+get.cnNumber(num)+'张手牌');
|
||||
},
|
||||
ai:{
|
||||
result:{
|
||||
target:function(player,target){
|
||||
return 1.1-Math.ceil(target.countCards('h')/2);
|
||||
return 1.1-Math.floor(target.countCards('h')/2);
|
||||
},
|
||||
},
|
||||
tag:{
|
||||
|
@ -2736,9 +2746,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
selectCard:-1,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.addTempSkill('dcjianguo_1','phaseUseAfter');
|
||||
target.chooseToDiscard('he',true,'谏国:请弃置一张牌');
|
||||
'step 1'
|
||||
var num=Math.floor(target.countCards('h')/2);
|
||||
var num=Math.ceil(target.countCards('h')/2);
|
||||
if(num>0) target.draw(num);
|
||||
},
|
||||
ai:{
|
||||
|
@ -2747,7 +2758,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var fix=0;
|
||||
var num=target.countCards('h');
|
||||
if(player==target&&num%2==1&&num>=5) fix+=1;
|
||||
return Math.floor(num/2-0.5)+fix;
|
||||
return Math.ceil(num/2-0.5)+fix;
|
||||
},
|
||||
},
|
||||
tag:{
|
||||
|
@ -2813,15 +2824,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
//甘糜
|
||||
dcchanjuan:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:'useCardAfter',
|
||||
init:function(player){
|
||||
if(!player.storage.dcchanjuan){
|
||||
player.storage.dcchanjuan={};
|
||||
}
|
||||
},
|
||||
audio:2,
|
||||
trigger:{player:'useCardAfter'},
|
||||
filter:function(event,player){
|
||||
if(event.targets.length!=1) return false;
|
||||
if(!['basic','trick'].includes(get.type(event.card,false))) return false;
|
||||
if(event.getParent(2).name=='dcchanjuan') return false;
|
||||
return !player.getStorage('dcchanjuan').includes(event.card.name);
|
||||
return !player.storage.dcchanjuan[event.card.name]||player.storage.dcchanjuan[event.card.name]<2;
|
||||
},
|
||||
direct:true,
|
||||
content:function(){
|
||||
|
@ -2834,17 +2848,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.chooseUseTarget(card,get.prompt('dcchanjuan'),false,false).set('prompt2','视为再使用一张'+get.translation(card)).set('logSkill','dcchanjuan');
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
player.markAuto('dcchanjuan',[trigger.card.name]);
|
||||
if(!player.storage.dcchanjuan[trigger.card.name]) player.storage.dcchanjuan[trigger.card.name]=0;
|
||||
player.storage.dcchanjuan[trigger.card.name]++;
|
||||
var list1=trigger.targets,list2=result.targets;
|
||||
if(list1.slice().removeArray(list2).length==0&&list2.slice().removeArray(list1).length==0) player.draw();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
threaten:2,
|
||||
},
|
||||
ai:{threaten:2},
|
||||
mark:true,
|
||||
intro:{
|
||||
content:'已记录牌名:$',
|
||||
}
|
||||
markcount:(storage)=>0,
|
||||
content:function(storage){
|
||||
var str='已使用牌名:',names=Object.keys(storage);
|
||||
if(!names.length) str+='无';
|
||||
else names.forEach(name=>{
|
||||
str+='<br><li>【';
|
||||
str+=get.translation(name);
|
||||
str+='】:';
|
||||
str+=storage[name]+'次';
|
||||
});
|
||||
return str;
|
||||
},
|
||||
},
|
||||
},
|
||||
dcxunbie:{
|
||||
audio:2,
|
||||
|
@ -3695,16 +3720,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
complexCard:true,
|
||||
selectCard:[1,4],
|
||||
position:'he',
|
||||
filterCard:function(card,player){
|
||||
var suit=get.suit(card);
|
||||
if(!lib.suit.includes(suit)) return false;
|
||||
if(ui.selected.cards.length){
|
||||
if(ui.selected.cards.some(i=>{
|
||||
return get.suit(i)==suit;
|
||||
})) return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
filterCard:true,
|
||||
check:function(card){
|
||||
var player=_status.event.player;
|
||||
var suit=get.suit(card);
|
||||
|
@ -3728,22 +3744,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
ai:{
|
||||
order:2,
|
||||
result:{
|
||||
player:function(player){
|
||||
var suits=lib.suit.filter(suit=>{
|
||||
return player.countCards('h',{suit:suit})>1;
|
||||
});
|
||||
var suits2=[],cards=player.getCards('h');
|
||||
for(var card of cards){
|
||||
var suitx=get.suit(card);
|
||||
if(suits2.includes(suitx)) continue;
|
||||
if(!player.hasCard(cardx=>cardx!=card&&get.suit(cardx)==suitx)&&get.value(card)<7.5||get.value(card)<6) suits2.add(suitx);
|
||||
}
|
||||
if(suits2.length<=suits.length) return 0;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
result:{player:1},
|
||||
},
|
||||
},
|
||||
dchuayi:{
|
||||
audio:2,
|
||||
|
@ -3761,16 +3763,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger:{global:'phaseEnd'},
|
||||
charlotte:true,
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
return event.player!=player;
|
||||
},
|
||||
content:function(){
|
||||
player.draw();
|
||||
},
|
||||
mark:true,
|
||||
intro:{
|
||||
name:'华衣·红',
|
||||
content:'其他角色的回合结束时,你摸一张牌'
|
||||
content:'一名角色的回合结束时,你摸一张牌'
|
||||
},
|
||||
},
|
||||
black:{
|
||||
|
@ -4324,10 +4323,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
trigger:{player:'phaseUseBegin'},
|
||||
filter:function(event,player){
|
||||
var card=lib.skill.dcshexue.getLast();
|
||||
return card&&player.hasUseTarget(card,false);
|
||||
var cards=lib.skill.dcshexue.getLast();
|
||||
return cards.some(card=>player.hasUseTarget(card,false));
|
||||
},
|
||||
getLast:function(){
|
||||
var cards=[];
|
||||
for(var current of game.filterPlayer()){
|
||||
var history=current.actionHistory;
|
||||
if(history.length<2) continue;
|
||||
|
@ -4337,18 +4337,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var evt=evts[i];
|
||||
if(get.type(evt.card)!='basic'&&get.type(evt.card)!='trick') continue;
|
||||
var evtx=evt.getParent('phaseUse');
|
||||
if(evtx&&evtx.player==current){
|
||||
return {name:evt.card.name,nature:evt.card.nature};
|
||||
}
|
||||
if(evtx&&evtx.player==current) cards.push({name:evt.card.name,nature:evt.card.nature});
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return cards;
|
||||
},
|
||||
direct:true,
|
||||
group:'dcshexue_end',
|
||||
content:function(){
|
||||
var card=lib.skill.dcshexue.getLast();
|
||||
'step 0'
|
||||
var cards=lib.skill.dcshexue.getLast();
|
||||
cards=cards.filter(card=>player.hasUseTarget(card,false));
|
||||
player.chooseButton(['设学:是否将一张牌当作其中一张牌使用?',[cards,'vards']]);
|
||||
'step 1'
|
||||
if(!result.bool) return;
|
||||
var card=result.links[0];
|
||||
game.broadcastAll(function(card){
|
||||
lib.skill.dcshexue_backup.viewAs=card;
|
||||
},card);
|
||||
|
@ -4384,11 +4388,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}).length;
|
||||
},
|
||||
prompt2:function(event,player){
|
||||
var history=player.getHistory('useCard',evt=>{
|
||||
return evt.getParent('phaseUse')==event&&(get.type(evt.card)=='basic'||get.type(evt.card)=='trick');
|
||||
});
|
||||
var card=history[history.length-1].card;
|
||||
return '令下一回合的角色于其出牌阶段开始时选择是否将一张牌当做'+(get.translation(card.nature)||'')+'【'+get.translation(card.name)+'】使用';
|
||||
return '令下一回合的角色于其出牌阶段开始时选择是否将一张牌当做你本阶段使用过的一张基本牌或普通锦囊牌使用?';
|
||||
},
|
||||
check:function(event,player){
|
||||
let evt=event.getParent('phase').getParent();
|
||||
|
@ -4402,11 +4402,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var history=player.getHistory('useCard',evt=>{
|
||||
return evt.getParent('phaseUse')==trigger&&(get.type(evt.card)=='basic'||get.type(evt.card)=='trick');
|
||||
});
|
||||
var card=history[history.length-1].card;
|
||||
card={name:card.name,nature:card.nature};
|
||||
player.addSkill('dcshexue_studyclear');
|
||||
if(!player.storage.dcshexue_studyclear) player.storage.dcshexue_studyclear=[];
|
||||
player.storage.dcshexue_studyclear.push(card);
|
||||
history.forEach(evt=>{
|
||||
var card=evt.card;
|
||||
card={name:card.name,nature:card.nature};
|
||||
player.storage.dcshexue_studyclear.push(card);
|
||||
});
|
||||
}
|
||||
},
|
||||
study:{
|
||||
|
@ -13895,7 +13897,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcquanshou:'劝守',
|
||||
dcquanshou_info:'一名角色的回合开始时,若其手牌数不大于其体力上限,你可以令其选择一项:1.将手牌摸至体力上限,然后本回合使用【杀】的次数上限-1(至多摸五张);2.其本回合使用牌被抵消后,你摸一张牌。',
|
||||
dcshexue:'设学',
|
||||
dcshexue_info:'①出牌阶段开始时,你可以将一张牌当做上回合的角色于其出牌阶段内使用的最后一张基本牌或普通锦囊牌使用。②出牌阶段结束时,你可以令下回合的角色于其出牌阶段开始时可以将一张牌当做你于此阶段内使用的最后一张基本牌或普通锦囊牌使用(一名角色因〖设学〗使用的牌均无距离和次数限制)。',
|
||||
dcshexue_info:'①出牌阶段开始时,你可以将一张牌当做上回合的角色于其出牌阶段内使用的一张基本牌或普通锦囊牌使用。②出牌阶段结束时,你可以令下回合的角色于其出牌阶段开始时可以将一张牌当做你于此阶段内使用的一张基本牌或普通锦囊牌使用(一名角色因〖设学〗使用的牌均无距离和次数限制)。',
|
||||
xizheng:'郤正',
|
||||
dcdanyi:'耽意',
|
||||
dcdanyi_info:'当你使用牌指定第一个目标后,你可以摸X张牌(X为此牌目标数与你使用的上一张牌相同的目标数)。',
|
||||
|
@ -13908,9 +13910,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcjijiao_info:'限定技。出牌阶段,你可以令一名角色获得所有弃牌堆中你于本局游戏内使用或弃置过的普通锦囊牌,且这些牌不能被【无懈可击】响应。一名角色的回合结束后,若本回合牌堆洗过牌或有角色死亡,你重置〖继椒〗。',
|
||||
duanqiaoxiao:'段巧笑',
|
||||
dccaizhuang:'彩妆',
|
||||
dccaizhuang_info:'出牌阶段限一次。你可以弃置任意张花色各不相同的牌。然后若你手牌中的花色数小于你以此法弃置的牌数,你摸一张牌并重复此流程。',
|
||||
dccaizhuang_info:'出牌阶段限一次。你可以弃置任意张牌。然后若你手牌中的花色数小于你以此法弃置的牌数,你摸一张牌并重复此流程。',
|
||||
dchuayi:'华衣',
|
||||
dchuayi_info:'结束阶段,你可以判定,然后你获得如下效果直到你下回合开始时:红色,其他角色回合结束时,你摸一张牌;黑色,当你受到伤害后,你摸两张牌。',
|
||||
dchuayi_info:'结束阶段,你可以判定,然后你获得如下效果直到你下回合开始时:红色,一名角色的回合结束时,你摸一张牌;黑色,当你受到伤害后,你摸两张牌。',
|
||||
wu_zhugeliang:'武诸葛亮',
|
||||
wu_zhugeliang_prefix:'武',
|
||||
dcjincui:'尽瘁',
|
||||
|
@ -13927,8 +13929,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcjiudun:'酒遁',
|
||||
dcjiudun_info:'①以你为目标的【酒】(使用方法①)的作用效果改为“目标对应的角色使用的下一张【杀】的伤害基数+1”。②当你成为其他角色使用黑色牌的目标后,若你:未处于【酒】状态,你可以摸一张牌并视为使用一张【酒】;处于【酒】状态,你可以弃置一张手牌令此牌对你无效。',
|
||||
ganfurenmifuren:'甘夫人糜夫人',
|
||||
dcchanjuan:'婵娟',
|
||||
dcchanjuan_info:'每种牌名限一次。当你使用仅指定单一目标的【杀】或普通锦囊牌结算结束后,你可以视为使用一张名称和属性均相同的牌。若这两张牌指定的目标完全相同,你摸一张牌。',
|
||||
dcchanjuan:'双姝',
|
||||
dcchanjuan_info:'每种牌名限两次。当你使用仅指定单一目标的【杀】或普通锦囊牌结算结束后,你可以视为使用一张名称和属性均相同的牌。若这两张牌指定的目标完全相同,你摸一张牌。',
|
||||
dcxunbie:'殉别',
|
||||
dcxunbie_info:'限定技。当你进入濒死状态时,你可以将此武将牌替换为“甘夫人”或“糜夫人”(不能选择已在场上的武将)。然后回复至1点体力并防止所有伤害直到当前回合结束。',
|
||||
dc_mifuren:'糜夫人',
|
||||
|
@ -13945,7 +13947,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcshenzhi_info:'准备阶段,若你的手牌数大于体力值,你可以弃置一张手牌,然后回复1点体力。',
|
||||
dc_duyu:'杜预',
|
||||
dcjianguo:'谏国',
|
||||
dcjianguo_info:'出牌阶段限一次。你可以选择一名角色并选择一项:1.令其摸一张牌,然后其弃置一半的手牌;2.令其弃置一张牌,然后其摸等同于手牌数一半的牌(均向下取整)。',
|
||||
dcjianguo_info:'出牌阶段各限一次。你可以选择一名角色并选择一项:1.令其摸一张牌,然后其弃置一半的手牌;2.令其弃置一张牌,然后其摸等同于手牌数一半的牌(均向上取整)。',
|
||||
dcdyqingshi:'倾势',
|
||||
dcdyqingshi_info:'当你于回合内使用【杀】或普通锦囊牌指定第一个目标后,若目标角色包括其他角色且此牌为你本回合使用的第X张牌,你可以对其中一名不为你的目标角色造成1点伤害(X为你的手牌数)。',
|
||||
sunlingluan:'孙翎鸾',
|
||||
|
|
Loading…
Reference in New Issue