diff --git a/character/clan.js b/character/clan.js index a42d8925b..091b9789b 100644 --- a/character/clan.js +++ b/character/clan.js @@ -22,10 +22,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_zhongyu:['male','wei',3,['clanjiejian','clanhuanghan','clanbaozu'],['clan:颍川钟氏']], clan_wanglun:['male','wei',3,['clanqiuxin','clanjianyuan','clanzhongliu'],['clan:太原王氏']], clan_xunyou:['male','wei',3,['clanbaichu','clandaojie'],['clan:颍川荀氏']], + clan_wuqiao:['male','jin',4,['clanqiajue','clanmuyin'],['clan:陈留吴氏']], }, characterSort:{ clan:{ - clan_wu:['clan_wuxian','clan_wuban','clan_wukuang'], + clan_wu:['clan_wuxian','clan_wuban','clan_wukuang','clan_wuqiao'], clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan','clan_xunyou'], clan_han:['clan_hanshao','clan_hanrong'], clan_wang:['clan_wangling','clan_wangyun','clan_wanghun','clan_wanglun'], @@ -33,6 +34,46 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //族吴乔 + clanqiajue:{ + audio:2, + trigger:{player:'phaseDrawBegin'}, + filter(event,player){ + return player.countCards('he',card=>{ + if(_status.connectMode&&get.position(card)=='h') return true; + return get.color(card,player)=='black'&&lib.filter.cardDiscardable(card,player); + }); + }, + direct:true, + async content(event,trigger,player){ + const {result:{bool}}=await player.chooseToDiscard(get.prompt2('clanqiajue'),(card,player)=>{ + return get.color(card,player)=='black'&&lib.filter.cardDiscardable(card,player); + },'he').set('ai',card=>{ + const player=get.event('player'),goon=get.position(card)=='h'; + let num=player.getCards('h').reduce((sum,card)=>sum+get.number(card),0); + if(num-(goon?get.number(card):0)>30) return 0; + return goon?get.number(card):1/(get.value(card)||0.5); + }).set('logSkill','clanqiajue'); + if(bool){ + player.when({player:['phaseDrawEnd','phaseDrawCancelled','phaseUseSkipped']}) + .filter(evt=>evt==trigger) + .then(()=>{ + const cards=player.getCards('h'),num=cards.reduce((sum,card)=>sum+get.number(card),0); + if(cards.length) player.showCards(cards,get.translation(player)+'【跒倔】展示'); + if(num>30){ + player.popup('杯具'); + lib.skill.chenliuwushi.change(player,-2); + } + else{ + player.popup('洗具'); + const next=player.phaseDraw(); + event.next.remove(next); + trigger.getParent('phase').next.push(next); + } + }) + } + }, + }, //族荀攸 clanbaichu:{ derivation:'qice', @@ -2508,7 +2549,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clanmuyin:{ audio:2, clanSkill:true, - audioname:['clan_wuxian','clan_wuban','clan_wukuang'], + audioname:['clan_wuxian','clan_wuban','clan_wukuang','clan_wuqiao'], trigger:{player:'phaseBegin'}, isMax(player){ var num=player.getHandcardLimit(); @@ -2582,6 +2623,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wanghun:'王浑(223年~297年),字玄冲,太原郡晋阳县(今山西省太原市)人。魏晋时期名臣,曹魏司空王昶的儿子。王浑早年为大将军曹爽的掾吏,高平陵政变后,循例免官,出任怀县县令、散骑侍郎等职,袭封京陵县侯。西晋王朝建立后,加号扬烈将军,历任征虏将军、东中郎将、豫州刺史等职,积极筹划伐吴方略。咸宁五年(279年),配合镇南将军杜预灭亡吴国,迁征东大将军、左仆射、司徒公,晋爵京陵县公。晋惠帝司马衷即位,加任侍中衔。楚王司马玮发动政变,有意寻求支持,遭到严词拒绝。楚王司马玮死后,复任司徒、录尚书事。元康七年(297年),王浑去世,享年七十五岁,谥号为元。《唐会要》尊为“魏晋八君子”之一。', zhongyu:'钟毓(?-263年),字稚叔,颍川长社(今河南长葛市)人。三国时期魏国大臣,太傅钟繇之子、司徒钟会之兄。出身颍川钟氏,机灵敏捷,有其父之遗风。十四岁时,起家散骑侍郎。太和初年,迁黄门侍郎,袭封定陵县侯。正始年间,拜散骑常侍,迁魏郡太守,入为侍中、御史中丞、廷尉 [5] 。随平诸葛诞的淮南叛乱,拜青州刺史、后将军,都督徐州、荆州诸军事。景元四年(263年),去世,追赠车骑将军,谥号为惠,著有文集五卷(见《隋书·经籍志》及《两唐书·经籍志》),传于世。', wanglun:'王沦(233年-257年)字太冲,出身太原晋阳王姓世族(今山西省太原市),王昶三子,王浑、王深之弟,王湛之兄。醇粹简远,崇尚老庄之学,心思平淡。二十多时被举荐为孝廉,没有前往,后任大将军参军。257年,诸葛诞不满司马氏篡权而在寿春起义,王沦跟随司马昭征讨,遭遇疾疫去世,时年二十五,时人惜之,司马昭为他流泪。其兄著诔文《表德论》,表述其德行,说“因为畏惧帝王的典章制度,不能写墓志铭,于是撰写过往的事迹,刻在墓的背面。”', + wuqiao:'吴乔,西晋人物,蜀车骑将军吴懿之孙。李雄建立成汉政权,他沦落益州,长达三十年,始终不向李雄屈服。', }, dynamicTranslate:{ clanlianzhu(player){ @@ -2615,6 +2657,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_zhongyu_prefix:'族', clan_wanglun_prefix:'族', clan_xunyou_prefix:'族', + clan_wuqiao_prefix:'族', clan_wuxian:'族吴苋', clanyirong:'移荣', @@ -2708,6 +2751,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_xunyou:'族荀攸', clanbaichu:'百出', clanbaichu_info:'锁定技,当你使用一张牌结算完毕后,若你:未记录过此牌的花色和类型组合,则你记录此组合并记录一个普通锦囊牌名,否则你于本轮获得技能〖奇策〗;已记录此牌牌名,你回复1点体力或摸一张牌。', + clan_wuqiao:'族吴乔', + clanqiajue:'跒倔', + clanqiajue_info:'摸牌阶段开始时,你可以弃置一张黑色牌。若如此做,此阶段结束时,你展示手牌,若这些牌的点数和大于30,你的手牌上限-2,否则你执行一个额外的摸牌阶段。', clan_wu:'陈留·吴氏', clan_xun:'颍川·荀氏', diff --git a/character/onlyOL.js b/character/onlyOL.js index f2ad57c92..0e627cfee 100644 --- a/character/onlyOL.js +++ b/character/onlyOL.js @@ -8,12 +8,13 @@ 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']], }, characterSort:{ onlyOL:{ onlyOL_yijiang1:['ol_jianyong','ol_lingtong'], onlyOL_yijiang2:['ol_caozhang'], - onlyOL_sb:['ol_sb_jiangwei'], + onlyOL_sb:['ol_sb_jiangwei','ol_sb_guanyu'], }, }, characterIntro:{ @@ -21,6 +22,141 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterReplace:{ }, skill:{ + //OL谋关羽 + //可以和手杀谋关羽组成卧龙凤雏了 + olsbfumeng:{ + audio:2, + trigger:{global:'roundStart'}, + filter(event,player){ + return player.countCards('h'); + }, + direct:true, + async content(event,trigger,player){ + const {result:{bool,cards}}=await player.chooseCard(get.prompt2('olsbfumeng'),[1,Infinity]).set('ai',card=>{ + const player=get.event('player'); + if(player.hasSkill('olsbfumeng')) return 7-get.value(card); + return 4.5-get.value(card); + }); + if(!bool) return; + player.logSkill('olsbfumeng'); + player.addSkill('olsbfumeng_buff'); + player.addGaintag(cards,'olsbfumeng_buff'); + }, + subSkill:{ + buff:{ + charlotte:true, + mod:{ + cardname:function(card){ + if(get.itemtype(card)=='card'&&card.hasGaintag('olsbfumeng_buff')) return 'sha'; + }, + }, + }, + }, + }, + olsbguidao:{ + audio:2, + enable:'phaseUse', + filter(event,player){ + if(event.olsbguidao_num>2) return false; + const card=new lib.element.VCard({name:'juedou',storage:{olsbguidao:true}}); + return game.hasPlayer(target=>{ + return player.canUse(card,target,false); + })&&player.countCards('he',cardx=>{ + return player.canRecast(cardx); + })>=2&&player.countCards('he',cardx=>{ + return get.name(cardx,player)=='sha'&&player.canRecast(cardx); + })>=event.olsbguidao_num; + }, + onChooseToUse(event){ + if(!game.online&&!event.olsbguidao_num){ + const player=event.player,history=player.getHistory('lose',evt=>{ + return evt.getParent(2).name=='recast'&&evt.getParent(3).name=='olsbguidao'; + }); + if(!history.length) event.set('olsbguidao_num',0); + else{ + const evt=history[history.length-1]; + event.set('olsbguidao_num',evt.cards.filter(card=>get.name(card,player)=='sha').length+1); + } + } + }, + filterCard(card,player){ + const num=get.event('olsbguidao_num'); + if(ui.selected.cards.filter(cardx=>get.name(cardx,player)=='sha').length0) str+='(至少重铸'+get.cnNumber(num)+'张【杀】)'; + str+='并视为使用【决斗】'; + return str; + }, + async content(event,trigger,player){ + const target=event.target,cards=event.cards; + const card=new lib.element.VCard({name:'juedou',storage:{olsbguidao:true}}); + await player.recast(cards); + player.addTempSkill('olsbguidao_buff'); + if(player.canUse(card,target,false)) player.useCard(card,target,false); + }, + ai:{ + order(item,player){ + const card=new lib.element.VCard({name:'juedou',storage:{olsbguidao:true}}); + const order=get.order(card,player); + if(order<=0) return 0; + return order+0.1; + }, + result:{ + target(player,target){ + const card=new lib.element.VCard({name:'juedou',storage:{olsbguidao:true}}); + return get.sgn(get.attitude(player,target))*get.effect(target,card,player,player); + }, + }, + }, + subSkill:{ + buff:{ + charlotte:true, + trigger:{global:'damageBegin3'}, + filter(event,player){ + return event.card&&event.source&&event.card.storage&&event.card.storage.olsbguidao&&event.source==player; + }, + forced:true, + popup:false, + async content(event,trigger,player){ + const target=trigger.player; + const {result:{control}}=await target.chooseControl('【杀】更多','非【杀】更多') + .set('prompt','归刀:请猜测'+get.translation(player)+'手牌中【杀】与非【杀】牌数哪个更多') + .set('prompt2','若猜错,则'+get.translation(trigger.card)+'对你造成的伤害+1') + .set('ai',()=>_status.event.controls.randomGet()); + const goon1=player.countCards('h',card=>get.name(card,player)=='sha')>=player.countCards('h',card=>get.name(card,player)!='sha'); + const goon2=player.countCards('h',card=>get.name(card,player)!='sha')>=player.countCards('h',card=>get.name(card,player)=='sha'); + if((goon1&&control=='【杀】更多')||(goon2&&control=='非【杀】更多')){ + target.popup('判断正确','wood'); + game.log(target,'猜测','#g正确'); + } + else{ + target.popup('判断错误','fire'); + game.log(target,'猜测','#y错误'); + trigger.increase('num'); + } + }, + }, + }, + }, //OL谋姜维 olsbzhuri:{ audio:2, @@ -354,6 +490,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olsbranji_info:'限定技,结束阶段。若你本回合使用过牌的阶段数大于等于/小于等于体力值,你可以获得技能〖困奋〗/〖诈降〗(同时满足则都获得,以此法获得的〖困奋〗直接修改为非锁定技)。若如此做,你将手牌数调整至手牌上限或将体力值回复至体力上限,然后你不能回复体力直到你杀死角色。', kunfenx:'困奋', kunfenx_info:'结束阶段开始时,你可以失去1点体力,然后摸两张牌。', + ol_sb_guanyu:'OL谋关羽', + ol_sb_guanyu_prefix:'OL谋', + olsbfumeng:'赋梦', + olsbfumeng_info:'一轮游戏开始时,你可以令任意张手牌的牌名视为【杀】。', + olsbguidao:'归刀', + olsbguidao_info:'出牌阶段,你可以重铸两张牌并视为使用一张【决斗】(若你本回合已发动过〖归刀〗,则此次重铸的【杀】数必须比本回合上一次发动〖归刀〗重铸的【杀】数多)。目标角色受到此牌伤害时,其须猜测你手牌中牌名为【杀】的牌数量多还是牌名不为【杀】的牌数多,若其猜错,则此【决斗】对其造成的伤害+1。', onlyOL_yijiang1:'OL专属·将1', onlyOL_yijiang2:'OL专属·将2',