优化孙翎鸾AI速度,新增事件中缓存机制
This commit is contained in:
parent
f899d4c371
commit
0c81724af6
|
@ -128,6 +128,59 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
var source=player.storage.dcpandi_effect;
|
var source=player.storage.dcpandi_effect;
|
||||||
return get.itemtype(source)!='player'||!source.isIn();
|
return get.itemtype(source)!='player'||!source.isIn();
|
||||||
},
|
},
|
||||||
|
pandi_wrapKey:function(){
|
||||||
|
var str = "";
|
||||||
|
for(var arg of arguments){
|
||||||
|
if(arg === null || arg === undefined){
|
||||||
|
str += (arg + "-");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch(get.itemtype(arg)){
|
||||||
|
case 'player':
|
||||||
|
str+=("p:"+arg.playerid);
|
||||||
|
break;
|
||||||
|
case 'card':
|
||||||
|
if(arg.cardid){
|
||||||
|
str+=("c:"+arg.cardid);
|
||||||
|
}else{
|
||||||
|
str+=("c:"+arg.name);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
str+=("n:"+arg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
str+="-";
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
},
|
||||||
|
pandi_effect:function(target,card,player,viewer){
|
||||||
|
if(!_status.event)return get.effect(target,card,player,viewer);
|
||||||
|
var key = lib.skill.dcpandi.pandi_wrapKey.apply(null,arguments);
|
||||||
|
var effect = _status.event.getTempCache('effect',key);
|
||||||
|
if(effect !== undefined)return effect;
|
||||||
|
effect = get.effect(target,card,player,viewer);
|
||||||
|
_status.event.putTempCache('effect',key,effect);
|
||||||
|
return effect;
|
||||||
|
},
|
||||||
|
pandi_canUse:function(player,card,target,arg1,arg2){
|
||||||
|
if(!_status.event)return player.canUse(card,target,arg1,arg2);
|
||||||
|
var key = lib.skill.dcpandi.pandi_wrapKey.apply(null,arguments);
|
||||||
|
var effect = _status.event.getTempCache('canUse',key);
|
||||||
|
if(effect !== undefined)return effect;
|
||||||
|
effect = player.canUse(card,target,arg1,arg2);
|
||||||
|
_status.event.putTempCache('canUse',key,effect);
|
||||||
|
return effect;
|
||||||
|
},
|
||||||
|
pandi_effect_use:function(target,card,player,viewer){
|
||||||
|
if(!_status.event)return get.effect_use(target,card,player,viewer);
|
||||||
|
var key = lib.skill.dcpandi.pandi_wrapKey.apply(null,arguments);
|
||||||
|
var effect = _status.event.getTempCache('effect_use',key);
|
||||||
|
if(effect !== undefined)return effect;
|
||||||
|
effect = get.effect_use(target,card,player,viewer);
|
||||||
|
_status.event.putTempCache('effect_use',key,effect);
|
||||||
|
return effect;
|
||||||
|
},
|
||||||
onChooseToUse:function(event){
|
onChooseToUse:function(event){
|
||||||
if(!game.online&&event.type=='phase'){
|
if(!game.online&&event.type=='phase'){
|
||||||
var players=game.filterPlayer(function(current){
|
var players=game.filterPlayer(function(current){
|
||||||
|
@ -162,15 +215,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(typeof(card)=='string'){
|
if(typeof(card)=='string'){
|
||||||
card={name:card,isCard:true};
|
card={name:card,isCard:true};
|
||||||
}
|
}
|
||||||
|
var key = lib.skill.dcpandi.pandi_wrapKey(card,player,viewer);
|
||||||
|
if(_status.event){
|
||||||
|
var uv = _status.event.getTempCache('getUseValue',key);
|
||||||
|
if(uv!==undefined){
|
||||||
|
return uv;
|
||||||
|
}
|
||||||
|
}
|
||||||
var targets=game.filterPlayer();
|
var targets=game.filterPlayer();
|
||||||
var value=[];
|
var value=[];
|
||||||
var min=0;
|
var min=0;
|
||||||
var info=get.info(card);
|
var info=get.info(card);
|
||||||
if(!info||info.notarget) return 0;
|
if(!info||info.notarget){
|
||||||
|
if(_status.event){
|
||||||
|
_status.event.putTempCache('getUseValue',key,0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
var range;
|
var range;
|
||||||
var select=get.copy(info.selectTarget);
|
var select=get.copy(info.selectTarget);
|
||||||
if(select==undefined){
|
if(select==undefined){
|
||||||
if(info.filterTarget==undefined) return true;
|
if(info.filterTarget==undefined) {
|
||||||
|
if(_status.event){
|
||||||
|
_status.event.putTempCache('getUseValue',key,true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
range=[1,1];
|
range=[1,1];
|
||||||
}
|
}
|
||||||
else if(typeof select=='number') range=[select,select];
|
else if(typeof select=='number') range=[select,select];
|
||||||
|
@ -178,11 +248,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
else if(typeof select=='function') range=select(card,player);
|
else if(typeof select=='function') range=select(card,player);
|
||||||
if(info.singleCard) range=[1,1];
|
if(info.singleCard) range=[1,1];
|
||||||
game.checkMod(card,player,range,'selectTarget',player);
|
game.checkMod(card,player,range,'selectTarget',player);
|
||||||
if(!range) return 0;
|
if(!range){
|
||||||
|
if(_status.event){
|
||||||
|
_status.event.putTempCache('getUseValue',key,0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
for(var i=0;i<targets.length;i++){
|
for(var i=0;i<targets.length;i++){
|
||||||
if(player.canUse(card,targets[i],null,true)){
|
if(lib.skill.dcpandi.pandi_canUse(player,card,targets[i],null,true)){
|
||||||
var eff=get.effect(targets[i],card,player,viewer);
|
var eff=lib.skill.dcpandi.pandi_effect(targets[i],card,player,viewer);
|
||||||
value.push(eff);
|
value.push(eff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,6 +268,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(i==range[1]||range[1]!=-1&&value[i]<=0) break;
|
if(i==range[1]||range[1]!=-1&&value[i]<=0) break;
|
||||||
min+=value[i];
|
min+=value[i];
|
||||||
}
|
}
|
||||||
|
if(_status.event){
|
||||||
|
_status.event.putTempCache('getUseValue',key,min);
|
||||||
|
}
|
||||||
return min;
|
return min;
|
||||||
},
|
},
|
||||||
subSkill:{
|
subSkill:{
|
||||||
|
@ -223,7 +301,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
if(typeof card!='object') return;
|
if(typeof card!='object') return;
|
||||||
var source=player.storage.dcpandi_effect;
|
var source=player.storage.dcpandi_effect;
|
||||||
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
|
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
|
||||||
return [0,get.effect_use(target,card,source,player),0,get.effect(target,card,source,target)]
|
return [0,lib.skill.dcpandi.pandi_effect_use(target,card,source,player),0,lib.skill.dcpandi.pandi_effect(target,card,source,target)]
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mod:{
|
mod:{
|
||||||
|
|
19
game/game.js
19
game/game.js
|
@ -27333,6 +27333,25 @@
|
||||||
this.trigger(this.name+'Cancelled');
|
this.trigger(this.name+'Cancelled');
|
||||||
if(this.player&&lib.phaseName.contains(this.name)) this.player.getHistory('skipped').add(this.name)}
|
if(this.player&&lib.phaseName.contains(this.name)) this.player.getHistory('skipped').add(this.name)}
|
||||||
},
|
},
|
||||||
|
putTempCache:function(key1,key2,value){
|
||||||
|
if(!this._tempCache){
|
||||||
|
this._tempCache = {};
|
||||||
|
}
|
||||||
|
if(!this._tempCache[key1]){
|
||||||
|
this._tempCache[key1] = {};
|
||||||
|
}
|
||||||
|
this._tempCache[key1][key2] = value;
|
||||||
|
console.log("put:"+key1+" "+key2+" "+value);
|
||||||
|
},
|
||||||
|
getTempCache:function(key1,key2){
|
||||||
|
if(!this._tempCache){
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
if(!this._tempCache[key1]){
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return this._tempCache[key1][key2];
|
||||||
|
},
|
||||||
neutralize:function(event){
|
neutralize:function(event){
|
||||||
this.untrigger.call(this,arguments);
|
this.untrigger.call(this,arguments);
|
||||||
this.finish();
|
this.finish();
|
||||||
|
|
Loading…
Reference in New Issue