コード例 #1
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            GameAPI  = dediAPI;
            LogLevel = EmpyrionNetAPIDefinitions.LogLevel.Debug;

            TaskTools.Intervall(60, CheckTimetable);
        }
コード例 #2
0
        private void Application_OnPlayfieldLoaded(IPlayfield playfield)
        {
            PlayfieldScriptData data = null;

            InitGameDependedData(ModApi.Application.Mode == ApplicationMode.SinglePlayer);

            PlayfieldData.TryAdd(playfield.Name, data = new PlayfieldScriptData(this)
            {
                PlayfieldName = playfield.Name,
                Playfield     = playfield,
            });

            UpdateScriptingModInfoData();

            ModApi.Log($"StartScripts for {playfield.Name} pending");
            TaskTools.Delay(Configuration.Current.DelayStartForNSecondsOnPlayfieldLoad, () => {
                ModApi.Log($"StartScripts for {playfield.Name}");
                data.PauseScripts = false;

                if (ModApi.Application.Mode == ApplicationMode.SinglePlayer)
                {
                    ModApi.Log(playfield.Entities?.Aggregate($"Player:{playfield.Players.FirstOrDefault().Value?.Name} PlayerDriving:{playfield.Players.FirstOrDefault().Value?.DrivingEntity?.Name}", (L, E) => L + $" {E.Key}:{E.Value.Name}"));

                    data.AddEntity(playfield.Players.FirstOrDefault().Value?.DrivingEntity);
                    playfield.Entities?.ForEach(E => data.AddEntity(E.Value));
                }
            });

            data.Playfield.OnEntityLoaded   += data.Playfield_OnEntityLoaded;
            data.Playfield.OnEntityUnloaded += data.Playfield_OnEntityUnloaded;
        }
コード例 #3
0
        public bool ModsStarted()
        {
            if (!CheckModHostStatusStarted)
            {
                CheckModHostStatusStarted = true;
                TaskTools.Intervall(1000, CheckModHostStatus);
            }

            Process EGSProcess = null;

            try {
                if (SysteminfoManager.Value.ProcessInformation == null)
                {
                    return(false);
                }
                EGSProcess = Process.GetProcessById(SysteminfoManager.Value.ProcessInformation.Id);

                var AllChilds = EGSProcess?.GetChildProcesses().ToList();

                // Fallback falls die Processinfos nicht existieren
                if (AllChilds == null || AllChilds.Count == 0)
                {
                    return(!File.Exists(StopFileName));
                }

                var ESGChildProcesses = AllChilds.Where(P => P.ProcessName.StartsWith("EmpyrionModHost", StringComparison.InvariantCultureIgnoreCase)).ToArray();

                return(ESGChildProcesses?.FirstOrDefault() != null);
            }
            catch
            {
                // Fallback falls die Processinfos nicht existieren
                return(!File.Exists(StopFileName));
            }
        }
コード例 #4
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            GameAPI = dediAPI;

            try
            {
                Log($"**EmpyrionGalaxyNavigator loaded: {string.Join(" ", Environment.GetCommandLineArgs())}", LogLevel.Message);

                LoadConfiguration();
                LogLevel = Configuration.Current.LogLevel;
                ChatCommandManager.CommandPrefix = Configuration.Current.ChatCommandPrefix;

                GalaxyMap = new GalaxyMap {
                    GalaxyAutoUpdateMinutes = Configuration.Current.GalaxyAutoUpdateMinutes
                };
                GalaxyMap.ReadDbData(Path.Combine(EmpyrionConfiguration.SaveGamePath, "global.db"));

                ChatCommands.Add(new ChatCommand(@"nav help", (I, A) => DisplayHelp(I.playerId), "display help"));
                ChatCommands.Add(new ChatCommand(@"nav stop", (I, A) => StopNavigation(I.playerId), "stops navigation"));
                ChatCommands.Add(new ChatCommand(@"nav updategalaxy", (I, A) => UpdateGalayMap(I.playerId), "force update the galaxy db"));
                ChatCommands.Add(new ChatCommand(@"nav setwarp (?<LY>.*)", (I, A) => SetWarpDistance(I.playerId, A), "set the warp distance for navigation to (LY)"));
                ChatCommands.Add(new ChatCommand(@"nav (?<target>.*)", (I, A) => StartNavigation(I.playerId, A), "start a navigation to (target)"));

                Event_Player_ChangedPlayfield += Navigator_Event_Player_ChangedPlayfield;

                TaskTools.Intervall(Configuration.Current.MessageLoopMS, () => { try { CheckPlayerNavMessages().Wait(); } catch { } });
            }
            catch (Exception Error)
            {
                Log($"**EmpyrionGalaxyNavigator Error: {Error} {string.Join(" ", Environment.GetCommandLineArgs())}", LogLevel.Error);
            }
        }
コード例 #5
0
ファイル: DataControl.cs プロジェクト: wsmyaopeng/WCS-1
        private static bool init = false;//是否已经初始化

        public static void Init()
        {
            if (!init)
            {
                init = true;

                _mSocket = new SocketControl();

                _mMySql = new MySQL();

                _mStools = new SimpleTools();

                _mTaskTools = new TaskTools();

                _mHttpServer = new HttpServerControl();

                _mHttp = new HttpControl();

                _mNDCControl = new NDCControl();

                _mTaskControler = new TaskControler();

                _mRunTask = new RunTask();

                _mForAGVControl = new ForAGVControl();

                _mNDCControl.NoticeWcsMagic  += _mForAGVControl.SubmitAgvMagic;
                _mNDCControl.NoticeWcsOnLoad += _mForAGVControl.SubmitAgvLoading;

                _mForWmsControl = new ForWMSControl();

                _mHttpServer.WmsModelAdd += _mForWmsControl.WriteTaskToWCS;
            }
        }
コード例 #6
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            GameAPI  = dediAPI;
            LogLevel = EmpyrionNetAPIDefinitions.LogLevel.Debug;

            PlayerManager = Program.GetManager <PlayerManager>();

            TaskTools.Intervall(2000, () => SysteminfoHub?.Clients.All.SendAsync("UPC", JsonConvert.SerializeObject(new {
                o    = CurrentSysteminfo.online,
                ap   = CurrentSysteminfo.activePlayers,
                apf  = CurrentSysteminfo.activePlayfields,
                c    = CurrentSysteminfo.cpuTotalLoad,
                r    = CurrentSysteminfo.ramAvailableMB,
                tpf  = CurrentSysteminfo.totalPlayfieldserver,
                tpfm = CurrentSysteminfo.totalPlayfieldserverRamMB,
            })).Wait(1000));
            TaskTools.Intervall(30000, () => SysteminfoHub?.Clients.All.SendAsync("Update", JsonConvert.SerializeObject(CurrentSysteminfo)).Wait(1000));
            TaskTools.Intervall(5000, UpdateEmpyrionInfos);
            TaskTools.Intervall(5000, UpdateComputerInfos);
            TaskTools.Intervall(2000, UpdatePerformanceInfos);

            CpuTotalLoad = new PerformanceCounter
            {
                CategoryName = "Processor",
                CounterName  = "% Processor Time",
                InstanceName = "_Total"
            };

            RamAvailable = new PerformanceCounter("Memory", "Available MBytes");
        }
コード例 #7
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            GameAPI = dediAPI;

            API_Exit += () => { try { System.IO.File.Delete(CurrentEBPFile); } catch { } };

            TaskTools.Intervall(Math.Max(1, Program.AppSettings.GlobalStructureUpdateInSeconds) * 1000, () => GlobalStructureList());
        }
コード例 #8
0
 public void Start()
 {
     Instance       = this;
     taskDic        = new Dictionary <int, RunTaskStruct>();
     taskHandleDic  = new Dictionary <RunTaskStruct, RunTaskStruct.RunTaskStructHandle>();
     taskList       = new List <RunTaskStruct>();
     removeTaskList = new List <RunTaskStruct>();
 }
コード例 #9
0
 private void Application_OnPlayfieldLoaded(string playfieldName)
 {
     ModApi.Log($"StartScripts for {playfieldName} pending");
     TaskTools.Delay(Configuration.Current.DelayStartForNSecondsOnPlayfieldLoad, () => {
         ModApi.Log($"StartScripts for {playfieldName}");
         PauseScripts = false;
     });
 }
コード例 #10
0
 private void GameplayManager_Event_Player_Connected(Id player)
 {
     if (OfflineWarpPlayer.Current.TryRemove(player.id, out var warpData))
     {
         OfflineWarpPlayer.Save();
         TaskTools.Delay(Program.AppSettings.PlayerOfflineWarpDelay, () => WarpTo(player.id, warpData.WarpToData));
     }
 }
コード例 #11
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            GameAPI  = dediAPI;
            LogLevel = EmpyrionNetAPIDefinitions.LogLevel.Debug;

            Event_Faction_Changed += F => UpdateFactions().Wait();

            TaskTools.IntervallAsync(10000, UpdateFactions);
        }
コード例 #12
0
        private void SendWelcomeMessage(Player aPlayer)
        {
            if (string.IsNullOrEmpty(SysteminfoManager.Value.SystemConfig.Current.WelcomeMessage))
            {
                return;
            }

            TaskTools.Delay(60, () => ChatManager.Value.ChatMessageADM(string.Format(SysteminfoManager.Value.SystemConfig.Current.WelcomeMessage, aPlayer.PlayerName)));
        }
コード例 #13
0
        public void UpdateBackpack(string aPlayerSteamId, ItemStack[] aToolbar, ItemStack[] aBag)
        {
            Backpack backpack = TaskTools.Retry(() => backpack = ExecUpdate(aPlayerSteamId, aToolbar, aBag));

            if (backpack != null)
            {
                BackpackHub?.Clients.All.SendAsync("UpdateBackpack", JsonConvert.SerializeObject(backpack)).Wait();
            }
        }
コード例 #14
0
        //do it by invoking method
        protected override bool OnCheck()
        {
            if (checkSet.selectedType == typeof(float) || checkSet.selectedType == typeof(int))
            {
                return(TaskTools.Compare((System.IComparable)method.Invoke(agent, null), (System.IComparable)checkSet.objectValue, comparison));
            }

            return(Equals(method.Invoke(agent, null), checkSet.objectValue));
        }
コード例 #15
0
        public SectorsManager()
        {
            PlayfieldsWatcher                     = new FileSystemWatcher(Path.Combine(EmpyrionConfiguration.SaveGamePath, "Sectors"), "Sectors.yaml");
            PlayfieldsWatcher.Created            += (S, A) => TaskTools.Delay(10, ReadSectors);
            PlayfieldsWatcher.Deleted            += (S, A) => TaskTools.Delay(10, ReadSectors);
            PlayfieldsWatcher.Changed            += (S, A) => TaskTools.Delay(10, ReadSectors);
            PlayfieldsWatcher.EnableRaisingEvents = true;

            TaskTools.Delay(1, ReadSectors);
        }
コード例 #16
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            GameAPI  = dediAPI;
            LogLevel = EmpyrionNetAPIDefinitions.LogLevel.Debug;

            TaskTools.Intervall(Math.Max(1, Program.AppSettings.StructureDataUpdateCheckInSeconds) * 1000, () => BackupStructureData());

            Event_Playfield_Loaded   += P => ActivePlayfields.TryAdd(P.playfield, P.playfield);
            Event_Playfield_Unloaded += P => ActivePlayfields.TryRemove(P.playfield, out _);
        }
コード例 #17
0
 public Player GetPlayer(string aSteamId)
 {
     return(TaskTools.Retry(() =>
     {
         using (var DB = new PlayerContext())
         {
             return DB.Players.FirstOrDefault(P => P.SteamId == aSteamId);
         }
     }));
 }
コード例 #18
0
 public Player GetPlayer(int aPlayerId)
 {
     return(TaskTools.Retry(() =>
     {
         using (var DB = new PlayerContext())
         {
             return DB.Players.FirstOrDefault(P => P.EntityId == aPlayerId);
         }
     }));
 }
コード例 #19
0
        public GlobalStructureList GlobalStructureList()
        {
            try
            {
                LastGlobalStructureList.Current = Request_GlobalStructure_List().Result;
                TaskTools.Delay(0, () => LastGlobalStructureList.Save());
            }
            catch { }

            return(LastGlobalStructureList.Current);
        }
コード例 #20
0
        private void StartScriptIntervall(int intervall, Action action, string name)
        {
            if (intervall <= 0)
            {
                return;
            }

            var exec = TaskTools.Intervall(intervall, action, name);

            StopScriptsEvent += (S, E) => exec.Set();
        }
コード例 #21
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            DediAPI  = dediAPI;
            LogLevel = LogLevel.Message;

            Log($"**EmpyrionForbiddenPlayfields: loaded");

            LoadConfiuration();
            LogLevel = Configuration.Current.LogLevel;

            TaskTools.Intervall(30000, () => UpdateFactionData().Wait());
            TaskTools.Intervall(1000, () => TestNextPlayer());
        }
コード例 #22
0
        public PlayerManager(
            ILogger <PlayerManager> aLogger,
            IRoleHubContext <PlayerHub> aPlayerHub,
            IProvider <IUserService> aUserService)
        {
            Logger            = aLogger;
            PlayerHub         = aPlayerHub;
            UserService       = aUserService;
            SysteminfoManager = new Lazy <SysteminfoManager>(() => Program.GetManager <SysteminfoManager>());
            ChatManager       = new Lazy <ChatManager>(() => Program.GetManager <ChatManager>());
            UserManager       = new Lazy <UserManager>(() => Program.GetManager <UserManager>());

            TaskTools.Intervall(10000, SendPlayerUpdates);
        }
コード例 #23
0
        //do it by invoking method
        protected override bool OnCheck()
        {
            object[] args = null;
            if (paramValue1.selectedType != null)
            {
                args = new object[] { paramValue1.objectValue }
            }
            ;

            if (checkSet.selectedType == typeof(float) || checkSet.selectedType == typeof(int))
            {
                return(TaskTools.Compare((System.IComparable)method.Invoke(agent, args), (System.IComparable)checkSet.objectValue, comparison));
            }

            return(Equals(method.Invoke(agent, args), checkSet.objectValue));
        }
コード例 #24
0
    /// <summary>
    /// Создаёт новую задачу (вызывается из кнопки добавления задач)
    /// </summary>
    public void CreateNewTask()
    {
        var placeForTasks = transform.parent;
        var newTask       = Instantiate(taskPrefab, placeForTasks).GetComponent <Task>();

        newTask.Create(TaskTools.GetStatCategory(), TaskTools.GetKey(),
                       TaskTools.GetAmountToComplete(), TaskTools.GetCharacter());
        newTask.UpdateView();

        var trueTaskController = placeForTasks.GetComponent <TaskController>();

        trueTaskController.cooldownEnd = DateTime.Now.AddSeconds(CooldownTimeSeconds);
        trueTaskController.SaveCooldownTime();
        trueTaskController.taskAddBtnIsRendered = false;

        Destroy(gameObject);
    }
コード例 #25
0
            public AdminconfigYamlStruct(string aFilename)
            {
                if (!File.Exists(aFilename))
                {
                    return;
                }

                Load(aFilename);

                mAdminconfigYamlFileWatcher = new FileSystemWatcher
                {
                    Path         = Path.GetDirectoryName(aFilename),
                    NotifyFilter = NotifyFilters.LastWrite,
                    Filter       = Path.GetFileName(aFilename)
                };
                mAdminconfigYamlFileWatcher.Changed            += (s, e) => TaskTools.Delay(10, () => Load(aFilename));
                mAdminconfigYamlFileWatcher.EnableRaisingEvents = true;
            }
コード例 #26
0
        public override void Initialize(ModGameAPI dediAPI)
        {
            DediAPI  = dediAPI;
            LogLevel = LogLevel.Message;

            Log($"**EmpyrionBackpackExtender: loaded");

            LoadConfiuration();
            LogLevel = Configuration.Current.LogLevel;
            ChatCommandManager.CommandPrefix = Configuration.Current.ChatCommandPrefix;

            TaskTools.Intervall(60000, () => CurrentFactions = Request_Get_Factions(0.ToId()).Result);

            AddCommandsFor(Configuration.Current.PersonalBackpack, "personal", P => P.steamId);
            AddCommandsFor(Configuration.Current.FactionBackpack, "faction", P => P.factionId.ToString());
            AddCommandsFor(Configuration.Current.OriginBackpack, "origin", P => P.origin.ToString());
            AddCommandsFor(Configuration.Current.GlobalBackpack, "global", P => "global");
        }
コード例 #27
0
    /// <summary>
    /// Запускает конечный диалог и выдаёт награды
    /// </summary>
    public void ApplyAwards()
    {
        var placeForTasks = transform.parent;

        placeForTasks.gameObject.GetComponent <Scenario>().FirstCharacterSprite = CharacterSpritePlace.sprite;
        placeForTasks.GetComponent <Scenario>()
        .CreateTaskEndDialog(TaskTools.GetPhrase(),
                             new Award(AwardType.Money, money: Details.AmountToComplete * 10),
                             new Award(AwardType.Reputation, reputation: Details.AmountToComplete * 15)
                             );

        var writer = QuickSaveWriter.Create("Tasks");

        writer.Delete(Details.ID.ToString());
        writer.Commit();

        Destroy(gameObject);
    }
コード例 #28
0
        private void SyncronizePlayersWithSaveGameDirectory()
        {
            TaskTools.Delay(1, () =>
            {
                var KnownPlayers = Directory
                                   .GetFiles(PlayersDirectory)
                                   .Select(F => Path.GetFileNameWithoutExtension(F));

                using (var DB = new PlayerContext())
                {
                    DB.Players
                    .Where(P => !KnownPlayers.Contains(P.SteamId))
                    .ForEach(P => DB.Players.Remove(P));

                    DB.SaveChangesAsync();
                }
            });
        }
コード例 #29
0
        public void EGSStop(int aWaitMinutes)
        {
            try
            {
                Logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, "EGSStop");
                EGSRunState(true);
                Program.Host.ExposeShutdownHost();

                var stoptime = DateTime.Now.AddMinutes(aWaitMinutes);
                var exit     = aWaitMinutes == 0 ? null : TaskTools.Intervall(10000, () => {
                    Request_InGameMessage_AllPlayers(Timeouts.NoResponse, $"Server shutdown in {(stoptime - DateTime.Now).ToString(@"mm\:ss")}".ToIdMsgPrio(0, MessagePriorityType.Alarm));
                });

                try
                {
                    Process EGSProcess = null;
                    try { EGSProcess = ProcessInformation == null ? null : Process.GetProcessById(ProcessInformation.Id); } catch { }

                    Logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, "EGSStop: saveandexit:" + aWaitMinutes);
                    Request_ConsoleCommand(new PString("saveandexit " + aWaitMinutes)).Wait(10000);
                    Thread.Sleep(10000);
                    if (EGSProcess != null && !EGSProcess.HasExited)
                    {
                        Logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, "EGSStop: Wait:" + aWaitMinutes);
                        EGSProcess?.WaitForExit((aWaitMinutes + 1) * 60000);
                    }
                    exit?.Set();

                    CurrentSysteminfo.online = SetState(CurrentSysteminfo.online, "o", false);
                }
                catch (Exception Error)
                {
                    exit?.Set();
                    Logger.LogError(Error, "EGSStop: WaitForExit");
                    Thread.Sleep(10000);
                }

                UpdateClient();
            }
            catch (Exception Error)
            {
                Logger.LogError(Error, "EGSStop");
            }
        }
コード例 #30
0
        private void UpdateOnlinePlayers()
        {
            TaskTools.Intervall(10000, () =>
            {
                var onlinePlayers = Request_Player_List().Result;
                if (onlinePlayers == null)
                {
                    return;
                }

                if (onlinePlayers.list == null)
                {
                    UpdatePlayer(DB => DB.Players.Where(P => P.Online), PlayerDisconnect);
                }
                else
                {
                    UpdatePlayer(DB => DB.Players.Where(P => onlinePlayers.list.Contains(P.EntityId) && !P.Online), PlayerConnect);
                    UpdatePlayer(DB => DB.Players.Where(P => !onlinePlayers.list.Contains(P.EntityId) && P.Online), PlayerDisconnect);
                }

                onlinePlayers.list?.AsParallel().ForEach(I => Request_Player_Info(new Id(I)));
            });
        }