diff --git a/character/boss.js b/character/boss.js index 509abcb96..600e56c14 100644 --- a/character/boss.js +++ b/character/boss.js @@ -382,13 +382,53 @@ character.boss={ content:function(){ 'step 0' player.line(trigger.player,'green'); - trigger.player.chooseCard(true,'选择保留一张牌,然后弃置其它牌','he').ai=function(card){ + var next=trigger.player.chooseCard(true,'选择保留一张手牌和一张装备区内的牌,然后弃置其它牌','he',function(card){ + switch(get.position(card)){ + case 'h':{ + if(ui.selected.cards.length){ + return get.position(ui.selected.cards[0])=='e'; + } + else{ + return trigger.player.num('h')>1; + } + break; + } + case 'e':{ + if(ui.selected.cards.length){ + return get.position(ui.selected.cards[0])=='h'; + } + else{ + return trigger.player.num('e')>1; + } + break; + } + } + }); + var num=0; + if(trigger.player.num('h')>1){ + num++; + } + if(trigger.player.num('e')>1){ + num++; + } + next.selectCard=[num,num]; + next.ai=function(card){ return ai.get.value(card); }; 'step 1' if(result.bool){ - var he=trigger.player.get('he'); - he.remove(result.cards[0]); + var he=[]; + var hs=trigger.player.get('h'); + var es=trigger.player.get('e'); + if(hs.length>1){ + he=he.concat(hs); + } + if(es.length>1){ + he=he.concat(es); + } + for(var i=0;i=3) return false; + return true; + }, + content:function(){ + var cards=[]; + for(var i=0;i0; + }, + filter:function(event,player){ + return game.hasPlayer(function(target){ + return target!=player&&target.num('e'); + }); + }, + content:function(){ + var es=target.get('e'); + if(es.length>1){ + es=es.randomGets(Math.ceil(Math.random()*2)); + } + target.discard(es); + }, + ai:{ + order:9.5, + result:{ + target:function(player,target){ + var ne=target.num('e'); + if(ne>1) return -1.5; + return -1; + } + } + } + }, + shixu:{ + group:['shixu_begin','shixu_end','shixu_discard'], + subSkill:{ + begin:{ + trigger:{global:'phaseUseBegin'}, + forced:true, + popup:false, + silent:true, + content:function(){ + trigger.player.storage.shixu_begin=get.time(); + } + }, + end:{ + trigger:{global:'phaseUseEnd'}, + forced:true, + popup:false, + silent:true, + filter:function(event,player){ + return typeof event.player.storage.shixu_begin=='number'; + }, + content:function(){ + trigger.player.storage.shixu=get.time()-trigger.player.storage.shixu_begin; + delete trigger.player.storage.shixu_begin; + } + }, + discard:{ + trigger:{global:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return typeof event.player.storage.shixu=='number'&& + event.player.storage.shixu>3000&&event.player.num('he')>0; + }, + content:function(){ + player.line(trigger.player,'green'); + trigger.player.chooseToDiscard('he',true,Math.floor(trigger.player.storage.shixu/3000)); + delete trigger.player.storage.shixu; + } + } + } + }, + jixuan:{ + trigger:{player:'phaseAfter'}, + forced:true, + filter:function(event,player){ + return event.parent.name!='jixuan'; + }, + content:function(){ + player.draw(); + player.phase(); + }, + ai:{ + threaten:1.8 + }, + }, qianghua:{ trigger:{player:'useCardAfter'}, filter:function(event,player){ @@ -2497,9 +2613,8 @@ character.hearth={ hs_ysera:'伊瑟拉', hs_alextrasza:'阿莱克斯塔', hs_trueheart:'图哈特', + hs_nozdormu:'诺兹多姆', - qianghua:'强化', - qianghua_info:'出牌阶段限两次,你可以令一张你使用的基本牌或非延时锦囊牌额外结算一次', fushi:'缚誓', fushi_info:'出牌阶段,你可以令一名已受伤角色失去一点体力上限并回复一点体力', hs_ronghejuren:'熔核巨人', @@ -2514,7 +2629,20 @@ character.hearth={ hs_zhanzhenggushu:'战争古树', hs_jinglinglong:'精灵龙', hs_sapphiron:'萨菲隆', + hs_xuanzhuanjijia:'旋转机甲', + hs_ruanniguai:'软泥怪', + hs_kchromaggus:'克洛玛古斯', + fenlie:'分裂', + fenlie_info:'锁定技,每当你于摸牌阶段外获得卡牌,你获得一张此牌的复制,每回合最多发动三次', + nianfu:'粘附', + nianfu_info:'出牌阶段限一次,你可以指定一名其他角色,随机弃置其1~2张装备牌', + shixu:'时序', + shixu_info:'锁定技,所有角色于出牌阶段每消耗3秒,便须于回合结束阶段弃置一张牌', + qianghua:'强化', + qianghua_info:'出牌阶段限两次,你可以令一张你使用的基本牌或非延时锦囊牌额外结算一次', + jixuan:'疾旋', + jixuan_info:'锁定技,回合结束后,你摸一张牌并进行一个额外的回合', biri:'蔽日', biri_info:'每当距离你1以内的一名其他角色成为杀的惟一目标时,若杀的使用者不是你,你可以弃置一张闪取消之', stuxi:'吐息', diff --git a/character/rank.js b/character/rank.js index f2a8e03b6..1efcec982 100644 --- a/character/rank.js +++ b/character/rank.js @@ -166,10 +166,15 @@ window.characterRank={ 'yxs_luban', 'yxs_huamulan', 'yxs_luzhishen', + 'sunluyu', + 'swd_xiyan', ], bp:[ 'hs_alextrasza', + 'hs_xuanzhuanjijia', + 'hs_nuoziduomu', 'hs_sapphiron', + 'swd_quxian', 'yxs_zhuyuanzhang', 'yxs_jinke', 'gongsunyuan', @@ -255,9 +260,15 @@ window.characterRank={ 'yxs_luocheng', 'yxs_napolun', 'caoren', + 'zumao', + 'sp_daqiao', + 'sp_ganning', ], b:[ 'yxs_lishimin', + 'hs_ruanniguai', + 'hanba', + 'daxiaoqiao', 'pal_linyueru', 'zhuran', 'fuhuanghou', @@ -269,7 +280,7 @@ window.characterRank={ 'swd_fu', 'swd_yeyaxi', 'yxs_chengyaojin', - 'yxs_yuji', + 'yxs_yujix', 'swd_jialanduo', 'swd_jiting', 'sp_machao', @@ -323,6 +334,8 @@ window.characterRank={ 'zhangyi', 'yxs_baosi', 'lingju', + 're_ganning', + 'xin_yujin', ], bm:[ 'guohuai', @@ -343,7 +356,6 @@ window.characterRank={ 're_caocao', 're_lvbu', 'chendong', - 're_ganning', 'xiahouba', 'simayi', 'guojia', diff --git a/character/sp.js b/character/sp.js index 222f55847..d3d485b25 100755 --- a/character/sp.js +++ b/character/sp.js @@ -263,6 +263,10 @@ character.sp={ check:function(card){ return 7-ai.get.value(card); }, + position:'he', + filter:function(event,player){ + return player.num('he',{suit:'diamond'})>0; + }, discard:false, prepare:function(cards,player,targets){ player.$give(cards,targets[0]); diff --git a/character/standard.js b/character/standard.js index dcaeca897..d142c4fba 100755 --- a/character/standard.js +++ b/character/standard.js @@ -373,7 +373,7 @@ character.standard={ "step 1" if(result.judge>0){ event.cards.push(result.card); - if(lib.config.auto_skill==false){ + if(lib.config.autoskilllist.contains('luoshen')){ player.chooseBool('是否再次发动?'); } else{ @@ -387,6 +387,9 @@ character.standard={ } } player.gain(event.cards); + if(event.cards.length){ + player.$draw(event.cards); + } event.finish(); } "step 2" @@ -395,6 +398,9 @@ character.standard={ } else{ player.gain(event.cards); + if(event.cards.length){ + player.$draw(event.cards); + } } } }, @@ -531,6 +537,10 @@ character.standard={ } return false; }, + check:function(event,player){ + if(player.storage.jijianging) return false; + return true; + }, content:function(){ "step 0" if(event.current==undefined) event.current=player.next; @@ -538,6 +548,7 @@ character.standard={ event.finish(); } else if(event.current.group=='shu'){ + player.storage.jijianging=true; var next=event.current.chooseToRespond('是否替'+get.translation(player)+'打出一张杀?',{name:'sha'}); next.ai=function(){ var event=_status.event; @@ -551,6 +562,7 @@ character.standard={ event.redo(); } "step 1" + player.storage.jijianging=false; if(result.bool){ event.finish(); trigger.result=result; @@ -1071,6 +1083,9 @@ character.standard={ }, guose:{ audio:1, + filter:function(event,player){ + return player.num('he',{suit:'diamond'})>0; + }, enable:'chooseToUse', filterCard:function(card){ return get.suit(card)=='diamond'; diff --git a/character/swd.js b/character/swd.js index f5f8403e8..a2bc8f6db 100755 --- a/character/swd.js +++ b/character/swd.js @@ -9,7 +9,7 @@ character.swd={ // swd_miles:['male','qun',4,['aojian','miles_xueyi','mohua2']], swd_nicole:['female','wu',3,['huanjian','lingwu','minjing']], swd_wangsiyue:['female','wei',3,['duishi','biyue']], - // swd_weida:['female','qun',3,['yueren','zhenlie']], + swd_weida:['female','qun',3,['yueren','zhenlie']], swd_xuanyuanjianxian:['male','qun',4,['pozhou','huajian']], swd_chenjingchou:['male','wu',3,['youyin','yihua']], @@ -21,6 +21,8 @@ character.swd={ swd_jiliang:['male','wu',3,['yunchou','gongxin','qimou']], swd_shuijing:['female','qun',4,['mojian','duanyue']], + swd_quxian:['female','qun',3,['mojian','huanxia']], + swd_xiyan:['male','qun',3,['tianshu','daofa']], swd_cheyun:['female','wu',3,['shengong','xianjiang3','qiaoxie']], swd_huanyuanzhi:['male','qun',3,['lanzhi','mufeng','tianshu']], swd_murongshi:['female','shu',4,['duanyi','guxing']], @@ -63,7 +65,7 @@ character.swd={ // swd_libai:['female','qun',3,['miaobi','zhexian']], // swd_kendi:['male','qun',3,['guanxing','jianyan']], // swd_lijing:['male','qun',4,['tianyi','zhuhai']], - // swd_lilian:['female','qun',3,['swd_wuxie','qingcheng']], + swd_lilian:['female','qun',3,['swd_wuxie','qingcheng']], // swd_linming:['male','qun',3,['shelie','bifa']], // swd_philis:['male','qun',4,['yicong','wangxi']], // swd_pepin:['male','qun',4,['rejianxiong','quhu']], @@ -141,6 +143,51 @@ character.swd={ swd_luchengxuan:['swd_xiarou'], }, skill:{ + huanxia:{ + enable:'chooseToUse', + filterCard:function(card){ + return get.color(card)=='red'; + }, + position:'he', + viewAs:{name:'sha'}, + viewAsFilter:function(player){ + if(!player.num('he',{color:'red'})) return false; + }, + prompt:'将一张红色牌当杀使用', + check:function(card){return 5-ai.get.value(card)}, + ai:{ + skillTagFilter:function(player){ + if(!player.num('he',{color:'red'})) return false; + }, + }, + group:['huanxia_expire','huanxia_draw'], + subSkill:{ + expire:{ + trigger:{source:'damageAfter'}, + forced:true, + popup:false, + filter:function(event){ + return event.parent.skill=='huanxia'; + }, + content:function(){ + player.storage.huanxia=true; + } + }, + draw:{ + trigger:{player:'shaAfter'}, + direct:true, + content:function(){ + if(trigger.parent.skill=='huanxia'){ + var card=trigger.cards[0]; + if(get.itemtype(card)=='card'&&get.position(card)=='d'&&!player.storage.huanxia){ + player.gain(card,'gain2'); + } + } + delete player.storage.huanxia; + } + } + } + }, kongmo:{ trigger:{player:'useCardAfter'}, forced:true, @@ -4215,7 +4262,7 @@ character.swd={ } }, qingcheng:{ - trigger:{player:'phaseBegin'}, + trigger:{player:'phaseEnd'}, frequent:true, content:function(){ "step 0" @@ -4227,12 +4274,14 @@ character.swd={ "step 1" if(result.judge>0){ event.cards.push(result.card); - // if(event.cards.length==2){ - // player.gain(event.cards); - // event.finish(); - // } - // else - if(lib.config.auto_skill==false){ + if(event.cards.length==3){ + player.gain(event.cards,'draw2'); + if(event.cards.length){ + player.$draw(event.cards); + } + event.finish(); + } + else if(lib.config.autoskilllist.contains('qingcheng')){ player.chooseBool('是否再次发动?'); } else{ @@ -4241,6 +4290,9 @@ character.swd={ } else{ player.gain(event.cards); + if(event.cards.length){ + player.$draw(event.cards); + } event.finish(); } "step 2" @@ -4249,6 +4301,9 @@ character.swd={ } else{ player.gain(event.cards); + if(event.cards.length){ + player.$draw(event.cards); + } } }, ai:{ @@ -4286,7 +4341,6 @@ character.swd={ } }, lingwu:{ - unique:true, trigger:{player:'phaseAfter'}, frequent:true, filter:function(event,player){ @@ -7427,7 +7481,11 @@ character.swd={ swd_xingtian:'刑天', swd_lanmoshen:'蓝魔神', swd_wushi:'巫师', + swd_quxian:'屈娴', + swd_xiyan:'犀衍', + huanxia:'幻霞', + huanxia_info:'你可以将一张红色牌当作杀使用,若此杀未造成伤害,你可以在其进入弃牌堆后收回此牌', jingjie:'镜界', jingjie_info:'回合开始阶段,你可以流失一点体力,并', jingjie_old_info:'限定技,出牌阶段,你可以令所有角色弃置所有牌,然后摸两张牌(不触发任何技能)', @@ -7794,7 +7852,7 @@ character.swd={ huanhun_info:'当一名角色进入濒死状态时,你可以弃置一张红色牌并令其进行一次判定,若结果为红色,其回复一点体力', daixing_info:'回合结束阶段,你可以任意张牌并获得等量的护甲,这些护甲将在你的下个回合开始阶段消失', swd_wuxie_info:'锁定技,你不能成为其他角色的延时锦囊的目标', - qingcheng_info:'回合开始阶段,你可以进行判定,若为红色则可以继续判定,判定结束后将判定成功的牌收入手牌', + qingcheng_info:'回合结束阶段,你可以进行判定,若为红色则可以继续判定,最多判定3次,判定结束后将判定成功的牌收入手牌', xianjiang_info:'出牌阶段,你可以将一张装备牌永久转化为任意一张其它装备牌,一张牌在一个阶段只能转化一次', xianjiang3_info:'出牌阶段,若你装备区内没有牌,你可以弃置一张锦囊牌,并从牌堆中随机获得一张装备牌,若牌堆中没有装备牌,你摸一张牌,每阶段限一次', shengong_info:'每当你需要打出一张杀或闪时,你可以弃置一名角色装备区内的一张武器牌或防具牌,视为打出一张杀或闪,然后该角色摸一张牌,你弃一张牌', diff --git a/game/game.js b/game/game.js index 3e2028ba6..31b659826 100755 --- a/game/game.js +++ b/game/game.js @@ -2601,7 +2601,7 @@ '触屏模式
可消除iOS等设备上300ms的点击延迟,但开启后无法使用鼠标
  • 滚轮控制手牌
    开启后滚轮可控制手牌的左右滚动,建议Mac等具备横向滚动功能的设备关闭此选项'+ '
  • 游戏玩法
    为游戏增加不同玩法,开启后可在帮助中查看介绍', '游戏操作':'
    • 长按/鼠标悬停/右键单击(需在设置中开启)显示信息
    • 触屏模式中,双指点击切换暂停;下划显示菜单,上划切换托管
    • 键盘快捷键
      '+ - '
      a切换托管
      c打开设置
      w切换不询问无懈
      暂停', + '
      a切换托管
      c打开设置
      w切换不询问无懈
      i显示身份
      暂停', '游戏命令':'
      变量名
      • 场上角色
        game.players
      • 阵亡角色
        game.dead'+ '
      • 玩家
        game.me
      • 玩家的上/下家
        game.me.previous/next'+ '
      • 玩家的上/下家(含阵亡)
        game.me.previousSeat/
        nextSeat'+ @@ -11478,6 +11478,12 @@ return next; }, createCard:function(name,suit,number,nature){ + if(typeof name=='object'){ + nature=name.nature; + number=name.number; + suit=name.suit; + name=name.name; + } if(typeof name!='string'){ name='sha'; } @@ -13309,6 +13315,12 @@ } } }, + hasPlayer:function(func){ + for(var i=0;i#me, #arena:not(.chess)>#mebg{ bottom:30px; } #arena:not(.chess) .player[data-position='0']{ top: calc(100% - 150px); - } + }*/ + + #arena{height: calc(95% + 20px);top: calc(5% + 10px);} }