diff --git a/audio/die/boss_zhaoyun.mp3 b/audio/die/boss_zhaoyun.mp3 new file mode 100644 index 000000000..fc60d07e4 Binary files /dev/null and b/audio/die/boss_zhaoyun.mp3 differ diff --git a/audio/die/gaoxiang.mp3 b/audio/die/gaoxiang.mp3 new file mode 100644 index 000000000..ef9808d49 Binary files /dev/null and b/audio/die/gaoxiang.mp3 differ diff --git a/audio/die/shen_sunce.mp3 b/audio/die/shen_sunce.mp3 index 1185fd030..bcd3fe129 100644 Binary files a/audio/die/shen_sunce.mp3 and b/audio/die/shen_sunce.mp3 differ diff --git a/audio/die/yuantanyuanshang.mp3 b/audio/die/yuantanyuanshang.mp3 index e844778ff..9570aac6a 100644 Binary files a/audio/die/yuantanyuanshang.mp3 and b/audio/die/yuantanyuanshang.mp3 differ diff --git a/audio/effect/damage.mp3 b/audio/effect/damage.mp3 index 99c48c207..1076f13bc 100755 Binary files a/audio/effect/damage.mp3 and b/audio/effect/damage.mp3 differ diff --git a/audio/effect/damage2.mp3 b/audio/effect/damage2.mp3 index 3e6851a66..e75b89a9b 100755 Binary files a/audio/effect/damage2.mp3 and b/audio/effect/damage2.mp3 differ diff --git a/audio/effect/damage_fire.mp3 b/audio/effect/damage_fire.mp3 new file mode 100644 index 000000000..4292a020e Binary files /dev/null and b/audio/effect/damage_fire.mp3 differ diff --git a/audio/effect/damage_fire2.mp3 b/audio/effect/damage_fire2.mp3 new file mode 100644 index 000000000..8f23b7d4a Binary files /dev/null and b/audio/effect/damage_fire2.mp3 differ diff --git a/audio/effect/damage_ice.mp3 b/audio/effect/damage_ice.mp3 new file mode 100644 index 000000000..7474c9a1d Binary files /dev/null and b/audio/effect/damage_ice.mp3 differ diff --git a/audio/effect/damage_ice2.mp3 b/audio/effect/damage_ice2.mp3 new file mode 100644 index 000000000..7b9817d54 Binary files /dev/null and b/audio/effect/damage_ice2.mp3 differ diff --git a/audio/effect/damage_thunder.mp3 b/audio/effect/damage_thunder.mp3 new file mode 100644 index 000000000..2dc952e3e Binary files /dev/null and b/audio/effect/damage_thunder.mp3 differ diff --git a/audio/effect/damage_thunder2.mp3 b/audio/effect/damage_thunder2.mp3 new file mode 100644 index 000000000..769795a50 Binary files /dev/null and b/audio/effect/damage_thunder2.mp3 differ diff --git a/audio/effect/hujia_damage.mp3 b/audio/effect/hujia_damage.mp3 new file mode 100644 index 000000000..edf44bcc3 Binary files /dev/null and b/audio/effect/hujia_damage.mp3 differ diff --git a/audio/effect/hujia_damage2.mp3 b/audio/effect/hujia_damage2.mp3 new file mode 100644 index 000000000..5df07f1ec Binary files /dev/null and b/audio/effect/hujia_damage2.mp3 differ diff --git a/audio/effect/hujia_damage_fire.mp3 b/audio/effect/hujia_damage_fire.mp3 new file mode 100644 index 000000000..a586bc010 Binary files /dev/null and b/audio/effect/hujia_damage_fire.mp3 differ diff --git a/audio/effect/hujia_damage_fire2.mp3 b/audio/effect/hujia_damage_fire2.mp3 new file mode 100644 index 000000000..40daa35c1 Binary files /dev/null and b/audio/effect/hujia_damage_fire2.mp3 differ diff --git a/audio/effect/hujia_damage_thunder.mp3 b/audio/effect/hujia_damage_thunder.mp3 new file mode 100644 index 000000000..c24c2df77 Binary files /dev/null and b/audio/effect/hujia_damage_thunder.mp3 differ diff --git a/audio/effect/hujia_damage_thunder2.mp3 b/audio/effect/hujia_damage_thunder2.mp3 new file mode 100644 index 000000000..a9edf87a5 Binary files /dev/null and b/audio/effect/hujia_damage_thunder2.mp3 differ diff --git a/audio/skill/dcchiying1.mp3 b/audio/skill/dcchiying1.mp3 new file mode 100644 index 000000000..a3481ab39 Binary files /dev/null and b/audio/skill/dcchiying1.mp3 differ diff --git a/audio/skill/dcchiying2.mp3 b/audio/skill/dcchiying2.mp3 new file mode 100644 index 000000000..57682e688 Binary files /dev/null and b/audio/skill/dcchiying2.mp3 differ diff --git a/audio/skill/gnjinfan_gain1.mp3 b/audio/skill/gnjinfan_gain1.mp3 index ead54ceae..0ba595ca7 100644 Binary files a/audio/skill/gnjinfan_gain1.mp3 and b/audio/skill/gnjinfan_gain1.mp3 differ diff --git a/audio/skill/gnjinfan_gain2.mp3 b/audio/skill/gnjinfan_gain2.mp3 index f880587c2..ee9cf2eaa 100644 Binary files a/audio/skill/gnjinfan_gain2.mp3 and b/audio/skill/gnjinfan_gain2.mp3 differ diff --git a/audio/skill/gzpaiyi1.mp3 b/audio/skill/gzpaiyi1.mp3 index 6f7a9cf26..7c5c91a63 100644 Binary files a/audio/skill/gzpaiyi1.mp3 and b/audio/skill/gzpaiyi1.mp3 differ diff --git a/audio/skill/gzpaiyi2.mp3 b/audio/skill/gzpaiyi2.mp3 index 7f3fc7608..973087ee4 100644 Binary files a/audio/skill/gzpaiyi2.mp3 and b/audio/skill/gzpaiyi2.mp3 differ diff --git a/audio/skill/gzquanji1.mp3 b/audio/skill/gzquanji1.mp3 index 7c5c91a63..6f7a9cf26 100644 Binary files a/audio/skill/gzquanji1.mp3 and b/audio/skill/gzquanji1.mp3 differ diff --git a/audio/skill/gzquanji2.mp3 b/audio/skill/gzquanji2.mp3 index 973087ee4..7f3fc7608 100644 Binary files a/audio/skill/gzquanji2.mp3 and b/audio/skill/gzquanji2.mp3 differ diff --git a/audio/skill/juyi1.mp3 b/audio/skill/juyi1.mp3 new file mode 100644 index 000000000..1b956d9f0 Binary files /dev/null and b/audio/skill/juyi1.mp3 differ diff --git a/audio/skill/juyi2.mp3 b/audio/skill/juyi2.mp3 new file mode 100644 index 000000000..1b956d9f0 Binary files /dev/null and b/audio/skill/juyi2.mp3 differ diff --git a/audio/skill/mouli1.mp3 b/audio/skill/mouli1.mp3 index 59107c780..00100e24f 100644 Binary files a/audio/skill/mouli1.mp3 and b/audio/skill/mouli1.mp3 differ diff --git a/audio/skill/mouli2.mp3 b/audio/skill/mouli2.mp3 index fa685f46b..aea8ebc0c 100644 Binary files a/audio/skill/mouli2.mp3 and b/audio/skill/mouli2.mp3 differ diff --git a/audio/skill/neifa1.mp3 b/audio/skill/neifa1.mp3 index bee33e6db..864478139 100644 Binary files a/audio/skill/neifa1.mp3 and b/audio/skill/neifa1.mp3 differ diff --git a/audio/skill/neifa2.mp3 b/audio/skill/neifa2.mp3 index c7bee1ac9..33b082a6b 100644 Binary files a/audio/skill/neifa2.mp3 and b/audio/skill/neifa2.mp3 differ diff --git a/audio/skill/pinghe1.mp3 b/audio/skill/pinghe1.mp3 index bedb559a6..19738a2d8 100644 Binary files a/audio/skill/pinghe1.mp3 and b/audio/skill/pinghe1.mp3 differ diff --git a/audio/skill/pinghe2.mp3 b/audio/skill/pinghe2.mp3 index 72338df47..47702819e 100644 Binary files a/audio/skill/pinghe2.mp3 and b/audio/skill/pinghe2.mp3 differ diff --git a/audio/skill/qingzhong1.mp3 b/audio/skill/qingzhong1.mp3 index 43ba83752..a9ed4a308 100644 Binary files a/audio/skill/qingzhong1.mp3 and b/audio/skill/qingzhong1.mp3 differ diff --git a/audio/skill/qingzhong2.mp3 b/audio/skill/qingzhong2.mp3 index ca9ca6867..4c074caaf 100644 Binary files a/audio/skill/qingzhong2.mp3 and b/audio/skill/qingzhong2.mp3 differ diff --git a/audio/skill/scfuhai1.mp3 b/audio/skill/scfuhai1.mp3 index 2eef94e14..2510494b0 100644 Binary files a/audio/skill/scfuhai1.mp3 and b/audio/skill/scfuhai1.mp3 differ diff --git a/audio/skill/scfuhai2.mp3 b/audio/skill/scfuhai2.mp3 index 16e4f3aaa..e45da97d2 100644 Binary files a/audio/skill/scfuhai2.mp3 and b/audio/skill/scfuhai2.mp3 differ diff --git a/audio/skill/weijing1.mp3 b/audio/skill/weijing1.mp3 index a9ed4a308..43ba83752 100644 Binary files a/audio/skill/weijing1.mp3 and b/audio/skill/weijing1.mp3 differ diff --git a/audio/skill/weijing2.mp3 b/audio/skill/weijing2.mp3 index 4c074caaf..ca9ca6867 100644 Binary files a/audio/skill/weijing2.mp3 and b/audio/skill/weijing2.mp3 differ diff --git a/audio/skill/weizhong1.mp3 b/audio/skill/weizhong1.mp3 new file mode 100644 index 000000000..5db1df8c5 Binary files /dev/null and b/audio/skill/weizhong1.mp3 differ diff --git a/audio/skill/weizhong2.mp3 b/audio/skill/weizhong2.mp3 new file mode 100644 index 000000000..5db1df8c5 Binary files /dev/null and b/audio/skill/weizhong2.mp3 differ diff --git a/audio/skill/xianzhou_xin_caifuren1.mp3 b/audio/skill/xianzhou_xin_caifuren1.mp3 index a1aa401d8..15092fe82 100644 Binary files a/audio/skill/xianzhou_xin_caifuren1.mp3 and b/audio/skill/xianzhou_xin_caifuren1.mp3 differ diff --git a/audio/skill/xianzhou_xin_caifuren2.mp3 b/audio/skill/xianzhou_xin_caifuren2.mp3 index 54514bd64..7de14e9fa 100644 Binary files a/audio/skill/xianzhou_xin_caifuren2.mp3 and b/audio/skill/xianzhou_xin_caifuren2.mp3 differ diff --git a/audio/skill/xingqi1.mp3 b/audio/skill/xingqi1.mp3 index 00100e24f..59107c780 100644 Binary files a/audio/skill/xingqi1.mp3 and b/audio/skill/xingqi1.mp3 differ diff --git a/audio/skill/xingqi2.mp3 b/audio/skill/xingqi2.mp3 index aea8ebc0c..fa685f46b 100644 Binary files a/audio/skill/xingqi2.mp3 and b/audio/skill/xingqi2.mp3 differ diff --git a/audio/skill/xinqieting1.mp3 b/audio/skill/xinqieting1.mp3 index 15092fe82..a1aa401d8 100644 Binary files a/audio/skill/xinqieting1.mp3 and b/audio/skill/xinqieting1.mp3 differ diff --git a/audio/skill/xinqieting2.mp3 b/audio/skill/xinqieting2.mp3 index 7de14e9fa..54514bd64 100644 Binary files a/audio/skill/xinqieting2.mp3 and b/audio/skill/xinqieting2.mp3 differ diff --git a/audio/skill/yingba1.mp3 b/audio/skill/yingba1.mp3 index c423ab06d..9fd50531a 100644 Binary files a/audio/skill/yingba1.mp3 and b/audio/skill/yingba1.mp3 differ diff --git a/audio/skill/yingba2.mp3 b/audio/skill/yingba2.mp3 index d7c396358..a2118e371 100644 Binary files a/audio/skill/yingba2.mp3 and b/audio/skill/yingba2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 8ed23ed07..98187bd2d 100644 --- a/card/extra.js +++ b/card/extra.js @@ -453,20 +453,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ subtype:'equip2', loseDelay:false, onLose:function(){ - var next=game.createEvent('baiyin_recover'); - event.next.remove(next); - var evt=event.getParent(); - if(evt.getlx===false) evt=evt.getParent(); - evt.after.push(next); - next.player=player; - next.setContent(function(){ - if(player.isDamaged()) player.logSkill('baiyin_skill'); - player.recover(); - }); - }, - filterLose:function(card,player){ - if(player.hasSkillTag('unequip2')) return false; - return true; + player.addTempSkill('baiyin_skill_lose') }, skills:['baiyin_skill'], tag:{ @@ -617,6 +604,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, }, mark:true, + markimage2:'image/card/muniu_small.png', intro:{ content:function(storage,player){ var muniu=player.getEquip('muniu'); @@ -865,6 +853,31 @@ game.import('card',function(lib,game,ui,get,ai,_status){ content:function(){ trigger.num=1; }, + subSkill:{ + lose:{ + audio:'baiyin_skill', + forced:true, + charlotte:true, + equipSkill:true, + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:(event,player)=>{ + if(player.isHealthy()||player.hasSkillTag('unequip2')) return false; + var evt=event.getl(player); + return evt&&evt.es.some(card=>card.name=='baiyin') + }, + content:function(){ + var evt=trigger.getl(player); + evt.es.forEach(card=>{ + if(card.name=='baiyin'){ + player.recover(); + } + }) + }, + }, + }, ai:{ filterDamage:true, skillTagFilter:function(player,tag,arg){ diff --git a/card/guozhan.js b/card/guozhan.js index 9c848a017..488a927fb 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -481,7 +481,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return 'take_damage'; } return 'discard_card'; - }); + }).set('prompt','水淹七军').set('prompt2','请选择一项:⒈弃置装备区里的所有牌;⒉受到'+get.translation(player)+'造成的1点雷电伤害。'); 'step 1' if(result.control=='discard_card'){ target.discard(target.getCards('e',function(card){ diff --git a/card/yingbian.js b/card/yingbian.js index 8c17e989e..11a200ca3 100644 --- a/card/yingbian.js +++ b/card/yingbian.js @@ -239,7 +239,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){ type:'equip', subtype:'equip5', loseDelay:false, - global:'tianjitu_skill', + skills:['tianjitu_skill'], + onLose:function(){ + player.addTempSkill('tianjitu_skill_lose') + }, + loseDelay:false, ai:{ value:function(card,player){ if(player.countCards('h')>3||get.position(card)!='e') return 0.5; @@ -374,14 +378,33 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, tianjitu_skill:{ audio:true, - trigger:{player:['equipBegin','loseBegin']}, + trigger:{player:'equipAfter'}, forced:true, equipSkill:true, - filter:(event,player,name)=>name=='equipBegin'?event.card.name=='tianjitu'&&player.hasCard(card=>card!=event.card):event.cards.some(value=>get.position(value)=='e'&&value.name=='tianjitu')&&player.countCards('h')<5, + filter:(event,player)=>event.card.name=='tianjitu'&&player.hasCard(card=>card!=event.card), content:()=>{ - if(event.triggername=='loseBegin') player.drawTo(5); - else player.chooseToDiscard(true,card=>card!=_status.event.getTrigger().card,'he'); - } + player.chooseToDiscard(true,card=>card!=_status.event.getTrigger().card,'he'); + }, + subSkill:{ + lose:{ + audio:'tianjitu_skill', + forced:true, + charlotte:true, + equipSkill:true, + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:(event,player)=>{ + if(player.countCards('h')>=5) return false; + var evt=event.getl(player); + return evt&&evt.es.some(card=>card.name=='tianjitu') + }, + content:function(){ + player.drawTo(5); + }, + }, + }, }, taigongyinfu_skill:{ equipSkill:true, diff --git a/character/clan.js b/character/clan.js index 3212222d3..0d266e196 100644 --- a/character/clan.js +++ b/character/clan.js @@ -816,7 +816,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.player.recover(); }, }, - //族王凌 + //族王淩 clanbolong:{ audio:2, enable:'phaseUse', @@ -2356,7 +2356,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ clan_wukuang:'族吴匡', clanlianzhu:'联诛', clanlianzhu_info:'转换技。每名角色A的出牌阶段限一次。阴:A可以重铸一张牌,然后你可以重铸一张牌。若这两张牌颜色不同,则你的手牌上限-1;阳:A可以令你选择一名在你或A攻击范围内的另一名其他角色B,然后A和你可依次选择是否对B使用一张【杀】。若这两张【杀】颜色相同,则你的手牌上限+1。', - clan_wangling:'族王凌', + clan_wangling:'族王淩', clanbolong:'驳龙', clanbolong_info:'出牌阶段限一次。你可以令一名其他角色选择一项:1.你交给其一张牌,然后视为对其使用一张雷【杀】;2.交给你等同于你手牌数的牌,然后视为对你使用一张【酒】。', clanzhongliu:'中流', diff --git a/character/collab.js b/character/collab.js index b2739cf66..ccc7cd3dc 100644 --- a/character/collab.js +++ b/character/collab.js @@ -1025,7 +1025,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ var num=lib.skill.ruyijingubang_skill_backup.num; player.storage.ruyijingubang_skill=num; - var card=player.getEquips(1); + var cards=player.getEquips(1); for(var card of cards){ if(card&&card.name=='ruyijingubang'){ card.storage.ruyijingubang_skill=num; @@ -1038,9 +1038,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, mod:{ - attackRange:function(player,range){ - if(player.storage.ruyijingubang_skill) return range-3+player.storage.ruyijingubang_skill; - }, cardUsable:function(card,player,num){ if(player.storage.ruyijingubang_skill==1&&card.name=='sha') return Infinity; }, @@ -1516,7 +1513,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subtype:'equip1', skills:['ruyijingubang_skill','ruyijingubang_effect'], equipDelay:false, - distance:{attackFrom:-2}, + distance:{ + attackFrom:-2, + attackRange:(card,player)=>{ + return (player.storage.ruyijingubang_skill||3); + } + }, onEquip:function(){ if(!card.storage.ruyijingubang_skill) card.storage.ruyijingubang_skill=3; player.storage.ruyijingubang_skill=card.storage.ruyijingubang_skill; diff --git a/character/ddd.js b/character/ddd.js index 675fcc53a..80e8cafb9 100644 --- a/character/ddd.js +++ b/character/ddd.js @@ -2438,6 +2438,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'dddfengzheng', enable:'phaseUse', usable:1, + filter:function(event,player){ + return game.hasPlayer(current=>current.hasSkill('dddfengzheng')); + }, filterCard:function(card,player){ var num=0; for(var i=0;i0) return 7; if(source.hp>2) return 4; @@ -18463,7 +18463,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shiorimiyuki_banyin:'伴音', shiorimiyuki_banyin_info:'当你受到伤害或回复体力后,你可令一名其他角色回复1点体力。', shiorimiyuki_tingxian:'铤险', - shiorimiyuki_tingxian_info:'出牌阶段开始时,你可以摸至多三张牌。若如此做,你回复1点体力,且此阶段结束时你失去X点体力。(X为你获得的牌中仍在手牌区的牌的数量)', + shiorimiyuki_tingxian_info:'出牌阶段开始时,你可以摸至多三张牌。若如此做,你回复1点体力,且此阶段结束时你失去X点体力。(X为你得到的牌中仍在手牌区的牌的数量)', shiorimiyuki_tingxian2:'铤险', miki_shenqiang:'神枪', miki_shenqiang_info:'锁定技,游戏开始时,你将一张【海德洛格拉迪尔特·改】和一张【望远镜】置入你的装备区。你装备区内的武器牌和宝物牌不能被其他角色弃置。', @@ -18519,7 +18519,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kotori_skill_key:'键魂', kotori_skill_key_info:'出牌阶段限一次,你可以摸一张牌并获得1点护甲。若如此做,你于当前回合结束时失去1点体力。', kotori_skill_jin:'晋势', - kotori_skill_jin_info:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而获得的牌。若这些牌的花色均不同,则你摸一张牌。', + kotori_skill_jin_info:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而得到的牌。若这些牌的花色均不同,则你摸一张牌。', kotori_yumo_wei:'魔物', kotori_yumo_shu:'魔物', kotori_yumo_wu:'魔物', @@ -18547,14 +18547,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //猴年马月爆料再利用 shizuku_sizhi:'思智', shizuku_sizhi2:'思智', - shizuku_sizhi_info:'出牌阶段限一次,你可以弃置任意张点数之和为13的牌,然后摸两倍数量的牌。以此法获得的牌中,黑色牌本回合无距离和次数限制,红色牌本回合不计入手牌上限。', + shizuku_sizhi_info:'出牌阶段限一次,你可以弃置任意张点数之和为13的牌,然后摸两倍数量的牌。以此法得到的牌中,黑色牌本回合无距离和次数限制,红色牌本回合不计入手牌上限。', shizuku_biyi:'避忆', shizuku_biyi_info:'当你受到伤害后,你可以进行一次判定,然后若你弃置任意张点数之和与判定结果点数相同的牌,你回复1点体力。', shizuku_sanhua:'散花', shizuku_sanhua_info:'当你死亡时,你可令一名其他角色从牌堆中获得四张名称各不相同的基本牌。', hiroto_huyu:'虎驭', hiroto_huyu2:'虎驭', - hiroto_huyu_info:'其他角色的出牌阶段结束时,若你没有技能〖纵略〗,则其可将两张手牌交给你。若如此做,你获得〖纵略〗。你的下回合结束时,你失去〖纵略〗并将本回合内获得的所有牌交给该角色。', + hiroto_huyu_info:'其他角色的出牌阶段结束时,若你没有技能〖纵略〗,则其可将两张手牌交给你。若如此做,你获得〖纵略〗。你的下回合结束时,你失去〖纵略〗并将本回合内得到的所有牌交给该角色。', hiroto_zonglve:'纵略', hiroto_zonglve_info:'锁定技,你的手牌上限+3。出牌阶段限一次,你可以将一张手牌背面朝下放置,并展示一名其他角色的一张手牌。若这两张牌:颜色相同,你对其造成1点伤害并弃置其展示的牌。颜色不同,你获得该角色区域内的两张牌。', hiroto_tuolao:'脱牢', @@ -18612,14 +18612,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ satomi_luodao:'落刀', satomi_luodao_info:'当你使用【杀】指定目标后,你可以展示目标角色的所有手牌。若其中:有【闪】,则你弃置其中的一张【闪】;没有【闪】,则你弃置一张牌。', satomi_daohai:'稻海', - satomi_daohai_info:'结束阶段,若你本回合内弃置过牌,则你可以视为使用一张【五谷丰登】。然后你可以将你于此【五谷丰登】中获得的牌当做【乐不思蜀】使用。', + satomi_daohai_info:'结束阶段,若你本回合内弃置过牌,则你可以视为使用一张【五谷丰登】。然后你可以将你于此【五谷丰登】中得到的牌当做【乐不思蜀】使用。', satomi_daohai_append:'五穀豊穣、刈り入れ時だね!', tenzen_fenghuan:'封还', tenzen_fenghuan_info:'其他角色使用的【杀】或伤害性锦囊牌结算结束后,若你是此牌的唯一目标,则你可以弃置任意张点数之和大于等于此牌点数两倍的牌,然后视为对其使用一张名称相同的牌。', tenzen_retianquan:'天全', tenzen_retianquan_info:'每回合限一次。当你使用【杀】指定目标后,你可失去1点体力或弃置一张牌,然后展示牌堆顶的三张牌(若你的体力值小于体力上限的50%,则改为展示五张牌)。这些牌中每有一张基本牌,响应此牌所需的【闪】的数量便+1。此牌结算结束后,若此牌造成过伤害,则你获得展示牌中的所有非基本牌。', iriya_yinji:'殷极', - iriya_yinji_info:'锁定技。出牌阶段开始时,你将手牌摸至17张。你不能直接使用以此法获得的牌。', + iriya_yinji_info:'锁定技。出牌阶段开始时,你将手牌摸至17张。你不能直接使用以此法得到的牌。', iriya_haozhi:'豪掷', iriya_haozhi_info:'出牌阶段,你可以按照斗地主牌型弃置至少两张牌,且其他角色可以依次对其进行一轮响应。最后一名进行响应的角色可以根据对应牌型执行对应效果。' +'对子:其可以令至多两名角色各摸一张牌。' @@ -18673,7 +18673,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuuki_yicha_info:'出牌阶段开始时,你可依次进行两次判定并将判定牌依次置入两行三列方阵的两个随机位置中。然后你依次进行四次判定,每次可将当前判定牌置入空方格,且须与相邻方格的牌颜色均不同。若如此做,你令一名角色获得方阵内的所有牌。', key_kyouko:'伊座并杏子', kyouko_rongzhu:'容助', - kyouko_rongzhu_info:'其他角色不因此技能而获得你的牌后,你可摸一张牌,然后交给其一张牌。若其是当前回合角色,则其本回合使用【杀】的次数上限+1;若你是当前回合角色,则你本回合的手牌上限+1。', + kyouko_rongzhu_info:'其他角色不因此技能而得到你的牌后,你可摸一张牌,然后交给其一张牌。若其是当前回合角色,则其本回合使用【杀】的次数上限+1;若你是当前回合角色,则你本回合的手牌上限+1。', kyouko_gongmian:'共勉', kyouko_gongmian_use:'共勉', kyouko_gongmian_exchange:'共勉', @@ -18735,7 +18735,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ noname_zhuyuan:"祝愿", noname_zhuyuan_info:"①每回合每名角色限一次。出牌阶段,你可以将四张花色各不相同的牌交给一名其他角色。你与其获得技能〖铁骑〗和〖激昂〗至各自的回合结束。②锁定技,若你于当前回合内:未发动过〖祝愿〗,则你使用牌无次数限制;发动过〖祝愿〗,则你使用牌无距离限制。", noname_duocai:"多彩", - noname_duocai_info:"每回合限一次。其他角色区域内的牌因弃置而进入弃牌堆后,你可以获得之。若你以此法获得的牌数:大于2,你弃置一名角色区域内的一张牌;等于2,你摸一张牌;小于2,你回复1点体力。", + noname_duocai_info:"每回合限一次。其他角色区域内的牌因弃置而进入弃牌堆后,你可以获得之。若你以此法得到的牌数:大于2,你弃置一名角色区域内的一张牌;等于2,你摸一张牌;小于2,你回复1点体力。", ns_huangchengyan:'黄承彦', nslongyue:'龙岳', nslongyue_info:'当一名角色使用锦囊牌时,若此牌是其本回合内使用的第一张牌,则你可令其摸一张牌。', @@ -18970,7 +18970,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ choudu:'筹度', choudu_info:'出牌阶段限一次,你可以弃置一张牌,并指定一名角色视为其使用一张调兵遣将', liduan:'立断', - liduan_info:'当一名其他角色于其回合外获得牌后,若其此次获得的牌数为1且为装备牌(无论是否可见),你可以令该角色选择一项:1.使用此牌;2.将一张手牌交给你', + liduan_info:'当一名其他角色于其回合外得到牌后,若其此次得到的牌数为1且为装备牌(无论是否可见),你可以令该角色选择一项:1.使用此牌;2.将一张手牌交给你', fuchou:'负仇', fuchou2:'负仇', fuchou_info:'当你成为【杀】的目标时,你可以将一张牌交给此【杀】的使用者,令此【杀】对你无效且你到其的距离于当前回合内视为1,若如此做,此回合的结束阶段开始时,其令你摸一张牌,然后你需对其使用【杀】,否则失去1点体力', @@ -19132,7 +19132,90 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ns_duji_ab:'杜畿', }, pinyins:{ - 加藤うみ:['yīng','yuán','yǔ','wèi'], + 加藤うみ:['Kato','Umi'], + 仲村由理:['Nakamura','Yuri'], + 此花露西娅:['Konohana','Lucia'], + 枣恭介:['Natsume','Kyousuke'], + 神尾晴子:['Kamio','Haruko'], + 神北小毬:['Kamikita','Komari'], + 宫泽有纪宁:['Miyazawa','Yukine'], + 西森柚咲:['Nishimori','Yusa'], + 黑羽美砂:['Kurobane','Misa'], + 井之原真人:['Inohara','Masato'], + 岩泽雅美:['Iwasawa','Masami'], + 宫泽谦吾:['Miyazawa','Kengo'], + 吉野晴彦:['Yoshino','Haruhiko'], + 由依:['Yui'], + 紬文德斯:['Tsumugi','Wenders'], + 朱鹭户沙耶:['Tokido','Saya'], + '三枝叶留佳&二木佳奈多':['Saigusa','Haruka','Futaki','Kanata'], + 三枝二木:['Saigusa','Haruka','Futaki','Kanata'], + 稻荷:['Inari'], + 椎名:['Shiina'], + '春原阳平&春原芽衣':['Sunohara','Youhei','Sunohara','Mei'], + 阳平芽衣:['Sunohara','Youhei','Sunohara','Mei'], + 枣铃:['Natsume','Rin'], + 笹濑川佐佐美:['Sasasegawa','Sasami'], + 千里朱音:['Senri','Akane'], + 多鲁基:['Dorj'], + 来谷唯湖:['Kurugaya','Yuiko'], + 直枝理树:['Naoe','Riki'], + 高桥久子:['Takahashi','Hisako'], + 日向秀树:['Hinata','Hideki'], + 野田:['Noda'], + 冈崎朋也:['Okazaki','Tomoya'], + 古河渚:['Furukawa','Nagisa'], + 直井文人:['Naoi','Ayato'], + 空门苍:['Sorakado','Ao'], + 音无结弦:['Otonashi','Yuzuru'], + 立华奏:['Tachibana','Kanade'], + 西园美鱼:['Nishizono','Mio'], + 西园美鸟:['Nishizono','Midori'], + 岬镜子:['Misaki','Kyoko'], + 中津静流:['Nakatsu','Shizuru'], + '关根诗织&入江美雪':['Sekine','Shiori','Irie','Miyuki'], + 关根入江:['Sekine','Shiori','Irie','Miyuki'], + 野村美希:['Nomura','Miki'], + 美坂栞:['Misaka','Shiori'], + 美坂香里:['Misaka','Kaori'], + 水濑秋子:['Minase','Akiko'], + 游佐:['Yusa'], + 松下护騨:['Matsushita','Godan'], + 乙坂有宇:['Otosaka','Yuu'], + 三谷良一:['Mitani','Ryoichi'], + 神户小鸟:['Kanbe','Kotori'], + 高城丈士朗:['Takajyo','Jyojirou'], + 鸣濑白羽:['Naruse','Shiroha'], + 水织静久:['Mizuori','Shizuku'], + 铃木央人:['Suzuki','Hiroto'], + 凤咲夜:['Ootori','Sakuya'], + 成神阳太:['Narukami','Youta'], + 七濑留美:['Nanase','Rumi'], + 凤千早:['Ootori','Chihaya'], + 国崎往人:['Kunisaki','Yukito'], + 井上晶:['Inoue','Asara'], + 一之濑琴美:['Ichinose','Kotomi'], + 藤川米娅:['Fujikawa','Mia'], + 雾岛佳乃:['Kirishima','Kano'], + 苍井绘梨花:['Aoi','Erika'], + 藏里见:['Kura','Satomi'], + 喵呜·喵呼:['Myau','Mya-fu'], + 喵呜喵呼:['Myau','Mya-fu'], + 伊吹风子:['Ibuki','Fuuko'], + 久岛鸥:['Kushima','Kamome'], + 库特莉亚芙卡:['Noumi','Kudryavka'], + 神尾观铃:['Kamio','Misuzu'], + 友利奈绪:['Tomori','Nao'], + 天王寺瑚太朗:['Tennouji','Kotarou'], + 藤林杏:['Fujibayashi','Kyou'], + 伊座并杏子:['Izanami','Kyouko'], + 加纳天善:['Kano','Tenzen'], + 冰室忧希:['Himuro','Yuuki'], + 露娜Q:['Lunar','Q'], + 远野小满:['Toono','Michiru'], + 远野美凪:['Toono','Minagi'], + 樱庭星罗:['Sakuraba','Seira'], + 坂上智代:['Sakagami','Tomoyo'], }, }; }); diff --git a/character/extra.js b/character/extra.js index 0f8b42c0d..de89e8e20 100755 --- a/character/extra.js +++ b/character/extra.js @@ -30,7 +30,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tw_shen_guanyu:['male','shen',4,['twwushen','twwuhun'],['shu']], shen_machao:['male','shen',4,['shouli','hengwu'],['shu']], shen_sunquan:['male','shen',4,['junkyuheng','junkdili'],['wu']], - shen_jiangwei:['male','shen',4,['jiufa','tianren','pingxiang'],['shen']], + shen_jiangwei:['male','shen',4,['jiufa','tianren','pingxiang'],['shu']], key_kagari:['female','shen',3,['kagari_zongsi'],['key']], key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']], db_key_hina:['female','key',3,['hina_shenshi','hina_xingzhi'],['doublegroup:key:shen']], @@ -116,7 +116,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseButton([ '挈挟:选择至多'+get.cnNumber(num)+'张武将置入武器栏', [list,'character'], - ],[1,num],true).set('ai',function(button){ + ],[1,num],true).set('filterButton',function(button){ + var name=button.link; + var info=lib.character[name]; + if(info[3].some(function(skill){ + var info=get.skillInfoTranslation(skill); + if(!info.includes('【杀】')) return false; + var list=get.skillCategoriesOf(skill); + list.remove('锁定技'); + return list.length==0; + })){ + button.classList.add('glow2'); + } + return true; + }).set('ai',function(button){ var name=button.link; var info=lib.character[name]; var skills=info[3].filter(function(skill){ @@ -621,6 +634,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twshelie:{ audio:'shelie', inherit:'shelie', + prompt2:()=>lib.translate.shelie_info, group:'twshelie_jingce', //什么精策技能啊喂! subSkill:{ @@ -1290,6 +1304,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shaRelated:true, }, twwuhun:{ + audio:2, trigger:{player:'die'}, forceDie:true, skillAnimation:true, @@ -1542,6 +1557,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, init:{ + audio:'shouli', trigger:{ global:'phaseBefore', player:'enterGame', @@ -3325,6 +3341,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, boss_juejing:{ + audio:'juejing', trigger:{player:'phaseDrawBefore'}, forced:true, content:function(){ @@ -3337,6 +3354,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'boss_juejing2' }, boss_juejing2:{ + audio:'juejing', trigger:{ player:'loseAfter', global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], @@ -4056,7 +4074,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, - wuhun21:{audio:true}, + wuhun2:{audio:2}, + wuhun21:{ + audio:true, + skillAnimation:true, + animationColor:'soil', + }, wuhun22:{ audio:true, skillAnimation:true, @@ -4068,7 +4091,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ animationColor:'soil', }, "new_wuhun":{ - audio:"wuhun21", + audio:"wuhun2", group:["new_wuhun_mark","new_wuhun_die","wuhun22","wuhun23"], trigger:{ player:"damageEnd", @@ -4114,7 +4137,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool&&result.targets&&result.targets.length){ var target=result.targets[0]; event.target=target; - player.logSkill(Math.random()<0.5?'wuhun22':'wuhun23',target); + player.logSkill(Math.random()<0.5?'wuhun21':'wuhun22',target); player.line(target,{color:[255, 255, 0]}); game.delay(2); } @@ -4744,18 +4767,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 0" player.chooseTarget('是否弃置一枚“忍”,并发动【放逐】?',function(card,player,target){ return player!=target - }).ai=function(target){ + }).set('ai',target=>{ if(target.hasSkillTag('noturn')) return 0; - if(target.isTurnedOver()){ - return get.attitude(player,target)-1; + var player=_status.event.player; + var current=_status.currentPhase; + var dis=current?get.distance(current,target,'absolute'):1; + var draw=player.getDamagedHp(); + var att=get.attitude(player,target); + if(att==0) return target.hasJudge('lebu')?Math.random()/3:Math.sqrt(get.threaten(target))/5+Math.random()/2; + if(att>0){ + if(target.isTurnedOver()) return att+draw; + if(draw<4) return -1; + if(current&&target.getSeatNum()>current.getSeatNum()) return att+draw/3; + return 10*Math.sqrt(Math.max(0.01,get.threaten(target)))/(3.5-draw)+dis/(2*game.countPlayer()); } else{ - if(player.maxHp-player.hp==1){ - return -get.attitude(player,target)-1; - } + if(target.isTurnedOver()) return -att-draw; + if(draw>=5) return -1; + if(current&&target.getSeatNum()<=current.getSeatNum()) return -att+draw/3; + return (4.25-draw)*10*Math.sqrt(Math.max(0.01,get.threaten(target)))+2*game.countPlayer()/dis; } - return 0; - } + }); "step 1" if(result.bool){ player.removeMark('renjie',1); @@ -5875,6 +5907,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(filter({name:'wuxie'},player,event)&&player.countCards('hes',{suit:'spade'})) return true; return false; }, + precontent:function(){ + delete event.result.skill; + player.logSkill('longhun'+(4-lib.suit.indexOf(get.suit(event.result.cards[0],player)))); + }, ai:{ respondSha:true, respondShan:true, @@ -7156,12 +7192,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ boss_zhaoyun_ab:'神赵云', boss_juejing:'绝境', boss_juejing2:'绝境', - boss_juejing_info:'锁定技,摸牌阶段开始前,你跳过此阶段。当你获得牌/失去手牌后,若你的手牌数大于4/小于4,则你将手牌摸至4张/弃置至4张。', + boss_juejing_info:'锁定技,摸牌阶段开始前,你跳过此阶段。当你得到牌/失去手牌后,若你的手牌数大于4/小于4,则你将手牌摸至4张/弃置至4张。', zhanjiang:'斩将', zhanjiang_info:'准备阶段开始时,如果其他角色的装备区内有【青釭剑】,你可以获得之', shen_guojia:'神郭嘉', shuishi:'慧识', - shuishi_info:'出牌阶段限一次,若你的体力上限小于10,则你可选择一名角色。你令其摸一张牌,若其以此法获得的牌:与该角色的其他手牌花色均不相同,则你加1点体力上限,若你的体力上限小于10,则你可以重复此流程;否则你减1点体力上限,且其展示所有手牌。', + shuishi_info:'出牌阶段限一次,若你的体力上限小于10,则你可选择一名角色。你令其摸一张牌,若其以此法得到的牌:与该角色的其他手牌花色均不相同,则你加1点体力上限,若你的体力上限小于10,则你可以重复此流程;否则你减1点体力上限,且其展示所有手牌。', stianyi:'天翊', stianyi_info:'觉醒技,准备阶段,若场上的所有存活角色均于本局游戏内受到过伤害,则你加2点体力上限并回复1点体力,然后令一名角色获得技能〖佐幸〗。', zuoxing:'佐幸', @@ -7195,7 +7231,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yingba:'英霸', yingba_info:'①出牌阶段限一次,你可令一名体力上限大于1的其他角色减少1点体力上限并获得“平定”标记,然后你减少1点体力上限。②你对拥有“平定”标记的角色使用牌没有距离限制。', scfuhai:'覆海', - scfuhai_info:'锁定技。①当你使用牌指定目标后,若目标角色有“平定”标记,则其不可响应此牌。若你本回合内以此法获得的牌数小于2,则你摸一张牌。②拥有“平定”标记的角色死亡时,你增加X点体力上限并摸X张牌。(X为其拥有的“平定”标记数)。', + scfuhai_info:'锁定技。①当你使用牌指定目标后,若目标角色有“平定”标记,则其不可响应此牌。若你本回合内以此法得到的牌数小于2,则你摸一张牌。②拥有“平定”标记的角色死亡时,你增加X点体力上限并摸X张牌。(X为其拥有的“平定”标记数)。', pinghe:'冯河', pinghe_info:'锁定技。①你的手牌上限基数等于你已损失的体力值。②当你受到其他角色造成的伤害时,若你有牌且你的体力上限大于1,则你防止此伤害,减一点体力上限并将一张手牌交给一名其他角色。然后若你拥有〖英霸〗,则伤害来源获得一个“平定”标记。', shen_jiangwei:'神姜维', @@ -7255,7 +7291,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ db_key_hina:'佐藤雏', hina_shenshi:'神视', hina_shenshi_yingbian:'神视', - hina_shenshi_info:'神势力技。出牌阶段开始时/结束时,你可摸两张牌,然后将其中一张牌置于牌堆顶。你以此法获得的牌视为拥有全部应变效果,且可以无条件发动。', + hina_shenshi_info:'神势力技。出牌阶段开始时/结束时,你可摸两张牌,然后将其中一张牌置于牌堆顶。你以此法得到的牌视为拥有全部应变效果,且可以无条件发动。', hina_xingzhi:'幸凪', hina_xingzhi_info:'键势力技。每回合限一次,你可以通过“助战”触发一张牌的全部应变效果,且响应助战的角色摸两张牌。', tw_shen_guanyu:'TW神关羽', diff --git a/character/gwent.js b/character/gwent.js index a74cad30c..585077e3c 100644 --- a/character/gwent.js +++ b/character/gwent.js @@ -4690,7 +4690,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fayin:'法印', fayin_info:'每当你使用一张杀,你可以弃置一张牌并获得一个随机法印效果:1. 目标随机弃置两张牌;2. 目标进入混乱状态直到下一回合开始;3. 对目标造成一点火属性伤害;4. 获得一点护甲;5. 令目标翻面并摸一张牌', gwbaquan:'霸权', - gwbaquan_info:'出牌阶段限一次,你可以获得一名其他角色的所有牌,然后还给其等量的牌,若你归还的牌均为你获得的牌且该角色体力值不小于你,你对其造成一点伤害', + gwbaquan_info:'出牌阶段限一次,你可以获得一名其他角色的所有牌,然后还给其等量的牌,若你归还的牌均为你得到的牌且该角色体力值不小于你,你对其造成一点伤害', hunmo:'魂墨', hunmo_info:'出牌阶段,若你手牌数少于2,你可以选择一名手牌数小于2的其他角色,观看牌堆顶的两张牌,你获得一张并交给其另一张;若你手牌数不少2,你可以选择一名手牌数不少于2的其他角色,你弃置一张手牌,然后观看并弃置其一张手牌。每回合对同一名角色最多发动一次', huihun:'回魂', diff --git a/character/huicui.js b/character/huicui.js index f86711965..af9274759 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -9,7 +9,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liuchongluojun:['male','qun',3,['dcminze','dcjini']], yuechen:['male','wei',4,['dcporui','dcgonghu']], zhangkai:['male','qun',4,['dcxiangshu']], - gaoxiang:['male','shu',4,['dcchiying'],['unseen']], + gaoxiang:['male','shu',4,['dcchiying']], yuanyin:['male','qun',3,['dcmoshou','dcyunjiu'],['unseen']], dongwan:['female','qun',3,['dcshengdu','dcjieling']], zhangchu:['female','qun',3,['dcjizhong','dcrihui','dcguangshi']], @@ -869,7 +869,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', filter:function(event,player){ - return !player.hasSkill('dcmoyu_ban'); + return !player.hasSkill('dcmoyu_ban')&&game.hasPlayer(current=>lib.skill.dcmoyu.filterTarget(null,player,current)); }, filterTarget:function(card,player,target){ return player!=target&&!player.getStorage('dcmoyu_clear').contains(target)&&target.countGainableCards(player,'hej'); @@ -1122,7 +1122,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, marktext:'绞', intro:{ - content:'下个摸牌阶段获得牌后,$摸等量的牌' + content:'下个摸牌阶段得到牌后,$摸等量的牌' } } } @@ -3043,7 +3043,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{target:'useCardToTargeted'}, forced:true, filter:function(event,player){ - return event.player!=player&&get.type2(event.card)=='trick'&&(event.targets.length==1||player.countCards('he')>0); + return get.type2(event.card)=='trick'&&(event.targets.length==1||player.countCards('he')>0); }, content:function(){ if(trigger.targets.length==1) player.draw(); @@ -4128,7 +4128,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.target=target; player.chooseBool( get.prompt('dcyingtu',target), - '获得该角色的一张牌,然后将一张牌交给该角色的对位角色。若你给出的是装备牌,则其使用其获得的牌。' + '获得该角色的一张牌,然后将一张牌交给该角色的对位角色。若你给出的是装备牌,则其使用其得到的牌。' ).set('goon',lib.skill.dcyingtu.checkx(player,target)).set('ai',function(){ return _status.event.goon; }); @@ -5453,39 +5453,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, liunian:{ audio:2, - trigger:{global:'washCard'}, + trigger:{global:'phaseEnd'}, forced:true, filter:function(event,player){ - return game.shuffleNumber<=2; + return game.hasGlobalHistory('cardMove',function(evt){ + return evt.washCard&&(evt.shuffleNumber==1||evt.shuffleNumber==2); + }); }, content:function(){ - if(game.shuffleNumber==1) player.addTempSkill('liunian_shuffle1'); - else player.addTempSkill('liunian_shuffle2'); - game.delayx(); + 'step 0' + if(game.hasGlobalHistory('cardMove',function(evt){ + return evt.washCard&&evt.shuffleNumber==1; + })){ + player.gainMaxHp(); + game.delayx(); + } + 'step 1' + if(game.hasGlobalHistory('cardMove',function(evt){ + return evt.washCard&&evt.shuffleNumber==2; + })){ + player.recover(); + game.delayx(); + } + else event.finish(); + 'step 2' + player.addSkill('liunian_effect'); + player.addMark('liunian_effect',10,false); }, subSkill:{ - shuffle1:{ - charlotte:true, - forced:true, - trigger:{global:'phaseEnd'}, - content:function(){ - player.gainMaxHp(); - game.delayx(); - }, - }, - shuffle2:{ - charlotte:true, - forced:true, - trigger:{global:'phaseEnd'}, - content:function(){ - 'step 0' - player.recover(); - game.delayx(); - 'step 1' - player.addSkill('liunian_effect'); - player.addMark('liunian_effect',10,false); - }, - }, effect:{ charlotte:true, mod:{ @@ -7518,7 +7513,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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 player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌','(已得到牌的点数和:'+numx+')',num); } else event.finish(); 'step 2' @@ -9347,13 +9342,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //乌巢酒仙 recangchu:{ audio:2, - trigger:{ - global:'gameStart', - player:'enterGame', - }, + trigger:{global:'phaseBefore',player:'enterGame'}, marktext:'粮', forced:true, filter:function(event,player){ + if(event.name=='phase'&&game.phaseNumber!=0) return false; return player.countMark('recangchu')傅佥[qiān] ( ? ~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅佥官至关中都督。魏国攻伐蜀汉时,傅佥和蒋舒防守阳安关,兵败战死。', + furongfuqian:'傅肜(?-222年),义阳(今湖北枣阳)人,三国时蜀汉将领。刘备攻伐吴国时,傅肜为别督。后刘备被陆逊击败,傅肜率部断后,奋战至死。死前怒斥道:“吴狗!何有汉将军降者!”
傅佥[qiān] ( ? ~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅佥官至关中都督。魏国攻伐蜀汉时,傅佥和蒋舒防守阳安关,兵败战死。', qinlang:'秦朗(生卒年不详),字元明,小字阿蘇(一作阿鳔),新兴(治今山西忻州)云中人。三国时期曹魏将领,官至骁骑将军、给事中,曾率兵讨伐鲜卑轲比能和步度根的叛军。', xianglang:'向朗(约167年—247年),字巨达。襄阳郡宜城县(今湖北宜城)人,三国时期蜀汉官员、藏书家、学者。向朗早年师从于司马徽,并被荆州牧刘表任命为临沮县长。后随刘备入蜀,历任巴西、牂牁、房陵太守,并拜步兵校尉,领丞相长史,随丞相诸葛亮北伐。因包庇马谡被免职,后为光禄勋,转左将军、特进,封显明亭侯。曾代理丞相册封张皇后及太子刘璿。晚年专心研究典籍,诱导青年学习,家中藏书丰富,受到举国尊重。延熙十年(247年),向朗去世。《全三国文》收录有一篇《遗言戒子》', yuantanyuanxiyuanshang:'袁谭袁尚介绍请移步「袁谭袁尚」,此处为袁熙的介绍。
袁熙(?-207年),字显奕(《后汉书》、《东光世系》作显雍),汝南郡汝阳县(今河南商水)人,是东汉末年占据河北的军阀袁绍次子,袁绍打败公孙瓒后,令袁熙为幽州刺史。袁绍官渡兵败后不久病死,其兄长袁谭、弟弟袁尚各自独立,互相攻伐,曹操趁机进攻袁谭、袁尚,并逐渐占河北。袁熙接纳兵败的袁尚后,因为属下叛变而逃往乌桓,被曹操击败后,逃往辽东太守公孙康帐下,却被公孙康杀死,二人首级被献给曹操。', @@ -9799,7 +9792,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuanyin:'袁胤(生卒年不详),东汉末期人物,据说是袁隗之子,是袁术从弟。兴平二年(公元195年)被袁术任命为丹杨太守,后因孙策平定江东被逐。建安四年(公元199年),袁术卒,袁胤因畏惧曹操,遂率领袁术部曲并带着其灵柩及妻子到皖城并投奔庐江太守刘勋。6个月后皖城被孙策所破,袁胤等人迁居吴郡,此后事迹不详。', gaoxiang:'高翔(又作高详、高祥)(生卒年不详),荆州南郡(治今湖北省公安县)人,三国时期蜀汉将领。曾随刘备攻打汉中,后又随蜀汉丞相诸葛亮参加北伐曹魏的战争。建兴九年(公元231年)的北伐中大破司马懿。官至杂号大将军(即某杂号将军加大,但无考何杂号将军),封玄乡侯。此后,关于高翔的记载不详。', zhoushan:'周善,《三国演义》中人物,不见于正史记载。为吴侯孙权的家将,此人最有胆量,自幼穿房入户,多随孙策。权为骗其妹回吴,遣善将五百人,扮为商人,分作五船;更诈修国书,以备盘诘;船内暗藏兵器。周善领命,往荆州。正骗得孙夫人带刘禅上船,赵云前来抢走禅,周善在后梢挟住舵,只顾放船下水。正僵持时张飞赶到,周善见张飞上船,提刀来迎,被张飞手起一剑砍倒,提头掷于孙夫人前。', - zhangkai:'张闿[kǎi],陶谦的手下都尉。奉命截杀曹操之父曹嵩,杀死曹嵩,夺去财宝逃往淮南投奔袁术,并担任刺杀陈王刘宠和陈国相骆俊的任务。', + zhangkai:'张闿,陶谦的手下都尉。奉命截杀曹操之父曹嵩,杀死曹嵩,夺去财宝逃往淮南投奔袁术,并担任刺杀陈王刘宠和陈国相骆俊的任务。', mengyou:'孟优,《三国演义》里的人物,南蛮王孟获之弟。与诸葛亮的南征军交战,向败战的兄长推荐朵思大王,劝兄长借助朵思之力与蜀汉军对抗。后来与兄长一起发誓归顺蜀汉。', liuchongluojun:'刘宠(?~197年),汉明帝刘庄玄孙,陈敬王刘羡曾孙,陈顷王刘崇之孙,陈孝王刘承之子,陈国第六位国君,也是东汉陈国的最后一位国君。骆俊(?-197),字孝远,东汉末年扬州会稽郡乌伤县(今浙江义乌)人。宗室陈王刘宠的国相,在任期间励精图治,深得民众爱戴。刘宠勇猛过人,善使弓弩,箭法高超。在其父刘承死后,继承陈王爵位。中平年间,黄巾军起义,郡县官兵都弃城逃走,刘宠于是征兵自守卫。当时天下饥荒,诸王侯都已不再享有租赋,反屡遭抢掠,有的甚至流离在外,死于荒野。只有陈国仍很富强,邻郡百姓纷纷前去投靠,陈国拥有部众达十余万人。初平元年(190年),各州郡起兵讨伐董卓,刘宠率军屯驻阳夏,自称辅汉大将军。建安二年(197年),袁术向陈国求取粮草,遭陈国国相骆俊拒绝,袁术大为生气,便派刺客张闿假装路过陈国,乘机杀死骆俊和刘宠。', yuechen:'乐綝(195~257年),字号不详,阳平郡卫国县(今河南省清丰县)人。三国时期曹魏将领,右将军乐进的儿子。果毅坚毅,袭封广昌亭侯,累迁扬州刺史。甘露二年,为叛乱的征东大将军诸葛诞所杀,追赠卫尉。', @@ -9863,7 +9856,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ recangchu:'仓储', recangchu2:'仓储', recangchu3:'仓储', - recangchu_info:'锁定技,游戏开始时,你获得3个“粮”。你的手牌上限+X(X为“粮”数)。当你于回合外获得牌时,你获得一个“粮”。(你的“粮”数不能超过存活角色数)', + recangchu_info:'锁定技,游戏开始时,你获得3个“粮”。你的手牌上限+X(X为“粮”数)。当你于回合外得到后时,你获得一个“粮”。(你的“粮”数不能超过存活角色数)', reliangying:'粮营', reliangying_info:'弃牌阶段开始时,你可以摸至多X张牌,然后交给等量的角色各一张牌。(X为你的“粮”数)', reshishou:'失守', @@ -10012,7 +10005,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jianliang:'简亮', jianliang_info:'摸牌阶段开始时,若你的手牌数不为全场最多,则你可以令至多两名角色各摸一张牌。', weimeng:'危盟', - weimeng_info:'出牌阶段限一次,你可以获得一名其他角色的至多X张手牌,然后交给其等量的牌(X为你的体力值)。若你给出的牌点数之和:大于获得的牌,则你摸一张牌;小于获得的牌,弃置该角色区域内的一张牌。', + weimeng_info:'出牌阶段限一次,你可以获得一名其他角色的至多X张手牌,然后交给其等量的牌(X为你的体力值)。若你给出的牌点数之和:大于得到的牌,则你摸一张牌;小于得到的牌,弃置该角色区域内的一张牌。', mamidi:'马日磾', bingjie:'秉节', bingjie_info:'出牌阶段开始时,你可减1点体力上限,然后当你于本阶段内使用【杀】或普通锦囊牌指定其他角色为目标后,其弃置一张牌。若其弃置的牌与你使用的牌颜色相同,其无法响应此牌。', @@ -10042,7 +10035,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xingchong:'幸宠', xingchong_info:'一轮游戏开始时,你可声明两个自然数X和Y,且(X+Y)≤min(5, 你的体力上限)。你摸X张牌并展示Y张手牌。若如此做,当你于本轮内失去一张以此法展示的牌后,你摸两张牌。', liunian:'流年', - liunian_info:'锁定技。牌堆第一次洗牌后,你于回合结束时加1点体力上限;牌堆第二次洗牌后,你于本回合结束时回复1点体力,且本局游戏内的手牌上限+10。', + liunian_info:'锁定技。回合结束时,若本回合内进行了本次游戏的第一次洗牌,则你加1点体力上限;若本回合内进行了本次游戏的第二次洗牌,则你于本回合结束时回复1点体力,且本局游戏内的手牌上限+10。', caimaozhangyun:'蔡瑁张允', lianzhou:'连舟', lianzhou_info:'锁定技。准备阶段,你横置你的武将牌。然后你可横置任意名体力值等于你的角色。', @@ -10064,7 +10057,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dczhubi_info:'当有♦牌因弃置而进入弃牌堆后,你可以令系统从牌堆/弃牌堆中检索一张【无中生有】,并将此牌置于牌堆顶。', dcliuzhuan:'流转', dcliuzhuan_tag:'转', - dcliuzhuan_info:'锁定技。①其他角色于其回合内不于摸牌阶段而获得的牌称为“转”。②你不能成为实体牌中包含“转”的牌的目标。③当有“转”直接进入弃牌堆或经由处理区进入弃牌堆后,你获得之。', + dcliuzhuan_info:'锁定技。①其他角色于其回合内不于摸牌阶段而得到的牌称为“转”。②你不能成为实体牌中包含“转”的牌的目标。③当有“转”直接进入弃牌堆或经由处理区进入弃牌堆后,你获得之。', huzhao:'胡昭', midu:'弥笃', midu_info:'出牌阶段限一次。你可以选择一项:⒈废除任意个装备栏或判定区,并令一名角色摸等量的牌。⒉恢复一个已经被废除的装备栏或判定区,然后你获得〖活墨〗直到下回合开始。', @@ -10092,7 +10085,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dctujue_info:'限定技。当你进入濒死状态时,你可以将所有牌交给一名其他角色。然后你回复等量的体力并摸等量的牌。', chengui:'陈珪', dcyingtu:'营图', - dcyingtu_info:'每回合限一次。当你的上家/下家于摸牌阶段外获得牌后,你可以获得其一张牌,然后将一张牌交给你的下家/上家。若你给出的牌为装备牌,则其使用之。', + dcyingtu_info:'每回合限一次。当你的上家/下家于摸牌阶段外得到牌后,你可以获得其一张牌,然后将一张牌交给你的下家/上家。若你给出的牌为装备牌,则其使用之。', dccongshi:'从势', dccongshi_info:'一名角色使用的装备牌结算结束后,若其装备区内的牌数为全场最多,则你摸一张牌。', wanglie:'王烈', @@ -10137,7 +10130,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcqinqing:'寝情', dcqinqing_info:'结束阶段,你可以弃置一名攻击范围内包含一号位的其他角色一张牌。然后若其手牌数大于一号位,你摸一张牌。', dccunwei:'存畏', - dccunwei_info:'锁定技。当你成为其他角色使用锦囊牌的目标后,若你是唯一目标,你摸一张牌;否则你弃置一张牌。', + dccunwei_info:'锁定技。当你成为锦囊牌的目标后,若你是唯一目标,你摸一张牌;否则你弃置一张牌。', dc_zhaotongzhaoguang:'赵统赵广', dcqingren:'青刃', dcqingren_info:'结束阶段,你可以摸X张牌(X为你本回合发动〖翊赞〗的次数)。', @@ -10155,7 +10148,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcyuguan_info:'一名角色的回合结束时,若你已损失的体力值为全场最多,你可以减1点体力上限,然后令X名角色将手牌摸至体力上限(X为你已损失的体力值)。', qinlang:'秦朗', dchaochong:'昊宠', - dchaochong_info:'当你使用牌后,你可以将手牌摸至或弃置至你的手牌上限数(至多摸五张)。然后若你以此法:获得牌,你的手牌上限-1;失去牌,你的手牌上限+1。', + dchaochong_info:'当你使用牌后,你可以将手牌摸至或弃置至你的手牌上限数(至多摸五张)。然后若你以此法:得到牌,你的手牌上限-1;失去牌,你的手牌上限+1。', dcjinjin:'矜谨', dcjinjin_info:'每回合限一次。当你造成或受到伤害后,你可以重置因〖昊宠〗增加或减少的手牌上限,令伤害来源弃置至多X张牌,然后你摸Y张牌(X为你以此法变化的手牌上限且至少为1,Y为X减其以此法弃置的牌数)。', xianglang:'向朗', @@ -10218,7 +10211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcguangshi_info:'锁定技。准备阶段,若所有其他角色均有“信众”,你失去1点体力并摸两张牌。', dongwan:'董绾', dcshengdu:'生妒', - dcshengdu_info:'回合开始时,你可以选择一名其他角色。当其于其的下个摸牌阶段获得牌后,你摸等量的牌。', + dcshengdu_info:'回合开始时,你可以选择一名其他角色。当其于其的下个摸牌阶段得到牌后,你摸等量的牌。', dcjieling:'介绫', dcjieling_info:'出牌阶段限一次。你可以将两张颜色不同的手牌当无距离限制且无任何次数限制的【杀】使用。然后若此【杀】:造成了伤害,所有目标角色失去1点体力;未造成伤害,你对所有目标角色依次发动一次〖生妒〗。', yuanyin:'袁胤', diff --git a/character/jsrg.js b/character/jsrg.js index dfc12d53d..8df419b25 100644 --- a/character/jsrg.js +++ b/character/jsrg.js @@ -855,13 +855,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:'chooseToUse', filter:function(event,player){ return player.isTurnedOver()&&game.hasPlayer(current=>{ - return current.hasSkill('jsrgzhangdeng'); + return current.hasSkill('jsrgzhangdeng')&¤t.isTurnedOver(); }); }, viewAs:{name:'jiu',isCard:true}, viewAsFilter:function(player){ return player.isTurnedOver()&&game.hasPlayer(current=>{ - return current.hasSkill('jsrgzhangdeng'); + return current.hasSkill('jsrgzhangdeng')&¤t.isTurnedOver(); }); }, filterCard:()=>false, @@ -869,7 +869,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ precontent:function(){ player.logSkill('jsrgzhangdeng_jiu'); var targets=game.filterPlayer(current=>{ - return current.hasSkill('jsrgzhangdeng'); + return current.hasSkill('jsrgzhangdeng')&¤t.isTurnedOver(); }); player.line(targets[0]); delete event.result.skill; @@ -1257,6 +1257,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ [listx,'vcard'], ]).set('ai',()=>Math.random()+1); } + event.list=list; 'step 1' if(result.bool){ var name=result.links[0][2],nature=result.links[0][3]; @@ -1273,7 +1274,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ prompt2:str, filterCard:lib.filter.cardDiscardable, position:'he', - goon:get.attitude(player,trigger.player)>1&&(evt.card?get.effect(trigger.player,evt.card,evt.player,player)<0:get.effect(trigger.player,{name:list[0]},trigger.player,player)>0), + goon:get.attitude(player,trigger.player)>1&&(evt.card?get.effect(trigger.player,evt.card,evt.player,player)<0:get.effect(trigger.player,{name:event.list[0]},trigger.player,player)>0), ai1:function(card){ if(_status.event.goon) return 6-get.value(card); return 0; @@ -2358,15 +2359,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, jsrgjuelie:{ audio:2, - trigger:{source:'damageBegin1'}, + trigger:{player:'useCardToPlayered'}, filter:function(event,player){ - return event.card&&event.card.name=='sha'&&event.getParent().type=='card'&&(player.isMinHandcard()||player.isMinHp()); + return player.countCards('he')&&event.card.name=='sha'; }, - forced:true, - locked:false, - group:'jsrgjuelie_discard', + direct:true, content:function(){ - trigger.num++; + 'step 0' + player.chooseToDiscard(get.prompt('jsrgjuelie',trigger.target),'当你使用【杀】指定一名角色为目标后,你可以弃置任意张牌,然后弃置其等量的牌',[1,Infinity],'he').set('ai',card=>{ + if(ui.selected.cards.length>=_status.event.max) return 0; + if(_status.event.goon) return 4.5-get.value(card); + return 0; + }).set('max',trigger.target.countDiscardableCards(player,'he')).set('goon',get.attitude(player,trigger.target)<0).set('logSkill',['jsrgjuelie_discard',trigger.target]); + 'step 1' + if(result.bool){ + var num=result.cards.length; + if(trigger.target.countDiscardableCards(player,'he')) player.discardPlayerCard('平讨:弃置'+get.translation(trigger.target)+get.cnNumber(num)+'张牌',num,'he',trigger.target,true); + } + else event.finish(); + 'step 2' + if(player.isMinHandcard()||player.isMinHp()){ + var id=trigger.target.playerid; + var map=trigger.getParent().customArgs; + if(!map[id]) map[id]={}; + if(typeof map[id].extraDamage!='number'){ + map[id].extraDamage=0; + } + map[id].extraDamage++; + } }, shaRelated:true, ai:{ @@ -2380,29 +2400,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); }, }, - subSkill:{ - discard:{ - audio:'jsrgjuelie', - trigger:{player:'useCardToPlayered'}, - filter:function(event,player){ - return player.countCards('he')&&event.card.name=='sha'; - }, - direct:true, - content:function(){ - 'step 0' - player.chooseToDiscard(get.prompt('jsrgjuelie',trigger.target),'当你使用【杀】指定一名角色为目标后,你可以弃置任意张牌,然后弃置其等量的牌',[1,Infinity],'he').set('ai',card=>{ - if(ui.selected.cards.length>=_status.event.max) return 0; - if(_status.event.goon) return 4.5-get.value(card); - return 0; - }).set('max',trigger.target.countDiscardableCards(player,'he')).set('goon',get.attitude(player,trigger.target)<0).set('logSkill',['jsrgjuelie_discard',trigger.target]); - 'step 1' - if(result.bool){ - var num=result.cards.length; - if(trigger.target.countDiscardableCards(player,'he')) player.discardPlayerCard('平讨:弃置'+get.translation(trigger.target)+get.cnNumber(num)+'张牌',num,'he',trigger.target,true); - } - } - } - } }, //皇甫嵩 jsrgguanhuo:{ @@ -3039,7 +3036,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:'zhaohan', trigger:{player:'phaseZhunbeiBegin'}, forced:true, - locked:false, + //locked:false, filter:function(event,player){ if(game.shuffleNumber==0) return player.isDamaged(); return true; @@ -3291,7 +3288,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.addTempSkill('jsrgfendi_blocker'); player.addTempSkill('jsrgfendi_gain'); if(!trigger.card.storage) trigger.card.storage={}; - trigger.card.storage.jsrgfendi=true; + trigger.card.storage.jsrgfendi=cards.slice(); player.storage.jsrgfendi_gain=target; } else player.storage.counttrigger.jsrgfendi--; @@ -3335,16 +3332,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, onremove:true, filter:function(event,player){ + if(!event.card||!event.card.storage) return false; + var cards=event.card.storage.jsrgfendi; var target=player.storage.jsrgfendi_gain; - return event.card&&event.card.storage&&event.card.storage.jsrgfendi&&target&&target.isIn()&&target.hasCard(card=>{ - return card.hasGaintag('jsrgfendi_tag'); - },'h'); + if(!cards||!target||!target.isIn()) return false; + var cardsx=target.getCards('h'); + cardsx.addArray(Array.from(ui.discardPile)); + return cards.some(i=>cardsx.contains(i)); + //target.hasCard(card=>{ + // return card.hasGaintag('jsrgfendi_tag'); + //},'h'); }, content:function(){ - player.logSkill('jsrgfendi_gain',player.storage.jsrgfendi_gain); - player.gain(player.storage.jsrgfendi_gain.getCards('h',card=>{ - return card.hasGaintag('jsrgfendi_tag'); - }),'give'); + var target=player.storage.jsrgfendi_gain; + player.logSkill('jsrgfendi_gain',target); + var cardsx=target.getCards('h'); + cardsx.addArray(Array.from(ui.discardPile)); + var cards=trigger.card.storage.jsrgfendi.filter(i=>cardsx.contains(i)); + player.gain(cards,'give'); } } } @@ -3735,7 +3740,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); if(!targets.length) event.finish(); else if(targets.length<=num) event._result={bool:true,targets:targets}; - else player.chooseTarget('令'+get.cnNumber(num)+'名角色获得“猎”标记',true,num,(card,player,target)=>{ + else player.chooseTarget('令'+(num>1?'至多':'')+get.cnNumber(num)+'名角色获得“猎”标记',true,[1,num],(card,player,target)=>{ return !target.hasMark('jsrgzhenglve_mark'); }).set('ai',target=>{ var att=get.attitude(_status.event.player,target); @@ -3852,12 +3857,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrgshoushu:{ audio:2, forced:true, - trigger:{global:'roundStart'}, + trigger:{ + player:'enterGame', + global:'phaseBefore', + }, filter:function(event,player){ - return !game.hasPlayer(function(current){ - return current.countCards('hejsx','taipingyaoshu'); - })&&!Array.from(ui.cardPile.childNodes).concat(Array.from(ui.discardPile.childNodes)) - .concat(Array.from(ui.ordering.childNodes)).map(i=>i.name).contains('taipingyaoshu'); + if(game.hasPlayer(function(current){ + return current.countCards('hej','taipingyaoshu'); + })) return false; + return event.name!='phase'||game.phaseNumber==0; }, direct:true, group:'jsrgshoushu_destroy', @@ -3958,7 +3966,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 2' var target=targets.shift(); - target.chooseToDiscard('寻道:请弃置一张牌'+(target==player?'':',可能被作为新判定牌'),'he',true).set('ai',target=>{ + target.chooseToDiscard('寻道:请弃置一张牌'+(target==player?'':',可能被作为新判定牌'),'he',true).set('ai',card=>{ var trigger=_status.event.getTrigger(); var player=_status.event.player; var judging=_status.event.judging; @@ -4109,7 +4117,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrgpingtao:'平讨', jsrgpingtao_info:'出牌阶段限一次。你可以令一名其他角色选择一项:1.交给你一张牌,然后你于此回合使用【杀】的次数上限+1;2.令你视为对其使用一张【杀】。', jsrgjuelie:'绝烈', - jsrgjuelie_info:'①当你造成渠道为【杀】的伤害时,若你的手牌数或体力值最小,此伤害+1。②当你使用【杀】指定一名角色为目标后,你可以弃置任意张牌,然后弃置其等量的牌。', + jsrgjuelie_info:'当你使用【杀】指定一名角色为目标后,你可以弃置任意张牌并弃置其等量的牌,然后若你的手牌数或体力值最小,此【杀】对其的伤害基数+1。', jsrg_huangfusong:'起皇甫嵩', jsrg_huangfusong_ab:'皇甫嵩', jsrgguanhuo:'观火', @@ -4137,7 +4145,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg_yangbiao:'起杨彪', jsrg_yangbiao_ab:'杨彪', jsrgzhaohan:'昭汉', - jsrgzhaohan_info:'准备阶段,若本局游戏:未洗过牌,你回复1点体力;洗过牌,你失去1点体力。', + jsrgzhaohan_info:'锁定技。准备阶段,若本局游戏:未洗过牌,你回复1点体力;洗过牌,你失去1点体力。', jsrgrangjie:'让节', jsrgrangjie_info:'当你受到1点伤害后,你可以移动场上的一张牌,然后你可以于弃牌堆中选择获得一张本回合进入弃牌堆且与此牌花色相同的牌。', jsrgyizheng:'义争', @@ -4147,14 +4155,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrglirang:'礼让', jsrglirang_info:'每轮限一次。其他角色的摸牌阶段开始时,你可以交给其两张牌。然后此回合的弃牌阶段结束时,你可以获得所有其于此阶段因弃置进入弃牌堆的牌。', jsrgzhengyi:'争义', - jsrgzhengyi_info:'当你每回合首次受到伤害时,本轮因〖礼让〗获得过牌的其他角色可以将此伤害转移给其。', + jsrgzhengyi_info:'当你每回合首次受到伤害时,本轮因〖礼让〗得到过牌的其他角色可以将此伤害转移给其。', jsrg_zhujun:'起朱儁', jsrg_zhujun_ab:'朱儁', jsrgfendi:'分敌', jsrgfendi_tag:'分敌', - jsrgfendi_info:'每回合限一次。当你使用【杀】指定唯一目标后,你可以展示其任意张手牌,令其不能使用或打出对应实体牌不全为这些牌的牌直到此【杀】结算结束。然后当此【杀】对其造成伤害后,你获得这些牌。', + jsrgfendi_info:'每回合限一次。当你使用【杀】指定唯一目标后,你可以展示其任意张手牌,令其不能使用或打出对应实体牌不全为这些牌的牌直到此【杀】结算结束。然后当此【杀】对其造成伤害后,你于其手牌区或弃牌堆获得这些牌。', jsrgjuxiang:'拒降', - jsrgjuxiang_info:'当你不于摸牌阶段获得牌后,你可以弃置之,令当前回合角色于此回合额定的出牌阶段内使用【杀】的次数上限+X(X为你以此法弃置的牌的花色数)。', + jsrgjuxiang_info:'当你不于摸牌阶段得到牌后,你可以弃置之,令当前回合角色于此回合额定的出牌阶段内使用【杀】的次数上限+X(X为你以此法弃置的牌的花色数)。', jsrg_liubei:'起刘备', jsrg_liubei_ab:'刘备', jsrgjishan:'积善', @@ -4170,13 +4178,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg_liuyan:'起刘焉', jsrg_liuyan_ab:'刘焉', jsrgtushe:'图射', - jsrgtushe_info:'当你使用非装备牌指定目标后,你可以展示所有手牌。若你没有基本牌,你可以摸X张牌(X为此牌指定的目标数)。', + jsrgtushe_info:'当你使用非装备牌指定目标后,你可以展示所有手牌(无牌则不展示)。若你没有基本牌,你可以摸X张牌(X为此牌指定的目标数)。', jsrgtongjue:'通绝', jsrgtongjue_info:'主公技。出牌阶段限一次。你可以将任意张牌交给等量名其他群势力角色。然后你不能使用牌指定这些角色为目标直到回合结束。', jsrg_caocao:'起曹操', jsrg_caocao_ab:'曹操', jsrgzhenglve:'政略', - jsrgzhenglve_info:'①主公的回合结束时,你可以摸一张牌,然后令一名没有“猎”标记的角色获得“猎”(若主公本回合没有造成过伤害,则改为两名)。②你对有“猎”的角色使用牌无距离和次数限制。③每回合限一次。当你对有“猎”的角色造成伤害后,你可以摸一张牌并获得造成此伤害的牌。', + jsrgzhenglve_info:'①主公的回合结束时,你可以摸一张牌,然后令一名没有“猎”标记的角色获得“猎”(若主公本回合没有造成过伤害,则改为至多两名)。②你对有“猎”的角色使用牌无距离和次数限制。③每回合限一次。当你对有“猎”的角色造成伤害后,你可以摸一张牌并获得造成此伤害的牌。', jsrghuilie:'会猎', jsrghuilie_info:'觉醒技。准备阶段,若有“猎”的角色数大于2,你减1点体力上限,然后获得〖平戎〗和〖飞影〗。', jsrgpingrong:'平戎', @@ -4184,7 +4192,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg_nanhualaoxian:'起南华老仙', jsrg_nanhualaoxian_ab:'南华老仙', jsrgshoushu:'授术', - jsrgshoushu_info:'锁定技。①每轮开始时,若游戏内没有【太平要术】,你可以从游戏外将【太平要术】置于一名角色的装备区内。②当【太平要术】离开一名角色的装备区后,你令此牌销毁。', + jsrgshoushu_info:'锁定技。①游戏开始时,若场上没有【太平要术】,你可以从游戏外将【太平要术】置于一名角色的装备区内。②当【太平要术】离开一名角色的装备区后,你令此牌销毁。', jsrgxundao:'寻道', jsrgxundao_info:'当你的判定牌生效前,你可以令至多两名角色依次弃置一张牌,然后你选择一张以此法弃置且位于弃牌堆中的牌代替此判定牌。', jsrglinghua:'灵化', @@ -4229,7 +4237,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg_zoushi:'承邹氏', jsrg_zoushi_ab:'邹氏', jsrgguyin:'孤吟', - jsrgguyin_info:'准备阶段,你可以翻面,且令所有其他男性角色依次选择是否翻面。然后你和所有背面朝上的角色轮流各摸一张牌,直到你们累计以此法获得X张牌(X为场上存活角色与死亡角色中男性角色数)。', + jsrgguyin_info:'准备阶段,你可以翻面,且令所有其他男性角色依次选择是否翻面。然后你和所有背面朝上的角色轮流各摸一张牌,直到你们累计以此法得到X张牌(X为场上存活角色与死亡角色中男性角色数)。', jsrgzhangdeng:'帐灯', jsrgzhangdeng_info:'①当一名武将牌背面朝上的角色需要使用【酒】时,若你的武将牌背面朝上,其可以视为使用之。②当一名角色于一回合第二次发动〖帐灯①〗时,你将武将牌翻面至正面朝上。', jsrg_guanyu:'承关羽', @@ -4265,7 +4273,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jsrg_chunyuqiong:'承淳于琼', jsrg_chunyuqiong_ab:'淳于琼', jsrgcangchu:'仓储', - jsrgcangchu_info:'一名角色的结束阶段,你可以令至多X名角色各摸一张牌,若X大于存活角色数,则改为各摸两张牌(X为你于此回合获得过的牌数)。', + jsrgcangchu_info:'一名角色的结束阶段,你可以令至多X名角色各摸一张牌,若X大于存活角色数,则改为各摸两张牌(X为你于此回合得到的牌数)。', jsrgshishou:'失守', jsrgshishou_info:'锁定技。①当你使用【酒】时,你摸三张牌,然后你本回合不能再使用牌。②当你受到火焰伤害后,你令〖仓储〗失效直到你的下回合结束后。', diff --git a/character/mobile.js b/character/mobile.js index 263ba72d9..91d244629 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -26,8 +26,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ - xin_guozhao:['female','wei',3,['yichong','wufei'],['unseen']], - xin_zhangyi:['male','shu',4,['xinwurong','shizhi'],['unseen']], + xin_guozhao:['female','wei',3,['yichong','wufei']], + xin_zhangyi:['male','shu',4,['xinwurong','shizhi']], xin_sunliang:['male','wu',3,['xinzhizheng','xinkuizhu','xinlijun'],['zhu']], re_xiaoqiao:['female','wu',3,['retianxiang','xinhongyan']], shichangshi:['male','qun',1,['mbdanggu','mbmowang']], @@ -169,13 +169,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunzhang:'孙璋(?-189年?)东汉末期汉灵帝的宦官,官居中常侍,为十常侍之一,在张让、赵忠之下位居第三。光熹元年(189年),张让、赵忠、段珪等诛杀何进,袁绍率军入宫,诛杀孙璋。', bilan:'毕岚(?—189),东汉宦官,十常侍之一。十常侍朋比为奸,祸乱朝纲,制造出党锢之祸,后被袁绍诛杀。另外,毕岚曾制造翻车,用于取河水洒路。', xiayun:'夏恽(?—189),东汉宦官,十常侍之一。后被袁绍、曹操诛于翠花楼前。', - hankui:'韩悝[kuī](?—189),东汉宦官,十常侍之一。后被袁绍所诛。', + hankui:'韩悝(?—189),东汉宦官,十常侍之一。后被袁绍所诛。', lisong:'栗嵩,东汉宦官,十常侍之一,与张让等人均一同任职中常侍。', duangui:'段珪(?—189),东汉宦官,十常侍之一。段珪与张让、赵忠等人朋比为奸,党同伐异,横征暴敛,卖官鬻爵,引起了以何进为首的外戚集团的不满。何进谋诛宦官,却不纳曹操、陈琳之谏,多结外镇军阀,翘首京师,与袁绍等谋诛宦竖。终于事泄,被宦官集团查知。张让、段珪等人先下手为强,斩杀何进于嘉德殿前,却也引起了京师的变乱。袁绍等人趁机带兵冲入皇宫,大肆诛杀太监。洛阳卫军变乱后,段珪与张让等人劫持少帝刘辩、陈留王刘协出逃,后被杀。', guosheng:'郭胜,南阳宛(今河南南阳)人。汉灵帝时为中常侍,与张让、赵忠等狼狈为奸,并皆封侯。曾助同乡何进、何太后贵幸。后被袁绍等人率兵诛灭。', gaowang:'高望(?~189年),京兆人,东汉宦官,十常侍之一,为小黄门兼任尚药监,颇得皇子刘辩的信任。中平六年(189年),张让等人杀害大将军何进,袁绍与王匡等人率兵杀入雒阳端门,在承明堂上斩杀中常侍高望。', qianzhao:'牵招(?—231年),字子经,安平郡观津县(今河北省武邑县)人。三国时期曹魏名将。牵招早年师从乐隐,与刘备成为刎颈之交。投靠冀州牧袁绍,担任冀州从事,统领乌丸突骑。袁绍死后,跟随冀州刺史袁尚,受到并州牧高干加害,投奔丞相曹操,授军谋掾。从平乌丸,出任护乌丸校尉。举茂才出身,从平汉中,授中护军。拜平虏校尉,平定东莱郡叛乱。魏文帝曹丕时期,授护鲜卑校尉,驻扎昌平,迁右中郎将、雁门太守,遏制鲜卑轲比能发展壮大。魏明帝即位,赐爵关内侯,营救护乌丸校尉田豫。太和五年,去世。', - fuqian:'傅佥[qiān] ( ? ~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅佥官至关中都督。魏国攻伐蜀汉时,傅佥和蒋舒防守阳安关,兵败战死。', + fuqian:'傅佥(?~263年),义阳(治今湖北省枣阳市)人,蜀汉将领傅彤之子,三国时期蜀汉名将。金长于谋略,并颇有胆勇,姜维甚爱之。傅佥官至关中都督。魏国攻伐蜀汉时,傅佥和蒋舒防守阳安关,兵败战死。', wangjun:'王濬(207年~286年),字士治,小名阿童,弘农郡湖县(今河南省灵宝市阌乡)人。西晋时期名将。王濬出身世家,博学多闻,容颜英俊,多谋善战。举秀才出身,起家河东郡从事。泰始八年(272年),担任广汉太守,平定益州叛乱,迁益州刺史。利用长江上游地势之利,修造战船,组建强大的水军。上书晋武帝,促成晋灭吴之战。咸宁六年(280年),率兵顺流而下,熔毁横江铁链,攻克丹阳郡,率先攻取石头城,接受吴末帝孙皓投降,完成西晋统一大业。凭借功勋,拜辅国将军、步兵校尉,册封襄阳侯。为避猜忌,纵情享受,累迁特进、抚军大将军、开府仪同三司、散骑常侍、后军将军等。太康六年十二月(286年1月18日),王濬去世,享年八十岁,谥号为“武”,安葬于柏谷山。', yangfu:'杨阜(172年—244年),字义山,汉天水冀县(今甘谷县东南)人。三国时期曹魏名臣。汉献帝建安初年,任凉州从事,旋拜安定长史;韦康任刺史后辟为别驾,改任州参军;后因讨马超有功,赐爵关内侯。曹操征汉中时,杨阜担任益州刺史,回来后又担任武都太守。魏明帝时,由将作大匠改少府。杨阜不但卓识远见,而且刚正不阿,敢于直言,对朝廷弊政多有诤谏,六次进言谏魏明帝应勤政爱民,魏明帝对他颇有敬畏之心。杨阜勤政廉洁,在宫内担任少府时,专管宝器、珍膳、衣物等,而他死后则家无馀财。皇帝让杨阜的孙子杨豹继任了少府之职。原甘谷县文昌宫西侧有杨氏家祠,内悬“两代尚书”匾额。', ruanhui:'阮氏女,是指三国时期曹魏名士许允之妻阮氏,陈留尉氏人。阮氏女是中国古代四大丑女之一,貌丑而见识非凡。她出身士族之家,是卫尉阮共(字伯彦)之女、阮侃(字德如)之妹。嫁与许允后生有二子:许奇,官至司隶校尉;许猛,官至幽州刺史。', @@ -186,7 +186,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanpu:'阎圃,生卒年不详,是益州巴西安汉(今四川省南充市)人。张鲁割据巴、汉,就以阎圃为功曹。东汉末年人物,本为张鲁部下谋士,后随张鲁一同投降曹操,封平乐乡侯。', mayuanyi:'马元义(?—184年6月7日),东汉末年黄巾之乱的组织者之一,是黄巾大方首领。光和六年(183年),马元义奉黄巾军首领张角之命,筹划起事的准备工作。马元义聚集荆州、扬州信徒数万人约定于邺城相会,并收买中常侍封谞、徐奉等为内应,准备于次年(甲子年)三月初五(戊申日)内外同时起事。由于张角弟子济南人唐周的告密,马元义于于中平元年(184年)正月在河内郡山阳县被捕,送往洛阳车裂,同时被杀的还有教众近千人。由于马元义的被杀,迫使张角提前于二月起兵发动叛乱。', simafu:'司马孚(180年-272年4月3日),字叔达。河内郡温县(今河南温县)人。三国曹魏至西晋初年重臣,西晋宗室,东汉京兆尹司马防第三子,晋宣帝司马懿之弟。自曹操时代起,司马孚就任文学掾,而后历仕魏国五代皇帝,累迁至太傅。司马孚在“高平陵事变”之际,协助司马懿控制京师,诛杀曹爽一党。后又督军成功防御吴、蜀的进攻,为司马氏政权的稳固多有功劳。但他性格十分谨慎,自司马懿执掌大权起,便逐渐引退,更未直接参与司马氏废立魏帝的谋划。西晋代魏后,司马孚进拜太宰,封安平王。晋武帝司马炎对他十分尊宠,但他并不以此为荣,至死仍以魏臣自称。泰始八年二月壬辰日(272年4月3日),司马孚去世,年九十三。武帝为其举哀三日,葬礼规格比照东汉东平献王刘苍,赐谥献王。', - sunchen:'孙綝(chēn)(231年-259年1月18日),字子通,吴郡富春(今浙江杭州市富阳区)人。三国时期吴国宗室、权臣,昭义中郎将孙静曾孙、定武中郎将孙暠之孙、安民都尉孙绰的儿子。门荫入仕,初任偏将军。太平元年(256年),升任侍中、武卫将军、都督中外诸军事。掌权以后,诛杀大司马滕胤、骠骑将军吕据等重臣,升任大将军,册封永宁县侯。嗜好杀戮,与皇帝孙亮的矛盾激化,最终废黜孙亮,拥立琅琊王孙休即位,累迁丞相、荆州牧。永安元年十二月(259年1月),在左将军张布的协助下,遭到皇帝孙休捕杀,时年二十八岁,削除宗籍,改姓故氏。', + sunchen:'孙綝(231年-259年1月18日),字子通,吴郡富春(今浙江杭州市富阳区)人。三国时期吴国宗室、权臣,昭义中郎将孙静曾孙、定武中郎将孙暠之孙、安民都尉孙绰的儿子。门荫入仕,初任偏将军。太平元年(256年),升任侍中、武卫将军、都督中外诸军事。掌权以后,诛杀大司马滕胤、骠骑将军吕据等重臣,升任大将军,册封永宁县侯。嗜好杀戮,与皇帝孙亮的矛盾激化,最终废黜孙亮,拥立琅琊王孙休即位,累迁丞相、荆州牧。永安元年十二月(259年1月),在左将军张布的协助下,遭到皇帝孙休捕杀,时年二十八岁,削除宗籍,改姓故氏。', qiaozhou:'谯周(201年-270年),字允南,巴西郡西充国县(今四川西充县槐树镇)人。三国时期蜀汉大臣、学者、儒学家、史学家。幼年丧父,少读典籍,精研六经,颇晓天文,成为蜀地大儒之一,门下有陈寿、罗宪等学生。诸葛亮担任益州牧时,授劝学从事。诸葛亮死后,不顾朝令,前往奔丧。后主刘禅册立太子时,授太子仆,迁太子家令、光禄大夫。反对姜维北伐,著《仇国论》,力陈北伐之失。炎兴元年(263年),邓艾攻打成都时期,力劝刘禅投降,“有全国之功”,投降魏国后,受封阳城亭侯,迁骑都尉。泰始六年(270年),授散骑常侍,同年去世,时年七十岁。', gongsunkang:'公孙康(生卒年不详),辽东襄平(今辽宁辽阳)人。东汉末年辽东地区割据军阀,辽东太守公孙度长子(一作庶子)、车骑将军公孙恭之兄。公孙康在其父死后继任辽东太守。建安十二年(207年),擒斩图谋不轨的袁尚、袁熙兄弟,将其首级献予曹操,被拜为左将军,封襄平侯。建安十四年(209年),公孙康大破高句丽,陷其国都,并讨伐韩濊,设置带方郡。死后因二子年幼,由公孙恭继任。曹丕称帝后,被追赠为大司马。', zhouqun:'周群(生卒年不详),字仲直,巴西阆中(今四川阆中)人。周群年少时随父周舒学习占验天算之术。后来刘璋聘请周群为师友从事,其预言大多得以应验。刘备割据益州,任命周群为儒林校尉。曾劝说刘备攻汉中必定不利,事后得到应验,被举荐为茂才。', @@ -198,7 +198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ simashi:'司马师(208年~255年3月23日),字子元,河内温县(今河南省温县)人。三国时期曹魏权臣,西晋王朝的奠基人之一,晋宣帝司马懿与宣穆皇后张春华的长子,晋文帝司马昭的同母兄,晋武帝司马炎的伯父。司马师沉着坚强,雄才大略,早年与夏侯玄、何晏齐名。高平陵政变后,以功封长平乡侯,旋加卫将军。司马懿死后,以抚军大将军辅政,独揽朝廷大权,次年升为大将军。掌权后,他制定选拔官吏的法规,命百官推荐贤才,整顿纲纪,使其各有职掌,朝野肃然。司马师也有卓越的军事才能,曾用计于新城之战击溃吴国诸葛恪的大军。嘉平六年(254年),魏帝曹芳与中书令李丰等人密谋除司马师,事情泄露,司马师杀死参与者,迫郭太后废曹芳,改立高贵乡公曹髦为帝。次年,亲自率兵平定毌丘俭、文钦之乱。回师途中病死,时年四十八岁,谥号“忠武”。后被追尊为晋景王。西晋建立后,被追尊为景皇帝,庙号世宗。', yanghuiyu:'羊徽瑜(214年-278年),泰山南城(今山东新泰)人,晋景帝司马师第三任妻子。羊徽瑜出身官宦世家泰山羊氏,她是南阳太守羊续的孙女,上党太守羊衜之女;其母为东汉名士左中郎将蔡邕之女、蔡文姬的姐妹。羊徽瑜聪慧贤德,嫁给司马师后未有子女。以司马师之弟司马昭的次子司马攸为继子。司马师死后,司马攸侍奉羊徽瑜非常孝顺。泰始元年(265年),司马昭长子司马炎受禅登基,建立西晋,追谥伯父司马师为景皇帝。泰始二年(266年),尊奉羊徽瑜为景皇后,因居弘训宫,故称弘训太后。咸宁四年(278年),羊徽瑜去世,时年六十五岁,谥号景献皇后,与司马师合葬峻平陵。', dingyuan:'丁原(?—189年),字建阳,兖州泰山郡南城县(山东省平邑县郑城镇)人。东汉末年军阀,官拜执金吾、并州刺史。任并州刺史期间,他亲近、善待主簿吕布,又调遣部下张杨、张辽等名将到洛阳任职。汉灵帝驾崩后,带兵进入洛阳,担任执金吾,并与大将军何进谋划诛杀十常侍,但不久事情败露,何进被宦官杀死。在宦官被诛灭之后,丁原与军阀董卓在废帝问题上意见不合产生矛盾,于是董卓诱使吕布将其杀害,其势力亦被吞并。', - furong:'傅肜(róng)(?-222年),义阳(今湖北枣阳)人,三国时蜀汉将领。刘备攻伐吴国时,傅肜为别督。后刘备被陆逊击败,傅肜率部断后,奋战至死。死前怒斥道:“吴狗!何有汉将军降者!”', + furong:'傅肜(?-222年),义阳(今湖北枣阳)人,三国时蜀汉将领。刘备攻伐吴国时,傅肜为别督。后刘备被陆逊击败,傅肜率部断后,奋战至死。死前怒斥道:“吴狗!何有汉将军降者!”', zhengxuan:'郑玄(127年-200年),字康成。北海郡高密县(今山东省高密市)人。东汉末年儒家学者、经学大师。郑玄曾入太学攻《京氏易》、《公羊春秋》及《三统历》、《九章算术》,又从张恭祖学《古文尚书》、《周礼》和《左传》等,最后从马融学古文经。游学归里之后,复客耕东莱,聚徒授课,弟子达数千人,家贫好学,终为大儒。党锢之祸起,遭禁锢,杜门注疏,潜心著述。晚年守节不仕,却遭逼迫从军,最终病逝于元城,年七十四。郑玄治学以古文经学为主,兼采今文经学。他遍注儒家经典,以毕生精力整理古代文化遗产,使经学进入了一个“小统一时代”。著有《天文七政论》、《中侯》等书,共百万余言,世称“郑学”,为汉代经学的集大成者。唐贞观年间,列郑玄于二十二“先师”之列,配享孔庙。宋代时被追封为高密伯。后人建有郑公祠以纪念。', dengzhi:'邓芝(178年-251年),字伯苗。义阳郡新野县(今河南新野)人。东汉名将邓禹之后,三国时期蜀汉重臣。邓芝早年曾被预言能位至大将,后被刘备任为郫令,升迁为广汉太守。因任官公廉且有治绩,被征入朝为尚书。刘备逝世后,奉命出使吴国,成功修复两国关系,并深为吴大帝孙权所赏识。建兴六年(228年),丞相诸葛亮策划北伐,命邓芝与大将赵云佯攻郿城,以吸引魏国曹真军主力。建兴十二年(234年),迁前军师、前将军,领兖州刺史,封阳武亭侯,不久督领江州。延熙六年(243年),迁车骑将军,后授假节。又率军平定涪陵叛乱。延熙十四年(251年),邓芝病逝。邓芝性格正直、简单,不刻意修饰情绪。他为将二十多年,赏罚明断,体恤士卒。身上的衣食取自官府,从未经营过私产,妻儿甚至还有忍饥挨饿之时,死时家中也没有多余财物。', yangyi:'杨仪(?-235年),字威公,襄阳(今湖北襄阳)人,三国时期蜀汉官员。最初为荆州刺史傅群的主簿,后投奔关羽,任为功曹。关羽遣其至成都,大受刘备赞赏,擢为尚书。因与尚书令刘巴不和,调为弘农太守。建兴三年(225年)任丞相参军,此后一直跟随诸葛亮战斗。亮卒,他部署安全退军。诸葛亮在生前定蒋琬继己任,杨仪仅拜中军师。建兴十三年(235年),因多出怨言,被削职流放至汉嘉郡。但杨仪仍不自省,又上书诽谤,言辞激烈,最后下狱,自杀身亡。', @@ -262,23 +262,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //cardimage:"baiyin", type:"equip", subtype:"equip2", - filterLose:function(card,player){ - if(player.hasSkillTag('unequip2')) return false; - return true; - }, loseDelay:false, onLose:function(){ - var next=game.createEvent('rewrite_baiyin_recover'); - event.next.remove(next); - var evt=event.getParent(); - if(evt.getlx===false) evt=evt.getParent(); - evt.after.push(next); - next.player=player; - next.setContent(function(){ - player.logSkill('rw_baiyin_skill'); - player.draw(2); - player.recover(); - }); + player.addTempSkill('rw_baiyin_skill_lose') }, skills:["rw_baiyin_skill"], tag:{ @@ -419,7 +405,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ direct:true, content:function(){ 'step 0' - player.chooseTarget(get.prompt('meihun'),'选择一名其他角色并选择一个花色,获得其此花色的所有牌并令其获得“雀”标记',lib.filter.notMe).set('ai',function(target){ + player.chooseTarget(get.prompt('yichong'),'选择一名其他角色并选择一个花色,获得其此花色的所有牌并令其获得“雀”标记',lib.filter.notMe).set('ai',function(target){ var player=_status.event.player; var att=get.attitude(player,target); if(att>0) return 0; @@ -467,7 +453,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addTempSkill('yichong_clear',{player:'phaseBegin'}); }, onremove:true, - intro:{content:'拥有“雀”标记的角色获得$牌后,你获得之'}, + intro:{content:'拥有“雀”标记的角色得到$牌后,你获得之'}, group:'yichong_gain', subSkill:{ gain:{ @@ -2332,10 +2318,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,(num>0?'获得了':'减少了')+get.cnNumber(Math.abs(num))+'点“达命”值'); }, content:function(){ - lib.skill.spdaming.change(player,2); + lib.skill.spdaming.change(player,1); }, intro:{ name:'达命值', + markcount:function(storage,player){ + return (storage||0).toString(); + }, content:'当前有#点“达命”值', }, subSkill:{ @@ -5290,7 +5279,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return event.card.name!='jiu'&&event.card.name!='tao'&& event.targets.length==1&&event.card.isCard&&event.cards.length==1&&event.getParent(2).name!='jueyong_timeout'&& get.position(event.cards[0],true)=='o'&&event.card.name==event.cards[0].name&& - (!player.storage.jueyong||player.storage.jueyong[0].length0; + return event.getg(player).length&&event.getParent('phaseDraw').player!=player&&player.countCards('he')>0; }, content:function(){ 'step 0' @@ -11576,6 +11568,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "rw_baiyin_skill":{ inherit:"baiyin_skill", audio:true, + subSkill:{ + lose:{ + audio:'rw_baiyin_skill', + forced:true, + charlotte:true, + equipSkill:true, + trigger:{ + player:'loseAfter', + global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], + }, + filter:(event,player)=>{ + if(player.hasSkillTag('unequip2')) return false; + var evt=event.getl(player); + return evt&&evt.es.some(card=>card.name=='rewrite_baiyin') + }, + content:function(){ + var evt=trigger.getl(player); + evt.es.forEach(card=>{ + if(card.name=='rewrite_baiyin'){ + player.recover(); + player.draw(2); + } + }) + }, + }, + }, }, "rw_lanyinjia":{ inherit:"lanyinjia", @@ -13658,7 +13676,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xin_xiahoudun:'手杀夏侯惇', xinqingjian:'清俭', xinqingjian2:'清俭', - xinqingjian_info:'每回合限一次。当你不因摸牌阶段的额定摸牌而获得牌时,你可以将任意张牌扣置于武将牌上。回合结束时,你将这些牌交给一名其他角色。若这些牌的数量大于1,你摸一张牌。', + xinqingjian_info:'每回合限一次。当你不因摸牌阶段的额定摸牌而得到牌后,你可以将任意张牌扣置于武将牌上。回合结束时,你将这些牌交给一名其他角色。若这些牌的数量大于1,你摸一张牌。', zhangyì:'张翼', jiakui:'贾逵', zhiyi:'执义', @@ -13720,7 +13738,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refuhai:'浮海', refuhai_info:'出牌阶段限一次,你可令其他角色同时在「潮起」和「潮落」中选择一项,并依次展示这些角色的选项。若从你下家开始选择了相同选项的角色数目大于1,则你摸X张牌(X为连续相同结果的数量)。', qiaosi:'巧思', - qiaosi_info:'出牌阶段限一次,你可以表演「大键角色图」并根据表演结果获得相应的牌。然后,你选择一项:1.弃置X张牌。2.将X张牌交给一名其他角色。(X为你以此法获得的牌数)', + qiaosi_info:'出牌阶段限一次,你可以表演「大键角色图」并根据表演结果获得相应的牌。然后,你选择一项:1.弃置X张牌。2.将X张牌交给一名其他角色。(X为你以此法得到的牌数)', qiaosi_map:'大键角色图', qiaosi_map_info:'
  • 星野 梦美:锦囊牌*2
  • 能美 库特莉亚芙卡:装备牌/【杀】/【酒】*1
  • 友利 奈绪:【杀】/【酒】*1
  • 神尾 观铃:【闪】/【桃】*1
  • 伊吹 风子:锦囊牌/【闪】/【桃】*1
  • 仲村 由理:装备牌*2
  • Illustration:うら;Twitter:@ura530', qiaosi_c1:' ', @@ -13878,7 +13896,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_liubiao:'手杀刘表', hucheer:'手杀胡车儿', daoji:'盗戟', - daoji_info:'出牌阶段限一次,你可以弃置一张非基本牌并选择一名装备区里有牌的其他角色,你获得其装备区中的一张牌并使用之。若你以此法获得的牌是武器牌,则你使用此牌后对其造成1点伤害。', + daoji_info:'出牌阶段限一次,你可以弃置一张非基本牌并选择一名装备区里有牌的其他角色,你获得其装备区中的一张牌并使用之。若你以此法得到的牌是武器牌,则你使用此牌后对其造成1点伤害。', xin_hansui:'手杀韩遂', xinniluan:'逆乱', xinniluan_info:'其他角色的结束阶段,若其本回合对除其以外的角色使用过牌,则你可以对其使用一张【杀】。若以此法使用的【杀】造成伤害,则你弃置其一张牌。', @@ -13945,7 +13963,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rejieyue_info:'结束阶段开始时,你可以将一张牌交给一名其他角色。然后其选择一项:令你摸三张牌:或其保留一张手牌和装备区的牌,然后弃置其余的牌。', xin_zhoucang:'手杀周仓', mobilezhongyong:'忠勇', - mobilezhongyong_info:'当你于出牌阶段内使用的【杀】结算结束后,若没有目标角色使用【闪】响应过此【杀】,则你可获得此【杀】;否则你可选择一项:①获得目标角色使用的【闪】,然后可将此【杀】交给另一名其他角色。②将目标角色使用的【闪】交给另一名其他角色,然后你本回合使用【杀】的次数上限+1且下一张【杀】的伤害值基数+1。(你不能使用本回合因执行〖忠勇〗的效果获得的牌)', + mobilezhongyong_info:'当你于出牌阶段内使用的【杀】结算结束后,若没有目标角色使用【闪】响应过此【杀】,则你可获得此【杀】;否则你可选择一项:①获得目标角色使用的【闪】,然后可将此【杀】交给另一名其他角色。②将目标角色使用的【闪】交给另一名其他角色,然后你本回合使用【杀】的次数上限+1且下一张【杀】的伤害值基数+1。(你不能使用本回合因执行〖忠勇〗的效果得到的牌)', xin_caifuren:'手杀蔡夫人', xinqieting:'窃听', xinqieting_info:'其他角色的回合结束时,若其本回合内未对其他角色造成过伤害,则你可选择一项:①摸一张牌。②观看其两张手牌并获得其中的一张。③将其装备区内的一张牌移动至你的装备区。', @@ -13974,7 +13992,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ discretesidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶<a,b>(b对其他角色不可见)。②一名角色a使用不为延时锦囊牌的牌指定b为目标时,若(aRb)∧(此牌目标数为1)为真,则{你从R内移除<a,b>,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,然后若场上没有处于濒死状态的角色,则你对a造成1点伤害。⒉摸两张牌};否则{你清除R内以a为第一元素的二元序偶}。', fuqian:'傅佥', jueyong:'绝勇', - jueyong_info:'锁定技。①当你不因〖绝勇〗成为唯一牌的目标时,若此牌不为转化牌且对应的实体牌牌数为1且不为【桃】或【酒】且你的“绝”数小于你的体力值的二倍,则你将此牌置于你的武将牌上,称为“绝”,且取消此牌的目标。②结束阶段开始时,若你有“绝”,则你令所有“绝”的原使用者依次对你使用所有“绝”,将无法使用的“绝”置入弃牌堆。', + jueyong_info:'锁定技。①当你不因〖绝勇〗成为唯一牌的目标时,若此牌不为转化牌且对应的实体牌牌数为1且不为【桃】或【酒】且你的“绝”数小于你的体力值,则你将此牌置于你的武将牌上,称为“绝”,且取消此牌的目标。②结束阶段开始时,若你有“绝”,则你令所有“绝”的原使用者依次对你使用所有“绝”,将无法使用的“绝”置入弃牌堆。', poxiang:'破降', poxiang_info:'出牌阶段限一次。你可以将一张牌交给一名其他角色。你摸三张牌(不计入本回合的手牌上限),移去所有“绝”并失去1点体力。', simafu:'司马孚', @@ -14113,9 +14131,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhujian_info:'出牌阶段限一次。你可以令至少两名装备区里有牌的角色各摸一张牌。', duansuo:'断索', duansuo_info:'出牌阶段限一次。你可以重置任意名处于连环状态的角色,然后对这些角色各造成1点火焰伤害。', - sp_pengyang:'彭羕', + sp_pengyang:'手杀彭羕', spdaming:'达命', - spdaming_info:'①游戏开始时,你获得2点“达命”值。②其他角色A的出牌阶段限一次。其可以交给你一张牌,然后你选择另一名其他角色B。若B有与此牌相同类型的牌,其将一张该类型的牌交给A,你获得1点“达命”值;否则你将此牌交给A。', + spdaming_info:'①游戏开始时,你获得1点“达命”值。②其他角色A的出牌阶段限一次。其可以交给你一张牌,然后你选择另一名其他角色B。若B有与此牌相同类型的牌,其将一张该类型的牌交给A,你获得1点“达命”值;否则你将此牌交给A。', spxiaoni:'嚣逆', spxiaoni_info:'①出牌阶段限一次。若你的“达命”值大于0,你可以将一张牌当任意一种【杀】或伤害类锦囊牌使用。然后你减少等同于此牌指定目标数的“达命”值。②你的手牌上限基数为X(X为“达命”值,且至多为你的体力值,至少为0)。', xin_zhuhuan:'手杀朱桓', @@ -14131,7 +14149,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mbaosi_info:'锁定技。当你于出牌阶段对一名攻击范围内的角色造成伤害后,你于此阶段对其使用牌无次数限制。', xin_zhoutai:'手杀周泰', re_yanwen:"手杀颜良文丑", - qianzhao:'牵招', + qianzhao:'手杀牵招', mbshihe:'势吓', mbshihe_info_identity:'出牌阶段限一次。你可以与一名角色拼点。若你:赢,当其于其下回合结束前对你造成伤害时,取消之;没赢,你随机弃置一张牌。', mbshihe_info:'出牌阶段限一次。你可以与一名角色拼点。若你:赢,当其于其下回合结束前对你和你的友方角色造成伤害时,取消之;没赢,你随机弃置一张牌。', @@ -14193,7 +14211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinwurong_info:'出牌阶段限一次,你可以与一名其他角色进行谋弈:
  • 若你选择“镇压”且其选择“反抗”,你对其造成1点伤害,然后你摸一张牌。
  • 若你选择“安抚”且其选择“归顺”,其须交给你两张牌(若其手牌数不足两张,则改为令其跳过其下个摸牌阶段)。
  • 若你选择“镇压”且其选择“归顺”,你获得其一张牌,然后你交给其两张牌。
  • 若你选择“安抚”且其选择“反抗”,你受到1点伤害,然后你摸两张牌。', xin_guozhao:'手杀郭照', yichong:'易宠', - yichong_info:'①准备阶段,你可以选择一名其他角色并选择一个花色,然后你获得其所有此花色的牌,移除场上的所有“雀”标记,令其获得“雀”标记直到你的下个回合开始。②拥有“雀”标记的角色获得你最后一次发动〖易宠①〗选择的花色的牌后,你获得这些牌(你至多通过每个“雀”获得五张牌)。', + yichong_info:'①准备阶段,你可以选择一名其他角色并选择一个花色,然后你获得其所有此花色的牌,移除场上的所有“雀”标记,令其获得“雀”标记直到你的下个回合开始。②拥有“雀”标记的角色获得你最后一次发动〖易宠①〗选择的花色的牌后,你获得这些牌(你至多通过每个“雀”得到五张牌)。', wufei:'诬诽', wufei_info:'若场上存在拥有“雀”标记的角色A,则:①当你使用【杀】或伤害类锦囊牌指定第一个目标后,你令A成为此牌伤害来源。②当你受到伤害后,若A的体力值大于1且A的体力值大于你,则你可以对A造成1点伤害。', diff --git a/character/offline.js b/character/offline.js index 14311104a..8d0d40730 100644 --- a/character/offline.js +++ b/character/offline.js @@ -915,7 +915,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zymingshi:{ audio:'mingshi', forced:true, - trigger:{target:'useCardToTargeted'}, + trigger:{target:'useCardToBefore'}, + priority:15, filter:function(event,player){ if(!player.hasEmptySlot(2)) return false; if(event.card.name!='sha') return false; @@ -6327,7 +6328,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nskuishe_info:'出牌阶段限一次,你可以选择一名其他角色A的一张牌,并将此牌交给不为A的一名角色。然后A可以对你使用一张【杀】。', sp_xiahoushi:"SP夏侯氏", xinfu_yanyu:"燕语", - xinfu_yanyu_info:"一名角色的出牌阶段开始时,你可以弃置一张牌。若如此做,则该出牌阶段内,当有与你弃置的牌类别相同的其他牌进入弃牌堆后,你可令任意一名角色获得此牌。每阶段以此法获得的牌不能超过三张。", + xinfu_yanyu_info:"一名角色的出牌阶段开始时,你可以弃置一张牌。若如此做,则该出牌阶段内限三次,当一张与你弃置的牌类别相同的其他牌进入弃牌堆后,你可令任意一名角色获得此牌。", xinfu_yanyu2:"燕语", xinfu_xiaode:"孝德", xinfu_xiaode_info:"其他角色死亡后,你可以声明该角色武将牌上的一个技能(主公技、觉醒技、隐匿技、使命技除外)。若如此做,你获得此技能且不能再发动〖孝德〗直到你的回合结束。", @@ -6347,7 +6348,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ manjuan:'漫卷', manjuan_info:'其他角色的牌因弃置而进入弃牌堆后,你可以弃置一张花色与之不同的牌,然后获得此牌。', xinmanjuan:'漫卷', - xinmanjuan_info:'锁定技,当你不因【漫卷】或【醉乡】而获得牌时,你将此牌置入弃牌堆。然后若此时处于你的回合内,则你可以从弃牌堆中选择获得一张与此牌点数相同的其他牌。', + xinmanjuan_info:'锁定技,当你不因〖漫卷〗或〖醉乡〗而得到牌时,你将此牌置入弃牌堆。然后若此时处于你的回合内,则你可以从弃牌堆中选择获得一张与此牌点数相同的其他牌。', zuixiang:'醉乡', zuixiang2:'醉乡', zuixiang_info:'限定技,准备阶段开始时,你可以展示牌堆顶的3张牌并置于你的武将牌上。你不能使用或打出与该些牌同类的牌,所有同类牌对你无效。之后的每个准备阶段,你须重复展示一次,直到这些牌中任意两张点数相同。然后,你获得这些牌。', @@ -6402,7 +6403,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yjsancai:'散财', yjsancai_info:'出牌阶段限一次,你可以展示所有手牌。若这些牌的类别均相同,则你可以赠予一名其他角色一张手牌。', yjyibing:'义兵', - yjyibing_info:'当你不因赠予且不因〖义兵〗的嵌套结算而于摸牌阶段外获得牌时,你可以将此次获得的所有牌当做【杀】使用(无距离限制且不计入使用次数)。', + yjyibing_info:'当你不因赠予且不因〖义兵〗的嵌套结算而于摸牌阶段外得到牌时,你可以将此次得到的所有牌当做【杀】使用(无距离限制且不计入使用次数)。', yj_caohong:'用间曹洪', yj_caohong_ab:'曹洪', yjlifeng:'厉锋', diff --git a/character/old.js b/character/old.js index dac520212..12e9af5cf 100755 --- a/character/old.js +++ b/character/old.js @@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ old:{ old_standard:['ol_yuanshu'], - old_shenhua:["yuji","zhangjiao","old_zhugezhan","old_guanqiujian","xiahouyuan","weiyan","old_xiaoqiao","pangde","xuhuang",'junk_sunquan',"huangzhong","new_caoren",'old_chendao'], + old_shenhua:['old_caocao',"yuji","zhangjiao","old_zhugezhan","old_guanqiujian","xiahouyuan","weiyan","old_xiaoqiao","pangde","xuhuang",'junk_sunquan',"huangzhong","new_caoren",'old_chendao'], old_refresh:["old_zhangfei","old_huatuo","old_zhaoyun","ol_huaxiong",'old_re_lidian'], old_yijiang1:["masu","xushu","xin_yujin","old_xusheng","old_lingtong","fazheng",'old_gaoshun'], old_yijiang2:["old_zhonghui","madai",'old_handang','old_liubiao','oldre_liubiao','old_guanzhang'], @@ -21,6 +21,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + old_caocao:['male','shen',3,['junkguixin','feiying'],['die_audio']], old_chendao:['male','shu',4,['drlt_wanglie']], old_liyan:['male','shu',3,['duliang','fulin']], old_re_lidian:['male','wei',3,['xunxun','wangxi']], @@ -87,6 +88,82 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_wanglang:['male','wei',3,['gushe','jici']], }, skill:{ + //魏武帝 + junkguixin:{ + init:function(){ + if(!_status.junkguixin){ + _status.junkguixin=[]; + for(var name in lib.character){ + if(!lib.character[name][3]) continue; + if(game.players.some(target=>{ + if(target.name&&target.name==name) return true; + if(target.name1&&target.name1==name) return true; + if(target.name2&&target.name2==name) return true; + return false; + })) continue; + _status.junkguixin.addArray(lib.character[name][3].filter(skill=>{ + var info=get.info(skill); + return info&&info.zhuSkill&&(!info.ai||!info.ai.combo); + })); + } + } + }, + unique:true, + audio:'guixin', + trigger:{player:'phaseEnd'}, + direct:true, + content:function(){ + 'step 0' + var controls=['获得技能','修改势力','cancel2']; + if(!_status.junkguixin.some(skill=>!player.hasSkill(skill,null,false,false))) controls.shift(); + player.chooseControl(controls).set('prompt',get.prompt2('junkguixin')).set('ai',()=>_status.event.controls.length==3?'获得技能':'cancel2'); + 'step 1' + if(result.control!='cancel2'){ + var next=game.createEvent('junkguixinx'); + next.player=player; + next.setContent(lib.skill.junkguixin['content_'+result.control]); + } + }, + content_获得技能:function(){ + 'step 0' + var list=_status.junkguixin.slice().filter(skill=>!player.hasSkill(skill,null,false,false)); + if(!list.length){event.finish();return;} + list=list.map(skill=>{ + return [ + skill, + '', + ]; + }); + player.chooseButton([ + '归心:选择获得一个主公技', + [list,'textbutton'], + ],true).set('ai',button=>1+Math.random()); + 'step 1' + if(result.bool){ + player.logSkill('junkguixin'); + player.addSkillLog(result.links[0]); + } + }, + content_修改势力:function(){ + 'step 0' + player.chooseTarget('请选择【归心】的目标','更改一名其他角色的势力',lib.filter.notMe,true).set('ai',target=>1+Math.random()); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('junkguixin',target); + var list=lib.group.slice(); + list.removeArray(['shen',target.group]); + player.chooseControl(list).set('prompt','请选择'+get.translation(target)+'变更的势力').set('ai',()=>_status.event.controls.randomGet()); + } + else event.finish(); + 'step 2' + if(result.control){ + player.popup(get.translation(result.control+'2')); + target.changeGroup(result.control); + } + }, + }, oldqinqing:{ audio:'qinqing', mode:['identity','versus'], @@ -1024,6 +1101,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_re_lidian:'旧李典', old_liyan:'旧李严', old_chendao:'旧陈到', + old_caocao:'神曹操', + old_caocao_ab:'魏武帝', + junkguixin:'归心', + junkguixin_info:'回合结束时,你可以选择一项:①获得剩余武将牌堆的所有主公技的其中一个技能;②更改一名其他角色的势力。', old_standard:'标准包', old_shenhua:'神话再临', diff --git a/character/rank.js b/character/rank.js index 6828e867f..19a80e0d4 100644 --- a/character/rank.js +++ b/character/rank.js @@ -598,6 +598,7 @@ window.noname_character_rank={ 'jsrg_sunce', 're_caorui', 'ol_zhouqun', + 'caoxi', ], bp:[ 'chess_diaochan', @@ -1246,6 +1247,8 @@ window.noname_character_rank={ 'jsrg_chendeng', 'jsrg_zhanghe', 'jsrg_zoushi', + 'gaoxiang', + 'ol_qianzhao', ], bm:[ 'diy_xizhenxihong', @@ -1436,6 +1439,7 @@ window.noname_character_rank={ 'vtb_xiaosha', 'huanfan', 'jsrg_xugong', + 'old_xiaoqiao', ], c:[ 'xiahoudun', @@ -1498,6 +1502,7 @@ window.noname_character_rank={ 'luoxian', 'ol_huban', 'sb_menghuo', + 'old_caocao', ], d:[ 'lvmeng', @@ -1716,8 +1721,21 @@ window.noname_character_rank={ 'key_minagi', 'key_michiru', 'noname', + 'ol_wanglang', + 'xin_guozhao', + 'shichangshi', ], epic:[ + 'ol_pengyang', + 'ol_luyusheng', + 'clan_xunchen', + 'peiyuanshao', + 'tw_zhangzhao', + 'tw_zhanghong', + 'tw_ol_sunjian', + 'yj_huangzhong', + 'clan_zhongyu', + 'zhoushan', 'pal_yueqi', 'pal_yuejinzhao', 'pal_mingxiu', @@ -1968,6 +1986,15 @@ window.noname_character_rank={ 'key_iriya', ], rare:[ + 'luoxian', + 'ol_mengda', + 'tw_menghuo', + 'hejin', + 'hansui', + 'clan_xunshu', + 'clan_xuncan', + 'huanfan', + 'xin_zhangyi', 'pal_shenqishuang', 'hs_selajin', 'hs_enzoth', @@ -2364,7 +2391,6 @@ window.noname_character_rank={ 're_xunyou', 'liwan', 'furong', - 'clan_xunchen', 'sunlang', 'chengbing', 'gongsundu', @@ -2443,6 +2469,7 @@ window.noname_character_rank={ 'bianxi', 'junk_sunquan', 'clan_wuban', + 'clan_wukuang', 'ahuinan', 'sp_caosong', 'yangfu', diff --git a/character/refresh.js b/character/refresh.js index 27d4ac450..c2fbdf18d 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -5140,6 +5140,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); } if(player==event.player) return false; + if(event.giver||event.getParent().name=='gift') return false; var evt=event.getl(player); return evt&&evt.cards2&&evt.cards2.length>0; }, @@ -10931,7 +10932,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, viewAs:{ name:"huogong", - nature:"fire", }, viewAsFilter:function (player){ if(!player.countCards('hes',{color:'red'})) return false; @@ -11860,22 +11860,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var top=result.moved[0]; var bottom=result.moved[1]; top.reverse(); - for(var i=0;i!i.isLinked()); - player.logSkill('sblianhuan_discard2',event.targets); + if(!event.targets.length) event.finish(); + else player.logSkill('sblianhuan_discard2',event.targets); 'step 1' var target=targets.shift(); var cards=target.getCards('h',card=>{ @@ -1294,9 +1294,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ marktext:'惑', intro:{ content:function(storage,player){ - if(!storage||get.is.empty(storage)) return '未获得过牌'; + if(!storage||get.is.empty(storage)) return '未得到过牌'; var map=(_status.connectMode?lib.playerOL:game.playerMap); - var str='已获得过'; + var str='已得到'; for(var i in storage){ str+=get.translation(map[i])+'的'+get.cnNumber(storage[i])+'张牌、'; } @@ -2385,7 +2385,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, filterTarget:lib.filter.notMe, selectCard:[1,event.cards.length], - prompt:'是否将任意张获得的牌交给一名其他角色?', + prompt:'是否将任意张得到的牌交给一名其他角色?', ai1:function(card){ var player=_status.event.player; var val=player.getUseValue(card); @@ -4668,7 +4668,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbduanliang:'断粮', sbduanliang_info:'出牌阶段限一次。你可以与一名其他角色进行谋弈。若你赢,且你选择的选项为:“围城断粮”,若其判定区没有【兵粮寸断】,你将牌堆顶牌当【兵粮寸断】对其使用,否则你获得其一张牌;“擂鼓进军”,你视为对其使用一张【决斗】。', sbshipo:'势迫', - sbshipo_info:'结束阶段,你可以令一名体力少于你的角色或所有判定区有【兵粮寸断】的其他角色选择一项:1.交给你一张手牌;2.受到1点伤害。所有目标角色选择完成后,你可以将任意张你以此法获得的牌交给一名其他角色。', + sbshipo_info:'结束阶段,你可以令一名体力少于你的角色或所有判定区有【兵粮寸断】的其他角色选择一项:1.交给你一张手牌;2.受到1点伤害。所有目标角色选择完成后,你可以将任意张你以此法得到的牌交给一名其他角色。', sb_zhangfei:'谋张飞', sbpaoxiao:'咆哮', sbpaoxiao_info:'锁定技。①你使用【杀】无次数限制。②若你的装备区内有武器牌,则你使用【杀】无距离限制。③当你于出牌阶段内使用第二张及以后【杀】时,你获得如下效果:{此【杀】不可被响应且伤害值基数+1;此【杀】指定目标后,目标角色的非锁定技于本回合内失效;此【杀】造成伤害后,若目标角色存活,则你失去1点体力并随机弃置一张手牌。}', @@ -4695,9 +4695,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sbzhiji_info:'觉醒技。准备阶段,若你因〖挑衅①〗消耗过至少4点蓄力值,你减1点体力上限,令至少一名角色获得“北伐”标记并获得如下效果直到你的下回合开始:其使用牌只能指定你或其为目标。', sb_fazheng:'谋法正', sbxuanhuo:'眩惑', - sbxuanhuo_info:'①出牌阶段限一次。你可以将一张牌交给一名没有“眩”标记的其他角色,然后令其获得“眩”标记。②当有“眩”的其他角色于摸牌阶段外获得牌后,若你以此法于其本次获得“眩”的期间内获得其的牌数小于5,你随机获得其一张手牌。', + sbxuanhuo_info:'①出牌阶段限一次。你可以将一张牌交给一名没有“眩”标记的其他角色,然后令其获得“眩”标记。②当有“眩”的其他角色于摸牌阶段外得到牌后,若你以此法于其本次获得“眩”的期间内得到其的牌数小于5,你随机获得其一张手牌。', sbenyuan:'恩怨', - sbenyuan_info:'锁定技。准备阶段,若场上存在有“眩”的角色,你移去该角色的“眩”,且你于其本次获得“眩”的期间内获得其的牌数:不小于3,你交给其三张牌;小于3,其失去1点体力,你回复1点体力。', + sbenyuan_info:'锁定技。准备阶段,若场上存在有“眩”的角色,你移去该角色的“眩”,且你于其本次获得“眩”的期间内得到其的牌数:不小于3,你交给其三张牌;小于3,其失去1点体力,你回复1点体力。', sb_chengong:'谋陈宫', sbmingce:'明策', sbmingce_info:'①出牌阶段限一次。你可以将一张牌交给一名其他角色,其选择一项:1.失去1点体力,令你摸两张牌并获得1枚“策”;2.摸一张牌。②出牌阶段开始时,你可以移去所有“策”并对一名其他角色造成等量伤害。', @@ -4741,7 +4741,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sblieren:'烈刃', sblieren_info:'当你使用【杀】指定唯一目标后,你可以与其拼点。若你赢,此【杀】结算结束后,你可以对另一名其他角色造成1点伤害。', sbjuxiang:'巨象', - sbjuxiang_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】结算结束后,你获得此牌对应的所有实体牌。③结束阶段,若你未于本回合使用过【南蛮入侵】,你可以将一张游戏外的随机【南蛮入侵】(共三张)交给一名角色。', + sbjuxiang_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】结算结束后,你获得此牌对应的所有实体牌。③结束阶段,若你未于本回合使用过【南蛮入侵】,你可以将一张游戏外的随机【南蛮入侵】(共2张)交给一名角色。', sb_menghuo:'谋孟获', sbhuoshou:'祸首', sbhuoshou_info:'锁定技。①【南蛮入侵】对你无效。②当其他角色使用【南蛮入侵】指定第一个目标后,你代替其成为此牌的伤害来源。③出牌阶段开始时,你随机获得弃牌堆中的一张【南蛮入侵】。④出牌阶段,若你于此阶段使用过【南蛮入侵】,你不能使用【南蛮入侵】。', diff --git a/character/shenhua.js b/character/shenhua.js index e4b5c638a..2e76c42e6 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -130,7 +130,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "sunliang":"孙亮(243-260年),字子明,吴郡富春(今浙江杭州富阳区)人。三国时期吴国的第二位皇帝,公元252-258年在位。吴大帝孙权第七子,母潘皇后。史称吴少帝、吴废帝、会稽王。建兴元年(252年),十岁登基为帝,太平二年(257年),十五岁亲政,但一年后(258年)就被权臣孙綝废为会稽王。永安三年(260年),孙亮再被贬为候官侯,在前往封地途中自杀(一说被毒杀),终年18岁。西晋太康年间,原先任职吴国的官员戴显将孙亮的遗骨葬在赖乡。", "xuyou":"许攸(?-204年),字子远,南阳(治今河南南阳)人。本为袁绍帐下谋士,官渡之战时其家人因犯法而被收捕,许攸因此背袁投曹,并为曹操设下偷袭袁绍军屯粮之所乌巢的计策,袁绍因此而大败于官渡。后许攸随曹操平定冀州,因自恃其功而屡屡口出狂言,终因触怒曹操而被杀。", "yl_luzhi":"卢植(139年—192年),字子干。涿郡涿县(今河北涿州)人。东汉末年经学家、将领。卢植性格刚毅,师从太尉陈球、大儒马融等,为郑玄、管宁、华歆的同门师兄。曾先后担任九江、庐江太守,平定蛮族叛乱。后与马日磾、蔡邕等一起在东观校勘儒学经典书籍,并参与续写《汉记》。黄巾起义时为北中郎将,率军与张角交战,后被诬陷下狱,皇甫嵩平定黄巾后力救卢植,于是复任为尚书。后因上谏激怒董卓被免官,隐居在上谷军都山,被袁绍请为军师。初平三年(192年)去世。著有《尚书章句》、《三礼解诂》等,今皆失佚。唐代时配享孔子,北宋时被追封为良乡伯。白马将军公孙瓒以及后来的蜀汉昭烈帝刘备皆为卢植门下弟子。范阳卢氏后来也成为著名的家族。", - "kuailiangkuaiyue":"蒯(kuǎi)良,字子柔,襄阳中庐人。归刘表。蒯良为刘表定下安抚荆楚的政治方向,佐其成业,被刘表誉为“雍季之论”。之后,蒯良就被刘表擢升为主簿(bù)。其后蒯良的生平,就不得而知了,《三国志》亦没有记载其卒年。与蒯越、以及同样活跃于襄阳的蒯祺(诸葛亮姐夫)或为同族兄弟。蒯越(?-214年),字异度,襄阳中庐(今湖北襄阳西南)人。东汉末期人物,演义中为蒯良之弟。原本是荆州牧刘表的部下,曾经在刘表初上任时帮助刘表铲除荆州一带的宗贼(以宗族、乡里关系组成的武装集团)。刘表病逝后与刘琮一同投降曹操,后来官至光禄勋。", + "kuailiangkuaiyue":"蒯良,字子柔,襄阳中庐人。归刘表。蒯良为刘表定下安抚荆楚的政治方向,佐其成业,被刘表誉为“雍季之论”。之后,蒯良就被刘表擢升为主簿(bù)。其后蒯良的生平,就不得而知了,《三国志》亦没有记载其卒年。与蒯越、以及同样活跃于襄阳的蒯祺(诸葛亮姐夫)或为同族兄弟。蒯越(?-214年),字异度,襄阳中庐(今湖北襄阳西南)人。东汉末期人物,演义中为蒯良之弟。原本是荆州牧刘表的部下,曾经在刘表初上任时帮助刘表铲除荆州一带的宗贼(以宗族、乡里关系组成的武装集团)。刘表病逝后与刘琮一同投降曹操,后来官至光禄勋。", "guanqiujian":"毌丘俭,字仲恭,河东闻喜(今山西闻喜县)人。三国时期曹魏后期的重要将领。继承父毌丘兴爵位高阳乡侯,任平原侯文学。魏明帝即位后,上疏劝魏明帝停止加建皇宫的工程,升为荆州刺史。景初二年(238年)从司马懿攻灭公孙渊;正始五年(244年)至正始六年(245年)两次率兵征讨高句丽,攻破丸都,几亡其国,刻石纪功而还;253年击退吴国诸葛恪的大举进犯,战功累累。司马师废帝,毌丘俭感昔日魏明帝之恩,为曹魏政权做拼死一搏,于正元二年(255年)发动兵变,即后人所谓“淮南三叛”(王淩、毌丘俭、诸葛诞)之一,惜准备不足,兵败身亡。", "haozhao":"郝昭(生卒年不详),字伯道,太原人,中国东汉末年至曹魏初年著名将领。郝昭少年从军,屡立战功,逐渐晋升为杂号将军,后受曹真的推荐镇守陈仓(在小说三国演义中是司马懿推荐),防御蜀汉。太和二年(228年),诸葛亮率军北伐,为郝昭所阻,劝降不成,昼夜相攻二十余日后被迫退军。魏明帝因此封其为关内侯。不久因染疾而病死。", @@ -2155,63 +2155,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, onremove:true, }, - "nzry_shicai":{ - audio:"nzry_shicai_2", - ai:{ - reverseOrder:true, - skillTagFilter:function(player){ - if(player.getHistory('useCard',function(evt){ - return get.type(evt.card)=='equip'; - }).length>0) return false; - }, - effect:{ - target:function(card,player,target){ - if(player==target&&get.type(card)=='equip'&&!player.getHistory('useCard',function(evt){ - return get.type(evt.card)=='equip' - }).length==0) return [1,3]; - }, - }, - threaten:2.4, + nzry_shicai:{ + audio:'nzry_shicai_2', + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + if(!event.cards.filterInD('oe').length) return false; + return player.getHistory('useCard',evt=>get.type2(evt.card)==get.type2(event.card)).indexOf(event)==0; }, - subSkill:{ - "2":{ - audio:2, - }, - }, - trigger:{ - player:['useCardAfter'], - target:'useCardToTargeted', - }, - filter:function(event,player,name){ - if(name=='useCardToTargeted'&&('equip'!=get.type(event.card)||event.player!=player)) return false; - if(name=='useCardAfter'&&['equip','delay'].contains(get.type(event.card))) return false; - if(event.cards.filterInD().length<=0) return false; - var history=player.getHistory('useCard'); - var evt=name=='useCardAfter'?event:event.getParent(); - for(var i=0;i=eff1; - })>0; - } - return true; + prompt:function(event,player){ + return get.prompt('nzry_shicai')+'(将'+get.translation(event.cards.filterInD('oe'))+'置于牌堆顶)'; }, content:function(){ - "step 0" - event.cards=trigger.cards.filterInD(); - if(event.cards.length>1){ + 'step 0' + event.cards=trigger.cards.filterInD('oe'); + var cards=event.cards.filter(card=>get.owner(card)); + if(!cards.length){ + event.goto(2); + return; + } + event.cards.removeArray(cards); + if(cards.length>1){ var next=player.chooseToMove('恃才:将牌按顺序置于牌堆顶'); - next.set('list',[['牌堆顶',event.cards]]); + next.set('list',[['牌堆顶',cards]]); next.set('reverse',((_status.currentPhase&&_status.currentPhase.next)?get.attitude(player,_status.currentPhase.next)>0:false)); next.set('processAI',function(list){ var cards=list[0][1].slice(0); @@ -2221,7 +2186,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return [cards]; }); } - "step 1" + else event._result={bool:true,moved:[cards]}; + 'step 1' + var cardx=result.moved[0].slice(0); + while(cardx.length){ + var card=cardx.pop(),owner=get.owner(card); + owner.lose([card],ui.cardPile,'insert'); + game.log(player,'将',card,'置于牌堆顶'); + } + game.updateRoundNumber(); + if(!cards.length){ + player.draw(); + event.finish(); + } + 'step 2' + if(cards.length>1){ + var next=player.chooseToMove('恃才:将牌按顺序置于牌堆顶'); + next.set('list',[['牌堆顶',cards]]); + next.set('reverse',((_status.currentPhase&&_status.currentPhase.next)?get.attitude(player,_status.currentPhase.next)>0:false)); + next.set('processAI',function(list){ + var cards=list[0][1].slice(0); + cards.sort(function(a,b){ + return (_status.event.reverse?1:-1)*(get.value(b)-get.value(a)); + }); + return [cards]; + }); + } + 'step 3' if(result.bool&&result.moved&&result.moved[0].length) cards=result.moved[0].slice(0); while(cards.length){ var card=cards.pop(); @@ -2233,10 +2224,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } game.updateRoundNumber(); player.draw(); - }, + }, + subSkill:{'2':{audio:2}}, + ai:{ + reverseOrder:true, + skillTagFilter:function(player){ + if(player.getHistory('useCard',function(evt){ + return get.type(evt.card)=='equip'; + }).length>0) return false; + }, + effect:{ + target:function(card,player,target){ + if(player==target&&get.type(card)=='equip'&&!player.getHistory('useCard',function(evt){ + return get.type(evt.card)=='equip'; + }).length) return [1,3]; + }, + }, + }, }, "nzry_cunmu":{ audio:2, + audioname:['ol_pengyang'], trigger:{ player:'drawBegin' }, @@ -4680,27 +4688,35 @@ game.import('character',function(lib,game,ui,get,ai,_status){ preHidden:true, content:function(){ "step 0" - player.chooseTarget(get.prompt('fangzhu'),'令一名其他角色将武将牌翻面并摸'+get.cnNumber(player.getDamagedHp())+'张牌',function(card,player,target){ + var draw=player.getDamagedHp(); + player.chooseTarget(get.prompt('fangzhu'),'令一名其他角色翻面'+(draw>0?'并摸'+get.cnNumber(draw)+'张牌':''),function(card,player,target){ return player!=target - }).setHiddenSkill('fangzhu').ai=function(target){ + }).setHiddenSkill('fangzhu').set('ai',target=>{ if(target.hasSkillTag('noturn')) return 0; var player=_status.event.player; - if(get.attitude(_status.event.player,target)==0) return 0; - if(get.attitude(_status.event.player,target)>0){ - if(target.classList.contains('turnedover')) return 1000-target.countCards('h'); - if(player.getDamagedHp()<3) return -1; - return 100-target.countCards('h'); + var current=_status.currentPhase; + var dis=current?get.distance(current,target,'absolute'):1; + var draw=player.getDamagedHp(); + var att=get.attitude(player,target); + if(att==0) return target.hasJudge('lebu')?Math.random()/3:Math.sqrt(get.threaten(target))/5+Math.random()/2; + if(att>0){ + if(target.isTurnedOver()) return att+draw; + if(draw<4) return -1; + if(current&&target.getSeatNum()>current.getSeatNum()) return att+draw/3; + return 10*Math.sqrt(Math.max(0.01,get.threaten(target)))/(3.5-draw)+dis/(2*game.countPlayer()); } else{ - if(target.classList.contains('turnedover')) return -1; - if(player.getDamagedHp()>=3) return -1; - return 1+target.countCards('h'); + if(target.isTurnedOver()) return -att-draw; + if(draw>=5) return -1; + if(current&&target.getSeatNum()<=current.getSeatNum()) return -att+draw/3; + return (4.25-draw)*10*Math.sqrt(Math.max(0.01,get.threaten(target)))+2*game.countPlayer()/dis; } - } + }); "step 1" if(result.bool){ player.logSkill('fangzhu',result.targets); - result.targets[0].draw(player.getDamagedHp()); + var draw=player.getDamagedHp(); + if(draw>0) result.targets[0].draw(draw); result.targets[0].turnOver(); } }, @@ -5372,7 +5388,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterCard:function(card){ return get.color(card)=='red'; }, - viewAs:{name:'huogong',nature:'fire'}, + viewAs:{name:'huogong'}, viewAsFilter:function(player){ if(!player.countCards('hs',{color:'red'})) return false; }, @@ -7664,7 +7680,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huangzhong:['ol_huangzhong','re_huangzhong','huangzhong'], weiyan:['ol_weiyan','re_weiyan','weiyan'], zhoutai:['zhoutai','xin_zhoutai','old_zhoutai'], - xiaoqiao:['ol_xiaoqiao','re_xiaoqiao','xiaoqiao'], + xiaoqiao:['ol_xiaoqiao','re_xiaoqiao','xiaoqiao','old_xiaoqiao'], yuji:['xin_yuji','re_yuji','yuji'], zhangjiao:['re_zhangjiao','sp_zhangjiao','zhangjiao'], dianwei:['ol_dianwei','re_dianwei','dianwei'], @@ -7736,7 +7752,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "nzry_chenglve":"成略", "nzry_chenglve_info":"转换技,出牌阶段限一次,阴:你可以摸一张牌,然后弃置两张手牌。阳:你可以摸两张牌,然后弃置一张手牌。若如此做,直到本回合结束,你使用与弃置牌花色相同的牌无距离和次数限制。", "nzry_shicai":"恃才", - "nzry_shicai_info":"当你使用牌时,若此牌与你本回合使用的牌类型均不同(包括装备牌),则你可以将此牌置于牌堆顶,然后摸一张牌。", + "nzry_shicai_info":"当你使用牌结束完毕后,若此牌与你本回合使用的牌类型均不同,则你可以将此牌置于牌堆顶,然后摸一张牌。", "nzry_cunmu":"寸目", "nzry_cunmu_info":"锁定技,当你摸牌时,改为从牌堆底摸牌。", "nzry_kuizhu":"溃诛", @@ -8070,7 +8086,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guidao_info:'一名角色的判定牌生效前,你可以打出一张黑色牌替换之。', huangtian_info:'主公技,其他群势力角色的出牌阶段限一次,其可以交给你一张【闪】或【闪电】。', guhuo_info:'每名角色的回合限一次,你可以扣置一张手牌当一张基本牌或普通锦囊牌使用或打出。其他角色依次选择是否质疑。一旦有其他角色质疑则翻开此牌:若为假则此牌作废,若为真,则质疑角色获得技能“缠怨”(锁定技,你不能质疑于吉,只要你的体力值为1,你失去你的武将技能)', - fenji_info:'当一名角色的手牌不因赠予或交给而被其他角色获得后,或一名角色的手牌被其他角色弃置后,你可以令其摸两张牌。', + fenji_info:'当一名角色的手牌不因赠予或交给而被另一名角色得到后,或一名角色的手牌被另一名角色弃置后,你可以失去1点体力,令其摸两张牌。', new_fenji:"奋激", new_fenji_info:"一名角色的结束阶段开始时,若其没有手牌,你可以令其摸两张牌,然后你失去1点体力。", diff --git a/character/shiji.js b/character/shiji.js index ce5614617..28833eaf5 100644 --- a/character/shiji.js +++ b/character/shiji.js @@ -58,9 +58,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skill:{ //刘巴 duanbi:{ + unique:true, + mark:true, + limited:true, audio:2, enable:'phaseUse', - usable:1, filter:function(event,player){ var num1=0,num2=0; var count=game.countPlayer(function(current){ @@ -74,8 +76,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ selectTarget:-1, multitarget:true, multiline:true, + skillAnimation:true, + animationColor:'orange', content:function(){ 'step 0' + player.awakenSkill('duanbi'); event.num=0; event.cards=[]; event.targets.sortBySeat(); @@ -109,12 +114,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ai:{ order:10, - result:{ - target:function(player,target){ - if(player==target) return 3; - return -Math.min(3,Math.floor(target.countCards('h')/2)); - }, + result:{ + target:function(player,target){ + if(player==target) return 3; + return -Math.min(3,Math.floor(target.countCards('h')/2)); }, + }, }, }, tongduo:{ @@ -922,7 +927,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); player.chooseCardTarget({ prompt:get.prompt('spyajun'), - prompt2:'操作提示:选择一张本回合新获得的牌作为拼点牌,然后选择一名拼点目标', + prompt2:'操作提示:选择一张本回合新得到的牌作为拼点牌,然后选择一名拼点目标', cards:cards, filterCard:function(card){ return _status.event.cards.contains(card); @@ -2393,7 +2398,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.storage.counttrigger.dbquedi--; }, }, - //王凌 + //王淩 xingqi:{ audio:2, trigger:{player:'useCard'}, @@ -3260,7 +3265,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ marktext:'姻', intro:{ name:'共患', - content:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。此伤害结算结束后,若你与其体力值相等,则你与其移去“姻”标记。', + content:()=>lib.translate.gonghuan_info, onunmark:true, }, ai:{ @@ -6069,7 +6074,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caizhenji:'蔡贞姬,生卒年不详,汉末大儒蔡邕之女。其父蔡邕精于天文数理,妙解音律,是曹操的挚友和老师。生在书香门第的家庭的蔡贞姬,自小耳濡目染,精通书法与音律。后来,其父为避宦竖迫害,便随父亲来泰山依付羊衜一族,在羊衜的元配孔氏死后,便在父亲的做主下与之成亲。夫妻二人婚后生有两子一女:羊承、羊徽瑜、羊祜。在与羊衜成亲之前,羊衜和孔氏生有一子羊发。后来羊发、羊承同时生病,蔡贞姬知道不能两全,就专心照顾羊发,最后羊发痊愈,羊承病死。', zhouchu:'周处(236—297年),字子隐,吴郡阳羡(今江苏宜兴)人。西晋大臣、将领,东吴鄱阳太守周鲂之子。少时纵情肆欲,为祸乡里。后来改过自新,拜访名人陆机和陆云,浪子回头,发奋读书,留下“周处除三害”的传说,拜东观左丞,迁无难都督,功业胜过父亲。吴国灭亡后,出仕西晋,拜新平太守,转广汉太守,治境有方。入为散骑常侍,迁御史中丞,刚正不阿。得罪梁孝王司马肜。元康七年,出任建威将军,前往关中,讨伐氐羌齐万年叛乱,遇害于沙场。追赠平西将军,谥号为孝。', wangfuzhaolei:'王甫(?—222年),字国山,广汉郪(今四川三台县)人,三国时期蜀汉重臣。刘璋时,为益州书佐,之后归降刘备,先后担任绵竹令、荆州议曹从事,并在夷陵之战中阵亡。其子王祐,官至尚书右选郎。赵累,蜀汉大将关羽部下都督。后来吴将吕蒙袭取荆州,赵累被吴将潘璋等在临沮擒获。', - wangling:'王凌(172年~251年6月15日),字彦云,太原郡祁县(今山西省祁县)人,三国时期曹魏将领,东汉司徒王允之侄。王凌出身太原王氏祁县房。举孝廉出身,授发干县令,迁中山太守。颇有政绩,迁司空(曹操)掾属。魏文帝曹丕即位,拜散骑常侍、兖州刺史。参加洞口之战,跟从张辽击败吴将吕范,加号建武将军,封宜城亭侯。太和二年(228年),王凌参与石亭之战,跟从曹休征伐东吴,力挽狂澜,历任扬豫二州刺史,治境有方。齐王曹芳继位,拜征东将军,联合孙礼击败吴将全琮,进封南乡侯,授车骑将军、仪同三司,正始九年(248年),代高柔为司空。嘉平元年(249年),代蒋济为太尉。嘉平三年(251年),不满太傅司马懿专擅朝政,联合兖州刺史令狐愚谋立楚王曹彪为帝,事泄自尽,时年八十岁,夷灭三族。', + wangling:'王淩(172年~251年6月15日),字彦云,太原郡祁县(今山西省祁县)人,三国时期曹魏将领,东汉司徒王允之侄。王淩出身太原王氏祁县房。举孝廉出身,授发干县令,迁中山太守。颇有政绩,迁司空(曹操)掾属。魏文帝曹丕即位,拜散骑常侍、兖州刺史。参加洞口之战,跟从张辽击败吴将吕范,加号建武将军,封宜城亭侯。太和二年(228年),王淩参与石亭之战,跟从曹休征伐东吴,力挽狂澜,历任扬豫二州刺史,治境有方。齐王曹芳继位,拜征东将军,联合孙礼击败吴将全琮,进封南乡侯,授车骑将军、仪同三司,正始九年(248年),代高柔为司空。嘉平元年(249年),代蒋济为太尉。嘉平三年(251年),不满太傅司马懿专擅朝政,联合兖州刺史令狐愚谋立楚王曹彪为帝,事泄自尽,时年八十岁,夷灭三族。', wujing:'吴景,本吴郡吴县(今江苏苏州)人,后迁居吴郡钱塘(今浙江杭州),孙坚妻子吴夫人(武烈皇后)之弟,孙策和孙权的舅舅,东汉末年将领。吴景因追随孙坚征伐有功,被任命为骑都尉。袁术上表举荐吴景兼任丹杨太守,讨伐前任太守周昕,占据丹杨。后遭扬州刺史刘繇逼迫,再度依附袁术,袁术任用他为督军中郎将,与孙贲共同进击樊能等人。又在秣陵攻打笮融、薛礼。袁术与刘备争夺徐州时,任吴景为广陵太守。建安二年(197年),吴景放弃广陵东归孙策,孙策任他为丹杨太守。朝廷使者吴景为扬武将军,郡守之职照旧。建安八年(203年),吴景死于任上。', feiyi:'费祎(?~253年2月),字文伟,江夏鄳县(今河南省罗山县)人,三国时期蜀汉名臣,与诸葛亮、蒋琬、董允并称为蜀汉四相。深得诸葛亮器重,屡次出使东吴,孙权、诸葛恪、羊茞等人以辞锋刁难,而费祎据理以答,辞义兼备,始终不为所屈。孙权非常惊异于他的才能,加以礼遇。北伐时为中护军,又转为司马。当时魏延与杨仪不和,经常争论,费祎常为二人谏喻,两相匡护,以尽其用。诸葛亮死后,初为后军师,再为尚书令,官至大将军,封成乡侯。费祎主政时,与姜维北伐的主张相左,执行休养生息的政策,为蜀汉的发展尽心竭力。费祎性格谦恭真诚,颇为廉洁,家无余财。后为魏降将郭循(一作郭脩)行刺身死。葬于今广元市昭化古城城西。', luotong:'骆统(193年-228年),字公绪。会稽郡乌伤县(今浙江义乌)人。东汉末年至三国时期吴国将领、学者,陈国相骆俊之子。骆统二十岁时已任乌程国相,任内有政绩,使得国中民户过万。又迁为功曹,行骑都尉。曾劝孙权尊贤纳士,省役息民。后出任为建忠中郎将。将军凌统逝世后,统领其部曲。因战功迁偏将军,封新阳亭侯,任濡须督。黄武七年(228年),骆统去世,年仅三十六岁。有集十卷,今已佚。', @@ -6411,7 +6416,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spchijie_info:'每回合限一次。当你成为其他角色使用牌的唯一目标时,你可判定。若结果大于6,则你取消此牌的所有目标。', reduoji:'夺冀', reduoji_info:'出牌阶段限一次,你可将一张牌置于其他角色的武将牌上,称为“冀”。当有装备牌因使用而进入一名角色的装备区后,若该角色有“冀”且其为使用者,则你获得此装备牌,其移去一个“冀”并摸一张牌。一名其他角色的回合结束后,若其有“冀”,则你获得其的所有“冀”。', - wangling:'王凌', + wangling:'王淩', mouli:'谋立', mouli_info:'出牌阶段限一次,你可以将一张手牌交给一名其他角色,其获得如下效果直到你的下回合开始:其可以将黑色牌当做【杀】,红色牌当做【闪】使用。其第一次触发“使用【杀】/【闪】结算完成后”的时机时,你摸三张牌。', zifu:'自缚', @@ -6437,7 +6442,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rechuhai:'除害', rechuhai_info:'使命技。①出牌阶段限一次,你可以摸一张牌,然后和一名其他角色拼点。若你赢,则你观看其手牌,并从牌堆/弃牌堆中获得其手牌中包含的类型的牌各一张,且当你于此阶段内对其造成伤害后,你将牌堆/弃牌堆中的一张装备牌置于你的一个空置装备栏内。②当你因发动〖除害①〗而展示拼点牌时,你令此牌的点数+X(X=(4-你装备区的牌数))。③使命:当有装备牌进入你的装备区后,若你的装备区内有至少三张牌,则你将体力值回复至上限,失去〖乡害〗并获得〖彰名〗。④失败:当你因发动〖除害①〗发起的拼点没赢时,若你的最终点数不大于6,则你触发使命失败分支。', zhangming:'彰名', - zhangming_info:'锁定技。①你使用的♣牌不能被其他角色响应。②每回合限一次,当你对其他角色造成伤害后,你随机弃置其一张手牌,然后你从牌堆或弃牌堆中获得与其展示牌类型不同类型的牌各一张(若其没有手牌,则你改为从牌堆或弃牌堆中获得所有类型牌各一张),且以此法获得的牌不计入本回合的手牌上限。', + zhangming_info:'锁定技。①你使用的♣牌不能被其他角色响应。②每回合限一次,当你对其他角色造成伤害后,你随机弃置其一张手牌,然后你从牌堆或弃牌堆中获得与其展示牌类型不同类型的牌各一张(若其没有手牌,则你改为从牌堆或弃牌堆中获得所有类型牌各一张),且以此法得到的牌不计入本回合的手牌上限。', sp_kongrong:'孔融', spmingshi:'名士', spmingshi_info:'锁定技,当你受到1点伤害后,伤害来源弃置一张牌。', @@ -6469,7 +6474,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ boming:'博名', boming_info:'出牌阶段限两次,你可以将一张牌交给一名其他角色。结束阶段,若你本回合以此法失去了两张以上的牌,则你摸一张牌。', ejian:'恶荐', - ejian_info:'锁定技,每名角色限一次。当有其他角色因〖博名〗而获得了你的牌后,若其拥有与此牌类型相同的其他牌,则你令其选择一项:①受到1点伤害。②展示所有手牌,并弃置所有与此牌类别相同的牌。', + ejian_info:'锁定技,每名角色限一次。当有其他角色因〖博名〗而得到了你的牌后,若其拥有与此牌类型相同的其他牌,则你令其选择一项:①受到1点伤害。②展示所有手牌,并弃置所有与此牌类别相同的牌。', zhangzhongjing:'张机', jishi:'济世', jishi_info:'锁定技。①当你使用的牌结算完成后,若你未因此牌造成过伤害,则你将此牌对应的所有实体牌置于仁库中。②当有牌不因溢出而离开仁库时,你摸一张牌。', @@ -6543,7 +6548,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shanxie_info_old:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得一名其他角色装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', sunyi:'手杀孙翊', zaoli:'躁厉', - zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合获得的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌。若X大于2,你失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。', + zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合得到的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌。若X大于2,你失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。', sp_gaolan:'手杀高览', spjungong:'峻攻', spjungong_info:'出牌阶段,你可失去X+1点体力或弃置X+1张牌,视为对一名其他角色使用【杀】(不计入次数和距离限制,X为你本回合内发动过〖峻攻〗的次数)。若你因此【杀】造成了伤害,则你令此技能失效直到回合结束。', @@ -6558,7 +6563,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spxizhan_info:'其他角色的回合开始时,你须选择一项:①失去1点体力。②弃置一张牌并令〖芳踪〗于本回合失效,然后若此牌的花色为:♠,其视为使用一张【酒】;♥,你视为使用一张【无中生有】;♣,你视为对其使用【铁索连环】;♦:你视为对其使用火【杀】(无距离限制)。', sp_cuiyan:'手杀崔琰', spyajun:'雅俊', - spyajun_info:'①摸牌阶段,你令额定摸牌数+1。②出牌阶段开始时,你可以用一张本回合获得的牌与其他角色拼点。若你赢,则你可将其中一张拼点牌置于牌堆顶。若你没赢,你本回合的手牌上限-1。', + spyajun_info:'①摸牌阶段,你令额定摸牌数+1。②出牌阶段开始时,你可以用一张本回合得到的牌与其他角色拼点。若你赢,则你可将其中一张拼点牌置于牌堆顶。若你没赢,你本回合的手牌上限-1。', spzundi:'尊嫡', spzundi_info:'出牌阶段限一次,你可以弃置一张手牌并选择一名角色,然后你进行判定。若结果为:黑色,其摸三张牌;红色,其可以移动场上的一张牌。', sp_zhangchangpu:'手杀张昌蒲', @@ -6599,7 +6604,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ houfeng_info:'每轮限一次。一名其他角色的出牌阶段开始时,若其在你的攻击范围内,则你可以令其进行“整肃”。然后当其于本回合内因整肃而摸牌或回复体力后,你获得相同的整肃奖励。', liuba:'手杀刘巴', duanbi:'锻币', - duanbi_info:'出牌阶段限一次。若场上所有角色的手牌数之和大于角色数之和的二倍,则你可以令所有其他角色各弃置X张手牌(X为该角色手牌数的一半且向下取整且至多为3)。然后你可选择一名角色,令其随机获得三张以此法被弃置的牌。', + duanbi_info:'限定技。出牌阶段,若场上所有角色的手牌数之和大于角色数之和的二倍,则你可以令所有其他角色各弃置X张手牌(X为该角色手牌数的一半且向下取整且至多为3)。然后你可选择一名角色,令其随机获得三张以此法被弃置的牌。', tongduo:'统度', tongduo_info:'每回合限一次。当你成为其他角色使用牌的唯一目标后,你可令一名角色重铸一张牌。', diff --git a/character/sp.js b/character/sp.js index 8e4cc9f17..521bdb11a 100755 --- a/character/sp.js +++ b/character/sp.js @@ -6,14 +6,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ sp:{ sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'], - sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan','quhuang','zhanghua','wangguan','sunhong'], + sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan','quhuang','zhanghua','wangguan','sunhong','caoxi'], sp_tianzhu:['niujin','hejin','hansui',"wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna",'ol_wenqin'], sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"], sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','zhangzhi','lushi'], - sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu'], + sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu','ol_qianzhao'], sp_liesi:['mizhu','weizi','ol_liuba','zhangshiping'], sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'], - sp_waitforsort:[], + sp_waitforsort:['ol_luyusheng','ol_pengyang'], sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'], sp_wanglang:['ol_wanglang','ol_puyuan','ol_zhouqun'], sp_zhongdan:["cuiyan","huangfusong"], @@ -27,6 +27,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + ol_luyusheng:['female','wu',3,['olcangxin','skill_luyusheng_B'],['unseen']], + caoxi:['male','wei',3,['olgangshu','oljianxuan']], + ol_pengyang:['male','shu',3,['olqifan','oltuishi','nzry_cunmu']], + ol_qianzhao:['male','wei',4,['olweifu','olkuansai']], niujin:['male','wei',4,['olcuorui','liewei']], hejin:['male','qun',4,['olmouzhu','olyanhuo']], hansui:['male','qun',4,['olniluan','olxiaoxi']], @@ -188,11 +192,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xizhicai:['male','wei',3,['tiandu','xianfu','chouce']], quyi:['male','qun',4,['fuqi','jiaozi']], - luzhi:['male','wei',3,['qingzhongx','weijing']], + luzhi:['male','wei',3,['qingzhong','weijing']], //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + caoxi:'曹羲(?-249年),字昭叔。曹真之子,曹爽之弟。为人有学识,明律法。司马懿曾组织朝议改革九品中正制废除九品而留中正,曹羲认为此举并无区别,最终都是决定于人的人治。曹爽掌权后,受封中领军,掌握禁兵,封安乡侯。曹爽及诸兄弟轻视司马懿,恣意妄为,经常外出狩猎,曹羲屡次劝谏,不被采纳。249年,司马懿发动高平陵政变,被夷三族。', duanjiong:'段颎(?-179年),字纪明,武威姑臧(今甘肃省武威市)人。东汉名将,西域都护段会宗从曾孙,与皇甫规(字威明)、张奂(字然明)并称“凉州三明”。段颎少时学习骑射,有文武智略,最初被举为孝廉,为宪陵园丞、阳陵令,有治理之才。汉桓帝时入军旅,先破鲜卑,后讨平东郭窦、公孙举起事,以功封列侯。延熹二年(159年)起戍边征战十余年,百战羌人,至永康元年(167年)平定西羌,建宁二年(169年)平定东羌,前后斩东西羌六万余级。累功封新丰县侯。建宁三年(170年),段颎被征入朝,历任侍中、执金吾、河南尹、司隶校尉等职,他党附宦官、捕杀太学生,因而得保富贵,两度出任太尉。光和二年(179年),权宦王甫罪行被揭发,段颎受牵连下狱,其后在狱中饮鸩而死。', haopu:'郝普,字子太,义阳(治所在今湖北枣阳东南)人。刘备入川后,郝普为零陵太守。建安二十年(215年),吴将吕蒙进攻荆州三郡,唯有郝普坚守待援。但援兵久久不至,其挚友邓玄之又被吕蒙所骗,郝普也因此上当,投降吴国。湘水划界后,郝普回归刘备。建安二十四年(219年),吕蒙再次袭击荆州,击败关羽,郝普再次投降,最终归顺吴国并官至廷尉。郝普与隐蕃亲善,隐蕃蓄谋叛变事情败露,他受到牵连,因此自杀。在刘备集团的5个荆州郡守中,郝普是唯一一个抵抗过东吴的荆州郡守。', ol_zhanghe:'字儁乂,河间鄚人。三国时期魏国名将。官渡之战时,本为袁绍部将的张郃投降了曹操,并在曹操帐下多立功勋,于曹魏建立后加封为征西车骑将军。诸葛亮六出祁山之间,张郃多次抵御蜀军的进攻,于公元231年在木门道被诸葛亮设伏射死。后谥曰壮侯。为曹魏“五子良将”之一。', @@ -691,6 +696,696 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //OL陆郁生 + olcangxin:{ + audio:2, + trigger:{player:'damageBegin4'}, + filter:function(event,player){ + return ui.cardPile.childNodes.length>0; + }, + check:function(event,player){ + var target=event.source; + return get.damageEffect(player,target,target); + }, + content:function(){ + 'step 0' + var cards=[],cardx=Array.from(ui.cardPile.childNodes); + for(var i=cardx.length-1;i>=0;i--){ + cards.push(cardx[i]); + if(cards.length>=3) break; + } + if(!cards.length){ + event.finish(); + return; + } + player.chooseButton(['###藏心:请选择要弃置的牌###若以此法弃置了红桃牌,则防止此伤害',cards],[1,cards.length],true).set('ai',function(button){ + if(get.suit(button.link,false)!='heart') return 1; + if(!ui.selected.buttons.some(but=>get.suit(but.link,false)=='heart')) return 1; + return 0; + }); + 'step 1' + if(result.bool){ + player.$throw(result.links,1000); + game.cardsDiscard(result.links); + if(result.links.some(card=>get.suit(card,false)=='heart')) trigger.cancel(); + } + }, + group:'olcangxin_yingzi', + subSkill:{ + yingzi:{ + audio:'olcangxin', + trigger:{player:'phaseDrawBegin2'}, + filter:function(event,player){ + if(event.numFixed) return false; + var cards=[],cardx=Array.from(ui.cardPile.childNodes); + for(var i=cardx.length-1;i>=0;i--){ + cards.push(cardx[i]); + if(cards.length>=3) break; + } + return cards.some(card=>get.suit(card,false)=='heart'); + }, + forced:true, + locked:false, + content:function(){ + var cards=[],cardx=Array.from(ui.cardPile.childNodes); + for(var i=cardx.length-1;i>=0;i--){ + cards.push(cardx[i]); + if(cards.length>=3) break; + } + cards=cards.filter(card=>get.suit(card,false)=='heart'); + trigger.num+=cards.length; + }, + }, + }, + }, + skill_luyusheng_B:{ + audio:2, + trigger:{global:'phaseDiscardBegin'}, + filter:function(event,player){ + if(event.player==player) return false; + return event.player.isDamaged()&&event.player.countCards('h')!=event.player.getHandcardLimit(); + }, + direct:true, + content:function(){ + 'step 0' + var str=get.translation(trigger.player); + player.chooseControl('弃牌,+1','摸牌,-1','cancel2').set('choiceList',[ + '令'+str+'弃置一张牌,且其本回合手牌上限+1', + '令'+str+'摸一张牌,且其本回合手牌上限-1', + ]).set('ai',function(){ + var player=_status.event.player; + var trigger=_status.event.getTrigger(); + var target=trigger.player; + var num1=target.countCards('h'),num2=target.getHandcardLimit(); + switch(get.sgn(get.attitude(player,target))){ + case 0: + return 2; + break; + case 1: + if(num1-1>=num2) return 0; + if(num1+1<=num2) return 1; + return 2; + break; + case -1: + if(num1-2<=num2) return 0; + if(num1+3>=num2) return 1; + return 2; + break; + } + }).set('prompt',get.prompt('skill_luyusheng_B',trigger.player)); + 'step 1' + if(result.index!=2){ + player.logSkill('skill_luyusheng_B',trigger.player); + if(result.index==0){ + trigger.player.chooseToDiscard('he',true).set('ai',card=>{ + if(get.position(card)=='e') return -get.value(card); + return 1/(get.value(card)||0.5); + }); + trigger.player.addTempSkill('skill_luyusheng_B_+'); + trigger.player.addMark('skill_luyusheng_B_+',1,false); + } + if(result.index==1){ + trigger.player.draw(); + trigger.player.addTempSkill('skill_luyusheng_B_-'); + trigger.player.addMark('skill_luyusheng_B_-',1,false); + } + } + }, + subSkill:{ + '+':{ + charlotte:true, + onremove:true, + marktext:'+', + intro:{content:'手牌上限+#'}, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('skill_luyusheng_B_+'); + }, + }, + }, + '-':{ + charlotte:true, + onremove:true, + marktext:'-', + intro:{content:'手牌上限-#'}, + mod:{ + maxHandcard:function(player,num){ + return num-player.countMark('skill_luyusheng_B_-'); + }, + }, + }, + }, + }, + //曹羲 + olgangshu:{ + audio:2, + trigger:{ + player:'useCardAfter', + }, + filter:function(event,player){ + return get.type2(event.card,false)!='basic'; + }, + getInfo:(player)=>{ + if(!player.storage.olgangshu_buff) player.storage.olgangshu_buff=[0,0,0]; + return player.storage.olgangshu_buff; + }, + direct:true, + group:'olgangshu_reset', + content:function(){ + 'step 0' + var info=lib.skill.olgangshu.getInfo(player); + player.chooseControl('攻击范围('+info[0]+')','摸牌数('+info[1]+')','使用【杀】的上限('+info[2]+')','cancel2').set('prompt',get.prompt('olgangshu')).set('prompt2','
    令以下一个数值+1(每项至多+5):
    1.攻击范围;
    2.下个摸牌阶段的摸牌数;
    3.使用【杀】的次数上限。
    ').set('ai',()=>{ + return _status.event.choice; + }).set('choice',function(){ + var info=lib.skill.olgangshu.getInfo(player); + if(info[1]==0) return 1; + if(info[2]<5&&player.hasCard(card=>{ + return get.name(card)=='sha'&&player.hasValueTarget(card); + },'hs')&&!player.getCardUsable('sha')) return 2; + if(info[0]<5&&!game.hasPlayer(current=>{ + return player.inRange(current)&&get.effect(current,{name:'sha'},player,player)>0; + })) return 0; + var rand=Math.random(); + var list=[0,1,2].filter(i=>info[i]<5); + if(!list.length) return 'cancel2'; + if(rand<0.2&&list.includes(0)) return 0; + if(rand<0.7&&list.includes(1)) return 1; + if(rand<1.0&&list.includes(2)) return 2; + return list.randomGet(); + }()); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('olgangshu'); + player.addSkill('olgangshu_buff'); + var info=lib.skill.olgangshu.getInfo(player); + info[result.index]=Math.min(5,info[result.index]+1); + game.log(player,'的',result.control.slice(0,result.control.indexOf('(')),'#y+1'); + player.markSkill('olgangshu_buff'); + } + }, + ai:{ + threaten:3.1, + }, + subSkill:{ + buff:{ + trigger:{player:'phaseDrawBegin2'}, + charlotte:true, + onremove:true, + forced:true, + filter:function(event,player){ + var info=lib.skill.olgangshu.getInfo(player); + if(!info[1]) return false; + return !event.numFixed; + }, + content:function(){ + var info=lib.skill.olgangshu.getInfo(player); + trigger.num+=info[1]; + info[1]=0; + player.markSkill('olgangshu_buff'); + }, + mod:{ + attackRange:function(player,range){ + var info=lib.skill.olgangshu.getInfo(player); + if(info) return range+info[0]; + }, + cardUsable:function(card,player,num){ + if(card.name!='sha') return; + var info=lib.skill.olgangshu.getInfo(player); + if(info) return num+info[2]; + }, + }, + mark:true, + intro:{ + markcount:()=>0, + content:function(storage,player){ + var info=lib.skill.olgangshu.getInfo(player); + var str=''; + if(info[0]>0) str+='
  • 攻击范围+'+info[0]; + if(info[1]>0) str+='
  • 下个摸牌阶段摸牌数+'+info[1]; + if(info[2]>0) str+='
  • 使用【杀】的次数上限+'+info[2]; + return str; + }, + }, + }, + reset:{ + audio:'olgangshu', + trigger:{ + global:['shaMiss','eventNeutralized'], + }, + filter:function(event,player){ + if(event.type!='card') return false; + var responder; + if(event.name=='sha'){ + responder=event.target; + } + else{ + responder=event._neutralize_event.player; + } + return player==responder; + }, + forced:true, + locked:false, + content:function(){ + player.removeSkill('olgangshu_buff'); + game.log(player,'重置了','#g【刚述】','的数值'); + } + } + } + }, + oljianxuan:{ + audio:2, + trigger:{ + player:'damageEnd', + }, + direct:true, + content:function(){ + 'step 0' + var info=lib.skill.olgangshu.getInfo(player); + var list=[]; + list.add(player.getAttackRange()); + list.add(2+info[1]); + list.add(player.getCardUsable('sha',true)); + list.sort(); + var str=list.join('、').replace(/(.*)、/, '$1或'); + event.list=list; + player.chooseTarget(get.prompt('oljianxuan'),'令一名角色摸一张牌,然后若其手牌数为'+str+',其可以重复此流程。').set('ai',target=>{ + var list=_status.event.list; + var player=_status.event.player; + var att=get.attitude(player,target); + if(att<=0) return 0; + var num=target.countCards('h')+1; + var value=1; + while(true){ + if(list.includes(num)){ + value++; + num++; + } + else break; + } + return value+att/10; + }).set('list',list); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('oljianxuan',target); + if(player!=target) player.addExpose(0.15); + } + else event.finish(); + 'step 2' + target.draw(); + 'step 3' + if(event.list.includes(target.countCards('h'))){ + target.chooseBool('谏旋:是否摸一张牌?').set('ai',()=>true); + } + else event.finish(); + 'step 4' + if(result.bool) event.goto(2); + }, + ai:{ + combo:'olguangshu', + maixie:true, + }, + }, + //OL彭羕 + olqifan:{ + audio:2, + enable:'chooseToUse', + hiddenCard:function(player,name){ + if(name!='wuxie'&&lib.inpile.contains(name)) return true; + }, + filter:function(event,player){ + if(event.responded||event.type=='wuxie'||event.olqifan) return false; + for(var i of lib.inpile){ + if(i!='wuxie'&&event.filterCard({name:i},player,event)) return true; + } + return false; + }, + delay:false, + content:function(){ + 'step 0' + var evt=event.getParent(2); + evt.set('olqifan',true); + var cards=get.bottomCards(1+player.getStorage('olqifan').length,true); + var aozhan=player.hasSkill('aozhan'); + player.chooseButton(['器翻:选择要使用的牌',cards]).set('filterButton',function(button){ + return _status.event.cards.contains(button.link); + }).set('cards',cards.filter(function(card){ + if(aozhan&&card.name=='tao'){ + return evt.filterCard({ + name:'sha',isCard:true,cards:[card], + },evt.player,evt)||evt.filterCard({ + name:'shan',isCard:true,cards:[card], + },evt.player,evt); + } + return evt.filterCard(card,evt.player,evt); + })).set('ai',function(button){ + if(get.type(button.link)=='equip') return 0; + var evt=_status.event.getParent(3),player=_status.event.player; + if(evt.type=='phase'&&!player.hasValueTarget(button.link,null,true)) return 0; + if(evt&&evt.ai){ + var tmp=_status.event; + _status.event=evt; + var result=(evt.ai||event.ai1)(button.link,_status.event.player,evt); + _status.event=tmp; + return result; + } + return 1; + }); + 'step 1' + var evt=event.getParent(2); + if(result.bool&&result.links&&result.links.length){ + var card=result.links[0]; + var name=card.name,aozhan=(player.hasSkill('aozhan')&&name=='tao'); + if(aozhan){ + name=evt.filterCard({ + name:'sha',isCard:true,cards:[card], + },evt.player,evt)?'sha':'shan'; + } + game.broadcastAll(function(result,name){ + lib.skill.olqifan_backup.viewAs={name:name,cards:[result],isCard:true}; + },card,name); + evt.set('_backupevent','olqifan_backup'); + evt.set('openskilldialog',('请选择'+get.translation(card)+'的目标')) + evt.backup('olqifan_backup'); + } + evt.goto(0); + }, + ai:{ + effect:{ + target:function(card,player,target,effect){ + if(get.tag(card,'respondShan')) return 0.7; + if(get.tag(card,'respondSha')) return 0.7; + } + }, + order:12, + respondShan:true, + respondSha:true, + result:{ + player:function(player){ + if(_status.event.dying) return get.attitude(player,_status.event.dying); + return 1; + } + } + }, + onremove:true, + intro:{ + content:'已使用过$牌', + }, + subSkill:{ + discard:{ + trigger:{player:'chooseToUseAfter'}, + forced:true, + charlotte:true, + filter:(event,player)=>{ + var num=player.getStorage('olqifan').length,pos=('jeh').slice(0,num); + return num>0&&player.countCards(pos)>0; + }, + content:function(){ + var pos=('jeh')[event.num],hs=player.countCards(pos); + if(hs>0) player.chooseToDiscard(hs,pos,true); + event.num++; + if(event.numevt==event.getParent()) + .filter(lib.skill.olqifan_discard.filter) + .then(()=>{ + event.maxNum=Math.min(3,player.getStorage('olqifan').length); + event.num=0; + }) + .then(lib.skill.olqifan_discard.content) + .translation('器翻'); + }, + filterCard:function(){return false}, + selectCard:-1, + }, + oltuishi:{ + audio:2, + mod:{ + wuxieJudgeEnabled:()=>false, + wuxieEnabled:()=>false, + cardEnabled:(card)=>{ + if(card.name=='wuxie') return false; + }, + targetInRange:(card)=>{ + if(card.storage&&card.storage.oltuishi) return true; + }, + aiValue:(player,card,val)=>{ + if(card.name=='wuxie') return 0; + var num=get.number(card); + if([1,11,12,13].includes(num)) return val*1.1; + }, + aiUseful:(player,card,val)=>{ + if(card.name=='wuxie') return 0; + var num=get.number(card); + if([1,11,12,13].includes(num)) return val*1.1; + }, + aiOrder:(player,card,order)=>{ + if(get.name(card)=='sha'&&player.hasSkill('oltuishi_unlimit')) order+=9; + var num=get.number(card); + if([1,11,12,13].includes(num)) order+=3; + return order; + }, + }, + trigger:{player:'useCardAfter'}, + forced:true, + filter:function(event){ + const num=get.number(event.card); + return [1,11,12,13].includes(num); + }, + content:function(){ + player.draw(2); + player.addSkill('oltuishi_unlimit'); + }, + subSkill:{ + unlimit:{ + charlotte:true, + mod:{ + cardUsable:()=>Infinity, + targetInRange:()=>true, + }, + trigger:{player:'useCard1'}, + forced:true, + popup:false, + silent:true, + firstDo:true, + content:function(){ + player.removeSkill('oltuishi_unlimit') + var card=trigger.card; + if(!card.storage) card.storage={}; + card.storage.oltuishi=true; + if(trigger.addCount!==false){ + trigger.addCount=false; + player.getStat('card')[card.name]--; + } + }, + mark:true, + intro:{content:'使用的下一张牌无距离次数限制'}, + }, + }, + }, + //OL牵招 + olweifu:{ + audio:2, + enable:'phaseUse', + filterCard:lib.filter.cardDiscardable, + position:'he', + filter:function(event,player){ + return player.hasCard(card=>lib.filter.cardDiscardable(card,player),'he'); + }, + check:function(card){ + var player=_status.event.player; + return (5-get.value(card))/Math.pow(Math.max(0.1,player.getUseValue(card)),0.33); + }, + content:function(){ + 'step 0' + player.judge(card=>{ + var evt=_status.event.getParent(); + var cardx=evt.cards[0]; + if(get.type2(card)==get.type2(cardx)) return 0.5; + return 0.1; + }).set('callback',function(){ + var card=event.judgeResult.card; + player.addTempSkill('olweifu_clear'); + player.addTempSkill('olweifu_add'); + if(!get.is.object(player.storage.olweifu_add)) player.storage.olweifu_add={}; + var type=get.type2(card,player); + if(typeof player.storage.olweifu_add[type]!='number') player.storage.olweifu_add[type]=0; + player.storage.olweifu_add[type]++; + player.markSkill('olweifu_add'); + if(type==get.type2(event.getParent(2).cards[0],player)) player.draw(); + }).set('judge2',result=>result.bool); + }, + ai:{ + order:7, + result:{ + player:function(player){ + return player.hasCard(card=>{ + var type=get.type2(card); + if(type=='equip') return false; + return player.hasUseTarget(card)&&player.getUseValue(card)>5&&game.countPlayer(current=>{ + return lib.filter.targetEnabled2(card,player,current)&&get.effect(current,card,player,player)>0; + })+1>(get.is.object(player.storage.olweifu_add)?(player.storage.olweifu_add[type]||0):0); + },'hs')?1:0; + }, + }, + }, + subSkill:{ + clear:{ + trigger:{player:'useCard1'}, + filter:function(event,player){ + var type=get.type2(event.card); + if(get.is.object(player.storage.olweifu_add)&&typeof player.storage.olweifu_add[type]=='number') return true; + return false; + }, + silent:true, + firstDo:true, + charlotte:true, + content:function(){ + var type=get.type2(trigger.card); + var num=player.storage.olweifu_add[type]; + delete player.storage.olweifu_add[type]; + if(get.is.empty(player.storage.olweifu_add)){ + delete player.storage.olweifu_add; + player.unmarkSkill('olweifu_add'); + } + trigger._olweifu_clear=num; + } + }, + add:{ + trigger:{player:'useCard2'}, + filter:function(event,player){ + if(!event._olweifu_clear) return false; + var info=get.info(event.card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + if(game.hasPlayer(current=>{ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current); + })) return true; + } + return false; + }, + onremove:true, + charlotte:true, + direct:true, + content:function(){ + 'step 0' + var num=trigger._olweifu_clear; + player.chooseTarget(get.prompt('olweifu'),'为'+get.translation(trigger.card)+'额外指定'+get.cnNumber(num)+'个目标。',[1,num],(card,player,target)=>{ + return !_status.event.sourcex.contains(target)&&lib.filter.targetEnabled2(_status.event.card,player,target); + }).set('sourcex',trigger.targets).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,_status.event.card,player,player); + }).set('card',trigger.card); + 'step 1' + if(result.bool){ + var targets=result.targets; + player.logSkill('olweifu_add',targets); + trigger.targets.addArray(targets); + game.log(targets,'也成为了',trigger.card,'的目标'); + if(!event.isMine()&&!event.isOnline()) game.delayex(); + } + }, + intro:{ + markcount:()=>0, + content:(storage,player)=>{ + if(!get.is.object(storage)) return; + var str='使用下一张以下类型的牌无距离限制,且可以额外指定对应数量个目标:'; + for(var type in storage){ + str+='
  • '+get.translation(type)+'牌:+'+storage[type]; + } + return str; + } + }, + mod:{ + targetInRange:(card,player)=>{ + var type=get.type2(card); + if(get.is.object(player.storage.olweifu_add)&&typeof player.storage.olweifu_add[type]=='number') return true; + }, + } + } + }, + }, + olkuansai:{ + audio:2, + trigger:{ + global:'useCardToPlayered', + }, + filter:function(event,player){ + return event.isFirstTarget&&event.targets.length>player.getHp(); + }, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('olkuansai'),'令其中一个目标选择一项:1.交给你一张牌;2.令你回复1点体力。',(card,player,target)=>{ + return _status.event.targets.contains(target); + }).set('targets',trigger.targets).set('ai',target=>{ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att>0) return 1; + return (1-att)/Math.sqrt(1+target.countCards('he')); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('olkuansai',target); + var position='e'; + if(player!=target) position+='h'; + var forced=player.isHealthy(); + var str='请交给其一张牌'+(forced?'':'或点击“取消”令其回复1点体力')+'。'; + if(!target.countCards(position)) event._result={bool:false}; + else target.chooseCard(get.translation(player)+'对你发动了【款塞】',str,position,forced).set('ai',card=>{ + if(_status.event.recover) return 0; + var target=_status.event.player,player=_status.event.getParent().player; + if(get.attitude(target,player)>0){ + return get.value(card,target)-get.value(card,player); + } + if(get.tag(card,'recover')) return -1; + return 6.5-get.value(card); + }).set('recover',function(){ + if(forced) return false; + var recoverEff=get.recoverEffect(player,target,target); + var att=get.attitude(target,player); + if(att<0){ + if(recoverEff>=0) return true; + if(target.hasCard(card=>{ + return get.value(card)<6.5&&!get.tag(card,'recover')||get.value(card)<=0.05; + },position)) return false; + } + else{ + if(recoverEff>0) return true; + if(target.hasCard(card=>{ + return get.value(card,target)0&&info.number==get.suit(card,false)) return true; + if(typeof info.number=='number'&&info.number>0&&info.number==get.number(card,false)) return true; return info.length==get.cardNameLength(card) }, content:function(){ @@ -6469,6 +7164,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dialog.classList.add('scroll2'); dialog.classList.add('fullwidth'); dialog.classList.add('fullheight'); + ui.arena.classList.add('choose-to-move'); dialog.buttonss=[]; var list=['协力锻造的玩家','妨碍锻造的玩家'] @@ -6553,6 +7249,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.pause(); } 'step 4' + game.broadcastAll(function(){ + setTimeout(function(){ + ui.arena.classList.remove('choose-to-move'); + },500); + }) game.delay(2); var num1=0,num2=0; for(var i of event.cards2[0]) num1+=get.number(i,false); @@ -7220,7 +7921,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cards:cards, filterTarget:lib.filter.notMe, selectCard:[1,cards.length], - prompt:'是否将获得的牌分配给其他角色?', + prompt:'是否将得到的牌分配给其他角色?', ai1:function(card){ return -1; }, @@ -8475,7 +9176,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cards:cards, filterTarget:lib.filter.notMe, selectCard:[1,cards.length], - prompt:'是否将获得的牌分配给其他角色?', + prompt:'是否将得到的牌分配给其他角色?', ai1:function(card){ if(!ui.selected.cards.length) return 1; return 0; @@ -12054,9 +12755,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //forced:true, frequent:true, filter:function(event,player){ + if(player.getHp()<=player.countCards('h')) return false; if(event.name=='loseAsync'){ - if(event.type!='gain'||player.hp>player.countCards('h')) return false; - var cards=event.getl(player).cards2; + if(event.type!='gain') return false; + var cards=event.getl(player).hs; return game.hasPlayer(function(current){ if(current==player) return false; var cardsx=event.getg(current); @@ -12066,11 +12768,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; }); } - if(event.player!=player&&player.hp>player.countCards('h')){ - var evt=event.getl(player); - return evt&&evt.hs&&evt.hs.length>0; - } - return false; + if(event.player==player) return false; + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length>0; }, preHidden:true, content:function(){ @@ -12783,9 +13483,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, qingzhong:{ audio:2, - }, - qingzhongx:{ - audio:'weijing', trigger:{player:'phaseUseBegin'}, check:function(event,player){ if(game.hasPlayer(function(current){ @@ -12800,15 +13497,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ player.draw(2); - player.addTempSkill('qingzhongx_give'); + player.addTempSkill('qingzhong_give'); }, subSkill:{ give:{ + audio:'qingzhong', trigger:{player:'phaseUseEnd'}, filter:function(event,player){ return !player.isMinHandcard(true); }, - audio:'weijing', forced:true, content:function(){ 'step 0' @@ -12846,7 +13543,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:['weijing_sha','weijing_shan'], subSkill:{ sha:{ - audio:'qingzhong', + audio:'weijing', enable:'chooseToUse', viewAs:{name:'sha',isCard:true}, filterCard:function(){return false}, @@ -12877,7 +13574,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, shan:{ - audio:'qingzhong', + audio:'weijing', enable:'chooseToUse', viewAs:{name:'shan',isCard:true}, mark:false, @@ -12894,7 +13591,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ order:function(){ var player=_status.event.player; - if(player.hasSkill('qingzhongx_give')) return 2.95; + if(player.hasSkill('qingzhong_give')) return 2.95; return 3.15; }, skillTagFilter:function(player){ @@ -15405,7 +16102,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiehui2:{ mark:true, intro:{ - content:'不能使用、打出或弃置获得的黑色牌', + content:'不能使用、打出或弃置得到的黑色牌', }, mod:{ cardDiscardable:function(card,player){ @@ -21003,7 +21700,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' var evt=event.getParent(2); if(result.bool&&result.links&&result.links.length){ - var name=result.links[0].name,aozhan=(player.hasSkill('aozhan')&&name=='tao'); + var card=result.links[0]; + var name=card.name,aozhan=(player.hasSkill('aozhan')&&name=='tao'); if(aozhan){ name=evt.filterCard({ name:'sha',isCard:true,cards:[card], @@ -21012,9 +21710,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(evt.name=='chooseToUse'){ game.broadcastAll(function(result,name){ lib.skill.aocai_backup.viewAs={name:name,cards:[result],isCard:true}; - lib.skill.aocai_backup.prompt='选择'+get.translation(result)+'的目标'; - },result.links[0],name); + },card,name); evt.set('_backupevent','aocai_backup'); + evt.set('openskilldialog',('请选择'+get.translation(card)+'的目标')) evt.backup('aocai_backup'); } else{ @@ -21051,10 +21749,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sourceSkill:'aocai', precontent:function(){ delete event.result.skill; - var name=event.result.card.name; - event.result.cards=event.result.card.cards; - event.result.card=get.autoViewAs(event.result.cards[0]); - event.result.card.name=name; + var name=event.result.card.name,cards=event.result.card.cards.slice(0); + event.result.cards=cards; + var rcard=cards[0],card; + if(rcard.name==name) card=get.autoViewAs(rcard); + else card=get.autoViewAs({name,isCard:true}); + event.result.card=card; }, filterCard:function(){return false}, selectCard:-1, @@ -22427,7 +23127,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, viewAs:{ name:"huogong", - nature:"fire", }, viewAsFilter:function (player){ if(player.hasSkill('huoji')) return false; @@ -23287,6 +23986,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ganfuren:['dc_ganfuren','ganfuren'], wenqin:['wenqin','pe_wenqin'], zhouqun:['ol_zhouqun','zhouqun'], + qianzhao:['ol_qianzhao','qianzhao'], + ol_pengyang:['ol_pengyang','sp_pengyang'], }, translate:{ "xinfu_lingren":"凌人", @@ -23482,7 +24183,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liewei_info:'当你杀死一名角色后,你可以摸三张牌。', weicheng:'伪诚', - weicheng_info:'当其他角色获得你的手牌后,若你的手牌数小于体力值,你可以摸一张牌。', + weicheng_info:'当牌从你的手牌区移动至其他角色的手牌区后,若你的手牌数小于体力值,你可以摸一张牌。', daoshu:'盗书', daoshu_info:'出牌阶段限一次。你可以选择一个花色并获得一名其他角色的一张手牌。若此牌花色与你选择的相同,则你对其造成1点伤害且你〖盗书〗于此阶段内可使用的次数上限+1。否则你须交给其一张与此牌花色不同的手牌(没有则展示手牌)。', @@ -23552,12 +24253,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fengying_info:'限定技,出牌阶段,你可以弃置所有手牌。若如此做,你可以令等量的角色将手牌摸至X张(X为其体力上限且至多为5)。然后,你结束出牌阶段,并在当前回合结束后进行一个新的回合。', qingzhong:'清忠', - qingzhongx:'清忠', - qingzhongx_info:'出牌阶段开始时,你可以摸两张牌,若如此做,此阶段结束时,你与手牌数最少的角色交换手牌。', + qingzhong_info:'出牌阶段开始时,你可以摸两张牌,若如此做,此阶段结束时,你与手牌数最少的角色交换手牌。', weijing:'卫境', weijing_info:'每轮限一次,当你需要使用【杀】或【闪】时,你可以视为使用一张【杀】或【闪】。', zishu:'自书', - zishu_info:'锁定技,你的回合外,你获得的牌均会在当前回合结束后置入弃牌堆;你的回合内,当你不因〖自书〗而获得牌时,你摸一张牌。', + zishu_info:'锁定技。①其他角色的回合结束时,你将手牌区里所有你于此回合得到过的牌置入弃牌堆。②当你于回合内不因〖自书②〗而得到牌后,你摸一张牌。', yingyuan:'应援', yingyuan_info:'当你于回合内使用的牌结算完成后,你可以将其交给一名其他角色(相同牌名的牌每回合限一次)。', xinyingyuan:'应援', @@ -23964,7 +24664,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shushen_info:'当你回复1点体力时,你可以令一名其他角色选择回复1点体力或摸两张牌。', wuji_info:'觉醒技,结束阶段开始时,若你于此回合内造成过3点或更多伤害,你加1点体力上限并回复1点体力,失去〖虎啸〗,然后从场上、牌堆或弃牌堆中获得【青龙偃月刀】', xueji_info:'出牌阶段限一次,你可以弃置一张红色牌,然后选择至多X名角色,横置这些角色并对其中一名角色造成1点火焰伤害。(X为你已损失的体力值且至少为1)', - huxiao_info:'锁定技,当你造成火属性伤害时,该角色摸一张牌。然后,你于此回合内对其使用牌没有次数限制。', + huxiao_info:'锁定技,当你造成火焰伤害后,你令受伤角色摸一张牌,然后你于此回合内对其使用牌没有次数限制。', aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌(若你没有手牌则改为四张)。若你观看的牌中有此牌,你可以使用打出之。', aocai_info_guozhan:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌。若你观看的牌中有此牌,你可以使用打出之。', hongyuan_info:'摸牌阶段,你可以少摸一张牌并指定至多两名其他角色。若如此做,这些角色各摸一张牌。', @@ -24051,8 +24751,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zyqiao_info:'每回合限两次。当你成为其他角色使用牌的目标后,你可以弃置其一张牌,然后你弃置一张牌。', zyqiao_info_guozhan:'每回合限两次。当你成为其他势力的角色使用牌的目标后,你可以弃置其一张牌,然后你弃置一张牌。', chengshang:'承赏', - chengshang_info:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。', - chengshang_info_guozhan:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。', + chengshang_info:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗得到过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。', + chengshang_info_guozhan:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗得到过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。', panshu:'OL潘淑', weiyi:'威仪', weiyi_info:'每名角色限一次。当有角色受到伤害后,你可选择:①若其体力值不小于你,则其失去1点体力。②若其体力值不大于你且其已受伤,则其回复1点体力。', @@ -24097,7 +24797,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olxiuhao_info:'每回合限一次。当你受到其他角色造成的伤害时,或对其他角色造成伤害时,你可防止此伤害,然后令伤害来源摸两张牌。', olsujian:'素俭', olsujian_given:'已分配', - olsujian_info:'锁定技。弃牌阶段开始前,你将此阶段的规则改为:{你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌}。', + olsujian_info:'锁定技。弃牌阶段开始前,你将此阶段的规则改为:{你选择一项:①将所有不为本回合得到的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌}。', ol_wangrong:'OL王荣', olfengzi:'丰姿', olfengzi_info:'出牌阶段限一次。当你使用有目标的基本牌或普通锦囊牌时,你可弃置一张与此牌类型相同的牌,然后令此牌结算两次。', @@ -24317,7 +25017,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olkenshang:'垦伤', olkenshang_info:'你可以将任意张牌当【杀】使用,然后你可以将此牌目标改为所有你攻击范围外的角色。此牌结算结束后,若此牌对应的实体牌数大于X,你摸X张牌(X为此牌造成过的伤害值),否则你失去一个技能。', rekenshang:'垦伤', - rekenshang_info:'你可以将至少两张牌当【杀】使用,然后你可以将此牌目标改为等量名角色。此牌结算结束后,若此牌对应的实体牌数大于X,你摸X张牌(X为此牌造成过的伤害值)。', + rekenshang_info:'你可以将至少两张牌当【杀】使用,然后你可以将此牌目标改为等量名角色。此牌结算结束后,若此牌对应的实体牌数大于此牌造成过的伤害值,你摸一张牌。', ol_zhujun:'OL朱儁', olcuipo:'摧破', olcuipo_info:'锁定技。当你使用牌时,若此牌是你本回合使用的第X张牌(X为此牌牌名的字数),则:{若此牌为【杀】或伤害类锦囊牌,则此牌的伤害值基数+1,否则你摸一张牌}。', @@ -24404,7 +25104,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olniluan:'逆乱', olniluan_info:'体力值大于你的其他角色的结束阶段,若其本回合内使用过【杀】,则你可以将一张黑色牌当作【杀】对其使用(无距离限制)。', olxiaoxi:'骁袭', - olxiaoxi_info:'新的一轮开始时,你可以视为使用一张无距离限制的【杀】。', + olxiaoxi_info:'一轮游戏开始时,你可以视为使用一张无距离限制的【杀】。', + ol_qianzhao:'牵招', + olweifu:'威抚', + olweifu_info:'出牌阶段,你可以弃置一张牌并判定。你本回合下次使用与结果类型相同的牌无距离限制,且可以额外指定一个目标。若你弃置的牌与判定牌类型相同,你摸一张牌。', + olkuansai:'款塞', + olkuansai_info:'当一张牌指定第一个目标后,若目标数大于你的体力值,你可以令其中一个目标选择一项:1.交给你一张牌;2.令你回复1点体力。', + ol_luyusheng:'OL陆郁生', + olcangxin:'藏心', + olcangxin_info:'①当你受到伤害时,你可以观看牌堆底的三张牌并弃置其中任意张牌,若你以此法弃置了红桃牌,则防止此伤害。②摸牌阶段,你多摸X张牌(X为牌堆底前三张牌中红桃牌的数量)。', + skill_luyusheng_B:'技能', + skill_luyusheng_B_info:'其他角色的弃牌阶段开始时,若其已受伤且其手牌数不等于其体力上限,则你可以选择一项:①令其弃置一张牌,其本回合手牌上限+1;②令其摸一张牌,其本回合手牌上限-1。', + caoxi:'曹羲', + olgangshu:'刚述', + olgangshu_info:'①当你使用非基本牌结算结束后,你可以令以下一项数值+1(每项至多以此法+5):1.攻击范围;2.受〖刚述〗影响的下个摸牌阶段摸牌数;3.使用【杀】的次数上限。②当有牌被你抵消后,重置你〖刚述①〗增加的所有数值。', + oljianxuan:'谏旋', + oljianxuan_info:'当你受到伤害后,你可以令一名角色摸一张牌,然后若其手牌数等于你〖刚述①〗中的任意一项对应的数值,其可以重复此流程。', + ol_pengyang:'OL彭羕', + olqifan:'器翻', + olqifan_info:'当你需要使用不为【无懈可击】的牌时,你可以观看牌堆底的X+1张牌并使用其中的一张。此牌结算结束时,你依次弃置以下前X个区域中的所有牌:⒈判定区、⒉装备区、⒊手牌区(X为你因此技能使用过的牌中包含的类型数)。', + oltuishi:'侻失', + oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌后,你摸两张牌,且你使用的下一张牌无距离和次数限制。', sp_tianji:'天极·皇室宗亲', sp_sibi:'四弼·辅国文曲', diff --git a/character/sp2.js b/character/sp2.js index 092e14b91..c48f19d03 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -179,11 +179,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(evt.gaintag_map[i].contains('dcjiaoxia_used')) return true; } return false; - }).length&&player.getHistory('sourceDamage',evt=>evt.card==event.card).length; + }).length&&player.getHistory('sourceDamage',evt=>evt.card==event.card).length&&!['delay','equip'].contains(get.type(event.cards[0],player)); }, direct:true, content:function(){ - var card=get.copy(trigger.cards[0]); + var card={ + name:get.name(trigger.cards[0],player), + nature:get.nature(trigger.cards[0],player), + isCard:true, + }; player.chooseUseTarget(card,get.prompt('dcjiaoxia'),false,false).set('prompt2','视为使用'+get.translation(card)).logSkill='dcjiaoxia'; }, }, @@ -815,7 +819,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var skills=player.getStorage('dclongsong_back'); for(var key of skills){ game.log(player,'恢复了技能','#g【'+get.translation(key)+'】'); - delete player.storage[key]; + //delete player.storage[key]; } player.enableSkill(skill); player.popup(skills,'thunder'); @@ -2024,11 +2028,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ subSkill:{ random:{ audio:'dunxi', - trigger:{global:'useCardToPlayer'}, + trigger:{global:'useCard'}, forced:true, locked:false, filter:function(event,player){ - if(!event.player.hasMark('dunxi')||event.targets.length!=1||event.getParent()._dunxi) return false; + if(!event.player.hasMark('dunxi')||event.targets.length!=1||event._dunxi||_status.dying.length) return false; var type=get.type2(event.card,false); return (type=='basic'||type=='trick'); }, @@ -2036,12 +2040,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ line:'fire', content:function(){ 'step 0' - trigger.getParent()._dunxi=true; + trigger._dunxi=true; trigger.player.removeMark('dunxi',1); var target=trigger.target; event.target=target; trigger.targets.remove(target); - trigger.getParent().triggeredTargets1.remove(target); + //trigger.triggeredTargets1.remove(target); trigger.untrigger(); game.delayx(); 'step 1' @@ -6575,7 +6579,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(cards.length&&game.hasPlayer(function(current){ return current!=player&&!event.given.contains(current); })) player.chooseCardTarget({ - prompt:'是否将获得的牌中的任意张交给其他角色?', + prompt:'是否将得到的牌中的任意张交给其他角色?', selectCard:[1,cards.length], filterCard:function(card){ return _status.event.cards.contains(card); @@ -6646,7 +6650,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mubing_rewrite:{ mark:true, intro:{ - content:'出牌阶段开始时,你可以展示牌堆顶的四张牌。你可弃置任意张手牌,并可获得任意张点数之和不大于你弃置的牌点数之和的牌。然后你可将以此法获得的牌以任意方式交给其他角色。', + content:'出牌阶段开始时,你可以展示牌堆顶的四张牌。你可弃置任意张手牌,并可获得任意张点数之和不大于你弃置的牌点数之和的牌。然后你可将以此法得到的牌以任意方式交给其他角色。', }, }, diaoling:{ @@ -8699,7 +8703,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!player.storage.guju) player.storage.guju=0; }, intro:{ - content:'已因此技能获得#张牌' + content:'已因此技能得到#张牌' }, trigger:{global:'damageEnd'}, forced:true, @@ -9865,7 +9869,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterIntro:{ tangji:'唐姬,会稽太守唐瑁女,弘农怀王刘辩的妃子。刘辩死后,唐姬回归故里,因节烈不愿改嫁他人,后被汉献帝下诏封为弘农王妃。', - lijue:"李傕(jué,一说“傕”读音“què”)(?—198年),字稚然。北地郡泥阳县(今陕西省耀县)人,汉末群雄之一。东汉末年汉献帝时的军阀、权臣,官至大司马、车骑将军、开府、领司隶校尉、假节。
    李傕本为董卓部将,后被董卓的女婿牛辅派遣至中牟与朱儁交战,大破朱儁,进而至陈留、颍川等地劫掠。初平三年(192年)董卓和牛辅被杀后,李傕归无所依,于是采用贾诩之谋,伙同郭汜、张济、樊稠等原董卓部曲将攻向长安。击败吕布,杀死王允等人,占领长安,把持朝廷大权。后诸将不和,李傕在会议上杀死了樊稠,又与郭汜分别劫持了汉献帝和众臣,相互交战,张济率兵赶来和解,于是二人罢兵,李傕出屯池阳黄白城,郭汜、张济等人随汉献帝东归前往弘农。
    后来,李傕、郭汜、张济反悔,联合起来追击汉献帝,与杨奉、董承等人几番交战。汉献帝一路逃亡,狼狈不堪,到达安邑,与李傕等人讲和。不久,汉献帝被曹操迎往许都。建安三年(198年),曹操派谒者仆射裴茂召集关西诸将段煨等人征讨李傕,灭其三族。", + lijue:"李傕(一说“傕”读音“què”)(?—198年),字稚然。北地郡泥阳县(今陕西省耀县)人,汉末群雄之一。东汉末年汉献帝时的军阀、权臣,官至大司马、车骑将军、开府、领司隶校尉、假节。
    李傕本为董卓部将,后被董卓的女婿牛辅派遣至中牟与朱儁交战,大破朱儁,进而至陈留、颍川等地劫掠。初平三年(192年)董卓和牛辅被杀后,李傕归无所依,于是采用贾诩之谋,伙同郭汜、张济、樊稠等原董卓部曲将攻向长安。击败吕布,杀死王允等人,占领长安,把持朝廷大权。后诸将不和,李傕在会议上杀死了樊稠,又与郭汜分别劫持了汉献帝和众臣,相互交战,张济率兵赶来和解,于是二人罢兵,李傕出屯池阳黄白城,郭汜、张济等人随汉献帝东归前往弘农。
    后来,李傕、郭汜、张济反悔,联合起来追击汉献帝,与杨奉、董承等人几番交战。汉献帝一路逃亡,狼狈不堪,到达安邑,与李傕等人讲和。不久,汉献帝被曹操迎往许都。建安三年(198年),曹操派谒者仆射裴茂召集关西诸将段煨等人征讨李傕,灭其三族。", zhangji:"张济(?-196年),武威郡祖厉县(今甘肃靖远东南)人。东汉末年割据军阀之一。 张济原为董卓部将,董卓被诛杀后,张济与李傕一同率军攻破长安,任中郎将。不久,升任镇东将军,封平阳侯,出屯弘农。献帝东迁时,张济升任骠骑将军,率军护卫献帝,后来因与董承等人有矛盾,便与李傕、郭汜一同追赶献帝。 建安元年(196年),张济因军队缺粮而进攻穰城,中流矢而死。死后,部队由侄儿张绣接管。", guosi:"郭汜(?-197年),又名郭多,凉州张掖(今甘肃张掖西北)人,东汉末年将领、军阀,献帝时权臣。原为董卓部下。董卓被杀后,凉州众将归无所依,于是采用贾诩之谋,联兵将攻向长安,击败吕布,杀死王允等人,占领长安,把持朝廷大权。几年后,郭汜被部将伍习杀死。", fanchou:"樊稠(?—195年),凉州金城(治今甘肃永靖西北)人。东汉末年军阀、将领。官至右将军,封万年侯。 原为董卓部将,董卓死后,伙同李傕、郭汜、张济等人合众十余万反扑长安,败吕布、杀王允,把持朝政。后马腾因与李傕有隙,于是联合韩遂举兵进攻,李傕派樊稠、郭汜等与其交战,大败马腾、韩遂于长平观下。樊稠追至陈仓,与韩遂友好罢兵,却遭李傕猜疑。兴平二年(195年),李傕让外甥骑都尉胡封在会议上将樊稠刺死(一说趁醉用杖击杀)。", @@ -9948,7 +9952,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, dynamicTranslate:{ mubing:function(player){ - if(player.storage.mubing2) return '出牌阶段开始时,你可以展示牌堆顶的四张牌。你可弃置任意张手牌,并可获得任意张点数之和不大于你弃置的牌点数之和的牌。然后你可将以此法获得的牌以任意方式交给其他角色。'; + if(player.storage.mubing2) return '出牌阶段开始时,你可以展示牌堆顶的四张牌。你可弃置任意张手牌,并可获得任意张点数之和不大于你弃置的牌点数之和的牌。然后你可将以此法得到的牌以任意方式交给其他角色。'; return '出牌阶段开始时,你可以展示牌堆顶的三张牌。你可弃置任意张手牌,并可获得任意张点数之和不大于你弃置的牌点数之和的牌。'; }, piaoping:function(player){ @@ -9979,7 +9983,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huangfusong:['huangfusong','sp_huangfusong','jsrg_huangfusong','old_huangfusong'], dingyuan:['ol_dingyuan','dingyuan'], quyi:['quyi','re_quyi'], - hansui:['xin_hansui','re_hansui'], + hansui:['hansui','xin_hansui','re_hansui'], jin_simashi:['jin_simashi','simashi'], jin_yanghuiyu:['jin_yanghuiyu','yanghuiyu'], taoqian:['taoqian','re_taoqian'], @@ -9990,10 +9994,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pangdegong:['re_pangdegong','pangdegong'], zhujun:['sp_zhujun','ol_zhujun','zhujun','jsrg_zhujun'], tw_liuhong:['tw_liuhong','liuhong','jsrg_liuhong'], - re_hejin:['re_hejin','tw_hejin','jsrg_hejin'], + re_hejin:['hejin','re_hejin','tw_hejin','jsrg_hejin'], hujinding:['dc_hujinding','hujinding'], caosong:['caosong','sp_caosong'], - re_niujin:['re_niujin','tw_niujin'], + re_niujin:['niujin','re_niujin','tw_niujin'], haomeng:['haomeng','tw_haomeng'], zhangning:['zhangning','tw_zhangning'], caoanmin:['caoanmin','ns_caoanmin'], @@ -10086,7 +10090,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ guju:'骨疽', guju_info:'锁定技,拥有“傀”标记的角色受到伤害后,你摸一张牌。', baijia:'拜假', - baijia_info:'觉醒技,准备阶段,若你因〖骨疽〗获得的牌不少于7张,则你增加1点体力上限,回复1点体力,然后令所有未拥有“傀”标记的其他角色获得“傀”标记,最后失去技能〖骨疽〗,并获得技能〖蚕食〗。', + baijia_info:'觉醒技,准备阶段,若你因〖骨疽〗得到的牌不少于7张,则你增加1点体力上限,回复1点体力,然后令所有未拥有“傀”标记的其他角色获得“傀”标记,最后失去技能〖骨疽〗,并获得技能〖蚕食〗。', bmcanshi:'蚕食', bmcanshi_info:'一名角色使用基本牌或普通锦囊牌指定你为唯一目标时,若其有“傀”标记,你可以取消之,然后其失去“傀”标记;你使用牌仅指定一名角色为目标时,你可以额外指定任意名带有“傀”标记的角色为目标(无距离限制),然后这些角色失去“傀”标记。', @@ -10109,7 +10113,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lslixun_fate:'利熏', lslixun_info:'锁定技,当你受到伤害时,你防止此伤害,然后获得等同于伤害值的“珠”标记。出牌阶段开始时,你进行判定,若结果点数小于“珠”的数量,你弃置等同于“珠”数量的手牌(若弃牌的牌数不够,则失去剩余数量的体力值)。', lskuizhu:'馈珠', - lskuizhu_info:'出牌阶段结束时,你可以选择体力值为全场最多的一名其他角色,将手牌摸至与该角色相同(最多摸至五张),然后该角色观看你的手牌,弃置任意张手牌并从观看的牌中获得等量的牌。若其获得的牌大于一张,则你选择一项:移去一个“珠”;或令其对其攻击范围内的一名角色造成1点伤害。', + lskuizhu_info:'出牌阶段结束时,你可以选择体力值为全场最多的一名其他角色,将手牌摸至与该角色相同(最多摸至五张),然后该角色观看你的手牌,弃置任意张手牌并从观看的牌中获得等量的牌。若其得到的牌大于一张,则你选择一项:移去一个“珠”;或令其对其攻击范围内的一名角色造成1点伤害。', xpchijie:'持节', xpchijie_info:'每回合每项各限一次。1.当其他角色使用的牌对你结算结束后,你可以令此牌对所有后续目标无效。2.其他角色使用的牌结算完成时,若你是此牌的目标之一且此牌未造成过伤害,则你可以获得此牌对应的所有实体牌。', xpchijie2:'持节', @@ -10187,7 +10191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diaoling:'调令', diaoling_info:'觉醒技,准备阶段,若你已因〖募兵〗获得了6张或更多的【杀】或武器牌或伤害锦囊牌,则你回复1点体力或摸两张牌,然后修改〖募兵〗。', mubing_rewrite:'募兵·改', - mubing_rewrite_info:'出牌阶段开始时,你可以展示牌堆顶的四张牌。你可弃置任意张手牌,并可获得任意张点数之和不大于你弃置的牌点数之和的牌。然后你可将以此法获得的牌以任意方式交给其他角色。', + mubing_rewrite_info:'出牌阶段开始时,你可以展示牌堆顶的四张牌。你可弃置任意张手牌,并可获得任意张点数之和不大于你弃置的牌点数之和的牌。然后你可将以此法得到的牌以任意方式交给其他角色。', caobuxing:'曹不兴', moying:'墨影', moying_info:'每回合限一次,当你于回合外不因使用而失去单一一张锦囊牌或装备牌后,你可以选择一个花色和与此牌点数差绝对值不超过2的点数,然后获得牌堆中所有与此牌花色点数相同的牌。', @@ -10232,7 +10236,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangrong:'王荣', minsi:'敏思', minsi2:'敏思', - minsi_info:'出牌阶段限一次,你可以弃置任意张点数之和为13的牌,然后摸两倍数量的牌。以此法获得的牌中,黑色牌本回合无距离限制,红色牌本回合不计入手牌上限。', + minsi_info:'出牌阶段限一次,你可以弃置任意张点数之和为13的牌,然后摸两倍数量的牌。以此法得到的牌中,黑色牌本回合无距离限制,红色牌本回合不计入手牌上限。', jijing:'吉境', jijing_info:'当你受到伤害后,你可以进行一次判定,然后若你弃置任意张点数之和与判定结果点数相同的牌,你回复1点体力。', zhuide:'追德', @@ -10328,7 +10332,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ redaoji2:'盗戟', redaoji_info:'其他角色第一次使用武器牌时,你可选择一项:①获得此牌。②令其本回合内不能使用或打出【杀】。', fuzhong:'负重', - fuzhong_info:'锁定技,当你于回合外获得牌后,你获得一枚“重”标记。若X:大于0,你于摸牌阶段开始时令额定摸牌数+1;大于1,你至其他角色的距离-2;大于2,你的手牌上限+3;大于3,结束阶段开始时,你对一名其他角色造成1点伤害,然后移去4枚“重”(X为“重”数)。', + fuzhong_info:'锁定技,当你于回合外得到牌后,你获得一枚“重”标记。若X:大于0,你于摸牌阶段开始时令额定摸牌数+1;大于1,你至其他角色的距离-2;大于2,你的手牌上限+3;大于3,结束阶段开始时,你对一名其他角色造成1点伤害,然后移去4枚“重”(X为“重”数)。', qiuliju:'丘力居', koulve:'寇略', koulve_info:'当你于出牌阶段内对其他角色造成伤害后,你可以展示其X张手牌(X为其已损失的体力值)。若这些牌中:有带有伤害标签的基本牌或锦囊牌,则你获得之;有红色牌,则你失去1点体力(若已受伤则改为减1点体力上限),然后摸两张牌。', @@ -10386,7 +10390,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianze:'天则', tianze_info:'①每回合限触发一次。其他角色于其出牌阶段内使用的黑色手牌结算结束后,你可以弃置一张黑色牌,并对其造成1点伤害。②其他角色的判定生效后,若结果为黑色,则你摸一张牌。', difa:'地法', - difa_info:'每回合限一次。当你于回合内因摸牌而获得红色牌时,你可以弃置之。然后你选择一个锦囊牌的牌名,并从牌堆中获得一张此牌名的牌。', + difa_info:'每回合限一次。当你于回合内因摸牌而得到红色牌时,你可以弃置之。然后你选择一个锦囊牌的牌名,并从牌堆中获得一张此牌名的牌。', xinping:'辛评', fuyuan:'辅袁', fuyuan_info:'当你于回合外使用或打出牌时,若当前回合角色的手牌数:不小于你,你可摸一张牌;小于你,你可令其摸一张牌。', @@ -10399,7 +10403,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ quanjiu_info:'锁定技。①你手牌区中的【酒】的牌名视为【杀】。②你使用对应的实体牌为一张【酒】的非转化【杀】不计入次数限制。', re_pangdegong:'庞德公', heqia:'和洽', - heqia_info:'出牌阶段开始时,你可选择一项:①将任意张牌交给一名其他角色。②令一名有手牌的其他角色交给你任意张牌。然后以此法获得牌的角色可以视为使用一张基本牌,且当其声明使用此牌后,可以为此牌增加至至多X个目标(X为以此法移动的牌数)。', + heqia_info:'出牌阶段开始时,你可选择一项:①将任意张牌交给一名其他角色。②令一名有手牌的其他角色交给你任意张牌。然后以此法得到牌的角色可以视为使用一张基本牌,且当其声明使用此牌后,可以为此牌增加至至多X个目标(X为以此法移动的牌数)。', yinyi:'隐逸', yinyi_info:'锁定技。每回合限一次,当你受到非属性伤害时,若你的手牌数和体力值与伤害来源均不相同,则你防止此伤害。', haomeng:'郝萌', @@ -10437,7 +10441,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcbihuo_info:'①当你受到其他角色造成的伤害后,你可令一名角色下回合摸牌阶段的额定摸牌数+1。②当你对其他角色造成伤害后,你可令一名角色下回合摸牌阶段的额定摸牌数-1。', bianxi:'卞喜', dunxi:'钝袭', - dunxi_info:'①当你使用具有伤害标签的牌结算结束后,你可以令一名不为你的目标角色获得一枚“钝”。②有“钝”的角色使用基本牌或锦囊牌指定唯一目标时,你令其移去一枚“钝”。系统随机选择一名角色,并将此牌的目标改为该角色。若该角色和原目标相同,则其失去1点体力。若其正处于出牌阶段内,则结束此阶段。', + dunxi_info:'①当你使用具有伤害标签的牌结算结束后,你可以令一名不为你的目标角色获得一枚“钝”。②有“钝”的角色使用基本牌或锦囊牌时,若此牌目标数为1且此时没有角色处于濒死状态,你令其移去一枚“钝”。系统随机选择一名角色,并将此牌的目标改为该角色。若该角色和原目标相同,则其失去1点体力。若其正处于出牌阶段内,则结束此阶段。', niufu:'牛辅', dcxiaoxi:'宵袭', dcxiaoxi_info:'锁定技。出牌阶段开始时,你声明X并减X点体力上限(X∈[1,2])。然后你选择一名攻击范围内的其他角色并选择一项:⒈获得该角色的X张牌。⒉视为对其使用X张【杀】。', diff --git a/character/standard.js b/character/standard.js index 8b0a539ea..65aa68850 100755 --- a/character/standard.js +++ b/character/standard.js @@ -1166,15 +1166,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var top=result.moved[0]; var bottom=result.moved[1]; top.reverse(); - for(var i=0;i1; + }, + filterCard:function(card,player){ + return !ui.selected.cards.some(cardx=>get.suit(cardx,player)==get.suit(card,player)); + }, + selectCard:[1,4], + check:function(card){ + return 1/(get.value(card)||0.5); + }, + position:'h', + complexCard:true, + discard:false, + lose:false, + delay:false, + filterTarget:lib.filter.notMe, + usable:1, + content:function(){ + 'step 0' + player.addSkill('twquanqian_sunben'); + player.give(cards,target); + if(cards.length<2) event.finish(); + 'step 1' + var card=get.cardPile2(card=>get.type(card)=='equip'); + if(card) player.gain(card,'gain2'); + 'step 2' + if(player.countCards('h')>=target.countCards('h')){ + if(target.countCards('h')) event._result={index:1}; + else event.finish(); + } + else{ + var str=get.translation(target); + player.chooseControl().set('choiceList',[ + '将手牌数摸至与'+str+'相同', + '观看'+str+'的手牌并获得其一种花色的所有手牌', + ]).set('ai',()=>{ + var player=_status.event.player; + var target=_status.event.target; + if(target.countCards('h')-player.countCards('h')>target.countCards('h')/4||get.attitude(player,target)>0) return 0; + return 1; + }); + } + 'step 3' + if(result.index==0){ + player.drawTo(target.countCards('h')); + event.finish(); + return; + } + var list=[]; + var dialog=['劝迁:获得'+get.translation(target)+'一种花色的所有牌']; + for(var suit of lib.suit.concat('none')){ + if(target.countCards('h',{suit:suit})){ + dialog.push('
    '+get.translation(suit+'2')+'牌
    '); + dialog.push(target.getCards('h',{suit:suit})); + list.push(suit); + } + } + if(!list.length){ + event.finish(); + return; + } + player.chooseControl(list).set('dialog',dialog).set('ai',()=>{ + return _status.event.control; + }).set('control',(()=>{ + var getv=(cards)=>cards.map(i=>get.value(i)).reduce((p,c)=>p+c,0); + return list.sort((a,b)=>{ + return getv(target.getCards('h',{suit:b}))-getv(target.getCards('h',{suit:a})); + })[0]; + })()); + 'step 4' + if(result.control) player.gain(target.getCards('h',{suit:result.control}),target,'give'); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + return target.countCards('h'); + }, + }, + }, + subSkill:{ + sunben:{ + charlotte:true, + init:function(player){ + player.storage.twquanqian_sunben=0; + }, + onremove:true, + mark:true, + intro:{ + markcount:function(num){ + return (num||0).toString(); + }, + content:'弃牌进度:#/6', + }, + trigger:{ + player:'loseAfter', + global:'loseAsyncAfter', + }, + filter:function(event,player){ + if(event.type!='discard') return false; + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length; + }, + forced:true, + popup:false, + firstDo:true, + content:function(){ + 'step 0' + player.addMark('twquanqian_sunben',trigger.getl(player).hs.length,false); + 'step 1' + if(player.countMark('twquanqian_sunben')>=6){ + player.removeSkill('twquanqian_sunben'); + player.popup('劝迁'); + game.log(player,'恢复了技能','#g【劝迁】'); + } + }, + }, + }, + }, + twrouke:{ + audio:2, + trigger:{ + player:'gainAfter', + global:'loseAsyncAfter' + }, + filter:function(event,player){ + var evt=event.getParent('phaseDraw'); + if(evt&&evt.player==player) return false; + return event.getg(player).length>1; + }, + forced:true, + content:function(){ + player.draw(); + }, + }, + //张昭 + twlijian:{ + getCards:function(event){ + var cards=[]; + game.countPlayer2(function(current){ + current.checkHistory('lose',function(evt){ + if(evt.position==ui.discardPile&&evt.getParent('phaseDiscard')==event) cards.addArray(evt.cards); + }) + }); + game.checkGlobalHistory('cardMove',function(evt){ + if(evt.name=='cardsDiscard'&&evt.getParent('phaseDiscard')==event) cards.addArray(evt.cards); + }); + return cards; + }, + audio:2, + sunbenSkill:true, + trigger:{global:'phaseDiscardEnd'}, + filter:function(event,player){ + if(player.hasSkill('twlijian_sunben')) return false; + if(event.player!=player&&event.player.isIn()){ + return lib.skill.twlijian.getCards(event).length; + } + return false; + }, + direct:true, + content:function(){ + 'step 0' + var cards=lib.skill.twlijian.getCards(trigger),target=trigger.player; + event.cards=cards;event.target=target; + player.chooseButton([ + get.prompt('twlijian',target), + '选择任意张牌令其获得,然后你获得剩余的牌,若其获得的牌数大于你,则你可以对其造成1点伤害', + cards, + ],[1,Infinity]).set('ai',function(button){ + var player=_status.event.player; + var target=_status.event.getTrigger().player; + var att=get.attitude(player,target); + var cards=ui.selected.cards; + var cardx=_status.event.cards; + var card=button.link; + switch(get.sgn(att)){ + case 1: + return 1; + break; + case 0: + if(!cards.length&&cardx.length>1) return 1/(get.value(card)||0.5); + return 0; + break; + case -1: + var num=Math.ceil(cardx.length/2)+(cardx.length%2==0?1:0); + if(num>1&&player.hasSkill('twchungang')) num--; + if(get.damageEffect(target,player,player)<=0||num>2){ + if(!cards.length&&cardx.length>1) return 1/(get.value(card)||0.5); + return 0; + } + else{ + var numx=0; + numx+=num; + if(num>0&&player.hasSkill('twchungang')) numx++; + if(cards.lengthcards.length){ + player.chooseBool('是否对'+get.translation(target)+'造成1点伤害?').set('choice',get.damageEffect(target,player,player)>0); + } + else event.finish(); + } + else event.finish(); + 'step 2' + if(result.bool){ + player.line(target); + target.damage(); + } + }, + subSkill:{ + sunben:{ + charlotte:true, + init:function(player){ + player.storage.twlijian_sunben=0; + }, + onremove:true, + mark:true, + intro:{ + markcount:function(num){ + return (num||0).toString(); + }, + content:'弃牌堆进入牌进度:#/8', + }, + trigger:{global:['loseAfter','cardsDiscardAfter','loseAsyncAfter','equipAfter']}, + filter:function(event,player){ + var cards=event.getd(); + if(!cards.length) return false; + var list=cards.slice(); + game.checkGlobalHistory('cardMove',function(evt){ + if(evt==event||evt.getParent()==event||(evt.name!='lose'&&evt.name!='cardsDiscard')) return false; + if(evt.name=='lose'&&evt.position!=ui.discardPile) return false; + list.removeArray(evt.cards); + },event); + return list.length>0; + }, + forced:true, + popup:false, + firstDo:true, + content:function(){ + 'step 0' + var cards=trigger.getd().slice(); + game.checkGlobalHistory('cardMove',function(evt){ + if(evt==trigger||evt.getParent()==trigger||(evt.name!='lose'&&evt.name!='cardsDiscard')) return false; + if(evt.name=='lose'&&evt.position!=ui.discardPile) return false; + cards.removeArray(evt.cards); + },trigger); + player.addMark('twlijian_sunben',cards.length,false); + 'step 1' + if(player.countMark('twlijian_sunben')>=8){ + player.removeSkill('twlijian_sunben'); + player.popup('力荐'); + game.log(player,'恢复了技能','#g【力荐】'); + } + }, + }, + }, + }, + twchungang:{ + audio:2, + trigger:{global:['gainAfter','loseAsyncAfter']}, + filter:function(event,player){ + var evt=event.getParent('phaseDraw'); + return game.hasPlayer(target=>{ + if(target==player||(evt&&evt.player==target)) return false; + return event.getg(target).length>1&&target.countCards('he'); + }); + }, + forced:true, + logTarget:function(event,player){ + var evt=event.getParent('phaseDraw'); + return game.filterPlayer(target=>{ + if(target==player||evt&&evt.player==target) return false; + return event.getg(target).length>1&&target.countCards('he'); + }); + }, + content:function(){ + for(var i of lib.skill.twchungang.logTarget(trigger,player)){ + i.chooseToDiscard('he',true); + } + }, + ai:{ + //能和一技能有配合,但仍旧搅shi棍技能 + threaten:3, + }, + }, //海外主公技 //张鲁 twshijun: { @@ -560,7 +864,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ onremove: true, global: 'twchongwang_global', group: 'twchongwang_clear', - audio: 'ext:武将前瞻/audio/skill:2', + audio: 2, zhuSkill: true, subSkill: { clear: { @@ -2512,7 +2816,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } 'step 2' target.line(event.togive); - event.togive.damage(Math.min(3,event.togive.countCards('h',{name:'sha'})),target); + event.togive.damage(Math.min(2,event.togive.countCards('h',{name:'sha'})),target); }, ai:{ order:10, @@ -2543,16 +2847,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' + if(trigger.player!=player) player.addExpose(0.3); var target=get.translation(trigger.player); var choiceList=[ '令'+target+'获得牌堆里的一张【杀】', '令'+target+'将一张牌交给另一名角色,然后'+target+'摸两张牌', - '背水!将所有手牌交给'+target+',然后依次执行以上所有选项', + '背水!'+(trigger.player!=player?'将所有手牌交给'+target+',然后':'')+'依次执行以上所有选项', ]; var list=['选项一']; if(trigger.player.countCards('h')) list.push('选项二'); else choiceList[1]=''+choiceList[1]+''; - if(player.countCards('h')&&trigger.player!=player) list.push('背水!'); + if(player.countCards('h')) list.push('背水!'); else choiceList[2]=''+choiceList[2]+''; player.chooseControl(list).set('prompt','毅谋:请选择一项').set('choiceList',choiceList).set('ai',function(){ var evt=_status.event.getTrigger(),list=_status.event.list; @@ -2598,7 +2903,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.player.give(result.cards,target); trigger.player.draw(2); }, - ai:{expose:0.3}, + ai:{ + threaten:2.5, + }, }, //刘夫人 twzhuidu:{ @@ -2726,7 +3033,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - //王凌 + //王淩 twmibei:{ audio:'mibei', trigger:{player:'useCardAfter'}, @@ -3336,7 +3643,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' var target=event.targets.shift(); event.target=target; - player.chooseBool(get.prompt('twejian',target),'当其他角色获得你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌').set('ai',()=>{ + player.chooseBool(get.prompt('twejian',target),'当其他角色得到你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌').set('ai',()=>{ return get.attitude(player,_status.event.getParent().target)<0; }); 'step 2' @@ -6880,7 +7187,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.finish(); return; } - player.chooseCard('h','除害:将其中一张获得的牌置入弃牌堆',true,function(card){ + player.chooseCard('h','除害:将其中一张得到的牌置入弃牌堆',true,function(card){ return _status.event.cards.contains(card); }).set('ai',function(card){ return -get.value(card); @@ -8070,7 +8377,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, subSkill:{ - mark:{}, + mark:{ + charlotte:true, + }, effect:{ audio:'twchuanshu', trigger:{ @@ -8108,51 +8417,61 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'twchuanshu_damage', }, damage:{ - trigger:{player:['useCard','useCardAfter']}, - forced:true, charlotte:true, + trigger:{player:['useCard','useCardAfter'],source:'damageBegin1'}, filter:function(event,player,name){ if(name=='useCard') return (event.card.name=='sha'&&player.hasMark('twchuanshu_mark')); - return event.player!=player&&event._twchuanshu&&player.hasHistory('sourceDamage',function(evt){ + if(name=='damageBegin1') return event.card&&event.card.twchuanshu_mark&&!player.getStorage('twchuanshu_effect').contains(event.player); + return event.card.twchuanshu_mark&&player.hasHistory('sourceDamage',function(evt){ return evt.card==event.card; - }); + })&&player.getStorage('twchuanshu_effect').filter(function(target){ + return target.isIn()&&target!=player; + }).length; }, + forced:true, content:function(){ - if(event.triggername=='useCard'){ + var name=event.triggername; + if(name=='useCard'){ var num=player.countMark('twchuanshu_mark'); - trigger.baseDamage+=num; - trigger._twchuanshu=num; + trigger.card.twchuanshu_mark=num; player.removeMark('twchuanshu_mark',num,false); } + else if(name=='damageBegin1') trigger.num++; else{ - var num1=trigger._twchuanshu; + var num1=trigger.card.twchuanshu_mark; var num2=0; player.getHistory('sourceDamage',function(evt){ if(evt.card==trigger.card) num2+=evt.num; }); - player.draw(num1*num2); + var targets=player.getStorage('twchuanshu_effect').filter(function(target){ + return target.isIn()&&target!=player; + }); + if(targets.length==1) targets[0].draw(num1*num2); + else game.asyncDraw(targets,num1*num2); } }, }, clear:{ - trigger:{player:'phaseBegin'}, - forced:true, - silent:true, charlotte:true, + onremove:true, + trigger:{player:'phaseBegin'}, filter:function(event,player){ return player.getStorage('twchuanshu_clear').length; }, + forced:true, + silent:true, content:function(){ 'step 0' var targets=player.getStorage('twchuanshu_clear'); - player.logSkill('twchuanshu_clear',targets.filter(i=>i.isIn())); for(var target of targets){ target.unmarkAuto('twchuanshu_effect',[player]); - if(target.getStorage('twchuanshu_effect').length==0) target.removeSkill('twchuanshu_effect'); + if(!target.getStorage('twchuanshu_effect').length) target.removeSkill('twchuanshu_effect'); } - } - } - } + 'step 1' + player.removeSkill('twchuanshu_clear'); + }, + }, + }, }, //徐庶 twjiange:{ @@ -8993,7 +9312,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.chooseControl().set('prompt','征建:请选择一种效果').set('choiceList',[ '令“出牌阶段内未使用过非基本牌”的其他角色受到惩罚', - '令“出牌阶段内未获得过牌”的其他角色受到惩罚', + '令“出牌阶段内未得到过牌”的其他角色受到惩罚', ]).set('ai',()=>Math.random()<=0.5?0:1); 'step 1' player.addSkill('twzhengjian_eff'+result.index); @@ -9093,8 +9412,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, intro:{ content:function(storage,player){ - if(player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果一。'; - return '其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。'; + if(player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果一。'; + return '其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。'; }, }, }, @@ -11926,6 +12245,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'twfengpo_kill', subSkill:{ kill:{ + audio:'fengpo', trigger:{source:'die'}, forced:true, filter:(event,player)=>!player.storage.twfengpo, @@ -11933,6 +12253,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ animationColor:'fire', content:function(){ player.storage.twfengpo=true; + player.popup('凤魄'); + game.log(player,'恢复了技能','#g【凤魄】'); }, }, }, @@ -12003,6 +12325,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ isCard:true, },false,target).baseDamage=num; }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(get.attitude(player,target)>=0) return 0; + var list=game.filterPlayer(function(current){ + return current!=player&¤t!=target&¤t.hp<=player.hp; + }); + if(!list.length) return 0; + return -Math.min(-get.effect(target,{name:'sha'},player,target),-get.effect(target,{name:'juedou'},player,target))*list.reduce(function(num,current){ + return num+(2+get.sgn(get.attitude(current,player))); + },0); + }, + }, + }, }, twyanhuo:{ audio:'yanhuo', @@ -13731,10 +14068,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twshenxing:'神行', twshenxing_info:'锁定技。若你的装备区内没有坐骑牌,则你至其他角色的距离-1且手牌上限+1。', twdaoji:'盗戟', - twdaoji_info:'出牌阶段限一次,你可以弃置一张非基本牌并选择一名攻击范围内的角色,获得其一张牌。若你以此法获得的牌为:基本牌,你摸一张牌;装备牌,你使用此牌并对其造成1点伤害。', + twdaoji_info:'出牌阶段限一次,你可以弃置一张非基本牌并选择一名攻击范围内的角色,获得其一张牌。若你以此法得到的牌为:基本牌,你摸一张牌;装备牌,你使用此牌并对其造成1点伤害。', tw_hejin:'TW何进', twmouzhu:'谋诛', - twmouzhu_info:'出牌阶段限一次,你可以选择一名其他角色A。你令除A外所有体力值小于等于你的其他角色依次选择是否交给你一张牌。若你以此法获得的牌数X:等于0,你和所有进行选择的角色依次失去1点体力。大于0,你令A选择由你视为对其使用一张伤害值基数为X的【杀】或【决斗】。', + twmouzhu_info:'出牌阶段限一次,你可以选择一名其他角色A。你令除A外所有体力值小于等于你的其他角色依次选择是否交给你一张牌。若你以此法得到的牌数X:等于0,你和所有进行选择的角色依次失去1点体力。大于0,你令A选择由你视为对其使用一张伤害值基数为X的【杀】或【决斗】。', twyanhuo:'延祸', twyanhuo_info:'当你死亡时,你可以选择一项:①令一名其他角色弃置X张牌。②令X名其他角色依次弃置一张牌。(X为你的牌数)', tw_mayunlu:'TW马云禄', @@ -13837,9 +14174,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twyangshi_info:'锁定技。当你受到伤害后,若场上有不在你攻击范围内的其他角色,则你令攻击范围+1;若没有,则你从牌堆中获得一张【杀】。', tw_puyangxing:'濮阳兴', twzhengjian:'征建', - twzhengjian_info:'游戏开始时,你可选择获得一项效果:⒈其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。⒉其他角色的出牌阶段结束时,若其本阶段内未获得过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。', + twzhengjian_info:'游戏开始时,你可选择获得一项效果:⒈其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。⒉其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。', twzhongchi:'众斥', - twzhongchi_info:'锁定技,限定技。当你因〖征建〗而获得牌后,若已经有至少X名角色因〖征建〗而交给你过牌(X为游戏人数的一半且向上取整),则你回复2点体力,且于本局游戏内受到渠道为【杀】的伤害+1,且你将〖征建〗中的“其须交给你一张牌”改为“你可对其造成1点伤害”。', + twzhongchi_info:'锁定技,限定技。当你因〖征建〗而得到牌后,若已经有至少X名角色因〖征建〗而交给你过牌(X为游戏人数的一半且向上取整),则你回复2点体力,且于本局游戏内受到渠道为【杀】的伤害+1,且你将〖征建〗中的“其须交给你一张牌”改为“你可对其造成1点伤害”。', tw_bingyuan:'邴原', twbingde:'秉德', twbingde_info:'出牌阶段限一次。你可以选择一个本阶段未选择过的花色并弃置一张牌,你摸等同于本阶段你使用此花色的牌数,然后若你以此法弃置的牌的花色与你选择的花色相同,你令你〖秉德〗于此阶段发动的次数上限+1。', @@ -13879,15 +14216,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twluannian_info:'主公技。其他群势力角色的出牌阶段限一次。其可以弃置X张牌并对“雄争”角色造成1点伤害(X为所有角色于本轮发动〖乱年〗的次数+1)。', tw_baoxin:'鲍信', twmutao:'募讨', - twmutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为3)。', + twmutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为2)。', twyimou:'毅谋', - twyimou_info:'当一名角色受到伤害后,若其存活且你至其的距离不大于1,你可以选择一项:1.令其从牌堆中获得一张【杀】;2.令其将一张手牌交给另一名角色并摸两张牌;3.背水:若受伤角色不为你,将所有手牌交给其,然后依次执行上述所有选项。', + twyimou_info:'当一名角色受到伤害后,若其存活且你至其的距离不大于1,你可以选择一项:1.令其从牌堆中获得一张【杀】;2.令其将一张手牌交给另一名角色并摸两张牌;3.背水:将所有手牌交给其(若受伤角色为你则跳过此步骤),然后依次执行上述所有选项。', tw_liufuren:'刘夫人', twzhuidu:'追妒', twzhuidu_info:'出牌阶段限一次。你可以选择一名已受伤的其他角色并选择一项:1.对其造成1点伤害;2.弃置其装备区里的一张牌;3.背水:若该角色为女性,弃置一张牌,然后依次执行上述所有选项。', twshigong:'示恭', twshigong_info:'限定技。当你于回合外进入濒死状态时,你可以令当前回合角色选择一项:1.加1点体力上限并回复1点体力,摸一张牌,然后令你将体力回复至体力上限;2.弃置X张手牌,然后令你将体力回复至1点(X为其体力值)。', - tw_wangling:'TW王凌', + tw_wangling:'TW王淩', twmibei:'秘备', twmibei_info:'使命技。①使命:使用每种类型且牌名不同的牌各两张。②成功:当你使用牌后,若你于本次事件完成了〖秘备①〗的使命,你获得〖谋立〗。③失败:出牌阶段结束时,若你本回合未使用过牌,你本回合手牌上限-1并重置〖秘备〗。', twxingqi:'星启', @@ -13902,12 +14239,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twyuhua_info:'锁定技。①你的非基本牌不计入手牌上限。②当你于回合外失去牌后,若其中有非基本牌,你可以卜算X,然后你可以摸X张牌(X为其中非基本牌数且至多为5)。', tw_fanchou:'TW樊稠', twxingluan:'兴乱', - twxingluan_info:'结束阶段,你可以亮出牌堆顶的六张牌,然后你可以选择一种类型的牌并分配给任意角色(每名角色至多三张)。然后所有以此法获得过牌且获得的牌数不少于你的角色失去1点体力。', + twxingluan_info:'结束阶段,你可以亮出牌堆顶的六张牌,然后你可以选择一种类型的牌并分配给任意角色(每名角色至多三张)。然后所有以此法得到过牌且得到的牌数不少于你的角色失去1点体力。', tw_xujing:'TW许靖', twboming:'博名', - twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若所有其他角色于此回合获得的牌数之和大于1,你摸两张牌。', + twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若所有其他角色于此回合得到的牌数之和大于1,你摸两张牌。', twejian:'恶荐', - twejian_info:'当其他角色获得你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌。', + twejian_info:'当其他角色得到你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌。', tw_zhangfei:'TW张飞', twxuhe:'虚吓', twxuhe_info:'当你使用的【杀】被【闪】抵消时,你可以令其选择一项:1.受到你造成的1点伤害;2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。', @@ -14023,7 +14360,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twyaohu_info:'每轮限一次。回合开始时,你须选择场上的一个势力。该势力的角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:1.对你指定的另一名的其他角色使用一张【杀】(无距离限制);2.本回合其使用伤害牌指定你为目标时须交给你两张牌,否则取消此目标。', tw_liwei:'李遗', twjiaohua:'教化', - twjiaohua_info:'当你或体力值最小的其他角色因摸牌而获得牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。', + twjiaohua_info:'当你或体力值最小的其他角色因摸牌而得到牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。', tw_yanxiang:'阎象', twkujian:'苦谏', twkujianx:'谏', @@ -14114,7 +14451,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twqingxi_info:'当你使用张【杀】指定目标后,若此牌为你于本回合使用的第一张【杀】,你可以令目标角色选择一项:1.令你摸Y张牌,此【杀】不可被其响应(Y为你装备区的牌数且至少为1);2.若其装备区里有牌,弃置装备区里的所有牌,然后弃置你装备区里的等量张牌,令此【杀】对其造成的伤害+1。', tw_sunyi:'TW孙翊', twzaoli:'躁厉', - twzaoli_info:'锁定技。①出牌阶段,你只能使用或打出你本回合获得的手牌。②出牌阶段开始时,你须弃置你区域内的所有装备牌并弃置任意张非装备手牌,你摸等量的牌,从牌堆中将你此次弃置的装备牌对应副类别的装备牌置入装备区。若你以此法置入了超过两张装备牌,你失去1点体力。', + twzaoli_info:'锁定技。①出牌阶段,你只能使用或打出你本回合得到的手牌。②出牌阶段开始时,你须弃置你区域内的所有装备牌并弃置任意张非装备手牌,你摸等量的牌,从牌堆中将你此次弃置的装备牌对应副类别的装备牌置入装备区。若你以此法置入了超过两张装备牌,你失去1点体力。', tw_yangyi:'TW杨仪', twgongsun:'共损', twgongsun_shadow:'共损', @@ -14169,6 +14506,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_liuyu:'TW刘虞', twchongwang:'崇望', twchongwang_info:'主公技,其他群势力角色的出牌阶段开始时,其可以交给你一张牌,然后你与其使用【杀】或伤害性锦囊牌指定目标时不能指定对方为目标直至你的下回合结束(每名角色限发动一次)。', + tw_zhangzhao:'张昭', + twlijian:'力荐', + twlijian_info:'昂扬技。其他角色的弃牌阶段结束时,你可以令其获得任意本阶段进入弃牌堆的牌,然后你获得其余的牌,若其得到的牌数大于你,你可以对其造成1点伤害。
    激昂:八张牌进入弃牌堆。', + twchungang:'纯刚', + twchungang_info:'锁定技。一名其他角色于摸牌阶段外得到超过一张牌时,你令其弃置一张牌。', + tw_zhanghong:'张纮', + twquanqian:'劝迁', + twquanqian_info:'昂扬技。出牌阶段限一次,你可以将至多四张花色各不相同的手牌交给一名其他角色,然后若你交出的牌数大于1,则你从牌堆中获得一张装备牌,然后选择一项:①将手牌数摸至与其相同;②观看其手牌并获得其一种花色的所有牌。
    激昂:你弃置六张手牌。', + twrouke:'柔克', + twrouke_info:'锁定技。当你于摸牌阶段外得到超过一张牌时,你摸一张牌。', tw_mobile:'海外服·稀有专属', tw_yunchouzhi:'运筹帷幄·智', diff --git a/character/xianding.js b/character/xianding.js index 1d2633c69..c76af4b5b 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -2797,7 +2797,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ frequent:true, locked:false, content:function(){ - player.draw(); + player.draw(trigger.targets.length); }, mod:{ aiOrder:function(player,card,num){ @@ -4715,7 +4715,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ countdown:{ trigger:{player:'useCardAfter'}, mark:true, - marktext:'💀', + marktext:'噬', silent:true, forced:true, charlotte:true, @@ -4983,7 +4983,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ marktext:'刚', intro:{ name:'刚硬', - content:'属性目标:回复体力,或于获得牌后手牌数大于体力值', + content:'属性目标:回复体力,或于得到牌后手牌数大于体力值', }, charlotte:true, silent:true, @@ -10425,7 +10425,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.draw(); player.addMark('mansi',1,false); }, - intro:{content:'已因此技能获得了#张牌'}, + intro:{content:'已因此技能得到了#张牌'}, }, mansi_viewas:{ audio:'mansi', @@ -11563,7 +11563,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhaoang:'赵昂,字伟章(一作伟璋),天水冀人。汉末时曹操部下。初为羌道令,建安中转参军事徒居州治冀城。建安十八年,马超围冀城多天,城中饥困,凉州刺史韦康不愿百姓再受苦而打算投降,赵昂进劝但不为所纳。后马超背信弃义杀韦康并劫其子赵月为人质,把他送至南郑。欲以此要迫使赵昂为己所用。后与梁宽、赵衢、庞恭、杨阜等结谋为康报仇,并举兵讨伐马超。马超兵败遂弃城,投奔张鲁。得张鲁之援后马超于建安十九年复寇,赵昂与妻子王异坚守祁山三十天至夏侯渊的救兵解围,其子赵月终为马超斩杀。自冀城之难,至于祁山,赵昂出九奇策。', liuhui:'刘徽(约225年—约295年),汉族,山东滨州邹平市人,魏晋期间伟大的数学家,中国古典数学理论的奠基人之一。在中国数学史上作出了极大的贡献,他的杰作《九章算术注》和《海岛算经》,是中国最宝贵的数学遗产。刘徽思想敏捷,方法灵活,既提倡推理又主张直观。他是中国最早明确主张用逻辑推理的方式来论证数学命题的人。刘徽的一生是为数学刻苦探求的一生。他虽然地位低下,但人格高尚。他不是沽名钓誉的庸人,而是学而不厌的伟人,他给我们中华民族留下了宝贵的财富。2021年5月,国际天文学联合会(IAU)批准中国在嫦娥五号降落地点附近月球地貌的命名,刘徽(liuhui)为八个地貌地名之一。', zhangfen:'张奋,徐州彭城(今江苏徐州)人。三国时期孙吴将领,辅吴将军张昭的侄子。善于制作攻城器械。在步骘举荐下,担任将军,累迁平州都督,册封乐乡亭侯,病逝于任上。', - dukui:'杜夔[kuí],字公良,河南人,擅长音律,聪明过人。管弦等各种乐器,他无所不能。他长期总管歌舞音乐,精心研究,继承复兴了前代古乐,并有所创新。仕于曹操、曹丕之世,以通晓音乐称于世。早年任雅乐郎,汉中平五年(188年),因病离职。州郡的司徒以礼相请,他因时世混乱而奔荆州。荆州牧刘表的儿子刘琮投降曹操后,曹操以杜夔为军谋祭酒 ,参与太乐署之事,令他创制雅乐。魏文帝曹丕黄初年间,任太乐令、协律都尉。', + dukui:'杜夔,字公良,河南人,擅长音律,聪明过人。管弦等各种乐器,他无所不能。他长期总管歌舞音乐,精心研究,继承复兴了前代古乐,并有所创新。仕于曹操、曹丕之世,以通晓音乐称于世。早年任雅乐郎,汉中平五年(188年),因病离职。州郡的司徒以礼相请,他因时世混乱而奔荆州。荆州牧刘表的儿子刘琮投降曹操后,曹操以杜夔为军谋祭酒 ,参与太乐署之事,令他创制雅乐。魏文帝曹丕黄初年间,任太乐令、协律都尉。', quanhuijie:'全皇后(244年-301年),吴郡钱塘(今浙江杭州)人,吴废帝孙亮的皇后,全尚之女,母孙恭之女。吴大帝长女全公主的侄孙女。赤乌十三年(250年),因全公主推荐全氏被册为孙亮的太子妃,建兴二年(253年),全氏被立为皇后。太平三年(258年),孙亮被权臣孙綝贬为会稽王,全皇后也一同贬为会稽王夫人。永安三年(260年),全皇后随夫到侯官,孙亮在途中死去,全皇后在侯官居住二十余年,吴亡后返回吴郡,永宁元年(301年)去世。', dingshangwan:'丁尚涴,又名丁夫人。东汉末年权臣曹操的原配夫人。丁尚涴嫁给曹操时,曹操另有刘夫人,生长子曹昂和清河长公主。后刘夫人早亡,曹昂便由丁尚涴抚养,丁尚涴视其为己出。
    建安二年(公元197年),曹昂随军出征宛城,战死沙场。丁尚涴悲痛欲绝,口出怨言数落曹操,又悲啼不止。曹操恼羞成怒,将其打发回了娘家。不久之后,心生悔意的曹操亲自前往丁家,打算将丁尚涴接回。然而丁尚涴却只是闷头织布。曹操手抚其背,说:“顾我共载归乎!”丁尚涴依旧不理不睬。曹操走到门口,又回过头:“得无尚可邪!”然而依旧得不到回应,只得感叹:“真诀矣。”于是与之和离,并让丁家允许她改嫁,丁家不敢为之。
    丁尚涴去世后,卞夫人请求曹操安葬她,于是葬在许城以南。后来曹操病重,知道自己时日无多,临终前叹道:“我前后行意,于心未曾有所负也。假令死而有灵,子修若问‘我母所在’,我将何辞以答!”', luyi:'卢弈,游卡桌游《三国杀》中虚构的人物。设定为卢植之女。至情至孝。其人虽体弱多病,然而却天资聪颖,有过目不忘、出口成章之才。先后拜蔡邕、王允等人为师,纳诸家之长融会贯通。又善弈棋,曾与当时国手山子道、王九真、郭凯对弈,不分胜负,一时之间名动京华,被太学征辟为女博士,世人皆称其为“女先生”。董卓之乱后,卢弈随父亲隐居乡野,创办上谷学宫,邀天下士子论道。相传诸葛亮、曹植、荀彧、张昭等人都参加过。各学派在卢弈主持下论道,成为一时佳话。后上谷学宫遭曹魏所忌,卢弈为请求曹叡赦免学宫,与司马懿对无棋之弈。卢弈破指凝血,以血为棋,终胜司马懿半子。但却旧伤复发,局终而陨。', @@ -11576,7 +11576,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xuelingyun:'薛灵芸,东晋王嘉志怪小说《拾遗记》中的人物,魏文帝曹丕的宫人,妙于针工,虽处于深帷之内,不用灯烛之光,裁制立成。凡不是薛灵芸缝制的衣服,文帝一概不穿,宫中号为针神。薛灵芸的故事在正史中虽无记载,却由于许多野史笔记偶尔提及,如《拾遗记》、《太平广记》、《艳异编》等,渐于后世成为中国古代著名美女形象。,', yanghong:'杨弘,东汉末年袁术部将。袁术死后,杨弘等将其众欲归孙策,后庐江太守刘勋截击,转归于勋。', xielingyu:'谢夫人,会稽山阴(今浙江省绍兴市)人,东汉尚书郎、徐令谢煚之女,吴大帝孙权的原配发妻,又称谢妃。深受孙权宠爱,爱幸有宠。后来孙权为了巩固江东政权,又纳徐氏,欲让谢夫人屈居其下。谢夫人不同意,失志早卒。谢夫人的弟弟是三国著名史学家、武陵太守谢承。豫章太守谢斐与谢夫人同宗同族。', - zerong:'笮[zé]融(?—195年),丹杨(治今安徽宣城)人,东汉末年豪强,生性残暴却笃信佛教,为佛教在中国的发展做出了很大贡献。东汉末年投奔徐州刺史陶谦,督管下邳、彭城、广陵三郡运粮。将其中大量物资占为己有累积财力,遂在徐州一带大规模崇佛,修建豪华佛寺,铸造金铜大佛,衣以锦彩,并举行浴佛节,招揽信徒万余人。其崇佛活动奠定了中国大型佛事活动的基础。后又投奔赵昱、薛礼、朱皓并将他们杀害,扬州牧刘繇因此兴兵讨伐笮融。笮融兵败后逃入深山,由于当地山民同样对他恨之入骨,便联手搜捕、杀死笮融,并将他的首级献给刘繇。', + zerong:'笮融(?—195年),丹杨(治今安徽宣城)人,东汉末年豪强,生性残暴却笃信佛教,为佛教在中国的发展做出了很大贡献。东汉末年投奔徐州刺史陶谦,督管下邳、彭城、广陵三郡运粮。将其中大量物资占为己有累积财力,遂在徐州一带大规模崇佛,修建豪华佛寺,铸造金铜大佛,衣以锦彩,并举行浴佛节,招揽信徒万余人。其崇佛活动奠定了中国大型佛事活动的基础。后又投奔赵昱、薛礼、朱皓并将他们杀害,扬州牧刘繇因此兴兵讨伐笮融。笮融兵败后逃入深山,由于当地山民同样对他恨之入骨,便联手搜捕、杀死笮融,并将他的首级献给刘繇。', huanfan:'桓范(?~249年),字元则,沛郡龙亢县(今安徽省怀远县龙亢镇)人。三国时期曹魏大臣、文学家、画家。建安末年,担任丞相府掾,联合王象等共同撰写《皇览》。延康元年,担任羽林左监。魏明帝时,历任中领军、尚书,出任征虏将军、东中郎将、兖州刺史等。正始年间,授大司农,为大将军曹爽出谋划策,号称“智囊 ”。高平陵政变(249年)发生后,力劝曹爽挟带皇帝曹芳进入许昌,没有得到采纳,最终被太傅司马懿诛杀。桓范颇有文才,著有《世要论》(《桓范新书》)。善于画画,唐朝张彦远《历代名画记》目为中品。', sunyu:'孙瑜(177年-215年),字仲异,吴郡富春(今浙江富阳)人,孙坚之弟孙静的次子,孙权的堂兄。官至奋威将军、丹杨太守。孙瑜初以恭义校尉的身份统领士兵,曾跟随周瑜、孙权等人征战,擅于安抚部下、招降纳顺。孙瑜爱读古籍,又请学者马普来为将领官员的子弟讲学,于是东吴开始设立学官。215年,孙瑜去世,时年三十九岁。', xizheng:'郤正(?-278年),本名郤纂,字令先,司州河南郡偃师县(今河南省偃师市)人,三国蜀汉至西晋时期学者、官员。少好学,广读古籍。弱冠即善写文章,为蜀汉朝廷征为秘书吏,官至秘书令。公元263年(景耀六年),曹魏攻伐蜀汉,后主刘禅投降,郤正为之撰写投降书。后随刘禅前往洛阳,受封关内侯,又得到晋武帝司马炎赏识,任巴西郡太守,公元278年(咸宁四年)去世。郤正为人不重名利,曾作《释讥》,表明自己淡泊之心境;又醉心于文学,共作诗歌、论著、辞赋等近百篇,但多散佚于后世。', @@ -11773,7 +11773,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jiaoying2:'醮影', jiaoying3:'醮影', jiaoying3_draw:'醮影', - jiaoying_info:'锁定技,其他角色获得你的手牌后,该角色本回合不能使用或打出与此牌颜色相同的牌。然后此回合结束时,若其本回合没有再使用牌,你令一名角色将手牌摸至五张。', + jiaoying_info:'锁定技,其他角色得到你的手牌后,该角色本回合不能使用或打出与此牌颜色相同的牌。然后此回合结束时,若其本回合没有再使用牌,你令一名角色将手牌摸至五张。', ruanyu:'阮瑀', xingzuo:'兴作', xingzuo2:'兴作', @@ -11824,7 +11824,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wfyuyan_info:'一轮游戏开始时,你选择一名角色(对其他角色不可见):当第一次有角色于本轮内进入濒死状态时,若其是你选择的角色,则你获得〖奋音〗直到你的回合结束;当第一次有角色于本轮内造成伤害后,若其是你选择的角色,则你摸两张牌。', re_fengfangnv:'冯妤', tiqi:'涕泣', - tiqi_info:'其他角色的摸牌阶段结束时/被跳过时,若其于本阶段内因摸牌而获得的牌数X不等于2,则你可以摸|X-2|张牌,并可令其本回合的手牌上限±|X-2|。', + tiqi_info:'其他角色的摸牌阶段结束时/被跳过时,若其于本阶段内因摸牌而得到的牌数X不等于2,则你可以摸|X-2|张牌,并可令其本回合的手牌上限±|X-2|。', baoshu:'宝梳', baoshu_info:'①准备阶段,你可选择Y名角色,这些角色重置武将牌并获得(X-Y+1)个“梳”(X为你的体力上限,Y∈[1, X])。②一名角色的摸牌阶段开始时,若其有“梳”,则其本阶段的额定摸牌数+Z且移去Z个“梳”(Z为其“梳”的数量)。', dc_luotong:'骆统', @@ -11916,7 +11916,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcyaoyi:'邀弈', dcyaoyi_info:'锁定技。①游戏开始时,你令所有存活且未拥有转换技的角色获得〖手谈〗。②你发动〖手谈〗时无需弃置牌,且无次数限制。③所有拥有转换技的角色不能使用牌指定其他拥有转换技且双方所有转换技状态均相同的角色为目标。', dcfuxue:'复学', - dcfuxue_info:'①准备阶段,你可以从弃牌堆中选择获得至多X张不因使用而进入弃牌堆的牌。②结束阶段,若你的手牌区中没有因〖复学①〗获得的牌,则你摸X张牌(X为你的体力值)。', + dcfuxue_info:'①准备阶段,你可以从弃牌堆中选择获得至多X张不因使用而进入弃牌堆的牌。②结束阶段,若你的手牌区中没有因〖复学①〗得到的牌,则你摸X张牌(X为你的体力值)。', dcshoutan:'手谈', dcshoutan_info:'转换技。出牌阶段限一次,阴:你可以弃置一张不为黑色的手牌。阳:你可以弃置一张黑色手牌。', dc_liuye:'刘晔', @@ -11930,11 +11930,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dctongguan:'统观', dctongguan_info:'一名角色的第一个回合开始时,你为其选择一项属性(每个属性至多选两次,且仅对你可见)。', dcmengjie:'梦解', - dcmengjie_info:'一名角色的回合结束时,若其本回合完成了其〖统观〗属性,你执行对应效果:
  • 「武勇」造成伤害:对一名其他角色造成1点伤害;
  • 「刚硬」回复体力,或于获得牌后手牌数大于体力值:令一名角色回复1点体力;
  • 「多谋」于摸牌阶段外摸牌:摸两张牌;
  • 「果决」弃置或获得其他角色的牌:弃置一名角色区域内至多两张牌;
  • 「仁智」交给其他角色牌:令一名其他角色将手牌补至体力上限(至多摸五张)。', + dcmengjie_info:'一名角色的回合结束时,若其本回合完成了其〖统观〗属性,你执行对应效果:
  • 「武勇」造成伤害:对一名其他角色造成1点伤害;
  • 「刚硬」回复体力,或于得到牌后手牌数大于体力值:令一名角色回复1点体力;
  • 「多谋」于摸牌阶段外摸牌:摸两张牌;
  • 「果决」弃置或获得其他角色的牌:弃置一名角色区域内至多两张牌;
  • 「仁智」交给其他角色牌:令一名其他角色将手牌补至体力上限(至多摸五张)。', dctongguan_wuyong:'武勇', dctongguan_wuyong_info:'任务目标:造成伤害。', dctongguan_gangying:'刚硬', - dctongguan_gangying_info:'任务目标:回复体力,或于获得牌后手牌数大于体力值。', + dctongguan_gangying_info:'任务目标:回复体力,或于得到牌后手牌数大于体力值。', dctongguan_duomou:'多谋', dctongguan_duomou_info:'任务目标:于摸牌阶段外摸牌。', dctongguan_guojue:'果决', @@ -11950,7 +11950,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dctianji_info:'锁定技。当判定牌进入弃牌堆后,你从牌堆随机获得分别与该牌类型、花色和点数相同的牌各一张。', yuanji:'袁姬', dcmengchi:'蒙斥', - dcmengchi_info:'锁定技。若你未于当前回合获得过牌:你不能使用牌;当你横置前,取消之;当你受到无属性伤害后,回复1点体力。', + dcmengchi_info:'锁定技。若你未于当前回合得到过牌:你不能使用牌;当你横置前,取消之;当你受到无属性伤害后,回复1点体力。', dcfangdu:'芳妒', dcfangdu_info:'锁定技。当你于回合外受到伤害后,若此次伤害为你于本回合受到的:第一次无属性伤害,你回复1点体力;第一次属性伤害,你随机获得伤害来源的一张牌。', dcjiexing:'节行', @@ -11992,7 +11992,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcyuanmo_info:'①准备阶段或当你受到伤害后,你可以选择一项:1.攻击范围+1,然后若你攻击范围内的角色数因此增加,你可以获得任意名本次进入你攻击范围的角色各一张牌;2.攻击范围-1,然后摸两张牌。②结束阶段,若你的攻击范围内没有角色,你可以令你的攻击范围+1。', dc_yangbiao:'杨彪', dczhaohan:'昭汉', - dczhaohan_info:'摸牌阶段,你可以多摸两张牌,然后你于获得牌后选择一项:1.将两张手牌交给一名没有手牌的角色;2.弃置两张手牌。', + dczhaohan_info:'摸牌阶段,你可以多摸两张牌,然后你于得到牌后选择一项:1.将两张手牌交给一名没有手牌的角色;2.弃置两张手牌。', dcjinjie:'尽节', dcjinjie_info:'当一名角色进入濒死状态时,若你本轮:进行过回合,你可以令其摸一张牌;未进行过回合,你可以弃置X张手牌令其回复1点体力(X为本轮你发动过〖尽节〗的次数)。', dcjue:'举讹', @@ -12019,7 +12019,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // dclingyin_info:'出牌阶段开始时,你可以获得至多X张“妄”(X为游戏轮数)然后若你的“妄”颜色均相同,你于本回合对其他角色造成的伤害+1,且可以将一张武器牌或防具牌当【决斗】使用。', dclingyin_info:'出牌阶段开始时,你可以选择至多X张“妄”(X为游戏轮数),若这些牌以外的“妄”中不存在颜色不同的牌,则你于本回合对其他角色造成的伤害+1,且可以将一张武器牌或防具牌当【决斗】使用。你获得这些牌。', dcliying:'俐影', - dcliying_info:'每回合限一次。当你于摸牌阶段外获得牌后,你可以将这些牌中的任意张交给一名其他角色,然后摸一张牌。', + dcliying_info:'每回合限一次。当你于摸牌阶段外得到牌后,你可以将这些牌中的任意张交给一名其他角色,然后摸一张牌。', huanfan:'桓范', dcjianzheng:'谏诤', dcjianzheng_info:'出牌阶段限一次。你可以观看一名其他角色的手牌,然后若其中有你可以使用的手牌,你获得并使用其中一张。若你以此法使用牌指定了其为目标,你令你与其横置,然后其观看你的手牌。', diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index ab9e185ef..514055af9 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -23,10 +23,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lvdai:"吕岱(161年-256年),字定公,广陵海陵(今江苏如皋)人。三国时期吴国重臣、将领。吕岱一生戮力奉公,为孙吴开疆拓土,功勋赫赫。太平元年(256年),吕岱去世,年九十六。", lvqian:"吕虔(生卒年不详),字子恪。任城国(今山东济宁东南)人。汉末至三国曹魏时期将领。 吕虔有勇有谋,曹操在兖州时,任命他为从事,率领家丁驻守湖陆。后升任泰山太守,与夏侯渊共同镇压济南等地的黄巾军。被推举为秀才,加任骑都尉,仍管辖泰山郡。 曹丕继任魏王后,加吕虔为裨将军,封益寿亭侯。再升任徐州刺史,加任威虏将军。任用王祥为别驾,将民政事务都委托于他,为世人所称赞。曹叡继位后,改封万年亭侯。吕虔死后,其子吕翻世袭万年亭侯。", panjun:"潘濬(一作潘浚)(?-239年),字承明。武陵郡汉寿县(今湖南汉寿)人。三国时期吴国重臣,蜀汉大司马蒋琬的表弟。 潘濬为人聪察,对问有机理,拜大儒宋忠为师,得到“建安七子”之一的王粲赏识。不到三十,即被荆州牧刘表任命为江夏从事,因按杀贪污的沙羡长而闻名。建安十六年(211年),被刘备任命为荆州治中从事,与守臣关羽不睦。建安二十四年(219年),孙权得荆州,拜潘濬为辅军中郎将。又迁奋威将军,封常迁亭侯。孙权称帝后,拜少府,进封刘阳侯,又改太常。黄龙三年(231年),授假节,与吕岱率军五万平五溪蛮夷叛乱,经三年而斩获数万,使得一方宁静。潘濬为人刚正不阿,在吕壹弄权时,屡请孙权将其诛杀。甚至想亲手击杀吕壹,使吕壹对他非常畏惧。 赤乌二年(239年),潘濬去世。", - duji:"杜畿 (jī)(163年—224年),字伯侯,京兆杜陵(今陕西西安东南)人。东汉末及三国时曹魏官吏及将领。西汉御史大夫杜延年的后代。历官郡功曹、守郑县令,善于断案。荀彧将他举荐给曹操,曹操任命他为司空司直,调任护羌校尉,使持节领西平太守。 曹丕受禅登基后,封杜畿为丰乐亭侯。官至尚书仆射。后在陶河试航时遇上大风沉没,杜畿淹死,死时六十二岁,曹丕为之涕泣,追赠其为太仆,谥戴侯。", + duji:"杜畿(163年—224年),字伯侯,京兆杜陵(今陕西西安东南)人。东汉末及三国时曹魏官吏及将领。西汉御史大夫杜延年的后代。历官郡功曹、守郑县令,善于断案。荀彧将他举荐给曹操,曹操任命他为司空司直,调任护羌校尉,使持节领西平太守。 曹丕受禅登基后,封杜畿为丰乐亭侯。官至尚书仆射。后在陶河试航时遇上大风沉没,杜畿淹死,死时六十二岁,曹丕为之涕泣,追赠其为太仆,谥戴侯。", zhoufang:"周鲂(生卒年不详),字子鱼。吴郡阳羡县(今江苏宜兴)人。三国时期吴国将领。周鲂年少时好学,被举为孝廉。历任宁国县长、怀安县长、钱塘侯相,一月之内,便斩杀作乱的彭式及其党羽,因而升任丹阳西部都尉。彭绮率数万人反叛时,周鲂被任命为鄱阳太守,与胡综共同将其生擒,因功加职昭义校尉。后诈降曹休,诱其率军接应,使曹休在石亭之战中一败涂地,战后因功被加职为裨将军,封关内侯。贼帅董嗣凭险骚扰豫章等郡,周鲂派间谍将其诱杀,不费兵卒即安定数郡。周鲂在鄱阳赏罚分明、恩威并施,于任职十三年后去世。", yanjun:"严畯(生卒年不详),字曼才,彭城(治今江苏徐州)人,三国时期孙吴官员、学者。性情忠厚,待人以诚。少好学,精通《诗》、《书》、《三礼》,又好《说文》。避乱江东,与诸葛瑾、步骘是好朋友,被张昭推荐给孙权作骑都尉、从事中郎。建安二十二年(217年),横江将军鲁肃去世,孙权打算让严畯接替其位。严畯很有自知之明,知道自己没有能力对抗在荆州的关羽和北面的曹魏,便坚决不接受此任命。后来担任尚书令。严畯享年七十八岁。著有《孝经传》、《潮水论》。", - liuyao:"刘繇(yáo,一读yóu)(156年-197年),字正礼。东莱牟平(今山东牟平)人。东汉末年宗室、大臣,汉末群雄之一,齐悼惠王刘肥之后,太尉刘宠之侄。
    刘繇最初被推举为孝廉,授郎中。任下邑县长时,因拒郡守请托而弃官。后被征辟为司空掾属,除授侍御史,因战乱而不到任,避居淮浦。兴平元年(194年),被任命为扬州刺史。他先后与袁术、孙策交战,一度被朝廷加授为扬州牧、振武将军,但最终还是败归丹徒。此后,刘繇又击破反叛的笮融,旋即病逝,年四十二。", + liuyao:"刘繇(一读yóu)(156年-197年),字正礼。东莱牟平(今山东牟平)人。东汉末年宗室、大臣,汉末群雄之一,齐悼惠王刘肥之后,太尉刘宠之侄。
    刘繇最初被推举为孝廉,授郎中。任下邑县长时,因拒郡守请托而弃官。后被征辟为司空掾属,除授侍御史,因战乱而不到任,避居淮浦。兴平元年(194年),被任命为扬州刺史。他先后与袁术、孙策交战,一度被朝廷加授为扬州牧、振武将军,但最终还是败归丹徒。此后,刘繇又击破反叛的笮融,旋即病逝,年四十二。", liuyan:"刘焉(?-194年),字君郎(《华阳国志》又作君朗)。江夏郡竟陵县(今湖北省天门市)人。东汉末年宗室、军阀,汉末群雄之一,西汉鲁恭王刘余之后。
    刘焉初以汉朝宗室身份,拜为中郎,历任雒阳令、冀州刺史、南阳太守、宗正、太常等官。因益州刺史郄俭在益州大肆聚敛,贪婪成风,加上当时天下大乱。刘焉欲取得一安身立命之所,割据一方,于是向朝廷求为益州牧,封阳城侯,前往益州整饬吏治。郄俭为黄巾军所杀,刘焉进入益州,派张鲁盘踞汉中,张鲁截断交通,斩杀汉使,从此益州与中央道路不通。刘焉进一步对内打击地方豪强,巩固自身势力,益州因而处于半独立的状态。兴平元年(194年),刘焉因背疮迸发而逝世,其子刘璋继领益州牧。", }, characterTitle:{}, @@ -1588,7 +1588,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_guolun":"过论", "xinfu_guolun_info":"出牌阶段限一次,你可以展示一名其他角色的手牌,然后展示你的一张牌。你与其交换这两张牌,然后展示的牌点数较小的角色摸一张牌。", "xinfu_zhanji":"展骥", - "xinfu_zhanji_info":"锁定技,你的出牌阶段内,当你因摸牌且不是因为此技能效果而获得牌时,你额外摸一张牌。", + "xinfu_zhanji_info":"锁定技。你的出牌阶段内,当你因摸牌且不是因为此技能效果而得到牌后,你摸一张牌。", "xinfu_songsang":"送丧", "xinfu_songsang_info":"限定技,其他角色死亡时,你可以回复一点体力(若你未受伤,则改为加一点体力上限);然后获得技能〖展骥〗。", "xinfu_jixu":"击虚", @@ -1596,7 +1596,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "jixu_sha":"击虚", "jixu_sha_info":"", "xinfu_sanwen":"散文", - "xinfu_sanwen_info":"每回合限一次。当你获得牌后,若你的原手牌中有与这些牌名称相同的牌,则你可以展示这些牌,弃置新得到的同名牌并摸两倍的牌。", + "xinfu_sanwen_info":"每回合限一次。当你得到牌后,若你的原手牌中有与这些牌名称相同的牌,则你可以展示这些牌,弃置新得到的同名牌并摸两倍的牌。", "xinfu_qiai":"七哀", "xinfu_qiai_info":"限定技,当你进入濒死状态时,你可以令所有其他角色依次交给你一张牌。", "xinfu_denglou":"登楼", diff --git a/character/yijiang.js b/character/yijiang.js index d425739d7..2107398a1 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -177,7 +177,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunziliufang:'孙资在曹操手下历任县令,参丞相军事;刘放曾有劝王松归顺曹操之举,为曹操所欣赏,遂招为司空府官,又外放历任几处县令。魏国初建之际,孙资与刘放俱任秘书郎。曹丕继位后,二人一同掌握机密。曹睿病危时,二人力荐曹爽,又推荐招回司马懿辅政。最后,曹睿独召曹爽、司马懿、刘放、孙资同受诏命,而免去曹宇、夏侯献、曹肇、秦朗的官职。', huanghao:'宦官。为后主刘禅所宠,专秉朝政。黄皓与大将军姜维不睦,维启后主杀之,后主不从。皓阴以心腹阎宇替维。景耀六年,蜀亡,邓艾预欲杀之,皓贿赂左右得免。及后主迁洛阳,皓为司马昭凌迟处死。', zhangrang:'汉中常侍。同赵忠、曹节、段珪等为“十常侍”,为灵帝所宠。让等专权乱政、卖官索财,朝野皆痛恨之。郎中张钧上书奏请诛杀十常侍,帝不允,让等阴杀钧。及灵帝崩,大将军何进欲杀让等,让阴结何太后,招进入宫,斩杀之。部将袁绍引兵攻让,让等劫帝走河上。追急,让投水自尽。', - jikang:'嵇(jī)康(224年-263年,一作223年-262年),字叔夜。谯国铚县(今安徽省濉溪县)人。三国时期曹魏思想家、音乐家、文学家。
    嵇康幼年聪颖,博览群书,广习诸艺,又喜爱老庄学说。身长七尺八寸,容止出众。后娶魏武帝曹操曾孙女长乐亭主为妻,拜郎中,调中散大夫,世称“嵇中散”。后隐居不仕,屡拒为官。因得罪司隶校尉钟会,遭其构陷,而被掌权的大将军司马昭处死,时年四十岁。', + jikang:'嵇康(224年-263年,一作223年-262年),字叔夜。谯国铚县(今安徽省濉溪县)人。三国时期曹魏思想家、音乐家、文学家。
    嵇康幼年聪颖,博览群书,广习诸艺,又喜爱老庄学说。身长七尺八寸,容止出众。后娶魏武帝曹操曾孙女长乐亭主为妻,拜郎中,调中散大夫,世称“嵇中散”。后隐居不仕,屡拒为官。因得罪司隶校尉钟会,遭其构陷,而被掌权的大将军司马昭处死,时年四十岁。', xinxianying:'辛氏(191年—269年),字宪英,祖籍陇西,颍川阳翟(今河南禹州)人。魏晋时期著名才女,曹魏侍中辛毗之女,卫尉羊耽之妻。辛宪英聪朗有才鉴,曾劝弟辛敞尽忠职守,预言钟会将会叛乱。泰始五年(公元269年),辛宪英逝世,享年七十九岁。', wuxian:'穆皇后吴氏(?—245年),陈留(今河南开封)人,车骑将军吴懿之妹,三国时期蜀汉昭烈帝刘备的皇后。
    吴氏早年丧父,其父生前与刘焉交情深厚,所以全家跟随刘焉来到蜀地。后刘焉听相面者说吴氏有大贵之相,于是为儿子刘瑁迎娶吴氏。刘瑁死后,吴氏成为寡妇。
    建安十九年(214年),刘备平定益州,纳吴氏为夫人。建安二十四年(219年),刘备自称汉中王,立吴氏为汉中王后。章武元年(221年),刘备称帝,建立蜀汉,立吴氏为皇后。章武三年(223年),刘备去世,太子刘禅即位,尊嫡母吴氏为皇太后。延熙八年(245年),吴氏去世,谥号穆皇后,葬入刘备的惠陵。', qinmi:'秦宓(?-226年),字子敕。广汉郡绵竹县(今四川德阳北)人。三国蜀汉时大臣、学者。秦宓善舌辩。早年仕于益州牧刘璋麾下,后降刘备。刘备伐吴时,秦宓劝阻,刘备大怒,欲杀秦宓。因诸葛亮及时求情,才保住性命,仅被下狱,后被释放,拜左中郎将、长水校尉。吴蜀同盟后,孙权派张温至成都回访。酒宴之上,秦宓与张温舌战,说得张温无言以对。后官至大司农。建兴四年(226年),秦宓病逝。', @@ -4305,7 +4305,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ skillAnimation:true, animationColor:'wood', onWash:function(){ - _status.event.getParent('fuzhu').washed=false; + _status.event.getParent('fuzhu').washed=true; return 'remove'; }, content:function(){ @@ -4319,19 +4319,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return card.name=='sha'&&player.canUse(card,trigger.player,false); }); if(card){ - card.remove(); - game.updateRoundNumber(); player.useCard(card,trigger.player,false); } 'step 2' if(event.total>0&&!event.washed&&ui.cardPile.childElementCount<=player.hp*10&&trigger.player.isIn()) event.goto(1); 'step 3' lib.onwash.remove(lib.skill.fuzhu.onWash); - var cards=get.cards(ui.cardPile.childElementCount+1); - for(var i=0;i{ +{ if(!localStorage.getItem('gplv3_noname_alerted')){ if(confirm('①无名杀是一款基于GPLv3协议的开源软件!\n你可以在遵守GPLv3协议的基础上任意使用,修改并转发《无名杀》,以及所有基于《无名杀》开发的拓展。\n点击“确定”即代表您认可并接受GPLv3协议↓️\nhttps://www.gnu.org/licenses/gpl-3.0.html\n②无名杀官方发布地址仅有GitHub仓库!\n其他所有的所谓“无名杀”社群(包括但不限于绝大多数“官方”QQ群、QQ频道等)均为玩家自发组织,与无名杀官方无关!')){ localStorage.setItem('gplv3_noname_alerted',true); @@ -32,33 +32,41 @@ const GeneratorFunction=(function*(){}).constructor; // gnc: GeNCoroutine const gnc={ - async:fn=>function genCoroutine(){ - return gnc.await(fn.apply(this,arguments)) - }, - await:gen=>new Promise((resolve,reject)=>{ - const _next=value=>gnc.next(gen,resolve,reject,"next",value,_next,_throw); - const _throw=err=>gnc.next(gen,resolve,reject,"throw",err,_next,_throw); - _next(undefined); - }), + of:fn=>gnc.is.generatorFunc(fn)?function genCoroutine(){ + let gen=fn.apply(this,arguments); + gen.status="next"; + gen.state=undefined; + const callback=(resolve,reject)=>{ + let result, + nexts=resolve, + throws=reject; + try{ + result=gen[gen.status](gen.state); + }catch(error){ + reject(error); + return; + } + if(!result.done){ + nexts=(item)=>{ + gen.state=item; + gen.status="next"; + callback(resolve,reject); + } + throws=(err)=>{ + gen.state=err; + gen.status="throw"; + callback(resolve,reject); + } + } + result=result.value; + Promise.resolve(result).then(nexts,throws); + } + return new Promise(callback); + }:(()=>{throw new TypeError("gnc.of needs a GeneratorFunction.")})(), is:{ coroutine:item=>typeof item=="function"&&item.name=="genCoroutine", generatorFunc:item=>item instanceof GeneratorFunction, - generator:item=>item.constructor==GeneratorFunction - }, - next:(gen,resolve,reject,key,arg,_next,_throw)=>{ - let info,value; - try{ - info=gen[key](arg); - value=info.value; - }catch(error){ - reject(error); - return; - } - if(info.done){ - resolve(value); - }else{ - Promise.resolve(value).then(_next,_throw); - } + generator:item=>(typeof item=="object")&&("constructor" in item)&&item.constructor&&("constructor" in item.constructor)&&item.constructor.constructor===GeneratorFunction } }; const _status={ @@ -120,6 +128,7 @@ characterFilter:{}, characterSort:{}, characterReplace:{}, + characterGuozhanFilter:["mode_guozhan"], dynamicTranslate:{}, cardPack:{}, skin:{}, @@ -132,6 +141,7 @@ chatHistory:[], emotionList:{ xiaowu_emotion:14, + xiaokuo_emotion:8, shibing_emotion:15, guojia_emotion:20, zhenji_emotion:20, @@ -3038,12 +3048,13 @@ }, cardtempname:{ name:'视为卡牌名称显示', - intro:'显示强制视为类卡牌(如武魂)等名称的显示方式', - init:'default', + intro:'显示强制视为类卡牌(如武魂),包括拆顺对话框内的判定牌(国色)转换等名称的显示方式', + init:'image', unfrequent:true, item:{ default:'纵向', horizon:'横向', + image:'图片', off:'禁用', }, onclick:function(item){ @@ -3054,14 +3065,9 @@ if(hs[i]._tempName){ switch(item){ case 'default': - var node=hs[i]._tempName; - node.classList.add('vertical'); - node.innerHTML=get.verticalStr(node.tempname); - break; case 'horizon': - var node=hs[i]._tempName; - node.classList.remove('vertical'); - node.innerHTML=node.tempname; + case 'image': + ui.create.cardTempName(hs[i]); break; default: hs[i]._tempName.delete(); @@ -3932,9 +3938,15 @@ init:true, unfrequent:true, }, - show_extensionimage:{ - name:'显示扩展武将图片', - intro:'关闭扩展武将包仍加载扩展武将图片', + show_characternamepinyin:{ + name:'显示武将名拼音等信息', + intro:'在武将资料卡显示武将名及其拼音、性别、势力、体力等信息', + init:true, + unfrequent:true, + }, + show_skillnamepinyin:{ + name:'显示技能名拼音', + intro:'在武将资料卡显示技能名拼音', init:true, unfrequent:true, } @@ -7084,6 +7096,7 @@ '
  • 妄行:一种特殊的选项。若一名角色拥有带有“妄行”的技能,则该技能触发时,你须选择声明一个数字X(X∈{1,2,3,4}),技能后续中的X即为你选择的数字。选择完毕后,你获得如下效果:回合结束时,你选择一项:1.弃置X张牌;2.减1点体力上限。'+ '
  • 搏击:若一名角色拥有带有“搏击”的技能,则当该搏击技能触发时,若本次技能的目标角色在你攻击范围内,且你在其攻击范围内,则你执行技能主体效果时,同时额外执行“搏击”后的额外效果。'+ '
  • 游击:若一名角色拥有带有“游击”的技能,则当该游击技能执行至“游击”处时,若本次技能的目标角色在你的攻击范围内,且你不在其攻击范围内,则你可以执行“游击”后的额外效果。'+ + '
  • 激昂:一名角色发动“昂扬技”标签技能后,此技能失效,直至从此刻至满足此技能“激昂”条件后。'+ '' }, path:{}, @@ -7251,11 +7264,10 @@ '无名杀 - 录像 - '+_status.videoToSave.name[0]+' - '+_status.videoToSave.name[1]); } }, - genAsync:fn=>gnc.async(fn), - genAwait:gen=>gnc.await(gen), + genAsync:fn=>gnc.of(fn), + genAwait:item=>gnc.is.generator(item)?gnc.of(function*(){for(const content of item){yield content;}})():Promise.resolve(item), gnc:{ - async:fn=>gnc.async(fn), - await:gen=>gnc.await(gen), + of:fn=>gnc.of(fn), is:{ coroutine:item=>gnc.is.coroutine(item), generatorFunc:item=>gnc.is.generatorFunc(item), @@ -7263,31 +7275,31 @@ } }, comparator:{ - e:function(){ + equals:function(){ if(arguments.length==0) return false; if(arguments.length==1) return true; for(let i=1;iObject.keys(lib.characterPack[pack]).contains(name)); - if(pack) nameinfo=lib.characterPack[pack][name]; + else modeimage=mode; } else if(name.indexOf('::')!=-1){ name=name.split('::'); modeimage=name[0]; name=name[1]; } + else{ + nameinfo=get.character(name); + } } if(!modeimage&&nameinfo&&nameinfo[4]) for(const value of nameinfo[4]){ if(value.indexOf('ext:')==0){ @@ -7814,7 +7826,8 @@ value:function allSettled(ary){ const Promise = this; return new Promise((resolve, reject) => { - if (Object.prototype.toString.call(arr) != "[object Array]") + // if (Object.prototype.toString.call(arr) != "[object Array]") + if (!Array.isArray(ary)) return reject(new TypeError(`${typeof arr} ${ary} is not iterable(cannot read property Symbol(Symbol.iterator))`)); let args = Array.prototype.slice.call(ary); if (args.length == 0) return resolve([]); @@ -8293,8 +8306,8 @@ const loadPack=()=>{ if (Array.isArray(lib.onprepare)&&lib.onprepare.length){ _status.onprepare=Object.freeze(lib.onprepare.map(fn=>{ - const result=fn(); - return gnc.is.generatorFunc(fn)?gnc.await(result):result; + if(typeof fn!="function") return; + return (gnc.is.generatorFunc(fn)?gnc.of(fn):fn)(); })); } let toLoad=lib.config.all.cards.length+lib.config.all.characters.length+1; @@ -8306,15 +8319,23 @@ if(!arrayLengths.length) return previousValue+1; return previousValue+Math.min(...arrayLengths); },0); - const packLoaded=()=>{ + const packLoaded=gnc.of(function*(){ toLoad--; if(toLoad) return; + if(_status.importing){ + let promises=lib.creation.array; + for(const type in _status.importing){ + promises.addArray(_status.importing[type]) + } + yield Promise.allSettled(promises); + delete _status.importing; + } if(_status.windowLoaded){ delete _status.windowLoaded; lib.init.onload(); } else _status.packLoaded=true; - }; + }); if(localStorage.getItem(`${lib.configprefix}playback`)){ toLoad++; lib.init.js(`${lib.assetURL}mode`,lib.config.mode,packLoaded,packLoaded); @@ -8383,22 +8404,22 @@ window.game=game; game.dynamicStyle.init(); - Object.defineProperty(lib.creation,"a",{ + Object.defineProperty(lib.creation,"array",{ enumerable:true, get:()=>[], set:()=>null }); - Object.defineProperty(lib.creation,"o",{ + Object.defineProperty(lib.creation,"object",{ enumerable:true, get:()=>({}), set:()=>null }); - Object.defineProperty(lib.creation,"no",{ + Object.defineProperty(lib.creation,"nullObject",{ enumerable:true, get:()=>Object.create(null), set:()=>null }); - Object.defineProperty(lib.creation,"s",{ + Object.defineProperty(lib.creation,"string",{ enumerable:true, get:()=>"", set:()=>null @@ -8407,40 +8428,47 @@ if (typeof module!="object"||typeof module.exports!="object") lib.init.js(`${lib.assetURL}game`,"path.min",()=>{ lib.path=window._noname_path; delete window._noname_path; - },(e)=>{ - throw e; + },e=>{ + console.log(e); }); var styleToLoad=6; - var styleLoaded=function(){ - styleToLoad--; + var styleLoaded=gnc.of(function*(){ + --styleToLoad; if(styleToLoad==0){ if(extensionlist.length&&(lib.config.mode!='connect'||show_splash)){ - var extToLoad=extensionlist.length; - var extLoaded=function(){ - extToLoad--; + _status.extensionLoading=[]; + let extToLoad=extensionlist.length; + const extLoaded=gnc.of(function*(){ + --extToLoad; if(extToLoad==0){ + yield Promise.allSettled(_status.extensionLoading); + delete _status.extensionLoading; loadPack(); } - } + }); //读取扩展 var alerted=false; for(var i=0;i{ if(path[path.length-1]=='/') path=path.slice(0,path.length-1); if(path==`${lib.assetURL}mode`&&lib.config.all.stockmode.indexOf(file)==-1){ - lib.init[`setMode_${file}`](); - onload(); + lib.genAwait(lib.init[`setMode_${file}`]()).then(onload); return; } if(Array.isArray(file)){ @@ -10203,47 +10234,103 @@ localStorage.removeItem(lib.configprefix+'background'); } }, - //by 诗笺、Tipx-L - parsex:function(func){ - //Remove all comments - //移除所有注释 - var str=func.toString().replace(/((?:(?:^[ \t]*)?(?:\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\/(?:[ \t]*\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/)))?|\/\/(?:[^\\]|\\(?:\r?\n)?)*?(?:\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/))|(?=\r?\n))))+)|("(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|(?:\r?\n|[\s\S])[^\/"'\\\s]*)/mg,'$2').trim(); - //获取第一个 { 后的所有字符 - str=str.slice(str.indexOf('{')+1); - //func中要写步骤的话,必须要写step 0 - if(str.indexOf('step 0')==-1){ - str='{if(event.step==1) {event.finish();return;}\n'+str; - }else{ - var skip=0; - //每层最多找99个step - for (var k=0;k<99;k++) { - //正则表达式 - var reg=new RegExp(`['"]step ${k}['"]`); - var result=str.slice(skip).match(reg); - if(result==null) break; - var insertStr; - if(k==0){ - insertStr=`switch(step){case 0:`; - }else{ - insertStr=`break;case ${k}:`; - } - var copy=str; - copy=copy.slice(0,skip+result.index)+insertStr+copy.slice(skip+result.index+result[0].length); - //测试是否有错误 - try{ - new Function(copy); - str=copy; - skip+=result.index+insertStr.length; - }catch(error){ - k--; - skip+=result.index+result[0].length; + parsex:function(item){ + //by 诗笺、Tipx-L + function Legacy(func){ + //Remove all comments + //移除所有注释 + var str=func.toString().replace(/((?:(?:^[ \t]*)?(?:\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\/(?:[ \t]*\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/)))?|\/\/(?:[^\\]|\\(?:\r?\n)?)*?(?:\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/))|(?=\r?\n))))+)|("(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|(?:\r?\n|[\s\S])[^\/"'\\\s]*)/mg,'$2').trim(); + //获取第一个 { 后的所有字符 + str=str.slice(str.indexOf('{')+1); + //func中要写步骤的话,必须要写step 0 + if(str.indexOf('step 0')==-1){ + str='{if(event.step==1) {event.finish();return;}\n'+str; + }else{ + var skip=0; + //每层最多找99个step + for (var k=0;k<99;k++) { + //正则表达式 + var reg=new RegExp(`['"]step ${k}['"]`); + var result=str.slice(skip).match(reg); + if(result==null) break; + var insertStr; + if(k==0){ + insertStr=`switch(step){case 0:`; + }else{ + insertStr=`break;case ${k}:`; + } + var copy=str; + copy=copy.slice(0,skip+result.index)+insertStr+copy.slice(skip+result.index+result[0].length); + //测试是否有错误 + try{ + new Function(copy); + str=copy; + skip+=result.index+insertStr.length; + }catch(error){ + k--; + skip+=result.index+result[0].length; + } } + str=`if(event.step==${k}){event.finish();return;}`+str; } - str=`if(event.step==${k}){event.finish();return;}`+str; + return (new Function('event','step','source','player','target','targets', + 'card','cards','skill','forced','num','trigger','result', + '_status','lib','game','ui','get','ai',str)); + } + switch(typeof item){ + case "object": + if(Array.isArray(item)){ + let lastEvent=null; + return (event,step,source,player,target,targets,card,cards,skill,forced,num,trigger,result,_status,lib,game,ui,get,ai)=>{ + if(step>=item.length) return event.finish(); + var current=item[step]; + lastEvent=current(event,{ + event:event, + step:step, + source:source, + player:player, + target:target, + targets:targets, + card:card, + cards:cards, + skill:skill, + forced:forced, + num:num, + trigger:trigger, + result:result + },(lastEvent&&("result" in lastEvent))?lastEvent.result:null); + } + } + else{ + // TODO: Parse Common Object + throw new Error("NYI: Parse Common Object"); + } + case "function": + if (gnc.is.generatorFunc(item)) { + let gen,lastEvent; + return (event,step,source,player,target,targets,card,cards,skill,forced,num,trigger,result,_status,lib,game,ui,get,ai)=>{ + if(!gen)gen=item(event,{ + event:event, + step:step, + source:source, + player:player, + target:target, + targets:targets, + card:card, + cards:cards, + skill:skill, + forced:forced, + num:num, + trigger:trigger, + result:result + }); + var res=gen.next((lastEvent&&("result" in lastEvent))?lastEvent.result:null); + if(res.done) event.finish(); + else lastEvent=res.value; + } + } + else return Legacy(item); } - return (new Function('event','step','source','player','target','targets', - 'card','cards','skill','forced','num','trigger','result', - '_status','lib','game','ui','get','ai',str)); }, eval:function(func){ if(typeof func=='function'){ @@ -11107,6 +11194,7 @@ xiaosha_emotion:'小杀表情', xiaotao_emotion:'小桃表情', xiaojiu_emotion:'小酒表情', + xiaokuo_emotion:'小扩表情', pause:'暂停', config:'选项', @@ -12531,6 +12619,18 @@ game.updateRenku(); } }, + cardsGotoPile:function(){ + if(event.washCard){ + event.trigger('washCard') + for(var i=0;i3||(zoom&&event.dialog.buttons.length>5)){ + if(event.dialog.buttons.length>3){ event.dialog.classList.remove('forcebutton-auto'); } else if(!event.dialog.noforcebutton){ @@ -16214,7 +16314,7 @@ event.dialog.buttons=event.dialog.buttons.concat(ui.create.buttons(shown,'card',buttons)); event.dialog.buttons=event.dialog.buttons.concat(ui.create.buttons(hidden,'blank',buttons)); if(event.dialog.forcebutton!==false) event.dialog.forcebutton=true; - if(event.dialog.buttons.length>3||(zoom&&event.dialog.buttons.length>5)){ + if(event.dialog.buttons.length>3){ event.dialog.classList.remove('forcebutton-auto'); } else if(!event.dialog.noforcebutton){ @@ -16393,7 +16493,7 @@ event.dialog.buttons=event.dialog.buttons.concat(ui.create.buttons(shown,'card',buttons)); event.dialog.buttons=event.dialog.buttons.concat(ui.create.buttons(hidden,'blank',buttons)); if(event.dialog.forcebutton!==false) event.dialog.forcebutton=true; - if(event.dialog.buttons.length>3||(zoom&&event.dialog.buttons.length>5)){ + if(event.dialog.buttons.length>3){ event.dialog.classList.remove('forcebutton-auto'); } else if(!event.dialog.noforcebutton){ @@ -18239,16 +18339,16 @@ } } if(event.insert_index){ - event.position.insertBefore(cards[i],event.insert_index(event,cards[i])); cards[i].fix(); + event.position.insertBefore(cards[i],event.insert_index(event,cards[i])); } else if(event.insert_card){ - event.position.insertBefore(cards[i],event.position.firstChild); cards[i].fix(); + event.position.insertBefore(cards[i],event.position.firstChild); } else if(event.position==ui.cardPile){ - event.position.appendChild(cards[i]); cards[i].fix(); + event.position.appendChild(cards[i]); } else cards[i].goto(event.position); } @@ -18388,14 +18488,30 @@ event.trigger('damageBegin4'); "step 4" //moved changeHujia to changeHp - if(lib.config.background_audio){ - game.playAudio('effect','damage'+(num>1?'2':'')); - } - game.broadcast(function(num){ - if(lib.config.background_audio){ - game.playAudio('effect','damage'+(num>1?'2':'')); + if(['fire','thunder','ice'].contains(event.nature)){ + if(player.hujia>0&&!player.hasSkillTag('nohujia')&&event.nature!='ice'){ + game.broadcastAll(function(num){ + if(lib.config.background_audio) game.playAudio('effect','hujia_damage_'+event.nature+(num>1?'2':'')); + },num); } - },num); + else{ + game.broadcastAll(function(num){ + if(lib.config.background_audio) game.playAudio('effect','damage_'+event.nature+(num>1?'2':'')); + },num); + } + } + else{ + if(player.hujia>0&&!player.hasSkillTag('nohujia')){ + game.broadcastAll(function(num){ + if(lib.config.background_audio) game.playAudio('effect','hujia_damage'+(num>1?'2':'')); + },num); + } + else{ + game.broadcastAll(function(num){ + if(lib.config.background_audio) game.playAudio('effect','damage'+(num>1?'2':'')); + },num); + } + } var str=event.unreal?'视为受到了':'受到了'; if(source) str+='来自'+(source==player?'自己':get.translation(source))+'的'; str+=get.cnNumber(num)+'点'; @@ -18719,7 +18835,7 @@ var reg=new RegExp("^ext:(.+)?/"); var match=tag.match(/^die:(.+)$/); if(match){ - let path=match[1]; + var path=match[1]; if(reg.test(path)) path=path.replace(reg,(_o,p)=>`../extension/${p}/`); game.playAudio(path); } @@ -19124,6 +19240,126 @@ }, player:{ //新函数 + /** + * version 1.3 + * + * 链式创建一次性技能的api。 + * + * 使用者只需要关注技能的效果,而不是技能的本身。 + */ + when:function(){ + if(!_status.postReconnect.player_when) _status.postReconnect.player_when=[ + function(map){ + for(var i in map){ + lib.skill[i]={ + charlotte:true, + forced:true, + popup:false, + } + if(typeof map[i]=='string') lib.translate[i]=map[i]; + } + },{} + ]; + var triggerNames=Array.from(arguments); + if(triggerNames.length==0) throw 'player.when的参数数量应大于0'; + var skillName='player_when_'+Math.random().toString(36).slice(-8); + while(lib.skill[skillName]!=null){ + skillName='player_when_'+Math.random().toString(36).slice(-8); + } + triggerNames.push(`${skillName}After`); + var skill={ + trigger:{player:triggerNames}, + forced:true, + charlotte:true, + popup:false, + filterFuns:[(event,player,name)=>{ + return !name||(triggerNames.includes(name)&&event.player==player); + }], + contentFuns:[], + get filter(){ + return function(event,player,name){ + if(name==`${skillName}After`){ + skill.popup=false; + return true; + } + return skill.filterFuns.every(fun=>Boolean(fun(event,player,name))); + } + }, + }; + Object.defineProperty(lib.skill,skillName,{ + configurable:true, + //这类技能不需要被遍历到 + enumerable:false, + writable:true, + value:skill + }); + game.broadcast(function(skillName){ + Object.defineProperty(lib.skill,skillName,{ + configurable:true, + enumerable:false, + writable:true, + value:{ + forced:true, + charlotte:true, + popup:false, + } + }); + },skillName); + this.addSkill(skillName); + _status.postReconnect.player_when[1][skillName]=true; + return{ + filter(fun){ + if(lib.skill[skillName]!=skill) throw `This skill has been destroyed`; + skill.filterFuns.push(fun); + return this; + }, + removeFilter(fun){ + if(lib.skill[skillName]!=skill) throw `This skill has been destroyed`; + skill.filterFuns.remove(fun); + return this; + }, + then(fun){ + if(lib.skill[skillName]!=skill) throw `This skill has been destroyed`; + skill.contentFuns.push(fun); + var str=` + function content(){ + if(event.triggername=='${skillName}After'){ + player.removeSkill('${skillName}'); + delete lib.skill['${skillName}']; + delete lib.translate['${skillName}']; + return event.finish(); + } + `; + for(var i=0;iv[v.length - 1]!= ';'?(v+';').trim():v.trim()).join('\n'); + str+=`'step ${i}'\n\t${str2}\n\t`; + } + var result=eval(str+`\n};content;`); + skill.content=result; + return this; + }, + popup(str){ + if(lib.skill[skillName]!=skill) throw `This skill has been destroyed`; + if(typeof str=='string') skill.popup=str; + return this; + }, + translation(translation){ + if(lib.skill[skillName]!=skill) throw `This skill has been destroyed`; + if(typeof translation=='string'){ + _status.postReconnect.player_when[1][skillName]=translation; + game.broadcastAll((skillName,translation)=>lib.translate[skillName]=translation,skillName,translation) + } + return this; + }, + assgin(obj) { + if(lib.skill[skillName]!=skill) throw `This skill has been destroyed`; + if(typeof obj=='object'&&obj!==null) Object.assign(skill,obj); + return this; + } + }; + }, //让一名角色明置一些手牌 addShownCards:function(){ const cards=[]; @@ -19768,7 +20004,7 @@ }, removeGaintag:function(tag,cards){ cards=cards||this.getCards('h'); - game.addVideo('removeGaintag',this,[tag,cards]); + game.addVideo('removeGaintag',this,[tag,get.cardsInfo(cards)]); game.broadcastAll(function(player,tag,cards){ for(var i of cards) i.removeGaintag(tag); },this,tag,cards); @@ -22840,7 +23076,7 @@ next.targets=[]; } if(next.card){ - next.card=get.autoViewAs(next.card,false,next.player); + next.card=get.autoViewAs(next.card,next.cards); var info=get.info(next.card); if(info.changeTarget){ info.changeTarget(next.player,next.targets); @@ -22853,9 +23089,6 @@ next.addedTarget=next.addedTargets[0]; } } - if(!next.card.isCard&&next.cards.length){ - next.card.cards=next.cards.slice(0); - } } for(var i=0;i=-1&&get.attitude(this,next.targets[i])<0){ @@ -23126,7 +23359,7 @@ if(next.cards){ next.card=next.cards[0]; if(!next.skill){ - next.card=get.autoViewAs(next.card,null,next.player); + next.card=get.autoViewAs(next.card,next.cards); } } } @@ -24513,9 +24746,32 @@ getExpansions:function(tag){ return this.getCards('x',(card)=>card.hasGaintag(tag)); }, + countExpansions:function(tag){ + return this.getExpansions(tag).length; + }, + hasExpansions:function(tag){ + return this.countExpansions(tag)>0; + }, + setStorage:function(name,value){ + return this.storage[name]=value; + }, getStorage:function(name){ return this.storage[name]||[]; }, + hasStorage:function(name){ + return name in this.storage; + }, + initStorage:function(name,value){ + return this.hasStorage(name)?this.getStorage(name):this.setStorage(name,value); + }, + updateStorage:function(name,operation){ + return this.setStorage(name,operation(this.getStorage(name))); + }, + updateStorageAsync:function(name,operation){ + return Promise.resolve(this.getStorage(name)) + .then(value=>operation(value)) + .then(value=>this.setStorage(name,value)) + }, markSkill:function(name,info,card){ if(info===true){ this.syncStorage(name); @@ -24702,6 +24958,11 @@ node.style['box-shadow']='none'; node.style['background-size']='contain'; } + else if(lib.skill[name]&&lib.skill[name].markimage2){ + let img=ui.create.div('.background.skillmark',node); + img.setBackgroundImage(lib.skill[name].markimage2); + img.style['background-size']='contain'; + } else{ var str=lib.translate[name+'_bg']; if(!str||str[0]=='+'||str[0]=='-'){ @@ -25683,7 +25944,7 @@ if(typeof card=='string'){ card={name:card}; } - card=get.autoViewAs(card,null,player); + card=get.autoViewAs(card); var num=get.info(card).usable; if(typeof num=='function') num=num(card,player); num=game.checkMod(card,player,num,'cardUsable',player); @@ -25694,40 +25955,61 @@ return num; }, getAttackRange:function(raw){ - var player=this; - var range=0; + const player=this; + let range=0; if(raw){ range=game.checkMod(player,player,range,'globalFrom',player); range=game.checkMod(player,player,range,'attackFrom',player); - var equips=player.getCards('e',function(card){ + const equips=player.getCards('e',function(card){ return !ui.selected.cards||!ui.selected.cards.contains(card); }); - for(var i=0;i{ + const info=get.info(card,false).distance; + if(ininfo&&info.globalFrom){ range+=info.globalFrom; } - if(info.attackFrom){ - range+=info.attackFrom; + }) + return (equips.reduce((range,card,index)=>{ + if(index==0) range--; + let newRange=1; + const info=get.info(card,false); + if(info.distance){ + //如果存在attackRange 则通过attackRange动态获取攻击范围 + if(typeof info.distance.attackRange=='function'){ + newRange=info.distance.attackRange(card,player); + } + //否则采用祖宗之法 + else if(typeof info.distance.attackFrom=='number'){ + newRange-=info.distance.attackFrom; + } } - } - return (1-range); + return Math.max(range,newRange) + },range)-range); + } + let base=game.checkMod(player,'unchanged','attackRangeBase',player); + if(base!='unchanged'){ + range=base; } - var base=game.checkMod(player,'unchanged','attackRangeBase',player); - if(base!='unchanged') range=base; else{ - range=1; - var equips=player.getCards('e',function(card){ + const equips=player.getCards('e',function(card){ return !ui.selected.cards||!ui.selected.cards.contains(card); }); - for(var i=0;i{ + if(index==0) range--; + let newRange=1; + const info=get.info(card,false); + if(info.distance){ + //如果存在attackRange 则通过attackRange动态获取攻击范围 + if(typeof info.distance.attackRange=='function'){ + newRange=info.distance.attackRange(card,player); + } + //否则采用祖宗之法 + else if(typeof info.distance.attackFrom=='number'){ + newRange-=info.distance.attackFrom; + } } - } + return Math.max(range,newRange); + },1); } range=game.checkMod(player,range,'attackRange',player); return range; @@ -28450,16 +28732,19 @@ } return this; }, - setContent:function(name){ - if(typeof name=='function'){ - this.content=lib.init.parsex(name); - } - else{ - if(!lib.element.content[name]._parsed){ - lib.element.content[name]=lib.init.parsex(lib.element.content[name]); - lib.element.content[name]._parsed=true; - } - this.content=lib.element.content[name]; + setContent:function(item){ + switch(typeof item){ + case "object": + case "function": + this.content=lib.init.parsex(item); + break; + default: + if(!lib.element.content[item]._parsed){ + lib.element.content[item]=lib.init.parsex(lib.element.content[item]); + lib.element.content[item]._parsed=true; + } + this.content=lib.element.content[item]; + break; } return this; }, @@ -29577,7 +29862,7 @@ var mod2=game.checkMod(card,player,event,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; } - card=get.autoViewAs(card,null,player); + card=get.autoViewAs(card); if(event==='forceEnable'){ var mod=game.checkMod(card,player,event,'unchanged','cardEnabled',player); if(mod!='unchanged') return mod; @@ -29611,7 +29896,7 @@ return true; }, cardUsable2:function(card,player,event){ - card=get.autoViewAs(card,null,player); + card=get.autoViewAs(card); var info=get.info(card); if(info.updateUsable=='phaseUse'){ event=event||_status.event; @@ -29627,7 +29912,7 @@ else return(player.countUsed(card)Boolean(item), - ignore:()=>{} + ignore:()=>void 0 } }; const game={ + //洗牌 + washCard:()=>{ + if(!ui.cardPile.hasChildNodes()&&!ui.discardPile.hasChildNodes()) return false; + if(_status.maxShuffle!=undefined){ + if(_status.maxShuffle==0){ + if(_status.maxShuffleCheck){ + game.over(_status.maxShuffleCheck()); + } + else{ + game.over('平局'); + } + return []; + } + _status.maxShuffle--; + } + game.shuffleNumber++; + const cards=Array.from(ui.cardPile.childNodes); + if(_status.discarded){ + _status.discarded.length=0; + } + for(let i=0;i{ if(!id) throw new TypeError(); - if(lib.comparator.te(short,"object")){ + if(lib.comparator.typeEquals(short,"object")){ config=short; short=null; } - if(lib.comparator.te(name,"object")){ + if(lib.comparator.typeEquals(name,"object")){ config=name; name=null; } - if(!lib.comparator.te(short,"string")&&short){ + if(!lib.comparator.typeEquals(short,"string")&&short){ name=short; } lib.group.add(id); @@ -32624,6 +32958,23 @@ if(get.mode()!='chess'&&rank.junk.contains(name)) return 'junk'; return 'common'; }, + hasGlobalHistory:function(key,filter,last){ + if(!key) return _status.globalHistory[_status.globalHistory.length-1]; + if(!filter) return _status.globalHistory[_status.globalHistory.length-1][key]; + else{ + const history=game.getGlobalHistory(key); + if(last){ + const lastIndex=history.indexOf(last); + return history.some((event,index)=>{ + if(index>lastIndex) return false; + return filter(event); + }); + } + else{ + return history.some(filter); + } + } + }, checkGlobalHistory:function(key,filter,last){ if(!key) return _status.globalHistory[_status.globalHistory.length-1]; if(!filter) return _status.globalHistory[_status.globalHistory.length-1][key]; @@ -32656,13 +33007,34 @@ return history.filter(filter); } }, - checkAllGlobalHistory:function(key,filter,last){ + hasAllGlobalHistory:function(key,filter,last){ if(!key||!filter) return; + const stopped=false; _status.globalHistory.forEach(value=>{ if(value[key]){ - if(last&&value[key].includes(last)){ + if(last&&value[key].includes(last)&&!stopped){ + stopped=true; const lastIndex=value[key].indexOf(last); - value[key].filter((event,index)=>{ + if(value[key].some((event,index)=>{ + if(index>lastIndex) return false; + return filter(event); + })) return true; + } + else{ + if(value[key].some(filter)) return true; + } + } + }) + }, + checkAllGlobalHistory:function(key,filter,last){ + if(!key||!filter) return; + const stopped=false; + _status.globalHistory.forEach(value=>{ + if(value[key]){ + if(last&&value[key].includes(last)&&!stopped){ + stopped=true; + const lastIndex=value[key].indexOf(last); + value[key].forEach((event,index)=>{ if(index>lastIndex) return false; return filter(event); }); @@ -32724,6 +33096,58 @@ next.setContent('cardsGotoSpecial'); return next; }, + cardsGotoPile:function(){ + const cards=[]; + const next=game.createEvent('cardsGotoPile'); + next.cards=cards; + for(let i=0;i{ + if(content2.name){ + lib.imported[type][content2.name]=content2; + delete content2.name; + } + }); + if(typeof _status.importing=="undefined")_status.importing={}; + if(!_status.importing[type])_status.importing[type]=[]; + _status.importing[type].add(promise); + return promise; } }, - loadExtension:function(obj){ + loadExtension:gnc.of(function*(obj){ var noeval=false; if(typeof obj=='function'){ - obj=obj(lib,game,ui,get,ai,_status); + obj=yield (gnc.is.generatorFunc(obj)?gnc.of(obj):obj)(lib,game,ui,get,ai,_status); noeval=true; } lib.extensionMenu['extension_'+obj.name]={ @@ -33583,7 +34010,7 @@ } if(obj.precontent){ _status.extension=obj.name; - obj.precontent(cfg); + yield (gnc.is.generatorFunc(obj.precontent)?gnc.of(obj.precontent):obj.precontent).call(obj,cfg); delete _status.extension; } if(obj.content){ @@ -33598,7 +34025,7 @@ else{ game.importedPack=obj; } - }, + }), createDir:function(dir,success,error){ var nullFC=function(){}; success=success||nullFC; @@ -33637,14 +34064,12 @@ })(); } }, - importExtension:function(data,finishLoad,exportext,pkg){ + importExtension:gnc.of(function*(data,finishLoad,exportext,pkg){ //by 来瓶可乐加冰 - if(!window.JSZip){ - lib.init.js(lib.assetURL+'game','jszip',function(){ - game.importExtension(data,finishLoad,exportext,pkg); - }); - } - else if(get.objtype(data)=='object'){ + if(!window.JSZip) + yield new Promise((resolve,reject)=>lib.init.js(`${lib.assetURL}game`,"jszip",resolve,reject)); + + if(get.objtype(data)=='object'){ //导出 var zip=new JSZip(); var filelist=[]; @@ -33752,6 +34177,8 @@ if(str===""||undefined) throw('你导入的不是扩展!请选择正确的文件'); _status.importingExtension=true; eval(str); + yield Promise.allSettled(_status.extensionLoading); + delete _status.extensionLoading; _status.importingExtension=false; if(!game.importedPack) throw('err'); var extname=game.importedPack.name; @@ -33886,7 +34313,7 @@ return false; } }; - }, + }), export:function(textToWrite,name){ var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'}); var fileNameToSaveAs = name||'noname'; @@ -36064,11 +36491,16 @@ lib.characterPack[packname][name]=character; lib.translate[packname+'_character_config']=extname; }, - addCharacterPack:function(pack,packagename){ + addCharacterPack:(pack,packagename)=>{ var extname=_status.extension||'扩展'; + let gzFlag=false; packagename=packagename||extname; for(var i in pack){ - if(i=='mode'||i=='forbid') continue; + if(i=='mode'){ + if(pack[i]=="guozhan") gzFlag=true; + continue; + } + if(i=='forbid') continue; for(var j in pack[i]){ if(i=='character'){ if(!pack[i][j][4]){ @@ -36081,9 +36513,9 @@ else{ imgsrc='ext:'+extname+'/'+j+'.jpg'; } - const audiosrc='die:ext:'+extname+'/'+name+'.mp3'; - pack[i][j][4].add(imgsrc); - pack[i][j][4].add(audiosrc); + const audiosrc='die:ext:'+extname+'/'+j+'.mp3'; + if(!pack[i][j][4].some(str=>typeof str=="string"&&/^(?:db:extension-|ext:):(?:.+)/.test(str))) pack[i][j][4].add(imgsrc); + if(!pack[i][j][4].some(str=>typeof str=="string"&&/^die:(?:.+)/.test(str))) pack[i][j][4].add(audiosrc); if(pack[i][j][4].contains('boss')|| pack[i][j][4].contains('hiddenboss')){ lib.config.forbidai.add(j); @@ -36108,6 +36540,7 @@ var packname='mode_extension_'+packagename; lib.characterPack[packname]=pack.character; lib.translate[packname+'_character_config']=packagename; + if(gzFlag) lib.characterGuozhanFilter.add(packname); }, addCard:function(name,info,info2){ var extname=(_status.extension||info2.extension); @@ -36198,7 +36631,7 @@ } } }, - addSkill:function(name,info,translate,description){ + addSkill:function(name,info,translate,description,appendInfo){ if(lib.skill[name]){ return false; } @@ -36208,6 +36641,7 @@ lib.skill[name]=info; lib.translate[name]=translate; lib.translate[name+'_info']=description; + lib.translate[name+'_append']=appendInfo; return true; }, addMode:function(name,info,info2){ @@ -36227,12 +36661,12 @@ splash:imgsrc, fromextension:true } - lib.init['setMode_'+name]=function(){ - game.import('mode',function(lib,game,ui,get,ai,_status){ + lib.init['setMode_'+name]=gnc.of(function*(){ + yield game.import('mode',function(lib,game,ui,get,ai,_status){ info.name=name; return info; }); - } + }); if(!lib.config.extensionInfo[extname]){ lib.config.extensionInfo[extname]={}; } @@ -37363,18 +37797,9 @@ var cardname=get.name(cards[i]); var cardnature=get.nature(cards[i]); if(cards[i].name!=cardname||((cardnature||cards[i].nature)&&cards[i].nature!=cardnature)){ - if(!cards[i]._tempName) cards[i]._tempName=ui.create.div('.tempname',cards[i]); - var tempname=get.translation(cardname); - cards[i]._tempName.classList[lib.config.cardtempname=='default'?'add':'remove']('vertical'); - cards[i]._tempName.dataset.nature='fire'; - if(cardname=='sha'){ - if(cardnature) tempname=get.translation(cardnature)+tempname; - if(cardnature=='thunder') cards[i]._tempName.dataset.nature='thunder'; - if(cardnature=='kami') cards[i]._tempName.dataset.nature='kami'; - if(cardnature=='ice') cards[i]._tempName.dataset.nature='ice'; - } - cards[i]._tempName.innerHTML=lib.config.cardtempname=='default'?get.verticalStr(tempname):tempname; - cards[i]._tempName.tempname=tempname; + var node=ui.create.cardTempName(cards[i]); + var cardtempnameConfig=lib.config.cardtempname; + if(cardtempnameConfig!=='default') node.classList.remove('vertical'); } } var nochess=true; @@ -37944,7 +38369,8 @@ }, loadModeAsync:function(name,callback){ window.game=game; - var script=lib.init.js(lib.assetURL+'mode',name,function(){ + var script=lib.init.js(lib.assetURL+'mode',name,gnc.of(function*(){ + yield Promise.allSettled(_status.importing.mode); if(!lib.config.dev) delete window.game; script.remove(); var content=lib.imported.mode[name]; @@ -37953,7 +38379,7 @@ delete lib.imported.mode; } callback(content); - }); + })); }, switchMode:function(name,configx){ if(!lib.layoutfixed.contains(name)){ @@ -37967,7 +38393,8 @@ } } window.game=game; - var script=lib.init.js(lib.assetURL+'mode',name,function(){ + var script=lib.init.js(lib.assetURL+'mode',name,gnc.of(function*(){ + yield Promise.allSettled(_status.importing.mode); if(!lib.config.dev) delete window.game; script.remove(); var mode=lib.imported.mode; @@ -38142,7 +38569,7 @@ game.loop(); }); } - }); + })); }, loadMode:function(mode){ var next=game.createEvent('loadMode',false); @@ -39688,6 +40115,140 @@ void window.getComputedStyle(node, null).getPropertyValue("opacity"); }, create:{ + cardTempName:function(card,applyNode){ + let getApplyNode=applyNode||card; + let cardName=get.name(card); + let cardNature=get.nature(card); + let tempname=get.translation(cardName); + let cardTempNameConfig=lib.config.cardtempname; + let node=getApplyNode._tempName||ui.create.div('.tempname',getApplyNode); + let datasetNature=''; + getApplyNode._tempName=node; + if(cardTempNameConfig!='image'){ + //清空,避免和下面的image部分有冲突 + node.innerHTML=''; + datasetNature='fire'; + if(get.position(card)=='j'&&card.viewAs&&card.viewAs!=card.name) { + datasetNature = 'wood'; + tempname=get.translation(card.viewAs); + }else{ + if(cardName=='sha'){ + if(cardNature) tempname=get.translation(cardNature)+tempname; + if(cardNature=='thunder') datasetNature='thunder'; + if(cardNature=='kami') datasetNature='kami'; + if(cardNature=='ice') datasetNature='ice'; + } + } + if(cardTempNameConfig=='default') getApplyNode._tempName.classList.add('vertical'); + }else{ + if(get.position(card)=='j'&&card.viewAs&&card.viewAs!=card.name) { + cardName=card.viewAs; + tempname=get.translation(card.viewAs); + } + if(cardName=='sha'){ + if(cardNature) tempname=get.translation(cardNature)+tempname; + if(cardNature=='fire') datasetNature = 'fire'; + if(cardNature=='thunder') datasetNature='thunder'; + if(cardNature=='kami') datasetNature='kami'; + if(cardNature=='ice') datasetNature='ice'; + } + let bg=node.querySelector('div'); + if (bg) { + Array.from(node.childNodes).filter(v=>v!=bg).forEach(v=>node.removeChild(v)); + } + else bg=ui.create.div(node); + node.classList.add('tempimage'); + let img=lib.card[cardName].image; + if(img){ + if(img.indexOf('db:')==0){ + img=img.slice(3); + } + else if(img.indexOf('ext:')!=0){ + img=null; + } + } + if(lib.card[cardName].fullskin){ + if(img){ + if(img.indexOf('ext:')==0){ + bg.setBackgroundImage(img.replace(/ext:/,'extension/')); + } + else{ + bg.setBackgroundDB(img); + } + } + else{ + if(lib.card[cardName].modeimage){ + bg.setBackgroundImage('image/mode/'+lib.card[cardName].modeimage+'/card/'+cardName+'.png'); + } + else{ + if(cardName=='sha'&&cardNature=='stab') bg.setBackgroundImage('image/card/cisha.png'); + else bg.setBackgroundImage('image/card/'+cardName+'.png'); + } + } + } + else if(lib.card[cardName].image=='background'){ + if(cardNature) bg.setBackground(cardName+'_'+cardNature,'card'); + else bg.setBackground(cardName,'card'); + } + else if(lib.card[cardName].fullimage){ + if(img){ + if(img.indexOf('ext:')==0){ + bg.setBackgroundImage(img.replace(/ext:/,'extension/')); + bg.style.backgroundSize='cover'; + } + else{ + bg.setBackgroundDB(img); + } + } + else if(lib.card[cardName].image){ + if(lib.card[cardName].image.indexOf('character:')==0){ + bg.setBackground(lib.card[cardName].image.slice(10),'character'); + } + else{ + bg.setBackground(lib.card[cardName].image); + } + } + else{ + let cardPack=lib.cardPack['mode_'+get.mode()]; + if(Array.isArray(cardPack)&&cardPack.contains(cardName)){ + bg.setBackground('mode/'+get.mode()+'/card/'+cardName); + } + else{ + bg.setBackground('card/'+cardName); + } + } + } + else if(lib.card[cardName].image=='card'){ + if(cardNature) bg.setBackground(cardName+'_'+cardNature,'card'); + else bg.setBackground(cardName,'card'); + } + else if(typeof lib.card[cardName].image=='string'&&!lib.card[cardName].fullskin){ + if(img){ + if(img.indexOf('ext:')==0){ + bg.setBackgroundImage(img.replace(/ext:/,'extension/')); + bg.style.backgroundSize='cover'; + } + else{ + bg.setBackgroundDB(img); + } + } + else{ + bg.setBackground(lib.card[cardName].image); + } + } + else{ + console.warn('卡牌图片解析失败'); + } + } + if(datasetNature.length>0){ + node.dataset.nature=datasetNature; + }else{ + delete node.dataset.nature; + } + node.innerHTML+=`${cardTempNameConfig=='default'?get.verticalStr(tempname):tempname}`; + node.tempname=tempname; + return node; + }, connectRooms:function(list){ ui.rooms=[]; ui.roombase=ui.create.dialog(); @@ -40765,6 +41326,7 @@ updateConnectDisplayMap(); } }; + if(!get.config('menu_loadondemand')) node._initLink(); return node; }; var modeorder=lib.config.modeorder||[]; @@ -40904,7 +41466,7 @@ var page=ui.create.div(''); var node=ui.create.div('.menubutton.large',info.name,position,clickMode); node.mode=mode; - //node._initLink=function(){ + node._initLink=function(){ node.link=page; var map={}; if(info.config){ @@ -41291,7 +41853,8 @@ info.config.update(config,map); } } - //}; + }; + if(!get.config('menu_loadondemand')) node._initLink(); return node; }; @@ -41847,6 +42410,7 @@ createDash('字','字体文件',dash3); createDash('全','全部文件',dash4); }; + if(!get.config('menu_loadondemand')) node._initLink(); }()); createModeConfig('others',start.firstChild); @@ -41986,41 +42550,7 @@ } } alterableCharacters.sort(); - /*var getGroup=function(name){ - var group=get.is.double(name,true); - if(group) return group[0]; - return lib.character[name][1]; - };*/ - const groupSort=function(name){ - if(!lib.character[name]) return 7; - let base=0; - if(get.is.double(name,true)) base=9; - const group=lib.character[name][1]; - if(group=='shen') return base-1; - if(group=='wei') return base; - if(group=='shu') return base+1; - if(group=='wu') return base+2; - if(group=='qun') return base+3; - if(group=='jin') return base+4; - if(group=='key') return base+5; - if(group=='western') return base+6; - return base+7; - } - list.sort(function(a,b){ - var del=groupSort(a)-groupSort(b); - if(del!=0) return del; - var aa=a,bb=b; - if(a.indexOf('_')!=-1){ - a=a.slice(a.lastIndexOf('_')+1); - } - if(b.indexOf('_')!=-1){ - b=b.slice(b.lastIndexOf('_')+1); - } - if(a!=b){ - return a>b?1:-1; - } - return aa>bb?1:-1; - }); + list.sort(lib.sort.character); var list2=list.slice(0); var cfgnode=createConfig({ name:'开启', @@ -42255,6 +42785,7 @@ } } }; + if(!get.config('menu_loadondemand')) node._initLink(); return node; }; if(lib.config.show_favourite_menu&&!connectMenu&&Array.isArray(lib.config.favouriteCharacter)){ @@ -42723,6 +43254,7 @@ ui.create.div('.menuplaceholder',page); } }; + if(!get.config('menu_loadondemand')) node._initLink(); return node; }; if(!connectMenu&&lib.config.show_ban_menu){ @@ -43004,7 +43536,7 @@ node.classList.add('smallfont'); } node.mode=mode; - //node._initLink=function(){ + // node._initLink=function(){ node.link=page; for(var i in lib.extensionMenu[mode]){ if(i=='game') continue; @@ -43039,7 +43571,8 @@ } page.appendChild(cfgnode); } - //}; + // }; + // if(!get.config('menu_loadondemand')) node._initLink(); return node; }; for(var i in lib.extensionMenu){ @@ -43369,9 +43902,36 @@ buttonExport.style.marginRight='2px'; buttonExport.style.display='none'; buttonExport.onclick=function(){ - processExtension(true); - if(lib.config.show_extensionshare){ - shareExtLine.style.display=''; + function oldExport(){ + processExtension(true); + if(lib.config.show_extensionshare){ + shareExtLine.style.display=''; + } + } + if(typeof game.readFile=='function'&& + window.noname_shijianInterfaces&& + typeof window.noname_shijianInterfaces.shareExtensionWithPassWordAsync=='function'&& + confirm('是否使用诗笺版自带的导出功能来导出扩展?')){ + const extName=inputExtName.value; + if (!extName) { + alert('未检测到扩展名,将使用无名杀自带的导出功能'); + oldExport(); + return; + } + game.readFile(`extension/${extName}/extension.js`, () => { + const pwd=prompt("请输入压缩包密码,不设密码直接点确定"); + let result; + if(pwd===''||pwd=== null){ + window.noname_shijianInterfaces.shareExtensionAsync(extName); + }else{ + window.noname_shijianInterfaces.shareExtensionWithPassWordAsync(extName, pwd); + } + },()=>{ + alert('未检测到扩展文件,将使用无名杀自带的导出功能'); + oldExport(); + }); + }else{ + oldExport(); } }; inputExtLine.appendChild(buttonExport); @@ -43401,8 +43961,11 @@ shareExtLine.style.textAlign='left'; shareExtLine.style.marginBottom='5px'; shareExtLine.innerHTML='已导出扩展。分享扩展×'; - shareExtLine.querySelectorAll('span')[0].onclick=function(){ - game.open('https://tieba.baidu.com/p/5439380222'); + shareExtLine.querySelectorAll('span')[0].onclick = function () { + //这个链接404了 + //game.open('https://tieba.baidu.com/p/5439380222'); + //无名杀贴吧首页 + game.open('https://tieba.baidu.com/f?ie=utf-8&kw=%E6%97%A0%E5%90%8D%E6%9D%80'); }; shareExtLine.querySelectorAll('span')[1].onclick=function(){ shareExtLine.style.display='none'; @@ -45170,6 +45733,7 @@ createDash('技','编辑技能',dash3); createDash('码','编辑代码',dash4); }; + if(!get.config('menu_loadondemand')) node._initLink(); }()); (function(){ var page=ui.create.div(''); @@ -45480,6 +46044,7 @@ }; if(_thisUpdate) node.update(); }; + if(!get.config('menu_loadondemand')) node._initLink(); }()); var active=start.firstChild.querySelector('.active'); if(!active){ @@ -45893,7 +46458,8 @@ } } else if(updates[i].indexOf('image/card')==0){ - if(updates[i].indexOf('qiaosi_card')!=11&&!skipcard.contains(updates[i].slice(11,updates[i].lastIndexOf('.')))){ + let cardname=updates[i].slice(11,updates[i].lastIndexOf('.')); + if(lib.card[cardname]&&!skipcard.contains(cardname)){ updates.splice(i--,1); } } @@ -46689,6 +47255,7 @@ pre.innerHTML=''; }); }; + if(!get.config('menu_loadondemand')) node._initLink(); }()); (function(){ var page=ui.create.div(''); @@ -46724,6 +47291,7 @@ } } }; + if(!get.config('menu_loadondemand')) node._initLink(); }()); (function(){ if(!window.indexedDB||window.nodb) return; @@ -46912,6 +47480,7 @@ } }; }; + if(!get.config('menu_loadondemand')) node._initLink(); }()); @@ -47257,6 +47826,7 @@ } } var list=[]; + const groups=[]; var dialog; var node=ui.create.div('.caption.pointerspan'); if(get.is.phoneLayout()){ @@ -47301,6 +47871,10 @@ if(lib.characterFilter[i]&&!lib.characterFilter[i](get.mode())) continue; if(filter&&filter(i)) continue; list.push(i); + if(get.is.double(i)){ + groups.add('double'); + } + else groups.add(lib.character[i][1]); if(namecapt.indexOf(getCapt(i))==-1){ namecapt.push(getCapt(i)); } @@ -47309,6 +47883,7 @@ namecapt.sort(function(a,b){ return a>b?1:-1; }); + groups.sort(lib.sort.group); if(!thisiscard){ namecapt.remove('自定义'); namecapt.push('newline'); @@ -47504,29 +48079,6 @@ } } if(!thisiscard){ - var groups=['wei','shu','wu','qun','jin']; - var bool1=false; - var bool2=false; - var bool3=(get.mode()=='guozhan'&&_status.forceKey!=true&&get.config('onlyguozhan')); - var bool4=false; - var bool5=false; - for(var i in lib.character){ - if(lib.character[i][1]=='shen'){ - bool1=true; - } - if(lib.character[i][1]=='ye'){ - bool5=true; - } - if(bool3||lib.character[i][1]=='key'){ - bool2=true; - } - if(!bool4&&get.is.double(i)) bool4=true; - if(bool1&&bool2&&bool4&&bool5) break; - } - if(bool1) groups.add('shen'); - if(bool2&&!bool3) groups.add('key'); - if(bool4) groups.add('double'); - if(bool5) groups.add('ye'); var natures=['water','soil','wood','metal']; var span=document.createElement('span'); newlined.appendChild(span); @@ -47736,45 +48288,26 @@ case 'zhenfa':return 5; default:return 6; } - }; + } + list.sort(function(a,b){ + var del=groupSort(a)-groupSort(b); + if(del!=0) return del; + var aa=a,bb=b; + if(a.indexOf('_')!=-1){ + a=a.slice(a.lastIndexOf('_')+1); + } + if(b.indexOf('_')!=-1){ + b=b.slice(b.lastIndexOf('_')+1); + } + if(a!=b){ + return a>b?1:-1; + } + return aa>bb?1:-1; + }); } else{ - /*var getGroup=function(name){ - var group=get.is.double(name,true); - if(group) return group[0]; - return lib.character[name][1]; - }*/ - groupSort=function(name){ - if(!lib.character[name]) return 7; - let base=0; - if(get.is.double(name,true)) base=9; - const group=lib.character[name][1]; - if(group=='shen') return base-1; - if(group=='wei') return base; - if(group=='shu') return base+1; - if(group=='wu') return base+2; - if(group=='qun') return base+3; - if(group=='jin') return base+4; - if(group=='key') return base+5; - if(group=='western') return base+6; - return base+7; - } + list.sort(lib.sort.character); } - list.sort(function(a,b){ - var del=groupSort(a)-groupSort(b); - if(del!=0) return del; - var aa=a,bb=b; - if(a.indexOf('_')!=-1){ - a=a.slice(a.lastIndexOf('_')+1); - } - if(b.indexOf('_')!=-1){ - b=b.slice(b.lastIndexOf('_')+1); - } - if(a!=b){ - return a>b?1:-1; - } - return aa>bb?1:-1; - }); dialog=ui.create.dialog('hidden'); dialog.classList.add('noupdate'); dialog.classList.add('scroll1'); @@ -48986,12 +49519,7 @@ lib.setIntro(node); } if(get.position(item)=='j'&&item.viewAs&&item.viewAs!=item.name&&lib.config.cardtempname!='off'){ - node._tempName=ui.create.div('.tempname',node); - var tempname=get.translation(item.viewAs); - if(lib.config.cardtempname=='default') node._tempName.classList.add('vertical'); - node._tempName.dataset.nature='wood'; - node._tempName.innerHTML=lib.config.cardtempname=='default'?get.verticalStr(tempname):tempname; - node._tempName.tempname=tempname; + ui.create.cardTempName(item,node); } break; @@ -52687,6 +53215,19 @@ fav.classList.add('active'); } var intro=ui.create.div('.characterintro',get.characterIntro(name),uiintro); + if(lib.config.show_characternamepinyin){ + var charactername=get.rawName(name); + var characterpinyin=get.pinyin(charactername); + var nameinfo=get.character(name); + var charactersex=get.translation(nameinfo[0]); + const charactergroups=get.is.double(name,true); + let charactergroup; + if(charactergroups) charactergroup=charactergroups.map(i=>get.translation(i)).join('/') + else charactergroup=get.translation(nameinfo[1]); + var characterhp=nameinfo[2]; + var characterintroinfo=get.characterIntro(name); + intro.innerHTML=''+charactername+''+''+'['+characterpinyin+']'+''+' | '+charactersex+' | '+charactergroup+' | '+characterhp+'
    '+characterintroinfo; + } var intro2=ui.create.div('.characterintro.intro2',uiintro); var list=get.character(name,3)||[]; var skills=ui.create.div('.characterskill',uiintro); @@ -52705,7 +53246,14 @@ current.classList.remove('active'); } this.classList.add('active'); - intro2.innerHTML=''+get.translation(this.link)+''+get.skillInfoTranslation(this.link); + var skillname=get.translation(this.link); + var skilltranslationinfo=get.skillInfoTranslation(this.link); + if(lib.config.show_skillnamepinyin&&skillname!='阵亡'){ + var skillpinyin=get.pinyin(skillname); + intro2.innerHTML=''+skillname+''+''+'['+skillpinyin+']'+''+' '+skilltranslationinfo; + }else{ + intro2.innerHTML=''+skillname+''+skilltranslationinfo; + } var info=get.info(this.link); var skill=this.link; var playername=this.linkname; @@ -52716,7 +53264,14 @@ derivation=[derivation]; } for(var i=0;i'+get.skillInfoTranslation(derivation[i]); + var derivationname=get.translation(derivation[i]); + var derivationtranslationinfo=get.skillInfoTranslation(derivation[i]); + if(lib.config.show_skillnamepinyin&&derivationname.length<=5&&derivation[i].indexOf('_faq')==-1){ + var derivationpinyin=get.pinyin(derivationname); + intro2.innerHTML+='

    '+derivationname+''+''+'['+derivationpinyin+']'+''+' '+derivationtranslationinfo; + }else{ + intro2.innerHTML+='

    '+derivationname+''+derivationtranslationinfo; + } } } if(info.alter){ @@ -53842,8 +54397,8 @@ pinyin:function(chinese,withtone){ const util=window.pinyinUtilx; if(!window.pinyinUtilx) return []; - if(lib.pinyins.metadata&&lib.pinyins.metadata[chinese]){ - const str=lib.pinyins.metadata[chinese]; + if(lib.pinyins&&lib.pinyins[chinese]){ + const str=lib.pinyins[chinese]; if(withtone===false){ for(let i=0;i{ + let info=get.character(name,4); + if(!info) return false; + for(let i of info){ if(i.indexOf('doublegroup:')==0){ if(!array) return true; return i.split(':').slice(1); @@ -54236,7 +54793,7 @@ return false; }, }, - bottomCards:function(num){ + bottomCards:function(num,putBack){ if(_status.waitingForCards){ ui.create.cards.apply(ui.create,_status.waitingForCards); delete _status.waitingForCards; @@ -54248,42 +54805,7 @@ if(num<0) num=1; while(num--){ if(ui.cardPile.hasChildNodes()==false){ - if(_status.maxShuffle!=undefined){ - if(_status.maxShuffle==0){ - if(_status.maxShuffleCheck){ - game.over(_status.maxShuffleCheck()); - } - else{ - game.over('平局'); - } - return []; - } - _status.maxShuffle--; - } - game.shuffleNumber++; - var cards=[],i; - for(var i=0;i=0;i--){ + ui.cardPile.appendChild(list[i]); + } + } game.updateRoundNumber(); if(card) return list[0]; return list; @@ -54341,6 +54868,45 @@ } }, autoViewAs:function(card,cards){ + let _card; + if(get.itemtype(card)=='card'){ + _card={ + name:get.name(card), + suit:get.suit(card), + color:get.suit(card), + number:get.number(card), + nature:get.nature(card), + isCard:true, + cardid:card.cardid, + wunature:card.wunature, + storage:get.copy(card.storage), + }; + if(Array.isArray(cards)) _card.cards=cards.slice(0); + else _card.cards=[card]; + } + else{ + _card=get.copy(card); + if(Array.isArray(cards)){ + if(_card.cards){ + _card.cards=cards.slice(0); + } + else{ + _card.cards=cards.slice(0); + if(!lib.suits.includes(_card.suit)) _card.suit=get.suit(_card); + if(!Object.keys(lib.color).includes(_card.color)) _card.color=get.color(_card); + if(!_card.hasOwnProperty('number')) _card.number=get.number(_card); + if(!_card.hasOwnProperty('nature')) _card.nature=(get.nature(_card)||false); + } + } + } + const info=get.info(_card,false); + if(info.autoViewAs){ + _card.name=info.autoViewAs; + } + return _card; + }, + //deprecated + _autoViewAs:function(card,cards){ var info=get.info(card); if(info.autoViewAs){ if(cards===false){ @@ -54448,14 +55014,10 @@ } }, character:function(name,num){ - var info=lib.character[name]; + let info=lib.character[name]; if(!info){ - for(var i in lib.characterPack){ - if(lib.characterPack[i][name]){ - info=lib.characterPack[i][name]; - break; - } - } + const pack=Object.keys(lib.characterPack).find(pack=>lib.characterPack[pack].hasOwnProperty(name)); + if(pack) info=lib.characterPack[pack][name]; } if(info){ if(typeof num=='number'){ @@ -55623,17 +56185,17 @@ if(card.length==1) return get.suit(card[0],player); return 'none'; } - else if(Array.isArray(card.cards)&&card.suit!='none'&&!lib.suit.contains(card.suit)){ + else if(!card.hasOwnProperty('suit')&&Array.isArray(card.cards)){ return get.suit(card.cards,player); } else{ if(player!==false){ - var owner=player||get.owner(card); + const owner=player||get.owner(card); if(owner){ return game.checkMod(card,card.suit,'suit',owner); } } - if(lib.suit.contains(card.suit)) return card.suit; + if(lib.suits.contains(card.suit)) return card.suit; return 'none'; } }, @@ -55641,32 +56203,35 @@ if(!card) return; if(Array.isArray(card)){ if(!card.length) return 'none'; - var color=get.color(card[0],player); - for(var i=1;i=0;i--){ + ui.cardPile.insertBefore(list[i],ui.cardPile.firstChild); + } + } game.updateRoundNumber(); if(card) return list[0]; return list; @@ -55758,8 +56293,7 @@ if(from==to) return 0; if(!game.players.contains(from)&&!game.dead.contains(from)) return Infinity; if(!game.players.contains(to)&&!game.dead.contains(to)) return Infinity; - var player=from,m,n=1,i; - var fxy,txy; + let player=from,m,n=1,i,fxy,txy; if(game.chess){ fxy=from.getXY(); txy=to.getXY(); @@ -55770,9 +56304,9 @@ if(method=='raw'||method=='pure'||method=='absolute') return n; } else{ - var length=game.players.length; - var totalPopulation=game.players.length+game.dead.length+1; - for(var iwhile=0;iwhile{ + if(index==0) range--; + let newRange=1; + const info=get.info(card,false); + if(info.distance){ + //如果存在attackRange 则通过attackRange动态获取攻击范围 + if(typeof info.distance.attackRange=='function'){ + newRange=info.distance.attackRange(card,player); + } + //否则采用祖宗之法 + else if(typeof info.distance.attackFrom=='number'){ + newRange-=info.distance.attackFrom; + } + } + return Math.max(range,newRange) + },1); + m+=(1-attakRange) for(i=0;i=range[0]){ + ok=true; + } if(range[1]<=-1){ j=0; for(i=0;i 汉字 - if(window.pinyin_dict_notone) - { + if (window.pinyin_dict_notone) { // 对于拼音转汉字,我们优先使用pinyin_dict_notone字典文件 // 因为这个字典文件不包含生僻字,且已按照汉字使用频率排序 dict.py2hz = pinyin_dict_notone; // 拼音转汉字 - } - else - { + } else { // 将字典文件解析成拼音->汉字的结构 // 与先分割后逐个去掉声调相比,先一次性全部去掉声调然后再分割速度至少快了3倍,前者大约需要120毫秒,后者大约只需要30毫秒(Chrome下) - var notone = pinyinUtilx.removeTone(pinyin_dict_withtone).split(','); + var notone = pinyinUtilx.removeTone(pinyin_dict_withtone) + .split(','); var py2hz = {}, py, hz; - for(var i=0, len = notone.length; i= 19968 && unicode <= 40869) - { - ch = dict.firstletter.all.charAt(unicode-19968); - if(polyphone) ch = dict.firstletter.polyphone[unicode] || ch; + if (unicode >= 19968 && unicode <= 40869) { + ch = dict.firstletter.all.charAt(unicode - 19968); + if (polyphone) ch = dict.firstletter.polyphone[unicode] || ch; } result.push(ch); } - if(!polyphone) return result.join(''); // 如果不用管多音字,直接将数组拼接成字符串 + if (!polyphone) return result.join(''); // 如果不用管多音字,直接将数组拼接成字符串 else return handlePolyphone(result, '', ''); // 处理多音字,此时的result类似于:['D', 'ZC', 'F'] - } - else - { + } else { var py = this.getPinyin(str, ' ', false, polyphone); py = py instanceof Array ? py : [py]; var result = []; - for(var i=0; i.card>.info>span, margin-left: 4px; margin-right: 4px; position: relative; - width: calc(100% - 8px); + /* width: calc(100% - 8px); */ } .content>.caption + .buttons:not(*:last-child){ margin-top: 0; @@ -4535,19 +4535,59 @@ div[data-decoration="bronze"]::after{ top: 74px; right: 6px; } -.card .tempname { +.tempname { color: white !important; font-size: 22px; left: 6px; pointer-events: none; top: 6px; } -.card .tempname.vertical { +.tempname.vertical { left: 4px; top: 8px; writing-mode: vertical-rl; -webkit-writing-mode: vertical-rl; } +.tempname.tempimage { + top: calc(50% - 12.5px); + left: 2px; + width: calc(100% - 4px); + height: 25px; + background-image: url('../../image/card/cardtempname_bg.png'); + background-size: 100% 100%; + text-align: right; + writing-mode: horizontal-tb; + -webkit-writing-mode: horizontal-tb; +} +.tempname.tempimage:not([data-nature]) { + color: black !important; + text-shadow: white 0 0 2px, white 0 0 3px; +} +.tempname.tempimage>div { + width: 100%; + height: 100%; + top: 0; + left: 0; + background-size: 100%; + background-position: -20px -30px; + background-repeat: no-repeat; +} +.tempname.tempimage>span { + position: relative; + z-index: 1; + line-height: 25px; +} +.button>.tempname { + font-size: 17px; +} +.button>.tempname:not(.tempimage) { + left: 5px; + top: 5px; +} +.button>.tempname .vertical { + left: 3px; + top: 6px; +} /*.card.equip1 .wunature, .card.equip3 .wunature, .card.equip4 .wunature{ diff --git a/layout/mode/boss.css b/layout/mode/boss.css index 71bde7c45..275819f7e 100644 --- a/layout/mode/boss.css +++ b/layout/mode/boss.css @@ -1,148 +1,183 @@ -#bosslist{ - width:100%; - height:260px; - text-align:center; - top:calc(50% - 200px); - top:60px; - white-space:nowrap; - z-index:1; - overflow-x:scroll; +#bosslist { + width: 100%; + height: 260px; + text-align: center; + top: calc(50% - 200px); + top: 60px; + white-space: nowrap; + z-index: 1; + overflow-x: scroll; } -#window[data-radius_size='reduce'] #bosslist>.player{ - border-radius:4px; + +#window[data-radius_size='reduce'] #bosslist>.player { + border-radius: 4px; } -#window[data-radius_size='off'] #bosslist>.player{ - border-radius:0px; + +#window[data-radius_size='off'] #bosslist>.player { + border-radius: 0px; } -#window[data-radius_size='increase'] #bosslist>.player{ - border-radius:20px; + +#window[data-radius_size='increase'] #bosslist>.player { + border-radius: 20px; } -#window #bosslist>.player{ - border-radius: 10px; + +#window #bosslist>.player { + border-radius: 10px; } -#window[data-player_border='normal'] #bosslist>.player>.avatar{ - left: 8px; - top: 8px; - width: 164px; - height: 200px; + +#window[data-player_border='normal'] #bosslist>.player>.avatar { + left: 8px; + top: 8px; + width: 164px; + height: 200px; } -#window[data-player_border='slim'] #bosslist>.player>.avatar{ - left: 4px; - top: 4px; - width: 172px; - height: 208px; + +#window[data-player_border='slim'] #bosslist>.player>.avatar { + left: 4px; + top: 4px; + width: 172px; + height: 208px; } + .bosspaused>#bosslist, .bosspaused>#control, -.bosspaused>.dialog.bosscharacter{ - opacity:0.2 !important; +.bosspaused>.dialog.bosscharacter { + opacity: 0.2 !important; } -#bosslist.hidden>.player{ - transition:all 0s; + +#bosslist.hidden>.player { + transition: all 0s; } + #bosslist>div:first-child, -#bosslist>div:last-child{ - width:20px; - position:relative; +#bosslist>div:last-child { + width: 20px; + position: relative; } -#window:not(.nopointer) #bosslist>.player{ - cursor: pointer; + +#bosslist>.player .identity { + align-items: flex-start; } -.dialog.bosscharacter .buttons .button.selectable{ + +#bosslist>.player .identity>div { + writing-mode: vertical-rl; + -webkit-writing-mode: vertical-rl; +} + +#window:not(.nopointer) #bosslist>.player { cursor: pointer; } -.dialog.bosscharacter .buttons .button:not(.selectable){ - opacity: 0.6 + +.dialog.bosscharacter .buttons .button.selectable { + cursor: pointer; } -.player.bossplayer.bossing{ - position:absolute; -} -.player.bossing .avatar{ - transition:all 0.5s; -} -.player.bossplayer.highlight{ - transform:scale(1.1); - opacity:1; -} -#bosslist.removing>.player.bossplayer.highlight{ - transition:all 0s; - opacity:0; -} -.player.bossplayer{ - position:relative; - margin:10px; - left:0; - top:4px; - width:180px; - height:216px; - transition: all 0.3s; - opacity:0.6; - animation:game_start 0.5s; - -webkit-animation:game_start 0.5s; -} -.player.bossplayer>div:not(.hp):not(.identity):not(.avatar):not(.framebg){ - display:none !important; -} -.player.bossplayer>.identity{ - left:16px; - top:20px; - line-height:24px; - white-space:normal; -} -.player.bossplayer>.hp{ - top:22px; - left:144px; -} -.player.bossplayer>.avatar{ - width:160px; - height:196px; +.dialog.bosscharacter .buttons .button:not(.selectable) { + opacity: 0.6 } -#control.bosslist{ - top:calc(100% - 50px) !important; - position:fixed; +.player.bossplayer.bossing { + position: absolute; } -.dialog.bosscharacter{ - top:auto; - bottom:65px; - height:calc(100% - 383px); - animation: dialog_start2 0.5s; +.player.bossing .avatar { + transition: all 0.5s; +} + +.player.bossplayer.highlight { + transform: scale(1.1); + opacity: 1; +} + +#bosslist.removing>.player.bossplayer.highlight { + transition: all 0s; + opacity: 0; +} + +.player.bossplayer { + position: relative; + margin: 10px; + left: 0; + top: 4px; + width: 180px; + height: 216px; + transition: all 0.3s; + opacity: 0.6; + animation: game_start 0.5s; + -webkit-animation: game_start 0.5s; +} + +.player.bossplayer>div:not(.hp):not(.identity):not(.avatar):not(.framebg) { + display: none !important; +} + +.player.bossplayer>.identity { + left: 16px; + top: 18px; + line-height: 24px; + white-space: normal; +} + +.player.bossplayer>.hp { + top: 22px; + left: 144px; +} + +.player.bossplayer>.avatar { + width: 160px; + height: 196px; +} + +#control.bosslist { + top: calc(100% - 50px) !important; + position: fixed; +} + +.dialog.bosscharacter { + top: auto; + bottom: 65px; + height: calc(100% - 383px); + animation: dialog_start2 0.5s; -webkit-animation: dialog_start2 0.5s; } -.bosschongzheng{ - width:calc(100% - 20px); - white-space:nowrap; - position:relative; +.bosschongzheng { + width: calc(100% - 20px); + white-space: nowrap; + position: relative; } -.bosschongzheng div{ - position:relative; + +.bosschongzheng div { + position: relative; } -.bosschongzheng>div{ - width:100%; - display:block; - margin-bottom:5px; + +.bosschongzheng>div { + width: 100%; + display: block; + margin-bottom: 5px; } -.bosschongzheng>div>div:first-child{ - text-align:left; - width:30%; + +.bosschongzheng>div>div:first-child { + text-align: left; + width: 30%; } -.bosschongzheng>div>div:last-child{ - text-align:right; - width:70%; + +.bosschongzheng>div>div:last-child { + text-align: right; + width: 70%; } @media screen and (min-height: 800px) { - .dialog.bosscharacter{ - height:417px; - bottom:calc(50% - 335px); + .dialog.bosscharacter { + height: 417px; + bottom: calc(50% - 335px); } - #control.bosslist{ - top:calc(50% + 350px) !important; - } - #bosslist{ - top:calc(40% - 260px); - } -} + + #control.bosslist { + top: calc(50% + 350px) !important; + } + + #bosslist { + top: calc(40% - 260px); + } +} \ No newline at end of file diff --git a/mode/boss.js b/mode/boss.js index 342d85cbd..f15ba1273 100644 --- a/mode/boss.js +++ b/mode/boss.js @@ -2034,38 +2034,79 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, shanrangzhaoshu:{ - trigger:{global:'gainEnd'}, + trigger:{ + global:['gainEnd','loseAsyncAfter'], + }, direct:true, filter:function(event,player){ - return event.player!=player&&event.player!=_status.currentPhase&&event.player.getHistory('gain')[0]==event&&player.countCards('he')+event.player.countCards('he')>0; + let min=0; + if(!player.hasSkill('shanrangzhaoshu',null,false)) min+=get.sgn(player.getEquips('shanrangzhaoshu').length) + const bool=player.countCards('he')>min; + return game.hasPlayer(current=>{ + if(current==player||current==_status.currentPhase) return false; + if(!bool&¤t.countCards('h')==0) return false; + const history=current.getHistory('gain')[0]; + if(!history) return false; + if(event.name=='gain'){ + return history==event&&event.getlx!==false; + } + return history.getParent()==event; + }) }, content:function(){ 'step 0' - event.target=trigger.player; - var list=[]; - if(player.countCards('he')>1) list.push('交给其一张牌'); - if(trigger.player.countCards('he')>0) list.push('令其交给你一张牌'); - event.list=list; - player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('shanrangzhaoshu',trigger.player)).set('ai',function(){ - if(get.attitude(_status.event.player,_status.event.getTrigger().player)<0) return _status.event.getParent().list.length-1; - return 'cancel2'; - }); + event.targets=game.filterPlayer(function(current){ + if(current==player||current==_status.currentPhase) return false; + const history=current.getHistory('gain')[0]; + if(!history) return false; + if(trigger.name=='gain'){ + return history==trigger&&trigger.getlx!==false; + } + return history.getParent()==trigger; + }).sortBySeat(_status.currentPhase); 'step 1' + var target=event.targets.shift(); + event.target=target; + if(target.isIn()){ + var list=[]; + var min=0; + if(!player.hasSkill('shanrangzhaoshu',null,false)) min+=get.sgn(player.getEquips('shanrangzhaoshu').length); + if(player.countCards('he')>min) list.push(`交给${get.translation(target)}一张牌`); + if(target.countCards('he')>0) list.push(`令${get.translation(target)}交给你一张牌`); + event.list=list; + if(list.length==0) event.goto(4); + else if(list.length==1) event._result={index:0}; + else player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('shanrangzhaoshu',target)).set('ai',function(){ + if(get.attitude(_status.event.player,_status.event.getParent().target)<0) return 1; + return 'cancel2'; + }); + } + else event.goto(4); + 'step 2' if(result.control=='cancel2'){ - event.finish();return; + event.goto(4); + return; } player.logSkill('shanrangzhaoshu',target); if(event.list[result.index][0]=='令'){ - event.player=target; - event.target=player; + event.gainner=player; + event.giver=target; + target.chooseCard('he',true,`交给${get.translation(player)}一张牌`); + } + else{ + event.giver=player; + event.gainner=target; + player.chooseCard('he',true,`交给${get.translation(target)}一张牌`).set('filterCard',function(card,player){ + if(_status.event.ignoreCard) return true; + var cards=player.getEquips('shanrangzhaoshu'); + if(!cards.contains(card)) return true; + return cards.some(cardx=>(cardx!=card&&!ui.selected.cards.contains(cardx))); + }).set('ignoreCard',player.hasSkill('shanrangzhaoshu',null,false)); } - 'step 2' - player.chooseCard('he',true).set('filterCard',function(card,player){ - if(player!=_status.event.getTrigger().player) return card!=player.getEquip('shanrangzhaoshu'); - return true; - }); 'step 3' - if(result.cards&&result.cards.length) target.gain(result.cards,player,'giveAuto'); + if(result.cards&&result.cards.length) event.giver.give(result.cards,event.gainner); + 'step 4' + if(targets.length>0) event.goto(1); }, }, lingsheji:{ @@ -3076,10 +3117,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return distance+1; }, }, - init:function(player){ - player.$disableEquip('equip3'); - player.$disableEquip('equip4'); - }, enable:"phaseUse", position:'h', filter:function (event,player){ @@ -3110,6 +3147,28 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:1, }, }, + group:'boss_diting_init', + subSkill:{ + init:{ + trigger:{ + global:'gameStart', + player:'enterGame', + }, + forced:true, + filter:function(event,player){ + return player.hasEnabledSlot(3)||player.hasEnabledSlot(4); + }, + content:function(){ + var disables=[]; + for(var i=3;i<=4;i++){ + for(var j=0;j0) player.disableEquip(disables); + }, + } + }, }, /* "boss_sdyl_level":{ @@ -9266,9 +9325,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ boss_wuguanwang_ab:'五官王', boss_wuguanwang:'五官王·吕岱', boss_zhiwang:'治妄', - boss_zhiwang_info:'锁定技,当其他角色于摸牌阶段外获得牌时,你随机弃置其一张手牌。', + boss_zhiwang_info:'锁定技,当其他角色于摸牌阶段外得到牌时,你随机弃置其一张手牌。', boss_zhiwang_planetarian:'注意事项', - boss_zhiwang_planetarian_info:'若触发【治妄】的角色因【治妄】触发的其他的技能(如【伤逝】【连营】等)继续获得了牌,则该角色将其武将牌变更为孙策。', + boss_zhiwang_planetarian_info:'若触发【治妄】的角色因【治妄】触发的其他的技能(如【伤逝】【连营】等)继续得到了牌,则该角色将其武将牌变更为孙策。', boss_gongzheng:'公正', boss_gongzheng_info:'锁定技,准备阶段,若你判定区有牌,你随机弃置一张你判定区的牌。', boss_xuechi:'血池', @@ -9396,7 +9455,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ jinwuluorigong:'金乌落日弓', iwasawa_crowbow:'金乌落日弓', lingsheji_info:'出牌阶段结束时,你可选择:1.摸一张牌。2.将一张武将牌置于武将牌上,并于回合结束后获得此牌。', - shanrangzhaoshu_info:'其他角色于回合外获得牌后,若是其本回合内第一次获得牌,则你可以选择一项:交给其一张牌,或令其交给你一张牌。', + shanrangzhaoshu_info:'其他角色于回合外得到牌后,若是其本回合内第一次得到牌,则你可以选择一项:交给其一张牌,或令其交给你一张牌。', xingtianpojunfu_info:'当你于出牌阶段内使用牌指定唯一目标后,你可弃置两张牌。若如此做,其本回合内不能使用或打出牌且其防具技能无效。', jinwuluorigong_info:'当你于出牌阶段内一次性失去了两张以上的手牌后,你可以弃置一名其他角色等量的牌。', TheDayIBecomeAGod:'神杀', diff --git a/mode/brawl.js b/mode/brawl.js index 2c1ad3334..66744ee27 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -954,7 +954,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, logAi:function(){}, - hasZhuSkill:function(){return false}, changeLingli:function(num){ if(typeof num!='number') num=1; if(typeof this.storage._lingli!='number') this.storage._lingli=0; @@ -2417,7 +2416,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ _jiazu_jin:{ trigger:{player:'phaseDrawEnd'}, popup:'晋势', - prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而获得的牌。若这些牌的花色均不同,则你摸一张牌。', + prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而得到的牌。若这些牌的花色均不同,则你摸一张牌。', filter:function(event,player){ var hs=player.getCards('h'); return player.group=='jin'&&hs.length>0&&player.getHistory('gain',function(evt){ @@ -2628,7 +2627,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, _jiazu_jin:{ popup:'晋势', - prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而获得的牌。若这些牌的花色均不同,则你摸一张牌。', + prompt2:'摸牌阶段结束时,你可以展示你于此阶段内因摸牌而得到的牌。若这些牌的花色均不同,则你摸一张牌。', }, _jiazu_key:{ popup:'键魂', diff --git a/mode/doudizhu.js b/mode/doudizhu.js index 7c6e1280d..5a74cb418 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1850,13 +1850,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ else game.updateRoundNumber(); return cards; }, - hasZhuSkill:function(skill,player){ - if(!this.hasSkill(skill)) return false; - for(var i in this.storage){ - if(i.indexOf('zhuSkill_')==0&&this.storage[i].contains(skill)) return true; - } - return false; - }, $dieAfter:function(){ if(_status.video) return; if(!this.node.dieidentity){ diff --git a/mode/guozhan.js b/mode/guozhan.js index 10163a241..99bbcb9f5 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -13789,7 +13789,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(chosen.contains(i)) continue; if(lib.filter.characterDisabled(i)) continue; if(get.config('onlyguozhan')){ - if(!lib.characterPack.mode_guozhan[i]) continue; + if(!lib.characterGuozhanFilter.some(pack=>lib.characterPack[pack][i])) continue; if(get.is.jun(i)) continue; } if(lib.character[i][4].contains('hiddenSkill')) continue; @@ -13872,7 +13872,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ event.dialogxx=ui.create.characterDialog('heightset',function(i){ if(i.indexOf('gz_shibing')==0) return true; if(get.config('onlyguozhan')){ - if(!lib.characterPack.mode_guozhan[i]) return true; + if(!lib.characterGuozhanFilter.some(pack=>lib.characterPack[pack][i])) return true; if(get.is.jun(i)) return true; } },get.config('onlyguozhanexpand')?'expandall':undefined,get.config('onlyguozhan')?'onlypack:mode_guozhan':undefined); @@ -14388,7 +14388,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzsuzhi:'夙智', gzsuzhi_info:'锁定技,每回合累计限三次;①当你于回合内因执行【杀】或【决斗】造成伤害时,此伤害+1;②你于回合内使用非转化的锦囊牌时摸一张牌,且无距离限制;③当有其他角色于你的回合内弃置牌后,你获得该角色的一张牌;④结束阶段,你获得〖反馈〗直到下回合开始。', gzhuaiyi:'怀异', - gzhuaiyi_info:'出牌阶段限一次,你可以展示所有手牌。若其中包含两种颜色,则你可以弃置其中一种颜色的所有牌,然后获得至多等量名角色的各一张牌。然后你将以此法获得的装备牌置于武将牌上,称为“异”', + gzhuaiyi_info:'出牌阶段限一次,你可以展示所有手牌。若其中包含两种颜色,则你可以弃置其中一种颜色的所有牌,然后获得至多等量名角色的各一张牌。然后你将以此法得到的装备牌置于武将牌上,称为“异”', gzzisui:'恣睢', gzzisui_info:'锁定技,摸牌阶段,你多摸X张牌。结束阶段开始时,若X大于你的体力上限,你死亡(X为“异”数)。', @@ -14457,7 +14457,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzboyan_zongheng:'驳言·纵横', gzboyan_zongheng_info:'出牌阶段限一次,你可令一名其他角色本回合不能使用或打出手牌。', gzjinfa:'矜伐', - gzjinfa_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌,若你以此法获得了♠牌,则其视为对你使用一张【杀】。②你获得其一张牌。', + gzjinfa_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌,若你以此法得到了♠牌,则其视为对你使用一张【杀】。②你获得其一张牌。', gzduwu:'黩武', gzduwu_info:'限定技,出牌阶段,你可以选择一个“军令”。你令攻击范围内所有的非己方角色选择是否执行。若有角色选择否,则你对其造成1点伤害且你摸一张牌。若有角色于此技能结算过程中进入濒死状态且存活,则你失去1点体力。', gzxishe:'袭射', @@ -14551,7 +14551,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ zhuwei_info:'当你的判定牌生效后,你可以获得之。然后,你可令当前回合角色本回合内使用【杀】的次数上限和手牌上限+1。', gz_yuanshu:'袁术', gzweidi:'伪帝', - gzweidi_info:'出牌阶段限一次,你可以指定一名本回合从牌堆获得过牌的其他角色并选择一个“军令”,令其选择一项:执行该军令;或令你获得其所有手牌,然后交给其等量的牌。', + gzweidi_info:'出牌阶段限一次,你可以指定一名本回合从牌堆得到过牌的其他角色并选择一个“军令”,令其选择一项:执行该军令;或令你获得其所有手牌,然后交给其等量的牌。', gzyongsi:'庸肆', gzyongsi_info:'锁定技,若场上没有【玉玺】,则视为你装备了【玉玺】;当你成为【知己知彼】的目标时,你展示你的所有手牌。', //gzyongsi_eff1:'玉玺', @@ -14818,7 +14818,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzxiongzhi:'雄志', gzxiongzhi_info:'限定技。出牌阶段,你可依次展示牌堆顶的X张牌并使用之(X为你的体力上限)。', gzquanbian:'权变', - gzquanbian_info:'当你于出牌阶段内使用/打出手牌时,若此牌有花色且你本回合内未使用/打出过该花色的其他手牌,则你可以观看牌堆顶X张牌,选择获得其中的一张并展示之。若你本回合使用过与获得牌花色相同的牌,则你本回合内不能再发动〖权变〗。', + gzquanbian_info:'当你于出牌阶段内使用/打出手牌时,若此牌有花色且你本回合内未使用/打出过该花色的其他手牌,则你可以观看牌堆顶X张牌,选择获得其中的一张并展示之。若你本回合使用过与得到的牌花色相同的牌,则你本回合内不能再发动〖权变〗。', gzhuishi:'慧识', gzhuishi_info:'摸牌阶段,你可以放弃摸牌,改为观看牌堆顶的X张牌,获得其中的一半(向下取整),然后将其余牌置入牌堆底。(X为弃牌堆顶的两张牌的名称字数之和)', gzqingleng:'清冷', @@ -14851,7 +14851,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzzhenxi_info:'当你使用【杀】指定目标后,你可以选择一项:1.弃置目标角色一张牌;2.将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对目标角色使用;3.背水:若其有暗置的武将牌且你的武将牌均明置,则你可以依次执行这两项。', gzjiansu:'俭素', gzjiansu_tag:'俭', - gzjiansu_info:'副将技。此武将牌减少半个阴阳鱼。①当你于回合外获得牌后,你可以展示这些牌,称为“俭”。②出牌阶段开始时,你可以弃置任意张“俭”,令一名体力值不大于X的角色回复1点体力(X为你以此法弃置的牌数)。', + gzjiansu_info:'副将技。此武将牌减少半个阴阳鱼。①当你于回合外得到牌后,你可以展示这些牌,称为“俭”。②出牌阶段开始时,你可以弃置任意张“俭”,令一名体力值不大于X的角色回复1点体力(X为你以此法弃置的牌数)。', gzzhuidu:'追妒', gzzhuidu_info:'出牌阶段限一次。当你造成伤害时,你可以令受伤角色选择一项:1.此伤害+1;2.弃置装备区里的所有牌。若该角色为女性,则你可以弃置一张牌,改为令其选择两项。', gzshigong:'示恭', @@ -14917,7 +14917,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzjinyu:'近谀', gzjinyu_info:'当你明置此武将牌后,你令所有与你距离为1以内的角色依次执行以下效果:若其武将牌均明置,则其选择一张武将牌暗置,否则其弃置两张牌。', gzrehuaiyi:'怀异', - gzrehuaiyi_info:'出牌阶段限一次,你可以展示所有手牌。若其中至少包含两种颜色,则你可以弃置其中一种颜色的所有牌,然后获得至多等量名角色的各一张牌。然后你将以此法获得的装备牌置于武将牌上,称为“异”。你可以将“异”如手牌般使用或打出。', + gzrehuaiyi_info:'出牌阶段限一次,你可以展示所有手牌。若其中至少包含两种颜色,则你可以弃置其中一种颜色的所有牌,然后获得至多等量名角色的各一张牌。然后你将以此法得到的装备牌置于武将牌上,称为“异”。你可以将“异”如手牌般使用或打出。', gzrezisui:'恣睢', gzrezisui_info:'锁定技。①摸牌阶段,你多摸X张牌。②结束阶段,若X大于你的体力上限,你死亡(X为你武将牌上的“异”数)。', gztaidan:'太丹', diff --git a/mode/identity.js b/mode/identity.js index 8ec7f6943..960178783 100644 --- a/mode/identity.js +++ b/mode/identity.js @@ -1392,7 +1392,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } - if(!game.zhu) game.zhu=game.me; + if(!game.zhu) game.zhu=game.me; else{ game.zhu.setIdentity(); game.zhu.identityShown=true; diff --git a/mode/single.js b/mode/single.js index 2fcb745c0..825e82f79 100644 --- a/mode/single.js +++ b/mode/single.js @@ -809,7 +809,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, element:{ player:{ - hasZhuSkill:function(){return false;}, dieAfter:function(){ if(_status.mode!='normal'||_status.characterChoice[this.identity].length<=3) game.checkResult(); },