diff --git a/card/standard.js b/card/standard.js index 94806625d..290b1da53 100644 --- a/card/standard.js +++ b/card/standard.js @@ -81,7 +81,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ usable:1, updateUsable:'phaseUse', global:'icesha_skill', - range:{attack:1}, + range:function(card,player,target){ + return player.inRange(target); + }, selectTarget:1, cardPrompt:function(card){ if(card.nature=='stab') return '出牌阶段,对你攻击范围内的一名角色使用。其须使用一张【闪】,且在此之后需弃置一张手牌(没有则不弃)。否则你对其造成1点伤害。'; diff --git a/card/yunchou.js b/card/yunchou.js index ea2f40691..cf71b6945 100644 --- a/card/yunchou.js +++ b/card/yunchou.js @@ -265,11 +265,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){ type:'trick', filterTarget:function(card,player,target){ if(target==player) return false; - if(!ui.selected.targets.length) return target.countCards('h')>0&&game.hasPlayer(function(current){ + return target.countCards('h')>0&&game.hasPlayer(function(current){ return target.canCompare(current); }); return ui.selected.targets[0].canCompare(target); }, + filterAddedTarget:function(card,player,target,preTarget){ + return target!=player&&preTarget.canCompare(target); + }, enable:function(){ return game.countPlayer()>2; }, @@ -287,6 +290,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ complexSelect:true, content:function(){ 'step 0' + if(!event.addedTarget||!target.canCompare(event.addedTarget)){ + event.finish(); + return; + } target.chooseToCompare(event.addedTarget); 'step 1' if(!result.tie){ @@ -308,7 +315,6 @@ game.import('card',function(lib,game,ui,get,ai,_status){ target.discardPlayerCard(player); target.line(player); }, - selectTarget:2, ai:{ order:5, value:[7,1], diff --git a/character/diy.js b/character/diy.js index 39a015839..46ab339f3 100755 --- a/character/diy.js +++ b/character/diy.js @@ -28,7 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_harukakanata:['female','key',3,['haruka_shuangche']], key_inari:['female','key',2,['inari_baiwei','inari_huhun']], key_shiina:['female','key',3,['shiina_qingshen','shiina_feiyan']], - key_sunohara:['double','key','3/4',['sunohara_chengshuang','sunohara_tiaoyin','sunohara_jianren']], + key_sunohara:['double','key','3/3/2',['sunohara_chengshuang','sunohara_tiaoyin','sunohara_jianren']], key_rin:['female','key',3,['rin_baoqiu']], key_sasami:['female','key',3,['sasami_miaobian']], key_akane:['female','key',3,['akane_jugu','akane_quanqing','akane_yifu'],['zhu']], @@ -73,6 +73,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_mia:['female','key',3,['mia_shihui','mia_qianmeng']], key_kano:['female','key',3,['kano_liezhen','kano_poyu']], db_key_liyingxia:['female','shu',3,['liyingxia_sanli','liyingxia_zhenjun','liyingxia_wumai'],['doublegroup:shu:key']], + key_erika:['female','key','3/3/2',['erika_shisong','erika_yousheng']], + key_satomi:['female','key',3,['satomi_luodao','satomi_daohai']], key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], @@ -198,7 +200,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"], diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji"], 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","key_kano","db_key_liyingxia"], + 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","db_key_liyingxia","key_erika","key_satomi"], diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang'], }, }, @@ -220,7 +222,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanghu:'羊祜(221年-278年12月27日),字叔子,泰山郡南城县人。西晋时期杰出的战略家、政治家、文学家,曹魏上党太守羊衜的儿子,名儒蔡邕的女儿蔡文姬的外甥。出身“泰山羊氏”,博学能文,清廉正直。曹魏时期,接受公车征辟,出任中书郎,迁给事黄门侍郎。姐姐嫁给大将军司马师,投靠司马氏家族,仕途平步青云。魏元帝曹奂即位,出任秘书监、相国从事中郎、中领军,统领御林军,兼管内外政事,册封钜平县子,迁。西晋建立后,迁中军将军、散骑常侍、郎中令,册封钜平侯。泰始五年(269年),出任车骑将军、荆州都督,加任开府仪同三司坐镇襄阳,屯田兴学,以德怀柔,深得军民之心;扩充军备,训练士兵,全力准备灭亡孙吴,累迁征南大将军,册封南城侯。咸宁四年,去世,临终前举荐杜预接任职务,获赠侍中、太傅,谥号为“成”。唐宋时期,配享武庙。', }, characterTitle:{ - db_key_liyingxia:'#rヘブンバーンズレッド', + key_satomi:'#rHeaven Burns Red', + key_erika:'#rHeaven Burns Red', + db_key_liyingxia:'#rHeaven Burns Red', key_kano:'#bAIR', key_mia:'#bLoopers', key_kotomi:'#gClannad', @@ -509,6 +513,216 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + satomi_luodao:{ + trigger:{player:'useCardToPlayered'}, + logTarget:'target', + filter:function(event,player){ + return event.card.name=='sha'&&event.target.countCards('h')>0; + }, + content:function(){ + 'step 0' + var target=trigger.target; + event.target=target; + target.showHandcards(get.translation(player)+'对'+get.translation(target)+'发动了【落刀】'); + 'step 1' + if(target.hasCard(function(card){ + return get.name(card,target)=='shan'; + },'h')){ + player.discardPlayerCard(target,true,'h','visible').set('filterButton',function(button){ + return get.name(button.link)=='shan'; + }); + } + else if(player.countCards('he')>0) player.chooseToDiscard('he',true); + }, + }, + satomi_daohai:{ + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return player.hasHistory('lose',function(evt){ + return evt.type=='discard'&&evt.cards2.length>0; + })&&player.hasUseTarget({name:'wugu'}); + }, + check:function(event,player){ + return player.getUseValue({name:'wugu'})+player.getUseValue({name:'lebu'})>0; + }, + content:function(){ + 'step 0' + player.chooseUseTarget('wugu',true); + 'step 1' + if(result.bool){ + var cards=[]; + player.getHistory('gain',function(evt){ + if(evt.getParent().name=='wugu'&&evt.getParent(4)==event){ + cards.addArray(evt.cards); + } + }); + cards=cards.filter(function(card){ + return player.getCards('h').contains(card)&&game.checkMod(card,player,'unchanged','cardEnabled2',player); + }); + if(cards.length){ + player.chooseCardTarget({ + prompt:'是否将获得的牌当做【乐不思蜀】使用?', + filterCard:function(card){ + return _status.event.cards.contains(card); + }, + cards:cards, + filterTarget:function(card,player,target){ + var card=get.autoViewAs({name:'lebu'},ui.selected.cards); + return player.canUse(card,target); + }, + ai1:()=>1, + ai2:function(target){ + var player=_status.event.player,card=get.autoViewAs({name:'lebu'},ui.selected.cards); + return get.effect(target,{name:'lebu'},player,player); + }, + }) + } + else event.finish(); + } + else event.finish(); + 'step 2' + if(result.bool){ + player.useCard({name:'lebu'},result.cards,result.targets[0]); + } + }, + }, + erika_shisong:{ + trigger:{player:'useCard'}, + forced:true, + charlotte:true, + filter:function(event,player){ + if(player!=_status.currentPhase) return false; + var index=player.getHistory('useCard').indexOf(event),history=player.actionHistory; + for(var i=history.length-2;i>=0;i--){ + if(history[i].isMe){ + var evt=history[i].useCard[index]; + return evt&&get.type2(evt.card)==get.type(event.card); + } + } + return false; + }, + content:function(){ + player.draw(); + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.hujia; + }, + }, + }, + erika_yousheng:{ + dutySkill:true, + group:['erika_yousheng_achieve','erika_yousheng_fail','erika_yousheng_mamori'], + trigger:{global:'useCardToTarget'}, + direct:true, + filter:function(event,player){ + return player.getStorage('erika_yousheng').contains(event.target)&& + (event.card.name=='sha'||(get.type2(event.card,false)=='trick'&&get.tag(event.card,'damage')>0))&& + (player.countMark('erika_yousheng_ruka')+1)<=player.countCards('he'); + }, + intro:{ + content:'已保护$', + }, + content:function(){ + 'step 0' + var num=(player.countMark('erika_yousheng_ruka')+1); + player.chooseToDiscard('he',num,get.prompt('erika_yousheng',trigger.target),'弃置'+(num)+'张牌,并转移'+get.translation(trigger.card)).logSkill=['erika_yousheng',trigger.target]; + 'step 1' + if(result.bool){ + var ruka=trigger.target,evt=trigger.getParent(); + evt.targets.remove(ruka); + evt.triggeredTargets2.remove(ruka); + evt.targets.push(player); + evt.triggeredTargets2.push(player); + player.addTempSkill('erika_yousheng_ruka'); + var str='erika_yousheng_'+player.playerid; + if(!evt[str]) evt[str]=[]; + evt[str].add(ruka); + } + }, + subSkill:{ + achieve:{ + trigger:{player:'changeHujiaAfter'}, + forced:true, + skillAnimation:'legend', + animationColor:'water', + filter:function(event,player){ + return player.storage.erika_yousheng&&event.num<0&&!player.hujia; + }, + content:function(){ + 'step 0' + player.awakenSkill('erika_yousheng'); + game.log(player,'成功完成使命'); + var list=[player]; + list.addArray(player.storage.erika_yousheng); + list.sortBySeat(); + list=list.filter(function(current){ + return current.isAlive(); + }); + player.line(list,'green'); + game.asyncDraw(list,3); + 'step 1' + game.delayx(); + }, + }, + fail:{ + trigger:{global:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player.getStorage('erika_yousheng').contains(event.player)&&event.card&&(event.card.name=='sha'||(get.type2(event.card,false)=='trick'&&get.tag(event.card,'damage')>0)); + }, + content:function(){ + player.awakenSkill('erika_yousheng'); + game.log(player,'使命失败'); + var num=player.hujia; + if(num>0){ + player.changeHujia(-num); + player.chooseToDiscard(num,true,'he'); + } + }, + }, + mamori:{ + trigger:{global:'roundStart'}, + skillAnimation:true, + animationColor:'wood', + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('erika_yousheng'),[1,2],lib.filter.notMe,'选择至多两名其他角色。你减2点体力上限并获得3点护甲。').set('ai',function(ruka){ + return -1; + }); + 'step 1' + if(result.bool){ + player.logSkill('erika_yousheng_mamori',result.targets); + player.awakenSkill('erika_yousheng_mamori'); + player.markAuto('erika_yousheng',result.targets); + player.loseMaxHp(2); + player.changeHujia(3); + } + }, + }, + ruka:{ + trigger:{global:'useCardAfter'}, + direct:true, + charlotte:true, + filter:function(event,player){ + return event['erika_yousheng_'+player.playerid]&&event.cards.filterInD().length>0; + }, + content:function(){ + 'step 0' + player.chooseTarget('是否令一名原目标角色获得'+get.translation(trigger.cards.filterInD())+'?',function(card,player,target){ + return _status.event.targets.contains(target); + }).set('targets',trigger['erika_yousheng_'+player.playerid]); + 'step 1' + if(result.bool){ + var ruka=result.targets[0]; + player.line(ruka,'green'); + ruka.gain(trigger.cards.filterInD(),'gain2'); + } + }, + }, + }, + }, liyingxia_sanli:{ trigger:{target:'useCardToTargeted'}, forced:true, @@ -4603,16 +4817,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ frequent:true, content:function(){ "step 0" - if(player.isUnderControl()){ - game.modeSwapPlayer(player); - } var num=1+player.countCards('e'); var cards=get.cards(num); - event.cards=cards; - var switchToAuto=function(){ - _status.imchoosing=false; - if(event.dialog) event.dialog.close(); - if(event.control) event.control.close(); + game.cardsGotoOrdering(cards); + var next=player.chooseToMove(); + next.set('list',[ + ['牌堆顶',cards], + ['牌堆底'], + ]); + next.set('prompt','幻梦:点击将牌移动到牌堆顶或牌堆底'); + next.processAI=function(list){ + var cards=list[0][1],player=_status.event.player; var top=[]; var judges=player.getCards('j'); var stopped=false; @@ -4641,149 +4856,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } bottom=cards; - for(var i=0;i②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -15435,7 +15533,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kanade_mapo:'麻婆', kanade_mapo_info:'你可以将一张♥牌当做【麻婆豆腐】使用。你使用的【麻婆豆腐】可以多指定一个目标。', kanade_benzhan:'奔战', - kanade_benzhan_info:'当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', + kanade_benzhan_info:'每回合限一次。当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', mio_tuifu:'推腐', mio_tuifu_info:'锁定技,当一名角色对一名同性角色造成伤害时,你摸一张牌。', mio_tishen:'替身', @@ -15455,7 +15553,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shizuru_nianli:'念力', shizuru_nianli_info:'每轮限一次,你可以展示一张♦/♣/♥/♠手牌,然后视为使用一张不计入次数限制和记录的雷【杀】/【闪】/【桃】/【无懈可击】。', shizuru_benzhan:'奔战', - shizuru_benzhan_info:'当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', + shizuru_benzhan_info:'每回合限一次。当你使用或打出牌响应其他角色,或其他角色使用或打出牌响应你后,若此牌为:基本牌,你可令一名角色弃置两张牌或令一名角色摸两张牌;非基本牌,你可对一名角色造成1点伤害或令一名其他角色回复1点体力。', shiorimiyuki_banyin:'伴音', shiorimiyuki_banyin_info:'当你受到伤害或回复体力后,你可令一名其他角色回复1点体力。', shiorimiyuki_tingxian:'铤险', @@ -15600,6 +15698,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liyingxia_zhenjun_info:'键势力技。结束阶段,你可以令至多X名角色各摸一张牌,且这些角色于自己的下个回合内第一次造成的伤害+1(X为你本回合内使用【杀】和伤害性锦囊牌的次数)。', liyingxia_wumai:'武脉', liyingxia_wumai_info:'蜀势力技。一轮游戏开始时,你可以选择获得其中一个未选择过的技能直到本轮结束:〖八阵〗/〖集智〗/〖观星〗/〖游龙〗。若均已选择过,则你可以摸X张牌(X为场上已受伤的角色数且至多为3)。', + erika_shisong:'识诵', + erika_shisong_info:'锁定技。①你的手牌上限+X(X为你的护甲数)。②当你于回合内使用第X张牌时,若此牌与你上回合使用的第X张牌类型相同,则你摸一张牌。', + erika_yousheng:'佑生', + erika_yousheng_info:'使命技。①限定技。一轮游戏开始时,你可以选择至多两名其他角色。你减2点体力上限并增加3点护甲。②当你因〖佑生①〗选择的角色成为【杀】或伤害类锦囊牌的目标时,你可以弃置X张牌并将此目标转移给自己(X为你本轮内发动过〖佑生②〗的次数)。此牌结算结束后,你可令一名原目标角色获得此牌。③成功:当你失去最后的护甲后,若你已发动过〖佑生①〗,则你和所有〖佑生①〗选择的角色各摸三张牌。④失败:当一名〖佑生①〗选择的角色因【杀】或伤害类锦囊牌而受到伤害时,你失去所有护甲并弃置等量的牌。', + erika_yousheng_append:'Death is not the end of life, but the completion of life.', + satomi_luodao:'落刀', + satomi_luodao_info:'当你使用【杀】指定目标后,你可以展示目标角色的所有手牌。若其中:有【闪】,则你弃置其中的一张【闪】;没有【闪】,则你弃置一张牌。', + satomi_daohai:'稻海', + satomi_daohai_info:'结束阶段,若你本回合内弃置过牌,则你可以视为使用一张【五谷丰登】。然后你可以将你于此【五谷丰登】中获得的牌当做【乐不思蜀】使用。', + satomi_daohai_append:'五穀豊穣、刈り入れ時だね!', key_kud:'库特莉亚芙卡', kud_qiaoshou:'巧手', diff --git a/character/mobile.js b/character/mobile.js index 8dcc1ffe1..353157594 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -17,7 +17,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], - mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin"], + mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai"], mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"], mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"], mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen"], @@ -27,6 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + re_wuguotai:['female','wu',3,['reganlu','buyi']], xin_sunxiu:['male','wu',3,['mobileyanzhu','mobilexingxue','zhaofu'],['zhu']], sp_maojie:['male','wei',3,['bingqing','yingfeng']], sp_zhujun:['male','qun',4,['yangjie','zjjuxiang','houfeng']], @@ -606,6 +607,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + reganlu:{ + enable:'phaseUse', + usable:1, + audio:2, + selectTarget:2, + delay:0, + filterTarget:function(card,player,target){ + if(target.isMin()) return false; + if(ui.selected.targets.length==0) return true; + if(ui.selected.targets[0].countCards('e')==0&&target.countCards('e')==0) return false; + return target==player||ui.selected.targets[0]==player||Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp; + }, + multitarget:true, + multiline:true, + content:function(){ + targets[0].swapEquip(targets[1]); + }, + ai:{ + order:10, + threaten:function(player,target){ + return 0.8*Math.max(1+target.maxHp-target.hp); + }, + result:{ + target:function(player,target){ + var list1=[]; + var list2=[]; + var num=player.maxHp-player.hp; + var players=game.filterPlayer(); + for(var i=0;i0) list1.push(players[i]); + else if(get.attitude(player,players[i])<0) list2.push(players[i]); + } + list1.sort(function(a,b){ + return a.countCards('e')-b.countCards('e'); + }); + list2.sort(function(a,b){ + return b.countCards('e')-a.countCards('e'); + }); + var delta; + for(var i=0;iplayer.getDamagedHp()) player.chooseToDiscard('h',2,true); + }, + ai:{ + order:10, + expose:0.2, + threaten:function(player,target){ + return 0.8*Math.max(1+target.maxHp-target.hp); + }, + result:{ + target:function(player,target){ + if(!ui.selected.targets.length) return -get.value(target.getCards('e'),target); + var target2=ui.selected.targets[0]; + var eff_target=(get.value(target2.getCards('e'),target)-get.value(target.getCards('e'),target)); + if(get.sgn(eff_target)==get.sgn(-get.value(target2.getCards('e'),target2))) return 0; + return eff_target; + } + }, + } + }, + xinbuyi:{ + audio:2, + trigger:{global:'dying'}, + filter:function(event,player){ + return event.player.countCards('h')>0; + }, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + 'step 0' + if(player==trigger.player) player.chooseCard('h',true).set('ai',function(card){ + if(get.type(card)!='basic') return 100-get.value(card); + return 0; + }); + else player.choosePlayerCard('h',trigger.player,true); + 'step 1' + var card=result.cards[0],target=trigger.player; + player.showCards(card,get.translation(player)+'对'+(player==target?'自己':get.translation(target))+'发动了【补益】'); + if(get.type(card,target)!='basic'){ + target.discard(card); + target.recover(); + if(target.countCards('h')==1) target.draw(); + } + }, + logTarget:'player', + }, rejiaozhao:{ audio:2, enable:'phaseUse', @@ -2669,8 +2735,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, onremove:true, mod:{ - attackFrom:function(){ - return -Infinity; + attackRangeBase:function(){ + return Infinity; }, cardUsable:function(card,player){ if(card.name=='sha'&&player.storage.xingongji2.contains(get.suit(card))) return Infinity; @@ -4523,8 +4589,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, regongji:{ mod:{ - attackFrom:function(player){ - if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return -Infinity + attackRangeBase:function(player){ + if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return Infinity; }, }, enable:'phaseUse', @@ -5954,62 +6020,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, - reganlu:{ - enable:'phaseUse', - usable:1, - audio:2, - selectTarget:2, - delay:0, - filterTarget:function(card,player,target){ - if(target.isMin()) return false; - if(ui.selected.targets.length==0) return true; - if(ui.selected.targets[0].countCards('e')==0&&target.countCards('e')==0) return false; - return target==player||ui.selected.targets[0]==player||Math.abs(ui.selected.targets[0].countCards('e')-target.countCards('e'))<=player.maxHp-player.hp; - }, - multitarget:true, - multiline:true, - content:function(){ - targets[0].swapEquip(targets[1]); - }, - ai:{ - order:10, - threaten:function(player,target){ - return 0.8*Math.max(1+target.maxHp-target.hp); - }, - result:{ - target:function(player,target){ - var list1=[]; - var list2=[]; - var num=player.maxHp-player.hp; - var players=game.filterPlayer(); - for(var i=0;i0) list1.push(players[i]); - else if(get.attitude(player,players[i])<0) list2.push(players[i]); - } - list1.sort(function(a,b){ - return a.countCards('e')-b.countCards('e'); - }); - list2.sort(function(a,b){ - return b.countCards('e')-a.countCards('e'); - }); - var delta; - for(var i=0;i=4) return [0,1]; + } + } + } + }, + derivation:['oltiaoxin','new_repaoxiao','xinshensu'], + }, //范强张达 yuanchou:{ audio:2, @@ -3779,16 +3811,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 5.1-get.value(card); }, filterCard:{color:'black'}, - filterTarget:function(card,player,target){ - if(target.hp<=player.hp) return false; - return lib.filter.filterTarget.apply(this,arguments); - }, position:'hes', audio:'niluan', viewAsFilter:function(player){ - return player.countCards('hes',lib.skill.spniluan.filterCard)>0&&game.hasPlayer(function(current){ - return current.hp>player.hp&&player.canUse('sha',current); - }); + return player.countCards('hes',lib.skill.spniluan.filterCard)>0; }, group:'spniluan_clear', }, @@ -3820,12 +3846,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 7-get.value(card); }, filterTarget:function(card,player,target){ - if(target.countCards('h')<=player.countCards('h')) return false; + if(target.countCards('h')0&&game.hasPlayer(function(current){ - return current.countCards('h')>player.countCards('h')&&player.canUse('shunshou',current); + return current.countCards('h')>=player.countCards('h')&&player.canUse('shunshou',current); }); }, }, @@ -14116,7 +14142,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 2" player.removeSkill('bifa2'); }, + marktext:'檄', intro:{ + markcount:1, name:'笔伐', content:'已成为〖笔伐〗的目标', }, @@ -15888,13 +15916,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huaxin:['ol_huaxin','huaxin','sp_huaxin'], xujing:['xujing','sp_xujing'], zhaoxiang:['zhaoxiang','tw_zhaoxiang'], - dengzhi:['ol_dengzhi','dengzhi'], + dengzhi:['ol_dengzhi','re_dengzhi','dengzhi'], wangrong:['wangrong','ol_wangrong'], zongyu:['sp_zongyu','zongyu'], ol_dongzhao:['ol_dongzhao','tw_dongzhao'], mayunlu:['tw_mayunlu','mayunlu'], zhuling:['ol_zhuling','zhuling'], zangba:['tw_zangba','zangba'], + zhangbao:['zhangbao','re_zhangbao'], }, translate:{ "xinfu_lingren":"凌人", @@ -16001,7 +16030,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhugedan:'诸葛诞', sp_machao:'SP马超', sp_jiangwei:'SP姜维', - zhangbao:'张宝', + zhangbao:'OL张宝', yangxiou:'杨修', shixie:'士燮', mayunlu:'马云騄', @@ -16037,8 +16066,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dongyun:'董允', mazhong:'马忠', huangfusong:'皇甫嵩', - miheng:'祢衡', - taoqian:'陶谦', wangyun:'王允', sunqian:'孙乾', xizhicai:'戏志才', @@ -16595,6 +16622,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yongsi_info:'锁定技,摸牌阶段,你多摸X张牌。弃牌阶段开始时,你弃置X张牌。(X为场上势力数)', yicong_info:'锁定技,当你的体力值大于2时,你计算与其他角色的距离时-1;当你的体力值不大于2时,其他角色计算与你的距离时+1。', baobian_info:'锁定技,若你的体力值为3或更少,你视为拥有技能〖挑衅〗;若你的体力值为2或更少;你视为拥有技能〖咆哮〗;若你的体力值为1,你视为拥有技能〖神速〗。', + rebaobian:'豹变', + rebaobian_info:'锁定技。当你受到伤害后,你获得以下技能中第一个未拥有的技能:〖挑衅〗/〖咆哮〗/〖神速〗。', bingzhao:'秉诏', bingzhao_info:'主公技,游戏开始时,你选择一个其他势力。当你对该势力的角色发动〖骨疽〗时,其可令你额外摸一张牌。', sunshao:'孙邵', @@ -16628,9 +16657,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shanzhuan:'擅专', shanzhuan_info:'当你对其他角色造成伤害后,若其判定区没有牌,则你你可以将其的一张牌置于其的判定区。若此牌不为延时锦囊牌且此牌为:红色,此牌视为【乐不思蜀】;黑色,此牌视为【兵粮寸断】。回合结束时,若你本回合内未造成伤害,你可摸一张牌。', spniluan:'逆乱', - spniluan_info:'出牌阶段,你可以将一张黑色牌当做【杀】对体力值大于你的角色使用。此【杀】使用结算完成后,若你未因此【杀】造成过伤害,则你令此【杀】不计入使用次数。', + spniluan_info:'出牌阶段,你可以将一张黑色牌当做【杀】使用。此【杀】使用结算完成后,若你未因此【杀】造成过伤害,则你令此【杀】不计入使用次数。', spweiwu:'违忤', - spweiwu_info:'出牌阶段限一次,你可以将一张红色牌当做【顺手牵羊】对手牌数大于你的角色使用。', + spweiwu_info:'出牌阶段限一次,你可以将一张红色牌当做【顺手牵羊】对手牌数不小于你的角色使用。', spmouzhu:'谋诛', spmouzhu_backup:'谋诛', spmouzhu_info:'出牌阶段限一次,你可以从“距离为1”或“体力值等于你”中选择一个条件,然后令此时所有满足条件的角色依次进行以下结算:交给你一张手牌,然后若其手牌数小于你,则其视为对你使用一张【杀】或【决斗】。', @@ -16717,7 +16746,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fuwei_info:'每回合限一次。当你的牌被其他角色弃置或获得后,你可从牌堆中获得一张与此牌名称相同的牌(若没有则改为摸一张牌)。', yuejian:'约俭', yuejian_info:'每回合限两次。当其他角色对你使用的牌A结算结束后,你可展示所有手牌。若牌A有花色且你的手牌中没有同花色的牌,则你获得牌A对应的所有实体牌。', - ol_dengzhi:'邓芝', + ol_dengzhi:'OL邓芝', olxiuhao:'修好', olxiuhao_info:'每回合限一次。当你受到其他角色造成的伤害时,或对其他角色造成伤害时,你可防止此伤害,然后令伤害来源摸两张牌。', olsujian:'素俭', diff --git a/character/sp2.js b/character/sp2.js index 4901a4f09..cfd5d1554 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + re_dengzhi:['male','shu',3,['jianliang','weimeng']], + fengxi:['male','wu',3,['yusui','boyan']], + re_miheng:['male','qun',3,['rekuangcai','reshejian']], + re_zhangbao:['male','qun',3,['xinzhoufu','xinyingbing']], zhaoyan:['female','wu',3,['jinhui','qingman']], re_sunyi:['male','wu',5,['syjiqiao','syxiongyi']], re_pangdegong:['male','qun',3,['heqia','yinyi']], @@ -126,10 +130,338 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zhilan:['liuyong','wanniangongzhu','zhanghu'], sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning'], sp_guixin:['re_kanze','re_chendeng'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','lvlingqi','caojinyu','wangtao','wangyue','re_pangdegong','re_sunyi'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','lvlingqi','caojinyu','wangtao','wangyue','re_pangdegong','re_sunyi','re_miheng','fengxi','re_dengzhi','re_zhangbao'], } }, skill:{ + //邓芝 + jianliang:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + filter:function(event,player){ + return !player.isMaxHandcard(); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('jianliang'),'令至多两名角色各摸一张牌',[1,2]).set('ai',function(target){ + return Math.sqrt(5-Math.min(4,target.countCards('h')))*get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.logSkill('jianliang',targets); + if(targets.length==1){ + targets[0].draw(); + event.finish(); + } + else game.asyncDraw(targets); + } + else event.finish(); + 'step 2' + game.delayx(); + }, + }, + weimeng:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player.hp>0&&target!=player&&target.countGainableCards(player,'h')>0; + }, + content:function(){ + 'step 0' + player.gainPlayerCard(target,'h',true,[1,player.hp]); + 'step 1' + if(result.bool&&target.isIn()){ + var num=result.cards.length,hs=player.getCards('he'); + var numx=0; + for(var i of result.cards) numx+=get.number(i,player); + event.num=numx; + event.cards=result.cards; + if(!hs.length) event.finish(); + else if(hs.length<=num) event._result={bool:true,cards:hs}; + else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌','(已获得牌的点数和:'+numx+')',num); + } + else event.finish(); + 'step 2' + target.gain(result.cards,player,'giveAuto'); + var numx=0; + for(var i of result.cards) numx+=get.number(i,player); + if(numx>num) player.draw(); + else if(numx-3) return false; + if(player.hp3) return true; + return false; + }, + preHidden:true, + content:function(){ + 'step 0' + player.loseHp(); + event.target=trigger.player; + 'step 1' + event.addIndex=0; + var list=[],num=target.countCards('h')-player.countCards('h'); + event.num=num; + if(num>0&&target.countCards('h')>0) list.push('令其弃置'+get.cnNumber(num)+'张手牌'); + 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(_status.event.getParent().num,target.countCards('h'))/2)?1:0; + }); + 'step 2' + if(result.index+event.addIndex==0) target.chooseToDiscard(num,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.max(0,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')&&player.getUseValue(card,null,true)>0&&get.effect(target,card,player,player)>0; + })) return -2; + }, + }, + }, + }, + //祢衡 + rekuangcai:{ + audio:2, + forced:true, + trigger:{player:'phaseDiscardBegin'}, + filter:function(event,player){ + return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length; + }, + content:function(){ + if(!player.getHistory('useCard').length) player.addTempSkill('rekuangcai_more'); + else player.addTempSkill('rekuangcai_less'); + }, + mod:{ + targetInRange:function(card,player){ + if(player==_status.currentPhase) return true; + }, + cardUsable:function(card,player){ + if(player==_status.currentPhase) return Infinity; + }, + }, + group:'rekuangcai_draw', + subSkill:{ + draw:{ + audio:'rekuangcai', + trigger:{player:'phaseJieshuBegin'}, + forced:true, + filter:function(event,player){ + return player.getHistory('sourceDamage').length>0; + }, + content:function(){ + player.draw(Math.min(5,player.getStat('damage'))); + }, + }, + less:{ + mod:{ + maxHandcard:function(player,num){ + return num-1; + }, + }, + charlotte:true, + }, + more:{ + mod:{ + maxHandcard:function(player,num){ + return num+1; + }, + }, + charlotte:true, + }, + }, + }, + reshejian:{ + audio:2, + trigger:{target:'useCardToTargeted'}, + filter:function(event,player){ + if(player==event.player||event.targets.length!=1) return false; + return player.countCards('h')>=2; + }, + direct:true, + usable:2, + content:function(){ + 'step 0' + player.chooseToDiscard('he',[2,Infinity],get.prompt('reshejian',trigger.player),'
弃置至少两张手牌,然后选择一项:
⒈弃置其等量的牌。⒉对其造成1点伤害。
').set('',function(card){ + if(_status.event.goon&&ui.selected.cards.length<2) return 5.6-get.value(card); + return 0; + }).set('goon',function(){ + var target=trigger.player; + if(get.damageEffect(target,player,player)>0) return true; + if(target.countCards('he',function(card){ + return get.value(card,target)>6; + })>=2) return true; + return false; + }()).logSkill=['reshejian',trigger.player]; + 'step 1' + if(!result.bool){ + player.storage.counttrigger.reshejian--; + event.finish(); + return; + } + var num=result.cards.length; + event.num=num; + var target=trigger.player,str=get.translation(target); + event.target=target; + if(!target.isIn()) event.finish(); + else if(!target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'he')) event._result={index:1}; + else player.chooseControl().set('choiceList',[ + '弃置'+str+'的'+get.cnNumber(num)+'张牌', + '对'+str+'造成1点伤害', + ]).set('ai',function(){ + var player=_status.event.player; + var eff0=get.effect(target,{name:'guohe_copy2'},player,player)*Math.min(1.7,target.countCards('he')); + var eff1=get.damageEffect(target,player,player); + return eff0>eff1?0:1; + }); + 'step 2' + if(result.index==0) player.discardPlayerCard(target,num,true,'he'); + else target.damage(); + }, + }, + //张宝 + xinzhoufu:{ + audio:'zhoufu', + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')>0; + }, + filterCard:true, + filterTarget:function(card,player,target){ + return target!=player&&!target.getExpansions('xinzhoufu2').length; + }, + check:function(card){ + return 6-get.value(card) + }, + position:'he', + discard:false, + lose:false, + delay:false, + content:function(){ + target.addToExpansion(cards,player,'give').gaintag.add('xinzhoufu2'); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(player.inRange(target)) return -1.3; + return -1; + }, + }, + }, + group:['xinzhoufu_judge'], + subSkill:{ + judge:{ + audio:'zhoufu', + trigger:{global:'judgeBefore'}, + forced:true, + filter:function(event,player){ + return !event.directresult&&event.player.getExpansions('xinzhoufu2').length; + }, + logTarget:'player', + content:function(){ + var cards=[trigger.player.getExpansions('xinzhoufu2')[0]]; + trigger.directresult=cards[0]; + }, + }, + }, + }, + xinzhoufu2:{ + intro:{ + content:'expansion', + markcount:'expansion', + }, + }, + xinyingbing:{ + audio:'yingbing', + trigger:{player:'useCardToPlayered'}, + forced:true, + logTarget:'target', + filter:function(event,player){ + return event.target.getExpansions('xinzhoufu2').length>0&&!player.hasHistory('gain',function(evt){ + var evtx=evt.getParent(2); + return evtx&&evtx.name=='xinyingbing'&&evtx._trigger.target==event.target; + }); + }, + content:function(){ + player.draw(2); + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(target&&target.getExpansions('xinzhoufu2').length>0&&!player.hasHistory('gain',function(evt){ + var evtx=evt.getParent(2); + return evtx&&evtx.name=='xinyingbing'&&evtx._trigger.target==target; + })) return [1,1]; + }, + }, + }, + }, //赵嫣 jinhui:{ audio:2, @@ -8030,7 +8362,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(result.bool){ player.addTempSkill('souying2'); - if(event.triggername=='useCardToPlayered') player.gain(trigger.cards.filterInD()); + if(event.triggername=='useCardToPlayered') player.gain(trigger.cards.filterInD(),'gain2'); else trigger.excluded.add(player); } }, @@ -12262,11 +12594,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nanhualaoxian:['re_nanhualaoxian','nanhualaoxian'], kanze:['re_kanze','kanze'], yangwan:['yangwan','sp_yangwan'], - chendeng:['re_chendeng','chendeng'], + chendeng:['ol_chendeng','re_chendeng','chendeng'], pangdegong:['re_pangdegong','pangdegong'], zhujun:['sp_zhujun','zhujun'], sunyi:['re_sunyi','sunyi'], tw_liuhong:['tw_liuhong','liuhong'], + miheng:['miheng','re_miheng'], }, translate:{ lijue:"李傕", @@ -12907,6 +13240,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jinhui_info:'出牌阶段限一次,你可以随机展示牌堆中的三张不具有“伤害”标签且使用目标范围为“自己”或“一名角色”的牌,然后选择一名其他角色。该角色选择并按如下“锦绘”规则使用其中一张,然后你可以依次按如下“锦绘”规则使用其余两张:若此牌的使用目标为“自己”,则对自己使用该牌,否则对对方使用该牌(无距离限制且不计入次数限制)。', qingman:'轻幔', qingman_info:'锁定技。一名角色的回合结束时,你将手牌摸至X张(X为其装备区中空栏的数量)。', + re_zhangbao:'张宝', + xinzhoufu:'咒缚', + xinzhoufu2:'咒缚', + xinzhoufu_info:'①出牌阶段限一次,你可以将一张手牌置于一名其他角色的武将牌上并称为“咒”。②一名有“咒”的角色判定时,你令其以“咒”作为判定牌。', + xinyingbing:'影兵', + xinyingbing_info:'锁定技。每回合每名角色限一次,当你使用牌指定有“咒”的角色为目标后,你摸两张牌。', + re_miheng:'祢衡', + rekuangcai:'狂才', + rekuangcai_info:'锁定技。①你于回合内使用牌无距离和次数限制。②弃牌阶段开始时,若你本回合内:未使用过牌,则你本回合的手牌上限+1;使用过牌但未造成过伤害,则你本回合的手牌上限-1。③结束阶段开始时,你摸X张牌(X为你本回合内造成的伤害且至多为5)。', + reshejian:'舌箭', + reshejian_info:'当你成为其他角色使用牌的唯一目标后,你可以弃置至少两张手牌。若如此做,你选择一项:⒈弃置其等量的牌。⒉对其造成1点伤害。', + fengxi:'冯熙', + yusui:'玉碎', + yusui_info:'当你成为其他角色使用黑色牌的目标后,你可以失去1点体力,然后选择一项:⒈令其将手牌数弃置至与你相同;⒉令其失去Y点体力(Y为其的体力值减去你的体力值,不为正时不可选择)', + boyan:'驳言', + boyan_info:'出牌阶段限一次,你可令一名其他角色将手牌摸至体力上限(至多摸至五张),然后其本回合不能使用或打出手牌。', + re_dengzhi:'邓芝', + jianliang:'简亮', + jianliang_info:'摸牌阶段开始时,若你的手牌数不为全场最多,则你可以令至多两名角色各摸一张牌。', + weimeng:'危盟', + weimeng_info:'出牌阶段限一次,你可以获得一名其他角色的至多X张手牌,然后交给其等量的牌(X为你的体力值)。若你给出的牌点数之和:大于获得的牌,则你摸一张牌;小于获得的牌,弃置该角色区域内的一张牌。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/tw.js b/character/tw.js index 1a16fdece..5be81b2d8 100644 --- a/character/tw.js +++ b/character/tw.js @@ -5,13 +5,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ tw:{ - tw_mobile:['nashime','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu','tw_huojun','tw_caocao'], - tw_mobile2:['tw_beimihu','tw_gexuan','tw_fuwan','tw_yujin','tw_zhaoxiang','tw_hucheer','tw_hejin','tw_mayunlu','tw_re_caohong','tw_zangba','tw_liuhong'], + tw_mobile:['nashime','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu','tw_huojun','tw_caocao','tw_zhangmancheng'], + tw_mobile2:['tw_beimihu','tw_gexuan','tw_fuwan','tw_yujin','tw_zhaoxiang','tw_hucheer','tw_hejin','tw_mayunlu','tw_re_caohong','tw_zangba','tw_liuhong','tw_chengpu'], tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], tw_english:['kaisa'], }, }, character:{ + tw_chengpu:['male','wu',4,['twlihuo','twchunlao']], + tw_zhangmancheng:['male','qun',4,['twfengji','twyiju','twbudao']], tw_caocao:['male','qun',4,['twlingfa']], tw_liuhong:['male','qun',4,['twyujue','twgezhi','twfengqi'],['zhu']], tw_huojun:['male','shu',4,['twsidai','twjieyu']], @@ -46,6 +48,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wuban:'吴班,字元雄,生卒年不详,兖州陈留郡(治今河南省开封市)人。三国时期蜀汉将领。为领军,随刘备参加伐吴之战,后又随蜀汉丞相诸葛亮参加北伐曹魏的战争,并于公元231年(建兴九年)的北伐中大破司马懿。官至骠骑将军,封绵竹侯。吴班以豪爽侠义著称于当时,又因族妹吴氏是蜀汉穆皇后,在蜀汉将领中有较高的地位。', yuejiu:'乐就(?-197),在袁术为攻徐州而大兴七军之际,以督战官之身份担任联络之役。但是,袁术军不幸战败,其也在寿春被曹操军逮捕并遭到斩首。', huojun:'霍峻(178年—217年),字仲邈,南郡枝江(今湖北枝江)人,东汉末年刘备麾下名将。其兄霍笃曾在故乡聚部众数百人。后霍笃逝世,刘表以霍峻继承其部曲。208年(建安十三年),刘表病逝,霍峻便率部曲归降刘备,并被任为中郎将。后随刘备入蜀,刘备从葭萌还袭刘璋,留霍峻守葭萌城。张鲁遣将杨帛劝降霍峻,霍峻严词拒绝,杨帛退去。后刘璋将扶禁、向存等率万余人由阆水上,攻围霍峻,城中兵不过数百人,霍峻坚守一年,伺机将其击破。刘备定蜀,嘉霍峻之功,于是分广汉为梓潼郡,以峻为梓潼太守、裨将军。三年后去世,还葬成都。刘备亲率群僚临会吊祭,留宿墓上,当时的人都为他感到荣幸。', + zhangmancheng:'张曼成(?—184年6月),东汉末年黄巾之乱时南阳黄巾军首领,杀郡守褚贡,一度占据宛城数月,后为秦颉所杀。', }, card:{ dz_mantianguohai:{ @@ -159,6 +162,600 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + twlihuo:{ + trigger:{player:'useCard1'}, + filter:function(event,player){ + if(event.card.name=='sha'&&!event.card.nature) return true; + return false; + }, + audio:'lihuo', + prompt2:function(event){ + return '将'+get.translation(event.card)+'改为火属性'; + }, + audioname:['re_chengpu'], + check:function(event,player){ + return game.hasPlayer(function(current){ + return !event.targets.contains(current)&&player.canUse(event.card,current)&&get.effect(current,{name:'sha',nature:'fire',cards:event.cards.slice(0)},player,player)>0; + }); + }, + content:function(){ + trigger.card.nature='fire'; + trigger.card.twlihuo_buffed=true; + }, + group:['twlihuo2','twlihuo3'], + ai:{ + fireAttack:true, + }, + }, + twlihuo2:{ + trigger:{player:'useCard2'}, + filter:function(event,player){ + if(event.card.name!='sha'||event.card.nature!='fire') return false; + return game.hasPlayer(function(current){ + return !event.targets.contains(current)&&player.canUse(event.card,current); + }); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twlihuo'),'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){ + return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target); + }).set('sourcex',trigger.targets).set('card',trigger.card).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,_status.event.card,player,player); + }); + 'step 1' + if(result.bool){ + if(!event.isMine()&&!_status.connectMode) game.delayx(); + event.target=result.targets[0]; + } + else{ + event.finish(); + } + 'step 2' + player.logSkill('twlihuo',event.target); + trigger.targets.push(event.target); + }, + }, + twlihuo3:{ + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + return event.card.twlihuo_buffed=true&&player.getHistory('sourceDamage',function(evt){ + return evt.card==event.card&&evt._dyinged; + }).length>0; + }, + forced:true, + audio:'lihuo', + audioname:['re_chengpu'], + content:function(){ + player.loseHp(); + } + }, + twchunlao:{ + audio:'chunlao', + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countCards('hej')>0; + })&&!game.hasPlayer(function(current){ + return current.getExpansions('twchunlao').length>0; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('twchunlao'),'将一名角色区域内的一张牌作为“醇”置于其武将牌上',function(card,player,target){ + return target.countCards('hej')>0; + }).set('ai',function(target){ + return (get.attitude(_status.event.player,target))*(player==target?1:2); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('twchunlao',target); + player.choosePlayerCard(target,'hej',true); + } + else event.finish(); + 'step 2' + if(result.bool){ + target.addToExpansion(result.cards,target,'give').gaintag.add('twchunlao'); + } + }, + intro:{ + content:'expansion', + markcount:'expansion', + }, + group:['twchunlao_sha','twchunlao_dying'], + subSkill:{ + sha:{ + trigger:{global:'useCard'}, + direct:true, + filter:function(event,player){ + return event.player!=player&&event.card.name=='sha'&&event.player.countCards('he')>0&&event.player.getExpansions('twchunlao').length>0; + }, + content:function(){ + 'step 0' + event.target=trigger.player; + event.target.chooseCard('he','醇醪:是否交给'+get.translation(player)+'一张牌,令'+get.translation(trigger.card)+'的伤害值基数+1?').set('ai',function(card){ + if(!_status.event.goon) return 3.5-get.value(card); + return 7-get.value(card); + }).set('goon',function(){ + if(get.attitude(target,player)<0) return false; + var d1=true; + if(trigger.player.hasSkill('jueqing')||trigger.player.hasSkill('gangzhi')) d1=false; + for(var target of trigger.targets){ + if(!target.mayHaveShan()||trigger.player.hasSkillTag('directHit_ai',true,{ + target:target, + card:trigger.card, + },true)){ + if(!target.hasSkill('gangzhi')) d1=false; + if(!target.hasSkillTag('filterDamage',null,{ + player:trigger.player, + card:trigger.card, + })&&get.attitude(player,target)<0) return true; + } + } + return d1; + }()); + if(!event.target.isUnderControl(true)&&!event.target.isOnline()) game.delayx(); + 'step 1' + if(result.bool){ + target.logSkill('twchunlao',player); + if(!target.hasSkill('twchunlao')) game.trySkillAudio('twchunlao',player); + player.gain(result.cards,target,'giveAuto'); + trigger.baseDamage++; + } + }, + }, + dying:{ + audio:'chunlao', + trigger:{global:'dying'}, + logTarget:'player', + filter:function(event,player){ + return event.player.getExpansions('twchunlao').length>0; + }, + prompt2:(event,player)=>('移去'+get.translation(event.player)+'武将牌上的“醇”并摸一张牌,然后令其回复1点体力'), + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + var target=trigger.player,cards=target.getExpansions('twchunlao'); + if(cards.length) target.loseToDiscardpile(cards); + player.draw(); + target.recover(); + }, + }, + }, + }, + //张曼成 + twfengji:{ + audio:2, + mahouSkill:true, + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return !player.getExpansions('twfengji').length&&!player.hasSkill('twfengji_mahou')&&player.countCards('he'); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseCard('he',get.prompt2('twfengji')).set('ai',function(card){ + var name=card.name,num=0; + for(var i=0;i0){ + safe++; + next=next.next; + } + } + return Math.max(2,Math.min(safe,3,game.countPlayer()))-1; + }); + } + else event.finish(); + 'step 2' + player.storage.twfengji_mahou=[result.index+1,result.index+1]; + player.addTempSkill('twfengji_mahou',{player:'die'}); + }, + marktext:'示', + onremove:function(player,skill){ + var cards=player.getExpansions(skill); + if(cards.length) player.loseToDiscardpile(cards); + }, + intro:{ + content:'expansion', + markcount:'expansion', + }, + subSkill:{ + mahou:{ + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + content:function(){ + var list=player.storage.twfengji_mahou; + list[1]--; + if(list[1]==0){ + game.log(player,'的“蜂集”魔法生效'); + player.logSkill('twfengji'); + var cards=player.getExpansions('twfengji'); + if(cards.length){ + var cards2=[],num=list[0]; + for(var card of cards){ + for(var i=0;i0; + }, + forced:true, + content:function(){ + trigger.num++; + var cards=player.getExpansions('twfengji'); + if(cards.length) player.loseToDiscardpile(cards); + }, + ai:{ + halfneg:true, + combo:'twfengji', + }, + }, + twbudao:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + derivation:['twzhouhu','twharvestinori','twzuhuo'], + limited:true, + skillAnimation:true, + animationColor:'metal', + check:function(event,player){ + return !player.hasUnknown()||!player.hasFriend(); + }, + content:function(){ + 'step 0' + player.awakenSkill('twbudao'); + player.loseMaxHp(); + player.recover(); + player.chooseControl(lib.skill.twbudao.derivation).set('prompt','选择获得一个技能').set('ai',function(){ + return 'twharvestinori'; + }); + 'step 1' + var skill=result.control; + player.addSkillLog(skill); + event.twbudao_skill=skill; + player.chooseTarget(lib.filter.notMe,'是否令一名其他角色也获得【'+get.translation(skill)+'】?').set('ai',function(target){ + var player=_status.event.player; + if(player.identity=='nei') return 0; + return get.attitude(player,target)-6; + }); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + target.addSkillLog(event.twbudao_skill); + var cards=target.getCards('he'); + if(!cards.length) event.finish(); + else if(cards.length==1) event._result={bool:true,cards:cards}; + else target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌作为学费'); + } + else event.finish(); + 'step 3' + if(result.bool) player.gain(result.cards,target,'giveAuto'); + }, + }, + twzhouhu:{ + audio:2, + mahouSkill:true, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.hasSkill('twzhouhu_mahou')&&player.countCards('h',lib.skill.twzhouhu.filterCard)>0; + }, + filterCard:{color:'red'}, + check:function(card){ + if(_status.event.player.isHealthy()) return 0; + return 7-get.value(card); + }, + content:function(){ + 'step 0' + player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){ + var player=_status.event.player; + var safe=1; + if(safe0){ + safe++; + next=next.next; + } + } + return Math.max(1,Math.min(safe,3,game.countPlayer(),player.getDamagedHp()))-1; + }); + 'step 1' + player.storage.twzhouhu_mahou=[result.index+1,result.index+1]; + player.addTempSkill('twzhouhu_mahou',{player:'die'}); + }, + ai:{ + order:2, + result:{ + player:1, + }, + }, + subSkill:{ + mahou:{ + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + content:function(){ + var list=player.storage.twzhouhu_mahou; + list[1]--; + if(list[1]==0){ + game.log(player,'的“咒护”魔法生效'); + player.logSkill('twzhouhu'); + var num=list[0]; + player.recover(num); + player.removeSkill('twzhouhu_mahou'); + } + else{ + game.log(player,'的“咒护”魔法剩余','#g'+(list[1])+'回合'); + player.markSkill('twzhouhu_mahou'); + } + }, + mark:true, + onremove:true, + marktext:'♗', + intro:{ + name:'施法:咒护', + markcount:function(storage){ + if(storage) return storage[1]; + return 0; + }, + content:function(storage){ + if(storage){ + return '经过'+storage[1]+'个“回合结束时”后,回复'+storage[0]+'点体力'; + } + return '未指定施法效果'; + }, + }, + }, + }, + }, + twharvestinori:{ + audio:2, + mahouSkill:true, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.hasSkill('twharvestinori_mahou')&&player.countCards('h',lib.skill.twharvestinori.filterCard)>0; + }, + filterCard:{color:'black'}, + check:function(card){ + return 8-get.value(card); + }, + content:function(){ + 'step 0' + player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){ + var player=_status.event.player; + var safe=player.hp; + if(safe0){ + safe++; + next=next.next; + } + } + return Math.max(1,Math.min(safe,3,game.countPlayer()))-1; + }); + 'step 1' + player.storage.twharvestinori_mahou=[result.index+1,result.index+1]; + player.addTempSkill('twharvestinori_mahou',{player:'die'}); + }, + ai:{ + order:8, + result:{ + player:1, + }, + }, + subSkill:{ + mahou:{ + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + content:function(){ + var list=player.storage.twharvestinori_mahou; + list[1]--; + if(list[1]==0){ + game.log(player,'的“丰祈”魔法生效'); + player.logSkill('twharvestinori'); + var num=list[0]*2; + player.draw(num); + player.removeSkill('twharvestinori_mahou'); + } + else{ + game.log(player,'的“丰祈”魔法剩余','#g'+(list[1])+'回合'); + player.markSkill('twharvestinori_mahou'); + } + }, + mark:true, + onremove:true, + marktext:'♗', + intro:{ + name:'施法:丰祈', + markcount:function(storage){ + if(storage) return storage[1]; + return 0; + }, + content:function(storage){ + if(storage){ + return '经过'+storage[1]+'个“回合结束时”后,摸'+storage[0]*2+'张牌'; + } + return '未指定施法效果'; + }, + }, + }, + }, + }, + twzuhuo:{ + audio:2, + mahouSkill:true, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return !player.hasSkill('twzuhuo_mahou')&&player.countCards('he',lib.skill.twzuhuo.filterCard)>0; + }, + filterCard:function(card){ + return get.type(card)!='basic'; + }, + position:'he', + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + 'step 0' + player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){ + var player=_status.event.player; + var safe=Math.min(player.getHandcardLimit(),player.countCards('h','shan')); + if(safe0){ + safe++; + next=next.next; + } + } + return Math.max(2,Math.min(safe,3,game.countPlayer()))-1; + }); + 'step 1' + player.storage.twzuhuo_mahou=[result.index+1,result.index+1]; + player.addTempSkill('twzuhuo_mahou',{player:'die'}); + }, + ai:{ + order:2, + result:{ + player:1, + }, + }, + subSkill:{ + mahou:{ + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + content:function(){ + var list=player.storage.twzuhuo_mahou; + list[1]--; + if(list[1]==0){ + game.log(player,'的“阻祸”魔法生效'); + player.logSkill('twzuhuo'); + var num=list[0]; + player.addSkill('twzuhuo_effect'); + player.addMark('twzuhuo_effect',num,false); + player.removeSkill('twzuhuo_mahou'); + } + else{ + game.log(player,'的“阻祸”魔法剩余','#g'+(list[1])+'回合'); + player.markSkill('twzuhuo_mahou'); + } + }, + mark:true, + onremove:true, + marktext:'♗', + intro:{ + name:'施法:阻祸', + markcount:function(storage){ + if(storage) return storage[1]; + return 0; + }, + content:function(storage){ + if(storage){ + return '经过'+storage[1]+'个“回合结束时”后,获得'+storage[0]+'层“防止一次伤害”的效果'; + } + return '未指定施法效果'; + }, + }, + }, + effect:{ + charlotte:true, + onremove:true, + trigger:{player:'damageBegin2'}, + forced:true, + filter:function(event,player){ + return player.hasMark('twzuhuo_effect'); + }, + content:function(){ + trigger.cancel(); + player.removeMark('twzuhuo_effect',1,false); + if(!player.countMark('twzuhuo_effect')) player.removeSkill('twzuhuo_effect'); + }, + marktext:'阻︎', + intro:{ + onremove:true, + content:'防止接下来的#次伤害', + }, + }, + }, + }, + //群曹操 twlingfa:{ audio:2, trigger:{global:'roundStart'}, @@ -2929,6 +3526,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twlingfa_info:'①第一轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。②第二轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。③第三轮游戏开始时,你失去〖令法〗并获得〖治暗〗。', twzhian:'治暗', twzhian_info:'每回合限一次。一名角色使用装备牌或延时锦囊牌后,你可选择:⒈弃置位于场上的此牌。⒉弃置一张手牌并获得位于场上的此牌。⒊对其造成1点伤害。', + tw_zhangmancheng:'张曼成', + twfengji:'蜂集', + twfengji_info:'出牌阶段开始时,若你没有“示”,则你可以将一张牌作为“示”置于武将牌上并施法:从牌堆中获得X张与“示”牌名相同的牌,然后移去“示”。', + twyiju:'蚁聚', + twyiju_info:'非锁定技。若你的武将牌上有“示”,则:①你使用【杀】的次数上限和攻击范围的基数改为你的体力值。②当你受到伤害时,你移去“示”,且令此伤害+1。', + twbudao:'布道', + twbudao_info:'限定技。准备阶段,你可减1点体力上限,回复1点体力并选择获得一个“施法”技能。然后你可以令一名其他角色也获得此技能并交给你一张牌。', + twzhouhu:'咒护', + twzhouhu_info:'出牌阶段限一次。你可以弃置一张红色手牌并施法:回复1点体力。', + twharvestinori:'丰祈', + twharvestinori_info:'出牌阶段限一次。你可以弃置一张黑色手牌并施法:摸2X张牌。', + twzuhuo:'阻祸', + twzuhuo_info:'出牌阶段限一次。你可以弃置一张非基本牌并施法:防止你受到的下X次伤害。', + tw_chengpu:'程普', + twlihuo:'疠火', + twlihuo2:'疠火', + twlihuo3:'疠火', + twlihuo_info:'①当你声明使用普【杀】时,你可以将此【杀】改为火【杀】。此牌使用结算结束后,若有角色因此【杀】造成的伤害进入过濒死状态,则你失去1点体力。②当你使用火【杀】选择目标后,你可为此牌增加一个目标。', + twchunlao:'醇醪', + twchunlao_info:'①准备阶段,若场上没有“醇”,则你可将一名角色区域内的一张牌置于其武将牌上,称为“醇”。②一名角色使用【杀】时,若其有“醇”,则你可以交给你一张牌,令此【杀】的伤害值基数+1。③一名角色进入濒死状态时,若其有“醇”,则你可以移去“醇”并摸一张牌,然后令其回复1点体力。', tw_mobile:'移动版·海外服', tw_mobile2:'海外服异构', diff --git a/character/yijiang.js b/character/yijiang.js index 914952c4e..524d8f960 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -9095,10 +9095,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{player:'useCardToPlayer'}, filter:function(event,player){ - if(_status.currentPhase!=player||player.hasSkill('rechanhui2')) return false; + if(player.hasSkill('rechanhui2')) return false; if(event.targets.length>1) return false; var card=event.card; - if(card.name=='sha'||get.type(card)=='trick'&&get.color(card)=='black') return true; + if(card.name=='sha'||get.type(card)=='trick') return true; return false; }, direct:true, @@ -9141,14 +9141,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - rechanhui2:{}, + rechanhui2:{charlotte:true}, + rejiaojin2:{charlotte:true}, rejiaojin:{ audio:2, trigger:{target:'useCardToTargeted'}, filter:function(event,player){ - return (event.card.name=='sha'||get.type(event.card)=='trick')&&event.player&&event.player.hasSex('male')&&player.countCards('he',function(card){ + return (event.card.name=='sha'||get.type(event.card)=='trick')&&event.player!=player&&player.countCards('he',function(card){ return _status.connectMode||get.type(card)=='equip'; - }); + })&&!player.hasSkill('rejiaojin2'); }, direct:true, content:function(){ @@ -9164,12 +9165,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); next.set('val',get.value(trigger.cards.filterInD())); next.set('goon2',get.effect(player,trigger.card,trigger.player,player)<0) - next.logSkill='rejiaojin'; + next.logSkill=['rejiaojin',trigger.player]; "step 1" if(result.bool){ var cards=trigger.cards.filterInD(); if(cards.length) player.gain(cards,'gain2','log'); trigger.excluded.push(player); + if(trigger.player.hasSex('female')) player.addTempSkill('rejiaojin2') } } }, @@ -12055,18 +12057,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fazheng:['re_fazheng','xin_fazheng','fazheng'], masu:['xin_masu','re_masu','masu'], xusheng:['xin_xusheng','re_xusheng','xusheng','old_xusheng'], - wuguotai:['re_wuguotai','wuguotai'], + wuguotai:['xin_wuguotai','re_wuguotai','wuguotai'], lingtong:['xin_lingtong','re_lingtong','lingtong','old_lingtong'], gaoshun:['gaoshun','re_gaoshun'], zhonghui:['re_zhonghui','xin_zhonghui','zhonghui','old_zhonghui'], - wangyi:['wangyi','old_wangyi'], + wangyi:['re_wangyi','wangyi','old_wangyi'], caozhang:['re_caozhang','xin_caozhang','caozhang'], guanzhang:['guanzhang','old_guanzhang'], madai:['re_madai','old_madai','madai'], liaohua:['xin_liaohua','re_liaohua','liaohua'], bulianshi:['re_bulianshi','bulianshi','old_bulianshi'], handang:['xin_handang','re_handang','handang'], - chengpu:['re_chengpu','ns_chengpu','chengpu','xin_chengpu'], + chengpu:['re_chengpu','tw_chengpu','ns_chengpu','chengpu','xin_chengpu'], liubiao:['re_liubiao','xin_liubiao','liubiao'], manchong:['re_manchong','manchong'], caochong:['caochong','old_caochong'], @@ -12100,6 +12102,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caifuren:['xin_caifuren','re_caifuren','caifuren'], guyong:['re_guyong','xin_guyong','guyong'], yj_jushou:['xin_jushou','yj_jushou'], + guohuanghou:['re_guohuanghou','guohuanghou'], }, translate:{ old_huaxiong:'华雄', @@ -12475,11 +12478,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chanhui:'谮毁', chanhui_info:'出牌阶段限一次,当你使用【杀】或黑色普通锦囊牌指定唯一目标时,你可令可以成为此牌目标的另一名其他角色选择一项:交给你一张牌并成为此牌的使用者;或成为此牌的额外目标。', rechanhui:'谮毁', - rechanhui_info:'出牌阶段,当你使用【杀】或黑色普通锦囊牌指定唯一目标时,你可令可以成为此牌目标(无距离限制)的另一名其他角色选择一项:交给你一张牌并成为此牌的使用者;或成为此牌的额外目标且你本回合内不能再次发动〖谮毁〗。', + rechanhui_info:'当你使用【杀】或普通锦囊牌指定唯一目标时,你可令可以成为此牌目标(无距离限制)的另一名其他角色选择一项:交给你一张牌并成为此牌的使用者;或成为此牌的额外目标且你本回合内不能再次发动〖谮毁〗。', jiaojin:'骄矜', jiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌,令此伤害-1。', rejiaojin:'骄矜', - rejiaojin_info:'当你成为男性角色使用的【杀】或普通锦囊牌的目标后,你可以弃置一张装备牌,令此牌对你无效并获得此牌对应的所有实体牌。', + rejiaojin_info:'当你成为其他角色使用【杀】或普通锦囊牌的目标后,你可以弃置一张装备牌,令此牌对你无效并获得此牌对应的所有实体牌。若此牌的使用者为女性角色,则你令〖骄矜〗失效直到回合结束。', shenxing:'慎行', shenxing_info:'出牌阶段,你可以弃置两张牌,然后摸一张牌。', bingyi:'秉壹', diff --git a/character/yingbian.js b/character/yingbian.js index 1d869d5d0..685c666fa 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -1368,7 +1368,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ filterDamage:true, skillTagFilter:function(player,tag,arg){ - if(!player.getStorage('qiaoyan').length) return false; + if(!player.getExpansions('qiaoyan').length) return false; if(arg&&arg.player){ if(arg.player.hasSkillTag('jueqing',false,player)) return false; } diff --git a/game/asset.js b/game/asset.js index 510809066..71ad4f80a 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.113.3', + 'v1.9.113.4', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -4244,6 +4244,7 @@ window.noname_asset_list=[ 'image/card/shennongding.png', 'image/card/shentoumianju.png', 'image/card/shezhanqunru.png', + 'image/card/shield.png', 'image/card/shihuawuqi.png', 'image/card/shihuifen.png', 'image/card/shijieshu.png', @@ -4804,7 +4805,6 @@ 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', @@ -4939,6 +4939,16 @@ window.noname_asset_list=[ 'image/character/tw_liuhong.jpg', 'image/character/tw_zangba.jpg', 'image/character/zhaoyan.jpg', + 'image/character/fengxi.jpg', + 'image/character/gz_fengxi.jpg', + 'image/character/key_erika.jpg', + 'image/character/key_satomi.jpg', + 'image/character/re_dengzhi.jpg', + 'image/character/re_miheng.jpg', + 'image/character/re_zhangbao.jpg', + 'image/character/tw_chengpu.jpg', + 'image/character/tw_zhangmancheng.jpg', + 'image/character/xin_wuguotai.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index b42b9d065..388886962 100644 --- a/game/game.js +++ b/game/game.js @@ -6668,7 +6668,8 @@ '
  • 护甲:和体力类似,每点护甲可抵挡一点伤害,但不影响手牌上限。'+ '
  • 随从:通过技能获得,拥有独立的技能、手牌区和装备区(共享判定区),出场时替代主武将的位置;随从死亡时自动切换回主武将。'+ '
  • 发现:从三张随机亮出的牌中选择一张,若无特殊说明,则获得此牌。'+ - '
  • 蓄力技:发动时可以增大黄色的数字。若如此做,红色数字于技能的结算过程中改为原来的两倍。' + '
  • 蓄力技:发动时可以增大黄色的数字。若如此做,红色数字于技能的结算过程中改为原来的两倍。'+ + '
  • 施法:若技能的拥有者未拥有等待执行的同名“施法”效果,则其可以发动“施法”技能。其须选择声明一个数字X(X∈[1, 3]),在此之后的第X个回合结束时,其执行“施法”效果,且效果中的数字X视为与技能发动者声明的X相同。' }, setIntro:function(node,func,left){ if(lib.config.touchscreen){ @@ -7372,7 +7373,7 @@ }; window.onerror=function(msg, src, line, column, err){ var str=msg; - if(window._status&&_status.event){ + if(_status&&_status.event){ var evt=_status.event; str+=('\n'+evt.name+': '+evt.step); if(evt.parent) str+='\n'+evt.parent.name+': '+evt.parent.step; @@ -16183,26 +16184,7 @@ "step 3" event.trigger('damageBegin4'); "step 4" - if(num>0&&player.hujia&&!player.hasSkillTag('nohujia')){ - if(num>=player.hujia){ - event.hujia=player.hujia; - num-=player.hujia; - } - else{ - event.hujia=num; - num=0; - } - game.log(player,'的护甲抵挡了'+get.cnNumber(event.hujia)+'点伤害'); - player.changeHujia(-event.hujia).type='damage'; - } - event.num=num; - if(num<=0){ - event.trigger('damageZero'); - delete event.filterStop; - event.finish(); - event._triggered=null; - } - "step 5" + //moved changeHujia to changeHp if(lib.config.background_audio){ game.playAudio('effect','damage'+(num>1?'2':'')); } @@ -16251,7 +16233,8 @@ } } },event.nature,player); - player.$damagepop(-num,event.nature); + var numx=Math.max(0,num-player.hujia); + player.$damagepop(-numx,event.nature); } if(!event.notrigger){ if(num==0){ @@ -16262,7 +16245,7 @@ event.trigger('damage'); } } - "step 6" + "step 5" if(player.hp<=0&&player.isAlive()){ game.delayx(); event._dyinged=true; @@ -16308,7 +16291,7 @@ } } } - "step 7" + "step 6" if(!event.notrigger) event.trigger('damageSource'); }, recover:function(){ @@ -16380,6 +16363,16 @@ player.update(); }, changeHp:function(){ + //changeHujia moved here + if(num<0&&player.hujia>0&&event.getParent().name=='damage'&&!player.hasSkillTag('nohujia')){ + event.hujia=Math.min(-num,player.hujia); + event.getParent().hujia=event.hujia; + event.num+=event.hujia; + game.log(player,'的护甲抵挡了'+get.cnNumber(event.hujia)+'点伤害'); + player.changeHujia(-event.hujia).type='damage'; + } + //old part + num=event.num; player.hp+=num; if(isNaN(player.hp)) player.hp=0; if(player.hp>player.maxHp) player.hp=player.maxHp; @@ -16995,6 +16988,7 @@ player:{ //新函数 setSeatNum:function(num){ + _status.seatNumSettled=true; game.broadcastAll(function(player,num){ player.seatNum=num; },this,num); @@ -17296,7 +17290,8 @@ if(mod1!='unchanged') return mod1; var mod2=game.checkMod(from,to,'unchanged','inRangeOf',to); if(mod2!='unchanged') return mod2; - if(from.getAttackRange()<1) return false; + var range=from.getAttackRange(); + if(range<1) return false; var player=from,m,n=1,i; var fxy,txy; if(game.chess){ @@ -17344,9 +17339,6 @@ m+=info.globalFrom; n+=info.globalFrom; } - if(info.attackFrom){ - m+=info.attackFrom; - } } for(i=0;i'+str+''); } else{ @@ -26665,21 +26685,22 @@ return false; }, targetInRange:function(card,player,target){ + var info=get.info(card); + var range=info.range; + var outrange=info.outrange; + if(range==undefined&&outrange==undefined) return true; + var mod=game.checkMod(card,player,target,'unchanged','targetInRange',player); var extra=0; if(mod!='unchanged'){ if(typeof mod=='boolean') return mod; if(typeof mod=='number') extra=mod; } - var info=get.info(card); - var range=info.range; - var outrange=info.outrange; - if(range==undefined&&outrange==undefined) return true; + if(typeof info.range=='function') return info.range(card,player,target); if(player.hasSkill('undist')||target.hasSkill('undist')) return false; for(var i in range){ if(i=='attack'){ - if(player.inRange(target)) return true; var range2=player.getAttackRange(); if(range2<=0) return false; var distance=get.distance(player,target)+extra; @@ -26741,7 +26762,7 @@ else if(get.itemtype(select)=='select') range=select; else if(typeof select=='function') range=select(card,player); game.checkMod(card,player,range,'selectTarget',player); - if(info.singleCard) return [range[0]*2,range[1]*2]; + if(info.singleCard&&info.filterAddedTarget) return [range[0]*2,range[1]*2]; return range; }, judge:function(card,player,target){ @@ -27458,7 +27479,8 @@ content:function(content,player){ return '已有'+get.cnNumber(player.hujia)+'点护甲值'; } - } + }, + markimage:'image/card/shield.png', }, counttrigger:{ trigger:{global:'phaseAfter'}, @@ -27490,9 +27512,6 @@ popup:false, firstDo:true, content:function(){ - // for(var i=0;i0){ - game.players[i].outCount--; - if(game.players[i].outCount==0&&!game.players[i].outSkills){ - game.players[i].in(); - } + if(!trigger.skill){ + var isRound=_status.roundSkipped; + if(_status.seatNumSettled){ + var seatNum=player.getSeatNum(); + if(seatNum!=0){ + if(typeof _status.lastSeatNum!='number'||seatNum<_status.lastSeatNum) isRound=true; + _status.lastSeatNum=seatNum; } } - event.trigger('roundStart'); + else if(player==_status.roundStart) isRound=true; + if(isRound){ + delete _status.roundSkipped; + game.roundNumber++; + trigger._roundStart=true; + game.updateRoundNumber(); + for(var i=0;i0){ + game.players[i].outCount--; + if(game.players[i].outCount==0&&!game.players[i].outSkills){ + game.players[i].in(); + } + } + } + event.trigger('roundStart'); + } } }, }, @@ -33987,6 +34017,10 @@ } else{ game.addVideo('swapSeat',null,[player1.dataset.position,player2.dataset.position]); + var seat1=player1.seatNum; + var seat2=player2.seatNum; + player2.seatNum=seat1; + player1.seatNum=seat2; var temp1,pos,i,num; temp1=player1.dataset.position; player1.dataset.position=player2.dataset.position; @@ -42397,7 +42431,7 @@ delete window.noname_skin_list; var asset_version=updates.shift(); - var skipcharacter=[],skipcard=['tiesuo_mark']; + var skipcharacter=[],skipcard=['tiesuo_mark','shield']; if(!lib.config.asset_full){ for(var i=0;i0){ + ui.create.div(node.node.hp,'.shield'); + ui.create.div('.text',get.numStr(hujia),node.node.hp); + } } else{ var hp=get.infoHp(infoitem[2]); var maxHp=get.infoMaxHp(infoitem[2]); + var shield=get.infoHujia(infoitem[2]); if(maxHp>14){ if(typeof infoitem[2]=='string') node.node.hp.innerHTML=infoitem[2]; else node.node.hp.innerHTML=get.numStr(infoitem[2]); @@ -45564,6 +45609,9 @@ var next=ui.create.div('',node.node.hp); if(i>=hp) next.classList.add('exclude'); } + for(var i=0;i2) return parseInt(splited[2]); } return 0; }, @@ -52872,7 +52927,7 @@ } } - var skills=node.getSkills(null,null,false).slice(0); + var skills=node.getSkills(null,false,false).slice(0); var skills2=game.filterSkills(skills,node); if(node==game.me&&node.hiddenSkills.length){ skills.addArray(node.hiddenSkills); @@ -54047,6 +54102,7 @@ var result=0; var value; if(Array.isArray(card)){ + if(!card.length) return 0; value=0; for(var i=0;i.card>.info>span, border: 1px solid rgba(39, 79, 7, 1); box-shadow: rgba(0,0,0,0.2) 1px -1px 2px inset, rgba(255,255,255,0.15) -1px 1px 5px inset; } +.button.newstyle>.hp>.shield{ + background: rgba(63, 119, 173,1); + border: 1px solid rgba(31, 82, 131, 1); +} .button.newstyle>.hp>div.text{ background: none !important; box-shadow: none !important; @@ -2609,31 +2613,35 @@ div:not(.handcards)>.card>.info>span, box-shadow: 0px 1px 1px rgba(0,0,0,0.5); border: 1px solid #fff; } -.hp[data-condition="high"]>div:not(.lost) { +.button .hp>.shield { + background: rgba(63, 119, 173,1); + border: 1px solid rgba(63, 119, 173, 1); +} +.hp[data-condition="high"]>div:not(.lost):not(.shield) { background: rgba(57, 123, 4,1); border: 1px solid rgba(39, 79, 7, 1); } -.hp[data-condition="mid"]>div:not(.lost) { +.hp[data-condition="mid"]>div:not(.lost):not(.shield) { background: rgba(166, 140, 6,1); border: 1px solid rgba(79, 64, 7, 1); } -.hp[data-condition="low"]>div:not(.lost) { +.hp[data-condition="low"]>div:not(.lost):not(.shield) { background: rgba(148, 27, 27,1); border: 1px solid rgba(79, 7, 7, 1); } -.hp.actcount>div:not(.lost) { +.hp.actcount>div:not(.lost):not(.shield) { background: rgba(63, 119, 173,1); border: 1px solid rgba(31, 82, 131, 1); } -.treasure>.hp>div:not(.lost) { +.treasure>.hp>div:not(.lost):not(.shield) { background: rgba(63, 119, 173,1) !important; border: 1px solid rgba(31, 82, 131, 1) !important; } -.hp.actcount>div.overflow:not(.lost) { +.hp.actcount>div.overflow:not(.lost):not(.shield) { background: rgb(154, 154, 154); border: 1px solid rgb(109, 109, 109); } -.hp.actcount.overflow2>div.overflow:not(.lost) { +.hp.actcount.overflow2>div.overflow:not(.lost):not(.shield) { background: rgb(173, 129, 63); border: 1px solid rgb(131, 109, 31); } @@ -2643,12 +2651,17 @@ div:not(.handcards)>.card>.info>span, filter: grayscale(1); -webkit-filter: grayscale(1); } + .hp>.lost { background: rgba(57, 123, 4,1); border: 1px solid rgba(39, 79, 7, 1); filter: grayscale(1); -webkit-filter: grayscale(1); } +.hp>.shield { + background: rgba(63, 119, 173,1); + border: 1px solid rgba(31, 82, 131, 1); +} .hp.text[data-condition="low"], .hp.textstyle[data-condition="low"] { text-shadow: black 0 0 1px,rgba(232, 53, 53,1) 0 0 2px,rgba(232, 53, 53,1) 0 0 5px,rgba(232, 53, 53,1) 0 0 10px @@ -5331,4 +5344,5 @@ div[data-decoration="bronze"]::after{ /*--------其它--------*/ ::-webkit-scrollbar { display: none; +} } \ No newline at end of file diff --git a/mode/guozhan.js b/mode/guozhan.js index a6759d4ee..1ff930da7 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -510,7 +510,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_luyusheng:['female','wu',3,['zhente','zhiwei']], gz_zongyu:['male','shu',3,['zyqiao','chengshang']], gz_miheng:['male','qun',3,['gzrekuangcai','gzshejian'],['gzskin']], - gz_fengxi:['male','wu',3,['yusui','boyan']], + gz_fengxi:['male','wu',3,['gzyusui','gzboyan'],['gzskin']], gz_dengzhi:['male','shu',3,['gzjianliang','gzweimeng'],['gzskin']], gz_re_nanhualaoxian:['male','qun',4,['gzgongxiu','gzjinghe']], gz_zhouyi:['female','wu',3,['gzzhukou','gzduannian','gzlianyou']], @@ -1831,8 +1831,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, //冯熙 - yusui:{ - audio:2, + gzyusui:{ + audio:'yusui', trigger:{target:'useCardToTargeted'}, filter:function(event,player){ return event.player!=player&&event.player.isIn()&&event.player.isEnemyOf(player)&&get.color(event.card)=='black'; @@ -1867,11 +1867,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ else target.loseHp(target.hp-player.hp); }, }, - boyan:{ + gzboyan:{ + audio:'boyan', enable:'phaseUse', usable:1, filter:function(event,player){ - return game.hasPlayer((target)=>lib.skill.boyan.filterTarget(null,player,target)); + return game.hasPlayer((target)=>lib.skill.gzboyan.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 get.tag(card,'respondShan')&&get.effect(target,card,player,player)>0&&player.getUseValue(card,null,true)>0; })) return -2; }, }, @@ -3083,12 +3084,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzrekuangcai:{ audio:'gzkuangcai', forced:true, + preHidden:true, trigger:{player:'phaseDiscardBegin'}, filter:function(event,player){ - return player.getHistory('useCard').length&&!player.getHistory('sourceDamage').length; + return !player.getHistory('useCard').length||!player.getHistory('sourceDamage').length; }, content:function(){ - player.addTempSkill('gzrekuangcai_less'); + if(!player.getHistory('useCard').length) player.addTempSkill('gzrekuangcai_more'); + else player.addTempSkill('gzrekuangcai_less'); }, mod:{ targetInRange:function(card,player){ @@ -3107,6 +3110,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, charlotte:true, }, + more:{ + mod:{ + maxHandcard:function(player,num){ + return num+1; + }, + }, + charlotte:true, + }, }, }, gzkuangcai:{ @@ -3227,8 +3238,24 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, logTarget:'player', content:function(){ - player.discard(player.getCards('h')); - trigger.player.damage(); + 'step 0' + var cards=player.getCards('h'); + event.num=cards.length; + player.discard(cards); + 'step 1' + var target=trigger.player,str=get.translation(target); + event.target=target; + if(!target.isIn()) event.finish(); + else if(!target.hasCard(function(card){ + return lib.filter.canBeDiscarded(card,player,target); + },'he')) event._result={index:1}; + else player.chooseControl().set('choiceList',[ + '弃置'+str+'的'+get.cnNumber(num)+'张牌', + '对'+str+'造成1点伤害', + ]).set('ai',()=>1); + 'step 2' + if(result.index==0) player.discardPlayerCard(target,num,true,'he'); + else target.damage(); }, }, gzpozhen:{ @@ -11038,12 +11065,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ qingyin_info:'限定技,出牌阶段,你可令所有己方角色将体力值回满,然后移除此武将牌。', gzlianpian:'联翩', gzlianpian_info:'①结束阶段开始时,若你于此回合内弃置过所有角色的牌数之和大于你的体力值,你可令一名与你势力相同的角色将手牌补至X张(X为其体力上限)。②其他角色的结束阶段开始时,若其于此回合内弃置过所有角色的牌数之和大于你的体力值,其可选择:1.弃置你的一张牌;2.令你回复1点体力。', - yusui:'玉碎', - yusui_info:'当你成为其他势力的角色使用黑色牌的目标后,你可以失去1点体力,然后选择一项:①令其弃置X张手牌(X为其体力上限);②令其失去Y点体力(Y为其的体力值减去你的体力值,不为正时不可选择)', - boyan:'驳言', - boyan_info:'出牌阶段限一次,你可令一名其他角色将手牌摸至体力上限(至多摸五张),然后其本回合不能使用或打出手牌。', - boyan_zongheng:'驳言·纵横', - boyan_zongheng_info:'出牌阶段限一次,你可令一名其他角色本回合不能使用或打出手牌。', + gzyusui:'玉碎', + gzyusui_info:'当你成为其他势力的角色使用黑色牌的目标后,你可以失去1点体力,然后选择一项:①令其弃置X张手牌(X为其体力上限);②令其失去Y点体力(Y为其的体力值减去你的体力值,不为正时不可选择)', + gzboyan:'驳言', + gzboyan_info:'出牌阶段限一次,你可令一名其他角色将手牌摸至体力上限(至多摸五张),然后其本回合不能使用或打出手牌。', + gzboyan_zongheng:'驳言·纵横', + gzboyan_zongheng_info:'出牌阶段限一次,你可令一名其他角色本回合不能使用或打出手牌。', gzjinfa:'矜伐', gzjinfa_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌,若你以此法获得了♠牌,则其视为对你使用一张【杀】。②你获得其一张牌。', gzduwu:'黩武', @@ -11082,11 +11109,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzlixia:'礼下', gzlixia_info:'与你势力不同的角色的准备阶段开始时,其可弃置你装备区内的一张牌,然后其选择一项:①弃置两张手牌。②失去1点体力。③令你摸两张牌。', gzrekuangcai:'狂才', - gzrekuangcai_info:'锁定技,你于回合内使用牌无距离和次数限制;弃牌阶段开始时,若你本回合内使用过牌但未造成过伤害,则你的手牌上限-1。', + gzrekuangcai_info:'锁定技,你于回合内使用牌无距离和次数限制;弃牌阶段开始时,若你本回合内:未使用过牌,则你本回合的手牌上限+1;使用过牌但未造成过伤害,则你本回合的手牌上限-1。', gzkuangcai:'狂才', gzkuangcai_info:'锁定技,你的回合内,你使用牌无距离和次数限制,无视防具且不能被【无懈可击】响应;弃牌阶段开始时,若你本回合使用过牌但没造成伤害,本回合你的手牌上限-2;若你本回合造成的伤害点数不小于你使用的牌数,你将手牌摸至体力上限且本回合手牌上限+2。', gzshejian:'舌箭', - gzshejian_info:'当你成为其他角色使用牌的唯一目标后,你可以弃置所有手牌。若如此做,你对其造成1点伤害。', + gzshejian_info:'当你成为其他角色使用牌的唯一目标后,你可以弃置所有手牌。若如此做,你选择一项:⒈弃置其等量的牌。⒉对其造成1点伤害。', gzzhidao:'雉盗', gzzhidao2:'雉盗', gzzhidao_info:'锁定技,出牌阶段开始时,你选择一名其他角色,然后直到此回合结束,你与其的距离视为1且你不能使用牌指定除你与其外的角色为目标;当你于出牌阶段内首次对其造成伤害后,你获得其区域内的一张牌。', diff --git a/theme/style/hp/custom.css b/theme/style/hp/custom.css index c4c5c2af2..4fb3677ff 100644 --- a/theme/style/hp/custom.css +++ b/theme/style/hp/custom.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ box-shadow: none; border: none; background-size: 100% 100%; @@ -6,7 +6,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ box-shadow: none; border: none; background-size: 100% 100%; @@ -14,7 +14,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ box-shadow: none; border: none; background-size: 100% 100%; @@ -29,19 +29,30 @@ transform: scale(1.4); border-radius: 0px; } +.hp:not(.text):not(.actcount):not(.treasure)>.shield{ + background: url('image/shield.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ transform: scale(1.6); } +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.shield{ + transform: scale(1.6); +} .button.newstyle>.hp>.text{ margin-left: 5px; diff --git a/theme/style/hp/emotion.css b/theme/style/hp/emotion.css index 267a926e5..a777b0c52 100644 --- a/theme/style/hp/emotion.css +++ b/theme/style/hp/emotion.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ background: url('image/emotion1.png'); box-shadow: none; border: none; @@ -7,7 +7,7 @@ -webkit-filter:brightness(0.8) contrast(1.5); border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ background: url('image/emotion2.png'); box-shadow: none; border: none; @@ -16,7 +16,7 @@ -webkit-filter:brightness(0.8) contrast(1.5); border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ background: url('image/emotion3.png'); box-shadow: none; border: none; @@ -33,19 +33,30 @@ transform: scale(1.4); border-radius: 0px; } +.hp:not(.text):not(.actcount):not(.treasure)>.shield{ + background: url('image/shield.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ transform: scale(1.6); } +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.shield{ + transform: scale(1.6); +} .button.newstyle>.hp>.text{ margin-left: 5px; diff --git a/theme/style/hp/glass.css b/theme/style/hp/glass.css index 5fc14524b..28b474511 100644 --- a/theme/style/hp/glass.css +++ b/theme/style/hp/glass.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ background: url('image/glass1.png'); box-shadow: none; border: none; @@ -7,7 +7,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ background: url('image/glass2.png'); box-shadow: none; border: none; @@ -16,7 +16,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ background: url('image/glass3.png'); box-shadow: none; border: none; @@ -33,19 +33,30 @@ transform: scale(1.4); border-radius: 0px; } +.hp:not(.text):not(.actcount):not(.treasure)>.shield{ + background: url('image/shield.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ transform: scale(1.6); } +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.shield{ + transform: scale(1.6); +} .button.newstyle>.hp>.text{ margin-left: 5px; diff --git a/theme/style/hp/image/shield.png b/theme/style/hp/image/shield.png new file mode 100644 index 000000000..c6538d952 Binary files /dev/null and b/theme/style/hp/image/shield.png differ diff --git a/theme/style/hp/official.css b/theme/style/hp/official.css index bf82cd29d..48a3b2249 100644 --- a/theme/style/hp/official.css +++ b/theme/style/hp/official.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ background: url('image/official1.png'); box-shadow: none; border: none; @@ -6,7 +6,7 @@ transform: scale(1.4); border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ background: url('image/official2.png'); box-shadow: none; border: none; @@ -14,7 +14,7 @@ transform: scale(1.4); border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ background: url('image/official3.png'); box-shadow: none; border: none; @@ -30,19 +30,30 @@ transform: scale(1.4); border-radius: 0px; } +.hp:not(.text):not(.actcount):not(.treasure)>.shield{ + background: url('image/shield.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ transform: scale(1.6); } +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.shield{ + transform: scale(1.6); +} .button.newstyle>.hp>.text{ margin-left: 5px; diff --git a/theme/style/hp/ol.css b/theme/style/hp/ol.css index a612edeea..18ab30f6b 100644 --- a/theme/style/hp/ol.css +++ b/theme/style/hp/ol.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ background: url('image/ol1.png'); box-shadow: none; border: none; @@ -7,7 +7,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ background: url('image/ol2.png'); box-shadow: none; border: none; @@ -16,7 +16,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ background: url('image/ol3.png'); box-shadow: none; border: none; @@ -35,14 +35,24 @@ filter:grayscale(1) opacity(0.8); -webkit-filter:grayscale(1) opacity(0.8); } +.hp:not(.text):not(.actcount):not(.treasure)>.lost{ + background: url('image/shield.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.6); + border-radius: 0px; + filter:grayscale(1) opacity(0.8); + -webkit-filter:grayscale(1) opacity(0.8); +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ diff --git a/theme/style/hp/round.css b/theme/style/hp/round.css index 7d1235e91..1131a3138 100644 --- a/theme/style/hp/round.css +++ b/theme/style/hp/round.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ background: url('image/round1.png'); box-shadow: none; border: none; @@ -7,7 +7,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ background: url('image/round2.png'); box-shadow: none; border: none; @@ -16,7 +16,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ background: url('image/round3.png'); box-shadow: none; border: none; @@ -33,19 +33,30 @@ transform: scale(1.4); border-radius: 0px; } +.hp:not(.text):not(.actcount):not(.treasure)>.shield{ + background: url('image/shield.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ transform: scale(1.6); } +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.shield{ + transform: scale(1.6); +} .button.newstyle>.hp>.text{ margin-left: 5px; diff --git a/theme/style/hp/xinglass.css b/theme/style/hp/xinglass.css index 6df3fc73a..690ef0729 100644 --- a/theme/style/hp/xinglass.css +++ b/theme/style/hp/xinglass.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ background: url('image/xinglass1.png'); box-shadow: none; border: none; @@ -7,7 +7,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ background: url('image/xinglass2.png'); box-shadow: none; border: none; @@ -16,7 +16,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ background: url('image/xinglass3.png'); box-shadow: none; border: none; @@ -33,19 +33,30 @@ transform: scale(1.4); border-radius: 0px; } +.hp:not(.text):not(.actcount):not(.treasure)>.shield{ + background: url('image/xinglass4.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ transform: scale(1.6); } +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.shield{ + transform: scale(1.6); +} .button.newstyle>.hp>.text{ margin-left: 5px; diff --git a/theme/style/hp/xinround.css b/theme/style/hp/xinround.css index 634a16aa0..d937436d9 100644 --- a/theme/style/hp/xinround.css +++ b/theme/style/hp/xinround.css @@ -1,4 +1,4 @@ -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ background: url('image/xinround1.png'); box-shadow: none; border: none; @@ -7,7 +7,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ background: url('image/xinround2.png'); box-shadow: none; border: none; @@ -16,7 +16,7 @@ -webkit-filter:none; border-radius: 0px; } -.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ background: url('image/xinround3.png'); box-shadow: none; border: none; @@ -33,19 +33,30 @@ transform: scale(1.4); border-radius: 0px; } +.hp:not(.text):not(.actcount):not(.treasure)>.shield{ + background: url('image/shield.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost):not(.shield){ transform: scale(1.6); } -#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost):not(.shield){ transform: scale(1.6); } #arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ transform: scale(1.6); } +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.shield{ + transform: scale(1.6); +} .button.newstyle>.hp>.text{ margin-left: 5px;