diff --git a/character/sp.js b/character/sp.js index d3460dced..666bc129a 100755 --- a/character/sp.js +++ b/character/sp.js @@ -309,7 +309,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 1' if(target.countCards('h')&&event.list.length){ event.current=event.list.shift(); - event.current.gainPlayerCard(target,true); + event.current.gainPlayerCard(target,true,'h'); target.line2([event.current,player]); } else{ @@ -15312,7 +15312,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yidian:'佚典', yidian_info:'当你使用牌选择目标时,若弃牌堆中没有与此牌名称相同的牌,则你可以为此牌增加一个目标(无距离限制)。', xinlianji:'连计', - xinlianji_info:'出牌阶段限一次,你可以弃置一张手牌,令其使用牌堆中的一张随机武器牌,然后选择一项:对你指定的一名角色使用【杀】,或令你将其装备区里的武器牌交给任意角色。', + xinlianji_info:'出牌阶段限一次,你可以弃置一张手牌,令一名角色使用牌堆中的一张随机武器牌。然后其选择一项:对你指定的一名角色使用一张【杀】,或令你将其装备区里的武器牌交给任意角色。', xinmoucheng:'谋逞', xinmoucheng_info:'觉醒技,准备阶段,若你已经发动了3次以上的〖连计〗,则你失去〖连计〗并获得〖矜功〗。', xinjingong:'矜功', diff --git a/character/sp2.js b/character/sp2.js index 88929dd7b..c14e080bd 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -387,7 +387,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ moying2:{}, juanhui:{ audio:2, - charlotte:true, trigger:{player:'phaseJieshuBegin'}, direct:true, content:function(){ @@ -407,6 +406,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, juanhui2:{ + charlotte:true, mark:true, intro:{ markcount:function(storage,player){ @@ -3143,9 +3143,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ silent:true, firstDo:true, filter:function(event,player){ - if(!lib.skill[event.skill]) return false; + var info=lib.skill[event.skill]; + if(!info) return false; if(event.skill==player.storage.pingjian_temp) return true; - if(lib.skill[event.skill].sourceSkill==player.storage.pingjian_temp) return true; + if(info.sourceSkill==player.storage.pingjian_temp||info.group==player.storage.pingjian_temp) return true; + if(Array.isArray(info.group)&&info.group.contains(player.storage.pingjian_temp)) return true; return false; }, content:function(){ @@ -5365,7 +5367,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lisu:'李肃', zhangwen:'张温', puyuan:'蒲元', - xushao:'许邵', + xushao:'许劭', mangyachang:"忙牙长", xugong:"许贡", zhangchangpu:"张昌蒲", diff --git a/game/asset.js b/game/asset.js index 6d7602ab8..d08c6780c 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.105.1', + 'v1.9.105.2', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -5217,7 +5217,7 @@ window.noname_skin_list={ key_nao:3, key_shiki:4, key_yui:2, - key_yuri:3, + key_yuri:4, key_yuzuru:2, sp_key_kanade:1, key_kamome:1, diff --git a/game/game.js b/game/game.js index 411e05059..d511849e4 100644 --- a/game/game.js +++ b/game/game.js @@ -837,23 +837,23 @@ } }, // fewplayer:{ - // name:'启用人数', + // name:'启用人数', // intro:'设置启用新版布局的最小人数(不足时切换至默认布局)', - // init:'3', - // // unfrequent:true, - // item:{ - // '2':'两人', - // '3':'三人', - // '4':'四人', - // '5':'五人', - // '6':'六人', - // '7':'七人', - // '8':'八人', - // }, - // onclick:function(item){ - // game.saveConfig('fewplayer',item); - // if(ui.arena) ui.arena.setNumber(ui.arena.dataset.number); - // } + // init:'3', + // // unfrequent:true, + // item:{ + // '2':'两人', + // '3':'三人', + // '4':'四人', + // '5':'五人', + // '6':'六人', + // '7':'七人', + // '8':'八人', + // }, + // onclick:function(item){ + // game.saveConfig('fewplayer',item); + // if(ui.arena) ui.arena.setNumber(ui.arena.dataset.number); + // } // }, player_height:{ name:'角色高度', @@ -3772,43 +3772,43 @@ // onclick:function(){ // if(this.innerHTML!='已隐藏'){ // this.innerHTML='已隐藏'; - // var pack=lib.config.all.cards.slice(0); - // if(Array.isArray(lib.config.hiddenCardPack)){ - // for(var i=0;i1){ - player.node.marks.lastChild.remove(); - } - game.broadcast(function(player){ - while(player.node.marks.childNodes.length>1){ - player.node.marks.lastChild.remove(); - } - },player); - } - for(var i in player.tempSkills){ - player.removeSkill(i); - } - var skills=player.getSkills(); - for(var i=0;i1){ + player.node.marks.lastChild.remove(); + } + game.broadcast(function(player){ + while(player.node.marks.childNodes.length>1){ + player.node.marks.lastChild.remove(); + } + },player); + } + for(var i in player.tempSkills){ + player.removeSkill(i); + } + var skills=player.getSkills(); + for(var i=0;i0?'markSkill':'unmarkSkill'](name); - } - else if(typeof storage=='number'){ - this[storage.length>0?'markSkill':'unmarkSkill'](name); - } + var storage=this.storage[name]; + if(Array.isArray(storage)){ + this[storage.length>0?'markSkill':'unmarkSkill'](name); + } + else if(typeof storage=='number'){ + this[storage.length>0?'markSkill':'unmarkSkill'](name); + } } }, unmarkAuto:function(name,info){ - var storage=this.storage[name] + var storage=this.storage[name] if(Array.isArray(info)&&Array.isArray(storage)){ storage.removeArray(info.slice(0)); this.markAuto(name); @@ -19843,20 +19846,20 @@ var targets=game.filterPlayer(); var value=[]; var min=0; - var info=get.info(card); - if(!info||info.notarget) return 0; - var range; - var select=get.copy(info.selectTarget); - if(select==undefined){ - if(info.filterTarget==undefined) return true; - range=[1,1]; - } - else if(typeof select=='number') range=[select,select]; - else if(get.itemtype(select)=='select') range=select; - else if(typeof select=='function') range=select(card,player); - if(info.singleCard) range=[1,1]; - game.checkMod(card,player,range,'selectTarget',player); - if(!range) return 0; + var info=get.info(card); + if(!info||info.notarget) return 0; + var range; + var select=get.copy(info.selectTarget); + if(select==undefined){ + if(info.filterTarget==undefined) return true; + range=[1,1]; + } + else if(typeof select=='number') range=[select,select]; + else if(get.itemtype(select)=='select') range=select; + else if(typeof select=='function') range=select(card,player); + if(info.singleCard) range=[1,1]; + game.checkMod(card,player,range,'selectTarget',player); + if(!range) return 0; for(var i=0;i=3) return target.identity=='fan'; - return target.identity=='nei'||target.identity=='fan'; - });break; - case 'nei':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - if(num>=3) return target.identity=='fan'; - if(game.players.length==2) return target!=player; - return target.identity=='zhong'||target.identity=='mingzhong'||target.identity=='fan'; - });break; - case 'fan':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - return target.identity!='fan'; - });break; - } + var num=get.population('fan'); + switch(player.identity){ + case 'zhu':case 'zhong':case 'mingzhong':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + if(num>=3) return target.identity=='fan'; + return target.identity=='nei'||target.identity=='fan'; + });break; + case 'nei':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + if(num>=3) return target.identity=='fan'; + if(game.players.length==2) return target!=player; + return target.identity=='zhong'||target.identity=='mingzhong'||target.identity=='fan'; + });break; + case 'fan':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return target.identity!='fan'; + });break; + } } } else if(mode=='guozhan'){ @@ -20763,17 +20766,17 @@ } } else{ - switch(player.identity){ - case 'zhu':case 'zhong':case 'mingzhong':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - return ['zhu','zhong','mingzhong'].contains(target.identity); - });break; - case 'nei':targets=[];break; - case 'fan':targets=game.filterPlayer(function(target){ - if(func&&!func(target)) return false; - return target.identity=='fan'; - });break; - } + switch(player.identity){ + case 'zhu':case 'zhong':case 'mingzhong':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return ['zhu','zhong','mingzhong'].contains(target.identity); + });break; + case 'nei':targets=[];break; + case 'fan':targets=game.filterPlayer(function(target){ + if(func&&!func(target)) return false; + return target.identity=='fan'; + });break; + } } } else if(mode=='guozhan'){ @@ -23468,9 +23471,9 @@ if(evt._backup&&evt._backup.filterCard){ var cardx2=lib.skill[evt.skill].viewAs(ui.selected.cards.concat([card]),player); if(get.is.object(cardx2)){ - var cardx=get.autoViewAs(cardx2,ui.selected.cards.concat([card])); - if(!get.filter(evt._backup.filterCard)(cardx,player,evt)) return false; - } + var cardx=get.autoViewAs(cardx2,ui.selected.cards.concat([card])); + if(!get.filter(evt._backup.filterCard)(cardx,player,evt)) return false; + } } } return get.filter(evt.filterCard2).apply(this,arguments); @@ -23579,58 +23582,58 @@ if(!player) return; var evt=this; while(true){ - var evt=evt.getParent('arrangeTrigger'); - if(!evt||evt.name!='arrangeTrigger'||!evt.map) return; - if(typeof skill=='string') skill=[skill]; - game.expandSkills(skill); - var filter=function(content){ - if(typeof content=='string') return content==triggername; - return content.contains(triggername); - }; - var trigger=evt._trigger; - var triggername=evt.triggername; - var map=false; - if(evt.doing&&evt.doing.player==player) map=evt.doing; - else{ - for(var i=0;i1) auto=false; for(i=0;i>',page,function(){ - // if(expanded){ - // this.classList.remove('on'); - // this.parentNode.classList.remove('expanded'); - // } - // else{ - // this.classList.add('on'); - // this.parentNode.classList.add('expanded'); - // } - // expanded=!expanded; + // if(expanded){ + // this.classList.remove('on'); + // this.parentNode.classList.remove('expanded'); + // } + // else{ + // this.classList.add('on'); + // this.parentNode.classList.add('expanded'); + // } + // expanded=!expanded; // }); page.classList.add('morenodes'); for(var k=0;k
  • 列表1-条目1
  • 列表1-条目2
    1. 列表2-条目1
    2. 列表2-条目2"\n}\n帮助内容将显示在菜单-选项-帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); + createCode('选','选项代码',page,clickCode,'config','config={\n \n}\n\n\/*\n示例:\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); + createCode('帮','帮助代码',page,clickCode,'help','help={\n \n}\n\n\/*\n示例:\nhelp={\n "帮助条目":"
      • 列表1-条目1
      • 列表1-条目2
      1. 列表2-条目1
      2. 列表2-条目2"\n}\n帮助内容将显示在菜单-选项-帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); return page; }()); @@ -39905,7 +39912,7 @@ game.checkForUpdate(null,true); }; // if(lib.config.dev){ - // li1.lastChild.appendChild(button3); + // li1.lastChild.appendChild(button3); // } (function(){ @@ -40498,13 +40505,13 @@ } else{ if(!game.observe&&!game.online){ - try{ - var result=eval(text2.value); - game.print(result); - } - catch(e){ - game.print(e); - } + try{ + var result=eval(text2.value); + game.print(result); + } + catch(e){ + game.print(e); + } } text2.value=''; } @@ -41084,14 +41091,14 @@ }, characterDialog:function(){ // if(lib.config.character_dialog_style=='newstyle'){ - // for(var i=0;iID:'+button.info[i].creator,eventnode); + ui.create.div('','已有'+(button.info[i].members.length)+'人加入',eventnode); + ui.create.div('','时间:'+str,eventnode); + if(button.info[i].members.contains(game.onlineKey)){ + eventnode.classList.add('active'); } - str+=(button.info[i].hour-12)+'点'; } - ui.create.div('','创建者:'+(button.info[i].nickname),eventnode); - //ui.create.div('','创建者:'+(button.info[i].nickname)+'
        ID:'+button.info[i].creator,eventnode); - ui.create.div('','已有'+(button.info[i].members.length)+'人加入',eventnode); - ui.create.div('','时间:'+str,eventnode); - if(button.info[i].members.contains(game.onlineKey)){ - eventnode.classList.add('active'); + else{ + ui.create.div('.title',button.info[i].title,eventnode); + ui.create.div('',button.info[i].content,eventnode); + ui.create.div('','创建者:'+(button.info[i].nickname),eventnode); } } if(num>=3){ @@ -43642,6 +43658,8 @@ else{ ui.create.div('.name',''+(button.info[i][0]||'无名玩家'),node); } + //ui.create.div('.videostatus',node,button.info[i][5]); + //node.classList.add('videonodestatus'); if(button.info[i][3]){ ui.create.div('.videostatus',node,button.info[i][3].slice(0,80)); node.classList.add('videonodestatus') @@ -44253,14 +44271,14 @@ _status.chatValue=''; } else{ - if(game.online){ - game.send('chat',game.onlineID,str); - } - else{ - lib.element.player.chat.call(player,str); - } - input.value=''; - _status.chatValue=''; + if(game.online){ + game.send('chat',game.onlineID,str); + } + else{ + lib.element.player.chat.call(player,str); + } + input.value=''; + _status.chatValue=''; } } e.stopPropagation(); @@ -47947,16 +47965,16 @@ var indent=''; var str; for(var i=0;i
        【'+translation+'】
        '+get.skillInfoTranslation(skills[i],node)+'
        自动发动
        '); - var underlinenode=uiintro.content.lastChild.querySelector('.underlinenode'); - if(lib.skill[skills[i]].frequent){ - if(lib.config.autoskilllist.contains(skills[i])){ - underlinenode.classList.remove('on'); - } - } - if(lib.skill[skills[i]].subfrequent){ - for(var j=0;j
        【'+translation+'】
        '+get.skillInfoTranslation(skills[i],node)+'
        自动发动
        '); + var underlinenode=uiintro.content.lastChild.querySelector('.underlinenode'); + if(lib.skill[skills[i]].frequent){ + if(lib.config.autoskilllist.contains(skills[i])){ + underlinenode.classList.remove('on'); + } + } + if(lib.skill[skills[i]].subfrequent){ + for(var j=0;j
        【'+translation+'】
        '+get.skillInfoTranslation(skills[i],node)+'
        '); @@ -49926,23 +49944,23 @@ } } // if(get.is.phoneLayout()){ - // var storage=node.storage; - // for(i in storage){ - // if(get.info(i)&&get.info(i).intro){ - // intro=get.info(i).intro; - // if(node.getSkills().concat(lib.skill.global).contains(i)==false&&!intro.show) continue; - // var name=intro.name?intro.name:get.translation(i); - // if(typeof name=='function'){ - // name=name(storage[i],node); - // } - // translation='
        『'+name.slice(0,2)+'』
        '; - // var stint=get.storageintro(intro.content,storage[i],node,null,i); - // if(stint){ - // translation+=stint+'
        '; - // uiintro.add(translation); - // } - // } - // } + // var storage=node.storage; + // for(i in storage){ + // if(get.info(i)&&get.info(i).intro){ + // intro=get.info(i).intro; + // if(node.getSkills().concat(lib.skill.global).contains(i)==false&&!intro.show) continue; + // var name=intro.name?intro.name:get.translation(i); + // if(typeof name=='function'){ + // name=name(storage[i],node); + // } + // translation='
        『'+name.slice(0,2)+'』
        '; + // var stint=get.storageintro(intro.content,storage[i],node,null,i); + // if(stint){ + // translation+=stint+'
        '; + // uiintro.add(translation); + // } + // } + // } // } if(lib.config.right_range&&_status.gameStarted){ diff --git a/game/keyWords.js b/game/keyWords.js index 6598b26d7..3f325ecc1 100644 --- a/game/keyWords.js +++ b/game/keyWords.js @@ -1,3 +1,3 @@ window.bannedKeyWords=[ -'ghs','直肠','性交','做爱','http','吃奶','骚逼','哈巴狗','美眉','癌','屁眼','艹','傻逼','操你','做鸡','奸','姦','华为','屄','狗子','屎','同性恋','肖战','鸡巴','精液','粪水','挂月亮中','贱骨头', +'ghs','直肠','性交','做爱','http','吃奶','骚逼','哈巴狗','美眉','癌','屁眼','艹','傻逼','操你','做鸡','奸','姦','华为','屄','狗子','屎','同性恋','肖战','鸡巴','精液','粪水','挂月亮中','贱骨头','吃屁', ]; \ No newline at end of file diff --git a/game/server.js b/game/server.js index 0c9ceca36..dba10710d 100644 --- a/game/server.js +++ b/game/server.js @@ -1,358 +1,377 @@ -(function(){ - var WebSocketServer=require('ws').Server; - var wss=new WebSocketServer({port:8080}); - var bannedKeys=[]; - var bannedIps=[]; - - var rooms=[{},{},{},{},{},{}]; - var events=[]; - var clients={}; - var messages={ - enter:function(index,nickname,avatar,config,mode){ - this.nickname=nickname; - this.avatar=avatar; - var room=rooms[index]; - if(!room){ - index=0; - room=rooms[0]; - } - this.room=room; - delete this.status; - if(room.owner){ - 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.avatar=avatar; - } - else if(!room.config){ - this.sendl('enterroomfailed'); - } - else{ - this.owner=room.owner; - this.owner.sendl('onconnection',this.wsid); - } - util.updaterooms(); - } - else{ - room.owner=this; - this.sendl('createroom',index); - } - }, - changeAvatar:function(nickname,avatar){ - this.nickname=nickname; - this.avatar=avatar; - util.updateclients(); - }, - server:function(cfg){ - if(cfg){ - this.servermode=true; - var room=rooms[cfg[0]]; - if(!room||room.owner){ - this.sendl('reloadroom',true); - } - else{ - room.owner=this; - this.room=room; - this.nickname=cfg[1]; - this.avatar=cfg[2]; - this.sendl('createroom',cfg[0],{},'auto') - } - } - else{ - for(var i=0;i=20){ - this.sendl('eventsdenied','total'); - } - else if(cfg.utc<=time){ - this.sendl('eventsdenied','time'); - } - else{ - cfg.nickname=cfg.nickname||'无名玩家'; - cfg.avatar=cfg.nickname||'caocao'; - cfg.creator=id; - cfg.id=util.getid(); - cfg.members=[id]; - events.unshift(cfg); - changed=true; - } - } - } - if(changed){ - util.updateevents(); - } - }, - config:function(config){ - var room=this.room; - if(room&&room.owner==this){ - if(room.servermode){ - room.servermode=false; - if(this._onconfig){ - if(clients[this._onconfig.wsid]){ - this._onconfig.owner=this; - this.sendl('onconnection',this._onconfig.wsid); - } - delete this._onconfig; - } - } - room.config=config; - } - util.updaterooms(); - }, - status:function(str){ - if(typeof str=='string'){ - this.status=str; - } - else{ - delete this.status; - } - util.updateclients(); - }, - send:function(id,message){ - if(clients[id]&&clients[id].owner==this){ - try{ - clients[id].send(message); - } - catch(e){ - clients[id].close(); - } - } - }, - close:function(id){ - if(clients[id]&&clients[id].owner==this){ - clients[id].close(); - } - }, - }; - var util={ - sendl:function(){ - var args=[]; - for(var i=0;i=20){ + this.sendl('eventsdenied','total'); + } + else if(cfg.utc<=time){ + this.sendl('eventsdenied','time'); + } + else if(util.isBanned(cfg.content)){ + this.sendl('eventsdenied','ban'); + } + else{ + cfg.nickname=cfg.nickname||'无名玩家'; + cfg.avatar=cfg.nickname||'caocao'; + cfg.creator=id; + cfg.id=util.getid(); + cfg.members=[id]; + events.splice(0,1); + events.unshift(cfg); + events.unshift(systemEvent); + changed=true; + } + } + } + if(changed){ + util.updateevents(); + } + }, + config:function(config){ + var room=this.room; + if(room&&room.owner==this){ + if(room.servermode){ + room.servermode=false; + if(this._onconfig){ + if(clients[this._onconfig.wsid]){ + this._onconfig.owner=this; + this.sendl('onconnection',this._onconfig.wsid); + } + delete this._onconfig; + } + } + room.config=config; + } + util.updaterooms(); + }, + status:function(str){ + if(typeof str=='string'){ + this.status=str; + } + else{ + delete this.status; + } + util.updateclients(); + }, + send:function(id,message){ + if(clients[id]&&clients[id].owner==this){ + try{ + clients[id].send(message); + } + catch(e){ + clients[id].close(); + } + } + }, + close:function(id){ + if(clients[id]&&clients[id].owner==this){ + clients[id].close(); + } + }, + }; + var util={ + isBanned:function(str){ + for(var i of bannedKeyWords){ + if(str.indexOf(i)!=-1) return true; + } + return false; + }, + sendl:function(){ + var args=[]; + for(var i=0;i