commit
147e445d7f
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -189,9 +189,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(get.event().dying) return get.attitude(player, get.event().dying);
|
||||
if(get.event().type!='phase') return 1;
|
||||
const names=get.event(`clanshengmo_${player.playerid}_enabled_names`);
|
||||
return names.some(name=>{
|
||||
return player.getUseValue({name})>0;
|
||||
});
|
||||
if(Array.isArray(names)){
|
||||
return names.some(name=>{
|
||||
return player.getUseValue({name})>0;
|
||||
});
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -735,6 +738,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content(){
|
||||
'step 0'
|
||||
player.unmarkSkill('clanyuzhi');
|
||||
if(player.countCards('h',card=>{
|
||||
return card.hasGaintag('clanyuzhi')&&lib.filter.cardDiscardable(card,player);
|
||||
})){
|
||||
event.logged=true;
|
||||
player.chooseToDiscard(player.countCards('h'),'h',(card,player)=>{
|
||||
return card.hasGaintag('clanyuzhi');
|
||||
},true).logSkill='clanyuzhi';
|
||||
}
|
||||
'step 1'
|
||||
player.removeGaintag('clanyuzhi');
|
||||
var num1=player.getRoundHistory('gain',evt=>{
|
||||
return evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi';
|
||||
},1).reduce((sum,evt)=>sum+evt.cards.length,0);
|
||||
|
@ -746,32 +759,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},1).reduce((sum,evt)=>sum+evt.cards.length,0);
|
||||
event.num1=num1;
|
||||
if(num1>0&&(num2>0&&num1>num2)||num1>num3){
|
||||
player.logSkill('clanyuzhi');
|
||||
if(!event.logged) 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'));
|
||||
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'
|
||||
else event.goto(3);
|
||||
'step 2'
|
||||
if(result.bool){
|
||||
player.removeSkills('clanbaozu');
|
||||
}
|
||||
else player.loseHp();
|
||||
'step 2'
|
||||
if(!player.countCards('h')) event.finish();
|
||||
else player.damage(1,'thunder');
|
||||
'step 3'
|
||||
player.chooseCard('迂志:请展示一张手牌','摸此牌牌名字数的牌。下一轮开始时,若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数,则你失去1点体力。',function(card,player){
|
||||
var num=get.cardNameLength(card);
|
||||
return typeof num=='number'&&num>0;
|
||||
},true).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);
|
||||
if(player.countCards('h')){
|
||||
player.chooseCard('迂志:请展示一张手牌','摸此牌牌名字数的牌。下一轮开始时弃置此牌,若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数,则你受到1点雷属性伤害或失去〖保族〗。',function(card,player){
|
||||
var num=get.cardNameLength(card);
|
||||
return typeof num=='number'&&num>0;
|
||||
},true).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);
|
||||
}
|
||||
else event.finish();
|
||||
'step 4'
|
||||
if(result.bool){
|
||||
player.logSkill('clanyuzhi');
|
||||
player.showCards(result.cards,get.translation(player)+'发动了【迂志】');
|
||||
player.addGaintag(result.cards,'clanyuzhi');
|
||||
player.draw(get.cardNameLength(result.cards[0]));
|
||||
player.storage.clanyuzhi=get.cardNameLength(result.cards[0]);
|
||||
player.markSkill('clanyuzhi');
|
||||
|
@ -788,34 +803,44 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
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;
|
||||
if(!event.card||player.isLinked()) return false;
|
||||
var num=get.cardNameLength(event.card);
|
||||
return typeof num=='number'&&num>0&&player.countCards('he')>0;
|
||||
},
|
||||
direct:true,
|
||||
content(){
|
||||
'step 0'
|
||||
async content(event,trigger,player){
|
||||
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){
|
||||
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(!num2) return 0;
|
||||
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());
|
||||
}
|
||||
}).set('num',num).set('logSkill','clanxieshu').forResult();
|
||||
},
|
||||
popup:false,
|
||||
content(){
|
||||
player.link(true);
|
||||
if(player.getDamagedHp()>0) player.draw(player.getDamagedHp());
|
||||
},
|
||||
ai:{threaten:3},
|
||||
group:'clanxieshu_ban',
|
||||
subSkill:{
|
||||
ban:{
|
||||
audio:'clanxieshu',
|
||||
trigger:{global:'dyingAfter'},
|
||||
filter(event,player){
|
||||
return !player.isTempBanned('clanxieshu');
|
||||
},
|
||||
forced:true,
|
||||
locked:false,
|
||||
content(){
|
||||
player.tempBanSkill('clanxieshu');
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//族王浑
|
||||
clanfuxun:{
|
||||
|
@ -3104,9 +3129,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
clanchenya_info:'当一名角色发动“出牌阶段限一次”的技能后,你可以令其重铸任意张牌名字数为X的牌(X为其手牌数)。',
|
||||
clan_zhonghui:'族钟会',
|
||||
clanyuzhi:'迂志',
|
||||
clanyuzhi_info:'锁定技。新的一轮开始时,你依次执行以下项:①若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数,你失去1点体力或失去〖保族〗。②你展示一张手牌,然后摸X张牌(X为此牌牌名字数)。',
|
||||
clanyuzhi_info:'锁定技。新的一轮开始时,你依次执行以下项:①你弃置上一轮因〖迂志〗展示的手牌,然后若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数,你受到1点雷属性伤害或失去〖保族〗。②你展示一张手牌,然后摸X张牌(X为此牌牌名字数)。',
|
||||
clanxieshu:'挟术',
|
||||
clanxieshu_info:'当你每回合首次因牌造成或受到伤害后,你可以弃置Y张牌并摸你已损失体力值张牌(Y为此牌牌名字数)。',
|
||||
clanxieshu_info:'①当你因牌造成或受到伤害后,你可以横置武将牌并弃置Y张牌,然后摸你已损失体力值张牌(Y为此牌牌名字数)。②一名角色的濒死状态结算完毕后,你令〖挟术〗于本回合失效。',
|
||||
clan_zhongyu:'族钟毓',
|
||||
clanjiejian:'捷谏',
|
||||
clanjiejian_info:'当你于一回合使用第X张牌指定第一个目标后,若此牌不为装备牌,则你可以令一名目标角色摸X张牌。(X为此牌牌名字数)',
|
||||
|
|
|
@ -718,6 +718,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
subSkill:{
|
||||
global:{
|
||||
audio:'dcshiju',
|
||||
forceaudio:true,
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
filter(event,player){
|
||||
|
@ -12029,6 +12030,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
const num=draws.indexOf(control)+1,max=Math.min(num,player.countCards('he'),game.countPlayer(target=>target!=player));
|
||||
await player.draw(num);
|
||||
let list=[];
|
||||
if(_status.connectMode) game.broadcastAll(()=>_status.noclearcountdown=true);
|
||||
while(max-list.length>0){
|
||||
const {result:{bool,cards,targets}}=await player.chooseCardTarget({
|
||||
prompt:'粮营:将'+get.cnNumber(max-1)+'至'+get.cnNumber(max)+'张牌交给其他角色',
|
||||
|
@ -12054,6 +12056,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
else break;
|
||||
}
|
||||
if(_status.connectMode){
|
||||
game.broadcastAll(()=>{
|
||||
delete _status.noclearcountdown;
|
||||
game.stopCountChoose();
|
||||
});
|
||||
}
|
||||
if(list.length){
|
||||
await game.loseAsync({
|
||||
gain_list:list,
|
||||
|
|
|
@ -15,10 +15,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
offline_piracyS:['ns_jiaxu','longyufei','ps_guanyu','ps1059_guojia','ps2070_guojia','ps2063_zhaoyun','ps2067_zhaoyun','ps1062_zhouyu','ps2080_zhouyu','ps_caozhi','ps_jin_simayi','ps_caopi','ps_simayi','ps2068_simayi','ps_machao','ps_zhugeliang','ps2066_zhugeliang','ps_jiaxu','ps_lvbu','ps_shen_machao','jsp_liubei'],
|
||||
offline_piracyK:['pk_sp_duyu'],
|
||||
offline_vtuber:['vtb_xiaosha','vtb_xiaoshan','vtb_xiaotao','vtb_xiaole','vtb_xiaojiu'],
|
||||
offline_longyutao:['drag_guanyu','drag_caoren','drag_lvchang'],
|
||||
//offline_others:[""],
|
||||
},
|
||||
},
|
||||
character:{
|
||||
drag_guanyu:['male','shu',4,['dragchaojue','dragjunshen']],
|
||||
drag_caoren:['male','wei',4,['draglizhong','dragjuesui']],
|
||||
drag_lvchang:['male','wei',3,['dragjuwu','dragshouxiang']],
|
||||
jsp_ganfuren:['female','shu',3,['shushen','shenzhi'],['character:gz_ganfuren']],
|
||||
ol_xinxianying:['female','wei',3,['xincaishi','xinzhongjian']],
|
||||
zhangliang:["male","qun",4,["old_jijun","old_fangtong"]],
|
||||
|
@ -94,6 +98,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
jsp_liubei:['male','qun',4,['jsprende']],
|
||||
},
|
||||
characterIntro:{
|
||||
lvchang:'吕常(161—221年),荆州南阳博望(今河南省南阳市方城县博望镇)人,汉末至三国时期曹魏将领。吕常曾担任曹魏横海将军、章陵太守,为武猛都尉厉节中郎将裨将军,封关内侯。常以中勇,显名州司,试守雉长,执戈秉戎,慎守易,兵不顿于敌国,坠不侵于四邻,拜武猛都尉厉节中郎将裨将军,封关内侯。王师南征,与充军从,奄有江汉,舍爵册勋,封阴德亭侯,领郡。鸠集荒散,为民统纪,三考有成,转拜平狄将军,改封卢亭侯,莅国赋政,十有三年。会蜀将关羽猖獗为寇,常御之,羽不能克。文帝加其庸,转拜横海将军,徙封西鄂都乡侯,食邑并七百户。年六十一,黄初二年正月卒。',
|
||||
huangjinleishi:"黄巾军中负责施法的女祭司二人组。",
|
||||
longyufei:'《三国杀·阵面对决》中的虚构角色,设定是由刘备之女夏侯岚、关羽之女关银屏、张飞之女张星彩三人在与吕布之魔魂战斗时,释放雅典娜的惊叹而召唤出来的精元化神。',
|
||||
pk_sp_duyu:'杜预(222年-285年),字元凯,京兆郡杜陵县(今陕西西安)人,中国魏晋时期军事家、经学家、律学家,曹魏散骑常侍杜恕之子。杜预初仕曹魏,任尚书郎,后成为权臣司马昭的幕僚,封丰乐亭侯。西晋建立后,历任河南尹、安西军司、秦州刺史、度支尚书等职。咸宁四年(278年)接替羊祜出任镇南大将军,镇守荆州。他积极备战,支持晋武帝司马炎对孙吴作战,并在咸宁五年(279年)成为晋灭吴之战的统帅之一。战后因功进封当阳县侯,仍镇荆州。太康五年(285年),杜预被征入朝,拜司隶校尉,途中于邓县逝世,终年六十三岁。获赠征南大将军、开府仪同三司,谥号为成。杜预耽思经籍,博学多通,多有建树,时誉为“杜武库”。著有《春秋左氏传集解》及《春秋释例》等。为明朝之前唯一一个同时进入文庙和武庙之人。',
|
||||
|
@ -149,6 +154,471 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
characterFilter:{
|
||||
},
|
||||
skill:{
|
||||
//龙起襄樊
|
||||
//关羽
|
||||
//界界关羽
|
||||
dragchaojue:{
|
||||
trigger:{player:'phaseZhunbeiBegin'},
|
||||
filter(event,player){
|
||||
if(!game.hasPlayer(target=>target!=player)) return false;
|
||||
return player.countCards('h',card=>_status.connectMode||lib.filter.cardDiscardable(card,player));
|
||||
},
|
||||
async cost(event,trigger,player){
|
||||
event.result=await player.chooseToDiscard(get.prompt2('dragchaojue'),'h').set('ai',card=>{
|
||||
const player=get.event('player');
|
||||
if(!game.hasPlayer(target=>get.attitude(player,target)<0)) return 0;
|
||||
return 7.5-get.value(card);
|
||||
}).set('logSkill','dragchaojue').forResult();
|
||||
},
|
||||
popup:false,
|
||||
async content(event,trigger,player){
|
||||
const targets=game.filterPlayer(target=>target!=player).sortBySeat();
|
||||
if(targets.length){
|
||||
const suits=event.cards.reduce((list,card)=>list.add(get.suit(card,player)),[]).sort((a,b)=>{
|
||||
return lib.suit.indexOf(a)-lib.suit.indexOf(b);
|
||||
});
|
||||
player.line(targets);
|
||||
for(const i of targets){
|
||||
i.addTempSkill('dragchaojue_buff');
|
||||
i.markAuto('dragchaojue_buff',suits);
|
||||
}
|
||||
for(const target of targets){
|
||||
const {result:{bool}}=await target.chooseToGive(player,(card,player)=>{
|
||||
return get.event('suits').includes(get.suit(card));
|
||||
},'h','give').set('suits',suits).set('ai',card=>{
|
||||
const player=get.event('player'),target=get.event().getParent().player;
|
||||
const att=get.attitude(player,target);
|
||||
if(att>0) return 7.5-get.value(card);
|
||||
if(att==0&&get.attitude(target,player)==0) return 0;
|
||||
if(att<0&&get.attitude(target,player)<0&&player.getSkills(null,false,false).some(skill=>{
|
||||
if(get.is.locked(skill,player)) return false;
|
||||
const info=get.info(skill);
|
||||
return info&&info.ai&&(info.ai.maixie||info.ai.maixie_hp||info.ai.maixie_defend);
|
||||
})&&player.getHp()>2) return 0;
|
||||
return 7.5-get.value(card);
|
||||
}).set('prompt','超绝:交给'+get.translation(player)+'一张'+get.translation(suits)+'手牌,或本回合非锁定技失效');
|
||||
if(!bool) target.addTempSkill('fengyin');
|
||||
}
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
buff:{
|
||||
onremove:true,
|
||||
charlotte:true,
|
||||
mod:{
|
||||
cardEnabled2(card,player){
|
||||
if(player.getStorage('jsrgguanjue_ban').includes(get.suit(card))) return false;
|
||||
},
|
||||
},
|
||||
marktext:'绝',
|
||||
intro:{content:'本回合内不能使用或打出$牌'},
|
||||
},
|
||||
},
|
||||
},
|
||||
dragjunshen:{
|
||||
mod:{
|
||||
targetInRange(card,player){
|
||||
if(get.suit(card)=='diamond'&&card.name=='sha') return true;
|
||||
},
|
||||
},
|
||||
locked:false,
|
||||
enable:['chooseToUse','chooseToRespond'],
|
||||
filterCard(card,player){
|
||||
return get.color(card)=='red';
|
||||
},
|
||||
viewAsFilter(player){
|
||||
return player.countCards('hes',{color:'red'});
|
||||
},
|
||||
position:'hes',
|
||||
viewAs:{name:'sha'},
|
||||
prompt:'将一张红色牌当作【杀】使用或打出',
|
||||
check(card){
|
||||
const val=get.value(card);
|
||||
if(_status.event.name=='chooseToRespond') return 1/Math.max(0.1,val);
|
||||
return 5-val;
|
||||
},
|
||||
ai:{
|
||||
order(item,player){
|
||||
if(!player||!_status.event.type||_status.event.type!='phase'){
|
||||
return 0.1;
|
||||
}
|
||||
return get.order({name:'sha'},player)+0.3;
|
||||
},
|
||||
respondSha:true,
|
||||
skillTagFilter(player){
|
||||
if(!player.countCards('hes',{color:'red'})) return false;
|
||||
},
|
||||
},
|
||||
group:['dragjunshen_add','dragjunshen_damage'],
|
||||
subSkill:{
|
||||
add:{
|
||||
trigger:{player:'useCard2'},
|
||||
filter(event,player){
|
||||
if(event.card.name!='sha'||get.suit(event.card)!='heart') return false;
|
||||
return game.hasPlayer(target=>{
|
||||
return target!=player&&!event.targets.includes(target)&&lib.filter.targetEnabled2(event.card,player,target)&&lib.filter.targetInRange(event.card,player,target);
|
||||
});
|
||||
},
|
||||
async cost(event,trigger,player){
|
||||
event.result=await player.chooseTarget(get.prompt('dragjunshen_add'),'为'+get.translation(trigger.card)+'额外指定一个目标',(card,player,target)=>{
|
||||
const evt=get.event().getTrigger();
|
||||
return target!=player&&!evt.targets.includes(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
|
||||
}).set('ai',target=>get.effect(target,_status.event.getTrigger().card,_status.event.player)).forResult();
|
||||
},
|
||||
content(){
|
||||
trigger.targets.addArray(event.targets);
|
||||
},
|
||||
},
|
||||
damage:{
|
||||
trigger:{source:'damageBegin1'},
|
||||
filter(event,player){
|
||||
const evt=event.getParent(2);
|
||||
return evt.name=='useCard'&&evt.skill=='dragjunshen';
|
||||
},
|
||||
logTarget:'player',
|
||||
prompt2(event,player){
|
||||
return '令'+get.translation(event.player)+'选择弃置装备区所有牌或令此伤害+1';
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const target=trigger.player;
|
||||
let result;
|
||||
if(!target.countDiscardableCards(target,'e')) result={index:1};
|
||||
else result=await target.chooseControl().set('choiceList',[
|
||||
'弃置装备区所有牌',
|
||||
'令此伤害+1',
|
||||
]).set('ai',()=>{
|
||||
const player=get.event('player'),trigger=get.event().getTrigger();
|
||||
if(player.getHp()<=2||player.getDiscardableCards(player,'e').reduce((sum,card)=>{
|
||||
return sum+get.value(card,player);
|
||||
},0)<7) return 0;
|
||||
return 1;
|
||||
}).forResult();
|
||||
if(result.index==0){
|
||||
await target.discard(target.getDiscardableCards(target,'e'));
|
||||
}
|
||||
else trigger.increase('num');
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//龙曹仁
|
||||
draglizhong:{
|
||||
trigger:{player:'phaseJieshuBegin'},
|
||||
async cost(event,trigger,player){
|
||||
let choiceList=[
|
||||
'将任意张装备牌至于任意名角色的装备区',
|
||||
'令你或任意名装备区里有牌的角色摸一张牌',
|
||||
],choices=['置入装备','团体摸牌','cancel2'];
|
||||
if(!player.countCards('he',card=>{
|
||||
if(get.type(card)!='equip') return false;
|
||||
return game.hasPlayer(target=>{
|
||||
return target.canEquip(card);
|
||||
})
|
||||
})){
|
||||
choices.shift();
|
||||
choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'</span>';
|
||||
}
|
||||
const {result:{control}}=await player.chooseControl(choices)
|
||||
.set('prompt','###'+get.prompt('draglizhong')+'###选择首先执行的一项')
|
||||
.set('choiceList',choiceList).set('ai',()=>{
|
||||
return get.event('controls')[0];
|
||||
});
|
||||
event.result={bool:(control!='cancel2'),cost_data:control};
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
let choices=['置入装备','团体摸牌'],used=false;
|
||||
if(event.cost_data=='团体摸牌') choices.reverse();
|
||||
choices.push(event.cost_data);
|
||||
for(let i=1;i<=3;i++){
|
||||
if(i==3&&used) break;
|
||||
switch(choices[i-1]){
|
||||
case '置入装备':
|
||||
while(player.hasCard(card=>{
|
||||
if(get.type(card)!='equip') return false;
|
||||
return game.hasPlayer(target=>{
|
||||
return target.canEquip(card);
|
||||
})
|
||||
},'he')){
|
||||
const {result:{bool,cards,targets}}=await player.chooseCardTarget({
|
||||
prompt:'厉战:将一张装备牌置于一名角色的装备区',
|
||||
filterCard(card){
|
||||
return get.type(card)=='equip';
|
||||
},
|
||||
position:'he',
|
||||
filterTarget(card,player,target){
|
||||
return target.canEquip(card);
|
||||
},
|
||||
ai1(card){
|
||||
return 6-get.value(card);
|
||||
},
|
||||
ai2(target){
|
||||
const player=get.event('player');
|
||||
const att=get.attitude(player,target);
|
||||
if(att<=0||target.countCards('e')) return 0;
|
||||
return att*(target==player?1:3);
|
||||
},
|
||||
});
|
||||
if(bool){
|
||||
if(i==1&&!used) used=true;
|
||||
const card=cards[0],target=targets[0];
|
||||
player.line(target);
|
||||
if(target!=player){
|
||||
player.$give(card,target,false);
|
||||
}
|
||||
await game.asyncDelay(0.5);
|
||||
await target.equip(card);
|
||||
}
|
||||
else break;
|
||||
}
|
||||
break;
|
||||
case '团体摸牌':
|
||||
const {result}=await player.chooseTarget('厉战:令你或任意名装备区有牌的角色摸一张牌',(card,player,target)=>{
|
||||
if(target!=player&&!target.countCards('e')) return false;
|
||||
if(ui.selected.targets.length){
|
||||
const choose=ui.selected.targets[0];
|
||||
if(choose==player&&!player.countCards('e')) return false;
|
||||
}
|
||||
return true;
|
||||
},[1,Infinity]).set('multitarget',true).set('complexTarget',true).set('ai',target=>{
|
||||
const player=get.event('player');
|
||||
if(!player.countCards('e')){
|
||||
if(game.countPlayer(choose=>{
|
||||
return choose.countCards('e')&&get.attitude(player,choose)>0;
|
||||
})>1&&target==player) return 0;
|
||||
}
|
||||
return get.attitude(player,target);
|
||||
});
|
||||
if(result.bool){
|
||||
if(i==1&&!used) used=true;
|
||||
const targets=result.targets.sortBySeat();
|
||||
player.line(targets);
|
||||
choices.addArray(targets);
|
||||
for(let j=0;j<targets.length;j++){
|
||||
await targets[j].draw('nodelay');
|
||||
}
|
||||
await game.asyncDelayx();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
choices=choices.slice(3);
|
||||
if(choices.length){
|
||||
choices.sortBySeat();
|
||||
player.line(choices);
|
||||
for(const target of choices){
|
||||
target.addTempSkill('draglizhong_effect','roundStart');
|
||||
}
|
||||
await game.asyncDelayx();
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
effect:{
|
||||
charlotte:true,
|
||||
mod:{
|
||||
maxHandcard(player,num){
|
||||
return num+2;
|
||||
},
|
||||
},
|
||||
enable:'chooseToUse',
|
||||
filterCard:true,
|
||||
position:'e',
|
||||
viewAs:{name:'wuxie'},
|
||||
filter(event,player){
|
||||
return player.countCards('e')>0;
|
||||
},
|
||||
viewAsFilter(player){
|
||||
return player.countCards('e')>0;
|
||||
},
|
||||
prompt:'将一张装备区的牌当作【无懈可击】使用',
|
||||
check(card){
|
||||
return 8-get.equipValue(card);
|
||||
},
|
||||
mark:true,
|
||||
marktext:'守',
|
||||
intro:{content:'手牌上限+2,可将装备区的牌当作【无懈可击】使用'},
|
||||
},
|
||||
},
|
||||
},
|
||||
//撅碎(难视
|
||||
dragjuesui:{
|
||||
trigger:{global:'dying'},
|
||||
filter(event,player){
|
||||
return !player.getStorage('dragjuesui').includes(event.player)&&event.player.hasEnabledSlot();
|
||||
},
|
||||
check(event,player){
|
||||
const target=event.player;
|
||||
if(get.attitude(player,target)<=0) return false;
|
||||
return player.countCards('hs',card=>player.canSaveCard(card,target))+target.countCards('hs',card=>target.canSaveCard(card,target))<1-target.hp;
|
||||
},
|
||||
logTarget:'player',
|
||||
async content(event,trigger,player){
|
||||
const target=trigger.player;
|
||||
player.markAuto('dragjuesui',[target]);
|
||||
const {result:{bool}}=await target.chooseBool('是否将体力值回复至1点并废除装备栏?');
|
||||
if(bool){
|
||||
await target.recoverTo(1);
|
||||
let disables=[];
|
||||
for(let i=1;i<=5;i++){
|
||||
for(let j=0;j<target.countEnabledSlot(i);j++){
|
||||
disables.push(i);
|
||||
}
|
||||
}
|
||||
if(disables.length) await target.disableEquip(disables);
|
||||
target.addSkill('dragjuesui_wusheng');
|
||||
}
|
||||
else{
|
||||
target.chat('拒绝!');
|
||||
}
|
||||
},
|
||||
init(player){
|
||||
if(player.getStorage('dragjuesui').length){
|
||||
player.markSkill('dragjuesui');
|
||||
}
|
||||
},
|
||||
intro:{content:'已对$发动过此技能'},
|
||||
subSkill:{
|
||||
wusheng:{
|
||||
charlotte:true,
|
||||
mark:true,
|
||||
marktext:'碎',
|
||||
intro:{content:'殊死一搏!可将黑色非基本牌当作无次数限制的【杀】使用'},
|
||||
mod:{
|
||||
cardUsable(card,player,num){
|
||||
if(card.storage&&card.storage.dragjuesui) return Infinity;
|
||||
},
|
||||
},
|
||||
enable:['chooseToUse','chooseToRespond'],
|
||||
filterCard(card,player){
|
||||
return get.color(card)=='black'&&get.type(card)!='basic';
|
||||
},
|
||||
position:'hse',
|
||||
viewAs:{name:'sha',storage:{dragjuesui:true}},
|
||||
viewAsFilter(player){
|
||||
if(!player.countCards('hes',card=>{
|
||||
return get.color(card)=='black'&&get.type(card)!='basic';
|
||||
})) return false;
|
||||
},
|
||||
prompt:'将一张黑色非基本牌当作无次数限制的【杀】使用或打出',
|
||||
check(card){
|
||||
return 7-get.value(card);
|
||||
},
|
||||
ai:{
|
||||
order(item,player){
|
||||
if(!player||!_status.event.type||_status.event.type!='phase'){
|
||||
return 0.1;
|
||||
}
|
||||
return get.order({name:'sha'},player)*0.99;
|
||||
},
|
||||
respondSha:true,
|
||||
skillTagFilter(player){
|
||||
if(!player.countCards('hes',card=>{
|
||||
return get.color(card)=='black'&&get.type(card)!='basic';
|
||||
})) return false;
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//吕常×SP淳于琼√
|
||||
dragjuwu:{
|
||||
trigger:{target:'shaBefore'},
|
||||
filter(event,player){
|
||||
return game.countPlayer(target=>event.player.inRange(target))>=3;
|
||||
},
|
||||
forced:true,
|
||||
content(){
|
||||
trigger.cancel();
|
||||
},
|
||||
ai:{
|
||||
effect:{
|
||||
target(card,player,target){
|
||||
if(card.name=='sha'&&game.countPlayer(targetx=>player.inRange(targetx))>=3) return 'zerotarget';
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
dragshouxiang:{
|
||||
trigger:{player:'phaseDrawBegin2'},
|
||||
filter(event,player){
|
||||
if(!game.hasPlayer(target=>target.inRange(player))) return false;
|
||||
return !event.numFixed;
|
||||
},
|
||||
check(event,player){
|
||||
if(player.skipList.includes('phaseUse')) return true;
|
||||
return player.countCards('h')+event.num+Math.min(5,game.countPlayer(target=>{
|
||||
return target.inRange(player);
|
||||
}))-game.countPlayer(target=>{
|
||||
return target!=player&&get.attitude(player,target)>0;
|
||||
})<=player.getHandcardLimit();
|
||||
},
|
||||
content(){
|
||||
trigger.num+=Math.min(5,game.countPlayer(target=>target.inRange(player)));
|
||||
player.skip('phaseUse');
|
||||
player.addTempSkill('dragshouxiang_effect');
|
||||
},
|
||||
subSkill:{
|
||||
effect:{
|
||||
charlotte:true,
|
||||
trigger:{player:'phaseDiscardBegin'},
|
||||
filter(event,player){
|
||||
return game.hasPlayer(target=>target.inRange(player));
|
||||
},
|
||||
forced:true,
|
||||
async content(event,trigger,player){
|
||||
const num=Math.min(5,game.countPlayer(target=>target.inRange(player)));
|
||||
if(num){
|
||||
if(_status.connectMode) game.broadcastAll(()=>_status.noclearcountdown=true);
|
||||
let list=[];
|
||||
while(num-list.length>0&&player.hasCard(card=>{
|
||||
return !list.some(list=>list[1]==card);
|
||||
},'h')&&game.hasPlayer(target=>{
|
||||
return target!=player&&!list.some(list=>list[0]==target);
|
||||
})){
|
||||
const {result:{bool,targets,cards}}=await player.chooseCardTarget({
|
||||
prompt:'守襄:你可以交给任意名角色各一张手牌',
|
||||
prompt2:'(还可分配'+(num-list.length)+'张)',
|
||||
position:'h',
|
||||
animate:false,
|
||||
filterCard(card,player){
|
||||
return !get.event('list').some(list=>list[1]==card);
|
||||
},
|
||||
filterTarget(card,player,target){
|
||||
return target!=player&&!get.event('list').some(list=>list[0]==target);
|
||||
},
|
||||
ai1(card){
|
||||
if(card.name=='shan') return 1;
|
||||
return Math.random();
|
||||
},
|
||||
ai2(target){
|
||||
return get.attitude(get.event('player'),target);
|
||||
},
|
||||
}).set('list',list);
|
||||
if(bool){
|
||||
list.push([targets[0],cards[0]]);
|
||||
player.addGaintag(cards,'olsujian_given');
|
||||
}
|
||||
else break;
|
||||
}
|
||||
if(_status.connectMode){
|
||||
game.broadcastAll(()=>{
|
||||
delete _status.noclearcountdown;
|
||||
game.stopCountChoose();
|
||||
});
|
||||
}
|
||||
if(list.length){
|
||||
await game.loseAsync({
|
||||
gain_list:list,
|
||||
player:player,
|
||||
cards:list.slice().map(list=>list[1]),
|
||||
giver:player,
|
||||
animate:'giveAuto',
|
||||
}).setContent('gaincardMultiple');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//天书乱斗虚拟偶像线下化
|
||||
//小杀
|
||||
vtbguisha:{
|
||||
|
@ -6808,6 +7278,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
kongrong_prefix:'战役篇',
|
||||
mateng:'战役篇马腾',
|
||||
mateng_prefix:'战役篇',
|
||||
drag_guanyu:'龙关羽',
|
||||
drag_guanyu_prefix:'龙',
|
||||
drag_caoren:'龙曹仁',
|
||||
drag_caoren_prefix:'龙',
|
||||
drag_lvchang:'龙吕常',
|
||||
drag_lvchang_prefix:'龙',
|
||||
dragchaojue:'超绝',
|
||||
dragchaojue_info:'准备阶段,你可以弃置一张手牌,然后令所有其他角色本回合不能使用或打出此花色的牌,然后这些角色依次选择一项:①正面朝上交给你一张牌;②本回合非锁定技失效。',
|
||||
dragjunshen:'军神',
|
||||
dragjunshen_info:'①你可以将一张红色牌当作【杀】使用或打出。②当你使用〖军神①〗转化的【杀】造成伤害时,你可以令受伤角色选择弃置装备区的所有牌或令此伤害+1。③你使用方片【杀】无距离限制,使用红桃【杀】可以额外选择一个目标。',
|
||||
draglizhong:'厉众',
|
||||
draglizhong_info:'结束阶段,你可以以任意顺序选择执行任意项:①将任意张装备牌置入任意名角色的装备区;②令你或任意名装备区里有牌的角色各摸一张牌。然后本次成为〖厉众②〗的角色于本轮手牌上限+2且可以将装备区的牌当作【无懈可击】使用。',
|
||||
dragjuesui:'玦碎',
|
||||
dragjuesui_info:'每名角色限一次,一名角色进入濒死状态时,你可以令其选择是否将体力值回复至1点并废除装备栏。若其选择是,则其本局游戏获得以下效果:你可以将一张黑色非基本牌当作无次数限制的【杀】使用或打出。',
|
||||
dragjuwu:'拒武',
|
||||
dragjuwu_info:'锁定技,攻击范围内至少包含三名角色的角色使用的无属性【杀】对你无效。',
|
||||
dragshouxiang:'守襄',
|
||||
dragshouxiang_info:'摸牌阶段,你可以额外摸X张牌。若如此做,你跳过出牌阶段,且本回合的弃牌阶段开始时,你可以交给至多X名角色各一张手牌。(X为攻击范围内包含你的角色)',
|
||||
|
||||
offline_star:'桌游志·SP',
|
||||
offline_sticker:'桌游志·贴纸',
|
||||
|
@ -6821,6 +7309,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
offline_vtuber:'天书乱斗·虚拟偶像',
|
||||
offline_piracyK:'官盗K系列',
|
||||
offline_others:'线下其他系列',
|
||||
offline_longyutao:'龙起襄樊',
|
||||
},
|
||||
};
|
||||
});
|
||||
|
|
|
@ -377,6 +377,9 @@ window.noname_character_rank={
|
|||
'huzun',
|
||||
'star_zhangchunhua',
|
||||
'mb_caomao',
|
||||
'drag_guanyu',
|
||||
'drag_caoren',
|
||||
'drag_lvchang',
|
||||
],
|
||||
am:[
|
||||
'tw_yanliang',
|
||||
|
@ -2193,8 +2196,11 @@ window.noname_character_rank={
|
|||
'mb_caomao',
|
||||
'dc_shen_huatuo',
|
||||
'sp_zhenji',
|
||||
'drag_guanyu',
|
||||
'drag_caoren',
|
||||
],
|
||||
rare:[
|
||||
'drag_lvchang',
|
||||
're_wangyi',
|
||||
'ol_wangyi',
|
||||
'tw_yanliang',
|
||||
|
|
|
@ -27787,7 +27787,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
olxiaofan:'嚣翻',
|
||||
olxiaofan_info:'当你需要使用不为【无懈可击】的牌时,你可以观看牌堆底的X+1张牌并使用其中的一张。此牌结算结束时,你依次弃置以下前X个区域中的所有牌:⒈判定区、⒉装备区、⒊手牌区(X为本回合你使用过的牌中包含的类型数)。',
|
||||
oltuishi:'侻失',
|
||||
oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌时,你令此牌无效并摸一张牌,且你对手牌数小于你的角色使用的下一张牌无距离和次数限制。③当你使用伤害类卡牌结算完毕后,若此牌为你本回合使用的第三张或以上未造成伤害的卡牌,则你令本回合〖器翻〗失效。',
|
||||
oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌时,你令此牌无效并摸一张牌,且你对手牌数小于你的角色使用的下一张牌无距离和次数限制。③当你使用伤害类卡牌结算完毕后,若此牌为你本回合使用的第三张或以上未造成伤害的卡牌,则你令〖器翻〗于本回合失效。',
|
||||
ol_tw_zhangji:'张既',
|
||||
skill_zhangji_A:'技能',
|
||||
skill_zhangji_A_info:'出牌阶段限X次(X为你的体力值),当你使用牌指定一名其他角色为目标后,你可以观看其手牌,然后你选择一项:<br>1.弃置其一张牌,然后若弃置的牌是能造成火焰伤害的牌,你摸一张牌。<br>2.重铸其手牌中的所有【杀】和【决斗】。<br>3.若其没有【闪】,你与其互相对对方造成1点伤害。',
|
||||
|
|
|
@ -8319,6 +8319,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
const num=Math.min(player.countCards('h'),player.countCards('he'),game.countPlayer(target=>target!=player&&target.isFriendOf(player)));
|
||||
if(num){
|
||||
let list=[];
|
||||
if(_status.connectMode) game.broadcastAll(()=>_status.noclearcountdown=true);
|
||||
while(num-list.length>0){
|
||||
const {result:{bool,targets,cards}}=await player.chooseCardTarget({
|
||||
prompt:'宿守:你可以交给友方角色各一张牌',
|
||||
|
@ -8344,6 +8345,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
else break;
|
||||
}
|
||||
if(_status.connectMode){
|
||||
game.broadcastAll(()=>{
|
||||
delete _status.noclearcountdown;
|
||||
game.stopCountChoose();
|
||||
});
|
||||
}
|
||||
if(list.length){
|
||||
await game.loseAsync({
|
||||
gain_list:list,
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
Binary file not shown.
After Width: | Height: | Size: 60 KiB |
|
@ -13125,7 +13125,11 @@ export class Library {
|
|||
* @returns {string}
|
||||
*/
|
||||
getSpan: () => `${get.prefixSpan('手杀')}${get.prefixSpan('神')}`
|
||||
}]
|
||||
}],
|
||||
['龙', {
|
||||
color: '#ff0000',
|
||||
nature: 'firemm',
|
||||
}],
|
||||
]);
|
||||
groupnature = {
|
||||
shen: 'shen',
|
||||
|
|
Loading…
Reference in New Issue