diff --git a/character/diy.js b/character/diy.js index 244b8e047..0640debd9 100755 --- a/character/diy.js +++ b/character/diy.js @@ -70,6 +70,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_crow:['male','key',4,[],['unseen']], key_asara:['female','key',3,['asara_shelu','asara_yingwei']], key_kotomi:['female','key',3,['kotomi_qinji','kotomi_chuanxiang']], + key_mia:['female','key',3,['mia_shihui','mia_qianmeng']], key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], @@ -195,7 +196,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"], diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], diy_noname:['noname'], - diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi"], + diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi","key_mia"], diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','junk_simayi'], }, }, @@ -217,6 +218,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanghu:'羊祜(221年-278年12月27日),字叔子,泰山郡南城县人。西晋时期杰出的战略家、政治家、文学家,曹魏上党太守羊衜的儿子,名儒蔡邕的女儿蔡文姬的外甥。出身“泰山羊氏”,博学能文,清廉正直。曹魏时期,接受公车征辟,出任中书郎,迁给事黄门侍郎。姐姐嫁给大将军司马师,投靠司马氏家族,仕途平步青云。魏元帝曹奂即位,出任秘书监、相国从事中郎、中领军,统领御林军,兼管内外政事,册封钜平县子,迁。西晋建立后,迁中军将军、散骑常侍、郎中令,册封钜平侯。泰始五年(269年),出任车骑将军、荆州都督,加任开府仪同三司坐镇襄阳,屯田兴学,以德怀柔,深得军民之心;扩充军备,训练士兵,全力准备灭亡孙吴,累迁征南大将军,册封南城侯。咸宁四年,去世,临终前举荐杜预接任职务,获赠侍中、太傅,谥号为“成”。唐宋时期,配享武庙。', }, characterTitle:{ + key_kotomi:'#bLoopers', key_kotomi:'#gClannad', key_asara:'#bRewrite', key_yukito:'#bAIR', @@ -457,6 +459,136 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + mia_shihui:{ + trigger:{player:'phaseDrawBegin1'}, + forced:true, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + trigger.changeToZero(); + var num=0;all=player.getAllHistory(); + if(all.length>1){ + for(var i=all.length-2;i>=0;i--){ + if(all[i].isMe){ + for(var evt of all[i].lose){ + if(evt.type=='discard') num+=evt.cards2.length; + } + break; + } + } + } + player.draw(1+num); + }, + group:'mia_shihui_recover', + subSkill:{ + recover:{ + trigger:{player:'phaseJieshuBegin'}, + forced:true, + filter:function(event,player){ + return player.isDamaged()||player.countCards('he')>0; + }, + content:function(){ + player.chooseToDiscard('he',true); + player.recover(); + }, + }, + }, + }, + mia_qianmeng:{ + trigger:{ + global:'gameDrawAfter', + player:'enterGame', + }, + forced:true, + dutySkill:true, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.countCards('he')>0){ + player.chooseCard('he',true,'潜梦:选择一张牌置于牌堆中'); + } + else event.finish(); + 'step 2' + if(result.bool){ + var card=result.cards[0]; + player.storage.mia_qianmeng=card; + player.$throw(card,1000); + player.lose(card,ui.cardPile).insert_index=function(){ + return ui.cardPile.childNodes[Math.ceil(ui.cardPile.childNodes.length/2)]; + }; + } + else event.finish(); + 'step 3' + game.delayx(); + }, + onremove:true, + group:['mia_qianmeng_achieve','mia_qianmeng_fail'], + subSkill:{ + achieve:{ + trigger:{global:'gainAfter'}, + forced:true, + filter:function(event,player){ + var card=player.storage.mia_qianmeng; + return card&&event.cards.contains(card)&&event.player.getCards('he').contains(card); + }, + skillAnimation:true, + animationColor:'key', + content:function(){ + 'step 0' + player.awakenSkill('mia_qianmeng'); + if(player!=trigger.player) player.gain(player.storage.mia_qianmeng,trigger.player,'give'); + 'step 1' + if(player.hp1){ + for(var i=all.length-2;i>=0;i--){ + if(all[i].isMe){ + num+=all[i].useCard.length; + break; + } + } + } + trigger.num+=num; + }, + }, kyou_zhidian:{ locked:false, mod:{ @@ -4978,7 +5110,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, frequent:true, content:function(){ - player.draw(2); + 'step 0' + if(trigger.name=='phaseUse'){ + player.draw(2); + event.finish(); + return; + } + var list=[],history=player.getHistory('useCard'); + for(var i of history){ + list.add(get.suit(i.card)); + if(list.length>=player.hp) break; + } + if(list.length>=player.hp) event.goon=true; + else player.chooseControl('摸牌阶段','出牌阶段').set('prompt','精策:选择要执行的额外阶段'); + 'step 1' + if(event.goon||result.index==0){ + var next=player.phaseDraw(); + event.next.remove(next); + trigger.getParent().next.push(next); + } + if(event.goon||result.index==1){ + var next=player.phaseUse(); + event.next.remove(next); + trigger.getParent().next.push(next); + } }, }, kyoko_shelie:{ @@ -14877,6 +15032,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_crow:'小空', key_asara:'井上晶', key_kotomi:'一之濑琴美', + key_mia:'藤川米娅', lucia_duqu:'毒躯', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -15214,6 +15370,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kotomi_chuanxiang:'传箱', kotomi_chuanxiang2:'传箱', kotomi_chuanxiang_info:'其他角色的出牌阶段限一次,其可以将装备区内的一张牌移动到另一名角色的装备区内,然后你摸一张牌。若你是目标角色,则你改为摸两张牌。', + mia_shihui:'时迴', + mia_shihui_info:'锁定技,摸牌阶段,你改为摸X+1张牌(X为你上回合弃置的牌数);结束阶段,你弃置一张牌并回复1点体力。', + mia_qianmeng:'潜梦', + mia_qianmeng_info:'使命技。①游戏开始时,你摸一张牌,然后将一张牌置于牌堆的正中央。②使命:当有角色获得“潜梦”牌时,其将此牌交给你。你将体力值回复至上限,失去〖时迴〗并获得〖风发〗。③失败:当你死亡时,你可令一名角色获得牌堆中所有与“潜梦”牌点数相同的牌。', + mia_fengfa:'风发', + mia_fengfa_info:'锁定技。摸牌阶段,你多摸X张牌(X为你上回合使用过的牌数)。', key_kud:'库特莉亚芙卡', kud_qiaoshou:'巧手', diff --git a/character/offline.js b/character/offline.js index 8ae48f65c..81e3eb0e5 100644 --- a/character/offline.js +++ b/character/offline.js @@ -9,10 +9,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ offline_sticker:['sp_gongsunzan','sp_simazhao','sp_wangyuanji','sp_xinxianying','sp_liuxie'], offline_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], offline_yongjian:["ns_chendao","yj_caoang"], - offline_s:["ns_jiaxu","ns_caoanmin","jsp_liubei"], + offline_others:["ns_jiaxu","ns_caoanmin","jsp_liubei","longyufei"], }, }, character:{ + longyufei:['female','shu',3,['longyi','zhenjue']], sp_liubei:['male','shu',4,['zhaolie','shichou'],['zhu']], sp_zhangfei:['male','shu',4,['jie','dahe']], sp_lvmeng:['male','wu',3,['tanhu','mouduan']], @@ -39,6 +40,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterIntro:{ huangjinleishi:"黄巾军中负责施法的女祭司二人组。", + longyufei:'《三国杀·阵面对决》中的虚构角色,设定是由刘备之女夏侯岚、关羽之女关银屏、张飞之女张星彩三人在与吕布之魔魂战斗时,释放雅典娜的惊叹而召唤出来的精元化神。', }, perfectPair:{}, card:{ @@ -61,6 +63,125 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //龙羽飞 + longyi:{ + enable:['chooseToUse','chooseToRespond'], + filter:function(event,player){ + if(event.type=='wuxie') return false; + var hs=player.getCards('h'); + if(!hs.length) return false; + for(var i of hs){ + if(game.checkMod(i,player,'unchanged','cardEnabled2',player)===false) return false; + } + for(var i of lib.inpile){ + if(i!='du'&&get.type(i)=='basic'&&event.filterCard({name:i,cards:hs},player,event)) return true; + if(i=='sha'){ + var list=['fire','thunder','ice']; + for(var j of list){ + if(event.filterCard({name:i,nature:j,cards:hs},player,event)) return true; + } + } + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var vcards=[],hs=player.getCards('h'); + for(var i of lib.inpile){ + if(i!='du'&&get.type(i)=='basic'&&event.filterCard({name:i,cards:hs},player,event)) vcards.push(['基本','',i]); + if(i=='sha'){ + var list=['fire','thunder','ice']; + for(var j of list){ + if(event.filterCard({name:i,nature:j,cards:hs},player,event)) vcards.push(['基本','',i,j]); + } + } + } + return ui.create.dialog('龙裔',[vcards,'vcard']); + }, + check:function(button,player){ + if(_status.event.getParent().type!='phase') return 1; + return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]}); + }, + backup:function(links,player){ + return { + audio:'longyi', + popname:true, + viewAs:{name:links[0][2],nature:links[0][3]}, + filterCard:true, + selectCard:-1, + position:'h', + } + }, + }, + hiddenCard:function(player,name){ + return name!='du'&&get.type(name)=='basic'&&player.countCards('h')>0; + }, + ai:{ + respondSha:true, + respondShan:true, + skillTagFilter:function(player){ + return player.countCards('h')>0; + }, + order:0.5, + result:{ + player:function(player){ + if(_status.event.dying){ + return get.attitude(player,_status.event.dying); + } + if(_status.event.type=='respondShan') return 1; + var val=0,hs=player.getCards('h'),max=0; + for(var i of hs){ + val+=get.value(i,player); + if(get.type(i,player)=='trick') max+=5; + } + if(player.hasSkill('zhenjue')) max+=7; + return val<=max?1:0; + }, + }, + }, + group:'longyi_effect', + subSkill:{ + effect:{ + trigger:{player:'useCard'}, + forced:true, + charlotte:true, + popup:false, + filter:function(event,player){ + if(event.skill!='longyi_backup') return false; + for(var i of event.cards){ + var type=get.type2(i,player); + if(type=='basic'||type=='trick') return true; + } + return false; + }, + content:function(){ + var map={}; + for(var i of trigger.cards){ + map[get.type2(i,player)]=true; + } + if(map.trick) player.draw(); + if(map.equip) trigger.directHit.addArray(game.players); + }, + }, + backup:{}, + }, + }, + zhenjue:{ + trigger:{global:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.countCards('h')==0; + }, + logTarget:'player', + content:function(){ + 'step 0' + trigger.player.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){ + if(_status.event.goon) return 7-get.value(card); + return -get.value(card); + }).set('goon',get.attitude(trigger.player,player)<0); + 'step 1' + if(!result.bool) player.draw(); + }, + }, //群刘备 jsprende:{ audio:'rerende', @@ -2444,12 +2565,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shichou:'誓仇', shichou2:'誓仇', shichou_info:'主公技,限定技,准备阶段,你可指定一名蜀势力角色并交给其两张牌。本局游戏中,当你受到伤害时,改为该角色受到等量的伤害并摸等量的牌,直至该角色第一次进入濒死状态。', + longyufei:'龙羽飞', + longyi:'龙裔', + longyi_info:'你可将所有手牌当做任意基本牌使用或打出。若此牌对应的实体牌中:有锦囊牌,你摸一张牌;有装备牌,此牌不可被响应。', + zhenjue:'阵绝', + zhenjue_info:'一名角色的结束阶段开始时,若你没有手牌,则你可以令其选择一项:①弃置一张牌。②令你摸一张牌。', offline_star:'桌游志·SP', offline_sticker:'桌游志·贴纸', offline_luanwu:'文和乱武', offline_yongjian:'用间篇', - offline_s:'线下S系列', + offline_others:'线下其他系列', }, }; }); diff --git a/character/rank.js b/character/rank.js index 3088f0960..30ad5646b 100644 --- a/character/rank.js +++ b/character/rank.js @@ -694,6 +694,8 @@ window.noname_character_rank={ 'gaogan', 'sp_xunchen', 'duxi', + 'heyan', + 're_caifuren', ], b:[ 'diy_feishi', @@ -881,6 +883,8 @@ window.noname_character_rank={ 're_guanping', 'feiyi', 'xiangchong', + 'qiuliju', + 're_dongbai', ], bm:[ 'diy_xizhenxihong', @@ -1029,6 +1033,7 @@ window.noname_character_rank={ 're_niujin', 'wangfuzhaolei', 'caizhenji', + 'longyufei', ], c:[ 'xiahoudun', @@ -1383,6 +1388,7 @@ window.noname_character_rank={ 'ns_zhangning', 'ns_yanghu', 'ol_huaxin', + 'longyufei', 'key_haruko', 'key_akiko', 'key_sunohara', @@ -1708,6 +1714,9 @@ window.noname_character_rank={ 'gaogan', 'caizhenji', 'duxi', + 'heyan', + 're_caifuren', + 're_dongbai', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index 7262a07ac..c9d75c111 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -12,12 +12,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'], refresh_yijiang2:['old_madai','wangyi','guanzhang','xin_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','re_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'], - refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun'], + refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji'], }, }, connect:true, character:{ + re_caifuren:['female','qun',3,['reqieting','rexianzhou']], re_guanping:['male','shu',4,['relongyin','jiezhong']], re_guotufengji:['male','qun',3,['rejigong','shifei']], re_chenqun:['male','wei',3,['redingpin','refaen']], @@ -135,6 +136,132 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + //界蔡夫人 + reqieting:{ + audio:2, + trigger:{global:'phaseEnd'}, + direct:true, + filter:function(event,player){ + var target=event.player; + if(player==target) return false; + if(!target.getHistory('sourceDamage').length){ + var cards=target.getCards('e'); + for(var i of cards){ + if(player.isEmpty(get.subtype(i))) return true; + } + } + return target.getHistory('useCard',function(evt){ + return evt.targets&&evt.targets.filter(function(i){ + return i!=target; + }).length>0; + }).length==0; + }, + frequent:true, + content:function(){ + 'step 0' + var target=trigger.player; + event.target=target; + event.logged=false; + var list=[]; + if(!target.getHistory('sourceDamage').length){ + var cards=target.getCards('e'); + for(var i of cards){ + if(player.isEmpty(get.subtype(i))) list.push(i); + } + } + if(list.length){ + player.choosePlayerCard(target,'e',get.prompt('reqieting',target)).set('list',list).set('filterButton',function(button){ + return _status.event.list.contains(button.link); + }).set('ai',function(button){ + var evt=_status.event,val=get.value(button.link); + if(evt.target.hasSkillTag('noe')) val-=4; + if((evt.att>0)==(val>0)) return 0; + return get.effect(evt.player,button.link,evt.player,evt.player); + }).set('att',get.attitude(player,target)); + } + else event.goto(2); + 'step 1' + if(result.bool){ + player.logSkill('reqieting',target); + event.logged=true; + var card=result.links[0]; + target.$give(card,player,false); + game.delay(0.5); + player.equip(card); + } + if(target.getHistory('useCard',function(evt){ + return evt.targets&&evt.targets.filter(function(i){ + return i!=target; + }).length>0; + }).length!=0) event.finish(); + 'step 2' + player.chooseBool('是否发动【窃听】摸一张牌?').set('frequentSkill','reqieting'); + 'step 3' + if(result.bool){ + if(!event.logged) player.logSkill('reqieting',target); + player.draw(); + } + }, + }, + rexianzhou:{ + audio:2, + enable:'phaseUse', + limited:true, + skillAnimation:true, + animationColor:'gray', + filter:function(event,player){ + return player.countCards('e')>0; + }, + filterCard:true, + position:'e', + selectCard:-1, + filterTarget:lib.filter.notMe, + discard:false, + lose:false, + delay:false, + content:function(){ + 'step 0' + player.awakenSkill('rexianzhou'); + target.gain(cards,player,'give'); + player.recover(cards.length) + 'step 1' + var list=game.filterPlayer(function(current){ + return target.inRange(current); + }); + if(list.length){ + var max=Math.min(list.length,cards.length); + player.chooseTarget(true,[1,max],'对至多'+get.cnNumber(max)+'名范围内的角色各造成1点伤害',function(card,player,target){ + return _status.event.list.contains(target); + }).set('list',list); + } + else event.finish(); + 'step 2' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.line(targets,'green'); + for(var i of targets) i.damage('nocard'); + } + }, + ai:{ + order:1, + result:{ + target:1, + player:function(player){ + var bool=true,players=game.filterPlayer(); + for(var i=0;i2&&get.attitude(players[i],player)>2){ + bool=false;break; + } + } + if(bool) return -10; + if(player.hp==1) return 1; + if(game.phaseNumber=2) player.loseHp(); + //if(targets.length>=2) player.loseHp(); }; }; }; }, }, - "nzry_zhizheng":{ - audio:2, - mod:{ - playerEnabled:function(card,player,target){ - var info=get.info(card); - if(target!=player&&(!info||!info.singleCard||!ui.selected.targets.length)&&player.isPhaseUsing()&&!target.inRange(player)) return false; + rechezheng:{ + audio:'nzry_zhizheng', + trigger:{source:'damageBegin2'}, + filter:function(event,player){ + return player.isPhaseUsing()&&!player.inRangeOf(event.player); + }, + forced:true, + logTarget:'player', + content:function(){ + trigger.cancel(); + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(get.tag(card,'damage')&&!player.inRangeOf(target)) return 'zerotarget'; + }, }, }, + }, + nzry_zhizheng:{ + audio:2, + //mod:{ + // playerEnabled:function(card,player,target){ + // var info=get.info(card); + // if(target!=player&&(!info||!info.singleCard||!ui.selected.targets.length)&&player.isPhaseUsing()&&!target.inRange(player)) return false; + // }, + //}, trigger:{ player:'phaseUseEnd' }, @@ -1645,14 +1664,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.discardPlayerCard(result.targets[0],'he',1,true); }; }, + group:'rechezheng', }, - "nzry_lijun":{ + nzry_lijun:{ unique:true, global:'nzry_lijun1', audio:'nzry_lijun1', zhuSkill:true, }, - nzry_lijun2:{}, + nzry_lijun2:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('nzry_lijun2'); + }, + }, + onremove:true, + }, "nzry_lijun1":{ audio:2, //forceaudio:true, @@ -1661,7 +1688,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filter:function(event,player){ if(event.card.name!='sha') return false; - //if(player.hasSkill('nzry_lijun2')) return false; + if(player.hasSkill('nzry_lijun2')) return false; if(player.group!='wu') return false; if(_status.currentPhase!=player) return false; if(!game.hasPlayer(function(target){ @@ -1688,7 +1715,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(!result.bool) event.finish(); else{ - //player.addTempSkill('nzry_lijun2','phaseUseEnd'); + player.addTempSkill('nzry_lijun2','phaseUseEnd'); var zhu=result.targets[0]; player.line(zhu,'green'); zhu.logSkill('nzry_lijun'); @@ -1705,7 +1732,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }).set('prompt','是否令'+get.translation(player)+'摸一张牌?'); } 'step 2' - if(result.bool) player.draw(); + if(result.bool){ + player.draw(); + player.addMark('nzry_lijun2',1,false); + } }, }, "nzry_chenglve":{ @@ -5345,6 +5375,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return target.countCards('h')2){ return Math.min(5,target.maxHp)-target.countCards('h'); } @@ -7372,12 +7403,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "nzry_cunmu":"寸目", "nzry_cunmu_info":"锁定技,当你摸牌时,改为从牌堆底摸牌。", "nzry_kuizhu":"溃诛", - "nzry_kuizhu_info":"弃牌阶段结束后,你可以选择一项:令至多X名角色各摸一张牌,或对任意名体力值之和为X的角色造成一点伤害,若不少于2名角色,你须受到一点伤害。(X为你此阶段弃置的牌数)", + "nzry_kuizhu_info":"弃牌阶段结束后,你可以选择一项:①令至多X名角色各摸一张牌。②对任意名体力值之和为X的角色造成一点伤害。(X为你此阶段弃置的牌数)", "nzry_zhizheng":"掣政", + rechezheng:'掣政', "nzry_zhizheng_info":"锁定技,你的出牌阶段内,攻击范围内不包含你的其他角色不能成为你使用牌的目标。出牌阶段结束时,若你本阶段内使用的牌数小于这些角色的数量,则你弃置其中一名角色的一张牌。", "nzry_lijun1":"立军", "nzry_lijun":"立军", - "nzry_lijun_info":"主公技,其他吴势力角色于回合内使用的【杀】结算后,可以将此【杀】对应的实体牌交给你,然后你可以令其摸一张牌。", + "nzry_lijun_info":"主公技,其他吴势力角色的出牌阶段限一次,其使用【杀】结算后,可以将此【杀】对应的实体牌交给你,然后你可以令其摸一张牌且本阶段内使用【杀】的次数上限+1。", "nzry_huaiju":"怀橘", "nzry_huaiju_info":"锁定技,游戏开始时,你获得3个“橘”标记。(有“橘”的角色受到伤害时,防止此伤害,然后移去一个“橘”;有“橘”的角色摸牌阶段额外摸一张牌)", "tachibana_effect":"怀橘", diff --git a/character/sp.js b/character/sp.js index bfd6c4f78..53e50f233 100755 --- a/character/sp.js +++ b/character/sp.js @@ -3442,8 +3442,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //forced:true, frequent:true, filter:function(event,player){ - if(event.source==player&&event.player!=player&&player.hp>player.countCards('h')){ - return event.relatedLose&&event.relatedLose.hs&&event.relatedLose.hs.length>0; + if(event.player!=player&&player.hp>player.countCards('h')){ + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length>0; } return false; }, @@ -6420,7 +6421,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mark:true, intro:{ - content:'下个回合结束之前使用“抚蛮”牌时,令$一张牌' + content:'下个回合结束之前使用“抚蛮”牌时,令$摸一张牌' }, content:function(){ 'step 0' @@ -15247,7 +15248,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanbaihu:'严白虎', wanglang:'王朗', caochun:'曹纯', - dongbai:'董白', + dongbai:'OL董白', zhaoxiang:'赵襄', heqi:'贺齐', kanze:'阚泽', @@ -15955,7 +15956,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ juguan_info:'出牌阶段限一次,你可将一张手牌当【杀】或【决斗】使用。若受到此牌伤害的角色未在你的下回合开始前对你造成过伤害,你的下个摸牌阶段摸牌数+2。', duxi:'杜袭', quxi:'驱徙', - quxi_info:'限定技。出牌阶段结束时,你可跳过下个弃牌阶段并选择两名手牌数不同的其他角色。你将翻至背面,令这两名角色中手牌数较少的角色获得另一名角色的一张牌并获得一枚“丰”,另一名角色获得一枚“歉”。拥有“丰”/“歉”的角色的摸牌阶段额定摸牌数+1/-1。拥有“丰”/“”的角色死亡时,或一轮游戏开始时,你可转移“丰”/“歉”。', + quxi_info:'限定技。出牌阶段结束时,你可跳过下个弃牌阶段并选择两名手牌数不同的其他角色。你将翻至背面,令这两名角色中手牌数较少的角色获得另一名角色的一张牌并获得一枚“丰”,另一名角色获得一枚“歉”。拥有“丰”/“歉”的角色的摸牌阶段额定摸牌数+1/-1。拥有“丰”/“歉”的角色死亡时,或一轮游戏开始时,你可转移“丰”/“歉”。', bixiong:'避凶', bixiong2:'避凶', bixiong_info:'锁定技,当你于弃牌阶段弃置手牌后,你不能成为与这些牌花色相同的牌的目标直到你下回合开始。', diff --git a/character/sp2.js b/character/sp2.js index 67996a9db..39ee03579 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + re_dongbai:['female','qun',3,['relianzhu','rexiahui']], + qiuliju:['male','qun',6,['koulve','qljsuiren']], + heyan:['male','wei',3,['yachai','qingtan']], re_hucheer:['male','qun',4,['redaoji','fuzhong']], re_dongcheng:['male','qun',4,['xuezhao']], yangwan:['female','shu',3,['youyan','zhuihuan']], @@ -95,11 +98,364 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui','liubian'], 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'], + 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"], } }, skill:{ + //董白 + relianzhu:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')>0; + }, + filterCard:true, + discard:false, + lose:false, + delay:false, + position:'he', + filterTarget:lib.filter.notMe, + check:function(card){ + var num=get.value(card); + if(get.color(card)=='black'){ + if(num>=6) return 0; + return 9-num; + } + else{ + return 7-num; + } + }, + content:function(){ + 'step 0' + target.gain(cards,player,'give'); + 'step 1' + if(get.color(cards[0],player)=='red'){ + player.draw(); + event.finish(); + } + else{ + target.chooseToDiscard('he',2,'弃置两张牌,或令'+get.translation(player)+'摸两张牌').set('goon',get.attitude(target,player)<0).set('ai',function(card){ + if(!_status.event.goon) return -get.value(card); + return 6-get.value(card); + }); + } + 'step 2' + if(!result.bool) player.draw(2); + }, + ai:{ + order:3, + expose:0.2, + result:{ + target:function(player,target){ + if(ui.selected.cards.length&&get.color(ui.selected.cards[0])=='red'){ + if(target.countCards('h')0; + }, + content:function(){ + trigger.player.loseHp(); + }, + group:'rexiahui_gain', + subSkill:{ + gain:{ + trigger:{global:'gainEnd'}, + forced:true, + popup:false, + filter:function(event,player){ + if(player==event.player) return false; + var evt=event.getl(player); + return evt&&evt.cards2&&evt.cards2.filter(function(card){ + return get.color(card,player)=='black'; + }).length>0; + }, + content:function(){ + trigger.player.addSkill('rexiahui_block'); + var cards=trigger.getl(player).cards2.filter(function(card){ + return get.color(card,player)=='black'; + }); + trigger.player.addGaintag(cards,'rexiahui'); + }, + }, + block:{ + mod:{ + cardEnabled2:function(card){ + if(get.itemtype(card)=='card'&&card.hasGaintag('rexiahui')) return false; + }, + cardDiscardable:function(card){ + if(card.hasGaintag('rexiahui')) return false; + }, + }, + charlotte:true, + forced:true, + popup:false, + trigger:{player:'loseHp'}, + filter:function(event,player){ + return event.num<0; + }, + content:function(){ + player.removeSkill('rexiahui_block'); + }, + onremove:function(){ + player.removeSkill('rexiahui_block'); + }, + }, + }, + }, + //丘力居 + koulve:{ + audio:2, + trigger:{source:'damageSource'}, + logTarget:'player', + filter:function(event,player){ + return event.player.countCards('h')>0&&player.isPhaseUsing(); + }, + check:function(event,player){ + if(player.hp==1&&player.isHealthy()) return false; + return get.attitude(player,event.player)<=0; + }, + content:function(){ + 'step 0' + player.choosePlayerCard(trigger.player,'h',true); + 'step 1' + var card=result.cards[0]; + event.card=card; + player.showCards(card,get.translation(player)+'发动了【宼略】'); + 'step 2' + var target=trigger.player,type=get.type2(card,target); + if((type=='basic'||type=='trick')&&get.tag(card,'damage')>0) player.gain(card,target,'give'); + 'step 3' + if(get.color(card,trigger.player)=='red'){ + player[player.isDamaged()?'loseMaxHp':'loseHp'](); + player.draw(2); + } + }, + }, + qljsuiren:{ + audio:2, + trigger:{player:'die'}, + forced:true, + forceDie:true, + skillAnimation:true, + animationColor:'gray', + filter:function(event,player){ + return player.countCards('h',function(card){ + var type=get.type(card,player); + return (type=='basic'||type=='trick')&&get.tag(card,'damage')>0; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(lib.filter.notMe,get.prompt('qljsuiren'),'将所有伤害性基本牌和锦囊牌交给一名其他角色').set('forceDie',true).set('ai',function(target){ + var player=_status.event.player,cards=_status.event.aiCards; + var att=get.attitude(player,target); + if(att<=0) return 0; + if(target.hasSkillTag('nogain')) att/=100; + var num=0.1; + for(var i of cards) num+=Math.max(0,target.getUseValue(card)); + return num*att; + }).set('aiCards',player.getCards('h',function(card){ + var type=get.type(card,player); + return (type=='basic'||type=='trick')&&get.tag(card,'damage')>0; + })); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('qljsuiren',target); + target.gain(player.getCards('h',function(card){ + var type=get.type(card,player); + return (type=='basic'||type=='trick')&&get.tag(card,'damage')>0; + }),player,'giveAuto'); + } + }, + }, + //何晏 + yachai:{ + audio:2, + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&event.source.isIn(); + }, + logTarget:'source', + check:function(event,player){ + return get.attitude(player,event.source)<0; + }, + content:function(){ + 'step 0' + var target=trigger.source; + event.target=target; + var th=target.countCards('h'); + if(th>0){ + var list=[ + '本回合不能使用或打出手牌', + '展示所有手牌并弃置其中一种花色的所有牌', + ],ph=player.countCards('h'); + if(ph!=th){ + var num=Math.ceil(Math.abs(ph-th)/2); + event.num=num; + list.push('交给'+get.translation(player)+get.cnNumber(num)+'张手牌'); + } + target.chooseControl().set('choiceList',list); + } + else event._result={index:0}; + 'step 1' + switch(result.index){ + case 0:target.addTempSkill('yachai_block');event.finish();break; + case 1:target.showHandcards();break; + case 2:event.goto(4);break; + } + 'step 2' + var map={},hs=target.getCards('h'); + for(var i of hs){ + if(lib.filter.cardDiscardable(card,target,'yachai')) map[get.suit(i,target)]=true; + } + var list=[]; + for(var i of lib.suit){ + if(map[i]) list.push(i); + } + if(!list.length) event.finish(); + else if(list.length==1) event._result={control:list[0]}; + else target.chooseControl(list).set('prompt','选择弃置一种花色'); + 'step 3' + var cards=target.getCards('h',function(card){ + return get.suit(card,target)==result.control&&lib.filter.cardDiscardable(card,target,'yachai'); + }); + if(cards.length) target.discard(cards); + event.finish(); + 'step 4' + target.chooseCard('h',true,'交给'+get.translation(player)+get.cnNumber(num)+'张手牌'); + 'step 5' + if(result.bool) player.gain(result.cards,target,'giveAuto'); + }, + subSkill:{ + block:{ + mark:true, + intro:{content:'不能使用或打出手牌'}, + charlotte:true, + mod:{ + cardEnabled2:function(card){ + if(get.position(card)=='h') return false; + }, + }, + }, + }, + }, + qingtan:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer((current)=>current.countCards('h')>0); + }, + filterTarget:function(card,player,target){ + return target.countCards('h')>0; + }, + selectTarget:-1, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + targets.sortBySeat(); + var next=player.chooseCardOL(targets,'请选择要展示的牌',true).set('ai',function(card){ + return -get.value(card); + }).set('source',player); + next.aiCard=function(target){ + var hs=target.getCards('h'); + return {bool:true,cards:[hs.randomGet()]}; + }; + next._args.remove('glow_result'); + 'step 1' + var cards=[]; + event.videoId=lib.status.videoId++; + for(var i=0;imax){ + max_suit=i; + max=map[i]; + } + else if(map[i]==max) max_suit=null; + } + if(max_suit){ + var cards=cards.filter(function(card){ + return get.suit(card)==max_suit; + }); + event.cards2=cards; + player.chooseBool('是否获得所有'+get.translation(max_suit)+'牌?','可获得:'+get.translation(cards)); + } + else event.finish(); + 'step 3' + if(result.bool){ + player.$gain2(event.cards2); + player.gain(event.cards2); + game.delay(0.3); + } + else event.finish(); + 'step 4' + for(var i=0;i0){ if((target.isDamaged()||target.isTurnedOver())&&(get.suit(card,target)=='heart'||get.name(card,target)=='jiu')) return 3; if(target.hasUseTarget(card)&&target.getUseValue(card)>player.getUseValue(card,null,true)) return 1.4; return 1; } - if(player.hasSkill('jiaoying',true)&&target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&get.color(card)=='red'&&player.countCards('h',function(card){ - return get.tag(card,'respondShan')&&get.effect(target,card,player,player)>0&&player.getUseValue(card)>0; - })) return -1; - return 1; } return 0; }, @@ -1559,14 +1917,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, filter:function(event,player){ return player.getStorage('jiaoying3').length>0&&game.hasPlayer(function(current){ - return current.countCards('h')2){ @@ -1578,7 +1936,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ player.logSkill('jiaoying',result.targets); for(var i=0;i0; + }); + if(card) player.gain(card,'gain2'); + }, + }, + }, }, xiying2:{ mark:true, @@ -7183,7 +7562,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ frequent:true, content:function(){ 'step 0' - var cards=get.cards(2); + var cards=get.cards(3); event.cards=cards; game.log(player,'观看了牌堆顶的'+get.cnNumber(cards.length)+'张牌'); player.chooseControl('ok').set('dialog',['推演',cards]); @@ -7274,11 +7653,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.count=0; 'step 1' player.draw('visible'); - event.count++; 'step 2' if(Array.isArray(result)){ - if(get.color(result[0])=='black'){ - player.loseHp(); + event.count+=result.length; + if(get.color(result)!='red'){ + if(player.hp>1) player.loseHp(); event.finish(); } else if(event.count<3) player.chooseBool('是否继续发动【命戒】?').ai=function(){ @@ -8675,6 +9054,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhangheng:'张横,生卒年不详,武威郡姑臧人,东汉末年凉州军阀之一。与梁兴、贾诩、段煨乃是同乡。建安三年(198),张横与梁兴、段煨等斩杀李傕。十六年(211),同韩遂、马超联合,起兵反抗曹操,兵败后不知所终。', tangji:'唐姬,会稽太守唐瑁女,弘农怀王刘辩的妃子。刘辩死后,唐姬回归故里,因节烈不愿改嫁他人,后被汉献帝下诏封为弘农王妃。', yangwan:'杨氏(婉字出自小说,史书无记载),生卒年不详,东汉末年凉州人。早年嫁于东汉前将军、槐里侯马腾之子马超,追随马超转战并州、雍州、凉州,为马超生下子嗣。公元212年,马超联军在渭南战败后,杨婉随马超逃亡凉州,很快马超反攻吞并陇上诸郡县。公元213年,杨婉为了帮助马超,结识王异,了解马超这些投降部下。可惜被王异蛊惑,遭致马超大败。自己和孩子都被赵衢、梁宽杀害。', + wenqin:'文钦(?~258年),字仲若,沛国谯郡(今安徽省亳州市)人,三国时期曹魏将领,曹操部将文稷之子。魏明帝太和年间文钦任牙门将、五营校督,后拜庐江太守、冠军将军,嘉平元年(249年),曹爽及其同党在高平陵之变中被杀,文钦心中不安,执政的司马氏集团为了安抚文钦,升其为前将军、扬州刺史,任职期间结交镇东将军毌丘俭。击退吴国太傅诸葛恪进攻,取得一定战果。正元二年(255年),文钦与镇东将军毌丘俭在扬州起兵讨伐司马师,兵败后投奔吴国,被封为镇北大将军、幽州牧,封谯侯。甘露二年(257年),文钦随吴军援救起兵反抗司马氏的诸葛诞,此后因被司马昭大军围困,军情告急,文钦与诸葛诞本就有矛盾,对文钦日益不满的诸葛诞遂将文钦杀死。淮南平定之后,文钦遗体被其二子收敛安葬。', + heyan:'何晏(?-249年),字平叔。南阳郡宛县(今河南省南阳市)人。三国时期曹魏大臣、玄学家,东汉大将军何进之孙(一称何进弟何苗之孙)。何晏之父早逝,司空曹操纳其母尹氏为妾,他因而被收养,为曹操所宠爱。少年时以才秀知名,喜好老庄之学,娶曹操之女金乡公主。魏文帝在位时,未被授予官职。魏明帝认为何晏虚浮不实,也只授其冗官之职。大将军曹爽秉政时,何晏与之共事,得以累官至侍中、吏部尚书,典选举,封列侯。高平陵之变后,与大将军曹爽同为太傅司马懿所杀,被夷灭三族。何晏有文集十一卷,并曾与郑冲等共撰《论语集解》,今已佚。钟嵘《诗品》称“平叔鸿鹄之篇,风规见矣。”将何晏诗列入中品。袁宏在《名士传》中将何晏等称为正始名士。他与夏侯玄、王弼等倡导玄学,竞事清谈,遂开一时风气,为魏晋玄学的创始者之一。', + qiuliju:'丘力居,东汉末年的辽西乌丸大人。拉拢中山太守张纯反叛东汉,寇略青、徐、幽、冀四州,杀略吏民。死时认为儿子楼班年幼,于是让从子蹋顿总摄三王部。', + fengxi:'冯熙(?—223年),字子柔,颍川郡父城县(今河南省平顶山市宝丰县)人。汉末三国时期吴国官员,东汉初年名将冯异的后人。孙权担任车骑将军时,冯熙担任其幕府东曹掾,后迁立信都尉。刘备去世时,奉命进入蜀汉吊丧,返回后,任中大夫。后奉命出使魏国,受到魏文帝曹丕和尚书令陈群招揽,宁死不从,自尽未果。孙权闻之流泪,称其“东吴苏武”。最终在曹魏死去。', + liuba:'刘巴(?-222年),字子初,荆州零陵郡烝阳县(今湖南省衡阳县、邵东县一带)人,东汉末年至三国时期蜀汉时期官员、名士。刘巴少知名,荆州牧刘表多次征用推举,刘巴均不应就。曹操征伐荆州,荆州士人多归刘备,刘巴却北上投靠曹操。后受曹操命令招降荆南三郡,不料先为刘备所得,刘巴不能复命曹操,遂远至交趾,又辗转进入益州。刘备平定益州后,刘巴归附刘备,为左将军西曹掾,法正死后接任尚书令。章武二年(222年)去世。刘巴博学多才,为刘备解决入蜀后的财政困难问题,又与诸葛亮等共制蜀汉的法律文件《蜀科》。为人简朴清高,退无私交,曹魏大臣陈群甚敬重之。所著录于《刘令君集》。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -8721,8 +9105,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '出牌阶段限'+(player.hasSkill('recaishi2')?'两':'一')+'次,你可以选择一名本回合内未选择过的角色。你令其获得一项效果直至你的下回合开始:①其下次造成伤害后弃置两张牌,然后你摸一张牌。②其下次受到伤害后摸两张牌,然后你摸一张牌。' }, bazhan:function(player){ - if(player.storage.bazhan) return '转换技,出牌阶段限一次,阴:你可以将一张手牌交给一名其他角色。阳:你可以获得一名其他角色的一张手牌。若以此法移动的牌为【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; - return '转换技,出牌阶段限一次,阴:你可以将一张手牌交给一名其他角色。阳:你可以获得一名其他角色的一张手牌。若以此法移动的牌为【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; + if(player.storage.bazhan) return '转换技,出牌阶段限一次,阴:你可以将两张手牌交给一名其他角色。阳:你可以获得一名其他角色的两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; + return '转换技,出牌阶段限一次,阴:你可以将两张手牌交给一名其他角色。阳:你可以获得一名其他角色的两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; }, }, perfectPair:{ @@ -8744,6 +9128,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_liubei:['sp_liubei','jsp_liubei'], dongcheng:['re_dongcheng','dongcheng'], hucheer:['re_hucheer','hucheer'], + dongbai:['re_dongbai','dongbai'], }, translate:{ lijue:"李傕", @@ -8838,12 +9223,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gexuan:'葛玄', tuiyan:'推演', - tuiyan_info:'出牌阶段开始时,你可以观看牌堆顶的两张牌。', + tuiyan_info:'出牌阶段开始时,你可以观看牌堆顶的三张牌。', busuan:'卜算', busuan_info:'出牌阶段限一次,你可以选择一名其他角色,然后选择至多两张不同的卡牌名称(限基本牌或锦囊牌)。该角色下次摸牌阶段摸牌时,改为从牌堆或弃牌堆中获得你选择的牌。', busuan_angelbeats:'卜算', mingjie:'命戒', - mingjie_info:'结束阶段,你可以摸一张牌,若此牌为红色,你可以重复此流程直到摸到黑色牌或摸到第三张牌。当你以此法摸到黑色牌时,你失去1点体力。', + mingjie_info:'结束阶段,你可以摸一张牌,若此牌为红色,你可以重复此流程直到摸到黑色牌或摸到第三张牌。当你以此法摸到黑色牌时,若你的体力值大于1,则你失去1点体力。', gxlianhua:'炼化', gxlianhua_info:'你的回合外,每当有其他角色受到伤害后,你获得一个“丹血”标记(该角色与你阵营一致时为红色,不一致为黑色,此颜色对所有玩家均不可见)直到你的准备阶段开始。准备阶段,根据你获得的“丹血”标记的数量和颜色,你从牌堆/弃牌堆中获得相应的牌以及相应技能直到回合结束。3枚或以下:〖英姿〗和【桃】;超过3枚且红色“丹血”较多:〖观星〗和【无中生有】;超过3枚且黑色“丹血”较多:〖直言〗和【顺手牵羊】;超过3枚且红色和黑色一样多:【杀】、【决斗】和〖攻心〗。', zhafu:'札符', @@ -8922,7 +9307,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gaolan:'高览', xiying:'袭营', xiying2:'袭营', - xiying_info:'出牌阶段开始时,你可以弃置一张非基本手牌,然后令所有其他角色依次选择一项:弃置一张牌,或本回合内不能使用或打出牌。', + xiying_info:'出牌阶段开始时,你可以弃置一张非基本手牌,然后令所有其他角色依次选择一项:弃置一张牌,或本回合内不能使用或打出牌;且你本回合内获得如下效果:结束阶段,若你于本回合的出牌阶段内造成过伤害,则你从牌堆中获得一张伤害性基本牌或普通锦囊牌。', lvkuanglvxiang:'吕旷吕翔', liehou:'列侯', liehou_info:'出牌阶段限一次,你可以令一名攻击范围内的角色交给你一张手牌,然后你将一张手牌交给攻击范围内的另一名角色。', @@ -9145,12 +9530,12 @@ 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:'醮影', jiaoying3_draw:'醮影', - jiaoying_info:'锁定技,其他角色获得你的手牌后,该角色本回合不能使用或打出与此牌颜色相同的牌。然后此回合结束时,若其本回合没有再使用牌,你令一名角色将手牌摸至体力上限(至多摸至五张)。', + jiaoying_info:'锁定技,其他角色获得你的手牌后,该角色本回合不能使用或打出与此牌颜色相同的牌。然后此回合结束时,若其本回合没有再使用牌,你令一名角色将手牌摸至五张。', zhaozhong:'赵忠', yangzhong:'殃众', yangzhong_info:'当你造成或受到伤害后,若受伤角色和伤害来源均存活,则伤害来源可弃置两张牌,然后令受伤角色失去1点体力。', @@ -9226,6 +9611,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ redaoji_info:'其他角色第一次使用武器牌时,你可选择一项:①获得此牌。②令其本回合内不能使用或打出【杀】。', fuzhong:'负重', fuzhong_info:'锁定技,当你于回合外获得牌后,你获得一枚“重”标记。若X:大于0,你的手牌上限+1;大于1,你至其他角色的距离-1;大于2,你于摸牌阶段开始时令额定摸牌数+1;大于3,准备阶段,你对一名其他角色造成1点伤害,然后移去X枚“重”(X为“重”数)。', + heyan:'何晏', + yachai:'崖柴', + yachai_info:'当你受到伤害后,你可令伤害来源选择一项:①其本回合不能再使用手牌;②其展示所有手牌,然后弃置手牌中一种花色的所有牌。③交给你与你手牌数差值一半数量的手牌(向上取整);', + qingtan:'清谈', + qingtan_info:'出牌阶段限一次,你可令所有有手牌的角色同时选择一张手牌并同时展示。你可以获得其中花色唯一最多的牌,然后展示此花色牌的角色各摸一张牌。若如此做,弃置其他的牌。', + qiuliju:'丘力居', + koulve:'宼略', + koulve_info:'当你于出牌阶段内对其他角色造成伤害后,你可以展示其一张手牌。若此牌:为带有伤害标签的基本牌或锦囊牌,则你获得之;为红色牌,你失去1点体力(若已受伤则改为减1点体力上限),然后摸两张牌。', + qljsuiren:'随认', + qljsuiren_info:'当你死亡时,你可以将手牌中所有的带有伤害标签的基本牌或锦囊牌交给一名其他角色。', + re_dongbai:'董白', + relianzhu:'连诛', + relianzhu_info:'出牌阶段限一次,你可将一张牌正面朝上交给一名其他角色。若此牌为:红色,你摸一张牌;黑色,对方弃置两张牌或令你摸两张牌。’', + rexiahui:'黠慧', + rexiahui_info:'锁定技,①当有其他角色获得你的黑色牌后,其于下次扣减体力前不能使用,打出,弃置这些牌。②一名其他角色的回合结束时,若其本回合失去过其所有“黠慧”牌,则其失去1点体力。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/standard.js b/character/standard.js index e273081c1..2777eadf2 100755 --- a/character/standard.js +++ b/character/standard.js @@ -86,7 +86,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lvbu:['diaochan'], machao:['madai','mayunlu'], zhangliao:['zangba'], - ganning:['lingtong'], + ganning:['lingtong','xf_sufei'], }, skill:{ rewangzun:{ diff --git a/character/yijiang.js b/character/yijiang.js index ae78d7d02..534a14ebd 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -12118,6 +12118,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gongsunyuan:['re_gongsunyuan','gongsunyuan'], zhoucang:['re_zhoucang','xin_zhoucang','zhoucang'], guotufengji:['re_guotufengji','guotufengji'], + guanping:['re_guanping','guanping'], + caifuren:['re_caifuren','caifuren'], }, translate:{ old_huaxiong:'华雄', diff --git a/game/asset.js b/game/asset.js index d4ff7026d..bc2aafe48 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.8.4.1', + 'v1.9.110.8.5', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -4267,6 +4267,15 @@ window.noname_asset_list=[ 'image/character/xiangchong.jpg', 'image/character/xin_zhoucang.jpg', 'image/character/duxi.jpg', + 'image/character/fengxi.jpg', + 'image/character/heyan.jpg', + 'image/character/key_mia.jpg', + 'image/character/liuba.jpg', + 'image/character/longyufei.jpg', + 'image/character/qiuliju.jpg', + 'image/character/re_caifuren.jpg', + 'image/character/re_dongbai.jpg', + 'image/character/wenqin.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 06650c753..93e013173 100644 --- a/game/game.js +++ b/game/game.js @@ -15120,9 +15120,17 @@ gain:function(){ "step 0" if(cards){ - var owner=event.source||get.owner(cards[0]); - if(owner){ - var next=owner.lose(cards,ui.special).set('type','gain').set('forceDie',true).set('getlx',false); + var map={}; + for(var i of cards){ + var owner=get.owner(i,'judge'); + if(owner&&(owner!=player||get.position(i)!='h')){ + var id=owner.playerid; + if(!map[id]) map[id]=[]; + map[id].push(i); + } + } + for(var i in map){ + var owner=(_status.connectMode?lib.playerOL:game.playerMap)[i],next=owner.lose(map[i],ui.special).set('type','gain').set('forceDie',true).set('getlx',false); if(event.animate=='give'||event.visible==true) next.visible=true; event.relatedLose=next; } @@ -26753,7 +26761,7 @@ "step 2" if(event.targets.length){ var target=event.targets.shift(); - target.damage.apply(target,event._args.slice(0)); + if(target.isLinked()) target.damage.apply(target,event._args.slice(0)); event.redo(); } }, diff --git a/game/update.js b/game/update.js index 75279876e..33723b4a1 100644 --- a/game/update.js +++ b/game/update.js @@ -1,9 +1,11 @@ window.noname_update={ - version:'1.9.110.8.4.1', - update:'1.9.110.8.4', + version:'1.9.110.8.5', + update:'1.9.110.8.4.1', changeLog:[ - '神太史慈、蔡贞姬、手杀华歆、向宠、手杀许靖、手杀周仓', - '手杀费祎、手杀荀谌、手杀孙邵', + '藤川米娅', + '何晏、丘力居、董白、界蔡夫人、龙羽飞', + '国战文钦、刘巴、冯熙、苏飞', + '孙亮、高览、管辂、樊玉凤技能调整', 'bug修复', ], files:[ @@ -20,29 +22,29 @@ 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/old.js', //'character/ow.js', 'character/rank.js', - //'character/refresh.js', - //'character/shenhua.js', + 'character/refresh.js', + 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', //'character/tw.js', - //'character/standard.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', @@ -52,20 +54,20 @@ window.noname_update={ //'mode/boss.js', //'mode/brawl.js', //'mode/chess.js', - //'mode/doudizhu.js', - //'mode/guozhan.js', + 'mode/doudizhu.js', + 'mode/guozhan.js', //'mode/identity.js', //'mode/single.js', //'mode/stone.js', //'mode/tafang.js', //'mode/versus.js', - //'game/game.js', + 'game/game.js', //'game/keyWords.js', //'game/NoSleep.js', - 'game/config.js', - 'game/package.js', + //'game/config.js', + //'game/package.js', //'game/asset.js', - 'game/source.js', + //'game/source.js', //'theme/style/hp/xinglass.css', //'theme/style/hp/xinround.css', //'theme/style/hp/image/xinglass1.png', diff --git a/image/character/fengxi.jpg b/image/character/fengxi.jpg new file mode 100644 index 000000000..685b0106f Binary files /dev/null and b/image/character/fengxi.jpg differ diff --git a/image/character/heyan.jpg b/image/character/heyan.jpg new file mode 100644 index 000000000..94bccfc2f Binary files /dev/null and b/image/character/heyan.jpg differ diff --git a/image/character/key_mia.jpg b/image/character/key_mia.jpg new file mode 100644 index 000000000..140f67016 Binary files /dev/null and b/image/character/key_mia.jpg differ diff --git a/image/character/liuba.jpg b/image/character/liuba.jpg new file mode 100644 index 000000000..aa42c5ac7 Binary files /dev/null and b/image/character/liuba.jpg differ diff --git a/image/character/longyufei.jpg b/image/character/longyufei.jpg new file mode 100644 index 000000000..233b0ada6 Binary files /dev/null and b/image/character/longyufei.jpg differ diff --git a/image/character/qiuliju.jpg b/image/character/qiuliju.jpg new file mode 100644 index 000000000..15b5f8d6f Binary files /dev/null and b/image/character/qiuliju.jpg differ diff --git a/image/character/re_caifuren.jpg b/image/character/re_caifuren.jpg new file mode 100644 index 000000000..e035eb126 Binary files /dev/null and b/image/character/re_caifuren.jpg differ diff --git a/image/character/re_dongbai.jpg b/image/character/re_dongbai.jpg new file mode 100644 index 000000000..55dd23277 Binary files /dev/null and b/image/character/re_dongbai.jpg differ diff --git a/image/character/wenqin.jpg b/image/character/wenqin.jpg new file mode 100644 index 000000000..dfe653313 Binary files /dev/null and b/image/character/wenqin.jpg differ diff --git a/mode/doudizhu.js b/mode/doudizhu.js index 85b0ec523..b42333a7a 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1796,7 +1796,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ zhuSkill_jiangling_info:'当你使用【杀】或普通锦囊牌选择唯一目标时,你可为此牌增加一个目标(该目标不可响应此牌)。', zhuSkill_fancheng:'樊城', zhuSkill_fancheng2:'樊城', - zhuSkill_fancheng_info:'限定技,出牌阶段,你可获得如下效果直到回合结束:每回合限X次,当你造成伤害时,此伤害+1(X为游戏轮数且至少为2)。', + zhuSkill_fancheng_info:'限定技,出牌阶段,你可摸X张牌获得如下效果直到回合结束:每回合限X次,当你造成伤害时,此伤害+1(X为游戏轮数)。', binglin_shaxue:'歃血', binglin_shaxue_info:'锁定技,每局游戏限三次,当你受到队友造成的伤害时,你防止此伤害。', binglin_neihong:'内讧', @@ -1981,6 +1981,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'gray', content:function(){ + player.draw(game.roundNumber); player.awakenSkill('zhuSkill_fancheng'); player.addTempSkill('zhuSkill_fancheng2'); }, @@ -1991,7 +1992,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ charlotte:true, onremove:true, filter:function(event,player){ - return player.countMark('zhuSkill_fancheng2')0&&evt.getParent('phaseDiscard').player==event.player; + }).length>0; + }, + content:function(){ + 'step 0' + var num=0; + trigger.player.getHistory('lose',function(evt){ + if(evt.type=='discard'&&evt.getParent('phaseDiscard').player==trigger.player) num+=evt.cards2.length; + }); + num=Math.min(3,num); + event.num=num; + trigger.player.chooseBool('是否发动【筹度】摸'+get.cnNumber(num)+'张牌?'); + 'step 1' + if(result.bool){ + player.logSkill('chouduo',trigger.player); + trigger.player.draw(num); + } + }, + }, + guiyin:{ + enable:'phaseUse', + limited:true, + delay:false, + filter:function(event,player){ + var isFriend; + if(player.identity=='unknown'){ + var group='shu'; + if(!player.wontYe('shu')) group=null; + isFriend=function(current){ + return current==player||current.identity==group; + } + } + else isFriend=function(target){ + return target.isFriendOf(player); + }; + return game.hasPlayer(function(current){ + return isFriend(current)&¤t.isDamaged(); + }); + }, + selectTarget:-1, + filterTarget:function(card,player,target){; + if(player==target) return true; + if(player.identity=='unknown'){ + var group='shu'; + if(!player.wontYe('shu')) return false; + return target.identity==group; + } + return target.isFriendOf(player); + }, + selectCard:[0,1], + filterCard:()=>false, + multitarget:true, + multiline:true, + skillAnimation:true, + animationColor:'orange', + content:function(){ + 'step 0' + player.awakenSkill('guiyin'); + event.num=0; + 'step 1' + if(targets[num].isDamaged()){ + targets[num].recover(targets[num].maxHp-targets[num].hp); + } + event.num++; + if(event.num=(1/Math.max(1.6,game.roundNumber))?1:-1; + }, + result:{ + player:1, + }, + }, + }, + //苏飞 + gzlianpian:{ + trigger:{global:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + if(player!=event.player&&!player.hasSkill('gzlianpian')) return false; + var num=0; + game.getGlobalHistory('cardMove',function(evt){ + if(evt.name=='lose'&&evt.type=='discard'&&evt.getParent(2).player==event.player) num+=evt.cards2.length; + }); + if(num<=player.hp) return false; + if(player==event.player) return game.hasPlayer(function(current){ + return current.isFriendOf(player)&¤t.countCards('h')0||player.isDamaged(); + }, + content:function(){ + 'step 0' + if(player==trigger.player){ + player.chooseTarget(get.prompt('gzlianpian'),'令一名己方角色将手牌摸至手牌上限',function(card,player,target){ + return target.isFriendOf(player)&&target.maxHp>target.countCards('h'); + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(target.hasSkillTag('nogain')) att/=6; + if(att>2){ + return Math.min(5,target.maxHp)-target.countCards('h'); + } + return att/3; + }); + } + else{ + event.goto(2); + event.addIndex=0; + var list=[],target=trigger.player,str=get.translation(player); + event.target=target; + if(player.countDiscardableCards('he',target)>0) list.push('弃置'+str+'的一张牌'); + else event.addIndex++; + if(player.isDamaged()) list.push('令'+str+'回复1点体力'); + target.chooseControl('cancel2').set('choiceList',list).set('ai',function(){ + var evt=_status.event.getParent(); + if(get.attitude(evt.target,evt.player)>0) return 1-evt.addIndex; + return evt.addIndex; + }); + } + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('gzlianpian',target); + target.draw(Math.min(5,target.maxHp-target.countCards('h'))); + } + event.finish(); + 'step 2' + if(result.control=='cancel2'){ + event.finish(); + return; + } + player.logSkill('gzlianpian',target,false); + target.line(player,'green'); + if(result.index+event.addIndex==0){ + target.discardPlayerCard('he',player,true); + event.finish(); + } + else player.recover(); + 'step 3' + game.delayx(); + }, + }, + //冯熙 + yusui:{ + audio:2, + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + return event.player!=player&&event.player.isIn()&&event.player.isEnemyOf(player)&&get.color(event.card)=='black'; + }, + logTarget:'player', + check:function(event,player){ + var target=event.player; + if(player.hp<3||get.attitude(player,target)>-3) return false; + if(player.hp3) return true; + return false; + }, + content:function(){ + 'step 0' + player.loseHp(); + event.target=trigger.player; + 'step 1' + event.addIndex=0; + var list=[]; + if(target.maxHp>0&&target.countCards('h')>0) list.push('令其弃置'+get.cnNumber(target.maxHp)+'张手牌'); + else event.addIndex++; + if(target.hp>player.hp) list.push('令其失去'+get.cnNumber(target.hp-player.hp)+'点体力'); + if(!list.length) event.finish(); + else if(list.length==1) event.result={index:0}; + else player.chooseControl().set('choiceList',list).set('prompt','令'+get.translation(target)+'执行一项').set('ai',function(){ + var player=_status.event.player,target=_status.event.getParent().target; + return (target.hp-player.hp)>(Math.min(target.maxHp,target.countCards('h'))/2)?1:0; + }); + 'step 2' + if(result.index+event.addIndex==0) target.chooseToDiscard(target.maxHp,true,'h'); + else target.loseHp(target.hp-player.hp); + }, + }, + boyan:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer((target)=>lib.skill.boyan.filterTarget(null,player,target)); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')0) return Math.min(5,target.maxHp-target.countCards('h')); + if(target.maxHp-target.countCards('h')==1&&target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&player.countCards('h',function(card){ + return get.tag(card,'respondShan')&&get.effect(target,card,player,player)>0&&player.getUseValue(card)>0; + })) return -2; + }, + }, + }, + }, + //文钦 + gzyaoqi:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')>0&&game.hasPlayer(function(current){ + return current!=player&¤t.countCards('he')>0; + }) + }, + filterCard:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + 'step 0' + target.chooseCard('he','交给'+get.translation(player)+'一张装备牌,或令其获得你的一张牌',{type:'equip'}).set('ai',function(card){ + if(_status.event.goon&&get.suit(card)=='spade') return 8-get.value(card); + return 5-get.value(card); + }).set('goon',target.canUse('sha',player,false)&&get.effect(player,{name:'sha'},target,target)>0); + 'step 1' + if(!result.bool) player.gainPlayerCard(target,'he',true); + else player.gain(result.cards,target,'give'); + 'step 2' + if(result.bool&&result.cards&&result.cards.length&& + target.isIn()&&player.isIn()&&get.suit(result.cards[0],target)=='spade'&&target.canUse('sha',player,false)) target.useCard({name:'sha',isCard:true},false,player); + }, + ai:{ + order:6, + result:{ + player:function(player,target){ + if(target.countCards('e',function(card){ + return get.suit(card)=='spade'&&get.value(card)<8; + })&&target.canUse('sha',player,false)) return get.effect(player,{name:'sha'},target,player); + return 0; + }, + target:function(player,target){ + var es=target.getCards('e').sort(function(a,b){ + return get.value(b,target)-get.value(a,target); + }); + if(es.length) return -Math.min(2,get.value(es[0])) + return -2; + }, + }, + }, + }, //诸葛恪 gzduwu:{ limited:true, audio:'duwu', enable:'phaseUse', delay:false, + filter:function(event,player){ + var isEnemy; + if(player.identity=='unknown'){ + if(!player.wontYe('wu')) isEnemy=function(current){ + return current!=player; + }; + else isEnemy=function(current){ + return current!=player&¤t.identity!='wu'; + } + } + else isEnemy=function(target){ + return target.isEnemyOf(player); + }; + return game.hasPlayer(function(current){ + return isEnemy(current)&&player.inRange(current); + }); + }, + filterTarget:function(card,player,target){ + if(player==target||!player.inRange(target)) return false; + if(player.identity=='unknown'){ + if(!player.wontYe('wu')) return true; + return target.identity!='wu'; + } + return target.isEnemyOf(player); + }, + selectTarget:-1, + filterCard:()=>false, + selectCard:[0,1], + multitarget:true, + multiline:true, content:function(){ 'step 0' player.awakenSkill('gzduwu'); player.addSkill('gzduwu_count'); - event.players=game.filterPlayer(function(current){ - if(current==player) return false; - return player.inRange(current)&&!current.isFriendOf(player); - }).sort(lib.sort.seat); - player.line(event.players,'green'); + event.players=targets.slice(0); game.delayx(); player.chooseJunlingFor(event.players[0]).set('prompt','为所有目标角色选择军令牌'); 'step 1' @@ -568,13 +894,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(result.index==0){ event.current.carryOutJunling(player,event.junling,targets); } - else event.current.damage(); + else{ + player.draw(); + event.current.damage(); + } 'step 4' game.delayx(); event.num++; if(event.num