Merge pull request #1176 from copcap/dev-20240409-mobile

新增手杀新将「曹髦」「成济」「李昭焦伯」「SP毌丘俭」
This commit is contained in:
Spmario233 2024-04-10 10:14:15 +08:00 committed by GitHub
commit a6684a7ae6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 787 additions and 3 deletions

View File

@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
mobile:{
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','yangfeng'],
mobile_default:['mb_sp_guanqiujian','mb_caomao','chengji','lizhaojiaobo','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','yangfeng'],
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,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
mb_sp_guanqiujian:['male','wei',4,['mbcuizhen','mbkuili']],
mb_caomao:['male','wei',3,['mbqianlong','mbweitong'],['zhu']],
chengji:['male','wei',4,['mbkuangli','mbxiongsi']],
lizhaojiaobo:['male','wei',4,['mbzuoyou','mbshishou']],
yangfeng:['male','qun',4,['mbxuetu','mbweiming']],
xin_huojun:['male','shu',4,['sidai','jieyu'],['character:tw_huojun','die_audio:tw_huojun']],
muludawang:['male','qun','3/3/1',['shoufa','zhoulin','yuxiang']],
@ -179,6 +183,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
scs_gaowang:['male','qun','',['scsmiaoyu'],['unseen','sex:male_castrated']],
},
characterIntro:{
lizhaojiaobo:'李昭—约公元260年三国时期曹魏官吏官拜冗从仆射为魏帝曹髦的亲信。<br>焦伯,三国时期人物,魏帝曹髦护卫,官拜黄门从官。<br>曹髦见自己权力威势日渐削弱感到不胜忿恨于公元260年甘露五年五月初六夜里令李昭和焦伯等在陵云台布署甲士出讨司马昭但最终失败曹髦为成济所弑李昭和焦伯等应该也战死。在《三国演义》里焦伯挺枪出战成济亦被成济所杀。',
chengji:'成济260年6月21日三国时期曹魏官员。官至太子舍人。在魏帝曹髦起兵讨司马昭时受到司马昭之心腹贾充指使刺死曹髦。司马昭为平息众怒将成倅、成济兄弟二人杀死。',
yangfeng:'杨奉197年/198年东汉末年将领。杨奉早年参加白波军起义曾经帮助李傕对抗郭汜后来背叛李傕。兴平二年加号兴义将军护送汉献帝刘协东归雒阳颇有功勋加号车骑将军屯兵于梁县。建安元年随着汉献帝迁都许县失去权力先后依附于袁术、吕布劫掠徐州和扬州地区。建安二年一说三年带兵进犯刘备领地被刘备诱杀。',
muludawang:'古典小说《三国演义》中的虚构人物,八纳洞主,孟获盟友。擅驱兽法,能行风雨,控制猛兽并指挥它们作战。在法术帮助下最初对蜀军取得一些胜利,但在诸葛亮的喷火木兽将他的动物吓跑后战败,最后死于乱军之中。',
laimin:'来敏165年—261年字敬达义阳新野人东汉太中大夫来歙之后司空来艳之子三国时期蜀汉官员。东汉末年逢董卓之乱来敏跟随姐夫黄琬到荆州避难黄琬是刘璋祖母的侄子来敏又与姐姐来氏入蜀被刘璋引为宾客。来敏喜欢读书尤其喜欢《左氏春秋》。刘备平定益州后以来敏为典学校尉后立太子来敏为家令。刘禅继位后任命来敏为虎贲中郎将诸葛亮驻汉中请来敏为军祭酒、辅军将军。却因其口出狂言而被罢官诸葛亮死后来敏历任大长秋、光禄大夫、执慎将军等职期间多次因说错话而被免官蜀汉景耀年间来敏去世时年九十七岁。',
@ -396,6 +402,733 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//李昭焦伯
mbzuoyou:{
audio:2,
enable:'phaseUse',
usable:1,
zhuanhuanji:true,
filterTarget(card,player,target){
if(player.storage.mbzuoyou) return target.countCards('h');
return true;
},
async content(event,trigger,player){
const storage = player.storage.mbzuoyou, target = event.target;
if (event.name === 'mbzuoyou') player.changeZhuanhuanji('mbzuoyou');
if (!storage) {
await target.draw(3);
await target.chooseToDiscard(2,true,'he');
}
else {
await target.chooseToDiscard(target===player ? '佐佑' : `${get.translation(player)}对你发动了【佐佑】`, '请弃置一张手牌然后获得1点护甲', true);
await target.changeHujia(1, null, true);
}
},
mark:true,
marktext:'☯',
intro:{
content(storage,player){
if(!storage) return '转换技。出牌阶段限一次,你可以令一名角色摸三张牌,然后其弃置两张牌。';
return '转换技。出牌阶段限一次你可以令一名角色弃置一张手牌然后其获得1点护甲。';
}
},
ai:{
order(item,player){
if(player.storage.mbzuoyou&&game.hasPlayer(current=>{
return current!==player&&get.effect(current,'mbzuoyou',player,player)>0;
})) return get.order({name:'zengbin'})+0.1;
return 2;
},
result:{
target(player,target){
let eff=0;
if(player.storage.mbzuoyou) eff=target.hujia<5?1:0;
else eff=1;
if(target===player&&player.hasSkill('mbshishou')) eff/=10;
return eff;
},
}
},
},
mbshishou:{
audio:2,
forced:true,
trigger:{player:'useSkillAfter'},
filter(event,player){
return event.skill==='mbzuoyou'&&!event.targets.includes(player);
},
forced:true,
async content(event,trigger,player){
await lib.skill.mbzuoyou.content({
target: player,
}, {}, player);
},
},
//成济
mbkuangli:{
audio:2,
trigger:{player:'phaseUseBegin'},
filter(event,player){
return game.hasPlayer(current=>current!==player);
},
forced:true,
group:['mbkuangli_target','mbkuangli_remove'],
async content(event,trigger,player){
let targets = game.filterPlayer(current => current !== player).randomSort();
targets = targets.slice(0, Math.ceil(Math.random() * targets.length));
targets.sortBySeat();
player.line(targets, 'thunder');
targets.forEach(current => {
current.addSkill('mbkuangli_mark');
});
await game.asyncDelayx();
},
subSkill:{
target:{
audio:'mbkuangli',
trigger:{player:'useCardToPlayered'},
filter(event,player){
return event.target.hasSkill('mbkuangli_mark')&&[player,event.target].some(current=>current.countCards('he'));
},
forced:true,
logTarget:'target',
usable:2,
async content(event,trigger,player){
const target = trigger.target;
const playerCards = player.getCards('he', card => {
return lib.filter.cardDiscardable(card, player, 'mbkuangli');
});
if(playerCards.length>0) await player.discard(playerCards.randomGet());
const targetCards = target.getCards('he', card => {
return lib.filter.cardDiscardable(card, target, 'mbkuangli');
});
if(targetCards.length>0) await target.discard(targetCards.randomGet());
await game.asyncDelayx();
await player.draw();
await game.asyncDelayx();
},
ai:{
effect:{
player(card,player,target,current){
if(!target) return;
const counttrigger=player.storage.counttrigger;
if(counttrigger&&counttrigger.mbkuangli_target&&counttrigger.mbkuangli_target>=lib.skill.mbkuangli_target.usable) return;
if(target.hasSkill('mbkuangli_mark')){
if(get.attitude(player,target)>0) return 0.75;
return 1.25;
}
}
}
},
},
remove:{
audio:'mbkuangli',
trigger:{player:'phaseEnd'},
filter(event,player){
return game.hasPlayer(current=>current.hasSkill('mbkuangli_mark'));
},
forced:true,
async content(event,trigger,player){
game.countPlayer(current=>{
if(current.hasSkill('mbkuangli_mark')){
player.line(current);
current.removeSkill('mbkuangli_mark');
}
});
},
},
mark:{
mark:true,
marktext:'戾',
charlotte:true,
intro:{
name:'狂戾',
name2:'狂戾',
content:'已拥有“狂戾”标记',
}
},
},
},
mbxiongsi:{
audio:2,
enable:'phaseUse',
filter(event,player){
return player.countCards('h')>=3;
},
limited:true,
skillAnimation:true,
animationColor:'fire',
filterCard:true,
selectCard:[-1,-2],
async content(event,trigger,player){
player.awakenSkill('mbxiongsi');
const targets = game.filterPlayer(current => current !== player);
for (const target of targets) {
player.line(target, 'thunder');
await target.loseHp();
}
},
ai:{
order(item,player){
if(get.effect(player,'mbxiongsi',player)<=0) return 1;
if(player.countCards('h')>3&&player.countCards('h',card=>{
return player.hasValueTarget(card);
})>0) return 0.1;
return 8;
},
result:{
player(player){
let eff=0;
game.countPlayer(current=>{
let effx=get.effect(current,{name:'losehp'},player,player);
if(get.attitude(player,current)<-6&&current.getHp()<=1) effx*=1.3;
eff+=effx;
});
eff*=player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<=2?1.5:0.35;
eff-=player.getCards('h').map(card=>{
if(lib.filter.cardDiscardable(card,player,'mbxiongsi')) return get.value(card);
return 0;
}).reduce((p,c)=>p+c,0);
if(eff>0) return 2;
return -1;
},
},
},
},
//SP母兵脸
mbcuizhen:{
trigger:{
global:'phaseBefore',
player:'enterGame',
},
filter(event,player){
return (event.name!='phase'||game.phaseNumber==0)&&game.hasPlayer(current=>{
return current!==player&&current.hasEnabledSlot(1);
});
},
async cost(event,trigger,player){
event.result = await player.chooseTarget(get.prompt('mbcuizhen'), '废除至多两名其他角色的武器栏', [1, 2], (card, player, target) => {
return target !== player && target.hasEnabledSlot(1);
}).set('ai', target => {
return -get.attitude(get.player(), target);
}).forResult();
},
group:['mbcuizhen_inphase','mbcuizhen_draw'],
async content(event,trigger,player){
const targets = event.targets.slice().sortBySeat();
for (const target of targets) {
await target.disableEquip(1);
}
await game.asyncDelay();
},
subSkill:{
inphase:{
audio:'mbcuizhen',
trigger:{
player:'useCardToPlayered',
},
filter(event,player){
if(!player.isPhaseUsing()) return false;
if(!get.tag(event.card,'damage')) return false;
const target=event.target;
return target!==player&&target.countCards('h')>=target.getHp()&&target.hasEnabledSlot(1);
},
prompt2:'废除其的武器栏',
logTarget:'target',
check(event,player){
return get.attitude(player,event.target)<=0;
},
async content(event,trigger,player){
await trigger.target.disableEquip(1);
await game.asyncDelayx();
},
},
draw:{
audio:'mbcuizhen',
trigger:{player:'phaseDrawBegin2'},
forced:true,
locked:false,
filter(event,player){
return !event.numFixed&&game.hasPlayer(current=>{
return current.hasDisabledSlot(1);
});
},
async content(event,trigger,player){
trigger.num += Math.min(2, game.countPlayer(current => {
return current.countDisabledSlot(1);
}));
},
},
},
},
mbkuili:{
audio:2,
trigger:{
player:'damageEnd',
},
filter(event,player){
return player.countCards('h')>0||event.source&&event.source.isIn()&&event.source.hasDisabledSlot(1);
},
forced:true,
async content(event,trigger,player){
if (player.countCards('h') > 0) {
await player.chooseToDiscard(`溃离:请弃置${get.cnNumber(trigger.num)}张手牌`, trigger.num, true);
}
const source = trigger.source;
if (source && source.isIn() && source.hasDisabledSlot(1)) {
player.line(source, 'green');
await source.enableEquip(1, player);
}
},
ai:{
neg:true,
}
},
//曹髦 史?!
mbqianlong:{
audio:2,
trigger:{
player:['mbqianlong_beginAfter','mbqianlong_addAfter','mbweitongAfter'],
},
filter(event,player){
let skills=[];
if(player.additionalSkills&&player.additionalSkills.mbqianlong) skills.addArray(player.additionalSkills.mbqianlong);
return player.countMark('mbqianlong')>=25*skills.length;
},
forced:true,
locked:false,
beginMarkCount:20,
maxMarkCount:100,
derivation:['mbcmqingzheng','mbcmjiushi','mbcmfangzhu','mbjuejin'],
addMark(player,num){
num = Math.min(num, lib.skill.mbqianlong.maxMarkCount - player.countMark('mbqianlong'));
player.addMark('mbqianlong', num);
},
group:['mbqianlong_begin','mbqianlong_add'],
async content(event,trigger,player){
player.addAdditionalSkill('mbqianlong', lib.skill.mbqianlong.derivation.slice(0, Math.floor(player.countMark('mbqianlong') / 25)));
},
marktext:'道',
intro:{
name:'道心(潜龙)',
name2:'道心',
content:'当前道心数为#',
},
subSkill:{
begin:{
audio:'mbqianlong',
trigger:{
global:'phaseBefore',
player:'enterGame',
},
filter(event,player){
return (event.name!='phase'||game.phaseNumber==0);
},
forced:true,
locked:false,
async content(event,trigger,player){
lib.skill.mbqianlong.addMark(player, lib.skill.mbqianlong.beginMarkCount);
},
},
add:{
audio:'mbqianlong',
trigger:{
player:['gainAfter','damageEnd'],
source:'damageSource',
global:'loseAsyncAfter',
},
filter(event,player){
if(player.countMark('mbqianlong')>=lib.skill.mbqianlong.maxMarkCount) return false;
if(event.name==='damage') return event.num>0;
return event.getg(player).length>0;
},
getIndex(event,player,triggername){
if(event.name==='damage') return event.num;
return 1;
},
forced:true,
locked:false,
async content(event,trigger,player){
let toAdd = 5 * (1 + (trigger.name === 'damage') + (event.triggername === 'damageSource'));
lib.skill.mbqianlong.addMark(player, toAdd);
},
},
},
},
mbweitong:{
audio:2,
trigger:{
global:'phaseBefore',
player:'enterGame',
},
filter(event,player){
return (event.name!='phase'||game.phaseNumber==0)&&game.hasPlayer(current=>{
return current!==player&&current.group==='wei'&&player.hasZhuSkill('mbweitong',current);
});
},
forced:true,
locked:false,
async content(event,trigger,player){
lib.skill.mbqianlong.addMark(player, 20 * game.countPlayer(current => {
return current !== player && current.group === 'wei' && player.hasZhuSkill('mbweitong', current);
}));
},
},
mbcmqingzheng:{
audio:'sbqingzheng',
audioname:['mb_caomao'],
trigger:{player:'phaseUseBegin'},
filter(event,player){
return player.countCards('h')>0;
},
direct:true,
content(){
'step 0'
var num=2;
var prompt='###'+get.prompt('sbqingzheng')+'###弃置'+get.cnNumber(num)+'种花色的所有牌';
var next=player.chooseButton([prompt,[lib.suit.map(i=>['','','lukai_'+i]),'vcard']],num);
next.set('filterButton',button=>{
var player=_status.event.player;
var cards=player.getCards('h',{suit:button.link[2].slice(6)});
return cards.length>0&&cards.filter(card=>lib.filter.cardDiscardable(card,player,'sbqingzheng')).length==cards.length;
});
next.set('ai',button=>{
var player=_status.event.player;
return 15-player.getCards('h',{suit:button.link[2].slice(6)}).map(i=>get.value(i)).reduce((p,c)=>p+c,0);
});
next.set('custom',{
replace:{
button:function(button){
if(!_status.event.isMine()) return;
if(button.classList.contains('selectable')==false) return;
var cards=_status.event.player.getCards('h',{suit:button.link[2].slice(6)});
if(cards.length){
var chosen=cards.filter(i=>ui.selected.cards.includes(i)).length==cards.length;
if(chosen){
ui.selected.cards.removeArray(cards);
cards.forEach(card=>{
card.classList.remove('selected');
card.updateTransform(false);
});
}else{
ui.selected.cards.addArray(cards);
cards.forEach(card=>{
card.classList.add('selected');
card.updateTransform(true);
});
}
}
if(button.classList.contains('selected')){
ui.selected.buttons.remove(button);
button.classList.remove('selected');
if(_status.multitarget||_status.event.complexSelect){
game.uncheck();
game.check();
}
}
else{
button.classList.add('selected');
ui.selected.buttons.add(button);
}
var custom=_status.event.custom;
if(custom&&custom.add&&custom.add.button){
custom.add.button();
}
game.check();
}
},
add:next.custom.add
});
'step 1'
if(result.bool){
var cards=result.cards;
if(!cards.length){
var suits=result.links.map(i=>i[2].slice(6));
cards=player.getCards('h',card=>suits.includes(get.suit(card,player)));
}
event.cards=cards;
if(!cards.length) event.finish();
else player.chooseTarget('清正:观看一名其他角色的手牌并弃置其中一种花色的所有牌',(card,player,target)=>{
return target!=player&&target.countCards('h');
}).set('ai',target=>{
var player=_status.event.player,att=get.attitude(player,target);
if(att>=0) return 0;
return 1-att/2+Math.sqrt(target.countCards('h'));
});
} else event.finish();
'step 2'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('sbqingzheng',target);
player.discard(cards);
var list=[];
var dialog=['清正:弃置'+get.translation(target)+'一种花色的所有牌'];
for(var suit of lib.suit.concat('none')){
if(target.countCards('h',{suit:suit})){
dialog.push('<div class="text center">'+get.translation(suit+'2')+'牌</div>');
dialog.push(target.getCards('h',{suit:suit}));
list.push(suit);
}
}
if(list.length){
player.chooseControl(list).set('dialog',dialog).set('ai',()=>{
return _status.event.control;
}).set('control',(()=>{
var getv=(cards)=>cards.map(i=>get.value(i)).reduce((p,c)=>p+c,0);
return list.sort((a,b)=>{
return getv(target.getCards('h',{suit:b}))-getv(target.getCards('h',{suit:a}));
})[0];
})());
}
} else event.finish();
'step 3'
var cards2=target.getCards('h',{suit:result.control});
event.cards2=cards2;
target.discard(cards2,'notBySelf').set('discarder',player);
'step 4'
if(event.cards2.length<cards.length) target.damage();
},
},
mbcmjiushi:{
audio:'rejiushi',
inherit:'rejiushi',
group:['rejiushi1','mbcmjiushi_check','mbcmjiushi_turnback','mbcmjiushi_gain'],
subSkill:{
check:{
trigger:{player:'damageBegin3'},
silent:true,
firstDo:true,
filter(event,player){
return player.isTurnedOver();
},
content(){
trigger.mbcmjiushi = true;
}
},
turnback:{
audio:'rejiushi',
audioname:['mb_caomao'],
trigger:{player:'damageEnd'},
check(event,player){
return player.isTurnedOver();
},
filter(event,player){
return event.mbcmjiushi;
},
prompt(event,player){
return '是否发动【酒诗】,将武将牌翻面?';
},
content(){
delete trigger.mbcmjiushi;
player.turnOver();
}
},
gain:{
audio:'rejiushi',
audioname:['mb_caomao'],
trigger:{player:'turnOverAfter'},
frequent:true,
prompt:'是否发动【酒诗】,获得牌堆中的一张锦囊牌?',
content(){
var card=get.cardPile2(function(card){
return get.type2(card)=='trick';
});
if(card) player.gain(card,'gain2');
},
},
},
},
mbcmfangzhu:{
audio:'sbfangzhu',
audioname:['mb_caomao'],
inherit:'sbfangzhu',
filter(event,player){
return game.hasPlayer(current=>current!==player);
},
usable:1,
chooseButton:{
dialog(){
const dialog=ui.create.dialog('放逐:令一名其他角色...','hidden');
dialog.add([[
[1,'不能使用手牌中的非锦囊牌直到其回合结束'],
[2,'非Charlotte技能失效直到其回合结束'],
],'textbutton']);
return dialog;
},
check(button){
const player=get.player();
if(button.link===2){
if(game.hasPlayer(target=>{
if(target.hasSkill('mbcmfangzhu_ban')||target.hasSkill('fengyin')||target.hasSkill('baiban')) return false;
return get.attitude(player,target)<0&&['name','name1','name2'].map((sum,name)=>{
if(target[name]&&(name!='name1'||target.name!=target.name1)){
if(get.character(target[name])) return get.rank(target[name],true);
}
return 0;
}).reduce((p,c)=>{
return p+c;
},0)>5;
})) return 6;
}
return button.link===1?1:0;
},
backup(links,player){
return {
num:links[0],
audio:'sbfangzhu',
filterCard:()=>false,
selectCard:-1,
filterTarget(card,player,target){
if(target==player) return false;
const num=lib.skill.mbcmfangzhu_backup.num,storage=target.getStorage('mbcmfangzhu_ban');
return num!=1||!storage.length;
},
async content(event,trigger,player){
const target=event.target;
const num=lib.skill.mbcmfangzhu_backup.num;
switch(num){
case 1:
target.addTempSkill('mbcmfangzhu_ban',{player:'phaseEnd'});
target.markAuto('mbcmfangzhu_ban',['trick']);
break;
case 2:
target.addTempSkill('mbcmfangzhu_baiban',{player:'phaseEnd'});
break;
}
},
ai:{
result:{
target(player,target){
switch(lib.skill.mbcmfangzhu_backup.num){
case 1:
return -target.countCards('h',card=>get.type(card)!='trick')-1;
case 2:
return -target.getSkills(null,null,false).reduce((sum,skill)=>{
return sum+Math.max(get.skillRank(skill,'out'),get.skillRank(skill,'in'));
},0);
}
},
},
},
}
},
prompt(links,player){
const str='###放逐###';
switch(links[0]){
case 1:
return str+'令一名其他角色不能使用手牌中的非锦囊牌直到其回合结束';
case 2:
return str+'令一名其他角色的非Charlotte技能失效直到其回合结束';
}
}
},
ai:{
order:10,
result:{
player(player){
return game.hasPlayer(current=>get.attitude(player,current)<0)?1:0;
},
},
},
subSkill:{
backup:{},
baiban:{
inherit:'baiban',
marktext:'逐',
},
ban:{
charlotte:true,
onremove:true,
mark:true,
marktext:'禁',
intro:{
markcount:()=>0,
content(storage){
if(storage.length>1) return '不能使用手牌';
return '不能使用手牌中的非'+get.translation(storage[0])+'牌';
},
},
mod:{
cardEnabled(card,player){
const storage=player.getStorage('mbcmfangzhu_ban');
const hs=player.getCards('h'),cards=[card];
if(Array.isArray(card.cards)) cards.addArray(card.cards);
if(cards.containsSome(...hs)&&!storage.includes(get.type2(card))) return false;
},
cardSavable(card,player){
const storage=player.getStorage('mbcmfangzhu_ban');
const hs=player.getCards('h'),cards=[card];
if(Array.isArray(card.cards)) cards.addArray(card.cards);
if(cards.containsSome(...hs)&&!storage.includes(get.type2(card))) return false;
},
},
},
},
},
mbjuejin:{
audio:2,
enable:'phaseUse',
limited:true,
skillAnimation:true,
animationColor:'thunder',
filterCard:()=>false,
selectCard:[-1,-2],
filterTarget:true,
selectTarget:-1,
multiline:true,
async contentBefore(event,trigger,player){
player.awakenSkill('mbjuejin');
},
async content(event,trigger,player){
const target = event.target;
const delt = target.getHp(true) - 1, num = Math.abs(delt);
await target[delt > 0 ? 'loseHp' : 'recover'](num);
if (num > 0) await target.changeHujia(num, null ,true);
},
async contentAfter(event,trigger,player){
game.addGlobalSkill('mbjuejin_xiangsicunwei');
player.$fullscreenpop('向死存魏!', 'thunder');
},
ai:{
order:0.1,
result:{
player(player){
let eff=1;
game.countPlayer(current=>{
const att=get.attitude(player,current),num=Math.abs(current.getHp(true)-1);
const delt=Math.max(0,num+current.hujia-5);
eff-=att*delt;
});
return eff>0?1:0;
},
},
},
subSkill:{
xiangsicunwei:{
trigger:{
global:['loseAfter','equipAfter','loseAsyncAfter','cardsDiscardAfter'],
},
forced:true,
silent:true,
firstDo:true,
filter(event,player){
const nameList=['shan','tao','jiu'];
return event.getd().some(card=>{
return nameList.includes(get.name(card,false))&&get.position(card,true)==='d';
});
},
async content(event,trigger,player){
const nameList = ['shan','tao','jiu'];
const cards = trigger.getd().filter(card => {
return nameList.includes(get.name(card, false)) && get.position(card, true) === 'd';
});
await game.cardsGotoSpecial(cards);
game.log(cards, '被移出了游戏');
}
},
},
},
//杨奉
mbxuetu:{
audio:2,
@ -15899,6 +16632,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '转换技。出牌阶段限一次你可以回复1点体力然后令一名角色弃置两张牌<span class="bluetext">阳你可以摸一张牌然后对一名角色造成1点伤害。</span>';
}
},
mbzuoyou(player){
const mbzuoyou = player.storage.mbzuoyou;
if (mbzuoyou) return '转换技。出牌阶段限一次,阴:你可以令一名角色摸三张牌,然后其弃置两张牌;<span class="bluetext">阳你可以令一名角色弃置一张手牌然后其获得1点护甲。</span>'
return '转换技。出牌阶段限一次,<span class="bluetext">阴:你可以令一名角色摸三张牌,然后其弃置两张牌;</span>阳你可以令一名角色弃置一张手牌然后其获得1点护甲。'
}
},
perfectPair:{
simazhao:['simayi','jin_simayi','jin_wangyuanji'],
@ -16790,6 +17528,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mbxuetu_fail_info:'转换技。出牌阶段限一次你可以回复1点体力然后令一名角色弃置两张牌你可以摸一张牌然后对一名角色造成1点伤害。',
mbweiming:'威命',
mbweiming_info:'使命技,锁定技。①出牌阶段开始时,你记录一名未以此法记录过的角色。②成功:当你杀死一名未被〖威命①〗记录过的角色后,修改〖血途〗为成功版本。③失败:当一名被〖威命①〗记录过的角色死亡后,你修改〖血途〗为失败版本。',
lizhaojiaobo:'李昭焦伯',
mbzuoyou:'佐佑',
mbzuoyou_info:'转换技。出牌阶段限一次你可以令一名角色摸三张牌然后其弃置两张牌你可以令一名角色弃置一张手牌然后其获得1点护甲。',
mbshishou:'侍守',
mbshishou_info:'锁定技。当你发动〖佐佑〗后,若目标角色不为你,你执行〖佐佑〗中目标角色未执行的一项。',
chengji:'成济',
mbkuangli:'狂戾',
mbkuangli_info:'锁定技。①出牌阶段开始时,你随机令场上任意名其他角色获得“狂戾”标记。②出牌阶段限两次。当你使用牌指定有“狂戾”的角色为目标后,你与其各随机弃置一张牌,然后你摸一张牌。③回合结束时,你移除所有角色的“狂戾”。',
mbxiongsi:'凶肆',
mbxiongsi_info:'限定技。出牌阶段若你的手牌数不少于三张你可以弃置所有手牌然后令所有其他角色依次失去1点体力。',
mb_sp_guanqiujian:'SP毌丘俭',
mb_sp_guanqiujian_prefix:'SP',
mbcuizhen:'摧阵',
mbcuizhen_info:'①游戏开始时,你可以废除至多两名其他角色的武器栏。②当你于出牌阶段使用伤害类牌指定其他角色为目标后,若目标角色的手牌数不小于体力值,你可以废除其武器栏。③摸牌阶段,你令额定摸牌数+XX为所有角色被废除的武器栏数之和至多为2。',
mbkuili:'溃离',
mbkuili_info:'锁定技。当你受到伤害后,你弃置等同于伤害值的手牌;若来源有被废除的武器栏,你令其恢复武器栏。',
mb_caomao:'手杀曹髦',
mb_caomao_prefix:'手杀',
mbqianlong:'潜龙',
mbqianlong_info:'①游戏开始时你获得20枚“道心”标记。②当你得到牌后/受到1点伤害后/造成1点伤害后你获得5/10/15枚“道心”上限为100枚。③若你的“道心”数不小于25/50/75/100你视为拥有〖清正〗/〖酒诗〗/〖放逐〗/〖决进〗。',
mbcmqingzheng:'清正',
mbcmqingzheng_info:'出牌阶段开始时你可以弃置两种花色的所有手牌并观看一名有手牌的其他角色的手牌你弃置其中一种花色的所有牌。若其被弃置的牌数小于你以此法弃置的牌数你对其造成1点伤害。',
mbcmjiushi:'酒诗',
mbcmjiushi_info:'①当你需要使用【酒】时,若你的武将牌正面向上,你可以翻面,视为使用一张【酒】。②当你受到伤害后,若你的武将牌背面向上,你可以翻面。③当你翻面后,你获得牌堆里的一张锦囊牌。',
mbcmfangzhu:'放逐',
mbcmfangzhu_info:'出牌阶段限一次。你可以选择一名其他角色选择一项⒈令其不能使用手牌中的非锦囊牌直到其回合结束⒉令其所有非Charlotte技能失效直到其回合结束。',
mbjuejin:'决进',
mbjuejin_info:'限定技。出牌阶段你可以令所有角色依次将体力回复或失去至1并获得X点护甲X为一名角色以此法变化的体力值。然后你增加如下“向死存魏”的全局技能当有牌进入弃牌堆后系统将这些牌中的【闪】、【桃】和【酒】移出游戏。',
mbweitong:'卫统',
mbweitong_info:'主公技。游戏开始时若你有〖潜龙〗你获得20X枚“道心”X为其他魏势力角色数。',
mobile_standard:'手杀异构·标准包',
mobile_shenhua_feng:'手杀异构·其疾如风',

View File

@ -373,6 +373,7 @@ window.noname_character_rank={
'shen_lusu',
'huzun',
'star_zhangchunhua',
'mb_caomao',
],
am:[
'tw_yanliang',
@ -687,6 +688,7 @@ window.noname_character_rank={
'dc_caoshuang',
'clan_wangling',
'clan_wangguang',
'lizhaojiaobo',
],
bp:[
'xin_huojun',
@ -1081,6 +1083,8 @@ window.noname_character_rank={
'sb_gaoshun',
're_wangyi',
'ol_wangyi',
'chengji',
'mb_sp_guanqiujian',
],
b:[
'junk_guanyu',
@ -2182,6 +2186,7 @@ window.noname_character_rank={
'bailingyun',
'dc_sb_simayi',
'caofang',
'mb_caomao',
],
rare:[
're_wangyi',
@ -2672,6 +2677,9 @@ window.noname_character_rank={
'ol_liwan',
'dc_sb_lusu',
'clan_wangmingshan',
'chengji',
'mb_sp_guanqiujian',
'lizhaojiaobo',
],
junk:[
'ol_sb_guanyu',

View File

@ -9325,6 +9325,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
rejiushi:{
audio:2,
audioname:['mb_caomao'],
group:['rejiushi1','rejiushi2','rejiushi3','rejiushi_gain'],
subfrequent:['gain'],
subSkill:{
@ -9351,6 +9352,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return false;
},
audio:'rejiushi',
audioname:['mb_caomao'],
enable:'chooseToUse',
filter:function(event,player){
if(player.classList.contains('turnedover')) return false;

View File

@ -982,6 +982,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
sbfangzhu:{
audio:2,
audioname:['mb_caomao'],
enable:'phaseUse',
filter(event,player){
return player.hasMark('sbxingshang');
@ -1019,6 +1020,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return {
num:links[0],
audio:'sbfangzhu',
audioname:['mb_caomao'],
filterCard:()=>false,
selectCard:-1,
filterTarget(card,player,target){
@ -4981,6 +4983,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
sbqingzheng:{
audio:2,
audioname:['mb_caomao'],
trigger:{player:'phaseUseBegin'},
filter:function(event,player){
return player.countCards('h')>0;

View File

@ -7759,7 +7759,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zuoci:['zuoci','re_zuoci'],
caiwenji:['caiwenji','ol_caiwenji','re_caiwenji'],
xuyou:['xuyou','sp_xuyou','jsrg_xuyou','yj_xuyou','junk_xuyou'],
guanqiujian:['guanqiujian','re_guanqiujian','tw_guanqiujian','old_guanqiujian'],
guanqiujian:['guanqiujian','re_guanqiujian','tw_guanqiujian','mb_sp_guanqiujian','old_guanqiujian'],
chendao:['chendao','ns_chendao','old_chendao'],
zhugezhan:['zhugezhan','old_zhugezhan'],
ol_lusu:['re_lusu','ol_lusu','dc_sb_lusu'],

View File

@ -715,7 +715,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
popup:false,
async content(event,trigger,player){
player.logSkill('twxiayong'+(trigger.player===player?'1':'2'),trigger.player);
await player.logSkill('twxiayong'+(trigger.player===player?'1':'2'),trigger.player);
if(trigger.player===player){
const cards=player.getCards('h',card=>{
return lib.filter.cardDiscardable(card,player,'twxiayong');
@ -16741,6 +16741,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twjuexing:'绝行',
twjuexing_info:'出牌阶段限一次。你可以视为对一名其他角色使用一张【决斗】。此牌对一名角色生效时,你与其将所有手牌扣置于武将牌上,然后各摸等同于当前体力值的牌。此牌结算结束后,你与所有目标角色弃置本次以此法摸的牌,然后获得扣置于武将牌上的牌。历战:当你因〖绝行〗摸牌时,摸牌数+1。',
twxiayong:'狭勇',
twxiayong1:'狭勇',
twxiayong2:'狭勇',
twxiayong_info:'锁定技。当你使用的【决斗】或目标角色包括你的【决斗】造成伤害时,若受伤角色为你,则你随机弃置一张手牌;否则你令此伤害+1。',
twqiaosi:'峭嗣',
twqiaosi_info:'结束阶段你可以获得由其他角色区域直接置入或经由处理区置入弃牌堆的所有牌然后若你以此法获得的牌数小于你的体力值则你失去1点体力。',

View File

@ -14628,6 +14628,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dingshangwan:['dingshangwan','ol_dingshangwan'],
qinghegongzhu:['qinghegongzhu','dc_qinghegongzhu'],
caofang:['caofang','jsrg_caofang'],
caomao:['caomao','mb_caomao'],
},
translate:{
puyuan:'蒲元',