新版OL谋关羽

This commit is contained in:
mengxinzxz 2024-02-01 09:54:22 +08:00
parent 83a995563c
commit bc87bb4373
2 changed files with 167 additions and 10 deletions

View File

@ -94,7 +94,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return false;
},
filter(event,player){
if(player.countMark('dclonghun')>=20) return false;
var filter=event.filterCard;
if(filter({name:'sha',nature:'fire'},player,event)&&player.countCards('hes',{suit:'diamond'})) return true;
if(filter({name:'shan'},player,event)&&player.countCards('hes',{suit:'club'})) return true;
@ -102,17 +101,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true;
return false;
},
precontent(){
if(!player.hasMark('dclonghun')){
player.when({global:'phaseAfter'}).then(()=>player.removeMark('dclonghun',player.countMark('dclonghun'),false));
}
player.addMark('dclonghun',1,false);
},
usable:20,
ai:{
respondSha:true,
respondShan:true,
skillTagFilter(player,tag){
if(player.countMark('dclonghun')>=20) return false;
if((player.getStat('skill').dclonghun||0)>=20) return false;
var name;
switch(tag){
case 'respondSha':name='diamond';break;
@ -142,7 +136,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
hiddenCard(player,name){
if(player.countMark('dclonghun')>=20) return false;
if((player.getStat('skill').dclonghun||0)>=20) return false;
if(name=='wuxie'&&_status.connectMode&&player.countCards('hes')>0) return true;
if(name=='wuxie') return player.countCards('hes',{suit:'spade'})>0;
if(name=='tao') return player.countCards('hes',{suit:'heart'})>0;

View File

@ -8,7 +8,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_caozhang:['male','wei',4,['oljiangchi'],['die_audio:xin_caozhang']],
ol_jianyong:['male','shu',3,['olqiaoshui','jyzongshi'],['tempname:re_jianyong','die_audio:re_jianyong']],
ol_lingtong:['male','wu',4,['olxuanfeng'],['die_audio:re_lingtong']],
ol_sb_guanyu:['male','shu',4,['olsbfumeng','olsbguidao']],
ol_sb_guanyu:['male','shu',4,['olsbweilin','olsbduoshou']],
ol_sb_taishici:['male','wu',4,['olsbdulie','olsbdouchan']],
},
characterSort:{
@ -23,6 +23,165 @@ game.import('character',function(lib,game,ui,get,ai,_status){
characterReplace:{
},
skill:{
//新OL谋关羽
olsbweilin:{
audio:2,
enable:'chooseToUse',
filter(event,player){
return get.inpileVCardList(info=>{
return get.type(info[2])=='basic';
}).some(card=>player.hasCard(cardx=>event.filterCard({name:card[2],nature:card[3],cards:[cardx]},player,event),'hes'));
},
usable:1,
chooseButton:{
dialog(event,player){
const list=get.inpileVCardList(info=>{
return get.type(info[2])=='basic';
}).filter(card=>player.hasCard(cardx=>event.filterCard({name:card[2],nature:card[3],cards:[cardx]},player,event),'hes'));
return ui.create.dialog('威临',[list,'vcard']);
},
filter(button,player){
return _status.event.getParent().filterCard({name:button.link[2],nature:button.link[3]},player,_status.event.getParent());
},
check(button){
if(_status.event.getParent().type!='phase') return 1;
const player=get.event('player'),value=player.getUseValue({name:button.link[2],nature:button.link[3]});
if(button.link[2]=='sha'&&!player.getHistory('useCard',evt=>get.type(evt.card)=='basic').length){
if(value>0) return value+20;
}
return value;
},
backup(links,player){
return {
audio:'olsbweilin',
filterCard:true,
popname:true,
check(card){
const name=lib.skill.olsbweilin_backup.viewAs.name,color=get.color(card);
const phase=(_status.event.getParent().type=='phase');
if(phase&&name=='sha'&&color=='red') return 10-get.value(card);
if(name=='tao') return 7+[-2,0,2][['black','red','none'].indexOf(color)]-get.value(card);
return 6-get.value(card);
},
position:'hse',
viewAs:{name:links[0][2],nature:links[0][3]},
precontent(){
if(!player.storage.olsbweilin_backup){
player.storage.olsbweilin_backup=true;
player.when('useCardToTargeted')
.filter(evt=>evt.getParent().skill=='olsbweilin_backup'&&evt.getParent().triggeredTargets3.length==evt.targets.length)
.then(()=>{
delete player.storage.olsbweilin_backup;
const targets=trigger.targets.slice().sortBySeat();
player.line(targets);
for(const target of targets){
target.addTempSkill('olsbweilin_wusheng');
target.markAuto('olsbweilin_wusheng',[get.color(trigger.card)]);
}
});
}
},
ai:{
directHit_ai:true,
skillTagFilter(player,tag,arg){
if(get.event('skill')!='olsbweilin_backup') return false;
return arg&&arg.card&&arg.card.name=='sha'&&get.color(arg.card)=='red';
},
},
}
},
prompt(links,player){
return '将一张牌当作'+(get.translation(links[0][3])||'')+'【'+get.translation(links[0][2])+'】使用';
}
},
hiddenCard(player,name){
if(!lib.inpile.includes(name)) return false;
return get.type(name)=='basic'&&!player.getStat('skill').olsbweilin&&player.countCards('hes');
},
ai:{
fireAttack:true,
respondSha:true,
respondShan:true,
skillTagFilter(player){
if(player.getStat('skill').olsbweilin||!player.countCards('hes')) return false;
},
order(item,player){
if(player&&_status.event.type=='phase'){
let max=0,names=get.inpileVCardList(info=>get.type(info[2])=='basic');
names=names.map(namex=>{return {name:namex[2],nature:namex[3]}});
names.forEach(card=>{
if(player.getUseValue(card)>0){
let temp=get.order(card);
if(card.name=='jiu'){
let cards=player.getCards('hs',cardx=>get.value(cardx)<8);
cards.sort((a,b)=>get.value(a)-get.value(b));
if(!cards.some(cardx=>get.name(cardx)=='sha'&&!cards.slice(0,2).includes(cardx))) temp=0;
}
if(temp>max) max=temp;
}
});
if(max>0) max+=3;
return max;
}
return 0.5;
},
result:{
player(player){
if(_status.event.dying) return get.attitude(player,_status.event.dying);
return 1;
},
},
},
subSkill:{
backup:{},
wusheng:{
charlotte:true,
onremove:true,
mod:{
cardname(card,player){
if(player.getStorage('olsbweilin_wusheng').includes(get.color(card))) return 'sha';
},
},
intro:{content:'手牌中所有$牌均视为【杀】'},
},
},
},
olsbduoshou:{
init(player){
if(player.getHistory('useCard',evt=>get.color(evt.card)=='red').length) player.addTempSkill('olsbduoshou_used');
},
mod:{
targetInRange(card,player,target){
if(get.color(card)=='red'&&!player.hasSkill('olsbduoshou_used')) return true;
},
},
audio:2,
trigger:{
player:'useCard',
source:'damageSource',
},
filter(event,player){
if(event.name=='damage') return player.getHistory('sourceDamage').indexOf(event)==0;
if(get.color(event.card)=='red'&&!player.hasSkill('olsbduoshou_used')) return true;
return get.type(event.card)=='basic'&&player.getHistory('useCard',evt=>get.type(evt.card)=='basic').indexOf(event)==0;
},
forced:true,
async content(event,trigger,player){
if(trigger.name=='damage') player.draw();
else{
if(get.color(trigger.card)=='red'&&!player.hasSkill('olsbduoshou_used')){
game.log(trigger.card,'无距离限制');
player.addTempSkill('olsbduoshou_used');
}
if(get.type(trigger.card)=='basic'&&player.getHistory('useCard',evt=>get.type(evt.card)=='basic').indexOf(trigger)==0){
game.log(trigger.card,'不计入次数上限');
trigger.addCount=false;
if(player.stat[player.stat.length-1].card.sha>0) player.stat[player.stat.length-1].card.sha--;
}
}
},
subSkill:{used:{charlotte:true}},
},
//OL谋太史慈
olsbdulie:{
audio:2,
@ -559,6 +718,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olsbdulie_info:'每回合限一次当你成为其他角色使用基本牌或普通锦囊牌的目标时你可以令此牌额外结算一次。若如此做此牌结算完毕后你摸X张牌X为你的攻击范围且至多为5。',
olsbdouchan:'斗缠',
olsbdouchan_info:'锁定技,准备阶段,你从牌堆中获得一张【决斗】,若牌堆没有【决斗】,则你的攻击范围和出牌阶段使用【杀】的次数上限+1增加次数不超过游戏人数。',
olsbweilin:'威临',
olsbweilin_info:'每回合限一次,你可以将一张牌当作任意基本牌使用,且你以此法使用的牌指定最后一个目标后,你令所有目标角色本回合与此牌颜色相同的手牌均视为【杀】。',
olsbduoshou:'夺首',
olsbduoshou_info:'锁定技。①你每回合使用的第一张红色牌无距离限制。②你每回合使用的第一张基本牌不计入使用次数。③你每回合第一次造成伤害后,你摸一张牌。',
onlyOL_yijiang1:'OL专属·将1',
onlyOL_yijiang2:'OL专属·将2',