예제 #1
0
        /// <summary>
        /// Create universe directories
        /// </summary>
        public static void CheckUniverse()
        {
            LunaLog.Debug($"Loading universe... {GetUniverseSize()}{ByteSize.KiloByteSymbol}");

            if (!FileHandler.FolderExists(ServerContext.ConfigDirectory))
            {
                FileHandler.FolderCreate(ServerContext.ConfigDirectory);
            }
            if (!FileHandler.FileExists(ServerContext.ModFilePath))
            {
                if (FileHandler.FileExists(ServerContext.OldModFilePath))
                {
                    FileHandler.MoveFile(ServerContext.OldModFilePath, ServerContext.ModFilePath);
                }
                else
                {
                    ModFileSystem.GenerateNewModFile();
                }
            }
            else
            {
                // Cleanup
                FileHandler.FileDelete(ServerContext.OldModFilePath);
            }
            if (!FileHandler.FolderExists(ServerContext.UniverseDirectory))
            {
                FileHandler.FolderCreate(ServerContext.UniverseDirectory);
            }

            if (!FileHandler.FolderExists(CraftLibrarySystem.CraftPath))
            {
                FileHandler.FolderCreate(CraftLibrarySystem.CraftPath);
            }
            if (!FileHandler.FolderExists(FlagSystem.FlagPath))
            {
                FileHandler.FolderCreate(FlagSystem.FlagPath);
            }
            if (!FileHandler.FolderExists(GroupSystem.GroupsPath))
            {
                FileHandler.FolderCreate(GroupSystem.GroupsPath);
            }
            if (!FileHandler.FolderExists(ScreenshotSystem.ScreenshotPath))
            {
                FileHandler.FolderCreate(ScreenshotSystem.ScreenshotPath);
            }
            if (!FileHandler.FolderExists(KerbalSystem.KerbalsPath))
            {
                FileHandler.FolderCreate(KerbalSystem.KerbalsPath);
                KerbalSystem.GenerateDefaultKerbals();
            }
            if (!FileHandler.FolderExists(ScenarioSystem.ScenariosPath))
            {
                FileHandler.FolderCreate(ScenarioSystem.ScenariosPath);
            }
            if (!FileHandler.FolderExists(VesselStoreSystem.VesselsPath))
            {
                FileHandler.FolderCreate(VesselStoreSystem.VesselsPath);
            }
        }
예제 #2
0
            private void DrawDeleteModal()
            {
                if (_deleteIndex == null)
                {
                    return;
                }

                ImGui.OpenPopup(DialogDeleteMod);

                var _ = true;

                ImGui.SetNextWindowPos(ImGui.GetMainViewport().GetCenter(), ImGuiCond.Appearing, Vector2.One / 2);
                var ret = ImGui.BeginPopupModal(DialogDeleteMod, ref _, ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoDecoration);

                if (!ret)
                {
                    return;
                }

                using var raii = ImGuiRaii.DeferredEnd(ImGui.EndPopup);

                if (Mod == null)
                {
                    _deleteIndex = null;
                    ImGui.CloseCurrentPopup();
                    return;
                }

                ImGui.Text("Are you sure you want to delete the following mod:");
                var halfLine = new Vector2(ImGui.GetTextLineHeight() / 2);

                ImGui.Dummy(halfLine);
                ImGui.TextColored(DeleteModNameColor, Mod.Data.Meta.Name);
                ImGui.Dummy(halfLine);

                var buttonSize = ImGuiHelpers.ScaledVector2(120, 0);

                if (ImGui.Button(ButtonYesDelete, buttonSize))
                {
                    ImGui.CloseCurrentPopup();
                    var mod = Mod;
                    Cache.RemoveMod(mod);
                    _modManager.DeleteMod(mod.Data.BasePath);
                    ModFileSystem.InvokeChange();
                    ClearSelection();
                }

                ImGui.SameLine();

                if (ImGui.Button(ButtonNoDelete, buttonSize))
                {
                    ImGui.CloseCurrentPopup();
                    _deleteIndex = null;
                }
            }
예제 #3
0
        private static void LoadSettingsAndGroups()
        {
            LunaLog.Debug("Loading groups...");
            GroupSystem.LoadGroups();
            LunaLog.Debug("Loading settings...");
            SettingsHandler.LoadSettings();

            if (GeneralSettings.SettingsStore.ModControl)
            {
                LunaLog.Debug("Loading mod control...");
                ModFileSystem.LoadModFile();
            }
        }
예제 #4
0
    // Create a new ModFileSystem from the currently loaded mods and the current sort order file.
    public static ModFileSystem Load()
    {
        var ret = new ModFileSystem();

        ret.Reload();

        ret.Changed += ret.OnChange;
        Penumbra.ModManager.ModDiscoveryFinished += ret.Reload;
        Penumbra.ModManager.ModMetaChanged       += ret.OnMetaChange;
        Penumbra.ModManager.ModPathChanged       += ret.OnModPathChange;

        return(ret);
    }
예제 #5
0
        public TestEventDepart()
        {
            ModDataVisit.InitVisitMap(typeof(Demon));

            ModFileSystem.Clear();

            var modFileSystem = ModFileSystem.Generate(nameof(TestEventDepart));

            modFileSystem.AddDepartEvent("EVENT_TEST.txt",
                                         @"title = EVENT_DIFF_TITLE
desc = EVENT_DIFF_DESC

trigger =
{
	equal = {depart.data1, 11}
}

date = every_day

occur = 1

option =
{
    desc = EVENT_TEST_OPTION_1_DESC
    select =
    {
        assign = {depart.data2, 101}
    }
}

option =
{
    desc = EVENT_TEST_OPTION_2_DESC
    select =
    {
        assign = {depart.data2, 102}
    }
}

option =
{
    desc = EVENT_TEST_OPTION_3_DESC
    select =
    {
        assign = {depart.data2, 103}
    }
}");

            Mod.Load(ModFileSystem.path);
        }
예제 #6
0
 //Create universe directories
 public static void CheckUniverse()
 {
     LunaLog.Debug("Loading universe... ");
     if (!FileHandler.FileExists(ServerContext.ModFilePath))
     {
         ModFileSystem.GenerateNewModFile();
     }
     if (!FileHandler.FolderExists(ServerContext.UniverseDirectory))
     {
         FileHandler.FolderCreate(ServerContext.UniverseDirectory);
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Crafts")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Crafts"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Screenshots")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Screenshots"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Flags")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Flags"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Groups")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Groups"));
     }
     if (!FileHandler.FolderExists(KerbalSystem.KerbalsPath))
     {
         FileHandler.FolderCreate(KerbalSystem.KerbalsPath);
         KerbalSystem.GenerateDefaultKerbals();
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Players")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Players"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Relay")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Relay"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Scenarios")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Scenarios"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Vessels")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Vessels"));
     }
 }
예제 #7
0
            private void DrawModAddPopup()
            {
                if (!ImGui.BeginPopup(LabelAddModPopup))
                {
                    return;
                }

                using var raii = ImGuiRaii.DeferredEnd(ImGui.EndPopup);

                if (_modAddKeyboardFocus)
                {
                    ImGui.SetKeyboardFocusHere();
                    _modAddKeyboardFocus = false;
                }

                var newName = "";

                if (ImGui.InputTextWithHint("##AddMod", "New Mod Name...", ref newName, 64, ImGuiInputTextFlags.EnterReturnsTrue))
                {
                    try
                    {
                        var newDir = TexToolsImport.CreateModFolder(new DirectoryInfo(Penumbra.Config !.ModDirectory),
                                                                    newName);
                        var modMeta = new ModMeta
                        {
                            Author      = "Unknown",
                            Name        = newName.Replace('/', '\\'),
                            Description = string.Empty,
                        };

                        var metaFile = new FileInfo(Path.Combine(newDir.FullName, "meta.json"));
                        modMeta.SaveToFile(metaFile);
                        _modManager.AddMod(newDir);
                        ModFileSystem.InvokeChange();
                        SelectModOnUpdate(newDir.Name);
                    }
                    catch (Exception e)
                    {
                        PluginLog.Error($"Could not create directory for new Mod {newName}:\n{e}");
                    }

                    ImGui.CloseCurrentPopup();
                }

                if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGuiKey.Escape)))
                {
                    ImGui.CloseCurrentPopup();
                }
            }
예제 #8
0
        private static void LoadSettingsAndGroups()
        {
            LunaLog.Debug("Loading groups...");
            GroupSystem.LoadGroups();
            LunaLog.Debug("Loading settings...");
            SettingsHandler.LoadSettings();

            if (GeneralSettings.SettingsStore.ModControl)
            {
                LunaLog.Debug("Loading mod control...");
                ModFileSystem.LoadModFile();
            }

            Console.Title += $" ({GeneralSettings.SettingsStore.ServerName})";

#if DEBUG
            Console.Title += " DEBUG";
#endif
        }
예제 #9
0
        //Create universe directories
        public static void CheckUniverse()
        {
            LunaLog.Debug("Loading universe... ");

            if (!FileHandler.FileExists(ServerContext.ModFilePath))
            {
                ModFileSystem.GenerateNewModFile();
            }
            if (!FileHandler.FolderExists(ServerContext.UniverseDirectory))
            {
                FileHandler.FolderCreate(ServerContext.UniverseDirectory);
            }

            if (!FileHandler.FolderExists(CraftLibrarySystem.CraftPath))
            {
                FileHandler.FolderCreate(CraftLibrarySystem.CraftPath);
            }
            if (!FileHandler.FolderExists(FlagSystem.FlagPath))
            {
                FileHandler.FolderCreate(FlagSystem.FlagPath);
            }
            if (!FileHandler.FolderExists(GroupSystem.GroupsPath))
            {
                FileHandler.FolderCreate(GroupSystem.GroupsPath);
            }
            if (!FileHandler.FolderExists(ScreenshotSystem.ScreenshotPath))
            {
                FileHandler.FolderCreate(ScreenshotSystem.ScreenshotPath);
            }
            if (!FileHandler.FolderExists(KerbalSystem.KerbalsPath))
            {
                FileHandler.FolderCreate(KerbalSystem.KerbalsPath);
                KerbalSystem.GenerateDefaultKerbals();
            }
            if (!FileHandler.FolderExists(ScenarioSystem.ScenariosPath))
            {
                FileHandler.FolderCreate(ScenarioSystem.ScenariosPath);
            }
            if (!FileHandler.FolderExists(VesselStoreSystem.VesselsPath))
            {
                FileHandler.FolderCreate(VesselStoreSystem.VesselsPath);
            }
        }
예제 #10
0
        private static void LoadSettingsAndGroups()
        {
            LunaLog.Debug("Loading groups...");
            GroupSystem.LoadGroups();
            LunaLog.Debug("Loading settings...");
            GeneralSettings.Singleton.Load();
            if (GeneralSettings.SettingsStore.GameDifficulty == GameDifficulty.Custom)
            {
                LunaLog.Debug("Loading gameplay settings...");
                GameplaySettings.Singleton.Load();
            }

            if (GeneralSettings.SettingsStore.ModControl)
            {
                LunaLog.Debug("Loading mod control...");
                ModFileSystem.LoadModFile();
            }
#if DEBUG
            DebugSettings.Singleton.Load();
            LunaTime.SimulatedMsTimeOffset = DebugSettings.SettingsStore.SimulatedMsTimeOffset;
#endif
        }
예제 #11
0
        private static void LoadSettingsAndGroups()
        {
            LunaLog.Debug("Loading groups...");
            GroupSystem.LoadGroups();
            LunaLog.Debug("Loading settings...");
            SettingsHandler.LoadSettings();
            SettingsHandler.ValidateDifficultySettings();

            if (GeneralSettings.SettingsStore.ModControl)
            {
                LunaLog.Debug("Loading mod control...");
                ModFileSystem.LoadModFile();
            }

            if (Common.PlatformIsWindows())
            {
                Console.Title += $" ({GeneralSettings.SettingsStore.ServerName})";
#if DEBUG
                Console.Title += " DEBUG";
#endif
            }
        }
예제 #12
0
 //Create universe directories
 public static void CheckUniverse()
 {
     if (!FileHandler.FileExists(ServerContext.ModFilePath))
     {
         ModFileSystem.GenerateNewModFile();
     }
     if (!FileHandler.FolderExists(ServerContext.UniverseDirectory))
     {
         FileHandler.FolderCreate(ServerContext.UniverseDirectory);
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Crafts")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Crafts"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Flags")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Flags"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Players")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Players"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Kerbals")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Kerbals"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Vessels")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Vessels"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Scenarios")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Scenarios"));
     }
     if (!FileHandler.FolderExists(Path.Combine(ServerContext.UniverseDirectory, "Scenarios", "Initial")))
     {
         FileHandler.FolderCreate(Path.Combine(ServerContext.UniverseDirectory, "Scenarios", "Initial"));
     }
 }
예제 #13
0
    public ModFileSystemSelector(ModFileSystem fileSystem)
        : base(fileSystem)
    {
        SubscribeRightClickFolder(EnableDescendants, 10);
        SubscribeRightClickFolder(DisableDescendants, 10);
        SubscribeRightClickFolder(InheritDescendants, 15);
        SubscribeRightClickFolder(OwnDescendants, 15);
        SubscribeRightClickFolder(SetDefaultImportFolder, 100);
        SubscribeRightClickMain(ClearDefaultImportFolder, 100);
        AddButton(AddNewModButton, 0);
        AddButton(AddImportModButton, 1);
        AddButton(AddHelpButton, 2);
        AddButton(DeleteModButton, 1000);
        SetFilterTooltip();

        SelectionChanged += OnSelectionChange;
        Penumbra.CollectionManager.CollectionChanged          += OnCollectionChange;
        Penumbra.CollectionManager.Current.ModSettingChanged  += OnSettingChange;
        Penumbra.CollectionManager.Current.InheritanceChanged += OnInheritanceChange;
        Penumbra.ModManager.ModMetaChanged       += OnModMetaChange;
        Penumbra.ModManager.ModDiscoveryStarted  += StoreCurrentSelection;
        Penumbra.ModManager.ModDiscoveryFinished += RestoreLastSelection;
        OnCollectionChange(ModCollection.Type.Current, null, Penumbra.CollectionManager.Current, null);
    }
예제 #14
0
파일: Penumbra.cs 프로젝트: xivdev/Penumbra
    public Penumbra(CharacterUtility characterUtility)
    {
        CharacterUtility = characterUtility;

        Framework = new FrameworkManager();
        Backup.CreateBackup(PenumbraBackupFiles());
        Config = Configuration.Load();

        MusicManager = new MusicManager();
        if (Config.DisableSoundStreaming)
        {
            MusicManager.DisableStreaming();
        }

        ResidentResources = new ResidentResourceManager();
        Redirects         = new SimpleRedirectManager();
        MetaFileManager   = new MetaFileManager();
        ResourceLoader    = new ResourceLoader(this);
        ResourceLogger    = new ResourceLogger(ResourceLoader);
        ModManager        = new Mod.Manager(Config.ModDirectory);
        ModManager.DiscoverMods();
        CollectionManager = new ModCollection.Manager(ModManager);
        ModFileSystem     = ModFileSystem.Load();
        ObjectReloader    = new ObjectReloader();
        PathResolver      = new PathResolver(ResourceLoader);

        Dalamud.Commands.AddHandler(CommandName, new CommandInfo(OnCommand)
        {
            HelpMessage = "/penumbra - toggle ui\n/penumbra reload - reload mod file lists & discover any new mods",
        });

        ResidentResources.Reload();

        SetupInterface(out _configWindow, out _launchButton, out _windowSystem);

        if (Config.EnableHttpApi)
        {
            CreateWebServer();
        }

        ResourceLoader.EnableHooks();
        if (Config.EnableMods)
        {
            ResourceLoader.EnableReplacements();
            PathResolver.Enable();
        }

        if (Config.DebugMode)
        {
            ResourceLoader.EnableDebug();
            _configWindow.IsOpen = true;
        }

        if (Config.EnableFullResourceLogging)
        {
            ResourceLoader.EnableFullLogging();
        }

        ResidentResources.Reload();

        Api = new PenumbraApi(this);
        Ipc = new PenumbraIpc(Dalamud.PluginInterface, Api);
        SubscribeItemLinks();
        if (ImcExceptions > 0)
        {
            PluginLog.Error($"{ImcExceptions} IMC Exceptions thrown. Please repair your game files.");
        }
        else
        {
            PluginLog.Information($"Penumbra Version {Version}, Commit #{CommitHash} successfully Loaded.");
        }
    }
예제 #15
0
 internal TestModBase()
 {
     modFileSystem = ModFileSystem.Generate(this.GetType().Name);
 }