diff --git a/character/offline.js b/character/offline.js index bdd90d992..25b67e0b2 100644 --- a/character/offline.js +++ b/character/offline.js @@ -916,30 +916,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ai:{ threaten:100, reverseEquip:true, - ai:{ - effect:{ - player:(card,player,target)=>{ - if(typeof card!=='object') return; - let suit=get.suit(card); - if(!lib.suit.contains(suit)||player.hasCard(function(i){ - return get.suit(i,player)==suit; - },'h')) return; - return [1,game.countPlayer(current=>{ - return current.countCards('e',card=>{ - return get.suit(card,current)==suit; - }); - })]; - }, - target:(card,player,target)=>{ - if(card.name==='sha'&&!player.hasSkillTag('directHit_ai',true,{ - target:target, - card:card - },true)&&game.hasPlayer(current=>{ - return current.hasCard(cardx=>{ - return get.subtype(cardx)==='equip3'; - },'e'); - })) return [0, -0.5]; - } + effect:{ + player:(card,player,target)=>{ + if(typeof card!=='object') return; + let suit=get.suit(card); + if(!lib.suit.contains(suit)||player.hasCard(function(i){ + return get.suit(i,player)==suit; + },'h')) return; + return [1,game.countPlayer(current=>{ + return current.countCards('e',card=>{ + return get.suit(card,current)==suit; + }); + })]; + }, + target:(card,player,target)=>{ + if(card.name==='sha'&&!player.hasSkillTag('directHit_ai',true,{ + target:target, + card:card + },true)&&game.hasPlayer(current=>{ + return current.hasCard(cardx=>{ + return get.subtype(cardx)==='equip3'; + },'e'); + })) return [0, -0.5]; } } } diff --git a/character/shenhua.js b/character/shenhua.js index bd12c7d04..ce70f6d04 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -4826,12 +4826,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ai:{ threaten:2, - ai:{ - noh:true, - skillTagFilter:function(player,tag){ - if(tag=='noh'){ - if(player.countCards('h')!=2) return false; - } + noh:true, + skillTagFilter:function(player,tag){ + if(tag=='noh'){ + if(player.countCards('h')!=2) return false; } } } diff --git a/character/sp.js b/character/sp.js index 4d28bcab6..c6ad15b95 100755 --- a/character/sp.js +++ b/character/sp.js @@ -4967,12 +4967,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, olkangrui:{ audio:2, + init:()=>{ + game.addGlobalSkill('olkangrui_ai'); + }, + onremove:()=>{ + if(!game.hasPlayer(i=>i.hasSkill('olkangrui'),true)) game.removeGlobalSkill('olkangrui_ai'); + }, trigger:{global:'damageEnd'}, filter:function(event,player){ return event.player==_status.currentPhase&&event.player.getHistory('damage').indexOf(event)==0; }, direct:true, - global:'olkangrui_ai', content:function(){ 'step 0' player.chooseControl('cancel2').set('choiceList',[ @@ -5058,15 +5063,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, ai:{ - effect:{ - target:function(card,player,target){ - if(target!=player||!get.tag(card,'damage')) return; - var list=game.filterPlayer(current=>current.hasSkill('olkangrui')&&get.attitude(current,player)>0); - var history=player.getHistory('damage'); - if(!list.length||history.length!=0) return; - return [1,2]; - } + trigger:{player:'dieAfter'}, + filter:()=>{ + return !game.hasPlayer(i=>i.hasSkill('olkangrui'),true); }, + silent:true, + forceDie:true, + content:()=>{ + game.removeGlobalSkill('olkangrui_ai'); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(target!=player||!get.tag(card,'damage')) return; + var list=game.filterPlayer(current=>current.hasSkill('olkangrui')&&get.attitude(current,player)>0); + var history=player.getHistory('damage'); + if(!list.length||history.length!=0) return; + return [1,2]; + } + } + } } } }, diff --git a/character/tw.js b/character/tw.js index f5e84a661..be5aef49c 100644 --- a/character/tw.js +++ b/character/tw.js @@ -8662,10 +8662,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ trigger.player.addMark('twlvren',1); }, - effect:{ - player:function(card,player,target){ - if(target.hasMark('twlvren')) return 0.33; - }, + ai:{ + effect:{ + player:function(card,player,target){ + if(target.hasMark('twlvren')) return 0.33; + } + } }, marktext:'刃', intro:{name2:'刃',content:'mark'},