Esempio n. 1
0
        public void TestNewLinePayload()
        {
            var manager             = new SeStringManager(null);
            var newLinePayloadBytes = new byte[] { 0x02, 0x10, 0x01, 0x03 };

            var seString = manager.Parse(newLinePayloadBytes);

            Assert.True(newLinePayloadBytes.SequenceEqual(seString.Encode()));
        }
        /// <summary>
        /// Set up the interface and populate all fields needed.
        /// </summary>
        /// <param name="dalamud"></param>
        public DalamudPluginInterface(Dalamud dalamud, string pluginName, PluginConfigurations configs)
        {
            this.CommandManager      = dalamud.CommandManager;
            this.Framework           = dalamud.Framework;
            this.ClientState         = dalamud.ClientState;
            this.UiBuilder           = new UiBuilder(dalamud.InterfaceManager, pluginName);
            this.TargetModuleScanner = dalamud.SigScanner;
            this.Data            = dalamud.Data;
            this.SeStringManager = dalamud.SeStringManager;

            this.dalamud    = dalamud;
            this.pluginName = pluginName;
            this.configs    = configs;
        }
Esempio n. 3
0
        /// <summary>
        /// Set up the interface and populate all fields needed.
        /// </summary>
        /// <param name="dalamud"></param>
        internal DalamudPluginInterface(Dalamud dalamud, string pluginName, PluginConfigurations configs, PluginLoadReason reason)
        {
            Reason = reason;
            this.CommandManager      = dalamud.CommandManager;
            this.Framework           = dalamud.Framework;
            this.ClientState         = dalamud.ClientState;
            this.UiBuilder           = new UiBuilder(dalamud.InterfaceManager, dalamud.Framework.Gui, dalamud.Configuration, pluginName);
            this.TargetModuleScanner = dalamud.SigScanner;
            this.Data            = dalamud.Data;
            this.SeStringManager = dalamud.SeStringManager;

            this.dalamud    = dalamud;
            this.pluginName = pluginName;
            this.configs    = configs;
        }
Esempio n. 4
0
        public Dalamud(DalamudStartInfo info, LoggingLevelSwitch loggingLevelSwitch)
        {
            this.StartInfo          = info;
            this.loggingLevelSwitch = loggingLevelSwitch;

            this.Configuration = DalamudConfiguration.Load(info.ConfigurationPath);

            this.baseDirectory = info.WorkingDirectory;

            this.unloadSignal = new ManualResetEvent(false);

            // Initialize the process information.
            this.targetModule = Process.GetCurrentProcess().MainModule;
            this.SigScanner   = new SigScanner(this.targetModule, true);

            // Initialize game subsystem
            this.Framework = new Framework(this.SigScanner, this);

            this.ClientState = new ClientState(this, info, this.SigScanner);

            this.WinSock2 = new WinSockHandlers();

            AssetManager.EnsureAssets(this.baseDirectory).ContinueWith(async task => {
                if (task.IsCanceled || task.IsFaulted)
                {
                    throw new Exception("Could not ensure assets.", task.Exception);
                }

                this.LocalizationManager = new Localization(this.StartInfo.WorkingDirectory);
                if (!string.IsNullOrEmpty(this.Configuration.LanguageOverride))
                {
                    this.LocalizationManager.SetupWithLangCode(this.Configuration.LanguageOverride);
                }
                else
                {
                    this.LocalizationManager.SetupWithUiCulture();
                }

                var pluginDir = this.StartInfo.PluginDirectory;
                if (this.Configuration.DoPluginTest)
                {
                    pluginDir = Path.Combine(pluginDir, "..", "testPlugins");
                }

                PluginRepository = new PluginRepository(this, pluginDir, this.StartInfo.GameVersion);

                if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_INTERFACE") ?? "false"))
                {
                    try
                    {
                        InterfaceManager         = new InterfaceManager(this, this.SigScanner);
                        InterfaceManager.OnDraw += BuildDalamudUi;

                        InterfaceManager.Enable();
                    }
                    catch (Exception e)
                    {
                        Log.Information(e, "Could not init interface.");
                    }
                }

                Data = new DataManager(this.StartInfo.Language);
                await Data.Initialize(this.baseDirectory);

                SeStringManager = new SeStringManager(Data);

                NetworkHandlers = new NetworkHandlers(this, this.Configuration.OptOutMbCollection);

                // Initialize managers. Basically handlers for the logic
                CommandManager = new CommandManager(this, info.Language);
                SetupCommands();

                ChatHandlers = new ChatHandlers(this);
                // Discord Bot Manager
                BotManager = new DiscordBotManager(this, this.Configuration.DiscordFeatureConfig);
                BotManager.Start();

                if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_PLUGINS") ?? "false"))
                {
                    try
                    {
                        PluginRepository.CleanupPlugins();

                        PluginManager = new PluginManager(this, pluginDir, this.StartInfo.DefaultPluginDirectory);
                        PluginManager.LoadPlugins();
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex, "Plugin load failed.");
                    }
                }

                this.Framework.Enable();
                this.ClientState.Enable();

                IsReady = true;
            });
        }
Esempio n. 5
0
        public Dalamud(DalamudStartInfo info, LoggingLevelSwitch loggingLevelSwitch)
        {
            this.StartInfo          = info;
            this.loggingLevelSwitch = loggingLevelSwitch;

            this.Configuration = DalamudConfiguration.Load(info.ConfigurationPath);

            this.baseDirectory = info.WorkingDirectory;

            this.unloadSignal = new ManualResetEvent(false);

            // Initialize the process information.
            this.targetModule = Process.GetCurrentProcess().MainModule;
            this.SigScanner   = new SigScanner(this.targetModule, true);

            // Initialize game subsystem
            this.Framework = new Framework(this.SigScanner, this);

            this.WinSock2 = new WinSockHandlers();

            NetworkHandlers = new NetworkHandlers(this, this.Configuration.OptOutMbCollection);

            this.ClientState = new ClientState(this, info, this.SigScanner);

            Task.Run(async() => {
                try {
                    var res = await AssetManager.EnsureAssets(this.baseDirectory);

                    if (!res)
                    {
                        Log.Error("One or more assets failed to download.");
                        Unload();
                        return;
                    }
                } catch (Exception e) {
                    Log.Error(e, "Error in asset task.");
                    Unload();
                    return;
                }

                this.LocalizationManager = new Localization(this.StartInfo.WorkingDirectory);
                if (!string.IsNullOrEmpty(this.Configuration.LanguageOverride))
                {
                    this.LocalizationManager.SetupWithLangCode(this.Configuration.LanguageOverride);
                }
                else
                {
                    this.LocalizationManager.SetupWithUiCulture();
                }

                PluginRepository = new PluginRepository(this, this.StartInfo.PluginDirectory, this.StartInfo.GameVersion);

                var isInterfaceLoaded = false;
                if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_INTERFACE") ?? "false"))
                {
                    try
                    {
                        InterfaceManager         = new InterfaceManager(this, this.SigScanner);
                        InterfaceManager.OnDraw += BuildDalamudUi;

                        InterfaceManager.Enable();
                        isInterfaceLoaded = true;
                    }
                    catch (Exception e)
                    {
                        Log.Information(e, "Could not init interface.");
                    }
                }

                Data = new DataManager(this.StartInfo.Language);
                try {
                    await Data.Initialize(this.baseDirectory);
                } catch (Exception e) {
                    Log.Error(e, "Could not initialize DataManager.");
                    Unload();
                    return;
                }

                SeStringManager = new SeStringManager(Data);

#if DEBUG
                AntiDebug = new AntiDebug(this.SigScanner);
                AntiDebug.Enable();
#endif

                // Initialize managers. Basically handlers for the logic
                CommandManager = new CommandManager(this, info.Language);
                SetupCommands();

                ChatHandlers = new ChatHandlers(this);

                if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_PLUGINS") ?? "false"))
                {
                    try
                    {
                        PluginRepository.CleanupPlugins();

                        PluginManager = new PluginManager(this, this.StartInfo.PluginDirectory, this.StartInfo.DefaultPluginDirectory);
                        PluginManager.LoadPlugins();
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex, "Plugin load failed.");
                    }
                }

                this.Framework.Enable();
                this.ClientState.Enable();

                IsReady = true;

                Troubleshooting.LogTroubleshooting(this, isInterfaceLoaded);
            });
        }
Esempio n. 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PartyFinderListing"/> class.
        /// </summary>
        /// <param name="listing">The interop listing data.</param>
        /// <param name="dataManager">The DataManager instance.</param>
        /// <param name="seStringManager">The SeStringManager instance.</param>
        internal PartyFinderListing(PartyFinderPacketListing listing, DataManager dataManager, SeStringManager seStringManager)
        {
            this.objective          = listing.Objective;
            this.conditions         = listing.Conditions;
            this.dutyFinderSettings = listing.DutyFinderSettings;
            this.lootRules          = listing.LootRules;
            this.searchArea         = listing.SearchArea;
            this.slots       = listing.Slots.Select(accepting => new PartyFinderSlot(accepting)).ToArray();
            this.jobsPresent = listing.JobsPresent;

            this.Id               = listing.Id;
            this.ContentIdLower   = listing.ContentIdLower;
            this.Name             = seStringManager.Parse(listing.Name.TakeWhile(b => b != 0).ToArray());
            this.Description      = seStringManager.Parse(listing.Description.TakeWhile(b => b != 0).ToArray());
            this.World            = new Lazy <World>(() => dataManager.GetExcelSheet <World>().GetRow(listing.World));
            this.HomeWorld        = new Lazy <World>(() => dataManager.GetExcelSheet <World>().GetRow(listing.HomeWorld));
            this.CurrentWorld     = new Lazy <World>(() => dataManager.GetExcelSheet <World>().GetRow(listing.CurrentWorld));
            this.Category         = (DutyFinderCategory)listing.Category;
            this.RawDuty          = listing.Duty;
            this.Duty             = new Lazy <ContentFinderCondition>(() => dataManager.GetExcelSheet <ContentFinderCondition>().GetRow(listing.Duty));
            this.DutyType         = (DutyType)listing.DutyType;
            this.BeginnersWelcome = listing.BeginnersWelcome == 1;
            this.SecondsRemaining = listing.SecondsRemaining;
            this.MinimumItemLevel = listing.MinimumItemLevel;
            this.Parties          = listing.NumParties;
            this.SlotsAvailable   = listing.NumSlots;
            this.JobsPresent      = listing.JobsPresent
                                    .Select(id => new Lazy <ClassJob>(
                                                () => id == 0
                        ? null
                        : dataManager.GetExcelSheet <ClassJob>().GetRow(id)))
                                    .ToArray();
        }
Esempio n. 7
0
 /// <summary>
 /// Initialize with static access to Dalamud.
 /// </summary>
 /// <param name="dalamud">The Dalamud instance.</param>
 internal static void Initialize(Dalamud dalamud)
 {
     seStringManager = dalamud.SeStringManager;
     handle          = Process.GetCurrentProcess().Handle;
 }
Esempio n. 8
0
        public void Start()
        {
            Configuration = DalamudConfiguration.Load(StartInfo.ConfigurationPath);

            // Initialize the process information.
            TargetModule = Process.GetCurrentProcess().MainModule;
            SigScanner   = new SigScanner(TargetModule, true);

            AntiDebug = new AntiDebug(SigScanner);
#if DEBUG
            AntiDebug.Enable();
#endif

            // Initialize game subsystem
            Framework = new Framework(SigScanner, this);

            WinSock2 = new WinSockHandlers();

            NetworkHandlers = new NetworkHandlers(this, StartInfo.OptOutMbCollection);

            ClientState = new ClientState(this, StartInfo, SigScanner);

            LocalizationManager = new Localization(AssetDirectory.FullName);
            if (!string.IsNullOrEmpty(Configuration.LanguageOverride))
            {
                LocalizationManager.SetupWithLangCode(Configuration.LanguageOverride);
            }
            else
            {
                LocalizationManager.SetupWithUiCulture();
            }

            PluginRepository = new PluginRepository(this, StartInfo.PluginDirectory, StartInfo.GameVersion);

            DalamudUi = new DalamudInterface(this);

            var isInterfaceLoaded = false;
            if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_INTERFACE") ?? "false"))
            {
                try {
                    InterfaceManager         = new InterfaceManager(this, SigScanner);
                    InterfaceManager.OnDraw += DalamudUi.Draw;

                    InterfaceManager.Enable();
                    isInterfaceLoaded = true;
                } catch (Exception e) {
                    Log.Information(e, "Could not init interface.");
                }
            }

            Data = new DataManager(StartInfo.Language);
            try {
                Data.Initialize(AssetDirectory.FullName);
            } catch (Exception e) {
                Log.Error(e, "Could not initialize DataManager.");
                Unload();
                return;
            }

            SeStringManager = new SeStringManager(Data);

            // Initialize managers. Basically handlers for the logic
            CommandManager  = new CommandManager(this, StartInfo.Language);
            DalamudCommands = new DalamudCommands(this);
            DalamudCommands.SetupCommands();

            ChatHandlers = new ChatHandlers(this);

            if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_PLUGINS") ?? "false"))
            {
                try
                {
                    PluginRepository.CleanupPlugins();

                    PluginManager =
                        new PluginManager(this, StartInfo.PluginDirectory, StartInfo.DefaultPluginDirectory);
                    PluginManager.LoadPlugins();
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Plugin load failed.");
                }
            }

            Framework.Enable();
            ClientState.Enable();

            IsReady = true;

            Troubleshooting.LogTroubleshooting(this, isInterfaceLoaded);

            Log.Information("Dalamud is ready.");
        }
Esempio n. 9
0
 /// <summary>
 /// Initialize with static access to Dalamud.
 /// </summary>
 /// <param name="dalamud">The Dalamud instance.</param>
 internal static void Initialize(Dalamud dalamud)
 {
     seStringManager = dalamud.SeStringManager;
 }
Esempio n. 10
0
        internal PartyFinderListing(PartyFinder.Listing listing, DataManager dataManager, SeStringManager seStringManager)
        {
            this.objective          = listing.objective;
            this.conditions         = listing.conditions;
            this.dutyFinderSettings = listing.dutyFinderSettings;
            this.lootRules          = listing.lootRules;
            this.searchArea         = listing.searchArea;
            this.slots       = listing.slots.Select(accepting => new PartyFinderSlot(accepting)).ToArray();
            this.jobsPresent = listing.jobsPresent;

            Id               = listing.id;
            ContentIdLower   = listing.contentIdLower;
            Name             = seStringManager.Parse(listing.name.TakeWhile(b => b != 0).ToArray());
            Description      = seStringManager.Parse(listing.description.TakeWhile(b => b != 0).ToArray());
            World            = new Lazy <World>(() => dataManager.GetExcelSheet <World>().GetRow(listing.world));
            HomeWorld        = new Lazy <World>(() => dataManager.GetExcelSheet <World>().GetRow(listing.homeWorld));
            CurrentWorld     = new Lazy <World>(() => dataManager.GetExcelSheet <World>().GetRow(listing.currentWorld));
            Category         = (Category)listing.category;
            RawDuty          = listing.duty;
            Duty             = new Lazy <ContentFinderCondition>(() => dataManager.GetExcelSheet <ContentFinderCondition>().GetRow(listing.duty));
            DutyType         = (DutyType)listing.dutyType;
            BeginnersWelcome = listing.beginnersWelcome == 1;
            SecondsRemaining = listing.secondsRemaining;
            MinimumItemLevel = listing.minimumItemLevel;
            Parties          = listing.numParties;
            SlotsAvailable   = listing.numSlots;
            JobsPresent      = listing.jobsPresent
                               .Select(id => new Lazy <ClassJob>(() => id == 0
                                                                          ? null
                                                                          : dataManager.GetExcelSheet <ClassJob>().GetRow(id)))
                               .ToArray();
        }