diff --git a/audio/die/db_wenyang.mp3 b/audio/die/db_wenyang.mp3
new file mode 100644
index 000000000..74a194676
Binary files /dev/null and b/audio/die/db_wenyang.mp3 differ
diff --git a/audio/die/gz_panjun.mp3 b/audio/die/gz_panjun.mp3
new file mode 100644
index 000000000..e6f72ea6e
Binary files /dev/null and b/audio/die/gz_panjun.mp3 differ
diff --git a/audio/die/gz_pengyang.mp3 b/audio/die/gz_pengyang.mp3
new file mode 100644
index 000000000..45b46bea9
Binary files /dev/null and b/audio/die/gz_pengyang.mp3 differ
diff --git a/audio/die/gz_wenqin.mp3 b/audio/die/gz_wenqin.mp3
new file mode 100644
index 000000000..becc9b901
Binary files /dev/null and b/audio/die/gz_wenqin.mp3 differ
diff --git a/audio/die/gz_xf_sufei.mp3 b/audio/die/gz_xf_sufei.mp3
new file mode 100644
index 000000000..c7bd31f6b
Binary files /dev/null and b/audio/die/gz_xf_sufei.mp3 differ
diff --git a/audio/die/gz_xiahouba.mp3 b/audio/die/gz_xiahouba.mp3
new file mode 100644
index 000000000..2c0a991bd
Binary files /dev/null and b/audio/die/gz_xiahouba.mp3 differ
diff --git a/audio/die/gz_xuyou.mp3 b/audio/die/gz_xuyou.mp3
new file mode 100644
index 000000000..b830e273c
Binary files /dev/null and b/audio/die/gz_xuyou.mp3 differ
diff --git a/audio/die/gz_zhonghui.mp3 b/audio/die/gz_zhonghui.mp3
new file mode 100644
index 000000000..b40818b6b
Binary files /dev/null and b/audio/die/gz_zhonghui.mp3 differ
diff --git a/audio/die/gz_zhuling.mp3 b/audio/die/gz_zhuling.mp3
new file mode 100644
index 000000000..dbb1f322d
Binary files /dev/null and b/audio/die/gz_zhuling.mp3 differ
diff --git a/audio/die/qiaozhou.mp3 b/audio/die/qiaozhou.mp3
new file mode 100644
index 000000000..da7f84903
Binary files /dev/null and b/audio/die/qiaozhou.mp3 differ
diff --git a/audio/die/shen_xunyu.mp3 b/audio/die/shen_xunyu.mp3
new file mode 100644
index 000000000..48c23b913
Binary files /dev/null and b/audio/die/shen_xunyu.mp3 differ
diff --git a/audio/die/xin_sunluban.mp3 b/audio/die/xin_sunluban.mp3
new file mode 100644
index 000000000..1688799ef
Binary files /dev/null and b/audio/die/xin_sunluban.mp3 differ
diff --git a/audio/skill/daming1.mp3 b/audio/skill/daming1.mp3
new file mode 100644
index 000000000..6a2dcfc76
Binary files /dev/null and b/audio/skill/daming1.mp3 differ
diff --git a/audio/skill/daming2.mp3 b/audio/skill/daming2.mp3
new file mode 100644
index 000000000..95e872b4c
Binary files /dev/null and b/audio/skill/daming2.mp3 differ
diff --git a/audio/skill/dbchongjian1.mp3 b/audio/skill/dbchongjian1.mp3
new file mode 100644
index 000000000..4a4659866
Binary files /dev/null and b/audio/skill/dbchongjian1.mp3 differ
diff --git a/audio/skill/dbchongjian2.mp3 b/audio/skill/dbchongjian2.mp3
new file mode 100644
index 000000000..880501b9c
Binary files /dev/null and b/audio/skill/dbchongjian2.mp3 differ
diff --git a/audio/skill/dbchoujue1.mp3 b/audio/skill/dbchoujue1.mp3
new file mode 100644
index 000000000..9c3dc3c3a
Binary files /dev/null and b/audio/skill/dbchoujue1.mp3 differ
diff --git a/audio/skill/dbchoujue2.mp3 b/audio/skill/dbchoujue2.mp3
new file mode 100644
index 000000000..fd6845b6c
Binary files /dev/null and b/audio/skill/dbchoujue2.mp3 differ
diff --git a/audio/skill/dbquedi1.mp3 b/audio/skill/dbquedi1.mp3
new file mode 100644
index 000000000..4339b08e2
Binary files /dev/null and b/audio/skill/dbquedi1.mp3 differ
diff --git a/audio/skill/dbquedi2.mp3 b/audio/skill/dbquedi2.mp3
new file mode 100644
index 000000000..cb4a92edc
Binary files /dev/null and b/audio/skill/dbquedi2.mp3 differ
diff --git a/audio/skill/dbzhuifeng1.mp3 b/audio/skill/dbzhuifeng1.mp3
new file mode 100644
index 000000000..218695f13
Binary files /dev/null and b/audio/skill/dbzhuifeng1.mp3 differ
diff --git a/audio/skill/dbzhuifeng2.mp3 b/audio/skill/dbzhuifeng2.mp3
new file mode 100644
index 000000000..d87174dc2
Binary files /dev/null and b/audio/skill/dbzhuifeng2.mp3 differ
diff --git a/audio/skill/dinghan1.mp3 b/audio/skill/dinghan1.mp3
new file mode 100644
index 000000000..25a69b887
Binary files /dev/null and b/audio/skill/dinghan1.mp3 differ
diff --git a/audio/skill/dinghan2.mp3 b/audio/skill/dinghan2.mp3
new file mode 100644
index 000000000..d9b6dcf7e
Binary files /dev/null and b/audio/skill/dinghan2.mp3 differ
diff --git a/audio/skill/gzbaolie1.mp3 b/audio/skill/gzbaolie1.mp3
new file mode 100644
index 000000000..b7c10cf79
Binary files /dev/null and b/audio/skill/gzbaolie1.mp3 differ
diff --git a/audio/skill/gzbaolie2.mp3 b/audio/skill/gzbaolie2.mp3
new file mode 100644
index 000000000..5ce498e61
Binary files /dev/null and b/audio/skill/gzbaolie2.mp3 differ
diff --git a/audio/skill/gzchenglve1.mp3 b/audio/skill/gzchenglve1.mp3
new file mode 100644
index 000000000..61d5af152
Binary files /dev/null and b/audio/skill/gzchenglve1.mp3 differ
diff --git a/audio/skill/gzchenglve2.mp3 b/audio/skill/gzchenglve2.mp3
new file mode 100644
index 000000000..d58120add
Binary files /dev/null and b/audio/skill/gzchenglve2.mp3 differ
diff --git a/audio/skill/gzcongcha1.mp3 b/audio/skill/gzcongcha1.mp3
new file mode 100644
index 000000000..a968d17bc
Binary files /dev/null and b/audio/skill/gzcongcha1.mp3 differ
diff --git a/audio/skill/gzcongcha2.mp3 b/audio/skill/gzcongcha2.mp3
new file mode 100644
index 000000000..d3112ee21
Binary files /dev/null and b/audio/skill/gzcongcha2.mp3 differ
diff --git a/audio/skill/gzfangyuan1.mp3 b/audio/skill/gzfangyuan1.mp3
new file mode 100644
index 000000000..32c9f0e72
Binary files /dev/null and b/audio/skill/gzfangyuan1.mp3 differ
diff --git a/audio/skill/gzfangyuan2.mp3 b/audio/skill/gzfangyuan2.mp3
new file mode 100644
index 000000000..78d0bd99d
Binary files /dev/null and b/audio/skill/gzfangyuan2.mp3 differ
diff --git a/audio/skill/gzjinfa1.mp3 b/audio/skill/gzjinfa1.mp3
new file mode 100644
index 000000000..e2336fffe
Binary files /dev/null and b/audio/skill/gzjinfa1.mp3 differ
diff --git a/audio/skill/gzjinfa2.mp3 b/audio/skill/gzjinfa2.mp3
new file mode 100644
index 000000000..50610edb4
Binary files /dev/null and b/audio/skill/gzjinfa2.mp3 differ
diff --git a/audio/skill/gzjuejue1.mp3 b/audio/skill/gzjuejue1.mp3
new file mode 100644
index 000000000..2049fbca1
Binary files /dev/null and b/audio/skill/gzjuejue1.mp3 differ
diff --git a/audio/skill/gzjuejue2.mp3 b/audio/skill/gzjuejue2.mp3
new file mode 100644
index 000000000..70f1d5f70
Binary files /dev/null and b/audio/skill/gzjuejue2.mp3 differ
diff --git a/audio/skill/gzlianpian1.mp3 b/audio/skill/gzlianpian1.mp3
new file mode 100644
index 000000000..fe1c2a9db
Binary files /dev/null and b/audio/skill/gzlianpian1.mp3 differ
diff --git a/audio/skill/gzlianpian2.mp3 b/audio/skill/gzlianpian2.mp3
new file mode 100644
index 000000000..acfdf3787
Binary files /dev/null and b/audio/skill/gzlianpian2.mp3 differ
diff --git a/audio/skill/gzpaiyi1.mp3 b/audio/skill/gzpaiyi1.mp3
new file mode 100644
index 000000000..6f7a9cf26
Binary files /dev/null and b/audio/skill/gzpaiyi1.mp3 differ
diff --git a/audio/skill/gzpaiyi2.mp3 b/audio/skill/gzpaiyi2.mp3
new file mode 100644
index 000000000..7f3fc7608
Binary files /dev/null and b/audio/skill/gzpaiyi2.mp3 differ
diff --git a/audio/skill/gzquanji1.mp3 b/audio/skill/gzquanji1.mp3
new file mode 100644
index 000000000..7c5c91a63
Binary files /dev/null and b/audio/skill/gzquanji1.mp3 differ
diff --git a/audio/skill/gzquanji2.mp3 b/audio/skill/gzquanji2.mp3
new file mode 100644
index 000000000..973087ee4
Binary files /dev/null and b/audio/skill/gzquanji2.mp3 differ
diff --git a/audio/skill/gzshicai1.mp3 b/audio/skill/gzshicai1.mp3
new file mode 100644
index 000000000..b47429760
Binary files /dev/null and b/audio/skill/gzshicai1.mp3 differ
diff --git a/audio/skill/gzshicai2.mp3 b/audio/skill/gzshicai2.mp3
new file mode 100644
index 000000000..4527a652a
Binary files /dev/null and b/audio/skill/gzshicai2.mp3 differ
diff --git a/audio/skill/lingce1.mp3 b/audio/skill/lingce1.mp3
new file mode 100644
index 000000000..ec1837126
Binary files /dev/null and b/audio/skill/lingce1.mp3 differ
diff --git a/audio/skill/lingce2.mp3 b/audio/skill/lingce2.mp3
new file mode 100644
index 000000000..8c054cef3
Binary files /dev/null and b/audio/skill/lingce2.mp3 differ
diff --git a/audio/skill/shuchen1.mp3 b/audio/skill/shuchen1.mp3
new file mode 100644
index 000000000..24af92cbe
Binary files /dev/null and b/audio/skill/shuchen1.mp3 differ
diff --git a/audio/skill/shuchen2.mp3 b/audio/skill/shuchen2.mp3
new file mode 100644
index 000000000..38c50f6b2
Binary files /dev/null and b/audio/skill/shuchen2.mp3 differ
diff --git a/audio/skill/tianzuo1.mp3 b/audio/skill/tianzuo1.mp3
new file mode 100644
index 000000000..9116e802d
Binary files /dev/null and b/audio/skill/tianzuo1.mp3 differ
diff --git a/audio/skill/tianzuo2.mp3 b/audio/skill/tianzuo2.mp3
new file mode 100644
index 000000000..a3f85d806
Binary files /dev/null and b/audio/skill/tianzuo2.mp3 differ
diff --git a/audio/skill/xiaoni1.mp3 b/audio/skill/xiaoni1.mp3
new file mode 100644
index 000000000..84886939f
Binary files /dev/null and b/audio/skill/xiaoni1.mp3 differ
diff --git a/audio/skill/xiaoni2.mp3 b/audio/skill/xiaoni2.mp3
new file mode 100644
index 000000000..6f319ef02
Binary files /dev/null and b/audio/skill/xiaoni2.mp3 differ
diff --git a/audio/skill/xinfu_gongqing_gz_panjun1.mp3 b/audio/skill/xinfu_gongqing_gz_panjun1.mp3
new file mode 100644
index 000000000..742a117c3
Binary files /dev/null and b/audio/skill/xinfu_gongqing_gz_panjun1.mp3 differ
diff --git a/audio/skill/xinfu_gongqing_gz_panjun2.mp3 b/audio/skill/xinfu_gongqing_gz_panjun2.mp3
new file mode 100644
index 000000000..b45bd678f
Binary files /dev/null and b/audio/skill/xinfu_gongqing_gz_panjun2.mp3 differ
diff --git a/audio/skill/xingbu1.mp3 b/audio/skill/xingbu1.mp3
new file mode 100644
index 000000000..9db55486a
Binary files /dev/null and b/audio/skill/xingbu1.mp3 differ
diff --git a/audio/skill/xingbu2.mp3 b/audio/skill/xingbu2.mp3
new file mode 100644
index 000000000..e6320bb1c
Binary files /dev/null and b/audio/skill/xingbu2.mp3 differ
diff --git a/audio/skill/xinjiaojin1.mp3 b/audio/skill/xinjiaojin1.mp3
new file mode 100644
index 000000000..148e916a5
Binary files /dev/null and b/audio/skill/xinjiaojin1.mp3 differ
diff --git a/audio/skill/xinjiaojin2.mp3 b/audio/skill/xinjiaojin2.mp3
new file mode 100644
index 000000000..e2a84741c
Binary files /dev/null and b/audio/skill/xinjiaojin2.mp3 differ
diff --git a/audio/skill/xinzenhui1.mp3 b/audio/skill/xinzenhui1.mp3
new file mode 100644
index 000000000..51bb1d44f
Binary files /dev/null and b/audio/skill/xinzenhui1.mp3 differ
diff --git a/audio/skill/xinzenhui2.mp3 b/audio/skill/xinzenhui2.mp3
new file mode 100644
index 000000000..a7473d7db
Binary files /dev/null and b/audio/skill/xinzenhui2.mp3 differ
diff --git a/audio/skill/yuanqing1.mp3 b/audio/skill/yuanqing1.mp3
new file mode 100644
index 000000000..de1e9d595
Binary files /dev/null and b/audio/skill/yuanqing1.mp3 differ
diff --git a/audio/skill/yuanqing2.mp3 b/audio/skill/yuanqing2.mp3
new file mode 100644
index 000000000..a076ec412
Binary files /dev/null and b/audio/skill/yuanqing2.mp3 differ
diff --git a/audio/skill/zhiming1.mp3 b/audio/skill/zhiming1.mp3
new file mode 100644
index 000000000..861aac62c
Binary files /dev/null and b/audio/skill/zhiming1.mp3 differ
diff --git a/audio/skill/zhiming2.mp3 b/audio/skill/zhiming2.mp3
new file mode 100644
index 000000000..99d4e081a
Binary files /dev/null and b/audio/skill/zhiming2.mp3 differ
diff --git a/card/standard.js b/card/standard.js
index 0ca6ef34a..22ac0d326 100644
--- a/card/standard.js
+++ b/card/standard.js
@@ -1242,16 +1242,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})>0)?-1.5:1.5;
- var js=target.getCards('j');
- if(js.length){
- var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
- //if(jj.name=='shunshou') return 3;
- if(js.length==1&&get.effect(target,jj,target,player)>=0){
- return -1.5;
- }
- return 3;
- }
- return -1.5;
+ return (target.countCards('ej',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<=0;
+ var cardj=card.viewAs?{name:card.viewAs}:card;
+ return get.effect(target,cardj,target,player)<0;
+ })>0)?1.5:-1.5;
},
player:function(player,target){
if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
@@ -1260,17 +1255,90 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 0;
}
if(get.attitude(player,target)>1){
- var js=target.getCards('j');
- if(js.length){
- var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
- //if(jj.name=='shunshou') return 1;
- if(js.length==1&&get.effect(target,jj,target,player)>=0){
- return 0;
- }
- return 1;
- }
+ return (target.countCards('ej',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<=0;
+ var cardj=card.viewAs?{name:card.viewAs}:card;
+ return get.effect(target,cardj,target,player)<0;
+ })>0)?1.5:-1.5;
+ }
+ return 1;
+ }
+ },
+ tag:{
+ loseCard:1,
+ gain:1,
+ }
+ }
+ },
+ shunshou_copy:{
+ ai:{
+ basic:{
+ order:7.5,
+ useful:4,
+ value:9
+ },
+ result:{
+ target:function(player,target){
+ if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
+ return get.value(card,target)>0&&card!=target.getEquip('jinhe');
+ })>0)?-1.5:1.5;
+ return (target.countCards('ej',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<=0;
+ var cardj=card.viewAs?{name:card.viewAs}:card;
+ return get.effect(target,cardj,target,player)<0;
+ })>0)?1.5:-1.5;
+ },
+ player:function(player,target){
+ if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
+ return get.value(card,target)>0&&card!=target.getEquip('jinhe');
+ })){
return 0;
}
+ if(get.attitude(player,target)>1){
+ return (target.countCards('ej',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<=0;
+ var cardj=card.viewAs?{name:card.viewAs}:card;
+ return get.effect(target,cardj,target,player)<0;
+ })>0)?1.5:-1.5;
+ }
+ return 1;
+ }
+ },
+ tag:{
+ loseCard:1,
+ gain:1,
+ }
+ }
+ },
+ shunshou_copy2:{
+ ai:{
+ basic:{
+ order:7.5,
+ useful:4,
+ value:9
+ },
+ result:{
+ target:function(player,target){
+ if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
+ return get.value(card,target)>0&&card!=target.getEquip('jinhe');
+ })>0)?-1.5:1.5;
+ return (target.countCards('e',function(card){
+ return get.value(card,target)<=0;
+ })>0)?1.5:-1.5;
+ },
+ player:function(player,target){
+ if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
+ return get.value(card,target)>0&&card!=target.getEquip('jinhe');
+ })){
+ return 0;
+ }
+ if(get.attitude(player,target)>1){
+ return (target.countCards('ej',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<=0;
+ var cardj=card.viewAs?{name:card.viewAs}:card;
+ return get.effect(target,cardj,target,player)<0;
+ })>0)?1.5:-1.5;
+ }
return 1;
}
},
@@ -1335,19 +1403,95 @@ game.import('card',function(lib,game,ui,get,ai,_status){
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
- var js=target.getCards('j');
- if(js.length){
- var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
- if(jj.name=='guohe'||js.length>1||get.effect(target,jj,target,player)<0){
- return 3;
- }
- }
+ if(target.countCards('j',function(card){
+ var cardj=card.viewAs?{name:card.viewAs}:card;
+ return get.effect(target,cardj,target,player)<0;
+ })>0) return 3;
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
- if(target.hp==2) return 0.01;
- return 0;
}
+ if(target.countCards('e',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<0;
+ })>0) return 1;
+ }
+ var es=target.getCards('e');
+ var noe=(es.length==0||target.hasSkillTag('noe'));
+ var noe2=(es.filter(function(esx){
+ return get.value(esx,target)>0;
+ }).length==0);
+ var noh=(nh==0||target.hasSkillTag('noh'));
+ if(noh&&(noe||noe2)) return 0;
+ if(att<=0&&!target.countCards('he')) return 1.5;
+ return -1.5;
+ },
+ },
+ tag:{
+ loseCard:1,
+ discard:1
+ }
+ }
+ },
+ guohe_copy:{
+ ai:{
+ basic:{
+ order:9,
+ useful:5,
+ value:5,
+ },
+ result:{
+ target:function(player,target){
+ var att=get.attitude(player,target);
+ var nh=target.countCards('h');
+ if(att>0){
+ if(target.countCards('j',function(card){
+ var cardj=card.viewAs?{name:card.viewAs}:card;
+ return get.effect(target,cardj,target,player)<0;
+ })>0) return 3;
+ if(target.getEquip('baiyin')&&target.isDamaged()&&
+ get.recoverEffect(target,player,player)>0){
+ if(target.hp==1&&!target.hujia) return 1.6;
+ }
+ if(target.countCards('e',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<0;
+ })>0) return 1;
+ }
+ var es=target.getCards('e');
+ var noe=(es.length==0||target.hasSkillTag('noe'));
+ var noe2=(es.filter(function(esx){
+ return get.value(esx,target)>0;
+ }).length==0);
+ var noh=(nh==0||target.hasSkillTag('noh'));
+ if(noh&&(noe||noe2)) return 0;
+ if(att<=0&&!target.countCards('he')) return 1.5;
+ return -1.5;
+ },
+ },
+ tag:{
+ loseCard:1,
+ discard:1
+ }
+ }
+ },
+ guohe_copy2:{
+ ai:{
+ basic:{
+ order:9,
+ useful:5,
+ value:5,
+ },
+ result:{
+ target:function(player,target){
+ var att=get.attitude(player,target);
+ var nh=target.countCards('h');
+ if(att>0){
+ if(target.getEquip('baiyin')&&target.isDamaged()&&
+ get.recoverEffect(target,player,player)>0){
+ if(target.hp==1&&!target.hujia) return 1.6;
+ }
+ if(target.countCards('e',function(card){
+ if(get.position(card)=='e') return get.value(card,target)<0;
+ })>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
@@ -2631,7 +2775,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
juedou_info:'出牌阶段,对一名其他角色使用。由其开始,其与你轮流打出一张【杀】,直到其中一方未打出【杀】为止。未打出【杀】的一方受到另一方对其造成的1点伤害。',
shunshou_info:'出牌阶段,对距离为1且区域里有牌的一名其他角色使用。你获得其区域里的一张牌。',
guohe_info:'出牌阶段,对区域里有牌的一名其他角色使用。你弃置其区域里的一张牌。',
- jiedao_info:'出牌阶段,对装备区里有武器牌且有使用【杀】的目标的一名其他角色使用。令其对你指定的一名角色使用一张【杀】,否则将其装备区里的武器牌交给你。
这是一种十分含蓄的计谋。',
+ jiedao_info:'出牌阶段,对装备区里有武器牌且有使用【杀】的目标的一名其他角色使用。令其对你指定的一名角色使用一张【杀】,否则将其装备区里的武器牌交给你。',
+ jiedao_append:'这是一种十分含蓄的计谋。',
wuxie_info:'一张锦囊牌生效前,对此牌使用。抵消此牌对一名角色产生的效果,或抵消另一张【无懈可击】产生的效果。',
lebu_info:'出牌阶段,对一名其他角色使用。若判定结果不为红桃,跳过其出牌阶段。',
shandian_info:'出牌阶段,对自己使用。若判定结果为黑桃2~9,则目标角色受到3点雷电伤害。若判定不为黑桃2~9,将之移动到下家的判定区里。',
diff --git a/character/diy.js b/character/diy.js
index 2d2e4a932..68e323f14 100755
--- a/character/diy.js
+++ b/character/diy.js
@@ -340,6 +340,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:true,
filterTarget:true,
selectTarget:[1,3],
+ derivation:'key_kano',
content:function(){
'step 0'
target.draw();
diff --git a/character/extra.js b/character/extra.js
index 3a565f791..c1f19ad50 100755
--- a/character/extra.js
+++ b/character/extra.js
@@ -14,7 +14,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
extra_lei:['shen_ganning','shen_zhangliao'],
extra_key:['key_kagari','key_shiki','key_hina'],
extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji'],
- extra_mobilezhi:['shen_guojia'],
+ extra_mobilezhi:['shen_guojia','shen_xunyu'],
extra_mobilexin:['shen_taishici'],
extra_offline:['shen_diaochan','boss_zhaoyun'],
},
@@ -24,6 +24,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']],
key_hina:['female','shen',3,['hina_shenxian','hina_mashu','hina_tieji'],['key','hiddenSkill']],
+ shen_xunyu:['male','shen',3,['tianzuo','lingce','dinghan'],['wei']],
shen_taishici:['male','shen',4,['dulie','tspowei','dangmo'],['wu']],
shen_guojia:['male','shen',3,['reshuishi','stianyi','resghuishi'],['wei']],
shen_diaochan:['female','shen',3,['meihun','huoxin'],['qun']],
@@ -224,33 +225,157 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.turnOver();
},
},
+ tianzuo:{
+ audio:2,
+ trigger:{
+ global:'gameStart',
+ player:'enterGame',
+ },
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ return !lib.inpile.contains('qizhengxiangsheng');
+ },
+ content:function(){
+ game.addGlobalSkill('tianzuo_global');
+ for(var i=2;i<10;i++){
+ var card=game.createCard2('qizhengxiangsheng',i%2?'club':'spade',i);
+ ui.cardPile.insertBefore(card,ui.cardPile.childNodes[get.rand(0,ui.cardPile.childNodes.length)]);
+ }
+ game.broadcastAll(function(){lib.inpile.add('qizhengxiangsheng')});
+ game.updateRoundNumber();
+ },
+ group:'tianzuo_rewrite',
+ subSkill:{
+ global:{
+ trigger:{player:'useCardToPlayered'},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event.card.name=='qizhengxiangsheng';
+ },
+ content:function(){
+ 'step 0'
+ var target=trigger.target;
+ event.target=target;
+ player.chooseControl('奇兵','正兵').set('prompt','请选择'+get.translation(target)+'的标记').set('choice',function(){
+ var e1=1.5*get.sgn(get.damageEffect(target,player,target));
+ var e2=0;
+ if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
+ var es=target.getGainableCards(player,'e');
+ if(es.length) e2=Math.min(e2,function(){
+ var max=0;
+ for(var i of es) max=Math.max(max,get.value(i,target))
+ return -max/4;
+ }());
+ if(Math.abs(e1-e2)<=0.3) return Math.random()<0.5?'奇兵':'正兵';
+ if(e10) player.viewHandcards(target);
+ player.chooseControl('奇兵','正兵').set('prompt','请选择'+get.translation(target)+'的标记').set('choice',function(){
+ var shas=target.getCards('h','sha'),shans=target.getCards('h','shan');
+ var e1=1.5*get.sgn(get.damageEffect(target,player,target));
+ var e2=0;
+ if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
+ var es=target.getGainableCards(player,'e');
+ if(es.length) e2=Math.min(e2,function(){
+ var max=0;
+ for(var i of es) max=Math.max(max,get.value(i,target))
+ return -max/4;
+ }());
+ if(get.attitude(player,target)>0){
+ if(shas.length>=Math.max(1,shans.length)) return '奇兵';
+ if(shans.length>shas.length) return '正兵';
+ return e1>e2?'奇兵':'正兵';
+ }
+ if(shas.length) e1=-0.5;
+ if(shans.length) e2=-0.7;
+ if(Math.abs(e1-e2)<=0.3) return Math.random()<0.5?'奇兵':'正兵';
+ var rand=Math.random();
+ if(e10;
+ },
+ },
+ },
+ },
+ lingce:{
+ audio:2,
+ trigger:{global:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ return event.card.name=='qizhengxiangsheng'||get.zhinangs().contains(event.card.name);
+ },
+ content:function(){player.draw()},
+ },
+ dinghan:{
+ audio:2,
+ trigger:{target:'useCardToTarget'},
+ forced:true,
+ filter:function(event,player){
+ return get.tag(event.card,'damage')>0&&!player.getStorage('dinghan_clear').contains(event.card.name);
+ },
+ content:function(){
+ player.markAuto('dinghan_clear',[trigger.card.name]);
+ player.addTempSkill('dinghan_clear','roundStart');
+ trigger.targets.remove(player);
+ trigger.getParent().triggeredTargets2.remove(player);
+ trigger.untrigger();
+ },
+ subSkill:{
+ clear:{onremove:true},
+ }
+ },
dulie:{
audio:2,
trigger:{
global:'gameDrawAfter',
player:'enterGame',
},
- locked:true,
- direct:true,
+ forced:true,
filter:function(event,player){
- return game.players.length>1&&!game.hasPlayer(function(current){
- return current.hasMark('dulie');
+ return game.players.length>1&&game.hasPlayer(function(current){
+ return current!=player&&!current.hasMark('dulie');
+ });
+ },
+ logTarget:function(event,player){
+ return game.filterPlayer(function(current){
+ return current!=player&&!current.hasMark('dulie');
});
},
content:function(){
'step 0'
- var num=Math.floor(game.players.length/2);
- player.chooseTarget(num,true,'请选择【笃烈】的目标','令'+get.cnNumber(num)+'名角色获得“围”标记',lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player;
- return Math.max(1,get.attitude(player,target))/Math.max(1,get.distance(player,target));
- });
- 'step 1'
- if(result.bool){
- var targets=result.targets.sortBySeat();
- player.logSkill('dulie',targets);
- for(var i of targets) i.addMark('dulie',1);
- game.delayx();
- }
+ var targets=game.filterPlayer(function(current){
+ return current!=player&&!current.hasMark('dulie');
+ }).sortBySeat();
+ for(var i of targets) i.addMark('dulie',1);
+ game.delayx();
},
mod:{
targetInRange:function(card,player,target){
@@ -349,10 +474,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
game.log(player,'使命失败');
player.awakenSkill('tspowei');
+ if(player.hp<1) player.recover(1-player.hp);
+ 'step 1'
var num=player.countCards('e');
if(num>0) player.chooseToDiscard('e',true,num);
- 'step 1'
- if(player.hp<1) player.recover(1-player.hp);
},
},
},
@@ -373,6 +498,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
player.draw();
+ player.addTempSkill('shenzhu_less');
+ player.addMark('shenzhu_less',1,false);
+ },
+ subSkill:{
+ less:{
+ onremove:true,
+ charlotte:true,
+ intro:{content:'手牌上限-#'},
+ mod:{
+ maxHandcard:function(player,num){
+ return num-player.countMark('shenzhu_less');
+ },
+ },
+ },
},
},
dangmo:{
@@ -2085,12 +2224,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
"step 0"
player.chooseCard('是否弃置一枚“忍”,并发动〖鬼才〗?','he',function(card){
- var player=_status.event.player;
- var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
- if(mod2!='unchanged') return mod2;
- var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
- if(mod!='unchanged') return mod;
- return true;
+ var player=_status.event.player;
+ var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
+ if(mod2!='unchanged') return mod2;
+ var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
+ if(mod!='unchanged') return mod;
+ return true;
}).ai=function(card){
var trigger=_status.event.parent._trigger;
var player=_status.event.player;
@@ -2310,10 +2449,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
trigger.directHit.addArray(game.players);
if(trigger.addCount!==false){
- trigger.addCount=false;
- if(player.stat[player.stat.length-1].card.sha>0){
- player.stat[player.stat.length-1].card.sha--;
- }
+ trigger.addCount=false;
+ if(player.stat[player.stat.length-1].card.sha>0){
+ player.stat[player.stat.length-1].card.sha--;
+ }
}
},
ai:{
@@ -2357,7 +2496,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sub:true,
},
},
- group:["wuhun2","wuhun4","wuhun5"],
+ group:["wuhun2","wuhun4","wuhun5"],
},
wuhun2:{
trigger:{
@@ -3119,18 +3258,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
- var temp=get.order({name:name,nature:name=='sha'?'fire':null});
- if(temp>max){
- max=temp;
- name2=map[name];
- }
- }
- }
- if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
- return 0;
+ if(player.countCards('hes',function(card){
+ return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
+ })>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
+ var temp=get.order({name:name,nature:name=='sha'?'fire':null});
+ if(temp>max){
+ max=temp;
+ name2=map[name];
+ }
+ }
+ }
+ if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
+ return 0;
}
return 1;
},
@@ -3195,15 +3334,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
- var temp=get.order({name:name,nature:name=='sha'?'fire':null});
- if(temp>max) max=temp;
- }
- }
- max/=1.1;
- return max;
+ if(player.countCards('hes',function(card){
+ return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
+ })>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
+ var temp=get.order({name:name,nature:name=='sha'?'fire':null});
+ if(temp>max) max=temp;
+ }
+ }
+ max/=1.1;
+ return max;
}
return 2;
},
@@ -3274,18 +3413,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
- var temp=get.order({name:name,nature:name=='sha'?'fire':null});
- if(temp>max){
- max=temp;
- name2=map[name];
- }
- }
- }
- if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
- return 0;
+ if(player.countCards('hs',function(card){
+ return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
+ })>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
+ var temp=get.order({name:name,nature:name=='sha'?'fire':null});
+ if(temp>max){
+ max=temp;
+ name2=map[name];
+ }
+ }
+ }
+ if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
+ return 0;
}
return 1;
},
@@ -3327,15 +3466,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
- var temp=get.order({name:name,nature:name=='sha'?'fire':null});
- if(temp>max) max=temp;
- }
- }
- max/=1.1;
- return max;
+ if(player.countCards('hs',function(card){
+ return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
+ })>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
+ var temp=get.order({name:name,nature:name=='sha'?'fire':null});
+ if(temp>max) max=temp;
+ }
+ }
+ max/=1.1;
+ return max;
}
return 2;
},
@@ -4170,6 +4309,104 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
card:{
+ qizhengxiangsheng:{
+ enable:true,
+ type:'trick',
+ fullskin:true,
+ derivation:'shen_xunyu',
+ filterTarget:lib.filter.notMe,
+ content:function(){
+ 'step 0'
+ if(!event.qizheng_name){
+ if(player.isAlive()) player.chooseControl('奇兵','正兵').set('prompt','请选择'+get.translation(target)+'的标记').set('choice',function(){
+ var e1=1.5*get.sgn(get.damageEffect(target,player,target));
+ var e2=0;
+ if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
+ var es=target.getGainableCards(player,'e');
+ if(es.length) e2=Math.min(e2,function(){
+ var max=0;
+ for(var i of es) max=Math.max(max,get.value(i,target))
+ return -max/4;
+ }());
+ if(Math.abs(e1-e2)<=0.3) return Math.random()<0.5?'奇兵':'正兵';
+ if(e10.5) return 0;
+ return 1+Math.random();
+ }
+ if(get.name(card)==_status.event.choice) return get.order(card);
+ return 0;
+ }).set('choice',function(){
+ if(target.hasSkillTag('useShan')) return 'shan';
+ if(typeof event.qizheng_aibuff=='boolean'){
+ var shas=target.getCards('h','sha'),shans=target.getCards('h','shan');
+ if(event.qizheng_aibuff){
+ if(shas.length>=Math.max(1,shans.length)) return 'shan';
+ if(shans.length>shas.length) return 'sha';
+ return false;
+ }
+ if(!shas.length||!shans.length) return false;
+ }
+ var e1=1.5*get.sgn(get.damageEffect(target,player,target));
+ var e2=0;
+ if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
+ var es=target.getGainableCards(player,'e');
+ if(es.length) e2=Math.min(e2,function(){
+ var max=0;
+ for(var i of es) max=Math.max(max,get.value(i,target))
+ return -max/4;
+ }());
+ if(e1-e2>=0.3) return 'shan';
+ if(e2-e1>=0.3) return 'sha';
+ return 'all';
+ }());
+ 'step 2'
+ var name=result.bool?result.card.name:null,require=event.qizheng_name;
+ if(require=='奇兵'&&name!='sha') target.damage();
+ else if(require=='正兵'&&name!='shan'&&target.countGainableCards(player,'he')>0) player.gainPlayerCard(target,true,'he');
+ },
+ ai:{
+ order:5,
+ tag:{
+ damage:0.5,
+ gain:0.5,
+ loseCard:1,
+ respondShan:1,
+ respondSha:1,
+ },
+ result:{
+ target:function(player,target){
+ var e1=1.5*get.sgn(get.damageEffect(target,player,target));
+ var e2=0;
+ if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
+ var es=target.getGainableCards(player,'e');
+ if(es.length) e2=Math.min(e2,function(){
+ var max=0;
+ for(var i of es) max=Math.max(max,get.value(i,target))
+ return -max/4;
+ }());
+ if(game.hasPlayer(function(current){
+ return current.hasSkill('tianzuo')&&get.attitude(current,player)<=0;
+ })) return Math.max(e1,e2);
+ return Math.min(e1,e2);
+ },
+ },
+ },
+ },
hina_shenji:{
type:'equip',
subtype:'equip5',
@@ -4364,17 +4601,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sghuishi_info:'限定技,出牌阶段,你可以选择一名其他角色:若其有未发动过的觉醒技,则你令其发动这些觉醒技时无视原有条件;否则其摸四张牌。然后你减2点体力上限。',
shen_taishici:'神太史慈',
dulie:'笃烈',
- dulie_info:'锁定技。①游戏开始时,你令X名其他角色获得“围”(X为游戏人数的一半且向下取整)。②你对没有“围”的角色使用【杀】无距离限制。③当你成为【杀】的目标时,若使用者没有“围”,则你进行判定。若结果为红色,则取消此目标。',
+ dulie_info:'锁定技。①游戏开始时,你令所有其他角色获得“围”。②你对没有“围”的角色使用【杀】无距离限制。③当你成为【杀】的目标时,若使用者没有“围”,则你进行判定。若结果为红色,则取消此目标。',
tspowei:'破围',
- tspowei_info:'使命技。①当你因使用【杀】而对有“围”的角色造成伤害时,你防止此伤害并移去该角色的“围”。②使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。③失败:当你进入濒死状态时,你弃置装备区的所有牌,然后将体力值回复至1点。',
+ tspowei_info:'使命技。①当你因使用【杀】而对有“围”的角色造成伤害时,你防止此伤害并移去该角色的“围”。②使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。③失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。',
shenzhu:'神著',
- shenzhu_info:'你使用【杀】无次数限制。当你使用有对应实体牌的非转化【杀】结算结束后,你摸一张牌。',
+ shenzhu_info:'你使用【杀】无次数限制。当你使用有对应实体牌的非转化【杀】结算结束后,你摸一张牌,且本回合的手牌上限-1。',
dangmo:'荡魔',
dangmo_info:'当你于出牌阶段内使用第一张【杀】选择目标后,你可以为此牌增加至多Y-1个目标(Y为你的体力值)。',
reshuishi:'慧识',
reshuishi_info:'出牌阶段限一次,若你的体力上限小于10,你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同且你的体力上限小于10,则你加1点体力上限并重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多,则你减1点体力上限。',
resghuishi:'辉逝',
resghuishi_info:'限定技,出牌阶段,你可选择一名角色。若你的体力上限不小于存活人数且其有未发动的觉醒技,则你令其中一个技能无视发动条件;否则其摸四张牌。然后你减2点体力上限。',
+ qizhengxiangsheng:'奇正相生',
+ qizhengxiangsheng_info:'出牌阶段,对一名其他角色使用。你将目标角色标记为“奇兵”或“正兵”(对其他角色不可见)。然后目标角色可以打出一张【杀】或【闪】。若其是“奇兵”且未打出【杀】,则你对其造成1点伤害;若其是“正兵”且未打出【闪】,则你获得其一张牌。',
+ shen_xunyu:'神荀彧',
+ tianzuo:'天佐',
+ tianzuo_info:'①游戏开始时,你将8张【奇正相生】加入牌堆。②当一名角色成为【奇正相生】的目标后,你可观看其手牌,然后可以更改其标记。',
+ lingce:'灵策',
+ lingce_info:'锁定技。当有【奇正相生】或智囊被使用时,你摸一张牌。',
+ dinghan:'定汉',
+ dinghan_info:'锁定技,每种牌名每轮限一次。当你成为伤害类卡牌的目标时,取消之。',
key_kagari:'篝',
kagari_zongsi:'纵丝',
diff --git a/character/mobile.js b/character/mobile.js
index 95b8f4885..d72c0904a 100644
--- a/character/mobile.js
+++ b/character/mobile.js
@@ -6,23 +6,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
mobile:{
- mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun"],
+ mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou"],
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"],
mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"],
mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong','sp_yanghu'],
mobile_shijiren:['caizhenji','xiangchong','sp_huaxin','sp_xujing','zhangzhongjing','sp_zhangwen','liuzhang','qiaogong'],
+ mobile_shijiyong:['db_wenyang'],
mobile_sunben:["re_sunben"],
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin"],
mobile_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"],
- mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong"],
+ mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen"],
mobile_yijiang67:["re_jikang"],
mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"],
},
},
character:{
+ xin_caozhen:['male','wei',4,['disordersidi']],
+ xin_sunluban:['female','wu',3,['xinzenhui','xinjiaojin']],
+ qiaozhou:['male','shu',3,['zhiming','xingbu']],
+ db_wenyang:['male','wei',4,['dbquedi','dbzhuifeng','dbchongjian','dbchoujue'],['doublegroup:wei:wu']],
xin_guyong:['male','wu',3,['xinshenxing','xinbingyi']],
re_zhonghui:['male','wei',4,['requanji','zili']],
xin_caifuren:['female','qun',3,['xinqieting','xianzhou']],
@@ -33,12 +38,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangzhongjing:['male','qun',3,['jishi','liaoyi','binglun']],
xin_zhoucang:['male','shu',4,['mobilezhongyong']],
sp_xujing:['male','shu',3,['boming','ejian']],
- sp_huaxin:['male','wei',3,['hxrenshi','debao','buqi']],
+ sp_huaxin:['male','wei',3,['yuanqing','shuchen']],
xiangchong:['male','shu',4,['guying','muzhen']],
caizhenji:['female','wei',3,['sheyi','tianyin']],
ol_yujin:['male','wei',4,['rejieyue']],
sp_kongrong:['male','qun',3,['xinlirang','xinmingshi']],
- zhouchu:['male','wu',4,['xianghai','chuhai']],
+ zhouchu:['male','wu',4,['xianghai','rechuhai']],
wangfuzhaolei:['male','shu',4,['xunyi']],
wangling:['male','wei',4,['xingqi','xinzifu','mibei']],
zhouqun:['male','shu',3,['tiansuan']],
@@ -131,6 +136,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']],
},
characterIntro:{
+ qiaozhou:'谯周(201年-270年),字允南,巴西郡西充国县(今四川西充县槐树镇)人。三国时期蜀汉大臣、学者、儒学家、史学家。幼年丧父,少读典籍,精研六经,颇晓天文,成为蜀地大儒之一,门下有陈寿、罗宪等学生。诸葛亮担任益州牧时,授劝学从事。诸葛亮死后,不顾朝令,前往奔丧。后主刘禅册立太子时,授太子仆,迁太子家令、光禄大夫。反对姜维北伐,著《仇国论》,力陈北伐之失。炎兴元年(263年),邓艾攻打成都时期,力劝刘禅投降,“有全国之功”,投降魏国后,受封阳城亭侯,迁骑都尉。泰始六年(270年),授散骑常侍,同年去世,时年七十岁。',
gongsunkang:'公孙康(生卒年不详),辽东襄平(今辽宁辽阳)人。东汉末年辽东地区割据军阀,辽东太守公孙度长子(一作庶子)、车骑将军公孙恭之兄。公孙康在其父死后继任辽东太守。建安十二年(207年),擒斩图谋不轨的袁尚、袁熙兄弟,将其首级献予曹操,被拜为左将军,封襄平侯。建安十四年(209年),公孙康大破高句丽,陷其国都,并讨伐韩濊,设置带方郡。死后因二子年幼,由公孙恭继任。曹丕称帝后,被追赠为大司马。',
qiaogong:'桥公,亦作“乔公”,名字不详,是中国汉末三国时期的长者,江东二乔的父亲,三国时期庐江郡皖县(今安徽潜山)人,中国长篇古典名著《三国演义》中称之为“乔国老”。',
liuzhang:'刘璋(生卒年不详),字季玉,江夏竟陵(今湖北省天门市)人。东汉末年宗室、军阀,益州牧刘焉幼子,在父亲刘焉死后继任益州牧。刘璋为人懦弱多疑。汉中张鲁骄纵,不听刘璋号令,于是刘璋杀张鲁母弟,双方成为仇敌,刘璋派庞羲攻击张鲁,战败。后益州内乱,平定后,又有曹操将前来袭击的消息。在内外交逼之下,刘璋听信手下张松、法正之言,迎接刘备入益州,想借刘备之力,抵抗曹操。不料此举乃引狼入室,刘备反手攻击刘璋,又有法正为内应,进至成都。成都吏民都想抵抗刘备,但刘璋为百姓计而开城出降,群下莫不流涕。刘备占据成都后,刘璋以振威将军的身份被迁往荆州居住,关羽失荆州后,刘璋归属东吴,被孙权任命为益州牧,不久后去世,卒年不详。',
@@ -564,6 +570,708 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
+ //曹真
+ disordersidi:{
+ trigger:{player:'useCardAfter'},
+ direct:true,
+ filter:function(event,player){
+ return get.type(event.card,false)!='delay'&&event.targets.length==1&&game.hasPlayer(function(current){
+ return player!=current&&(!player.storage.disordersidi||!player.storage.disordersidi.contains(current));
+ });
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('disordersidi'),'选择两名角色a,b建立二元序偶,或仅选择一名角色,建立二元序偶',[1,2],function(card,player,target){
+ if(ui.selected.targets.length) return true;
+ return target!=player&&(!player.storage.disordersidi||!player.storage.disordersidi.contains(target));
+ }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['第一元素','第二元素']).set('ai',function(target){
+ var player=_status.event.player;
+ if(!ui.selected.targets.length){
+ if(target.getEnemies().length==1) return 2+Math.random();
+ return 1+Math.random();
+ }
+ var targetx=ui.selected.targets[0];
+ if(targetx.getEnemies().contains(target)&&targetx.inRange(target)) return Math.random()-0.5;
+ return 0;
+ }).animate=false;
+ 'step 1'
+ if(result.bool&&result.targets.length){
+ var targets=result.targets;
+ player.logSkill('disordersidi',targets[0]);
+ if(targets.length==1) targets.push(targets[0]);
+ if(!player.storage.disordersidi) player.storage.disordersidi=[];
+ if(!player.storage.disordersidi2) player.storage.disordersidi2=[];
+ player.storage.disordersidi.push(targets[0]);
+ player.storage.disordersidi2.push(targets[1]);
+ player.markSkill('disordersidi');
+ game.delayx();
+ }
+ },
+ intro:{
+ content:function(storage,player){
+ if((player==game.me||player.iscardUnderControl())&&!game.observe){
+ var str='R={ ';
+ for(var i=0;i');
+ if(i0&&get.effect(evt.target,evt.card,evt.player,player)<0) return 0;
+ return 1;
+ });
+ 'step 1'
+ if(result.index==0){
+ trigger.cancel();
+ trigger.targets.length=0;
+ trigger.getParent().triggeredTargets1.length=0;
+ target.damage();
+ }
+ else if(result.index==1) player.draw(2);
+ },
+ },
+ }
+ },
+ //孙鲁班
+ xinzenhui:{
+ audio:2,
+ trigger:{player:'useCardToPlayer'},
+ filter:function(event,player){
+ if(event.targets.length!=1) return false;
+ var card=event.card;
+ if(card.name!='sha'&&(get.type(card,null,false)!='trick'||get.color(card,false)!='black')) return false;
+ if(!player.isPhaseUsing()||player.hasSkill('xinzenhui2')) return false;
+ return game.hasPlayer(function(current){
+ return current!=player&¤t!=event.target&&lib.filter.targetEnabled2(card,player,current)&&lib.filter.targetInRange(card,player,current);
+ });
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ player.chooseTarget(get.prompt2('xinzenhui'),function(card,player,target){
+ if(player==target) return false;
+ var evt=_status.event.getTrigger();
+ return !evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
+ }).set('ai',function(target){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ return Math.max((target.countGainableCards(player,'he')?get.effect(target,{name:'shunshou_copy2'},player,player):0),get.effect(target,trigger.card,player,player));
+ });
+ "step 1"
+ if(result.bool){
+ player.addTempSkill('xinzenhui2','phaseUseAfter');
+ var target=result.targets[0],str=get.translation(target);
+ event.target=target;
+ player.logSkill('xinzenhui',target);
+ if(!target.countGainableCards(player,'he')) event._result={index:0};
+ else player.chooseControl().set('choiceList',[
+ '令'+str+'也成为'+get.translation(trigger.card)+'的目标',
+ '获得'+str+'的一张牌,然后其成为'+get.translation(trigger.card)+'的使用者',
+ ]).set('ai',function(){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player,target=_status.event.getParent().target;
+ return (target.countGainableCards(player,'he')?get.effect(target,{name:'shunshou_copy2'},player,player):0)>get.effect(target,trigger.card,player,player)?1:0;
+ })
+ }
+ else event.finish();
+ "step 2"
+ if(result.index==1){
+ trigger.untrigger();
+ trigger.getParent().player=event.target;
+ game.log(event.target,'成为了',trigger.card,'的使用者');
+ player.gainPlayerCard(target,true,'he');
+ }
+ else{
+ game.log(event.target,'成为了',trigger.card,'的额外目标');
+ trigger.getParent().targets.push(event.target);
+ }
+ }
+ },
+ xinzenhui2:{},
+ xinjiaojin:{
+ audio:2,
+ trigger:{player:'damageBegin4'},
+ filter:function(event,player){
+ return player.countCards('he',{type:'equip'})&&event.source&&event.source.sex=='male';
+ },
+ direct:true,
+ content:function(){
+ "step 0"
+ var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌防止伤害?',function(card,player){
+ return get.type(card)=='equip';
+ });
+ next.set('ai',function(card){
+ var player=_status.event.player;
+ if(player.hp==1||_status.event.getTrigger().num>1){
+ return 9-get.value(card);
+ }
+ if(player.hp==2){
+ return 8-get.value(card);
+ }
+ return 7-get.value(card);
+ });
+ next.logSkill='xinjiaojin';
+ "step 1"
+ if(result.bool){
+ game.delay(0.5);
+ trigger.cancel();
+ }
+ }
+ },
+ //周处
+ rechuhai:{
+ audio:'chuhai',
+ inherit:'chuhai',
+ dutySkill:true,
+ locked:true,
+ group:['rechuhai_add','rechuhai_achieve','rechuhai_fail'],
+ derivation:'zhangming',
+ prompt:'与一名其他角色进行拼点',
+ subSkill:{
+ add:{
+ trigger:{player:'compare'},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event.getParent().name=='rechuhai'&&event.num1<13&&player.countCards('e')<4;
+ },
+ content:function(){
+ var num=4-player.countCards('e');
+ game.log(player,'的拼点牌点数+',num);
+ trigger.num1=Math.min(13,trigger.num1+num);
+ }
+ },
+ achieve:{
+ audio:'rechuhai',
+ trigger:{player:'equipAfter'},
+ forced:true,
+ skillAnimation:true,
+ animationColor:'wood',
+ filter:function(event,player){
+ return player.countCards('e')>2;
+ },
+ content:function(){
+ player.awakenSkill('rechuhai');
+ game.log(player,'成功完成使命');
+ if(player.isDamaged()) player.recover(player.maxHp-player.hp);
+ player.removeSkill('xianghai');
+ player.addSkill('zhangming');
+ },
+ },
+ fail:{
+ trigger:{player:'compareAfter'},
+ forced:true,
+ filter:function(event,player){
+ return event.getParent().name=='rechuhai'&&event.num1<13&&!event.result.bool;
+ },
+ content:function(){
+ player.awakenSkill('rechuhai');
+ game.log(player,'使命失败');
+ },
+ },
+ },
+ },
+ zhangming:{
+ audio:2,
+ mod:{
+ ignoredHandcard:function(card,player){
+ if(get.suit(card)=='club'){
+ return true;
+ }
+ },
+ cardDiscardable:function(card,player,name){
+ if(name=='phaseDiscard'&&get.suit(card)=='club') return false;
+ }
+ },
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ return get.suit(event.card)=='club'&&get.type(event.card)=='trick';
+ },
+ content:function(){
+ trigger.directHit.addArray(game.filterPlayer(function(current){
+ return current!=player;
+ }));
+ },
+ },
+ //新华歆
+ yuanqing:{
+ audio:2,
+ trigger:{player:'phaseUseEnd'},
+ forced:true,
+ filter:function(event,player){
+ return player.hasHistory('useCard',function(evt){
+ return evt.getParent('phaseUse')==event;
+ });
+ },
+ content:function(){
+ var map={},cards=[];
+ player.getHistory('useCard',function(evt){
+ if(evt.getParent('phaseUse')==trigger){
+ var type=get.type2(evt.card,false);
+ if(!map[type]) map[type]=[];
+ }
+ });
+ for(var i=0;i4;
+ },
+ logTarget:'player',
+ content:function(){
+ player.gain(_status.renku,'gain2','fromRenku');
+ _status.renku.length=0;
+ game.updateRenku();
+ trigger.player.recover();
+ },
+ },
+ //谯周
+ zhiming:{
+ audio:2,
+ trigger:{player:['phaseZhunbeiBegin','phaseDiscardEnd']},
+ frequent:true,
+ content:function(){
+ 'step 0'
+ player.draw();
+ 'step 1'
+ if(player.countCards('he')>0){
+ var next=player.chooseCard('he','是否将一张牌置于牌堆顶?');
+ if(trigger.name=='phaseZhunbei'){
+ next.set('ai',function(card){
+ var player=_status.event.player,js=player.getCards('j');
+ if(js.length){
+ var judge=get.judge(js[0]);
+ if(judge&&judge(card)>=0) return 20-get.value(card);
+ }
+ return 0;
+ });
+ }
+ else if(!player.hasSkill('xingbu')||!game.hasPlayer(function(current){
+ return current!=player&&get.attitude(player,current)>0;
+ })){
+ next.set('ai',function(card){
+ var player=_status.event.player,js=player.next.getCards('j');
+ if(js.length){
+ var judge=get.judge(js[0]);
+ if(judge&&(judge(card)+0.01)*get.attitude(player,player.next)>0) return 20-get.value(card);
+ }
+ return 0;
+ });
+ }
+ else next.ai=(()=>-1);
+ }
+ else event.finish();
+ 'step 2'
+ if(result.bool){
+ player.$throw(get.position(result.cards[0])=='e'?result.cards[0]:1,1000);
+ game.log(player,'将',get.position(result.cards[0])=='e'?result.cards[0]:'#y一张手牌','置于了牌堆顶');
+ player.lose(result.cards,ui.cardPile,'insert');
+ }
+ else event.finish();
+ 'step 3'
+ game.updateRoundNumber();
+ game.delayx();
+ },
+ ai:{guanxing:true},
+ },
+ xingbu:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ prompt2:'展示牌堆顶的三张牌,并根据其中红色牌的数量,令一名其他角色获得一种效果',
+ check:function(event,player){
+ return game.hasPlayer(function(current){
+ return current!=player&&get.attitude(player,current)>0;
+ });
+ },
+ content:function(){
+ 'step 0'
+ var cards=get.cards(3);
+ event.cards=cards;
+ game.cardsGotoOrdering(cards);
+ player.showCards(cards,get.translation(player)+'发动了【星卜】');
+ 'step 1'
+ var num=0;
+ for(var i of cards){
+ if(get.color(i,false)=='red') num++;
+ }
+ player.chooseTarget('选择一名其他角色获得星卜效果('+get.cnNumber(num)+'张)',lib.filter.notMe,true).set('ai',function(target){
+ var player=_status.event.player,num=_status.event.getParent().num;
+ var att=get.attitude(player,target);
+ if(num<2) att*=(-1);
+ if(target.hasJudge('lebu')) att/=4;
+ return att;
+ });
+ if(num==0) num=1;
+ event.num=num;
+ 'step 2'
+ if(result.bool){
+ var skill='xingbu_effect'+num,target=result.targets[0];
+ player.line(target,'green');
+ game.log(player,'选择了',target);
+ target.addTempSkill(skill,{player:'phaseEnd'});
+ target.addMark(skill,1,false);
+ game.delayx();
+ }
+ },
+ subSkill:{
+ effect1:{
+ charlotte:true,
+ onremove:true,
+ intro:{content:'使用杀的次数上限-#'},
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num-player.countMark('xingbu_effect1');
+ },
+ },
+ },
+ effect2:{
+ charlotte:true,
+ onremove:true,
+ intro:{content:'出牌阶段使用第一张牌后弃置#张牌,然后摸两倍的牌'},
+ trigger:{player:'useCardAfter'},
+ forced:true,
+ filter:function(event,player){
+ var evt=event.getParent('phaseUse');
+ if(!evt||evt.player!=player) return false;
+ return player.getHistory('useCard',function(evtx){
+ return evtx.getParent('phaseUse')==evt;
+ }).indexOf(event)==0;
+ },
+ content:function(){
+ player.chooseToDiscard('he',player.countMark('xingbu_effect2'),true);
+ player.draw(player.countMark('xingbu_effect2')*2);
+ },
+ },
+ effect3:{
+ charlotte:true,
+ onremove:true,
+ intro:{content:'摸牌阶段多摸2*#张牌,使用【杀】的次数上限+#,跳过弃牌阶段。'},
+ trigger:{player:['phaseDrawBegin2','phaseDiscardBefore']},
+ forced:true,
+ filter:function(event,player){
+ return event.name=='phaseDiscard'||!event.numFixed;
+ },
+ content:function(){
+ if(trigger.name=='phaseDraw') trigger.num+=(player.countMark('xingbu_effect3')*2);
+ else trigger.cancel();
+ },
+ mod:{
+ cardUsable:function(card,player,num){
+ if(card.name=='sha') return num+player.countMark('xingbu_effect3');
+ },
+ },
+ },
+ },
+ },
+ //文鸯
+ dbquedi:{
+ audio:2,
+ trigger:{player:'useCardToPlayered'},
+ direct:true,
+ usable:1,
+ filter:function(event,player){
+ return (event.card.name=='sha'||event.card.name=='juedou')&&(event.target.countGainableCards(player,'h')>0||player.hasCard(function(i){
+ return _status.connectMode||get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi');
+ },'h'));
+ },
+ content:function(){
+ 'step 0'
+ var target=trigger.target;
+ event.target=target;
+ var list=[];
+ if(target.countGainableCards(player,'h')>0) list.push('选项一');
+ if(player.hasCard(function(i){
+ return get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi');
+ },'h')) list.push('选项二');
+ list.push('背水!');
+ list.push('cancel2');
+ player.chooseControl(list).set('choiceList',[
+ '获得'+get.translation(target)+'的一张手牌',
+ '弃置一张基本牌并令'+get.translation(trigger.card)+'伤害+1',
+ '背水!减1点体力上限并执行所有选项',
+ ]).set('prompt',get.prompt('dbquedi',target)).set('ai',function(){
+ var evt=_status.event.getTrigger(),player=evt.player,target=evt.target,card=evt.card;
+ if(get.attitude(player,target)>0) return 'cancel2';
+ var bool1=target.countGainableCards(player,'h')>0;
+ var bool2=player.hasCard(function(i){
+ return get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi')&&get.value(card,player)<5;
+ },'h')&&!target.hasSkillTag('filterDamage',null,{
+ player:player,
+ card:card,
+ });
+ if(bool1&&bool2&&(target.hp<=2||(player.isDamaged()&&player.maxHp>3))) return '背水!';
+ if(bool1) return '选项一';
+ if(bool2) return '选项二';
+ return 'cancel2';
+ });
+ 'step 1'
+ if(result.control!='cancel2'){
+ player.logSkill('dbquedi',target);
+ event.control=result.control;
+ if(event.control=='背水!') player.loseMaxHp();
+ }
+ else{
+ player.storage.counttrigger.dbquedi--;
+ event.finish();
+ }
+ 'step 2'
+ if((event.control=='选项一'||event.control=='背水!')&&target.countGainableCards(player,'h')>0) player.gainPlayerCard(target,true,'h');
+ 'step 3'
+ if((event.control=='选项二'||event.control=='背水!')&&player.hasCard(function(i){
+ return get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi');
+ },'h')){
+ player.chooseToDiscard('h','弃置一张基本牌',{type:'basic'},true);
+ }
+ else event.finish();
+ 'step 4'
+ if(result.bool) trigger.getParent().baseDamage++;
+ },
+ ai:{
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ if(!arg||!arg.card||!arg.target||(arg.card.name!='sha'&&arg.card.name!='juedou')) return false;
+ if(player.storage.counttrigger&&player.storage.counttrigger.dbquedi&&player.storage.counttrigger.dbquedi>0) return false;
+ if(arg.target.countCards('h')==1&&(arg.card.name!='sha'||!arg.target.getEquip('bagua')||player.hasSkillTag('unequip',false,{
+ name:arg.card?arg.card.name:null,
+ target:arg.target,
+ card:arg.card
+ })||player.hasSkillTag('unequip_ai',false,{
+ name:arg.card?arg.card.name:null,
+ target:arg.target,
+ card:arg.card
+ }))) return true;
+ return false;
+ },
+ },
+ },
+ dbzhuifeng:{
+ audio:2,
+ groupSkill:true,
+ enable:'chooseToUse',
+ filter:function(event,player){
+ return player.group=='wei'&&player.hp>0&&
+ (event.filterCard({name:'sha',isCard:true},player,event)||event.filterCard({name:'juedou',isCard:true},player,event));
+ },
+ chooseButton:{
+ dialog:function(){
+ return ui.create.dialog('椎锋',[['sha','juedou'],'vcard']);
+ },
+ filter:function(button,player){
+ var evt=_status.event.getParent();
+ return evt.filterCard({name:button.link[2],isCard:true},player,evt);
+ },
+ check:function(card){
+ return _status.event.player.getUseValue({name:card.link[2]})*(card.link[2]=='juedou')?2:1;
+ },
+ backup:function(links){
+ return {
+ viewAs:{name:links[0][2],isCard:true},
+ filterCard:()=>false,
+ selectCard:-1,
+ precontent:function(){
+ player.logSkill('dbzhuifeng');
+ delete event.result.skill;
+ player.loseHp();
+ },
+ }
+ },
+ prompt:function(links){
+ return '请选择【'+get.translation(links[0][2])+'】的目标';
+ },
+ },
+ ai:{
+ respondSha:true,
+ skillTagFilter:function(player,tag,arg){
+ return player.group=='wei'&&player.hp>0&&arg=='use';
+ },
+ order:function(){
+ var player=_status.event.player;
+ if(player.hasValueTarget({name:'juedou'})) return get.order({name:'juedou'})-0.5;
+ return get.order({name:'sha'})-0.5;
+ },
+ result:{
+ player:function(player){
+ if(player.hp>1) return 1;
+ return -1;
+ },
+ },
+ },
+ },
+ dbchongjian:{
+ audio:2,
+ groupSkill:true,
+ hiddenCard:function(player,name){
+ if(player.group=='wu'&&(name=='sha'||name=='jiu')&&player.hasCard(function(card){
+ return get.type(card)=='equip';
+ },'hes')) return true;
+ return false;
+ },
+ enable:'chooseToUse',
+ filter:function(event,player){
+ return player.group=='wu'&&player.hasCard(function(card){
+ return get.type(card)=='equip';
+ },'hes')&&(event.filterCard({name:'sha',isCard:true},player,event)||event.filterCard({name:'jiu',isCard:true},player,event));
+ },
+ chooseButton:{
+ dialog:function(){
+ return ui.create.dialog('冲坚',[['sha','jiu'],'vcard']);
+ },
+ filter:function(button,player){
+ var evt=_status.event.getParent();
+ return evt.filterCard({name:button.link[2],isCard:true},player,evt);
+ },
+ check:function(button){
+ if(_status.event.getParent().type!='phase') return 1;
+ var player=_status.event.player;
+ if(button.link[2]=='jiu'&&(player.hasCard(function(card){
+ return get.name(card)=='sha';
+ },'hs')||player.countCards('hes',function(card){
+ if(get.type(card)!='equip') return false;
+ if(get.position(card)=='e'){
+ if(player.hasSkillTag('noe')) return (10-get.value(card))>0;
+ var sub=get.subtype(card);
+ if(player.hasCard(function(card){
+ return get.subtype(card)==sub&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
+ },'hs')) return (10-get.value(card))>0;
+ }
+ return (5-get.value(card))>0;
+ })>1)) return player.getUseValue({name:'jiu'})*4;
+ return player.getUseValue({name:button.link[2]});
+ },
+ backup:function(links,player){
+ return {
+ audio:'dbchongjian',
+ viewAs:{name:links[0][2],isCard:true},
+ filterCard:{type:'equip'},
+ position:'hes',
+ popname:true,
+ check:function(card){
+ var player=_status.event.player;
+ if(get.position(card)=='e'){
+ if(player.hasSkillTag('noe')) return 10-get.value(card);
+ var sub=get.subtype(card);
+ if(player.hasCard(function(card){
+ return get.subtype(card)==sub&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
+ },'hs')) return 10-get.value(card);
+ }
+ return 5-get.value(card);
+ },
+ }
+ },
+ prompt:function(links){
+ return '将一张装备牌当做【'+get.translation(links[0][2])+'】使用';
+ },
+ },
+ ai:{
+ respondSha:true,
+ skillTagFilter:function(player,tag,arg){
+ return player.group=='wu'&&arg=='use'&&player.hasCard(function(card){
+ return get.type(card)=='equip';
+ },'hes');
+ },
+ order:function(item,player){
+ if(_status.event.type!='phase') return 1;
+ var player=_status.event.player;
+ if(player.hasCard(function(card){
+ if(get.value(card,player)<0) return true;
+ var sub=get.subtype(card);
+ return player.hasCard(function(card){
+ return get.subtype(card)==sub&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
+ },'hs')>0;
+ },'e')) return 10;
+ if(player.countCards('hs','sha')||player.countCards('he',function(card){
+ return get.type(card)=='equip'&&get.value(card,player)<5;
+ })>1) return get.order({name:'jiu'})-0.1;
+ return get.order({name:'sha'})-0.1;
+ },
+ result:{player:1},
+ },
+ },
+ dbchoujue:{
+ audio:2,
+ trigger:{source:'dieAfter'},
+ forced:true,
+ content:function(){
+ player.gainMaxHp();
+ player.draw(2);
+ player.addSkill('counttrigger');
+ if(!player.storage.counttrigger) player.storage.counttrigger={};
+ if(!player.storage.counttrigger.dbquedi) player.storage.counttrigger.dbquedi=0;
+ player.storage.counttrigger.dbquedi--;
+ },
+ },
//顾雍
xinshenxing:{
audio:2,
@@ -1660,7 +2368,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
forced:true,
filter:function(event,player){
- return event.fromRenku==true;
+ return event.fromRenku==true&&!event.outRange;
},
content:function(){
player.draw();
@@ -1788,6 +2496,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
popup:false,
onremove:true,
+ charlotte:true,
content:function(){
if(player.isDamaged()){
player.logSkill('binglun_recover');
@@ -11521,6 +12230,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
+ _doublegroup_choice:{
+ trigger:{
+ global:'gameStart',
+ player:'enterGame',
+ },
+ forced:true,
+ charlotte:true,
+ firstDo:true,
+ popup:false,
+ filter:function(event,player){
+ return get.mode()!='guozhan'&&get.is.double(player.name1)&&!player._groupChosen;
+ },
+ content:function(){
+ 'step 0'
+ player._groupChosen=true;
+ player.chooseControl(get.is.double(player.name1,true)).set('prompt','请选择你的势力');
+ 'step 1'
+ player.changeGroup(result.control);
+ },
+ },
},
dynamicTranslate:{
yizan_use:function(player){
@@ -12108,7 +12837,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mjmouzhi_info:'锁定技,当你受到伤害时,若伤害渠道对应的牌和你上次受到的伤害颜色相同,则你防止此伤害。',
zhangzhongjing:'张机',
jishi:'济世',
- jishi_info:'锁定技。①当你使用的牌结算完成后,若你未因此牌造成过伤害,则你将此牌对应的所有实体牌置于仁库中。②当有牌离开仁库时,你摸一张牌。',
+ jishi_info:'锁定技。①当你使用的牌结算完成后,若你未因此牌造成过伤害,则你将此牌对应的所有实体牌置于仁库中。②当有牌不因溢出而离开仁库时,你摸一张牌。',
liaoyi:'疗疫',
liaoyi_info:'其他角色的回合开始时,若其:①手牌数小于体力值且仁库内牌数大于等于X,则你可令其从仁库中获得X张牌;②手牌数大于体力值,则你可以令其将X张牌置于仁库中(X为其手牌数与体力值之差且至多为4)。',
binglun:'病论',
@@ -12166,6 +12895,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinshenxing_info:'出牌阶段限X次(X为你的体力值),你可以弃置两张牌,然后摸一张牌。若这两张牌颜色不同,则改为摸两张牌。',
xinbingyi:'秉壹',
xinbingyi_info:'结束阶段,你可展示所有手牌。若这些牌的颜色或类型均相同,则你可以令至多X名角色各摸一张牌(X为你的手牌数)。',
+ db_wenyang:'文鸯',
+ dbquedi:'却敌',
+ dbquedi_info:'每回合限一次。当你使用【杀】或【决斗】指定唯一目标后,你可选择:①获得目标角色的一张手牌。②弃置一张基本牌,并令此牌的伤害值基数+1。③背水:减1点体力上限,然后依次执行上述所有选项。',
+ dbzhuifeng:'椎锋',
+ dbzhuifeng_backup:'椎锋',
+ dbzhuifeng_info:'魏势力技。当你需要使用【杀】或【决斗】时,你可以失去1点体力,然后视为使用此牌。',
+ dbchongjian:'冲坚',
+ dbchongjian_backup:'冲坚',
+ dbchongjian_info:'吴势力技。你可以将一张装备牌当做【杀】或【酒】使用。',
+ dbchoujue:'仇决',
+ dbchoujue_info:'锁定技。当你杀死其他角色后,你加1点体力上限并摸两张牌,然后本回合发动【却敌】的次数上限+1。',
+ qiaozhou:'谯周',
+ zhiming:'知命',
+ zhiming_info:'准备阶段开始时或弃牌阶段结束时,你摸一张牌,然后可以将一张牌置于牌堆顶。',
+ xingbu:'星卜',
+ xingbu_info:'结束阶段,你可以展示牌堆顶的三张牌,然后根据X值(X为这三张牌中红色牌的数量),令一名其他角色获得对应的效果直到其下回合结束:①三张:其摸牌阶段多摸两张牌,使用【杀】的次数上限+1,跳过弃牌阶段。②两张:其于出牌阶段使用的第一张牌结算结束后,弃置一张牌并摸两张牌。③小于两张:其使用【杀】的次数上限-1。',
+ yuanqing:'渊清',
+ yuanqing_info:'锁定技,出牌阶段结束时,你随机将弃牌堆中你本阶段使用过的牌类型的各一张牌置于仁库中。',
+ shuchen:'疏陈',
+ shuchen_info:'锁定技,当有角色进入濒死状态时,若仁库中的牌数大于四,则你获得仁库中的所有牌,然后其回复1点体力。',
+ rechuhai:'除害',
+ rechuhai_info:'使命技。①出牌阶段限一次,你可以摸一张牌,然后和一名其他角色拼点。若你赢,则你观看其手牌,并从牌堆/弃牌堆中获得其手牌中包含的类型的牌各一张,且当你于此阶段内对其造成伤害后,你将牌堆/弃牌堆中的一张装备牌置于你的一个空置装备栏内。②当你因发动〖除害①〗而展示拼点牌时,你令此牌的点数+X(X=(4-你装备区的牌数))。③使命:当有装备牌进入你的装备区后,若你的装备区内有至少三张牌,则你将体力值回复至上限,失去〖乡害〗并获得〖彰名〗。④失败:当你因发动〖除害①〗发起的拼点没赢时,若你的最终点数不大于Q点,则你触发使命失败分支。',
+ zhangming:'彰名',
+ zhangming_info:'锁定技。你的♣牌不计入手牌上限。当你使用♣普通锦囊牌时,你令所有其他角色不能响应此牌。',
+ xin_sunluban:'手杀孙鲁班',
+ xinzenhui:'谮毁',
+ xinzenhui_info:'出牌阶段限一次。当你使用【杀】或黑色普通锦囊牌指定目标时,你可选择另一名能成为此牌目标的其他角色并选择一项:①令其也成为此牌的目标。②获得其一张牌,然后将此牌的使用者改为该角色。',
+ xinjiaojin:'骄矜',
+ xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌,令此伤害-1。',
+ xin_caozhen:'手杀曹真',
+ disordersidi:'司敌',
+ disordersidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用的不为延时锦囊牌的牌结算结束后,你清除R内以其为第一元素的二元序偶。③一名角色a使用不为延时锦囊牌的牌指定b为唯一目标时,若aRb成立,则你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,并对a造成1点伤害。⒉摸两张牌。',
mobile_standard:'手杀异构·标准包',
mobile_shenhua:'手杀异构·神话再临',
@@ -12178,6 +12939,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_shijiren:'始计篇·仁',
mobile_shijizhi:'始计篇·智',
mobile_shijixin:'始计篇·信',
+ mobile_shijiyong:'始计篇·勇',
}
};
});
diff --git a/character/rank.js b/character/rank.js
index 3a3b896bf..40e0ca67f 100644
--- a/character/rank.js
+++ b/character/rank.js
@@ -254,6 +254,7 @@ window.noname_character_rank={
'panshu',
'caochun',
'xin_caifuren',
+ 'shen_xunyu',
'key_misuzu',
'key_sunohara',
'key_umi',
@@ -479,7 +480,7 @@ window.noname_character_rank={
're_dongcheng',
'ol_yujin',
'ol_huaxin',
- 'zhangzhongjing',
+ 'qiaozhou',
],
bp:[
'chess_diaochan',
@@ -700,6 +701,8 @@ window.noname_character_rank={
'wuban',
'tw_zhaoxiang',
'ol_lusu',
+ 'zhangzhongjing',
+ 'db_wenyang',
],
b:[
'diy_feishi',
@@ -891,6 +894,7 @@ window.noname_character_rank={
'xin_guyong',
'duosidawang',
're_jiaxu',
+ 'xin_caozhen',
],
bm:[
'diy_xizhenxihong',
@@ -1042,6 +1046,7 @@ window.noname_character_rank={
'sp_zhangwen',
're_zoushi',
'yuejiu',
+ 'xin_sunluban',
],
c:[
'xiahoudun',
@@ -1216,6 +1221,7 @@ window.noname_character_rank={
'yangwan',
'shen_guojia',
'shen_taishici',
+ 'shen_xunyu',
'tw_gexuan',
'key_tomoya',
'key_masato',
@@ -1396,6 +1402,8 @@ window.noname_character_rank={
'longyufei',
're_guyong',
're_panshu',
+ 'db_wenyang',
+ 'qiaozhou',
'key_kano',
'key_haruko',
'key_akiko',
@@ -1731,6 +1739,7 @@ window.noname_character_rank={
'xin_zhonghui',
'jiachong',
'ol_lusu',
+ 'xin_sunluban',
],
junk:[
'sunshao',
diff --git a/character/refresh.js b/character/refresh.js
index e61865009..ce73dda09 100755
--- a/character/refresh.js
+++ b/character/refresh.js
@@ -182,6 +182,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
selectTarget:targets.length==1?-1:1,
selectCard:num,
prompt:'将'+get.cnNumber(num)+'张手牌交给一名手牌数最少的其他角色',
+ forced:true,
ai1:function(card){
var goon=false,player=_status.event.player;
for(var i of _status.event.targets){
@@ -1568,7 +1569,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
//国钟会
gzquanji:{
- audio:'quanji',
+ audio:2,
trigger:{
player:'damageEnd',
source:'damageSource',
@@ -1610,7 +1611,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
gzpaiyi:{
- audio:'paiyi',
+ audio:2,
enable:'phaseUse',
filter:function(event,player){
return player.getStorage('gzquanji').length>0&&!player.hasSkill('gzquanji2');
@@ -1621,7 +1622,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
backup:function(links,player){
return {
- audio:'paiyi',
+ audio:'gzpaiyi',
filterTarget:true,
filterCard:function(){return false},
selectCard:-1,
@@ -1664,7 +1665,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx();
"step 1"
var num=player.getStorage('gzquanji').length;
- if(num) target.draw(num);
+ if(num) target.draw(Math.min(7,num));
"step 2"
if(target.countCards('h')>player.countCards('h')){
target.damage();
@@ -8426,7 +8427,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.storage.refanjian=cards[0];
target.gain(cards[0],player,'give');
"step 1"
- target.chooseControl('refanjian_card','refanjian_hp').ai=function(event,player){
+ var suit=get.suit(target.storage.refanjian);
+ if(!target.countCards('h')) event._result={control:'refanjian_hp'};
+ else target.chooseControl('refanjian_card','refanjian_hp').ai=function(event,player){
var cards=player.getCards('he',{suit:get.suit(player.storage.refanjian)});
if(cards.length==1) return 0;
if(cards.length>=2){
@@ -8451,7 +8454,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.finish();
}
"step 3"
- target.discard(target.getCards('he',{suit:get.suit(target.storage.refanjian)}))
+ var suit=get.suit(target.storage.refanjian);
+ target.discard(target.getCards('he',function(i){
+ return get.suit(i)==suit&&lib.filter.cardDiscardable(i,target,'refanjian');
+ }));
delete target.storage.refanjian;
},
ai:{
@@ -10390,7 +10396,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gzquanji_info:'当你受到伤害后或当你使用牌指定唯一目标并对其造成伤害后,你可以摸一张牌,然后你将一张牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。',
gzpaiyi:'排异',
gzpaiyi_backup:'排异',
- gzpaiyi_info:'出牌阶段,你可以将移去一张“权”,然后选择一名角色并令其摸X张牌(X为“权”的数量),若其手牌数不小于你,则你对其造成1点伤害且本技能于此回合内失效。',
+ gzpaiyi_info:'出牌阶段,你可以将移去一张“权”,然后选择一名角色并令其摸X张牌(X为“权”的数量且至多为7),若其手牌数不小于你,则你对其造成1点伤害且本技能于此回合内失效。',
ol_zhurong:'界祝融',
changbiao:'长标',
changbiao_info:'出牌阶段限一次,你可以将任意张手牌当做【杀】使用(无距离限制)。若你因此【杀】对目标角色造成过伤害,则你于出牌阶段结束时摸X张牌(X为此【杀】对应的实体牌数量)。',
diff --git a/character/shenhua.js b/character/shenhua.js
index d5484005d..6cfb13c27 100755
--- a/character/shenhua.js
+++ b/character/shenhua.js
@@ -83,6 +83,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yuanshu:['jiling'],
zhangxiu:['jiaxu'],
wangping:['jiangfei'],
+ jiangwei:['xiahouba'],
},
characterFilter:{
zuoci:function(mode){
@@ -759,6 +760,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
"step 0"
player.storage.drlt_poshi=true;
+ player.awakenSkill('drlt_poshi');
player.loseMaxHp();
"step 1"
var num=player.maxHp-player.countCards('h');
diff --git a/character/sp.js b/character/sp.js
index 95d984bda..ddd8f1903 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -548,24 +548,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.name=='die'){
var gain=trigger.player.countMark('quxi_gain'),lose=trigger.player.countMark('quxi_lose');
player.chooseTarget('是否令一名角色获得'+get.translation(trigger.player)+'的“'+(gain&&lose?'丰”和“歉':(gain?'丰':'歉'))+'”标记?',function(card,player,target){
- return target!=player&&!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose');
+ return !target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose');
}).set('goon',gain-lose).set('ai',function(target){
var evt=_status.event;
return evt.goon*get.attitude(evt.player,target);
});
}
- else player.chooseTarget(2,'是否转移“丰”或“歉”标记?',function(card,player,target){
- if(player==target) return false;
- if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
- return target.countMark('quxi_gain')>0||target.countMark('quxi_lose')>0;
- }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
- var player=_status.event.player;
- if(!ui.selected.targets.length){
- return -get.attitude(player,target)*(target.countMark('quxi_gain')-target.countMark('quxi_lose'));
- }
- var targetx=ui.selected.targets[0];
- return get.attitude(player,target)*(targetx.countMark('quxi_gain')-targetx.countMark('quxi_lose'));
- });
+ else event.goto(2);
'step 1'
if(result.bool){
var targets=result.targets;
@@ -582,6 +571,59 @@ game.import('character',function(lib,game,ui,get,ai,_status){
targets[1].addMark('quxi_lose',lose);
}
game.delayx();
+ event.finish();
+ }
+ 'step 2'
+ if(game.hasPlayer(function(target){
+ return target.countMark('quxi_gain')>0;
+ })) player.chooseTarget(2,'是否转移“丰”标记?',function(card,player,target){
+ if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
+ return target.countMark('quxi_gain')>0;
+ }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
+ var player=_status.event.player;
+ if(!ui.selected.targets.length){
+ return -get.attitude(player,target);
+ }
+ return get.attitude(player,target);
+ });
+ else event.goto(4);
+ 'step 3'
+ if(result.bool){
+ var targets=result.targets;
+ player.logSkill('quxi_effect',targets,false);
+ player.line2(targets);
+ var gain=targets[0].countMark('quxi_gain');
+ if(gain){
+ targets[0].removeMark('quxi_gain',gain);
+ targets[1].addMark('quxi_gain',gain);
+ }
+ game.delayx();
+ }
+ 'step 4'
+ if(game.hasPlayer(function(target){
+ return target.countMark('quxi_lose')>0;
+ })) player.chooseTarget(2,'是否转移“歉”标记?',function(card,player,target){
+ if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
+ return target.countMark('quxi_lose')>0;
+ }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
+ var player=_status.event.player;
+ if(!ui.selected.targets.length){
+ return get.attitude(player,target);
+ }
+ return -get.attitude(player,target);
+ });
+ else event.finish();
+ 'step 5'
+ if(result.bool){
+ var targets=result.targets;
+ player.logSkill('quxi_effect',targets,false);
+ player.line2(targets);
+ var gain=targets[0].countMark('quxi_lose');
+ if(gain){
+ targets[0].removeMark('quxi_lose',gain);
+ targets[1].addMark('quxi_lose',gain);
+ }
+ game.delayx();
}
},
},
@@ -2400,17 +2442,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mod:{
cardEnabled:function(card,player){
if(player.getStorage('zlshoufu2').filter(function(magic){
- return get.type2(magic)==get.type(card);
+ return get.type2(magic)==get.type2(card);
}).length) return false;
},
cardRespondable:function(card,player){
if(player.getStorage('zlshoufu2').filter(function(magic){
- return get.type2(magic)==get.type(card);
+ return get.type2(magic)==get.type2(card);
}).length) return false;
},
cardSavable:function(card,player){
if(player.getStorage('zlshoufu2').filter(function(magic){
- return get.type2(magic)==get.type(card);
+ return get.type2(magic)==get.type2(card);
}).length) return false;
},
},
diff --git a/character/sp2.js b/character/sp2.js
index 440d76b4f..9751fc1e8 100644
--- a/character/sp2.js
+++ b/character/sp2.js
@@ -261,32 +261,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhiren:{
audio:2,
trigger:{player:'useCard'},
- direct:true,
filter:function(event,player){
- return (player==_status.currentPhase||player.hasSkill('yaner_zhiren'))&&get.color(event.card)=='red'&&player.getHistory('useCard',function(evt){
- return get.color(evt.card)=='red'
+ return (player==_status.currentPhase||player.hasSkill('yaner_zhiren'))&&event.card.isCard&&player.getHistory('useCard',function(evt){
+ return evt.card.isCard;
}).indexOf(event)==0;
},
+ frequent:true,
+ locked:false,
content:function(){
'step 0'
event.num=get.translation(trigger.card.name).length;
- event.logged=false;
- player.chooseBool('织纴:是否卜算'+event.num+'?');
- 'step 1'
- if(result.bool){
- player.logSkill('zhiren');
- event.logged=true;
- player.chooseToGuanxing(num);
- }
+ player.chooseToGuanxing(event.num);
if(event.num<2) event.finish();
- 'step 2'
+ 'step 1'
if(!game.hasPlayer(function(current){
return current.countDiscardableCards(player,'e')>0;
})){
- event.forcejudge=true;
- event.goto(4);
+ event.goto(3);
}
- else player.chooseTarget('织纴:是否弃置一名其他角色装备区内的一张牌?',function(card,player,target){
+ else player.chooseTarget('织纴:是否弃置一名角色装备区内的一张牌?',function(card,player,target){
return target.countDiscardableCards(player,'e')>0;
}).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('e'),val=0;
@@ -296,27 +289,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return eff;
});
- 'step 3'
+ 'step 2'
if(result.bool){
var target=result.targets[0];
- if(!event.logged){
- event.logged=true;
- player.logSkill('zhiren',target);
- player.addExpose(0.15);
- }
- else player.line(target,'green');
+ player.addExpose(0.15);
+ player.line(target,'green');
player.discardPlayerCard(target,'e',true);
}
else event.goto(6);
if(event.num<3) event.finish();
- 'step 4'
+ 'step 3'
if(!game.hasPlayer(function(current){
return current.countDiscardableCards(player,'j')>0;
})){
if(event.num<3) event.finish();
- else event.goto(6);
+ else event.goto(5);
}
- else if(!event.forcejudge) player.chooseTarget('织纴:弃置一名其他角色判定区内的一张牌',true,function(card,player,target){
+ else player.chooseTarget('织纴:是否弃置一名角色判定区内的一张牌?',function(card,player,target){
return target.countDiscardableCards(player,'j')>0;
}).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('j'),val=0;
@@ -326,51 +315,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return eff;
});
- else player.chooseTarget('织纴:是否弃置一名其他角色判定区内的一张牌?',function(card,player,target){
- return target.countDiscardableCards(player,'j')>0;
- }).set('ai',function(target){
- var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('j'),val=0;
- for(var i of es){
- var eff=-(get.effect(target,i,target,player))
- if(eff>val) val=eff;
- }
- return eff;
- });
- 'step 5'
+ 'step 4'
if(result.bool){
var target=result.targets[0];
- if(!event.logged){
- event.logged=true;
- player.logSkill('zhiren',target);
- player.addExpose(0.15);
- }
- else player.line(target,'green');
+ player.addExpose(0.15);
+ player.line(target,'green');
player.discardPlayerCard(target,'j',true);
}
if(event.num<3) event.finish();
- 'step 6'
- if(player.isDamaged()) player.chooseBool('织纴:是否回复1点体力?');
- else if(event.num<4) event.finish();
- else event.goto(8);
- 'step 7'
- if(result.bool){
- if(!event.logged){
- event.logged=true;
- player.logSkill('zhiren');
- }
- player.recover();
- }
+ 'step 5'
+ player.recover();
if(event.num<4) event.finish();
- 'step 8'
- player.chooseBool('织纴:是否摸三张牌?');
- 'step 9'
- if(result.bool){
- if(!event.logged){
- event.logged=true;
- player.logSkill('zhiren');
- }
- player.draw(3);
- }
+ 'step 6'
+ player.draw(3);
+ },
+ mod:{
+ aiOrder:function(player,card,num){
+ if(player==_status.currentPhase&&!player.getHistory('useCard',function(evt){
+ return evt.card.isCard;
+ }).length) return num+Math.pow(get.translation(card.name).length,2);
+ },
},
},
yaner:{
@@ -380,7 +344,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filter:function(event,player){
var current=_status.currentPhase;
- if(!current||current==player||!current.isPhaseUsing()) return false;
+ if(!current||current==player||!current.isIn()||!current.isPhaseUsing()) return false;
var evt=event.getl(current);
return evt&&evt.hs&&evt.hs.length&¤t.countCards('h')==0;
},
@@ -2633,7 +2597,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att>2){
- return Math.min(5,target.maxHp)-target.countCards('h');
+ return 5-target.countCards('h');
}
return att/3;
});
@@ -9617,7 +9581,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '转换技,出牌阶段限一次,阴:你可以将至多两张手牌交给一名其他角色。阳:你可以获得一名其他角色的至多两张手牌。若以此法移动的牌包含【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。';
},
zhiren:function(player){
- return '当你于'+(player.hasSkill('yaner_zhiren')?'一':'你的')+'回合内使用第一张红色牌时,你可依次执行以下选项中的前X项:①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。(X为此牌的名称的字数)';
+ return '当你于'+(player.hasSkill('yaner_zhiren')?'一':'你的')+'回合内使用第一张非转化牌时,你可依次执行以下选项中的前X项:①卜算X。②可弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。(X为此牌的名称的字数)';
},
cuijian:function(player){
return '出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中:有【闪】,其将装备区内的防具牌和所有【闪】交给你,然后你交给其'+(player.hasMark('tongyuan_tao')?'一张':'等量的')+'牌;没有【闪】,你'+(player.hasMark('tongyuan_wuxie')?'摸一张':'弃置一张手')+'牌。';
@@ -9631,7 +9595,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangji:['zhangji','ns_zhangji'],
zhangchangpu:['ol_zhangchangpu','zhangchangpu'],
huangfusong:['huangfusong','old_huangfusong'],
- wenyang:['wenyang','diy_wenyang'],
+ wenyang:['wenyang','db_wenyang','diy_wenyang'],
dingyuan:['ol_dingyuan','dingyuan'],
quyi:['quyi','re_quyi'],
hansui:['xin_hansui','re_hansui'],
@@ -10149,7 +10113,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reqingcheng_info:'出牌阶段限一次,你可以与一名手牌数小于你的男性角色交换手牌。',
re_panshu:'潘淑',
zhiren:'织纴',
- zhiren_info:'当你于你的回合内使用第一张红色牌时,你可依次执行以下选项中的前X项:①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。(X为此牌的名称的字数)',
+ zhiren_info:'当你于你的回合内使用第一张非转化牌时,你可依次执行以下选项中的前X项:①卜算X。②可弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。(X为此牌的名称的字数)',
yaner:'燕尔',
yaner_info:'每回合限一次。当有其他角色于其出牌阶段内失去手牌后,若其没有手牌,则你可以与其各摸两张牌。若其以此法摸得的两张牌类型相同,则其回复1点体力。若你以此法摸得的两张牌类型相同,则你将〖织纴〗中的“你的回合内”改为“一回合内”。',
caoanmin:'曹安民',
diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js
index 9b7a9564a..83948b1ef 100755
--- a/character/xinghuoliaoyuan.js
+++ b/character/xinghuoliaoyuan.js
@@ -880,8 +880,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
expose:0.5,
},
},
+ xinfu_gongqing_gz_panjun:{audio:2},
"xinfu_gongqing":{
audio:true,
+ audioname2:{gz_panjun:'xinfu_gongqing_gz_panjun'},
trigger:{
player:["damageBegin3","damageBegin4"],
},
diff --git a/character/yijiang.js b/character/yijiang.js
index 2c5bcd7bb..b6ea3fbf4 100755
--- a/character/yijiang.js
+++ b/character/yijiang.js
@@ -191,7 +191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
liuchen:['liushan'],
yujin:['xiahoudun'],
fazheng:['liubei'],
- zhonghui:['jiangwei','dengai'],
+ zhonghui:['jiangwei'],
},
skill:{
rejingce:{
@@ -9081,24 +9081,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0"
player.chooseTarget(get.prompt2('chanhui'),function(card,player,target){
if(player==target) return false;
- var trigger=_status.event;
- return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false;
+ var evt=_status.event.getTrigger();
+ return !evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return get.effect(target,trigger.card,player,player)+0.01;
- }).set('targets',trigger.targets).set('card',trigger.card);
+ });
"step 1"
if(result.bool){
- game.delay(0,200);
event.target=result.targets[0];
}
else{
event.finish();
}
"step 2"
- game.delay();
- player.addSkill('chanhui2');
+ player.addTempSkill('chanhui2');
player.logSkill('chanhui',event.target);
event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+
get.translation(trigger.card)+'的额外目标').set('ai',function(card){
@@ -9199,15 +9197,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
- chanhui2:{
- trigger:{player:'phaseJieshuBegin'},
- forced:true,
- popup:false,
- audio:false,
- content:function(){
- player.removeSkill('chanhui2');
- }
- },
+ chanhui2:{},
quanji:{
audio:2,
trigger:{player:'damageEnd'},
@@ -12154,7 +12144,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hanhaoshihuan:['re_hanhaoshihuan','hanhaoshihuan'],
caozhen:['re_caozhen','caozhen','old_caozhen'],
wuyi:['re_wuyi','wuyi'],
- sunluban:['re_sunluban','sunluban'],
+ sunluban:['re_sunluban','xin_sunluban','sunluban'],
zhuhuan:['zhuhuan','old_zhuhuan'],
caoxiu:['re_caoxiu','caoxiu','old_caoxiu'],
//xiahoushi:['xiahoushi','sp_xiahoushi'],
diff --git a/game/asset.js b/game/asset.js
index 27c4b9ed4..67d105047 100644
--- a/game/asset.js
+++ b/game/asset.js
@@ -1,5 +1,5 @@
window.noname_asset_list=[
- 'v1.9.110.9.2.3',
+ 'v1.9.110.9.3',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@@ -778,6 +778,18 @@ window.noname_asset_list=[
'audio/die/re_panshu.mp3',
'audio/die/xin_zhonghui.mp3',
'audio/die/zhanghu.mp3',
+ 'audio/die/db_wenyang.mp3',
+ 'audio/die/gz_panjun.mp3',
+ 'audio/die/gz_pengyang.mp3',
+ 'audio/die/gz_wenqin.mp3',
+ 'audio/die/gz_xf_sufei.mp3',
+ 'audio/die/gz_xiahouba.mp3',
+ 'audio/die/gz_xuyou.mp3',
+ 'audio/die/gz_zhonghui.mp3',
+ 'audio/die/gz_zhuling.mp3',
+ 'audio/die/qiaozhou.mp3',
+ 'audio/die/shen_xunyu.mp3',
+ 'audio/die/xin_sunluban.mp3',
'audio/skill/decadezishou1.mp3',
'audio/skill/decadezishou2.mp3',
@@ -3492,6 +3504,58 @@ window.noname_asset_list=[
'audio/skill/yaner2.mp3',
'audio/skill/zhiren1.mp3',
'audio/skill/zhiren2.mp3',
+ 'audio/skill/daming1.mp3',
+ 'audio/skill/daming2.mp3',
+ 'audio/skill/dbchongjian1.mp3',
+ 'audio/skill/dbchongjian2.mp3',
+ 'audio/skill/dbchoujue1.mp3',
+ 'audio/skill/dbchoujue2.mp3',
+ 'audio/skill/dbquedi1.mp3',
+ 'audio/skill/dbquedi2.mp3',
+ 'audio/skill/dbzhuifeng1.mp3',
+ 'audio/skill/dbzhuifeng2.mp3',
+ 'audio/skill/dinghan1.mp3',
+ 'audio/skill/dinghan2.mp3',
+ 'audio/skill/gzbaolie1.mp3',
+ 'audio/skill/gzbaolie2.mp3',
+ 'audio/skill/gzchenglve1.mp3',
+ 'audio/skill/gzchenglve2.mp3',
+ 'audio/skill/gzcongcha1.mp3',
+ 'audio/skill/gzcongcha2.mp3',
+ 'audio/skill/gzfangyuan1.mp3',
+ 'audio/skill/gzfangyuan2.mp3',
+ 'audio/skill/gzjinfa1.mp3',
+ 'audio/skill/gzjinfa2.mp3',
+ 'audio/skill/gzjuejue1.mp3',
+ 'audio/skill/gzjuejue2.mp3',
+ 'audio/skill/gzlianpian1.mp3',
+ 'audio/skill/gzlianpian2.mp3',
+ 'audio/skill/gzpaiyi1.mp3',
+ 'audio/skill/gzpaiyi2.mp3',
+ 'audio/skill/gzquanji1.mp3',
+ 'audio/skill/gzquanji2.mp3',
+ 'audio/skill/gzshicai1.mp3',
+ 'audio/skill/gzshicai2.mp3',
+ 'audio/skill/lingce1.mp3',
+ 'audio/skill/lingce2.mp3',
+ 'audio/skill/shuchen1.mp3',
+ 'audio/skill/shuchen2.mp3',
+ 'audio/skill/tianzuo1.mp3',
+ 'audio/skill/tianzuo2.mp3',
+ 'audio/skill/xiaoni1.mp3',
+ 'audio/skill/xiaoni2.mp3',
+ 'audio/skill/xinfu_gongqing_gz_panjun1.mp3',
+ 'audio/skill/xinfu_gongqing_gz_panjun2.mp3',
+ 'audio/skill/xingbu1.mp3',
+ 'audio/skill/xingbu2.mp3',
+ 'audio/skill/xinjiaojin1.mp3',
+ 'audio/skill/xinjiaojin2.mp3',
+ 'audio/skill/xinzenhui1.mp3',
+ 'audio/skill/xinzenhui2.mp3',
+ 'audio/skill/yuanqing1.mp3',
+ 'audio/skill/yuanqing2.mp3',
+ 'audio/skill/zhiming1.mp3',
+ 'audio/skill/zhiming2.mp3',
'audio/voice/male/0.mp3',
'audio/voice/male/1.mp3',
@@ -3984,6 +4048,8 @@ window.noname_asset_list=[
'image/card/binglinchengxia.png',
'image/card/luojingxiashi.png',
'image/card/toushiche.png',
+ 'image/card/kano_paibingbuzhen.png',
+ 'image/card/qizhengxiangsheng.png',
'image/character/shenpei.jpg',
'image/character/re_menghuo.jpg',
@@ -4423,6 +4489,18 @@ window.noname_asset_list=[
'image/character/re_jiaxu.jpg',
'image/character/tw_zhaoxiang.jpg',
'image/character/yuejiu.jpg',
+ 'image/character/db_wenyang.jpg',
+ 'image/character/gz_panjun.jpg',
+ 'image/character/gz_pengyang.jpg',
+ 'image/character/gz_wenqin.jpg',
+ 'image/character/gz_xf_sufei.jpg',
+ 'image/character/gz_xuyou.jpg',
+ 'image/character/gz_zhonghui.jpg',
+ 'image/character/gz_zhuling.jpg',
+ 'image/character/qiaozhou.jpg',
+ 'image/character/shen_xunyu.jpg',
+ 'image/character/xin_caozhen.jpg',
+ 'image/character/xin_sunluban.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',
diff --git a/game/game.js b/game/game.js
index 6b8ed32a2..5fcdb07f2 100644
--- a/game/game.js
+++ b/game/game.js
@@ -10348,6 +10348,18 @@
pss_scissor_info:'石头剪刀布时的一种手势。克制布,但被石头克制。',
pss_stone_info:'石头剪刀布时的一种手势。克制剪刀,但被布克制。',
renku:'仁库',
+ group_wei:"魏势力",
+ group_shu:"蜀势力",
+ group_wu:"吴势力",
+ group_qun:"群势力",
+ group_key:"键势力",
+ group_jin:"晋势力",
+ group_wei_bg:"魏",
+ group_shu_bg:"蜀",
+ group_wu_bg:"吴",
+ group_qun_bg:"群",
+ group_key_bg:"键",
+ group_jin_bg:"晋",
},
element:{
content:{
@@ -10665,7 +10677,7 @@
if(_status.renku.length>6){
var cards=_status.renku.splice(0,_status.renku.length-6);
game.log(cards,'从仁库进入了弃牌堆');
- game.cardsDiscard(cards).fromRenku=true;
+ game.cardsDiscard(cards).set('outRange',true).fromRenku=true;
}
game.updateRenku();
}
@@ -15492,7 +15504,7 @@
if(_status.renku.length>6){
var cards=_status.renku.splice(0,_status.renku.length-6);
game.log(cards,'从仁库进入了弃牌堆');
- game.cardsDiscard(cards).fromRenku=true;
+ game.cardsDiscard(cards).set('outRange',true).fromRenku=true;
}
game.updateRenku();
}
@@ -16476,9 +16488,11 @@
canSave:function(target){
var player=this;
if(player.hasSkillTag('save',true,target,true)) return true;
+ var name={},hs=player.getCards('hs');
+ for(var i of hs) name[get.name(i)]=true;
for(var i in lib.card){
- if(lib.inpile.contains(i)||player.countCards('hs',i)){
- if(lib.card[i].savable&&lib.filter.cardSavable({name:i},player,target)&&(_status.connectMode||player.hasUsableCard(i))) return true;
+ if(lib.card[i].savable&&(lib.inpile.contains(i)||name[i])){
+ if(lib.filter.cardSavable({name:i},player,target)&&(_status.connectMode||player.hasUsableCard(i))) return true;
}
}
return false;
@@ -24755,7 +24769,12 @@
getTrigger:function(){
return this.getParent()._trigger;
},
- getRand:function(){
+ getRand:function(name){
+ if(name){
+ if(!this._rand_map) this._rand_map={};
+ if(!this._rand_map[name]) this._rand_map[name]=Math.random();
+ return this._rand_map[name];
+ }
if(!this._rand) this._rand=Math.random();
return this._rand;
},
@@ -25565,6 +25584,12 @@
subtype:"equip5",
},
disable_judge:{},
+ group_wei:{fullskin:true},
+ group_shu:{fullskin:true},
+ group_wu:{fullskin:true},
+ group_qun:{fullskin:true},
+ group_key:{fullskin:true},
+ group_jin:{fullskin:true},
},
filter:{
all:function(){
@@ -43029,7 +43054,7 @@
var bool1=false;
var bool2=false;
var bool3=(get.mode()=='guozhan'&&_status.forceKey!=true&&get.config('onlyguozhan'));
- var bool4=(get.mode()!='guozhan');
+ var bool4=false;
for(var i in lib.character){
if(lib.character[i][1]=='shen'){
bool1=true;
@@ -43042,7 +43067,7 @@
}
if(bool1) groups.add('shen');
if(bool2&&!bool3) groups.add('key');
- if(bool4&&get.mode()=='guozhan') groups.add('double');
+ if(bool4) groups.add('double');
var natures=['water','soil','wood','metal'];
var span=document.createElement('span');
newlined.appendChild(span);
@@ -49247,7 +49272,7 @@
return false;
},
double:function(name,array){
- if(!lib.character[name]||!lib.character[name][4]||name.indexOf('gz_')!=0) return false;
+ if(!lib.character[name]||!lib.character[name][4]||name.indexOf('gz_')!=0&&name.indexOf('db_')!=0) return false;
for(var i of lib.character[name][4]){
if(i.indexOf('doublegroup:')==0){
if(!array) return true;
diff --git a/game/update.js b/game/update.js
index b35a03d28..8f74e2fe1 100644
--- a/game/update.js
+++ b/game/update.js
@@ -1,9 +1,9 @@
window.noname_update={
- version:'1.9.110.9.2.3',
- update:'1.9.110.9.2.2',
+ version:'1.9.110.9.3',
+ update:'1.9.110.9.2.3',
changeLog:[
- '界鲁肃、界贾诩',
- '海外服赵襄',
+ '神荀彧、文鸯、手杀孙鲁班、手杀曹真',
+ '国战双势力修正',
'bug修复',
],
files:[
@@ -20,8 +20,8 @@ window.noname_update={
//'card/yingbian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
- //'character/diy.js',
- //'character/extra.js',
+ 'character/diy.js',
+ 'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
@@ -35,13 +35,13 @@ window.noname_update={
'character/refresh.js',
'character/shenhua.js',
'character/sp.js',
- //'character/sp2.js',
+ 'character/sp2.js',
'character/tw.js',
'character/standard.js',
//'character/swd.js',
//'character/xianjian.js',
- //'character/xinghuoliaoyuan.js',
- 'character/yingbian.js',
+ 'character/xinghuoliaoyuan.js',
+ //'character/yingbian.js',
'character/yijiang.js',
//'character/yxs.js',
//'extension/boss/extension.js',
@@ -49,14 +49,15 @@ window.noname_update={
//'layout/newlayout/global.css',
//'layout/default/menu.css',
//'layout/nova/layout.css',
+ 'layout/mobile/equip.css',
//'mode/boss.js',
//'mode/brawl.js',
- 'mode/chess.js',
+ //'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
'mode/guozhan.js',
- //'mode/identity.js',
- 'mode/single.js',
+ 'mode/identity.js',
+ //'mode/single.js',
//'mode/stone.js',
//'mode/tafang.js',
//'mode/versus.js',
diff --git a/image/card/kano_paibingbuzhen.png b/image/card/kano_paibingbuzhen.png
new file mode 100644
index 000000000..d7451ce91
Binary files /dev/null and b/image/card/kano_paibingbuzhen.png differ
diff --git a/image/card/qizhengxiangsheng.png b/image/card/qizhengxiangsheng.png
new file mode 100644
index 000000000..8bb4159c9
Binary files /dev/null and b/image/card/qizhengxiangsheng.png differ
diff --git a/image/character/db_wenyang.jpg b/image/character/db_wenyang.jpg
new file mode 100644
index 000000000..781c65542
Binary files /dev/null and b/image/character/db_wenyang.jpg differ
diff --git a/image/character/gz_panjun.jpg b/image/character/gz_panjun.jpg
new file mode 100644
index 000000000..e7853f8b9
Binary files /dev/null and b/image/character/gz_panjun.jpg differ
diff --git a/image/character/gz_pengyang.jpg b/image/character/gz_pengyang.jpg
new file mode 100644
index 000000000..2b99dffe6
Binary files /dev/null and b/image/character/gz_pengyang.jpg differ
diff --git a/image/character/gz_wenqin.jpg b/image/character/gz_wenqin.jpg
new file mode 100644
index 000000000..fc1a26f65
Binary files /dev/null and b/image/character/gz_wenqin.jpg differ
diff --git a/image/character/gz_xf_sufei.jpg b/image/character/gz_xf_sufei.jpg
new file mode 100644
index 000000000..5aabd8036
Binary files /dev/null and b/image/character/gz_xf_sufei.jpg differ
diff --git a/image/character/gz_xuyou.jpg b/image/character/gz_xuyou.jpg
new file mode 100644
index 000000000..8d9cf6f15
Binary files /dev/null and b/image/character/gz_xuyou.jpg differ
diff --git a/image/character/gz_zhonghui.jpg b/image/character/gz_zhonghui.jpg
new file mode 100644
index 000000000..945c6fe1f
Binary files /dev/null and b/image/character/gz_zhonghui.jpg differ
diff --git a/image/character/gz_zhuling.jpg b/image/character/gz_zhuling.jpg
new file mode 100644
index 000000000..608598515
Binary files /dev/null and b/image/character/gz_zhuling.jpg differ
diff --git a/image/character/qiaozhou.jpg b/image/character/qiaozhou.jpg
new file mode 100644
index 000000000..a793eb953
Binary files /dev/null and b/image/character/qiaozhou.jpg differ
diff --git a/image/character/shen_xunyu.jpg b/image/character/shen_xunyu.jpg
new file mode 100644
index 000000000..741db2c59
Binary files /dev/null and b/image/character/shen_xunyu.jpg differ
diff --git a/image/character/xin_caozhen.jpg b/image/character/xin_caozhen.jpg
new file mode 100644
index 000000000..f559ea549
Binary files /dev/null and b/image/character/xin_caozhen.jpg differ
diff --git a/image/character/xin_sunluban.jpg b/image/character/xin_sunluban.jpg
new file mode 100644
index 000000000..d934b581e
Binary files /dev/null and b/image/character/xin_sunluban.jpg differ
diff --git a/layout/mobile/equip.css b/layout/mobile/equip.css
index e5888c191..1d362f0b3 100644
--- a/layout/mobile/equip.css
+++ b/layout/mobile/equip.css
@@ -79,11 +79,11 @@
display:none;
}
-#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
+/*#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
#arena.chess .player.unseen .equips>.card{
background:none;
- /*border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;*/
+ border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
@@ -94,7 +94,7 @@
.player:not([data-position='0']).unseen .equips>.card:first-child,
#arena.chess .player.unseen .equips>.card:first-child{
border-image:linear-gradient(transparent,transparent);
-}
+}*/
.player:not([data-position='0']) .equips>.card.selected,
#arena.chess .player .equips>.card.selected{
background:linear-gradient(to right,rgba(0, 133, 255,0.3),transparent),
diff --git a/mode/guozhan.js b/mode/guozhan.js
index 848d5be9e..809533175 100644
--- a/mode/guozhan.js
+++ b/mode/guozhan.js
@@ -253,7 +253,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
aozhanRank:{
- '8':[],
+ '8':['gz_panjun'],
'7':[],
'6':[],
'5':[
@@ -298,7 +298,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
'gz_lingtong','gz_sunshangxiang','gz_sunce',
'gz_re_yuanshao','gz_yuanshu','gz_hetaihou',
'gz_jin_simashi','gz_sp_duyu','gz_shibao',
- 'gz_gongsunyuan',
+ 'gz_gongsunyuan','gz_panjun',
],
'6':[
'gz_zhenji','gz_guojia','gz_yujin',
@@ -344,7 +344,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
'gz_menghuo','gz_ganfuren','gz_guanyu',
'gz_lukang','gz_jiangqing','gz_chendong',
'gz_zoushi','gz_panfeng','gz_tianfeng',
- 'gz_panjun','gz_sufei',
+ 'gz_sufei',
],
},
characterSort:{
@@ -356,7 +356,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
guozhan_quan:["gz_cuimao","gz_yujin","gz_wangping","gz_fazheng","gz_wuguotai","gz_lukang","gz_yuanshu","gz_zhangxiu"],
guozhan_jun:["gz_jun_caocao","gz_jun_sunquan","gz_jun_liubei","gz_jun_zhangjiao"],
guozhan_jin:['gz_jin_simayi','gz_jin_simazhao','gz_jin_simashi','gz_jin_zhangchunhua','gz_jin_wangyuanji','gz_jin_xiahouhui','gz_duyu','gz_zhanghuyuechen','gz_jin_yanghuiyu','gz_simazhou','gz_shibao','gz_weiguan','gz_zhongyan'],
- guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_wenpin'],
+ guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_zhuling'],
guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'],
guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan'],
guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi'],
@@ -380,7 +380,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_shibing1key:['male','key',0,[],['unseen']],
gz_shibing2key:['female','key',0,[],['unseen']],
- gz_zhonghui:['male','ye',4,['gzquanji','gzpaiyi']],
+ gz_zhonghui:['male','ye',4,['gzquanji','gzpaiyi'],['gzskin']],
gz_simazhao:['male','ye',3,['gzzhaoxin','gzsuzhi']],
gz_gongsunyuan:['male','ye',4,['gzhuaiyi','gzzisui']],
gz_tangzi:['male','wu',4,['gzxingzhao'],['doublegroup:wu:wei','gzskin']],
@@ -393,16 +393,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_re_xushu:['male','shu',4,['gzzhuhai','gzpozhen','gzjiancai'],['gzskin']],
gz_wujing:['male','wu',4,['donggui','fengyang'],['gzskin']],
gz_yanbaihu:['male','qun',4,['gzzhidao','gzyjili'],['gzskin']],
- gz_xuyou:['male','wei',3,['gzchenglve','gzshicai'],['doublegroup:wei:qun']],
+ gz_xuyou:['male','wei',3,['gzchenglve','gzshicai'],['doublegroup:wei:qun','gzskin']],
gz_xiahouba:['male','shu',4,['gzbaolie'],['doublegroup:shu:wei','gzskin']],
- gz_panjun:['male','wu',3,['gzguanwei','xinfu_gongqing'],['doublegroup:wu:shu']],
+ gz_panjun:['male','wu',3,['gzcongcha','xinfu_gongqing'],['doublegroup:wu:shu','gzskin']],
gz_huangzu:['male','qun',4,['gzwangong']],
gz_zhugeke:['male','wu',3,['aocai','gzduwu']],
- gz_wenqin:['male','wei',4,['gzyaoqi'],['doublegroup:wei:wu']],
- gz_xf_sufei:['male','wu',4,['gzlianpian'],['doublegroup:wu:qun']],
+ gz_wenqin:['male','wei',4,['gzjinfa'],['doublegroup:wei:wu','gzskin']],
+ gz_xf_sufei:['male','wu',4,['gzlianpian'],['doublegroup:wu:qun','gzskin']],
gz_liuba:['male','shu',3,['chouduo','guiyin']],
- gz_pengyang:['male','shu',3,['jianni','xiaoba'],['doublegroup:shu:qun']],
- gz_wenpin:['male','wei',4,['gzzhenwei','gzyulin']],
+ gz_pengyang:['male','shu',3,['daming','xiaoni'],['doublegroup:shu:qun','gzskin']],
+ gz_zhuling:['male','wei',4,['gzjuejue','gzfangyuan'],['gzskin']],
gz_caocao:['male','wei',4,['jianxiong']],
gz_simayi:['male','wei',3,['fankui','guicai']],
@@ -677,8 +677,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
}
},
- //文聘
- gzzhenwei:{
+ //朱灵
+ gzjuejue:{
+ audio:2,
trigger:{player:'phaseDiscardBegin'},
check:function(event,player){
return player.hp>2&&player.needsToDiscard()>0&&game.countPlayer(function(current){
@@ -686,7 +687,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
})>game.countPlayer()/2;
},
content:function(){
- player.addTempSkill('gzzhenwei_effect');
+ player.addTempSkill('gzjuejue_effect');
player.loseHp();
},
subSkill:{
@@ -710,11 +711,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.targets=game.filterPlayer(function(current){
return current!=player;
}).sortBySeat();
+ player.line(event.targets,'green');
'step 1'
var target=targets.shift();
event.target=target;
if(target.isIn()){
- player.line(target,'green');
+ target.animate('target');
target.chooseCard('h',num,'将'+get.cnNumber(num)+'张牌置入弃牌堆,或受到1点伤害').set('ai',function(card){
var evt=_status.event.getParent();
if(get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0;
@@ -743,7 +745,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
},
- gzyulin:{
+ gzfangyuan:{
+ audio:2,
trigger:{player:'phaseJieshuBegin'},
zhenfa:'siege',
direct:true,
@@ -758,9 +761,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var list=game.filterPlayer(function(current){
return player.sieged(current)&&player.canUse('sha',current,false);
});
- if(player.hasSkill('gzyulin')){
+ if(player.hasSkill('gzfangyuan')){
if(list.length==1) event._result={bool:true,targets:list};
- else player.chooseTarget('鱼鳞:视为对一名围攻你的角色使用【杀】',function(card,player,target){
+ else player.chooseTarget('方圆:视为对一名围攻你的角色使用【杀】',function(card,player,target){
return _status.event.list.contains(target);
},true).set('list',list).set('ai',function(target){
var player=_status.event.player;
@@ -768,7 +771,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
});
}
else{
- player.chooseTarget(get.prompt('gzyulin'),'视为对一名围攻你的角色使用【杀】',function(card,player,target){
+ player.chooseTarget(get.prompt('gzfangyuan'),'视为对一名围攻你的角色使用【杀】',function(card,player,target){
return _status.event.list.contains(target);
}).set('list',list).set('ai',function(target){
var player=_status.event.player;
@@ -777,10 +780,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
'step 1'
if(result.bool){
- player.useCard({name:'sha',isCard:true},result.targets[0],'gzyulin',false);
+ player.useCard({name:'sha',isCard:true},result.targets[0],'gzfangyuan',false);
}
},
- global:'gzyulin_siege',
+ global:'gzfangyuan_siege',
subSkill:{
siege:{
mod:{
@@ -792,12 +795,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(siege.length){
siege.push(player);
num+=siege.filter(function(source){
- return source.hasSkill('gzyulin');
+ return source.hasSkill('gzfangyuan');
}).length;
}
if(player.sieged()){
- if(next.hasSkill('gzyulin')) num--;
- if(prev.hasSkill('gzyulin')) num--;
+ if(next.hasSkill('gzfangyuan')) num--;
+ if(prev.hasSkill('gzfangyuan')) num--;
}
return num;
},
@@ -806,14 +809,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
//彭羕
- jianni:{
+ daming:{
+ audio:2,
trigger:{global:'phaseUseBegin'},
direct:true,
filter:function(event,player){
if(!player.isFriendOf(event.player)||!game.hasPlayer(function(current){
return !current.isLinked();
})) return false;
- if(_status.connectMode&&player.hasSkill('jianni')) return player.countCards('h')>0;
+ if(_status.connectMode&&player.hasSkill('daming')) return player.countCards('h')>0;
return player.countCards('h',function(card){
return get.type2(card,player)=='trick';
});
@@ -821,10 +825,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
player.chooseCardTarget({
- prompt:get.prompt('jianni'),
+ prompt:get.prompt('daming'),
prompt2:'弃置一张锦囊牌并选择要横置的角色',
filterCard:function(card,player){
- return get.type2(card,player)=='trick'&&lib.filter.cardDiscardable(card,player,'jianni');
+ return get.type2(card,player)=='trick'&&lib.filter.cardDiscardable(card,player,'daming');
},
filterTarget:function(card,player,target){
return !target.isLinked();
@@ -853,7 +857,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(result.bool){
var target=result.targets[0];
event.target=target;
- player.logSkill('jianni',target);
+ player.logSkill('daming',target);
player.discard(result.cards);
}
else event.finish();
@@ -925,11 +929,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
else player.useCard({name:'tao',isCard:true},trigger.player);
},
},
- xiaoba:{
- trigger:{global:'useCard'},
+ xiaoni:{
+ audio:2,
+ trigger:{
+ player:'useCard',
+ target:'useCardToTargeted',
+ },
forced:true,
filter:function(event,player){
- if(player!=event.player&&!event.targets.contains(player)) return false;
var type=get.type2(event.card);
if(type!='basic'&&type!='trick') return false;
var list=game.filterPlayer(function(current){
@@ -944,9 +951,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
check:()=>false,
content:function(){
- trigger.directHit.addArray(game.players);
+ if(trigger.name=='useCard') trigger.directHit.addArray(game.players);
+ else trigger.directHit.add(player);
},
- global:'xiaoba_ai',
+ global:'xiaoni_ai',
ai:{
halfneg:true,
directHit_ai:true,
@@ -980,14 +988,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var type=get.type2(arg.card);
if(type!='basic'&&type!='trick') return false;
var player;
- if(arg.target&&arg.target.hasSkill('xiaoba')) player=arg.target;
- else{
- var list=ui.selected.targets.filter(function(target){
- return target.hasSkill('xiaoba');
- });
- if(list.length) player=list[0];
- else return false;
- }
+ if(arg.target&&arg.target.hasSkill('xiaoni')) player=arg.target;
+ else return false;
var list=game.filterPlayer(function(current){
return current!=player&¤t.isFriendOf(player);
});
@@ -1010,6 +1012,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//刘巴
chouduo:{
+ audio:2,
trigger:{global:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
@@ -1035,6 +1038,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
guiyin:{
+ audio:2,
enable:'phaseUse',
limited:true,
delay:false,
@@ -1115,6 +1119,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//苏飞
gzlianpian:{
+ audio:2,
trigger:{global:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
@@ -1287,7 +1292,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
//文钦
- gzyaoqi:{
+ gzjinfa:{
+ audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
@@ -1309,7 +1315,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return 5-get.value(card);
}).set('goon',target.canUse('sha',player,false)&&get.effect(player,{name:'sha'},target,target)>0);
'step 1'
- if(!result.bool) player.gainPlayerCard(target,'he',true);
+ if(!result.bool){
+ player.gainPlayerCard(target,'he',true);
+ event.finish();
+ }
else player.gain(result.cards,target,'give');
'step 2'
if(result.bool&&result.cards&&result.cards.length&&
@@ -1595,8 +1604,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
//潘濬
- gzguanwei:{
- audio:'xinfu_guanwei',
+ gzcongcha:{
+ audio:2,
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
filter:function(event,player){
@@ -1604,9 +1613,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return current!=player&¤t.isUnseen();
})
},
+ prompt2:'选择一名武将牌均暗置的其他角色',
content:function(){
'step 0'
- player.chooseTarget(get.prompt2('gzguanwei'),function(card,player,target){
+ player.chooseTarget(get.prompt2('gzcongcha'),function(card,player,target){
return target!=player&&target.isUnseen();
}).set('ai',function(target){
if(get.attitude(_status.event.player,target)>0) return Math.random()+Math.sqrt(target.hp);
@@ -1615,15 +1625,33 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
'step 1'
if(result.bool){
var target=result.targets[0];
- player.logSkill('gzguanwei',target);
- player.storage.gzguanwei2=target;
- player.addTempSkill('gzguanwei2',{player:'phaseBegin'});
- target.addSkill('gzguanwei_ai');
+ player.logSkill('gzcongcha',target);
+ player.storage.gzcongcha2=target;
+ player.addTempSkill('gzcongcha2',{player:'phaseBegin'});
+ target.addSkill('gzcongcha_ai');
game.delayx();
}
},
+ subfrequent:['draw'],
+ group:'gzcongcha_draw',
+ subSkill:{
+ draw:{
+ audio:'gzcongcha',
+ trigger:{player:'phaseDrawBegin2'},
+ frequent:true,
+ filter:function(event,player){
+ return !event.numFixed&&!game.hasPlayer(function(current){
+ return current.isUnseen();
+ });
+ },
+ prompt:'是否发动【聪察】多摸两张牌?',
+ content:function(){
+ trigger.num+=2;
+ },
+ },
+ },
},
- gzguanwei_ai:{
+ gzcongcha_ai:{
charlotte:true,
ai:{
mingzhi_yes:true,
@@ -1633,30 +1661,30 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var group=lib.character[player.name1][1];
if(tag=='mingzhi_yes'){
if(group!='ye'&&player.wontYe(group)&&game.hasPlayer(function(current){
- return current.storage.gzguanwei2==player&¤t.identity==group;
+ return current.storage.gzcongcha2==player&¤t.identity==group;
})) return true;
return false;
}
if(group=='ye'&&!player.wontYe(group)) return true;
return game.hasPlayer(function(current){
- return current.storage.gzguanwei2==player&¤t.identity!=group;
+ return current.storage.gzcongcha2==player&¤t.identity!=group;
})
},
},
},
- gzguanwei2:{
+ gzcongcha2:{
trigger:{global:'showCharacterAfter'},
forced:true,
charlotte:true,
onremove:true,
filter:function(event,player){
- return event.player==player.storage.gzguanwei2;
+ return event.player==player.storage.gzcongcha2;
},
logTarget:'player',
content:function(){
'step 0'
- player.removeSkill('gzguanwei2');
- trigger.player.removeSkill('gzguanwei_ai');
+ player.removeSkill('gzcongcha2');
+ trigger.player.removeSkill('gzcongcha_ai');
if(player.isFriendOf(trigger.player)) game.asyncDraw([player,trigger.player].sortBySeat(_status.currentPhase),2);
else trigger.player.loseHp();
'step 1'
@@ -1776,6 +1804,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//夏侯霸
gzbaolie:{
+ audio:2,
mod:{
targetInRange:function(card,player,target){
if(card.name=='sha'&&target.hp>=player.hp) return true;
@@ -1784,7 +1813,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(card.name=='sha'&&target.hp>=player.hp) return true;
},
},
- audio:'baobian',
trigger:{player:'phaseUseBegin'},
forced:true,
filter:function(event,player){
@@ -1826,55 +1854,42 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//许攸
gzchenglve:{
- audio:'nzry_chenglve',
- trigger:{global:'useCardToPlayered'},
+ audio:2,
+ trigger:{global:'useCardAfter'},
filter:function(event,player){
- return event.isFirstTarget&&event.targets.length>1
- &&event.player.isIn()&&event.player.isFriendOf(player);
+ return event.targets.length>1&&event.player.isIn()&&event.player.isFriendOf(player);
},
logTarget:'player',
check:function(event,player){
return get.attitude(player,event.player)>0;
},
content:function(){
- trigger.getParent().gzchenglve_buffed=true;
+ 'step 0'
trigger.player.draw();
- player.addTempSkill('gzchenglve_effect');
- },
- subSkill:{
- effect:{
- trigger:{global:'useCardAfter'},
- forced:true,
- charlotte:true,
- popup:false,
- filter:function(event,player){
- return event.gzchenglve_buffed==true&&player.getHistory('damage',function(evt){
- return evt.card==event.card;
- }).length>0&&game.hasPlayer(function(current){
- return current.isFriendOf(player)&&!current.hasMark('yinyang_mark');
- })
- },
- content:function(){
- 'step 0'
- player.chooseTarget('是否令一名己方角色获得“阴阳鱼”标记?',function(card,player,target){
- return target.isFriendOf(player)&&!target.hasMark('yinyang_mark');
- }).set('ai',function(target){
- return get.attitude(_status.event.player,target)*Math.sqrt(1+target.needsToDiscard());
- });
- 'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('gzchenglve_effect',target);
- target.addMark('yinyang_mark',1,false);
- game.delayx();
- }
- },
- },
+ if(player.hasHistory('damage',function(evt){
+ return evt.card==trigger.card;
+ })&&game.hasPlayer(function(current){
+ return current.isFriendOf(player)&&!current.hasMark('yinyang_mark');
+ })){
+ player.chooseTarget('是否令一名己方角色获得“阴阳鱼”标记?',function(card,player,target){
+ return target.isFriendOf(player)&&!target.hasMark('yinyang_mark');
+ }).set('ai',function(target){
+ return get.attitude(_status.event.player,target)*Math.sqrt(1+target.needsToDiscard());
+ });
+ }
+ else event.finish();
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ player.line(target,'green');
+ target.addMark('yinyang_mark',1,false);
+ game.delayx();
+ }
},
},
gzshicai:{
- audio:'nzry_shicai',
- trigger:{player:'damage'},
+ audio:2,
+ trigger:{player:'damageEnd'},
forced:true,
filter:function(event,player){
return event.num==1||player.countCards('h')>0;
@@ -10472,19 +10487,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzweimeng_info:'出牌阶段限一次,你可以获得一名其他角色的至多X张手牌,然后交给其等量的牌(X为你的体力值)。',
gzweimeng_zongheng:'危盟·纵横',
gzweimeng_zongheng_info:'出牌阶段限一次,你可以获得一名其他角色的一张手牌,然后交给其一张牌。',
- gzzhenwei:'镇卫',
- gzzhenwei_info:'①弃牌阶段开始时,你可失去1点体力。然后若你于此阶段内弃置过你的牌,则你令其他角色各选择一项:1.将X张手牌置入弃牌堆(X为你于此阶段内弃置过的牌数);2.受到你造成的1点伤害。②你杀死与你势力相同的角色不执行奖惩。 ',
- gzyulin:'鱼鳞',
- gzyulin_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1;②是被围攻角色,则结束阶段开始时,你视为对一名围攻角色使用【杀】。',
- jianni:'谏逆',
- jianni_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名角色并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①视为对A使用一张【桃】;②令A视为对由你选择的另一名角色使用一张雷【杀】。',
- xiaoba:'嚣跋',
- xiaoba_info:'锁定技,当你使用或被使用基本牌或普通锦囊牌时,若有其他与你势力相同的角色且这些角色的手牌数均不大于你,则此牌不可被响应。',
+ gzjuejue:'决绝',
+ gzjuejue_info:'①弃牌阶段开始时,你可失去1点体力。然后若你于此阶段内弃置过你的牌,则你令其他角色各选择一项:1.将X张手牌置入弃牌堆(X为你于此阶段内弃置过的牌数);2.受到你造成的1点伤害。②你杀死与你势力相同的角色不执行奖惩。 ',
+ gzfangyuan:'方圆',
+ gzfangyuan_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1;②是被围攻角色,则结束阶段开始时,你视为对一名围攻角色使用【杀】。',
+ daming:'达命',
+ daming_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名角色并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①视为对A使用一张【桃】;②令A视为对由你选择的另一名角色使用一张雷【杀】。',
+ xiaoni:'嚣逆',
+ xiaoni_info:'锁定技,当你使用牌时,或成为其他角色使用牌的目标后,若场上存在其他己方角色且这些角色的手牌数均不大于你,则目标角色/你不可响应此牌。',
chouduo:'筹度',
chouduo_info:'己方角色的结束阶段开始时,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。 ',
guiyin:'归隐',
guiyin_info:'限定技,出牌阶段,你可令所有己方角色将体力值回满,然后移除此武将牌。',
- gzlianpian:'连翩',
+ gzlianpian:'联翩',
gzlianpian_info:'①结束阶段开始时,若你于此回合内弃置过所有角色的牌数之和大于你的体力值,你可令一名与你势力相同的角色将手牌补至X张(X为其体力上限)。②其他角色的结束阶段开始时,若其于此回合内弃置过所有角色的牌数之和大于你的体力值,其可选择:1.弃置你的一张牌;2.令你回复1点体力。',
yusui:'玉碎',
yusui_info:'当你成为其他势力的角色使用黑色牌的目标后,你可以失去1点体力,然后选择一项:①令其弃置X张手牌(X为其体力上限);②令其失去Y点体力(Y为其的体力值减去你的体力值,不为正时不可选择)',
@@ -10492,21 +10507,21 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
boyan_info:'出牌阶段限一次,你可令一名其他角色将手牌摸至体力上限(至多摸五张),然后其本回合不能使用或打出手牌。',
boyan_zongheng:'驳言·纵横',
boyan_zongheng_info:'出牌阶段限一次,你可令一名其他角色本回合不能使用或打出手牌。',
- gzyaoqi:'邀旗',
- gzyaoqi_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌。②你获得其一张牌。若你以此法获得了♠牌,则其视为对你使用一张【杀】。',
+ gzjinfa:'矜伐',
+ gzjinfa_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌,若你以此法获得了♠牌,则其视为对你使用一张【杀】。②你获得其一张牌。',
gzduwu:'黩武',
gzduwu_info:'限定技,出牌阶段,你可以选择一个“军令”。你令攻击范围内所有的非己方角色选择是否执行。若有角色选择否,则你对其造成1点伤害且你摸一张牌。若有角色于此技能结算过程中进入濒死状态且存活,则你失去1点体力。',
gzwangong:'挽弓',
gzwangong_info:'其他角色的准备阶段开始时,你可将装备区内的一张牌当做【杀】对其使用且可重复此流程。若你的体力值大于该角色,则此【杀】不可被响应。若该角色于此技能的结算流程中死亡,则你可以变更副将(不展示)。',
- gzguanwei:'观微',
- gzguanwei2:'观微',
- gzguanwei_info:'准备阶段开始时,你可以选择一名未确定势力的其他角色。当其于你的下回合开始前首次明置武将牌后,若其:与你势力相同,则你与其各摸两张牌;与你势力不同,则其失去1点体力。',
+ gzcongcha:'聪察',
+ gzcongcha2:'聪察',
+ gzcongcha_info:'①准备阶段开始时,你可以选择一名未确定势力的其他角色。当其于你的下回合开始前首次明置武将牌后,若其:与你势力相同,则你与其各摸两张牌;与你势力不同,则其失去1点体力。②摸牌阶段开始时,若场上所有角色均有明置的武将牌,则你可以令额定摸牌数+2。',
gzchenglve:'成略',
- gzchenglve_info:'己方角色使用牌指定第一个目标后,若此牌的目标数大于1,则你可以令其摸一张牌。此牌结算结束后,若你受到过渠道为此牌的伤害,则你可以令一名没有“阴阳鱼”的己方角色获得一枚“阴阳鱼”。',
+ gzchenglve_info:'己方角色使用牌结算结束后,若此牌的目标数大于1,则你可以令其摸一张牌。若你受到过渠道为此牌的伤害,则你可以令一名没有“阴阳鱼”的己方角色获得一枚“阴阳鱼”。',
gzbaolie:'豹烈',
gzbaolie_info:'锁定技,出牌阶段开始时,你令所有攻击范围内包含你的非己方角色依次选择:①对你使用一张【杀】;②令你弃置其一张牌。锁定技,你对体力值不小于你的角色使用【杀】没有距离和次数限制。',
gzshicai:'恃才',
- gzshicai_info:'锁定技,当你受到的伤害点数确定时,若伤害值:为1,你摸两张牌;大于1,你弃置所有手牌。',
+ gzshicai_info:'锁定技,当你受到的伤害后,若伤害值:为1,你摸两张牌;大于1,你弃置所有手牌。',
gzxingzhao:'兴棹',
gzxingzhao_info:'锁定技:①摸牌阶段开始时,若X不小于1,则你可以发动〖恂恂〗的效果。②当你受到伤害后或使用装备牌时,若X不小于2且你的手牌数不为全场最多,则你摸一张牌。③若X不小于3,则你的手牌上限+4。④当你失去装备区的牌后,若X不小于4,则你摸一张牌。(X为场上有受伤角色的势力数)',
gzxingzhao_old_info:'锁定技:①摸牌阶段开始时,若X不小于1,则你可以发动〖恂恂〗的效果。②当你受到伤害后,若X不小于2且你和伤害来源的手牌数不相等,则你于伤害来源中手牌数较少的角色摸一张牌。③若X不小于3,则你的手牌上限+4。④当你失去装备区的牌后,若X不小于4,则你摸一张牌。(X为场上有受伤角色的势力数)',
diff --git a/mode/identity.js b/mode/identity.js
index 626b9ec1e..73c08e749 100644
--- a/mode/identity.js
+++ b/mode/identity.js
@@ -2,26 +2,6 @@
game.import('mode',function(lib,game,ui,get,ai,_status){
return {
name:'identity',
- card:{
- group_wei:{
- fullskin:true,
- },
- group_shu:{
- fullskin:true,
- },
- group_wu:{
- fullskin:true,
- },
- group_qun:{
- fullskin:true,
- },
- group_key:{
- fullskin:true,
- },
- group_jin:{
- fullskin:true,
- },
- },
start:function(){
"step 0"
if(!lib.config.new_tutorial){
@@ -722,7 +702,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
for(var i in libCharacter){
if(lib.filter.characterDisabled(i,libCharacter)) continue;
- if(i.indexOf('lingju')!=-1) continue;
+ if(i.indexOf('lingju')!=-1||get.is.double(i)) continue;
var group=lib.character[i][1];
if(group=='shen') continue;
if(!map[group]){
@@ -896,7 +876,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var list=[];
for(var i in lib.character){
if(lib.filter.characterDisabled(i)) continue;
- if(i.indexOf('lingju')!=-1) continue;
+ if(i.indexOf('lingju')!=-1||get.is.double(i)) continue;
var group=lib.character[i][1];
if(group=='shen') continue;
if(!map[group]){
@@ -1096,25 +1076,30 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(typeof lib.config.test_game=='string'&&player==game.me.next){
player.init(lib.config.test_game);
}
- if(get.config('choose_group')&&player.group=='shen'&&!player.isUnseen(0)){
- var list=lib.group.slice(0);
- list.remove('shen');
- if(list.length) player.group=function(){
- if(_status.mode!='zhong'&&game.zhu&&game.zhu.group){
- if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','ol_liushan','re_liushan','key_akane','dongzhuo','re_dongzhuo','ol_dongzhuo','jin_simashi'].contains(game.zhu.name)) return game.zhu.group;
- if(game.zhu.name=='yl_yuanshu'){
- if(player.identity=='zhong') list.remove('qun');
- else return 'qun';
- }
- if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce','ol_yuanshao','yuanshu','jin_simazhao','liubian'].contains(game.zhu.name)){
- if(player.identity!='zhong') list.remove(game.zhu.group);
- else return game.zhu.group;
- }
- }
- return list.randomGet();
- }();
- }
+ if(get.is.double(player.name1)){
+ player._groupChosen=true;
+ player.group=get.is.double(player.name1,true).randomGet();
player.node.name.dataset.nature=get.groupnature(player.group);
+ }
+ else if(get.config('choose_group')&&player.group=='shen'&&!player.isUnseen(0)){
+ var list=lib.group.slice(0);
+ list.remove('shen');
+ if(list.length) player.group=function(){
+ if(_status.mode!='zhong'&&game.zhu&&game.zhu.group){
+ if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','ol_liushan','re_liushan','key_akane','dongzhuo','re_dongzhuo','ol_dongzhuo','jin_simashi'].contains(game.zhu.name)) return game.zhu.group;
+ if(game.zhu.name=='yl_yuanshu'){
+ if(player.identity=='zhong') list.remove('qun');
+ else return 'qun';
+ }
+ if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce','ol_yuanshao','yuanshu','jin_simazhao','liubian'].contains(game.zhu.name)){
+ if(player.identity!='zhong') list.remove(game.zhu.group);
+ else return game.zhu.group;
+ }
+ }
+ return list.randomGet();
+ }();
+ }
+ player.node.name.dataset.nature=get.groupnature(player.group);
}
next.setContent(function(){
"step 0"
@@ -1665,44 +1650,35 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ui.cheat2.close();
delete ui.cheat2;
}
- var chooseGroup=false;
if(event.chosen.length){
- if(lib.character[event.chosen[0]][1]=='shen'&&!lib.character[event.chosen[0]][4].contains('hiddenSkill')){
- chooseGroup=true;
- }
+ event.choosed=event.chosen;
}
else if(event.modchosen){
if(event.modchosen[0]=='random') event.modchosen[0]=result.buttons[0].link;
else event.modchosen[1]=result.buttons[0].link;
+ event.choosed=event.modchosen;
}
else if(result.buttons.length==2){
event.choosed=[result.buttons[0].link,result.buttons[1].link];
game.addRecentCharacter(result.buttons[0].link,result.buttons[1].link);
- if(lib.character[event.choosed[0]][1]=='shen'&&!lib.character[event.choosed[0]][4].contains('hiddenSkill')){
- chooseGroup=true;
- }
}
else{
event.choosed=[result.buttons[0].link];
- if(lib.character[event.choosed[0]][1]=='shen'&&!lib.character[event.choosed[0]][4].contains('hiddenSkill')){
- chooseGroup=true;
- }
game.addRecentCharacter(result.buttons[0].link);
}
- if(get.config('choose_group')&&chooseGroup){
- var list=lib.group.slice(0);
- list.remove('shen');
- game.me.chooseControl(list).prompt='请选择神武将的势力';
+ var name=event.choosed[0];
+ if(get.is.double(name)){
+ game.me._groupChosen=true;
+ game.me.chooseControl(get.is.double(name,true)).set('prompt','请选择你的势力');
+ }
+ else if(lib.character[name][1]=='shen'&&!lib.character[name][4].contains('hiddenSkill')&&get.config('choose_group')){
+ var list=lib.group.slice(0);
+ list.remove('shen');
+ game.me.chooseControl(list).set('prompt','请选择神武将的势力');
}
"step 2"
event.group=result.control||false;
- if(event.chosen.length){
- game.me.init(event.chosen[0],event.chosen[1]);
- }
- else if(event.modchosen){
- game.me.init(event.modchosen[0],event.modchosen[1]);
- }
- else if(event.choosed.length==2){
+ if(event.choosed.length==2){
game.me.init(event.choosed[0],event.choosed[1]);
}
else{
@@ -1976,6 +1952,17 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return Math.random();
});
}
+ else if(get.is.double(game.zhu.name1)){
+ game.zhu._groupChosen=true;
+ var list=get.is.double(game.zhu.name1,true);
+ for(var i=0;i