Exemplo n.º 1
0
        /// <summary>
        /// This will return true if the player was successfully added.
        /// It will return false if the player was not found in the OfflinePlayers dictionary (which should never happen), or player already exists in the OnlinePlayers dictionary (which should never happen).
        /// This will always be preceded by a call to GetOfflinePlayer()
        /// </summary>
        public static bool SwitchPlayerFromOfflineToOnline(Player player)
        {
            playersLock.EnterWriteLock();
            try
            {
                if (!offlinePlayers.Remove(player.Guid.Full, out var offlinePlayer))
                {
                    return(false); // This should never happen
                }
                if (offlinePlayer.ChangesDetected)
                {
                    player.ChangesDetected = true;
                }

                player.Allegiance     = offlinePlayer.Allegiance;
                player.AllegianceNode = offlinePlayer.AllegianceNode;

                if (!onlinePlayers.TryAdd(player.Guid.Full, player))
                {
                    return(false);
                }
            }
            finally
            {
                playersLock.ExitWriteLock();
            }

            AllegianceManager.LoadPlayer(player);

            player.SendFriendStatusUpdates();

            return(true);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns TRUE if a player currently meets all of the requirements for owning their house (allegiance rank)
        /// </summary>
        private static bool HasRequirements(PlayerHouse playerHouse)
        {
            if (!PropertyManager.GetBool("house_purchase_requirements").Item)
            {
                return(true);
            }

            var slumlord = playerHouse.House.SlumLord;

            if (slumlord.AllegianceMinLevel == null)
            {
                return(true);
            }

            var allegianceMinLevel = PropertyManager.GetLong("mansion_min_rank", -1).Item;

            if (allegianceMinLevel == -1)
            {
                allegianceMinLevel = slumlord.AllegianceMinLevel.Value;
            }

            var player = PlayerManager.FindByGuid(playerHouse.PlayerGuid);

            if (player == null)
            {
                log.Info($"{playerHouse.PlayerName}.HasRequirements() - couldn't find player");
                return(false);
            }

            // ensure allegiance is loaded
            var allegiance = AllegianceManager.GetAllegiance(player);

            AllegianceNode allegianceNode = null;

            if (allegiance != null)
            {
                allegiance.Members.TryGetValue(player.Guid, out allegianceNode);
            }

            var rank = allegianceNode != null ? allegianceNode.Rank : 0;

            if (allegiance == null || rank < allegianceMinLevel)
            {
                log.Info($"{playerHouse.PlayerName}.HasRequirements() - allegiance rank {rank} < {allegianceMinLevel}");
                return(false);
            }
            return(true);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Called when a character is initially deleted on the character select screen
        /// </summary>
        public static void HandlePlayerDelete(uint characterGuid)
        {
            AllegianceManager.HandlePlayerDelete(characterGuid);

            HouseManager.HandlePlayerDelete(characterGuid);
        }