// Save position in database void SavePosition() { // Did we already save the position? if (position == lastPositionSaved) { return; } // Only save position when we already loaded it and respawned if (respawnCount == 0) { return; } // Account ID not available for some reason? if (string.IsNullOrEmpty(accountId)) { return; } // Save in DB PositionsDB.SetPosition(accountId, position, null); lastPositionSaved = position; }
void ActivatePortal(string mapName, uLink.NetworkMessageInfo info) { if (info.sender != networkView.owner) { return; } // Account available? if (string.IsNullOrEmpty(accountId)) { LogError("ActivatePortal: Account ID not available"); return; } // Log Log("Activated portal to: " + mapName); // Stop saving position positionSavingDisabled = true; // Delete position PositionsDB.RemovePosition(accountId); }
// Retrieves the player information IEnumerator RetrievePlayerInformation(uLink.NetworkPlayer networkPlayer, string accountId) { LogManager.General.Log("Retrieving player information for account " + accountId); var bucket = new Bucket("AccountToName"); var request = bucket.Get(accountId); yield return(request.WaitUntilDone()); if (request.isSuccessful) { string playerName = request.GetValue <string>(); LogManager.General.Log("Queried player name of '" + accountId + "' successfully: " + playerName); // Assign party int partyId = GetPartyId(accountId); var party = GameServerParty.partyList[partyId]; // Respawn position Vector3 respawnPosition; float cameraYRotation = 0f; if (GameManager.isPvE) { PortalDB.GetPortal(accountId, portalInfo => { // Player did not come via a portal if (portalInfo == null) { PositionsDB.GetPosition(accountId, data => { if (data != null) { respawnPosition = data.ToVector3(); LogManager.General.Log("Found player position: Respawning at " + respawnPosition); } else { respawnPosition = party.spawn.GetNextSpawnPosition(); LogManager.General.Log("Couldn't find player position: Respawning at " + respawnPosition); // Adjust camera rotation cameraYRotation = party.spawn.cameraYRotation; } // Instantiate the player InstantiatePlayer(networkPlayer, accountId, playerName, respawnPosition, cameraYRotation, partyId); }); // Player did come via a portal } else { var portals = GameObject.FindGameObjectsWithTag("Portal"); foreach (var portalObject in portals) { var portal = portalObject.GetComponent <Portal>(); if (portal.mapName == portalInfo.mapName) { var spawn = portal.spawns[Random.Range(0, portal.spawns.Length - 1)]; respawnPosition = spawn.position; // Respawn LogManager.General.Log("Player came via a portal: Respawning at " + respawnPosition); // Adjust camera rotation cameraYRotation = portal.cameraYRotation; // Update position to be 100% sure our position data is correct now PositionsDB.SetPosition(accountId, respawnPosition); // Delete portal info so we won't use it again PortalDB.RemovePortal(accountId); // Instantiate the player InstantiatePlayer(networkPlayer, accountId, playerName, respawnPosition, cameraYRotation, partyId); break; } } } }); } else { respawnPosition = party.spawn.GetNextSpawnPosition(); LogManager.General.Log("PvP game: Respawning at " + respawnPosition); // Instantiate the player InstantiatePlayer(networkPlayer, accountId, playerName, respawnPosition, cameraYRotation, partyId); } } else { LogManager.General.LogError("Account " + accountId + " doesn't have a player name."); } }
// Start void Start() { // Player playerCommands = new ChatCommand <LobbyPlayer>[] { // practice new ChatCommand <LobbyPlayer>( @"^practice$", (player, args) => { if (!player.inMatch) { LobbyQueue.CreatePracticeMatch(player); } else { // Notify player ... } } ), // online new ChatCommand <LobbyPlayer>( @"^online$", (player, args) => { LobbyServer.SendSystemMessage(player, "Players online: " + LobbyPlayer.list.Count); } ) }; // VIP vipCommands = new ChatCommand <LobbyPlayer>[] { // list new ChatCommand <LobbyPlayer>( @"^list$", (player, args) => { LobbyServer.SendSystemMessage(player, "Town: " + LobbyTown.running.Count); LobbyServer.SendSystemMessage(player, "World: " + LobbyWorld.running.Count); LobbyServer.SendSystemMessage(player, "Arena: " + LobbyMatch.running.Count); LobbyServer.SendSystemMessage(player, "FFA: " + LobbyFFA.running.Count); } ) }; // Community Manager communityManagerCommands = new ChatCommand <LobbyPlayer>[] { // goto new ChatCommand <LobbyPlayer>( @"^goto ([^ ]+) (.*)$", (player, args) => { var serverType = ChatServer.GetServerType(args[0]); var mapName = args[1]; player.location = new PlayerLocation(mapName, serverType); } ), // moveToPlayer new ChatCommand <LobbyPlayer>( @"^moveToPlayer (.*)$", (player, args) => { var playerName = args[1]; LobbyGameDB.GetAccountIdByPlayerName(playerName, accountId => { if (accountId == null) { return; } PositionsDB.GetPosition(accountId, position => { if (position == null) { position = new PlayerPosition(); } LocationsDB.GetLocation(accountId, location => { if (location == null) { return; } // TODO: This is not 100% correct as it might get overwritten by the server PositionsDB.SetPosition(player.accountId, position); player.location = location; }); }); }); } ), }; // Game Master gameMasterCommands = new ChatCommand <LobbyPlayer>[] { // start new ChatCommand <LobbyPlayer>( @"^start ([^ ]+) (.*)$", (player, args) => { var serverType = ChatServer.GetServerType(args[0]); var mapName = args[1]; switch (serverType) { case ServerType.FFA: new LobbyFFA(mapName).Register(); break; case ServerType.Town: new LobbyTown(mapName).Register(); break; } } ), }; // Admin adminCommands = new ChatCommand <LobbyPlayer>[] { }; // Make this class listen to lobby events Lobby.AddListener(this); }