孙翎鸾 AI, minus bug fix
This commit is contained in:
parent
7c5eac9734
commit
96bbe319c7
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -567,8 +567,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(!targets.length){
|
||||
var num=lib.skill.clanguangu_backup.num;
|
||||
var cards=get.cards(num);
|
||||
game.cardsGotoOrdering(cards);
|
||||
event.cards=cards;
|
||||
event.cards=cards.slice(0);
|
||||
while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild);
|
||||
game.updateRoundNumber();
|
||||
event.goto(2);
|
||||
}
|
||||
else{
|
||||
|
@ -644,11 +645,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
next.set('owner',owner);
|
||||
}
|
||||
}
|
||||
'step 4'
|
||||
if(!targets.length){
|
||||
while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild);
|
||||
game.updateRoundNumber();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:10,
|
||||
|
|
|
@ -30,6 +30,8 @@ window.noname_character_rank={
|
|||
'wanglang',
|
||||
'caojinyu',
|
||||
'zhangmancheng',
|
||||
'wu_zhugeliang',
|
||||
'sunlingluan',
|
||||
'key_mio',
|
||||
'key_midori',
|
||||
'key_yuri',
|
||||
|
@ -120,7 +122,6 @@ window.noname_character_rank={
|
|||
'key_yuuki',
|
||||
'db_key_liyingxia',
|
||||
'key_kiyu',
|
||||
'wu_zhugeliang',
|
||||
],
|
||||
a:[
|
||||
'diy_zaozhirenjun',
|
||||
|
@ -596,6 +597,7 @@ window.noname_character_rank={
|
|||
'zhoubuyi',
|
||||
'jsrg_sunce',
|
||||
're_caorui',
|
||||
'ol_zhouqun',
|
||||
],
|
||||
bp:[
|
||||
'chess_diaochan',
|
||||
|
@ -1686,6 +1688,8 @@ window.noname_character_rank={
|
|||
'yue_caiwenji',
|
||||
'clan_zhongyan',
|
||||
'shen_dianwei',
|
||||
'sunlingluan',
|
||||
'ol_zhouqun',
|
||||
'key_tomoya',
|
||||
'key_masato',
|
||||
'key_shiorimiyuki',
|
||||
|
@ -1926,6 +1930,8 @@ window.noname_character_rank={
|
|||
'zhanghua',
|
||||
'lushi',
|
||||
'clan_zhonghui',
|
||||
'zhoubuyi',
|
||||
'dc_wangjun',
|
||||
'key_kano',
|
||||
'key_haruko',
|
||||
'key_akiko',
|
||||
|
@ -2457,6 +2463,7 @@ window.noname_character_rank={
|
|||
'zerong',
|
||||
'std_panfeng',
|
||||
're_caochong',
|
||||
're_caorui',
|
||||
],
|
||||
}
|
||||
};
|
||||
|
|
|
@ -765,6 +765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
spade:{
|
||||
audio:true,
|
||||
mark:true,
|
||||
marktext:'雨',
|
||||
intro:{
|
||||
|
@ -807,6 +808,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
miehuo:{
|
||||
audio:'oltianhou_spade',
|
||||
trigger:{global:'damageBegin2'},
|
||||
forced:true,
|
||||
logTarget:'source',
|
||||
|
@ -818,6 +820,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
heart:{
|
||||
audio:true,
|
||||
mark:true,
|
||||
marktext:'暑',
|
||||
intro:{
|
||||
|
@ -834,6 +837,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
club:{
|
||||
audio:true,
|
||||
mark:true,
|
||||
marktext:'霜',
|
||||
intro:{
|
||||
|
@ -850,6 +854,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
diamond:{
|
||||
audio:true,
|
||||
mark:true,
|
||||
marktext:'雾',
|
||||
intro:{
|
||||
|
@ -1035,7 +1040,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 2'
|
||||
if(player.countCards('h')%2==0){
|
||||
player.draw();
|
||||
player.chooseTarget('犷骜:令此杀对其任意个目标无效',[1,Infinity],true,(card,player,target)=>{
|
||||
player.chooseTarget('犷骜:令此杀对其任意个目标无效',[1,Infinity],(card,player,target)=>{
|
||||
return _status.event.targetsx.contains(target);
|
||||
}).set('ai',target=>{
|
||||
return 1-get.effect(target,_status.event.getTrigger().card,_status.event.player,_status.event.player);
|
||||
|
@ -6240,7 +6245,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return;
|
||||
}
|
||||
player.chooseTarget(true,'将'+get.translation(card)+'置于一名角色的装备区内',function(card,player,target){
|
||||
return target.canEquip(_status.event.card);
|
||||
return target.canEquip(_status.event.card,true);
|
||||
}).set('card',card).set('ai',function(target){
|
||||
var card=_status.event.getParent().card,player=_status.event.player;
|
||||
return get.effect(target,card,player,player);
|
||||
|
@ -23999,7 +24004,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
olzhenying_info:'出牌阶段限两次。你可以选择一名手牌数不大于你的其他角色,你与其同时将手牌摸或弃置至至多两张。然后你与其中手牌数较少的角色视为对另一名角色使用一张【决斗】。',
|
||||
ol_wenqin:'文钦',
|
||||
olguangao:'犷骜',
|
||||
olguangao_info:'当你/其他角色使用【杀】时,你/该角色可以额外指定一个目标/你为目标(使用者不为你则有距离限制)。然后若你的手牌数为偶数,你摸一张牌并令此牌对任意目标无效。',
|
||||
olguangao_info:'当你/其他角色使用【杀】时,你/该角色可以额外指定一个目标/你为目标(使用者不为你则有距离限制)。然后若你的手牌数为偶数,你摸一张牌并令此牌对任意目标无效(可不选)。',
|
||||
olhuiqi:'彗企',
|
||||
olhuiqi_info:'觉醒技。一名角色回合结束后,若仅有三名角色于此回合成为过牌的目标,你获得〖偕举〗并获得一个额外的回合。',
|
||||
olxieju:'偕举',
|
||||
|
|
|
@ -11693,14 +11693,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
charlotte:true,
|
||||
filter:function(event,player){
|
||||
for(var i of player.getStorage('twjuezhu_restore')){
|
||||
if(i[0]==event.player&&player.hasEnabledSlot(i[1])) return true;
|
||||
if(i[0]==event.player&&player.hasDisabledSlot(i[1])) return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
content:function(){
|
||||
var list=[];
|
||||
for(var i of player.getStorage('twjuezhu_restore')){
|
||||
if(i[0]==trigger.player&&player.hasEnabledSlot(i[1])) list.push(i[1]);
|
||||
if(i[0]==trigger.player&&player.hasDisabledSlot(i[1])) list.push(i[1]);
|
||||
}
|
||||
player.enableEquip(list);
|
||||
},
|
||||
|
|
|
@ -147,6 +147,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.addTempSkill('dcpandi_effect','phaseUseAfter');
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
threaten:4,
|
||||
order:12,
|
||||
result:{
|
||||
player:function(player,target){
|
||||
return player.getCards('hs').reduce(function(eff,card){
|
||||
return Math.max(eff,lib.skill.dcpandi.getUseValue(card,target,player)-lib.skill.dcpandi.getUseValue(card,player,player))
|
||||
},0)
|
||||
},
|
||||
},
|
||||
},
|
||||
getUseValue:function(card,player,viewer){
|
||||
if(typeof(card)=='string'){
|
||||
card={name:card,isCard:true};
|
||||
}
|
||||
var targets=game.filterPlayer();
|
||||
var value=[];
|
||||
var min=0;
|
||||
var info=get.info(card);
|
||||
if(!info||info.notarget) return 0;
|
||||
var range;
|
||||
var select=get.copy(info.selectTarget);
|
||||
if(select==undefined){
|
||||
if(info.filterTarget==undefined) return true;
|
||||
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) return 0;
|
||||
|
||||
for(var i=0;i<targets.length;i++){
|
||||
if(player.canUse(card,targets[i],null,true)){
|
||||
var eff=get.effect(targets[i],card,player,viewer);
|
||||
value.push(eff);
|
||||
}
|
||||
}
|
||||
value.sort(function(a,b){
|
||||
return b-a;
|
||||
});
|
||||
for(var i=0;i<value.length;i++){
|
||||
if(i==range[1]||range[1]!=-1&&value[i]<=0) break;
|
||||
min+=value[i];
|
||||
}
|
||||
return min;
|
||||
},
|
||||
subSkill:{
|
||||
effect:{
|
||||
audio:'dcpandi',
|
||||
|
@ -170,6 +218,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.removeSkill('dcpandi_effect');
|
||||
game.delay(0.5);
|
||||
},
|
||||
ai:{
|
||||
order:function(card,player,target,current){
|
||||
if(typeof card!='object') return;
|
||||
var source=player.storage.dcpandi_effect;
|
||||
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)]
|
||||
},
|
||||
},
|
||||
mod:{
|
||||
selectCard:function(card,player,range){
|
||||
var source=player.storage.dcpandi_effect;
|
||||
|
@ -8705,7 +8761,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
next.set('list',list);
|
||||
next.set('processAI',function(list){
|
||||
var allcards=list[0][1].concat(list[1][1]),canchoose=allcards.slice(0),cards=[];
|
||||
var allcards=list[0][1].slice(0),cards=[];
|
||||
if(list.length>1){
|
||||
allcards=allcards.concat(list[1][1]);
|
||||
}
|
||||
var canchoose=allcards.slice(0);
|
||||
var player=_status.event.player;
|
||||
var getv=function(button){
|
||||
if(button.name=='sha'&&allcards.filter(function(card){
|
||||
|
|
|
@ -11854,9 +11854,12 @@
|
|||
},
|
||||
cardsDiscard:function(){
|
||||
game.getGlobalHistory().cardMove.push(event);
|
||||
var withPile=false;
|
||||
for(var i=0;i<cards.length;i++){
|
||||
if(get.position(cards[i],true)=='c') withPile=true;
|
||||
cards[i].discard();
|
||||
}
|
||||
if(withPile) game.updateRoundNumber();
|
||||
},
|
||||
orderingDiscard:function(){
|
||||
var cards=event.relatedEvent.orderingCards.slice(0);
|
||||
|
@ -11867,10 +11870,13 @@
|
|||
},
|
||||
cardsGotoOrdering:function(){
|
||||
game.getGlobalHistory().cardMove.push(event);
|
||||
var withPile=false;
|
||||
for(var i=0;i<cards.length;i++){
|
||||
if(get.position(cards[i],true)=='c') withPile=true;
|
||||
cards[i].fix();
|
||||
ui.ordering.appendChild(cards[i]);
|
||||
}
|
||||
if(withPile) game.updateRoundNumber();
|
||||
var evt=event.relatedEvent||event.getParent();
|
||||
if(!evt.orderingCards) evt.orderingCards=[];
|
||||
if(!evt.noOrdering&&!evt.cardsOrdered){
|
||||
|
@ -11883,10 +11889,13 @@
|
|||
},
|
||||
cardsGotoSpecial:function(){
|
||||
game.getGlobalHistory().cardMove.push(event);
|
||||
var withPile=false;
|
||||
for(var i=0;i<cards.length;i++){
|
||||
if(get.position(cards[i],true)=='c') withPile=true;
|
||||
cards[i].fix();
|
||||
ui.special.appendChild(cards[i]);
|
||||
}
|
||||
if(withPile) game.updateRoundNumber();
|
||||
if(event.toRenku){
|
||||
_status.renku.addArray(cards);
|
||||
if(_status.renku.length>6){
|
||||
|
|
Loading…
Reference in New Issue