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; }
/// <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; }
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; }); }
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); }); }
/// <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(); }
/// <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; }
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."); }
/// <summary> /// Initialize with static access to Dalamud. /// </summary> /// <param name="dalamud">The Dalamud instance.</param> internal static void Initialize(Dalamud dalamud) { seStringManager = dalamud.SeStringManager; }
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(); }