diff --git a/card/refresh.js b/card/refresh.js index 3af29b429..c265267b2 100644 --- a/card/refresh.js +++ b/card/refresh.js @@ -47,7 +47,7 @@ card.refresh={ players.sort(lib.sort.seat); var choice=players[0]; player.chooseTarget('是否移动木牛流马?',function(card,player,target){ - return player!=target&&!target.get('e','5'); + return !target.isMin()&&player!=target&&!target.get('e','5'); }).ai=function(target){ return target==choice?1:-1; }; diff --git a/card/swd.js b/card/swd.js index 335c580e8..d94238e4c 100644 --- a/card/swd.js +++ b/card/swd.js @@ -311,8 +311,8 @@ card.swd={ return (lib.filter.judge(card,player,target)&&player!=target); }, judge:function(card){ - if(get.color(card)=='red') return 0; - return -3; + if(get.color(card)=='black') return -3; + return 0; }, effect:function(){ if(result.bool==false){ diff --git a/character/wind.js b/character/wind.js index 30f5f748d..964f3b87c 100644 --- a/character/wind.js +++ b/character/wind.js @@ -224,7 +224,7 @@ character.wind={ "step 1" event.dialog.close(); for(var i=0;i.background{z-index:-2} -webkit-transform:scale(0.8); -webkit-transform-origin:top right; } +.buttons .card.button>.addinfo{ + -webkit-transform:scale(0.8); + -webkit-transform-origin:bottom left; +} .card.center{top:calc(50% - 52px);left:calc(50% - 52px);} .card>.background{font-size: 80px;height: 80px;padding-top: 14px;text-align: center;} .equips>.card>.background{font-size: 36px;height: 36px;padding-top: 3px;} @@ -283,18 +287,18 @@ margin-bottom: 5px; #arena.stone>.card[data-position='5']{top:calc(100% - 297px);left:8px;} #arena.stone>.popup[data-position='5']{top:calc(100% - 340px);left:8px;} -#arena>.player.minskin[data-position='9']{top:10px;left:calc(100% - 120px);} -#arena.stone>.card[data-position='9']{top:18px;left:calc(100% - 112px);} -#arena.stone>.popup[data-position='9']{top:140px;left:calc(100% - 112px);} +#arena>.player.minskin[data-position='9']{top:30px;left:calc(100% - 120px);} +#arena.stone>.card[data-position='9']{top:38px;left:calc(100% - 112px);} +#arena.stone>.popup[data-position='9']{top:160px;left:calc(100% - 112px);} #arena>.player.minskin[data-position='11']{top:10px;left:calc(100% - 260px);} #arena.stone>.card[data-position='11']{top:18px;left:calc(100% - 252px);} #arena.stone>.popup[data-position='11']{top:140px;left:calc(100% - 252px);} #arena>.player.minskin[data-position='10']{top:10px;left:140px;} #arena.stone>.card[data-position='10']{top:18px;left:148px;} #arena.stone>.popup[data-position='10']{top:140px;left:148px;} -#arena>.player.minskin[data-position='8']{top:10px;left:0;} -#arena.stone>.card[data-position='8']{top:18px;left:8px;} -#arena.stone>.popup[data-position='8']{top:140px;left:8px;} +#arena>.player.minskin[data-position='8']{top:30px;left:0;} +#arena.stone>.card[data-position='8']{top:38px;left:8px;} +#arena.stone>.popup[data-position='8']{top:160px;left:8px;} /*--------位置(8人)------*/ [data-number='8']>.player[data-position='1']{top:calc(200% / 3 - 90px);left:calc(100% - 240px);} [data-number='8']>.player[data-position='2']{top:calc(100% / 3 - 40px);left:calc(100% - 240px);} @@ -419,6 +423,7 @@ margin-bottom: 5px; #arena.selecting #me .card:not(.selectable)>.name, #arena.selecting #me .card:not(.selectable)>.name2, #arena.selecting #me .card:not(.selectable)>.info, +#arena.selecting #me .card:not(.selectable)>.addinfo, #arena.selecting .dialog:not(.noselect) .button:not(.selectable):not(.noclick), .dead,.likedead{opacity: 0.6;} .mark>.background{opacity: 1 !important;} @@ -685,6 +690,10 @@ div[data-nature='soil']{ top:74px; right:6px; } +.card .addinfo{ + bottom:6px; + left:6px; +} .button.card .wunature{ top:59px; } diff --git a/mode/stone.js b/mode/stone.js index 882f2e768..3a9dde8ab 100644 --- a/mode/stone.js +++ b/mode/stone.js @@ -1,3 +1,4 @@ +'use strict'; mode.stone={ element:{ player:{ @@ -9,6 +10,7 @@ mode.stone={ if(typeof player.actcount!=='number'){ player.actcount=1; } + player.actused=0; if(!player.actcharacterlist){ player.actcharacterlist=[]; } @@ -27,7 +29,7 @@ mode.stone={ break; } } - var count=this.actcount-get.cardCount(true,this); + var count=this.actcount-this.getActCount(); for(var i=0;i=0){ + this.actcharacterlist[index]=null; + } + return this; + }, dieAfter:function(source){ var dead=this; if(game.me.isDead()){ @@ -63,7 +109,7 @@ mode.stone={ ui.arena.appendChild(player); game.swapControl(player); game.arrangePlayers(); - player.draw(2,false); + player.draw(2+game.enemy.actcharacterlist.length,false); game.resume(); },lib.config.duration); @@ -93,32 +139,22 @@ mode.stone={ game.enemy=player; ui.arena.appendChild(player); game.arrangePlayers(); - player.draw(2,false); + player.draw(2+game.me.actcharacterlist.length,false); game.resume(); },lib.config.duration); } } - if(source&&source.side!=this.side){ + if(source&&source.side!=this.side&&!source.isMin()){ source.draw(2); + source.actused--; + source.updateActCount(); } game.dead.remove(this); game.arrangePlayers(); - var player,pos; - if(this.side==game.me.side){ - player=game.me; - pos=0; - } - else{ - player=game.enemy; - pos=4; - } + this.getLeader().removeFellow(this); setTimeout(function(){ dead.delete(); },500); - var index=player.actcharacterlist.indexOf(this); - if(index>=0){ - player.actcharacterlist[index]=null; - } } } }, @@ -152,12 +188,13 @@ mode.stone={ } }, initStone:function(){ - var list=[],list2=[]; + var list=[]; var i,j,name; for(i in lib.character){ - if(lib.character[i][4]&&lib.character[i][4].contains('minskin')){ + if(lib.character[i][4]&&lib.character[i][4].contains('minskin')&&lib.character[i][4].contains('stone')){ lib.character[i][3].add('stonesha'); lib.character[i][3].add('stoneshan'); + lib.character[i][3].add('stonedraw'); list.push(i); } } @@ -172,14 +209,11 @@ mode.stone={ image:'character/default/'+thisname, color:'white', opacity:1, + addinfo:'消耗 '+lib.character[thisname][5][0], enable:function(event,player){ - if(!player.actcharacterlist) return false; - if(player.actcharacterlist.length<4) return true; - for(var i=0;i1||target.num('he')>0); + }, + content:function(){ + "step 0" + target.discard(target.get('he')); + "step 1" + if(target.maxHp>1){ + target.loseMaxHp(target.maxHp-1); + } + }, + ai:{ + result:{ + target:-1 + }, + order:5 + } + }, + liumangxingzhen:{ + type:'stone', + enable:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + selectTarget:-1, + content:function(){ + target.die(); + }, + stoneact:6, + ai:{ + order:9, + result:{ + target:-1 + } + } + }, + shengerpingdeng:{ + type:'stone', + enable:true, + stoneact:2, + filterTarget:function(card,player,target){ + return target.isMin()&&target.maxHp>1; + }, + selectTarget:-1, + content:function(){ + target.loseMaxHp(target.maxHp-1); + }, + ai:{ + order:9, + result:{ + target:function(player,target){ + if(target.hp>1) return -1; + if(target.maxHp>1) return -0.1; + return 0; + } + } + } + }, + emofengdi:{ + type:'stone', + enable:function(event,player){ + return player.canAddFellow(); + }, + stoneact:5, + filterTarget:function(card,player,target){ + return target.isMin()&&target.side!=player.side; + }, + content:function(){ + target.getLeader().removeFellow(target); + target.side=player.side; + player.addFellow(target); + }, + ai:{ + order:9, + result:{ + player:1 + } + } + }, + weidi:{ + type:'stone', + enable:function(event,player){ + return player.canAddFellow(); + }, + stoneact:4, + filterTarget:function(card,player,target){ + return target.isMin()&&target.side!=player.side; + }, + content:function(){ + target.getLeader().removeFellow(target); + target.side=player.side; + player.addFellow(target); + target.addSkill('weidi_die'); + }, + ai:{ + order:9, + result:{ + player:1 + } + } + }, + hunyemolu:{ + type:'stone', + enable:true, + stoneact:3, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + selectTarget:-1, + content:function(){ + target.turnOver(); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(target.isTurnedOver()) return 1; + return -1; + } + } + } + }, + miefafu:{ + type:'stone', + enable:true, + stoneact:2, + fullskin:true, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + content:function(){ + target.turnOver(); + }, + ai:{ + order:6, + result:{ + target:function(player,target){ + if(target.isTurnedOver()) return 1; + return -1; + } + } + } + }, + zuzhoumojie:{ + type:'stone', + enable:true, + stoneact:3, + filterTarget:function(card,player,target){ + return target.isMin()&&target.side==player.side; + }, + content:function(){ + target.addSkill('chaofeng'); + game.log(get.translation(target)+'获得了嘲讽'); + target.popup('诅咒'); + }, + ai:{ + order:2, + result:{ + target:function(player,target){ + if(target.hp>=2) return 1; + return 0; + } + } + } + }, + yesushengxue:{ + type:'stone', + enable:true, + stoneact:4, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + content:function(){ + target.gainMaxHp(2); + target.recover(2); + }, + ai:{ + order:7, + result:{ + target:1 + } + } + }, + sanghunzhao:{ + type:'stone', + fullskin:true, + enable:true, + stoneact:3, + filterTarget:function(card,player,target){ + return target.isMin(); + }, + content:function(){ + target.loseHp(); + }, + ai:{ + order:9, + result:{ + target:-1 + } + } + }, + fengraozhijiao:{ + type:'stone', + fullskin:true, + enable:true, + stoneact:1, + filterTarget:function(card,player,target){ + return target.isMin()&&target.hp0; + }).ai=function(target){ + return 1; + }; + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.line(result.targets[0]); + game.delay(); + result.targets[0].discard(result.targets[0].get('he')); + } + } + }, + stone_weijiang:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + filter:function(event,player){ + for(var i=0;i0; + }, + content:function(){ + "step 0" + event.chooser=player.getLeader(); + event.enemy=player.getEnemy(); + event.chooser.choosePlayerCard(event.enemy,'e','吴兵:令对方主将将装备区中的一张牌收入手牌'); + player.line(event.chooser); + "step 1" + if(result.bool){ + event.chooser.line(event.enemy); + game.delay(); + event.enemy.gain(result.links,'gain2'); + game.log(get.translation(event.enemy)+'将'+get.translation(result.links)+'收入手牌') + } + } + }, + stone_wuguan:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + player.getLeader().addTempSkill('stone_wuguan2','phaseAfter'); + } + }, + stone_wuguan2:{ + mod:{ + maxHandcard:function(player,num){ + return num+1; + } + }, + }, + stone_wujiang:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + player.getLeader().draw(2); + } + }, + stone_qunbing:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + player.addSkill('stone_qunbing2'); + } + }, + stone_qunbing2:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + content:function(){ + trigger.num++; + player.removeSkill('stone_qunbing2'); + } + }, + stone_qunguan:{ + trigger:{source:'fellow'}, + forced:true, + unique:true, + content:function(){ + var targets=[]; + for(var i=0;i=player.actcount) return false; + var stoneact=get.info(card).stoneact; + if(typeof stoneact!='number'){ + stoneact=1; + } + if(player.getActCount()+stoneact>player.actcount) return false; } }, trigger:{player:'phaseUseBegin'}, @@ -426,47 +1086,32 @@ mode.stone={ content:function(){ player.actcount++; if(player.actcount>6){ - player.actcount-=6; + player.actcount-=5; } + player.actused=0; player.updateActCount(); } }, _actcount2:{ - trigger:{player:['useCard','useCardAfter']}, + trigger:{player:'useCard'}, forced:true, popup:false, filter:function(event,player){ return !player.isMin(); }, content:function(){ + var stoneact=get.info(trigger.card).stoneact; + if(typeof stoneact==='number'){ + player.actused+=stoneact-1; + } player.updateActCount(); } }, stonesha:{ + unique:true, enable:['chooseToUse','chooseToRespond'], - filterCard:{type:'stonecharacter'}, - viewAs:{name:'sha'}, - check:function(){return 1}, - filter:function(event,player){ - return player.num('h',{type:'stonecharacter'})>0; - }, - viewAsFilter:function(player){ - return player.num('h',{type:'stonecharacter'})>0; - }, - ai:{ - skillTagFilter:function(player){ - return player.num('h',{type:'stonecharacter'})>0; - }, - respondSha:true, - order:4, - useful:-1, - value:-1 - } - }, - stoneshan:{ - enable:['chooseToRespond'], filterCard:{type:'equip'}, - viewAs:{name:'shan'}, + viewAs:{name:'sha'}, check:function(){return 1}, filter:function(event,player){ return player.num('h',{type:'equip'})>0; @@ -478,46 +1123,127 @@ mode.stone={ skillTagFilter:function(player){ return player.num('h',{type:'equip'})>0; }, + respondSha:true, + order:4, + useful:-1, + value:-1 + } + }, + stoneshan:{ + unique:true, + enable:['chooseToRespond'], + viewAs:{name:'shan'}, + filterCard:{type:'stonecharacter'}, + check:function(){return 1}, + filter:function(event,player){ + return player.num('h',{type:'stonecharacter'})>0; + }, + viewAsFilter:function(player){ + return player.num('h',{type:'stonecharacter'})>0; + }, + ai:{ + skillTagFilter:function(player){ + return player.num('h',{type:'stonecharacter'})>0; + }, respondShan:true, order:4, useful:-1, value:-1 } }, + stonedraw:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + popup:false, + content:function(){ + trigger.num--; + } + } }, translate:{ - stone_weibing:'士兵', - stone_weiguan:'文官', - stone_weijiang:'将领', + stone_weibing:'魏兵', + stone_weibing_info:'你出场时,已方主将可以弃置对方一名随从的所有牌', + stone_weiguan:'魏官', + stone_weiguan_info:'你出场时,已方主将可以令已方一名其他角色摸一张牌', + stone_weijiang:'魏将', + stone_weijiang_info:'你出场时,已方主将可以对对方一名随从造成一点伤害', - stone_shubing:'士兵', - stone_shuguan:'文官', - stone_shujiang:'将领', + stone_shubing:'蜀兵', + stone_shubing_info:'你出场时,立即将武将牌翻至正面', + stone_shuguan:'蜀官', + stone_shuguan2:'蜀官', + stone_shuguan_info:'你出场时,已方主将于本回合结束阶段摸一张牌', + stone_shujiang:'蜀将', + stone_shujiang_info:'你出场时,已方主将可视为对一名敌方角色使用一张杀', - stone_wubing:'士兵', - stone_wuguan:'文官', - stone_wujiang:'将领', + stone_wubing:'吴兵', + stone_wubing_info:'你出场时,已方主将可令敌方主将将装备区内的一张牌收入手牌', + stone_wuguan:'吴官', + stone_wuguan_info:'你出场时,已方主将本回合手牌上限+1', + stone_wujiang:'吴将', + stone_wujiang_info:'你出场时,已方主将摸两张牌', - stone_qunbing:'士兵', - stone_qunguan:'文官', - stone_qunjiang:'将领', + stone_qunbing:'群兵', + stone_qunbing2:'群兵', + stone_qunbing_info:'你出场后的第一个摸牌阶段摸牌数+1', + stone_qunguan:'群官', + stone_qunguan_info:'你出场时,所有其他随从各摸一张牌', + stone_qunjiang:'群将', + stone_qunjiang_info:'你出场时,敌方随从弃置所有牌', stone_daoshi:'道士', + stone_daoshi_info:'回合开始阶段,若你没有手牌,你摸一张牌', stone_sanxian:'散仙', + stone_sanxian_info:'你死亡时,已方主将可令一名敌方随从失去1点体力', stone_banxian:'半仙', + stone_banxian_info:'你死亡时,已方主将可令一名敌方随从失去1点体力上限', stone_yisheng:'医生', stone_yinshi:'隐士', + stone_yinshi_info:'在你的回合开始前,不能成为任何卡牌的目标', stone_gongzhu:'公主', stone_genv:'歌女', stone_wunv:'舞女', stone_wanghou:'皇后', - stone_feipin:'妃嫔', + stone_feipin:'王妃', stone_yiji:'艺伎', stone_daogu:'道姑', + stone_daogu_info:'回合结束阶段,若你没有手牌,你摸一张牌', - stonesha:'炉杀', - stoneshan:'石闪', + stonesha:'冲锋', + stonesha_info:'锁定技,你的装备牌均视为杀', + stoneshan:'格挡', + stoneshan_info:'锁定技,你的随从牌均视为闪', + + stonecharacter:'随从', + shengerpingdeng:'生而平等', + shengerpingdeng_info:'将所有随从体力上限降为1', + emofengdi:'恶魔风笛', + emofengdi_info:'将一名敌方随从吸收为已方', + weidi:'苇笛', + weidi_info:'使一名敌方随从变为已方,并于下个回合结束后死亡', + weidi_die:'苇笛', + weidi_die_info:'下个回合结束后死亡', + hunyemolu:'魂野魔露', + hunyemolu_info:'将场上所有随从翻面', + miefafu:'灭法符', + miefafu_info:'将目标随从翻面', + liumangxingzhen:'六芒星阵', + liumangxingzhen_info:'令场上所有随从死亡', + zuzhoumojie:'诅咒魔戒', + zuzhoumojie_info:'令目标随从获得嘲讽', + chaofeng:'嘲讽', + chaofeng_info:'同阵营的无嘲讽角色不以能成为杀或决斗的目标', + yesushengxue:'耶稣圣血', + yesushengxue_info:'令一名随从增加两点体力上限并回复两点体力', + sanghunzhao:'丧魂爪', + sanghunzhao_info:'令场上所有随从失去一点体力', + suoyanhuan:'锁炎环', + suoyanhuan_info:'弃置一名随从的所有牌,并令其体力上限减至1', + zhaohunfan:'招魂幡', + zhaohunfan_info:'令双方各一名随从立即死亡', + fengraozhijiao:'丰饶之角', + fengraozhijiao_info:'令一名随从回复一点体力', }, ai:{ get:{ @@ -526,5 +1252,13 @@ mode.stone={ } } }, - config:['battle_number','double_character','ban_weak','free_choose','change_choice'] + config:['battle_number','double_character','ban_weak','free_choose','change_choice'], + help:{ + '炉石模式':'
  • 主将出牌阶段的出牌数量有上限,先手为2,后手为3
  • 每进行一个回合,主将的出牌上限+1,超过6时减至2并重新累加'+ + '
  • 牌堆中随机加入总量1/3的随从牌,使用之可召唤一个随从,随从出场时背面朝上
  • 随从于摸牌阶段摸牌基数为1,随从的随从牌均视为闪,装备牌均视为杀
  • '+ + '随从与其他所有角色相互距离基数为1
  • '+ + '主将杀死对方随从后获得一个额外的行动值并摸两张牌'+ + '
  • 游戏中装备牌和随从牌均可重铸,但回合内总的重铸次数不能超过3'+ + '
  • 嘲讽:若一方阵营中有嘲讽角色,则同阵营的无嘲讽角色不以能成为杀或决斗的目标' + } }