Files
youlegames/codes/games/server/youle/server_agent/class.player.js
2026-02-04 23:47:45 +08:00

427 lines
14 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///////////////////////////////////////////////////
///////// cls_youle_agent_player: 玩家 /////////
///////////////////////////////////////////////////
var cls_youle_agent_player = cls_youle_agent_player || {
//构造函数
new: function(o_agent, playerid, roomcard, bean, openid, unionid, nickname, avatar, sex, playertype, invitecode) {
var player = {};
//基本信息
player.o_agent = o_agent; //代理商
player.playerid = playerid; //玩家id
player.roomcard = roomcard; //房卡数量
player.bean = bean; //星星数量
player.openid = openid;
player.unionid = unionid;
player.nickname = nickname;
player.avatar = avatar;
player.sex = sex;
player.playertype = playertype; //0:普通用户 1:vip开房不扣房卡
player.invitecode = invitecode; //绑定的邀请码
player.freetimer = null; //释放玩家的定时器
//登录的游戏列表
player.gameinfo = [];
//方法
player.method = {};
//登录游戏
player.method.login_game = function(o_game, ip, conmode, fromid, machineid, machineroom){
cls_youle_agent_player.login_game(player, o_game, ip, conmode, fromid, machineid, machineroom);
}
//获取玩家某个游戏的游戏信息
player.method.get_gameinfo = function(o_game){
return cls_youle_agent_player.get_gameinfo(player, o_game);
}
//修改玩家房卡数量
player.method.update_roomcard = function(type, newroomcrad, change, memo){
cls_youle_agent_player.update_roomcard(player, type, newroomcrad, change, memo);
}
//修改玩家豆豆数量
player.method.update_bean = function(type, newbean, change, push, showrebate){
cls_youle_agent_player.update_bean(player, type, newbean, change, push, showrebate);
}
//打开释放玩家的定时器
player.method.open_free_timer = function(){
cls_youle_agent_player.open_free_timer(player);
}
//关闭释放玩家的定时器
player.method.close_free_timer = function(){
cls_youle_agent_player.close_free_timer(player);
}
return player;
},
//登录游戏
login_game: function(o_player, o_game, ip, conmode, fromid, machineid, machineroom){
if (o_player.gameinfo.length <= o_game.idx) {
o_player.gameinfo.length = o_game.idx + 1;
}
var _game_info = o_player.gameinfo[o_game.idx];
if (!_game_info){
//初始化游戏信息
_game_info = {};
_game_info.conmode = conmode;
_game_info.fromid = fromid;
_game_info.fromidtime = (new Date()).getTime();
_game_info.ip = ip;
_game_info.machineid = machineid;
_game_info.machineroom = machineroom;
_game_info.roomcode = null;
o_player.gameinfo[o_game.idx] = _game_info;
//统计在线玩家数
o_game.method.online_p_chang(1);
} else {
//踢原有连接下线
// if (fromid && o_game.gameid != "G2hw0ubng0zcoI0r4mx3H2yr4GejidwO"){
if (fromid){
if (_game_info.conmode == "tcp" && _game_info.fromid && _game_info.fromid != fromid){
var msg = {};
msg.app = youle_agent.app.appname;
msg.route = youle_agent.routename;
msg.rpc = "kick_offline";
msg.conmode = _game_info.conmode;
msg.fromid = _game_info.fromid;
msg.data={};
msg.data.fromOther = 0;
youle_agent.app.SendPack(msg);
//测试用
// var agent_kick_offline = {};
// agent_kick_offline.agentid = o_game.o_agent.agentid;
// agent_kick_offline.gameid = o_game.gameid;
// agent_kick_offline.playerid = o_player.playerid;
// agent_kick_offline.oldfromid = _game_info.fromid;
// agent_kick_offline.oldtime = _game_info.fromidtime;
// agent_kick_offline.oldmachineid = _game_info.machineid;
// agent_kick_offline.oldmachineroom = _game_info.machineroom;
// agent_kick_offline.newfromid = fromid;
// agent_kick_offline.newtime = (new Date()).getTime();
// agent_kick_offline.newmachineid = machineid;
// agent_kick_offline.newmachineroom = machineroom;
// console.log(min_now() + " agentserver kick_offline");
// console.log(agent_kick_offline);
}
//更新游戏信息
_game_info.conmode = conmode;
_game_info.fromid = fromid;
_game_info.fromidtime = (new Date()).getTime();
_game_info.ip = ip;
}
}
//更新tcp连接列表
if (conmode == "tcp"){
youle_agent.tcps.method.load_tcp(fromid, o_player, o_game.idx);
}
},
//获取玩家某个游戏的游戏信息
get_gameinfo: function(o_player, o_game){
if (o_player.gameinfo.length <= o_game.idx){
return null;
}
return o_player.gameinfo[o_game.idx];
},
//修改玩家房卡数量
update_roomcard: function(o_player, type, newroomcard, change, memo){
var roomCardName = youle_agent.app.youle_platform.config.method.get_paravalue("roomCardName", o_player.o_agent.agentid);
if (!roomCardName){
roomCardName = "房卡";
}
o_player.roomcard = newroomcard;
//通知游戏前端
for (var i = 0; i < o_player.gameinfo.length; i++) {
var _game_info = o_player.gameinfo[i];
if (_game_info){
if (_game_info.roomcode){
//获取房号对应的房间服务器地址
var o_game = o_player.o_agent.games[i];
if (!o_game) {
continue;
}
var o_roomserver = o_game.method.get_roomserver(_game_info.roomcode);
//通过房间服务器发送修改房卡的消息
var msg = {};
msg.app = youle_agent.app.appname;
msg.route = youle_agent.app.youle_room.routename;
msg.rpc = "update_roomcard";
msg.data = {};
msg.data.agentid = o_player.o_agent.agentid;
msg.data.playerid = o_player.playerid;
msg.data.gameid = o_game.gameid;
msg.data.roomcode = _game_info.roomcode;
msg.data.roomcard = newroomcard;
// msg.data.type = type;
// msg.data.change = change;
switch(type){
case 0:
msg.data.text = "扣除" + roomCardName + "" + change;
if (memo){
msg.data.text = memo + msg.data.text;
}
break;
case 1:
msg.data.text = "购买" + roomCardName + "" + change;
break;
case 2:
msg.data.text = roomCardName + "充值:" + change;
break;
case 3:
msg.data.text = "领取" + roomCardName + "奖励:" + change;
break;
case 4:
msg.data.text = "修改" + roomCardName + "" + change;
break;
}
if (o_roomserver.server == o_player.o_agent.server){
//房间服务器与代理商服务器是同一地址
youle_agent.app.youle_room[msg.rpc](msg);
msg.data.issameserver = 1;
} else {
//房间服务器与代理商服务器不是同一地址
msg.data.issameserver = 0;
var cfg = {};
cfg.url = "http://" + o_roomserver.server + ":" + o_roomserver.httpport + "/index.html";
cfg.type = "POST";
cfg.data = JSON.stringify(msg);
cfg.success = function(str){};
cfg.error = function(str){};
min_http(cfg);
}
} else if (_game_info.conmode && _game_info.fromid){
var msg = {};
msg.app = youle_agent.app.appname;
msg.route = youle_agent.routename;
msg.rpc = "update_roomcard";
msg.conmode = _game_info.conmode;
msg.fromid = _game_info.fromid;
msg.data = {};
msg.data.roomcard = newroomcard;
// msg.data.type = type;
// msg.data.change = change;
switch(type){
case 0:
msg.data.text = "扣除" + roomCardName + "" + change;
if (memo){
msg.data.text = memo + msg.data.text;
}
break;
case 1:
msg.data.text = "购买" + roomCardName + "" + change;
break;
case 2:
msg.data.text = roomCardName + "充值:" + change;
break;
case 3:
msg.data.text = "领取" + roomCardName + "奖励:" + change;
break;
case 4:
msg.data.text = "修改" + roomCardName + "" + change;
break;
}
youle_agent.app.SendPack(msg);
}
}
}
},
//修改玩家豆豆数量
update_bean: function(o_player, type, newbean, change, push, showrebate){
o_player.bean = parseInt(newbean);
var starName = youle_agent.app.youle_platform.config.method.get_paravalue("starName", o_player.o_agent.agentid);
if (!starName){
starName = "星星";
}
//通知游戏前端
for (var i = 0; i < o_player.gameinfo.length; i++) {
var _game_info = o_player.gameinfo[i];
if (_game_info){
if (_game_info.roomcode){
//获取房号对应的房间服务器地址
var o_game = o_player.o_agent.games[i];
var o_roomserver = o_game.method.get_roomserver(_game_info.roomcode);
//通过房间服务器发送修改星星的消息
var msg = {};
msg.app = youle_agent.app.appname;
msg.route = youle_agent.app.youle_room.routename;
msg.rpc = "update_bean";
msg.data = {};
msg.data.agentid = o_player.o_agent.agentid;
msg.data.playerid = o_player.playerid;
msg.data.gameid = o_game.gameid;
msg.data.roomcode = _game_info.roomcode;
msg.data.bean = parseInt(newbean);
msg.data.type = type;
switch(type){
case 0: //游戏输赢豆豆
var _text = "";
if (!showrebate){
if (change > 0){
_text = "游戏赢取" + starName + "" + change;
} else if (change < 0) {
_text = "游戏扣除" + starName + "" + change;
}
var _showrebate_setting = youle_agent.app.youle_platform.config.method.get_paravalue("shieldShowRebate", o_player.o_agent.agentid);
if (!_showrebate_setting){
if (push > 0){
_text = _text + " 获取" + starName + "房间费:" + push;
} else if (push < 0) {
_text = _text + " 扣除" + starName + "房间费:" + push;
}
}
} else if (showrebate == 1){
if (change + push > 0){
_text = "游戏赢取" + starName + "" + (change + push);
} else if (change + push < 0) {
_text = "游戏扣除" + starName + "" + (change + push);
}
} else if (showrebate == 2){
var _showrebate_setting = youle_agent.app.youle_platform.config.method.get_paravalue("shieldShowRebate", o_player.o_agent.agentid);
if (!_showrebate_setting){
if(push){
_text = "扣除房间费:" + push + starName;
}
}
}
msg.data.text = _text;
break;
case 1:
msg.data.text = "购买" + starName + "" + change;
break;
case 2:
msg.data.text = starName + "充值:" + change;
break;
case 3:
break;
case 4:
// msg.data.text = "扣除发送系统消息费用:" + change + starName;
msg.data.text="";
break;
case 5:
msg.data.text = "扣除比赛报名费用:" + push + starName;
break;
//需要语音提示的房主抽成金币到账
case 6:
//msg.data.text = "扣除比赛报名费用:" + push + starName;
break;
case 7:
if(change > 0){
msg.data.text = "获赠" + change + starName;
}else{
msg.data.text = "送出" + Math.abs(change) + starName;
}
break;
}
if (o_roomserver.server == o_player.o_agent.server){
//房间服务器与代理商服务器是同一地址
youle_agent.app.youle_room[msg.rpc](msg);
} else {
//房间服务器与代理商服务器不是同一地址
var cfg = {};
cfg.url = "http://" + o_roomserver.server + ":" + o_roomserver.httpport + "/index.html";
cfg.type = "POST";
cfg.data = JSON.stringify(msg);
cfg.success = function(str){};
cfg.error = function(str){};
min_http(cfg);
}
} else if (_game_info.conmode && _game_info.fromid){
var msg = {};
msg.app = youle_agent.app.appname;
msg.route = youle_agent.routename;
msg.rpc = "update_bean";
msg.conmode = _game_info.conmode;
msg.fromid = _game_info.fromid;
msg.data = {};
msg.data.bean = parseInt(newbean);
msg.data.type=type;
switch(type){
case 0: //游戏输赢豆豆
var _text = "";
if (!showrebate){
if (change > 0){
_text = "游戏赢取" + starName + "" + change;
} else if (change < 0) {
_text = "游戏扣除" + starName + "" + change;
}
var _showrebate_setting = youle_agent.app.youle_platform.config.method.get_paravalue("shieldShowRebate", o_player.o_agent.agentid);
if(!_showrebate_setting){
if (push > 0){
_text = _text + " 获取" + starName + "房间费:" + push;
} else if (push < 0) {
_text = _text + " 扣除" + starName + "房间费:" + push;
}
}
} else if (showrebate == 1){
if (change + push > 0){
_text = "游戏赢取" + starName + "" + (change + push);
} else if (change + push < 0) {
_text = "游戏扣除" + starName + "" + (change + push);
}
} else if (showrebate == 2){
var _showrebate_setting = youle_agent.app.youle_platform.config.method.get_paravalue("shieldShowRebate", o_player.o_agent.agentid);
if (!_showrebate_setting){
if(push){
_text = "扣除房间费:" + push + starName;
}
}
}
msg.data.text = _text;
break;
case 1:
msg.data.text = "购买" + starName + "" + change;
break;
case 2:
msg.data.text = starName + "充值:" + change;
break;
case 3:
msg.data.text = "领取" + starName +"奖励:" + change;
break;
case 7:
if(change > 0){
msg.data.text = "获赠" + change + starName;
}else{
msg.data.text = "送出" + Math.abs(change) + starName;
}
break;
}
youle_agent.app.SendPack(msg);
}
}
}
},
//打开释放玩家的定时器
open_free_timer: function(o_player){
var do_freeplayer = function(){
o_player.freetimer = null;
o_player.o_agent.players[o_player.playerid - 100001] = null;
}
if (!o_player.advanced){
//4小时后释放玩家
o_player.freetimer = min_ontimeout(do_freeplayer, 7 * 24 * 60 * 60 * 1000);
}
},
//关闭释放玩家的定时器
close_free_timer: function(o_player){
if (o_player.freetimer){
min_closetime(o_player.freetimer);
o_player.freetimer = null;
}
}
}