//开始进入战斗 internal ErrorCode BeginBattle( long userID, int mapID, int serverID, out GameServerInfo serverInfo) { serverInfo = null; var battleServer = ServerManager.Singleton.GetFreeBattleServerID(); if (battleServer == null) { return(ErrorCode.NOFreeBattleServer); } UserServerInfo user; if (_servers.TryToGetValue(userID, out user)) { var task = new Task_L2B_ExitUser { UserID = user.UserID }; var b = ServerManager.Singleton.GetBattleServerMappingByServerID(user.BattleServerID); var bClient = Appliaction.Current.GetServerConnectByClientID(b.ClientID); if (bClient != null) { NetProtoTool.SendTask(bClient, task); //bClient.SendMessage(m); } return(ErrorCode.PlayerIsInBattle); } var su = _servers.Add( userID, new UserServerInfo { MapID = mapID, BattleServerID = battleServer.ServerInfo.ServerID, GServerID = serverID, UserID = userID }); if (su) { serverInfo = battleServer.ServerInfo; var gateserver = ServerManager.Singleton.GetGateServerMappingByServerID(serverID); var task = new Task_L2B_StartBattle { MapID = mapID, Users = new List <PlayerServerInfo> { new PlayerServerInfo { UserID = userID, ServerID = serverID, ServiceHost = gateserver.ServiceHost, ServicePort = gateserver.ServicePort } } }; //task //var message = NetProtoTool.ToNetMessage(XNet.Libs.Net.MessageClass.Task, task); var serverConnect = Appliaction.Current.GetServerConnectByClientID(battleServer.ClientID); if (serverConnect == null) { _servers.Remove(userID); return(ErrorCode.BattleServerHasDisconnect); } NetProtoTool.SendTask(serverConnect, task); //serverConnect.SendMessage(message); return(Proto.ErrorCode.OK); } else { return(Proto.ErrorCode.PlayerIsInBattle); } }
public override L2C_Login DoResponse(C2L_Login request, Client client) { if (!ProtoTool.CompareVersion(request.Version)) { return(new L2C_Login { Code = ErrorCode.VersionError }); } using (var db = Appliaction.Current.GetDBContext()) { var pwd = DBTools.GetPwd(request.Password, db); var query = db.TbaCCount .Where(t => t.UserName == request.UserName && t.Password == pwd) .SingleOrDefault(); if (query == null) { return(new L2C_Login { Code = ErrorCode.LoginFailure }); } else { var session = DateTime.UtcNow.Ticks.ToString(); Appliaction.Current.SetSession(query.ID, session); query.LastLoginDateTime = DateTime.UtcNow; query.LoginCount += 1; db.SubmitChanges(); var mapp = ServerManager.Singleton.GetGateServerMappingByServerID(query.ServerID); if (mapp == null) { return(new L2C_Login { Code = ErrorCode.NOFoundServerID }); } UserServerInfo info; if (BattleManager.Singleton.GetBattleServerByUserID(query.ID, out info)) { var task = new Task_L2B_ExitUser { UserID = query.ID }; var server = ServerManager.Singleton.GetBattleServerMappingByServerID(info.BattleServerID); if (server != null) { var connection = Appliaction.Current.GetServerConnectByClientID(server.ClientID); if (connection != null) { var message = NetProtoTool.ToNetMessage(MessageClass.Task, task); connection.SendMessage(message); } } } return(new L2C_Login { Code = ErrorCode.OK, Server = mapp.ServerInfo, Session = session, UserID = query.ID }); } } }