diff --git a/audio/die/caomao.mp3 b/audio/die/caomao.mp3
new file mode 100644
index 000000000..b62684538
Binary files /dev/null and b/audio/die/caomao.mp3 differ
diff --git a/audio/die/dc_gaolan.mp3 b/audio/die/dc_gaolan.mp3
new file mode 100644
index 000000000..64d461209
Binary files /dev/null and b/audio/die/dc_gaolan.mp3 differ
diff --git a/audio/die/dc_luotong.mp3 b/audio/die/dc_luotong.mp3
new file mode 100644
index 000000000..052e26825
Binary files /dev/null and b/audio/die/dc_luotong.mp3 differ
diff --git a/audio/die/dc_zhuling.mp3 b/audio/die/dc_zhuling.mp3
new file mode 100644
index 000000000..f68cc400c
Binary files /dev/null and b/audio/die/dc_zhuling.mp3 differ
diff --git a/audio/die/guanning.mp3 b/audio/die/guanning.mp3
new file mode 100644
index 000000000..366f97cf7
Binary files /dev/null and b/audio/die/guanning.mp3 differ
diff --git a/audio/die/ol_caiwenji.mp3 b/audio/die/ol_caiwenji.mp3
new file mode 100644
index 000000000..204ea2dba
Binary files /dev/null and b/audio/die/ol_caiwenji.mp3 differ
diff --git a/audio/die/old_quancong.mp3 b/audio/die/old_quancong.mp3
new file mode 100644
index 000000000..1bbe36ab0
Binary files /dev/null and b/audio/die/old_quancong.mp3 differ
diff --git a/audio/die/shen_jiangwei.mp3 b/audio/die/shen_jiangwei.mp3
new file mode 100644
index 000000000..29aec9aec
Binary files /dev/null and b/audio/die/shen_jiangwei.mp3 differ
diff --git a/audio/die/tengyin.mp3 b/audio/die/tengyin.mp3
new file mode 100644
index 000000000..6f71b2fc6
Binary files /dev/null and b/audio/die/tengyin.mp3 differ
diff --git a/audio/die/tw_caozhao.mp3 b/audio/die/tw_caozhao.mp3
new file mode 100644
index 000000000..00f88d8e3
Binary files /dev/null and b/audio/die/tw_caozhao.mp3 differ
diff --git a/audio/die/xin_quancong.mp3 b/audio/die/xin_quancong.mp3
new file mode 100644
index 000000000..02f6949c8
Binary files /dev/null and b/audio/die/xin_quancong.mp3 differ
diff --git a/audio/die/xuyou.mp3 b/audio/die/xuyou.mp3
new file mode 100644
index 000000000..9a55c39a2
Binary files /dev/null and b/audio/die/xuyou.mp3 differ
diff --git a/audio/skill/chenjian1.mp3 b/audio/skill/chenjian1.mp3
new file mode 100644
index 000000000..55fcd7577
Binary files /dev/null and b/audio/skill/chenjian1.mp3 differ
diff --git a/audio/skill/chenjian2.mp3 b/audio/skill/chenjian2.mp3
new file mode 100644
index 000000000..e5f3a55a1
Binary files /dev/null and b/audio/skill/chenjian2.mp3 differ
diff --git a/audio/skill/dczhanyi1.mp3 b/audio/skill/dczhanyi1.mp3
new file mode 100644
index 000000000..fd5c280f3
Binary files /dev/null and b/audio/skill/dczhanyi1.mp3 differ
diff --git a/audio/skill/dczhanyi2.mp3 b/audio/skill/dczhanyi2.mp3
new file mode 100644
index 000000000..03dc891fa
Binary files /dev/null and b/audio/skill/dczhanyi2.mp3 differ
diff --git a/audio/skill/duanchang_ol_caiwenji1.mp3 b/audio/skill/duanchang_ol_caiwenji1.mp3
new file mode 100644
index 000000000..abbb9c0bf
Binary files /dev/null and b/audio/skill/duanchang_ol_caiwenji1.mp3 differ
diff --git a/audio/skill/duanchang_ol_caiwenji2.mp3 b/audio/skill/duanchang_ol_caiwenji2.mp3
new file mode 100644
index 000000000..3a28a5c17
Binary files /dev/null and b/audio/skill/duanchang_ol_caiwenji2.mp3 differ
diff --git a/audio/skill/dunshi1.mp3 b/audio/skill/dunshi1.mp3
new file mode 100644
index 000000000..040ff99b1
Binary files /dev/null and b/audio/skill/dunshi1.mp3 differ
diff --git a/audio/skill/dunshi2.mp3 b/audio/skill/dunshi2.mp3
new file mode 100644
index 000000000..f5dfa7e0b
Binary files /dev/null and b/audio/skill/dunshi2.mp3 differ
diff --git a/audio/skill/fensi1.mp3 b/audio/skill/fensi1.mp3
new file mode 100644
index 000000000..99bcca6da
Binary files /dev/null and b/audio/skill/fensi1.mp3 differ
diff --git a/audio/skill/fensi2.mp3 b/audio/skill/fensi2.mp3
new file mode 100644
index 000000000..059f7c32f
Binary files /dev/null and b/audio/skill/fensi2.mp3 differ
diff --git a/audio/skill/gzjieyue1.mp3 b/audio/skill/gzjieyue1.mp3
new file mode 100644
index 000000000..9fe124774
Binary files /dev/null and b/audio/skill/gzjieyue1.mp3 differ
diff --git a/audio/skill/gzjieyue2.mp3 b/audio/skill/gzjieyue2.mp3
new file mode 100644
index 000000000..2c93e5db7
Binary files /dev/null and b/audio/skill/gzjieyue2.mp3 differ
diff --git a/audio/skill/jianglue1.mp3 b/audio/skill/jianglue1.mp3
new file mode 100644
index 000000000..9a84d687a
Binary files /dev/null and b/audio/skill/jianglue1.mp3 differ
diff --git a/audio/skill/jianglue2.mp3 b/audio/skill/jianglue2.mp3
new file mode 100644
index 000000000..948a864f8
Binary files /dev/null and b/audio/skill/jianglue2.mp3 differ
diff --git a/audio/skill/jinjian1.mp3 b/audio/skill/jinjian1.mp3
new file mode 100644
index 000000000..fba373bf3
Binary files /dev/null and b/audio/skill/jinjian1.mp3 differ
diff --git a/audio/skill/jinjian2.mp3 b/audio/skill/jinjian2.mp3
new file mode 100644
index 000000000..f398453ae
Binary files /dev/null and b/audio/skill/jinjian2.mp3 differ
diff --git a/audio/skill/jiufa1.mp3 b/audio/skill/jiufa1.mp3
new file mode 100644
index 000000000..a0b91ad59
Binary files /dev/null and b/audio/skill/jiufa1.mp3 differ
diff --git a/audio/skill/jiufa2.mp3 b/audio/skill/jiufa2.mp3
new file mode 100644
index 000000000..e2bfe3e7a
Binary files /dev/null and b/audio/skill/jiufa2.mp3 differ
diff --git a/audio/skill/juetao1.mp3 b/audio/skill/juetao1.mp3
new file mode 100644
index 000000000..ee1daceff
Binary files /dev/null and b/audio/skill/juetao1.mp3 differ
diff --git a/audio/skill/juetao2.mp3 b/audio/skill/juetao2.mp3
new file mode 100644
index 000000000..c2a69c8b8
Binary files /dev/null and b/audio/skill/juetao2.mp3 differ
diff --git a/audio/skill/olbeige1.mp3 b/audio/skill/olbeige1.mp3
new file mode 100644
index 000000000..c1c002b68
Binary files /dev/null and b/audio/skill/olbeige1.mp3 differ
diff --git a/audio/skill/olbeige2.mp3 b/audio/skill/olbeige2.mp3
new file mode 100644
index 000000000..5256bc1a0
Binary files /dev/null and b/audio/skill/olbeige2.mp3 differ
diff --git a/audio/skill/pingxiang1.mp3 b/audio/skill/pingxiang1.mp3
new file mode 100644
index 000000000..711ad8077
Binary files /dev/null and b/audio/skill/pingxiang1.mp3 differ
diff --git a/audio/skill/pingxiang2.mp3 b/audio/skill/pingxiang2.mp3
new file mode 100644
index 000000000..cc789e031
Binary files /dev/null and b/audio/skill/pingxiang2.mp3 differ
diff --git a/audio/skill/qianlong1.mp3 b/audio/skill/qianlong1.mp3
new file mode 100644
index 000000000..e0db0db91
Binary files /dev/null and b/audio/skill/qianlong1.mp3 differ
diff --git a/audio/skill/qianlong2.mp3 b/audio/skill/qianlong2.mp3
new file mode 100644
index 000000000..58d7d1b2c
Binary files /dev/null and b/audio/skill/qianlong2.mp3 differ
diff --git a/audio/skill/renzheng1.mp3 b/audio/skill/renzheng1.mp3
new file mode 100644
index 000000000..30c357f50
Binary files /dev/null and b/audio/skill/renzheng1.mp3 differ
diff --git a/audio/skill/renzheng2.mp3 b/audio/skill/renzheng2.mp3
new file mode 100644
index 000000000..a69b399ef
Binary files /dev/null and b/audio/skill/renzheng2.mp3 differ
diff --git a/audio/skill/tianren1.mp3 b/audio/skill/tianren1.mp3
new file mode 100644
index 000000000..23a5b3698
Binary files /dev/null and b/audio/skill/tianren1.mp3 differ
diff --git a/audio/skill/tianren2.mp3 b/audio/skill/tianren2.mp3
new file mode 100644
index 000000000..6d88efc8f
Binary files /dev/null and b/audio/skill/tianren2.mp3 differ
diff --git a/audio/skill/twchongqi1.mp3 b/audio/skill/twchongqi1.mp3
new file mode 100644
index 000000000..7cfa31bf8
Binary files /dev/null and b/audio/skill/twchongqi1.mp3 differ
diff --git a/audio/skill/twchongqi2.mp3 b/audio/skill/twchongqi2.mp3
new file mode 100644
index 000000000..35754ea03
Binary files /dev/null and b/audio/skill/twchongqi2.mp3 differ
diff --git a/audio/skill/twdianyi1.mp3 b/audio/skill/twdianyi1.mp3
new file mode 100644
index 000000000..ddaeec1b2
Binary files /dev/null and b/audio/skill/twdianyi1.mp3 differ
diff --git a/audio/skill/twdianyi2.mp3 b/audio/skill/twdianyi2.mp3
new file mode 100644
index 000000000..9fc0dfd53
Binary files /dev/null and b/audio/skill/twdianyi2.mp3 differ
diff --git a/audio/skill/twfeifu1.mp3 b/audio/skill/twfeifu1.mp3
new file mode 100644
index 000000000..decdd1a5a
Binary files /dev/null and b/audio/skill/twfeifu1.mp3 differ
diff --git a/audio/skill/twfeifu2.mp3 b/audio/skill/twfeifu2.mp3
new file mode 100644
index 000000000..27f439d73
Binary files /dev/null and b/audio/skill/twfeifu2.mp3 differ
diff --git a/audio/skill/twfucuan1.mp3 b/audio/skill/twfucuan1.mp3
new file mode 100644
index 000000000..f50490ec6
Binary files /dev/null and b/audio/skill/twfucuan1.mp3 differ
diff --git a/audio/skill/twfucuan2.mp3 b/audio/skill/twfucuan2.mp3
new file mode 100644
index 000000000..ab7290314
Binary files /dev/null and b/audio/skill/twfucuan2.mp3 differ
diff --git a/audio/skill/twshanghe1.mp3 b/audio/skill/twshanghe1.mp3
new file mode 100644
index 000000000..f030a1a9a
Binary files /dev/null and b/audio/skill/twshanghe1.mp3 differ
diff --git a/audio/skill/twshanghe2.mp3 b/audio/skill/twshanghe2.mp3
new file mode 100644
index 000000000..e27ff030f
Binary files /dev/null and b/audio/skill/twshanghe2.mp3 differ
diff --git a/audio/skill/twyingji1.mp3 b/audio/skill/twyingji1.mp3
new file mode 100644
index 000000000..f1336f948
Binary files /dev/null and b/audio/skill/twyingji1.mp3 differ
diff --git a/audio/skill/twyingji2.mp3 b/audio/skill/twyingji2.mp3
new file mode 100644
index 000000000..18e2c5427
Binary files /dev/null and b/audio/skill/twyingji2.mp3 differ
diff --git a/audio/skill/xinhuangtian2_re_zhangjiao1.mp3 b/audio/skill/xinhuangtian2_re_zhangjiao1.mp3
new file mode 100644
index 000000000..2a1707587
Binary files /dev/null and b/audio/skill/xinhuangtian2_re_zhangjiao1.mp3 differ
diff --git a/audio/skill/xinhuangtian2_re_zhangjiao2.mp3 b/audio/skill/xinhuangtian2_re_zhangjiao2.mp3
new file mode 100644
index 000000000..0790f2bac
Binary files /dev/null and b/audio/skill/xinhuangtian2_re_zhangjiao2.mp3 differ
diff --git a/audio/skill/xinyaoming1.mp3 b/audio/skill/xinyaoming1.mp3
index f22a7d51d..63db87601 100644
Binary files a/audio/skill/xinyaoming1.mp3 and b/audio/skill/xinyaoming1.mp3 differ
diff --git a/audio/skill/xinyaoming2.mp3 b/audio/skill/xinyaoming2.mp3
index 6e4850594..e174b6ad5 100644
Binary files a/audio/skill/xinyaoming2.mp3 and b/audio/skill/xinyaoming2.mp3 differ
diff --git a/audio/skill/xixiu1.mp3 b/audio/skill/xixiu1.mp3
new file mode 100644
index 000000000..f0fa97c18
Binary files /dev/null and b/audio/skill/xixiu1.mp3 differ
diff --git a/audio/skill/xixiu2.mp3 b/audio/skill/xixiu2.mp3
new file mode 100644
index 000000000..ea918f27d
Binary files /dev/null and b/audio/skill/xixiu2.mp3 differ
diff --git a/audio/skill/xizhen1.mp3 b/audio/skill/xizhen1.mp3
new file mode 100644
index 000000000..815a1a24f
Binary files /dev/null and b/audio/skill/xizhen1.mp3 differ
diff --git a/audio/skill/xizhen2.mp3 b/audio/skill/xizhen2.mp3
new file mode 100644
index 000000000..77333937a
Binary files /dev/null and b/audio/skill/xizhen2.mp3 differ
diff --git a/audio/skill/yuzhang1.mp3 b/audio/skill/yuzhang1.mp3
new file mode 100644
index 000000000..8b1ab67c8
Binary files /dev/null and b/audio/skill/yuzhang1.mp3 differ
diff --git a/audio/skill/yuzhang2.mp3 b/audio/skill/yuzhang2.mp3
new file mode 100644
index 000000000..dc4a40836
Binary files /dev/null and b/audio/skill/yuzhang2.mp3 differ
diff --git a/audio/skill/zhenshan1.mp3 b/audio/skill/zhenshan1.mp3
new file mode 100644
index 000000000..d638fe59c
Binary files /dev/null and b/audio/skill/zhenshan1.mp3 differ
diff --git a/audio/skill/zhenshan2.mp3 b/audio/skill/zhenshan2.mp3
new file mode 100644
index 000000000..d0c10854c
Binary files /dev/null and b/audio/skill/zhenshan2.mp3 differ
diff --git a/audio/skill/zhushi1.mp3 b/audio/skill/zhushi1.mp3
new file mode 100644
index 000000000..270242731
Binary files /dev/null and b/audio/skill/zhushi1.mp3 differ
diff --git a/audio/skill/zhushi2.mp3 b/audio/skill/zhushi2.mp3
new file mode 100644
index 000000000..ae0637dc6
Binary files /dev/null and b/audio/skill/zhushi2.mp3 differ
diff --git a/character/extra.js b/character/extra.js
index 1867a7a20..9753fd739 100755
--- a/character/extra.js
+++ b/character/extra.js
@@ -13,6 +13,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
extra_yin:['shen_liubei','shen_luxun'],
extra_lei:['shen_ganning','shen_zhangliao'],
extra_key:['key_kagari','key_shiki','db_key_hina'],
+ extra_decade:['shen_jiangwei'],
extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji'],
extra_mobilezhi:['shen_guojia','shen_xunyu'],
extra_mobilexin:['shen_taishici','shen_sunce'],
@@ -20,6 +21,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
+ shen_jiangwei:['male','shen',4,['jiufa','tianren','pingxiang'],['shen']],
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']],
@@ -63,6 +65,193 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
+ jiufa:{
+ audio:2,
+ trigger:{player:'useCardAfter'},
+ frequent:true,
+ filter:function(event,player){
+ return event.jiufa_counted&&player.getStorage('jiufa').length>=9;
+ },
+ content:function(){
+ 'step 0'
+ player.unmarkSkill('jiufa');
+ event.cards=get.cards(9);
+ event.cards.sort(function(a,b){
+ return get.number(b)-get.number(a);
+ })
+ game.cardsGotoOrdering(event.cards);
+ event.videoId=lib.status.videoId++;
+ game.broadcastAll(function(player,id,cards){
+ var str;
+ if(player==game.me&&!_status.auto){
+ str='九伐:选择任意张点数相同的牌';
+ }
+ else{
+ str='九伐';
+ }
+ var dialog=ui.create.dialog(str,cards);
+ dialog.videoId=id;
+ },player,event.videoId,event.cards);
+ event.time=get.utc();
+ game.addVideo('showCards',player,['涉猎',get.cardsInfo(event.cards)]);
+ game.addVideo('delay',null,2);
+ "step 1"
+ var next=player.chooseButton([1,9],true);
+ next.set('dialog',event.videoId);
+ next.set('filterButton',function(button){
+ if(!ui.selected.buttons.length) return true;
+ return get.number(ui.selected.buttons[0].link)==get.number(button.link);
+ });
+ next.set('ai',function(button){
+ return get.value(button.link,_status.event.player)*_status.event.getParent().cards.filter(function(i){
+ return get.number(i)==get.number(button.link);
+ }).length;
+ });
+ "step 2"
+ if(result.bool&&result.links){
+ event.cards2=result.links;
+ }
+ else{
+ event.finish();
+ }
+ var time=1000-(get.utc()-event.time);
+ if(time>0){
+ game.delay(0,time);
+ }
+ "step 3"
+ game.broadcastAll('closeDialog',event.videoId);
+ var cards2=event.cards2;
+ player.gain(cards2,'log','gain2');
+ },
+ marktext:'⑨',
+ intro:{
+ content:'已记录牌名:$',
+ onunmark:true,
+ },
+ group:'jiufa_count',
+ subSkill:{
+ count:{
+ trigger:{player:'useCard1'},
+ forced:true,
+ charlotte:true,
+ popup:false,
+ firstDo:true,
+ filter:function(event,player){
+ return !player.getStorage('jiufa').contains(event.card.name);
+ },
+ content:function(){
+ trigger.jiufa_counted=true;
+ player.markAuto('jiufa',[trigger.card.name]);
+ },
+ },
+ },
+ },
+ tianren:{
+ audio:2,
+ trigger:{global:['loseAfter','cardsDiscardAfter']},
+ forced:true,
+ filter:function(event,player){
+ if(event.name=='lose'){
+ if(event.position!=ui.discardPile) return false;
+ }
+ else{
+ var evt=event.getParent();
+ if(evt.relatedEvent&&evt.relatedEvent.name=='useCard') return false;
+ }
+ for(var i of event.cards){
+ var owner=false;
+ if(event.hs&&event.hs.contains(i)) owner=event.player;
+ var type=get.type(i,null,owner);
+ if(type=='basic'||type=='trick') return true;
+ }
+ return false;
+ },
+ content:function(){
+ var num=0;
+ for(var i of trigger.cards){
+ var owner=false;
+ if(trigger.hs&&trigger.hs.contains(i)) owner=trigger.player;
+ var type=get.type(i,null,owner);
+ if(type=='basic'||type=='trick') num++;
+ }
+ player.addMark('tianren',num);
+ },
+ group:'tianren_maxHp',
+ intro:{content:'mark'},
+ subSkill:{
+ maxHp:{
+ trigger:{player:['tianrenAfter','gainMaxHpAfter','loseMaxHpAfter']},
+ forced:true,
+ filter:function(event,player){
+ return player.countMark('tianren')>=player.maxHp;
+ },
+ content:function(){
+ player.removeMark('tianren',player.maxHp);
+ player.gainMaxHp();
+ player.draw(2);
+ },
+ },
+ },
+ },
+ pingxiang:{
+ audio:2,
+ enable:'phaseUse',
+ limited:true,
+ skillAnimation:true,
+ animationColor:'ice',
+ filter:function(event,player){
+ return player.maxHp>9;
+ },
+ content:function(){
+ 'step 0'
+ player.awakenSkill('pingxiang');
+ player.loseMaxHp(9);
+ event.num=0;
+ 'step 1'
+ event.num++;
+ player.chooseUseTarget({
+ name:'sha',
+ nature:'fire',
+ isCard:true,
+ },'请选择火【杀】的目标('+(event.num==9?'⑨':event.num)+'/9)',false);
+ 'step 2'
+ if(result.bool&&event.num<9) event.goto(1);
+ else{
+ player.removeSkill('jiufa');
+ player.addSkill('pingxiang_effect');
+ }
+ },
+ ai:{
+ order:function(){
+ return get.order({
+ name:'sha',
+ nature:'fire',
+ isCard:true,
+ });
+ },
+ result:{
+ player:function(player){
+ if(player.hasValueTarget({
+ name:'sha',
+ nature:'fire',
+ isCard:true,
+ })) return 1;
+ return 0;
+ },
+ },
+ },
+ subSkill:{
+ effect:{
+ marktext:'襄',
+ intro:{content:'手牌上限基数改为体力上限'},
+ mod:{
+ maxHandcardBase:function(player){
+ return player.maxHp;
+ },
+ },
+ },
+ },
+ },
hina_shenshi:{
groupSkill:true,
trigger:{player:['phaseUseBegin','phaseUseEnd']},
@@ -4917,6 +5106,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
scfuhai_info:'锁定技。①当你使用牌指定目标后,若目标角色有“平定”标记,则其不可响应此牌。若你本回合内以此法获得的牌数小于2,则你摸一张牌。②拥有“平定”标记的角色死亡时,你增加X点体力上限并摸X张牌。(X为其拥有的“平定”标记数)。',
pinghe:'冯河',
pinghe_info:'锁定技。①你的手牌上限基数等于你已损失的体力值。②当你受到其他角色造成的伤害时,若你有牌且你的体力上限大于1,则你防止此伤害,减一点体力上限并将一张手牌交给一名其他角色。然后若你拥有〖英霸〗,则伤害来源获得一个“平定”标记。',
+ shen_jiangwei:'神姜维',
+ jiufa:'九伐',
+ jiufa_info:'①当你声明使用牌时,你记录此牌的牌名。②当你使用牌结算结束后,若你的〖九伐〗记录中包含至少⑨种不同的牌名,则你可以展示牌堆顶的⑨张牌,选择并获得其中任意张点数相同的牌,清除所有的记录,将其余牌置入弃牌堆。',
+ tianren:'天任',
+ tianren_info:'锁定技。①当有一张基本牌或普通锦囊牌不因使用而进入弃牌堆后,你获得一枚“天任”标记。②当你获得“天任”标记或体力上限变化后,若你的“天任”数不小于X,则你移去X枚“天任”,加1点体力上限并摸两张牌(X为你的体力上限)。',
+ pingxiang:'平襄',
+ pingxiang_info:'限定技。出牌阶段,若你的体力上限大于⑨,则你可减⑨点体力上限,视为使用至多⑨张火【杀】,然后失去〖九伐〗,并将手牌上限基数改为体力上限直到游戏结束。',
key_kagari:'篝',
kagari_zongsi:'纵丝',
@@ -4944,6 +5140,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
extra_mobilezhi:'始计篇·智',
extra_mobilexin:'始计篇·信',
extra_offline:'神话再临·线下',
+ extra_decade:'十周年服神将',
},
};
});
diff --git a/character/mobile.js b/character/mobile.js
index 65b20c9f5..bd786996f 100644
--- a/character/mobile.js
+++ b/character/mobile.js
@@ -16,7 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_mougongtong:['sp_yangwan','liucheng'],
mobile_sunben:["re_sunben"],
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
- mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"],
+ mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"],
mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"],
mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"],
@@ -27,6 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
+ re_caiwenji:['female','qun',3,['rebeige','duanchang']],
sp_jianggan:['male','wei',3,['spdaoshu','spdaizui']],
peixiu:['male','qun',3,['xingtu','juezhi']],
re_gaoshun:['male','qun',4,['rexianzhen','rejinjiu']],
@@ -2739,11 +2740,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
enable:'phaseUse',
usable:1,
- filterTarget:function(card,player,target){
- return target!=player&&target.getEquip(1);
- },
- selectTarget:[0,1],
+ //filterTarget:function(card,player,target){
+ // return target!=player&&target.getEquip(1);
+ //},
+ //selectTarget:[0,1],
content:function(){
+ var card=get.cardPile2(function(card){
+ return get.subtype(card)=='equip1';
+ });
+ if(card) player.gain(card,'gain2');
+ else{
+ var targets=game.filterPlayer(function(current){
+ return current.getEquip(1);
+ });
+ if(targets.length){
+ var target=targets.randomGet();
+ player.gain(target.getEquip(1),target,'give');
+ }
+ }
+ },
+ content_old:function(){
'step 0'
if(!target){
var card=get.cardPile2(function(card){
@@ -15790,7 +15806,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_bianfuren:['ol_bianfuren','sp_bianfuren'],
wangshuang:['wangshuang','sp_wangshuang'],
huaman:['huaman','sp_huaman'],
- gaolan:['gaolan','sp_gaolan'],
+ gaolan:['dc_gaolan','gaolan','sp_gaolan'],
cuiyan:['sp_cuiyan','cuiyan'],
wujing:['tw_wujing','wujing'],
},
@@ -16441,7 +16457,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌并防止此伤害。',
xin_caozhen:'手杀曹真',
discretesidi:'司敌',
- discretesidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用不为延时锦囊牌的牌指定b为目标时,若(aRb)∧(此牌目标数为1)为真,则{你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,然后若场上没有处于濒死状态的角色,则你对a造成1点伤害。⒉摸两张牌};否则{你清除R内以a为第一元素的二元序偶}。',
+ discretesidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶<a,b>(b对其他角色不可见)。②一名角色a使用不为延时锦囊牌的牌指定b为目标时,若(aRb)∧(此牌目标数为1)为真,则{你从R内移除<a,b>,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,然后若场上没有处于濒死状态的角色,则你对a造成1点伤害。⒉摸两张牌};否则{你清除R内以a为第一元素的二元序偶}。',
sp_chendong:'陈武董袭',
spyilie:'毅烈',
spyilie_info:'出牌阶段开始时,你可选择:①本阶段内使用【杀】的次数上限+1。②本回合内使用【杀】被【闪】抵消时,摸一张牌。③背水:失去1点体力,然后依次执行上述所有选项。',
@@ -16492,7 +16508,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yiyong:'异勇',
yiyong_info:'当你受到其他角色造成的渠道为【杀】的伤害后,若你的装备区内有武器牌,则你可以获得此【杀】对应的所有实体牌,然后将这些牌当做【杀】对伤害来源使用(无距离限制)。若其装备区内没有武器牌,则此伤害+1。',
shanxie:'擅械',
- shanxie_info:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得一名其他角色装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。',
+ shanxie_info:'①出牌阶段限一次,你可从牌堆中获得一张武器牌。若牌堆中没有武器牌,则你改为随机获得一名角色装备区内的一张武器牌。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。',
+ shanxie_info_old:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得一名其他角色装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。',
sunyi:'手杀孙翊',
zaoli:'躁厉',
zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合获得的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌。若X大于2,你失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。',
@@ -16613,6 +16630,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spdaoshu_info:'每轮限一次。一名敌方角色的出牌阶段开始时,若其有手牌,则你可以令其视为使用一张【酒】。其须声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你随机获得其五张手牌,否则你不能响应其使用的牌直到回合结束。',
spdaizui:'戴罪',
spdaizui_info:'限定技。当你受到伤害值不小于体力值的伤害时,你可防止此伤害并将此伤害渠道对应的所有实体牌置于伤害来源的武将牌上,称为“释”。本回合结束时,其获得所有“释”。',
+ re_caiwenji:'手杀蔡琰',
mobile_standard:'手杀异构·标准包',
mobile_shenhua:'手杀异构·神话再临',
diff --git a/character/old.js b/character/old.js
index 08fd74871..23d188118 100755
--- a/character/old.js
+++ b/character/old.js
@@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_yijiang2:["old_zhonghui","madai"],
old_yijiang3:["liru","old_zhuran","old_fuhuanghou","old_caochong"],
old_yijiang4:["old_caozhen","old_chenqun","old_zhuhuan"],
- old_yijiang5:["old_caoxiu","old_quancong","old_zhuzhi"],
+ old_yijiang5:["old_caoxiu","old_zhuzhi"],
old_yijiang67:["ol_zhangrang","ol_liuyu"],
old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong","ol_maliang","old_wangyun"],
old_yingbian:['junk_simayi'],
@@ -55,7 +55,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_lingtong:['male','wu',4,['oldxuanfeng']],
old_caoxiu:['male','wei',4,['taoxi']],
old_caozhen:['male','wei',4,['sidi']],
- old_quancong:['male','wu',4,['zhenshan']],
old_lingju:['female','qun',3,['jieyuan','fenxin_old']],
old_maliang:['male','shu',3,['xiemu','naman']],
old_chenqun:['male','wei',3,['dingpin','oldfaen']],
@@ -492,169 +491,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
expose:0.2
}
},
- zhenshan:{
- trigger:{player:'chooseToRespondBegin'},
- filter:function(event,player){
- if(event.responded) return false;
- if(!event.filterCard({name:'shan'},player,event)&&!event.filterCard({name:'sha'},player,event)) return false;
- if(player.hasSkill('zhenshan2')) return false;
- var nh=player.countCards('h');
- return game.hasPlayer(function(current){
- return current!=player&¤t.countCards('h')0;
- })){
- if(card.name=='sha'){
- if(card.nature=='fire') return 2.95;
- else if(card.nature=='fire') return 2.92;
- else return 2.9;
- }
- else if(card.name=='tao'||card.name=='shan'){
- return 4;
- }
- }
- return 0;
- },
- backup:function(links,player){
- return {
- filterCard:function(){return false},
- viewAs:{name:links[0][2],nature:links[0][3],isCard:true},
- selectCard:-1,
- popname:true,
- log:false,
- precontent:function(){
- 'step 0'
- player.chooseTarget('选择交换手牌的目标',function(card,player,target){
- return target.countCards('h')0&¤t.countCards('h')0;
+ },
+ check:function(event,player){
+ if(event.player.hasSkill('xinleiji')) return get.attitude(player,event.player)>0;
+ return true;
+ },
+ prompt2:'令其进行判定,然后你可根据判定结果,弃置一张牌并令其执行对应效果。',
+ content:function(){
+ 'step 0'
+ event.target=trigger.player;
+ event.source=trigger.source;
+ trigger.player.judge();
+ 'step 1'
+ event.judgeResult=get.copy(result);
+ var str='是否弃置一张牌',strt=get.translation(target),strs=get.translation(source),goon=0;
+ switch(result.suit){
+ case 'heart':
+ if(target.isIn()&&target.isDamaged()){
+ str+=(',令'+strt+'回复1点体力');
+ goon=get.recoverEffect(target,player,player);
+ }
+ break;
+ case 'diamond':
+ if(target.isIn()){
+ str+=(',令'+strt+'摸两张牌');
+ goon=get.effect(target,{name:'wuzhong'},player,player);
+ }
+ break;
+ case 'spade':
+ if(source&&source.isIn()){
+ str+=(',令'+strs+'翻'+(source.isTurnedOver()?'回正':'')+'面');
+ goon=get.attitude(player,source)*(source.isTurnedOver()?2:-2);
+ }
+ break;
+ case 'club':
+ if(source&&source.isIn()){
+ str+=(',令'+strs+'弃置两张牌');
+ var cards=source.getCards('he').sort(function(a,b){
+ return get.value(a,source)-get.value(b,source);
+ }).slice(0,2);
+ for(var i of cards) goon+=get.value(i,source);
+ goon*=(-get.sgn(get.attitude(player,source)));
+ }
+ break;
+ }
+ str+='?';
+ var str2=('若弃置点数为'+get.strNumber(result.number)+'的牌则收回自己弃置的牌');
+ if(get.position(result.card,true)=='d'){
+ str2+=(';若弃置花色为'+get.translation(result.suit)+'的牌则获得'+get.translation(result.card));
+ }
+ player.chooseToDiscard('he',str,str2).set('goon',goon).set('ai',function(card){
+ var goon=_status.event.goon;
+ var player=_status.event.player;
+ var result=_status.event.getParent().judgeResult;
+ var eff=Math.min(7,goon);
+ if(eff<=0) return 0;
+ if(get.suit(card,player)==result.suit) eff+=get.value(result.card,player);
+ if(get.number(card,player)==result.number) return eff;
+ return eff-get.value(card);
+ });
+ 'step 2'
+ if(result.bool){
+ event.card=result.cards[0];
+ switch(event.judgeResult.suit){
+ case 'heart':
+ if(target.isIn()&&target.isDamaged()) target.recover();
+ break;
+ case 'diamond':
+ if(target.isIn()) target.draw(2);
+ break;
+ case 'spade':
+ if(source&&source.isIn()) source.turnOver();
+ player.addExpose(0.1);
+ break;
+ case 'club':
+ if(source&&source.isIn()&&source.countCards('he')>0) source.chooseToDiscard(2,'he',true);
+ player.addExpose(0.1);
+ break;
+ }
+ }
+ else event.finish();
+ 'step 3'
+ var gains=[];
+ if(get.position(event.judgeResult.card,true)=='d'&&get.suit(card,player)==event.judgeResult.suit) gains.push(event.judgeResult.card);
+ if(get.position(card,true)=='d'&&get.number(card,player)==event.judgeResult.number) gains.push(card);
+ if(gains.length) player.gain(gains,'gain2');
+ },
+ },
//OL界张郃
reqiaobian:{
audio:2,
@@ -159,8 +254,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.addMark('reqiaobian',2);
game.delayx();
},
- mark:true,
+ marktext:'变',
intro:{
+ name2:'变',
content:function(storage,player){
var str='共有'+(storage||0)+'个标记';
if(player.storage.reqiaobian_jieshu){
@@ -1508,8 +1604,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
if(list.length&&game.hasPlayer((current)=>(current!=player))){
var next=player.chooseButton(['是否将一张锦囊牌交给一名其他角色?',list]).set('ai',function(button){
- return get.value(button.link,'raw');
- });
+ if(_status.event.goon) return Math.max(0.1,get.value(button.link,'raw'));
+ return 0;
+ }).set('goon',game.hasPlayer(function(current){
+ return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain');
+ }));
if(!result.moved[1].length) next.set('forced',true);
}
else event.finish();
@@ -1521,7 +1620,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.card=card;
player.chooseTarget(lib.filter.notMe,true,'令一名其他角色获得'+get.translation(card)).set('card',card).set('ai',function(target){
var card=_status.event.card,player=_status.event.player;
- var eff=get.value(card,target)*get.attitude(player,target);
+ var eff=Math.max(0.1,get.value(card,target))*get.attitude(player,target);
if(target.hasSkill('nogain')) eff/=10;
return eff;
});
@@ -8464,11 +8563,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function (){
"step 0"
- target.chooseCard(true).ai=function(card){
+ if(!target.countCards('h')){
+ event.finish();
+ return;
+ }
+ else target.chooseCard(true,'h').set('ai',function(card){
var player=_status.event.player;
if((player.hasShan()||player.hp<3)&&get.color(card)=='black') return 0.5;
return Math.max(1,20-get.value(card));
- };
+ });
"step 1"
target.showCards(result.cards);
event.card2=result.cards[0];
@@ -11515,7 +11618,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rezaiqi:'再起',
rezaiqi_info:'结束阶段开始时,你可以令至多X名角色选择一项:1.摸一张牌,2.令你回复1点体力(X为本回合进入弃牌堆的红色牌数)',
ol_jiangwei:'界姜维',
- re_caiwenji:'界蔡琰',
+ ol_caiwenji:'界蔡琰',
re_baosanniang:'手杀鲍三娘',
retuntian:'屯田',
rebeige:'悲歌',
@@ -11526,6 +11629,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_zhangzhang:'界张昭张纮',
rehunzi:'魂姿',
rehunzi_info:'觉醒技,准备阶段,若你的体力值不大于2,你减1点体力上限,并获得技能〖英姿〗和〖英魂〗。',
+ rezhijian:'直谏',
rezhijian_info:'出牌阶段,你可以将手牌中的一张装备牌置于一名其他角色装备区里(不得替换原装备),然后摸一张牌。当你使用装备牌时,你可以摸一张牌。',
refangquan:'放权',
refangquan_info:'你可跳过你的出牌阶段,若如此做,你本回合的手牌上限为你的体力上限,且回合结束时,你可以弃置一张手牌并令一名其他角色进行一个额外的回合。',
@@ -11819,7 +11923,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinbuyi_info:'一名角色进入濒死状态时,你可展示其一张手牌。若此牌不为基本牌,则其弃置此牌并回复1点体力。若其以此法弃置的牌移动前为其的唯一一张手牌,则其摸一张牌。',
decadexianzhen:'陷阵',
decadexianzhen2:'陷阵',
- decadexianzhen_info:'每回合限一次。出牌阶段,你可以和一名其他角色拼点。若你赢:本回合你无视该角色的防具,且对其使用牌没有次数和距离限制,且本回合使用【杀】或普通锦囊牌选择唯一目标后,可以令其也成为此牌的目标,且本回合对其使用牌造成伤害时,此伤害+1(每种牌名每回合限一次);若你没赢:你本回合内不能使用【杀】,且【杀】不计入手牌上限。',
+ decadexianzhen_info:'每回合限一次。出牌阶段,你可以和一名其他角色拼点。若你赢:本回合你无视该角色的防具,且对其使用牌没有次数和距离限制,且本回合对其使用牌造成伤害时,此伤害+1(每种牌名每回合限一次);若你没赢:你本回合内不能使用【杀】,且【杀】不计入手牌上限。',
decadejinjiu:'禁酒',
decadejinjiu_info:'锁定技。你的【酒】的牌名均视为【杀】且点数视为K;你的回合内,其他角色不能使用【酒】。',
dc_xushu:'界徐庶',
@@ -11832,6 +11936,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_zhanghe:'界张郃',
reqiaobian:'巧变',
reqiaobian_info:'①游戏开始时,你获得两枚“变”。②判定阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。③摸牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后可以获得至多两名其他角色的各一张手牌。④出牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后你可以移动场上的一张牌。⑤弃牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。⑥结束阶段,若你的〖巧变⑥〗记录中不包含你的手牌数,则你获得一枚“变”并记录你的手牌数。',
+ olbeige:'悲歌',
+ olbeige_info:'当有角色受到渠道为【杀】的伤害后,若你有牌,你可令其进行判定。然后你可弃置一张牌,根据判定结果执行以下的一个选项:♥,其回复1点体力;♦,其摸两张牌;♣,伤害来源弃置两张牌️;♠,伤害来源将武将牌翻面。若你弃置的牌与判定结果:点数相同,则你获得你弃置的牌;花色相同,则你获得判定牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',
diff --git a/character/shenhua.js b/character/shenhua.js
index 6fb53fa36..c8abafffe 100755
--- a/character/shenhua.js
+++ b/character/shenhua.js
@@ -7301,7 +7301,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sunce:['re_sunben','re_sunce','sunce'],
zhangzhang:['re_zhangzhang','zhangzhang'],
zuoci:['re_zuoci','zuoci'],
- caiwenji:['re_caiwenji','caiwenji'],
+ caiwenji:['ol_caiwenji','re_caiwenji','caiwenji'],
xuyou:['sp_xuyou','xuyou'],
guanqiujian:['guanqiujian','re_guanqiujian','old_guanqiujian'],
chendao:['chendao','ns_chendao'],
diff --git a/character/sp.js b/character/sp.js
index 3c5d080dd..c71b74d4e 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -11238,6 +11238,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool) player.addToExpansion(result.cards,player,'give').gaintag.add('yishe');
},
group:'yishe_recover',
+ ai:{combo:'bushi'},
subSkill:{
recover:{
audio:'yishe',
@@ -11292,7 +11293,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else event.finish();
'step 3'
if(event.count>0&&player.getExpansions('yishe').length) event.goto(1);
- }
+ },
+ ai:{combo:'yishe'},
},
midao:{
audio:2,
@@ -11352,6 +11354,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
ai:{
+ combo:'yishe',
rejudge:true,
tag:{
rejudge:0.6
@@ -12827,9 +12830,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
qiangwu3:{
mod:{
- aiOrder:function(player,card,num){
- if(card.name=='sha'&&get.number(card)>player.storage.qiangwu) return num+2;
- },
targetInRange:function(card,player){
if(_status.currentPhase==player&&card.name=='sha'&&get.number(card)=_status.event.player.getDamagedHp()) return false;
+ }
+ return true;
+ }
+ }
+ return true;
+ });
+ next.set('processAI',function(list){
+ var cards=list[0][1].slice(0).sort(function(a,b){
+ if(b.name=='sha') return 1;
+ return get.value(b)-get.value(a);
+ });
+ return [cards,cards.splice(0,_status.event.player.getDamagedHp())];
+ });
+ 'step 1'
+ game.broadcastAll('closeDialog',event.videoId);
+ game.addVideo('cardDialog',null,event.videoId);
+ var moved=result.moved;
+ if(moved[0].length>0){
+ for(var i of moved[0]){
+ i.fix();
+ ui.cardPile.appendChild(i);
+ }
+ }
+ if(moved[1].length>0) player.gain(moved[1],'gain2');
+ },
+ ai:{
+ maixie:true,
+ maixie_hp:true,
+ effect:{
+ target:function(card,player,target){
+ if(get.tag(card,'damage')){
+ if(player.hasSkillTag('jueqing',false,target)) return;
+ if(!target.hasFriend()) return;
+ var num=1;
+ if(!player.needsToDiscard()&&target.isDamaged()){
+ num=0.7;
+ }
+ else{
+ num=0.5;
+ }
+ if(target.hp>=4) return [1,num*2];
+ if(target.hp==3) return [1,num*1.5];
+ if(target.hp==2) return [1,num*0.5];
+ }
+ }
+ }
+ }
+ },
+ fensi:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ forced:true,
+ content:function(){
+ 'step 0'
+ if(!game.hasPlayer(function(current){
+ return current!=player&¤t.hp>=player.hp;
+ })){
+ player.damage();
+ event.finish();
+ return;
+ }
+ else{
+ player.chooseTarget(true,'忿肆:对一名体力值不小于你的角色造成1点伤害',function(card,player,target){
+ return target.hp>=player.hp;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ return get.damageEffect(target,player,player);
+ });
+ }
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.line(target,'green');
+ target.damage();
+ }
+ else event.finish();
+ 'step 2'
+ if(target.isIn()&&target.canUse('sha',player,false)) target.useCard({name:'sha',isCard:true},player,false,'noai');
+ },
+ },
+ juetao:{
+ audio:2,
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ limited:true,
+ skillAnimation:true,
+ animationColor:'thunder',
+ filter:function(event,player){
+ return player.hp==1;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt2('juetao'),lib.filter.notMe).set('ai',function(target){
+ return -get.attitude(_status.event.player,target);
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('juetao',target);
+ player.awakenSkill('juetao');
+ }
+ else event.finish();
+ 'step 2'
+ var card=get.bottomCards()[0];
+ game.cardsGotoOrdering(card);
+ player.showCards(card);
+ player.chooseUseTarget(card,true,false,'nodistance').set('filterTarget',function(card,player,target){
+ var evt=_status.event;
+ if(_status.event.name=='chooseTarget') evt=evt.getParent();
+ if(target!=player&&target!=evt.juetao_target) return false;
+ return lib.filter.targetEnabledx(card,player,target);
+ }).set('juetao_target',target);
+ 'step 3'
+ if(result.bool&&target.isIn()) event.goto(2);
+ },
+ },
+ zhushi:{
+ audio:2,
+ usable:1,
+ trigger:{global:'recoverEnd'},
+ direct:true,
+ filter:function(event,player){
+ return player!=event.player&&event.player.group=='wei'&&event.player==_status.currentPhase&&
+ event.player.isIn()&&player.hasZhuSkill('zhushi',event.player);
+ },
+ content:function(){
+ 'step 0'
+ var str=get.translation(player);
+ trigger.player.chooseBool('是否响应'+player+'的主公技【助势】?','令'+get.translation(player)+'摸一张牌').set('goon',get.attitude(trigger.player,player)>0).set('ai',()=>_status.event.goon);
+ 'step 1'
+ if(result.bool){
+ player.logSkill('zhushi');
+ trigger.player.line(player,'thunder');
+ player.draw();
+ }
+ else player.storage.counttrigger.zhushi--;
+ },
+ },
+ //高览
+ xizhen:{
+ audio:2,
+ trigger:{player:'phaseUseBegin'},
+ direct:true,
+ filter:function(event,player){
+ return game.hasPlayer(function(current){
+ return current!=player&&(player.canUse('sha',current,false)||player.canUse('juedou',current,false));
+ })
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('xizhen'),'视为对一名角色使用【杀】或【决斗】',function(card,player,target){
+ return target!=player&&(player.canUse('sha',target,false)||player.canUse('juedou',target,false));
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ var eff1=0,eff2=0;
+ if(player.canUse('sha',target,false)) eff1=get.effect(target,{name:'sha'},player,player);
+ if(player.canUse('juedou',target,false)) eff2=get.effect(target,{name:'juedou'},player,player);
+ var effx=Math.max(eff1,eff2);
+ if(effx<=0) return 0;
+ if(target.isHealthy()) effx*=3;
+ if(get.attitude(player,target)>0) effx*=1.6;
+ return effx;
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('xizhen',target);
+ var list=[];
+ if(player.canUse('sha',target,false)) list.push('sha');
+ if(player.canUse('juedou',target,false)) list.push('juedou');
+ if(list.length==1) event._result={control:list[0]};
+ else player.chooseControl(list).set('prompt','视为对'+get.translation(target)+'使用…').set('ai',function(){
+ var player=_status.event.player,target=_status.event.getParent().target;
+ var eff1=get.effect(target,{name:'sha'},player,player),eff2=get.effect(target,{name:'juedou'},player,player);
+ return eff1>eff2?0:1;
+ });
+ }
+ else event.finish();
+ 'step 2'
+ player.useCard({name:result.control,isCard:true},target,false);
+ 'step 3'
+ if(target.isIn()){
+ player.storage.xizhen_effect=target;
+ player.addTempSkill('xizhen_effect','phaseUseAfter');
+ }
+ },
+ subSkill:{
+ effect:{
+ audio:'xizhen',
+ charlotte:true,
+ onremove:true,
+ trigger:{global:['useCard','respond']},
+ logTarget:function(event,player){
+ return player.storage.xizhen_effect;
+ },
+ forced:true,
+ filter:function(event,player){
+ return Array.isArray(event.respondTo)&&event.respondTo[0]==player&&player.storage.xizhen_effect&&player.storage.xizhen_effect.isIn();
+ },
+ content:function(){
+ var target=player.storage.xizhen_effect;
+ if(target.isHealthy()) player.draw(2);
+ else{
+ target.recover();
+ player.draw();
+ }
+ },
+ mark:'character',
+ intro:{content:'已指定$为目标'},
+ },
+ },
+ },
+ //管宁
+ dunshi:{
+ audio:2,
+ enable:['chooseToUse','chooseToRespond'],
+ usable:1,
+ init:function(player,skill){
+ if(!player.storage[skill]) player.storage[skill]=[['sha','shan','tao','jiu'],0];
+ },
+ hiddenCard:function(player,name){
+ if(player.storage.dunshi&&player.storage.dunshi[0].contains(name)&&!player.getStat('skill').dunshi) return true;
+ return false;
+ },
+ marktext:'席',
+ mark:true,
+ intro:{
+ markcount:function(storage){
+ return storage[1];
+ },
+ content:function(storage,player){
+ if(!storage) return;
+ var str='';
+ if(!storage[0].length){
+ str+='已无可用牌';
+ }
+ else{
+ str+='剩余可用牌:';
+ str+=get.translation(storage[0]);
+ }
+ str+='
“席”标记数量:';
+ str+=(storage[1]);
+ return str;
+ },
+ },
+ filter:function(event,player){
+ if(event.type=='wuxie') return false;
+ var storage=player.storage.dunshi;
+ if(!storage||!storage[0].length) return false;
+ for(var i of storage[0]){
+ var card={name:i,isCard:true};
+ if(event.filterCard(card,player,event)) return true;
+ }
+ return false;
+ },
+ chooseButton:{
+ dialog:function(event,player){
+ var list=[];
+ var storage=player.storage.dunshi;
+ for(var i of storage[0]) list.push(['基本','',i]);
+ return ui.create.dialog('遁世',[list,'vcard'],'hidden');
+ },
+ filter:function(button,player){
+ var evt=_status.event.getParent();
+ return evt.filterCard({name:button.link[2],isCard:true},player,evt);
+ },
+ check:function(button){
+ var card={name:button.link[2]},player=_status.event.player;
+ if(_status.event.getParent().type!='phase') return 1;
+ if(card.name=='jiu') return 0;
+ if(card.name=='sha'&&player.hasSkill('jiu')) return 0;
+ return player.getUseValue(card,null,true);
+ },
+ backup:function(links,player){
+ return {
+ audio:'dunshi',
+ filterCard:function(){return false},
+ popname:true,
+ viewAs:{
+ name:links[0][2],
+ isCard:true,
+ },
+ selectCard:-1,
+ precontent:function(){
+ player.addTempSkill('dunshi_damage');
+ player.storage.dunshi_damage=event.result.card.name;
+ },
+ }
+ },
+ prompt:function(links,player){
+ return '选择【'+get.translation(links[0][2])+'】的目标';
+ }
+ },
+ ai:{
+ respondSha:true,
+ respondShan:true,
+ skillTagFilter:function(player,tag,arg){
+ var storage=player.storage.dunshi;
+ if(!storage||!storage[0].length) return false;
+ if(player.getStat('skill').dunshi) return false;
+ switch(tag){
+ case 'respondSha': return (_status.event.type!='phase'||(player==game.me||player.isUnderControl()||player.isOnline()))&&storage[0].contains('sha');
+ case 'respondShan': return storage[0].contains('shan');
+ case 'save':
+ if(arg==player&&storage[0].contains('jiu')) return true;
+ return storage[0].contains('tao');
+ }
+ },
+ order:2,
+ result:{
+ player:function(player){
+ if(_status.event.type=='dying'){
+ return get.attitude(player,_status.event.dying);
+ }
+ return 1;
+ },
+ },
+ },
+ initList:function(){
+ var list,skills=[];
+ var banned=['xunyi'];
+ if(get.mode()=='guozhan'){
+ list=[];
+ for(var i in lib.characterPack.mode_guozhan) list.push(i);
+ }
+ else if(_status.connectMode) list=get.charactersOL();
+ else{
+ list=[];
+ for(var i in lib.character){
+ if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue;
+ list.push(i);
+ }
+ }
+ for(var i of list){
+ if(i.indexOf('gz_jun')==0) continue;
+ for(var j of lib.character[i][3]){
+ var skill=lib.skill[j];
+ if(!skill||skill.zhuSkill||banned.contains(j)) continue;
+ if(skill.ai&&(skill.ai.combo||skill.ai.notemp||skill.ai.neg)) continue;
+ var info=get.translation(j);
+ for(var ix=0;ix';
+ var next=choiceList.add(str);
+ next.firstChild.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
+ next.firstChild.link=i;
+ for(var j in lib.element.button){
+ next[j]=lib.element.button[j];
+ }
+ choiceList.buttons.add(next.firstChild);
+ }
+ return choiceList;
+ };
+ if(player.isOnline2()){
+ player.send(func,get.translation(trigger.source),event.videoId,get.translation(event.cardname),get.translation(trigger.player));
+ }
+ event.dialog=func(get.translation(trigger.source),event.videoId,get.translation(event.cardname),get.translation(trigger.player));
+ if(player!=game.me||_status.auto){
+ event.dialog.style.display='none';
+ }
+ var next=player.chooseButton();
+ next.set('dialog',event.videoId);
+ next.set('forced',true);
+ next.set('selectButton',2);
+ next.set('ai',function(button){
+ var player=_status.event.player;
+ switch(button.link){
+ case 0:
+ if(get.attitude(player,_status.currentPhase)>0) return 3;
+ return 0;
+ case 1:
+ return 1;
+ case 2:
+ var num=player.storage.dunshi[1];
+ for(var i of ui.selected.buttons){
+ if(i.link==1) num++;
+ }
+ if(num>0&&player.isDamaged()) return 2;
+ return 0;
+ }
+ });
+ 'step 1'
+ if(player.isOnline2()){
+ player.send('closeDialog',event.videoId);
+ }
+ event.dialog.close();
+ event.links=result.links.sort();
+ for(var i of event.links){
+ game.log(player,'选择了','#g【遁世】','的','#y选项'+get.cnNumber(i+1,true));
+ }
+ if(event.links.contains(0)){
+ trigger.cancel();
+ if(!_status.dunshi_list) lib.skill.dunshi.initList();
+ var list=_status.dunshi_list.filter(function(i){
+ return !target.hasSkill(i,null,null,false);
+ }).randomGets(3);
+ if(list.length==0) event.goto(3);
+ else{
+ event.videoId=lib.status.videoId++;
+ var func=function(skills,id){
+ var dialog=ui.create.dialog('forcebutton');
+ dialog.videoId=id;
+ dialog.add('令'+get.translation(target)+'获得一个技能');
+ for(var i=0;i