KamiToolKit --- Text 1 Subproject commit 26a0abbc8795a3b4b903623022ae8ba6725b59a5 1 Subproject commit d9402bf2511c9f36b0f864f01def3f05152df144   KamiToolKit.Components --- Text 1 Subproject commit a13fa93095875ccd88dfa6133e23658d5221a57b 1 Subproject commit 43d15a7bebdb7b4a00fc3acd3d0669a21e3f0004   VanillaPlus.sln.DotSettings --- Text 13 13 <s:Boolean x:Key="/Default/UserDictionary/Words/=guildhests/@EntryIndexedValue">True</s:Boolean> 14 14 <s:Boolean x:Key="/Default/UserDictionary/Words/=hasel/@EntryIndexedValue">True</s:Boolean> 15 15 <s:Boolean x:Key="/Default/UserDictionary/Words/=listinventory/@EntryIndexedValue">True</s:Boolean> .. 16 <s:Boolean x:Key="/Default/UserDictionary/Words/=loadingimage/@EntryIndexedValue">True</s:Boolean> 16 17 <s:Boolean x:Key="/Default/UserDictionary/Words/=macroicon/@EntryIndexedValue">True</s:Boolean> 17 18 <s:Boolean x:Key="/Default/UserDictionary/Words/=micon/@EntryIndexedValue">True</s:Boolean> 18 19 <s:Boolean x:Key="/Default/UserDictionary/Words/=ninegrid/@EntryIndexedValue">True</s:Boolean>   VanillaPlus/DevFeatures/DebugCustomAddon/DebugAddon.cs --- 1/2 --- C# . 1 // ReSharper disable RedundantOverriddenMember . 2 1 3 using System; 2 4 using FFXIVClientStructs.FFXIV.Component.GUI;   VanillaPlus/DevFeatures/DebugCustomAddon/DebugAddon.cs --- 2/2 --- C# 11 13 public class DebugAddon : NativeAddon { 12 14 13 15 protected override unsafe void OnSetup(AtkUnitBase* addon, Span<AtkValue> atkValueSpan) { .. 16 base.OnSetup(addon, atkValueSpan); 14 17 15 18 } .. 19 .. 20 protected override unsafe void OnFinalize(AtkUnitBase* addon) { .. 21 base.OnFinalize(addon); .. 22 .. 23 .. 24 } 16 25 } 17 26 #endif   VanillaPlus/Extensions/ClassJobCategoryExtensions.cs --- Text (4 C# parse errors, exceeded DFT_PARSE_ERROR_LIMIT) 7 7 extension(ClassJobCategory row) { 8 8 public Lumina.Excel.Collection<bool> ClassesJobs 9 9 => new(row.ExcelPage, parentOffset: row.RowOffset, offset: row.RowOffset, &ClassJobCtor, size: row.ExcelPage.Module.GetSheet<ClassJob>().Count); . 10 . 11 /// <summary> . 12 /// Returns true when the provided job is supported by this ClassJob. . 13 /// </summary> . 14 public bool IncludesJob(ClassJob job) . 15 => row.ClassesJobs[(int) job.RowId]; . 16 . 17 /// <summary> . 18 /// Returns true when the provided job row id is supported by this ClassJob. . 19 /// </summary> . 20 public bool IncludesJob(uint classJobId) . 21 => row.ClassesJobs[(int) classJobId]; 10 22 } 11 23 12 24 private static bool ClassJobCtor(ExcelPage page, uint parentOffset, uint offset, uint i)   VanillaPlus/Extensions/TerritoryTypeExtensions.cs --- Text (1 C# parse error, exceeded DFT_PARSE_ERROR_LIMIT) 1 using Lumina.Excel; 2 using Lumina.Excel.Sheets; 3 using Lumina.Text.ReadOnly; 4 5 namespace VanillaPlus.Extensions; 6 7 public static class TerritoryTypeExtensions { 8 extension(TerritoryType territoryType) { 9 public string LoadingImagePath { 10 get { 11 if (!Services.DataManager.GetExcelSheet<LoadingImage>().TryGetRow(territoryType.LoadingImage.RowId, out var loadingImage)) return string.Empty; 12 13 var imageName = loadingImage.Name.ExtractText(); 14 if (string.IsNullOrEmpty(imageName)) return string.Empty; 15 16 return $"ui/loadingimage/{imageName}_hr1.tex"; 17 } 18 } 19 } 20 } 21 22 /// <summary> 23 /// Minimal definition of the game's "LoadingImage" Excel sheet, which Lumina does not generate. 24 /// Exposes the single texture-name column referenced by <c>TerritoryType.LoadingImage</c>. 25 /// </summary> 26 [Sheet("LoadingImage")] 27 public readonly struct LoadingImage(ExcelPage page, uint offset, uint row) : IExcelRow<LoadingImage> { 28 public uint RowId => row; 29 public uint RowOffset => offset; 30 public ExcelPage ExcelPage => page; 31 32 public ReadOnlySeString Name => page.ReadString(offset, offset); 33 34 static LoadingImage IExcelRow<LoadingImage>.Create(ExcelPage page, uint offset, uint row) 35 => new(page, offset, row); 36 } 37 38   VanillaPlus/Features/ActionHighlight/ActionHighlight.cs --- 1/4 --- Text (5 C# parse errors, exceeded DFT_PARSE_ERROR_LIMIT) 25 25 Type = ModificationType.UserInterface, 26 26 Authors = ["attickdoor", "Zeffuro"], 27 27 CompatibilityModule = new PluginCompatibilityModule("AbilityAnts"), 28 .. DisabledReason = "Currently unavailable.\n\nTemporarily disabled, Will return shortly. Sorry for the trouble.", 29 28 }; 30 29 31 30 public override string ImageName => "ActionHighlight.png";   VanillaPlus/Features/ActionHighlight/ActionHighlight.cs --- 2/4 --- Text (5 C# parse errors, exceeded DFT_PARSE_ERROR_LIMIT) 55 Size = new Vector2(700.0f, 650.0f), 54 Size = new Vector2(700.0f, 650.0f), 56 InternalName = "ActionHighlightConfig", 55 InternalName = "ActionHighlightConfig", 57 Title = Strings.ActionHighlight_Configuration, 56 Title = Strings.ActionHighlight_Configuration, 58 OptionsList = Config.ClassJobConfigs, 57 OptionsList = [], 59 SaveConfig = () => Task.Run(Config.Save), 58 SaveConfig = () => Task.Run(Config.Save), 60 GetEntrySearchString = entry => Services.DataManager.GetExcelSheet<ClassJob>().GetRow(entry.ClassJobId) 59 GetEntrySearchString = entry => Services.DataManager.GetExcelSheet<ClassJob>().GetRow(entry.ClassJobId) .. .Name.ToString(), .. .Name.ToString(), 61 AddClicked = OnAddClicked, 60 AddClicked = OnAddClicked, 62 RemoveClicked = OnRemoveClicked, 61 RemoveClicked = OnRemoveClicked, 63 }; 62 }; 64 63 .. 64 UpdateOptionsList(); .. 65 65 OpenConfigAction = configAddon.Toggle; 66 OpenConfigAction = configAddon.Toggle; 66 67 67 unsafe { 68 unsafe {   VanillaPlus/Features/ActionHighlight/ActionHighlight.cs --- 3/4 --- Text (5 C# parse errors, exceeded DFT_PARSE_ERROR_LIMIT) 98 } 99 } 99 100 100 Task.Run(Config.Save); 101 Task.Run(Config.Save); 101 configAddon?.OptionsList = Config.ClassJobConfigs; 102 UpdateOptionsList(); 102 }; 103 }; 103 104 104 classJobSearchAddon?.Open(); 105 classJobSearchAddon?.Open();   VanillaPlus/Features/ActionHighlight/ActionHighlight.cs --- 4/4 --- Text (5 C# parse errors, exceeded DFT_PARSE_ERROR_LIMIT) 168 } 169 } 169 } 170 } 170 171 171 public static List<Action> GetClassActions() { 172 private void UpdateOptionsList() { 172 List<uint> additionalActions = [7444, 7445, 37018, 37023, 37024, 37025, 37026, 37027, 37028]; 173 if (configAddon is null) return; ... 174 if (Config is null) return; 173 175 174 // I have no idea what Unknown6 is, but it's been in there since the very first AbilityAnts release. 176 Task.Run(() => { ... 177 var results = Config.ClassJobConfigs ... 178 .Where(entry => entry.ClassJobId is not 0) ... 179 .OrderBy(entry => Services.SeStringEvaluator.EvaluateFromAddon(981, [entry.ClassJobId]).ToString()) ... 180 .ToList(); ... 181 175 // My best guess at the moment is that it removes abilities that have been replaced or upgraded. 182 Services.Framework.Run(() => { ... 183 configAddon.OptionsList = results; ... 184 }); ... 185 }); ... 186 } ... 187 ... 188 /// <summary> ... 189 /// Gets all valid actions for the specified ClassJob. ... 190 /// </summary> ... 191 public static List<Action> GetClassActions(ClassJob classJob) 176 return Services.DataManager.GetExcelSheet<Action>() 192 => Services.DataManager.GetExcelSheet<Action>() 177 .Where(action => IsValidAction(action) || additionalActions.Contains(action.RowId)) 193 .Where(action => IsValidAction(action, classJob)) ... 194 .DistinctBy(action => action.RowId) 178 .ToList(); 195 .ToList(); ... 196 179 } 197 /// <summary> ... 198 /// Returns true for actions that belong to the specified ClassJob <b>or its parent class</b>. ... 199 /// </summary> ... 200 private static bool IsPlayerClassAction(Action action, ClassJob classJob) ... 201 => action.IsPlayerAction && action.ClassJobCategory.Value.IncludesJob(classJob); ... 202 ... 203 /// <summary> ... 204 /// Returns true for actions that can be used, but only as flip actions from other skills, such as dancer steps ... ... . ... 205 /// </summary> ... 206 private static bool IsUnassignableClassAction(Action action, ClassJob classJob) ... 207 => action is { IsPlayerAction: false, ClassJob.RowId: 0, ClassJobLevel: not 0 } ... 208 && action.IsUsableByJob(classJob); ... 209 ... 210 /// <summary> ... 211 /// Returns true for actions that we want to allow ActionHighlight to highlight. ... 212 /// </summary> ... 213 internal static bool IsValidAction(Action action, ClassJob classJob) ... 214 => action is { IsPvP: false, IsRoleAction: false, RowId: not (2272u or 29581u or 1584u) } // Rabbit Medium ... ... and 六道輪廻 (should be a PVP action) and Purify ... 215 && (action.ActionCategory.RowId == 4 || action.Recast100ms > 150) ... 216 && (IsPlayerClassAction(action, classJob) || IsUnassignableClassAction(action, classJob)); 180 217 181 public static bool IsValidAction(Action action) 218 /// <summary> ... 219 /// Returns true for actions that are valid for the specified ClassJob. ... 220 /// </summary> ... 221 internal static bool IsValidRoleAction(Action action, ClassJob classJob) 182 => action is { IsPvP: false, ClassJob.ValueNullable.Unknown6: > 0, IsPlayerAction: true } and ({ ActionCate 222 => action is { IsPvP: false, IsRoleAction: true } ... gory.RowId: 4 } or { Recast100ms: > 100 }); ... ... 223 && action.ClassJobCategory.Value.IncludesJob(classJob); 183 } 224 }   VanillaPlus/Features/ActionHighlight/Config/AntsConfig.cs --- 1/4 --- C# 1 1 using System; 2 2 using System.Collections.Generic; 3 3 using System.Linq; . 4 using Lumina.Excel.Sheets; 4 5 using Newtonsoft.Json.Linq; 5 6 using VanillaPlus.Classes; 6 7 using Action = Lumina.Excel.Sheets.Action;   VanillaPlus/Features/ActionHighlight/Config/AntsConfig.cs --- 2/4 --- C# 30 31 var actionSettingsObj = jObject["ActionSettings"]?.ToObject<JObject>(); 31 32 if (actionSettingsObj is null) return false; .. 33 .. 34 var classJobs = Services.DataManager.GetExcelSheet<ClassJob>() .. 35 .Where(job => job is { RowId: not 0, Name.IsEmpty: false, IsCrafter: false, IsGatherer: false }) .. 36 .ToList(); 32 37 33 38 List<AntsClassJobConfig> newEntries = []; 34 39   VanillaPlus/Features/ActionHighlight/Config/AntsConfig.cs --- 3/4 --- C# 38 var actionSettings = property.Value.ToObject<AntsActionSetting>(); 43 var actionSettings = property.Value.ToObject<AntsActionSetting>(); 39 if (actionSettings is null) continue; 44 if (actionSettings is null) continue; 40 45 41 var actionInfo = Services.DataManager.GetExcelSheet<Action>().GetRow(actionId); 46 var action = Services.DataManager.GetExcelSheet<Action>().GetRow(actionId); 42 47 43 var classJobEntry = newEntries.FirstOrDefault(entry => entry.ClassJobId == actionInfo.ClassJob.R 48 foreach (var classJob in classJobs) { .. owId); .. 44 .. 45 if (classJobEntry is null) { 49 if (!ActionHighlight.IsValidAction(action, classJob) && !ActionHighlight.IsValidRoleAction(a .. .. ction, classJob)) continue; .. 50 46 newEntries.Add(new AntsClassJobConfig { 51 AddActionSetting(newEntries, classJob.RowId, actionSettings, actionId); 47 ClassJobId = actionInfo.ClassJob.RowId, 52 } 48 ActionSettings = [ .. 49 actionSettings, .. 50 ], .. 51 }); .. 52 } .. 53 else { .. 54 classJobEntry.ActionSettings.Add(actionSettings); .. 55 } .. 56 } 53 } 57 54 58 ClassJobConfigs = newEntries; 55 ClassJobConfigs = newEntries;   VanillaPlus/Features/ActionHighlight/Config/AntsConfig.cs --- 4/4 --- C# 62 59 return false; 63 60 } .. 61 .. 62 private static void AddActionSetting(List<AntsClassJobConfig> entries, uint classJobId, AntsActionSetting source, uint actionId) { .. 63 if (entries.FirstOrDefault(configEntry => configEntry.ClassJobId == classJobId) is not { } entry) { .. 64 entry = new AntsClassJobConfig { .. 65 ClassJobId = classJobId, .. 66 ActionSettings = [], .. 67 }; .. 68 .. 69 entries.Add(entry); .. 70 } .. 71 .. 72 if (entry.ActionSettings.Any(setting => setting.ActionId == actionId)) return; .. 73 .. 74 entry.ActionSettings.Add(new AntsActionSetting { .. 75 ActionId = actionId, .. 76 IsEnabled = source.IsEnabled, .. 77 ThresholdMs = source.ThresholdMs, .. 78 }); .. 79 } 64 80 }   VanillaPlus/Features/ActionHighlight/Nodes/AntsClassJobConfigurationNode.cs --- 1/2 --- C# 1 1 using System; 2 . using System.Collections.Generic; 3 2 using System.Linq; 4 3 using System.Numerics; 5 4 using KamiToolKit.Components.ConfigurationNodes;   VanillaPlus/Features/ActionHighlight/Nodes/AntsClassJobConfigurationNode.cs --- 2/2 --- C# 35 34 36 backgroundImageNode.IconId = 62000 + entry.ClassJobId; 35 backgroundImageNode.IconId = 62000 + entry.ClassJobId; 37 .. 38 List<Action> additionalActions = []; .. 39 .. 40 // Astrologian Entries. .. 41 if (entry.ClassJobId is 33) { .. 42 foreach (var action in (List<uint>)[7444, 7445, 37018, 37023, 37024, 37025, 37026, 37027, 37028]) { .. 43 additionalActions.Add(Services.DataManager.GetExcelSheet<Action>().GetRow(action)); .. 44 } .. 45 } .. 46 36 47 actionsListNode.OptionsList = Services.DataManager.GetExcelSheet<Action>() 37 actionsListNode.OptionsList = ActionHighlight.GetClassActions(classJob); 48 .Where(a => !a.IsPvP && (a.ClassJob.RowId == classJob.RowId || a.ClassJob.RowId == classJob.ClassJobPare .. .. nt.RowId) .. 49 && a.IsPlayerAction && (a.ActionCategory.RowId == 4 || a.Recast100ms > 100) && a.Ro .. .. wId != 29581) .. 50 .Where(action => action is { IsRoleAction: false }) .. 51 .Concat(additionalActions) .. 52 .ToList(); .. 53 38 54 rolesListNode.OptionsList = Services.DataManager.GetExcelSheet<Action>() 39 rolesListNode.OptionsList = Services.DataManager.GetExcelSheet<Action>() 55 .Where(action => action.ClassJobCategory.Value.ClassesJobs[(int) entry.ClassJobId]) 40 .Where(action => action.ClassJobCategory.Value.ClassesJobs[(int) entry.ClassJobId])   VanillaPlus/Features/BorderlessCutscenes/BorderlessCutscenes.cs --- C# 10 DisplayName = Strings.ModificationDisplay_BorderlessCutscenes, 10 DisplayName = Strings.ModificationDisplay_BorderlessCutscenes, 11 Description = Strings.ModificationDescription_BorderlessCutscenes, 11 Description = Strings.ModificationDescription_BorderlessCutscenes, 12 Type = ModificationType.GameBehavior, 12 Type = ModificationType.GameBehavior, 13 Authors = ["goat", "Maple", "MidoriKami"], 13 Authors = ["goat", "MapleRecall", "MidoriKami"], 14 CompatibilityModule = new PluginCompatibilityModule("Dalamud.FullscreenCutscenes"), 14 CompatibilityModule = new PluginCompatibilityModule("Dalamud.FullscreenCutscenes"), 15 }; 15 }; 16 16   VanillaPlus/Features/FancyLoadingScreens/FancyLoadingScreens.cs --- Text (3 C# parse errors, exceeded DFT_PARSE_ERROR_LIMIT) 1 using System; 2 using System.Numerics; 3 using System.Threading.Tasks; 4 using Dalamud.Game.Addon.Lifecycle; 5 using Dalamud.Game.Addon.Lifecycle.AddonArgTypes; 6 using Dalamud.Hooking; 7 using FFXIVClientStructs.FFXIV.Client.Game.UI; 8 using FFXIVClientStructs.FFXIV.Client.UI; 9 using FFXIVClientStructs.FFXIV.Component.GUI; 10 using KamiToolKit.Controllers; 11 using KamiToolKit.Enums; 12 using KamiToolKit.Nodes; 13 using KamiToolKit.Nodes.Simplified; 14 using KamiToolKit.Timelines; 15 using Lumina.Excel.Sheets; 16 using VanillaPlus.Classes; 17 using VanillaPlus.Enums; 18 19 namespace VanillaPlus.Features.FancyLoadingScreens; 20 21 public class FancyLoadingScreens : GameModification { 22 public override ModificationInfo ModificationInfo => new() { 23 DisplayName = Strings.ModificationDisplay_FancyLoadingScreens, 24 Description = Strings.ModificationDescription_FancyLoadingScreens, 25 Type = ModificationType.UserInterface, 26 Authors = ["goat", "MapleRecall", "MidoriKami"], 27 CompatibilityModule = new PluginCompatibilityModule("Dalamud.LoadingImage"), 28 }; 29 30 private Hook<Telepo.Delegates.Teleport>? teleportHook; 31 32 private AddonController? locationTitleController; 33 private TimelineNode<SimpleImageNode>? artworkImageNode; 34 private bool isTeleporting; 35 36 public override async Task OnEnableAsync() { 37 unsafe { 38 teleportHook = Services.Hooker.HookFromAddress<Telepo.Delegates.Teleport>(Telepo.MemberFunctionPointers.Teleport, OnTeleport); 39 teleportHook?.Enable(); 40 41 locationTitleController = new AddonController { 42 AddonName = "_LocationTitle", 43 OnSetup = OnLocationTitleSetup, 44 OnFinalize = OnLocationTitleFinalize, 45 }; 46 } 47 48 await Services.Framework.Run(() => locationTitleController.Enable()); 49 50 Services.AddonLifecycle.RegisterListener(AddonEvent.PostHide, "_LocationTitle", OnLoadingScreenHide); 51 Services.ClientState.TerritoryChanged += OnTerritoryChanged; 52 } 53 54 public override async Task OnDisableAsync() { 55 Services.ClientState.TerritoryChanged -= OnTerritoryChanged; 56 Services.AddonLifecycle.UnregisterListener(OnLoadingScreenHide); 57 58 teleportHook?.Dispose(); 59 teleportHook = null; 60 61 await Services.Framework.Run(() => { 62 locationTitleController?.Dispose(); 63 }); 64 locationTitleController = null; 65 66 artworkImageNode = null; 67 } 68 69 private unsafe void OnLocationTitleSetup(AtkUnitBase* addon) { 70 artworkImageNode = new TimelineNode<SimpleImageNode> { 71 ContentNode = { 72 FitTexture = true, 73 }, 74 75 LabelsetTimeline = new TimelineBuilder() 76 .BeginFrameSet(1, 480) 77 .AddLabel(1, 1, AtkTimelineJumpBehavior.Start, 0) 78 .AddLabel(480, 0, AtkTimelineJumpBehavior.PlayOnce, 0) 79 .EndFrameSet() 80 .Build(), 81 82 ContentTimeline = new TimelineBuilder() 83 .BeginFrameSet(1, 480) 84 .AddFrame(1, scale: new Vector2(1.0f, 1.0f), alpha: 0) 85 .AddFrame(60, scale: new Vector2(1.1f, 1.1f), alpha: 255) 86 .AddFrame(480, scale: new Vector2(1.4f, 1.4f), alpha: 255) 87 .EndFrameSet() 88 .Build(), 89 }; 90 artworkImageNode.AttachNode(addon, NodePosition.AsFirstChild); 91 } 92 93 private unsafe void OnLocationTitleFinalize(AtkUnitBase* addon) { 94 artworkImageNode?.Dispose(); 95 artworkImageNode = null; 96 } 97 98 private void OnTerritoryChanged(uint territoryId) { 99 if (!isTeleporting) { 100 SetLoadingScreenImage(territoryId); 101 } 102 } 103 104 private void SetLoadingScreenImage(uint territoryId) { 105 if (artworkImageNode is null) return; 106 107 unsafe { 108 var parentAddon = RaptureAtkUnitManager.Instance()->GetAddonByNode(artworkImageNode); 109 if (parentAddon is null) return; 110 111 var screenSize = (Vector2) AtkStage.Instance()->ScreenSize; 112 var rootScale = parentAddon->RootNode->Scale; 113 114 artworkImageNode.Position = -parentAddon->RootNode->Position / rootScale; 115 artworkImageNode.Size = screenSize / rootScale; 116 artworkImageNode.ContentNode.Origin = screenSize / rootScale / 2.0f; 117 118 if (!Services.DataManager.GetExcelSheet<TerritoryType>().TryGetRow(territoryId, out var territory)) return; 119 artworkImageNode?.ContentNode.TexturePath = territory.LoadingImagePath; 120 artworkImageNode?.Timeline?.PlayAnimation(1, true); 121 artworkImageNode?.IsVisible = true; 122 } 123 } 124 125 private void OnLoadingScreenHide(AddonEvent type, AddonArgs args) { 126 artworkImageNode?.IsVisible = false; 127 isTeleporting = false; 128 } 129 130 private unsafe bool OnTeleport(Telepo* thisPtr, uint aetheryteId, byte subIndex) { 131 var accepted = teleportHook!.Original(thisPtr, aetheryteId, subIndex); 132 133 try { 134 if (accepted && Services.DataManager.GetExcelSheet<Aetheryte>().TryGetRow(aetheryteId, out var aetheryte)) { 135 isTeleporting = true; 136 SetLoadingScreenImage(aetheryte.Territory.RowId); 137 } 138 } 139 catch (Exception exception) { 140 Services.PluginLog.Exception(exception); 141 } 142 143 return accepted; 144 } 145 } 146   VanillaPlus/Native/Addons/ModificationBrowserAddon.cs --- Text (6 C# parse errors, exceeded DFT_PARSE_ERROR_LIMIT) 125 125 } 126 126 } 127 127 ... 128 protected override unsafe void OnFinalize(AtkUnitBase* addon) { ... 129 base.OnFinalize(addon); ... 130 ... 131 textInputNode = null; ... 132 listNode = null; ... 133 modificationInfoNode = null; ... 134 searchRegex = null; ... 135 ... 136 selectedTab = BrowserSelectedTab.All; ... 137 selectedCategory = BrowserSelectedCategory.All; ... 138 } ... 139 128 140 private void SwitchTab(BrowserSelectedTab tab) { 129 141 selectedTab = tab; 130 142 Task.Run(UpdateListNode);   VanillaPlus/Resources/Strings.Designer.cs --- C# 4711 4711 } 4712 4712 } .... 4713 .... 4714 /// <summary> .... 4715 /// Looks up a localized string similar to Fancy Loading Screens. .... 4716 /// </summary> .... 4717 internal static string ModificationDisplay_FancyLoadingScreens { .... 4718 get { .... 4719 return ResourceManager.GetString("ModificationDisplay_FancyLoadingScreens", resourceCulture); .... 4720 } .... 4721 } .... 4722 .... 4723 /// <summary> .... 4724 /// Looks up a localized string similar to Replaces the loading screen artwork with the destination zone's full-size loading image.. .... 4725 /// </summary> .... 4726 internal static string ModificationDescription_FancyLoadingScreens { .... 4727 get { .... 4728 return ResourceManager.GetString("ModificationDescription_FancyLoadingScreens", resourceCulture); .... 4729 } .... 4730 } .... 4731 .... 4732 /// <summary> .... 4733 /// Looks up a localized string similar to Fancy Loading Screens. .... 4734 /// </summary> .... 4735 internal static string FancyLoadingScreens_ConfigTitle { .... 4736 get { .... 4737 return ResourceManager.GetString("FancyLoadingScreens_ConfigTitle", resourceCulture); .... 4738 } .... 4739 } .... 4740 .... 4741 /// <summary> .... 4742 /// Looks up a localized string similar to General. .... 4743 /// </summary> .... 4744 internal static string FancyLoadingScreens_CategoryGeneral { .... 4745 get { .... 4746 return ResourceManager.GetString("FancyLoadingScreens_CategoryGeneral", resourceCulture); .... 4747 } .... 4748 } .... 4749 .... 4750 /// <summary> .... 4751 /// Looks up a localized string similar to Show artwork on instance loads. .... 4752 /// </summary> .... 4753 internal static string FancyLoadingScreens_LabelInstancedLoad { .... 4754 get { .... 4755 return ResourceManager.GetString("FancyLoadingScreens_LabelInstancedLoad", resourceCulture); .... 4756 } .... 4757 } .... 4758 .... 4759 /// <summary> .... 4760 /// Looks up a localized string similar to Shows the destination artwork when switching instanced areas (duties, housing, etc.). Note: the artwork covers the chat box, so you cannot chat while loading. .... 4761 /// </summary> .... 4762 internal static string FancyLoadingScreens_LabelInstancedLoadNote { .... 4763 get { .... 4764 return ResourceManager.GetString("FancyLoadingScreens_LabelInstancedLoadNote", resourceCulture); .... 4765 } .... 4766 } 4713 4767 } 4714 4768 }   VanillaPlus/Resources/Strings.resx --- XML 1692 1692 <data name="AddonConfig_DisableKeybindInCombat" xml:space="preserve"> 1693 1693 <value>Disable Keybind in Combat</value> 1694 1694 </data> .... 1695 <data name="ModificationDisplay_FancyLoadingScreens" xml:space="preserve"> .... 1696 <value>Fancy Loading Screens</value> .... 1697 </data> .... 1698 <data name="ModificationDescription_FancyLoadingScreens" xml:space="preserve"> .... 1699 <value>Replaces the loading screen artwork with the destination zone's full-size loading image.</value> .... 1700 </data> .... 1701 <data name="FancyLoadingScreens_ConfigTitle" xml:space="preserve"> .... 1702 <value>Fancy Loading Screens</value> .... 1703 </data> .... 1704 <data name="FancyLoadingScreens_CategoryGeneral" xml:space="preserve"> .... 1705 <value>General</value> .... 1706 </data> .... 1707 <data name="FancyLoadingScreens_LabelInstancedLoad" xml:space="preserve"> .... 1708 <value>Show artwork on instance loads</value> .... 1709 </data> .... 1710 <data name="FancyLoadingScreens_LabelInstancedLoadNote" xml:space="preserve"> .... 1711 <value>Shows the destination artwork when switching instanced areas (duties, housing, etc.). Note: the artwork covers the chat box, so you cannot chat while loading.</value> .... 1712 </data> 1695 1713 </root>   VanillaPlus/VanillaPlus.csproj --- XML 1 <Project Sdk="Dalamud.NET.Sdk/15.0.0"> 1 <Project Sdk="Dalamud.NET.Sdk/15.0.0"> 2 <PropertyGroup> 2 <PropertyGroup> 3 <Version>1.4.1.0</Version> 3 <Version>1.4.1.1</Version> 4 </PropertyGroup> 4 </PropertyGroup> 5 5 6 <PropertyGroup> 6 <PropertyGroup>