大幅提高【三顾】ai思考速度

This commit is contained in:
157 2024-01-12 11:11:23 +08:00
parent eb79a88ac4
commit d51d1eea4d
1 changed files with 69 additions and 76 deletions

View File

@ -1103,46 +1103,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{player:'phaseJieshuBegin'},
direct:true,
getEffect:function(player,target,event){
var att=get.attitude(player,target);
if(att==0) return 0;
var list1=[],list2=[];
var used=[];
player.getHistory('useCard',function(evt){
used.add(evt.card.name);
});
event.used=used;
for(var name of lib.inpile){
var add=false,type=get.type(name);
if(name=='sha') add=true;
else if(type=='trick'){
var info=lib.card[name];
if(info&&!info.singleCard&&!info.notarget) add=true;
}
if(!add) continue;
if(used.includes(name)) list1.push(name);
else list2.push(name);
}
var getv=function(name,player,arg){
return player.getUseValue({name:name},arg);
}
getEffect:function(player,target,event,list1,list2){
let att=get.attitude(player,target);
if(att===0) return 0;
let getv=function(name,player,arg){
let v=event.getTempCache('sangu',player.id+name);
if(typeof v==='number') return v;
v=player.getUseValue({name:name,storage:{sangu:true}},arg);
event.putTempCache('sangu',player.id+name,v);
return v;
};
if(att<0){
for(var i of list1){
if(getv(i,target)<=0||target.getUseValue({name:i,storage:{sangu:true}})<=0) return -att*Math.sqrt(get.threaten(target))*2;
for(let i of list1){
if(getv(i,target)<=0||getv(i,target)<=0) return -att*Math.sqrt(get.threaten(target))*2;
}
return 0;
}
else{
var list=list1;
if(player.hp>1) list=list.concat(list2);
let list=list1.concat(player.hp>1?list2:[]),eff=0;
list.sort(function(a,b){
return getv(b,target)-getv(a,target);
});
list=list.slice(3);
var eff=0,base=5;
for(var i of list){
var res=getv(i,target);
if(res<=base) break;
for(let i of list){
let res=getv(i,target);
if(res<=5) break;
else eff+=res;
}
return Math.sqrt(eff/1.5)*att;
@ -1150,9 +1135,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
player.chooseTarget(get.prompt2('sangu'),lib.filter.notMe).set('ai',function(target){
return lib.skill.sangu.getEffect(_status.event.player,target,_status.event.getTrigger());
event.list1=[];
event.list2=[];
event.used=[];
player.getHistory('useCard',function(evt){
event.used.add(evt.card.name);
});
for(let name of lib.inpile){
let add=false,type=get.type(name);
if(name==='sha') add=true;
else if(type==='trick'){
let info=lib.card[name];
if(info&&!info.singleCard&&!info.notarget) add=true;
}
if(!add) continue;
if(event.used.includes(name)) event.list1.push(name);
else event.list2.push(name);
}
if(!event.list1.length&&!event.list2.length) event.finish();
else player.chooseTarget(get.prompt2('sangu'),lib.filter.notMe).set('ai',function(target){
return lib.skill.sangu.getEffect(_status.event.player,target,_status.event.getTrigger(),_status.event.list1,_status.event.list2);
}).set('list1',event.list1).set('list2',event.list2);
'step 1'
if(result.bool){
var target=result.targets[0];
@ -1161,51 +1164,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else event.finish();
'step 2'
var list1=[],list2=[];
var used=[];
player.getHistory('useCard',function(evt){
used.add(evt.card.name);
});
event.used=used;
for(var name of lib.inpile){
var add=false,type=get.type(name);
if(name=='sha') add=true;
else if(type=='trick'){
var info=lib.card[name];
if(info&&!info.singleCard&&!info.notarget) add=true;
}
if(!add) continue;
if(used.includes(name)) list1.push([type,'',name]);
else list2.push([type,'',name]);
var dialog=['为'+get.translation(target)+'选择至多三个牌名'];
if(event.list1.length){
dialog.push('<div class="text center">本回合已使用过的牌</div>');
dialog.push([event.list1.map(i=>[get.type(i),'',i]),'vcard']);
}
if(!list1.length&&!list2.length) event.finish();
else{
var dialog=['为'+get.translation(target)+'选择至多三个牌名'];
if(list1.length){
dialog.push('<div class="text center">本回合已使用过的牌</div>');
dialog.push([list1,'vcard']);
}
if(list2.length){
dialog.push('<div class="text center">本回合未使用过的牌</div>');
dialog.push([list2,'vcard']);
}
player.chooseButton(dialog,true,[1,3]).set('ai',function(button){
var card={name:button.link[2],storage:{sangu:true}},list=_status.event.list;
var player=_status.event.player,target=_status.event.getParent().target;
if(get.attitude(player,target)<0){
if(!list.includes(card.name)) return 0;
return -target.getUseValue(card);
}
else{
if(player.hp<2&&!list.includes(card.name)) return 0;
var val=target.getUseValue(card),base=5;
val=Math.min(15,val-base);
if(card.name=='wuzhong'||card.name=='dongzhuxianji') val+=15;
else if(card.name=='shunshou') val+=6;
return val;
}
}).set('list',list1.map((i)=>i[2]));
if(event.list2.length){
dialog.push('<div class="text center">本回合未使用过的牌</div>');
dialog.push([event.list2.map(i=>[get.type(i),'',i]),'vcard']);
}
player.chooseButton(dialog,true,[1,3]).set('ai',function(button){
let name=button.link[2],
list=_status.event.list,
player=_status.event.player,
target=_status.event.getParent().target,
trigger=_status.event.getTrigger(),
getv=(name,player)=>{
let v=trigger.getTempCache('sangu',player.id+name);
if(typeof v==='number') return v;
v=player.getUseValue({name:name,storage:{sangu:true}},arg);
trigger.putTempCache('sangu',player.id+name,v);
return v;
};
if(get.attitude(player,target)<0){
if(!list.includes(name)) return 0;
return -getv(name,target);
}
else{
if(player.hp<2&&!list.includes(name)) return 0;
let val=getv(name,target),base=5;
val=Math.min(15,val-base);
if(name==='wuzhong'||name==='dongzhuxianji') val+=15;
else if(name==='shunshou') val+=6;
return val;
}
}).set('list',event.list1);
'step 3'
if(result.bool){
var names=result.links.map((i)=>i[2]);