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