王桃王悦ai优化
This commit is contained in:
parent
d06c7ac222
commit
7fe553316a
|
@ -7131,6 +7131,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
huguan:{
|
huguan:{
|
||||||
audio:2,
|
audio:2,
|
||||||
audioname:['wangyue'],
|
audioname:['wangyue'],
|
||||||
|
init:function(player){
|
||||||
|
game.addGlobalSkill('huguan_all');
|
||||||
|
},
|
||||||
|
onremove:function(player){
|
||||||
|
game.removeGlobalSkill('huguan_all');
|
||||||
|
},
|
||||||
trigger:{global:'useCard'},
|
trigger:{global:'useCard'},
|
||||||
direct:true,
|
direct:true,
|
||||||
filter:function(event,player){
|
filter:function(event,player){
|
||||||
|
@ -7144,9 +7150,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
player.chooseControl(lib.suit,'cancel2').set('prompt',get.prompt('huguan',trigger.player)).set('prompt2','令某种花色的手牌不计入其本回合的手牌上限').set('ai',function(){
|
player.chooseControl(lib.suit,'cancel2').set('prompt',get.prompt('huguan',trigger.player)).set('prompt2','令某种花色的手牌不计入其本回合的手牌上限').set('ai',function(){
|
||||||
var player=_status.event.player,target=_status.event.getTrigger().player;
|
var player=_status.event.player,target=_status.event.getTrigger().player,att=get.attitude(player,target);
|
||||||
if(get.attitude(player,target)<=0) return 'cancel2';
|
if(att <= 0){
|
||||||
var list=lib.suit.slice(0);
|
if (!player.hasSkill('yaopei') || player.hasAllHistory('useSkill',function(evt){
|
||||||
|
return evt.skill=='huguan'&&evt.targets.includes(target);
|
||||||
|
}) || target.needsToDiscard() - target.needsToDiscard(-target.countCards('h') / 4) > (att>-2?1.6:1)) return 'cancel2';
|
||||||
|
}
|
||||||
|
let list = lib.suit.slice(0);
|
||||||
|
if(att <= 0 && target.getStorage('huguan_add')) for(let i of target.getStorage('huguan_add')){
|
||||||
|
if (list.includes(i)) return i;
|
||||||
|
}
|
||||||
list.removeArray(target.getStorage('huguan_add'));
|
list.removeArray(target.getStorage('huguan_add'));
|
||||||
if(list.length) return list.randomGet();
|
if(list.length) return list.randomGet();
|
||||||
return 'cancel2';
|
return 'cancel2';
|
||||||
|
@ -7174,6 +7187,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
intro:{content:'本回合$花色的牌不计入手牌上限'},
|
intro:{content:'本回合$花色的牌不计入手牌上限'},
|
||||||
},
|
},
|
||||||
|
all:{
|
||||||
|
mod:{
|
||||||
|
aiValue:function(player, card, num){
|
||||||
|
if(player && player.storage.huguan_all > 0 && get.itemtype(card) == 'card' && get.color(card, player) == 'red') return num + player.storage.huguan_all;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger:{
|
||||||
|
player:['phaseUseBegin', 'useCard']
|
||||||
|
},
|
||||||
|
filter:function(event, player){
|
||||||
|
if(event.name === 'useCard') return player.storage.huguan_all;
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
silent:true,
|
||||||
|
charlotte:true,
|
||||||
|
content:function(){
|
||||||
|
'step 0'
|
||||||
|
if(trigger.name === 'useCard'){
|
||||||
|
player.storage.huguan_all = 0;
|
||||||
|
event.finish();
|
||||||
|
}
|
||||||
|
'step 1'
|
||||||
|
let num = -157;
|
||||||
|
game.countPlayer(function (current){
|
||||||
|
if(current.hasSkill('huguan')) num = Math.max(num, get.attitude(_status.event.player, current));
|
||||||
|
});
|
||||||
|
if(num === -157) game.removeGlobalSkill('huguan_all');
|
||||||
|
else if(num === 0) player.storage.huguan_all = 6;
|
||||||
|
else if(num > 0) player.storage.huguan_all = 9;
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
yaopei:{
|
yaopei:{
|
||||||
|
@ -7217,15 +7261,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
return target==player||target==_status.event.getTrigger().player;
|
return target==player||target==_status.event.getTrigger().player;
|
||||||
},
|
},
|
||||||
ai1:function(card){
|
ai1:function(card){
|
||||||
|
let player = _status.event.player, source = _status.event.getTrigger().player;
|
||||||
|
if(get.attitude(player, source) > 0 && (get.recoverEffect(player, player, player) > 0 || get.recoverEffect(source, player, player) > 0)) return 12 - get.value(card);
|
||||||
return 8 - get.value(card);
|
return 8 - get.value(card);
|
||||||
},
|
},
|
||||||
ai2:function(target){
|
ai2:function(target){
|
||||||
var player=_status.event.player,source=_status.event.getTrigger().player;
|
let player = _status.event.player, source = _status.event.getTrigger().player;
|
||||||
var recoverer=(player==target?source:player);
|
let recoverer = player === target ? source : player;
|
||||||
if(recoverer.isHealthy()) return (get.attitude(player,target)>0?1:0);
|
if(recoverer.isHealthy()) return get.attitude(player, target);
|
||||||
if(get.recoverEffect(recoverer,player,player)>0&&get.attitude(player,target)>0) return 2;
|
let att = get.attitude(player, recoverer), rec = get.recoverEffect(recoverer, player, player);
|
||||||
|
if(rec > 0) return Math.abs(att) + get.attitude(player, target);
|
||||||
return 0;
|
return 0;
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
|
@ -7233,10 +7280,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
player.logSkill('yaopei',target);
|
player.logSkill('yaopei',target);
|
||||||
player.discard(result.cards);
|
player.discard(result.cards);
|
||||||
if(player==result.targets[0]){
|
if(player==result.targets[0]){
|
||||||
|
if(target.isDamaged()&&target.hp<player.hp&&(get.mode()!='identity'||player.identity!='nei')) player.addExpose(0.15);
|
||||||
target.recover();
|
target.recover();
|
||||||
player.draw(2);
|
player.draw(2);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
if((player.isHealthy()||player.hp>target.hp)&&(get.mode()!='identity'||player.identity!='nei')) player.addExpose(0.15);
|
||||||
target.draw(2);
|
target.draw(2);
|
||||||
player.recover();
|
player.recover();
|
||||||
}
|
}
|
||||||
|
@ -7252,13 +7301,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
content:function(){
|
content:function(){
|
||||||
'step 0'
|
'step 0'
|
||||||
|
let he = player.getCards('he'),
|
||||||
|
disval = 0,
|
||||||
|
dis = 0,
|
||||||
|
spare = 30,
|
||||||
|
use = true;
|
||||||
|
for(let i of he){
|
||||||
|
let val = get.value(i, player);
|
||||||
|
if(val < 6 && get.position(i) == 'h'){
|
||||||
|
dis++;
|
||||||
|
disval += val;
|
||||||
|
}
|
||||||
|
else if(val < spare) spare = val;
|
||||||
|
}
|
||||||
|
if(!dis){
|
||||||
|
dis = 1;
|
||||||
|
disval = spare;
|
||||||
|
spare = -1;
|
||||||
|
}
|
||||||
|
let draw = Math.min(trigger.player.countCards('h'), 5 + dis - player.countCards('h'));
|
||||||
|
if(6 * draw < disval) use = false;
|
||||||
player.chooseToDiscard('he',get.prompt('mingluan'),'弃置任意张牌,并摸等同于'+get.translation(trigger.player)+'手牌数的牌(至多摸至五张)',[1,Infinity]).set('ai',function(card){
|
player.chooseToDiscard('he',get.prompt('mingluan'),'弃置任意张牌,并摸等同于'+get.translation(trigger.player)+'手牌数的牌(至多摸至五张)',[1,Infinity]).set('ai',function(card){
|
||||||
var player=_status.event.player;
|
let val = get.value(card, player);
|
||||||
var ph=player.countCards('h');
|
if(val < 0 && card.name != 'du') return 30;
|
||||||
if(get.position(card)=='h') ph--;
|
if(!use) return 0;
|
||||||
var num=Math.min(_status.event.getTrigger().player.countCards('h'),5-ph);
|
if(ui.selected.cards.length){
|
||||||
if(num>0) return 3.5*num+0.01-get.value(card);
|
if (get.position(card) != 'h') return 0;
|
||||||
return 0.01-get.value(card);
|
return 6 - val;
|
||||||
|
}
|
||||||
|
if(spare < 0 || get.position(card) == 'h') return 30 - val;
|
||||||
|
return 0;
|
||||||
}).logSkill=['mingluan',trigger.player];
|
}).logSkill=['mingluan',trigger.player];
|
||||||
'step 1'
|
'step 1'
|
||||||
if(result.bool){
|
if(result.bool){
|
||||||
|
|
Loading…
Reference in New Issue