diff --git a/audio/die/gz_dengzhi.mp3 b/audio/die/gz_dengzhi.mp3 new file mode 100644 index 000000000..4cad45e81 Binary files /dev/null and b/audio/die/gz_dengzhi.mp3 differ diff --git a/audio/die/ol_huaxin.mp3 b/audio/die/ol_huaxin.mp3 new file mode 100644 index 000000000..65e1237fa Binary files /dev/null and b/audio/die/ol_huaxin.mp3 differ diff --git a/audio/die/re_guyong.mp3 b/audio/die/re_guyong.mp3 new file mode 100644 index 000000000..7ac9a7013 Binary files /dev/null and b/audio/die/re_guyong.mp3 differ diff --git a/audio/die/re_panshu.mp3 b/audio/die/re_panshu.mp3 new file mode 100644 index 000000000..2d8cd85a6 Binary files /dev/null and b/audio/die/re_panshu.mp3 differ diff --git a/audio/die/xin_zhonghui.mp3 b/audio/die/xin_zhonghui.mp3 new file mode 100644 index 000000000..98365bd04 Binary files /dev/null and b/audio/die/xin_zhonghui.mp3 differ diff --git a/audio/die/zhanghu.mp3 b/audio/die/zhanghu.mp3 new file mode 100644 index 000000000..6ad855c57 Binary files /dev/null and b/audio/die/zhanghu.mp3 differ diff --git a/audio/skill/caozhao1.mp3 b/audio/skill/caozhao1.mp3 new file mode 100644 index 000000000..6a7464bac Binary files /dev/null and b/audio/skill/caozhao1.mp3 differ diff --git a/audio/skill/caozhao2.mp3 b/audio/skill/caozhao2.mp3 new file mode 100644 index 000000000..1ebe7c3b5 Binary files /dev/null and b/audio/skill/caozhao2.mp3 differ diff --git a/audio/skill/cuijian1.mp3 b/audio/skill/cuijian1.mp3 new file mode 100644 index 000000000..131c14838 Binary files /dev/null and b/audio/skill/cuijian1.mp3 differ diff --git a/audio/skill/cuijian2.mp3 b/audio/skill/cuijian2.mp3 new file mode 100644 index 000000000..009fcbaf9 Binary files /dev/null and b/audio/skill/cuijian2.mp3 differ diff --git a/audio/skill/gzjianliang1.mp3 b/audio/skill/gzjianliang1.mp3 new file mode 100644 index 000000000..94a177086 Binary files /dev/null and b/audio/skill/gzjianliang1.mp3 differ diff --git a/audio/skill/gzjianliang2.mp3 b/audio/skill/gzjianliang2.mp3 new file mode 100644 index 000000000..db6727cb4 Binary files /dev/null and b/audio/skill/gzjianliang2.mp3 differ diff --git a/audio/skill/gzweimeng1.mp3 b/audio/skill/gzweimeng1.mp3 new file mode 100644 index 000000000..476e0f36b Binary files /dev/null and b/audio/skill/gzweimeng1.mp3 differ diff --git a/audio/skill/gzweimeng2.mp3 b/audio/skill/gzweimeng2.mp3 new file mode 100644 index 000000000..1f3a9bbd0 Binary files /dev/null and b/audio/skill/gzweimeng2.mp3 differ diff --git a/audio/skill/olxibing1.mp3 b/audio/skill/olxibing1.mp3 new file mode 100644 index 000000000..d69f71ceb Binary files /dev/null and b/audio/skill/olxibing1.mp3 differ diff --git a/audio/skill/olxibing2.mp3 b/audio/skill/olxibing2.mp3 new file mode 100644 index 000000000..7a61ab079 Binary files /dev/null and b/audio/skill/olxibing2.mp3 differ diff --git a/audio/skill/rebingyi1.mp3 b/audio/skill/rebingyi1.mp3 new file mode 100644 index 000000000..3c1da06bf Binary files /dev/null and b/audio/skill/rebingyi1.mp3 differ diff --git a/audio/skill/rebingyi2.mp3 b/audio/skill/rebingyi2.mp3 new file mode 100644 index 000000000..1c085f6bc Binary files /dev/null and b/audio/skill/rebingyi2.mp3 differ diff --git a/audio/skill/reshenxing1.mp3 b/audio/skill/reshenxing1.mp3 new file mode 100644 index 000000000..1a4b46031 Binary files /dev/null and b/audio/skill/reshenxing1.mp3 differ diff --git a/audio/skill/reshenxing2.mp3 b/audio/skill/reshenxing2.mp3 new file mode 100644 index 000000000..6dbb3062a Binary files /dev/null and b/audio/skill/reshenxing2.mp3 differ diff --git a/audio/skill/tongyuan1.mp3 b/audio/skill/tongyuan1.mp3 new file mode 100644 index 000000000..a0507f7cc Binary files /dev/null and b/audio/skill/tongyuan1.mp3 differ diff --git a/audio/skill/tongyuan2.mp3 b/audio/skill/tongyuan2.mp3 new file mode 100644 index 000000000..0555645f6 Binary files /dev/null and b/audio/skill/tongyuan2.mp3 differ diff --git a/audio/skill/xinpaiyi1.mp3 b/audio/skill/xinpaiyi1.mp3 new file mode 100644 index 000000000..3412e06ba Binary files /dev/null and b/audio/skill/xinpaiyi1.mp3 differ diff --git a/audio/skill/xinpaiyi2.mp3 b/audio/skill/xinpaiyi2.mp3 new file mode 100644 index 000000000..859297a82 Binary files /dev/null and b/audio/skill/xinpaiyi2.mp3 differ diff --git a/audio/skill/xinquanji1.mp3 b/audio/skill/xinquanji1.mp3 new file mode 100644 index 000000000..93b837bd4 Binary files /dev/null and b/audio/skill/xinquanji1.mp3 differ diff --git a/audio/skill/xinquanji2.mp3 b/audio/skill/xinquanji2.mp3 new file mode 100644 index 000000000..2be375dbf Binary files /dev/null and b/audio/skill/xinquanji2.mp3 differ diff --git a/audio/skill/xinzili1.mp3 b/audio/skill/xinzili1.mp3 new file mode 100644 index 000000000..1c6cc3a60 Binary files /dev/null and b/audio/skill/xinzili1.mp3 differ diff --git a/audio/skill/xinzili2.mp3 b/audio/skill/xinzili2.mp3 new file mode 100644 index 000000000..216af3f82 Binary files /dev/null and b/audio/skill/xinzili2.mp3 differ diff --git a/audio/skill/yaner1.mp3 b/audio/skill/yaner1.mp3 new file mode 100644 index 000000000..174d176e3 Binary files /dev/null and b/audio/skill/yaner1.mp3 differ diff --git a/audio/skill/yaner2.mp3 b/audio/skill/yaner2.mp3 new file mode 100644 index 000000000..0471e23c3 Binary files /dev/null and b/audio/skill/yaner2.mp3 differ diff --git a/audio/skill/zhiren1.mp3 b/audio/skill/zhiren1.mp3 new file mode 100644 index 000000000..30e1f08a1 Binary files /dev/null and b/audio/skill/zhiren1.mp3 differ diff --git a/audio/skill/zhiren2.mp3 b/audio/skill/zhiren2.mp3 new file mode 100644 index 000000000..5765a54e6 Binary files /dev/null and b/audio/skill/zhiren2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 528e09422..50e072f14 100644 --- a/card/extra.js +++ b/card/extra.js @@ -17,10 +17,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, forceDie:true, onLose:function(){ - player.unmarkSkill('muniu_skill'); delete player.getStat('skill').muniu_skill; if(!card||!card.cards||!card.cards.length) return; - if((event.getParent(2)&&event.getParent(2).name!='swapEquip')&&(event.parent.type!='equip'||event.parent.swapEquip)){ + if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){ player.lose(card.cards,ui.discardPile); player.$throw(card.cards,1000); player.popup('muniu'); diff --git a/card/yingbian.js b/card/yingbian.js index 008a04458..93b0bfa64 100644 --- a/card/yingbian.js +++ b/card/yingbian.js @@ -795,7 +795,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ zhujinqiyuan:'逐近弃远', zhujinqiyuan_info:'出牌阶段,对一名有牌的其他角色使用。若你与其距离的大于1,你弃置其区域内的一张牌;若你与其的距离等于1,你获得其区域内的一张牌。', dongzhuxianji:'洞烛先机', - dongzhuxianji_info:'出牌阶段,对包含你在内的一名角色使用。你观看牌堆顶的两张牌并将其以任意顺序置于牌堆顶或牌堆底,然后摸两张牌。', + dongzhuxianji_info:'出牌阶段,对包含你在内的一名角色使用。目标角色卜算2,然后摸两张牌。', chuqibuyi:'出其不意', chuqibuyi_info:'出牌阶段,对一名有手牌的其他角色使用。你展示其一张手牌,若此牌与【出其不意】的花色不同,则你对其造成1点伤害。', wuxinghelingshan:'五行鹤翎扇', diff --git a/character/diy.js b/character/diy.js index 899d7ac11..97692b619 100755 --- a/character/diy.js +++ b/character/diy.js @@ -71,6 +71,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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_kano:['female','key',3,['kano_liezhen','kano_poyu']], key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], @@ -196,7 +197,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","key_mia"], + 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","key_kano"], diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','junk_simayi'], }, }, @@ -204,7 +205,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ noname:'无名杀的吉祥物。
画师:空城
技能设计:李木子', ns_zhangwei:'血骑教习·张葳,三国杀集换式卡牌游戏《阵面对决》中的帝畿系列卡牌。游卡桌游官方原创的三国时期女性角色。', diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。', - //diy_liuyan:'字元海,新兴(今山西忻州北)人,匈奴族,匈奴首领冒顿单于之后,南匈奴单于于夫罗之孙,左贤王刘豹之子,母呼延氏,十六国时期前赵政权开国皇帝,304年-310年在位。', diy_lukang:'字幼节,吴郡吴县(今江苏苏州)人。三国时期吴国名将,丞相陆逊次子。', diy_liufu:'字元颖,沛国相县(今安徽濉溪县西北)人。东汉末年名守。在汉末避难于淮南,说服袁术将戚寄和秦翊率部投奔曹操,曹操大悦,使司徒辟其为掾属。', diy_xizhenxihong:'习珍,襄阳人。三国时蜀汉将领。先主刘备时曾任零陵北部都尉,加裨将军。建安二十四年,关羽率荆州大军攻打樊城,唯有习珍据城不降。被困月余,直到箭尽粮绝,拔剑自刎而死。习宏,生卒年不详,习珍之弟。曾在东吴入侵蜀汉时建议哥哥习珍伪降,约樊胄举兵。习珍死后,弟弟习宏落在东吴,有问必不答,终身不为孙权发一言。', @@ -218,7 +218,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanghu:'羊祜(221年-278年12月27日),字叔子,泰山郡南城县人。西晋时期杰出的战略家、政治家、文学家,曹魏上党太守羊衜的儿子,名儒蔡邕的女儿蔡文姬的外甥。出身“泰山羊氏”,博学能文,清廉正直。曹魏时期,接受公车征辟,出任中书郎,迁给事黄门侍郎。姐姐嫁给大将军司马师,投靠司马氏家族,仕途平步青云。魏元帝曹奂即位,出任秘书监、相国从事中郎、中领军,统领御林军,兼管内外政事,册封钜平县子,迁。西晋建立后,迁中军将军、散骑常侍、郎中令,册封钜平侯。泰始五年(269年),出任车骑将军、荆州都督,加任开府仪同三司坐镇襄阳,屯田兴学,以德怀柔,深得军民之心;扩充军备,训练士兵,全力准备灭亡孙吴,累迁征南大将军,册封南城侯。咸宁四年,去世,临终前举荐杜预接任职务,获赠侍中、太傅,谥号为“成”。唐宋时期,配享武庙。', }, characterTitle:{ - key_kotomi:'#bLoopers', + key_kano:'#bAIR', + key_mia:'#bLoopers', key_kotomi:'#gClannad', key_asara:'#bRewrite', key_yukito:'#bAIR', @@ -333,6 +334,51 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_liuzhang:'#r矮子剑薄荷糖', }, card:{ + kano_paibingbuzhen:{ + fullskin:true, + type:'trick', + enable:true, + filterTarget:true, + selectTarget:[1,3], + content:function(){ + 'step 0' + target.draw(); + 'step 1' + var hs=target.getCards('he'); + if(!hs.length) event.finish(); + else if(hs.length==1) event._result={bool:true,cards:hs}; + else target.chooseCard('he',true,'选择一张牌置入仁库'); + 'step 2' + if(result.bool){ + var card=result.cards[0]; + target.$throw(card,1000); + target.lose(card,'toRenku'); + } + }, + contentAfter:function(){ + if(player.isIn()&&_status.renku.length&&function(){ + var cards=_status.renku; + if(cards.length==1) return true; + var color=get.color(cards[0],false),type=get.type(cards[0],false); + for(var i=1;i0; + }, + direct:true, + frequent:true, + content:function(){ + 'step 0' + var history=player.getHistory('useCard'); + if(history.length>1){ + var type=get.type2(history[0].card,false); + for(var i=1;i0&&(event.card.name=='sha'||get.type(event.card)=='trick'&&get.tag(event.card,'damage')>0); + }, + check:function(trigger,player){ + return get.effect(player,trigger.card,trigger.player,player)<0; + }, + content:function(){ + 'step 0' + player.judge(); + 'step 1' + var bool=false,type=get.type2(result.card.name); + for(var i of _status.renku){ + if(get.suit(i)==result.suit||get.type2(i)==type){ + bool=true;break; + } + } + if(bool){ + player.chooseButton(['是否移去一张牌,令'+get.translation(trigger.card)+'对你无效?',_status.renku]).set('types',[result.suit,type]).set('filterButton',function(button){ + var types=_status.event.types; + return get.suit(button.link,false)==types[0]||get.type2(button.link,false)==types[1]; + }).set('ai',()=>1); + } + else event.finish(); + 'step 2' + if(result.bool){ + var card=result.links[0]; + player.$throw(card,1000); + _status.renku.remove(card); + game.cardsDiscard(card).fromRenku=true; + game.log(player,'将',card,'置入了弃牌堆'); + trigger.excluded.add(player); + game.updateRenku(); + } + }, + init:function(player){ + player.storage.renku=true; + }, + }, mia_shihui:{ trigger:{player:'phaseDrawBegin1'}, forced:true, @@ -2998,6 +3129,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(name=='damageBegin3') return true; return player!=event.player; }, + locked:function(skill,player){ + if(!player||!player.storage.shiroha_jiezhao) return true; + return false; + }, content:function(){ 'step 0' var num=event.triggername=='damageBegin3'?-1:1; @@ -3732,14 +3867,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, abyusa_jueqing:{ + audio:2, trigger:{source:'damageBegin2'}, skillAnimation:true, - animationColor:'metal', + animationColor:'water', filter:function(event,player){ - return player!=event.player&&!player.hasSkill('abyusa_jueqing_1st'); + return player!=event.player&&!player.storage.abyusa_jueqing_rewrite; }, prompt2:function(event,player){ - return '令即将对其造成的伤害+'+event.num+',并令自己失去'+get.cnNumber(event.num)+'点体力'; + var num=get.cnNumber(2*event.num,true); + return '令即将对其造成的伤害翻倍至'+num+'点,并令自己失去'+get.cnNumber(event.num)+'点体力'; }, check:function(event,player){ return player.hp>event.num&&event.player.hp>event.num&&!event.player.hasSkillTag('filterDamage',null,{ @@ -3747,35 +3884,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ card:event.card, })&&get.attitude(player,event.player)<0; }, + locked:function(skill,player){ + return player&&player.storage.abyusa_jueqing_rewrite; + }, logTarget:'player', content:function(){ player.loseHp(trigger.num); trigger.num*=2; - var next=game.createEvent('abyusa_jueqing_add',false); - event.next.remove(next); - trigger.after.push(next); - next.player=player; - next.setContent(function(){ - player.addSkill('abyusa_jueqing_1st'); - }); + player.storage.abyusa_jueqing_rewrite=true; }, derivation:'abyusa_jueqing_rewrite', - }, - abyusa_jueqing_1st:{ - trigger:{source:'damageBefore'}, - forced:true, - charlotte:true, - filter:function(event,player){ - return player.hasSkill('abyusa_jueqing'); + group:'abyusa_jueqing_rewrite', + subSkill:{ + rewrite:{ + trigger:{source:'damageBefore'}, + forced:true, + charlotte:true, + audio:'abyusa_jueqing', + filter:function(event,player){ + return player.storage.abyusa_jueqing_rewrite==true; + }, + check:function(){return false;}, + content:function(){ + trigger.cancel(); + trigger.player.loseHp(trigger.num); + }, + ai:{ + jueqing:true, + skillTagFilter:function(player){ + return player.storage.abyusa_jueqing_rewrite==true; + }, + } + } }, - check:function(){return false;}, - content:function(){ - trigger.cancel(); - trigger.player.loseHp(trigger.num); - }, - ai:{ - jueqing:true - } }, akiko_dongcha:{ trigger:{global:'gameDrawAfter'}, @@ -9640,6 +9781,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var target=(name=='damageSource'?event.source:event.player); return target&&target!=player&&get.distance(player,target)<=1&&target.countCards('hej')>0; }, + locked:function(skill,player){ + return player&&player.storage.nsfuwei; + }, content:function(){ 'step 0' var target=(event.triggername=='damageSource'?trigger.source:trigger.player); @@ -14858,7 +15002,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return '与你距离1以内的其他角色造成或受到伤害后,你可以将其区域内的一张牌置于你的武将牌上(称为“威”)。你使用【杀】的次数上限+X(X为“威”数)。'; }, abyusa_jueqing:function(player){ - if(player.hasSkill('abyusa_jueqing_1st')) return '锁定技,你即将造成的伤害均视为失去体力。'; + if(player.storage.abyusa_jueqing_rewrite) return '锁定技,你即将造成的伤害均视为失去体力。'; return '当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力,并于此伤害结算完成后修改〖绝情〗(X为伤害值)。'; }, tomoya_shangxian:function(player){ @@ -15042,6 +15186,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_asara:'井上晶', key_kotomi:'一之濑琴美', key_mia:'藤川米娅', + key_kano:'雾岛佳乃', lucia_duqu:'毒躯', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -15385,6 +15530,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mia_qianmeng_info:'使命技。①游戏开始时,你摸一张牌,然后将一张牌置于牌堆的正中央。②使命:当有角色获得“潜梦”牌时,其将此牌交给你。你将体力值回复至上限,失去〖时迴〗并获得〖风发〗。③失败:当你死亡时,你可令一名角色获得牌堆中所有与“潜梦”牌点数相同的牌。', mia_fengfa:'风发', mia_fengfa_info:'锁定技。摸牌阶段,你多摸X张牌(X为你上回合使用过的牌数)。', + kano_liezhen:'列阵', + kano_liezhen_info:'结束阶段,若你本回合内使用过牌且这些牌的类型:不均相同,你可视为使用【排兵布阵】或智囊;均相同,你获得仁库中的所有牌(没有则改为摸两张牌)。', + kano_paibingbuzhen:'排兵布阵', + kano_paibingbuzhen_info:'出牌阶段,对至多三名角色使用。目标角色摸一张牌,然后将一张牌置入仁库。若仁库中的牌类型或颜色均相同,则你摸一张牌。', + kano_poyu:'破羽', + kano_poyu_info:'当你成为【杀】或伤害性锦囊牌的目标后,若仁库中有牌,你可判定。然后你可从仁库中移去一张与此牌类型或花色相同的牌,令此牌对你无效。', key_kud:'库特莉亚芙卡', kud_qiaoshou:'巧手', diff --git a/character/extra.js b/character/extra.js index c192cfba2..e9993234e 100755 --- a/character/extra.js +++ b/character/extra.js @@ -2175,7 +2175,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ player.removeMark('renjie',1); - player.addTempSkill('wansha'); + player.addTempSkill('rewansha'); } }, jilue_zhiheng:{ diff --git a/character/hearth.js b/character/hearth.js index e1c47ceda..1851e7e12 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -91,7 +91,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hs_kazhakusi:['male','shu',3,['lianjin']], // hs_lazi:['male','wei',3,[]], hs_shaku:['male','wei',3,['shouji']], - hs_laxiao:['male','shu',3,['guimou','yingxi','longyi']], + hs_laxiao:['male','shu',3,['guimou','yingxi','hlongyi']], // hs_xiangyaqishi:['male','wei',3,[]], // hs_fenjie:['male','shu',3,['guimou','yingxi']], hs_mojinbaozi:['male','wei',3,['jingcu','shengzhang']], @@ -2945,7 +2945,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - longyi:{ + hlongyi:{ mod:{ ignoredHandcard:function(card,player){ if(get.color(card)=='black'){ @@ -9792,8 +9792,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ moxie_info:'锁定技,你失去毒时不流失体力;你使用毒时摸两张牌;结束阶段,你将一张随机手牌转化为毒', gfuhun:'附魂', gfuhun_info:'结束阶段,若你未翻面,你可以和一名其他角色拼点,若你赢,你将武将牌翻至背面,该角色进入混乱状态直到下一回合结束', - longyi:'龙裔', - longyi_info:'锁定技,你的黑色牌不占用手牌上限', + hlongyi:'龙裔', + hlongyi_info:'锁定技,你的黑色牌不占用手牌上限', zhongji:'重击', zhongji_info:'每当你即将造成伤害,可弃置一张黑色手牌令伤害+1', fuwen:'符文', diff --git a/character/mobile.js b/character/mobile.js index c9b98fb2e..eb39eef1d 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -599,7 +599,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var color=get.color(cards[0],player),type=get.type(cards[0],player); for(var i=1;i0) att=1; + if(att<0) att=-1; + if(players[i]!=player&&players[i].hp<=3){ + if(players[i].countCards('h')==0) num+=att/players[i].hp; + else if(players[i].countCards('h')==1) num+=att/2/players[i].hp; + else if(players[i].countCards('h')==2) num+=att/4/players[i].hp; + } + if(players[i].hp==1) num+=att*1.5; + } + if(player.hp==1){ + return -num; + } + if(player.hp==2){ + return -game.players.length/4-num; + } + return -game.players.length/3-num; + } + } + } + }, + reweimu:{ + audio:2, + mod:{ + targetEnabled:function(card){ + if(get.type2(card)=='trick'&&get.color(card)=='black') return false; + }, + }, + trigger:{player:'damageBegin2'}, + forced:true, + filter:function(event,player){ + return player==_status.currentPhase; + }, + content:function(){ + trigger.cancel(); + }, + }, //顾雍 reshenxing:{ audio:2, @@ -5719,66 +5866,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reguhuo_backup:{}, reguhuo_phase:{}, rechanyuan:{ - //charlotte:true, - firstDo:true, - trigger:{ - player:["phaseBefore","changeHp"], + init:function(player,skill){ + player.addSkillBlocker(skill); }, - priority:99, - firstDo:true, - forced:true, - popup:false, - unique:true, - content:function (){ - if(player.hp<=1){ - var skills=player.getSkills(true,false); - for(var i=0;i
  • 失效技能:'+get.translation(list)) + return str; } - }, - onremove:function (player,skill){ - player.enableSkill(skill); - }, - locked:true, + } }, botu:{ audio:2, @@ -6531,6 +6640,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.suit(card)=='diamond'&&card.name=='sha') return true; }, }, + locked:false, audio:"wusheng", audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo'], enable:["chooseToRespond","chooseToUse"], @@ -7142,7 +7252,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var next=player.judge(function(card){ if(get.color(card)=='black') return 1.5; return -1.5; - }).judge2=function(result){ + }); + next.judge2=function(result){ return result.bool; }; if(get.mode()!='guozhan'&&!player.hasSkillTag('rejudge')) next.set('callback',function(){ @@ -9768,7 +9879,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reguhuo_guess:"蛊惑", reguhuo_guess_info:"", rechanyuan:"缠怨", - rechanyuan_info:"锁定技,你不能质疑于吉,只要你的体力值不大于1,你失去你的武将技能。", + rechanyuan_info:"锁定技,你不能于〖蛊惑〗的结算流程中进行质疑。当你的体力值不大于1时,你的其他技能失效。", reguhuo_sha:"蛊惑", reguhuo_shan:"蛊惑", reguhuo_wuxie:"蛊惑", @@ -10045,9 +10156,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinpaiyi_info:'出牌阶段每项各限一次,你可移去一张“权”并选择一项:①令一名角色摸X张牌。②对至多X名角色各造成1点伤害。(X为“权”数)', re_guyong:'界顾雍', reshenxing:'慎行', - reshenxing_info:'出牌阶段,你可以(X为你本阶段内发动过〖慎行〗的次数),然后摸一张牌。若这两张牌颜色不同,则改为摸两张牌。', + reshenxing_info:'出牌阶段,你可以弃置X张牌(X为你本阶段内发动过〖慎行〗的次数),然后摸一张牌。若这两张牌颜色不同,则改为摸两张牌。', rebingyi:'秉壹', rebingyi_info:'结束阶段,你可展示所有手牌。若这些牌:颜色均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数);点数均相同,则你摸一张牌。', + re_jiaxu:'界贾诩', + rewansha:'完杀', + rewansha_info:'锁定技。①你的回合内,不处于濒死状态的角色不能使用【桃】。②当有角色于你的回合内进入濒死状态时,你令所有其他角色的非锁定技失效直到此濒死状态结算结束。', + reluanwu:'乱武', + reluanwu_info:'限定技,出牌阶段,你可令所有其他角色依次选择一项:①对距离最近(或之一)的角色使用一张【杀】;②失去1点体力。然后你摸X张牌(X为选择①和②的角色数中的最大值)。', + reweimu:'帷幕', + reweimu_info:'锁定技。①你不能成为黑色锦囊牌的目标。②当你于回合内受到伤害时,防止此伤害。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index 8cc5a221e..0dbb2b3cd 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -7117,65 +7117,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, chanyuan:{ - //charlotte:true, - firstDo:true, - trigger:{ - player:["phaseBefore","changeHp"], + init:function(player,skill){ + player.addSkillBlocker(skill); }, - priority:99, - forced:true, - popup:false, - unique:true, - content:function(){ - if(player.hp==1){ - var skills=player.getSkills(true,false); - for(var i=0;i
  • 失效技能:'+get.translation(list)) + return str; } - }, - onremove:function(player,skill){ - player.enableSkill(skill); - }, - locked:true, + } }, "guhuo_respond":{ trigger:{ @@ -7359,7 +7322,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ menghuo:['re_menghuo','menghuo'], zhurong:['re_zhurong','ol_zhurong','zhurong'], sunjian:['ol_sunjian','re_sunjian','sunjian'], - jiaxu:['jiaxu','ns_jiaxu'], + jiaxu:['re_jiaxu','jiaxu','ns_jiaxu'], dongzhuo:['ol_dongzhuo','sp_dongzhuo','re_dongzhuo','dongzhuo'], dengai:['re_dengai','ol_dengai','dengai'], sp_zhanghe:['sp_zhanghe','yj_zhanghe'], diff --git a/character/sp.js b/character/sp.js index 570d2e4d3..99d493448 100755 --- a/character/sp.js +++ b/character/sp.js @@ -5887,7 +5887,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'phaseUse', filterTarget:function(card,player,target){ if(target==player) return false; - var stat=player.getStat().fuman_targets; + var stat=player.getStat('skill').fuman_targets; return !stat||!stat.contains(target); }, filter:function(event,player){ @@ -10236,6 +10236,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kunfen:{ audio:2, trigger:{player:'phaseJieshuBegin'}, + locked:function(skill,player){ + if(!player||!player.storage.kunfen) return true; + return false; + }, direct:true, content:function(){ "step 0" diff --git a/character/sp2.js b/character/sp2.js index 64e07a42a..7072486bc 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:{ + zhanghu:['male','wei',4,['cuijian','tongyuan']], + caoanmin:['male','wei',4,['xianwei']], + re_panshu:['female','wu',3,['zhiren','yaner']], re_zoushi:['female','qun',3,['rehuoshui','reqingcheng']], luyusheng:['female','wu',3,['zhente','zhiwei']], huaxin:['male','wei',3,['spwanggui','xibing']], @@ -97,12 +100,320 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui'], sp_qihuan:['liubian','zhaozhong'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], - sp_xuzhou:['re_taoqian','caosong','zhangmiao'], - sp_zhongyuan:['re_hucheer','re_zoushi'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_dongcheng','yangwan','qiuliju','heyan'], + sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], + sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_dongcheng','yangwan','heyan','re_panshu','zhanghu'], } }, skill:{ + cuijian:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer((current)=>lib.skill.cuijian.filterTarget(null,player,current)); + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + content:function(){ + 'step 0' + var hs=target.getCards('h','shan'); + if(hs.length){ + var card=target.getEquip(2); + if(card) hs.push(card); + player.gain(hs,target,'give'); + event.num=(player.hasMark('tongyuan_tao')?1:hs.length); + } + else{ + if(player.hasMark('tongyuan_wuxie')) player.draw(); + else if(player.countCards('h')) player.chooseToDiscard('h',true); + event.finish(); + } + 'step 1' + var hs=player.getCards('he'); + if(!hs.length||!target.isIn()) event.finish(); + else if(hs.length<=num) event._result={bool:true,cards:hs}; + else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌'); + 'step 2' + if(result.bool&&result.cards&&result.cards.length) target.gain(result.cards,player,'giveAuto'); + }, + ai:{ + order:4, + result:{ + player:function(player,target){ + if(!target.countCards('h','shan')) return player.hasMark('tongyuan_wuxie')?1:-1; + return 0; + }, + target:function(player,target){ + if(target.countCards('h','shan')){ + var num=-target.countCards('h')/2; + var card=target.getEquip(2); + if(card) num-=(get.value(card,target)/2); + return num; + } + return 0; + }, + }, + }, + }, + tongyuan:{ + audio:2, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return (event.card.name=='tao'||event.card.name=='wuxie')&&((player!=status.currentPhase&&!player.hasMark('tongyuan_'+event.card.name))||(player.hasMark('tongyuan_tao')&&player.hasMark('tongyuan_wuxie'))); + }, + content:function(){ + if(!player.hasMark('tongyuan_'+trigger.card.name)){ + player.addMark('tongyuan_'+trigger.card.name,1,false); + game.log(player,'修改了技能','#g【摧坚】'); + } + else if(trigger.card.name=='wuxie') trigger.directHit.addArray(game.players); + else{ + if(typeof trigger.baseDamage!='number') trigger.baseDamage=1; + trigger.baseDamage++; + } + }, + }, + xianwei:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.countDisabled()<5; + }, + content:function(){ + 'step 0' + player.chooseToDisable().ai=function(event,player,list){ + var getVal=function(num){ + var card=player.getEquip(num); + if(card){ + var val=get.value(card); + if(val>0) return 0; + return 5-val; + } + switch(num){ + case 'equip3':return 4.5;break; + case 'equip4':return 4.4;break; + case 'equip5':return 4.3;break; + case 'equip2':return (3-player.hp)*1.5;break; + case 'equip1':{ + if(game.hasPlayer(function(current){ + return (get.realAttitude||get.attitude)(player,current)<0&&get.distance(player,current)>1; + })) return 0; + return 3.2; + } + } + } + list.sort(function(a,b){ + return getVal(b)-getVal(a); + }); + return list[0]; + }; + 'step 1' + var cardType=result.control; + event.cardType=cardType; + player.draw(player.countDisabled()); + player.chooseTarget(true,lib.filter.notMe,'令一名其他角色从牌堆中使用一张'+get.translation(cardType)+'牌').set('ai',function(target){ + var player=_status.event.player,type=_status.event.cardType; + var card=get.cardPile2(function(card){ + return get.subtype(card)==type&&target.canUse(card,target); + }); + if(!card) return 0; + return get.effect(target,card,target,player); + }).set('cardType',event.cardType); + 'step 2' + var target=result.targets[0]; + player.line(target,'green'); + var card=get.cardPile2(function(card){ + return get.subtype(card)==event.cardType&&target.canUse(card,target); + }); + if(card) target.chooseUseTarget(card,'nopopup',true); + else target.draw(); + }, + group:'xianwei_all', + subSkill:{ + all:{ + trigger:{player:'disableEquipAfter'}, + forced:true, + filter:function(event,player){ + return player.countDisabled()>=5; + }, + content:function(){ + player.addSkill('xianwei_effect'); + }, + }, + effect:{ + charlotte:true, + mark:true, + intro:{content:'和其他角色视为在彼此的攻击范围内'}, + mod:{ + inRange:()=>true, + inRangeOf:()=>true, + }, + }, + }, + }, + zhiren:{ + audio:2, + trigger:{player:'useCard'}, + direct:true, + filter:function(event,player){ + return (player==_status.currentPhase||player.hasSkill('yaner_zhiren'))&&get.color(event.card)=='red'&&player.getHistory('useCard',function(evt){ + return get.color(evt.card)=='red' + }).indexOf(event)==0; + }, + content:function(){ + 'step 0' + event.num=get.translation(trigger.card.name).length; + event.logged=false; + player.chooseBool('织纴:是否卜算'+event.num+'?'); + 'step 1' + if(result.bool){ + player.logSkill('zhiren'); + event.logged=true; + player.chooseToGuanxing(num); + } + if(event.num<2) event.finish(); + 'step 2' + if(!game.hasPlayer(function(current){ + return current.countDiscardableCards(player,'e')>0; + })){ + event.forcejudge=true; + event.goto(4); + } + else player.chooseTarget('织纴:是否弃置一名其他角色装备区内的一张牌?',function(card,player,target){ + return target.countDiscardableCards(player,'e')>0; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('e'),val=0; + for(var i of es){ + var eff=-(get.value(i,target)-0.1)*att; + if(eff>val) val=eff; + } + return eff; + }); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + if(!event.logged){ + event.logged=true; + player.logSkill('zhiren',target); + player.addExpose(0.15); + } + else player.line(target,'green'); + player.discardPlayerCard(target,'e',true); + } + else event.goto(6); + if(event.num<3) event.finish(); + 'step 4' + if(!game.hasPlayer(function(current){ + return current.countDiscardableCards(player,'j')>0; + })){ + if(event.num<3) event.finish(); + else event.goto(6); + } + else if(!event.forcejudge) player.chooseTarget('织纴:弃置一名其他角色判定区内的一张牌',true,function(card,player,target){ + return target.countDiscardableCards(player,'j')>0; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('j'),val=0; + for(var i of es){ + var eff=-(get.effect(target,i,target,player)) + if(eff>val) val=eff; + } + return eff; + }); + else player.chooseTarget('织纴:是否弃置一名其他角色判定区内的一张牌?',function(card,player,target){ + return target.countDiscardableCards(player,'j')>0; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('j'),val=0; + for(var i of es){ + var eff=-(get.effect(target,i,target,player)) + if(eff>val) val=eff; + } + return eff; + }); + 'step 5' + if(result.bool){ + var target=result.targets[0]; + if(!event.logged){ + event.logged=true; + player.logSkill('zhiren',target); + player.addExpose(0.15); + } + else player.line(target,'green'); + player.discardPlayerCard(target,'j',true); + } + if(event.num<3) event.finish(); + 'step 6' + if(player.isDamaged()) player.chooseBool('织纴:是否回复1点体力?'); + else if(event.num<4) event.finish(); + else event.goto(8); + 'step 7' + if(result.bool){ + if(!event.logged){ + event.logged=true; + player.logSkill('zhiren'); + } + player.recover(); + } + if(event.num<4) event.finish(); + 'step 8' + player.chooseBool('织纴:是否摸三张牌?'); + 'step 9' + if(result.bool){ + if(!event.logged){ + event.logged=true; + player.logSkill('zhiren'); + } + player.draw(3); + } + }, + }, + yaner:{ + audio:2, + trigger:{ + global:['equipAfter','addJudgeAfter','loseAfter','gainAfter','loseAsyncAfter'], + }, + filter:function(event,player){ + var current=_status.currentPhase; + if(!current||current==player||!current.isPhaseUsing()) return false; + var evt=event.getl(current); + return evt&&evt.hs&&evt.hs.length&¤t.countCards('h')==0; + }, + usable:1, + logTarget:'player', + prompt2:'与该角色各摸两张牌', + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + 'step 0' + game.asyncDraw([trigger.player,player],2); + 'step 1' + var e1=player.getHistory('gain',function(evt){ + return evt.getParent(2)==event; + })[0]; + if(e1&&e1.cards&&e1.cards.length==2&&get.type(e1.cards[0])==get.type(e1.cards[1])){ + player.addTempSkill('yaner_zhiren',{player:'phaseBegin'}); + game.log(player,'修改了技能','#g【织纴】'); + } + if(trigger.player.isIn()&&trigger.player.isDamaged()){ + var e2=trigger.player.getHistory('gain',function(evt){ + return evt.getParent(2)==event; + })[0]; + if(e2&&e2.cards&&e2.cards.length==2&&get.type(e2.cards[0])==get.type(e2.cards[1])) trigger.player.recover(); + } + 'step 2' + game.delayx(); + }, + subSkill:{ + zhiren:{}, + }, + ai:{ + expose:0.5, + }, + }, rehuoshui:{ audio:2, trigger:{player:'phaseZhunbeiBegin'}, @@ -596,7 +907,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, forced:true, popup:false, - trigger:{player:'loseHp'}, + trigger:{player:'changeHp'}, filter:function(event,player){ return event.num<0; }, @@ -604,7 +915,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.removeSkill('rexiahui_block'); }, onremove:function(player){ - player.removeSkill('rexiahui_block'); + player.removeGaintag('rexiahui'); }, }, }, @@ -9298,6 +9609,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.bazhan) return '转换技,出牌阶段限一次,阴:你可以将至多两张手牌交给一名其他角色。阳:你可以获得一名其他角色的至多两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; return '转换技,出牌阶段限一次,阴:你可以将至多两张手牌交给一名其他角色。阳:你可以获得一名其他角色的至多两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; }, + zhiren:function(player){ + return '当你于'+(player.hasSkill('yaner_zhiren')?'一':'你的')+'回合内使用第一张红色牌时,你可依次执行以下选项中的前X项:①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。(X为此牌的名称的字数)'; + }, + cuijian:function(player){ + return '出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中:有【闪】,其将装备区内的防具牌和所有【闪】交给你,然后你交给其'+(player.hasMark('tongyuan_tao')?'一张':'等量的')+'牌;没有【闪】,你'+(player.hasMark('tongyuan_wuxie')?'摸一张':'弃置一张手')+'牌。'; + }, }, perfectPair:{ }, @@ -9320,6 +9637,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hucheer:['re_hucheer','hucheer'], dongbai:['re_dongbai','dongbai'], gexuan:['gexuan','tw_gexuan'], + panshu:['panshu','re_panshu'], }, translate:{ lijue:"李傕", @@ -9822,6 +10140,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rehuoshui_info:'准备阶段,你可以令至多X名角色的非锁定技无效直到回合结束(X为你已损失的体力值且至少为1)。', reqingcheng:'倾城', reqingcheng_info:'出牌阶段限一次,你可以与一名手牌数小于你的男性角色交换手牌。', + re_panshu:'潘淑', + zhiren:'织纴', + zhiren_info:'当你于你的回合内使用第一张红色牌时,你可依次执行以下选项中的前X项:①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。(X为此牌的名称的字数)', + yaner:'燕尔', + yaner_info:'每回合限一次。当有其他角色于其出牌阶段内失去手牌后,若其没有手牌,则你可以与其各摸两张牌。若其以此法摸得的两张牌类型相同,则其回复1点体力。若你以此法摸得的两张牌类型相同,则你将〖织纴〗中的“你的回合内”改为“一回合内”。', + caoanmin:'曹安民', + xianwei:'险卫', + xianwei_info:'锁定技,准备阶段,你废除一个装备栏并摸X张牌(X为你已废除的装备栏数),然后令一名其他角色对其自己使用一张牌堆中的一张与此装备栏副类别相同的装备牌(没有可使用的牌则改为摸一张牌)。当你废除所有装备栏后,你加2点体力上限,然后你与所有其他角色视为在彼此的攻击范围内。', + zhanghu:'张虎', + cuijian:'摧坚', + cuijian_info:'出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中:有【闪】,其将装备区内的防具牌和所有【闪】交给你,然后你交给其等量的牌;没有【闪】,你弃置一张手牌。', + tongyuan:'同援', + tongyuan_info:'锁定技。①当你于回合外使用【无懈可击】时,你将〖摧坚〗中的“弃置一张手牌”改为“摸一张牌”;②当你于回合外使用【桃】时,你将〖摧坚〗中的“等量的牌”改为“一张牌”。③当你使用【无懈可击】/【桃】时,若你已发动过〖摧坚①〗和〖摧坚②〗,则此牌不可被响应/回复值+1。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/yijiang.js b/character/yijiang.js index f20d40e54..f7c85067f 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -249,11 +249,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'water', filter:function(event,player){ - return player!=event.player&&!player.hasSkill('rejueqing_1st'); + return player!=event.player&&!player.storage.rejueqing_rewrite; }, prompt2:function(event,player){ - var num=get.cnNumber(2*event.num); - return '令即将对其造成的伤害翻倍至'+num+',并令自己失去'+get.cnNumber(event.num)+'点体力'; + var num=get.cnNumber(2*event.num,true); + return '令即将对其造成的伤害翻倍至'+num+'点,并令自己失去'+get.cnNumber(event.num)+'点体力'; }, check:function(event,player){ return player.hp>event.num&&event.player.hp>event.num&&!event.player.hasSkillTag('filterDamage',null,{ @@ -261,36 +261,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){ card:event.card, })&&get.attitude(player,event.player)<0; }, + locked:function(skill,player){ + return player&&player.storage.rejueqing_rewrite; + }, logTarget:'player', content:function(){ player.loseHp(trigger.num); trigger.num*=2; - var next=game.createEvent('rejueqing_add',false); - event.next.remove(next); - trigger.after.push(next); - next.player=player; - next.setContent(function(){ - player.addSkill('rejueqing_1st'); - }); + player.storage.rejueqing_rewrite=true; }, derivation:'rejueqing_rewrite', - }, - rejueqing_1st:{ - trigger:{source:'damageBefore'}, - forced:true, - charlotte:true, - audio:'jueqing', - filter:function(event,player){ - return player.hasSkill('rejueqing'); + group:'rejueqing_rewrite', + subSkill:{ + rewrite:{ + trigger:{source:'damageBefore'}, + forced:true, + charlotte:true, + audio:'rejueqing', + filter:function(event,player){ + return player.storage.rejueqing_rewrite==true; + }, + check:function(){return false;}, + content:function(){ + trigger.cancel(); + trigger.player.loseHp(trigger.num); + }, + ai:{ + jueqing:true, + skillTagFilter:function(player){ + return player.storage.rejueqing_rewrite==true; + }, + } + } }, - check:function(){return false;}, - content:function(){ - trigger.cancel(); - trigger.player.loseHp(trigger.num); - }, - ai:{ - jueqing:true - } }, reshangshi:{ audio:2, @@ -12058,7 +12061,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, dynamicTranslate:{ rejueqing:function(player){ - if(player.hasSkill('rejueqing_1st')) return '锁定技,你即将造成的伤害均视为失去体力。'; + if(player.storage.rejueqing_rewrite) return '锁定技,你即将造成的伤害均视为失去体力。'; return '当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力,并于此伤害结算完成后修改〖绝情〗(X为伤害值)。'; }, reyanzhu:function(player){ @@ -12690,7 +12693,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_fuhun:'父魂', old_fuhun_info:'摸牌阶段开始时,你可以放弃摸牌,改为从牌堆顶亮出两张牌并获得之,若亮出的牌颜色不同,你获得技能“武圣”、“咆哮”,直到回合结束。', rejueqing:'绝情', - rejueqing_info:'当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力,并于此伤害结算完成后修改〖绝情〗(X为伤害值)。', + rejueqing_info:'当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力并修改〖绝情〗(X为伤害值)。', rejueqing_1st:'绝情', rejueqing_rewrite:'绝情·改', rejueqing_rewrite_info:'锁定技,你即将造成的伤害均视为失去体力。', diff --git a/game/asset.js b/game/asset.js index 45bb74f20..86af6e41a 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.9.1', + 'v1.9.110.9.2', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -772,6 +772,12 @@ window.noname_asset_list=[ 'audio/die/xin_caifuren.mp3', 'audio/die/xin_guyong.mp3', 'audio/die/zhangzhongjing.mp3', + 'audio/die/gz_dengzhi.mp3', + 'audio/die/ol_huaxin.mp3', + 'audio/die/re_guyong.mp3', + 'audio/die/re_panshu.mp3', + 'audio/die/xin_zhonghui.mp3', + 'audio/die/zhanghu.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3460,6 +3466,32 @@ window.noname_asset_list=[ 'audio/skill/yinlang2.mp3', 'audio/skill/yizhu1.mp3', 'audio/skill/yizhu2.mp3', + 'audio/skill/caozhao1.mp3', + 'audio/skill/caozhao2.mp3', + 'audio/skill/cuijian1.mp3', + 'audio/skill/cuijian2.mp3', + 'audio/skill/gzjianliang1.mp3', + 'audio/skill/gzjianliang2.mp3', + 'audio/skill/gzweimeng1.mp3', + 'audio/skill/gzweimeng2.mp3', + 'audio/skill/olxibing1.mp3', + 'audio/skill/olxibing2.mp3', + 'audio/skill/rebingyi1.mp3', + 'audio/skill/rebingyi2.mp3', + 'audio/skill/reshenxing1.mp3', + 'audio/skill/reshenxing2.mp3', + 'audio/skill/tongyuan1.mp3', + 'audio/skill/tongyuan2.mp3', + 'audio/skill/xinpaiyi1.mp3', + 'audio/skill/xinpaiyi2.mp3', + 'audio/skill/xinquanji1.mp3', + 'audio/skill/xinquanji2.mp3', + 'audio/skill/xinzili1.mp3', + 'audio/skill/xinzili2.mp3', + 'audio/skill/yaner1.mp3', + 'audio/skill/yaner2.mp3', + 'audio/skill/zhiren1.mp3', + 'audio/skill/zhiren2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -4377,6 +4409,10 @@ window.noname_asset_list=[ 'image/character/re_guyong.jpg', 'image/character/re_zoushi.jpg', 'image/character/xin_zhonghui.jpg', + 'image/character/caoanmin.jpg', + 'image/character/gz_dengzhi.jpg', + 'image/character/re_panshu.jpg', + 'image/character/zhanghu.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index ac353e7b8..491c15896 100644 --- a/game/game.js +++ b/game/game.js @@ -15125,7 +15125,8 @@ } } 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); + var owner=(_status.connectMode?lib.playerOL:game.playerMap)[i]; + var 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; } @@ -16429,6 +16430,16 @@ }, player:{ //新函数 + addSkillBlocker:function(skill){ + if(!this.storage.skill_blocker) this.storage.skill_blocker=[]; + this.storage.skill_blocker.push(skill); + }, + removeSkillBlocker:function(skill){ + if(this.storage.skill_blocker){ + this.storage.skill_blocker.remove(skill); + if(!this.storage.skill_blocker.length) delete this.storage.skill_blocker; + } + }, loseToSpecial:function(cards,tag,target){ var next=game.loseAsync({ player:this, @@ -26378,74 +26389,47 @@ }, fengyin:{ init:function(player,skill){ - var skills=player.getSkills(true,false); - for(var i=0;i.card>.info>span, top: auto; right: 20px; bottom: 20px; + z-index: 5; } .connectevents.server{ left: 20px; diff --git a/mode/guozhan.js b/mode/guozhan.js index e9990e9fd..abbd605f7 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -359,7 +359,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_wenpin'], guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'], guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan'], - guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi'], + guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi'], guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan","gz_key_ushio","gz_sp_duyu"], } }, @@ -509,6 +509,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_zongyu:['male','shu',3,['zyqiao','chengshang']], gz_miheng:['male','qun',3,['gzrekuangcai','gzshejian'],['gzskin']], gz_fengxi:['male','wu',3,['yusui','boyan']], + gz_dengzhi:['male','shu',3,['gzjianliang','gzweimeng'],['gzskin']], gz_cuimao:['male','wei',3,['gzzhengbi','gzfengying'],[]], gz_yujin:['male','wei',4,['gzjieyue'],['gzskin']], @@ -538,6 +539,105 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //邓芝 + gzjianliang:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + frequent:true, + filter:function(event,player){ + return player.isMinHandcard(); + }, + logTarget: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.filterPlayer(isFriend); + }, + content:function(){ + 'step 0' + var list=game.filterPlayer(function(current){ + return current.isFriendOf(player); + }); + if(list.length==1){ + list[0].draw(); + event.finish(); + } + else game.asyncDraw(list); + 'step 1' + game.delayx(); + }, + }, + gzweimeng:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target.countGainableCards(player,'h')>0; + }, + content:function(){ + 'step 0' + player.gainPlayerCard(target,'h',true,event.name=='gzweimeng'?[1,player.hp]:1); + 'step 1' + if(result.bool&&target.isIn()){ + var num=result.cards.length,hs=player.getCards('he'); + if(!hs.length) event.goto(3); + else if(hs.length<=num) event._result={bool:true,cards:hs}; + else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌',num); + } + else event.goto(3); + 'step 2' + target.gain(result.cards,player,'giveAuto'); + 'step 3' + if(target.isIn()&&event.name=='gzweimeng') player.chooseBool('纵横:是否令'+get.translation(target)+'获得【危盟】?').set('ai',function(){ + var evt=_status.event.getParent(); + return get.attitude(evt.player,evt.target)>0; + }); + else event.finish(); + 'step 4' + if(result.bool){ + target.addTempSkill('gzweimeng_zongheng',{player:'phaseEnd'}); + game.log(player,'发起了','#y纵横',',令',target,'获得了技能','#g【危盟】'); + } + }, + derivation:'gzweimeng_zongheng', + subSkill:{ + zongheng:{ + inherit:'gzweimeng', + ai:{ + order:6, + tag:{ + lose:1, + loseCard:1, + gain:1, + }, + result:{ + target:-1, + }, + }, + }, + }, + ai:{ + order:6, + tag:{ + lose:1, + loseCard:1, + gain:1, + }, + result:{ + target:function(player,target){ + return -Math.pow(Math.min(player.hp,target.countCards('h')),2)/4; + }, + }, + }, + }, //邹氏 huoshui:{ audio:2, @@ -1129,9 +1229,40 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'step 0' target.draw(Math.min(5,target.maxHp-target.countCards('h'))); 'step 1' - target.addTempSkill('boyan_block') + target.addTempSkill('boyan_block'); + 'step 2' + if(target.isIn()) player.chooseBool('纵横:是否令'+get.translation(target)+'获得【驳言】?').set('ai',function(){ + var evt=_status.event.getParent(); + return get.attitude(evt.player,evt.target)>0; + }); + else event.finish(); + 'step 3' + if(result.bool){ + target.addTempSkill('boyan_zongheng',{player:'phaseEnd'}); + game.log(player,'发起了','#y纵横',',令',target,'获得了技能','#g【驳言】'); + } }, + derivation:'boyan_zongheng', subSkill:{ + zongheng:{ + enable:'phaseUse', + usable:1, + filterTarget:lib.filter.notMe, + content:function(){ + target.addTempSkill('boyan_block'); + }, + ai:{ + order:4, + result:{ + target:function(player,target){ + if(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 -target.countCards('h'); + return -0.5; + }, + }, + }, + }, block:{ mark:true, intro:{content:'不能使用或打出手牌'}, @@ -1243,6 +1374,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'step 0' player.awakenSkill('gzduwu'); player.addSkill('gzduwu_count'); + targets.sortBySeat(); event.players=targets.slice(0); game.delayx(); player.chooseJunlingFor(event.players[0]).set('prompt','为所有目标角色选择军令牌'); @@ -1922,12 +2054,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.line(trigger.target); trigger.target.chooseToDiscard('he',true); }, - ai:{ - unequip:true, - skillTagFilter:function(player,tag,arg){ - if(!arg||!arg.card||!arg.card.gzzhuhai_tag) return false; - }, - }, + ai:{ + unequip:true, + skillTagFilter:function(player,tag,arg){ + if(!arg||!arg.card||!arg.card.gzzhuhai_tag) return false; + }, + }, }, quanjin:{ audio:2, @@ -3337,22 +3469,22 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ isCard:true, }, filterTarget:function(card,player,target){ - var xx=lib.skill.yigui_backup; - var evt=_status.event; - var group=xx.group; - var double=get.is.double(xx.character,true); - var info=get.info(card); - if((!(info.singleCard&&ui.selected.targets.length))&&group!='ye'&&target.identity!='unknown'&&target.identity!='ye'&&target.identity!=group&&(!double||!double.contains(target.identity))) return false; - if(info.changeTarget){ - var targets=[target]; - info.changeTarget(player,targets); - for(var i=0;i声明
    • 以下所有规则均为根据公开爆料整理,经村规改动后制定的临时规则。不代表任何官方意见。请以后续发布的官方规则作为标准。
    ' +'
    双势力武将
    • 双势力武将牌只能放在副将位置。主将可以为普通武将牌和野心家武将牌。
    • 双势力武将牌明置时,势力按照主将的势力进行结算(无论是否明置主将)。胜负条件与正常的单势力武将相同。
    • 变更副将时,可以选择包含原势力的双势力武将牌。左慈发动【役鬼】时,可以使用双势力武将牌同时指定两个不同势力的角色为目标。
    • 特殊地,“冈崎汐”作为多势力武将牌,结算流程和规则与其他双势力武将相同。
    ' +'
    野心家武将
    • 野心家武将只能放在主将位置。副将可以为任意非野心家武将牌。
    • 选择了野心家武将牌的角色(以下简称“野心家角色”)仅明置副将时,若副将为单势力武将牌,则势力暂时视为与该武将牌相同。若副将为双势力武将牌,则势力视为野心家。
    • 野心家角色明置主将时,其势力改为野心家。若其是首次明置该武将牌,则其获得一个“野心家”标记。
    • “野心家”标记可以当做“先驱”标记,“阴阳鱼”标记或是“珠联璧合”标记使用。当同时拥有两种标记时,优先弃置原装标记,下次发动时才弃置“野心家”标记。
    • 野心家角色变更副将时,若其主将未明置过,则按照副将的势力进行变更。若主将已经明置过,则可以选择所有的非野心家武将牌。左慈发动【役鬼】时,可以使用野心家武将牌同时指定所有势力的角色为目标。' - +'
    • 当场上触发了胜利条件时,若这些角色中存在未明置过主将的野心家角色,则这些野心家角色选择是否“暴露野心”。若无人选择“是”且场上存在非野心家角色存活,则所有非野心家角色胜利,野心家角色失败。若有人选择“是”,则这些角色明置主将。然后若场上存活角色数大于等于3,则这些角色选择是否发起“拉拢人心”
    • 选择发起“拉拢人心”的野心家角色,令所有其他非野心家角色和非君主角色依次选择是否和该野心家角色“结盟”。若有人选择“是”,则野心家角色弃置“野心家”标记,且该角色将势力改为野心家,且视为和发起“拉拢人心”的野心家角色势力相同,并终止对其他角色的询问。
    ', + +'
  • 当场上触发了胜利条件时,若这些角色中存在未明置过主将的野心家角色,则这些野心家角色选择是否“暴露野心”。若无人选择“是”且场上存在非野心家角色存活,则所有非野心家角色胜利,野心家角色失败。若有人选择“是”,则这些角色明置主将。然后若场上存活角色数大于等于3,则这些角色选择是否发起“拉拢人心”
  • 选择发起“拉拢人心”的野心家角色,令所有其他非野心家角色和非君主角色依次选择是否和该野心家角色“结盟”。若有人选择“是”,则野心家角色弃置“野心家”标记,且该角色将势力改为野心家,且视为和发起“拉拢人心”的野心家角色势力相同,并终止对其他角色的询问。' + +'
    纵横捭阖
    • 当一名角色对目标角色发动具有拥有“纵横”衍生技的技能时,其可以令对方获得“纵横”衍生技直到其下回合结束。
    ', }, }; });