diff --git a/audio/skill/spxizhan3.mp3 b/audio/skill/spxizhan3.mp3
new file mode 100644
index 000000000..12cfe99c3
Binary files /dev/null and b/audio/skill/spxizhan3.mp3 differ
diff --git a/audio/skill/spxizhan4.mp3 b/audio/skill/spxizhan4.mp3
new file mode 100644
index 000000000..46100322b
Binary files /dev/null and b/audio/skill/spxizhan4.mp3 differ
diff --git a/audio/skill/tspowei3.mp3 b/audio/skill/tspowei3.mp3
new file mode 100644
index 000000000..d2c8c54b6
Binary files /dev/null and b/audio/skill/tspowei3.mp3 differ
diff --git a/character/extra.js b/character/extra.js
index 9c9e06176..8f7bef616 100755
--- a/character/extra.js
+++ b/character/extra.js
@@ -2935,22 +2935,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
tspowei:{
- audio:2,
+ audio:3,
dutySkill:true,
- forced:true,
- trigger:{global:'damageEnd'},
- logTarget:'player',
- filter:function(event,player){
- return event.player&&event.player.isIn()&&event.player.hasMark('dulie');
- },
- content:function(){
- trigger.player.removeMark('dulie',trigger.player.countMark('dulie'));
- },
+ locked:true,
derivation:'shenzhu',
- group:['tspowei_init','tspowei_move','tspowei_achieve','tspowei_fail','tspowei_use'],
+ group:['tspowei_init','tspowei_move','tspowei_achieve','tspowei_fail','tspowei_use','tspowei_remove'],
subSkill:{
+ remove:{
+ audio:'tspowei3',
+ trigger:{global:'damageEnd'},
+ filter:function(event,player){
+ return event.player&&event.player.isIn()&&event.player.hasMark('dulie');
+ },
+ forced:true,
+ logTarget:'player',
+ content:function(){
+ trigger.player.removeMark('dulie',trigger.player.countMark('dulie'));
+ },
+ },
use:{
- audio:'tspowei',
+ audio:'tspowei3',
trigger:{global:'phaseBegin'},
direct:true,
filter:function(event,player){
@@ -3004,7 +3008,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
init:{
- audio:'tspowei',
+ audio:'tspowei3',
trigger:{
global:'phaseBefore',
player:'enterGame',
@@ -3022,7 +3026,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
move:{
- audio:'tspowei',
+ audio:'tspowei3',
trigger:{player:'phaseBegin'},
forced:true,
filter:function(event,player){
@@ -3078,6 +3082,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
tspowei1:{audio:true},
tspowei2:{audio:true},
+ tspowei3:{audio:true},
shenzhu:{
audio:2,
trigger:{player:'useCardAfter'},
diff --git a/character/mobile.js b/character/mobile.js
index 763991b08..f0aa3dc29 100644
--- a/character/mobile.js
+++ b/character/mobile.js
@@ -577,7 +577,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var next=game.createEvent('mbdanggu_clique');
next.player=player;
next.setContent(lib.skill.mbdanggu.contentx);
- player.draw(2);
+ player.draw();
}
}
}
@@ -1628,7 +1628,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return event.name=='respond'?0.5:false;
},
filter:function(event,player){
- return ['shan','wuxie'].contains(event.card.name)&&evt.skill=='scsmiaoyu'&&event.cards&&event.cards.length==2&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.countDiscardableCards(player,'he');
+ return ['shan','wuxie'].contains(event.card.name)&&event.skill=='scsmiaoyu'&&event.cards&&event.cards.length==2&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.countDiscardableCards(player,'he');
},
forced:true,
popup:false,
@@ -13775,7 +13775,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mbzhenfu_info:'结束阶段,若你本回合因弃置失去过牌,你可以令一名其他角色获得1点护甲。',
shichangshi:'十常侍',
mbdanggu:'党锢',
- mbdanggu_info:'锁定技。①游戏开始时,你获得十张“常侍”牌,然后你进行一次结党。②当你修整结束后,你进行一次结党并摸两张牌。③若你有亮出的“常侍”牌,你视为拥有这些牌的技能。',
+ mbdanggu_info:'锁定技。①游戏开始时,你获得十张“常侍”牌,然后你进行一次结党。②当你修整结束后,你进行一次结党并摸一张牌。③若你有亮出的“常侍”牌,你视为拥有这些牌的技能。',
mbdanggu_faq:'关于结党',
mbdanggu_faq_info:'
系统随机选择一张未亮出过的“常侍”牌,然后选择四张未亮出过的“常侍”牌(若剩余“常侍”牌中有「高望」,则必定出现)。你观看前者,然后从后者中选择一名与前者互相认可的“常侍”牌(不认可的“常侍”牌为不可选状态),你选择这两张牌。然后若此时不为双将模式,你将这两张武将牌作为你的武将牌(不移除原有技能);否则你获得这两张武将牌上的技能。',
mbmowang:'殁亡',
diff --git a/character/shiji.js b/character/shiji.js
index 63ee976e0..89478594d 100644
--- a/character/shiji.js
+++ b/character/shiji.js
@@ -1083,65 +1083,72 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
spxizhan:{
- trigger:{global:'phaseBegin'},
- forced:true,
- locked:false,
- logTarget:'player',
- filter:function(event,player){
- return player!=event.player;
- },
- content:function(){
- 'step 0'
- player.chooseToDiscard('he','嬉战:弃置一张牌或失去1点体力','根据弃置的牌对'+get.translation(trigger.player)+'视为使用如下牌:
♠,其使用【酒】;♥,你使用【无中生有】
♣,对其使用【铁索连环】;♦:对其使用火【杀】').set('ai',function(card){
- var player=_status.event.player,target=_status.event.getTrigger().player;
- var suit=get.suit(card,player),list;
- switch(suit){
- case 'spade':list=[{name:'jiu'},target,target];break;
- case 'heart':list=[{name:'wuzhong'},player,player];break;
- case 'club':list=[{name:'tiesuo'},player,target];break;
- case 'diamond':list=[{name:'sha',nature:'fire'},player,target];break;
- }
- list[0].isCard=true;
- var eff=0;
- if(list[1].canUse(list[0],list[2],false)) eff=get.effect(list[2],list[0],list[1],player);
- if(eff>=0||suit=='club') eff=Math.max(eff,5);
- return eff*1.5-get.value(card);
- });
- 'step 1'
- if(result.bool){
- player.addTempSkill('spxizhan_spfangzong');
- var target=trigger.player,card=result.cards[0],suit=get.suit(card,player);
- if((!target||!target.isIn())&&suit!='heart') return;
- switch(suit){
- case 'spade':
- target.chooseUseTarget('jiu',true);
- break;
- case 'heart':
- player.chooseUseTarget('wuzhong',true);
- break;
- case 'club':
- if(player.canUse('tiesuo',target)) player.useCard({
- name:'tiesuo',
- isCard:true,
- },target);
- break;
- case 'diamond':
- if(player.canUse({
- name:'sha',
- isCard:true,
- nature:'fire',
- },target,false)) player.useCard({
- name:'sha',
- isCard:true,
- nature:'fire',
- },target,false);
- break;
- }
- }
- else player.loseHp();
- },
+ audio:4,
+ group:'spxizhan_effect',
+ locked:true,
subSkill:{
spfangzong:{charlotte:true},
+ effect:{
+ trigger:{global:'phaseBegin'},
+ filter:function(event,player){
+ return player!=event.player;
+ },
+ forced:true,
+ logTarget:'player',
+ content:function(){
+ 'step 0'
+ player.chooseToDiscard('he','嬉战:弃置一张牌或失去1点体力','根据弃置的牌对'+get.translation(trigger.player)+'视为使用如下牌:
♠,其使用【酒】;♥,你使用【无中生有】
♣,对其使用【铁索连环】;♦:对其使用火【杀】').set('ai',function(card){
+ var player=_status.event.player,target=_status.event.getTrigger().player;
+ var suit=get.suit(card,player),list;
+ switch(suit){
+ case 'spade':list=[{name:'jiu'},target,target];break;
+ case 'heart':list=[{name:'wuzhong'},player,player];break;
+ case 'club':list=[{name:'tiesuo'},player,target];break;
+ case 'diamond':list=[{name:'sha',nature:'fire'},player,target];break;
+ }
+ list[0].isCard=true;
+ var eff=0;
+ if(list[1].canUse(list[0],list[2],false)) eff=get.effect(list[2],list[0],list[1],player);
+ if(eff>=0||suit=='club') eff=Math.max(eff,5);
+ return eff*1.5-get.value(card);
+ });
+ 'step 1'
+ if(result.bool){
+ player.addTempSkill('spxizhan_spfangzong');
+ var target=trigger.player,card=result.cards[0],suit=get.suit(card,player);
+ if(!lib.suit.contains(suit)||(!target||!target.isIn())&&suit!='heart') return;
+ game.broadcastAll(function(suit){
+ if(lib.config.background_speak) game.playAudio('skill','spfangzong'+(4-lib.suit.indexOf(suit)));
+ },suit);
+ switch(suit){
+ case 'spade':
+ target.chooseUseTarget('jiu',true);
+ break;
+ case 'heart':
+ player.chooseUseTarget('wuzhong',true);
+ break;
+ case 'club':
+ if(player.canUse('tiesuo',target)) player.useCard({
+ name:'tiesuo',
+ isCard:true,
+ },target);
+ break;
+ case 'diamond':
+ if(player.canUse({
+ name:'sha',
+ isCard:true,
+ nature:'fire',
+ },target,false)) player.useCard({
+ name:'sha',
+ isCard:true,
+ nature:'fire',
+ },target,false);
+ break;
+ }
+ }
+ else player.loseHp();
+ },
+ },
},
},
//高览
@@ -1906,28 +1913,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//周处
rechuhai:{
audio:'chuhai',
- inherit:'chuhai',
dutySkill:true,
locked:true,
- group:['rechuhai_add','rechuhai_achieve','rechuhai_fail'],
+ group:['rechuhai_add','rechuhai_achieve','rechuhai_fail','rechuhai_chuhai'],
derivation:'zhangming',
- prompt:'与一名其他角色进行拼点',
subSkill:{
+ chuhai:{
+ audio:['chuhai',2],
+ inherit:'chuhai',
+ prompt:'与一名其他角色进行拼点',
+ },
add:{
trigger:{player:'compare'},
forced:true,
popup:false,
filter:function(event,player){
- return event.getParent().name=='rechuhai'&&event.num1<13&&player.countCards('e')<4;
+ return event.getParent().name=='rechuhai_chuhai'&&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',
+ audio:['chuhai',2],
trigger:{player:'equipAfter'},
forced:true,
skillAnimation:true,
@@ -1944,10 +1954,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
fail:{
+ audio:'chuhai3',
trigger:{player:'chooseToCompareAfter'},
forced:true,
filter:function(event,player){
- return event.getParent().name=='rechuhai'&&event.num1<7&&!event.result.bool;
+ return event.getParent().name=='rechuhai_chuhai'&&event.num1<7&&!event.result.bool;
},
content:function(){
player.awakenSkill('rechuhai');
@@ -1956,6 +1967,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
+ chuhai3:{audio:true},
zhangming:{
audio:2,
trigger:{player:'useCard'},
@@ -2040,7 +2052,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
chuhai:{
- audio:2,
+ audio:3,
enable:'phaseUse',
usable:1,
filter:function(event,player){
@@ -2476,8 +2488,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'useCardAfter'},
dutySkill:true,
forced:true,
- skillAnimation:true,
- animationColor:'water',
+ direct:true,
filter:function(event,player){
if(!player.storage.xingqi||!player.storage.xingqi.length) return false;
var map={basic:0,trick:0,equip:0};
@@ -2492,6 +2503,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
+ player.logSkill('twmibei_achieve');
game.log(player,'成功完成使命');
player.awakenSkill('mibei');
var list=['basic','equip','trick'],cards=[];
@@ -2509,6 +2521,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
derivation:'xinmouli',
subSkill:{
silent:{
+ charlotte:true,
trigger:{player:'phaseZhunbeiBegin'},
silent:true,
lastDo:true,
@@ -2518,15 +2531,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
player.addTempSkill('mibei_mark');
},
- charlotte:true,
},
- mark:{},
+ mark:{charlotte:true},
fail:{
+ audio:'mibei2',
trigger:{player:'phaseJieshuBegin'},
- forced:true,
filter:function(event,player){
return !player.getStorage('xingqi').length&&player.hasSkill('mibei_mark');
},
+ forced:true,
content:function(){
game.log(player,'使命失败');
player.awakenSkill('mibei');
@@ -2535,6 +2548,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
+ mibei1:{audio:true},
+ mibei2:{audio:true},
xinmouli:{
audio:'mouli',
enable:'phaseUse',
@@ -2909,20 +2924,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qingyu:{
audio:3,
dutySkill:true,
- trigger:{player:'damageBegin2'},
- forced:true,
- filter:function(event,player){
- return player.countCards('he',function(card){
- return lib.filter.cardDiscardable(card,player,'qingyu');
- })>1;
- },
- content:function(){
- trigger.cancel();
- player.chooseToDiscard(2,'he',true);
- },
- group:['qingyu_achieve','qingyu_fail'],
+ locked:true,
+ group:['qingyu_achieve','qingyu_fail','qingyu_defend'],
subSkill:{
+ defend:{
+ audio:'qingyu1',
+ trigger:{player:'damageBegin2'},
+ filter:function(event,player){
+ return player.countCards('he',function(card){
+ return lib.filter.cardDiscardable(card,player,'qingyu_defend');
+ })>1;
+ },
+ forced:true,
+ content:function(){
+ trigger.cancel();
+ player.chooseToDiscard(2,'he',true);
+ },
+ },
achieve:{
+ audio:'qingyu3',
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
skillAnimation:true,
@@ -2937,6 +2957,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
fail:{
+ audio:'qingyu2',
trigger:{player:'dying'},
forced:true,
content:function(){
@@ -2948,6 +2969,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
derivation:'xuancun',
},
+ qingyu1:{audio:true},
+ qingyu2:{audio:true},
+ qingyu3:{audio:true},
xuancun:{
audio:2,
trigger:{global:'phaseEnd'},
@@ -6502,9 +6526,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spxiangzhen:'象阵',
spxiangzhen_info:'锁定技。①【南蛮入侵】对你无效。②当有角色使用的【南蛮入侵】结算结束后,若有角色因此牌受到过伤害,则你和使用者各摸一张牌。',
spfangzong:'芳踪',
- spfangzong_info:'锁定技。若你于当前回合内未发动过〖嬉战〗选择过选项二,则:①你不能于回合内使用具有伤害标签的牌指定攻击范围内的角色为目标。②攻击范围内包含你的角色不能使用具有伤害标签的牌指定你为目标。③结束阶段,你将手牌摸至X张(X为场上存活人数且至多为8)',
+ spfangzong_info:'锁定技。①你不能于回合内使用具有伤害标签的牌指定攻击范围内的角色为目标。②攻击范围内包含你的角色不能使用具有伤害标签的牌指定你为目标。③结束阶段,你将手牌摸至X张(X为场上存活人数且至多为8)',
spxizhan:'嬉战',
- spxizhan_info:'其他角色的回合开始时,你须选择一项:①失去1点体力。②弃置一张牌。然后若此牌的花色为:♠,其视为使用一张【酒】;♥,你视为使用一张【无中生有】;♣,你视为对其使用【铁索连环】;♦:你视为对其使用火【杀】(无距离限制)。',
+ spxizhan_info:'其他角色的回合开始时,你须选择一项:①失去1点体力。②弃置一张牌并令〖芳踪〗于本回合失效,然后若此牌的花色为:♠,其视为使用一张【酒】;♥,你视为使用一张【无中生有】;♣,你视为对其使用【铁索连环】;♦:你视为对其使用火【杀】(无距离限制)。',
sp_cuiyan:'手杀崔琰',
spyajun:'雅俊',
spyajun_info:'①摸牌阶段,你令额定摸牌数+1。②出牌阶段开始时,你可以用一张本回合获得的牌与其他角色拼点。若你赢,则你可将其中一张拼点牌置于牌堆顶。若你没赢,你本回合的手牌上限-1。',
diff --git a/character/tw.js b/character/tw.js
index fcf04f842..81540bc54 100644
--- a/character/tw.js
+++ b/character/tw.js
@@ -2409,7 +2409,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
intro:{content:'已使用牌名:$'},
subSkill:{
achieve:{
- audio:'mibei',
+ audio:'mibei1',
skillAnimation:true,
animationColor:'water',
},
@@ -2427,7 +2427,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
fail:{
- audio:'mibei',
+ audio:'mibei2',
trigger:{player:'phaseUseEnd'},
forced:true,
filter:function(event,player){
@@ -11190,7 +11190,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
filter:function(event,player){
return player.getHistory('lose',function(evt){
- return evt.getParent(2).name=='twgezhi'&&evt.getParent('phaseUse')==event;
+ return evt.getParent(3).name=='twgezhi'&&evt.getParent('phaseUse')==event;
}).length>1;
},
content:function(){
diff --git a/character/yingbian.js b/character/yingbian.js
index 180bf0cc5..03a13a88e 100644
--- a/character/yingbian.js
+++ b/character/yingbian.js
@@ -1613,9 +1613,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
var target=trigger.player;
- target.addTempSkill('yifa2');
+ target.addTempSkill('yifa2',{player:'phaseEnd'});
target.addMark('yifa2',1,false);
},
+ ai:{threaten:0.8},
},
yifa2:{
charlotte:true,
@@ -3719,7 +3720,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
bolan_info:'①出牌阶段开始时,你可从三个描述中带有“出牌阶段限一次”的技能中选择一个,令当前回合角色获得直至此阶段结束。②其他角色出牌阶段限一次,其可以失去1点体力,令你发动一次〖博览①〗。',
yifa:'仪法',
yifa2:'仪法',
- yifa_info:'锁定技,其他角色使用【杀】或黑色普通锦囊牌指定你为目标后,其手牌上限-1直到回合结束。',
+ yifa_info:'锁定技,其他角色使用【杀】或黑色普通锦囊牌指定你为目标后,其手牌上限-1直到其回合结束。',
ol_huaxin:'OL华歆',
caozhao:'草诏',
caozhao_backup:'草诏',