diff --git a/card/extra.js b/card/extra.js index 50e072f14..0987284ea 100644 --- a/card/extra.js +++ b/card/extra.js @@ -18,6 +18,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ forceDie:true, onLose:function(){ delete player.getStat('skill').muniu_skill; + player.unmarkSkill('muniu_skill'); if(!card||!card.cards||!card.cards.length) return; if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){ player.lose(card.cards,ui.discardPile); diff --git a/card/standard.js b/card/standard.js index 8cb5c8f6d..b4b70a13b 100644 --- a/card/standard.js +++ b/card/standard.js @@ -718,7 +718,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ card=event.directButton.link; } else{ - card=result.links[0]; + for(var i of dialog.buttons){ + if(i.link==result.links[0]){ + card=i.link; + break; + } + } + if(!card) card=event.dialog.buttons[0].link; } var button; diff --git a/character/diy.js b/character/diy.js index 97692b619..2d2e4a932 100755 --- a/character/diy.js +++ b/character/diy.js @@ -12339,11 +12339,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ nsyaowang:{ trigger:{player:'phaseBegin'}, direct:true, - group:'tianshu_remove', createDialog:function(player,target,onlylist){ var names=[]; var list=[]; - if(target.name&&!target.isUnseen(0)) names.add(target.name); if(target.name1&&!target.isUnseen(0)) names.add(target.name1); if(target.name2&&!target.isUnseen(1)) names.add(target.name2); var pss=player.getSkills(); @@ -12355,7 +12353,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(lib.translate[skills[j]+'_info']&&lib.skill[skills[j]]&& !lib.skill[skills[j]].unique&& !pss.contains(skills[j])){ - list.push(skills[j]); + list.add(skills[j]); } } } @@ -12390,7 +12388,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.chooseTarget(get.prompt2('nsyaowang'),function(card,player,target){ var names=[]; - if(target.name&&!target.isUnseen(0)) names.add(target.name); if(target.name1&&!target.isUnseen(0)) names.add(target.name1); if(target.name2&&!target.isUnseen(1)) names.add(target.name2); var pss=player.getSkills(); @@ -12424,7 +12421,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.max(list,get.skillRank,'item'); }; if(event.isMine()){ - event.dialog=lib.skill.tianshu.createDialog(player,target); + event.dialog=lib.skill.nsyaowang.createDialog(player,target); event.switchToAuto=function(){ event._result=event.skillai(event.list); game.resume(); diff --git a/character/extra.js b/character/extra.js index e9993234e..3a565f791 100755 --- a/character/extra.js +++ b/character/extra.js @@ -4372,7 +4372,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dangmo:'荡魔', dangmo_info:'当你于出牌阶段内使用第一张【杀】选择目标后,你可以为此牌增加至多Y-1个目标(Y为你的体力值)。', reshuishi:'慧识', - reshuishi_info:'出牌阶段限一次,你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同,则你加1点体力上限并重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多,则你减1点体力上限。', + reshuishi_info:'出牌阶段限一次,若你的体力上限小于10,你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同且你的体力上限小于10,则你加1点体力上限并重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多,则你减1点体力上限。', resghuishi:'辉逝', resghuishi_info:'限定技,出牌阶段,你可选择一名角色。若你的体力上限不小于存活人数且其有未发动的觉醒技,则你令其中一个技能无视发动条件;否则其摸四张牌。然后你减2点体力上限。', diff --git a/character/mobile.js b/character/mobile.js index eb39eef1d..2ecd67757 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -596,10 +596,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filterx:function(event,player){ var cards=player.getCards('h'); if(cards.length==1) return true; - var color=get.color(cards[0],player),type=get.type(cards[0],player); + var color=get.color(cards[0],player),type=get.type2(cards[0],player); for(var i=1;i0; }, diff --git a/character/shenhua.js b/character/shenhua.js index 0dbb2b3cd..891ed7d6d 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -977,6 +977,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target.hasSkill('drlt_xiongluan2')) return true; }, }, + charlotte:true, }, 'drlt_xiongluan2':{ mod:{ @@ -991,6 +992,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + charlotte:true, }, diff --git a/character/sp.js b/character/sp.js index 99d493448..e9469d740 100755 --- a/character/sp.js +++ b/character/sp.js @@ -424,7 +424,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ })) return get.attitude(player,target)/(Math.sqrt(1+target.countCards('h'))); return 0; } - return -get.attitude(_status.event.player,target); + if(target.countCards('h')>ui.selected.targets[0].countCards('h')) return -get.attitude(_status.event.player,target); + return 0; }); 'step 1' if(result.bool){ diff --git a/character/sp2.js b/character/sp2.js index 7072486bc..440d76b4f 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -134,7 +134,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var hs=player.getCards('he'); if(!hs.length||!target.isIn()) event.finish(); else if(hs.length<=num) event._result={bool:true,cards:hs}; - else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌'); + else player.chooseCard('he',true,'选择交给'+get.translation(target)+get.cnNumber(num)+'张牌',num); 'step 2' if(result.bool&&result.cards&&result.cards.length) target.gain(result.cards,player,'giveAuto'); }, @@ -162,18 +162,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCard'}, forced:true, filter:function(event,player){ - return (event.card.name=='tao'||event.card.name=='wuxie')&&((player!=status.currentPhase&&!player.hasMark('tongyuan_'+event.card.name))||(player.hasMark('tongyuan_tao')&&player.hasMark('tongyuan_wuxie'))); + return (event.card.name=='tao'||event.card.name=='wuxie')&&((player!=_status.currentPhase&&!player.hasMark('tongyuan_'+event.card.name))||(player.hasMark('tongyuan_tao')&&player.hasMark('tongyuan_wuxie'))); }, content:function(){ if(!player.hasMark('tongyuan_'+trigger.card.name)){ player.addMark('tongyuan_'+trigger.card.name,1,false); game.log(player,'修改了技能','#g【摧坚】'); } - else if(trigger.card.name=='wuxie') trigger.directHit.addArray(game.players); + else{ + if(trigger.card.name=='wuxie') trigger.directHit.addArray(game.players); else{ if(typeof trigger.baseDamage!='number') trigger.baseDamage=1; trigger.baseDamage++; } + } }, }, xianwei:{ @@ -241,6 +243,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.countDisabled()>=5; }, content:function(){ + player.gainMaxHp(2); player.addSkill('xianwei_effect'); }, }, @@ -382,14 +385,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return evt&&evt.hs&&evt.hs.length&¤t.countCards('h')==0; }, usable:1, - logTarget:'player', + logTarget:function(){ + return _status.currentPhase; + }, prompt2:'与该角色各摸两张牌', check:function(event,player){ - return get.attitude(player,event.player)>0; + return get.attitude(player,_status.currentPhase)>0; }, content:function(){ 'step 0' - game.asyncDraw([trigger.player,player],2); + game.asyncDraw([_status.currentPhase,player],2); 'step 1' var e1=player.getHistory('gain',function(evt){ return evt.getParent(2)==event; @@ -398,11 +403,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addTempSkill('yaner_zhiren',{player:'phaseBegin'}); game.log(player,'修改了技能','#g【织纴】'); } - if(trigger.player.isIn()&&trigger.player.isDamaged()){ - var e2=trigger.player.getHistory('gain',function(evt){ + var target=_status.currentPhase; + if(target.isIn()&&target.isDamaged()){ + var e2=target.getHistory('gain',function(evt){ return evt.getParent(2)==event; })[0]; - if(e2&&e2.cards&&e2.cards.length==2&&get.type(e2.cards[0])==get.type(e2.cards[1])) trigger.player.recover(); + if(e2&&e2.cards&&e2.cards.length==2&&get.type(e2.cards[0])==get.type(e2.cards[1])) target.recover(); } 'step 2' game.delayx(); @@ -9560,6 +9566,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huaxin:'华歆(157年-232年1月30日),字子鱼,汉族。平原郡高唐县人(今山东省高唐县)。汉末至三国曹魏初年名士、重臣。华歆早年拜太尉陈球为师,与卢植、郑玄、管宁等为同门,又与管宁、邴原共称一龙,华歆为龙头。汉灵帝时华歆被举为孝廉,任郎中,因病去官。又被大将军何进征召为尚书郎。后任豫章太守,甚得民心。孙策率军南下,华歆举郡投降,被奉为上宾。官渡之战时,被征为议郎、参司空军事。入为尚书、侍中,又代荀彧为尚书令。丞相曹操讨孙权时,授华歆为军师。后为魏王国的御史大夫。曹丕即王位,拜华歆为相国,封安乐乡侯。曹魏建立后,其相国职名改称司徒。魏明帝即位,升任太尉,晋封博平侯。太和五年十二月(232年1月),华歆去世,年七十五,谥号“敬”。有文集三十卷,今佚失,其余见《全三国文》。', luyusheng:'陆郁生(?年-?),三国时期吴国官员陆绩之女。陆郁生的父亲陆绩是吴郡公认的才子,又是当时吴郡陆氏的领袖。陆绩赴任担任郁林太守,遂取此名。陆郁生年少的时候就定下坚贞的志向。建安二十四年(219年),陆绩早亡,她与两个兄弟陆宏、陆睿当时都只有几岁,一起返回吴县,被他们的从兄陆瑁接回抚养。13周岁的陆郁生嫁给同郡出身的张白为妻。出嫁3个月后,张白因为其兄张温一族的案件遭到连坐,被处以流刑,后死于流放地,陆郁生成为了寡妇,其后公开宣言不再改嫁,困难于生计但拒绝了所有提亲,在艰苦中从未停止服侍、照顾张白的姐妹。事情传到朝廷,皇帝褒奖陆郁生,号其为“义姑”。她的表侄姚信在文集中称赞她的义举。', dongxie:'董卓之女,牛辅之妻。在《三国群英传》中名为董宜,在电视剧《三国群英会之吕布与貂蝉》中名为董媛。', + caoanmin:'曹安民(?-197年),沛国谯县(今安徽亳州)人,字安民。东汉时期人物,曹德之子,曹操之侄,曹昂的堂兄弟,曹丕的堂兄,死于宛城之战。按曹丕《典论》记载的“亡兄孝廉子脩、从兄安民遇害。”等情况来看,安民应该是曹操侄子错不了,曹丕是他们属于兄弟关系肯定不会弄错。另外从典论的记载来看安民是和子脩并提的,子脩是曹昂的字,安民则肯定也是字不是名,至于三国志中记载则应取自曹丕之《典论》但陈寿又不知曹安民其名,故写为“长子昂、弟子安民”。', }, characterTitle:{ wulan:'#b对决限定武将', diff --git a/character/tw.js b/character/tw.js index 7c0d13521..770b40dbf 100644 --- a/character/tw.js +++ b/character/tw.js @@ -5,12 +5,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ tw:{ - tw_mobile:['tw_beimihu','nashime','tw_gexuan','tw_dongzhao'], + tw_mobile:['tw_beimihu','nashime','tw_gexuan','tw_dongzhao','jiachong','duosidawang','wuban'], tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], tw_english:['kaisa'], }, }, character:{ + wuban:['male','shu',4,['jintao']], + duosidawang:['male','qun','4/5',['equan','manji']], + jiachong:['male','qun',3,['beini','dingfa']], tw_dongzhao:['male','wei',3,['twmiaolve','twyingjia']], tw_gexuan:['male','qun',3,['twdanfa','twlingbao','twsidao']], tw_beimihu:['female','qun',3,['zongkui','guju','baijia','bingzhao'],['zhu']], @@ -25,6 +28,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterIntro:{ nashime:'难升米(なしめ,或なんしょうまい)是倭国大夫。景初二年六月,受女王卑弥呼之命,与都市牛利出使魏国,被魏国拜为率善中郎将。', + jiachong:'贾充(217年—282年),字公闾,平阳襄陵(今山西襄汾)人,三国曹魏至西晋时期大臣,曹魏豫州刺史贾逵之子。西晋王朝的开国元勋。出身平阳贾氏。曾参与镇压淮南二叛和弑杀魏帝曹髦,因此深得司马氏信任,其女儿贾褒(一名荃)及贾南风分别嫁予司马炎弟司马攸及次子司马衷,与司马氏结为姻亲,地位显赫。晋朝建立后,转任车骑将军、散骑常侍、尚书仆射,后升任司空、太尉等要职。更封鲁郡公。咸宁末,为使持节、假黄钺、大都督征讨吴国。吴国平定后,增邑八千户。太康三年(282年),贾充去世。西晋朝廷追赠他为太宰,礼官议谥曰荒,司马炎不采纳,改谥为武。有集五卷。', + duosidawang:'朵思大王是《三国演义》中人物,南蛮秃龙洞的元帅,孟获弟弟孟优的朋友,据说是南蛮第一智者。', + wuban:'吴班,字元雄,生卒年不详,兖州陈留郡(治今河南省开封市)人。三国时期蜀汉将领。为领军,随刘备参加伐吴之战,后又随蜀汉丞相诸葛亮参加北伐曹魏的战争,并于公元231年(建兴九年)的北伐中大破司马懿。官至骠骑将军,封绵竹侯。吴班以豪爽侠义著称于当时,又因族妹吴氏是蜀汉穆皇后,在蜀汉将领中有较高的地位。', }, card:{ dz_mantianguohai:{ @@ -123,6 +129,185 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + jintao:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + }, + targetInRange:function(card){ + if(card.name=='sha') return true; + }, + }, + audio:2, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + if(event.card.name!='sha') return false; + var evt=event.getParent('phaseUse'); + if(!evt||evt.player!=player) return false; + var index=player.getHistory('useCard',function(evtx){ + return evtx.card.name=='sha'&&evtx.getParent('phaseUse')==evt; + }).indexOf(event); + return index==0||index==1; + }, + content:function(){ + var evt=trigger.getParent('phaseUse'); + var index=player.getHistory('useCard',function(evtx){ + return evtx.card.name=='sha'&&evtx.getParent('phaseUse')==evt; + }).indexOf(trigger); + if(index==0){ + game.log(trigger.card,'伤害+1'); + if(typeof trigger.baseDamage!='number') trigger.baseDamage=1; + trigger.baseDamage++; + } + else{ + game.log(trigger.card,'不可被响应'); + trigger.directHit.addArray(game.players); + } + }, + }, + equan:{ + audio:2, + trigger:{global:'damageEnd'}, + forced:true, + filter:function(event,player){ + return player==_status.currentPhase&&event.player.isIn(); + }, + logTarget:'player', + content:function(){ + trigger.player.addMark('equan',trigger.num,false); + }, + group:['equan_block','equan_lose'], + marktext:'毒', + intro:{ + name:'恶泉(毒)', + name2:'毒', + }, + subSkill:{ + lose:{ + audio:'equan', + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(){ + return game.hasPlayer(function(current){ + return current.hasMark('equan'); + }); + }, + logTarget:function(){ + return game.filterPlayer(function(current){ + return current.hasMark('equan'); + }); + }, + content:function(){ + game.countPlayer(function(current){ + var num=current.countMark('equan'); + if(num){ + current.removeMark('equan',num); + current.loseHp(num); + } + }); + }, + }, + block:{ + trigger:{global:'dyingBegin'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + var evt=event.getParent(2); + return evt.name=='equan_lose'&&evt.player==player; + }, + content:function(){ + trigger.player.addTempSkill('fengyin'); + }, + }, + }, + }, + manji:{ + audio:2, + trigger:{global:'loseHpAfter'}, + forced:true, + filter:function(event,player){ + return player.hp>=event.player.hp||player.isDamaged(); + }, + logTarget:'player', + content:function(){ + if(player.hp<=trigger.player.hp) player.recover(); + if(player.hp>=trigger.player.hp) player.draw(); + }, + }, + beini:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:lib.filter.notMe, + content:function(){ + 'step 0' + var str=get.translation(target); + player.chooseControl().set('choiceList',[ + '摸两张牌,然后令'+str+'视为对自己使用【杀】', + '令'+str+'摸两张牌,然后视为对其使用【杀】', + ]).set('ai',function(){ + var evt=_status.event.getParent(),player=evt.player,target=evt.target; + var card={name:'sha',isCard:true},att=get.attitude(player,target)>0; + if(!target.canUse(card,player,false)||get.effect(player,card,target,player)>=0) return 0; + if(att&&(!player.canUse(card,target,false)||get.effect(target,card,player,player)>=0)) return 1; + if(target.hasSkill('nogain')&&player.canUse(card,target,false)&&get.effect(target,card,player,player)>0) return 1; + if(player.hasShan()) return 0; + if(att&&target.hasShan()) return 1; + return 0; + }); + 'step 1' + var list=[player,target]; + if(result.index==1) list.reverse(); + event.list=list; + list[0].draw(2); + 'step 2' + var list=event.list; + if(list[1].isIn()&&list[0].isIn()&&list[1].canUse('sha',list[0],false)) list[1].useCard({name:'sha',isCard:true},list[0],false); + }, + ai:{ + order:5, + expose:0, + result:{ + player:function(player,target){ + var card={name:'sha',isCard:true},att=get.attitude(player,target)>0; + if(!target.canUse(card,player,false)||get.effect(player,card,target,player)>=0) return 2; + if(att&&(!player.canUse(card,target,false)||get.effect(target,card,player,player)>=0)) return 2; + if(target.hasSkill('nogain')&&player.canUse(card,target,false)) return get.effect(target,card,player,player) + if(player.hasShan()) return 1; + if(att&&target.hasShan()) return 1; + return 0; + }, + }, + }, + }, + dingfa:{ + audio:2, + trigger:{player:'phaseDiscardAfter'}, + direct:true, + filter:function(event,player){ + var num=0; + player.getHistory('lose',function(evt){ + num+=evt.cards2.length; + }); + return num>=player.hp; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('dingfa'),'操作提示:选择自己以回复体力,或选择其他角色以造成伤害',function(card,player,target){ + return target==player?player.isDamaged():true; + }).set('ai',function(target){ + return target!=player?get.damageEffect(target,player,player):get.recoverEffect(player,player,player) + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dingfa',target); + if(target==player) player.recover(); + else target.damage(); + } + }, + }, dz_mantianguohai:{ mod:{ ignoredHandcard:function(card,player){ @@ -1167,6 +1352,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twyingjia_info:'一名角色的回合结束时,若你本回合内使用过两张或更多的同名锦囊牌,则你可弃置一张手牌并令一名角色进行一个额外回合。', dz_mantianguohai:'瞒天过海', dz_mantianguohai_info:'此牌不计入拥有者的手牌上限。出牌阶段,对一至两名区域内有牌的其他角色使用。你获得目标角色一张牌,然后依次交给每名目标角色各一张牌。', + jiachong:'贾充', + beini:'悖逆', + beini_info:'出牌阶段限一次,你可以选择一名体力值不小于你的角色,令你或其摸两张牌,然后未摸牌的角色视为对摸牌的角色使用一张【杀】。', + dingfa:'定法', + dingfa_info:'弃牌阶段结束时,若本回合你失去的牌数不小于你的体力值,你可以选择一项:1、回复1点体力;2、对一名其他角色造成1点伤害。 ', + duosidawang:'朵思大王', + equan:'恶泉', + equan_info:'锁定技。①当有角色于你的回合内受到伤害后,其获得X枚“毒”(X为伤害值)。②准备阶段,你令所有拥有“毒”标记的角色移去所有“毒”标记并失去等量的体力。③当有角色因〖恶泉②〗进入濒死状态时,你令其所有非锁定技失效直到回合结束。', + manji:'蛮汲', + manji_info:'锁定技。其他角色失去体力后,若你的体力值:不大于该角色,你回复1点体力;不小于该角色,你摸一张牌。', + wuban:'吴班', + jintao:'进讨', + jintao_info:'锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】伤害+1,第二张【杀】不可被响应。', tw_mobile:'移动版', tw_yijiang:'一将成名TW', tw_english:'英文版', diff --git a/game/asset.js b/game/asset.js index 6d3d1ea0e..5ec3861b5 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.9.2', + 'v1.9.110.9.2.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -4414,6 +4414,9 @@ window.noname_asset_list=[ 'image/character/re_panshu.jpg', 'image/character/zhanghu.jpg', 'image/character/key_kano.jpg', + 'image/character/duosidawang.jpg', + 'image/character/jiachong.jpg', + 'image/character/wuban.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 491c15896..17ca4f7e6 100644 --- a/game/game.js +++ b/game/game.js @@ -11682,7 +11682,7 @@ if(!window.isNonameServer){ var me=game.connectPlayers[0]; me.setIdentity('zhu'); - me.initOL(lib.config.connect_nickname,lib.config.connect_avatar); + me.initOL(get.connectNickname(),lib.config.connect_avatar); me.playerid='1'; game.onlinezhu='1'; } @@ -17155,7 +17155,7 @@ if(this.hp'+this.hp+'/'+this.maxHp+''); - str+=(' ('+info[0]+' 的房间)'); + str+=(' ('+info[0].slice(0,12)+' 的房间)'); this.config=config; if(this.hp==this.maxHp&&!config.gameStarted){ this.roomfull=true; @@ -17494,6 +17494,7 @@ } }, showGiveup:function(){ + this._giveUp=true; if(this==game.me){ ui.create.giveup(); } @@ -17567,7 +17568,7 @@ return state; }, setNickname:function(str){ - this.node.nameol.innerHTML=str||this.nickname||''; + this.node.nameol.innerHTML=(str||this.nickname||'').slice(0,12); return this; }, setAvatar:function(name,name2,video,fakeme){ @@ -18184,7 +18185,7 @@ skills.remove(i); } if(arg4!==false){ - skills=game.filterSkills(skills,this); + skills=game.filterSkills(skills,this,es); } return skills; }, @@ -18227,7 +18228,7 @@ skills.remove(i); } if(arg4!==false){ - skills=game.filterSkills(skills,this); + skills=game.filterSkills(skills,this,es); } return skills; } @@ -26401,7 +26402,7 @@ mark:true, intro:{ content:function(storage,player,skill){ - var list=player.getSkills(null,null,false).filter(function(i){ + var list=player.getSkills(null,false,false).filter(function(i){ return lib.skill.fengyin.skillBlocker(i,player); }); if(list.length) return '失效技能:'+get.translation(list); @@ -26423,7 +26424,7 @@ mark:true, intro:{ content:function(storage,player,skill){ - var list=player.getSkills(null,null,false).filter(function(i){ + var list=player.getSkills(null,false,false).filter(function(i){ return lib.skill.baiban.skillBlocker(i,player); }); if(list.length) return '失效技能:'+get.translation(list); @@ -26887,6 +26888,7 @@ this.inited=true; }, result:function(result){ + if(lib.node.observing.contains(this)) return; var player=lib.playerOL[this.id]; if(player){ player.unwait(result); @@ -26940,12 +26942,14 @@ } }, throwEmotion:function(target,emotion){ + if(lib.node.observing.contains(this)) return; var player=lib.playerOL[this.id]; if(player){ player.throwEmotion(target,emotion); } }, emotion:function(id,pack,emotion){ + if(lib.node.observing.contains(this)) return; var that=this; if(!this.id||(!lib.playerOL[this.id]&&(!game.connectPlayers||!function(){ for(var i=0;i空房间'); + var player=ui.roombase.add(''); player.roomindex=i; player.initRoom=lib.element.player.initRoom; player.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.connectroom); @@ -28164,7 +28172,7 @@ } if(!window.isNonameServer){ game.me.playerid=get.id(); - game.me.nickname=lib.config.connect_nickname; + game.me.nickname=get.connectNickname(); game.me.setNickname(); } for(var i=0;i空房间'); + var player=ui.roombase.add(''); player.roomindex=i; player.initRoom=lib.element.player.initRoom; player.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.connectroom); @@ -35977,6 +35985,7 @@ if(!input.innerHTML||get.is.banWords(input.innerHTML)){ input.innerHTML='无名玩家'; } + input.innerHTML=input.innerHTML.slice(0,12); game.saveConfig('connect_nickname',input.innerHTML); game.saveConfig('connect_nickname',input.innerHTML,'connect'); } @@ -36138,10 +36147,10 @@ } config.banned=lib.config['connect_'+active.mode+'_banned']; config.bannedcards=lib.config['connect_'+active.mode+'_bannedcards']; - game.send('server','create',game.onlineKey,lib.config.connect_nickname,lib.config.connect_avatar,config,active.mode); + game.send('server','create',game.onlineKey,get.connectNickname(),lib.config.connect_avatar,config,active.mode); } else{ - game.send('server','create',game.onlineKey,lib.config.connect_nickname,lib.config.connect_avatar); + game.send('server','create',game.onlineKey,get.connectNickname(),lib.config.connect_avatar); } } else{ @@ -38686,7 +38695,7 @@ infoExtLine.appendChild(infoExtName); return infoExtLine; }; - var authorExtLine=createExtLine('扩展作者',lib.config.connect_nickname); + var authorExtLine=createExtLine('扩展作者',get.connectNickname()); var introExtLine=createExtLine('扩展描述'); var versionExtLine=createExtLine('扩展版本','1.0'); var diskExtLine=createExtLine('网盘地址'); @@ -38704,7 +38713,7 @@ versionExtLine.querySelector('input').value=lib.extensionPack[name].version||''; } else{ - authorExtLine.querySelector('input').value=lib.config.connect_nickname||''; + authorExtLine.querySelector('input').value=get.connectNickname()||''; introExtLine.querySelector('input').value=''; diskExtLine.querySelector('input').value=''; forumExtLine.querySelector('input').value=''; @@ -45138,7 +45147,7 @@ utc:utc, day:parseInt(daysselect.value), hour:parseInt(hoursselect.value), - nickname:lib.config.connect_nickname, + nickname:get.connectNickname(), avatar:lib.config.connect_avatar, content:button.input.value, create:game.onlineKey, @@ -45194,7 +45203,7 @@ utc:utc, day:parseInt(daysselect.value), hour:parseInt(hoursselect.value), - nickname:lib.config.connect_nickname, + nickname:get.connectNickname(), avatar:lib.config.connect_avatar, content:button.input.value },game.onlineKey); @@ -47606,7 +47615,7 @@ if(!_status.enteringroom){ _status.enteringroom=true; _status.enteringroomserver=this.serving; - game.send('server','enter',this.key,lib.config.connect_nickname,lib.config.connect_avatar); + game.send('server','enter',this.key,get.connectNickname(),lib.config.connect_avatar); } } }, @@ -49189,6 +49198,9 @@ }, }; var get={ + connectNickname:function(){ + return typeof lib.config.connect_nickname=='string'?(lib.config.connect_nickname.slice(0,12)):'无名玩家'; + }, zhinangs:function(filter){ var list=(_status.connectMode?lib.configOL:lib.config).zhinang_tricks; if(!list||!list.filter||!list.length) return get.inpile('trick','trick').randomGets(3); @@ -51250,6 +51262,8 @@ gainableSkills:function(func,player){ var list=[]; for(var i in lib.character){ + if(lib.filter.characterDisabled(i)) continue; + if(lib.filter.characterDisabled2(i)) continue; if(lib.character[i][4]){ if(lib.character[i][4].contains('boss')) continue; if(lib.character[i][4].contains('hiddenboss')) continue; diff --git a/game/server.js b/game/server.js index fa6bb22b5..adf3ae93d 100644 --- a/game/server.js +++ b/game/server.js @@ -10,7 +10,8 @@ var bannedKeyWords=[]; var messages={ create:function(key,nickname,avatar,config,mode){ - this.nickname=nickname; + if(this.onlineKey!=key) return; + this.nickname=util.getNickname(nickname); this.avatar=avatar; var room={}; rooms.push(room); @@ -21,7 +22,7 @@ this.sendl('createroom',key); }, enter:function(key,nickname,avatar){ - this.nickname=nickname; + this.nickname=util.getNickname(nickname); this.avatar=avatar; var room=false; for(var i of rooms){ @@ -40,10 +41,10 @@ if(room.servermode&&!room.owner._onconfig&&config&&mode){ room.owner.sendl('createroom',index,config,mode); room.owner._onconfig=this; - room.owner.nickname=nickname; + room.owner.nickname=util.getNickname(nickname); room.owner.avatar=avatar; } - else if(!room.config){ + else if(!room.config||(room.config.gameStarted&&(!room.config.observe||!room.config.observeReady))){ this.sendl('enterroomfailed'); } else{ @@ -54,7 +55,7 @@ } }, changeAvatar:function(nickname,avatar){ - this.nickname=nickname; + this.nickname=util.getNickname(nickname); this.avatar=avatar; util.updateclients(); }, @@ -68,7 +69,7 @@ else{ room.owner=this; this.room=room; - this.nickname=cfg[1]; + this.nickname=util.getNickname(cfg[1]); this.avatar=cfg[2]; this.sendl('createroom',cfg[0],{},'auto') } @@ -103,7 +104,7 @@ delete this.keyCheck; }, events:function(cfg,id,type){ - if(bannedKeys.indexOf(id)!=-1||typeof id!='string'){ + if(bannedKeys.indexOf(id)!=-1||typeof id!='string'||this.onlineKey!=id){ bannedIps.push(this._socket.remoteAddress); console.log(id, this._socket.remoteAddress); this.close(); @@ -148,7 +149,7 @@ this.sendl('eventsdenied','ban'); } else{ - cfg.nickname=cfg.nickname||'无名玩家'; + cfg.nickname=util.getNickname(nickname); cfg.avatar=cfg.nickname||'caocao'; cfg.creator=id; cfg.id=util.getid(); @@ -205,6 +206,9 @@ }, }; var util={ + getNickname:function(str){ + return typeof str=='string'?(str.slice(0,12)):'无名玩家'; + }, isBanned:function(str){ for(var i of bannedKeyWords){ if(str.indexOf(i)!=-1) return true; diff --git a/game/update.js b/game/update.js index e96e8de52..8cca8c7b8 100644 --- a/game/update.js +++ b/game/update.js @@ -1,6 +1,6 @@ window.noname_update={ - version:'1.9.110.9.2', - update:'1.9.110.9.1', + version:'1.9.110.9.2.1', + update:'1.9.110.9.2', changeLog:[ '雾岛佳乃', '十周年潘淑、曹安民、张虎、国战邓芝', @@ -14,15 +14,15 @@ window.noname_update={ //'card/huanlekapai.js', //'card/mtg.js', //'card/sp.js', - //'card/standard.js', + 'card/standard.js', //'card/swd.js', //'card/yunchou.js', - 'card/yingbian.js', + //'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', 'character/diy.js', - 'character/extra.js', - 'character/hearth.js', + //'character/extra.js', + //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', @@ -36,13 +36,13 @@ window.noname_update={ 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - //'character/tw.js', + 'character/tw.js', //'character/standard.js', //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', //'character/yingbian.js', - 'character/yijiang.js', + //'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', 'layout/default/layout.css', @@ -54,7 +54,7 @@ window.noname_update={ //'mode/chess.js', //'mode/connect.js', //'mode/doudizhu.js', - 'mode/guozhan.js', + //'mode/guozhan.js', //'mode/identity.js', //'mode/single.js', //'mode/stone.js', diff --git a/image/character/duosidawang.jpg b/image/character/duosidawang.jpg new file mode 100644 index 000000000..3c691c67b Binary files /dev/null and b/image/character/duosidawang.jpg differ diff --git a/image/character/jiachong.jpg b/image/character/jiachong.jpg new file mode 100644 index 000000000..858b94c64 Binary files /dev/null and b/image/character/jiachong.jpg differ diff --git a/image/character/wuban.jpg b/image/character/wuban.jpg new file mode 100644 index 000000000..ecaaf5181 Binary files /dev/null and b/image/character/wuban.jpg differ diff --git a/layout/default/layout.css b/layout/default/layout.css index 8e0db3394..5625307f9 100644 --- a/layout/default/layout.css +++ b/layout/default/layout.css @@ -2125,6 +2125,7 @@ div:not(.handcards)>.card>.info>span, width: 100%; font-size: 12px; text-align: center; + white-space: nowrap; /*opacity: 0;*/ } .player:hover>.nameol {