diff --git a/card/qimou.js b/card/qimou.js index 4492203e8..20fade592 100644 --- a/card/qimou.js +++ b/card/qimou.js @@ -293,7 +293,7 @@ card.qimou={ var mod=game.checkMod(card,player,'unchanged','cardEnabled',player.get('s')); if(mod!='unchanged') return mod; return true; - },trigger.player,-1).ai; + },trigger.player,-1).targetRequired=true; } }, }, diff --git a/card/standard.js b/card/standard.js index fc6a81580..5b6b46eab 100644 --- a/card/standard.js +++ b/card/standard.js @@ -797,7 +797,9 @@ card.standard={ }, content:function(){ "step 0" - targets[0].chooseToUse('对'+get.translation(targets[1])+'使用一张杀,或令'+get.translation(player)+'获得你的武器牌',{name:'sha'},targets[1],-1); + targets[0].chooseToUse( + '对'+get.translation(targets[1])+'使用一张杀,或令'+get.translation(player)+'获得你的武器牌', + {name:'sha'},targets[1],-1).targetRequired=true; "step 1" if(result.bool==false){ player.gain(targets[0].get('e',{subtype:'equip1'})); @@ -1140,11 +1142,7 @@ card.standard={ event.card=trigger.card; "step 1" if(ui.wuxie.classList.contains('glow')&&!_status.auto){ - if(event.current==game.me){ - event._result={bool:false}; - return; - } - if(lib.config.mode=='versus'&&lib.storage.single_control&&event.current.side==game.me.side){ + if(event.current==game.me||event.current.isUnderControl()){ event._result={bool:false}; return; } @@ -1231,11 +1229,7 @@ card.standard={ event.card=trigger.card; "step 1" if(ui.wuxie.classList.contains('glow')&&!_status.auto){ - if(event.current==game.me){ - event._result={bool:false}; - return; - } - if(lib.config.mode=='versus'&&lib.storage.single_control&&event.current.side==game.me.side){ + if(event.current==game.me||event.current.isUnderControl()){ event._result={bool:false}; return; } diff --git a/character/yxs.js b/character/yxs.js index fa88ee6f1..6bec12d2b 100644 --- a/character/yxs.js +++ b/character/yxs.js @@ -274,7 +274,7 @@ character.yxs={ priority:11, filter:function(event,player){ if(player.skills.contains('bolehuiyan4')) return false; - if(lib.config.mode=='versus'&&lib.storage.single_control&&event.target.side==player.side) return false; + if(event.target.isUnderControl()) return false; return event.player!=player&&event.target!=player&&event.target.num('h')>0; }, group:['bolehuiyan2','bolehuiyan3'], diff --git a/game/game.js b/game/game.js index 8fd324699..c7478192b 100644 --- a/game/game.js +++ b/game/game.js @@ -4928,6 +4928,7 @@ window.play={}; ai1:function(){return 1;}, ai2:ai.get.effect, type:'dying', + targetRequired:true, dying:event.dying }); } @@ -5683,6 +5684,9 @@ window.play={}; ok=false; if(event.complexSelect) ok=false; } + if(range[1]==-1&&ui.selected.targets.length==0&&event.targetRequired){ + ok=false; + } } if(custom.add.target){ custom.add.target(); @@ -5759,6 +5763,14 @@ window.play={}; }, uncheck:function(){ var i,j; + if(false){ + if(lib.config.mode=='chess'){ + var shadows=ui.chessContainer.getElementsByClassName('playergrid temp'); + while(shadows.length){ + shadows[0].remove(); + } + } + } if(arguments.length==0){ while(document.getElementsByClassName('selectable').length>0){ document.getElementsByClassName('selectable')[0].classList.remove('selectable'); @@ -8689,6 +8701,21 @@ window.play={}; ui.selected.cards.add(this); } this.classList.toggle('selected'); + if(false){ + if(lib.config.mode=='chess'&&!_status.event.skill&&this.classList.contains('selected')&& + _status.event.isMine()&&_status.event.name=='chooseToUse'){ + var player=_status.event.player; + var range=get.info(this).range; + if(range){ + if(typeof range.attack==='number'){ + player.createRangeShadow(get.attackRange(player)+range.attack-1); + } + else if(typeof range.global==='number'){ + player.createRangeShadow(get.globalFrom(player)+range.global); + } + } + } + } if(custom.add.card){ custom.add.card(); } diff --git a/layout/mode/chess.css b/layout/mode/chess.css index 2b21cb2a4..7015be490 100644 --- a/layout/mode/chess.css +++ b/layout/mode/chess.css @@ -98,3 +98,6 @@ box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px; border-radius:8px; } +.playergrid.temp{ + opacity:0.3; +} diff --git a/mode/chess.js b/mode/chess.js index b2a3f0c08..eb3cd2886 100644 --- a/mode/chess.js +++ b/mode/chess.js @@ -27,6 +27,27 @@ mode.chess={ }, }, player:{ + createRangeShadow:function(num,move){ + num++; + var shadows=this.parentNode.getElementsByClassName('playergrid'); + while(shadows.length){ + shadows[0].remove(); + } + for(var i=1-num;i7){ + game.players[i].popup('距离:'+dist,'thunder'); + } + else{ + game.players[i].popup('距离:'+dist); + } + } + } + },true); ui.create.me(); ui.create.fakeme(); ui.create.cards(); ui.chessinfo=ui.create.div('.fakeme.player',ui.me); - ui.phasequeue=[]; game.finishCards(); game.arrangePlayers(); @@ -701,13 +751,28 @@ mode.chess={ } game.gameDraw(p); game.phaseLoop(p); - for(var i=0;i1||event.targets[0]!=player); + }, + forced:true, + popup:false, + content:function(){ + player.addTempSkill('noactpunish','phaseAfter'); + } + }, + noactpunish:{}, _phasequeue:{ trigger:{player:'phaseBegin'}, forced:true, @@ -862,7 +939,12 @@ mode.chess={ direct:true, delay:false, content:function(){ - player.chooseToMove(2); + "step 0" + player.chooseToMove(player.skills.contains('noactpunish')?2:1); + "step 1" + if(result=='cancelled'){ + player.getStat().skill._chessmove--; + } }, ai:{ order:5, @@ -870,11 +952,13 @@ mode.chess={ player:function(player){ var range=get.attackRange(player)>1; var nh=player.num('h'); - if(nh<=Math.min(3,player.hp)) return Math.random()-0.3; - else if(nh<=Math.min(3,player.hp)) return Math.random()-0.4; if(!player.num('h','sha')&& !player.num('h','shunshou')&& - !player.num('h','bingliang')) return Math.random()-0.5; + !player.num('h','bingliang')){ + if(nh<=Math.min(3,player.hp)) return Math.random()-0.3; + else if(nh<=Math.min(2,player.hp)) return Math.random()-0.4; + return Math.random()-0.5; + } var neighbour; neighbour=player.getNeighbour(0,1); if(neighbour&&neighbour.side!=player.side){ @@ -934,7 +1018,6 @@ mode.chess={ create:{ playergrid:function(player,x,y){ var node=ui.create.div('.player.minskin.playergrid',player.parentNode); - node.listen(ui.click.playergrid); node.link=player; node.dataset.position=player.getDataPos(x,y); return node; @@ -970,5 +1053,11 @@ mode.chess={ } }, posmap:{}, + help:{ + '战棋模式':'