/// <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); }
/// <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); }
/// <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); }