From 4502e7c1f9e3c40ca102d0432758b66445c6353d Mon Sep 17 00:00:00 2001 From: Earthfiredrake Date: Mon, 26 Jun 2017 19:17:40 -0600 Subject: [PATCH] More granularity with regards to notification options, including collected/uncollected lore and waypoints. --- LoreHound.fla | Bin 68667 -> 68883 bytes README.md | 24 ++--- config/Strings.xml | 12 ++- efd/LoreHound/LoreHound.as | 96 ++++++++++++------ efd/LoreHound/gui/ConfigWindowContent.as | 24 ----- efd/LoreHound/gui/LoreCategorySettingGroup.as | 55 ++++++++-- 6 files changed, 132 insertions(+), 79 deletions(-) diff --git a/LoreHound.fla b/LoreHound.fla index b487eb58532674603993fa9babc0be75f03ebc96..13646e66d0236bcccc16a0b8a7dba80a54723f6d 100644 GIT binary patch delta 7715 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 delta 7509 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 PIQ5-oE@ diff --git a/README.md b/README.md index dd36783..f833f8c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # TSW-LoreHound Notifications for lore drops in The Secret World, even if they're not visible. +Mostly compatible with SWL, with limitations on GUI customization. ## Overview Will detect and attempt to identify lore pickups when they enter or spawn within a 20m radius around the player. Lore pickups have been roughly categorized into four groups. @@ -15,7 +16,7 @@ Will detect and attempt to identify lore pickups when they enter or spawn within + Uncategorized: Something that I haven't run across yet, so haven't been able to place in a group. + Opting into the automated report option permits the collection of required information to be mailed to me when you open the bank, saving you the trouble. -Each category can independently have notifications output to either chat (System channel) or as FIFO alerts. By default, if it is able to precisely identify a lore that the character has not picked up, it will ignore it. When sending a notification through the chat, a set of additional details can be displayed. Those marked with a '*' will always be displayed with Uncategorized lore and are used to identify it in the index. +Each category can independently have notifications output to either chat (System channel), as FIFO alerts, or with ingame waypoints. By default, if it is able to precisely identify a lore that the character has not picked up, it will ignore it. When sending a notification through the chat, a set of additional details can be displayed. Those marked with a '*' will always be displayed with Uncategorized lore and are used to identify it in the index. + Timestamp: Puts a timestamp on detections, so you can know when the drop was without having to timestamp all of the System channel (revealing the mysteriously blank lines that it otherwise hides). + Location*: Map name and coordinate vector for the lore + The vector has been swizzled into [x,z,y] format, where y is the vertical coordinate @@ -29,16 +30,20 @@ To improve efficiency and reduce false-positives, it only checks against the exi All settings are saved account wide and will be shared across characters. If you'd rather have different settings for each character, renaming the file "LoginPrefs.xml" to "CharPrefs.xml" when installing/upgrading the mod should work without any problems. A clean install of the mod is recommended if doing this, as it will be unable to transfer existing settings anyway. ## Installation -Any packaged releases can be installed by copying the contents into [Game Directory]\Data\Gui\Customized\Flash and restarting the client. +The packaged release should be unzipped into the appropriate folder and the client restarted. +TSW: [TSW Directory]\Data\Gui\Customized\Flash. +SWL: [SWL Directory]\Data\Gui\Custom\Flash. When upgrading, existing .bxml files in the LoreHound directory should be deleted to ensure changes in the .xml files are loaded (whichever is newer seems to take precedence). -The update system *should* carry forward settings from v0.4.0-beta onwards. However, v1.0.x will be the last release to support upgrades from the v0.x pre-release line. Starting with v1.1.0 directly upgrading from versions prior to v1.0.0 may result in settings being lost, reset, or potentially invalid. +An internal update system *should* carry forward settings from previous versions. To simplify the system, major versions will be used as thresholds, v1.0.x will upgrade from any v0.y, but later versions require a staged upgrade through v1.0. Starting with v1.1.0 directly upgrading from versions prior to v1.0.0 may result in settings being lost, reset, or potentially invalid. If upgrading from v0.1.1-alpha, a clean reinstall is recommended. Remove the existing mod entirely and login to the game to clear any existing settings before installing a more recent version. ## Change Log -Version 1.1.2 +Version 1.2.0 ++ Expanded options for tracking known/unkown lore ++ Expanded options for waypoint notifications + Unifies lore tracking and waypoints, should no longer forget to provide despawn notifications Version 1.1.0 @@ -110,21 +115,16 @@ The following issues are known to exist in the most recent release: + A brief lag may be observed after reloading the ui, where the full size icon is displayed rather than attached to the topbar + This is intentional and reduces the occurence of bugs related to other mods integrating with the topbar -This version of the mod has been lightly tested in SWL and found to work with the following known caveats: -+ It does not integrate with the default top-bar +SWL compatibility issues: + GUI editing is not currently working, so the icon cannot be moved or resized ## Testing and Further Developments -I'm relatively satisfied with the features that exist, and will continue providing basic support for bug fixes and updates to files if needed. However, due to the current situation, I am unlikely to get around to implementing the remaining features or attempting to port to SWL until more information is available: -+ More flexible alert settings, at the category level - + Known|unknown filter - + Waypoints by category +This continues to be something of a work in progress, though I'm mostly satisfied that it achives the objectives. I am considering: + Some form of whitelisting to further filter the accepted values: + The *easy* version would be one that simply works on loreIDs after initial filtering, as a global white list. + More complicated systems (intelligent per-category whitelists, random drops only, etc.) would require additional information to be saved about each lore entry. + Actual localization would be nice, but I'm not going to rely on Google and my limited knowledge of French to be at all accurate. Somebody else will have to provide me with translations, if there is sufficient interest. -+ My previously mentioned second project is currently on hold. While I still think it has value, I am not likely to develop it further until I have had a chance to look at SWL and decide which, if either, I will be playing. -+ As SWL is likely to have slightly different mod interface requirements, am considering changes to the framework design to make it easier to port|back-port my mods. Thinking of using dependency injection, instead of inheritance, of the framework. ++ Was considering a map replacement mod that would permit more extensive custom markings, and could tie in with LoreHound to populate the lore locations. This was placed on hiatus due to the SWL release, and is not yet in development. A feature for helping with The Abandoned lore was found to be unworkable. Lore.IsLockedForChar either does not work as advertised, or requires GM permissions. diff --git a/config/Strings.xml b/config/Strings.xml index 2657796..72f4ada 100644 --- a/config/Strings.xml +++ b/config/Strings.xml @@ -53,10 +53,18 @@ en="Dropped Lore" /> + + + + - - 0) { + // Rename *level settings to *alert + Config.SetValue("FifoAlerts", Config.GetValue("FifoLevel")); + Config.SetValue("ChatAlerts", Config.GetValue("ChatLevel")); + // Copy waypoint settings to new per-category setting + var existingAlerts = Config.GetValue("FifoLevel") | Config.GetValue("ChatLevel"); + Config.SetValue("WaypointAlerts", (Config.GetValue("ShowWaypoints") ? existingAlerts : ef_LoreType_None)); + // Copy unclaimed lore to per-category setting (no existing setting for claimed lore) + Config.SetValue("AlertForUncollected", (Config.GetValue("IgnoreUnclaimedLore") ? ef_LoreType_Uncategorized : ef_LoreType_All - ef_LoreType_Despawn)); + } } private function LoadComplete():Void { super.LoadComplete(); Config.DeleteSetting("CheckNewContent"); // DEPRECATED(v1.1.0.alpha): Renamed + Config.DeleteSetting("FifoLevel"); // DEPRECATED(v1.2.0.alpha) : Renamed + Config.DeleteSetting("ChatLevel"); // DEPRECATED(v1.2.0.alpha) : Renamed + Config.DeleteSetting("ShowWaypoints"); // DEPRECATED(v1.2.0.alpha) : Renamed + Config.DeleteSetting("IgnoreUnclaimedLore"); // DEPRECATED(v1.2.0.alpha) : Renamed } private function Activate():Void { @@ -352,11 +377,16 @@ class efd.LoreHound.LoreHound extends Mod { TraceMsg("LoreID not available, limiting analysis"); } } else { // Tests require a valid LoreID - if (Config.GetValue("IgnoreUnclaimedLore") && !lore.IsKnown() && lore.Type != ef_LoreType_Uncategorized) { return false; } + if (lore.IsKnown) { + if (!(lore.Type & Config.GetValue("AlertForCollected"))) { return false; } + } else { + if (!(lore.Type & Config.GetValue("AlertForUncollected"))) { return false; } + } } // Pass conditions - if ((Config.GetValue("FifoLevel") & lore.Type) || - (Config.GetValue("ChatLevel") & lore.Type) || + if ((Config.GetValue("FifoAlerts") & lore.Type) || + (Config.GetValue("ChatAlerts") & lore.Type) || + (Config.GetValue("WaypointAlerts") & lore.Type) || (lore.Type == LoreData.ef_LoreType_Uncategorized && AutoReport.IsEnabled) || DumpToLog){ return true; } @@ -372,13 +402,10 @@ class efd.LoreHound.LoreHound extends Mod { var despawnedId:String = new ID32(type, instance).toString(); var lore:LoreData = TrackedLore[despawnedId]; if (lore) { // Ensure the despawned dynel was tracked by this mod - lore.Type |= LoreData.ef_LoreType_Despawn; - // Remove lore waypoint - if (Config.GetValue("ShowWaypoints")) { - delete WaypointSystem.m_CurrentPFInterface.m_Waypoints[despawnedId]; - WaypointSystem.m_CurrentPFInterface.SignalWaypointRemoved.Emit(lore.DynelID); - } - // Despawn notification + lore.Type |= LoreData.ef_LoreType_Despawn; // Set the despawn flag + + if (Config.GetValue("WaypointAlerts") & lore.Type) { RemoveWaypoint(lore); } + // Despawn notifications if ((lore.Type & LoreData.ef_LoreType_Drop) && Config.GetValue("TrackDespawns")) { if (FilterLore(lore)) { // Despawn notifications are subject to same filters as regular ones var messageStrings:Array = GetMessageStrings(lore); @@ -397,13 +424,6 @@ class efd.LoreHound.LoreHound extends Mod { UpdateIcon(); } - private function ClearWaypoints():Void { - for (var key:String in TrackedLore) { - delete WaypointSystem.m_CurrentPFInterface.m_Waypoints[key]; - WaypointSystem.m_CurrentPFInterface.SignalWaypointRemoved.Emit(TrackedLore[key].DynelID); - } - } - /// Lore identification // Much of the primary categorization info is now contained in the xml data file private function ClassifyID(categorizationId:Number):Number { @@ -586,13 +606,13 @@ class efd.LoreHound.LoreHound extends Mod { } private function DispatchMessages(messageStrings:Array, lore:LoreData, detailStrings:Array):Void { - if (Config.GetValue("ShowWaypoints") && !(lore.Type & LoreData.ef_LoreType_Despawn)) { + if ((Config.GetValue("WaypointAlerts") & lore.Type) && !(lore.Type & LoreData.ef_LoreType_Despawn)) { CreateWaypoint(lore.DynelInst, messageStrings[0]); } - if (Config.GetValue("FifoLevel") & lore.Type) { + if (Config.GetValue("FifoAlerts") & lore.Type) { FifoMsg(messageStrings[1]); } - if (Config.GetValue("ChatLevel") & lore.Type) { + if (Config.GetValue("ChatAlerts") & lore.Type) { ChatMsg(messageStrings[2], { forceTimestamp : (Config.GetValue("Details") & ef_Details_Timestamp) }); for (var i:Number = 0; i < detailStrings.length; ++i) { ChatMsg(detailStrings[i], { noPrefix : true }); @@ -640,15 +660,25 @@ class efd.LoreHound.LoreHound extends Mod { WaypointSystem.m_CurrentPFInterface.SignalWaypointAdded.Emit(waypoint.m_Id); } + private function RemoveWaypoint(lore:LoreData):Void { + delete WaypointSystem.m_CurrentPFInterface.m_Waypoints[lore.DynelID.toString()]; + WaypointSystem.m_CurrentPFInterface.SignalWaypointRemoved.Emit(lore.DynelID); + } + + private function ClearWaypoints():Void { + for (var key:String in TrackedLore) { RemoveWaypoint(TrackedLore[key]); } + } + // Ugly, but I don't really see any alternative to doing a per/frame update private function UpdateWaypoints():Void { - if (Config.GetValue("ShowWaypoints")) { - for (var key:String in TrackedLore) { + for (var key:String in TrackedLore) { + var lore:LoreData = TrackedLore[key]; + if (Config.GetValue("WaypointAlerts") & lore.Type) { // The waypoints that are added to the PFInterface are constantly stomped by the C++ side. // So I'm updating the data held by the rendered copy, and then forcing it to redo the layout before it gets stomped again. // As long as the mod is updated after the main interface, this should work. // To do this properly, I'd have to implement my own waypoint system, which just isn't worth it at this point. - var dynel:Dynel = TrackedLore[key].DynelInst; + var dynel:Dynel = lore.DynelInst; var scrPos:Point = dynel.GetScreenPosition(); var waypoint:CustomWaypoint = WaypointSystem.m_RenderedWaypoints[key]; waypoint.m_Waypoint.m_ScreenPositionX = scrPos.x; diff --git a/efd/LoreHound/gui/ConfigWindowContent.as b/efd/LoreHound/gui/ConfigWindowContent.as index 1da3c85..5fabf6c 100644 --- a/efd/LoreHound/gui/ConfigWindowContent.as +++ b/efd/LoreHound/gui/ConfigWindowContent.as @@ -18,9 +18,7 @@ class efd.LoreHound.gui.ConfigWindowContent extends WindowComponentContent { super.configUI(); // Disable focus to prevent selections from locking user input until the window closes CBModEnabled.disableFocus = true; - CBIgnoreUnclaimedLore.disableFocus = true; CBIgnoreOffSeasonLore.disableFocus = true; - CBWaypoints.disableFocus = true; CBTrackDespawns.disableFocus = true; CBErrorReports.disableFocus = true; CBExtraTests.disableFocus = true; @@ -36,9 +34,7 @@ class efd.LoreHound.gui.ConfigWindowContent extends WindowComponentContent { LocaleManager.ApplyLabel(LBInstance); LocaleManager.ApplyLabel(LBOtherGroupTitle); LocaleManager.ApplyLabel(LBEnable); - LocaleManager.ApplyLabel(LBUnclaimed); LocaleManager.ApplyLabel(LBInactive); - LocaleManager.ApplyLabel(LBWaypoints); LocaleManager.ApplyLabel(LBDespawn); LocaleManager.ApplyLabel(LBAutoReport); LocaleManager.ApplyLabel(LBExtraTests); @@ -52,9 +48,7 @@ class efd.LoreHound.gui.ConfigWindowContent extends WindowComponentContent { Config.GetValue("AutoReport").SignalValueChanged.Connect(AutoReportConfigUpdated, this); CBModEnabled.addEventListener("select", this, "CBModEnabled_Select"); - CBIgnoreUnclaimedLore.addEventListener("select", this, "CBIgnoreUnclaimedLore_Select"); CBIgnoreOffSeasonLore.addEventListener("select", this, "CBIgnoreOffSeasonLore_Select"); - CBWaypoints.addEventListener("select", this, "CBWaypoints_Select"); CBTrackDespawns.addEventListener("select", this, "CBTrackDespawns_Select"); CBErrorReports.addEventListener("select", this, "CBErrorReports_Select"); CBExtraTests.addEventListener("select", this, "CBExtraTests_Select"); @@ -74,15 +68,9 @@ class efd.LoreHound.gui.ConfigWindowContent extends WindowComponentContent { if (setting == "Enabled" || setting == undefined) { CBModEnabled.selected = Config.GetValue("Enabled"); } - if (setting == "IgnoreUnclaimedLore" || setting == undefined) { - CBIgnoreUnclaimedLore.selected = Config.GetValue("IgnoreUnclaimedLore"); - } if (setting == "IgnoreOffSeasonLore" || setting == undefined) { CBIgnoreOffSeasonLore.selected = Config.GetValue("IgnoreOffSeasonLore"); } - if (setting == "ShowWaypoints" || setting == undefined) { - CBWaypoints.selected = Config.GetValue("ShowWaypoints"); - } if (setting == "TrackDespawns" || setting == undefined) { CBTrackDespawns.selected = Config.GetValue("TrackDespawns"); } @@ -109,18 +97,10 @@ class efd.LoreHound.gui.ConfigWindowContent extends WindowComponentContent { Config.SetValue("Enabled", event.selected); } - private function CBIgnoreUnclaimedLore_Select(event:Object):Void { - Config.SetValue("IgnoreUnclaimedLore", event.selected); - } - private function CBIgnoreOffSeasonLore_Select(event:Object):Void { Config.SetValue("IgnoreOffSeasonLore", event.selected); } - private function CBWaypoints_Select(event:Object):Void { - Config.SetValue("ShowWaypoints", event.selected); - } - private function CBTrackDespawns_Select(event:Object):Void { Config.SetValue("TrackDespawns", event.selected); } @@ -157,18 +137,14 @@ class efd.LoreHound.gui.ConfigWindowContent extends WindowComponentContent { private var LBInstance:TextField; private var LBOtherGroupTitle:TextField; private var LBEnable:TextField; - private var LBUnclaimed:TextField; private var LBInactive:TextField; - private var LBWaypoints:TextField; private var LBDespawn:TextField; private var LBAutoReport:TextField; private var LBExtraTests:TextField; // Checkboxes private var CBModEnabled:CheckBox; - private var CBIgnoreUnclaimedLore:CheckBox; private var CBIgnoreOffSeasonLore:CheckBox; - private var CBWaypoints:CheckBox; private var CBTrackDespawns:CheckBox; private var CBErrorReports:CheckBox; private var CBExtraTests:CheckBox; diff --git a/efd/LoreHound/gui/LoreCategorySettingGroup.as b/efd/LoreHound/gui/LoreCategorySettingGroup.as index 7fa0cb6..c3f36f3 100644 --- a/efd/LoreHound/gui/LoreCategorySettingGroup.as +++ b/efd/LoreHound/gui/LoreCategorySettingGroup.as @@ -14,11 +14,18 @@ class efd.LoreHound.gui.LoreCategorySettingGroup extends UIComponent { private function configUI():Void { super.configUI(); + LocaleManager.ApplyLabel(LBWaypointsEnabled); LocaleManager.ApplyLabel(LBFifoEnabled); LocaleManager.ApplyLabel(LBChatEnabled); + LocaleManager.ApplyLabel(LBLoreStatesTitle); + LocaleManager.ApplyLabel(LBAlertUncollected); + LocaleManager.ApplyLabel(LBAlertCollected); // Disable focus to prevent selections from locking user input until the window closes + CBWaypointsEnabled.disableFocus = true; CBFifoEnabled.disableFocus = true; CBChatEnabled.disableFocus = true; + CBAlertUncollected.disableFocus = true; + CBAlertCollected.disableFocus = true; } public function Init(loreType:Number, config:ConfigWrapper):Void { @@ -44,32 +51,68 @@ class efd.LoreHound.gui.LoreCategorySettingGroup extends UIComponent { ConfigUpdated(); Config.SignalValueChanged.Connect(ConfigUpdated, this); + CBWaypointsEnabled.addEventListener("select", this, "CBWaypoint_Select"); CBFifoEnabled.addEventListener("select", this, "CBFifo_Select"); CBChatEnabled.addEventListener("select", this, "CBChat_Select"); + CBAlertUncollected.addEventListener("select", this, "CBUncollected_Select"); + CBAlertCollected.addEventListener("select", this, "CBCollected_Select"); } private function ConfigUpdated(setting:String, newValue, oldValue):Void { - if (setting == "FifoLevel" || setting == undefined) { - CBFifoEnabled.selected = (Config.GetValue("FifoLevel") & Type) == Type; + if (setting == "WaypointAlerts" || setting == undefined) { + CBWaypointsEnabled.selected = (Config.GetValue("WaypointAlerts") & Type) == Type; } - if (setting == "ChatLevel" || setting == undefined) { - CBChatEnabled.selected = (Config.GetValue("ChatLevel") & Type) == Type; + if (setting == "FifoAlerts" || setting == undefined) { + CBFifoEnabled.selected = (Config.GetValue("FifoAlerts") & Type) == Type; } + if (setting == "ChatAlerts" || setting == undefined) { + CBChatEnabled.selected = (Config.GetValue("ChatAlerts") & Type) == Type; + } + if (setting == "AlertForUncollected" || setting == undefined) { + CBAlertUncollected.selected = (Config.GetValue("AlertForUncollected") & Type) == Type; + } + if (setting == "AlertForCollected" || setting == undefined) { + CBAlertCollected.selected = (Config.GetValue("AlertForCollected") & Type) == Type; + } + } + + private function SetConfigFlag(flag:String, value:Boolean) { + Config.SetFlagValue(flag, Type, value); + } + + private function CBWaypoint_Select(event:Object):Void { + SetConfigFlag("WaypointAlerts", event.selected); } private function CBFifo_Select(event:Object):Void { - Config.SetFlagValue("FifoLevel", Type, event.selected); + SetConfigFlag("FifoAlerts", event.selected); } private function CBChat_Select(event:Object):Void { - Config.SetFlagValue("ChatLevel", Type, event.selected); + SetConfigFlag("ChatAlerts", event.selected); + } + + private function CBUncollected_Select(event:Object):Void { + SetConfigFlag("AlertForUncollected", event.selected); + } + + private function CBCollected_Select(event:Object):Void { + SetConfigFlag("AlertForCollected", event.selected); } private var GroupTitle:TextField; + private var LBWaypointsEnabled:TextField; private var LBFifoEnabled:TextField; private var LBChatEnabled:TextField; + private var LBLoreStatesTitle:TextField; + private var LBAlertUncollected:TextField; + private var LBAlertCollected:TextField; + + private var CBWaypointsEnabled:CheckBox; private var CBFifoEnabled:CheckBox; private var CBChatEnabled:CheckBox; + private var CBAlertUncollected:CheckBox; + private var CBAlertCollected:CheckBox; private var Config:ConfigWrapper; private var Type:Number;