diff --git a/audio/die/re_guohuanghou.mp3 b/audio/die/re_guohuanghou.mp3
new file mode 100644
index 000000000..132c29bb0
Binary files /dev/null and b/audio/die/re_guohuanghou.mp3 differ
diff --git a/audio/die/tw_caocao.mp3 b/audio/die/tw_caocao.mp3
new file mode 100644
index 000000000..178ea2f82
Binary files /dev/null and b/audio/die/tw_caocao.mp3 differ
diff --git a/audio/die/tw_liuhong.mp3 b/audio/die/tw_liuhong.mp3
new file mode 100644
index 000000000..2aabe866c
Binary files /dev/null and b/audio/die/tw_liuhong.mp3 differ
diff --git a/audio/skill/redanxin1.mp3 b/audio/skill/redanxin1.mp3
new file mode 100644
index 000000000..2750c3a86
Binary files /dev/null and b/audio/skill/redanxin1.mp3 differ
diff --git a/audio/skill/redanxin2.mp3 b/audio/skill/redanxin2.mp3
new file mode 100644
index 000000000..2ff04a0de
Binary files /dev/null and b/audio/skill/redanxin2.mp3 differ
diff --git a/audio/skill/rejiaozhao1.mp3 b/audio/skill/rejiaozhao1.mp3
new file mode 100644
index 000000000..f9acb4457
Binary files /dev/null and b/audio/skill/rejiaozhao1.mp3 differ
diff --git a/audio/skill/rejiaozhao2.mp3 b/audio/skill/rejiaozhao2.mp3
new file mode 100644
index 000000000..ce99c6ee4
Binary files /dev/null and b/audio/skill/rejiaozhao2.mp3 differ
diff --git a/audio/skill/twgezhi1.mp3 b/audio/skill/twgezhi1.mp3
new file mode 100644
index 000000000..5ebdc5ccf
Binary files /dev/null and b/audio/skill/twgezhi1.mp3 differ
diff --git a/audio/skill/twgezhi2.mp3 b/audio/skill/twgezhi2.mp3
new file mode 100644
index 000000000..330856d6a
Binary files /dev/null and b/audio/skill/twgezhi2.mp3 differ
diff --git a/audio/skill/twlingfa1.mp3 b/audio/skill/twlingfa1.mp3
new file mode 100644
index 000000000..7318aa140
Binary files /dev/null and b/audio/skill/twlingfa1.mp3 differ
diff --git a/audio/skill/twlingfa2.mp3 b/audio/skill/twlingfa2.mp3
new file mode 100644
index 000000000..79b4d5da9
Binary files /dev/null and b/audio/skill/twlingfa2.mp3 differ
diff --git a/audio/skill/twyujue1.mp3 b/audio/skill/twyujue1.mp3
new file mode 100644
index 000000000..a0a486b59
Binary files /dev/null and b/audio/skill/twyujue1.mp3 differ
diff --git a/audio/skill/twyujue2.mp3 b/audio/skill/twyujue2.mp3
new file mode 100644
index 000000000..e466ef9b5
Binary files /dev/null and b/audio/skill/twyujue2.mp3 differ
diff --git a/audio/skill/twzhian1.mp3 b/audio/skill/twzhian1.mp3
new file mode 100644
index 000000000..a848e0e3b
Binary files /dev/null and b/audio/skill/twzhian1.mp3 differ
diff --git a/audio/skill/twzhian2.mp3 b/audio/skill/twzhian2.mp3
new file mode 100644
index 000000000..f386ff4f7
Binary files /dev/null and b/audio/skill/twzhian2.mp3 differ
diff --git a/card/sp.js b/card/sp.js
index d752403a2..9e3b934c0 100644
--- a/card/sp.js
+++ b/card/sp.js
@@ -251,13 +251,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
singleCard:true,
type:'trick',
- selectTarget:2,
complexTarget:true,
multitarget:true,
targetprompt:['给一张牌','得两张牌'],
filterTarget:function(card,player,target){
return target!=player;
},
+ filterAddedTarget:function(card,player,target){
+ return target!=player;
+ },
content:function(){
'step 0'
if(!player.countCards('h')){
diff --git a/card/standard.js b/card/standard.js
index 42c673bdc..94806625d 100644
--- a/card/standard.js
+++ b/card/standard.js
@@ -1567,31 +1567,30 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'trick',
enable:true,
- selectTarget:2,
singleCard:true,
- multitarget:true,
targetprompt:['被借刀','出杀目标'],
+ complexSelect:true,
complexTarget:true,
multicheck:function(){
return game.hasPlayer(function(current){
if(current.getEquip(1)){
return game.hasPlayer(function(current2){
- return lib.filter.filterTarget({name:'sha'},current,current2);
+ return current.inRange(current2)&¤t.canUse('sha',current2,false);
})
}
});
},
filterTarget:function(card,player,target){
- if(ui.selected.targets.length==0){
- return (player!=target&&target.getCards('e',{subtype:'equip1'}).length);
- }
- else{
- return lib.filter.filterTarget({name:'sha'},ui.selected.targets[0],target);
- }
+ return player!=target&&target.getEquip(1)&&game.hasPlayer(function(current){
+ return target!=current&&target.inRange(current)&&target.canUse('sha',current,false);
+ });
+ },
+ filterAddedTarget:function(card,player,target,preTarget){
+ return target!=preTarget&&preTarget.inRange(target)&&preTarget.canUse('sha',target,false);
},
content:function(){
"step 0"
- if(event.directHit||(!_status.connectMode&&lib.config.skip_shan&&!target.hasSha())){
+ if(event.directHit||!event.addedTarget||(!_status.connectMode&&lib.config.skip_shan&&!target.hasSha())){
event.directfalse=true;
}
else{
diff --git a/character/diy.js b/character/diy.js
index 3e4915655..39a015839 100755
--- a/character/diy.js
+++ b/character/diy.js
@@ -97,9 +97,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_zhangwei:['female','shu',3,['nsqiyue','nsxuezhu']],
diy_wenyang:['male','wei','4/6',['lvli','choujue']],
// diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']],
- // diy_hanlong:['male','wei',4,['siji','ciqiu']],
+ diy_hanlong:['male','wei',4,['siji','ciqiu']],
diy_feishi:['male','shu',3,['nsshuaiyan','moshou']],
- diy_liuyan:['male','shu',3,['juedao','geju']],
+ diy_liuyan:['male','qun',3,['juedao','geju']],
// diy_luxun:['male','wu',3,['shaoying','zonghuo']],
diy_yuji:['male','qun',3,['diyguhuo','diychanyuan']],
// diy_zhouyu:['male','wu',3,['jieyan','honglian']],
@@ -195,7 +195,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"],
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"],
- diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"],
+ diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
+ diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji"],
diy_noname:['noname'],
diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi","key_mia","key_kano","db_key_liyingxia"],
diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang'],
@@ -203,6 +204,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
characterIntro:{
noname:'无名杀的吉祥物。
画师:空城
技能设计:李木子',
+ diy_hanlong:'韩龙,魏国刺客。他孤身一人深入到了长城外的敌人领地,成功刺杀了敌方首领轲比能,瓦解了鲜卑民族,曹魏边境因此获得了几十年的安稳。',
ns_zhangwei:'血骑教习·张葳,三国杀集换式卡牌游戏《阵面对决》中的帝畿系列卡牌。游卡桌游官方原创的三国时期女性角色。',
diy_feishi:'字公举,生卒年不详,益州犍为郡南安县(今四川省乐山市)人。刘璋占据益州时,以费诗为绵竹县县令。刘备进攻刘璋夺取益州,费诗举城而降,后受拜督军从事,转任牂牁郡太守,再为州前部司马。',
diy_lukang:'字幼节,吴郡吴县(今江苏苏州)人。三国时期吴国名将,丞相陆逊次子。',
@@ -14874,40 +14876,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
ciqiu:{
- unique:true,
- trigger:{source:'damageBegin'},
+ trigger:{source:"damageBegin1"},
forced:true,
- filter:function(event,player){
- return event.card&&event.card.name=='sha'&&event.player.hp==event.player.maxHp&&event.notLink();
+ filter:function(event){
+ return event.card&&event.card.name=='sha'&&event.player.isHealthy();
},
content:function(){
+ "step 0"
trigger.num++;
- trigger._ciqiu3=true;
- },
- group:['ciqiu2']
- },
- ciqiu2:{
- trigger:{global:'dying'},
- priority:9,
- filter:function(event,player){
- return event.player!=player&&event.parent._ciqiu3&&event.parent.source==player;
- },
- check:function(event,player){
- return get.attitude(player,event.player)<0;
- },
- forced:true,
- logTarget:'player',
- content:function(){
- 'step 0'
- trigger.player.die();
- player.removeSkill('ciqiu2');
- 'step 1'
- if(!trigger.player.isAlive()){
- trigger.cancel(true);
+ if(trigger.num>=trigger.player.hp){
+ trigger.player.addTempSkill('ciqiu_dying');
+ player.removeSkill('ciqiu')
}
- }
+ },
+ ai:{
+ effect:{
+ player:function(card,player,target){
+ if(card.name=='sha'&&target.isHealthy()&&get.attitude(player,target)>0){
+ return [1,-2];
+ }
+ },
+ },
+ },
+ },
+ ciqiu_dying:{
+ trigger:{player:"dyingBegin"},
+ forced:true,
+ silent:true,
+ firstDo:true,
+ content:function(){
+ player.die();
+ },
+ popup:false,
},
- ciqiu3:{},
juedao:{
enable:'phaseUse',
filter:function(event,player){
@@ -15928,8 +15929,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
siji:'伺机',
ciqiu:'刺酋',
- ciqiu2:'刺酋',
- ciqiu3:'刺酋',
+ ciqiu_dying:'刺酋',
diy_liuyan:'刘焉',
juedao:'绝道',
geju:'割据',
@@ -15991,6 +15991,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
junk_zhangrang_ab:'张让',
old_jiakui_ab:'贾逵',
diy_tieba:'吧友设计',
+ diy_xushi:'玩点论杀·虚实篇',
diy_default:'常规',
diy_noname:'无名专属',
diy_key:'论外',
diff --git a/character/extra.js b/character/extra.js
index 233aa94a1..714f527ec 100755
--- a/character/extra.js
+++ b/character/extra.js
@@ -4893,7 +4893,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dulie:'笃烈',
dulie_info:'锁定技。当你成为【杀】的目标时,若使用者的体力值大于你,则你进行判定。若结果为红桃,则取消此目标。',
tspowei:'破围',
- tspowei_info:'使命技。①游戏开始时,你令所有其他角色获得一个“围”。②一名角色受到伤害后,若其有“围”,则其移去“围”。③回合开始时,你选择所有有“围”的角色。这些角色失去“围”,然后这些角色的第一个不为你的下家获得等量的“围”。④一名其他角色的回合开始时,若其有围,则你可以选择一项:⒈弃置一张手牌并对其造成1点伤害。⒉若其体力值不大于你,则你获得其一张手牌。选择完成后,你视为在其攻击范围内直到回合结束。⑤使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。⑥失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。',
+ tspowei_info:'使命技。①游戏开始时,你令所有其他角色获得一个“围”。②一名角色受到伤害后,若其有“围”,则其移去“围”。③回合开始时,你选择所有有“围”的角色。这些角色失去“围”,然后这些角色的第一个不为你的下家获得等量的“围”。④一名其他角色的回合开始时,若其有“围”,则你可以选择一项:⒈弃置一张手牌并对其造成1点伤害。⒉若其体力值不大于你,则你获得其一张手牌。选择完成后,你视为在其攻击范围内直到回合结束。⑤使命:回合开始时,若场上没有“围”,则你获得技能〖神著〗。⑥失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。',
shenzhu:'神著',
shenzhu_info:'锁定技,当你使用有对应实体牌的非转化【杀】结算结束后,你选择一项:①摸一张牌,且本回合使用【杀】的次数上限+1。②摸三张牌,且本回合不能再使用【杀】。',
dangmo:'荡魔',
diff --git a/character/mobile.js b/character/mobile.js
index 16a195bdd..8dcc1ffe1 100644
--- a/character/mobile.js
+++ b/character/mobile.js
@@ -81,7 +81,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_mifuren:['female','shu',3,['xinguixiu','qingyu']],
sp_xinpi:['male','wei',3,['spyinju','spchijie']],
nanhualaoxian:['male','qun',3,['yufeng','tianshu']],
- feiyi:['male','shu',3,['mjshengxi','mjkuanji']],
+ feiyi:['male','shu',3,['mjshengxi','fyjianyu']],
sp_bianfuren:['female','wei',3,['spwanwei','spyuejian']],
sp_duyu:['male','qun',4,['spwuku','spsanchen']],
luotong:['male','wu',4,['qinzheng']],
@@ -1242,6 +1242,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sptaoluan:{
audio:2,
trigger:{global:'judgeEnd'},
+ usable:1,
filter:function(event,player){
return event.result&&event.result.suit=='spade';
},
@@ -3157,6 +3158,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.storage.jueyong) player.storage.jueyong=[[],[]];
player.storage.jueyong[0].push(card);
player.storage.jueyong[1].push(trigger.player);
+ game.delayx();
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
@@ -3165,9 +3167,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
intro:{
markcount:function(storage){
+ if(!storage) return 0;
return storage[0].length;
},
mark:function(dialog,storage,player){
+ if(!storage) return;
dialog.addAuto(storage[0]);
dialog.addText(get.translation(storage[1]));
},
@@ -5150,12 +5154,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
targets.sortBySeat();
for(var i of targets) i.addMark('luanchou',1);
},
- global:'gonghuan',
+ global:['gonghuan','gonghuan_clear'],
derivation:'gonghuan',
marktext:'姻',
intro:{
name:'共患',
- content:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。',
+ content:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。此伤害结算结束后,若你与其体力值相等,则你与其移去“姻”标记。',
+ onunmark:true,
},
ai:{
order:10,
@@ -5182,6 +5187,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
},
content:function(){
+ trigger._gonghuan_player=trigger.player;
trigger.player=player;
},
ai:{
@@ -5204,6 +5210,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
+ subSkill:{
+ clear:{
+ trigger:{player:'damageEnd'},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event._gonghuan_player&&player.hp==event._gonghuan_player.hp;
+ },
+ content:function(){
+ player.removeMark('luanchou',player.countMark('luanchou'));
+ trigger._gonghuan_player.removeMark('luanchou',trigger._gonghuan_player.countMark('luanchou'));
+ },
+ },
+ },
},
//刘璋
xiusheng:{
@@ -5446,19 +5466,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
if(player==event.player) return false;
if(_status.renku.length) return true;
- return event.player.countCards('h')>1&&event.player.countCards('h')!=event.player.hp;
+ return event.player.countCards('h')>event.player.hp;
},
direct:true,
content:function(){
'step 0'
var target=trigger.player;
event.target=target;
- var num=Math.min(9,Math.abs(target.hp-target.countCards('h')));
+ var num=Math.max(0,target.countCards('h')-target.hp);
var choiceList=['令其从仁库中获得一张牌','令其将'+get.cnNumber(num)+'张手牌置入仁库'];
var choices=[];
if(_status.renku.length) choices.push('选项一');
else choiceList[0]=''+choiceList[0]+'';
- if(target.countCards('h')>1&&target.countCards('h')!=target.hp){
+ if(target.countCards('h')>target.hp){
event.num=num;
choices.push('选项二');
}
@@ -5471,7 +5491,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(_status.renku.length>0) return '选项一';
return 0;
}
- if(target.countCards('h')>1&&target.countCards('h')!=target.hp) return '选项二';
+ if(target.countCards('h')>target.hp) return '选项二';
return 'cancel2';
});
'step 1'
@@ -6792,7 +6812,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var num=Math.max(1,player.hp),target=trigger.player;
- player.chooseCard('he',get.prompt('sheyi',target),'交给其至少'+get.cnNumber(num)+'张牌,防止即将受到的伤害('+trigger.num+'点)',[num,player.countCards('h')]).set('goon',function(){
+ player.chooseCard('he',get.prompt('sheyi',target),'交给其至少'+get.cnNumber(num)+'张牌,防止即将受到的伤害('+trigger.num+'点)',[num,player.countCards('he')]).set('goon',function(){
if(get.attitude(player,target)<0) return false;
if(trigger.num=0) return false;
if(trigger.num<2&&target.hp>trigger.num) return 6/Math.sqrt(num);
@@ -16069,7 +16089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
liaoyi:'疗疫',
liaoyi_info:'其他角色的回合开始时,若其:①手牌数小于体力值且仁库内牌数大于等于X,则你可令其从仁库中获得X张牌;②手牌数大于体力值,则你可以令其将X张牌置于仁库中(X为其手牌数与体力值之差且至多为4)。',
xinliaoyi:'疗疫',
- xinliaoyi_info:'其他角色的回合开始时,你可选择一项:①令其从仁库中获得一张牌。②若其手牌数大于1,则令其将X张手牌置入仁库(X为其手牌数与体力值之差且至多为9)。',
+ xinliaoyi_info:'其他角色的回合开始时,你可选择一项:①令其从仁库中获得一张牌。②若其手牌数大于体力值,则令其将X张手牌置入仁库(X为其手牌数与体力值之差)。',
binglun:'病论',
binglun_info:'出牌阶段限一次,你可以将仁库中的一张牌置于弃牌堆并选择一名角色。该角色选择一项:①摸一张牌。②于其下回合结束时回复1点体力。',
sp_zhangwen:'手杀张温',
@@ -16090,7 +16110,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
luanchou:'鸾俦',
luanchou_info:'出牌阶段限一次,你可令两名角色获得“姻”标记并清除原有标记。拥有“姻”标记的角色视为拥有技能〖共患〗。',
gonghuan:'共患',
- gonghuan_info:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。',
+ gonghuan_info:'锁定技。每回合限一次,一名其他角色受到伤害时,若其拥有“姻”标记且其体力值小于你,则你将伤害转移给自己。此伤害结算结束后,若你与其体力值相等,则你与其移去“姻”标记。',
sp_yanghu:'羊祜',
mingfa:'明伐',
mingfa_info:'①结束阶段,你可展示一张牌并记录为“明伐”。②出牌阶段开始时,若“明伐”牌在你的手牌区或装备区,则你可以使用“明伐”牌与一名其他角色拼点。若你赢:你获得对方一张牌并从牌堆中获得一张点数等于“明伐”牌牌面点数-1的牌。若你没赢:你本回合不能使用牌指定其他角色为目标。③你的拼点牌亮出后,你令此牌的点数+2。',
@@ -16283,7 +16303,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spshiji:'势击',
spshiji_info:'当你对其他角色造成属性伤害时,若你的手牌数不为全场唯一最多,则你可以观看其手牌。你令其弃置其中的所有红色牌,然后摸等量的牌。',
sptaoluan:'讨乱',
- sptaoluan_info:'一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)',
+ sptaoluan_info:'每回合限一次。一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)',
sp_yangwan:'杨婉',
spmingxuan:'瞑昡',
spmingxuan_info:'锁定技。出牌阶段开始时,你须选择至多X张牌(X为未选择过选项①的角色),将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项:①对你使用一张【杀】。②交给你一张牌,然后你摸一张牌。',
diff --git a/character/old.js b/character/old.js
index 581546ce2..08fd74871 100755
--- a/character/old.js
+++ b/character/old.js
@@ -8,7 +8,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_shenhua:["yuji","zhangjiao","old_zhugezhan","old_guanqiujian","xiahouyuan","weiyan","xiaoqiao","pangde","xuhuang"],
old_refresh:["old_zhangfei","old_huatuo","old_zhaoyun","ol_huaxiong"],
old_yijiang1:["masu","xushu","xin_yujin","old_xusheng","old_lingtong","fazheng"],
- old_yijiang2:["old_zhonghui"],
+ old_yijiang2:["old_zhonghui","madai"],
old_yijiang3:["liru","old_zhuran","old_fuhuanghou","old_caochong"],
old_yijiang4:["old_caozhen","old_chenqun","old_zhuhuan"],
old_yijiang5:["old_caoxiu","old_quancong","old_zhuzhi"],
@@ -19,6 +19,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
+ madai:['male','shu',4,['mashu','oldqianxi']],
xuhuang:['male','wei',4,['gzduanliang']],
junk_simayi:['male','jin',3,['buchen','smyyingshi','xiongzhi','quanbian'],['hiddenSkill']],
fazheng:['male','shu',3,['enyuan','xuanhuo']],
@@ -783,6 +784,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fazheng:'旧法正',
junk_simayi:'旧晋司马懿',
junk_simayi_ab:'司马懿',
+ madai:'旧马岱',
old_standard:'标准包',
old_shenhua:'神话再临',
@@ -794,6 +796,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_yijiang5:'一将成名2015',
old_yijiang67:'原创设计',
old_sp:'SP',
+ old_yingbian:'文德武备',
old_mobile:'移动版',
}
};
diff --git a/character/rank.js b/character/rank.js
index bb8850cc9..3040845c0 100644
--- a/character/rank.js
+++ b/character/rank.js
@@ -496,6 +496,8 @@ window.noname_character_rank={
'ol_dongzhao',
'xin_jushou',
'sp_zhujun',
+ 're_guohuanghou',
+ 'tw_liuhong',
],
bp:[
'chess_diaochan',
@@ -744,6 +746,7 @@ window.noname_character_rank={
'sp_maojie',
'ol_xuhuang',
'ol_zhuling',
+ 'tw_zangba',
],
b:[
'diy_feishi',
@@ -861,6 +864,7 @@ window.noname_character_rank={
're_zhangzhang',
're_masu',
'old_madai',
+ 're_madai',
'wangyi',
'guanzhang',
'ns_chengpu',
@@ -959,6 +963,9 @@ window.noname_character_rank={
'wangtao',
'tianyu',
'fanjiangzhangda',
+ 'zhaoyan',
+ 'huojun',
+ 'tw_caocao',
],
bm:[
'diy_xizhenxihong',
@@ -1483,6 +1490,8 @@ window.noname_character_rank={
'zhongyan',
'kaisa',
'tw_zhaoxiang',
+ 'tw_caocao',
+ 'tw_liuhong',
'key_kano',
'key_haruko',
'key_akiko',
@@ -1852,6 +1861,9 @@ window.noname_character_rank={
'sp_zhujun',
'ol_chendeng',
'ol_xuhuang',
+ 're_guohuanghou',
+ 'tw_huojun',
+ 'zhaoyan',
],
junk:[
'sunshao',
diff --git a/character/refresh.js b/character/refresh.js
index 0b6f44dce..57d655b71 100755
--- a/character/refresh.js
+++ b/character/refresh.js
@@ -10,14 +10,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_lin:['re_menghuo','ol_sunjian','re_caopi','ol_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'],
refresh_shan:['ol_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'],
refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'],
- refresh_yijiang2:['old_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'],
+ refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'],
refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'],
refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','xin_jushou'],
refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi'],
+ refresh_yijiang6:['re_guohuanghou'],
},
},
connect:true,
character:{
+ re_guohuanghou:['female','wei',3,['rejiaozhao','redanxin']],
re_xiahoushi:['female','shu',3,['reqiaoshi','reyanyu']],
xin_jushou:['male','qun',3,['xinjianying','shibei']],
ol_lusu:['male','wu',3,['olhaoshi','oldimeng']],
@@ -48,7 +50,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_hanhaoshihuan:['male','wei',4,['reshenduan','reyonglve']],
re_panzhangmazhong:['male','wu',4,['reduodao','reanjian']],
re_wangyi:['female','wei',4,['zhenlie','miji']],
- old_madai:['male','shu',4,['mashu','qianxi']],
+ re_madai:['male','shu',4,['mashu','reqianxi']],
guanzhang:['male','shu',4,['fuhun']],
xin_xusheng:['male','wu',4,['decadepojun']],
re_taishici:['male','wu',4,['tianyi','hanzhan']],
@@ -141,6 +143,286 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_xushu:['zhaoyun','sp_zhugeliang'],
},
skill:{
+ rejiaozhao:{
+ audio:2,
+ enable:'phaseUse',
+ group:'rejiaozhao_base',
+ mod:{
+ targetEnabled:function(card,player,target){
+ if(player==target&&card.storage&&card.storage.rejiaozhao) return false;
+ },
+ },
+ filter:function(event,player){
+ return (player.hasMark('redanxin')&&player.countCards('h')&&player.getStorage('rejiaozhao_clear').length8-get.value(card),
+ onuse:function(result,player){
+ player.addTempSkill('rejiaozhao_clear','phaseUseAfter');
+ player.markAuto('rejiaozhao_clear',[get.type(result.card)])
+ },
+ }
+ if(player.countMark('redanxin')<2) next.viewAs.storage={rejiaozhao:true};
+ return next;
+ },
+ prompt:function(links){
+ return '将一张手牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用';
+ },
+ },
+ ai:{
+ order:6,
+ result:{
+ player:1
+ }
+ },
+ derivation:['rejiaozhao_lv2','rejiaozhao_lv3'],
+ subSkill:{
+ clear:{onremove:true},
+ base:{
+ audio:'rejiaozhao',
+ enable:'phaseUse',
+ usable:1,
+ filter:function(event,player){
+ if(player.hasMark('redanxin')) return false;
+ return player.countCards('h')>0&&game.hasPlayer((current)=>current!=player);
+ },
+ filterCard:true,
+ position:'h',
+ discard:false,
+ lose:false,
+ check:function(card){
+ return 1/Math.max(1,_status.event.player.getUseValue(card));
+ },
+ prompt:'出牌阶段限一次。你可以展示一张手牌,并令一名距离你最近的角色选择一种基本牌或普通锦囊牌的牌名。你可将此牌当做其声明的牌使用直到此阶段结束(你不是此牌的合法目标)。',
+ content:function(){
+ 'step 0'
+ player.showCards(cards);
+ 'step 1'
+ var targets=game.filterPlayer();
+ targets.remove(player);
+ targets.sort(function(a,b){
+ return Math.max(1,get.distance(player,a))-Math.max(1,get.distance(player,b));
+ });
+ var distance=Math.max(1,get.distance(player,targets[0]));
+ for(var i=1;idistance){
+ targets.splice(i);break;
+ }
+ }
+ player.chooseTarget('请选择【矫诏】的目标',true,function(card,player,target){
+ return _status.event.targets.contains(target);
+ }).set('ai',function(target){
+ return get.attitude(_status.event.player,target);
+ }).set('targets',targets);
+ 'step 2'
+ if(!result.bool){
+ event.finish();
+ return;
+ }
+ var target=result.targets[0];
+ event.target=target;
+ var list=[];
+ for(var i=0;i0?1:-1);
+ 'step 3'
+ var chosen=result.links[0][2];
+ var nature=result.links[0][3];
+ var fakecard={
+ name:chosen,
+ storage:{rejiaozhao:true},
+ };
+ if(nature) fakecard.nature=nature;
+ event.target.showCards(game.createCard({
+ name:chosen,
+ nature:nature,
+ suit:cards[0].suit,
+ number:cards[0].number,
+ }),get.translation(event.target)+'声明了'+get.translation(chosen));
+ player.storage.rejiaozhao_viewas=fakecard;
+ cards[0].addGaintag('rejiaozhao')
+ player.addTempSkill('rejiaozhao_viewas','phaseUseEnd');
+ },
+ ai:{
+ order:9,
+ result:{
+ player:1,
+ }
+ },
+ },
+ backup:{audio:'rejiaozhao'},
+ viewas:{
+ enable:'phaseUse',
+ mod:{
+ targetEnabled:function(card,player,target){
+ if(player==target&&card.storage&&card.storage.rejiaozhao) return false;
+ },
+ },
+ filter:function(event,player){
+ if(!player.storage.rejiaozhao_viewas) return false;
+ var cards=player.getCards('h',function(card){
+ return card.hasGaintag('rejiaozhao');
+ });
+ if(!cards.length) return false;
+ if(!game.checkMod(cards[0],player,'unchanged','cardEnabled2',player)) return false;
+ var card=get.autoViewAs(player.storage.rejiaozhao_viewas,cards);
+ return event.filterCard(card,player,event);
+ },
+ viewAs:function(cards,player){
+ return player.storage.rejiaozhao_viewas;
+ },
+ filterCard:function(card){
+ return card.hasGaintag('rejiaozhao');
+ },
+ selectCard:-1,
+ position:'h',
+ popname:true,
+ prompt:function(){
+ return '将“矫诏”牌当做'+get.translation(_status.event.player.storage.rejiaozhao_viewas)+'使用';
+ },
+ onremove:function(player){
+ player.removeGaintag('rejiaozhao');
+ delete player.storage.rejiaozhao_viewas;
+ },
+ ai:{order:8},
+ },
+ },
+ },
+ redanxin:{
+ audio:2,
+ trigger:{player:'damageEnd'},
+ frequent:true,
+ content:function(){
+ player.draw();
+ if(player.countMark('redanxin')<2) player.addMark('redanxin',1,false);
+ },
+ intro:{content:'当前升级等级。:Lv#'},
+ },
+ //马岱
+ reqianxi:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ frequent:true,
+ content:function(){
+ 'step 0'
+ player.draw();
+ 'step 1'
+ if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'reqianxi'),'he')) player.chooseToDiscard('he',true);
+ else event.finish();
+ 'step 2'
+ if(result.bool&&game.hasPlayer((current)=>current!=player&&get.distance(player,current)<=1)){
+ var color=get.color(result.cards[0],player);
+ event.color=color;
+ color=get.translation(color);
+ player.chooseTarget(true,'选择【潜袭】的目标','令其本回合不能使用或打出'+color+'牌,且'+color+'防具失效,且回复体力时,你摸两张牌',function(card,player,target){
+ return target!=player&&get.distance(player,target)<=1;
+ }).set('ai',function(target){
+ return -get.attitude(_status.event.player,target)*Math.sqrt(1+target.countCards('he'));
+ });
+ }
+ else event.finish();
+ 'step 3'
+ if(result.bool){
+ var target=result.targets[0];
+ player.line(target,'green');
+ target.storage.reqianxi_effect=[event.color,player];
+ target.addTempSkill('reqianxi_effect');
+ }
+ },
+ subSkill:{
+ effect:{
+ mark:true,
+ intro:{
+ markcount:()=>0,
+ content:function(storage,player){
+ var color=get.translation(storage[0]),source=get.translation(storage[1]);
+ return '本回合不能使用或打出'+color+'牌,且'+color+'防具失效,且回复体力时,'+source+'摸两张牌';
+ },
+ },
+ charlotte:true,
+ onremove:true,
+ mod:{
+ cardEnabled2:function(card,player){
+ if(get.itemtype(card)=='card'&&get.color(card)==player.getStorage('reqianxi_effect')[0]) return false;
+ },
+ },
+ trigger:{player:'recoverEnd'},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return player.storage.reqianxi_effect&&player.storage.reqianxi_effect[1].isIn();
+ },
+ content:function(){
+ var target=player.storage.reqianxi_effect[1];
+ target.logSkill('reqianxi',player);
+ target.draw(2);
+ },
+ ai:{
+ unequip2:true,
+ skillTagFilter:function(player){
+ var evt=_status.event,color=player.getStorage('reqianxi_effect')[0];
+ if(evt.name=='lose'&&evt.loseEquip){
+ var card=evt.cards[evt.num];
+ if(card&&get.subtype(card,false)=='equip2'&&get.color(card)==color) return true;
+ return false;
+ }
+ else{
+ var equip=player.getEquip(2);
+ if(equip&&get.color(equip)==color) return true;
+ return false;
+ }
+ },
+ },
+ },
+ },
+ },
//徐晃
olduanliang:{
audio:2,
@@ -1305,7 +1587,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chooseButton:{
check:function(button){
if(typeof button.link=='object') return 1;
- var player=_status.event.player,num=player.storage.xinquanji.length-1;
+ var player=_status.event.player,num=player.getExpansions('xinquanji').length-1;
if(button.link==1){
if(game.countPlayer(function(current){
return get.damageEffect(current,player,player)>0;
@@ -2254,9 +2536,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gzpaiyi:{
audio:2,
enable:'phaseUse',
- usable:1,
+ usable:2,
filter:function(event,player){
- return player.getExpansions('gzquanji').length>0&&!player.hasSkill('gzquanji2');
+ return player.getExpansions('gzquanji').length>0;
},
chooseButton:{
dialog:function(event,player){
@@ -2275,11 +2557,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
order:10,
result:{
target:function(player,target){
- var num=player.getExpansions('gzquanji').length-1;
- if(num==0){
- if(target.countCards('h')>player.countCards('h')) return get.damageEffect(target,player,target);
- return 0;
- }
if(target!=player) return 0;
if(player.needsToDiscard()&&!player.getEquip('zhuge')&&!player.hasSkill('new_paoxiao')) return 0;
return 1;
@@ -2294,10 +2571,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0"
var card=lib.skill.gzpaiyi_backup.card;
player.loseToDiscardpile(card);
- player.addTempSkill('gzquanji2');
"step 1"
- var num=player.getExpansions('gzquanji').length;
- if(num) target.draw(Math.min(7,num));
+ target.draw(2);
"step 2"
if(target.countCards('h')>player.countCards('h')){
target.damage();
@@ -10713,7 +10988,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
decadepojun:'破军',
decadepojun2:'破军',
decadepojun_info:'当你使用【杀】指定目标后,你可以将其的至多X张牌置于其武将牌上(X为其体力值)。若这些牌中:有装备牌,你将这些装备牌中的一张置于弃牌堆;有锦囊牌,你摸一张牌。其于回合结束时获得其武将牌上的这些牌。',
- old_madai:'界马岱',
re_wangyi:'界王异',
wangyi:'王异',
guanzhang:'界关兴张苞',
@@ -10807,7 +11081,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gzquanji_info:'当你受到伤害后或当你使用牌指定唯一目标并对其造成伤害后,你可以摸一张牌,然后你将一张牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。',
gzpaiyi:'排异',
gzpaiyi_backup:'排异',
- gzpaiyi_info:'出牌阶段限一次。你可以移去一张“权”,然后选择一名角色并令其摸X张牌(X为“权”的数量且至多为7),若其手牌数不小于你,则你对其造成1点伤害。',
+ gzpaiyi_info:'出牌阶段限两次。你可以移去一张“权”,然后选择一名角色并令其摸两张牌。若其手牌数大于你,则你对其造成1点伤害。',
ol_zhurong:'界祝融',
changbiao:'长标',
changbiao_info:'出牌阶段限一次,你可以将任意张手牌当做【杀】使用(无距离限制)。若你因此【杀】对目标角色造成过伤害,则你于出牌阶段结束时摸X张牌(X为此【杀】对应的实体牌数量)。',
@@ -10902,6 +11176,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olduanliang_info:'你可以将一张黑色非锦囊牌当做【兵粮寸断】使用。若你于当前回合内未造成过伤害,则你使用【兵粮寸断】无距离限制。',
oljiezi:'截辎',
oljiezi_info:'①当有角色跳过摸牌阶段后,你可选择一名角色。若该角色:手牌数为全场最少且没有“辎”,则其获得一枚“辎”。否则其摸一张牌。②一名角色的摸牌阶段结束时,若其有“辎”,则你移去其“辎”,然后令其获得一个额外的摸牌阶段。',
+ re_madai:'界马岱',
+ reqianxi:'潜袭',
+ reqianxi_info:'准备阶段开始时,你可摸一张牌,然后弃置一张牌并选择一名距离为1的其他角色。该角色于本回合内:{不能使用或打出与此牌颜色相同的牌,且其装备区内与此牌颜色相同的防具牌无效,且当其回复体力时,你摸两张牌。}',
+ re_guohuanghou:'界郭皇后',
+ rejiaozhao:'矫诏',
+ rejiaozhao_info:'出牌阶段限一次。你可以展示一张手牌,并令一名距离你最近的角色选择一种基本牌或普通锦囊牌的牌名。你可将此牌当做其声明的牌使用直到此阶段结束(你不是此牌的合法目标)。',
+ rejiaozhao_lv2:'矫诏·升级 Lv.1',
+ rejiaozhao_lv2_info:'出牌阶段限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用(你不是此牌的合法目标)。',
+ rejiaozhao_lv3:'矫诏·升级 Lv.2',
+ rejiaozhao_lv3_info:'出牌阶段每种类型各限一次。你可以将一张手牌当做一张基本牌或普通锦囊牌使用(你不是此牌的合法目标)。',
+ redanxin:'殚心',
+ redanxin_info:'当你受到伤害后,你可以摸一张牌并升级〖矫诏〗。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',
@@ -10913,6 +11199,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_yijiang3:'界限突破·将3',
refresh_yijiang4:'界限突破·将4',
refresh_yijiang5:'界限突破·将5',
+ refresh_yijiang6:'界限突破·原6',
},
};
});
diff --git a/character/sp.js b/character/sp.js
index d10db16a6..a5a3bb712 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -2527,7 +2527,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else event._result={control:target.name1};
}
- else event.goto(4);
+ else event.finish();
'step 4'
target.reinit(result.control,'guansuo');
if(_status.characterlist){
@@ -5250,7 +5250,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
var num=Math.max(1,player.getDamagedHp());
player.chooseTarget('是否发动【誓仇】,令至多'+num+'名其他角色也成为此【杀】的目标?',[1,num],function(card,player,target){
- return target!=player&&!trigger.targets.contains(target)&&player.canUse({name:'sha'},target);
+ var evt=_status.event.getTrigger();
+ return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
}).ai=function(target){
return get.effect(target,{name:'sha'},_status.event.player);
};
@@ -11085,19 +11086,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
recover:{
audio:'yishe',
trigger:{
- player:['loseAfter','gainAfter'],
+ player:['loseAfter'],
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
filter:function(event,player){
+ if(player.isHealthy()) return false;
var evt=event.getl(player);
if(!evt||!evt.xs||!evt.xs.length||player.getExpansions('yishe').length>0) return false;
- for(var i in evt.gaintag_map){
- if(evt.gaintag_map[i].contains('yishe')) return true;
+ if(event.name=='lose'){
+ for(var i in event.gaintag_map){
+ if(event.gaintag_map[i].contains('yishe')) return true;
+ }
+ return false;
}
- return false;
+ return player.hasHistory('lose',function(evt){
+ if(event!=evt.getParent()) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('yishe')) return true;
+ }
+ return false;
+ });
},
forced:true,
- popup:false,
content:function(){
player.recover();
},
@@ -15884,6 +15894,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_dongzhao:['ol_dongzhao','tw_dongzhao'],
mayunlu:['tw_mayunlu','mayunlu'],
zhuling:['ol_zhuling','zhuling'],
+ zangba:['tw_zangba','zangba'],
},
translate:{
"xinfu_lingren":"凌人",
diff --git a/character/sp2.js b/character/sp2.js
index 880edee41..4901a4f09 100644
--- a/character/sp2.js
+++ b/character/sp2.js
@@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'sp2',
connect:true,
character:{
+ zhaoyan:['female','wu',3,['jinhui','qingman']],
re_sunyi:['male','wu',5,['syjiqiao','syxiongyi']],
re_pangdegong:['male','qun',3,['heqia','yinyi']],
wangtao:['female','shu',3,['huguan','yaopei']],
@@ -115,7 +116,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_shengun:["puyuan","guanlu","gexuan","xushao"],
sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie'],
sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou","xinping","hanmeng"],
- sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng','re_xunchen','heyan'],
+ sp_caizijiaren:['re_dongbai','re_sunluyu','huaxin','luyusheng','re_xunchen','heyan','zhaoyan'],
sp_huangjin:['liuhong','zhujun','re_hansui'],
sp_qihuan:['liubian','zhaozhong','re_hejin'],
sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'],
@@ -129,12 +130,153 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
skill:{
+ //赵嫣
+ jinhui:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ content:function(){
+ 'step 0'
+ var cards=[];
+ while(cards.length<3){
+ var card=get.cardPile2(function(card){
+ for(var i of cards){
+ if(i.name==card.name) return false;
+ }
+ var info=get.info(card,false);
+ if(info.ai&&info.ai.tag&&info.ai.tag.damage) return false;
+ return !info.notarget&&(info.toself||info.singleCard||!info.selectTarget||info.selectTarget==1);
+ });
+ if(card) cards.push(card);
+ else break;
+ }
+ if(!cards.length) event.finish();
+ else{
+ player.showCards(cards,get.translation(player)+'发动了【锦绘】');
+ event.cards=cards;
+ game.cardsGotoOrdering(cards);
+ if(game.hasPlayer((current)=>(current!=player))) player.chooseTarget('选择【锦绘】的目标',true,lib.filter.notMe).set('ai',function(target){
+ var player=_status.event.player,cards=_status.event.getParent().cards.slice(0);
+ var max_effect=0,max_effect_player=0;
+ for(var i of cards){
+ var targetx=lib.skill.jinhui.getUsableTarget(i,target,player);
+ if(targetx){
+ var effect2=get.effect(targetx,i,target,target);
+ var effect3=get.effect(targetx,i,target,player);
+ if(effect2>max_effect){
+ max_effect=effect2;
+ max_effect_player=effect3;
+ }
+ }
+ }
+ return max_effect_player;
+ });
+ else event.finish();
+ }
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.line(target,'green');
+ var cards=cards.filter(function(card){
+ return lib.skill.jinhui.getUsableTarget(card,target,player);
+ });
+ if(cards.length){
+ if(cards.length==1) event._result={bool:true,links:cards};
+ else target.chooseButton(['选择按“锦绘”规则使用一张牌',cards],true).set('ai',function(button){
+ var player=_status.event.player,target=_status.event.getParent().player,card=button.link;
+ var targetx=lib.skill.jinhui.getUsableTarget(card,player,target);
+ var effect=get.effect(targetx,card,player,player),cards=_status.event.getParent().cards.slice(0);
+ var effect2=0,effect3=0;
+ cards.remove(button.link);
+ for(var i of cards){
+ var targetx=lib.skill.jinhui.getUsableTarget(i,target,player);
+ if(targetx){
+ effect2+=get.effect(targetx,i,target,target);
+ effect3+=get.effect(targetx,i,target,player);
+ }
+ }
+ if(effect2>0) effect+=effect3;
+ return effect;
+ });
+ }
+ else event.goto(3);
+ }
+ else event.finish();
+ 'step 2'
+ if(result.bool){
+ var card=result.links[0];
+ event.cards.remove(card);
+ var targetx=lib.skill.jinhui.getUsableTarget(card,target,player);
+ target.useCard(card,targetx,false,'noai');
+ }
+ 'step 3'
+ var cards=cards.filter(function(card){
+ return lib.skill.jinhui.getUsableTarget(card,player,target);
+ });
+ var effect=0;
+ for(var i of cards){
+ effect+=get.effect(lib.skill.jinhui.getUsableTarget(i,player,target),i,player,player)
+ }
+ if(cards.length){
+ player.chooseBool('是否按“锦绘规则使用以下牌?”',get.translation(cards)).set('goon',effect>0).set('ai',()=>_status.event.goon);
+ }
+ else event.finish();
+ 'step 4'
+ if(!result.bool) event.finish();
+ 'step 5'
+ for(var card of cards){
+ var targetx=lib.skill.jinhui.getUsableTarget(card,player,target);
+ if(targetx){
+ player.useCard(card,targetx,false,'noai');
+ cards.remove(card);
+ if(cards.length) event.redo();
+ break;
+ }
+ }
+ },
+ getUsableTarget:function(card,player,target){
+ var info=get.info(card,false);
+ if(info.toself) return player.canUse(card,player,false)?player:false;
+ return (target.isIn&&player.canUse(card,target,false))?target:false;
+ },
+ ai:{
+ order:5,
+ result:{player:1},
+ },
+ },
+ qingman:{
+ audio:2,
+ trigger:{global:'phaseEnd'},
+ forced:true,
+ logTarget:'player',
+ filter:function(event,player){
+ if(!event.player.isAlive()) return false;
+ var num=player.countCards('h');
+ if(num>=5) return false;
+ var num2=0;
+ for(var i=1;i<=5;i++){
+ if(event.player.isEmpty(i)) num2++;
+ }
+ return num0){
+ dialog.push('红色牌
');
+ dialog.push(reds);
+ }
+ if(blacks.length>0){
+ dialog.push('黑色牌
');
+ dialog.push(blacks);
+ };
+ player.chooseButton(dialog,true).set('ai',function(button){
var player=_status.event.player;
var color=get.color(button.link),cards=player.getExpansions('syjiqiao');
var num1=cards.filter((card)=>get.color(card)==color),num2=cards.length-num1;
@@ -1545,7 +1698,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target:1,
},
},
- derivation:['releiji','rebiyue','new_retuxi','mingce','zhiyan','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'],
+ derivation:['releiji','rebiyue','new_retuxi','mingce','xinzhiyan','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'],
subSkill:{
clear:{
onremove:function(player){
@@ -4112,31 +4265,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//牛金
recuorui:{
audio:'cuorui',
- trigger:{player:'phaseBegin'},
+ enable:'phaseUse',
+ limited:true,
skillAnimation:true,
animationColor:'thunder',
filter:function(event,player){
- return player.phaseNumber==1&&player.hp>0&&game.hasPlayer(function(current){
+ return player.hp>0&&game.hasPlayer(function(current){
return current!=player&¤t.countGainableCards(player,'h')>0;
})
},
- direct:true,
+ filterTarget:function(card,player,target){
+ return target!=player&&target.countGainableCards(player,'h')>0;
+ },
+ selectTarget:function(){
+ return [1,_status.event.player.hp];
+ },
content:function(){
- 'step 0'
- player.chooseTarget([1,player.hp],get.prompt('recuorui'),'获得至多'+get.cnNumber(player.hp)+'名角色的各一张手牌',function(card,player,current){
- return current!=player&¤t.countGainableCards(player,'h')>0;
- }).set('ai',function(target){
- var att=get.attitude(_status.event.player,target);
- if(target.hasSkill('tuntian')) return att/10;
- return 1-att;
- });
- 'step 1'
- if(result.bool){
- var targets=result.targets;
- player.logSkill('recuorui',targets);
- targets.sortBySeat();
- player.gainMultiple(targets);
- }
+ if(num==0) player.awakenSkill('recuorui');
+ player.gainPlayerCard(target,true,'h');
},
},
reliewei:{
@@ -4144,13 +4290,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'dying'},
frequent:true,
filter:function(event,player){
- var evt=event.getParent();
- return evt&&evt.name=='damage'&&evt.source==player&&player.getHistory('custom',function(evt){
- return evt&&evt.reliewei==true;
- }).length0);
+ if(player==_status.currentPhase||player.countCards('h')) return false;
+ return event.card.name=='sha'||get.type(event.card,false)=='trick';
},
content:function(){
player.draw(2);
@@ -10269,7 +10410,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
//管辂和葛玄
gxlianhua:{
- derivation:['reyingzi','reguanxing','zhiyan','gongxin'],
+ derivation:['reyingzi','reguanxing','xinzhiyan','gongxin'],
audio:2,
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]={
@@ -10324,7 +10465,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else if(redcurrent!=player).sortBySeat());
+ player.addTempSkill('twlingfa_sha','roundStart');
+ break;
+ case 2:
+ player.logSkill('twlingfa',game.filterPlayer((current)=>current!=player).sortBySeat());
+ player.addTempSkill('twlingfa_tao','roundStart');
+ break;
+ default:
+ player.logSkill('twlingfa');
+ player.removeSkill('twlingfa');
+ game.log(player,'失去了技能','#g【令法】');
+ player.addSkillLog('twzhian');
+ break;
+ }
+ }
+ },
+ subSkill:{
+ sha:{
+ audio:'twlingfa',
+ trigger:{global:'useCard'},
+ charlotte:true,
+ forced:true,
+ filter:function(event,player){
+ return player!=event.player&&event.card.name=='sha'&&event.player.countCards('he')>0;
+ },
+ logTarget:'player',
+ content:function(){
+ 'step 0'
+ game.delayx();
+ trigger.player.chooseToDiscard('he','令法:弃置一张牌,或受到来自'+get.translation(player)+'的1点伤害').set('goon',get.damageEffect(trigger.player,player,trigger.player)<0).set('ai',function(card){
+ if(!_status.event.goon) return 0;
+ return 8-get.value(card);
+ });
+ 'step 1'
+ if(!result.bool){
+ trigger.player.damage();
+ }
+ },
+ mark:true,
+ marktext:'杀',
+ intro:{content:'其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。'},
+ },
+ tao:{
+ audio:'twlingfa',
+ trigger:{global:'useCard'},
+ charlotte:true,
+ forced:true,
+ filter:function(event,player){
+ return player!=event.player&&event.card.name=='tao'&&event.player.countCards('he')>0;
+ },
+ logTarget:'player',
+ content:function(){
+ 'step 0'
+ game.delayx();
+ trigger.player.chooseCard('he','令法:交给'+get.translation(player)+'一张牌,否则受到来自其的1点伤害').set('goon',get.damageEffect(trigger.player,player,trigger.player)<0).set('ai',function(card){
+ if(!_status.event.goon) return 0;
+ return 8-get.value(card);
+ });
+ 'step 1'
+ if(!result.bool){
+ trigger.player.damage();
+ }
+ else player.gain(result.cards,trigger.player,'giveAuto');
+ },
+ mark:true,
+ marktext:'桃',
+ intro:{content:'其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。'},
+ },
+ },
+ derivation:'twzhian',
+ },
+ twzhian:{
+ audio:2,
+ usable:1,
+ trigger:{global:'useCardAfter'},
+ direct:true,
+ filter:function(event,player){
+ var type=get.type(event.card);
+ if(type!='delay'&&type!='equip') return false;
+ if(event.cards.length!=1) return false;
+ var position=get.position(event.cards[0]);
+ if(position=='e'||position=='j') return true;
+ return event.player.isIn();
+ },
+ content:function(){
+ 'step 0'
+ var str=get.translation(trigger.cards[0]),owner=get.owner(trigger.cards[0]);
+ var choiceList=[
+ '弃置'+(owner?(get.translation(owner)+'区域内的'):'')+str,
+ '弃置一张手牌并获得'+str,
+ '对'+get.translation(trigger.player)+'造成1点伤害',
+ ];
+ var choices=[];
+ if(owner&&lib.filter.canBeDiscarded(card,player,owner)) choices.push('选项一');
+ else choiceList[0]=''+choiceList[0]+'';
+ if(owner&&player.hasCard(function(card){
+ return lib.filter.cardDiscardable(card,player,'twzhian');
+ },'h')&&lib.filter.canBeGained(card,player,owner)) choices.push('选项二');
+ else choiceList[1]=''+choiceList[1]+'';
+ if(trigger.player.isIn()) choices.push('选项三');
+ else choiceList[2]=''+choiceList[2]+'';
+ player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('twzhian')).set('ai',function(){
+ var player=_status.event.player,choices=_status.event.controls.slice(0);
+ var card=_status.event.getTrigger().cards[0],owner=get.owner(card);
+ var getEffect=function(choice){
+ if(choice=='cancel2') return 0.1;
+ if(choice=='选项三'){
+ return get.damageEffect(_status.event.getTrigger().player,player,player);
+ }
+ var result;
+ if(get.position(card)=='j'){
+ result=-get.effect(player,{
+ name:card.viewAs||card.name,
+ cards:[card],
+ },player,player)*get.sgn(get.attitude(player,owner));
+ }
+ else result=-(get.value(card,owner)-0.01)*get.sgn(get.attitude(player,owner));
+ if(choice=='选项一') return result;
+ if(player.hasCard(function(cardx){
+ return lib.filter.cardDiscardable(cardx,player,'twzhian')&&get.value(cardx,player)0) event.count=num;
+ else if(targets.length>0) event.redo();
+ else event.finish();
+ }
+ else if(targets.length>0) event.redo();
+ else event.finish();
+ 'step 2'
+ event.count--;
+ player.chooseBool(get.prompt('twyujue',target),'可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。').set('ai',function(){
+ var evt=_status.event.getParent();
+ return get.attitude(evt.player,evt.target)>0;
+ });
+ 'step 3'
+ if(result.bool){
+ player.logSkill('twyujue',target);
+ var list=[0,1];
+ if(target.hasSkill('twyujue_effect0')) list.remove(0);
+ if(target.hasSkill('twyujue_effect1')) list.remove(1);
+ if(!list.length) event.goto(6);
+ else if(list.length==1) event._result={index:list[0]};
+ else target.chooseControl().set('choiceList',['弃置攻击范围内一名角色的一张牌','下一次使用牌时,从牌堆中获得一张同类别的牌']).set('ai',function(){
+ var player=_status.event.player;
+ if(game.hasPlayer(function(current){
+ return player.inRange(current)&¤t.countDiscardableCards(player,'he')>0&&get.effect(current,{name:'guohe_copy2'},player,player)>0;
+ })) return 0;
+ return 1;
+ });
+ }
+ else event.goto(6);
+ 'step 4'
+ target.addTempSkill('twyujue_effect'+result.index);
+ if(result.index==0){
+ if(game.hasPlayer(function(current){
+ return target.inRange(current)&¤t.countDiscardableCards(target,'he')>0;
+ })){
+ target.chooseTarget('弃置攻击范围内一名角色的一张牌',true,function(card,player,target){
+ return player.inRange(target)&&target.countDiscardableCards(player,'he')>0;
+ }).set('ai',function(target){
+ var player=_status.event.player;
+ return get.effect(target,{name:'guohe_copy2'},player,player)
+ });
+ }
+ else event.goto(6);
+ }
+ else event.goto(6);
+ 'step 5'
+ if(result.bool){
+ var target2=result.targets[0];
+ target.line(target2,'green');
+ target.discardPlayerCard(target2,'he',true);
+ }
+ 'step 6'
+ game.delayx();
+ if(event.count>0) event.goto(2);
+ else if(targets.length) event.goto(1);
+ },
+ subSkill:{
+ clear:{
+ onremove:true,
+ },
+ effect0:{charlotte:true},
+ effect1:{
+ charlotte:true,
+ trigger:{player:'useCard'},
+ usable:1,
+ forced:true,
+ popup:false,
+ content:function(){
+ player.unmarkSkill('twyujue_effect1');
+ var type2=get.type2(trigger.card,false);
+ var card=get.cardPile2(function(card){
+ return get.type2(card,false)==type2;
+ });
+ if(card) trigger.player.gain(card,'gain2');
+ },
+ mark:true,
+ marktext:'爵',
+ intro:{content:'使用下一张牌时,从牌堆中获得一张类型相同的牌'},
+ },
+ },
+ },
+ twyujue_give:{
+ audio:2,
+ enable:'phaseUse',
+ filter:function(event,player){
+ if(!player.countCards('he')) return false;
+ var targets=game.filterPlayer(function(current){
+ return current!=player&¤t.hasSkill('twyujue');
+ });
+ if(!targets.length) return false;
+ for(var target of targets){
+ var num=2;
+ if(player.group=='qun'&&target.hasZhuSkill('twfengqi',player)) num=4;
+ if(target.countMark('twyujue_clear')=Math.max(1,ui.selected.cards.length);
+ },
+ selectTarget:function(){
+ var player=_status.event.player;
+ var targets=game.filterPlayer(function(current){
+ return current!=player&¤t.hasSkill('twyujue');
+ });
+ return targets.length>1?1:-1;
+ },
+ complexSelect:true,
+ prompt:function(){
+ var player=_status.event.player;
+ var targets=game.filterPlayer(function(current){
+ return current!=player&¤t.hasSkill('twyujue');
+ });
+ return '将任意张牌交给'+get.translation(targets)+(targets.length>1?'中的一人':'');
+ },
+ position:'he',
+ discard:false,
+ lose:false,
+ delay:false,
+ check:function(card){
+ if(ui.selected.cards.length) return 0;
+ var player=_status.event.player;
+ if(game.hasPlayer(function(current){
+ return lib.skill.twyujue_give.filterTarget(null,player,current)&&get.attitude(player,current)>0;
+ })){
+ var val=get.value(card);
+ if(val<=0&&get.position(card)=='e') return 100-val;
+ if(!player.hasSkill('twyujue_effect1')&&player.hasCard(function(cardx){
+ return cardx!=card&&player.getUseValue(cardx,null,true)>0;
+ },'hs')) return 6-get.value(card);
+ if(!player.hasSkill('twyujue_effect0')&&game.hasPlayer(function(current){
+ return player.inRange(current)&¤t.countDiscardableCards(player,'he')>0&&get.effect(current,{name:'guohe_copy2'},player,player)>0;
+ })) return 5.5-get.value(card);
+ }
+ return 0;
+ },
+ content:function(){
+ game.trySkillAudio('twyujue',target);
+ target.gain(cards,player,'give');
+ target.addTempSkill('twyujue_clear');
+ target.addMark('twyujue_clear',cards.length,false);
+ },
+ ai:{
+ order:10,
+ result:{target:1},
+ },
+ },
+ twgezhi:{
+ audio:2,
+ trigger:{player:'useCard'},
+ direct:true,
+ filter:function(event,player){
+ if(!player.countCards('h')) return false;
+ var evt=event.getParent('phaseUse');
+ if(!evt||evt.player!=player) return false;
+ var type=get.type2(event.card,false);
+ return !player.hasHistory('useCard',function(evtx){
+ return evtx!=event&&get.type2(evtx.card,false)==type&&evtx.getParent('phaseUse')==evt;
+ },event);
+ },
+ content:function(){
+ 'step 0'
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ player.chooseCard('是否发动【革制】重铸一张牌?').set('ai',function(card){
+ return 5.5-get.value(card);
+ });
+ 'step 1'
+ if(result.bool){
+ player.logSkill('twgezhi');
+ player.loseToDiscardpile(result.cards);
+ player.draw();
+ }
+ },
+ group:'twgezhi_buff',
+ subSkill:{
+ buff:{
+ audio:'twgezhi',
+ trigger:{player:'phaseUseEnd'},
+ direct:true,
+ filter:function(event,player){
+ return player.getHistory('lose',function(evt){
+ return evt.getParent(2).name=='twgezhi'&&evt.getParent('phaseUse')==event;
+ }).length>1;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseTarget(get.prompt('twgezhi'),'你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。',function(card,player,target){
+ return !target.hasSkill('twgezhi_选项一')||!target.hasSkill('twgezhi_选项二')||!target.hasSkill('twgezhi_选项三');
+ }).set('ai',function(target){
+ return get.attitude(_status.event.player,target);
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('twgezhi',target);
+ var list=[];
+ for(var i=1;i<=3;i++){
+ var str='选项'+get.cnNumber(i,true);
+ if(!target.hasSkill('twgezhi_'+str)) list.push(str);
+ }
+ if(list.length==1) event._result={control:list[0]};
+ else target.chooseControl(list).set('choiceList',['令自己的攻击范围+2','令自己的手牌上限+2','令自己的体力上限+1']).set('ai',function(){
+ var player=_status.event.player,controls=_status.event.controls;
+ if(controls.contains('选项一')&&game.hasPlayer(function(current){
+ return (get.realAttitude||get.attitude)(player,current)<0&&get.distance(player,current,'attack')>1;
+ })) return '选项一';
+ if(controls.contains('选项二')&&player.needsToDiscard()) return '选项二';
+ if(controls.contains('选项三')) return '选项三';
+ return controls.randomGet();
+ });
+ }
+ else{
+ event._triggered=null;
+ event.finish();
+ }
+ 'step 2'
+ target.addSkill('twgezhi_'+result.control);
+ if(result.control=='选项三') target.gainMaxHp();
+ 'step 3'
+ game.delayx();
+ },
+ },
+ 选项一:{
+ charlotte:true,
+ mod:{
+ attackFrom:function(from,to,distance){
+ return distance-2;
+ },
+ },
+ mark:true,
+ marktext:' +2 ',
+ intro:{content:'攻击范围+2'},
+ },
+ 选项二:{
+ charlotte:true,
+ mod:{
+ maxHandcard:function(player,num){
+ return num+2;
+ },
+ },
+ mark:true,
+ marktext:' +2 ',
+ intro:{content:'手牌上限+2'},
+ },
+ 选项三:{
+ charlotte:true,
+ mark:true,
+ marktext:' +1 ',
+ intro:{content:'体力上限+1'},
+ },
+ },
+ },
+ twfengqi:{
+ audio:2,
+ zhuSkill:true,
+ trigger:{player:'twgezhi_buffAfter'},
+ direct:true,
+ filter:function(event,player){
+ if(!event.target||!event.target.isIn()||!player.hasZhuSkill('twfengqi',event.target)) return false;
+ var skills=event.target.getStockSkills(true,true);
+ for(var i of skills){
+ var info=get.info(i);
+ if(info.zhuSkill&&!event.target.hasZhuSkill(i)) return true;
+ }
+ return false;
+ },
+ skillAnimation:true,
+ animationColor:'thunder',
+ content:function(){
+ 'step 0'
+ event.target=trigger.target;
+ event.target.chooseBool(get.prompt('twfengqi'),'激活武将牌上的所有主公技');
+ 'step 1'
+ if(result.bool){
+ target.logSkill('twfengqi',player);
+ var skills=target.getStockSkills(true,true).filter(function(i){
+ var info=get.info(i);
+ if(info.zhuSkill&&!target.hasZhuSkill(i)) return true;
+ });
+ target.markAuto('zhuSkill_twfengqi',skills);
+ game.log(target,'激活了武将牌上的主公技')
+ }
+ },
+ },
+ twsidai:{
+ audio:2,
+ enable:'phaseUse',
+ usable:1,
+ locked:false,
+ skillAnimation:true,
+ animationColor:'fire',
+ filter:function(event,player){
+ var cards=player.getCards('h',{type:'basic'});
+ if(!cards.length) return false;
+ for(var i of cards){
+ if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false;
+ }
+ return event.filterCard(get.autoViewAs({name:'sha',storage:{twsidai:true}},cards),player,event);
+ },
+ viewAs:{name:'sha',storage:{twsidai:true}},
+ filterCard:{type:'basic'},
+ selectCard:-1,
+ check:()=>1,
+ onuse:function(result,player){
+ player.awakenSkill('twsidai');
+ player.addTempSkill('twsidai_effect');
+ },
+ ai:{
+ order:2.9,
+ result:{
+ target:function(player,target){
+ var cards=ui.selected.cards.slice(0);
+ var names=[];
+ for(var i of cards) names.add(i.name);
+ if(names.length=0) return -20;
+ return lib.card.sha.ai.result.target.apply(this,arguments);
+ },
+ },
+ },
+ mod:{
+ cardUsable:function(card){
+ if(card.storage&&card.storage.twsidai) return Infinity;
+ },
+ targetInRange:function(card){
+ if(card.storage&&card.storage.twsidai) return true;
+ },
+ },
+ subSkill:{
+ effect:{
+ charlotte:true,
+ trigger:{source:'damageBegin1'},
+ filter:function(event,player){
+ if(!event.card||!event.card.storage||!event.card.storage.twsidai||event.getParent().type!='card') return false;
+ for(var i of event.cards){
+ if(i.name=='jiu') return true;
+ }
+ return false;
+ },
+ forced:true,
+ popup:false,
+ content:function(){
+ trigger.num*=2;
+ game.log(trigger.card,'的伤害值','#y×2');
+ },
+ group:['twsidai_tao','twsidai_shan'],
+ },
+ tao:{
+ trigger:{source:'damageSource'},
+ filter:function(event,player){
+ if(!event.card||!event.card.storage||!event.card.storage.twsidai||!event.player.isIn()) return false;
+ for(var i of event.cards){
+ if(i.name=='tao') return true;
+ }
+ return false;
+ },
+ forced:true,
+ popup:false,
+ content:function(){
+ trigger.player.loseMaxHp();
+ },
+ },
+ shan:{
+ trigger:{player:'useCardToPlayered'},
+ filter:function(event,player){
+ if(!event.card||!event.card.storage||!event.card.storage.twsidai||!event.target.isIn()) return false;
+ for(var i of event.cards){
+ if(i.name=='shan') return true;
+ }
+ return false;
+ },
+ forced:true,
+ popup:false,
+ content:function(){
+ 'step 0'
+ trigger.target.chooseToDiscard('h',{type:'basic'},'弃置一张基本牌,否则不能响应'+get.translation(trigger.card)).set('ai',function(card){
+ var player=_status.event.player;
+ if(player.hasCard('hs',function(cardx){
+ return cardx!=card&&get.name(cardx,player)=='shan';
+ })) return 12-get.value(card);
+ return 0;
+ });
+ 'step 1'
+ if(!result.bool) trigger.directHit.add(trigger.target);
+ },
+ },
+ },
+ },
+ twjieyu:{
+ audio:2,
+ trigger:{player:['phaseJieshuBegin','damageEnd']},
+ round:1,
+ filter:function(event,player){
+ if(event.name!='phaseJieshu'){
+ var history=player.getHistory('damage');
+ for(var i of history){
+ if(i==event) break;
+ return false;
+ }
+ var all=player.actionHistory;
+ for(var i=all.length-2;i>=0;i--){
+ if(all[i].damage.length) return false;
+ if(all[i].isRound) break;
+ }
+ }
+ return player.countCards('h')>0&&!player.hasCard(function(card){
+ return !lib.filter.cardDiscardable(card,player,'twjieyu');
+ },'h')
+ },
+ check:function(event,player){
+ var cards=[],names=[];
+ for(var i=0;ieffect1;
+ },
+ content:function(){
+ var targets=lib.skill.twhengjiang.logTarget(trigger,player);
+ trigger.targets.length=0;
+ trigger.targets.addArray(targets);
+ trigger.getParent().triggeredTargets1.length=0;
+ trigger.getParent().twhengjiang_buffed=true;
+ player.addTempSkill('twhengjiang2','phaseUseAfter');
+ },
+ },
+ twhengjiang2:{
+ charlotte:true,
+ trigger:{player:'useCardAfter'},
+ forced:true,
+ popup:false,
+ filter:function(event,player){
+ return event.twhengjiang_buffed&&game.hasPlayer2(function(current){
+ return current!=player&&(current.hasHistory('useCard',function(evt){
+ return evt.respondTo&&evt.respondTo[1]==event.card;
+ })||current.hasHistory('respond',function(evt){
+ return evt.respondTo&&evt.respondTo[1]==event.card;
+ }))
+ });
+ },
+ content:function(){
+ player.draw(game.countPlayer2(function(current){
+ return current!=player&&(current.hasHistory('useCard',function(evt){
+ return evt.respondTo&&evt.respondTo[1]==trigger.card;
+ })||current.hasHistory('respond',function(evt){
+ return evt.respondTo&&evt.respondTo[1]==trigger.card;
+ }))
+ }));
+ },
+ },
twyuanhu:{
audio:'yuanhu',
enable:'phaseUse',
@@ -2051,6 +2792,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
+ characterReplace:{
+ tw_caocao:['tw_caocao','yj_caocao'],
+ },
dynamicTranslate:{
twfengpo:function(player){
if(player.storage.twfengpo) return '当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的红色牌数)。';
@@ -2162,7 +2906,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twyuanhu_info:'出牌阶段限一次。你可将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌,其回复1点体力。若其的体力值或手牌数不大于你,则你可摸一张牌,且可以于本回合的结束阶段再发动一次〖援护〗。',
twjuezhu:'决助',
twjuezhu_info:'限定技。准备阶段,你可废除一个坐骑栏,令一名角色获得〖飞影〗并废除判定区。该角色死亡后,你恢复以此法废除的装备栏。',
- tw_mobile:'移动版',
+ tw_zangba:'TW臧霸',
+ twhanyu:'捍御',
+ twhanyu_info:'锁定技。游戏开始时,你获得牌堆中的基本牌,锦囊牌,装备牌各一张。',
+ twhengjiang:'横江',
+ twhengjiang_info:'出牌阶段限一次,当你使用基本牌或普通锦囊牌指定唯一目标后,你可将此牌的目标改为攻击范围内的所有合法目标,然后你于此牌结算结束后摸X张牌(X为因响应此牌而使用或打出过牌的角色数)。',
+ tw_huojun:'霍峻',
+ twsidai:'伺怠',
+ twsidai_info:'限定技。出牌阶段,你可以将手牌区内的所有基本牌当做【杀】使用(无距离和次数限制)。若此牌对应的实体牌中:包含【闪】,则目标角色成为此牌的目标后,需弃置一张基本牌,否则不可响应此牌;包含【桃】,则当目标角色受到此牌的伤害后,其减1点体力上限;包含【酒】,则当目标角色受到此牌的伤害时,此伤害×2。',
+ twjieyu:'竭御',
+ twjieyu_info:'每轮限一次。结束阶段开始时,或当你于一轮内第一次受到伤害后,你可以弃置所有手牌,然后从弃牌堆中获得不同牌名的基本牌各一张。',
+ tw_liuhong:'TW刘宏',
+ twyujue:'鬻爵',
+ twyujue_give:'鬻爵',
+ twyujue_info:'①其他角色的出牌阶段内,可以交给你任意张牌(每阶段上限为两张)。②当你于回合外获得其他角色的一张牌后,你可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。',
+ twgezhi:'革制',
+ twgezhi_info:'①当你于出牌阶段内首次使用某种类别的牌时,你可以重铸一张手牌。②出牌阶段结束时,若你本阶段内因〖革制①〗失去过至少两张牌,则你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。',
+ twfengqi:'烽起',
+ twfengqi_info:'主公技,锁定技。①其他群势力角色发动〖鬻爵①〗时,将每阶段上限改为四张。②以其他角色为目标的〖革制②〗结算结束后,目标角色可以激活其武将牌上的主公技。',
+ tw_caocao:'TW曹操',
+ twlingfa:'令法',
+ twlingfa_info:'①第一轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。②第二轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。③第三轮游戏开始时,你失去〖令法〗并获得〖治暗〗。',
+ twzhian:'治暗',
+ twzhian_info:'每回合限一次。一名角色使用装备牌或延时锦囊牌后,你可选择:⒈弃置位于场上的此牌。⒉弃置一张手牌并获得位于场上的此牌。⒊对其造成1点伤害。',
+
+ tw_mobile:'移动版·海外服',
+ tw_mobile2:'海外服异构',
tw_yijiang:'一将成名TW',
tw_english:'英文版',
}
diff --git a/character/yijiang.js b/character/yijiang.js
index 58587d7f8..914952c4e 100755
--- a/character/yijiang.js
+++ b/character/yijiang.js
@@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
characterSort:{
yijiang:{
yijiang_2011:['caozhi','yujin','zhangchunhua','xin_fazheng','xin_masu','xin_xushu','xusheng','lingtong','wuguotai','chengong','gaoshun'],
- yijiang_2012:['old_wangyi','xunyou','zhonghui','madai','liaohua','old_guanzhang','bulianshi','handang','chengpu','liubiao','old_huaxiong','caozhang'],
+ yijiang_2012:['old_wangyi','xunyou','zhonghui','old_madai','liaohua','old_guanzhang','bulianshi','handang','chengpu','liubiao','old_huaxiong','caozhang'],
yijiang_2013:['manchong','guohuai','caochong','guanping','liufeng','jianyong','yufan','panzhangmazhong','zhuran','xin_liru','fuhuanghou'],
yijiang_2014:['hanhaoshihuan','chenqun','caozhen','zhangsong','wuyi','zhoucang','zhuhuan','guyong','sunluban','yj_jushou','caifuren'],
yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'],
@@ -39,7 +39,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fuhuanghou:['female','qun',3,['qiuyuan','zhuikong']],
zhonghui:['male','wei',4,['quanji','zili']],
jianyong:['male','shu',3,['qiaoshui','jyzongshi']],
- madai:['male','shu',4,['mashu','oldqianxi']],
+ old_madai:['male','shu',4,['mashu','qianxi']],
liufeng:['male','shu',4,['xiansi']],
manchong:['male','wei',3,['junxing','yuce']],
chenqun:['male','wei',3,['pindi','faen']],
@@ -963,14 +963,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
unique:true,
limited:true,
enable:'chooseToUse',
- init:function(player){
- player.storage.xinfuli=false;
- },
mark:true,
filter:function(event,player){
if(event.type!='dying') return false;
if(player!=event.dying) return false;
- if(player.storage.xinfuli) return false;
return true;
},
content:function(){
@@ -4406,7 +4402,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:button.link[2],
nature:button.link[3],
storage:{
- nowuxie:true,
jiaozhao:player,
}
};
@@ -4417,7 +4412,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var nature=result.links[0][3];
var fakecard={
name:chosen,
- storage:{nowuxie:true,jiaozhao:player},
+ storage:{jiaozhao:player},
};
if(nature) fakecard.nature=nature;
event.target.showCards(game.createCard({
@@ -9298,7 +9293,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
result:{
target:function(player,target){
if(player!=target) return 0;
- if(player.hasSkill('requanji')||(player.countCards('h')+2<=player.hp+player.storage.quanji.length)) return 1;
+ if(player.hasSkill('requanji')||(player.countCards('h')+2<=player.hp+player.getExpansions('quanji').length)) return 1;
return 0;
}
},
@@ -9335,10 +9330,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
limited:true,
enable:'phaseUse',
filter:function(event,player){
- return !player.storage.xianzhou&&player.countCards('e')>0;
- },
- init:function(player){
- player.storage.xianzhou=false;
+ return player.countCards('e')>0;
},
filterTarget:function(card,player,target){
return player!=target;
@@ -9351,7 +9343,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=player.getCards('e');
target.gain(cards,player,'give');
event.num=cards.length;
- player.storage.xianzhou=true;
game.delay();
"step 1"
target.chooseTarget([1,event.num],'令'+get.translation(player)+'回复'+
@@ -12071,7 +12062,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
wangyi:['wangyi','old_wangyi'],
caozhang:['re_caozhang','xin_caozhang','caozhang'],
guanzhang:['guanzhang','old_guanzhang'],
- madai:['old_madai','madai'],
+ madai:['re_madai','old_madai','madai'],
liaohua:['xin_liaohua','re_liaohua','liaohua'],
bulianshi:['re_bulianshi','bulianshi','old_bulianshi'],
handang:['xin_handang','re_handang','handang'],
@@ -12140,7 +12131,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangsong:'张松',
guyong:'顾雍',
jianyong:'简雍',
- madai:'马岱',
+ old_madai:'马岱',
+ gz_madai:'马岱',
xin_xushu:'徐庶',
manchong:'满宠',
liufeng:'刘封',
diff --git a/character/yingbian.js b/character/yingbian.js
index 72127e608..1d869d5d0 100644
--- a/character/yingbian.js
+++ b/character/yingbian.js
@@ -335,10 +335,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.isIn()&&player.canUse(card,target,null,true)){
player.useCard(card,target,cards);
}
- else event.finish();
'step 1'
player.removeSkill('maihuo_effect');
},
+ marktext:'祸',
intro:{
content:'expansion',
markcount:'expansion',
@@ -354,11 +354,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
locked:false,
filter:function(event,player){
- return event.player.hasSkill('maihuo_effect')&&event.player.storage.maihuo_effect&&event.player.storage.maihuo_effect.length>0;
+ return event.player.hasSkill('maihuo_effect')&&event.player.getExpansions('maihuo_effect').length>0;
},
content:function(){
trigger.player.removeSkill('maihuo_effect');
- game.delayx();
},
},
},
@@ -2915,7 +2914,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
wanyi:'婉嫕',
wanyi_info:'每回合每项限一次。出牌阶段,你可以将一张具有应变效果的牌当做【逐近弃远】/【出其不意】/【水淹七军】/【洞烛先机】使用。',
maihuo:'埋祸',
- maihuo_info:'①当你成为其他角色使用【杀】的目标后,若此【杀】不为转化牌且有对应的实体牌且其武将牌上没有“祸”且你是此牌的唯一目标,则你可以令此牌对你无效,并将此【杀】置于其武将牌上,称为“祸”。②一名其他角色的出牌阶段开始时,若其武将牌上有“祸”,则其对你使用此“祸”(有距离限制且计入次数限制)。③当你对有“祸”的其他角色造成伤害后,你移去其“祸”。',
+ maihuo_info:'①当你成为其他角色使用【杀】的目标后,若此【杀】不为转化牌且有对应的实体牌且其武将牌上没有“祸”且你是此牌的唯一目标,则你可以令此牌对你无效,并将此【杀】置于其武将牌上,称为“祸”。②一名其他角色的出牌阶段开始时,若其武将牌上有“祸”,则其对你使用此“祸”(有距离限制且计入次数限制,若你不是此牌的合法目标,则改为将此“祸”置入弃牌堆)。③当你对有“祸”的其他角色造成伤害后,你移去其“祸”。',
xinchang:'辛敞',
canmou:'参谋',
canmou_info:'一名角色使用普通锦囊牌指定第一个目标时,若其手牌数为全场唯一最多,则你可以为此牌增加一个额外目标。',
diff --git a/game/asset.js b/game/asset.js
index 12e4a5d50..510809066 100644
--- a/game/asset.js
+++ b/game/asset.js
@@ -1,5 +1,5 @@
window.noname_asset_list=[
- 'v1.9.113.2',
+ 'v1.9.113.3',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@@ -851,6 +851,9 @@ window.noname_asset_list=[
'audio/die/ol_chendeng.mp3',
'audio/die/re_sunyi.mp3',
'audio/die/tianyu.mp3',
+ 'audio/die/re_guohuanghou.mp3',
+ 'audio/die/tw_caocao.mp3',
+ 'audio/die/tw_liuhong.mp3',
'audio/skill/decadezishou1.mp3',
'audio/skill/decadezishou2.mp3',
@@ -3878,6 +3881,18 @@ window.noname_asset_list=[
'audio/skill/yuanchou2.mp3',
'audio/skill/zhuitao1.mp3',
'audio/skill/zhuitao2.mp3',
+ 'audio/skill/redanxin1.mp3',
+ 'audio/skill/redanxin2.mp3',
+ 'audio/skill/rejiaozhao1.mp3',
+ 'audio/skill/rejiaozhao2.mp3',
+ 'audio/skill/twgezhi1.mp3',
+ 'audio/skill/twgezhi2.mp3',
+ 'audio/skill/twlingfa1.mp3',
+ 'audio/skill/twlingfa2.mp3',
+ 'audio/skill/twyujue1.mp3',
+ 'audio/skill/twyujue2.mp3',
+ 'audio/skill/twzhian1.mp3',
+ 'audio/skill/twzhian2.mp3',
'audio/voice/male/0.mp3',
'audio/voice/male/1.mp3',
@@ -4916,6 +4931,14 @@ window.noname_asset_list=[
'image/character/re_sunyi.jpg',
'image/character/tianyu.jpg',
'image/character/fanjiangzhangda.jpg',
+ 'image/character/diy_hanlong.jpg',
+ 'image/character/re_guohuanghou.jpg',
+ 'image/character/re_madai.jpg',
+ 'image/character/tw_caocao.jpg',
+ 'image/character/tw_huojun.jpg',
+ 'image/character/tw_liuhong.jpg',
+ 'image/character/tw_zangba.jpg',
+ 'image/character/zhaoyan.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',
diff --git a/game/game.js b/game/game.js
index 9ce25a2f7..b42b9d065 100644
--- a/game/game.js
+++ b/game/game.js
@@ -11422,6 +11422,37 @@
'step 2'
game.delay();
},
+ addExtraTarget:function(){
+ "step 0"
+ event.num=0;
+ "step 1"
+ var target=targets[num],info=get.info(card);
+ if(target==event.target&&event.addedTarget){
+ event.addedTargets[num]=event.addedTarget;
+ event._result={bool:false};
+ }
+ else if(game.hasPlayer(function(current){
+ return info.filterAddedTarget(card,player,current,target)
+ })){
+ var next=player.chooseTarget(get.translation(event.card)+':选择'+get.translation(targets[num])+'对应的指向目标',function(card,player,target){
+ var card=get.card(),info=get.info(card);
+ return info.filterAddedTarget(card,player,target,_status.event.preTarget)
+ },true);
+ next.set('_get_card',card);
+ next.set('preTarget',targets[num]);
+ }
+ else{
+ event.addedTargets[num]=false;
+ event._result={bool:false};
+ }
+ "step 2"
+ if(result.bool){
+ event.addedTargets[num]=result.targets[0];
+ player.line2([targets[num],result.targets[0]]);
+ }
+ event.num++;
+ if(event.num'
}
str+='发动了';
- if(!info.direct){
+ if(!info.direct&&info.log!==false){
game.log(player,str,'【'+get.skillTranslation(skill,player)+'】');
if(info.logv!==false) game.logv(player,skill,targets);
player.trySkillAnimate(skill,skill,checkShow);
@@ -16511,9 +16562,9 @@
}
}
if(_status.characterlist){
- if(lib.character[player.name]) _status.characterlist.add(player.name);
- if(lib.character[player.name1]) _status.characterlist.add(player.name1);
- if(lib.character[player.name2]) _status.characterlist.add(player.name2);
+ if(lib.character[player.name]&&player.name.indexOf('gz_shibing')!=0) _status.characterlist.add(player.name);
+ if(lib.character[player.name1]&&player.name1.indexOf('gz_shibing')!=0) _status.characterlist.add(player.name1);
+ if(lib.character[player.name2]&&player.name2.indexOf('gz_shibing')!=0) _status.characterlist.add(player.name2);
}
event.cards=player.getCards('hejsx');
if(event.cards.length){
@@ -16943,6 +16994,15 @@
},
player:{
//新函数
+ setSeatNum:function(num){
+ game.broadcastAll(function(player,num){
+ player.seatNum=num;
+ },this,num);
+ },
+ getSeatNum:function(){
+ if(typeof this.seatNum=='number') return this.seatNum;
+ return 0;
+ },
hasSex:function(sex){
if(this.sex=='unknown') return false;
if(this.sex=='double') return true;
@@ -18121,6 +18181,7 @@
phaseNumber:this.phaseNumber,
unseen:this.isUnseen(0),
unseen2:this.isUnseen(1),
+ seatNum:this.seatNum,
}
for(var i=0;i0
+ var hs=player.getCards('h');
+ if(!hs.length) return false;
+ for(var i=0;i