private void InitializeTeleporterDB()
 {
     TeleporterDB.LogDB = Log;
     TeleporterDB       = new TeleporterDB(Path.Combine(EmpyrionConfiguration.SaveGameModPath, "Teleporters.json"))
     {
         AreAllies = AreAllies
     };
 }
Example #2
0
        private void DeleteTeleporterRoutes(int aPlayerId, int aSourceId, int aTargetId)
        {
            Request_Player_Info(aPlayerId.ToId(), (P) =>
            {
                var deletedCount = TeleporterDB.Delete(aSourceId, aTargetId);
                SaveTeleporterDB();

                AlertPlayer(P.entityId, $"Delete {deletedCount} teleporter from {aSourceId}");
            });
        }
Example #3
0
 private void ListTeleporterRoutes(int aPlayerId, int aStructureId)
 {
     Request_GlobalStructure_List(G =>
     {
         Request_Player_Info(aPlayerId.ToId(), (P) =>
         {
             ShowDialog(aPlayerId, P, "Teleporters", TeleporterDB.List(aStructureId, P).OrderBy(T => T.Permission).Aggregate("\n", (S, T) => S + T.ToString(G) + "\n"));
         });
     });
 }
Example #4
0
 private void InitializeTeleporterDBFileWatcher()
 {
     DBFileChangedWatcher = new FileSystemWatcher
     {
         Path         = Path.GetDirectoryName(TeleporterDBFilename),
         NotifyFilter = NotifyFilters.LastWrite,
         Filter       = Path.GetFileName(TeleporterDBFilename)
     };
     DBFileChangedWatcher.Changed            += (s, e) => TeleporterDB = TeleporterDB.ReadDB(TeleporterDBFilename);
     DBFileChangedWatcher.EnableRaisingEvents = true;
 }
Example #5
0
        private void SaveTeleporterRoute(int aPlayerId, TeleporterPermission aPermission, int aSourceId, int aTargetId)
        {
            Request_GlobalStructure_List(G =>
            {
                Request_Player_Info(aPlayerId.ToId(), (P) =>
                {
                    var SourceStructure = TeleporterDB.SearchEntity(G, aSourceId);
                    var TargetStructure = TeleporterDB.SearchEntity(G, aSourceId);

                    if (SourceStructure == null)
                    {
                        AlertPlayer(P.entityId, $"Structure not found: {aSourceId}");
                    }
                    else if (TargetStructure == null)
                    {
                        AlertPlayer(P.entityId, $"Structure not found: {aTargetId}");
                    }
                    else if (!CheckPermission(SourceStructure, TeleporterDB.Configuration))
                    {
                        AlertPlayer(P.entityId, $"Structure not allowed: {aSourceId} {(EntityType)SourceStructure.Data.type}/{(FactionGroups)SourceStructure.Data.factionGroup}");
                    }
                    else if (!CheckPermission(TargetStructure, TeleporterDB.Configuration))
                    {
                        AlertPlayer(P.entityId, $"Structure not allowed: {aTargetId} {(EntityType)TargetStructure.Data.type}/{(FactionGroups)TargetStructure.Data.factionGroup}");
                    }
                    else if (P.credits < TeleporterDB.Configuration.CostsPerTeleporterPosition)
                    {
                        AlertPlayer(P.entityId, $"You need {TeleporterDB.Configuration.CostsPerTeleporterPosition} credits ;-)");
                    }
                    else if (TeleporterDB.Configuration.ForbiddenPlayfields.Contains(P.playfield) ||
                             TeleporterDB.Configuration.ForbiddenPlayfields.Contains(SourceStructure.Playfield) ||
                             TeleporterDB.Configuration.ForbiddenPlayfields.Contains(TargetStructure.Playfield))
                    {
                        InformPlayer(aPlayerId, "No teleporter allowed here ;-)");
                        log($"EmpyrionTeleporter: Exec: {P.playerName}/{P.entityId}/{P.clientId} -> no teleport allowed for pos={GetVector3(P.pos).String()} on '{P.playfield}'", LogLevel.Error);
                    }
                    else
                    {
                        TeleporterDB.AddRoute(G, aPermission, aSourceId, aTargetId, P);
                        SaveTeleporterDB();

                        if (TeleporterDB.Configuration.CostsPerTeleporterPosition > 0)
                        {
                            Request_Player_SetCredits(new IdCredits(P.entityId, P.credits - TeleporterDB.Configuration.CostsPerTeleporterPosition));
                        }

                        ShowDialog(aPlayerId, P, "Teleporters", $"\nTeleporter set\n{aSourceId} => {aTargetId}");
                    }
                });
            });
        }
Example #6
0
        private void CleanUpTeleporterRoutes(int aPlayerId)
        {
            Request_GlobalStructure_List(G => {
                var GlobalFlatIdList     = G.globalStructures.Aggregate(new List <int>(), (L, P) => { L.AddRange(P.Value.Select(S => S.id)); return(L); });
                var TeleporterFlatIdList = TeleporterDB.TeleporterRoutes.Aggregate(new List <int>(), (L, P) => { L.Add(P.A.Id); L.Add(P.B.Id); return(L); });

                var DeleteList = TeleporterFlatIdList.Where(I => !GlobalFlatIdList.Contains(I)).Distinct();
                var DelCount   = DeleteList.Aggregate(0, (C, I) => C + TeleporterDB.Delete(I, 0));
                log($"CleanUpTeleporterRoutes: {DelCount} Structures: {DeleteList.Aggregate("", (S, I) => S + "," + I)}", LogLevel.Message);
                InformPlayer(aPlayerId, $"CleanUp: {DelCount} TeleporterRoutes");

                if (DelCount > 0)
                {
                    SaveTeleporterDB();
                }
            });
        }
Example #7
0
        private void InitializeTeleporterDB()
        {
            TeleporterDBFilename = Path.Combine(EmpyrionConfiguration.ProgramPath, @"Saves\Games\" + EmpyrionConfiguration.DedicatedYaml.SaveGameName + @"\Mods\EmpyrionTeleporter\TeleporterDB.xml");
            Directory.CreateDirectory(Path.GetDirectoryName(TeleporterDBFilename));

            // Move DB file to new location
            var OldDB = Path.Combine(Directory.GetCurrentDirectory(), @"Content\Mods\EmpyrionTeleporter\TeleporterDB.xml");

            if (File.Exists(OldDB))
            {
                File.Move(OldDB, TeleporterDBFilename);
            }

            TeleporterDB.LogDB = log;
            TeleporterDB       = TeleporterDB.ReadDB(TeleporterDBFilename);
            TeleporterDB.SaveDB(TeleporterDBFilename);
        }
Example #8
0
        private bool ExecTeleportPlayer(GlobalStructureList aGlobalStructureList, PlayerInfo aPlayer, int aPlayerId)
        {
            var FoundRoute = TeleporterDB.SearchRoute(aGlobalStructureList, aPlayer);

            if (FoundRoute == null)
            {
                InformPlayer(aPlayerId, "No teleporter position here :-( wait 2min for structure update and try it again please.");
                log($"EmpyrionTeleporter: Exec: {aPlayer.playerName}/{aPlayer.entityId}/{aPlayer.clientId} -> no route found for pos={GetVector3(aPlayer.pos).String()} on '{aPlayer.playfield}'", LogLevel.Error);
                return(false);
            }

            if (TeleporterDB.Configuration.ForbiddenPlayfields.Contains(aPlayer.playfield) ||
                TeleporterDB.Configuration.ForbiddenPlayfields.Contains(FoundRoute.Playfield))
            {
                InformPlayer(aPlayerId, "No teleport allowed here ;-)");
                log($"EmpyrionTeleporter: Exec: {aPlayer.playerName}/{aPlayer.entityId}/{aPlayer.clientId} -> no teleport allowed for pos={GetVector3(aPlayer.pos).String()} on '{aPlayer.playfield}'", LogLevel.Error);
                return(false);
            }

            log($"EmpyrionTeleporter: Exec: {aPlayer.playerName}/{aPlayer.entityId}-> {FoundRoute.Id} on '{FoundRoute.Playfield}' pos={FoundRoute.Position.String()} rot={FoundRoute.Rotation.String()}", LogLevel.Message);

            if (!PlayerLastGoodPosition.ContainsKey(aPlayer.entityId))
            {
                PlayerLastGoodPosition.Add(aPlayer.entityId, null);
            }
            PlayerLastGoodPosition[aPlayer.entityId] = new IdPlayfieldPositionRotation(aPlayer.entityId, aPlayer.playfield, aPlayer.pos, aPlayer.rot);

            Action <PlayerInfo> ActionTeleportPlayer = (P) =>
            {
                if (FoundRoute.Playfield == P.playfield)
                {
                    Request_Entity_Teleport(new IdPositionRotation(aPlayer.entityId, GetVector3(FoundRoute.Position), GetVector3(FoundRoute.Rotation)), null, (E) => InformPlayer(aPlayerId, "Entity_Teleport: {E}"));
                }
                else
                {
                    Request_Player_ChangePlayerfield(new IdPlayfieldPositionRotation(aPlayer.entityId, FoundRoute.Playfield, GetVector3(FoundRoute.Position), GetVector3(FoundRoute.Rotation)), null, (E) => InformPlayer(aPlayerId, "Player_ChangePlayerfield: {E}"));
                }
            };

            Request_Player_SetPlayerInfo(new PlayerInfoSet()
            {
                entityId = aPlayer.entityId, health = (int)aPlayer.healthMax
            });

            new Thread(new ThreadStart(() =>
            {
                var TryTimer = new Stopwatch();
                TryTimer.Start();
                while (TryTimer.ElapsedMilliseconds < (TeleporterDB.Configuration.PreparePlayerForTeleport * 1000))
                {
                    Thread.Sleep(2000);
                    var WaitTime = TeleporterDB.Configuration.PreparePlayerForTeleport - (int)(TryTimer.ElapsedMilliseconds / 1000);
                    InformPlayer(aPlayerId, $"Prepare for teleport in {WaitTime} sec.");
                }

                ActionTeleportPlayer(aPlayer);
                CheckPlayerStableTargetPos(aPlayerId, aPlayer, ActionTeleportPlayer, FoundRoute.Position);
            })).Start();

            return(true);
        }
Example #9
0
 private void SaveTeleporterDB()
 {
     DBFileChangedWatcher.EnableRaisingEvents = false;
     TeleporterDB.SaveDB(TeleporterDBFilename);
     DBFileChangedWatcher.EnableRaisingEvents = true;
 }