修复bug

This commit is contained in:
copcap 2023-07-16 18:03:51 +08:00
parent e7e939ecc1
commit 00cfb844ef
6 changed files with 93 additions and 24 deletions

View File

@ -932,6 +932,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.line(target,'thunder'); player.line(target,'thunder');
target.damage('thunder'); target.damage('thunder');
}, },
ai:{
effect:{
player:function(card,player,target){
if(ui.selected.targets.length) return;
if(player!=target&&get.type2(card)=='trick') return [1,0,1,-2];
},
},
},
subSkill:{ subSkill:{
add:{ add:{
audio:'dcnutao', audio:'dcnutao',

View File

@ -1854,7 +1854,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target:function(card,player,target){ target:function(card,player,target){
if(get.tag(card,'damage')){ if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.canMoveCard(true)||!target.hasFriend()) return; if(target._jsrgrangjie_aiChecking) return;
target._jsrgrangjie_aiChecking=true;
var moveCard=target.canMoveCard(true);
delete target._jsrgrangjie_aiChecking;
if(!moveCard||!target.hasFriend()) return;
var num=1; var num=1;
if(get.attitude(player,target)>0){ if(get.attitude(player,target)>0){
if(player.needsToDiscard()){ if(player.needsToDiscard()){

View File

@ -166,7 +166,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
enable:'phaseUse', enable:'phaseUse',
filter:function(event,player){ filter:function(event,player){
return player.countCards('h',{type:'equip'})>0; return player.countCards('he',{type:'equip'})>0;
}, },
filterCard:function(card){ filterCard:function(card){
return get.type(card)=='equip'; return get.type(card)=='equip';
@ -277,6 +277,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(typeof result.links[0]!='string') result.links.reverse(); if(typeof result.links[0]!='string') result.links.reverse();
var card=result.links[1]; var card=result.links[1];
target.gain(card,'gain2'); target.gain(card,'gain2');
event.cards.remove(card);
if(result.links[0]!='获得剩余的牌') event.finish(); if(result.links[0]!='获得剩余的牌') event.finish();
} }
else event.finish(); else event.finish();

View File

@ -725,6 +725,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(targets[i].hp==1){ if(targets[i].hp==1){
eff*=1.5; eff*=1.5;
} }
if(get.attitude(player,targets[i])==0||targets[i].group=='qun'){
eff+=0.5;
}
num+=eff; num+=eff;
} }
if(!player.needsToDiscard(-1)){ if(!player.needsToDiscard(-1)){
@ -766,6 +769,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return num+2*game.countPlayer(current=>player!=current&&current.group=='qun'); return num+2*game.countPlayer(current=>player!=current&&current.group=='qun');
} }
} }
},
ai:{
effect:{
player:function(card,player,target){
if(player!=target&&target&&target.group=='qun') return [1,0.2];
},
},
} }
}, },
//庞统 //庞统
@ -1614,13 +1624,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player; var player=_status.event.player;
if(ui.selected.targets.length){ if(ui.selected.targets.length){
var current=ui.selected.targets[0]; var current=ui.selected.targets[0];
if(current.group=='shu'&&current.hp>=player.hp){ if(current.group=='shu'&&current.hp>=player.hp&&current!=player){
return -get.attitude(player,target); return -get.attitude(player,target);
} }
return Math.abs(get.attitude(player,current)); return Math.abs(get.attitude(player,current));
} }
else{ else{
if(target.group=='shu'&&target.hp>=player.hp&&game.hasPlayer(current=>{ if(target.group=='shu'&&target.hp>=player.hp&&target!=player&&game.hasPlayer(current=>{
return get.attitude(player,current)<0; return get.attitude(player,current)<0;
})) return 10; })) return 10;
return 1; return 1;
@ -1630,7 +1640,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){ if(result.bool){
var targets=result.targets; var targets=result.targets;
event.targets=targets; event.targets=targets;
if(targets[0].group!='shu'||targets[0].hp<player.hp) targets.reverse(); if(targets[0].group!='shu'||targets[0].hp<player.hp||targets[0]==player) targets.reverse();
player.logSkill('sbjijiang',targets,false); player.logSkill('sbjijiang',targets,false);
player.line2(targets); player.line2(targets);
var choiceList=[ var choiceList=[
@ -3442,7 +3452,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
sbjiuyuan:{ sbjiuyuan:{
audio:2, audio:2,
usable:1,
trigger:{global:'useCard'}, trigger:{global:'useCard'},
forced:true, forced:true,
zhuSkill:true, zhuSkill:true,

View File

@ -5,8 +5,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true, connect:true,
character:{ character:{
ganfurenmifuren:['female','shu',3,['dcchanjuan','dcxunbie']], ganfurenmifuren:['female','shu',3,['dcchanjuan','dcxunbie']],
dc_ganfuren:['female','shu',3,['dcshushen','dcshenzhi'],['unseen']], dc_ganfuren:['female','shu',3,['dcshushen','dcshenzhi']],
dc_mifuren:['female','shu',3,['dcguixiu','dccunsi'],['unseen']], dc_mifuren:['female','shu',3,['dcguixiu','dccunsi']],
yue_caiwenji:['female','qun',3,['dcshuangjia','dcbeifen']], yue_caiwenji:['female','qun',3,['dcshuangjia','dcbeifen']],
wanglang:['male','wei',3,['regushe','rejici']], wanglang:['male','wei',3,['regushe','rejici']],
ruanji:['male','wei',3,['dczhaowen','dcjiudun']], ruanji:['male','wei',3,['dczhaowen','dcjiudun']],
@ -286,7 +286,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
filter:function(event,player){ filter:function(event,player){
if(event.targets.length!=1) return false; if(event.targets.length!=1) return false;
if(event.card.name!='sha'&&get.type(event.card,false)!='trick') return false; if(!['basic','trick'].contains(get.type(event.card,false))) return false;
if(event.getParent(2).name=='dcchanjuan') return false; if(event.getParent(2).name=='dcchanjuan') return false;
return !player.getStorage('dcchanjuan').contains(event.card.name); return !player.getStorage('dcchanjuan').contains(event.card.name);
}, },
@ -298,12 +298,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
nature:trigger.card.nature, nature:trigger.card.nature,
isCard:true, isCard:true,
} }
player.chooseUseTarget(card,get.prompt('dcchanjuan'),false,false).set('prompt2','视为使用一张'+get.translation(card)).set('logSkill','dcchanjuan'); player.chooseUseTarget(card,get.prompt('dcchanjuan'),false,false).set('prompt2','视为使用一张'+get.translation(card)).set('logSkill','dcchanjuan');
'step 1' 'step 1'
if(result.bool){ if(result.bool){
player.markAuto('dcchanjuan',[trigger.card.name]); player.markAuto('dcchanjuan',[trigger.card.name]);
var list1=trigger.targets.slice(),list2=result.targets.slice(); var list1=trigger.targets,list2=result.targets;
if(list1.removeArray(list2).length==0&&list2.removeArray(list1).length==0) player.draw(); if(list1.slice().removeArray(list2).length==0&&list2.slice().removeArray(list1).length==0) player.draw();
} }
}, },
ai:{ ai:{
@ -368,7 +368,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.reinit('ganfurenmifuren',character,false); player.reinit('ganfurenmifuren',character,false);
'step 2' 'step 2'
player.recover(1-player.hp); player.recover(1-player.hp);
player.addTempSkill('dcxunbie_muteki');
}, },
subSkill:{
muteki:{
trigger:{
player:'damageBegin4',
},
charlotte:true,
forced:true,
content:function(){
trigger.cancel();
},
mark:true,
intro:{content:'防止本回合受到的所有伤害'},
ai:{
nofire:true,
nothunder:true,
nodamage:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'damage')) return 'zeroplayertarget';
}
},
}
}
}
}, },
//散装版糜夫人 //散装版糜夫人
dcguixiu:{ dcguixiu:{
@ -377,6 +402,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:'phaseBegin', player:'phaseBegin',
}, },
forced:true, forced:true,
onremove:true,
filter:function(event,player){ filter:function(event,player){
return !player.hasMark('dcguixiu'); return !player.hasMark('dcguixiu');
}, },
@ -499,7 +525,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
]; ];
if(target.isDamaged()) choices.unshift('选项一'); if(target.isDamaged()) choices.unshift('选项一');
else choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'</span>'; else choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'</span>';
player.chooseControl(choice).set('choiceList',choiceList).set('prompt','淑慎:请选择一项').set('ai',()=>{ player.chooseControl(choices).set('choiceList',choiceList).set('prompt','淑慎:请选择一项').set('ai',()=>{
return _status.event.choice; return _status.event.choice;
}).set('choice',function(){ }).set('choice',function(){
if(target.hp<=2||get.recoverEffect(target,player,player)>20) return 0; if(target.hp<=2||get.recoverEffect(target,player,player)>20) return 0;
@ -7743,9 +7769,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
if(player==_status.currentPhase) return false; if(player==_status.currentPhase) return false;
return !player.hasHistory('damage',evt=>{ return !event.nature&&!player.hasHistory('damage',evt=>{
return !evt.nature&&evt!=event; return !evt.nature&&evt!=event;
},event)||!player.hasHistory('damage',evt=>{ },event)||event.nature&&!player.hasHistory('damage',evt=>{
return evt.nature&&evt!=event; return evt.nature&&evt!=event;
},event)&&event.source&&event.source.isIn()&&event.source.countGainableCards(player,'h'); },event)&&event.source&&event.source.isIn()&&event.source.countGainableCards(player,'h');
}, },
@ -13643,7 +13669,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(evtx.getParent('phaseUse')!=evt) return false; if(evtx.getParent('phaseUse')!=evt) return false;
return !evtx.card.storage||!evtx.card.storage.tongli; return !evtx.card.storage||!evtx.card.storage.tongli;
}).length; }).length;
var str='视为额外使用'+get.cnNumber(num)+'张' //var str='视为额外使用'+get.cnNumber(num)+'张'
var str='额外结算'+get.cnNumber(num)+'次'
if(event.card.name=='sha'&&event.card.nature) str+=get.translation(event.card.nature); if(event.card.name=='sha'&&event.card.nature) str+=get.translation(event.card.nature);
return (str+'【'+get.translation(event.card.name)+'】'); return (str+'【'+get.translation(event.card.name)+'】');
}, },
@ -28419,13 +28446,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
"xinfu_bijing":{ "xinfu_bijing":{
audio:2, audio:2,
group:["xinfu_bijing_lose","xinfu_bijing_discard"],
subSkill:{ subSkill:{
lose:{ lose:{
trigger:{ trigger:{
global:"phaseDiscardBegin", global:"phaseDiscardBegin",
}, },
audio:'xinfu_bijing', audio:'xinfu_bijing',
charlotte:true,
filter:function(event,player){ filter:function(event,player){
if(event.player==player) return false; if(event.player==player) return false;
return player.getHistory('lose',function(evt){ return player.getHistory('lose',function(evt){
@ -28446,6 +28473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:"phaseZhunbeiBegin", player:"phaseZhunbeiBegin",
}, },
forced:true, forced:true,
charlotte:true,
filter:function(event,player){ filter:function(event,player){
return player.getCards('h',function(card){ return player.getCards('h',function(card){
return card.hasGaintag('xinfu_bijing'); return card.hasGaintag('xinfu_bijing');
@ -28478,6 +28506,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){ if(result.bool){
player.logSkill('xinfu_bijing'); player.logSkill('xinfu_bijing');
player.addGaintag(result.cards,'xinfu_bijing'); player.addGaintag(result.cards,'xinfu_bijing');
player.addSkill('xinfu_bijing_lose');
player.addSkill('xinfu_bijing_discard');
} }
}, },
}, },
@ -29626,7 +29656,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_tunan":"图南", "xinfu_tunan":"图南",
"xinfu_tunan_info":"出牌阶段限一次,你可以展示牌堆顶的一张牌并选择一名其他角色,然后该角色选择一项:使用此牌(无距离限制);或将此牌当普通【杀】使用。", "xinfu_tunan_info":"出牌阶段限一次,你可以展示牌堆顶的一张牌并选择一名其他角色,然后该角色选择一项:使用此牌(无距离限制);或将此牌当普通【杀】使用。",
"xinfu_bijing":"闭境", "xinfu_bijing":"闭境",
"xinfu_bijing_info":"结束阶段,你可以选择至多两张手牌并标记为“闭境”。②其他角色的弃牌阶段开始时,若你于本回合内失去过“闭境”,其弃置两张牌。③准备阶段,你重铸所有“闭境”牌。", "xinfu_bijing_info":"结束阶段,你可以选择至多两张手牌并标记为“闭境”然后你获得如下效果1.其他角色的弃牌阶段开始时,若你于本回合内失去过“闭境”,其弃置两张牌2.准备阶段,你重铸所有“闭境”牌。",
"xinfu_zhenxing":"镇行", "xinfu_zhenxing":"镇行",
"xinfu_zhenxing_info":"结束阶段开始时或当你受到伤害后,你可以观看牌堆顶的至多三张牌,然后你获得其中与其余牌花色均不相同的一张牌。", "xinfu_zhenxing_info":"结束阶段开始时或当你受到伤害后,你可以观看牌堆顶的至多三张牌,然后你获得其中与其余牌花色均不相同的一张牌。",
"xinfu_qianxin":"遣信", "xinfu_qianxin":"遣信",
@ -30366,7 +30396,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcmingfa_info:'①出牌阶段限一次。当你使用【杀】或普通锦囊牌结算结束后若你的武将牌上没有“明伐”牌则你可以将此牌作为“明伐”牌置于武将牌上并选择一名其他角色记录该角色和此牌的名称。②一名角色的回合结束时若其是你〖明伐①〗记录的角色则你视为对其依次使用X张〖明伐①〗记录的牌然后移去“明伐”牌X为其手牌数且至少为1至多为5。③一名角色死亡时若其是你〖明伐①〗记录的角色则你移去“明伐”牌。', dcmingfa_info:'①出牌阶段限一次。当你使用【杀】或普通锦囊牌结算结束后若你的武将牌上没有“明伐”牌则你可以将此牌作为“明伐”牌置于武将牌上并选择一名其他角色记录该角色和此牌的名称。②一名角色的回合结束时若其是你〖明伐①〗记录的角色则你视为对其依次使用X张〖明伐①〗记录的牌然后移去“明伐”牌X为其手牌数且至少为1至多为5。③一名角色死亡时若其是你〖明伐①〗记录的角色则你移去“明伐”牌。',
zhangxuan:'张嫙', zhangxuan:'张嫙',
tongli:'同礼', tongli:'同礼',
tongli_info:'当你于出牌阶段内不因〖同礼〗而使用基本牌或普通锦囊牌指定第一个目标后若你手牌中的花色数和你于本阶段内不因〖同礼〗而使用过的牌数相等则你可以于此牌结算结束后依次视为对此牌的所有目标使用X张名称和属性相同的牌X为你手牌中的花色数。', //tongli_info:'当你于出牌阶段内不因〖同礼〗而使用基本牌或普通锦囊牌指定第一个目标后若你手牌中的花色数和你于本阶段内不因〖同礼〗而使用过的牌数相等则你可以于此牌结算结束后依次视为对此牌的所有目标使用X张名称和属性相同的牌X为你手牌中的花色数。',
tongli_info:'当你于出牌阶段内使用基本牌或普通锦囊牌指定第一个目标后若你手牌中的花色数和你于本阶段内使用过的牌数相等则你可以令此牌额外结算X次X为你手牌中的花色数。',
shezang:'奢葬', shezang:'奢葬',
shezang_info:'每轮限一次。当你或你回合内的其他角色进入濒死状态时,你可以从牌堆中获得每种花色的牌各一张。', shezang_info:'每轮限一次。当你或你回合内的其他角色进入濒死状态时,你可以从牌堆中获得每种花色的牌各一张。',
qinyilu:'秦宜禄', qinyilu:'秦宜禄',

View File

@ -405,9 +405,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true, direct:true,
content:function(){ content:function(){
'step 0' 'step 0'
var count=game.countPlayer(current=>{ var count=get.cnNumber(game.countPlayer(current=>{
return get.distance(player,current)<=1; return get.distance(player,current)<=1;
}); }));
player.chooseTarget(get.prompt('twzhiqu'),'选择一名其他角色并视为使用牌堆顶'+count+'张牌中的【杀】。若你与其均在对方的攻击范围内,你改为依次对其使用牌堆顶'+count+'张牌中的【杀】或锦囊牌。',lib.filter.notMe).set('ai',target=>{ player.chooseTarget(get.prompt('twzhiqu'),'选择一名其他角色并视为使用牌堆顶'+count+'张牌中的【杀】。若你与其均在对方的攻击范围内,你改为依次对其使用牌堆顶'+count+'张牌中的【杀】或锦囊牌。',lib.filter.notMe).set('ai',target=>{
var player=_status.event.player; var player=_status.event.player;
return get.effect(target,{name:'sha'},player,player)*(get.distance(player,target)==1?2:1); return get.effect(target,{name:'sha'},player,player)*(get.distance(player,target)==1?2:1);
@ -427,8 +427,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2' 'step 2'
if(player.isIn()&&target.isIn()&&cards.length){ if(player.isIn()&&target.isIn()&&cards.length){
do var card=cards.shift(); do var card=cards.shift();
while(get.name(card)=='sha'||event.fight&&get.type2(card)=='trick'); while(get.name(card)!='sha'&&(!event.fight||get.type2(card)!='trick')&&cards.length);
if(!card) return; if(get.name(card)!='sha'&&(!event.fight||get.type2(card)!='trick')) return;
player.chooseUseTarget(card,true,false,'nodistance').set('filterTarget',function(card,player,target){ player.chooseUseTarget(card,true,false,'nodistance').set('filterTarget',function(card,player,target){
var evt=_status.event; var evt=_status.event;
if(_status.event.name=='chooseTarget') evt=evt.getParent(); if(_status.event.name=='chooseTarget') evt=evt.getParent();
@ -448,6 +448,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return event.card.name=='sha'||get.type(event.card)=='trick'&&get.tag(event.card,'damage'); return event.card.name=='sha'||get.type(event.card)=='trick'&&get.tag(event.card,'damage');
}, },
logTarget:'player', logTarget:'player',
check:function(event,player){
var att=get.attitude(event.player,player);
if(player.hasSkill('twzhiqu')){
var cnt=game.countPlayer(current=>get.distance(player,current)==2&&!player.inRange(current));
if(cnt>=2){
if(att<0) return true;
return false;
}
if(att<0&&cnt>=2||att>0&&!cnt) return true;
return false;
}
else{
if(att<0) return false;
return true;
}
},
content:function(){ content:function(){
'step 0' 'step 0'
var target=trigger.player; var target=trigger.player;
@ -461,7 +477,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var att=get.attitude(target,player); var att=get.attitude(target,player);
if(att==0) return 0; if(att==0) return 0;
if(player.hasSkill('twzhiqu')){ if(player.hasSkill('twzhiqu')){
var cnt=game.countPlayer(current=>get.distance(player,current)==2); var cnt=game.countPlayer(current=>get.distance(player,current)==2&&!player.inRange(current));
if(cnt>=2){ if(cnt>=2){
if(att<0) return 1; if(att<0) return 1;
return 0; return 0;