hlp Posted April 18, 2014 Share Posted April 18, 2014 First complete release for FNVdumpSaves is up https://code.google.com/p/skyrim-plugin-decoding-project/source/browse/TES5Edit/releases/TES5Dump%203.0.32/FNVSaves-3.0.32-r1568-20140414.zip Link to comment Share on other sites More sharing options...
DayDreamer Posted April 19, 2014 Share Posted April 19, 2014 I'm perusing the existing scripts looking for a means to qualify the script search, specifically the condition GetVMQuestVariable by quest (DialogueRiften "Riften Dialogue" [QUST:000368D8]) and CIS2 (::Dia07_var). Man-oh-man this is not obvious.... A general utility to find uses of variables would be handy, too. I can grep the Source for papyrus use, but there's no good way to find variables in CK. EDIT: Actually, although not very good, I have found the variables in the CK -- but not per script. The developers sometimes seem to use generic numbered variables that have to be hand compared. The actual problem I was having turned out to be I had loaded USKP, and USKP had removed the only condition for Dia07. Found it looking entry by entry in TES5Edit, but could have found it faster by loading only Update instead. (I've not found any related USKP Version History entry.) Link to comment Share on other sites More sharing options...
zilav Posted April 20, 2014 Author Share Posted April 20, 2014 After reading it 3 times, still can't understand if you want something or already solved your issue If you want to search for records that have conditions refering to provided variable name and provided quest, that can be arranged. Dragonblood 1 Link to comment Share on other sites More sharing options...
DayDreamer Posted April 20, 2014 Share Posted April 20, 2014 Yes, I've solved my immediate problem by doing it slowly by hand. Click on far left, click page down twice on far right margin,back and forth, repeated hundreds of times.... Yes, I'd like a script that searches conditions for a particular variable name on a particular quest/script. That would have been very handy, as the developers seem to use similar variable names for a lot of scripts. Link to comment Share on other sites More sharing options...
zilav Posted April 20, 2014 Author Share Posted April 20, 2014 So I need to scan conditions on all records that references some quest, then check against variable name in condition, and then (optionally) check script properties attached to quest to match against given script name? Dragonblood 1 Link to comment Share on other sites More sharing options...
DayDreamer Posted April 20, 2014 Share Posted April 20, 2014 I was futily trying the other way around (checking the script name first because of the existing example), but yours would be nicer to only check script name in case of duplicate variable name (presumably a second run after the user discovers the duplicate). Cool! Link to comment Share on other sites More sharing options...
zilav Posted April 27, 2014 Author Share Posted April 27, 2014 Uploaded new version. Among several changes there is important fix that mostly affects TES4LODGen hanging that plagued it since version 3.0.15 Dragonblood 1 Link to comment Share on other sites More sharing options...
Mator Posted May 2, 2014 Share Posted May 2, 2014 I was futily trying the other way around (checking the script name first because of the existing example), but yours would be nicer to only check script name in case of duplicate variable name (presumably a second run after the user discovers the duplicate). Cool! @Zilav and DayDreamer, I can make this script if you want. I've got time. Link to comment Share on other sites More sharing options...
DayDreamer Posted May 4, 2014 Share Posted May 4, 2014 @Zilav and DayDreamer, I can make this script if you want. I've got time. Looking forward to it. During betas, after testing that my fixes were implemented properly, is the time that I've been analyzing navmesh. The next script I'd need for that is to check each cell triangle with an Exterior[1,2,3] flag, look into the Exterior table, find the matching triangle, ensure it has an Exterior[1,2,3] flag, look into its Exterior table, and ensure that that points back to my triangle. I've been doing this by hand: the CK doesn't show the Exterior[1,2,3] flags, but it does show the [navmesh,triangle] pair from the Exterior table. So I can walk back and forth across the green line manually to check that they are pointing at each other -- but it would be nice to have a script to find the bad ones everywhere all at once!!! Link to comment Share on other sites More sharing options...
zilav Posted May 4, 2014 Author Share Posted May 4, 2014 During betas, after testing that my fixes were implemented properly, is the time that I've been analyzing navmesh. The next script I'd need for that is to check each cell triangle with an Exterior[1,2,3] flag, look into the Exterior table, find the matching triangle, ensure it has an Exterior[1,2,3] flag, look into its Exterior table, and ensure that that points back to my triangle.Need more information, including example plugin or using vanilla navmeshes - what, where, how and when to check. Screenshots are welcomed. I don't know how navmeshes work, so what you wrote above doesn't have any meaning for me unfortunately, and I don't have enough free time to figure it out myself. Dragonblood 1 Link to comment Share on other sites More sharing options...
DayDreamer Posted May 11, 2014 Share Posted May 11, 2014 Need more information, including example plugin or using vanilla navmeshes - what, where, how and when to check. Screenshots are welcomed. I don't know how navmeshes work, so what you wrote above doesn't have any meaning for me unfortunately, and I don't have enough free time to figure it out myself. Damn, thought I'd replied to this last week, but it was lost?!?! function Process(e: IInterface): integer; var tris, tri: IInterface; i: integer; begin if Signature(e) <> 'NAVM' then Exit; tris := ElementByPath(e, 'NVNM\Triangles'); for i := 0 to Pred(ElementCount(tris)) do begin tri := ElementByIndex(tris, i); // flags 1, 2, or 3 is set if GetElementNativeValues(tri, 'Flags') and 7 <> 0 then begin // look for matching tri in External Connections table end; end; end; How do I access/search the External Connections table? It looks like it has 3 fields. It should be simple, but I'm not getting it. Link to comment Share on other sites More sharing options...
zilav Posted May 12, 2014 Author Share Posted May 12, 2014 This is a not working script, I tried to create it from your description, but nothing were matching up when running on vanilla skyrim navmeshes. That's why I asked for more information. { Check that external connection triangles in navmeshes are pointing to each other } unit NavMeshCheckExternal; //=========================================================================== function Initialize: integer; begin if wbSimpleRecords then begin MessageDlg('Simple records must be unchecked in xEdit options', mtInformation, [mbOk], 0); Result := 1; Exit; end; end; //=========================================================================== // check that tri1 in navmesh navm1 points to tri2 in navmesh navm2 function CheckConnection(navm1, navm2: IInterface; tri1, tri2: integer): Boolean; var tris, tri, exts, ext: IInterface; i, ExtCount: integer; begin if Signature(navm1) <> 'NAVM' then Exit; tris := ElementByPath(navm1, 'NVNM\Triangles'); exts := ElementByPath(navm1, 'NVNM\External Connections'); ExtCount := 0; // iterate through triangles until we find tri1 for i := 0 to Pred(ElementCount(tris)) do begin tri := ElementByIndex(tris, i); if i = tri1 then begin if GetElementNativeValues(tri, 'Flags') and 7 = 0 then begin AddMessage(Format('Referenced triangle %d in %s is not external!', [tri1, Name(navm1)])); Exit; end; ext := ElementByIndex(exts, ExtCount); AddMessage(Format('External idx=%d for tri=%d in %s', [ExtCount, tri1, Name(navm1)])); if (FormID(LinksTo(ElementByName(ext, 'Mesh'))) = FormID(navm2)) and (GetElementNativeValues(ext, 'Triangle') = tri2) then Result := True; Exit; end; // triangle has external connections? if GetElementNativeValues(tri, 'Flags') and 7 > 0 then Inc(ExtCount); end; end; //=========================================================================== function Process(e: IInterface): integer; var tris, tri, exts, ext: IInterface; i, ExtCount: integer; begin if Signature(e) <> 'NAVM' then Exit; tris := ElementByPath(e, 'NVNM\Triangles'); exts := ElementByPath(e, 'NVNM\External Connections'); ExtCount := 0; // iterate through triangles for i := 0 to Pred(ElementCount(tris)) do begin tri := ElementByIndex(tris, i); // triangle has external connections? if GetElementNativeValues(tri, 'Flags') and 7 > 0 then begin if ExtCount > Pred(ElementCount(exts)) then begin AddMessage(Format('Triangle %d doesn''t have an external connection!', [ExtCount])); Result := 1; Exit; end; ext := ElementByIndex(exts, ExtCount); //AddMessage(Format('Triangle %d is external', [ExtCount])); if not CheckConnection(LinksTo(ElementByName(ext, 'Mesh')), e, GetElementNativeValues(ext, 'Triangle'), i) then begin AddMessage(Format('Triangle %d is broken', [i])); Result := 1; Exit; end; Inc(ExtCount); end; end; end; end. Dragonblood 1 Link to comment Share on other sites More sharing options...
zilav Posted May 13, 2014 Author Share Posted May 13, 2014 Uploaded r1573. The only change is linear output log in "Check for errors". Dragonblood 1 Link to comment Share on other sites More sharing options...
Arthmoor Posted May 13, 2014 Share Posted May 13, 2014 Thanks. Any idea when 3.0.32 will make it to a regular release? Link to comment Share on other sites More sharing options...
zilav Posted May 13, 2014 Author Share Posted May 13, 2014 I don't know. Just slowly updating and fixing here and there. 3.0.31 is quite a good version without outstanding bugs, so don't feel like rushed to replace it. However since most updates are done by Hlp nowadays, perhaps he will decide when. Releasing means just grabbing a version from here and uploading on nexus, nothing else. Dragonblood 1 Link to comment Share on other sites More sharing options...
Arthmoor Posted May 13, 2014 Share Posted May 13, 2014 The issue 149 fix alone would justify it IMO. It's a bad thing to have the potential for your ONAM subrecords to get hosed by normal use of the program Link to comment Share on other sites More sharing options...
zilav Posted May 14, 2014 Author Share Posted May 14, 2014 The issue 149 fix alone would justify it IMO. It's a bad thing to have the potential for your ONAM subrecords to get hosed by normal use of the program To be honest, it's probably been there since introduction of ONAMs in FO3Edit. Dragonblood 1 Link to comment Share on other sites More sharing options...
keithinhanoi Posted May 14, 2014 Share Posted May 14, 2014 I'm hoping that you could help me out with what seems to be an error with the floating point precision of some sub-record types that xEdit handles. A Nexus user by the name of Shurah posted on the comments thread for a Skyrim mod named Audio Overhaul for Skyrim that for certain Static Attenuation (dB) values in the BNAM sub-record of Sound Descriptor records, TES5Edit will use an incorrect value in two situations: 1) when the value is manually entered (by keyboard) in TES5Edit 2) when that Sound Descriptor records is Copied as Override into a new plugin For an example of situation #1, if I manually change the value Static Attenuation value of any Sound Descriptor record in a plugin by typing 20.130000 into that value field, as soon as I hit the ENTER key, TES5Edit displays 20.120000, and if that plugin is saved and loaded into CK, the value is in fact set to 20.120000. For an example of situation #2, please see this screenshot (click to enlarge): Here I'm making a very small test plugin in CK, where for the particular Sound Descriptor record shown, I've set the Static Attenuation value to 9.690000, which is one of the incremental stops if you drag the slider left to right. When I Copy the record as an Override to a new "patch" plugin, you can see the value has been changed to 9.680000. If this patch plugin is saved in TES5Edit and then loaded in CK, the value will come up as 9.680000. Here's a screenshot showing that: Please note again, that TES5Edit / xEdit only seems to incorrectly record a small number of values - but most values are recorded correctly. The reason this was discovered by Shurah, though, is because of the 9.690000 value being one of the default slider steps in the CK. He also states that 9.680000 would be an "invalid" value because he couldn't select it in CK, but I notice that you can choose any two decimal point number by using the mouse scroll wheel. So even 9.680000 should be an acceptable value - if anyone can confirm this I would be very grateful. Anyhow, the incorrectly recorded values in TES5Edit / xEdit does seem like something worth investigating into, because it's a little worrying when you type a number that the program then immediately changes. One last note on this bug (?) is that I could only found the same value changing behavior in only one other sub-record type, which is the Cloud Speed (RNAM/QNAM) entries in Weather records. I tried test with a bunch of other sub-record types that use floating point values and they all worked. I suppose there might be more sub-record types with the strange behavior, though. If you need any more information / explanation about this, please let me know. And thanks for all the work on such an amazingly useful program! Link to comment Share on other sites More sharing options...
zilav Posted May 14, 2014 Author Share Posted May 14, 2014 It is caused by floating point rounding and the fact that those fields are stored as scaled integers inside plugin. Besides 0.01 doesn't make difference anywhere. Dragonblood 1 Link to comment Share on other sites More sharing options...
hlp Posted May 14, 2014 Share Posted May 14, 2014 On 3.0.32 I could merge the delimited types but as they have no practical use for xEdit at the moment, so maybe we can release a "most likely stable" 3.0.32, before I attempt xViewSaves. Also, for personal use, I added some more command line "autorun" (not uploaded yet), currently ESMify on and ESMify off, and I was thinking about providing a SortAndClean masters. (A recent change I made in FalloutNV GeckPU will definitvly lead to people registering unwanted masters in their esp ). Link to comment Share on other sites More sharing options...
zilav Posted May 14, 2014 Author Share Posted May 14, 2014 Make the same change for CK and people will love you About ESMifying, how is it different to masterupdate and masterrestore? I'm curious. Dragonblood 1 Link to comment Share on other sites More sharing options...
Sharlikran Posted May 14, 2014 Share Posted May 14, 2014 Whenever you all feel that 3.0.32 is ready let me know. I don't want to just the gun and release it too early. I like the idea of having a 3.0.32 and then when you are ready to Beta test xViewSaves release it here as 3.0.33 more or less. Link to comment Share on other sites More sharing options...
hlp Posted May 14, 2014 Share Posted May 14, 2014 It works on a single plugin, not your whole load order. In fact the bulk of the change is allowing to provide a specific plugin (or plugins) on the command line, the rest is the same code as master update/restore. Link to comment Share on other sites More sharing options...
zilav Posted May 15, 2014 Author Share Posted May 15, 2014 I see. Ok, let's wait a bit for the next LODGen utility fix, then we can release. Dragonblood 1 Link to comment Share on other sites More sharing options...
Sheson Posted May 15, 2014 Share Posted May 15, 2014 Hi I am seeing some severe slowdowns with r1573 when copying records. For example "Copy as new record into..." Static from skyrim.esm into a new mod. r1573 needs 10 minutes [00:13] [stuff.esp] Adding master "Skyrim.esm"[10:33] Copying done. 3.0.31 needs seconds [00:15] [stuf1.esp] Adding master "Skyrim.esm"[00:18] Copying done. Thanks for all Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now