コード例 #1
0
    public PrefabInstance FindPrefabsNear()
    {
        var pos = this.theEntity.position;

        EntityPlayer player = null;

        if (this.theEntity.Buffs.HasCustomVar("Leader"))
        {
            player = theEntity.world.GetEntity((int)this.theEntity.Buffs.GetCustomVar("Leader")) as EntityPlayerLocal;
        }
        else
        {
            return(null);
        }
        if (theEntity)
        {
            DynamicPrefabDecorator dynamicPrefabDecorator = GameManager.Instance.World.ChunkCache.ChunkProvider.GetDynamicPrefabDecorator();
            if (dynamicPrefabDecorator == null)
            {
                return(null);
            }
            Vector3 position = player.position;
            int     num      = (player.ChunkObserver == null) ? GamePrefs.GetInt(EnumGamePrefs.OptionsViewDistance) : player.ChunkObserver.viewDim;
            num = (num - 1) * 16;
            if (!player.isEntityRemote)
            {
                dynamicPrefabDecorator.GetPrefabsAround(position, (float)num, (float)1000f, this.prefabsAroundFar, this.prefabsAroundNear, true);
                GameManager.Instance.prefabLODManager.UpdatePrefabsAround(this.prefabsAroundFar, this.prefabsAroundNear);
            }
            return(this.prefabsAroundNear.Values.FirstOrDefault(d => pos.x >= d.boundingBoxPosition.x && pos.x < d.boundingBoxPosition.x + d.boundingBoxSize.x && pos.z >= d.boundingBoxPosition.z && pos.z < d.boundingBoxPosition.z + d.boundingBoxSize.z));
        }
        return(null);
    }
コード例 #2
0
            //NOTE : Requires  [{daycolor|always}] variable in xml element 'windowCompass' in file windows.xml

            static void Postfix(XUiC_CompassWindow __instance, ref string value, ref BindingItem binding)
            {
                string fieldName = binding.FieldName;

                if (fieldName != null && fieldName == "daycolor")
                {
                    value = "FFFFFF";
                    if (XUi.IsGameRunning())
                    {
                        int v4      = GameUtils.WorldTimeToDays(GameManager.Instance.World.worldTime);
                        int warning = GameStats.GetInt(EnumGameStats.BloodMoonWarning);
                        if (warning != -1)
                        {
                            int bloodMoon = GameStats.GetInt(EnumGameStats.BloodMoonDay);
                            if (v4 == bloodMoon)
                            {
                                value = "FF0000";
                            }

                            // Only highlight previous 2 days if the BM is on a fixed cycle, i.e. every 3 days otherwise the warning willm spoil the suprise!
                            if (GamePrefs.GetInt(EnumGamePrefs.BloodMoonRange) == 0)
                            {
                                if (v4 == bloodMoon - 1)
                                {
                                    value = "FFA500";
                                }
                                else if (v4 == bloodMoon - 2)
                                {
                                    value = "FFFF00";
                                }
                            }
                        }
                    }
                }
            }
コード例 #3
0
 public static void PlayerLoginRPC_Prefix(ClientInfo _cInfo, string _playerName, ValueTuple <PlatformUserIdentifierAbs, string> _platformUserAndToken, ValueTuple <PlatformUserIdentifierAbs, string> _crossplatformUserAndToken, out bool __state)
 {
     __state = false;
     try
     {
         if (_platformUserAndToken.Item1 != null && _crossplatformUserAndToken.Item1 != null)
         {
             if (ReservedSlots.IsEnabled)
             {
                 int maxPlayers = GamePrefs.GetInt(EnumGamePrefs.ServerMaxPlayerCount);
                 if (ConnectionManager.Instance.ClientCount() > maxPlayers && ReservedSlots.FullServer(_cInfo, _platformUserAndToken.Item1, _crossplatformUserAndToken.Item1))
                 {
                     GamePrefs.Set(EnumGamePrefs.ServerMaxPlayerCount, maxPlayers + 1);
                     __state = true;
                     return;
                 }
             }
         }
     }
     catch (Exception e)
     {
         Log.Out(string.Format("[SERVERTOOLS] Error in Injections.PlayerLoginRPC_Prefix: {0}", e.Message));
     }
 }
コード例 #4
0
        public static void Load()
        {
            if (!Directory.Exists(API.ConfigPath))
            {
                Directory.CreateDirectory(API.ConfigPath);
                Log.Out(string.Format("[SERVERTOOLS] Created new directory '{0}'", API.ConfigPath));
            }
            else
            {
                Log.Out(string.Format("[SERVERTOOLS] Located directory '{0}'", API.ConfigPath));
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/ChatLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/ChatLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/DetectionLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/DetectionLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/BountyLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/BountyLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/AuctionLog"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/AuctionLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/BankLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/BankLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/DupeLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/DupeLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/PlayerLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/PlayerLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/PlayerReports"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/PlayerReports");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/PollLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/PollLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/ChatCommandLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/ChatCommandLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/DamageLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/DamageLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/BlockLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/BlockLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/ConsoleCommandLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/ConsoleCommandLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/WebPanelLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/WebPanelLogs");
            }
            if (!Directory.Exists(API.ConfigPath + "/Logs/OutputLogs"))
            {
                Directory.CreateDirectory(API.ConfigPath + "/Logs/OutputLogs");
            }
            if (!Directory.Exists(API.GamePath + "/Mods/ServerTools/Config"))
            {
                Directory.CreateDirectory(API.GamePath + "/Mods/ServerTools/Config");
            }
            if (!Directory.Exists(API.GamePath + "/Mods/ServerTools/Config/XUi"))
            {
                Directory.CreateDirectory(API.GamePath + "/Mods/ServerTools/Config/XUi");
            }

            StateManager.Awake();

            RunTimePatch.PatchAll();

            Config.Load();
            Log.Out("[SERVERTOOLS] Running ServerTools v.{0}", Config.Version);

            CommandList.BuildList();
            CommandList.Load();

            PersistentOperations.SetFolders();
            PersistentOperations.CreateCustomXUi();
            PersistentOperations.GetCurrencyName();
            PersistentOperations.EntityIdList();
            PersistentOperations.Player_Killing_Mode = GamePrefs.GetInt(EnumGamePrefs.PlayerKillingMode);

            Mods.Load();

            Phrases.Load();

            HowToSetup.Load();

            if (Fps.IsEnabled)
            {
                Fps.SetTarget();
            }

            if (SleeperRespawn.IsEnabled)
            {
                try
                {
                    SingletonMonoBehaviour <SdtdConsole> .Instance.ExecuteSync(string.Format("sleeperreset"), null);
                }
                catch (XmlException e)
                {
                    Log.Out("[SERVERTOOLS] Failed to reset sleeper spawn points. Error = {0}", e.Message);
                }
            }
            try
            {
                DeleteFiles("DetectionLogs");
                DeleteFiles("BountyLogs");
                DeleteFiles("AuctionLogs");
                DeleteFiles("BankLogs");
                DeleteFiles("DupeLogs");
                DeleteFiles("PlayerLogs");
                DeleteFiles("PlayerReports");
                DeleteFiles("PollLogs");
                DeleteFiles("ChatLogs");
                DeleteFiles("ChatCommandLogs");
                DeleteFiles("DamageLogs");
                DeleteFiles("BlockLogs");
                DeleteFiles("ConsoleCommandLogs");
                DeleteFiles("WebPanelLogs");
                DeleteFiles("OutputLogs");
                Log.Out(string.Format("[SERVERTOOLS] Xml log clean up complete"));
            }
            catch (XmlException e)
            {
                Log.Out("[SERVERTOOLS] Failed to delete old logs. Error = {0}", e.Message);
            }

            if (PersistentContainer.Instance.WorldSeed == 0)
            {
                PersistentContainer.Instance.WorldSeed = GameManager.Instance.World.Seed;
                PersistentContainer.DataChange         = true;
            }
            else if (PersistentContainer.Instance.WorldSeed != GameManager.Instance.World.Seed)
            {
                PersistentContainer.Instance.WorldSeed = GameManager.Instance.World.Seed;
                PersistentContainer.DataChange         = true;
                if (!CleanBin.IsEnabled && PersistentContainer.Instance.Players.IDs.Count > 0)
                {
                    Log.Out("[SERVERTOOLS] Detected a new world. You have old ServerTools data saved from the last map. Run the Clean_Bin tool to remove the data of your choice");
                }
            }

            if (PersistentContainer.Instance.Connections == null)
            {
                Dictionary <string, byte[]> connections = new Dictionary <string, byte[]>();
                PersistentContainer.Instance.Connections = connections;
                Dictionary <string, DateTime> timeOuts = new Dictionary <string, DateTime>();
                PersistentContainer.Instance.ConnectionTimeOut = timeOuts;
                PersistentContainer.DataChange = true;
            }

            if (CleanBin.IsEnabled)
            {
                CleanBin.Exec();
                Log.Out("[SERVERTOOLS] ServerTools.bin has been cleaned. The tool will now disable automatically");
                CleanBin.IsEnabled = false;
                Config.WriteXml();
                Config.LoadXml();
            }

            Track.Cleanup();

            DroppedBagProtection.BuildList();
            BlackJack.BuildDeck();

            ActiveTools.Exec(true);

            Timers.Thirty_Second_Delay();
            Timers.PersistentDataSave();
        }