优化【决讨】【屯田】【剑合】【悲歌】【狂斧】【落宠】ai
This commit is contained in:
parent
f45dfd3126
commit
cfad17964c
|
@ -10824,10 +10824,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(val<min) min=val;
|
if(val<min) min=val;
|
||||||
});
|
});
|
||||||
if(att>0&&min<=0) return target.hasSkillTag('noe')?3:1;
|
if(att>0&&min<=0) return target.hasSkillTag('noe')?3:1;
|
||||||
if(att<0&&max>0){
|
if(att<=0&&max>0){
|
||||||
if(target.hasSkillTag('noe')) return max>6?(-max/3):0;
|
if(target.hasSkillTag('noe')) return max>6?(-max/3):0;
|
||||||
return -max;
|
return -max;
|
||||||
}
|
}
|
||||||
|
if(player===target&&!player.hasSha()){
|
||||||
|
let ph=player.countCards('h');
|
||||||
|
if(game.hasPlayer(i=>{
|
||||||
|
if(!player.canUse('sha',i,true,true)||get.effect(i,{name:'sha'},player,player)<=0) return false;
|
||||||
|
return !ph||!i.mayHaveShan(player,'use');
|
||||||
|
})) return 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -3453,8 +3453,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return event.card&&event.card.name=='sha'&&event.player.isIn()&&player.countCards('he')>0;
|
return event.card&&event.card.name=='sha'&&event.player.isIn()&&player.countCards('he')>0;
|
||||||
},
|
},
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
if(event.player.hasSkill('xinleiji')) return get.attitude(player,event.player)>0;
|
let att=get.attitude(player,event.player);
|
||||||
return true;
|
if(event.player.hasSkill('xinleiji')) return att>0;
|
||||||
|
if(att>0||event.player.isHealthy()) return true;
|
||||||
|
if(!event.source) return true;
|
||||||
|
att=get.attitude(player,event.source);
|
||||||
|
return att<=0||event.source.isTurnedOver();
|
||||||
},
|
},
|
||||||
prompt2:'令其进行判定,然后你可根据判定结果,弃置一张牌并令其执行对应效果。',
|
prompt2:'令其进行判定,然后你可根据判定结果,弃置一张牌并令其执行对应效果。',
|
||||||
content:function(){
|
content:function(){
|
||||||
|
@ -13309,21 +13313,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
effect:function(card,player,target){
|
effect:function(card,player,target){
|
||||||
if(!target.hasFriend()) return;
|
if(player==target||!target.hasFriend()) return;
|
||||||
if(player==target) return;
|
|
||||||
var type=get.type(card);
|
var type=get.type(card);
|
||||||
var nh=target.countCards();
|
var nh=Math.min(target.countCards(),game.countPlayer(i=>get.attitude(target,i)>0));
|
||||||
if(type=='trick'){
|
if(type=='trick'){
|
||||||
if(!get.tag(card,'multitarget')||get.info(card).singleCard){
|
if(!get.tag(card,'multitarget')||get.info(card).singleCard){
|
||||||
if(get.tag(card,'damage')){
|
if(get.tag(card,'damage')) return [1.5,nh-1];
|
||||||
if(nh<3||target.hp<=2) return 0.8;
|
|
||||||
}
|
|
||||||
return [1,nh];
|
return [1,nh];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(type=='delay'){
|
else if(type=='delay') return [0.5,0.5];
|
||||||
return [0.5,0.5];
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -3663,6 +3663,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
ai:{
|
ai:{
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target,current){
|
target:function(card,player,target,current){
|
||||||
|
if(typeof card==='object'&&get.name(card)==='sha'&&target.mayHaveShan(player,'use')) return [0.6,0.75];
|
||||||
if(!target.hasFriend()&&!player.hasUnknown()) return;
|
if(!target.hasFriend()&&!player.hasUnknown()) return;
|
||||||
if(_status.currentPhase==target) return;
|
if(_status.currentPhase==target) return;
|
||||||
if(card.name!='shuiyanqijunx'&&get.tag(card,'loseCard')&&target.countCards('he')){
|
if(card.name!='shuiyanqijunx'&&get.tag(card,'loseCard')&&target.countCards('he')){
|
||||||
|
|
|
@ -5427,7 +5427,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
effect:{
|
effect:{
|
||||||
player:function(card,player,target){
|
player:function(card,player,target){
|
||||||
if((!card.isCard||!card.cards)&&get.itemtype(card)!='card') return;
|
if((!card.isCard||!card.cards)&&get.itemtype(card)!='card') return;
|
||||||
if(target&&player!=target&&player.countCards('h')>player.getHandcardLimit()) return [0,0,0,0.5];
|
let cs=0;
|
||||||
|
if(target&&player!=target&&player.countCards('h',i=>{
|
||||||
|
if(card===i||card.cards&&card.cards.includes(i)){
|
||||||
|
cs++;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})>player.getHandcardLimit()){
|
||||||
|
let targets=[],evt=_status.event.getParent('useCard');
|
||||||
|
targets.addArray(ui.selected.targets);
|
||||||
|
if(evt&&evt.card==card) targets.addArray(evt.targets);
|
||||||
|
if(targets.length){
|
||||||
|
if(targets.length>1||!targets.includes(target)) return 'zeroplayertarget';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let info=get.info(card);
|
||||||
|
if(!info||info.notarget||!info.filterTarget) return;
|
||||||
|
let range,select=get.copy(info.selectTarget),filter;
|
||||||
|
if(select===undefined) range=[1,1];
|
||||||
|
else if(typeof select==='number') range=[select,select];
|
||||||
|
else if(get.itemtype(select)==='select') range=select;
|
||||||
|
else if(typeof select==='function') range=select(card,player);
|
||||||
|
if(info.singleCard) range=[1,1];
|
||||||
|
game.checkMod(card,player,range,'selectTarget',player);
|
||||||
|
if(range[1]<-1) range=[1, 1];
|
||||||
|
else if(range[0]<0){
|
||||||
|
if(info.filterTarget===true) filter=game.players.length;
|
||||||
|
else filter=game.countPlayer(current=>{
|
||||||
|
return info.filterTarget(card,player,current);
|
||||||
|
});
|
||||||
|
range=[filter,filter];
|
||||||
|
}
|
||||||
|
if(range&&range[0]>1&&range[1]>1) return 'zeroplayertarget';
|
||||||
|
return [0,0,0,1];
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -4725,16 +4725,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
player.chooseButton([1,num]).set('createDialog',dialog).set('filterButton',button=>{
|
player.chooseButton([1,num]).set('createDialog',dialog).set('filterButton',button=>{
|
||||||
return lib.filter.canBeDiscarded(button.link,_status.event.player,get.owner(button.link));
|
return lib.filter.canBeDiscarded(button.link,_status.event.player,get.owner(button.link));
|
||||||
}).set('ai',button=>{
|
}).set('ai',button=>{
|
||||||
var card=button.link;
|
var player=_status.event.player,
|
||||||
var player=_status.event.player,target=get.owner(card);
|
target=get.owner(button.link),
|
||||||
if(target==player&&ui.cardPile.childNodes.length>80){
|
num=ui.selected.buttons.filter(i=>get.owner(i.link)==target).length;
|
||||||
if(ui.selected.buttons.some(i=>get.owner(i.link)==player)) return 0;
|
if(num>1&&player.hp+player.hujia>2) return 0;
|
||||||
if(get.value(card,player)<6) return 60-get.value(card,player);
|
if(target==player){
|
||||||
|
if(num) return -get.value(button.link,target);
|
||||||
|
if(ui.cardPile.childNodes.length>80) return 6-get.value(card,player);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
var num=ui.selected.buttons.filter(i=>get.owner(i.link)==target).length;
|
|
||||||
var val=get.buttonValue(button);
|
var val=get.buttonValue(button);
|
||||||
if(num>2) val/=Math.sqrt(num);
|
if(num===2) val/=4;
|
||||||
if(get.attitude(player,target)>0) return -val;
|
if(get.attitude(player,target)>0) return -val;
|
||||||
return val;
|
return val;
|
||||||
//return -(get.position(card)!='h'?get.value(card,target):(4.5+Math.random()-0.2*(num>2?1:0)))*get.attitude(player,target);
|
//return -(get.position(card)!='h'?get.value(card,target):(4.5+Math.random()-0.2*(num>2?1:0)))*get.attitude(player,target);
|
||||||
|
@ -9184,7 +9185,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
player.chooseTarget(get.prompt2('juetao'),lib.filter.notMe).set('ai',function(target){
|
player.chooseTarget(get.prompt2('juetao'),lib.filter.notMe).set('ai',function(target){
|
||||||
return -get.attitude(_status.event.player,target);
|
let att=-get.attitude(_status.event.player,target);
|
||||||
|
if(att<=0) return -att;
|
||||||
|
if(target.hasSkillTag('nodamage')) return 0.01*att;
|
||||||
|
if(target.getEquip('tengjia')||target.getEquip('renwang')) return 0.2*att;
|
||||||
|
if(target.getEquip('bugua')) return 0.3*att;
|
||||||
|
if(target.getEquip(2)) return att/2;
|
||||||
|
return 1.2*att;
|
||||||
});
|
});
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
|
|
Loading…
Reference in New Issue