Exemple #1
0
    // 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);
    }
Exemple #3
0
    // 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.");
        }
    }
Exemple #4
0
    // 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);
    }