diff --git a/character/huicui.js b/character/huicui.js index 00d85ecc5..2e4d4e5e7 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -10099,6 +10099,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qiaorui:['qiaorui','tw_qiaorui'], mamidi:['mamidi','xin_mamidi'], mengyou:['mengyou','ns_mengyou'], + zhangchu:['zhangchu','jsrg_zhangchu'], }, translate:{ re_panfeng:'潘凤', diff --git a/character/jsrg.js b/character/jsrg.js index 6961f1155..5846b4da0 100644 --- a/character/jsrg.js +++ b/character/jsrg.js @@ -7,6 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg:{ jiangshanrugu_qi:['jsrg_liuhong','jsrg_hejin','jsrg_sunjian','jsrg_huangfusong','jsrg_xushao','jsrg_dongbai','jsrg_qiaoxuan','jsrg_yangbiao','jsrg_kongrong','jsrg_zhujun','jsrg_liubei','jsrg_wangyun','jsrg_liuyan','jsrg_caocao','jsrg_nanhualaoxian'], jiangshanrugu_cheng:['jsrg_sunce','jsrg_xuyou','jsrg_lvbu','jsrg_zhanghe','jsrg_zoushi','jsrg_guanyu','jsrg_chendeng','jsrg_zhenji','jsrg_zhangliao','jsrg_xugong','jsrg_chunyuqiong'], + jiangshanrugu_zhuan:['jsrg_guojia','jsrg_zhangfei','jsrg_machao','jsrg_lougui','jsrg_zhangren','jsrg_huangzhong','jsrg_xiahourong','jsrg_sunshangxiang','jsrg_pangtong','jsrg_hansui','jsrg_zhangchu','jsrg_xiahouen','jsrg_fanjiangzhangda'], }, }, character:{ @@ -38,16 +39,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg_zhangliao:['male','qun',4,['jsrgzhengbing','jsrgtuwei'],['doublegroup:wei:qun']], jsrg_xugong:['male','wu',3,['jsrgbiaozhao','jsrgyechou']], jsrg_chunyuqiong:['male','qun',4,['jsrgcangchu','jsrgshishou']], + //转 + jsrg_guojia:['male','wei',3,['jsrgqingzi','jsrgdingce','jsrgzhenfeng']], + jsrg_zhangfei:['male','shu',5,['jsrgbaohe','jsrgxushi']], + jsrg_machao:['male','qun',4,['jsrgzhuiming','mashu']], + jsrg_lougui:['male','wei',3,['jsrgshacheng','jsrgninghan']], + jsrg_zhangren:['male','qun',4,['jsrgfuni','jsrgchuanxin']], + jsrg_huangzhong:['male','shu',4,['jsrgcuifeng','jsrgdengnan']], + jsrg_xiahourong:['male','wei',4,['jsrgfenjian']], + jsrg_sunshangxiang:['female','wu',3,['jsrgguiji','jsrgjiaohao']], + jsrg_pangtong:['male','qun',3,['jsrgmanjuan','jsrgyangming']], + jsrg_hansui:['male','qun',4,['jsrgniluan','jsrghuchou','jsrgjiemeng'],['zhu']], + jsrg_zhangchu:['female','qun',3,['jsrghuozhong','jsrgrihui']], + jsrg_xiahouen:['male','wei',4,['jsrghujian','jsrgshili'],['die_audio:tw_xiahouen']], + jsrg_fanjiangzhangda:['male','wu',5,['jsrgfushan']], }, characterIntro:{ qiaoxuan:'桥玄(110年-184年6月6日),一作乔玄,字公祖。梁国睢阳县(今河南省商丘市睢阳区)人。东汉时期名臣。桥玄年轻时曾任睢阳县功曹,因坚持追究陈国相羊昌的恶行而闻名。后被举为孝廉,历任洛阳左尉、齐相及上谷、汉阳太守、司徒长史、将作大匠。汉桓帝末年,出任度辽将军,击败鲜卑、南匈奴、高句丽侵扰,保境安民。汉灵帝初年,迁任河南尹、少府、大鸿胪。建宁三年(170年),迁司空。次年,拜司徒。光和元年(178年),升任太尉。桥玄有感于国势日衰,于是称病请辞,改任太中大夫。光和七年(184年),桥玄去世,年七十五。桥玄性格刚强,不阿权贵,待人谦俭,尽管屡历高官,但不因为自己处在高位而有所私请。他为官清廉,去世后连下葬的钱都没有,被时人称为名臣。', + lougui:'娄圭,字子伯,荆州南阳郡(治今河南南阳)人。曹魏时期著名谋士、将军,娄圭年轻时与曹操有交情,曾经随曹操平定冀州,南征刘表,击破马超,立有功劳,连曹操都感叹他的计谋。 后来曹操和他的儿子们一起出去游玩,娄圭当时也一起随行。因言语不当,被南郡(治今湖北荆州)人习授举报,曹操认为有意诽谤,遭杀害。在小说《三国演义》里,娄圭被设定为京兆人(今陕西西安),隐居终南山,道号“梦梅居士”。于第59回登场。', + xiahourong:'夏侯荣(207年—219年) ,字幼权,名将夏侯渊之子。建安二十四年(219年)汉中之战,父亲夏侯渊战死后,夏侯荣不愿逃跑,随后拔剑冲入敌阵,战死。', jsrg_caocao:'初平元年二月,董卓徙天子都长安,焚洛阳宫室,众诸侯畏卓兵强,莫敢进。操怒斥众人:“为人臣而临此境,当举义兵以诛暴乱,大众已合,诸君何疑?此一战而天下定矣!”遂引兵汴水,遇卓将徐荣,大破之。操迎天子,攻吕布,伐袁术,安汉室,拜为征西将军。是时,袁绍兼四州之地,将攻许都。操欲扫清寰宇,兴复汉室,遂屯兵官渡。既克绍,操曰:“若天命在吾,吾为周文王矣。”', jsrg_sunce:'建安五年,操、绍相拒于官渡,孙策欲阴袭许昌,迎汉帝,遂密治兵,部署诸将。未发,会为许贡门客所刺,将计就计,尽托江东于权,诈死以待天时。八月,操、绍决战,孙策亲冒矢石,斩将刈旗,得扬、豫之地。曹操败走冀、青,刘备远遁荆、益。而后历时七年,孙策三分天下已有其二,帝于洛阳,建霸王未竟之功业。权表求吴王,封为仲帝,共治天下。', + jsrg_guojia:'初平元年二月,郭嘉拜见袁绍,闻曹操怒斥众诸侯,乃对曰:“董卓于汴水或有埋伏,慎之!”曹操未从,果败于徐荣。三月,曹操与郭嘉论天下事:“使孤成大业者,必此人也。”郭嘉从破袁绍,讨谭、尚,连战数克,计定辽东。时年三十八,征乌桓归途郭嘉因劳染疾,命悬之际竟意外饮下柳皮醋水而愈。建安十三年,曹操屯兵赤壁,郭嘉识破连环之计,议上中下三策,可胜刘备。尚未献策,曹操便决意采纳上策,“奉孝之才,足胜孤百倍,卿言上策,如何不取?”由此,赤壁战后曹操尽得天下。' }, characterTitle:{ }, perfectPair:{}, card:{ + ying:{ + audio:true, + fullskin:true, + type:'basic', + enable:false, + global:'ying_destory', + getYing:function(count){ + var cards=[]; + if(typeof count!='number') count=1; + while(count--){ + cards.push(game.createCard('ying','spade',1)); + } + return cards; + }, + ai:{ + basic:{ + useful:0, + value:0, + }, + }, + }, }, characterFilter:{ jsrg_xushao:function(mode){ @@ -55,6 +94,1758 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //江山如故·转 + //白牌 + ying_destory:{ + trigger:{ + player:'loseAfter', + global:['loseAsyncAfter','cardsDiscardAfter','equipAfter'], + }, + cardSkill:true, + forced:true, + popup:false, + filter:function(event,player){ + return event.getd().some(i=>get.name(i,false)=='ying'&&get.position(i,true)=='d'); + }, + content:function(){ + var cards=trigger.getd().filter(i=>get.name(i,false)=='ying'&&get.position(i,true)=='d'); + game.cardsGotoSpecial(cards); + game.log(cards,'被移出了游戏'); + }, + }, + //404郭嘉 + jsrgqingzi:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return game.hasPlayer(current=>{ + if(current==player) return false; + return current.hasCard(card=>{ + return lib.filter.canBeDiscarded(card,player,current); + },'e'); + }) + }, + derivation:'xinshensu', + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('jsrgqingzi'),'弃置任意名其他角色装备区里的一张牌,然后令这些角色获得〖神速〗直到你的下回合开始',[1,Infinity],(card,player,target)=>{ + return target!=player&&target.hasCard(card=>{ + return lib.filter.canBeDiscarded(card,player,target); + },'e'); + }).set('ai',target=>{ + var player=_status.event.player; + return target.hasCard(card=>{ + return lib.filter.canBeDiscarded(card,player,target)&&get.value(card,target)>3||target.hp==1&&get.value(card,target)>0; + }); + }); + 'step 1' + if(result.bool){ + var targets=result.targets.slice(); + targets.sortBySeat(); + event.targets=targets; + event.num=0; + player.logSkill('jsrgqingzi',targets); + player.addSkill('jsrgqingzi_clear'); + } + else event.finish(); + 'step 2' + var target=targets[num]; + if(target.hasCard(card=>{ + return lib.filter.canBeDiscarded(card,player,target); + },'e')){ + player.discardPlayerCard(target,'e',true); + target.addAdditionalSkill('jsrgqingzi_'+player.playerid,'xinshensu'); + player.markAuto('jsrgqingzi_clear',[target]); + } + event.num++; + if(event.num0; + }, + logTarget:function(event,player){ + if(event.name!='phase') return event.player; + return player.getStorage('jsrgqingzi_clear'); + }, + content:function(){ + 'step 0' + var targets=player.getStorage('jsrgqingzi_clear'); + if(trigger.name=='die'&&player==trigger.player){ + for(var target of targets){ + target.removeAdditionalSkill(`jsrgqingzi_${player.playerid}`); + } + player.removeSkill('jsrgqingzi_clear'); + event.finish(); + return; + } + if(trigger.name=='phase') event.targets=targets.slice(0).sortBySeat(); + else event.targets=[trigger.player]; + 'step 1' + var target=targets.shift(); + var storage=player.getStorage('jsrgqingzi_clear'); + if(storage.contains(target)){ + storage.remove(target); + target.removeAdditionalSkill(`jsrgqingzi_${player.playerid}`); + } + if(targets.length>0){ + event.redo(); + } + else{ + player.removeSkill('jsrgqingzi_clear'); + } + }, + }, + }, + }, + jsrgdingce:{ + audio:2, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + if(!event.source||!event.source.isIn()) return false; + return player.hasCard(card=>{ + return lib.filter.cardDiscardable(card,player,'jsrgdingce'); + }); + }, + direct:true, + content:function(){ + 'step 0' + var target=trigger.source; + event.target=target; + player.chooseToDiscard(get.prompt('jsrgdingce',target),'弃置你与其的各一张手牌。若这两张牌颜色相同,你视为使用一张【洞烛先机】。').set('ai',card=>{ + if(_status.event.goon) return 6-get.value(card); + return 0; + }).set('goon',get.attitude(player,target)<0||player.getCards('h').concat(target.getCards('h')).filter(card=>{ + return get.value(card)<5.5; + }).length>=2).set('logSkill',['jsrgdingce',target]); + 'step 1' + if(result.bool){ + event.card=result.cards[0]; + if(target.countDiscardableCards(player,'h')){ + var next=player.discardPlayerCard(target,'h',true); + if(target==player) next.set('ai',button=>{ + var card=button.link; + return (get.color(card,false)==_status.event.color?7.5:5)-get.value(card); + }).set('color',get.color(event.card,false)); + } + else event.finish(); + } + else event.finish(); + 'step 2' + if(result.bool){ + var card=result.cards[0]; + if(get.color(event.card,false)==get.color(card,false)){ + game.delayex(); + player.chooseUseTarget('dongzhuxianji',true); + } + } + }, + + }, + jsrgzhenfeng:{ + audio:2, + enable:'phaseUse', + locked:false, + filter:function(event,player){ + if(!event.jsrgzhenfeng) return false; + return event.jsrgzhenfeng.some(info=>event.filterCard({ + name:info[2], + nature:info[3], + storage:{jsrgzhenfeng:true}, + isCard:true, + },player,event)); + }, + onChooseToUse:function(event){ + if(!event.jsrgzhenfeng&&!game.online){ + var str=''; + game.countPlayer(current=>{ + current.getSkills(null,false,false).forEach(skill=>{ + var info=get.info(skill); + if(!info||info.charlotte) return; + var translation=get.skillInfoTranslation(skill,current); + str+=translation; + }); + }); + event.set('jsrgzhenfeng',lib.skill.jsrgzhenfeng.getInclusion(str,null,event.player)); + } + }, + getInclusion:function(str,checkCard,player){ + var list=[]; + var names=Object.keys(lib.card); + for(var name of names){ + var type=get.type(name); + if(!['basic','trick'].includes(type)) continue; + if(player&&player.getStorage('jsrgzhenfeng_effect').includes(type)) continue; + var reg=`【${get.translation(name)}】`; + if(name=='sha'){ + if(str.includes(reg)){ + if(checkCard&&checkCard.name==name) return true; + list.push([type,'',name]); + } + for(var nature of lib.inpile_nature){ + var reg1=`【${get.translation(nature)+get.translation(name)}】`,reg2=`${get.translation(nature)}【${get.translation(name)}】`; + if(str.includes(reg1)||str.includes(reg2)){ + if(checkCard&&checkCard.name==name&&checkCard.nature==nature) return true; + list.push([type,'',name,nature]); + } + } + } + else{ + if(!str.includes(reg)) continue; + if(checkCard&&checkCard.name==name) return true; + list.push([type,'',name]); + } + } + return list; + }, + chooseButton:{ + dialog:function(event,player){ + var list=event.jsrgzhenfeng.filter(info=>{ + return event.filterCard({ + name:info[2], + nature:info[3], + storage:{jsrgzhenfeng:true}, + isCard:true, + },player,event); + }); + return ui.create.dialog('针锋',[list,'vcard']); + }, + filter:function(button,player){ + return _status.event.getParent().filterCard({ + name:button.link[2], + nature:button.link[3], + storage:{jsrgzhenfeng:true}, + isCard:true, + },player,_status.event.getParent()); + }, + check:function(button){ + var player=_status.event.player; + var card={ + name:button.link[2], + nature:button.link[3], + storage:{jsrgzhenfeng:true}, + isCard:true, + }; + var eff=player.getUseValue(card); + if(['wugu','zhulu_card','yiyi','lulitongxin','lianjunshengyan','diaohulishan'].includes(button.link[2])) eff/=5; + var info=get.info(card); + if(info.toself){ + var str=player.getSkills(null,false,false).map(skill=>{ + var info=get.info(skill); + if(!info||info.charlotte) return; + return get.skillInfoTranslation(skill,player); + }).join('\n'); + if(lib.skill.jsrgzhenfeng.getInclusion(str,card)) eff+=get.damageEffect(player,player,player); + } + return eff; + }, + backup:function(links,player){ + return { + audio:'jsrgzhenfeng', + filterCard:()=>false, + selectCard:-1, + popname:true, + viewAs:{ + name:links[0][2], + nature:links[0][3], + storage:{jsrgzhenfeng:true}, + isCard:true, + }, + precontent:function(){ + delete event.result.skill; + player.logSkill('jsrgzhenfeng'); + event.getParent().addCount=false; + player.addTempSkill('jsrgzhenfeng_effect','phaseUseAfter'); + player.markAuto('jsrgzhenfeng_effect',[get.type(event.result.card)]); + }, + } + }, + prompt:function(links,player){ + return '视为使用一张'+(get.translation(links[0][3])||'')+get.translation(links[0][2]); + } + }, + mod:{ + cardUsable:function(card){ + if(card.storage&&card.storage.jsrgzhenfeng) return Infinity; + }, + targetInRange:function(card){ + if(card.storage&&card.storage.jsrgzhenfeng) return Infinity; + }, + }, + ai:{ + order:1, + result:{ + player:1, + }, + }, + subSkill:{ + effect:{ + audio:'jsrgzhenfeng', + trigger:{ + global:'useCardToBegin', + }, + charlotte:true, + forced:true, + onremove:true, + filter:function(event,player){ + if(!event.card.storage||!event.card.storage.jsrgzhenfeng) return false; + var str=event.target.getSkills(null,false,false).map(skill=>{ + var info=get.info(skill); + if(!info||info.charlotte) return; + return get.skillInfoTranslation(skill,event.target); + }).join('\n'); + return lib.skill.jsrgzhenfeng.getInclusion(str,event.card); + }, + logTarget:'target', + content:function(){ + trigger.target.damage(); + } + }, + }, + }, + //张飞 + jsrgbaohe:{ + audio:2, + trigger:{global:'phaseUseEnd'}, + filter:function(event,player){ + return player.countCards('he')>=2&&game.hasPlayer(current=>{ + return current.inRange(event.player)&&player.canUse('sha',current,false); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseToDiscard(get.prompt2('jsrgbaohe'),2,'he').set('ai',card=>{ + var val=_status.event.val; + if(val>20) return 6-get.value(card); + if(val>0) return 4-get.value(card); + return 0; + }).set('val',game.filterPlayer(current=>{ + return current.inRange(trigger.player)&&player.canUse('sha',current,false); + }).map(i=>get.effect(i,{name:'sha'},player,player)).reduce((p,c)=>{ + return p+c; + },0)).set('logSkill','jsrgbaohe'); + 'step 1' + if(result.bool){ + var targets=game.filterPlayer(current=>{ + return current.inRange(trigger.player)&&player.canUse('sha',current,false); + }); + if(targets.length){ + player.useCard({name:'sha',isCard:true,storage:{jsrgbaohe:0}},targets,false); + player.addTempSkill('jsrgbaohe_add'); + } + } + }, + subSkill:{ + add:{ + audio:'jsrgbaohe', + trigger:{ + global:'useCard', + }, + charlotte:true, + forced:true, + filter:function(event,player){ + let evt=event.getParent(3),respondTo=event.respondTo; + if(evt.name!='useCard'||!Array.isArray(respondTo)||!respondTo[1].storage||typeof respondTo[1].storage.jsrgbaohe!='number') return false; + return evt.targets.length>evt.num+1; + }, + logTarget:function(event){ + let evt=event.getParent(3); + return evt.targets.slice(evt.num+1); + }, + content:function(){ + 'step 0' + var evt=trigger.getParent(3); + var targets=evt.targets.slice(evt.num+1); + var map=trigger.customArgs; + for(var target of targets){ + var id=target.playerid; + if(!map[id]) map[id]={}; + if(typeof map[id].extraDamage!='number'){ + map[id].extraDamage=0; + } + map[id].extraDamage++; + } + game.delayx(); + }, + } + }, + }, + jsrgxushi:{ + audio:2, + enable:'phaseUse', + usable:1, + filterCard:true, + filterTarget:lib.filter.notMe, + selectCard:[1,Infinity], + selectTarget:[1,Infinity], + position:'he', + filterOk:function(){ + return ui.selected.cards.length==ui.selected.targets.length; + }, + check:function(card){ + return 5-get.value(card); + }, + prompt:'按顺序选择卡牌和角色,并将卡牌交给对应顺序的角色。然后你获得两倍数量的【影】。', + complexSelect:true, + multitarget:true, + multiline:true, + discard:false, + lose:false, + delay:false, + contentBefore:function(){ + event.getParent()._jsrgxushi_targets=targets.slice(); + }, + content:function(){ + 'step 0' + var targets=event.getParent()._jsrgxushi_targets; + var list=[]; + for(var i=0;i{ + var player=get.player(),target=get.event('target'),att=get.attitude(player,target)>0?1:-1; + var list=get.event('controls').map(i=>[i,target.getCards('he').map(get.value).reduce((p,c)=>p+c)]).sort((a,b)=>{ + return att*(a[1]-b[1]); + }); + return list[0][0]; + }).set('target',target); + var color=result.control; + if(color=='cancel2'){ + event.finish(); + return; + } + player.logSkill('jsrgzhuiming',target); + game.log(player,'声明了',color); + var prompt=`追命:${get.translation(player)}声明了${get.translation(color)}`,prompt2=`请弃置任意张牌,然后其展示你一张牌,若此牌颜色为${get.translation(color)},此【杀】不计入次数限制、不可被响应且伤害+1` + yield target.chooseToDiscard(prompt,prompt2,[1,Infinity],'he',true).set('ai',card=>{ + var color=get.event('color'),player=get.player(); + if(get.position(card)=='e'&&get.color(card)==color) return 2; + if(player.getHp()<=2&&get.color(card)==color) return Math.random()<0.5; + return 0; + }).set('color',color); + if(target.countCards('he')) result=yield player.choosePlayerCard(target,'he',true).set('ai',button=>{ + var color=get.event('color'),att=get.event('att'); + if(get.position(button.link)=='e'&&get.color(button.link)==color){ + return 100*att; + } + return 1+Math.random(); + }).set('color',color).set('att',get.attitude(player,target)>0?1:-1); + else{ + event.finish(); + return; + } + var card=result.cards[0]; + player.showCards(card,`${get.translation(target)}因【追命】被展示`); + if(get.color(card)==color){ + trigger.directHit.addArray(game.players); + var evt=trigger.getParent(); + if(evt.addCount!==false){ + evt.addCount=false; + player.getStat().card.sha--; + } + var map=trigger.getParent().customArgs; + var id=target.playerid; + if(!map[id]) map[id]={}; + if(typeof map[id].extraDamage!='number'){ + map[id].extraDamage=0; + } + map[id].extraDamage++; + game.log(trigger.card,'不计入次数限制、不可被响应、伤害+1'); + } + } + }, + //娄圭 + jsrgshacheng:{ + audio:2, + trigger:{global:'useCardAfter'}, + filter:function(event,player){ + if(event.card.name!='sha') return false; + return event.targets.some(i=>i.isIn()&&i.hasHistory('lose'))&&player.getExpansions('jsrgshacheng').length; + }, + direct:true, + group:'jsrgshacheng_build', + content:function(){ + 'step 0' + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + var targets=trigger.targets.filter(i=>i.isIn()&&i.hasHistory('lose')); + player.chooseTarget(get.prompt('jsrgshacheng'),'令一名目标角色摸X张牌,然后移去一张“城”(X为对应角色本回合失去过的牌数且至多为5)',(card,player,target)=>{ + return get.event('targets').includes(target); + }).set('targets',targets).set('ai',target=>{ + return target==get.event('targetx')?1:0; + }).set('targetx',(()=>{ + var info=targets.map(target=>{ + var att=get.attitude(player,target); + return [target,att*Math.sqrt(target.getHistory('lose').map(evt=>evt.cards.length).reduce((p,c)=>p+c))]; + }).sort((a,b)=>{ + return b[1]-a[1]; + })[0]; + if(info[1]<0) return null; + return info[0]; + })()); + 'step 1' + if(result.bool){ + event.target=result.targets[0]; + player.chooseButton([`沙城:移去一张“城”`,player.getExpansions('jsrgshacheng')],true); + } + else{ + if(_status.connectMode){game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});} + event.finish(); + } + 'step 2' + if(_status.connectMode){game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});} + if(result.bool){ + player.logSkill('jsrgshacheng',target); + player.loseToDiscardpile(result.links); + target.draw(Math.min(5,target.getHistory('lose').map(evt=>evt.cards.length).reduce((p,c)=>p+c))); + } + }, + marktext:'城', + intro:{ + content:'expansion', + markcount:'expansion', + }, + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + subSkill:{ + build:{ + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + locked:false, + filter:function(event,player){ + return (event.name!='phase'||game.phaseNumber==0); + }, + content:function(){ + var cards=get.cards(2); + player.addToExpansion(cards,'gain2').gaintag.add('jsrgshacheng'); + }, + } + } + }, + jsrgninghan:{ + audio:2, + trigger:{global:'damageEnd'}, + filter:function(event,player){ + if(!event.hasNature('ice')) return false; + return event.cards&&event.cards.filterInD().length; + }, + forced:true, + global:'jsrgninghan_frozen', + content:function(){ + var cards=trigger.cards.filterInD(); + player.addToExpansion(cards,'gain2').gaintag.add('jsrgshacheng'); + }, + subSkill:{ + frozen:{ + mod:{ + cardnature:function(card,player){ + if(get.suit(card)=='club'&&card.name=='sha') return 'ice'; + }, + } + }, + }, + }, + //张任 + jsrgfuni:{ + audio:2, + trigger:{global:'roundStart'}, + group:['jsrgfuni_unlimit','jsrgfuni_zero'], + forced:true, + direct:true, + content:function*(event,map){ + var player=map.player,trigger=map.trigger; + var count=Math.ceil(game.countPlayer()/2); + var result=yield player.chooseTarget(get.prompt('jsrgfuni'),`选择至多${get.cnNumber(count)}名角色,令这些角色获得共计${get.cnNumber(count)}张【影】`,[1,count]).set('ai',target=>{ + return get.attitude(get.player(),target); + }); + if(result.bool){ + var targets=result.targets.slice().sortBySeat(_status.currentPhase); + player.logSkill('jsrgfuni',targets); + } + else event.finish(); + yield null; + var num=count/targets.length; + if(num==1||num==count){ + result={ + bool:true, + links:targets.map(current=>{ + return `${num}|${current.playerid}`; + }), + }; + } + else{ + var dialog=[ + '伏匿:选择每名角色要获得的【影】数', + ]; + var len=count-targets.length+1; + for(var target of targets){ + dialog.addArray([ + `
${get.translation(target)}
`, + [Array.from({length:len}).map((_,i)=>{ + return [`${i+1}|${target.playerid}`,get.cnNumber(i+1,true)]; + }),'tdnodes'], + ]); + } + result=yield player.chooseButton(dialog,true).set('filterButton',button=>{ + var total=0,info=button.link.split('|'); + var numFix=0; + for(var buttonx of ui.selected.buttons){ + var infox=buttonx.link.split('|'); + var num=parseInt(infox[0]); + total+=num; + if(infox[1]==info[1]) numFix=num; + } + return total+parseInt(info[0])-numFix<=get.event('count'); + }).set('count',count).set('filterOk',()=>{ + var total=0; + for(var buttonx of ui.selected.buttons){ + total+=parseInt(buttonx.link.split('|')[0]); + } + return total==get.event('count'); + }).set('selectButton',()=>{ + return [get.event('len'),Math.max(get.event('len'),ui.selected.buttons.length)+1]; + }).set('len',targets.length).set('custom',{ + add:{}, + replace:{ + button:function(button){ + if(!_status.event.isMine()) return; + if(button.classList.contains('selectable')==false) return; + if(button.classList.contains('selected')){ + ui.selected.buttons.remove(button); + button.classList.remove('selected'); + if(_status.multitarget||_status.event.complexSelect){ + game.uncheck(); + game.check(); + } + } + else{ + var current=button.parentNode.querySelector('.selected'); + if(current){ + ui.selected.buttons.remove(current); + current.classList.remove('selected'); + } + button.classList.add('selected'); + ui.selected.buttons.add(button); + } + game.check(); + }, + } + }).set('processAI',()=>{ + return get.event('aiResult'); + }).set('aiResult',(()=>{ + var result=targets.map(i=>{ + return [i==player?2:1,i.playerid]; + }); + var rest=count-targets.length-1; + while(rest--) result[Math.floor(Math.random()*result.length)][0]++; + return { + bool:true, + links:result.map(i=>`${i[0]}|${i[1]}`), + }; + })()); + } + if(result.bool){ + var links=result.links; + var list=[]; + for(var link of links){ + var info=link.split('|'); + var id=info[1]; + var target=(_status.connectMode?lib.playerOL:game.playerMap)[id]; + player.line(target); + var yings=lib.card.ying.getYing(parseInt(info[0])); + list.push([target,yings]); + game.log(target,'获得了',yings); + } + game.loseAsync({ + gain_list:list, + animate:'gain2', + }).setContent('gaincardMultiple'); + } + + }, + subSkill:{ + zero:{ + priority:Infinity, + mod:{ + attackRange:()=>0, + }, + }, + unlimit:{ + audio:'jsrgfuni', + trigger:{ + global:['loseAfter','loseAsyncAfter','cardsDiscardAfter'], + }, + filter:function(event,player){ + return event.getd().some(i=>get.name(i,false)=='ying'); + }, + forced:true, + content:function(){ + player.addTempSkill('jsrgfuni_buff'); + }, + }, + buff:{ + charlotte:true, + trigger:{player:'useCard1'}, + forced:true, + popup:false, + content:function(){ + trigger.directHit.addArray(game.players); + game.log(trigger.card,'不可被响应'); + }, + mark:true, + intro:{ + content:'使用牌无距离限制且不能被响应', + }, + mod:{ + targetInRange:()=>true, + }, + }, + }, + ai:{ + expose:0.15, + }, + }, + jsrgchuanxin:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('hes')&&game.hasPlayer(current=>player.canUse({ + name:'sha', + storage:{jsrgchuanxin:true}, + },current,false)); + }, + direct:true, + content:function(){ + var next=player.chooseToUse(); + next.set('openskilldialog',`###${get.prompt('olsuji')}###将一张牌当【杀】使用,且当一名角色受到此【杀】伤害时,此伤害+X(X为其本回合回复过的体力值)。`); + next.set('norestore',true); + next.set('_backupevent','jsrgchuanxin_backup'); + next.set('addCount',false); + next.set('logSkill','jsrgchuanxin'); + next.set('custom',{ + add:{}, + replace:{window:function(){}} + }); + next.backup('jsrgchuanxin_backup'); + }, + subSkill:{ + backup:{ + filterCard:function(card){ + return get.itemtype(card)=='card'; + }, + viewAs:{ + name:'sha', + storage:{jsrgchuanxin:true}, + }, + selectCard:1, + position:'hes', + ai1:function(card){ + var player=get.player(); + var maxVal=5.5; + if(get.name(card,false)=='ying'&&player.hasSkill('jsrgchuaxin')) maxVal-=3; + return maxVal-get.value(card); + }, + precontent:function(){ + delete event.result.skill; + player.addTempSkill('jsrgchuanxin_add'); + }, + }, + add:{ + trigger:{global:'damageBegin3'}, + filter:function(event,player){ + if(!event.card||!event.card.storage||!event.card.storage.jsrgchuanxin) return false; + if(event.getParent().type!='card') return false; + return game.hasGlobalHistory('changeHp',evt=>{ + return evt.getParent().name=='recover'&&evt.player==event.player; + }); + }, + forced:true, + charlotte:true, + conetnt:function(){ + var num=game.getGlobalHistory('changeHp',evt=>{ + return evt.getParent().name=='recover'&&evt.player==trigger.player; + }).map(evt=>evt.num).reduce((p,c)=>p+c); + trigger.num+=num; + game.log(trigger.card,'的伤害+'+num); + }, + }, + }, + }, + //黄忠 + jsrgcuifeng:{ + audio:2, + enable:'phaseUse', + limited:true, + skillAnimation:true, + animationColor:'orange', + chooseButton:{ + dialog:function(event,player){ + var list=[]; + for(var name of lib.inpile){ + var info=lib.card[name]; + if(!info||info.notarget||(info.selectTarget&&info.selectTarget!=1)||!get.tag({name:name},'damage')) continue; + if(name=='sha'){ + list.push(['基本','','sha']); + for(var nature of lib.inpile_nature) list.push(['基本','',name,nature]); + } + else if(get.type(name)=='trick') list.push(['锦囊','',name]); + else if(get.type(name)=='basic') list.push(['基本','',name]); + } + return ui.create.dialog('摧锋',[list,'vcard']); + }, + filter:function(button,player){ + return _status.event.getParent().filterCard({name:button.link[2],nature:button.link[3],isCard:true},player,_status.event.getParent()); + }, + check:function(button){ + var player=_status.event.player; + var effect=player.getUseValue(button.link[2]); + if(effect>0) return effect; + return 0; + }, + backup:function(links,player){ + return { + audio:'jsrgcuifeng', + selectCard:-1, + filterCard:()=>false, + popname:true, + viewAs:{name:links[0][2],nature:links[0][3],isCard:true}, + precontent:function(){ + player.logSkill('jsrgcuifeng'); + player.awakenSkill('jsrgcuifeng'); + delete event.result.skill; + player.when('phaseEnd').assign({card:event.result.card}).then(()=>{ + var num=0,card=get.info(event.name).card; + player.checkHistory('sourceDamage',evt=>{ + if(evt.card==card) num+=evt.num; + }); + if(num==0||num>1){ + player.restoreSkill('jsrgcuifeng'); + game.log(player,'重置了','#g【摧锋】'); + } + }).translation('摧锋'); + } + } + }, + prompt:function(links,player){ + return '请选择'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'的目标'; + } + }, + ai:{ + order:1.9, + result:{ + player:1, + }, + }, + }, + jsrgdengnan:{ + audio:2, + enable:'phaseUse', + limited:true, + skillAnimation:true, + animationColor:'orange', + chooseButton:{ + dialog:function(event,player){ + var list=[]; + for(var name of lib.inpile){ + var info=lib.card[name]; + if(!info||info.type!='trick'||info.notarget||get.tag({name:name},'damage')) continue; + list.push(['锦囊','',name]); + } + return ui.create.dialog('登难',[list,'vcard']); + }, + filter:function(button,player){ + return _status.event.getParent().filterCard({name:button.link[2],isCard:true},player,_status.event.getParent()); + }, + check:function(button){ + var player=_status.event.player; + return player.getUseValue(button.link[2]); + }, + backup:function(links,player){ + return { + audio:'jsrgdengnan', + selectCard:-1, + filterCard:()=>false, + popname:true, + viewAs:{name:links[0][2],isCard:true}, + precontent:function(){ + player.logSkill('jsrgdengnan'); + player.awakenSkill('jsrgdengnan'); + delete event.result.skill; + player.when('phaseEnd').assign({card:event.result.card}).then(()=>{ + var targets=[],card=get.info(event.name).card; + player.checkHistory('useCard',evt=>{ + if(evt.card==card) targets.addArray(evt.targets); + }); + if(targets.every(current=>{ + return current.hasHistory('damage'); + })){ + player.restoreSkill('jsrgdengnan'); + game.log(player,'重置了','#g【登难】'); + } + }).translation('登难'); + } + } + }, + prompt:function(links,player){ + return '请选择'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'的目标'; + } + }, + ai:{ + order:2, + result:{ + player:1, + }, + }, + }, + //夏侯荣 + jsrgfenjian:{ + audio:2, + enable:'chooseToUse', + locked:false, + filter:function(event,player){ + return ['juedou','tao'].some(name=>{ + return !player.getStorage('jsrgfenjian_used').includes(name)&&event.filterCard({ + name:name, + isCard:true, + storage:{jsrgfenjian:true}, + },player,event); + }); + }, + hiddenCard:function(player,name){ + if(['juedou','tao'].some(i=>i==name&&!player.getStorage('jsrgfenjian_used').includes(name))) return true; + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var dialog=ui.create.dialog('奋剑',[['juedou','tao'].filter(name=>!player.getStorage('jsrgfenjian_used').includes(name)),'vcard']); + dialog.direct=true; + return dialog; + }, + filter:function(button,player){ + var evt=_status.event.getParent(); + return evt.filterCard({ + name:button.link[2], + isCard:true, + storage:{jsrgfenjian:true}, + },player,evt); + }, + check:function(button){ + return _status.event.player.getUseValue({ + name:button.link[2], + isCard:true, + storage:{jsrgfenjian:true}, + }); + }, + backup:function(links){ + return { + audio:'jsrgfenjian', + viewAs:{ + name:links[0][2], + isCard:true, + storage:{jsrgfenjian:true}, + }, + filterCard:()=>false, + selectCard:-1, + precontent:function(){ + player.logSkill('jsrgfenjian'); + delete event.result.skill; + player.addTempSkill('jsrgfenjian_effect'); + player.addMark('jsrgfenjian_effect',1,false); + if(!player.storage.jsrgfenjian_used) player.when({global:'phaseAfter'}).then(()=>{ + delete player.storage.jsrgfenjian_used; + }); + player.markAuto('jsrgfenjian_used',[event.result.card.name]); + }, + } + }, + prompt:function(links){ + return '奋剑:令你本回合受到的伤害+1,视为使用'+get.translation(links[0][2]); + }, + }, + mod:{ + targetEnabled:function(card,player,target){ + if(player==target&&card.storage&&card.storage.jsrgfenjian) return false; + }, + }, + ai:{ + order:function(item,player){ + return Math.max(get.order({name:'juedou'}),get.order({name:'tao'}))+0.2; + }, + result:{player:1}, + }, + subSkill:{ + effect:{ + audio:'jsrgfenjian', + charlotte:true, + trigger:{player:'damageBegin1'}, + forced:true, + onremove:true, + content:function(){ + trigger.num+=player.countMark('jsrgfenjian_effect'); + }, + intro:{content:'本回合受到的伤害+#'}, + }, + }, + }, + //孙尚香 + jsrgguiji:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + if(player.hasSkill('jsrgguiji_used')) return false; + return game.hasPlayer(current=>lib.skill.jsrgguiji.filterTarget('keiki',player,current)); + }, + filterTarget:function(card,player,target){ + return target.countCards('h')get.value(i)).reduce((p,c)=>p+c); + var val2=target.getCards('h').map(i=>get.value(i)).reduce((p,c)=>p+c); + return val-val2; + } + } + }, + subSkill:{ + used:{charlotte:true}, + swapback:{ + audio:'jsrgguiji', + trigger:{global:'phaseUseEnd'}, + filter:function(event,player){ + return player.getStorage('jsrgguiji_swapback').includes(event.player); + }, + charlotte:true, + prompt2:'与其交换手牌', + logTarget:'player', + check:function(event,player){ + return player.getCards('h').map(i=>get.value(i)).reduce((p,c)=>p+c)get.value(i)).reduce((p,c)=>p+c)+4*Math.random(); + }, + content:function(){ + player.swapHandcards(trigger.player); + player.unmarkAuto('jsrgguiji_swapback',[target]); + }, + }, + }, + }, + jsrgjiaohao:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + filter:function(event,player){ + return [1,2,3,4,5].some(i=>player.countEmptySlot(i)); + }, + forced:true, + locked:false, + global:'jsrgjiaohao_g', + content:function(){ + 'step 0' + var count=Math.ceil([1,2,3,4,5].map(i=>player.countEmptySlot(i)).reduce((p,c)=>p+c,0)/2); + player.gain(lib.card.ying.getYing(count),'gain2'); + }, + subSkill:{ + g:{ + audio:'jsrgjiaohao', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(current=>{ + if(current==player||!current.hasSkill('jsrgjiaohao')) return false; + return player.hasCard(card=>{ + return get.type(card)=='equip'&¤t.canEquip(card); + }); + }); + }, + filterTarget:function(card,player,target){ + if(target.isMin()) return false; + return target!=player&&target.hasSkill('jsrgjiaohao')&&target.canEquip(card); + }, + selectTarget:function(){ + var num=game.countPlayer(current=>{ + return current.hasSkill('jsrgjiaohao'); + }); + return num>1?1:-1; + }, + filterCard:function(card){ + return get.type(card)=='equip'; + }, + check:function(card){ + var player=get.player(); + if(player.countCards('he',{subtype:get.subtype(card)})>1){ + return 11-get.equipValue(card); + } + return 6-get.value(card); + }, + prompt:function(){ + var list=game.filterPlayer(current=>{ + return current.hasSkill('jsrgjiaohao'); + }); + return `将一张装备牌置于${get.translation(list)}${list.length>1?'中的一人':''}的装备区`; + }, + discard:false, + lose:false, + prepare:function(cards,player,targets){ + player.$give(cards,targets[0],false); + }, + content:function(){ + target.equip(cards[0]); + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + var card=ui.selected.cards[0]; + if(card) return get.effect(target,card,target,target); + return 0; + }, + }, + }, + }, + } + }, + //庞统 + jsrgmanjuan:{ + audio:2, + trigger:{ + player:'loseEnd', + global:['equipEnd','addJudgeEnd','gainEnd','loseAsyncEnd','addToExpansionEnd'], + }, + filter:function(event,player){ + return (player.countCards('h')==0)^player.hasSkill('jsrgmanjuan_in'); + }, + forced:true, + firstDo:true, + silent:true, + content:function(){ + 'step 0' + if(!player.countCards('h')){ + var cards=[]; + game.checkGlobalHistory('cardMove',evt=>{ + if(evt.name=='lose'&&evt.position==ui.discardPile||evt.name=='cardsDiscard'){ + cards.addArray(evt.cards.filterInD('d')); + } + }); + var cardsx=cards.map(card=>{ + var cardx=ui.create.card(); + cardx.init(get.cardInfo(card)); + cardx._cardid=card.cardid; + return cardx; + }); + player.directgains(cardsx,null,'jsrgmanjuan'); + player.addSkill('jsrgmanjuan_in'); + } + else{ + player.removeSkill('jsrgmanjuan_in'); + } + }, + subSkill:{ + in:{ + audio:'jsrgmanjuan', + trigger:{ + global:['loseAfter','loseAsyncAfter','cardsDiscardAfter','equipAfter'], + }, + forced:true, + locked:false, + silent:true, + filter:function(event,player){ + var cards=event.getd(); + return cards.length; + }, + onremove:function(player){ + var cards2=player.getCards('s',card=>{ + return card.hasGaintag('jsrgmanjuan'); + }); + if(player.isOnline2()){ + player.send(function(cards,player){ + cards.forEach(i=>i.delete()); + if(player==game.me) ui.updatehl(); + },cards2,player); + } + cards2.forEach(i=>i.delete()); + if(player==game.me) ui.updatehl(); + }, + group:['jsrgmanjuan_use','jsrgmanjuan_lose'], + content:function(){ + var cards=[]; + var idList=player.getCards('s',card=>card.hasGaintag('jsrgmanjuan')).map(i=>i._cardid); + game.checkGlobalHistory('cardMove',evt=>{ + if(evt.name=='lose'&&evt.position==ui.discardPile||evt.name=='cardsDiscard'){ + cards.addArray(evt.cards.filter(i=>get.position(i,true)=='d'&&!idList.includes(i.cardid))); + } + }); + var cards2=cards.map(card=>{ + var cardx=ui.create.card(); + cardx.init(get.cardInfo(card)); + cardx._cardid=card.cardid; + return cardx; + }); + player.directgains(cards2,null,'jsrgmanjuan'); + }, + mod:{ + cardEnabled2:function(card,player){ + if(get.itemtype(card)=='card'&&card.hasGaintag('jsrgmanjuan')&&player.getStorage('jsrgmanjuan_used').includes(get.number(card,false))) return false; + }, + }, + }, + use:{ + trigger:{ + player:['useCardBefore','respondBefore'], + }, + charlotte:true, + forced:true, + popup:false, + firstDo:true, + filter:function(event,player){ + var cards=player.getCards('s',card=>card.hasGaintag('jsrgmanjuan')&&card._cardid); + return event.cards&&event.cards.some(card=>{ + return cards.includes(card); + }); + }, + content:function(){ + var idList=player.getCards('s',card=>card.hasGaintag('jsrgmanjuan')).map(i=>i._cardid); + var cards=[]; + game.checkGlobalHistory('cardMove',evt=>{ + if(evt.name=='lose'&&evt.position==ui.discardPile||evt.name=='cardsDiscard'){ + cards.addArray(evt.cards.filter(i=>idList.includes(i.cardid))); + } + }); + var cards2=[]; + for(var card of trigger.cards){ + var cardx=cards.find(cardx=>cardx.cardid==card._cardid); + if(cardx) cards2.push(cardx); + } + var cards3=trigger.cards.slice(); + trigger.cards=cards2; + trigger.card.cards=cards2; + if(player.isOnline2()){ + player.send(function(cards,player){ + cards.forEach(i=>i.delete()); + if(player==game.me) ui.updatehl(); + },cards3,player); + } + cards3.forEach(i=>i.delete()); + if(player==game.me) ui.updatehl(); + if(!player.storage.jsrgmanjuan_used){ + player.when({global:'phaseAfter'}) + .then(()=>{ + delete player.storage.jsrgmanjuan_used; + }) + } + player.markAuto('jsrgmanjuan_used',cards3.map(card=>get.number(card,false))); + }, + }, + lose:{ + trigger:{ + global:['loseEnd','equipEnd','addJudgeEnd','gainEnd','loseAsyncEnd','addToExpansionEnd','cardsGotoOrderingBegin','phaseAfter'], + }, + charlotte:true, + forced:true, + popup:false, + firstDo:true, + filter:function(event,player){ + if(event.name=='phase') return true; + var idList=player.getCards('s',card=>card.hasGaintag('jsrgmanjuan')).map(i=>i._cardid); + return event.cards&&event.cards.some(card=>{ + return idList.includes(card.cardid); + }); + }, + content:function(){ + var cards2; + if(trigger.name=='phase'){ + cards2=player.getCards('s',card=>{ + return card.hasGaintag('jsrgmanjuan'); + }) + } + else{ + var idList=[]; + game.checkGlobalHistory('cardMove',evt=>{ + if(evt.name=='lose'&&evt.position==ui.discardPile||evt.name=='cardsDiscard'){ + idList.addArray(evt.cards.filter(i=>get.position(i,true)=='d').map(i=>i.cardid)); + } + }); + cards2=player.getCards('s',card=>{ + return card.hasGaintag('jsrgmanjuan')&&!idList.includes(card._cardid); + }); + } + if(player.isOnline2()){ + player.send(function(cards,player){ + cards.forEach(i=>i.delete()); + if(player==game.me) ui.updatehl(); + },cards2,player); + } + cards2.forEach(i=>i.delete()); + if(player==game.me) ui.updatehl(); + } + }, + } + }, + jsrgyangming:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(current=>{ + return player.canCompare(current); + }); + }, + filterTarget:function(card,player,current){ + return player.canCompare(current); + }, + content:function(){ + 'step 0' + event.num=0; + 'step 1' + player.chooseToCompare(target).set('small',get.attitude(player,target)>0&&(player.countCards('h',card=>{ + return get.value(card)<6; + })<=1||target.countCards('h',card=>{ + return get.value(card)<6; + })<=1)); + 'step 2' + if(result.winner!=target){ + if(!player.canCompare(target)) event._result={bool:false}; + else player.chooseBool('是否与其重复此拼点流程?').set('ai',()=>get.event('bool')).set('bool',get.effect(target,'jsrgyangming',player,player)>0); + event.num++; + } + else{ + if(event.num) target.draw(event.num); + player.recover(); + event.finish(); + } + 'step 3' + if(result.bool){ + event.goto(1); + } + }, + ai:{ + order:1, + expose:0.15, + result:{ + target:function(player,target){ + var maxnum=0; + var cards2=target.getCards('h'); + for(var i=0;imaxnum){ + maxnum=get.number(cards2[i]); + } + } + if(maxnum>10) maxnum=10; + if(maxnum<5&&cards2.length>1) maxnum=5; + var cards=player.getCards('h'); + for(var i=0;i{ + return current.hasAllHistory('sourceDamage',evt=>evt.player==player); + }); + var undamaged=game.filterPlayer().removeArray(damaged); + player.chooseCardTarget({ + prompt:get.prompt('jsrgniluan'), + prompt2:`${undamaged.length?'选择一张牌弃置并选择一名未对你造成过伤害的角色,你对其造成1点伤害':''}${undamaged.length&&damaged.length?';
或':''}${damaged.length?'仅选择一名对你造成过伤害的角色,你令其摸两张牌':''}。`, + damaged:damaged, + aiTarget:(()=>{ + var info=game.filterPlayer().map(current=>{ + var damage=undamaged.includes(current); + var card={name:damage?'damage':'wuzhong'}; + return [current,get.effect(current,card,player,player)/(damage?1.5:1)]; + }).sort((a,b)=>b[1]-a[1])[0]; + if(info[1]>0) return info[0]; + return null; + })(), + filterCard:lib.filter.cardDiscardable, + selectCard:function(){ + if(get.event('damaged').length==0) return 1; + if(get.event('damaged').length==game.countPlayer()) return 0; + return [0,1]; + }, + filterTarget:function(card,player,target){ + var damaged=get.event('damaged'); + return damaged.includes(target)^(ui.selected.cards.length>0); + }, + selectTarget:1, + ai1:function(card){ + if(get.event('damaged').includes(get.event('aiTarget'))) return 0; + return 6-get.value(card); + }, + ai2:function(target){ + return target==get.event('aiTarget')?10:0; + }, + }); + 'step 1' + if(result.bool){ + var cards=result.cards,target=result.targets[0]; + player.logSkill('jsrgniluan',target); + if(cards&&cards.length){ + player.discard(cards); + game.delayex(); + target.damage(); + } + else{ + target.draw(2); + } + } + }, + }, + jsrghuchou:{ + audio:2, + trigger:{source:'damageBegin1'}, + filter:function(event,player){ + const history=_status.globalHistory; + for(let i=history.length-1;i>=0;i--){ + let evts=history[i]['useCard']; + for(let j=evts.length-1;j>=0;j--){ + var evt=evts[j]; + let card=evt.card,targets=evt.targets; + if(!get.tag(card,'damage')||!targets.includes(player)) continue; + return event.player==evt.player; + } + } + return false; + }, + forced:true, + content:function(){ + trigger.num++; + }, + }, + jsrgjiemeng:{ + audio:2, + zhuSkill:true, + forced:true, + global:'jsrgjiemeng_effect', + subSkill:{ + effect:{ + mod:{ + globalFrom:function(from,to,distance){ + if(from.group!='qun') return; + if(to.hasZhuSkill('jsrgjiemeng')) return; + return distance-game.countPlayer(current=>current.group=='qun'); + }, + }, + }, + }, + }, + //张楚 + jsrghuozhong:{ + audio:'dcjizhong', + global:'jsrghuozhong_g', + subSkill:{ + g:{ + audio:'dcjizhong', + enable:'phaseUse', + usable:1, + filter:function (event,player){ + if(player.hasJudge('bingliang')) return false; + if(!game.hasPlayer(current=>current.hasSkill('jsrghuozhong'))) return false; + return player.countCards('hes',card=>get.color(card)=='black'&&get.type2(card)!='trick')>0; + }, + viewAs:{name:'bingliang'}, + position:'hes', + discard:false, + prompt:function(){ + var list=game.filterPlayer(target=>{ + return target.hasSkill('jsrghuozhong'); + }); + return `将一张黑色非锦囊牌当【兵粮寸断】置于自己的判定区,然后令${get.translation(list)}${list.length>1?'中的一人':''}摸两张牌。`; + }, + filterCard:function(card,player,event){ + return get.color(card)=='black'&&get.type2(card)!='trick'&&player.canAddJudge({name:'bingliang',cards:[card]}); + }, + selectTarget:-1, + filterTarget:function (card,player,target){ + return player==target; + }, + check:function(card){ + return 6-get.value(card); + }, + precontent:function*(event,map){ + var player=map.player; + var targets=game.filterPlayer(current=>current.hasSkill('jsrghuozhong')); + var result; + if(targets.length) result={bool:true,targets:targets}; + else result=yield player.chooseTarget('请选择一名传教士,发动其的【惑众】',true,(card,player,target)=>{ + return get.event('targets').includes(target); + }).set('targets',targets); + if(result.bool){ + var target=result.targets[0]; + player.logSkill('jsrghuozhong',target); + var next=game.createEvent('jsrghuozhong_draw',false); + next.set('player',player); + next.set('target',target); + event.next.remove(next); + event.getParent().after.push(next); + next.setContent(function(){ + target.draw(2); + }); + } + }, + ai:{ + result:{ + player:function(player){ + if(game.hasPlayer(current=>get.attitude(player,current)>2&¤t.hasSkill('jsrghuozhong'))) return 1; + return 0; + }, + }, + order:9, + }, + }, + }, + }, + jsrgrihui:{ + audio:'dcrihui', + trigger:{source:'damageSource'}, + filter:function(event,player){ + return event.getParent().type=='card'&&event.card&&event.card.name=='sha'&&game.hasPlayer(current=>{ + return current!=player&¤t.countCards('j'); + }); + }, + prompt:'是否发动【日彗】?', + prompt2:function(event,player){ + var list=game.filterPlayer(current=>{ + return current!=player&¤t.countCards('j'); + }); + return `令${get.translation(list)}${list.length>1?'各':''}摸一张牌。`; + }, + logTarget:function(event,player){ + return game.filterPlayer(current=>{ + return current!=player&¤t.countCards('j'); + }); + }, + group:'jsrgrihui_sha', + content:function(){ + game.asyncDraw(lib.skill.jsrgrihui.logTarget(trigger,player)); + }, + mod:{ + cardUsableTarget:function(card,player,target){ + if(card.name=='sha'&&!player.getStorage('jsrgrihui_targeted').includes(target)) return true; + }, + }, + subSkill:{ + sha:{ + trigger:{player:'useCardToPlayered'}, + forced:true, + silent:true, + firstDo:true, + content:function(){ + player.addTempSkill('jsrgrihui_targeted'); + player.markAuto('jsrgrihui_targeted',trigger.target); + } + }, + targeted:{ + charlotte:true, + onremove:true, + }, + }, + }, + //夏侯恩 + jsrghujian:{ + audio:'twfujian', + trigger:{ + global:'phaseEnd', + }, + filter:function(event,player){ + if(!Array.from(ui.discardPile.childNodes).some(i=>i.name=='chixueqingfeng')) return false; + return game.hasGlobalHistory('everything',evt=>['useCard','respond'].includes(evt.name)&&evt.player.isIn()); + }, + popup:false, + forced:true, + locked:false, + group:'jsrghujian_begin', + content:function(){ + 'step 0' + var cards=Array.from(ui.discardPile.childNodes).filter(i=>i.name=='chixueqingfeng'); + if(cards.length){ + event.cards=cards; + var history=_status.globalHistory,target=null; + for(var i=history.length-1;i>=0&&!target;i--){ + var evts=history[i]['everything']; + for(var j=evts.length-1;j>=0;j--){ + var evt=evts[j]; + if(!['useCard','respond'].includes(evt.name)) continue; + target=evt.player; + break; + } + } + if(target&&target.isIn()){ + event.target=target; + target.chooseBool(`是否响应${get.translation(player)}的【护剑】?`,'获得弃牌堆里的【赤血青锋】。'); + } + else event.finish(); + } + else event.finish(); + 'step 1' + if(result.bool){ + player.logSkill('jsrghujian'); + player.line(target); + target.gain(cards,'gain2'); + } + }, + subSkill:{ + begin:{ + audio:'twfujian', + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + forced:true, + locked:false, + filter:function(event,player){ + return event.name!='phase'||game.phaseNumber==0; + }, + content:function(){ + player.gain(game.createCard2('chixueqingfeng','spade',6),'gain2'); + } + }, + }, + }, + jsrgshili:{ + audio:'twjianwei', + enable:'phaseUse', + usable:1, + viewAs:{ + name:'juedou', + }, + filterCard:{type:'equip'}, + position:'hs', + viewAsFilter:function(player){ + return player.hasCard({type:'equip'},'hs'); + }, + check:function(card){ + return (get.name(card,false)=='chixueqingfeng'?20:12)-_status.event.player.getUseValue(card); + }, + ai:{ + order:0.001, + }, + }, + //范疆张达 + jsrgfushan:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + forced:true, + locked:false, + filter:function(event,player){ + return game.hasPlayer(i=>i!=player); + }, + content:function*(event,map){ + var player=map.player,trigger=map.trigger; + var targets=game.filterPlayer(i=>i!=player); + for(var target of targets){ + var att=get.attitude(target,player); + var result=yield target.chooseCard(`负山:是否交给${get.translation(player)}一张牌?`,`若如此做,其此阶段使用【杀】的次数上限+1`).set('att',att).set('ai',card=>{ + if(!get.event('goon')) return -get.value(card); + var isSha=get.name(card,get.event('target'))=='sha'; + if(get.event('att')<0) return (isSha?0:5)-get.value(card); + return (isSha?10:5.5)-get.value(card); + }).set('goon',att>0&&player.countCards('sha')>player.getCardUsable('sha',true)||att<0&&!player.hasSkill('jsrgfushan_sha')).set('target',player); + if(result.bool){ + target.give(result.cards,player); + target.line(player); + player.addTempSkill('jsrgfushan_sha','phaseAfter'); + player.addMark('jsrgfushan_sha',1,false); + player.markAuto('jsrgfushan_given',target); + } + } + player.when('phaseUseAfter').filter((evt=>evt==trigger)).then(()=>{ + player.logSkill('jsrgfushan'); + if(player.getCardUsable('sha',true)>player.getHistory('useCard',evt=>{ + return evt.getParent('phaseUse')==trigger&&evt.card.name=='sha'&&evt.addCount!==false; + }).length&&player.storage.jsrgfushan_given&&player.storage.jsrgfushan_given.every(i=>i.isIn())){ + player.loseHp(2); + } + else{ + player.drawTo(player.maxHp); + } + delete player.storage.jsrgfushan_given; + }); + }, + subSkill:{ + sha:{ + charlotte:true, + onremove:true, + marktext:'负', + intro:{content:'使用【杀】的次数上限+#'}, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('jsrgfushan_sha'); + }, + }, + }, + }, + }, //江山如故·承 //404孙策 jsrgduxing:{ @@ -633,9 +2424,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ isCard:true, }, filter:function(event,player){ + if(!player.countCards('he',card=>_status.connectMode||get.type(card)!='basic')) return false; return player.group=='qun'&&!player.hasSkill('jsrgqiongtu_check'); }, viewAsFilter:function(player){ + if(!player.countCards('he',card=>_status.connectMode||get.type(card)!='basic')) return false; return player.group=='qun'&&!player.hasSkill('jsrgqiongtu_check'); }, filterCard:function(card){ @@ -4183,8 +5976,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrgtushe_info:'当你使用非装备牌指定目标后,你可以展示所有手牌(无牌则不展示)。若你没有基本牌,你可以摸X张牌(X为此牌指定的目标数)。', jsrgtongjue:'通绝', jsrgtongjue_info:'主公技。出牌阶段限一次。你可以将任意张牌交给等量名其他群势力角色。然后你不能使用牌指定这些角色为目标直到回合结束。', - jsrg_caocao:'起曹操', - jsrg_caocao_prefix:'起', + jsrg_caocao:'梦曹操', + jsrg_caocao_prefix:'梦', jsrgzhenglve:'政略', jsrgzhenglve_info:'①主公的回合结束时,你可以摸一张牌,然后令一名没有“猎”标记的角色获得“猎”(若主公本回合没有造成过伤害,则改为至多两名)。②你对有“猎”的角色使用牌无距离和次数限制。③每回合限一次。当你对有“猎”的角色造成伤害后,你可以摸一张牌并获得造成此伤害的牌。', jsrghuilie:'会猎', @@ -4204,8 +5997,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbpingjian:'评鉴', sbpingjian_info:'你可以于满足你“访客”上的一个无技能标签或仅有锁定技标签的技能条件的时机发动此技能,然后你选择移去一张“访客”。若移去的是本次发动技能的“访客”,则你于此技能结算结束时摸一张牌。', //江山如故·承 - jsrg_sunce:'承孙策', - jsrg_sunce_prefix:'承', + jsrg_sunce:'梦孙策', + jsrg_sunce_prefix:'梦', jsrgduxing:'独行', jsrgduxing_info:'出牌阶段限一次。你可以视为使用一张可以指定任意名目标角色的【决斗】,且所有目标角色的手牌均视为【杀】直到此牌结算结束。', jsrgzhiheng:'猘横', @@ -4278,9 +6071,90 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrgcangchu_info:'一名角色的结束阶段,你可以令至多X名角色各摸一张牌,若X大于存活角色数,则改为各摸两张牌(X为你于此回合得到的牌数)。', jsrgshishou:'失守', jsrgshishou_info:'锁定技。①当你使用【酒】时,你摸三张牌,然后你本回合不能再使用牌。②当你受到火焰伤害后,你令〖仓储〗失效直到你的下回合结束后。', + //江山如故·转 + ying:'影', + ying_info:'当此牌进入弃牌堆后,系统将此牌移出游戏。', + jsrg_guojia:'梦郭嘉', + jsrg_guojia_prefix:'梦', + jsrgqingzi:'轻辎', + jsrgqingzi_info:'准备阶段,你可以弃置任意名其他角色装备区里的各一张牌,然后令这些角色获得〖神速〗直到你的下回合开始。', + jsrgdingce:'定策', + jsrgdingce_info:'当你受到伤害后,你可以依次弃置你与伤害来源的各一张手牌。若这两张牌颜色相同,你视为使用一张【洞烛先机】。', + jsrgzhenfeng:'针锋', + jsrgzhenfeng_info:'出牌阶段每种类别各限一次。你可以视为使用一张存活角色的技能描述中包含的基本牌或普通锦囊牌(无距离和次数限制)。当此牌对技能描述中包含此牌的角色生效时,你对其造成1点伤害。', + jsrg_zhangfei:'转张飞', + jsrg_zhangfei_prefix:'转', + jsrgbaohe:'暴吓', + jsrgbaohe_info:'一名角色的出牌阶段结束时,你可以弃置两张牌,然后视为你对攻击范围内包含其的所有角色使用一张【杀】。当一名角色使用牌响应此【杀】后,此【杀】对后续目标角色造成的伤害+1。', + jsrgxushi:'虚势', + jsrgxushi_info:'出牌阶段限一次。你可以交给任意名角色各一张牌,然后你获得两倍数量的【影】。', + jsrg_machao:'转马超', + jsrg_machao_prefix:'转', + jsrgzhuiming:'追命', + jsrgzhuiming_info:'当你使用【杀】指定唯一目标后,你可以声明一种颜色并令目标角色弃置任意张牌,然后你展示目标角色一张牌。若此牌颜色与你声明的颜色相同,则此【杀】不计入次数限制、不可被响应且伤害+1。', + jsrg_lougui:'转娄圭', + jsrg_lougui_prefix:'转', + jsrgshacheng:'沙城', + jsrgshacheng_info:'①游戏开始时,你将牌堆顶的两张牌置于武将牌上,称为“城”。②当一名角色使用【杀】结算结束后,你可以移去一张“城”,令此牌的其中一名目标角色摸X张牌(X为该角色本回合失去过的牌数且至多为5)。', + jsrgninghan:'凝寒', + jsrgninghan_info:'锁定技。①所有角色手牌中的♣【杀】均视为冰【杀】。②当一名角色受到冰冻伤害后,你将造成此伤害的牌对应的实体牌置入“城”。', + jsrg_zhangren:'转张任', + jsrg_zhangren_prefix:'转', + jsrgfuni:'伏匿', + jsrgfuni_info:'锁定技。①你的攻击范围终值为0。②一轮游戏开始时,你可以令任意名角色获得共计X张【影】(X为存活角色数的一半,向上取整)。③当有牌进入弃牌堆后,若其中有【影】,你于本回合使用牌无距离限制且不能被响应。', + jsrgchuanxin:'穿心', + jsrgchuanxin_info:'一名角色的结束阶段,你可以将一张牌当【杀】使用。当一名角色受到渠道为此【杀】的伤害时,此伤害+Y(Y为其本回合回复过的体力值)。', + jsrg_huangzhong:'转黄忠', + jsrg_huangzhong_prefix:'转', + jsrgcuifeng:'摧锋', + jsrgcuifeng_info:'限定技。出牌阶段,你可以视为使用一张单目标的伤害类牌(无距离限制)。此回合结束时,若此牌未造成伤害或造成的伤害值大于1,你重置〖摧锋〗。', + jsrgdengnan:'登难', + jsrgdengnan_info:'限定技。出牌阶段,你可以视为使用一张非伤害类普通锦囊牌。此回合结束时,若此牌的目标均于此回合受到过伤害,你重置〖登难〗。', + jsrg_xiahourong:'转夏侯荣', + jsrg_xiahourong_prefix:'转', + jsrgfenjian:'奋剑', + jsrgfenjian_info:'每回合各限一次。当你需要对其他角色使用【决斗】或【桃】时,你可以令你本回合受到的伤害+1,视为使用之。', + jsrg_sunshangxiang:'转孙尚香', + jsrg_sunshangxiang_prefix:'转', + jsrgguiji:'闺忌', + jsrgguiji_info:'每回合限一次。出牌阶段,你可以与一名手牌数小于你的男性角色交换手牌。然后其下个出牌阶段结束时,你可以与其交换手牌。', + jsrgjiaohao:'骄豪', + jsrgjiaohao_info:'①其他角色的出牌阶段限一次。其可以将手牌中的一张装备牌置于你的装备区。②准备阶段,你获得X张【影】(X为你空置装备栏数的一半,向上取整)。', + jsrg_pangtong:'转庞统', + jsrg_pangtong_prefix:'转', + jsrgmanjuan:'漫卷', + jsrgmanjuan_info:'若你没有手牌,你可以如手牌般使用或打出于本回合进入弃牌堆的牌(每种点数每回合限一次)。', + jsrgyangming:'养名', + jsrgyangming_info:'出牌阶段限一次。你可以与一名角色拼点,若其:没赢,你可以与其重复此流程;赢,其摸X张牌,然后你回复1点体力(X为其此阶段没赢的次数)。', + jsrg_hansui:'转韩遂', + jsrg_hansui_prefix:'转', + jsrgniluan:'逆乱', + jsrgniluan_info:'准备阶段,你可以选择一项:1.弃置一张牌,对一名未对你造成过伤害的角色造成1点伤害;2.令一名对你造成过伤害的角色摸两张牌。', + jsrghuchou:'互雠', + jsrghuchou_info:'锁定技。当你对最后对你使用伤害类牌的角色造成伤害时,此伤害+1。', + jsrgjiemeng:'皆盟', + jsrgjiemeng_info:'主公技,锁定技。所有群势力角色至其他角色的距离-X(X为群势力角色数)。', + jsrg_zhangchu:'转张楚', + jsrg_zhangchu_prefix:'转', + jsrghuozhong:'惑众', + jsrghuozhong_info:'所有角色出牌阶段限一次。其可以将一张黑色非锦囊牌置于其判定区,然后令你摸两张牌。', + jsrgrihui:'日彗', + jsrgrihui_info:'①当你使用【杀】对目标角色造成伤害后,你可以令判定区有牌的其他角色各摸一张牌。②你于一回合内对判定区没有牌的角色使用的第一张【杀】无任何次数限制。', + jsrg_xiahouen:'转夏侯恩', + jsrg_xiahouen_prefix:'转', + jsrghujian:'护剑', + jsrghujian_info:'①游戏开始时,你从游戏外获得一张【赤血青锋】。②一名角色的回合结束时,此回合最后一名使用或打出牌的角色可以获得弃牌堆中的【赤血青锋】。', + jsrgshili:'恃力', + jsrgshili_info:'出牌阶段限一次。你可以将一张手牌中的装备牌当【决斗】使用。', + jsrg_fanjiangzhangda:'转范强张达', + jsrg_fanjiangzhangda_ab:'转范疆张达', + jsrg_fanjiangzhangda_prefix:'转', + jsrgfushan:'负山', + jsrgfushan_info:'出牌阶段开始时,所有其他角色可以依次交给你一张牌并令你此阶段使用【杀】的次数上限+1。此阶段结束时,若你使用【杀】的次数未达到上限且此阶段以此法交给你牌的角色均存活,你失去2点体力,否则你将手牌摸至体力上限。', jiangshanrugu_qi:'江山如故·起', jiangshanrugu_cheng:'江山如故·承', + jiangshanrugu_zhuan:'江山如故·转', }, }; }); diff --git a/character/rank.js b/character/rank.js index e29ae0349..38b5ca0c4 100644 --- a/character/rank.js +++ b/character/rank.js @@ -123,6 +123,7 @@ window.noname_character_rank={ 'key_yuuki', 'db_key_liyingxia', 'key_kiyu', + 'jsrg_pangtong', ], a:[ 'diy_zaozhirenjun', @@ -314,6 +315,12 @@ window.noname_character_rank={ 'yuechen', 'sunli', 'dc_zhangmancheng', + 'jsrg_guojia', + 'jsrg_lougui', + 'jsrg_zhangfei', + 'jsrg_fanjiangzhangda', + 'jsrg_hansui', + 'jsrg_zhangren', 'key_misuzu', 'key_sunohara', 'key_umi', @@ -608,6 +615,9 @@ window.noname_character_rank={ 'xiahoumao', 'dc_xujing', 'le_shen_jiaxu', + 'jsrg_xiahourong', + 'jsrg_sunshangxiang', + 'jsrg_machao', ], bp:[ 'chess_diaochan', @@ -964,6 +974,8 @@ window.noname_character_rank={ 'yue_zhoufei', 'ns_mengyou', 'zhangyan', + 'jsrg_huangzhong', + 'jsrg_zhangchu', ], b:[ 'diy_feishi', @@ -1268,6 +1280,7 @@ window.noname_character_rank={ 'ol_qianzhao', 'yj_zhoubuyi', 'feiyao', + 'jsrg_xiahouen', ], bm:[ 'diy_xizhenxihong', diff --git a/character/shenhua.js b/character/shenhua.js index 24266c8f0..abdd7ebcb 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -7755,7 +7755,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caoren:['caoren','old_caoren','sb_caoren','new_caoren'], sp_caoren:['sp_caoren','jsp_caoren'], xiahouyuan:['re_xiahouyuan','ol_xiahouyuan','xiahouyuan'], - huangzhong:['re_huangzhong','ol_huangzhong','sb_huangzhong','huangzhong'], + huangzhong:['re_huangzhong','ol_huangzhong','sb_huangzhong','huangzhong','jsrg_huangzhong'], weiyan:['re_weiyan','ol_weiyan','weiyan'], zhoutai:['zhoutai','xin_zhoutai','old_zhoutai'], xiaoqiao:['xiaoqiao','ol_xiaoqiao','re_xiaoqiao','old_xiaoqiao'], @@ -7765,7 +7765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xunyu:['xunyu','ol_xunyu','re_xunyu'], sp_zhugeliang:['sp_zhugeliang','ol_sp_zhugeliang','re_sp_zhugeliang'], pangtong:['pangtong','ol_pangtong','re_pangtong','sb_pangtong'], - re_jsp_pangtong:['re_jsp_pangtong','sp_pangtong'], + re_jsp_pangtong:['re_jsp_pangtong','jsrg_pangtong','sp_pangtong'], taishici:['taishici','re_taishici'], re_yuanshao:['re_yuanshao','ol_yuanshao','xin_yuanshao','sb_yuanshao'], pangde:['re_pangde','ol_pangde','pangde'], diff --git a/character/sp.js b/character/sp.js index 7181a7eb0..bf49a22ab 100755 --- a/character/sp.js +++ b/character/sp.js @@ -24958,6 +24958,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qianzhao:['ol_qianzhao','qianzhao'], ol_pengyang:['ol_pengyang','sp_pengyang'], ol_luyusheng:['ol_luyusheng','luyusheng'], + fanjiangzhangda:['fanjiangzhangda','jsrg_fanjiangzhangda'], }, translate:{ "xinfu_lingren":"凌人", diff --git a/character/sp2.js b/character/sp2.js index 9558499fb..8649de266 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -10112,7 +10112,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huangfusong:['huangfusong','sp_huangfusong','jsrg_huangfusong','old_huangfusong'], dingyuan:['ol_dingyuan','dingyuan'], quyi:['quyi','re_quyi'], - hansui:['hansui','re_hansui','xin_hansui'], + hansui:['hansui','re_hansui','xin_hansui','jsrg_hansui'], jin_simashi:['jin_simashi','simashi'], jin_yanghuiyu:['jin_yanghuiyu','yanghuiyu'], taoqian:['re_taoqian','taoqian'], diff --git a/character/standard.js b/character/standard.js index 3492492a1..073def105 100755 --- a/character/standard.js +++ b/character/standard.js @@ -2511,11 +2511,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiahoudun:['xiahoudun','re_xiahoudun','xin_xiahoudun'], liubei:['liubei','re_liubei','sb_liubei','dc_liubei','junk_liubei'], guanyu:['guanyu','re_guanyu','ps_guanyu'], - zhangfei:['zhangfei','re_zhangfei','old_zhangfei','xin_zhangfei','sb_zhangfei','tw_zhangfei','yj_zhangfei'], + zhangfei:['zhangfei','re_zhangfei','old_zhangfei','xin_zhangfei','sb_zhangfei','tw_zhangfei','jsrg_zhangfei','yj_zhangfei'], zhaoyun:['zhaoyun','re_zhaoyun','old_zhaoyun','sb_zhaoyun','ps2063_zhaoyun','ps2067_zhaoyun'], sp_zhaoyun:['sp_zhaoyun','jsp_zhaoyun'], machao:['machao','re_machao','sb_machao','ps_machao'], - sp_machao:['sp_machao','dc_sp_machao','old_machao'], + sp_machao:['sp_machao','dc_sp_machao','jsrg_machao','old_machao'], zhugeliang:['zhugeliang','re_zhugeliang','ps2066_zhugeliang','ps_zhugeliang'], huangyueying:['huangyueying','re_huangyueying','junk_huangyueying'], sunquan:['sunquan','re_sunquan','sb_sunquan','dc_sunquan'], @@ -2524,7 +2524,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lvmeng:['lvmeng','re_lvmeng','sb_lvmeng'], huanggai:['huanggai','re_huanggai','sb_huanggai'], daqiao:['daqiao','re_daqiao','sb_daqiao'], - sunshangxiang:['sunshangxiang','re_sunshangxiang','sb_sunshangxiang'], + sunshangxiang:['sunshangxiang','re_sunshangxiang','sb_sunshangxiang','jsrg_sunshangxiang'], ganning:['ganning','re_ganning','sb_ganning','yongjian_ganning'], yj_ganning:['yj_ganning','sp_ganning'], lvbu:['lvbu','re_lvbu','jsrg_lvbu','ps_lvbu'], diff --git a/character/tw.js b/character/tw.js index f858e6f96..dbdba60ef 100644 --- a/character/tw.js +++ b/character/tw.js @@ -14034,6 +14034,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterReplace:{ tw_caocao:['tw_caocao','jsrg_caocao','yj_caocao'], mateng:['tw_mateng','mateng'], + xiahouen:['tw_xiahouen','jsrg_xiahouen'], }, dynamicTranslate:{ twfeifu:function(player){ diff --git a/game/game.js b/game/game.js index d1f1d4e89..4fd2cb180 100644 --- a/game/game.js +++ b/game/game.js @@ -34830,6 +34830,14 @@ color:'#c3f9ff', nature:'thundermm', }], + ['转',{ + color:'#c3f9ff', + nature:'thundermm', + }], + ['梦',{ + color:'#6affe2', + nature:'watermm', + }], ['用间',{ color:'#c3f9ff', nature:'thundermm', diff --git a/image/card/ying.png b/image/card/ying.png new file mode 100644 index 000000000..1722384e8 Binary files /dev/null and b/image/card/ying.png differ diff --git a/image/character/jsrg_fanjiangzhangda.jpg b/image/character/jsrg_fanjiangzhangda.jpg new file mode 100644 index 000000000..0dfdbd0df Binary files /dev/null and b/image/character/jsrg_fanjiangzhangda.jpg differ diff --git a/image/character/jsrg_guojia.jpg b/image/character/jsrg_guojia.jpg new file mode 100644 index 000000000..a55bb0557 Binary files /dev/null and b/image/character/jsrg_guojia.jpg differ diff --git a/image/character/jsrg_hansui.jpg b/image/character/jsrg_hansui.jpg new file mode 100644 index 000000000..04f4b24a6 Binary files /dev/null and b/image/character/jsrg_hansui.jpg differ diff --git a/image/character/jsrg_huangzhong.jpg b/image/character/jsrg_huangzhong.jpg new file mode 100644 index 000000000..867f14832 Binary files /dev/null and b/image/character/jsrg_huangzhong.jpg differ diff --git a/image/character/jsrg_lougui.jpg b/image/character/jsrg_lougui.jpg new file mode 100644 index 000000000..06dfcb252 Binary files /dev/null and b/image/character/jsrg_lougui.jpg differ diff --git a/image/character/jsrg_machao.jpg b/image/character/jsrg_machao.jpg new file mode 100644 index 000000000..fe42c55a0 Binary files /dev/null and b/image/character/jsrg_machao.jpg differ diff --git a/image/character/jsrg_pangtong.jpg b/image/character/jsrg_pangtong.jpg new file mode 100644 index 000000000..4a29c1758 Binary files /dev/null and b/image/character/jsrg_pangtong.jpg differ diff --git a/image/character/jsrg_sunshangxiang.jpg b/image/character/jsrg_sunshangxiang.jpg new file mode 100644 index 000000000..8a48825fe Binary files /dev/null and b/image/character/jsrg_sunshangxiang.jpg differ diff --git a/image/character/jsrg_xiahouen.jpg b/image/character/jsrg_xiahouen.jpg new file mode 100644 index 000000000..3503cb6f7 Binary files /dev/null and b/image/character/jsrg_xiahouen.jpg differ diff --git a/image/character/jsrg_xiahourong.jpg b/image/character/jsrg_xiahourong.jpg new file mode 100644 index 000000000..9726ac482 Binary files /dev/null and b/image/character/jsrg_xiahourong.jpg differ diff --git a/image/character/jsrg_zhangchu.jpg b/image/character/jsrg_zhangchu.jpg new file mode 100644 index 000000000..8f88ba90a Binary files /dev/null and b/image/character/jsrg_zhangchu.jpg differ diff --git a/image/character/jsrg_zhangfei.jpg b/image/character/jsrg_zhangfei.jpg new file mode 100644 index 000000000..56e3140a0 Binary files /dev/null and b/image/character/jsrg_zhangfei.jpg differ diff --git a/image/character/jsrg_zhangren.jpg b/image/character/jsrg_zhangren.jpg new file mode 100644 index 000000000..f23e80e7c Binary files /dev/null and b/image/character/jsrg_zhangren.jpg differ