Orphan Attachments 07/31/2018
Search the Community
Showing results for tags 'obse plugin'.
Found 1 result
saebel posted a topic in ModdingHoping someone with knowledge sees this. So I'm working on revamping my SDR.dll via OBSE's plugin system. I'm trying to improve the overall processing time, get rid of memory leaks, etc., to the best of my ability. Before I get into my problem, I should explain the structure. There are two "Master" arrays used. The first one is the Master COV Map, which uses nested maps to store custom object values. It's structure is as follows: map ["Parent Mod" (string), "Child Refs" (map["BaseRefID" (UInt32), "COV Groups" (map["GroupID" (UInt32), "COV Data Set" (map["Data Key" (string), "Data Value" (num, string, or ref)])])])] The second one is the ModGroup ID Array, which is a simple array to assign an ID (the key) to a Mod Name / Group Name pairing. The Group ID is then used for setting COV values (above) when functions are called to set/get/mod the COVs. It will look like this:  "SDR.esp|Actor Values"  "SDR.esp|Weapon Values"  "SomeOtherMod.esp|Name of the Group" I have already completed the core programming needed to set/get/mod values and to add/create maps on the fly as needed. However, I am concerned about bloat. I have created some clean up processes that removes data from invalid references and mods that are no longer in the active load order. However, they are all done through scripts through the SDR.esm. I would much rather port those features into the SDR.dll to boost performance. I need to be able to loop through all the Master data and remove any Group ID maps, reference maps, and mod maps that are no longer valid or active - removing entries as I go. The Group ID array does not need entries removed, because I don't want the key numbers to shift (that can impact data stored in the active save game). So if a group gets deleted, the entry will be set to "". In the SDR.dll, I'm using the OBSE Array Interface system (PluginAPI.h), which has all the functions I need - except one: there is no method to *remove* a key/value pair!!! If the arrays/maps were just a standard C++ implementation, it would be no problem. But the OBSE Array Interface has a very whacky construct. I've tried tapping into ArrayVar.h/.cpp files to see if I can bypass the OBSE Array Interface and use some of the functions deeper under the hood, but I haven't had any luck. C++ is not my strong suit, and I've come to a dead stop on how to handle this. Suggestions of any kind would be extremely welcome.