Files
youle_framework/server/youle/server_room/rpc.js
T

4020 lines
122 KiB
JavaScript

//////////////////////////////////////////////////////////////////
//////////////////////////游戏平台服务器//////////////////////////
//////////////////////////////////////////////////////////////////
//玩家登录(断线重连)
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;
if (pack.data.location) {
o_player.location = pack.data.location;
}
//更新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;
pack.data.location = o_player.location || null;
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 location = pack.data.location || null;
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 createroom_permission = youle_room.import.check_createroom_permission(o_game, pack.data);
if (createroom_permission && !createroom_permission.allowed){
pack.data = {};
pack.data.state = 1;
pack.data.error = createroom_permission.message || "无法创建房间";
pack.data.showerror = 1;
return pack;
}
//创建房间
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.location = location;
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;
pack.data.location = location;
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 location = pack.data.location || null;
//查找代理商
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 o_join_data = pack.data;
var joinroom_permission = youle_room.import.check_joinroom_permission(o_game, o_room, o_join_data);
if (joinroom_permission && !joinroom_permission.allowed){
pack.data = {};
pack.data.state = 1;
pack.data.error = joinroom_permission.message || "无法进入房间";
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.location = location;
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.location = location;
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;
pack.data.location = location;
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);
}
);
}