diff --git a/character/sp.js b/character/sp.js index 10c0bf450..ada185185 100644 --- a/character/sp.js +++ b/character/sp.js @@ -2600,6 +2600,7 @@ character.sp={ }, mark:true, direct:true, + unique:true, content:function(){ "step 0" var check=(player.hp==1||(player.hp==2&&player.num('h')<=1)); diff --git a/character/swd.js b/character/swd.js index 78565fbe1..99ce8303a 100644 --- a/character/swd.js +++ b/character/swd.js @@ -1456,43 +1456,46 @@ character.swd={ trigger:{player:'phaseBegin'}, group:'huanxing2', direct:true, - filter:function(event,player){ - return player.num('he')>0; - }, content:function(){ "step 0" player.unmark(player.storage.huanxing+'_charactermark'); delete player.storage.huanxing; delete player.additionalSkills.huanxing; player.checkMarks(); - player.chooseCardTarget({ - prompt:'是否发动【幻形】?', - filterCard:true, - position:'he', - filterTarget:function(card,player,target){ - if(target==player) return false; - if(target.sex!='male') return false; - var name=target.name.indexOf('unknown')==0?target.name2:target.name; + if(player.num('he')){ + player.chooseCardTarget({ + prompt:'是否发动【幻形】?', + filterCard:true, + position:'he', + filterTarget:function(card,player,target){ + if(target==player) return false; + if(target.sex!='male') return false; + var name=target.name.indexOf('unknown')==0?target.name2:target.name; - var info=lib.character[name]; - if(info){ - var skills=info[3]; - for(var j=0;j0; + return player.num('h',{type:['trick','delay']})>0; }, filterTarget:function(card,player,target){ var names=[]; @@ -5158,7 +5160,7 @@ character.swd={ return false; } }, - createDialog:function(player,target){ + createDialog:function(player,target,onlylist){ var names=[]; var list=[]; if(target.name&&!target.classList.contains('unseen')) names.add(target.name); @@ -5178,8 +5180,10 @@ character.swd={ } } } + if(onlylist) return list; var dialog=ui.create.dialog(); dialog.add('选择获得一项技能'); + _status.event.list=list; var clickItem=function(){ _status.event._result=this.link; game.resume(); @@ -5189,24 +5193,39 @@ character.swd={ var translation=get.translation(list[i])[0]+get.translation(list[i])[1]; var item=dialog.add(''); - item.addEventListener('click',clickItem); - item.link=list[i]; + item.firstChild.addEventListener('click',clickItem); + item.firstChild.link=list[i]; } } dialog.add(ui.create.div('.placeholder')); return dialog; }, + check:function(card){ + return 5-ai.get.value(card); + }, content:function(){ "step 0" - ui.auto.hide(); - event.dialog=lib.skill.tianshu.createDialog(player,target); - game.pause(); + event.skillai=function(list){ + return list.randomGet(); + }; + if(event.isMine()){ + event.dialog=lib.skill.tianshu.createDialog(player,target); + event.switchToAuto=function(){ + event._result=event.skillai(event.list); + game.resume(); + }; + game.pause(); + } + else{ + event._result=event.skillai(lib.skill.tianshu.createDialog(player,target,true)); + } "step 1" if(player.storage.tianshu){ player.unmark(player.storage.tianshu+'_charactermark'); } - ui.auto.show(); - event.dialog.close(); + if(event.dialog){ + event.dialog.close(); + } var link=result; player.addSkill(link); player.skills.remove(link); @@ -5218,8 +5237,20 @@ character.swd={ }); player.storage.tianshu=target.name; player.checkMarks(); + player.addTempSkill('tianshu_ai','phaseAfter'); }, + ai:{ + order:1, + result:{ + player:function(player){ + if(player.skills.contains('tianshu_ai')) return 0; + if(player.num('h')>player.hp) return 1; + return 0; + } + } + } }, + tianshu_ai:{}, tianshu2:{ trigger:{player:'phaseBegin'}, direct:true, @@ -7932,7 +7963,7 @@ character.swd={ tanlin_info:'出牌阶段限一次,你可以与一名其他角色进行拼点,若你赢,你获得双方拼点牌、对该角色使用卡牌无视距离且可以额外使用一张杀直到回合结束,若你没赢,你受到该角色的一点伤害。', pozhen_info:'每当你受到一次伤害,若你的手牌数大于伤害来源,你可以弃置X张手牌对其造成一点伤害;若你的手牌数小于伤害来源,你可以弃置其X张手牌。X为你与伤害来源的手牌数之差。', yunchou_info:'出牌阶段限一次,你可以弃置任意张手牌,并弃置一张其他角色的手牌,你弃置的手牌中每有一张与此牌的颜色相同,你摸一张牌,否则对方摸一张牌', - tianshu_info:'回合开始阶段,你可以获得场上一名存活角色的一项技能;出牌阶段,你可以弃置一张锦囊牌,然后更换一项技能', + tianshu_info:'出牌阶段,你可以弃置一张锦囊牌,并获得场上一名存活角色的一项技能(再使用则会替换前一次获得的技能)', luomei_info:'每当你使用或打出一张梅花花色的牌,你可以摸一张牌', xingdian_info:'出牌阶段限一次,你可以弃置一张手牌,然后指定至多两名角色令其各弃置一张牌', yulin_info:'每当你即将受到伤害,你可以弃置一张装备牌抵消此伤害', diff --git a/game/game.js b/game/game.js index c7478192b..aee882ffb 100644 --- a/game/game.js +++ b/game/game.js @@ -628,6 +628,7 @@ window.play={}; setTimeout(function(){ event.dialog=ui.create.dialog(get.translation(player.name)+'拼点成功'); + event.dialog.classList.add('center'); player.popup('胜'); target.popup('负'); game.resume(); @@ -639,6 +640,7 @@ window.play={}; event.result.tie=true; setTimeout(function(){ event.dialog=ui.create.dialog(get.translation(player.name)+'拼点失败'); + event.dialog.classList.add('center'); player.popup('平'); target.popup('平'); game.resume(); @@ -647,6 +649,7 @@ window.play={}; else{ setTimeout(function(){ event.dialog=ui.create.dialog(get.translation(player.name)+'拼点失败'); + event.dialog.classList.add('center'); player.popup('负'); target.popup('胜'); game.resume(); @@ -1934,6 +1937,7 @@ window.play={}; player.judging=get.cards()[0]; event.node=player.judging.copy('thrown','center',ui.arena).animate('start'); event.dialog=ui.create.dialog(get.translation(player)+'的'+event.judgestr+'判定'); + event.dialog.classList.add('center'); game.log(get.translation(player)+'进行'+event.judgestr+'判定,亮出的判定牌为'+get.translation(player.judging)); game.delay(2); event.trigger('judge'); @@ -7057,10 +7061,11 @@ window.play={}; case 'strict_sort': modeconfig.push(ui.create.switcher('strict_sort',get.config('strict_sort'),ui.click.sidebar.local)); modeconfig.push(ui.create.switcher('reverse_sort',get.config('reverse_sort'),ui.click.sidebar.reverse_sort));break; - default: - if(Array.isArray(lib.config.current_mode[i])){ - modeconfig.push(ui.create.switcher.apply(this,lib.config.current_mode[i])); + default:{ + if(typeof lib.config.current_mode[i]==='function'){ + modeconfig.push(lib.config.current_mode[i](lib,get,ui)); } + } } } for(i in lib.config.current_mode){ @@ -9646,11 +9651,13 @@ window.play={}; } if(ui.dialog){ if(lib.config.mode=='chess'){ - if(ui.dialog.content.offsetHeight<240){ + if(ui.dialog.content.offsetHeight<240&&(!ui.dialog.buttons||!ui.dialog.buttons.length)){ ui.dialog.style.height=ui.dialog.content.offsetHeight+'px'; + ui.dialog.classList.add('slim'); } else{ ui.dialog.style.height=''; + ui.dialog.classList.remove('slim'); } } if(ui.dialog.content.offsetHeight<=240|| @@ -10813,6 +10820,18 @@ window.play={}; disvalue:function(card,player){ return -ai.get.value(card,player); }, + skillthreaten:function(skill,player,target){ + if(!lib.skill[skill]) return 1; + if(!lib.skill[skill].ai) return 1; + var threaten=lib.skill[skill].ai.threaten; + if(typeof threaten=='number') return threaten; + if(typeof threaten=='function'){ + player=player||_status.event.player; + target=target||player; + return threaten(player,target); + } + return 1; + }, order:function(item){ var aii=get.info(item).ai; var order; @@ -11016,6 +11035,7 @@ window.play={}; } }, }; + lib.init.init(); HTMLDivElement.prototype.animate=function(name){ this.classList.add(name); var that=this; @@ -11394,7 +11414,6 @@ window.play={}; console.log(str); return aa+bb+cc+dd; } - lib.init.init(); window.onkeydown=function(e){ if(e.keyCode==32){ var node=ui.window.querySelector('#paused'); diff --git a/layout/mode/chess.css b/layout/mode/chess.css index 7015be490..0159abaad 100644 --- a/layout/mode/chess.css +++ b/layout/mode/chess.css @@ -54,6 +54,9 @@ box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px; border-radius:8px; } +#arena>.dialog.slim:not(.center){ + top:40px; +} #control{ top:calc(100% - 155px); } @@ -101,3 +104,16 @@ .playergrid.temp{ opacity:0.3; } +.chessscroll{ + height:calc(100% - 162px); + width:20px; + top:42px; + z-index:1; + position:fixed; +} +.chessscroll.left{ + left:0; +} +.chessscroll.right{ + right:0; +} diff --git a/mode/chess.js b/mode/chess.js index eb3cd2886..31d0d943c 100644 --- a/mode/chess.js +++ b/mode/chess.js @@ -79,6 +79,7 @@ mode.chess={ }, chessFocus:function(){ if(ui.chess._chessdrag) return; + if(_status.chessscrolling) return; var player=this; var dx=0,dy=0; @@ -639,6 +640,30 @@ mode.chess={ delete _status.currentChessFocus; } }); + ui.chessscroll1=ui.create.div('.chessscroll.left',ui.chessContainer); + ui.chessscroll2=ui.create.div('.chessscroll.right',ui.chessContainer); + var chessscroll=function(){ + var direction=this.direction; + var speed=get.config('chessscroll_speed'); + if(!speed) return; + var interval=setInterval(function(){ + ui.chessContainer.scrollLeft+=speed*direction; + },16); + _status.chessscrolling=interval; + }; + var leavescroll=function(){ + if(_status.chessscrolling){ + clearInterval(_status.chessscrolling); + delete _status.chessscrolling; + } + }; + ui.chessscroll1.direction=-1; + ui.chessscroll1.addEventListener('mouseenter',chessscroll); + ui.chessscroll1.addEventListener('mouseleave',leavescroll); + + ui.chessscroll2.direction=1; + ui.chessscroll2.addEventListener('mouseenter',chessscroll); + ui.chessscroll2.addEventListener('mouseleave',leavescroll); for(var i=0;i'+ '杀死对方阵营的角色可摸一张牌,杀死本方阵营无惩罚' }, - config:['battle_number','ban_weak','free_choose','change_choice'], + config:['battle_number','ban_weak','free_choose','change_choice', + function(lib,get,ui){ + var current=get.config('chessscroll_speed'); + if(typeof current!=='number'){ + game.saveConfig('chessscroll_speed',20,true); + current=20; + } + return ui.create.switcher('chessscroll_speed',[0,10,20,30],10,ui.click.sidebar.local); + }], }