////////////////////////////////////////////////////////////////// //////////////////////////游戏平台服务器////////////////////////// ////////////////////////////////////////////////////////////////// //玩家登录(断线重连) youle_room.player_login = function(pack){ var playerid = parseInt(pack.data.playerid); var nickname = pack.data.nickname; var avatar = pack.data.avatar; var sex = parseInt(pack.data.sex); var ip = pack.data.ip; var onstate = 0; var conmode = pack.data.conmode; var fromid = pack.data.fromid; var agentid = pack.data.agentid; var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ try{ //纠错 var _agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var _agentsvr_player = _agentsvr_agent.method.find_player(playerid); _agentsvr_player.gameinfo[o_game.idx].roomcode = null; console.log(min_now() + "纠正玩家在房间里的错误,agentid:"+agentid+",gameid:"+gameid+",playerid:"+playerid+",nickname:"+nickname+",roomcode:"+roomcode); } catch(e){} return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ try{ //纠错 var _agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var _agentsvr_player = _agentsvr_agent.method.find_player(playerid); _agentsvr_player.gameinfo[o_game.idx].roomcode = null; console.log(min_now() + "纠正玩家在房间里的错误,agentid:"+agentid+",gameid:"+gameid+",playerid:"+playerid+",nickname:"+nickname+",roomcode:"+roomcode); } catch(e){} return; } if (o_room.owner.playerid == o_player.playerid){ o_player.gameinfo.isowner = 1; } else { o_player.gameinfo.isowner = 0; } //返回结果 if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 o_player.ip = ip; o_player.onstate = 0; o_player.conmode = conmode; o_player.fromid = fromid; //更新tcp连接列表 if (o_player.conmode == "tcp"){ youle_room.tcps.method.load_tcp(o_player.fromid, o_player); } pack = youle_room.return.player_login(pack, o_player); } else { //房间服务器与代理商服务器不是同一地址 pack.data = {}; pack.data.roomtype = o_player.gameinfo.o_room.roomtype; pack.data.seat = o_player.gameinfo.seat; if (o_player.gameinfo.o_room.match_data){ pack.data.match_data = o_player.gameinfo.o_room.match_data; pack.data.match_roomcard = o_player.gameinfo.o_room.needroomcard; } } pack.data.shortcode = o_room.shortcode; if(o_room.videoConfig){ pack.data.videoConfig = o_room.videoConfig; } if(o_room.rebateMode){ pack.data.rebateMode = o_room.rebateMode; } if(o_room.rebateNumber){ pack.data.rebateNumber = o_room.rebateNumber; } pack.data.rebateType = o_room.rebateType; if (o_room.match_id){ pack.data.match_id = o_room.match_id; pack.data.match_idx = o_room.match_idx; } //房主公告 if(o_room.shortcode){ var o_agent1 = youle_agent.agents.method.find_agent(agentid); if (o_agent1){ var rowner = o_agent1.method.find_player(o_room.owner.playerid); pack.data.ownerNotice = rowner.notice; } } return pack; } //玩家离线 youle_room.OnTcpDisConnected = function(str_tcpid){ var o_tcp = youle_room.tcps.method.find_tcp(str_tcpid); if (!o_tcp){ return; } //找到了 var o_player = o_tcp.o_player; if (o_player && o_player.fromid == str_tcpid){ var o_room = o_player.gameinfo.o_room; //修改玩家状态为离线 o_player.onstate = 1; o_player.conmode = null; o_player.fromid = null; //通知房间内的其他人有人离线了 if (o_room) { var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.routename; msg.rpc = "other_offline"; msg.data = {}; msg.data.seat = o_player.gameinfo.seat; o_room.method.sendpack_toother(msg, o_player.gameinfo.seat); } } //更新tcp连接列表 youle_room.tcps.method.delete_tcp(str_tcpid); // //遍历运营商 // for (var i = 0; i < youle_room.agents.list.length; i++) { // var o_agent = youle_room.agents.list[i]; // if (!o_agent){ // continue; // } // //遍历游戏 // for (var j = 0; j < o_agent.games.length; j++) { // var o_game = o_agent.games[j]; // if (!o_game) { // continue; // } // //遍历房间 // for (var k = 0; k < o_game.rooms.length; k++) { // var o_room = o_game.rooms[k]; // if (!o_room) { // continue; // } // //遍历座位 // for (var m = 0; m < o_room.seatlist.length; m++) { // var o_player = o_room.seatlist[m]; // if (!o_player) { // continue; // } // //找到了 // if (o_player.fromid == str_tcpid) { // //修改玩家状态为离线 // o_player.onstate = 1; // o_player.conmode = null; // o_player.fromid = null; // //通知房间内的其他人有人离线了 // if (o_room) { // var msg = {}; // msg.app = youle_room.app.appname; // msg.route = youle_room.routename; // msg.rpc = "other_offline"; // msg.data = {}; // msg.data.seat = o_player.gameinfo.seat; // o_room.method.sendpack_toother(msg, o_player.gameinfo.seat); // } // return; // } // } // } // } // } } youle_room.robotcount_rate = 80; youle_room.robotcount_rand = 3; youle_room.robotcount_leave = 0; //创建房间 youle_room.create_room = function(pack){ var agentid = pack.data.agent.agentid; var agentname = pack.data.agent.name; var agentserver = pack.data.agent.server; var agenttcpport = parseInt(pack.data.agent.tcpport); var agenthttpport = parseInt(pack.data.agent.httpport); var agentfreeroom = parseInt(pack.data.agent.freeroom); var gameid = pack.data.game.gameid; var gamename = pack.data.game.name; var seatcount = parseInt(pack.data.game.seatcount); var makewar = parseInt(pack.data.game.makewar); var modename = pack.data.game.modename; var roomserver = pack.data.game.server; var roomtcpport = parseInt(pack.data.game.tcpport); var roomhttpport = parseInt(pack.data.game.httpport); var minroomcode = parseInt(pack.data.game.minroomcode); var maxroomcode = parseInt(pack.data.game.maxroomcode); var playerid = parseInt(pack.data.player.playerid); var nickname = pack.data.player.nickname; var avatar = pack.data.player.avatar; var sex = parseInt(pack.data.player.sex); var playertype = parseInt(pack.data.player.playertype); var ip = null; var onstate = null; var conmode = null; var fromid = null; var address = pack.data.player.address; var latitude = pack.data.player.latitude; var longitude = pack.data.player.longitude; var playerbean = parseInt(pack.data.player.bean); var roomcode = parseInt(pack.data.room.roomcode); var roomtype = pack.data.room.roomtype; var needroomcard = parseInt(pack.data.room.needroomcard); var asetcount = parseInt(pack.data.room.asetcount); var infinite = parseInt(pack.data.room.infinite); var roommode = parseInt(pack.data.room.roommode); var beanfloor = null; if(pack.data.room.beanfloor){ beanfloor = parseInt(pack.data.room.beanfloor); } var beanmult = parseInt(pack.data.room.beanmult); var needprepare = parseInt(pack.data.room.needprepare); var advanced_type = parseInt(pack.data.room.advanced_type); var advanced_teabean = parseInt(pack.data.room.advanced_teabean); var shortcode = parseInt(pack.data.room.shortcode); var sysroom = 0; if (pack.data.room.sysroom) { sysroom = 1; } var isFree = 0; if(pack.data.room.isFree){ isFree = 1; } //视频房 var videoConfig = pack.data.room.videoConfig; var rebateType = pack.data.room.rebateType; //载入代理商(没找到则创建) var o_agent = youle_room.agents.method.load_agent(agentid, agentname, agentserver, agenttcpport, agenthttpport, agentfreeroom); //载入游戏(没找到则创建) var o_game = o_agent.method.load_game(gameid, gamename, seatcount, makewar, modename, roomserver, roomtcpport, roomhttpport, minroomcode, maxroomcode); var rebateConfig = youle_room.app.youle_platform.config.method.get_paravalue("rebateConfig", o_game.o_agent.agentid); var rebateMode = 0; var rebateNumber = 0; var sysRebateValue = 0; //var rCardNumber = 0; //小局抽成设置 if(infinite){ //小局抽成设置 var aset_rebate = youle_room.app.youle_platform.config.method.get_paravalue("aset_rebate", o_game.o_agent.agentid); if(aset_rebate){ config = aset_rebate.infinite; if(config[0] == 3 && config[1] == 2){ rebateMode = 3; sysRebateValue = parseInt(config[2]*beanmult/100); } } } if(rebateConfig){ rebateMode = rebateConfig.from; //配置扣除数量 if(!infinite){ sysRebateValue = parseInt(rebateConfig.value * beanmult /100); } if(!roommode){ if(!advanced_type){ }else{ //vip房卡房 // if(beanfloor == null){ // beanfloor = Math.max(advanced_teabean,sysRebateValue); // }else{ // beanfloor = Math.max(advanced_teabean,sysRebateValue,beanfloor); // } // rebateNumber = Math.max(advanced_teabean,sysRebateValue); rebateMode = 1; rebateNumber = advanced_teabean; } }else{ if(!advanced_type){ var tea = youle_room.import.owner_beanpush(o_game, roomtype); if(tea){ if(beanfloor == null){ beanfloor = Math.max(tea,sysRebateValue); }else{ beanfloor = Math.max(tea,sysRebateValue,beanfloor); } rebateNumber = Math.max(tea,sysRebateValue); }else{ if(beanfloor == null){ beanfloor = sysRebateValue; }else{ beanfloor = Math.max(sysRebateValue,beanfloor); } rebateNumber = sysRebateValue; } }else{ if(beanfloor == null){ beanfloor = Math.max(advanced_teabean,sysRebateValue); rebateNumber = beanfloor; }else{ beanfloor = Math.max(advanced_teabean,sysRebateValue,beanfloor); rebateNumber = Math.max(advanced_teabean,sysRebateValue); //beanfloor = Math.max(advanced_teabean,sysRebateValue,beanfloor); //rebateNumber = Math.max(advanced_teabean,sysRebateValue); } } } } // //检查代理商id是否存在 // var o_agent1 = youle_agent.agents.method.find_agent(agentid); // //检查玩家是否存在 // var o_player1 = o_agent1.method.find_player(playerid); // var starName = youle_agent.app.youle_platform.config.method.get_paravalue("starName", agentid); // if (!starName){ // starName = "星星"; // } // if(o_player1.bean < beanfloor){ // var msg1={}; // msg1.data = {}; // msg1.data.state = 1; // msg1.data.state = 1; // msg1.data.error = starName + "数量不够"; // msg1.data.showerror = 1; // return msg1; // } //创建房间 var o_room = o_game.method.create_room(roomcode, roomtype, needroomcard, asetcount); // advanced_teabean 房间费 advanced_type = 1//短号房 o_room.roommode = roommode; o_room.beanmult = beanmult; o_room.needprepare = needprepare; o_room.advanced_type = advanced_type; o_room.shortcode = shortcode; o_room.sysroom = sysroom; o_room.videoConfig = videoConfig; //o_room.rCardNumber = rCardNumber; o_room.rebateNumber = rebateNumber; o_room.rebateMode = rebateMode; o_room.advanced_teabean = advanced_teabean; o_room.beanfloor = beanfloor; o_room.rebateType = rebateType; o_room.sysRebateValue = sysRebateValue; o_room.isFree = isFree; //机器人金币范围 if(pack.data.robot){ o_room.robotGoldRange = pack.data.robot.robotGoldRange; } if (!advanced_type){ if (o_room.freetimer24){ min_closetime(o_room.freetimer24); o_room.freetimer24 = null; } } var room_config = youle_room.app.youle_platform.config.method.get_paravalue("room_config", o_agent.agentid, o_game.gameid); if (!room_config){ room_config = {}; room_config.rate = 80; room_config.value = 300; } var ran = min_random(1, 100); if (ran <= room_config.rate){ o_room.control_aset = min_random(3, o_room.asetcount - 2); o_room.control_value = room_config.value; } if (pack.data.room.match_id){ o_room.match_id = pack.data.room.match_id; o_room.match_idx = pack.data.room.match_idx; } if (pack.data.room.match_makewar){ o_room.makewar = parseInt(pack.data.room.match_makewar); } if (pack.data.room.match_data){ o_room.match_data = pack.data.room.match_data; } o_room.infinite = infinite; if (o_room.infinite){ o_room.asetcount = 100000000; if (o_room.sysroom){ var haverobot = youle_room.app.youle_platform.config.method.get_paravalue("haverobot", agentid, gameid); var forbidEnter = 0; if(haverobot == 1){ var sysRoomConfig = youle_room.app.youle_platform.config.method.get_paravalue("system_room", agentid, gameid); if(sysRoomConfig){ for(var i=0;i max_playerid){ max_playerid = o_room.seatlist[i].playerid; } } playeridlist.push(o_room.seatlist[i].playerid); playernamelist.push(o_room.seatlist[i].nickname); playeravatarlist.push(o_room.seatlist[i].avatar); } } if (playercount + robotcount < o_room.seatlist.length * youle_room.robotcount_rate / 100) { var rand; if(youle_room.robotcount_leave){ var empCount = o_room.seatlist.length - playercount - robotcount; rand = min_random(1, youle_room.robotcount_rand); if(empCount <= rand){ if(playercount == 0){ rand = empCount - 1; }else{ rand = empCount; } } // var empCount = o_room.seatlist.length - playercount - robotcount; // rand = min_random(1, youle_room.robotcount_rand); // if(empCount - youle_room.robotcount_leave > 0){ // if(rand > empCount - youle_room.robotcount_leave){ // rand = empCount - youle_room.robotcount_leave; // } // }else{ // return; // } // if (playercount > 0){ // rand = min_random(1, youle_room.robotcount_rand); // if (rand > o_room.seatlist.length - playercount - robotcount){ // rand = o_room.seatlist.length - playercount - robotcount; // } // } else { // rand = min_random(1, 3); // rand = o_room.seatlist.length - playercount - robotcount - rand; // } }else{ // if (playercount > 0){ rand = min_random(1, youle_room.robotcount_rand); if (rand > o_room.seatlist.length - playercount - robotcount){ rand = o_room.seatlist.length - playercount - robotcount; } // } else { // rand = min_random(1, 3); // rand = o_room.seatlist.length - playercount - robotcount - rand; // } } /* if (playercount >= youle_room.robotcount_leave){ rand = min_random(1, youle_room.robotcount_rand); if (rand > o_room.seatlist.length - playercount - robotcount){ rand = o_room.seatlist.length - playercount - robotcount; } } else { // var empCount = o_room.seatlist.length - playercount - robotcount; // rand = min_random(1, youle_room.robotcount_rand); if(empCount > youle_room.robotcount_leave){ // rand = min_random(1, empCount - youle_room.robotcount_leave); rand = min_random(1, youle_room.robotcount_rand); }else{ rand = 0; } }*/ // console.log("p:"+playercount+" r:"+robotcount+" rate:"+youle_room.robotcount_rate+"rand:"+rand); for (var k = 1; k <= rand; k++) { min_playerid = min_playerid - 1000; if (min_playerid < 100000) { min_playerid = 100000; } max_playerid = max_playerid + 1000; if (max_playerid > 999999) { max_playerid = 999999; } var robot_playerid = null; for (var i = 1; i < 10; i++) { robot_playerid = min_random(min_playerid, max_playerid); //机器人id从200000到899999随机取 robot_playerid = min_random(200000, 899999); if (min_ary_indexof(playeridlist, robot_playerid) > -1){ robot_playerid = null; } else { break; } }; if (robot_playerid == null){ return; } var o_agentsvr_agent = youle_agent.agents.method.find_agent(o_room.o_game.o_agent.agentid); var idx; var robot_nickname = null; var robot_avatar = null; var robot_sex = 1; if(o_agentsvr_agent.robotNicknames){ o_agentsvr_agent.robotArray.sort( function () { return 0.5 - Math.random(); }); var rid = 0; for(var i=0;i -1){ robot_nickname = null; } else { break; } } if (robot_nickname == null){ return; } robot_avatar = null; var pid = rid+100; robot_avatar = "https://projectimage.tscce.cn/image_132/"+pid+".jpg"; // var robot_sex = 1; // if(rid<=788){ // robot_sex = 2; // } if(rid%4 == 0){ robot_sex = 2; } //console.log("1create",rid,robot_sex); }else{ for (var i = 1; i < 10; i++) { idx = min_random(0, o_agentsvr_agent.robot_nicknamelist.length - 1); robot_nickname = o_agentsvr_agent.robot_nicknamelist[idx]; if (min_ary_indexof(playernamelist, robot_nickname) > -1){ robot_nickname = null; } else { break; } } if (robot_nickname == null){ return; } for (var i = 1; i < 10; i++) { idx = min_random(0, o_agentsvr_agent.robot_avatarlist.length - 1); robot_avatar = o_agentsvr_agent.robot_avatarlist[idx]; if (min_ary_indexof(playeravatarlist, robot_avatar) > -1){ robot_avatar = null; } else { break; } } //console.log("2create"); } if (robot_avatar == null){ return; } //var robot_sex = min_random(0, 1); var robot_ip = min_random(10, 240) + "." + min_random(10, 240) + "." + min_random(10, 240) + "." + min_random(10, 240); //读取是否纯机器人保存金币变动 // var o_cfg = youle_agent.app.youle_platform.config; // var robotGoldRange = o_cfg.method.get_paravalue("robotGoldRange", agentid, gameid); var robotGoldRange = o_room.robotGoldRange; var robot_bean; if(!robotGoldRange){ robot_bean = o_room.beanfloor * min_random(3, 6) + min_random(0, o_room.beanfloor); robot_bean = parseInt((robot_bean + playerbeansum) / (playercount + 1)); }else{ robot_bean = min_random(robotGoldRange[0],robotGoldRange[1]); } //console.log("robotGoldRange:"+robotGoldRange); //console.log("robot_bean:"+robot_bean); var o_robot = cls_youle_room_player.new(robot_playerid, robot_nickname, robot_avatar, robot_sex, 0, robot_ip, 0, null, null); o_robot.bean = robot_bean; o_robot.isrobot = 1; //处理机器人加入位置问题 // o_room.robotAva = []; // for (var i = 0; i < o_room.seatlist.length; i++) { // if (!o_room.seatlist[i]){ // o_room.robotAva.push(0); // }else{ // o_room.robotAva.push(1); // } // } // console.log("#####"+o_room.roomcode+"#####"); //console.log("==============================="); for (var i = 0; i < o_room.seatlist.length; i++) { if (!o_room.seatlist[i]){ if((!o_room.battlestate && forbidEnter) || !forbidEnter){ //if (!o_room.robotAva[i]){ //console.log("之前",o_room.robotAva,o_room.roomcode,i,o_robot,robot_bean); //o_room.robotAva[i] = 1; //robot_enter(o_room,o_robot,robot_bean); // console.log(o_room.roomcode + "加入机器人" + robot_playerid); o_robot.method.enter_room(o_room, i, 0); if (o_room.battlestate){ youle_room.import.player_enter(o_room, i); } youle_room.return.self_join_room({}, o_robot, robot_bean); playeridlist.push(o_robot.playerid); playernamelist.push(o_robot.nickname); playeravatarlist.push(o_robot.avatar); break; } } } } } }catch(e){} } //机器人加入房间 var robot_enter = function(o_room,o_robot,robot_bean){ min_ontimeout(function(){ // //console.log("添加机器人",o_room.robotAva,o_room.roomcode,i,o_robot,robot_bean); if(!o_room.seatlist[i]){ //console.log("添加",o_room.robotAva,o_room.roomcode,i,o_robot,robot_bean); o_robot.method.enter_room(o_room, i, 0); if (o_room.battlestate){ youle_room.import.player_enter(o_room, i); } youle_room.return.self_join_room({}, o_robot, robot_bean); }else{ console.log("冲突",o_room.robotAva,o_room.roomcode,i,o_robot,robot_bean); } // for (var i = 0; i < o_room.seatlist.length; i++) { // if (!o_room.seatlist[i]){ // o_robot.method.enter_room(o_room, i, 0); // if (o_room.battlestate){ // youle_room.import.player_enter(o_room, i); // } // youle_room.return.self_join_room({}, o_robot, robot_bean); // break; // } // } },Math.random()*4*1000); } //if(!o_room.timer_robot){ //console.log("======"+o_room.roomcode+"======"); o_room.timer_robot = min_ontime(do_robot, 6 * 1000); if (o_room.timer_robot == 12){ //很奇怪,此处定时器ID等于12时只会执行两次 min_closetime(o_room.timer_robot); //console.log("======"+o_room.roomcode+"======"); o_room.timer_robot = min_ontime(do_robot, 6 * 1000); } //} //机器人主动撩 var do_robot_active = function(){ var rand = min_random(1, 100); if (rand <= youle_room.robotadmin.active.text + youle_room.robotadmin.active.phiz + youle_room.robotadmin.active.gift){ var robotseatlist = []; var haveplayer = false; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]) { if (o_room.seatlist[i].isrobot){ robotseatlist.push(i); } else { haveplayer = true; } } } if (robotseatlist.length > 0 && haveplayer){ var idx = min_random(0, robotseatlist.length - 1); var from_seat = robotseatlist[idx]; if (rand <= youle_room.robotadmin.active.text){ pack.rpc = "send_text"; pack.data = {}; pack.data.type = 3; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); o_room.method.sendpack_toother(pack, -1); } else if (rand <= youle_room.robotadmin.active.text + youle_room.robotadmin.active.phiz){ pack.rpc = "send_phiz"; pack.data = {}; pack.data.type = 0; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); o_room.method.sendpack_toother(pack, -1); } else { var playerseatlist = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]) { if (i != from_seat){ playerseatlist.push(i); } } } if (playerseatlist.length > 0){ var idx = min_random(0, playerseatlist.length - 1); var to_seat = playerseatlist[idx]; pack.rpc = "send_gift"; pack.data = {}; pack.data.giftid = min_random(1, 100); pack.data.sendseat = from_seat; pack.data.receiveseat = to_seat; o_room.method.sendpack_toother(pack, -1); } } } } } var time = min_random(youle_room.robotadmin.active.timer1, youle_room.robotadmin.active.timer2); o_room.timer_robot_active = min_ontime(do_robot_active, time * 1000); } } } //创建玩家 if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 ip = pack.data.player.ip; onstate = 0; conmode = pack.data.player.conmode; fromid = pack.data.player.fromid; } var o_player = cls_youle_room_player.new(playerid, nickname, avatar, sex, playertype, ip, onstate, conmode, fromid); o_player.address = address; o_player.latitude = latitude; o_player.longitude = longitude; o_player.bean = playerbean; if (!advanced_type){ //创建普通房间时房主进入房间 if (!pack.data.player.notenterroom){ o_player.method.enter_room(o_room, 0, 1); } else { o_room.owner = o_player; } //返回结果 if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 pack = youle_room.return.create_room(pack, o_player); } else { //房间服务器与代理商服务器不是同一地址 pack.data = {}; pack.data.state = 0; pack.data.roomcode = roomcode; pack.data.seat = 0; } pack.data.roommode = o_room.roommode; pack.data.beanlimit = beanfloor; //视频选项 if(videoConfig){ pack.data.videoConfig = videoConfig; } pack.data.rebateMode = rebateMode; pack.data.rebateNumber = rebateNumber; pack.data.rebateType = rebateType; if (o_room.infinite){ //如果是系统房间无限局则直接创建桌,将控制权交给子游戏 pack.data.deskwar = youle_room.import.makewar_deskwar(o_room); o_room.battlestate = 1; o_room.makewartime = min_now(); } return pack; } else { if (o_room.infinite){ //如果是系统房间无限局则直接创建桌,将控制权交给子游戏 pack.data.deskwar = youle_room.import.makewar_deskwar(o_room); o_room.battlestate = 1; o_room.makewartime = min_now(); } //创建固定房间时房主不进入房间 o_room.owner = o_player; pack.data = {}; pack.data.state = 0; pack.data.roomcode = roomcode; return pack; } } //自己加入房间 youle_room.self_join_room = function(pack){ var playerid = parseInt(pack.data.playerid); var nickname = pack.data.nickname; var avatar = pack.data.avatar; var sex = parseInt(pack.data.sex); var playertype = parseInt(pack.data.playertype); var paycode = null; if (pack.data.paycode){ paycode = pack.data.paycode; } var playercharm = null; if (pack.data.charm || pack.data.charm == 0){ playercharm = pack.data.charm; } var ip = null; var onstate = null; var conmode = null; var fromid = null; var agentid = pack.data.agentid; var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var playerroomcard = parseInt(pack.data.playerroomcard); var playerbean = parseInt(pack.data.playerbean); var joinmode = pack.data.joinmode; var address = pack.data.address; var latitude = pack.data.latitude; var longitude = pack.data.longitude; //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ pack.data = {}; pack.data.state = 1; pack.data.error = "房间不存在或已解散:agentid"; pack.data.showerror = 1; if (joinmode == 1){ pack.data.state = 99; pack.data.roomcode = roomcode; } return pack; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ pack.data = {}; pack.data.state = 1; pack.data.error = "房间不存在或已解散:gameid"; pack.data.showerror = 1; if (joinmode == 1){ pack.data.state = 99; pack.data.roomcode = roomcode; } return pack; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ pack.data = {}; pack.data.state = 1; pack.data.error = "房间不存在或已解散"; pack.data.showerror = 1; if (joinmode == 1){ pack.data.state = 99; pack.data.roomcode = roomcode; } return pack; } //房主加入方式 if (joinmode == 1){ if (!o_room.owner || (o_room.owner.playerid != playerid)){ pack.data = {}; pack.data.state = 99; pack.data.error = "房间已结算或已解散"; pack.data.showerror = 1; pack.data.roomcode = roomcode; return pack; } } var roomCardName = youle_room.app.youle_platform.config.method.get_paravalue("roomCardName", agentid); if (!roomCardName){ roomCardName = "房卡"; } var starName = youle_room.app.youle_platform.config.method.get_paravalue("starName", agentid); if (!starName){ starName = "星星"; } //获取开房所需的房卡数量 var needroomcard; if (typeof pack.data.match_roomcard != "undefined"){ needroomcard = parseInt(pack.data.match_roomcard); } else { needroomcard = youle_room.import.joinroom_needroomcard(o_game, o_room.roomtype); // needroomcard = o_room.needroomcard; //加入视频房间需要多房卡 if(needroomcard>0){ var os_agent=youle_agent.agents.method.find_agent(agentid); var vConfig = os_agent.method.alyVideoConfig(o_room.videoConfig); if(vConfig[0] == 1){ needroomcard += vConfig[1]; } } } var xxroomdeduct = youle_room.app.youle_platform.config.method.get_paravalue("xxroomdeduct", agentid); if(!o_room.isFree){ if (!o_room.roommode || (o_room.roommode && xxroomdeduct)){ //检查玩家房卡是否够用 if (playerroomcard < needroomcard){ pack.data = {}; pack.data.state = 1; pack.data.error = roomCardName + "数量不够"; pack.data.showerror = 1; return pack; }; } } //检查房主房卡是否够用 if (!o_room.wasdeduct){ var _needroomcard = youle_room.import.createroom_needroomcard(o_game, o_room.roomtype); if(_needroomcard>0){ var os_agent=youle_agent.agents.method.find_agent(agentid); var vConfig = os_agent.method.alyVideoConfig(o_room.videoConfig); if(vConfig[0] == 1){ _needroomcard += vConfig[1]; } } var _o_agent = youle_agent.agents.method.find_agent(agentid); var _o_owner = _o_agent.method.find_player(o_room.owner.playerid); if (_o_owner){ if (_o_owner.roomcard < _needroomcard){ pack.data = {}; pack.data.state = 1; pack.data.error = "房主的"+ roomCardName + "数量不够"; pack.data.showerror = 1; return pack; } } } //获取加入房间需要的豆豆数量 // var needbean = youle_room.import.createroom_beanfloor(o_game, o_room.roomtype); var needbean = o_room.beanfloor; if(!o_room.rebateType){ if(o_room.advanced_type){ if(!o_room.roommode){ needbean = o_room.rebateNumber; } } } //房主设置的 //vip房卡房的限进以服务费为准 // advanced_teabean 房间费 advanced_type = 1//短号房 //检查玩家豆豆是否够用 //if(!o_room.rebateType){// if (needbean != null){ if (playerbean < needbean){ pack.data = {}; pack.data.state = 1; pack.data.error = starName + "数量不够"; pack.data.showerror = 1; return pack; } }else{ //如果房间有下限值则不去判断视频加入星星数量 // var os_agent=youle_agent.agents.method.find_agent(agentid); // var vConfig = os_agent.method.alyVideoConfig(o_room.videoConfig); // if(vConfig[0] == 2){ // if (playerbean < vConfig[1]){ // pack.data = {}; // pack.data.state = 1; // pack.data.error = starName + "数量不够"; // pack.data.showerror = 1; // return pack; // } // } } //} // } //检查房间是否已满 var makewarplayercount = youle_room.import.makewar_playercount(o_game, o_room.roomtype); if (makewarplayercount){ var playercount = 0; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]) { if (o_room.seatlist[i].playerid == playerid){ pack.data = {}; pack.data.state = -1; return pack; } playercount++; } } if (playercount >= makewarplayercount){ pack.data = {}; pack.data.state = 1; pack.data.error = "房间已满"; pack.data.showerror = 1; return pack; } } for (var i = 0; i < o_room.seatlist.length; i++) { if (!o_room.seatlist[i]) { //有位置 if (o_agent.server == o_game.roomserver){ //如果房间服务器与代理商服务器是同一地址 ip = pack.data.ip; onstate = 0; conmode = pack.data.conmode; fromid = pack.data.fromid; } //创建玩家 var o_player = cls_youle_room_player.new(playerid, nickname, avatar, sex, playertype, ip, onstate, conmode, fromid); o_player.needroomcard = needroomcard; o_player.wasdeduct = false; o_player.address = address; o_player.latitude = latitude; o_player.longitude = longitude; o_player.bean = playerbean; if (paycode){ o_player.paycode = paycode; } //玩家加入房间 o_player.method.enter_room(o_room, i, 0); if (o_room.owner && o_room.owner.playerid == playerid){ o_player.gameinfo.isowner = 1; } //如果房间已经处于开战状态(玩家中途进入)则通知游戏有玩家进入了房间 if (o_room.battlestate == 1){ youle_room.import.player_enter(o_room, i); } break; } }; if (!o_player) { pack.data = {}; pack.data.state = 1; pack.data.error = "房间已满"; pack.data.showerror = 1; return pack; } //加机器人 if (o_room.infinite){ if (o_room.sysroom){ var haverobot = youle_room.app.youle_platform.config.method.get_paravalue("haverobot", agentid, gameid); if (haverobot == 1){ try{ var playercount = 0; var playerbeansum = 0; var robotcount = 0; var min_playerid = 999999; var max_playerid = 0; var playeridlist = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]){ if (o_room.seatlist[i].isrobot){ robotcount = robotcount + 1; } else { playercount = playercount + 1; playerbeansum = playerbeansum + o_room.seatlist[i].bean; if (o_room.seatlist[i].playerid < min_playerid){ min_playerid = o_room.seatlist[i].playerid; } if (o_room.seatlist[i].playerid > max_playerid){ max_playerid = o_room.seatlist[i].playerid; } playeridlist.push(o_room.seatlist[i].playerid); } } } /* if (playercount > 0){ var newrobotcount = 3 - playercount - robotcount; if (newrobotcount > 0) { //console.log("p:"+playercount+" r:"+robotcount+" newrobotcount:"+newrobotcount); min_playerid = min_playerid - 1000; if (min_playerid < 100000) { min_playerid = 100000; } max_playerid = max_playerid + 1000; if (max_playerid > 999999) { max_playerid = 999999; } var o_agentsvr_agent = youle_agent.agents.method.find_agent(o_room.o_game.o_agent.agentid); for (var i = 0; i < newrobotcount; i++) { var robot_playerid = null; while (!robot_playerid){ robot_playerid = min_random(min_playerid, max_playerid); //机器人id从200000到899999随机取 robot_playerid = min_random(200000, 899999); if (min_ary_indexof(playeridlist, robot_playerid) > -1){ robot_playerid = null; } } // var idx = min_random(0, o_agentsvr_agent.robot_nicknamelist.length - 1); // var robot_nickname = o_agentsvr_agent.robot_nicknamelist[idx]; // var idx = min_random(0, o_agentsvr_agent.robot_avatarlist.length - 1); // var robot_avatar = o_agentsvr_agent.robot_avatarlist[idx]; // o_agentsvr_agent.robotArray.sort( // function () { // return 0.5 - Math.random(); // }); // var rid = 0; // for(var i=0;i -1){ // robot_nickname = null; // } else { // break; // } // } // if (robot_nickname == null){ // return; // } // var robot_avatar = null; var robot_nickname=""; var robot_avatar = ""; var robot_sex = 1; if(o_agentsvr_agent.robotNicknames){ var rid = min_random(0, o_agentsvr_agent.robotNicknames.length - 1); robot_nickname = o_agentsvr_agent.robotNicknames[rid]; var pid = rid+100; robot_avatar = "https://projectimage.tscce.cn/image_132/"+pid+".jpg"; // robot_sex = 1; if(rid<=788){ robot_sex = 2; } //console.log("join",rid,robot_sex); }else{ var idx = min_random(0, o_agentsvr_agent.robot_nicknamelist.length - 1); vrobot_nickname = o_agentsvr_agent.robot_nicknamelist[idx]; var idx = min_random(0, o_agentsvr_agent.robot_avatarlist.length - 1); robot_avatar = o_agentsvr_agent.robot_avatarlist[idx]; robot_sex = min_random(1, 2); //console.log("2join"); } // var robot_sex = min_random(0, 1); var robot_ip = min_random(10, 240) + "." + min_random(10, 240) + "." + min_random(10, 240) + "." + min_random(10, 240); var robot_bean = o_room.beanfloor * min_random(3, 6) + min_random(0, o_room.beanfloor); robot_bean = parseInt((robot_bean + playerbeansum) / (playercount + 1)); var o_robot = cls_youle_room_player.new(robot_playerid, robot_nickname, robot_avatar, robot_sex, 0, robot_ip, 0, null, null); o_robot.bean = robot_bean; o_robot.isrobot = 1; for (var j = 0; j < o_room.seatlist.length; j++) { if (!o_room.seatlist[j]){ o_robot.method.enter_room(o_room, j, 0); youle_room.import.player_enter(o_room, j); break; } } //通知房间内的其他人有人加入了房间 var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.routename; msg.rpc = "other_join_room"; msg.data = o_robot.method.get_info(); msg.data.bean = o_robot.bean; msg.data.seat = o_robot.gameinfo.seat; msg.data.isprepare = o_robot.gameinfo.isprepare; // for (var i = 0; i < o_room.seatlist.length; i++) { // if (o_room.seatlist[i] && (i != o_robot.gameinfo.seat) && (i != o_player.gameinfo.seat)) { // msg.conmode = o_room.seatlist[i].conmode; // msg.fromid = o_room.seatlist[i].fromid; // youle_room.app.SendPack(msg); // } // } for (var j = 0; j < o_room.seatlist.length; j++) { if (o_room.seatlist[j] && (j != o_robot.gameinfo.seat) && (j != o_player.gameinfo.seat)) { msg.conmode = o_room.seatlist[j].conmode; msg.fromid = o_room.seatlist[j].fromid; youle_room.app.SendPack(msg); } } } } } */ }catch(e){} } } } //返回结果 if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 pack = youle_room.return.self_join_room(pack, o_player, playerbean, playercharm); } else { //房间服务器与代理商服务器不是同一地址 pack.data = {}; pack.data.state = 0; pack.data.seat = o_player.gameinfo.seat; } if (o_room.owner.playerid == playerid) { pack.data.isowner = 1; } else { pack.data.isowner = 0; } pack.data.roommode = o_room.roommode; pack.data.beanlimit = needbean; pack.data.shortcode = o_room.shortcode; //视频选项 if(o_room.videoConfig){ pack.data.videoConfig = o_room.videoConfig; } if(o_room.rebateNumber){ pack.data.rebateNumber = o_room.rebateNumber; } if(o_room.rebateMode){ pack.data.rebateMode = o_room.rebateMode; } pack.data.rebateType = o_room.rebateType; return pack; } //修改房卡 youle_room.update_roomcard = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var roomcard = parseInt(pack.data.roomcard); // var type = parseInt(pack.data.type); // var change = parseInt(pack.data.change); var text = pack.data.text; var issameserver = parseInt(pack.data.issameserver); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.routename; msg.rpc = "update_roomcard"; msg.conmode = o_player.conmode; msg.fromid = o_player.fromid; msg.data = {}; msg.data.roomcard = roomcard; // msg.data.type = type; // msg.data.change = change; msg.data.text = text; youle_room.app.SendPack(msg); if (issameserver){ return pack } else { youle_room.app.SendPack(pack); } } //修改星星 youle_room.update_bean = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var bean = parseInt(pack.data.bean); var text = pack.data.text; //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } o_player.bean = bean; var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.routename; msg.rpc = "update_bean"; msg.conmode = o_player.conmode; msg.fromid = o_player.fromid; msg.data = {}; msg.data.bean = bean; msg.data.text = text; youle_room.app.SendPack(msg); delete msg.data.text; msg.data.seat = o_player.gameinfo.seat; o_room.method.sendpack_toother(msg, o_player.gameinfo.seat); return pack; } //玩家连接房间服务器并进入房间 youle_room.connect_roomserver = function(pack){ var playerid = parseInt(pack.data.data.playerid); var agentid = pack.data.data.agentid; var gameid = pack.data.data.gameid; var roomcode = parseInt(pack.data.data.roomcode); var seat = parseInt(pack.data.data.seat); var opt = pack.data.data.opt; //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ if (opt == "player_login"){ var _info = pack.data.data.info; pack.rpc = "connect_agentserver"; pack.data = {}; pack.data.agentserver = o_agent.server + ":" + o_agent.tcpport; pack.data.data = {}; pack.data.data.opt = "player_login"; pack.data.data.playerid = playerid; pack.data.data.agentid = agentid; pack.data.data.gameid = gameid; pack.data.data.info = _info; youle_room.app.SendPack(pack); } return; } //查找玩家 if (o_room.seatlist.length <= seat){ return; } var o_player = o_room.seatlist[seat]; if (!o_player){ return; } if (o_player.playerid != playerid){ return; } //踢原有连接下线 if (o_player.conmode == "tcp" && o_player.fromid && o_player.fromid != pack.fromid){ var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.routename; msg.rpc = "kick_offline"; msg.conmode = o_player.conmode; msg.fromid = o_player.fromid; youle_room.app.SendPack(msg); // var room_kick_offline = {}; // room_kick_offline.agentid = agentid; // room_kick_offline.gameid = gameid; // room_kick_offline.roomcode = roomcode; // room_kick_offline.playerid = playerid; // room_kick_offline.oldfromid = o_player.fromid; // room_kick_offline.oldtime = o_player.fromidtime; // room_kick_offline.newfromid = pack.fromid; // room_kick_offline.newtime = (new Date()).getTime(); // console.log(min_now() + " roomserver kick_offline"); // console.log(room_kick_offline); } //更新ip、onstate、conmode、fromid o_player.ip = pack.ip; o_player.onstate = 0; o_player.conmode = pack.conmode; o_player.fromid = pack.fromid; o_player.fromidtime = (new Date()).getTime(); //更新tcp连接列表 if (pack.conmode == "tcp"){ youle_room.tcps.method.load_tcp(pack.fromid, o_player); } switch (opt){ case "create_room": //返回前端创建房间成功 pack = youle_room.return.create_room(pack, o_player); youle_room.app.SendPack(pack); break; case "self_join_room": //返回前端加入房间成功 pack = youle_room.return.self_join_room(pack, o_player); youle_room.app.SendPack(pack); break; case "player_login": //返回前端所在房间数据 var _info = pack.data.data.info; pack = youle_room.return.player_login(pack, o_player); pack.data.agentid = _info.agentid; pack.data.agentname = _info.agentname; pack.data.agentlogo = _info.agentlogo; pack.data.wechat_gzh = _info.wechat_gzh; pack.data.wechat_ewm = _info.wechat_ewm; pack.data.wechat_kfh = _info.wechat_kfh; pack.data.qq = _info.qq; pack.data.tel = _info.tel; pack.data.scrollmsg = _info.scrollmsg; pack.data.noticemsg = _info.noticemsg; pack.data.appdownload = _info.appdownload; pack.data.playerid = _info.playerid; pack.data.roomcard = _info.roomcard; pack.data.taskstate = _info.taskstate; youle_room.app.SendPack(pack); break; } } //换桌 youle_room.change_room = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } if (o_player.gameinfo.isbet){ return; } //只有系统房间无限局才能换房 if (!o_room.infinite){ return; } //查找代理商 var agtsvr_agent = youle_agent.agents.method.find_agent(agentid); if (!agtsvr_agent) { return; }; //检查游戏id是否存在 var agtsvr_game = agtsvr_agent.method.find_game(gameid); if (!agtsvr_game) { return; }; if(!agtsvr_game.sharerooms_system){ return; }; if(agtsvr_game.sharerooms_system.length == 0){ return; }; var agtsvr_player = agtsvr_agent.method.find_player(playerid); if (!agtsvr_player) { return; }; var agtsvr_gameinfo = agtsvr_player.method.get_gameinfo(agtsvr_game); if (!agtsvr_gameinfo){ return; }; var sysroom_playercount = youle_room.app.youle_platform.config.method.get_paravalue("sysroom_playercount", agentid); if (sysroom_playercount == null){ sysroom_playercount = 20; } var _sysroom_playercount = 0; if (o_game.sysroom_playercount){ for (var i = 0; i < o_game.sysroom_playercount.length; i++) { if (JSON.stringify(o_game.sysroom_playercount[i].roomtype) == JSON.stringify(o_room.roomtype)){ _sysroom_playercount = o_game.sysroom_playercount[i].playercount; break; } } } var haverobot = youle_room.app.youle_platform.config.method.get_paravalue("haverobot", agentid, gameid); var idx = min_ary_indexof(agtsvr_game.sharerooms_system, roomcode, "roomcode"); if (idx == -1){ return; } for (var i = idx + 1; i < agtsvr_game.sharerooms_system.length; i++) { if (JSON.stringify(agtsvr_game.sharerooms_system[i].roomtype) == JSON.stringify(o_room.roomtype)){ var _roomcode = agtsvr_game.sharerooms_system[i].roomcode; var _room = o_game.method.find_room(_roomcode); if (_room){ //查看是否有空位,是否有真人玩家 var _have_nullseat = false; for (var j = 0; j < _room.seatlist.length; j++) { if (!_room.seatlist[j]){ _have_nullseat = true; } else { if (!_room.seatlist[j].isrobot){ if ((_sysroom_playercount < sysroom_playercount) && (haverobot == 1)){ _have_nullseat = false; break; } } } } if (_have_nullseat){ for (var j = 0; j < _room.seatlist.length; j++) { if (!_room.seatlist[j]){ //退出当前房间 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "self_exit_room"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.gameid = gameid; msg1.data.playerid = playerid; youle_room.app.youle_agent[msg1.rpc](msg1); var playerseat = o_player.gameinfo.seat; o_player.method.exit_room(); if (o_room.battlestate == 1){ youle_room.import.player_leave(o_room, playerseat); } var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "other_exit_room"; msg2.data = {}; msg2.data.seat = playerseat; o_room.method.sendpack_toother(msg2, playerseat); //加入新房间 o_player.method.enter_room(_room, j, 0); if (_room.owner && _room.owner.playerid == playerid){ o_player.gameinfo.isowner = 1; } if (_room.battlestate == 1){ youle_room.import.player_enter(_room, j); } pack = youle_room.return.self_join_room(pack, o_player, o_player.bean); if (_room.owner.playerid == playerid) { pack.data.isowner = 1; } else { pack.data.isowner = 0; } if(o_room.rebateNumber){ pack.data.rebateNumber = o_room.rebateNumber; } if(o_room.rebateMode){ pack.data.rebateMode = o_room.rebateMode; } pack.data.rebateType = o_room.rebateType; pack.data.roommode = _room.roommode; pack.data.beanlimit = _room.beanfloor; agtsvr_gameinfo.roomcode = _roomcode; // for (var k = 0; k < pack.data.players.length; k++) { // if (pack.data.players[k]){ // var _playerid = parseInt(pack.data.players[k].playerid); // var _player = agtsvr_agent.method.find_player(_playerid); // pack.data.players[k].bean = _player.bean; // } // } return pack; } } } } } } for (var i = 0; i <= idx - 1; i++) { if (JSON.stringify(agtsvr_game.sharerooms_system[i].roomtype) == JSON.stringify(o_room.roomtype)){ var _roomcode = agtsvr_game.sharerooms_system[i].roomcode; var _room = o_game.method.find_room(_roomcode); if (_room){ //查看是否有空位,是否有真人玩家 var _have_nullseat = false; for (var j = 0; j < _room.seatlist.length; j++) { if (!_room.seatlist[j]){ _have_nullseat = true; } else { if (!_room.seatlist[j].isrobot){ if (_sysroom_playercount < sysroom_playercount){ _have_nullseat = false; break; } } } } if (_have_nullseat){ for (var j = 0; j < _room.seatlist.length; j++) { if (!_room.seatlist[j]){ //退出当前房间 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "self_exit_room"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.gameid = gameid; msg1.data.playerid = playerid; youle_room.app.youle_agent[msg1.rpc](msg1); var playerseat = o_player.gameinfo.seat; o_player.method.exit_room(); if (o_room.battlestate == 1){ youle_room.import.player_leave(o_room, playerseat); } var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "other_exit_room"; msg2.data = {}; msg2.data.seat = playerseat; o_room.method.sendpack_toother(msg2, playerseat); //加入新房间 o_player.method.enter_room(_room, j, 0); if (_room.owner && _room.owner.playerid == playerid){ o_player.gameinfo.isowner = 1; } if (_room.battlestate == 1){ youle_room.import.player_enter(_room, j); } pack = youle_room.return.self_join_room(pack, o_player, o_player.bean); if (_room.owner.playerid == playerid) { pack.data.isowner = 1; } else { pack.data.isowner = 0; } if(o_room.rebateNumber){ pack.data.rebateNumber = o_room.rebateNumber; } if(o_room.rebateMode){ pack.data.rebateMode = o_room.rebateMode; } pack.data.rebateType = o_room.rebateType; pack.data.roommode = _room.roommode; pack.data.beanlimit = _room.beanfloor; agtsvr_gameinfo.roomcode = _roomcode; // for (var k = 0; k < pack.data.players.length; k++) { // if (pack.data.players[k]){ // var _playerid = parseInt(pack.data.players[k].playerid); // var _player = agtsvr_agent.method.find_player(_playerid); // pack.data.players[k].bean = _player.bean; // } // } return pack; } } } } } } //小概率换房失败 var rand = min_random(1, 100); if (rand < 10){ pack.rpc = "show_message"; pack.data = {}; pack.data.msg = "目前没有其他房间有空位,换房失败"; return pack; } else { //退出当前房间 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "self_exit_room"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.gameid = gameid; msg1.data.playerid = playerid; youle_room.app.youle_agent[msg1.rpc](msg1); var playerseat = o_player.gameinfo.seat; o_player.method.exit_room(); if (o_room.battlestate == 1){ youle_room.import.player_leave(o_room, playerseat); } var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "other_exit_room"; msg2.data = {}; msg2.data.seat = playerseat; o_room.method.sendpack_toother(msg2, playerseat); //创建新的系统房间 var _roomcode = agtsvr_game.method.new_roomcode(); if (!_roomcode){ console.log(min_now() + "创建系统房间失败:没有房号可分配"); return; } var o_roomserver = agtsvr_game.method.get_roomserver(_roomcode); var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.routename; msg.rpc = "create_room"; msg.data = {}; msg.data.agent = {}; msg.data.agent.agentid = agentid; msg.data.agent.name = o_agent.agentname; msg.data.agent.server = o_agent.server; msg.data.agent.tcpport = o_agent.tcpport; msg.data.agent.httpport = o_agent.httpport; msg.data.agent.freeroom = o_agent.freeroom; msg.data.game = {}; msg.data.game.gameid = gameid; msg.data.game.name = o_game.gamename; msg.data.game.seatcount = o_game.seatcount; msg.data.game.makewar = o_game.makewar; msg.data.game.modename = o_game.modename; msg.data.game.server = o_roomserver.server; msg.data.game.tcpport = o_roomserver.tcpport; msg.data.game.httpport = o_roomserver.httpport; msg.data.game.minroomcode = o_roomserver.minroomcode; msg.data.game.maxroomcode = o_roomserver.maxroomcode; msg.data.player = {}; msg.data.player.playerid = playerid; msg.data.player.nickname = o_player.nickname; msg.data.player.avatar = o_player.avatar; msg.data.player.sex = o_player.sex; msg.data.player.playertype = o_player.playertype; msg.data.player.ip = o_player.ip; msg.data.player.conmode = o_player.conmode; msg.data.player.fromid = o_player.fromid; msg.data.player.address = o_player.address; msg.data.player.latitude = o_player.latitude; msg.data.player.longitude = o_player.longitude; msg.data.player.bean = o_player.bean; //获取开房所需的房卡数量 var needroomcard = youle_agent.import.createroom_needroomcard(agtsvr_game, o_room.roomtype); //获取总局数 var asetcount = youle_agent.import.createroom_asetcount(agtsvr_game, o_room.roomtype); //获取豆豆下限 var beanfloor = youle_agent.import.createroom_beanfloor(agtsvr_game, o_room.roomtype); //获取房间类型 var roommode = youle_agent.import.createroom_roommode(agtsvr_game, o_room.roomtype); //获取星星场倍数 var beanmult = youle_agent.import.createroom_beanmult(agtsvr_game, o_room.roomtype); //玩家是否需要准备 var needprepare = youle_agent.import.createroom_needprepare(agtsvr_game, o_room.roomtype); //系统房间即无限局一定要准备 needprepare = 1; //不是星星场 if (!roommode){ beanmult = 1; } msg.data.room = {}; msg.data.room.roomcode = _roomcode; msg.data.room.roomtype = o_room.roomtype; msg.data.room.needroomcard = needroomcard; msg.data.room.asetcount = asetcount; msg.data.room.infinite = 1; msg.data.room.sysroom = 1; msg.data.room.roommode = roommode; msg.data.room.beanfloor = beanfloor; msg.data.room.beanmult = beanmult; msg.data.room.needprepare = needprepare; msg.data.room.advanced_type = 0; msg.data.room.advanced_teabean = 0; if(o_room.rebateNumber){ msg.data.room.rebateNumber = o_room.rebateNumber; } if(o_room.rebateMode){ msg.data.room.rebateMode = o_room.rebateMode; } msg.data.room.rebateType = o_room.rebateType; //加入房间成功 agtsvr_gameinfo.roomcode = _roomcode; if (o_roomserver.server == agtsvr_agent.server){ //房间服务器与代理商服务器是同一地址 var roomserver_data = youle_room[msg.rpc](msg); //返回前端 pack.data = roomserver_data.data; if (pack.data.state != 0){ //房间服务器创建房间失败 agtsvr_gameinfo.roomcode = null; pack.rpc = "create_room"; pack.data = {}; pack.data.state = 1; pack.data.error = "创建系统房间失败"; pack.data.showerror = 1; youle_agent.app.SendPack(pack); return; } pack.rpc = "create_room"; youle_agent.app.SendPack(pack); var o_share = {}; o_share.roomcode = _roomcode; o_share.roomtype = o_room.roomtype; o_share.sharetime= min_now(); agtsvr_game.sharerooms_system.push(o_share); } } } //玩家准备 youle_room.player_prepare = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } if (o_room.infinite){ if (!youle_room.import.player_CanPrepare(o_room, o_player.gameinfo.seat)){ return; }; } o_player.gameinfo.isprepare = 1; youle_room.import.player_prepare(o_room, o_player.gameinfo.seat); //返回前端 pack.data.seat = o_player.gameinfo.seat; if (!o_room.battlestate) { var isfull = o_room.method.get_isfull(); if (isfull) { //满桌了自动开战 o_room.battlestate = 1; o_room.makewartime = min_now(); //如果有返回值则后面的代码会发统一的开战包,如果没有返回值则由游戏负责发开战包 pack.data.deskwar = youle_room.import.makewar_deskwar(o_room); } else { //子游戏设置的开战人数 var makewarplayercount = youle_room.import.makewar_playercount(o_game, o_room.roomtype); if (makewarplayercount){ var playercount = 0; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i] && o_room.seatlist[i].gameinfo.isprepare){ playercount = playercount + 1; } } if (playercount == makewarplayercount){ o_room.battlestate = 1; o_room.makewartime = min_now(); //如果有返回值则后面的代码会发统一的开战包,如果没有返回值则由游戏负责发开战包 pack.data.deskwar = youle_room.import.makewar_deskwar(o_room); } } } } o_room.method.sendpack_toother(pack, -1); } //未开局之前自己(房主)解散房间 youle_room.self_break_room = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查房间是否已经开战 if (o_room.battlestate != 0){ return; } //检查玩家是否是房主 // if (o_player.gameinfo.isowner != 1){ // return; // } //通知代理服务器解散房间 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "self_break_room"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.gameid = gameid; msg1.data.roomcode = roomcode; //玩家列表 msg1.data.playeridlist = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]){ msg1.data.playeridlist.push(o_room.seatlist[i].playerid); } } if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 youle_room.app.youle_agent[msg1.rpc](msg1); //返回解散房间成功结果 pack.data = {}; pack.data.roomcode = roomcode; youle_room.app.SendPack(pack); //通知前端房间内的其他人解散房间 var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "other_break_room"; o_room.method.sendpack_toother(msg2, o_player.gameinfo.seat); //释放房间 o_game.method.free_room(o_room); } else { //房间服务器与代理商服务器不是同一地址 var cfg = {}; cfg.url = "http://" + o_agent.server + ":" + o_agent.httpport + "/index.html"; cfg.type = "POST"; cfg.data = JSON.stringify(msg1); cfg.success = function(str){ //此处conmode = null避免触发玩家离线通知其他玩家事件 if (o_player.conmode == "tcp"){ //更新tcp连接列表 youle_room.tcps.method.delete_tcp(o_player.fromid); } o_player.conmode = null; o_player.fromid = null; //返回前端需要断开房间服务器,连接代理服务器 pack.rpc = "connect_agentserver"; pack.data = {}; pack.data.agentserver = o_agent.server + ":" + o_agent.tcpport; pack.data.data = {}; pack.data.data.opt = "self_break_room"; pack.data.data.playerid = playerid; pack.data.data.agentid = agentid; pack.data.data.gameid = gameid; youle_room.app.SendPack(pack); //通知前端房间内的其他人需要断开房间服务器,连接代理服务器 for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i] && (i != o_player.gameinfo.seat)) { var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "connect_agentserver"; msg2.data = {}; msg2.data.agentserver = o_agent.server + ":" + o_agent.tcpport; msg2.data.data = {}; msg2.data.data.opt = "other_break_room"; msg2.data.data.playerid = o_room.seatlist[i].playerid; msg2.data.data.agentid = agentid; msg2.data.data.gameid = gameid; msg2.conmode = o_room.seatlist[i].conmode; msg2.fromid = o_room.seatlist[i].fromid; //此处conmode = null是为了避免触发玩家离线通知其他玩家事件 if (o_room.seatlist[i].conmode == "tcp"){ //更新tcp连接列表 youle_room.tcps.method.delete_tcp(o_room.seatlist[i].fromid); } o_room.seatlist[i].conmode = null; o_room.seatlist[i].fromid = null; youle_room.app.SendPack(msg2); } } //释放房间 o_game.method.free_room(o_room); }; cfg.error = function(str){}; min_http(cfg); } } //未开局之前自己(非房主)退出房间 youle_room.self_exit_room = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查房间是否已经开战,是否已经下注 if (o_room.battlestate != 0 && o_player.gameinfo.isbet == 1){ if (o_room.infinite){ var canLeave = youle_room.import.isPlayerCanLeave(o_room, o_player.gameinfo.seat); if (!canLeave){ pack.rpc = "show_message"; pack.data = {}; pack.data.msg = "您已参与此次游戏不能退出房间,可在本局结束后再退出房间"; return pack; } } else { return; } } // //检查玩家是否是房主 // if (o_player.gameinfo.isowner == 1){ // return; // } //玩家座位 var playerseat = o_player.gameinfo.seat; //通知代理服务器有人退出房间 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "self_exit_room"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.gameid = gameid; msg1.data.playerid = playerid; var do_player_exitroom = function(){ //退出房间 o_player.method.exit_room(); //如果是开战状态则通知游戏有人退出了房间 if (o_room.battlestate == 1){ youle_room.import.player_leave(o_room, playerseat); } //通知房间内的其他人有人退出房间 var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "other_exit_room"; msg2.data = {}; msg2.data.seat = playerseat; o_room.method.sendpack_toother(msg2, playerseat); } if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 youle_room.app.youle_agent[msg1.rpc](msg1); //退出房间 do_player_exitroom(); //返回游戏前端退出房间成功结果 pack.data = {}; pack.data.roomcode = roomcode; if (o_room.owner.playerid == playerid){ pack.data.isowner = 1; } else { pack.data.isowner = 0; } youle_room.app.SendPack(pack); } else { //房间服务器与代理商服务器不是同一地址 var cfg = {}; cfg.url = "http://" + o_agent.server + ":" + o_agent.httpport + "/index.html"; cfg.type = "POST"; cfg.data = JSON.stringify(msg1); cfg.success = function(str){ //退出房间 do_player_exitroom(); //此处conmode = null避免触发玩家离线通知其他玩家事件 if (o_player.conmode == "tcp"){ //更新tcp连接列表 youle_room.tcps.method.delete_tcp(o_player.fromid); } o_player.conmode = null; o_player.fromid = null; //返回前端需要断开房间服务器,连接代理服务器 pack.rpc = "connect_agentserver"; pack.data = {}; pack.data.agentserver = o_agent.server + ":" + o_agent.tcpport; pack.data.data = {}; pack.data.data.opt = "self_exit_room"; pack.data.data.playerid = playerid; pack.data.data.agentid = agentid; pack.data.data.gameid = gameid; youle_room.app.SendPack(pack); }; cfg.error = function(str){}; min_http(cfg); } } //自己(房主)手动开局 youle_room.self_makewar = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查房间是否已经开战 if (o_room.battlestate != 0){ return; } // //检查玩家是否是房主 // if (o_player.gameinfo.isowner != 1){ // return; // } //开战的同时设置自己的准备状态 if (!o_player.gameinfo.isprepare){ o_player.gameinfo.isprepare = 1; } //检查是否达到了开战人数 var playercount = o_room.method.get_playercount_prepare(); if (o_room.makewar){ if (playercount < o_room.makewar){ return; } } else { if (playercount < o_game.makewar){ return; } } //通知游戏服务器开局了,并得到游戏的开局数据包,如果有返回值则后面的代码会发统一的开战包,如果没有返回值则由游戏服务器发送开战包给游戏前端 var deskwar = youle_room.import.makewar_deskwar(o_room); //修改房间的开局状态 o_room.battlestate = 1; o_room.makewartime = min_now(); //通知房间内的其他人开局了 var msg = {}; msg.app = pack.app; msg.route = pack.route; msg.rpc = "other_makewar"; msg.data = {}; if (deskwar){ msg.data.deskwar = deskwar; } o_room.method.sendpack_toother(msg, o_player.gameinfo.seat); //返回前端退出房间成功 pack.data = {}; if (deskwar){ pack.data.deskwar = deskwar; } youle_room.app.SendPack(pack); } //开局之后自己申请解散房间 youle_room.self_apply_free_room = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查房间是否已经开战 if (o_room.battlestate == 0){ return; } //检查是否已经有人申请了解散 if (o_room.applyfreetime) { return; } //申请成功 o_player.gameinfo.agree = 0; o_room.applyfreetime = min_now(); //开启默认同意解散房间的定时器 o_room.method.open_free_timer(); //获取房间的申请解散状态 var agreefree = o_room.method.get_agreefree(); //返回前端申请解散房间成功 pack.data = {}; pack.data.agreefree = agreefree; youle_room.app.SendPack(pack); //通知房间内的其他人有人申请解散房间 var msg = {}; msg.app = pack.app; msg.route = pack.route; msg.rpc = "other_apply_free_room"; msg.data = {}; msg.data.seat = o_player.gameinfo.seat; msg.data.agreefree = agreefree; o_room.method.sendpack_toother(msg, o_player.gameinfo.seat); } //自己拒绝解散房间 youle_room.self_refuse_free_room = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查房间是否已经开战 if (o_room.battlestate == 0){ return; } //检查是否已经有人申请了解散 if (!o_room.applyfreetime) { return; } //拒绝解散成功 o_room.applyfreetime = null; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]) { o_room.seatlist[i].gameinfo.agree = -1; } } //关闭默认同意解散房间的定时器 o_room.method.close_free_timer(); //返回前端拒绝解散房间成功 delete pack.data; youle_room.app.SendPack(pack); //通知房间内的其他人有人拒绝解散房间 var msg = {}; msg.app = pack.app; msg.route = pack.route; msg.rpc = "other_refuse_free_room"; msg.data = {}; msg.data.seat = o_player.gameinfo.seat; o_room.method.sendpack_toother(msg, o_player.gameinfo.seat); } //自己同意解散房间 youle_room.self_agree_free_room = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查房间是否已经开战 if (o_room.battlestate == 0){ console.log(min_now + "解散房间失败:房间已开战"); console.log(pack.data); console.log(o_room); return; } //检查是否已经有人申请了解散 if (!o_room.applyfreetime) { return; } o_player.gameinfo.agree = 1; //同意解散人数大于游戏人数的一半时可达成解散 var totalcount = 0; //房间内的总人数 var agreecount = 0; //同意解散总人数 for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]) { totalcount = totalcount + 1; if (o_room.seatlist[i].gameinfo.agree > -1) { agreecount = agreecount + 1; } } } if ((totalcount < 4 && agreecount == totalcount) || (totalcount >= 4 && agreecount > parseInt(totalcount / 2))){ //2人或3人时需要全部同意,4人及以上时需要超过半数以上的玩家同意解散则达成解散 //关闭默认同意解散房间的定时器 o_room.method.close_free_timer(); //通知代理商服务器解散房间 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "free_room"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.gameid = gameid; msg1.data.roomcode = roomcode; //玩家列表 msg1.data.playeridlist = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]){ msg1.data.playeridlist.push(o_room.seatlist[i].playerid); } } if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 youle_room.app.youle_agent[msg1.rpc](msg1); //通知前端房间内的所有人解散房间 var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "free_room"; msg2.data = {}; //获取房间内各玩家的解散房间状态 msg2.data.seats = o_room.method.get_agreefree().state; //获取游戏的解散包 // if (o_room.battlestate == 1){ // msg2.data.deskfree = youle_room.import.get_disbandRoom(o_room); // } // o_room.method.sendpack_toother(msg2, -1); if (o_room.battlestate == 1){ var _deskfree = youle_room.import.get_disbandRoom(o_room); if (_deskfree){ if (_deskfree.sendtype && _deskfree.sendtype == 1 && _deskfree.seatlist){ //子游戏返回的解散json数据如果有sendtype属性且值等于1则表示需要向不同的玩家各自发包,且根据seatlist数组对应给各位置的玩家发游戏解散包 for (var n = 0; n < _deskfree.seatlist.length; n++) { if (_deskfree.seatlist){ msg2.data.deskfree = _deskfree.seatlist[n]; o_room.method.sendpack_toseat(msg2, n); } } } else { msg2.data.deskfree = _deskfree; o_room.method.sendpack_toother(msg2, -1); } } else { o_room.method.sendpack_toother(msg2, -1); } } else { o_room.method.sendpack_toother(msg2, -1); } //释放房间 o_game.method.free_room(o_room); } else { //房间服务器与代理商服务器不是同一地址 var cfg = {}; cfg.url = "http://" + o_agent.server + ":" + o_agent.httpport + "/index.html"; cfg.type = "POST"; cfg.data = JSON.stringify(msg1); cfg.success = function(str){ var _info = {}; //获取房间内各玩家的解散房间状态 _info.seats = o_room.method.get_agreefree().state; //获取游戏的解散包 // if (o_room.battlestate == 1){ // _info.deskfree = youle_room.import.get_disbandRoom(o_room); // } var _deskfree = null; if (o_room.battlestate == 1){ _deskfree = youle_room.import.get_disbandRoom(o_room); } //通知前端房间内的所有人需要断开房间服务器,连接代理服务器 for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]) { var msg2 = {}; msg2.app = youle_room.app.appname; msg2.route = youle_room.routename; msg2.rpc = "connect_agentserver"; msg2.data = {}; msg2.data.agentserver = o_agent.server + ":" + o_agent.tcpport; msg2.data.data = {}; msg2.data.data.opt = "free_room"; msg2.data.data.playerid = o_room.seatlist[i].playerid; msg2.data.data.agentid = agentid; msg2.data.data.gameid = gameid; if (_deskfree){ if (_deskfree.sendtype && _deskfree.sendtype == 1 && _deskfree.seatlist){ //子游戏返回的解散json数据如果有sendtype属性且值等于1则表示需要向不同的玩家各自发包,且根据seatlist数组对应给各位置的玩家发游戏解散包 _info.deskfree = _deskfree.seatlist[i]; } else { _info.deskfree = _deskfree; } } msg2.data.data.info = _info; msg2.conmode = o_room.seatlist[i].conmode; msg2.fromid = o_room.seatlist[i].fromid; //此处conmode = null是为了避免触发玩家离线通知其他玩家事件 if (o_room.seatlist[i].conmode == "tcp"){ //更新tcp连接列表 youle_room.tcps.method.delete_tcp(o_room.seatlist[i].fromid); } o_room.seatlist[i].conmode = null; o_room.seatlist[i].fromid = null; youle_room.app.SendPack(msg2); } } //释放房间 o_game.method.free_room(o_room); }; cfg.error = function(str){}; min_http(cfg); } } else { //未达成解散 //返回前端同意解散房间成功 delete pack.data; youle_room.app.SendPack(pack); //通知房间内的其他人有人同意解散房间 var msg = {}; msg.app = pack.app; msg.route = pack.route; msg.rpc = "other_agree_free_room"; msg.data = {}; msg.data.seat = o_player.gameinfo.seat; o_room.method.sendpack_toother(msg, o_player.gameinfo.seat); } } // youle_room.robotadmin = {}; // youle_room.robotadmin.pwd = "iamad"; //机器人管家密码 // youle_room.robotadmin.passive = {}; //机器人被动回复设置 // youle_room.robotadmin.passive.timer1 = 3; //被动回复的时间范围(秒) // youle_room.robotadmin.passive.timer2 = 8; //被动回复的时间范围(秒) // youle_room.robotadmin.passive.text = 5; //被动回复文字的概率 // youle_room.robotadmin.passive.phiz = 5; //被动回复表情的概率 // youle_room.robotadmin.passive.gift = 25; //被动回复表情的概率 // youle_room.robotadmin.active = {}; //机器人主动发送消息设置 // youle_room.robotadmin.active.timer1 = 20; //主动发送消息的时间范围(秒) // youle_room.robotadmin.active.timer2 = 40; //主动发送消息的时间范围(秒) // youle_room.robotadmin.active.text = 1; //主动发送文字的概率 // youle_room.robotadmin.active.phiz = 3; //主动发送表情的概率 // youle_room.robotadmin.active.gift = 2; //主动发送表情的概率 youle_room.robotadmin = {}; youle_room.robotadmin.pwd = "iamad"; //机器人管家密码 youle_room.robotadmin.passive = {}; //机器人被动回复设置 youle_room.robotadmin.passive.timer1 = 3; //被动回复的时间范围(秒) youle_room.robotadmin.passive.timer2 = 8; //被动回复的时间范围(秒) youle_room.robotadmin.passive.text = 5; //被动回复文字的概率 youle_room.robotadmin.passive.phiz = 5; //被动回复表情的概率 youle_room.robotadmin.passive.gift = 6; //被动回复表情的概率 youle_room.robotadmin.active = {}; //机器人主动发送消息设置 youle_room.robotadmin.active.timer1 = 20; //主动发送消息的时间范围(秒) youle_room.robotadmin.active.timer2 = 40; //主动发送消息的时间范围(秒) youle_room.robotadmin.active.text = 1; //主动发送文字的概率 youle_room.robotadmin.active.phiz = 3; //主动发送表情的概率 youle_room.robotadmin.active.gift = 2; //主动发送表情的概率 //发送文字 youle_room.send_text = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var text = pack.data.text; var type = 0; if (pack.data.type){ type = parseInt(pack.data.type); } //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } switch(type){ case 0: pack.data = {}; pack.data.type = type; pack.data.seat = o_player.gameinfo.seat; pack.data.text = text; if (text == youle_room.robotadmin.pwd){ var o_agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var o_agentsvr_game = o_agentsvr_agent.method.find_game(gameid); var o_agentsvr_player = o_agentsvr_agent.method.find_player(playerid); o_agentsvr_game.robotadmin = o_agentsvr_player; pack.data.text = text + " succeed."; return pack; } else { //通知房间内的所有人 o_room.method.sendpack_toother(pack, -1); //通知机器人管家 var o_robotadmin = null; var o_agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var o_agentsvr_game = o_agentsvr_agent.method.find_game(gameid); if (o_agentsvr_game.robotadmin){ var o_gameinfo = o_agentsvr_game.robotadmin.method.get_gameinfo(o_agentsvr_game); if (o_gameinfo){ if (o_gameinfo.roomcode && o_gameinfo.conmode && o_gameinfo.fromid){ o_robotadmin = o_agentsvr_game.robotadmin; } } } var haverobot = false; var toseat = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i] && (i != o_player.gameinfo.seat)) { if (o_room.seatlist[i].isrobot){ haverobot = true; toseat.push(i); } } } if (haverobot){ if (o_robotadmin){ pack.data.info = {}; pack.data.info.agentid = agentid; pack.data.info.gameid = gameid; pack.data.info.roomcode = roomcode; pack.data.info.playerid = playerid; pack.data.info.seat = o_player.gameinfo.seat; pack.data.info.toseat = toseat; pack.data.type = 2; pack.conmode = o_gameinfo.conmode; pack.fromid = o_gameinfo.fromid; youle_room.app.SendPack(pack); } else { var do_robot_passive = function(){ if (pack.rpc == "send_text" || pack.rpc == "send_phiz"){ if (o_room.seatlist[pack.data.seat] && o_room.seatlist[pack.data.seat].isrobot){ o_room.method.sendpack_toother(pack, -1); } } else if (pack.rpc == "send_gift"){ if (o_room.seatlist[pack.data.sendseat] && o_room.seatlist[pack.data.sendseat].isrobot && o_room.seatlist[pack.data.receiveseat]){ o_room.method.sendpack_toother(pack, -1); } } } var rand = min_random(1, 100); if (rand <= youle_room.robotadmin.passive.text){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_text"; pack.data = {}; pack.data.type = 3; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_phiz"; pack.data = {}; pack.data.type = 0; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz + youle_room.robotadmin.passive.gift){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_gift"; pack.data = {}; pack.data.giftid = min_random(1, 100); pack.data.sendseat = from_seat; pack.data.receiveseat = o_player.gameinfo.seat; var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } } } } break; case 1: pack.data = {}; pack.data.type = type; pack.data.seat = o_player.gameinfo.seat; pack.data.text = text; var noticelimit = youle_room.app.youle_platform.config.method.get_paravalue("noticelimit", agentid); if (noticelimit = null){ noticelimit = 10000000000; } if (noticelimit > 0){ var _agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var _agentsvr_player = _agentsvr_agent.method.find_player(playerid); if (_agentsvr_player.bean < noticelimit){ var starName = youle_room.app.youle_platform.config.method.get_paravalue("starName", agentid); if (!starName){ starName = "星星"; } pack.rpc = "show_message"; pack.data = {}; pack.data.msg = starName + "数量不够,不能发送"; return pack; } } var noticecost = youle_room.app.youle_platform.config.method.get_paravalue("noticecost", agentid); if (!noticecost){ noticecost = 0; } if (noticecost > 0){ var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.app.youle_agent.routename; msg.rpc = "update_bean"; msg.data = {}; msg.data.agentid = agentid; msg.data.playerid = playerid; msg.data.change = -1 * noticecost; msg.data.pushbean = 0; msg.data.gameid = gameid; msg.data.type = 4; youle_room.app.youle_agent[msg.rpc](msg); } //遍历房间 for (var i = 0; i < o_agent.games.length; i++) { if(o_agent.games[i]){ for (var j = 0; j < o_agent.games[i].rooms.length; j++) { var o_room = o_agent.games[i].rooms[j]; if (!o_room){ continue; } //遍历玩家 for (var k = 0; k < o_room.seatlist.length; k++) { var _player = o_room.seatlist[k]; if (!_player){ continue; } if (_player.isrobot){ continue; } if (_player.conmode == "tcp" && _player.fromid){ pack.conmode = _player.conmode; pack.fromid = _player.fromid; youle_room.app.SendPack(pack); } } } } } break; case 2: var o_to_room = o_game.method.find_room(pack.data.info.roomcode); if (!o_to_room){ return; } var from_seat = null; for (var i = 1; i < 10; i++) { var idx = min_random(0, pack.data.info.toseat.length - 1); from_seat = pack.data.info.toseat[idx]; if (o_to_room.seatlist[from_seat] && o_to_room.seatlist[from_seat].isrobot){ break; } else { from_seat = null; } }; if (from_seat){ pack.data = {}; pack.data.type = 0; pack.data.seat = from_seat; pack.data.text = text; o_to_room.method.sendpack_toother(pack, -1); } break; } } //发送表情 youle_room.send_phiz = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var text = pack.data.text; var type = 0; if (pack.data.type){ type = parseInt(pack.data.type); } //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } switch(type){ case 0: //通知房间内的所有人 pack.data = {}; pack.data.seat = o_player.gameinfo.seat; pack.data.text = text; o_room.method.sendpack_toother(pack, -1); //通知机器人管家 var o_robotadmin = null; var o_agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var o_agentsvr_game = o_agentsvr_agent.method.find_game(gameid); if (o_agentsvr_game.robotadmin){ var o_gameinfo = o_agentsvr_game.robotadmin.method.get_gameinfo(o_agentsvr_game); if (o_gameinfo){ if (o_gameinfo.roomcode && o_gameinfo.conmode && o_gameinfo.fromid){ o_robotadmin = o_agentsvr_game.robotadmin; } } } var haverobot = false; var toseat = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i] && (i != o_player.gameinfo.seat)) { if (o_room.seatlist[i].isrobot){ haverobot = true; toseat.push(i); } } } if (haverobot){ if (o_robotadmin){ pack.data.info = {}; pack.data.info.agentid = agentid; pack.data.info.gameid = gameid; pack.data.info.roomcode = roomcode; pack.data.info.playerid = playerid; pack.data.info.seat = o_player.gameinfo.seat; pack.data.info.toseat = toseat; pack.data.type = 2; pack.conmode = o_gameinfo.conmode; pack.fromid = o_gameinfo.fromid; youle_room.app.SendPack(pack); } else { var do_robot_passive = function(){ if (pack.rpc == "send_text" || pack.rpc == "send_phiz"){ if (o_room.seatlist[pack.data.seat] && o_room.seatlist[pack.data.seat].isrobot){ o_room.method.sendpack_toother(pack, -1); } } else if (pack.rpc == "send_gift"){ if (o_room.seatlist[pack.data.sendseat] && o_room.seatlist[pack.data.sendseat].isrobot && o_room.seatlist[pack.data.receiveseat]){ o_room.method.sendpack_toother(pack, -1); } } } var rand = min_random(1, 100); if (rand <= youle_room.robotadmin.passive.text){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_text"; pack.data = {}; pack.data.type = 3; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_phiz"; pack.data = {}; pack.data.type = 0; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz + youle_room.robotadmin.passive.gift){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_gift"; pack.data = {}; pack.data.giftid = min_random(1, 100); pack.data.sendseat = from_seat; pack.data.receiveseat = o_player.gameinfo.seat; var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } } } break; case 2: var o_to_room = o_game.method.find_room(pack.data.info.roomcode); if (!o_to_room){ return; } var from_seat = null; for (var i = 1; i < 10; i++) { var idx = min_random(0, pack.data.info.toseat.length - 1); from_seat = pack.data.info.toseat[idx]; if (o_to_room.seatlist[from_seat] && o_to_room.seatlist[from_seat].isrobot){ break; } else { from_seat = null; } }; if (from_seat){ pack.data = {}; pack.data.type = 0; pack.data.seat = from_seat; pack.data.text = text; o_to_room.method.sendpack_toother(pack, -1); } break; } } //发送语音 youle_room.send_voice = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var voiceurl = pack.data.voiceurl; var time = pack.data.time; var type = 0; if (pack.data.type){ type = parseInt(pack.data.type); } //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } switch(type){ case 0: //通知房间内的所有人 pack.data = {}; pack.data.seat = o_player.gameinfo.seat; pack.data.voiceurl = voiceurl; pack.data.time = time; o_room.method.sendpack_toother(pack, -1); //通知机器人管家 var o_robotadmin = null; var o_agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var o_agentsvr_game = o_agentsvr_agent.method.find_game(gameid); if (o_agentsvr_game.robotadmin){ var o_gameinfo = o_agentsvr_game.robotadmin.method.get_gameinfo(o_agentsvr_game); if (o_gameinfo){ if (o_gameinfo.roomcode && o_gameinfo.conmode && o_gameinfo.fromid){ o_robotadmin = o_agentsvr_game.robotadmin; } } } var haverobot = false; var toseat = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i] && (i != o_player.gameinfo.seat)) { if (o_room.seatlist[i].isrobot){ haverobot = true; toseat.push(i); } } } if (haverobot){ if (o_robotadmin){ pack.data.info = {}; pack.data.info.agentid = agentid; pack.data.info.gameid = gameid; pack.data.info.roomcode = roomcode; pack.data.info.playerid = playerid; pack.data.info.seat = o_player.gameinfo.seat; pack.data.info.toseat = toseat; pack.data.type = 2; pack.conmode = o_gameinfo.conmode; pack.fromid = o_gameinfo.fromid; youle_room.app.SendPack(pack); } else { var do_robot_passive = function(){ if (pack.rpc == "send_text" || pack.rpc == "send_phiz"){ if (o_room.seatlist[pack.data.seat] && o_room.seatlist[pack.data.seat].isrobot){ o_room.method.sendpack_toother(pack, -1); } } else if (pack.rpc == "send_gift"){ if (o_room.seatlist[pack.data.sendseat] && o_room.seatlist[pack.data.sendseat].isrobot && o_room.seatlist[pack.data.receiveseat]){ o_room.method.sendpack_toother(pack, -1); } } } var rand = min_random(1, 100); if (rand <= youle_room.robotadmin.passive.text){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_text"; pack.data = {}; pack.data.type = 3; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_phiz"; pack.data = {}; pack.data.type = 0; pack.data.seat = from_seat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz + youle_room.robotadmin.passive.gift){ var idx = min_random(0, toseat.length - 1); var from_seat = toseat[idx]; pack.rpc = "send_gift"; pack.data = {}; pack.data.giftid = min_random(1, 100); pack.data.sendseat = from_seat; pack.data.receiveseat = o_player.gameinfo.seat; var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } } } break; case 2: var o_to_room = o_game.method.find_room(pack.data.info.roomcode); if (!o_to_room){ return; } var from_seat = null; for (var i = 1; i < 10; i++) { var idx = min_random(0, pack.data.info.toseat.length - 1); from_seat = pack.data.info.toseat[idx]; if (o_to_room.seatlist[from_seat] && o_to_room.seatlist[from_seat].isrobot){ break; } else { from_seat = null; } }; if (from_seat){ pack.data = {}; pack.data.type = 0; pack.data.seat = from_seat; pack.data.voiceurl = voiceurl; pack.data.time = time; o_to_room.method.sendpack_toother(pack, -1); } break; } } //发送礼物 youle_room.send_gift = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var giftid = pack.data.giftid; var receiveseat = parseInt(pack.data.receiveseat); var type = 0; if (pack.data.type){ type = parseInt(pack.data.type); } //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } switch(type){ case 0: //通知房间内的所有人 pack.data = {}; pack.data.giftid = giftid; pack.data.sendseat = o_player.gameinfo.seat; pack.data.receiveseat = receiveseat; o_room.method.sendpack_toother(pack, -1); //通知机器人管家 var o_robotadmin = null; var o_agentsvr_agent = youle_agent.agents.method.find_agent(agentid); var o_agentsvr_game = o_agentsvr_agent.method.find_game(gameid); if (o_agentsvr_game.robotadmin){ var o_gameinfo = o_agentsvr_game.robotadmin.method.get_gameinfo(o_agentsvr_game); if (o_gameinfo){ if (o_gameinfo.roomcode && o_gameinfo.conmode && o_gameinfo.fromid){ o_robotadmin = o_agentsvr_game.robotadmin; } } } var haverobot = false; var toseat = []; if (o_room.seatlist[receiveseat] && o_room.seatlist[receiveseat].isrobot){ haverobot = true; toseat.push(receiveseat); } if (haverobot){ if (o_robotadmin){ pack.data.info = {}; pack.data.info.agentid = agentid; pack.data.info.gameid = gameid; pack.data.info.roomcode = roomcode; pack.data.info.playerid = playerid; pack.data.info.seat = o_player.gameinfo.seat; pack.data.info.toseat = toseat; pack.data.type = 2; pack.conmode = o_gameinfo.conmode; pack.fromid = o_gameinfo.fromid; youle_room.app.SendPack(pack); } else { var do_robot_passive = function(){ if (pack.rpc == "send_text" || pack.rpc == "send_phiz"){ if (o_room.seatlist[pack.data.seat] && o_room.seatlist[pack.data.seat].isrobot){ o_room.method.sendpack_toother(pack, -1); } } else if (pack.rpc == "send_gift"){ if (o_room.seatlist[pack.data.sendseat] && o_room.seatlist[pack.data.sendseat].isrobot && o_room.seatlist[pack.data.receiveseat]){ o_room.method.sendpack_toother(pack, -1); } } } var rand = min_random(1, 100); if (rand <= youle_room.robotadmin.passive.text){ pack.rpc = "send_text"; pack.data = {}; pack.data.type = 3; pack.data.seat = receiveseat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz){ pack.rpc = "send_phiz"; pack.data = {}; pack.data.type = 0; pack.data.seat = receiveseat; pack.data.text = min_random(1, 100); var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } else if (rand <= youle_room.robotadmin.passive.text + youle_room.robotadmin.passive.phiz + youle_room.robotadmin.passive.gift){ pack.rpc = "send_gift"; pack.data = {}; pack.data.giftid = min_random(1, 100); pack.data.sendseat = receiveseat; pack.data.receiveseat = o_player.gameinfo.seat; var time = min_random(youle_room.robotadmin.passive.timer1, youle_room.robotadmin.passive.timer2); if (!o_room.timer_robot_passive){ o_room.timer_robot_passive = []; } o_room.timer_robot_passive.push(min_ontimeout(do_robot_passive, time * 1000)); } } } break; case 2: var o_to_room = o_game.method.find_room(pack.data.info.roomcode); if (!o_to_room){ return; } var from_seat = null; for (var i = 1; i < 10; i++) { var idx = min_random(0, pack.data.info.toseat.length - 1); from_seat = pack.data.info.toseat[idx]; if (o_to_room.seatlist[from_seat] && o_to_room.seatlist[from_seat].isrobot){ break; } else { from_seat = null; } }; if (from_seat && o_to_room.seatlist[pack.data.info.seat]){ var receiveseat = pack.data.info.seat; pack.data = {}; pack.data.type = 0; pack.data.giftid = giftid; pack.data.sendseat = from_seat; pack.data.receiveseat = receiveseat; o_to_room.method.sendpack_toother(pack, -1); } break; } } //在打电话 youle_room.call_phone = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //修改玩家状态 o_player.onstate = 2; //通知房间内的所有人 pack.data = {}; pack.data.seat = o_player.gameinfo.seat; o_room.method.sendpack_toother(pack, -1); } //挂断电话 youle_room.hangup_phone = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //修改玩家状态 o_player.onstate = 0; //通知房间内的所有人 pack.data = {}; pack.data.seat = o_player.gameinfo.seat; o_room.method.sendpack_toother(pack, -1); } //广播即时消息 youle_room.broadcast = function(pack){ var agentid = pack.data.agentid; var gameid = pack.data.gameid; var msgcontent = pack.data.msgcontent; var msgtype = 0; if (pack.data.msgtype){ msgtype = pack.data.msgtype; } //检查代理商id是否存在 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent) { pack.data = {}; pack.data.state = 1; return pack; }; //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ pack.data = {}; pack.data.state = 1; return pack; } //广播 var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.routename; msg.rpc = "broadcast"; msg.data = {}; msg.data.msgtype = msgtype; msg.data.msgcontent = msgcontent; //遍历房间 for (var j = 0; j < o_game.rooms.length; j++) { var o_room = o_game.rooms[j]; if (!o_room){ continue; } //遍历玩家 for (var k = 0; k < o_room.seatlist.length; k++) { var o_player = o_room.seatlist[k]; if (!o_player){ continue; } if (o_player.conmode == "tcp" && o_player.fromid){ msg.conmode = o_player.conmode; msg.fromid = o_player.fromid; youle_room.app.SendPack(msg); } } } //返回执行结果 pack.data = {}; pack.data.state = 0; return pack; } //未开局之前房主投降 youle_room.beanroom_surrender = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var count = parseInt(pack.data.count); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查房间是否已经开战 if (o_room.battlestate != 0){ pack.data = {}; pack.data.state = 1; pack.data.error = "房间已开战,不能投降"; pack.data.showerror = 1; return pack; } //检查玩家是否是房主 if (o_player.playerid != o_room.owner.playerid){ return; } //检查投降的数量必须为正数 if (count <= 0){ pack.data = {}; pack.data.state = 1; pack.data.error = "投降的数量必须大于0"; pack.data.showerror = 1; return pack; } //通知代理服务器解散房间 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "beanroom_surrender"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.gameid = gameid; msg1.data.roomcode = roomcode; //玩家列表 var _ownerseat = -1; var _players = []; var _playercount = 0; msg1.data.playeridlist = []; for (var i = 0; i < o_room.seatlist.length; i++) { if (o_room.seatlist[i]){ msg1.data.playeridlist.push(o_room.seatlist[i].playerid); _playercount = _playercount + 1; if (o_room.seatlist[i].playerid == o_room.owner.playerid){ if (o_room.seatlist[i].bean < count){//判断房主的星星数量是否够 pack.data = {}; pack.data.state = 1; pack.data.error = starName + "数量不够,不能投降"; pack.data.showerror = 1; return pack; } _ownerseat = i; if (count){ _players.push(-1 * count); } else { _players.push(0); } } else { if (count){ _players.push(count); } else { _players.push(0); } } } else { _players.push(null); } } //房间内必须只有两人 if (_playercount != 2 || _ownerseat == -1){ pack.data = {}; pack.data.state = 1; pack.data.error = "房间内有多个玩家,不能投降,只有两个玩家时才能投降"; pack.data.showerror = 1; return pack; } var starName = youle_room.app.youle_platform.config.method.get_paravalue("starName", agentid); if (!starName){ starName = "星星"; } //检查星星的投降最小数量 var surrender_min = youle_room.app.youle_platform.config.method.get_paravalue("surrender_min", o_agent.agentid, o_game.gameid); if (!surrender_min){ surrender_min = 1; } if (count < surrender_min){ pack.data = {}; pack.data.state = 1; pack.data.error = "投降的"+starName+"最小数量是"+surrender_min+",请重新设置投降底翻"; pack.data.showerror = 1; return pack; } //检查星星的投降最小单位数 var surrender_unit = youle_room.app.youle_platform.config.method.get_paravalue("surrender_unit", o_agent.agentid, o_game.gameid); if (!surrender_unit){ surrender_unit = 1; } if (count < surrender_unit || count % surrender_unit != 0){ pack.data = {}; pack.data.state = 1; pack.data.error = "投降的"+starName+"最小单位数是"+surrender_unit+",请重新设置投降底翻"; pack.data.showerror = 1; return pack; } if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 youle_room.app.youle_agent[msg1.rpc](msg1); var sql = "insert into gold_account(goac_id,goac_agentid,goac_gameid,goac_roomcode,goac_roommode,goac_createtime,goac_beanmult,goac_ownerid,goac_shortcode,goac_deduct,goac_roomcard,goac_datatype,goac_asetcount,goac_asetnum,goac_playerid,goac_isrobot,goac_grade,goac_rebatefrom,goac_rebateto,goac_toplayerid,goac_rebatemode,goac_setvalue,goac_rebatevalue,goac_time) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"; //房间id = 时间戳 + 4位随机码 + 房号 var roomid = new Date().getTime() + min_randomChar(4) + roomcode; var time = min_now(); var beanmult = 0; if (o_room.beanmult){ beanmult = o_room.beanmult; } var shortcode = 0; if (o_room.shortcode){ shortcode = o_room.shortcode; } var deductmode = youle_room.import.deduct_roomcard_mode(o_room.o_game, o_room.roomtype); for (var i = 0; i < o_room.seatlist.length; i++){ if (o_room.seatlist[i]){ var _change; if (o_room.seatlist[i].playerid == o_room.owner.playerid){ _change = -1 * count; } else { _change = count; } var msg = {}; msg.app = youle_room.app.appname; msg.route = youle_room.app.youle_agent.routename; msg.rpc = "update_bean"; msg.data = {}; msg.data.agentid = agentid; msg.data.playerid = o_room.seatlist[i].playerid; msg.data.change = _change; msg.data.pushbean = 0; msg.data.gameid = gameid; youle_room.app.youle_agent[msg.rpc](msg); youle_room.mysql_grade.execsql("execsql", sql, [roomid, agentid, gameid, roomcode, 3, o_room.createtime, beanmult, o_room.owner.playerid, shortcode, deductmode, 0, 0, o_room.asetcount, 1, o_room.seatlist[i].playerid, 0, _change, 0, 0, 0, 0, 0, 0, time]); } } //返回解散房间成功结果 pack.data = {}; pack.data.state = 0; pack.data.players = _players; pack.data.ownerseat = _ownerseat; o_room.method.sendpack_toother(pack, -1); //释放房间 o_game.method.free_room(o_room); } } //分享到星星争霸场 youle_room.share_room = function(pack){ var agentid = pack.data.agentid; var playerid = parseInt(pack.data.playerid); var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); var roomlist = pack.data.roomlist; //是否为vip房分享 var shareType;; if(!pack.data.shareType){ shareType = 0; }else{ shareType = parseInt(pack.data.shareType); } var roomlist=pack.data.roomlist; //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ return; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ return; } if(!shareType){ //查找房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ return; } //查找玩家 var o_player = o_room.method.find_player(playerid); if (!o_player){ return; } //检查玩家是否是房主 if (o_player.playerid != o_room.owner.playerid){ return; } //只有星星场才能分享 if (o_room.roommode != 1){ return; } }else{ var o_room = o_game.method.find_room(roomlist[0]); if (!o_room){ return; } //只有星星场才能分享 if (o_room.roommode != 1){ return; } } //通知代理服务器分享房间到星星争霸场 var msg1 = {}; msg1.app = youle_room.app.appname; msg1.route = youle_room.app.youle_agent.routename; msg1.rpc = "share_room"; msg1.data = {}; msg1.data.agentid = agentid; msg1.data.playerid = playerid; msg1.data.gameid = gameid; msg1.data.roomcode = roomcode; msg1.data.shareType = shareType; msg1.data.roomtype = o_room.roomtype; msg1.data.roomlist = roomlist; if (o_agent.server == o_game.roomserver){ //房间服务器与代理商服务器是同一地址 var r = youle_room.app.youle_agent[msg1.rpc](msg1); //返回解散房间成功结果 if (r){ youle_room.app.SendPack(pack); } } } //获取服务器上房间的调试数据 youle_room.get_debuggerdata = function(pack){ var agentid = pack.data.agentid; var gameid = pack.data.gameid; var roomcode = parseInt(pack.data.roomcode); //查找代理商 var o_agent = youle_room.agents.method.find_agent(agentid); if (!o_agent){ pack.data.msg = "未找到agent"; return pack; } //查找游戏 var o_game = o_agent.method.find_game(gameid); if (!o_game){ pack.data.msg = "未找到game"; return pack; } //查找存在的房间 var o_room = o_game.method.find_room(roomcode); if (!o_room){ pack.data.msg = "未找到room"; return pack; } //查找牌桌 var o_desk = o_room.o_desk; if (!o_desk){ pack.data.msg = "未找到desk"; return pack; } //查找o_desk.pack var o_pack = o_desk.pack; if (!o_pack){ pack.data.msg = "未找到desk.pack"; return pack; } o_desk.flow.save_pack_curraset( function(){ pack.data.msg = "保存牌局调试数据成功"; youle_room.app.SendPack(pack); }, function(){ pack.data.msg = "保存牌局调试数据失败"; youle_room.app.SendPack(pack); } ); }