Files
2026-02-04 23:47:45 +08:00

3988 lines
121 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//////////////////////////////////////////////////////////////////
//////////////////////////游戏平台服务器//////////////////////////
//////////////////////////////////////////////////////////////////
//玩家登录(断线重连)
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_rand_max = 3;
youle_room.robotcount_rand_min = 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 rebateLimit = pack.data.room.rebateLimit;
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(gameid == "Btke0urRy0cvPd5CIvD5yfhYhKhdSdex" && advanced_type){
//百人场的vip房房间费不去判断系统设置的最低值
if(false){
}else{
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;
o_room.rebateLimit = rebateLimit;
//机器人金币范围
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;
// var ranMin = 0;
// var ranMax = 0;
// var roomRate = 0;
// var roomLeave = 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<sysRoomConfig.length;i++){
if(JSON.stringify(sysRoomConfig[i].roomtype) == JSON.stringify(roomtype)){
if(sysRoomConfig[i].removeRobot){
haverobot = 0;
}
}
}
}
}
if (haverobot == 1){
//系统房间加机器人
var do_robot = function(){
///return;
try{
var forbidEnter = 0;
var ranMin = 0;
var ranMax = 0;
var roomRate = 0;
var roomLeave = 0;
var sysRoomConfig = youle_room.app.youle_platform.config.method.get_paravalue("system_room", agentid, gameid);
if(sysRoomConfig){
for(var i=0;i<sysRoomConfig.length;i++){
if(JSON.stringify(sysRoomConfig[i].roomtype) == JSON.stringify(roomtype)){
if(typeof sysRoomConfig[i].ranMin != 'undefined'){
ranMin = sysRoomConfig[i].ranMin;
}else{
ranMin = youle_room.robotcount_rand_min;
}
if(typeof sysRoomConfig[i].ranMax != 'undefined'){
ranMax = sysRoomConfig[i].ranMax;
}else{
ranMax = youle_room.robotcount_rand_max;
}
if(typeof sysRoomConfig[i].roomRate != 'undefined'){
roomRate = sysRoomConfig[i].roomRate;
}else{
roomRate = youle_room.robotcount_rate;
}
if(typeof sysRoomConfig[i].roomLeave != 'undefined'){
roomLeave = sysRoomConfig[i].roomLeave;
}else{
roomLeave = youle_room.robotcount_leave;
}
}
}
}
if(o_room.battlestate && forbidEnter){
return;
}
//代理机器人昵称前缀
//var deviceLogin = 0;
var deviceLogin = youle_room.app.youle_platform.config.method.get_paravalue("deviceLogin", agentid);
var playercount = 0;
var playerbeansum = 0;
var robotcount = 0;
var min_playerid = 999999;
var max_playerid = 0;
var playeridlist = [];
var playernamelist = [];
var playeravatarlist = [];
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);
playernamelist.push(o_room.seatlist[i].nickname);
playeravatarlist.push(o_room.seatlist[i].avatar);
}
}
if (playercount + robotcount < o_room.seatlist.length * roomRate / 100) {
var rand;
if(roomLeave){
var empCount = o_room.seatlist.length - playercount - robotcount;
rand = min_random(ranMin, ranMax);
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(ranMin, ranMax);
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<o_agentsvr_agent.robotArray.length - 9990;i++){
rid = o_agentsvr_agent.robotArray[i];
robot_nickname = o_agentsvr_agent.robotNicknames[rid];
if (min_ary_indexof(playernamelist, robot_nickname) > -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(deviceLogin){
robot_nickname = "ID" + robot_playerid;
}
// 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("===============================");
var empSeatList = [];
var seat0Emp = false;
for (var i = 0; i < o_room.seatlist.length; i++) {
if (!o_room.seatlist[i]) {
empSeatList.push(i);
if(i==0){
seat0Emp = true;
}
}
}
if(empSeatList.length >= 1){
var sRam = min_random(0,empSeatList.length-1);
var sindx = empSeatList[sRam];
if(seat0Emp){
sindx = 0;
}
if(sindx >= 0){
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, sindx, 0);
if (o_room.battlestate){
youle_room.import.player_enter(o_room, sindx);
}
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);
}
}
}
/*
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){
var owner1 = o_room.owner;
if(owner1){
if(owner1.playerid != playerid){
needbean = o_room.rebateNumber;
}
}else{
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;
}
}
var config_ramSeat = youle_agent.app.youle_platform.config.method.get_paravalue("ramSeat", agentid, gameid);
if(!config_ramSeat){
config_ramSeat = 1;
}
config_ramSeat = Number(config_ramSeat);
if(config_ramSeat == 1){
var empSeatList = [];
var seat0Emp = false;
for (var i = 0; i < o_room.seatlist.length; i++) {
if (!o_room.seatlist[i]) {
empSeatList.push(i);
if(i == 0){
seat0Emp = true;
}
}
}
if(empSeatList.length >= 1){
var sRam = min_random(0,empSeatList.length-1);
var sindx = empSeatList[sRam];
if(seat0Emp){
sindx = 0;
}
if(sindx >= 0){
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, sindx, 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, sindx);
}
}
}
}else{
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<o_agentsvr_agent.robotArray.length - 9990;i++){
// rid = o_agentsvr_agent.robotArray[i];
// robot_nickname = o_agentsvr_agent.robotNicknames[rid];
// if (min_ary_indexof(playernamelist, robot_nickname) > -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;
msg.data={};
msg.data.fromOther = 0;
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,goac_invitecode,goac_inviteid,goac_marketid) 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);
var __o_agentsvr_agent = youle_agent.agents.method.find_agent(agentid);
var __o_agentsvr_player = __o_agentsvr_agent.method.find_player(o_room.seatlist[i].playerid);
var invitecode = __o_agentsvr_player.invitecode;
var inviteid = __o_agentsvr_player.inviteid;
var marketid = __o_agentsvr_player.marketid;
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, invitecode, inviteid, marketid]);
}
}
//返回解散房间成功结果
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);
}
);
}