diff --git a/audio/skill/shuangxiong2_re_yanwen.mp3 b/audio/skill/shuangxiong2_re_yanwen.mp3 new file mode 100644 index 000000000..91548b71c Binary files /dev/null and b/audio/skill/shuangxiong2_re_yanwen.mp3 differ diff --git a/audio/skill/wushuang1.mp3 b/audio/skill/wushuang1.mp3 new file mode 100644 index 000000000..5014dca74 Binary files /dev/null and b/audio/skill/wushuang1.mp3 differ diff --git a/audio/skill/wushuang2.mp3 b/audio/skill/wushuang2.mp3 new file mode 100644 index 000000000..1f19db4b7 Binary files /dev/null and b/audio/skill/wushuang2.mp3 differ diff --git a/card/extra.js b/card/extra.js index f7efe4ed7..5c4d0cb0f 100644 --- a/card/extra.js +++ b/card/extra.js @@ -805,8 +805,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, ai:{ effect:{ - target:function(card,player,target,current){ - if(card.name=='sha'&&target.countCards('h')==0) return [1,-2]; + player:function(card,player,target,current){ + if(card.name=='sha'&&target.countCards('h')==0&&!target.hasSkillTag('filterDamage',null,{ + player:player, + card:card, + })) return [1,0,1,-3]; } } } diff --git a/card/standard.js b/card/standard.js index d8b71f533..e46ad6310 100644 --- a/card/standard.js +++ b/card/standard.js @@ -392,6 +392,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ type:'equip', subtype:'equip1', ai:{ + order:function(){ + return get.order({name:'sha'})-0.1; + }, equipValue:function(card,player){ if(!game.hasPlayer(function(current){ return player.canUse('sha',current)&&get.distance(player,current)<=1&&get.effect(current,{name:'sha'},player,player)>0; @@ -1799,7 +1802,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(target.identity==targets[i].identity) return false; } return true; - }).set('cardx',trigger.card).set('targets',trigger.targets).set('ai',function(target){ + }).set('promptbar','none').set('cardx',trigger.card).set('targets',trigger.targets).set('ai',function(target){ var player=_status.event.player; return get.effect(target,_status.event.cardx,player,player) }); diff --git a/character/mobile.js b/character/mobile.js index 7c6845b5e..6d6f8ea48 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -924,7 +924,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, rebeige:{ - audio:2, + audio:'beige', + audioname:['re_caiwenji'], trigger:{global:'damageEnd'}, filter:function(event,player){ return (event.card&&event.card.name=='sha'&&event.source&& @@ -1100,6 +1101,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, rejiuchi:{ group:['jiuchi'], + audioname:['re_dongzhuo'], trigger:{source:'damage'}, forced:true, popup:false, diff --git a/character/refresh.js b/character/refresh.js index 8841df782..e6c3498cd 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -13,7 +13,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, connect:true, character:{ - re_caocao:['male','wei',4,['hujia','new_rejianxiong'],['zhu']], + re_caocao:['male','wei',4,['new_rejianxiong','hujia'],['zhu']], re_simayi:['male','wei',3,['refankui','reguicai']], re_guojia:['male','wei',3,['tiandu','new_reyiji']], re_lidian:['male','wei',3,['xunxun','wangxi']], @@ -246,10 +246,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; list.push(i); } - game.countPlayer(function(current){ + game.countPlayer2(function(current){ list.remove(current.name); list.remove(current.name1); list.remove(current.name2); + if(current.storage.rehuashen&¤t.storage.rehuashen.character) list.removeArray(current.rehuashen.character) }); _status.characterlist=list; } @@ -257,7 +258,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var bool=false; for(var i=0;i<_status.characterlist.length;i++){ var name=_status.characterlist[i]; - if(name.indexOf('zuoci')!=-1||name.indexOf('key')==0) continue; + if(name.indexOf('zuoci')!=-1||name.indexOf('key')==0||player.storage.rehuashen.character.contains(name)) continue; var skills=lib.character[name][3]; for(var j=0;jplayer.hp) return true; if(player.countCards('h')>3) return true; @@ -2750,7 +2752,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.count--; player.gainPlayerCard(get.prompt('refankui',trigger.source),trigger.source,get.buttonValue,'he').set('logSkill',['refankui',trigger.source]); "step 2" - if(result.bool&&event.count>0&&event.source.countGainableCards(player,'he')>0) event.goto(1); + if(result.bool&&event.count>0&&trigger.source.countGainableCards(player,'he')>0) event.goto(1); }, ai:{ maixie_defend:true, @@ -3089,6 +3091,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill('relianying',result.targets); game.asyncDraw(result.targets); } + else event.finish(); + "step 2" + game.delay(); }, ai:{ threaten:0.8, diff --git a/character/shenhua.js b/character/shenhua.js index d5849ef4e..8daddaf4c 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -3323,7 +3323,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, beige:{ - audio:4, + audio:2, + audioname:['re_caiwenji'], trigger:{global:'damageEnd'}, filter:function(event,player){ return (event.card&&event.card.name=='sha'&&event.source&& @@ -4006,6 +4007,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ songwei:{ unique:true, group:'songwei2', + audioname:['re_caopi'], audio:"songwei2", zhuSkill:true, }, @@ -4043,12 +4045,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, gzduanliang:{ + audio:'duanliang1', + audioname:['re_xuhuang'], group:['duanliang1','duanliang2'], ai:{ threaten:1.2 } }, duanliang:{ + audio:'duanliang1', + audioname:['re_xuhuang'], group:['duanliang1','duanliang3'], ai:{ threaten:1.2 @@ -4245,7 +4251,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yinghun:{ audio:2, - audioname:['sunce','re_sunben'], + audioname:['re_sunjian','sunce','re_sunben'], trigger:{player:'phaseZhunbeiBegin'}, filter:function(event,player){ return player.hp0; diff --git a/character/sp.js b/character/sp.js index 230e01024..2662da9e5 100755 --- a/character/sp.js +++ b/character/sp.js @@ -2350,7 +2350,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ frequent:true, filter:function(event,player){ if(event.source==player&&event.player!=player&&player.hp>player.countCards('h')){ - return event.relatedLose&&event.relatedLose.hs&&event.relatedLose.length>0; + return event.relatedLose&&event.relatedLose.hs&&event.relatedLose.hs.length>0; } return false; }, diff --git a/character/standard.js b/character/standard.js index 33b504970..82cb7cbd4 100755 --- a/character/standard.js +++ b/character/standard.js @@ -2265,13 +2265,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, wushuang:{ - audio:'wushuang1', + audio:2, + audioname:['re_lvbu','shen_lvbu'], forced:true, locked:true, group:['wushuang1','wushuang2'] }, wushuang1:{ - audio:2, + audio:'wushuang', audioname:['re_lvbu','shen_lvbu'], trigger:{player:'useCardToPlayered'}, forced:true, @@ -2293,7 +2294,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, wushuang2:{ - audio:2, + audio:'wushuang', audioname:['re_lvbu','shen_lvbu'], trigger:{player:'useCardToPlayered',target:'useCardToTargeted'}, forced:true, diff --git a/character/swd.js b/character/swd.js index 784e38012..15c32f3e5 100644 --- a/character/swd.js +++ b/character/swd.js @@ -10230,7 +10230,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ duanyi_info:'出牌阶段限一次,你可以弃置两张杀,对一名角色造成一点伤害,然后其随机弃置X张牌,X为其已损失的体力值', duanyi_info_alter:'出牌阶段限一次,你可以弃置两张杀,并对一名角色造成一点伤害', guxing_info:'出牌阶段,你可以将最后至多X张手牌当杀使用,此杀无视距离且可以指定至多3个目标,每造成一次伤害,你摸一张牌,X为你已损失的体力值且至少为1。', - tianlun_info:'任意一名角色的判定生效前,你可以弃置一张场上角色的判定牌代替之', + tianlun_info:'任意一名角色的判定牌生效前,你可以弃置一张场上角色的判定牌代替之', hlongyin_info:'出牌阶段,你可以弃置任意张颜色相同且点数不同的牌,并获得逆时针座位距离与卡牌点数相同的角色区域内的一张牌。每阶段限一次', lanzhi_info:'每当你使用一张梅花牌,你可以令所有体力值不大于你的角色回复一点体力', lanzhi_old_info:'每当你即将造成伤害,可以防止此伤害,然后摸两张牌。每回合限发动一次。', diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index a9c6a143c..d8ef492aa 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -331,7 +331,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:"shunshou", }, filterTarget:function (card,player,target){ - return lib.filter.filterTarget.apply(this,arguments); + return _status.event.targets&&_status.event.targets.contains(target)&&lib.filter.filterTarget.apply(this,arguments); }, prompt:"将一张手牌当顺手牵羊使用", check:function (card){return 7-get.value(card)}, @@ -4650,10 +4650,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return 1; }, position:"he", + discard:false, + loseTo:'discardPile', + prepare:function(cards,player){ + player.$throw(cards,1000); + game.log(player,'将',cards,'置入了弃牌堆') + }, content:function (){ 'step 0' player.draw(); - player.recover(1-player.hp); + 'step 1' + var num=1-player.hp; + if(num) player.recover(num); }, ai:{ order:0.5, @@ -4889,9 +4897,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseCardButton(get.prompt('xinfu_zhaoxin',trigger.player),player.storage.xinfu_zhaoxin,function(button){ return true; }).set('ai',function(button){ - var player=_status.event.player; - if(get.attitude(player,_status.currentPhase)>0) return get.value(button.link); - return 6-get.value(button.link); + return 1+Math.random(); }); 'step 1' if(result.bool){ diff --git a/character/yijiang.js b/character/yijiang.js index 8783d20de..13982eaf3 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -1866,7 +1866,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, silent:true, content:function(){ - game.log(player,'拼点牌点数视为','#y13'); + game.log(player,'拼点牌点数视为','#yK'); if(player==trigger.player){ trigger.num1=13; } @@ -2711,33 +2711,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){ logTarget:'player', skillAnimation:true, animationColor:'wood', + onWash:function(){ + _status.event.getParent('fuzhu').washed=false; + return 'remove'; + }, content:function(){ 'step 0' - var list=[]; - for(var i=0;i0&&!event.washed&&ui.cardPile.childElementCount<=player.hp*10&&trigger.player.isAlive()) event.goto(1); + 'step 3' + lib.onwash.remove(lib.skill.fuzhu.onWash); var cards=get.cards(ui.cardPile.childElementCount+1); for(var i=0;i',importExtension); - var extensionURL=lib.updateURL.replace(/noname/,'noname-extension')+'/master/'; + var extensionURL=lib.updateURL.replace(/noname/g,'noname-extension')+'/master/'; var reloadnode=ui.create.div('.config.toggle.pointerdiv','重新启动',page,game.reload); reloadnode.style.display='none'; diff --git a/game/update.js b/game/update.js index 9d3f0f882..37bb9b53a 100644 --- a/game/update.js +++ b/game/update.js @@ -1,8 +1,8 @@ window.noname_update={ - version:'1.9.97.8.1', - update:'1.9.97.7.1', + version:'1.9.97.9', + update:'1.9.97.8.2', changeLog:[ - '新的Coding镜像下载点', + '家族之争', 'BUG修复', ], files:[ @@ -11,35 +11,35 @@ window.noname_update={ //'card/sp.js', 'card/standard.js', //'card/swd.js', - 'card/guozhan.js', + //'card/guozhan.js', //'card/gwent.js', - 'character/diy.js', - 'character/extra.js', + //'character/diy.js', + //'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', - //'character/old.js', + 'character/old.js', 'character/refresh.js', 'character/shenhua.js', 'character/sp.js', //'character/tw.js', 'character/standard.js', - //'character/swd.js', + 'character/swd.js', //'character/xianjian.js', 'character/xinghuoliaoyuan.js', 'character/yijiang.js', - 'character/yxs.js', + //'character/yxs.js', //'extension/boss/extension.js', //'layout/default/layout.css', //'mode/identity.js', //'mode/doudizhu.js', - 'mode/guozhan.js', + //'mode/guozhan.js', //'mode/single.js', //'mode/stone.js', 'mode/brawl.js', - 'mode/versus.js', + //'mode/versus.js', //'mode/boss.js', 'game/game.js', //'game/NoSleep.js', diff --git a/mode/brawl.js b/mode/brawl.js index 0748b1696..fba88a171 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -1779,6 +1779,324 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } }, + jiazuzhizheng:{ + name:'家族之争', + mode:'versus', + submode:'2v2', + intro:'势力相同的武将组合一队,获得专属势力技能', + showcase:function(init){ + var node=this; + var getList=function(){ + var list=[ + ['liubei','guanyu','zhangfei'], + ['caocao','guojia','xunyu'], + ['sunquan','zhangzhang','zhouyu'], + ['re_yuanshao','guotufengji','yj_jushou'] + ]; + if(_status.forceKey) list.push(['key_yuri','key_kyousuke','key_umi']) + list.randomSort(); + var list2=[]; + for(var i=0;i4){ + setTimeout(function(){ + while(node.nodes.length>3){ + node.nodes.shift().delete(); + } + },500); + } + }; + node.list=[]; + if(init){ + node.nodes=[]; + for(var i=0;i<3;i++){ + func(); + } + } + node.showcaseinterval=setInterval(func,1000); + }, + init:function(){}, + content:{ + submode:'two', + chooseCharacterFixed:true, + chooseCharacterBefore:function(){ + var map={ + wei:[], + shu:[], + wu:[], + qun:[], + key:[], + }; + var map3=[]; + var banned=['zuoci','re_zuoci','tw_xiahouba']; + for(var i in lib.character){ + if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)||banned.contains(i)) continue; + var group=lib.character[i][1]; + if(group&&map[group]) map[group].push(i); + } + for(var i in map){ + if(map[i].length<8||(i=='key'&&!_status.forceKey)){ + delete map[i]; + } + else{ + map3.push(i); + } + } + _status.brawl.map=map; + _status.brawl.map3=map3; + var skill={ + _jiazu_wei:{ + trigger:{player:'phaseBegin'}, + direct:true, + popup:'魏业', + prompt2:'回合开始时,你可以弃置一张牌并指定一名敌方角色,该角色须弃置一张牌,否则你摸一张牌。', + filter:function(event,player){ + return player.group=='wei'&&player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt2(event.name), + filterCard:lib.filter.cardDiscardable, + filterTarget:function(card,player,target){ + return player.side!=target.side; + }, + position:'he', + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + return 1/(1+target.countCards('he')); + }, + }); + 'step 1' + if(result.bool){ + player.logSkill(event.name,result.targets); + player.discard(result.cards); + result.targets[0].chooseToDiscard('弃置一张牌,或令'+get.translation(player)+'摸一张牌','he').ai=lib.skill.zhiheng.check; + } + else event.finish(); + 'step 2' + if(!result.bool) player.draw(); + }, + }, + _jiazu_shu:{ + popup:'蜀义', + prompt2:'你使用【杀】上限+1;出牌阶段结束时,若你于此阶段使用【杀】次数不少于2,摸一张牌。', + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha'&&player.group=='shu') return num+1; + }, + }, + trigger:{player:'phaseUseEnd'}, + forced:true, + filter:function(event,player){ + return player.group=='shu'&&player.getHistory('useCard',function(evt){ + return evt.card&&evt.card.name=='sha'&&evt.getParent('phaseUse')==event; + }).length>1; + }, + content:function(){player.draw()}, + }, + _jiazu_wu:{ + trigger:{player:'phaseEnd'}, + forced:true, + popup:'吴耀', + prompt2:'回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。', + filter:function(event,player){ + return player.group=='wu'&&player.countCards('h')!=player.hp; + }, + content:function(){player.draw()}, + }, + _jiazu_qun:{ + popup:'群心', + prompt2:'锁定技,弃牌阶段开始时,若你的手牌数比体力值多2或更多,你本回合手牌上限+1;若你已损失体力值大于1,你手牌上限+1', + trigger:{player:'phaseDiscardBegin'}, + forced:true, + filter:function(event,player){ + return player.group=='qun'&&(player.isDamaged()||player.countCards('h')-player.hp>1); + }, + content:function(){ + var num=0; + if(player.isDamaged()) num++; + if(player.countCards('h')-player.hp>1) num++; + player.addMark('qunxin_temp',num,false); + player.addTempSkill('qunxin_temp','phaseDiscardEnd'); + }, + }, + _jiazu_key:{ + enable:'phaseUse', + usable:1, + popup:'键魂', + filter:function(event,player){ + return player.group=='key'; + }, + prompt2:'出牌阶段限一次,你可以摸一张牌并获得1点护甲。若如此做,你于当前回合结束时失去1点体力。', + content:function(){ + "step 0" + player.draw(); + "step 1" + player.changeHujia(1); + "step 2" + var evt=event.getParent('phase'); + if(evt&&evt.after){ + var next=player.loseHp(); + event.next.remove(next); + evt.after.push(next); + } + }, + ai:{ + order:10, + result:{ + player:function(player){ + return player.hp-1; + }, + }, + }, + }, + qunxin_temp:{ + noGlobal:true, + onremove:true, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('qunxin_temp'); + }, + }, + }, + _jiazu_awaken_wei:{ + popup:'许昌', + intro:{ + content:'锁定技,当你受到伤害后,你摸一张牌。', + }, + trigger:{player:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player._jiazuAwaken&&player.group=='wei'; + }, + content:function(){player.draw()}, + }, + _jiazu_awaken_shu:{ + popup:'成都', + intro:{ + content:'锁定技,当你使用【杀】造成伤害后,你摸一张牌。', + }, + trigger:{source:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player._jiazuAwaken&&player.group=='shu'&&event.card&&event.card.name=='sha'; + }, + content:function(){player.draw()}, + }, + _jiazu_awaken_wu:{ + popup:'武昌', + intro:{ + content:'锁定技,当你使用装备牌时,你摸一张牌。', + }, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return player._jiazuAwaken&&player.group=='wu'&&get.type(event.card)=='equip'; + }, + content:function(){player.draw()}, + }, + _jiazu_awaken_qun:{ + popup:'邺城', + intro:{ + content:'锁定技,当你使用锦囊牌指定其他角色为目标后,你摸一张牌。', + }, + trigger:{player:'useCardToPlayered'}, + forced:true, + filter:function(event,player){ + if(!player._jiazuAwaken||player.group!='qun'||!event.isFirstTarget||get.type(event.card,'trick')!='trick') return false; + for(var i=0;i