diff --git a/audio/die/fengxi.mp3 b/audio/die/fengxi.mp3 new file mode 100644 index 000000000..02cd9ff99 Binary files /dev/null and b/audio/die/fengxi.mp3 differ diff --git a/audio/die/heyan.mp3 b/audio/die/heyan.mp3 new file mode 100644 index 000000000..1518da98c Binary files /dev/null and b/audio/die/heyan.mp3 differ diff --git a/audio/die/qiuliju.mp3 b/audio/die/qiuliju.mp3 new file mode 100644 index 000000000..035cfa228 Binary files /dev/null and b/audio/die/qiuliju.mp3 differ diff --git a/audio/die/re_caifuren.mp3 b/audio/die/re_caifuren.mp3 new file mode 100644 index 000000000..a434e25a9 Binary files /dev/null and b/audio/die/re_caifuren.mp3 differ diff --git a/audio/die/tw_dongzhao.mp3 b/audio/die/tw_dongzhao.mp3 new file mode 100644 index 000000000..c676833f9 Binary files /dev/null and b/audio/die/tw_dongzhao.mp3 differ diff --git a/audio/die/tw_gexuan.mp3 b/audio/die/tw_gexuan.mp3 new file mode 100644 index 000000000..743634d08 Binary files /dev/null and b/audio/die/tw_gexuan.mp3 differ diff --git a/audio/skill/boyan1.mp3 b/audio/skill/boyan1.mp3 new file mode 100644 index 000000000..a21c9ba67 Binary files /dev/null and b/audio/skill/boyan1.mp3 differ diff --git a/audio/skill/boyan2.mp3 b/audio/skill/boyan2.mp3 new file mode 100644 index 000000000..1cdbfbf79 Binary files /dev/null and b/audio/skill/boyan2.mp3 differ diff --git a/audio/skill/koulve1.mp3 b/audio/skill/koulve1.mp3 new file mode 100644 index 000000000..0c9037403 Binary files /dev/null and b/audio/skill/koulve1.mp3 differ diff --git a/audio/skill/koulve2.mp3 b/audio/skill/koulve2.mp3 new file mode 100644 index 000000000..e51c0c0e8 Binary files /dev/null and b/audio/skill/koulve2.mp3 differ diff --git a/audio/skill/qingtan1.mp3 b/audio/skill/qingtan1.mp3 new file mode 100644 index 000000000..c285ab96f Binary files /dev/null and b/audio/skill/qingtan1.mp3 differ diff --git a/audio/skill/qingtan2.mp3 b/audio/skill/qingtan2.mp3 new file mode 100644 index 000000000..b373a5182 Binary files /dev/null and b/audio/skill/qingtan2.mp3 differ diff --git a/audio/skill/qljsuiren1.mp3 b/audio/skill/qljsuiren1.mp3 new file mode 100644 index 000000000..2eed3ea97 Binary files /dev/null and b/audio/skill/qljsuiren1.mp3 differ diff --git a/audio/skill/qljsuiren2.mp3 b/audio/skill/qljsuiren2.mp3 new file mode 100644 index 000000000..e7b77d8eb Binary files /dev/null and b/audio/skill/qljsuiren2.mp3 differ diff --git a/audio/skill/reqieting1.mp3 b/audio/skill/reqieting1.mp3 new file mode 100644 index 000000000..6c926a512 Binary files /dev/null and b/audio/skill/reqieting1.mp3 differ diff --git a/audio/skill/reqieting2.mp3 b/audio/skill/reqieting2.mp3 new file mode 100644 index 000000000..0b89be45c Binary files /dev/null and b/audio/skill/reqieting2.mp3 differ diff --git a/audio/skill/rexianzhou1.mp3 b/audio/skill/rexianzhou1.mp3 new file mode 100644 index 000000000..1c091a6e1 Binary files /dev/null and b/audio/skill/rexianzhou1.mp3 differ diff --git a/audio/skill/rexianzhou2.mp3 b/audio/skill/rexianzhou2.mp3 new file mode 100644 index 000000000..b413f6055 Binary files /dev/null and b/audio/skill/rexianzhou2.mp3 differ diff --git a/audio/skill/twdanfa1.mp3 b/audio/skill/twdanfa1.mp3 new file mode 100644 index 000000000..7a45c6eb7 Binary files /dev/null and b/audio/skill/twdanfa1.mp3 differ diff --git a/audio/skill/twdanfa2.mp3 b/audio/skill/twdanfa2.mp3 new file mode 100644 index 000000000..482741069 Binary files /dev/null and b/audio/skill/twdanfa2.mp3 differ diff --git a/audio/skill/twlingbao1.mp3 b/audio/skill/twlingbao1.mp3 new file mode 100644 index 000000000..1ea2fbefc Binary files /dev/null and b/audio/skill/twlingbao1.mp3 differ diff --git a/audio/skill/twlingbao2.mp3 b/audio/skill/twlingbao2.mp3 new file mode 100644 index 000000000..dd22b65d1 Binary files /dev/null and b/audio/skill/twlingbao2.mp3 differ diff --git a/audio/skill/twmiaolve1.mp3 b/audio/skill/twmiaolve1.mp3 new file mode 100644 index 000000000..08e6615bc Binary files /dev/null and b/audio/skill/twmiaolve1.mp3 differ diff --git a/audio/skill/twmiaolve2.mp3 b/audio/skill/twmiaolve2.mp3 new file mode 100644 index 000000000..aa140580e Binary files /dev/null and b/audio/skill/twmiaolve2.mp3 differ diff --git a/audio/skill/twsidao1.mp3 b/audio/skill/twsidao1.mp3 new file mode 100644 index 000000000..d21c13a7a Binary files /dev/null and b/audio/skill/twsidao1.mp3 differ diff --git a/audio/skill/twsidao2.mp3 b/audio/skill/twsidao2.mp3 new file mode 100644 index 000000000..565cd1779 Binary files /dev/null and b/audio/skill/twsidao2.mp3 differ diff --git a/audio/skill/twyingjia1.mp3 b/audio/skill/twyingjia1.mp3 new file mode 100644 index 000000000..de57ee6cb Binary files /dev/null and b/audio/skill/twyingjia1.mp3 differ diff --git a/audio/skill/twyingjia2.mp3 b/audio/skill/twyingjia2.mp3 new file mode 100644 index 000000000..b5084f6f9 Binary files /dev/null and b/audio/skill/twyingjia2.mp3 differ diff --git a/audio/skill/yachai1.mp3 b/audio/skill/yachai1.mp3 new file mode 100644 index 000000000..2e29cbb43 Binary files /dev/null and b/audio/skill/yachai1.mp3 differ diff --git a/audio/skill/yachai2.mp3 b/audio/skill/yachai2.mp3 new file mode 100644 index 000000000..342d106aa Binary files /dev/null and b/audio/skill/yachai2.mp3 differ diff --git a/audio/skill/yusui1.mp3 b/audio/skill/yusui1.mp3 new file mode 100644 index 000000000..dea39ee23 Binary files /dev/null and b/audio/skill/yusui1.mp3 differ diff --git a/audio/skill/yusui2.mp3 b/audio/skill/yusui2.mp3 new file mode 100644 index 000000000..1108202fa Binary files /dev/null and b/audio/skill/yusui2.mp3 differ diff --git a/character/extra.js b/character/extra.js index 7ed9f0fc8..cd66c6ec9 100755 --- a/character/extra.js +++ b/character/extra.js @@ -17,7 +17,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ extra_mobilezhi:['shen_guojia'], extra_mobilexin:['shen_taishici'], extra_offline:['shen_diaochan','boss_zhaoyun'], - extra_mini:['mini_zhugeliang','mini_lvbu','mini_lvmeng'], }, }, character:{ @@ -45,10 +44,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_caopi:['male','shen',5,['chuyuan','dengji'],['wei']], shen_zhenji:['female','shen',4,['shenfu','qixian'],['wei']], boss_zhaoyun:['male','shen',1,['boss_juejing','xinlonghun','zhanjiang'],['shu']], - - mini_zhugeliang:['male','shen',3,['qixing','minikuangfeng','minidawu'],['shu']], - mini_lvbu:['male','shen',6,['miniwuqian','minishenfen']], - mini_lvmeng:['male','shen',3,['shelie','minigongxin'],['wu']], }, characterIntro:{ shen_guanyu:'关羽,字云长。曾水淹七军、擒于禁、斩庞德、威震华夏,吓得曹操差点迁都躲避,但是东吴偷袭荆州,关羽兵败被害。后传说吕蒙因关羽之魂索命而死。', @@ -61,9 +56,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterReplace:{ shen_zhangliao:['shen_zhangliao','ol_zhangliao'], - shen_zhugeliang:['shen_zhugeliang','mini_zhugeliang'], - shen_lvbu:['shen_lvbu','mini_lvbu'], - shen_lvmeng:['shen_lvmeng','mini_lvmeng'], shen_zhaoyun:['shen_zhaoyun','boss_zhaoyun'], }, characterFilter:{ @@ -770,179 +762,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else player.chooseToDiscard('h',true,-num); }, }, - miniwuqian:{ - audio:'wuqian', - trigger:{ - player:'useCardToPlayered', - }, - filter:function(event,player){ - return (event.card.name=='sha'||event.card.name=='juedou')&&player==_status.currentPhase&& - player.getHistory('useCard',function(evt){ - return (evt.card.name=='sha'||evt.card.name=='juedou'); - }).indexOf(event.getParent())==0; - }, - forced:true, - logTarget:'target', - content:function(){ - trigger.target.addTempSkill('qinggang2'); - trigger.target.storage.qinggang2.add(trigger.card); - if(trigger.card.name=='sha'){ - var id=trigger.target.playerid; - var map=trigger.getParent().customArgs; - if(!map[id]) map[id]={}; - if(typeof map[id].shanRequired=='number'){ - map[id].shanRequired++; - } - else{ - map[id].shanRequired=2; - } - } - else{ - var id=trigger.target.playerid; - var idt=trigger.target.playerid; - var map=trigger.getParent().customArgs; - if(!map[idt]) map[idt]={}; - if(!map[idt].shaReq) map[idt].shaReq={}; - if(!map[idt].shaReq[id]) map[idt].shaReq[id]=1; - map[idt].shaReq[id]++; - } - }, - ai:{ - unequip_ai:true, - skillTagFilter:function(player,tag,arg){ - if(arg&&arg.name=='sha'&&!player.countUsed('sha')) return true; - return false; - } - } - }, - minishenfen:{ - audio:'ol_shenfen', - enable:'phaseUse', - skillAnimation:true, - animationColor:'metal', - limited:true, - content:function(){ - "step 0" - player.awakenSkill('minishenfen'); - player.loseHp(3); - event.delay=false; - event.targets=game.filterPlayer(); - event.targets.remove(player); - event.targets.sort(lib.sort.seat); - player.line(event.targets,'green'); - event.targets2=event.targets.slice(0); - event.targets3=event.targets.slice(0); - "step 1" - if(event.targets2.length){ - event.targets2.shift().damage('nocard'); - event.redo(); - } - "step 2" - if(event.targets.length){ - event.current=event.targets.shift() - if(event.current.countCards('e')) event.delay=true; - event.current.discard(event.current.getCards('e')).delay=false; - } - "step 3" - if(event.delay) game.delay(0.5); - event.delay=false; - if(event.targets.length) event.goto(2); - "step 4" - if(event.targets3.length){ - var target=event.targets3.shift(); - target.chooseToDiscard(4,'h',true).delay=false; - if(target.countCards('h')) event.delay=true; - } - "step 5" - if(event.delay) game.delay(0.5); - event.delay=false; - if(event.targets3.length) event.goto(4); - }, - ai:{ - order:10, - result:{ - player:function(player){ - if(player.hp<5||player.hasUnknown()) return 0; - return game.countPlayer(function(current){ - if(current!=player){ - return get.sgn(get.damageEffect(current,player,player)); - } - }); - } - } - } - }, - minikuangfeng:{ - audio:'kuangfeng', - trigger:{player:'phaseUseEnd'}, - direct:true, - filter:function(event,player){ - return player.getStorage('qixing').length>0; - }, - content:function(){ - 'step 0' - player.chooseTarget([1,Math.min(game.players.length,player.getStorage('qixing').length)],get.prompt2('minikuangfeng')).set('ai',function(target){ - var player=_status.event.player; - var eff=get.damageEffect(target,player,player); - if(target.hp==1||!ui.selected.targets.length) return eff; - return 0; - }); - 'step 1' - if(result.bool){ - event.targets=result.targets; - player.chooseButton(['请选择要移去的“星”',player.getStorage('qixing')],true,result.targets.length).set('ai',function(button){ - return -get.value(button.link); - }); - } - else event.finish(); - 'step 2' - var cards=result.links; - player.logSkill('minikuangfeng',targets); - player.$throw(cards,2000); - player.unmarkAuto('qixing',cards); - game.cardsDiscard(cards); - for(var i of targets) i.damage(); - }, - }, - minidawu:{ - audio:'dawu', - trigger:{player:'phaseJieshuBegin'}, - direct:true, - filter:function(event,player){ - return player.getStorage('qixing').length>0; - }, - content:function(){ - 'step 0' - player.chooseButton([get.prompt('minidawu'),player.getStorage('qixing')]).set('ai',function(button){ - return 1/Math.max(0.01,get.value(button.link)); - }); - 'step 1' - if(result.bool){ - var cards=result.links; - player.logSkill('minidawu'); - player.$throw(cards,2000); - player.unmarkAuto('qixing',cards); - game.cardsDiscard(cards); - player.addTempSkill('minidawu2',{player:'phaseBegin'}); - } - }, - }, - minidawu2:{ - audio:'dawu', - trigger:{player:'damageBegin3'}, - forced:true, - charlotte:true, - content:function(){ - trigger.num--; - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.tag(card,'damage')&&(card.name!='sha'||!player.hasSkill('jiu'))) return 'zerotarget'; - }, - }, - }, - }, meihun:{ audio:2, trigger:{ @@ -3674,96 +3493,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ expose:0.4, } }, - minigongxin:{ - audio:'gongxin', - audioname:['re_lvmeng','gexuan'], - trigger:{ - player:'useCardToPlayered', - target:'useCardToTargeted', - }, - usable:1, - filter:function(event,player){ - if(event.player==event.target||event.targets.length!=1) return false; - return (player==event.player?event.target:event.player).countCards('h')>0; - }, - logTarget:function(event,player){ - return player==event.player?event.target:event.player; - }, - check:function(event,player){ - return get.attitude(player,player==event.player?event.target:event.player)<=0; - }, - content:function(){ - "step 0" - var target=(player==trigger.player?trigger.target:trigger.player); - event.target=target; - event.videoId=lib.status.videoId++; - var cards=target.getCards('h'); - if(player.isOnline2()){ - player.send(function(cards,id){ - ui.create.dialog('攻心',cards).videoId=id; - },cards,event.videoId); - } - event.dialog=ui.create.dialog('攻心',cards); - event.dialog.videoId=event.videoId; - if(!event.isMine()){ - event.dialog.style.display='none'; - } - player.chooseButton().set('filterButton',function(button){ - return get.color(button.link)=='red'; - }).set('dialog',event.videoId).set('ai',function(button){ - return get.value(button.link); - }); - "step 1" - if(result.bool){ - event.card=result.links[0]; - var func=function(card,id){ - var dialog=get.idDialog(id); - if(dialog){ - for(var i=0;i刘备称汉中王时,糜芳为南郡太守,但受到关羽的轻慢。后来,因未完成供给军资的任务而被关羽责骂,心中不安。吕蒙袭取荆州时,将已经投降的傅士仁展示给糜芳,麋芳于是选择投降,导致关羽兵败被杀。此后,在吴国担任将军,并且为吴征伐。', mengda:'孟达(?-228),字子度,本字子敬,因刘备的叔父名叫刘子敬,为避讳而改字。扶风郡郿人,三国时期人物。本为刘璋属下,后降刘备。关羽围樊城、襄阳时因不发兵救关羽而触怒刘备,于是投奔曹魏。此后,劝降刘封,未果。在魏官至散骑常侍、建武将军,封平阳亭侯。此后又欲反曹魏而归蜀汉,事败而死。', - luyusheng:'陆郁生(?年-?),三国时期吴国官员陆绩之女。陆郁生的父亲陆绩是吴郡公认的才子,又是当时吴郡陆氏的领袖。陆绩赴任担任郁林太守,遂取此名。陆郁生年少的时候就定下坚贞的志向。建安二十四年(219年),陆绩早亡,她与两个兄弟陆宏、陆睿当时都只有几岁,一起返回吴县,被他们的从兄陆瑁接回抚养。13周岁的陆郁生嫁给同郡出身的张白为妻。出嫁3个月后,张白因为其兄张温一族的案件遭到连坐,被处以流刑,后死于流放地,陆郁生成为了寡妇,其后公开宣言不再改嫁,困难于生计但拒绝了所有提亲,在艰苦中从未停止服侍、照顾张白的姐妹。事情传到朝廷,皇帝褒奖陆郁生,号其为“义姑”。她的表侄姚信在文集中称赞她的义举。', wolongfengchu:'沙比武将,懒得复制粘贴,自己去看诸葛亮和庞统的介绍吧。', - huaxin:'华歆(157年-232年1月30日),字子鱼,汉族。平原郡高唐县人(今山东省高唐县)。汉末至三国曹魏初年名士、重臣。华歆早年拜太尉陈球为师,与卢植、郑玄、管宁等为同门,又与管宁、邴原共称一龙,华歆为龙头。汉灵帝时华歆被举为孝廉,任郎中,因病去官。又被大将军何进征召为尚书郎。后任豫章太守,甚得民心。孙策率军南下,华歆举郡投降,被奉为上宾。官渡之战时,被征为议郎、参司空军事。入为尚书、侍中,又代荀彧为尚书令。丞相曹操讨孙权时,授华歆为军师。后为魏王国的御史大夫。曹丕即王位,拜华歆为相国,封安乐乡侯。曹魏建立后,其相国职名改称司徒。魏明帝即位,升任太尉,晋封博平侯。太和五年十二月(232年1月),华歆去世,年七十五,谥号“敬”。有文集三十卷,今佚失,其余见《全三国文》。', caoshuang:'曹爽(?-249年2月9日),字昭伯,沛国谯县(今安徽亳州市)人。三国时期魏国权臣,大司马曹真长子。曹爽体态肥胖,凭借宗室身份,出入宫廷,交好太子曹叡。魏明帝即位,起家员外散骑侍郎,累迁城门校尉、散骑常侍,转武卫将军。太和五年(231年),袭封邵陵侯。景初三年(239年),魏明帝曹叡病危,拜大将军、假黄钺,与司马懿并为托孤大臣。少帝曹芳即位,加侍中,改封武安侯。势倾四海,声震天下。任用私人,专权乱政,侵吞公产。伐蜀失败,虚耗国力。起居逾制,软禁郭太后。正始十年,太傅司马懿发动高平陵政变,掌握魏国大权。曹爽失去大将军职务,以谋反之罪处死,夷灭三族。', zhangling:'张道陵(34年2月22日—156年),字辅汉,原名陵,道教正一道实际创立者,汉朝东汉时期丰邑(今江苏徐州丰县)人。太上老君降临蜀地,“授以三天正法,命为天师”,张道陵整合当时的:黄老派、方仙道、文始派等先秦修道团体,创立道教称正一盟威之道。后世尊称为“老祖天师”、“正一真人”、“三天扶教大法师”、高明上帝、张天师。著作《老子想尔注》,弟子有3000多人,设立24治,奠基天师道。张道陵、葛玄、许逊、萨守坚合称四大天师。张道陵创建道教的背景:当时在巴蜀一带,原有巴人信奉原始巫教,大规模的淫祀而害民。而这些祀奉鬼妖(学名为:妖邪)的法教巫师聚众敛财,无恶不作。张天师携王长、赵升二位弟子和黄帝九鼎丹经,来到北邙山修行,平定了那些祸害百姓的巫妖之教。川渝一带流传的张天师以太上老君剑印符箓大破鬼兵的故事就是以此为原型的。', caiyang:'蔡阳(?-201年),又作蔡扬,东汉丞相曹操部下武将,汝南太守。于建安六年(201)奉曹操之命攻击与刘备联合的汝南贼龚都等人,兵败被刘备所杀。明代小说《三国演义》改编为“云长擂鼓斩蔡阳”。', @@ -1637,164 +1633,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, - //陆郁生 - zhente:{ - audio:2, - trigger:{target:'useCardToTargeted'}, - logTarget:'player', - usable:1, - filter:function(event,player){ - var color=get.color(event.card); - if(player==event.player||event.player.isDead()||(get.mode()=='guozhan'&&color!='black')) return false; - var type=get.type(event.card); - return type=='basic'||type=='trick'; - }, - check:function(event,player){ - return !event.excluded.contains(player)&&get.effect(player,event.card,event.player,player)<0; - }, - content:function(){ - 'step 0' - trigger.player.chooseControl().set('choiceList',[ - '本回合内不能再使用'+get.translation(get.color(trigger.card))+'牌', - '令'+get.translation(trigger.card)+'对'+get.translation(player)+'无效', - ]).set('prompt',get.translation(player)+'发动了【贞特】,请选择一项').set('ai',function(){ - var player=_status.event.player; - var target=_status.event.getParent().player; - var card=_status.event.getTrigger().card,color=get.color(card); - if(get.effect(target,card,player,player)<=0) return 1; - var hs=player.countCards('h',function(card){ - return get.color(card,player)==color&&player.hasValueTarget(card,null,true); - }); - if(!hs.length) return 0; - if(hs>1) return 1; - return Math.random()>0.5?0:1; - }); - 'step 1' - if(result.index==0){ - trigger.player.addTempSkill('zhente2'); - trigger.player.storage.zhente2.add(get.color(trigger.card)); - trigger.player.markSkill('zhente2'); - } - else trigger.excluded.add(player); - }, - }, - zhente2:{ - mod:{ - cardEnabled:function(card,player){ - if(player.getStorage('zhente2').contains(get.color(card))) return false; - }, - cardSavable:function(card,player){ - if(player.getStorage('zhente2').contains(get.color(card))) return false; - }, - }, - charlotte:true, - onremove:true, - init:function(player,skill){ - if(!player.storage[skill]) player.storage[skill]=[]; - }, - intro:{content:'本回合内不能使用$牌'}, - }, - zhiwei:{ - audio:2, - trigger:{ - player:['enterGame','showCharacterAfter','phaseBegin'], - global:['gameDrawAfter'], - }, - direct:true, - filter:function(event,player){ - if(player.hasSkill('zhiwei2')) return false; - if(get.mode()=='guozhan') return event.name=='showCharacter'&&(event.toShow.contains('gz_luyusheng')||event.toShow.contains('luyusheng')); - return event.name!='showCharacter'; - }, - content:function(){ - 'step 0' - player.chooseTarget('请选择【至微】的目标','选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。',true,lib.filter.notMe).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(att>0) return 1+att; - return Math.random(); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('zhiwei',target); - player.storage.zhiwei2=target; - player.addSkill('zhiwei2'); - } - }, - }, - zhiwei2:{ - group:['zhiwei2_draw','zhiwei2_discard','zhiwei2_gain','zhiwei2_clear'], - charlotte:true, - onremove:true, - mark:'character', - intro:{content:'$造成伤害后你摸一张牌;$受到伤害后你弃置一张牌;你于弃牌阶段弃置牌后交给$'}, - subSkill:{ - draw:{ - audio:'zhiwei', - trigger:{global:'damageSource'}, - forced:true, - filter:function(event,player){ - return event.source==player.storage.zhiwei2; - }, - logTarget:'source', - content:function(){ - player.draw(); - }, - }, - discard:{ - audio:'zhiwei', - trigger:{global:'damageEnd'}, - forced:true, - filter:function(event,player){ - return event.player==player.storage.zhiwei2&&player.countCards('h',function(card){ - return lib.filter.cardDiscardable(card,player,'zhiwei2_discard'); - }); - }, - logTarget:'player', - content:function(){ - player.discard(player.getCards('h',function(card){ - return lib.filter.cardDiscardable(card,player,'zhiwei2_discard'); - }).randomGet()); - }, - }, - gain:{ - audio:'zhiwei', - trigger:{player:'loseAfter'}, - forced:true, - filter:function(event,player){ - return event.type=='discard'&&event.getParent('phaseDiscard').player==player&&player.storage.zhiwei2&&player.storage.zhiwei2.isIn()&&event.cards2.filterInD('d').length>0; - }, - logTarget:function(event,player){ - return player.storage.zhiwei2; - }, - content:function(){ - if(trigger.delay===false) game.delay(); - player.storage.zhiwei2.gain(trigger.cards2.filterInD('d'),'gain2'); - }, - }, - clear:{ - audio:'zhiwei', - trigger:{ - global:'die', - player:['hideCharacterEnd','removeCharacterEnd'], - }, - forced:true, - filter:function(event,player){ - if(event.name=='die') return event.player==player.storage.zhiwei2; - if(event.name=='removeCharacter') return event.toRemove=='luyusheng'||event.toRemove=='gz_luyusheng'; - return event.toHide=='luyusheng'||event.toHide=='gz_luyusheng'; - }, - content:function(){ - 'step 0' - player.removeSkill('zhiwei2'); - if(trigger.name!='die'||get.mode()!='guozhan') event.finish(); - 'step 1' - if(player.name1=='gz_luyusheng'||player.name1=='luyusheng') player.hideCharacter(0); - if(player.name2=='gz_luyusheng'||player.name2=='luyusheng') player.hideCharacter(1); - }, - }, - }, - }, //新塌顿 reluanzhan:{ audio:'luanzhan', @@ -1868,182 +1706,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.removeMark('reluanzhan',Math.ceil(player.countMark('reluanzhan')/2)); }, }, - //华歆 - spwanggui:{ - audio:'wanggui', - trigger:{source:'damageSource'}, - direct:true, - usable:1, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current.group!=player.group; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('spwanggui'),'对一名势力不同的其他角色造成1点伤害',function(card,player,target){ - return target.group!=player.group; - }).set('ai',function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player); - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('spwanggui',target); - target.damage(); - } - else player.storage.counttrigger.spwanggui--; - }, - group:'spwanggui_draw', - subSkill:{ - draw:{ - trigger:{player:'damageEnd'}, - direct:true, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt('spwanggui'),'令自己摸一张牌,或和一名势力相同的其他角色各摸一张牌',function(card,player,target){ - return target.group==player.group; - }).set('ai',function(target){ - var player=_status.event.player,att=get.attitude(player,target); - if(target!=player) att*=2; - if(target.hasSkillTag('nogain')) att/=1.7; - return att; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('spwanggui',target); - if(player==target){ - player.draw(); - event.finish(); - } - else{ - var list=[player,target].sortBySeat(); - game.asyncDraw(list); - } - } - else event.finish(); - 'step 2' - game.delayx(); - }, - }, - }, - }, - wanggui:{ - audio:2, - trigger:{ - player:'damageEnd', - source:'damageSource', - }, - direct:true, - filter:function(event,player){ - return player.hasSkill('wanggui')&&!player.hasSkill('wanggui2'); - }, - content:function(){ - 'step 0' - player.addTempSkill('wanggui2'); - var bool=player.isUnseen(2); - if(bool){ - player.chooseTarget('望归:是否对一名势力不同的角色造成1点伤害?',function(card,player,target){ - return target.isEnemyOf(player); - }).set('ai',function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player); - }); - } - else event.goto(2); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - player.logSkill('wanggui',target); - target.damage(); - } - event.finish(); - 'step 2' - player.chooseBool('望归:是否令所有与自己势力相同的角色各摸一张牌?'); - 'step 3' - if(result.bool){ - var targets=game.filterPlayer(function(current){ - return current.isFriendOf(player); - }); - targets.sortBySeat(); - player.logSkill('wanggui',targets); - game.asyncDraw(targets); - } - else event.finish(); - 'step 4' - game.delayx(); - }, - }, - wanggui2:{}, - xibing:{ - audio:2, - trigger:{global:'useCardToPlayered'}, - filter:function(event,player){ - if(player==event.player||event.targets.length!=1||event.player.countCards('h')>=event.player.hp) return false; - var bool=function(card){ - return (card.name=='sha'||get.type(card,false)=='trick')&&get.color(card,false)=='black'; - }; - if(!bool(event.card)) return false; - var evt=event.getParent('phaseUse'); - if(evt.player!=event.player) return false; - return get.mode()!='guozhan'||event.player.getHistory('useCard',function(evtx){ - return bool(evtx.card)&&evtx.getParent('phaseUse')==evt; - })[0]==event.getParent(); - }, - logTarget:'player', - check:function(event,player){ - var target=event.player; - var att=get.attitude(player,target); - var num2=Math.min(5,target.hp-target.countCards('h')); - if(num2<=0) return att<=0; - var num=target.countCards('h',function(card){ - return target.hasValueTarget(card,null,true); - }); - if(!num) return att>0; - return num>num2; - }, - content:function(){ - 'step 0' - var num=Math.min(5,trigger.player.hp-trigger.player.countCards('h')); - if(num>0) trigger.player.draw(num); - trigger.player.addTempSkill('xibing2'); - player._xibing=true; - if(get.mode()!='guozhan'||player.isUnseen(2)||trigger.player.isUnseen(2)) event.finish(); - 'step 1' - var target=trigger.player; - var players1=[player.name1,player.name2]; - var players2=[target.name1,target.name2]; - player.chooseButton(2,[ - '是否暗置自己和'+get.translation(target)+'的各一张武将牌?', - '
你的武将牌
', - [players1,'character'], - '
'+get.translation(target)+'的武将牌
', - [players2,'character'], - ]).set('players',players1).set('complexSelect',true).set('filterButton',function(button){ - return !get.is.jun(button.link)&&(ui.selected.buttons.length==0)==(_status.event.players.contains(button.link)); - }); - 'step 2' - if(result.bool){ - var target=trigger.player; - player.hideCharacter(player.name1==result.links[0]?0:1); - target.hideCharacter(target.name1==result.links[1]?0:1); - player.addTempSkill('xibing3'); - target.addTempSkill('xibing3'); - } - }, - }, - xibing2:{ - mod:{ - cardEnabled2:function(card){ - if(get.position(card)=='h') return false; - }, - }, - }, - xibing3:{ - ai:{nomingzhi:true}, - }, //卧龙凤雏双头祈福 youlong:{ enable:'chooseToUse', @@ -15870,28 +15532,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luanfeng:'鸾凤', //luanfeng_info_fullinfo:'限定技,一名角色进入濒死状态时,若其体力上限不小于你,你可令其回复至3点体力,恢复其被废除的装备栏,令其手牌补至6-X张(X为以此法恢复的装备栏数量),重置其因“改写”使用过的牌名。若该角色是你,重置你因“游龙”使用过的牌名。', luanfeng_info:'限定技,一名角色进入濒死状态时,若其体力上限不小于你,你可令其回复至3点体力,恢复其被废除的装备栏,令其手牌补至6-X张(X为以此法恢复的装备栏数量)。若该角色是你,重置你因“游龙”使用过的牌名。', - huaxin:'华歆', - wanggui:'望归', - wanggui_info:'每回合限触发一次,当你造成或受到伤害后,若你:仅明置了此武将牌,则你可对与你势力不同的一名角色造成1点伤害;武将牌均明置,则你可令与你势力相同的角色各摸一张牌。', - spwanggui:'望归', - spwanggui_info:'①当你受到伤害后,你可以摸一张牌,或和一名势力相同的其他角色各摸一张牌;②每回合限一次,当你造成伤害后,你可以对一名与你势力不同的角色造成1点伤害。', - xibing:'息兵', - xibing_info:'当一名其他角色在其出牌阶段内使用黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力值(至多摸五张)且本回合不能再使用手牌。', - xibing_info_guozhan:'当一名其他角色在其出牌阶段内使用第一张黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力(至多摸五张)值且本回合不能再使用手牌。若你与其均明置了所有武将牌,则你可以暗置你与其各一张武将牌且本回合不能再明置此武将牌。', ol_xinxianying:'辛宪英', reluanzhan:'乱战', reluanzhan_add:'乱战', reluanzhan_remove:'乱战', reluanzhan_info:'当你受到或造成伤害后,你获得一个“乱”。当你使用【杀】或黑色普通锦囊牌选择目标后,你可为此牌增加至多X个目标。当你使用这些牌指定第一个目标后,若此牌目标数小于X,则你移去X/2(向上取整)个“乱”。(X为“乱”数)', - luyusheng:'陆郁生', - zhente:'贞特', - zhente2:'贞特', - zhente_info:'每回合限一次,当你成为其他角色使用基本牌或普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用与此牌颜色相同的牌;2.此牌对你无效。 ', - zhente_info_guozhan:'每回合限一次,当你成为其他角色使用黑色基本牌或黑色普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用黑色牌;2.此牌对你无效。 ', - zhiwei:'至微', - zhiwei2:'至微', - zhiwei_info:'游戏开始时/你的回合开始时,若场上没有因此法被选择过的角色存活,则你选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。', - zhiwei_info_guozhan:'你明置此武将牌时,选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。该角色死亡时,若你的两个武将牌均明置,你暗置此武将牌。 ', zhuixi:'追袭', zhuixi_info:'锁定技,你使用【杀】的次数上限+1。', reduanbing:'短兵', diff --git a/character/sp2.js b/character/sp2.js index 39ee03579..95be4a8a3 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + luyusheng:['female','wu',3,['zhente','zhiwei']], + huaxin:['male','wei',3,['spwanggui','xibing']], re_dongbai:['female','qun',3,['relianzhu','rexiahui']], qiuliju:['male','qun',6,['koulve','qljsuiren']], heyan:['male','wei',3,['yachai','qingtan']], @@ -79,15 +81,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lvkuanglvxiang:['male','qun',4,['liehou','qigong']], leitong:['male','shu',4,['kuiji']], wulan:['male','shu',4,['wlcuorui']], - mini_sunquan:['male','wu',4,['minizhiheng','jiuyuan'],['zhu']], - mini_zuoci:['male','qun',3,['minishendao','minixinsheng']], - mini_jiangwei:['male','shu',4,['minitiaoxin','zhiji']], - mini_diaochan:['female','qun',3,['minilijian','rebiyue']], - mini_zhangchunhua:['female','wei',3,['jueqing','minishangshi']], }, characterSort:{ sp2:{ - sp_whlw:["xurong","lijue","zhangji","fanchou","guosi","duanwei","liangxing","zhangheng"], + sp_whlw:["xurong","lijue","zhangji","fanchou","guosi","duanwei","liangxing","zhangheng",'tangji'], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], sp_longzhou:["xf_tangzi","xf_huangquan","xf_sufei","sp_liuqi"], sp_zizouqi:["mangyachang","xugong","zhangchangpu"], @@ -95,14 +92,349 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_shengun:["puyuan","guanlu","gexuan","xushao"], sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie'], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], - sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui','liubian'], + sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng'], + sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui'], + sp_qihuan:['liubian','zhaozhong'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','zhaozhong','ruanyu','liangxing','re_niujin','tangji','re_dongzhao','re_hucheer','re_dongcheng','yangwan','qiuliju','heyan','re_dongbai'], - sp_mini:["mini_sunquan","mini_zuoci","mini_jiangwei","mini_diaochan","mini_zhangchunhua"], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_hucheer','re_dongcheng','yangwan','qiuliju','heyan'], } }, skill:{ + //陆郁生 + zhente:{ + audio:2, + trigger:{target:'useCardToTargeted'}, + logTarget:'player', + usable:1, + filter:function(event,player){ + var color=get.color(event.card); + if(player==event.player||event.player.isDead()||(get.mode()=='guozhan'&&color!='black')) return false; + var type=get.type(event.card); + return type=='basic'||type=='trick'; + }, + check:function(event,player){ + return !event.excluded.contains(player)&&get.effect(player,event.card,event.player,player)<0; + }, + content:function(){ + 'step 0' + trigger.player.chooseControl().set('choiceList',[ + '本回合内不能再使用'+get.translation(get.color(trigger.card))+'牌', + '令'+get.translation(trigger.card)+'对'+get.translation(player)+'无效', + ]).set('prompt',get.translation(player)+'发动了【贞特】,请选择一项').set('ai',function(){ + var player=_status.event.player; + var target=_status.event.getParent().player; + var card=_status.event.getTrigger().card,color=get.color(card); + if(get.effect(target,card,player,player)<=0) return 1; + var hs=player.countCards('h',function(card){ + return get.color(card,player)==color&&player.hasValueTarget(card,null,true); + }); + if(!hs.length) return 0; + if(hs>1) return 1; + return Math.random()>0.5?0:1; + }); + 'step 1' + if(result.index==0){ + trigger.player.addTempSkill('zhente2'); + trigger.player.storage.zhente2.add(get.color(trigger.card)); + trigger.player.markSkill('zhente2'); + } + else trigger.excluded.add(player); + }, + }, + zhente2:{ + mod:{ + cardEnabled:function(card,player){ + if(player.getStorage('zhente2').contains(get.color(card))) return false; + }, + cardSavable:function(card,player){ + if(player.getStorage('zhente2').contains(get.color(card))) return false; + }, + }, + charlotte:true, + onremove:true, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + intro:{content:'本回合内不能使用$牌'}, + }, + zhiwei:{ + audio:2, + trigger:{ + player:['enterGame','showCharacterAfter','phaseBegin'], + global:['gameDrawAfter'], + }, + direct:true, + filter:function(event,player){ + if(player.hasSkill('zhiwei2')) return false; + if(get.mode()=='guozhan') return event.name=='showCharacter'&&(event.toShow.contains('gz_luyusheng')||event.toShow.contains('luyusheng')); + return event.name!='showCharacter'; + }, + content:function(){ + 'step 0' + player.chooseTarget('请选择【至微】的目标','选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。',true,lib.filter.notMe).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0) return 1+att; + return Math.random(); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('zhiwei',target); + player.storage.zhiwei2=target; + player.addSkill('zhiwei2'); + } + }, + }, + zhiwei2:{ + group:['zhiwei2_draw','zhiwei2_discard','zhiwei2_gain','zhiwei2_clear'], + charlotte:true, + onremove:true, + mark:'character', + intro:{content:'$造成伤害后你摸一张牌;$受到伤害后你弃置一张牌;你于弃牌阶段弃置牌后交给$'}, + subSkill:{ + draw:{ + audio:'zhiwei', + trigger:{global:'damageSource'}, + forced:true, + filter:function(event,player){ + return event.source==player.storage.zhiwei2; + }, + logTarget:'source', + content:function(){ + player.draw(); + }, + }, + discard:{ + audio:'zhiwei', + trigger:{global:'damageEnd'}, + forced:true, + filter:function(event,player){ + return event.player==player.storage.zhiwei2&&player.countCards('h',function(card){ + return lib.filter.cardDiscardable(card,player,'zhiwei2_discard'); + }); + }, + logTarget:'player', + content:function(){ + player.discard(player.getCards('h',function(card){ + return lib.filter.cardDiscardable(card,player,'zhiwei2_discard'); + }).randomGet()); + }, + }, + gain:{ + audio:'zhiwei', + trigger:{player:'loseAfter'}, + forced:true, + filter:function(event,player){ + return event.type=='discard'&&event.getParent('phaseDiscard').player==player&&player.storage.zhiwei2&&player.storage.zhiwei2.isIn()&&event.cards2.filterInD('d').length>0; + }, + logTarget:function(event,player){ + return player.storage.zhiwei2; + }, + content:function(){ + if(trigger.delay===false) game.delay(); + player.storage.zhiwei2.gain(trigger.cards2.filterInD('d'),'gain2'); + }, + }, + clear:{ + audio:'zhiwei', + trigger:{ + global:'die', + player:['hideCharacterEnd','removeCharacterEnd'], + }, + forced:true, + filter:function(event,player){ + if(event.name=='die') return event.player==player.storage.zhiwei2; + if(event.name=='removeCharacter') return event.toRemove=='luyusheng'||event.toRemove=='gz_luyusheng'; + return event.toHide=='luyusheng'||event.toHide=='gz_luyusheng'; + }, + content:function(){ + 'step 0' + player.removeSkill('zhiwei2'); + if(trigger.name!='die'||get.mode()!='guozhan') event.finish(); + 'step 1' + if(player.name1=='gz_luyusheng'||player.name1=='luyusheng') player.hideCharacter(0); + if(player.name2=='gz_luyusheng'||player.name2=='luyusheng') player.hideCharacter(1); + }, + }, + }, + }, + //华歆 + spwanggui:{ + audio:'wanggui', + trigger:{source:'damageSource'}, + direct:true, + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.group!=player.group; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('spwanggui'),'对一名势力不同的其他角色造成1点伤害',function(card,player,target){ + return target.group!=player.group; + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('spwanggui',target); + target.damage(); + } + else player.storage.counttrigger.spwanggui--; + }, + group:'spwanggui_draw', + subSkill:{ + draw:{ + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('spwanggui'),'令自己摸一张牌,或和一名势力相同的其他角色各摸一张牌',function(card,player,target){ + return target.group==player.group; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target!=player) att*=2; + if(target.hasSkillTag('nogain')) att/=1.7; + return att; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('spwanggui',target); + if(player==target){ + player.draw(); + event.finish(); + } + else{ + var list=[player,target].sortBySeat(); + game.asyncDraw(list); + } + } + else event.finish(); + 'step 2' + game.delayx(); + }, + }, + }, + }, + wanggui:{ + audio:2, + trigger:{ + player:'damageEnd', + source:'damageSource', + }, + direct:true, + filter:function(event,player){ + return player.hasSkill('wanggui')&&!player.hasSkill('wanggui2'); + }, + content:function(){ + 'step 0' + player.addTempSkill('wanggui2'); + var bool=player.isUnseen(2); + if(bool){ + player.chooseTarget('望归:是否对一名势力不同的角色造成1点伤害?',function(card,player,target){ + return target.isEnemyOf(player); + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + } + else event.goto(2); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('wanggui',target); + target.damage(); + } + event.finish(); + 'step 2' + player.chooseBool('望归:是否令所有与自己势力相同的角色各摸一张牌?'); + 'step 3' + if(result.bool){ + var targets=game.filterPlayer(function(current){ + return current.isFriendOf(player); + }); + targets.sortBySeat(); + player.logSkill('wanggui',targets); + game.asyncDraw(targets); + } + else event.finish(); + 'step 4' + game.delayx(); + }, + }, + wanggui2:{}, + xibing:{ + audio:2, + trigger:{global:'useCardToPlayered'}, + filter:function(event,player){ + if(player==event.player||event.targets.length!=1||event.player.countCards('h')>=event.player.hp) return false; + var bool=function(card){ + return (card.name=='sha'||get.type(card,false)=='trick')&&get.color(card,false)=='black'; + }; + if(!bool(event.card)) return false; + var evt=event.getParent('phaseUse'); + if(evt.player!=event.player) return false; + return get.mode()!='guozhan'||event.player.getHistory('useCard',function(evtx){ + return bool(evtx.card)&&evtx.getParent('phaseUse')==evt; + })[0]==event.getParent(); + }, + logTarget:'player', + check:function(event,player){ + var target=event.player; + var att=get.attitude(player,target); + var num2=Math.min(5,target.hp-target.countCards('h')); + if(num2<=0) return att<=0; + var num=target.countCards('h',function(card){ + return target.hasValueTarget(card,null,true); + }); + if(!num) return att>0; + return num>num2; + }, + content:function(){ + 'step 0' + var num=Math.min(5,trigger.player.hp-trigger.player.countCards('h')); + if(num>0) trigger.player.draw(num); + trigger.player.addTempSkill('xibing2'); + player._xibing=true; + if(get.mode()!='guozhan'||player.isUnseen(2)||trigger.player.isUnseen(2)) event.finish(); + 'step 1' + var target=trigger.player; + var players1=[player.name1,player.name2]; + var players2=[target.name1,target.name2]; + player.chooseButton(2,[ + '是否暗置自己和'+get.translation(target)+'的各一张武将牌?', + '
你的武将牌
', + [players1,'character'], + '
'+get.translation(target)+'的武将牌
', + [players2,'character'], + ]).set('players',players1).set('complexSelect',true).set('filterButton',function(button){ + return !get.is.jun(button.link)&&(ui.selected.buttons.length==0)==(_status.event.players.contains(button.link)); + }); + 'step 2' + if(result.bool){ + var target=trigger.player; + player.hideCharacter(player.name1==result.links[0]?0:1); + target.hideCharacter(target.name1==result.links[1]?0:1); + player.addTempSkill('xibing3'); + target.addTempSkill('xibing3'); + } + }, + }, + xibing2:{ + mod:{ + cardEnabled2:function(card){ + if(get.position(card)=='h') return false; + }, + }, + }, + xibing3:{ + ai:{nomingzhi:true}, + }, //董白 relianzhu:{ enable:'phaseUse', @@ -367,6 +699,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, qingtan:{ + audio:2, enable:'phaseUse', usable:1, filter:function(event,player){ @@ -972,7 +1305,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ player.loseHp(); - player.draw(); + player.draw(2); }, }, //狼灭 @@ -1756,7 +2089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lose:false, selectCard:function(){ if(_status.event.player.storage.bazhan) return 0; - return 2; + return [1,2]; }, filterTarget:function(card,player,target){ if(player==target) return false; @@ -1764,8 +2097,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; }, prompt:function(){ - if(_status.event.player.storage.bazhan) return '获得一名其他角色的两张手牌'; - return '将两张手牌交给一名其他角色'; + if(_status.event.player.storage.bazhan) return '获得一名其他角色的至多两张手牌'; + return '将至多两张手牌交给一名其他角色'; }, delay:false, check:function(card){ @@ -1789,7 +2122,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.bazhan){ player.storage.bazhan=false; event.recover=player; - player.gainPlayerCard(target,'h',true,'visibleMove',2); + player.gainPlayerCard(target,'h',true,'visibleMove',[1,2]); } else{ player.storage.bazhan=true; @@ -2749,254 +3082,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:true, intro:{content:'本回合内不能对自己使用牌'}, }, - minishangshi:{ - audio:'shangshi', - trigger:{player:['loseAfter','changeHp']}, - frequent:true, - filter:function(event,player){ - return player.countCards('h')0; - })){ - delete player._minilijiantemp; - return [1,1]; - } - delete player._minilijiantemp; - } - } - } - }, - }, - minitiaoxin:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - audio:'tiaoxin', - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current!=player&¤t.countDiscardableCards(player,'h')>0; - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('minitiaoxin'),function(card,player,target){ - return target!=player&&target.countDiscardableCards(player,'h')>0; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(target.countCards('h')==1) att=get.sgn(att); - return -att; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('minitiaoxin',target); - player.discardPlayerCard(target,true,[1,2],'h'); - } - else event.finish(); - 'step 2' - if(result.cards&&result.cards.length&&player.countCards('h')>0){ - for(var i of result.cards){ - if(get.name(i,target)=='sha'){ - player.chooseToDiscard('h',true); - break; - } - } - } - }, - }, - minishendao:{ - audio:'rehuashen', - trigger:{ - player:"judge", - }, - direct:true, - content:function(){ - "step 0" - var str='你的'+(trigger.judgestr||'')+'判定为'+ - get.translation(trigger.player.judging[0])+',是否修改判定结果?'; - player.chooseControl('spade','heart','diamond','club','cancel2').set('prompt',str).set('ai',function(){ - //return '取消'; - var judging=_status.event.judging; - var trigger=_status.event.getTrigger(); - var res1=trigger.judge(judging); - var list=lib.suit.slice(0); - var attitude=get.attitude(player,trigger.player); - if(attitude==0) return 0; - var getj=function(suit){ - return trigger.judge({ - name:get.name(judging), - nature:get.nature(judging), - suit:suit, - number:get.number(judging), - }) - }; - list.sort(function(a,b){ - return (getj(b)-getj(a))*get.sgn(attitude); - }); - if((getj(list[0])-res1)*attitude>0) return list[0]; - return 'cancel2'; - }).set('judging',trigger.player.judging[0]); - "step 1" - if(result.control!='cancel2'){ - player.logSkill('minishendao'); - //player.line(trigger.player); - player.popup(result.control+2); - game.log(player,'将判定结果改为了','#y'+get.translation(result.control+2)); - trigger.fixedResult={ - suit:result.control, - color:get.color({suit:result.control}), - }; - } - }, - ai:{ - rejudge:true, - tag:{ - rejudge:0.3, - }, - }, - }, - minixinsheng:{ - audio:'rexinsheng', - trigger:{player:'damageEnd'}, - frequent:true, - content:function(){ - "step 0" - event.cards=get.cards(3); - game.cardsGotoOrdering(event.cards); - event.videoId=lib.status.videoId++; - game.broadcastAll(function(player,id,cards){ - var str; - if(player==game.me&&!_status.auto){ - str='新生:获取花色各不相同的牌'; - } - else{ - str='新生'; - } - var dialog=ui.create.dialog(str,cards); - dialog.videoId=id; - },player,event.videoId,event.cards); - event.time=get.utc(); - game.addVideo('showCards',player,['新生',get.cardsInfo(event.cards)]); - game.addVideo('delay',null,2); - "step 1" - var next=player.chooseButton([0,3],true); - next.set('dialog',event.videoId); - next.set('filterButton',function(button){ - for(var i=0;i0){ - game.delay(0,time); - } - "step 3" - game.broadcastAll('closeDialog',event.videoId); - var cards2=event.cards2; - player.gain(cards2,'log','gain2'); - }, - }, - minizhiheng:{ - audio:'zhiheng', - trigger:{player:'phaseUseEnd'}, - direct:true, - filter:function(event){ - return event.player.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.chooseToDiscard('h',get.prompt('minizhiheng'),'弃置任意张手牌,若如此做,将手牌摸至四张',[1,player.countCards('h')]).set('ai',function(card){ - var num=4-player.countCards('h'); - var val=6.1+Math.max(0,num); - var cs=player.countCards('h',function(card){ - return get.value(card)>=val; - }); - if(cs>=4) return 0; - return val-get.value(card) - }).logSkill='minizhiheng'; - 'step 1' - if(result.bool) player.drawTo(4); - }, - }, minsi:{ audio:2, enable:'phaseUse', @@ -5502,7 +5587,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event,player){ return player.getHistory('sourceDamage',function(evt){ return evt.isPhaseUsing(player); - }) + }).length>0; }, content:function(){ var card=get.cardPile2(function(card){ @@ -6181,26 +6266,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, audio:2, filter:function(event,player){ - return player.canUse('sha',event.target,false)&&(player.hasSha()||_status.connectMode&&player.countCards('h')); + return event.target.isIn()&&game.hasPlayer(function(current){ + return current!=event.target&¤t.canUse('sha',event.target,false); + }) }, content:function(){ - "step 0" - player.chooseToUse(get.prompt('qigong'),function(card,player,event){ - if(get.name(card)!='sha') return false; - return lib.filter.filterCard.apply(this,arguments); - },trigger.target,-1).set('addCount',false).logSkill='qigong'; + 'step 0' + player.chooseTarget(get.prompt('qigong'),'令一名角色可再对'+get.translation(trigger.target)+'使用一张【杀】',function(card,player,target){ + var source=_status.event.getTrigger().target; + return target!=source&&target.canUse('sha',source,false); + }).set('ai',function(target){ + var player=_status.event.player,card={name:'sha'},source=_status.event.getTrigger().target; + if(target.hasSha()){ + var eff1=get.effect(source,card,target,target); + if(eff1>0) return get.effect(source,card,target,player); + } + return (target!=player)?(Math.random()*get.attitude(player,target)):0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qigong',target); + target.addTempSkill('qigong_ai','chooseToUseEnd'); + target.chooseToUse('是否再对'+get.translation(trigger.target)+'使用一张【杀】?',function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },trigger.target,-1).set('addCount',false).set('oncard',function(){ + _status.event.directHit.addArray(game.players); + }); + } }, - group:'qigong_hit', - }, - qigong_hit:{ - trigger:{player:'useCard1'}, - firstDo:true, - silent:true, - filter:function(event,player){ - return event.getParent(2).name=='qigong'; - }, - content:function(){ - trigger.directHit.addArray(game.players); + subSkill:{ + ai:{ + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + return arg.card&&arg.card.name=='sha'; + }, + }, + }, }, }, //和沙摩柯一起上线的新服三将 @@ -7436,11 +7540,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event[event.name=='damage'?'player':'target']; }, content:function(){ + 'step 0' if(trigger.name=='damage'){ trigger.cancel(); trigger.player.recover(trigger.num); + event.finish(); } - else player.draw(); + else{ + game.asyncDraw([player,trigger.target]); + } + 'step 1' + game.delayx(); }, }, //管辂和葛玄 @@ -7853,16 +7963,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ if(!event.isMine()&&!event.isOnline()) game.delayx(); - event.targets=result.targets.slice(0); - for(var i=0;i阳:你可以获得一名其他角色的两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; - return '转换技,出牌阶段限一次,阴:你可以将两张手牌交给一名其他角色。阳:你可以获得一名其他角色的两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; + if(player.storage.bazhan) return '转换技,出牌阶段限一次,阴:你可以将至多两张手牌交给一名其他角色。阳:你可以获得一名其他角色的至多两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; + return '转换技,出牌阶段限一次,阴:你可以将至多两张手牌交给一名其他角色。阳:你可以获得一名其他角色的至多两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; }, }, perfectPair:{ @@ -9129,6 +9242,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dongcheng:['re_dongcheng','dongcheng'], hucheer:['re_hucheer','hucheer'], dongbai:['re_dongbai','dongbai'], + gexuan:['gexuan','tw_gexuan'], }, translate:{ lijue:"李傕", @@ -9266,7 +9380,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xpchijie_info:'每回合限一次。①当你受到其他角色使用的牌造成的伤害时,你可以令此牌对所有目标无效。②其他角色使用的牌结算完成时,若你是此牌的目标之一且此牌未造成过伤害,则你可以获得此牌对应的所有实体牌。', xpchijie2:'持节', yinju:'引裾', - yinju_info:'限定技,出牌阶段,你可以选择一名其他角色。若如此做,当你于此阶段内使用牌指定其为目标后,你摸一张牌;当你即将对其造成伤害时,防止此伤害,然后其回复等量的体力。', + yinju_info:'限定技,出牌阶段,你可以选择一名其他角色。若如此做,当你于此阶段内使用牌指定其为目标后,你与其各摸一张牌;当你即将对其造成伤害时,防止此伤害,然后其回复等量的体力。', yinju2:'引裾', spjiedao:"截刀", @@ -9312,7 +9426,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liehou:'列侯', liehou_info:'出牌阶段限一次,你可以令一名攻击范围内的角色交给你一张手牌,然后你将一张手牌交给攻击范围内的另一名角色。', qigong:'齐攻', - qigong_info:'当你使用的【杀】被【闪】抵消之后,你可以再对目标角色使用一张【杀】(不可被响应)。', + qigong_info:'当你使用的【杀】被【闪】抵消之后,你可以令一名角色再对目标角色使用一张【杀】(不可被响应)。', chunyuqiong:'淳于琼', sushou:'宿守', sushou_info:'弃牌阶段开始时,你可以摸X+1张牌(X为“粮”数),然后可以交给任意名友方角色各一张牌。', @@ -9455,23 +9569,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jijing_info:'当你受到伤害后,你可以进行一次判定,然后若你弃置任意张点数之和与判定结果点数相同的牌,你回复1点体力。', zhuide:'追德', zhuide_info:'当你死亡时,你可令一名其他角色从牌堆中获得四张名称各不相同的基本牌。', - mini_sunquan:'SP孙权', - minizhiheng:'制衡', - minizhiheng_info:'出牌阶段结束时,你可以弃置任意张手牌。若如此做,你将手牌摸至四张。', - mini_zuoci:'SP左慈', - minishendao:'神道', - minishendao_info:'你的判定牌生效前,你可以将判定结果改为任意花色。', - minixinsheng:'新生', - minixinsheng_info:'当你受到伤害后,你可以展示牌堆顶的三张牌,然后获得其中每种花色的牌各一张。', - mini_jiangwei:'SP姜维', - minitiaoxin:'挑衅', - minitiaoxin_info:'出牌阶段开始时,你可以弃置一名其他角色的两张手牌。若你以此法弃置的牌中有【杀】,则你弃置一张手牌。', - mini_diaochan:'SP貂蝉', - minilijian:'离间', - minilijian_info:'每回合限触发一次,当你使用【杀】或【决斗】指定目标后,你可以为此牌增加一个目标。', - mini_zhangchunhua:'SP张春华', - minishangshi:'伤逝', - minishangshi_info:'当你的手牌数小于X时,你可以将手牌摸至X张(X为你已损失的体力值且至少为1)', re_xinxianying:'辛宪英', rezhongjian:'忠鉴', rezhongjian2:'忠鉴', @@ -9530,7 +9627,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xianzhu_info:'锁定技,出牌阶段开始时,你令一名角色A获得“珠”。若A不为你自己,则你选择A攻击范围内的一名角色B,视为A对B使用一张【杀】。', fanyufeng:'樊玉凤', bazhan:'把盏', - bazhan_info:'转换技,出牌阶段限一次,阴:你可以将两张手牌交给一名其他角色。阳:你可以获得一名其他角色的两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到牌的角色执行一项:①回复1点体力。②复原武将牌。', + bazhan_info:'转换技,出牌阶段限一次,阴:你可以将至多两张手牌交给一名其他角色。阳:你可以获得一名其他角色的至多两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到牌的角色执行一项:①回复1点体力。②复原武将牌。', jiaoying:'醮影', jiaoying2:'醮影', jiaoying3:'醮影', @@ -9589,7 +9686,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dangzai:'挡灾', dangzai_info:'出牌阶段开始时,你可将一名其他角色判定区内的一张牌移动至你的判定区内。', liangjue:'粮绝', - liangjue_info:'锁定技,当有黑色牌进入或者离开你的判定区或装备区后,若你的体力值大于1,你失去1点体力,然后摸一张牌。', + liangjue_info:'锁定技,当有黑色牌进入或者离开你的判定区或装备区后,若你的体力值大于1,你失去1点体力,然后摸两张牌。', tangji:'唐姬', jielie:'节烈', jielie_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外摸牌时,你摸等量的牌(每回合限一次且至多摸三张);其进入濒死状态时,你可令其回复体力至1点(每轮限一次)。该角色死亡时,你弃置所有牌并失去1点体力。', @@ -9625,7 +9722,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ relianzhu:'连诛', relianzhu_info:'出牌阶段限一次,你可将一张牌正面朝上交给一名其他角色。若此牌为:红色,你摸一张牌;黑色,对方弃置两张牌或令你摸两张牌。’', rexiahui:'黠慧', - rexiahui_info:'锁定技,①当有其他角色获得你的黑色牌后,其于下次扣减体力前不能使用,打出,弃置这些牌。②一名其他角色的回合结束时,若其本回合失去过其所有“黠慧”牌,则其失去1点体力。', + rexiahui_info:'锁定技,①你的黑色牌不计入手牌上限。②当有其他角色获得你的黑色牌后,其于下次扣减体力前不能使用,打出,弃置这些牌。③一名其他角色的回合结束时,若其本回合失去过其所有“黠慧”牌,则其失去1点体力。', + huaxin:'华歆', + wanggui:'望归', + wanggui_info:'每回合限触发一次,当你造成或受到伤害后,若你:仅明置了此武将牌,则你可对与你势力不同的一名角色造成1点伤害;武将牌均明置,则你可令与你势力相同的角色各摸一张牌。', + spwanggui:'望归', + spwanggui_info:'①当你受到伤害后,你可以摸一张牌,或和一名势力相同的其他角色各摸一张牌;②每回合限一次,当你造成伤害后,你可以对一名与你势力不同的角色造成1点伤害。', + xibing:'息兵', + xibing_info:'当一名其他角色在其出牌阶段内使用黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力值(至多摸五张)且本回合不能再使用手牌。', + xibing_info_guozhan:'当一名其他角色在其出牌阶段内使用第一张黑色【杀】或黑色普通锦囊牌指定唯一角色为目标后,你可令该角色将手牌摸至当前体力(至多摸五张)值且本回合不能再使用手牌。若你与其均明置了所有武将牌,则你可以暗置你与其各一张武将牌且本回合不能再明置此武将牌。', + luyusheng:'陆郁生', + zhente:'贞特', + zhente2:'贞特', + zhente_info:'每回合限一次,当你成为其他角色使用基本牌或普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用与此牌颜色相同的牌;2.此牌对你无效。 ', + zhente_info_guozhan:'每回合限一次,当你成为其他角色使用黑色基本牌或黑色普通锦囊牌的目标后,你可令使用者选择一项:1.本回合不能再使用黑色牌;2.此牌对你无效。 ', + zhiwei:'至微', + zhiwei2:'至微', + zhiwei_info:'游戏开始时/你的回合开始时,若场上没有因此法被选择过的角色存活,则你选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。', + zhiwei_info_guozhan:'你明置此武将牌时,选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。该角色死亡时,若你的两个武将牌均明置,你暗置此武将牌。 ', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", @@ -9638,8 +9752,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_huangjin:'黄巾之乱', sp_fadong:'诸侯伐董', sp_xuzhou:'徐州风云', + sp_caizijiaren:'才子佳人', + sp_qihuan:'戚宦之争', sp_decade:'其他新服武将', - sp_mini:'欢乐三国杀', }, }; }); diff --git a/character/standard.js b/character/standard.js index 2777eadf2..146ef25a5 100755 --- a/character/standard.js +++ b/character/standard.js @@ -2706,7 +2706,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_machao:['sp_machao','old_machao'], zhugeliang:['re_zhugeliang','zhugeliang'], huangyueying:['re_huangyueying','huangyueying'], - sunquan:['re_sunquan','mini_sunquan','sunquan'], + sunquan:['re_sunquan','sunquan'], zhouyu:['re_zhouyu','zhouyu'], luxun:['re_luxun','luxun'], lvmeng:['re_lvmeng','lvmeng'], @@ -2716,7 +2716,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ganning:['re_ganning','ganning'], yj_ganning:['yj_ganning','sp_ganning'], lvbu:['re_lvbu','lvbu'], - diaochan:['re_diaochan','mini_diaochan','diaochan'], + diaochan:['re_diaochan','diaochan'], huatuo:['re_huatuo','old_huatuo','huatuo'], huaxiong:['re_huaxiong','old_huaxiong','huaxiong','ol_huaxiong'], yuanshu:['yl_yuanshu','yuanshu','re_yuanshu','old_yuanshu','ol_yuanshu'], diff --git a/character/tw.js b/character/tw.js index 4a1300255..7c0d13521 100644 --- a/character/tw.js +++ b/character/tw.js @@ -5,12 +5,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ tw:{ - tw_mobile:['tw_beimihu','nashime'], + tw_mobile:['tw_beimihu','nashime','tw_gexuan','tw_dongzhao'], tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], tw_english:['kaisa'], }, }, character:{ + tw_dongzhao:['male','wei',3,['twmiaolve','twyingjia']], + tw_gexuan:['male','qun',3,['twdanfa','twlingbao','twsidao']], tw_beimihu:['female','qun',3,['zongkui','guju','baijia','bingzhao'],['zhu']], nashime:['male','qun',3,['chijie','waishi','renshe']], tw_xiahouba:['male','shu',4,['twyanqin','twbaobian']], @@ -25,6 +27,92 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nashime:'难升米(なしめ,或なんしょうまい)是倭国大夫。景初二年六月,受女王卑弥呼之命,与都市牛利出使魏国,被魏国拜为率善中郎将。', }, card:{ + dz_mantianguohai:{ + fullskin:true, + type:'trick', + enable:true, + derivation:'tw_dongzhao', + global:['dz_mantianguohai'], + selectTarget:[1,2], + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('hej')>0; + }, + content:function(){ + player.gainPlayerCard(target,'hej',true); + }, + contentAfter:function(){ + 'step 0' + var evtx=event.getParent(); + event.targets=targets.filter(function(target){ + return target.getHistory('lose',function(evt){ + return evt.getParent(3).name==''&&evt.getParent(4)==evtx; + }) + }); + if(!event.targets.length||!player.countCards('he')) event.finish(); + 'step 1' + var target=targets.shift(); + event.target=target; + var next=player.chooseCard('he',true,'交给'+get.translation(target)+'一张牌'); + if(player.hasSkill('twyingjia')&&player.countUsed('dz_mantianguohai')==1) next.set('ai',function(card){ + if(card.name=='dz_mantianguohai') return -10; + return -get.value(card,_status.event.getParent().target); + }); + 'step 2' + if(result.bool){ + target.gain(result.cards,player,'giveAuto'); + } + 'step 3' + if(targets.length&&player.countCards('h')>0) event.goto(1); + }, + ai:{ + order:6, + tag:{ + lose:1, + loseCard:1, + }, + result:{ + target:-0.1, + }, + }, + }, + gx_lingbaoxianhu:{ + fullskin:true, + type:'equip', + subtype:'equip1', + derivation:'tw_gexuan', + distance:{attackFrom:-2}, + ai:{ + basic:{ + equipValue:4.5, + } + }, + skills:['gx_lingbaoxianhu'] + }, + gx_taijifuchen:{ + fullskin:true, + type:'equip', + subtype:'equip1', + derivation:'tw_gexuan', + distance:{attackFrom:-4}, + ai:{ + basic:{ + equipValue:4.5, + } + }, + skills:['gx_taijifuchen'] + }, + gx_chongyingshenfu:{ + fullskin:true, + type:'equip', + subtype:'equip2', + derivation:'tw_gexuan', + ai:{ + basic:{ + equipValue:7, + } + }, + skills:['gx_chongyingshenfu'] + }, }, characterFilter:{ nashime:function(mode){ @@ -35,6 +123,470 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + dz_mantianguohai:{ + mod:{ + ignoredHandcard:function(card,player){ + if(get.name(card)=='dz_mantianguohai') return true; + }, + cardDiscardable:function(card,player,name){ + if(name=='cardsDiscard'&&get.name(card)=='dz_mantianguohai') return false; + }, + }, + }, + twmiaolve:{ + audio:2, + trigger:{ + global:'gameDrawAfter', + player:'enterGame', + }, + forced:true, + locked:false, + content:function(){ + if(!lib.inpile.contains('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai'); + if(!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits=lib.suit.slice(0); + var list=_status.dz_mantianguohai_suits.randomRemove(2).map(function(i){ + return game.createCard2('dz_mantianguohai',i,get.rand(1,13)); + }); + if(list.length) player.gain(list,'gain2','log'); + }, + group:'twmiaolve_damage', + subSkill:{ + damage:{ + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + event.count=trigger.num; + 'step 1' + event.count--; + var list=['dz_mantianguohai']; + list.addArray(get.zhinangs()); + player.chooseButton([get.prompt('twmiaolve'),[list,'vcard']]).set('ai',function(button){ + if(button.link[2]=='dz_mantianguohai'&&player.countCards('hs','dz_mantianguohai')<2) return 10; + return get.value({name:button.link[2]}); + }); + 'step 2' + if(result.bool){ + player.logSkill('twmiaolve'); + var name=result.links[0][2]; + if(name=='dz_mantianguohai'){ + if(!lib.inpile.contains('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai'); + if(!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits=lib.suit.slice(0); + if(_status.dz_mantianguohai_suits.length) player.gain(game.createCard2('dz_mantianguohai',_status.dz_mantianguohai_suits.randomRemove(),get.rand(1,13)),'gain2'); + else{ + var card=get.cardPile(function(card){ + return card.name==name; + }); + if(card) player.gain(card,'gain2'); + } + player.draw(); + } + else{ + var card=get.cardPile(function(card){ + return card.name==name; + }); + if(card) player.gain(card,'gain2'); + } + if(event.count>0) event.goto(1); + } + }, + }, + }, + }, + twyingjia:{ + audio:2, + trigger:{global:'phaseEnd'}, + direct:true, + filter:function(event,player){ + if(!player.countCards('he')) return false; + var history=player.getHistory('useCard'),map={}; + for(var i of history){ + if(get.type2(i.card)=='trick'){ + if(!map[i.card.name]) map[i.card.name]=true; + else return true; + } + } + return false; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('twyingjia'), + prompt2:'弃置一张牌并令一名角色进行一个额外回合', + filterCard:lib.filter.cardDiscardable, + filterTarget:true, + ai1:function(card){ + return 8-get.value(card); + }, + ai2:function(target){ + if(target.hasJudge('lebu')) return -1; + var player=_status.event.player; + if(get.attitude(player,target)>4){ + return get.threaten(target)/Math.sqrt(target.hp+1)/Math.sqrt(target.countCards('h')+1); + } + return -1; + }, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('twyingjia',target); + player.discard(result.cards); + target.insertPhase(); + } + }, + }, + gx_lingbaoxianhu:{ + trigger:{ + source:'damageSource', + global:'dieAfter', + }, + forced:true, + equipSkill:true, + filter:function(event,player){ + if(event.name=='damage') return event.num>1; + return true; + }, + content:function(){ + player.gainMaxHp(); + player.recover(); + }, + }, + gx_taijifuchen:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + equipSkill:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'; + }, + logTarget:'target', + content:function(){ + 'step 0' + var suit=get.suit(trigger.card); + var num=trigger.target.countCards('h','shan'); + var next=trigger.target.chooseToDiscard('弃置一张牌,或不能响应'+get.translation(trigger.card)).set('ai',function(card){ + var num=_status.event.num; + if(num==0) return 0; + if(card.name=='shan') return num>1?2:0; + return (get.suit(card)!=_status.event.suit?9:6)-get.value(card); + }).set('num',num); + if(lib.suit.contains(suit)){ + next.set('prompt2','若弃置的是'+get.suit(suit)+'牌,则改为'+get.translation(player)+'获得之'); + next.set('suit',suit); + } + 'step 1' + if(result.bool){ + var card=result.cards[0]; + if(get.suit(card,trigger.target)==get.suit(trigger.card,false)&&get.position(card)=='d') player.gain(card,'gain2'); + } + else trigger.directHit.add(trigger.target); + }, + }, + gx_chongyingshenfu:{ + trigger:{player:'damageEnd'}, + forced:true, + equipSkill:true, + filter:function(event,player){ + if(!event.card||!event.card.name||player.getStorage('gx_chongyingshenfu_effect').contains(event.card.name)) return false; + if(player.hasSkillTag('unequip2')) return false; + if(event.source.hasSkillTag('unequip',false,{ + name:event.card.name, + target:player, + card:event.card, + })) return false; + return true; + }, + content:function(){ + player.addSkill('gx_chongyingshenfu_effect'); + player.markAuto('gx_chongyingshenfu_effect',[trigger.card.name]); + }, + subSkill:{ + effect:{ + trigger:{player:'damageBegin4'}, + forced:true, + equipSkill:true, + charlotte:true, + filter:function(event,player){ + if(!event.card||!event.card.name||!player.getStorage('gx_chongyingshenfu_effect').contains(event.card.name)) return false; + if(player.hasSkillTag('unequip2')) return false; + if(event.source.hasSkillTag('unequip',false,{ + name:event.card.name, + target:player, + card:event.card, + })) return false; + return true; + }, + content:function(){ + trigger.num--; + }, + onremove:true, + intro:{ + content:'受到$造成的伤害-1', + }, + }, + }, + }, + twdanfa:{ + audio:2, + trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, + filter:function(event,player){ + return player.countCards('he')>0; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseCard('he',get.prompt('twdanfa'),'将一张牌作为“丹”置于武将牌上').set('ai',function(card){ + if(player.storage.twdanfa){ + var suit=get.suit(card); + for(var i of player.storage.twdanfa){ + if(get.suit(i,false)==suit) return 4-get.value(card); + } + } + return 5.5-get.value(card); + }); + 'step 1' + if(result.bool){ + var card=result.cards[0]; + player.logSkill('twdanfa'); + game.log(player,'将',card,'放在了武将牌上'); + player.$give(card,player,false); + player.lose(card,ui.special,'toStorage'); + player.markAuto('twdanfa',result.cards); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + mark:true, + intro:{ + content:'cards', + onunmark:'throw', + }, + group:'twdanfa_draw', + subSkill:{ + draw:{ + audio:'twdanfa', + trigger:{player:'useCard'}, + forced:true, + locked:false, + filter:function(event,player){ + if(!player.storage.twdanfa||!player.storage.twdanfa.length) return false; + var suit=get.suit(event.card,false); + if(suit=='none'||player.storage.twdanfa_count&&player.storage.twdanfa_count.contains(suit)) return false; + for(var i of player.storage.twdanfa){ + if(get.suit(i,false)==suit) return true; + } + return false; + }, + content:function(){ + player.draw(); + player.addTempSkill('twdanfa_count'); + if(!player.storage.twdanfa_count) player.storage.twdanfa_count=[]; + player.storage.twdanfa_count.push(get.suit(trigger.card,false)); + }, + }, + count:{onremove:true}, + }, + }, + twlingbao:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var list=player.getStorage('twdanfa'); + if(list.length<2) return false; + var suit=get.suit(list[0],false); + for(var i=1;ifalse; + obj.selectCard=-1; + return obj; + }, + prompt:function(links){ + return lib.skill['twlingbao_'+get.color(links)].prompt; + }, + check:function(button){ + var storage=_status.event.player.storage.twdanfa.slice(0); + storage.remove(button.link); + if(storage.filter(function(card){ + return card.suit==button.link.suit; + }).length) return 1+Math.random(); + return 0; + }, + }, + subSkill:{ + red:{ + filterTarget:function(card,player,target){ + return target.isDamaged(); + }, + delay:false, + prompt:'令一名角色回复1点体力', + content:function(){ + 'step 0' + var cards=lib.skill.twlingbao_backup.cards; + player.$throw(cards,1000); + player.unmarkAuto('twdanfa',cards); + game.log(player,'将',cards,'置入了弃牌堆'); + game.delayx(); + game.cardsDiscard(cards); + 'step 1' + target.recover(); + }, + ai:{ + tag:{ + recover:1, + }, + result:{ + target:1.5, + }, + }, + }, + black:{ + filterTarget:function(card,player,target){ + return target.countDiscardableCards(player,'hej')>0; + }, + delay:false, + prompt:'弃置一名角色区域内至多两张区域不同的牌', + content:function(){ + 'step 0' + var cards=lib.skill.twlingbao_backup.cards; + player.$throw(cards,1000); + player.unmarkAuto('twdanfa',cards); + game.log(player,'将',cards,'置入了弃牌堆'); + game.delayx(); + game.cardsDiscard(cards); + 'step 1' + var num=0; + if(target.countDiscardableCards(player,'h')) num++; + if(target.countDiscardableCards(player,'e')) num++; + if(target.countDiscardableCards(player,'j')) num++; + if(num){ + player.discardPlayerCard(target,[1,Math.max(2,num)],'hej',true).set('filterButton',function(button){ + for(var i=0;i0&&target.countCards('e',function(card){ + return get.value(card,target)<=0; + })>0&&target.countCards('j',function(card){ + return get.effect(target,card,target,target)<0; + })>8) return 3; + if(target.countCards('h')>0&&target.countCards('e',function(card){ + return get.value(card,target)>0; + })>0) return -2; + return 0; + }, + }, + }, + }, + none:{ + selectTarget:2, + filterTarget:function(card,player,target){ + return target.countCards('he')>0; + }, + complexSelect:true, + targetprompt:['摸牌','弃牌'], + delay:false, + prompt:'令一名角色摸一张牌并令另一名角色弃置一张牌', + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + var cards=lib.skill.twlingbao_backup.cards; + player.$throw(cards,1000); + player.unmarkAuto('twdanfa',cards); + game.log(player,'将',cards,'置入了弃牌堆'); + game.delayx(); + game.cardsDiscard(cards); + 'step 1' + targets[0].draw(); + targets[1].chooseToDiscard('he',true); + }, + ai:{ + result:{ + target:function(player,target){ + if(!ui.selected.targets.length) return 1; + if(target.countCards('e',function(card){ + return get.value(card,target)<=0; + })>0) return 1; + return -1; + }, + }, + }, + }, + backup:{audio:'twlingbao'}, + }, + ai:{ + order:1, + result:{player:1}, + }, + }, + twsidao:{ + audio:2, + trigger:{ + global:'gameDrawAfter', + player:'enterGame', + }, + forced:true, + locked:false, + filter:function(event,player){ + return !player.storage.twsidao; + }, + content:function(){ + 'step 0' + player.chooseButton(['请选择你的初始法宝',[['gx_lingbaoxianhu','gx_taijifuchen','gx_chongyingshenfu'],'vcard']],true).set('ai',function(button){ + return button.link[2]=='gx_chongyingshenfu'?2:1; + }); + 'step 1' + if(result.bool){ + var card=game.createCard2(result.links[0][2]); + lib.inpile.add(result.links[0][2]); + player.storage.twsidao=card; + player.chooseUseTarget(card,'nopopup',true); + } + }, + group:'twsidao_equip', + subSkill:{ + equip:{ + audio:'twsidao', + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + var card=player.storage.twsidao; + return card&&card.isInPile()&&player.hasUseTarget(card); + }, + content:function(){ + player.chooseUseTarget(player.storage.twsidao,'nopopup',true); + }, + }, + }, + }, twrangyi:{ audio:2, enable:'phaseUse', @@ -595,6 +1147,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ waishi_info:' 出牌阶段限一次,你可以用至多X张牌交换一名其他角色等量的手牌(X为现存势力数),然后若其与你势力相同或手牌多于你,你摸一张牌。', renshe:'忍涉', renshe_info:'当你受到伤害后,你可以选择一项:将势力改为现存的另一个势力;或可以额外发动一次“外使”直到你的下个出牌阶段结束;或与另一名其他角色各摸一张牌。', + tw_gexuan:'TW葛玄', + twdanfa:'丹法', + twdanfa_info:'准备阶段或结束阶段开始时,你可将一张牌置于武将牌上,称为“丹”。每回合每种花色限一次,当你使用牌时,若“丹”中有与此牌花色相同的牌,则你摸一张牌。', + twlingbao:'灵宝', + twlingbao_info:'出牌阶段限一次,你可以将两张花色不同的“丹”置入弃牌堆。若这两张牌:均为红色,你令一名其他角色回复1点体力;均为黑色,你弃置一名其他角色区域内至多两张区域不同牌;颜色不同,则你令一名角色摸一张牌,并令另一名角色弃置一张牌。', + twsidao:'司道', + twsidao_info:'游戏开始时,你选择一张“法宝”置入装备区。准备阶段,若你以此法选择的法宝在牌堆/弃牌堆中,则你使用之。', + gx_lingbaoxianhu:'灵宝仙壶', + gx_lingbaoxianhu_info:'锁定技,当你造成点数大于1的伤害后,或有角色死亡后,你加1点体力上限并回复1点体力。', + gx_taijifuchen:'太极拂尘', + gx_taijifuchen_info:'锁定技,当你使用【杀】指定目标后,你令目标角色选择一项:①弃置一张牌,若此牌和【杀】花色相同,则你获得之。②其不可响应此【杀】。', + gx_chongyingshenfu:'冲应神符', + gx_chongyingshenfu_info:'锁定技,当你受到牌造成的伤害后,你令所有同名牌对你造成的伤害-1直到游戏结束。', + tw_dongzhao:'TW董昭', + twmiaolve:'妙略', + twmiaolve_info:'游戏开始时,你获得两张【瞒天过海】。当你受到1点伤害后,你可选择:①获得一张【瞒天过海】并摸一张牌。②获得一张智囊。', + twyingjia:'迎驾', + twyingjia_info:'一名角色的回合结束时,若你本回合内使用过两张或更多的同名锦囊牌,则你可弃置一张手牌并令一名角色进行一个额外回合。', + dz_mantianguohai:'瞒天过海', + dz_mantianguohai_info:'此牌不计入拥有者的手牌上限。出牌阶段,对一至两名区域内有牌的其他角色使用。你获得目标角色一张牌,然后依次交给每名目标角色各一张牌。', tw_mobile:'移动版', tw_yijiang:'一将成名TW', tw_english:'英文版', diff --git a/game/asset.js b/game/asset.js index bc2aafe48..3e75b99b0 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.8.5', + 'v1.9.110.8.5.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -758,6 +758,12 @@ window.noname_asset_list=[ 'audio/die/sp_xujing.mp3', 'audio/die/xiangchong.mp3', 'audio/die/xinzhongyong.mp3', + 'audio/die/fengxi.mp3', + 'audio/die/heyan.mp3', + 'audio/die/qiuliju.mp3', + 'audio/die/re_caifuren.mp3', + 'audio/die/tw_dongzhao.mp3', + 'audio/die/tw_gexuan.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3376,6 +3382,32 @@ window.noname_asset_list=[ 'audio/skill/tspowei2.mp3', 'audio/skill/yigui1.mp3', 'audio/skill/yigui2.mp3', + 'audio/skill/boyan1.mp3', + 'audio/skill/boyan2.mp3', + 'audio/skill/koulve1.mp3', + 'audio/skill/koulve2.mp3', + 'audio/skill/qingtan1.mp3', + 'audio/skill/qingtan2.mp3', + 'audio/skill/qljsuiren1.mp3', + 'audio/skill/qljsuiren2.mp3', + 'audio/skill/reqieting1.mp3', + 'audio/skill/reqieting2.mp3', + 'audio/skill/rexianzhou1.mp3', + 'audio/skill/rexianzhou2.mp3', + 'audio/skill/twdanfa1.mp3', + 'audio/skill/twdanfa2.mp3', + 'audio/skill/twlingbao1.mp3', + 'audio/skill/twlingbao2.mp3', + 'audio/skill/twmiaolve1.mp3', + 'audio/skill/twmiaolve2.mp3', + 'audio/skill/twsidao1.mp3', + 'audio/skill/twsidao2.mp3', + 'audio/skill/twyingjia1.mp3', + 'audio/skill/twyingjia2.mp3', + 'audio/skill/yachai1.mp3', + 'audio/skill/yachai2.mp3', + 'audio/skill/yusui1.mp3', + 'audio/skill/yusui2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -3493,6 +3525,10 @@ window.noname_asset_list=[ 'image/card/zhaoshu.png', 'image/card/tiaojiyanmei.png', 'image/card/binglinchengxiax.png', + 'image/card/dz_mantianguohai.png', + 'image/card/gx_chongyingshenfu.png', + 'image/card/gx_lingbaoxianhu.png', + 'image/card/gx_taijifuchen.png', 'image/card/bagua.png', 'image/card/baihupifeng.png', @@ -4276,6 +4312,9 @@ window.noname_asset_list=[ 'image/character/re_caifuren.jpg', 'image/character/re_dongbai.jpg', 'image/character/wenqin.jpg', + 'image/character/pengyang.jpg', + 'image/character/tw_dongzhao.jpg', + 'image/character/tw_gexuan.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/update.js b/game/update.js index 33723b4a1..7c96333bd 100644 --- a/game/update.js +++ b/game/update.js @@ -1,11 +1,11 @@ window.noname_update={ - version:'1.9.110.8.5', - update:'1.9.110.8.4.1', + version:'1.9.110.8.5.1', + update:'1.9.110.8.5', changeLog:[ - '藤川米娅', - '何晏、丘力居、董白、界蔡夫人、龙羽飞', - '国战文钦、刘巴、冯熙、苏飞', - '孙亮、高览、管辂、樊玉凤技能调整', + 'TW董昭、TW葛玄', + '国战文聘、彭羕', + '张横、吕旷吕翔、辛毗技能调整', + '移除欢乐武将', 'bug修复', ], files:[ @@ -22,15 +22,15 @@ window.noname_update={ //'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', - 'character/diy.js', - //'character/extra.js', + //'character/diy.js', + 'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', - 'character/offline.js', + //'character/offline.js', //'character/old.js', //'character/ow.js', 'character/rank.js', @@ -38,13 +38,13 @@ window.noname_update={ 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - //'character/tw.js', + 'character/tw.js', 'character/standard.js', //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', //'character/yingbian.js', - 'character/yijiang.js', + //'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', //'layout/default/layout.css', @@ -54,13 +54,13 @@ window.noname_update={ //'mode/boss.js', //'mode/brawl.js', //'mode/chess.js', - 'mode/doudizhu.js', + //'mode/doudizhu.js', 'mode/guozhan.js', //'mode/identity.js', //'mode/single.js', //'mode/stone.js', //'mode/tafang.js', - //'mode/versus.js', + 'mode/versus.js', 'game/game.js', //'game/keyWords.js', //'game/NoSleep.js', diff --git a/image/card/dz_mantianguohai.png b/image/card/dz_mantianguohai.png new file mode 100644 index 000000000..df75855ba Binary files /dev/null and b/image/card/dz_mantianguohai.png differ diff --git a/image/card/gx_chongyingshenfu.png b/image/card/gx_chongyingshenfu.png new file mode 100644 index 000000000..da5b1228f Binary files /dev/null and b/image/card/gx_chongyingshenfu.png differ diff --git a/image/card/gx_lingbaoxianhu.png b/image/card/gx_lingbaoxianhu.png new file mode 100644 index 000000000..22c0f4fee Binary files /dev/null and b/image/card/gx_lingbaoxianhu.png differ diff --git a/image/card/gx_taijifuchen.png b/image/card/gx_taijifuchen.png new file mode 100644 index 000000000..864dab8f9 Binary files /dev/null and b/image/card/gx_taijifuchen.png differ diff --git a/image/character/pengyang.jpg b/image/character/pengyang.jpg new file mode 100644 index 000000000..351e6a29d Binary files /dev/null and b/image/character/pengyang.jpg differ diff --git a/image/character/tw_dongzhao.jpg b/image/character/tw_dongzhao.jpg new file mode 100644 index 000000000..7bbc6aeb8 Binary files /dev/null and b/image/character/tw_dongzhao.jpg differ diff --git a/image/character/tw_gexuan.jpg b/image/character/tw_gexuan.jpg new file mode 100644 index 000000000..872eaf6aa Binary files /dev/null and b/image/character/tw_gexuan.jpg differ diff --git a/mode/guozhan.js b/mode/guozhan.js index d9d58edfd..c4ee93164 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -356,8 +356,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhan_quan:["gz_cuimao","gz_yujin","gz_wangping","gz_fazheng","gz_wuguotai","gz_lukang","gz_yuanshu","gz_zhangxiu"], guozhan_jun:["gz_jun_caocao","gz_jun_sunquan","gz_jun_liubei","gz_jun_zhangjiao"], guozhan_jin:['gz_jin_simayi','gz_jin_simazhao','gz_jin_simashi','gz_jin_zhangchunhua','gz_jin_wangyuanji','gz_jin_xiahouhui','gz_duyu','gz_zhanghuyuechen','gz_jin_yanghuiyu','gz_simazhou','gz_shibao','gz_weiguan','gz_zhongyan'], - guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba'], - guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin'], + guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_wenpin'], + guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'], guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan'], guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi'], guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan","gz_key_ushio","gz_sp_duyu"], @@ -401,6 +401,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_wenqin:['male','wei',4,['gzyaoqi'],['doublegroup:wei:wu']], gz_xf_sufei:['male','wu',4,['gzlianpian'],['doublegroup:wu:qun']], gz_liuba:['male','shu',3,['chouduo','guiyin']], + gz_pengyang:['male','shu',3,['jianni','xiaoba'],['doublegroup:shu:qun']], + gz_wenpin:['male','wei',4,['gzzhenwei','gzyulin']], gz_caocao:['male','wei',4,['jianxiong']], gz_simayi:['male','wei',3,['fankui','guicai']], @@ -536,6 +538,337 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //文聘 + gzzhenwei:{ + trigger:{player:'phaseDiscardBegin'}, + check:function(event,player){ + return player.hp>2&&player.needsToDiscard()>0&&game.countPlayer(function(current){ + return get.attitude(current,player)<=0; + })>game.countPlayer()/2; + }, + content:function(){ + player.addTempSkill('gzzhenwei_effect'); + player.loseHp(); + }, + subSkill:{ + effect:{ + trigger:{player:'phaseDiscardAfter'}, + forced:true, + charlotte:true, + popup:false, + filter:function(event,player){ + return player.getHistory('lose',function(evt){ + return evt.type=='discard'&&evt.cards2&&evt.cards2.length>0&&evt.getParent('phaseDiscard')==event; + }).length>0; + }, + content:function(){ + 'step 0' + var num=0; + player.getHistory('lose',function(evt){ + if(evt.type=='discard'&&evt.getParent('phaseDiscard')==trigger) num+=evt.cards2.length; + }); + event.num=num; + event.targets=game.filterPlayer(function(current){ + return current!=player; + }).sortBySeat(); + 'step 1' + var target=targets.shift(); + event.target=target; + if(target.isIn()){ + player.line(target,'green'); + target.chooseCard('h',num,'将'+get.cnNumber(num)+'张牌置入弃牌堆,或受到1点伤害').set('ai',function(card){ + var evt=_status.event.getParent(); + if(get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0; + return (8/Math.sqrt(evt.num)+evt.target.getDamagedHp())-get.value(card); + }); + } + else if(targets.length) event.redo(); + else event.finish(); + 'step 2' + if(result.bool){ + target.lose(result.cards,ui.discardPile,'visible'); + target.$throw(result.cards,1000); + game.log(target,'将',result.cards,'置入了弃牌堆'); + } + else target.damage(); + 'step 3' + game.delayx(); + if(targets.length) event.goto(1); + }, + }, + }, + ai:{ + noDieAfter2:true, + skillTagFilter:function(player,tag,target){ + return target.isFriendOf(player); + }, + }, + }, + gzyulin:{ + trigger:{player:'phaseJieshuBegin'}, + zhenfa:'siege', + direct:true, + locked:true, + filter:function(event,player){ + return game.countPlayer()>4&&game.hasPlayer(function(current){ + return player.sieged(current)&&player.canUse('sha',current,false); + }); + }, + content:function(){ + 'step 0' + var list=game.filterPlayer(function(current){ + return player.sieged(current)&&player.canUse('sha',current,false); + }); + if(player.hasSkill('gzyulin')){ + if(list.length==1) event._result={bool:true,targets:list}; + else player.chooseTarget('鱼鳞:视为对一名围攻你的角色使用【杀】',function(card,player,target){ + return _status.event.list.contains(target); + },true).set('list',list).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha',isCard:true},player,player); + }); + } + else{ + player.chooseTarget(get.prompt('gzyulin'),'视为对一名围攻你的角色使用【杀】',function(card,player,target){ + return _status.event.list.contains(target); + }).set('list',list).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha',isCard:true},player,player); + }); + } + 'step 1' + if(result.bool){ + player.useCard({name:'sha',isCard:true},result.targets[0],'gzyulin',false); + } + }, + global:'gzyulin_siege', + subSkill:{ + siege:{ + mod:{ + maxHandcard:function(player,num){ + if(game.countPlayer()<4) return; + var next=player.getNext(),prev=player.getPrevious(),siege=[]; + if(player.siege(next)) siege.push(next.getNext()); + if(player.siege(prev)) siege.push(prev.getPrevious()); + if(siege.length){ + siege.push(player); + num+=siege.filter(function(source){ + return source.hasSkill('gzyulin'); + }).length; + } + if(player.sieged()){ + if(next.hasSkill('gzyulin')) num--; + if(prev.hasSkill('gzyulin')) num--; + } + return num; + }, + }, + }, + }, + }, + //彭羕 + jianni:{ + trigger:{global:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + if(!player.isFriendOf(event.player)||!game.hasPlayer(function(current){ + return !current.isLinked(); + })) return false; + if(_status.connectMode&&player.hasSkill('jianni')) return player.countCards('h')>0; + return player.countCards('h',function(card){ + return get.type2(card,player)=='trick'; + }); + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('jianni'), + prompt2:'弃置一张锦囊牌并选择要横置的角色', + filterCard:function(card,player){ + return get.type2(card,player)=='trick'&&lib.filter.cardDiscardable(card,player,'jianni'); + }, + filterTarget:function(card,player,target){ + return !target.isLinked(); + }, + goon:function(){ + var target=trigger.player; + if(player.canUse('tao',target)&&get.effect(target,{name:'tao',isCard:true},player,player)>0) return true; + var card={name:'sha',nature:'thunder',isCard:true}; + if(game.hasPlayer(function(current){ + return current!=player&¤t!=target&&target.canUse(card,current,false)&&get.effect(current,card,target,player)>0; + })) return true; + return false; + }(), + ai1:function(card){ + if(_status.event.goon) return 7-get.value(card); + return 0; + }, + ai2:function(target){ + var player=_status.event.player; + return ((target.identity!='unknown'&&!game.hasPlayer(function(current){ + return current!=target&¤t.isFriendOf(target)&¤t.isLinked(); + }))?3:1)*(-get.attitude(target,player,player)+1); + }, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('jianni',target); + player.discard(result.cards); + } + else event.finish(); + 'step 2' + if(!target.isLinked()) target.link(); + 'step 3' + var map={},sides=[],pmap=_status.connectMode?lib.playerOL:game.playerMap,player; + for(var i of game.players){ + if(i.identity=='unknown') continue; + var added=false; + for(var j of sides){ + if(i.isFriendOf(pmap[j])){ + added=true; + map[j].push(i); + if(i==this) player=j; + break; + } + } + if(!added){ + map[i.playerid]=[i]; + sides.push(i.playerid); + if(i==this) player=i.playerid; + } + } + var num=0; + for(var i in map){ + if(map[i].filter(function(i){ + return i.isLinked(); + }).length) num++; + } + if(num>0) player.draw(num); + 'step 4' + if(trigger.player.isIn()){ + var target=trigger.player,tao=player.canUse('tao',target),sha=game.filterPlayer(function(current){ + return current!=target&¤t!=player&&target.canUse({name:'sha',nature:'thunder',isCard:true},current,false); + }); + if(sha.length){ + var next=player.chooseTarget('请选择'+get.translation(target)+'使用雷【杀】的目标',function(card,player,target){ + return _status.event.list.contains(target); + }); + if(tao){ + next.set('prompt2','或点「取消」并视为对其使用【桃】'); + next.set('goon',get.effect(target,{name:'tao',isCard:true},player,player)); + } + else{ + next.set('forced',true); + next.set('goon',0); + } + next.set('list',sha); + next.set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'sha',nature:'thunder',isCard:true},_status.event.getTrigger().player,player)-_status.event.goon; + }); + } + else if(tao) event._result={bool:false}; + else event.finish(); + } + else event.finish(); + 'step 5' + if(result.bool){ + var target=result.targets[0]; + if(player==trigger.player) player.line(target); + else{ + player.line2([trigger.player,target]); + game.delay(0.5); + } + trigger.player.useCard({name:'sha',nature:'thunder',isCard:true},target,false).animate=false; + } + else player.useCard({name:'tao',isCard:true},trigger.player); + }, + }, + xiaoba:{ + trigger:{global:'useCard'}, + forced:true, + filter:function(event,player){ + if(player!=event.player&&!event.targets.contains(player)) return false; + var type=get.type2(event.card); + if(type!='basic'&&type!='trick') return false; + var list=game.filterPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + if(!list.length) return false; + var hs=player.countCards('h'); + for(var i of list){ + if(i.countCards('h')>hs) return false; + } + return true; + }, + check:()=>false, + content:function(){ + trigger.directHit.addArray(game.players); + }, + global:'xiaoba_ai', + ai:{ + halfneg:true, + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + if(!arg.card) return false; + var type=get.type2(arg.card); + if(type!='basic'&&type!='trick') return false; + var list=game.filterPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + if(!list.length) return false; + var cards=[arg.card]; + if(arg.card.cards) cards.addArray(arg.card.cards); + cards.addArray(ui.selected.cards); + var hhs=function(card){ + return !cards.contains(card); + }; + var hs=player.countCards('h',hhs); + for(var i of list){ + if(i.countCards('h',hhs)>hs) return false; + } + return true; + }, + }, + subSkill:{ + ai:{ + ai:{ + directHit_ai:true, + skillTagFilter:function(playerx,tag,arg){ + if(!arg.card) return false; + var type=get.type2(arg.card); + if(type!='basic'&&type!='trick') return false; + var player; + if(arg.target&&arg.target.hasSkill('xiaoba')) player=arg.target; + else{ + var list=ui.selected.targets.filter(function(target){ + return target.hasSkill('xiaoba'); + }); + if(list.length) player=list[0]; + else return false; + } + var list=game.filterPlayer(function(current){ + return current!=player&¤t.isFriendOf(player); + }); + if(!list.length) return false; + var cards=[arg.card]; + if(arg.card.cards) cards.addArray(arg.card.cards); + cards.addArray(ui.selected.cards); + var hhs=function(card){ + return !cards.contains(card); + }; + var hs=player.countCards('h',hhs); + for(var i of list){ + if(i.countCards('h',hhs)>hs) return false; + } + return true; + }, + }, + }, + }, + }, //刘巴 chouduo:{ trigger:{global:'phaseJieshuBegin'}, @@ -9946,6 +10279,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ wenqin:'文钦', fengxi:'冯熙', liuba:'刘巴', + pengyang:'彭羕', + gzzhenwei:'镇卫', + gzzhenwei_info:'①弃牌阶段开始时,你可失去1点体力。然后若你于此阶段内弃置过你的牌,则你令其他角色各选择一项:1.将X张手牌置入弃牌堆(X为你于此阶段内弃置过的牌数);2.受到你造成的1点伤害。②你杀死与你势力相同的角色不执行奖惩。 ', + gzyulin:'鱼鳞', + gzyulin_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1;②是被围攻角色,则结束阶段开始时,你视为对一名围攻角色使用【杀】。', + jianni:'谏逆', + jianni_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名结算并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①视为对A使用一张【桃】;②令A视为对由你选择的另一名角色使用一张雷【杀】。', + xiaoba:'嚣跋', + xiaoba_info:'锁定技,当你使用或被使用基本牌或普通锦囊牌时,若有其他与你势力相同的角色且这些角色的手牌数均不大于你,则此牌不可被响应。', chouduo:'筹度', chouduo_info:'己方角色的结束阶段开始时,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。 ', guiyin:'归隐', @@ -11026,6 +11368,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, dieAfter2:function(source){ var that=this; + if(source&&source.hasSkillTag('noDieAfter2',null,this)) return; if(source&&source.shijun){ source.discard(source.getCards('he')); delete source.shijun; diff --git a/mode/versus.js b/mode/versus.js index 34d4d52e8..f64d46c1e 100644 --- a/mode/versus.js +++ b/mode/versus.js @@ -2640,7 +2640,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ lib.character[name][1]='wei'; return true; }); - event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','jsp_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','guotufengji','chunyuqiong'].filter(function(name){ + event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','jsp_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','re_guotufengji','chunyuqiong'].filter(function(name){ if(!Array.isArray(lib.character[name])) return false; lib.character[name][1]='qun'; return true; @@ -2716,7 +2716,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ lib.character[name][1]='wei'; return true; }); - event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','jsp_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','guotufengji','chunyuqiong'].filter(function(name){ + event.trueList=['xunchen','gaolan','sp_zhanghe','sp_xuyou','chenlin','jsp_liubei','yj_jushou','sp_shenpei','tianfeng','yuantanyuanshang','lvkuanglvxiang','xinpi','re_guotufengji','chunyuqiong'].filter(function(name){ if(!Array.isArray(lib.character[name])) return false; lib.character[name][1]='qun'; return true;