diff --git a/character/guozhan.js b/character/guozhan.js
index bbd0bac8c..e5df47f87 100755
--- a/character/guozhan.js
+++ b/character/guozhan.js
@@ -1,4 +1,5 @@
character.guozhan={
+ connect:true,
character:{
ganfuren:['female','shu',3,['shushen','shenzhi']],
mifuren:['female','shu',3,['guixiu','cunsi']],
diff --git a/character/hearth.js b/character/hearth.js
index fbc5f93da..de11f995b 100755
--- a/character/hearth.js
+++ b/character/hearth.js
@@ -940,7 +940,7 @@ character.hearth={
forced:true,
filter:function(event,player){
return typeof event.player.storage.shixu=='number'&&
- event.player.storage.shixu>3000&&event.player.num('he')>0;
+ event.player.storage.shixu>3000&&event.player.num('he')>0&&event.player.isAlive();
},
content:function(){
player.line(trigger.player,'green');
diff --git a/character/shenhua.js b/character/shenhua.js
index 444e514ea..dd874fc4d 100644
--- a/character/shenhua.js
+++ b/character/shenhua.js
@@ -514,7 +514,9 @@ character.shenhua={
player.judge(function(card){
if(get.suit(card)=='heart') return -1;
return 1;
- },ui.special);
+ },ui.special).nogain=function(card){
+ return get.suit(card)!='heart';
+ };
"step 1"
if(result.bool){
result.card.goto(ui.special);
diff --git a/character/sp.js b/character/sp.js
index 10dad24a0..93db2ffed 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -353,7 +353,7 @@ character.sp={
trigger:{global:'phaseEnd'},
forced:true,
filter:function(event,player){
- return player.skills.contains('fenyong2');
+ return player.skills.contains('fenyong2')&&event.player.isAlive();
},
content:function(){
'step 0'
@@ -2516,7 +2516,7 @@ character.sp={
lixia:{
trigger:{global:'phaseEnd'},
filter:function(event,player){
- return event.player!=player&&get.distance(event.player,player,'attack')>1;
+ return event.player.isAlive()&&event.player!=player&&get.distance(event.player,player,'attack')>1;
},
forced:true,
content:function(){
@@ -3093,12 +3093,15 @@ character.sp={
player.chooseCardTarget({
filterCard:true,
filterTarget:function(card,player,target){
+ var trigger=_status.event.getParent()._trigger;
return lib.filter.targetEnabled(trigger.card,player,target)&&target!=trigger.targets[0];
},
ai1:function(card){
return 6-ai.get.value(card);
},
ai2:function(target){
+ var trigger=_status.event.getParent()._trigger;
+ var player=_status.event.player;
return ai.get.effect(target,trigger.card,player,player);
},
prompt:'是否发动【奋迅】?'
@@ -3405,14 +3408,13 @@ character.sp={
content:function(){
"step 0"
var next=player.chooseToDiscard('是否发动【名士】?',{color:'black'});
- next.ai=function(card){
+ next.set('ai',function(card){
return 9-ai.get.value(card);
- }
- next.logSkill='mingshi';
+ });
+ next.set('logSkill','mingshi');
"step 1"
if(result.bool){
trigger.num--;
- player.logSkill('mingshi');
}
},
ai:{
@@ -3438,9 +3440,9 @@ character.sp={
"step 1"
player.chooseTarget('是否发动【礼让】?',function(card,player,target){
return player!=target
- }).ai=function(target){
- return ai.get.attitude(player,target);
- };
+ }).set('ai',function(target){
+ return ai.get.attitude(_status.event.player,target);
+ });
"step 2"
if(result.bool){
var target=result.targets[0];
@@ -3599,15 +3601,16 @@ character.sp={
content:function(){
"step 0"
var nono=(Math.abs(ai.get.attitude(player,trigger.player))<3);
- var next=player.chooseToDiscard('是否对'+get.translation(trigger.player)+'发动【鸩毒】?');
- next.ai=function(card){
- if(nono) return -1;
- if(ai.get.damageEffect(trigger.player,player,player)>0){
- return 7-ai.get.useful(card);
- }
- return -1;
+ if(ai.get.damageEffect(trigger.player,player,player)<=0){
+ nono=true
}
- next.logSkill=['zhendu',trigger.player];
+ var next=player.chooseToDiscard('是否对'+get.translation(trigger.player)+'发动【鸩毒】?');
+ next.set('ai',function(card){
+ if(_status.event.nono) return -1;
+ return 7-ai.get.useful(card);
+ });
+ next.set('logSkill',['zhendu',trigger.player]);
+ next.set('nono',nono);
"step 1"
if(result.bool){
trigger.player.damage();
@@ -3633,7 +3636,12 @@ character.sp={
return _status.currentPhase!=event.player;
},
content:function(){
- player.storage.qiluan=true;
+ if(!player.storage.qiluan){
+ player.storage.qiluan=1;
+ }
+ else{
+ player.storage.qiluan++;
+ }
},
group:['qiluan2','qiluan3']
},
@@ -3645,8 +3653,8 @@ character.sp={
return player.storage.qiluan?true:false;
},
content:function(){
- player.draw(3);
- player.storage.qiluan=false;
+ player.draw(3*player.storage.qiluan);
+ player.storage.qiluan=0;
}
},
qiluan3:{
@@ -3657,7 +3665,12 @@ character.sp={
return _status.currentPhase==event.player;
},
content:function(){
- player.draw(3);
+ var num=3;
+ if(player.storage.qiluan){
+ num+=3*player.storage.qiluan;
+ player.storage.qiluan=0;
+ }
+ player.draw(num);
},
},
shangyi:{
@@ -3669,9 +3682,9 @@ character.sp={
},
content:function(){
"step 0"
- player.chooseCardButton(target,target.get('h')).filterButton=function(button){
+ player.chooseCardButton(target,target.get('h')).set('filterButton',function(button){
return get.color(button.link)=='black';
- }
+ });
"step 1"
if(result.bool){
target.discard(result.links[0]);
@@ -3696,7 +3709,8 @@ character.sp={
content:function(){
player.draw(2);
},
- // audio:2,
+ audio:2,
+ audioname:['liushan']
},
shoucheng:{
trigger:{global:'loseEnd'},
@@ -3714,6 +3728,7 @@ character.sp={
},
content:function(){
trigger.player.draw();
+ player.line(trigger.player,'green');
},
ai:{
threaten:1.3,
@@ -3829,16 +3844,7 @@ character.sp={
player.storage.cunsi=true;
game.delay();
target.addSkill('yongjue');
- target.marks.yongjue=target.markCharacter(player,{
- name:'存嗣',
- content:'$
【勇决】
每当其他角色于回合内使用一张杀,若目标不是你,你可以获得之(每回合最多能以此法获得一张杀)
'
- })
- game.addVideo('markCharacter',target,{
- name:'存嗣',
- content:'$【勇决】
每当其他角色于回合内使用一张杀,若目标不是你,你可以获得之(每回合最多能以此法获得一张杀)',
- id:'yongjue',
- target:player.dataset.position
- });
+ target.markSkillCharacter('yongjue',player,'存嗣','$
【勇决】
每当其他角色于回合内使用一张杀,若目标不是你,你可以获得之(每回合最多能以此法获得一张杀)
');
"step 1"
player.turnOver();
player.removeSkill('guixiu');
@@ -3943,31 +3949,32 @@ character.sp={
return ai.get.damageEffect(event.player,player,player)>0;
},
filter:function(event,player){
- return event.player!=player&&player.num('h',{type:'basic'});
+ return event.player.isAlive()&&event.player!=player&&player.num('h',{type:'basic'});
},
direct:true,
content:function(){
"step 0"
var nono=(Math.abs(ai.get.attitude(player,trigger.player))<3);
- var next=player.chooseToDiscard('是否发动【骁果】?',{type:'basic'});
- next.ai=function(card){
- if(nono) return 0;
- if(ai.get.damageEffect(trigger.player,player,player)>0){
- return 8-ai.get.useful(card);
- }
- return 0;
+ if(ai.get.damageEffect(trigger.player,player,player)<=0){
+ nono=true;
}
- next.logSkill=['xiaoguo',trigger.player];
+ var next=player.chooseToDiscard('是否对'+get.translation(trigger.player)+'发动【骁果】?',{type:'basic'});
+ next.set('ai',function(card){
+ if(_status.event.nono) return 0;
+ return 8-ai.get.useful(card);
+ });
+ next.set('logSkill',['xiaoguo',trigger.player]);
+ next.set('nono',nono);
"step 1"
if(result.bool){
var nono=(ai.get.damageEffect(trigger.player,player,trigger.player)>=0);
- trigger.player.chooseToDiscard('he',{type:'equip'}).ai=function(card){
- if(nono){
+ trigger.player.chooseToDiscard('he',{type:'equip'}).set('ai',function(card){
+ if(_status.event.nono){
return 0;
}
- if(trigger.player.hp==1) return 10-ai.get.value(card);
+ if(_status.event.player.hp==1) return 10-ai.get.value(card);
return 9-ai.get.value(card);
- }
+ }).set('nono',nono);
}
else{
event.finish();
@@ -3990,6 +3997,9 @@ character.sp={
forced:true,
popup:false,
priority:6,
+ check:function(){
+ return false;
+ },
filter:function(event,player){
return event.player!=player&&event.parent.name=='damage'&&event.parent.source&&event.parent.source!=event.player;
},
@@ -4002,9 +4012,9 @@ character.sp={
else{
str='随势:是否令'+get.translation(player)+'摸一张牌?'
}
- trigger.parent.source.chooseBool(str).ai=function(){
- return ai.get.attitude(trigger.parent.source,player)>0;
- };
+ trigger.parent.source.chooseBool(str).set('ai',function(){
+ return ai.get.attitude(_status.event.player,_status.event.target)>0;
+ }).set('target',player);
'step 1'
if(result.bool){
player.logSkill('suishi');
@@ -4033,9 +4043,9 @@ character.sp={
else{
str='随势:是否令'+get.translation(player)+'流失一点体力?'
}
- trigger.source.chooseBool(str).ai=function(){
- return ai.get.attitude(trigger.source,player)<0;
- };
+ trigger.source.chooseBool(str).set('ai',function(){
+ return ai.get.attitude(_status.event.player,_status.event.target)<0;
+ }).set('target',player);
'step 1'
if(result.bool){
player.logSkill('suishi');
@@ -4059,12 +4069,12 @@ character.sp={
"step 0"
player.chooseTarget('是否发动【死谏】?',function(card,player,target){
return player!=target&&target.num('he')>0;
- }).ai=function(target){
- return -ai.get.attitude(player,target);
- }
+ }).set('ai',function(target){
+ return -ai.get.attitude(_status.event.player,target);
+ });
"step 1"
if(result.bool){
- player.logSkill('sijian');
+ player.logSkill('sijian',result.targets);
event.target=result.targets[0];
player.discardPlayerCard(event.target,true);
}
@@ -4188,21 +4198,27 @@ character.sp={
player.storage.xiongyi=false;
},
filterTarget:function(card,player,target){
- if(_status.auto||player!=game.me){
- if(ai.get.attitude(player,target)<=0) return false;
+ if(get.mode()=='guozhan'){
+ if(player.identity=='unknown'||player.identity=='ye') return player==target;
+ return player.identity==target.identity;
+ }
+ else{
+ return true;
}
- return player!=target;
},
multitarget:true,
multiline:true,
- selectTarget:[0,2],
+ selectTarget:function(){
+ if(get.mode()=='guozhan') return -1;
+ return [1,3];
+ },
content:function(){
"step 0"
player.storage.xiongyi=true;
player.unmarkSkill('xiongyi');
- game.asyncDraw([player].concat(targets),3);
+ game.asyncDraw(targets,3);
"step 1"
- if(targets.length<=1){
+ if(targets.length<=2){
player.recover();
}
},
@@ -4212,26 +4228,21 @@ character.sp={
ai:{
order:1,
result:{
- player:function(player){
+ target:function(player){
var num=player.num('h');
if(player.hp==1) return 1;
if(player.hp==2&&num<=1) return 1;
if(player.hp==3&&num==0) return 1;
- if(player.hp>=3&&num>=3) return -10;
- if(lib.config.mode=='identity'||lib.config.mode=='guozhan'){
+ if(player.hp>=3&&num>=3) return 0;
+ var mode=get.mode();
+ if(mode=='identity'||mode=='guozhan'){
for(var i=0;i
=0;
@@ -3303,7 +3303,7 @@ character.yijiang={
globalSilent:true,
trigger:{global:'phaseEnd'},
filter:function(event,player){
- return event.player!=player&&!event.player.tempSkills.qieting3;
+ return event.player!=player&&!event.player.tempSkills.qieting3&&event.player.isAlive();
},
frequent:true,
content:function(){
diff --git a/game/game.js b/game/game.js
index b579a97b4..c184e64b0 100755
--- a/game/game.js
+++ b/game/game.js
@@ -4927,7 +4927,7 @@
if(event.promptdiscard){
event.promptdiscard.close();
}
- if(event.logSkill&&event.result.bool){
+ if(event.logSkill&&event.result.bool&&!game.online){
if(typeof event.logSkill=='string'){
player.logSkill(event.logSkill);
}
@@ -5357,6 +5357,9 @@
if(event.isMine()){
event.controlbar=ui.create.control(event.controls);
if(event.dialog){
+ if(Array.isArray(event.dialog)){
+ event.dialog=ui.create.dialog.apply(this,event.dialog);
+ }
event.dialog.open();
}
else if(event.prompt){
@@ -5382,7 +5385,7 @@
else event.result.control=event.controls[event.choice];
}
_status.imchoosing=false;
- if(event.dialog) event.dialog.close();
+ if(event.dialog&&event.dialog.close) event.dialog.close();
if(event.controlbar) event.controlbar.close();
},
chooseBool:function(){
@@ -8892,6 +8895,7 @@
else str=get.translation(_status.event.name);
next.judgestr=str;
next.content=lib.element.playerproto.judge;
+ return next;
},
turnOver:function(){
var next=game.createEvent('turnOver');
@@ -15265,6 +15269,7 @@
addRecentCharacter:function(){
for(var i=0;i