龙起襄樊

This commit is contained in:
mengxinzxz 2024-04-14 00:38:00 +08:00
parent 72f18f00b8
commit 5937711f00
5 changed files with 492 additions and 0 deletions

View File

@ -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,468 @@ 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('choiceList',choiceList).set('prompt',get.prompt('draglizhong')).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(ui.selected.targets.length){
const choose=ui.selected.targets[0];
return choose!=player||choose.countCards('e');
}
return target==player||target.countCards('e');
},[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++){
targets[j].draw(j==targets.length-1?'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 +7275,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 +7306,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
offline_vtuber:'天书乱斗·虚拟偶像',
offline_piracyK:'官盗K系列',
offline_others:'线下其他系列',
offline_longyutao:'龙起襄樊',
},
};
});

View File

@ -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',

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