优化【好施】【雷击】【鬼道】【长标】ai
This commit is contained in:
parent
2a441ed829
commit
0b82dc1d07
|
@ -4868,8 +4868,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
check:function(event,player){
|
check:function(event,player){
|
||||||
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
|
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
|
||||||
return !game.hasPlayer(function(current){
|
return player!==target&&!game.hasPlayer(function(current){
|
||||||
return current!=player&¤t!=target&¤t.countCards('h')<target.countCards('h');
|
return current!==player&¤t!==target&¤t.countCards('h')<target.countCards('h');
|
||||||
})&&get.attitude(player,target)>0;
|
})&&get.attitude(player,target)>0;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -6268,20 +6268,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
selectCard:[1,Infinity],
|
selectCard:[1,Infinity],
|
||||||
position:'hs',
|
position:'hs',
|
||||||
check:function(card){
|
check:function(card){
|
||||||
var player=_status.event.player;
|
let player = _status.event.player;
|
||||||
if (ui.selected.cards.length) {
|
if (ui.selected.cards.length) {
|
||||||
var list=game.filterPlayer(function(current){
|
let list = game.filterPlayer(function (current) {
|
||||||
return current!=player&&player.canUse('sha',current,false)&&get.effect(current,{name:'sha'},player,player)>0;
|
return current !== player && player.canUse('sha', current, false) && get.effect(current, {name: 'sha'}, player, player) > 0;
|
||||||
}).sort(function (a, b) {
|
}).sort(function (a, b) {
|
||||||
return get.effect(b, {name: 'sha'}, player, player) - get.effect(a, {name: 'sha'}, player, player);
|
return get.effect(b, {name: 'sha'}, player, player) - get.effect(a, {name: 'sha'}, player, player);
|
||||||
});
|
});
|
||||||
if (!list.length) return 0;
|
if (!list.length) return 0;
|
||||||
var target=list[0];
|
let target = list[0],
|
||||||
if(target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{
|
cards = ui.selected.cards.concat([card]),
|
||||||
|
color = [];
|
||||||
|
for (let i of cards) {
|
||||||
|
if (!color.includes(get.color(i, player))) color.add(get.color(i, player));
|
||||||
|
}
|
||||||
|
if (color.length !== 1) color[0] = 'none';
|
||||||
|
if (player.hasSkillTag(
|
||||||
|
'directHit_ai',
|
||||||
|
true,
|
||||||
|
{
|
||||||
target: target,
|
target: target,
|
||||||
card:card,
|
card: {name: 'sha', suit: 'none', color: color[0], cards: cards, isCard: true}
|
||||||
},true)) return 0;
|
},
|
||||||
return 6.5-get.value(card);
|
true
|
||||||
|
)) return 6.5 - get.value(card, player);
|
||||||
|
if (Math.random() * target.countCards('hs') < 1 || player.needsToDiscard(-ui.selected.cards.length)) return 6 - get.value(card, player);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 6.3 - get.value(card);
|
return 6.3 - get.value(card);
|
||||||
},
|
},
|
||||||
|
@ -6315,6 +6327,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return card.name!='sha'&&get.value(card,player)<6.3;
|
return card.name!='sha'&&get.value(card,player)<6.3;
|
||||||
},'hs')?1:0)>1?-1:1);
|
},'hs')?1:0)>1?-1:1);
|
||||||
},
|
},
|
||||||
|
nokeep:true,
|
||||||
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(tag==='nokeep'){
|
||||||
|
let num=0;
|
||||||
|
if(arg&&(!arg.card||get.name(arg.card)!=='tao')) return false;
|
||||||
|
player.getHistory('sourceDamage',function(evxt){
|
||||||
|
let evt=evxt.getParent();
|
||||||
|
if(evt&&evt.name=='sha'&&evt.skill=='changbiao') num+=evt.cards.length;
|
||||||
|
});
|
||||||
|
return player.needsToDiscard(num)>0;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
//国钟会
|
//国钟会
|
||||||
|
@ -10861,34 +10885,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
useShan:true,
|
useShan:true,
|
||||||
effect:{
|
effect:{
|
||||||
target:function(card,player,target,current){
|
target:function(card,player,target,current){
|
||||||
if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
let name='sha';
|
||||||
|
if(typeof card=='object'){
|
||||||
|
if(card.viewAs) name=card.viewAs;
|
||||||
|
else name=get.name(card);
|
||||||
|
}
|
||||||
|
if(name=='shandian'||get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
|
||||||
target: target,
|
target: target,
|
||||||
card:card,
|
card: card
|
||||||
},true)){
|
},true)){
|
||||||
var hastarget=game.hasPlayer(function(current){
|
let club=0,spade=0;
|
||||||
return get.attitude(target,current)<0;
|
if(game.hasPlayer(function(current){
|
||||||
});
|
return get.attitude(target,current)<0&&get.damageEffect(current,target,target,'thunder')>0;
|
||||||
var be=target.countCards('e',{color:'black'});
|
})){
|
||||||
if(target.countCards('h','shan')&&be){
|
club=2;
|
||||||
if(!target.hasSkill('xinguidao')) return 0;
|
spade=4;
|
||||||
return [0,hastarget?target.countCards('he')/2:0];
|
|
||||||
}
|
}
|
||||||
if(target.countCards('h','shan')&&target.countCards('h')>2){
|
if(!target.isHealthy()) club+=2;
|
||||||
if(!target.hasSkill('xinguidao')) return 0;
|
if(!club&&!spade) return 1;
|
||||||
return [0,hastarget?target.countCards('h')/4:0];
|
if(!target.mayHaveShan(player)) return 1-0.1*Math.min(5,target.countCards('hs'));
|
||||||
|
if(!target.hasSkillTag('rejudge')) return [1,(club+spade)/4];
|
||||||
|
let pos=(player==target||player.hasSkillTag('viewHandcard',null,target,true))?'hes':'e',better=club>spade?'club':'spade',max=0;
|
||||||
|
target.hasCard(function(cardx){
|
||||||
|
if(get.suit(cardx)==better){
|
||||||
|
max=2;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){
|
if(spade&&get.color(cardx)=='black') max=1;
|
||||||
return [0,0];
|
},pos);
|
||||||
}
|
if(max==2) return [1,Math.max(club,spade)];
|
||||||
if(target.countCards('h')==0){
|
if(max==1) return [1,Math.min(club,spade)];
|
||||||
return [1.5,0];
|
if(pos=='e') return [1,Math.min(Math.max(1,target.countCards('hs'))*(club+spade)/4,Math.max(club,spade))];
|
||||||
}
|
return [1,(club+spade)/4];
|
||||||
if(target.countCards('h')==1&&!be){
|
|
||||||
return [1.2,0];
|
|
||||||
}
|
|
||||||
if(!target.hasSkill('xinguidao')) return [1,0.05];
|
|
||||||
return [1,Math.min(0.5,(target.countCards('h')+be)/4)];
|
|
||||||
}
|
}
|
||||||
|
if(name=='lebu'||name=='bingliang') return [target.hasSkillTag('rejudge')?0.4:1,2,target.hasSkillTag('rejudge')?0.4:1,0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10924,6 +10954,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
xinguidao:{
|
xinguidao:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
mod:{
|
||||||
|
aiOrder:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)=='card'&&get.color(card)=='black'&&get.type(card)=='equip') num*1.35;
|
||||||
|
},
|
||||||
|
aiValue:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)=='card'&&get.color(card)=='black') return num*1.15;
|
||||||
|
},
|
||||||
|
aiUseful:function(player,card,num){
|
||||||
|
if(num>0&&get.itemtype(card)=='card'&&get.color(card)=='black') return num*1.35;
|
||||||
|
}
|
||||||
|
},
|
||||||
trigger:{global:'judge'},
|
trigger:{global:'judge'},
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
return player.countCards('hes',{color:'black'})>0;
|
return player.countCards('hes',{color:'black'})>0;
|
||||||
|
|
Loading…
Reference in New Issue