diff --git a/audio/skill/twxiayong_tw_yanliang1.mp3 b/audio/skill/twxiayong1_tw_yanliang.mp3 similarity index 100% rename from audio/skill/twxiayong_tw_yanliang1.mp3 rename to audio/skill/twxiayong1_tw_yanliang.mp3 diff --git a/audio/skill/twxiayong_tw_yanliang2.mp3 b/audio/skill/twxiayong2_tw_yanliang.mp3 similarity index 100% rename from audio/skill/twxiayong_tw_yanliang2.mp3 rename to audio/skill/twxiayong2_tw_yanliang.mp3 diff --git a/character/mobile.js b/character/mobile.js index 4c86ae3e3..a6a7d23a0 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -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年),三国时期曹魏官吏,官拜冗从仆射,为魏帝曹髦的亲信。
焦伯,三国时期人物,魏帝曹髦护卫,官拜黄门从官。
曹髦见自己权力威势日渐削弱,感到不胜忿恨,于公元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&¤t.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&¤t.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&¤t.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('
'+get.translation(suit+'2')+'牌
'); + 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.lengthcurrent!==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点体力,然后令一名角色弃置两张牌;阳:你可以摸一张牌,然后对一名角色造成1点伤害。'; } }, + mbzuoyou(player){ + const mbzuoyou = player.storage.mbzuoyou; + if (mbzuoyou) return '转换技。出牌阶段限一次,阴:你可以令一名角色摸三张牌,然后其弃置两张牌;阳:你可以令一名角色弃置一张手牌,然后其获得1点护甲。' + return '转换技。出牌阶段限一次,阴:你可以令一名角色摸三张牌,然后其弃置两张牌;阳:你可以令一名角色弃置一张手牌,然后其获得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:'①游戏开始时,你可以废除至多两名其他角色的武器栏。②当你于出牌阶段使用伤害类牌指定其他角色为目标后,若目标角色的手牌数不小于体力值,你可以废除其武器栏。③摸牌阶段,你令额定摸牌数+X(X为所有角色被废除的武器栏数之和,至多为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:'手杀异构·其疾如风', diff --git a/character/rank.js b/character/rank.js index 79c784dd6..390ef215b 100644 --- a/character/rank.js +++ b/character/rank.js @@ -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', diff --git a/character/refresh.js b/character/refresh.js index 005ca5042..72b9abc63 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -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; diff --git a/character/sb.js b/character/sb.js index 4573c1c8a..5c8cf9790 100644 --- a/character/sb.js +++ b/character/sb.js @@ -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; diff --git a/character/shenhua.js b/character/shenhua.js index f6ff37797..e98103a99 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -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'], diff --git a/character/tw.js b/character/tw.js index cd3eee9dc..20d136399 100644 --- a/character/tw.js +++ b/character/tw.js @@ -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点体力。', diff --git a/character/xianding.js b/character/xianding.js index 45df206b7..a415b07e4 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -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:'蒲元',