Guest Posted October 10, 2014 Posted October 10, 2014 If I knew about what I'm writing, I would not have to ask, but: My mod manager warns me about multiple PEX and PSC (also DLL) files already installed by sexlab 1.59c. I figure your mod is superior, or why bother to include the files, so I said "yes" (replace) to all. I only want to mumble quietly WHY mods replace other mod's mods, and if there is a pecking order (there should be) of stuff that gets replaced.
Ashal Posted October 10, 2014 Author Posted October 10, 2014 If I knew about what I'm writing, I would not have to ask, but: My mod manager warns me about multiple PEX and PSC (also DLL) files already installed by sexlab 1.59c. I figure your mod is superior, or why bother to include the files, so I said "yes" (replace) to all. I only want to mumble quietly WHY mods replace other mod's mods, and if there is a pecking order (there should be) of stuff that gets replaced. Look at the current author for the two mods and ask that question again.
Guest Posted October 10, 2014 Posted October 10, 2014 If I knew about what I'm writing, I would not have to ask, but: My mod manager warns me about multiple PEX and PSC (also DLL) files already installed by sexlab 1.59c. I figure your mod is superior, or why bother to include the files, so I said "yes" (replace) to all. I only want to mumble quietly WHY mods replace other mod's mods, and if there is a pecking order (there should be) of stuff that gets replaced. Look at the current author for the two mods and ask that question again. If you made both mods (congratulations and thanks) and one of the mods is updated, um, OK let me start again, WHICH mod is the authoritative mod, and is there a way to define any mod as such? (I'm going now)
Ashal Posted October 10, 2014 Author Posted October 10, 2014 If I knew about what I'm writing, I would not have to ask, but: My mod manager warns me about multiple PEX and PSC (also DLL) files already installed by sexlab 1.59c. I figure your mod is superior, or why bother to include the files, so I said "yes" (replace) to all. I only want to mumble quietly WHY mods replace other mod's mods, and if there is a pecking order (there should be) of stuff that gets replaced. Look at the current author for the two mods and ask that question again. If you made both mods (congratulations and thanks) and one of the mods is updated, um, OK let me start again, WHICH mod is the authoritative mod, and is there a way to define any mod as such? (I'm going now) The point I was trying to make is they are updated simultaneously. The version packaged with SexLab is always going to be the same version provided here. Neither is really authoritative, so long as neither is being overwritten you'll have the latest version installed.
Srende Posted October 12, 2014 Posted October 12, 2014 Looks like the crash I had with 2.3 & DH is back with 2.8. function SandBoxCreatures() int num = FormListCount(none, creatureList) ; RemoveAllPackageOverride(gatherPackage) ; PapyrusUtil 2.3 crashes here for some reason, but not on the identical call in StopCreatureScene() later while num > 0 num -= 1 Actor creature = FormListGet(none, creatureList, num) as Actor AddPackageOverride(creature, sandboxPackage, 100) creature.EvaluatePackage() endWhile endFunction Basically, commenting that one line out prevents the crash. I didn't test what the comment says about 2.3 with 2.8 yet though. The actors that the package is applied to are all draugr if that makes a difference. I'm going to remove that call though, as it just get overwritten with another package, and both then get removed after the scene ends. Going to test that works first. But still, thought reporting it would be in order. EDIT: Nope, seems to crash on the later call to the same function at scene end now as well. While I don't need it on that first location, the second is needed.
h38fh2mf Posted October 13, 2014 Posted October 13, 2014 Try if instead of using removeall just remove this package manually from each creature. You already seem to have a list of affected creatures? or if not you can make one when you add the package.
Srende Posted October 13, 2014 Posted October 13, 2014 Yes, that was the plan to try next. However it shouldn't crash there, requiring a workaround.
h38fh2mf Posted October 13, 2014 Posted October 13, 2014 Yea but if we knew why it crashes it would be fixed. What I said to try will help us narrow it down at least, if it crashes same way then we have new information and if it doesn't then also same.
kitty16 Posted October 13, 2014 Posted October 13, 2014 THANK YOU!!!!! This is brilliant. Sorted out my problem having despite of reinstalling CK, installing fresh SKSE and SkyUI SDK: (I'm putting it here for the sake of search engines (this is just an example, I had this problem with all files)): C:\bin\Games\TSEV Skyrim LE>"Papyrus Compiler"\PapyrusCompiler.exe sslCreatureAnimationDefaults -f="TESV_Papyrus_Flags.f lg" -i=".\\Data\\scripts\\Source" -o=".\\Data\\scripts" Starting 1 compile threads for 1 files... Compiling "sslCreatureAnimationDefaults"... C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslActorStats.psc(344,2): FloatListAdjust is not a function or does not exist C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslActorStats.psc(351,2): FloatListAdjust is not a function or does not exist C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslActorStats.psc(925,3): AdjustIntValue is not a function or does not e xist C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslActorStats.psc(934,3): AdjustFloatValue is not a function or does not exist C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslBaseAnimation.psc(287,10): FloatListAdjust is not a function or does not exist C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslBaseAnimation.psc(287,10): cannot call the member function FloatListA djust alone or on a type, must call it on a variable C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslBaseAnimation.psc(294,11): FloatListAdjust is not a function or does not exist C:\bin\Games\TSEV Skyrim LE\Data\scripts\Source\sslBaseAnimation.psc(294,11): cannot call the member function FloatListA djust alone or on a type, must call it on a variable No output generated for sslCreatureAnimationDefaults, compilation failed. Batch compile of 1 files finished. 0 succeeded, 1 failed. Failed on sslCreatureAnimationDefaults
Srende Posted October 13, 2014 Posted October 13, 2014 With further testing, both RemovePackageOverride() and ClearPackageOverride() seem to work normally. Say if you need logs or something.
h38fh2mf Posted October 13, 2014 Posted October 13, 2014 I'd have to look source maybe to come up with a guess why it crashes, but I forgot where it's hosted now.
easykill Posted October 14, 2014 Posted October 14, 2014 expired hngs out in the ll chat and has stated his willingness to help out before
Ashal Posted October 14, 2014 Author Posted October 14, 2014 With further testing, both RemovePackageOverride() and ClearPackageOverride() seem to work normally. Say if you need logs or something. I've found and fixed the bug, the package removal loop goes forward through the list, if the package you're removing is the only package on an actor, then after the package is removed the iterator is made invalid, making the continued loop crash. I've switched it to loop backwards through the list and that seems to fix the problem, I'm no longer able to replicate it. I'll release an update later after I finish some other updates as well. Might be a while though, as I'm trying to take a break. Until then your best bet is to just keep a separate list of actors you've added the package to and loop through that to use with RemovePackageOverride().
h38fh2mf Posted October 14, 2014 Posted October 14, 2014 Better is this way to make sure iterator can't go invalid: for(itr = list.begin(); itr != list.end(); ) { if(*itr == package) itr = list.erase(itr); else itr++; }
Ashal Posted October 14, 2014 Author Posted October 14, 2014 Better is this way to make sure iterator can't go invalid: for(itr = list.begin(); itr != list.end(); ) { if(*itr == package) itr = list.erase(itr); else itr++; } It's done that way elsewhere in the source for that very reason, the package overrides are a bit different though since they aren't implemented directly into the storage classes. I kinda explained the problem wrong I'm realizing as I look at it again now. The loop isn't looping through the vector, it's just looping through the object map and then making calls to the same functions that StorageUtil uses for ListRemove() to remove the package from the form list, which themselves do the vector loop and use erase(). int removed = 0; for (Packages::Map::iterator itr = Overrides->Data.begin(); itr != Overrides->Data.end(); ++itr){ Overrides->ListRemove(itr->first, "flagged", PackageRef, true); removed += Overrides->ListRemove(itr->first, "package", PackageRef, true); } return removed; The problem is that ListRemove() removes the obj from the map when it sees the vectors on it are empty. Invalidating the map iterator from outside of the loop. A proper solution would probably be to just interface with the map & vector data directly instead of using the StorageUtil functions. But I'm lazy.
h38fh2mf Posted October 14, 2014 Posted October 14, 2014 Just doing backwards and hoping iterator will remain OK seems troublesome to me, maybe then next best solution is this: Packages::Map::iterator itr, itr2 for(itr = Overrides->Data.begin(); itr != Overrides->Data.end(); ) { itr2 = itr++; // Now erase here using itr2 }Or what you said with the direct thing
Srende Posted October 14, 2014 Posted October 14, 2014 Nice, thanks! I'll leave the workaround in place for now, from your response I'll probably be updating the mod sooner anyway
DeepBlueFrog Posted October 21, 2014 Posted October 21, 2014 Question for the storageUtil experts. I have a set of animations I would like to use to make the Player crawl instead of walk when they are enslaved. There is a mod with crawl animations but it is a simple replacer of sneak animations. My question: would I be able to replace these animations on demand by using SetReplaceAnimation() on the player object reference? I want to get a sense if this is doable before I spend time trying to make it work.
Ashal Posted October 21, 2014 Author Posted October 21, 2014 Question for the storageUtil experts. I have a set of animations I would like to use to make the Player crawl instead of walk when they are enslaved. There is a mod with crawl animations but it is a simple replacer of sneak animations. My question: would I be able to replace these animations on demand by using SetReplaceAnimation() on the player object reference? I want to get a sense if this is doable before I spend time trying to make it work. I believe so. The animation replacer stuff hasn't been used or tested much though.
DeepBlueFrog Posted October 21, 2014 Posted October 21, 2014 Question for the storageUtil experts. I have a set of animations I would like to use to make the Player crawl instead of walk when they are enslaved. There is a mod with crawl animations but it is a simple replacer of sneak animations. My question: would I be able to replace these animations on demand by using SetReplaceAnimation() on the player object reference? I want to get a sense if this is doable before I spend time trying to make it work. I believe so. The animation replacer stuff hasn't been used or tested much though. Ok.. I will give it a try then. The alternative would be to try and catch key strokes and change the idle when the player moves and I am not loking forward to get that kind of thing to work A way to replace animations would be much better.
Ashal Posted October 21, 2014 Author Posted October 21, 2014 Question for the storageUtil experts. I have a set of animations I would like to use to make the Player crawl instead of walk when they are enslaved. There is a mod with crawl animations but it is a simple replacer of sneak animations. My question: would I be able to replace these animations on demand by using SetReplaceAnimation() on the player object reference? I want to get a sense if this is doable before I spend time trying to make it work. I believe so. The animation replacer stuff hasn't been used or tested much though. Ok.. I will give it a try then. The alternative would be to try and catch key strokes and change the idle when the player moves and I am not loking forward to get that kind of thing to work A way to replace animations would be much better. Current versions of FNIS provide an alternate animations system, which it uses for FNIS Sexy Move. I haven't looked much into how that system works, but it may or may not be better suited.
DeepBlueFrog Posted October 22, 2014 Posted October 22, 2014 Question for the storageUtil experts. I have a set of animations I would like to use to make the Player crawl instead of walk when they are enslaved. There is a mod with crawl animations but it is a simple replacer of sneak animations. My question: would I be able to replace these animations on demand by using SetReplaceAnimation() on the player object reference? I want to get a sense if this is doable before I spend time trying to make it work. I believe so. The animation replacer stuff hasn't been used or tested much though. Ok.. I will give it a try then. The alternative would be to try and catch key strokes and change the idle when the player moves and I am not loking forward to get that kind of thing to work A way to replace animations would be much better. Current versions of FNIS provide an alternate animations system, which it uses for FNIS Sexy Move. I haven't looked much into how that system works, but it may or may not be better suited. ObjectUtil looks promising. I did a quick test and I was able to change animations although finding the right events associated to movement is a but of a pain. I will put that on the back burner for now and maybe look at FNIS commands as well after this release of SD. I don't want to spend too much time on this feature alone.
fore Posted October 22, 2014 Posted October 22, 2014 ObjectUtil looks promising. I did a quick test and I was able to change animations although finding the right events associated to movement is a but of a pain. ObjectUtil doesn't look promising at all to me. Sorry, Ashal. It doesn't change animation, it changes the call of AnimEvents. A BIG difference. I don't know how it really works, but I assume that this plugin exchanges the AnimEvent that is sent from the engine to the behavior. And that's like sending SAE() at arbitrary times. Probably this SetReplaceAnimation() allows a few tricks more then SAE(). IF it works. But just like the experience many users made with calling AnimEvents in order to get certain animation to run: it will work in some, mostly simple cases. Maybe, or maybe not, or maybe you get some strange side effects. You simply cannot change the bonds of behaviors without modifying the behaviors themselves.
fore Posted October 22, 2014 Posted October 22, 2014 Question for the storageUtil experts. I have a set of animations I would like to use to make the Player crawl instead of walk when they are enslaved. There is a mod with crawl animations but it is a simple replacer of sneak animations. My question: would I be able to replace these animations on demand by using SetReplaceAnimation() on the player object reference? I want to get a sense if this is doable before I spend time trying to make it work. I believe so. The animation replacer stuff hasn't been used or tested much though. Ok.. I will give it a try then. The alternative would be to try and catch key strokes and change the idle when the player moves and I am not loking forward to get that kind of thing to work A way to replace animations would be much better. Current versions of FNIS provide an alternate animations system, which it uses for FNIS Sexy Move. I haven't looked much into how that system works, but it may or may not be better suited. I already thought about integrating the crawling animations into FNIS SM. But for one it doesn't really fit there. But the main problem right now is that for the player you also need the directional walks. And these I haven't implemented yet.
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