-
Posts
96 -
Joined
-
Last visited
Everything posted by jaxonz
-
This is not an uncommon issue and it can be very frustrating. I had a similar experience with RealVision ENB. As a sanity check, you may want to make sure that you can start a new game with Somber (same for any other ENB) and see that things behave well. This makes it clear that your issue is particular with your savegame file and not Skyrim or your hardware config in general. Chances are your issues are not with a particular ENB flavor, but ENB itself. Regardless of having uninstalled mods via NMM, Steam, or MO you likely have entities from every mod you've tried out stored in your savefile. It may be difficult to determine what content conflicts with the ENB. You MIGHT have some luck stripping out orphaned scripts with Save Tool, Script Scalpel or other savegame editors. In my case, I had to uninstall EVERY non-essential mod (except those that had quests I was on, provided my player home, or special followers [Vilja]), make a new save and then go at it aggressively with both SaveTool and Script Scalpel. This was not an exact process and it took almost a day of trial and error before I had a playable, stable version of my game in progress that works with any ENB. Tools: FXAA ENB SweetFX Manager Lets you cleanly manage/remove/restore ENB packagesMod Organizer Keeps your Skyrim directory clean, great install/uninstall of mods Multiple profiles for testing and different gamesBOSS mod ordering and conflict resolutionWrye BASH mod mergingSave Tool Easily remove orphaned scripts and references from savegamesScript Scalpel (aka Papyrus Data Transfer) A more powerful but also more difficult savegame file editing tool My recommendations on what to do: Continue with your game in progress without using ENB... this will save you hours of frustration. Start a new game with the ENB of your choice and play with that. MO and ENB manager make switching back and forth a breezeIf you are stubborn, have saintly patience, and time to burn then try the technique I mentioned above. It may take many, many iterations.use your mod manager to copy your current profileon the new profile turn off all essential odds, load up your game, dismissing the warnings about content dependencies and saveuse Save Tool to Fix Script Instances and then Fix All #, save with backupload new save back into Skyrim, save again, see if Save Tool finds anything new... repeatInstall your ENB of choice, test everything works with a new game or clean virgin savegame, use ENB manager to save the config(you can also use your mod manager to control the INI files and mods necessary for the ENB)load up the problematic savegame with the ENB settings installed, in all likelihood watch it crashLoad up the savegame with Script Scalpel (aka Papyrus Data Transfer) and use the Zero Papyrus Section option, saverepeat, alternating back and forth between ENB installed and notuse BOSS and BASH as you go (good description of how to do this at the S.T.E.P. site)pray to the gods that it finally works as it did for me.If you can't tell, I really am trying to discourage you from the difficult path of resolving this problem. You will have more enjoyment starting a new playthrough. Perhaps someone else has a much easier fix.
-
NPC's fail to equip items via Papyrus script
jaxonz replied to Yagichan's topic in Skyrim's Skyrim LE
My guess is that the issue is trying to call this from OnInit, which is a special case event. from http://www.creationkit.com/OnInit_(Papyrus): Until OnInit has finished running, your script will not receive any events, and other scripts that try to call functions or access properties on your script will be paused until the event finishes. The only exceptions are when the functions are being called from another script inside its OnInit event, or inside a property set function being set by the master file.As a result, it is generally not advisable to fill your OnInit event with a large amount of processes. It is safer and more reliable to allow your OnInit to finish running while only performing minor tasks, and defer other larger activities to an update (as in the example above) or something similar. So, the attempt to call Self.EquipItem may require references which are not yet available. Consider using RegisterForSingleUpdate in OnInit and firing off your 2 functions from the OnUpdate event. -
I found the S.T.E.P. project very useful when I finally decided to heavily mod Skyrim and ran into compatibility issues. The use the notion of mod packs, but there are lists rather than actual repackaging. Many will disagree with the particular mods they have chosen, but I think it is a good starting point. The most valuable thing STEP brings (IMHO) is the BOSS/BASH methodology to improve reliability. Anyway, I'm no expert but thought I would share what helped me.
-
How to make a home with Well Rested Effect
jaxonz replied to dasneezequeen's topic in Skyrim's Skyrim LE
Thanks for that info... I would have guessed that the well-rested perk came from the ownership of the bed being slept in rather than that keyword. (There's a load screen that has wording about "sleeping in a bed you own".) -
LE How to really, really terminate scripts?
jaxonz replied to portbash's topic in Skyrim's Creation Kit and Modders
You ask a really interesting question. The common wisdom is that adding mods to a savegame is a one-way operation. This is one reason that good mod designers are hesitant to add scripts to anything other than quests and reference aliases which (if optional) can be forcibly cleared. There are tools such as SaveTool and Papyrus Scalpel which can remove scripts and object references from savegames, but what you are asking is how can a mod uninstall its own scripts cleanly. Wish I had an answer for you. The only thing I could think of might be to invoke something like the ReloadScript console command to replace existing script instances with null ones. I will be listening in to see of there's a savant who knows how one might accomplish this. -
LE Overloading Papyrus Functions
jaxonz replied to jaxonz's topic in Skyrim's Creation Kit and Modders
Yes. I am using the term "overload" in the OO sense, where a single function can have different implementations depending on the argument type(s). Overloading is a specific case of polymorphism. I am NOT talking about overwhelming the script engine. It appears that native papyrus functions such as RemoveItem can do this (accepting a base Form, an ObjectReference, or a FormList for the first parameter). Also some mathematical operators return integers or floats depending on the argument values. Function RemoveItem(Form akItemToRemove, int aiCount = 1, bool abSilent = false, ObjectReference akOtherContainer = None) native i = 29 / 6 ;returns 4 f = 29.0 / 6.0 ;returns 4.83333 Anyway, from what I can tell through experimentation, Papyrus does not allow me to create polymorphic functions. So if I want this behavior, I have to either fake it with something like this: Bool Function Instantiate (form frmBase) If frmBase as FormList ;handle form list argument return InstantiateFromFormList(frmBase as FormList) ElseIf frmBase as ObjectReference ;handle obj ref argument;initialize the object for positioning return InstantiateFromObjectRef(frmBase as ObjectReference) EndIf ;create references to associated objects ;returns True if successful, False on fail EndFunction Bool Function InstantiateFromObjectRef(ObjectReference objBase) ;instantiate from ObjectReference EndFunction Bool Function InstantiateFromFormList(formList flstBase) ;instantiate from FormList End Function Or, probably better, just create a separate function and not try to have this type of polymorphic behavior. Bool Function Instantiate (ObjectReference objBase) ;original function signature EndFunction Bool Function InstantiateFromFormList(formList flstBase) ;similar but distinct function to instantiate from FormList End Function Pity. -
LE Overloading Papyrus Functions
jaxonz replied to jaxonz's topic in Skyrim's Creation Kit and Modders
Well, the script won't compile using the first approach. Script function instantiate already defined in the same state So it appears that only the second approach is viable. Still very open to suggestions. -
Is there a correct/recommended way to overload a non-native script function in Papyrus? As an example, I have a script with the function Instantiate that exposes this signature: Bool Function Instantiate (ObjectReference objBase) Normally, I would pass to this function a single object reference, however, I find that I would like to also pass a list of references to it as a FormList. Would the best way be to declare the function again, with FormList as a parameter? Bool Function Instantiate (FormList flstBase) Or to have internal logic to differentiate between parameters passed? Bool Function Instantiate (form frmBase) If frmBase as FormList ;handle form list argument ElseIf frmBase as ObjectReference ;handle obj ref argument I suppose this latter approach is the only option if Papyrus doesn't allow function overloading natively. Anyone?
-
I'm using PapyrusED which has good and bad: Good: integrated code compilation with line-number references for errorsautocompletemultiple file editsability to complile current, compile open, compile all scripts... seems to understand dependencies and compile in correct orderAble to learn from available scripts. I didn't have to do any special configuration for SKSE or SkyUI other than putting the scripts in the right directory.Bad: beta code, so buggysome issues with loading files, creating new files... all tolerable but somewhat inconvenientautocomple is too aggressive sometimes. Doesn't include function call syntax (i.e., parameter prompting)Wish the author would respond to my requests or make sourcecode available. Still, I like this best of those I've tried. I sometimes switch to Notepad++ as an alternative. There is good how-to @ CK site on setting that up. Papyrus Syntax Checker is also useful for generating XML that Notepad++ can use to recognize extension libraries like SKSE and SkyUI. Hope that helps.
-
I realize I'm chiming in on this late. The mechanism for moving items to a special holding container while you enable/disable statics on your displays could be avoided if you just leverage the standard weapon rack scripts, WeaponRackTriggerSCRIPT and WeaponRackActivateSCRIPT. These scripts have the checks for item types set up as properties and move the actual item to the desired location. This would turn much of your effort into a modeling and property setting exercise with no coding for managing individual items. Caveats: weapon rack scripts assume the items are of type that can be equipped, so if you are displaying things like Dwemer cogs, a custom variation of the script would need to be created.your display placements may put the objects out of reach of the playerthese scripts are known to be fickle, exhibiting issues when activators are perfectly aligned (z angle 0/90/180/270) or sometimes not allowing objects to be recoveredLooks like you have most of the code written and working already. Congrats! Maybe this will be good advice to a subsequent reader with a similar need. Cheers.
-
LE Question regarding spells and enemy weaknesses...
jaxonz replied to Dhegonus's topic in Skyrim's Creation Kit and Modders
I think those conditions determine when the spell is effective, not when an NPC might use them. Nonetheless, if you've done the work in CK, why not try it out and see for yourself if it does what you want? -
LE Mod Request for Hunters/Survivalists
jaxonz replied to TheAnonymousPlayer's topic in Skyrim's Mod Ideas
Great idea. I haven't used it, but Hunter Traps seems to already do what you are asking... http://www.nexusmods.com/skyrim/mods/12709/? ...although it does seem that you are asking for novel trap models for different types of creatures. -
There are several good tutorials on creating Spells and MagicEffects. The CK has this one http://www.creationkit.com/Creating_a_Disease_Spell At the core of your Abscond spell, one would be inclined to use the .MoveTo function, however, this still allows the actor to do things in the world such as realize something happened or return to where you are (2 things you probably don't want happening). If you want the actor to go into limbo, consider using the .Disable function (.SetUnconscious might also be useful) which technically won't move them anywhere, but it will unload their 3D and halt any AI and scripts on them. After a certain time [use .RegisterForSingleUpdateGameTime(iNumHours) ] just call .Enable to bring them back and heal them with .RestoreActorValue ("Health", 10000). Anyway, hopefully that is enough help to get you pointed in the right direction. Happy modding!
-
Glad to see that you aren't discouraged by the well-intended (and perhaps brutally honest) advice you received. I've never collaborated on a mod (although NaeSoem did a translation of one of my mods and Matth85 is doing me the honor of crafting mesh and textures for one), however I am a software professional who has managed some very large teams. Collaborative development is a challenging endeavor, all the more so if the contributors are unpaid hobbyists. If you want to marshal capable talents (and I am certainly not among them) to your vision, it needs to be clear, compelling and well scoped. (Think about how you might pitch something on Kickstarter, only instead of asking for money, you are asking for people's time, creative energies, and hard work... in other words, you are asking for much more than mere money.) You also received wonderful advice on making room for others to have creative input; if you are asking for volunteers, you can't dictate terms. Make them partners in the effort. A few comments of my own: I like the notion of encouraging smarter tactics. Interesting challenges make for interesting play. However, I think that a well designed quest should allow for multiple styles of play. One that requires a specific specialization will inherently appeal to a smaller population of players.There seems to be an anti-cheating goal in the discussion with "tgm". IMHO, it is useless to try to do this. If folks want to cheat, you can't really stop them and taking efforts to do so would likely break something else.You stand a much better chance of attracting people to your effort if you have some modding experience under your belt and have already contributed to the community. I searched, and couldn't find any mods by you so far. As others have mentioned, they've already been inundated by pitches that go "I'm new to the game, don't really know how CK works, can't script, can't model, and can't structure a story, but I have this really great idea!!". On the other hand if Matth or Chesko asked for help, people would be falling all over themselves. (Not my intent to omit the dozens of great modders out there... just 2 names picked at random.) So, while you are putting effort into designing your quest pitch, also consider cutting your teeth on CK and putting something out there. It is a learning curve we all have to go through and it can be a rewarding experience. It will also give you an appreciation for some of the things modders have accomplished given the very limited tool set at their disposal. Anyway, go for it! Best of success!
-
First let me say that I respect IsharaMeradin and greatly appreciate the responses IsharaMeradin has provided to some of my questions on these forums. Good catch on that this script might also be used for containers... not sure how I missed that, but I think my advice regarding the perils of attaching such a script to the player it is sound nonetheless. I did state clearly that 1000 was an arbitrarily large number and that a larger value could be used if deemed appropriate. One could safely set this value to 1000000. The ad absurdum reasoning for always checking quantities doesn't seem practical to me. Even if there were a bizarre occasion where there were 2 million items in the container, it is not as if the script would break. Simply activating the script twice would still sort everything. This seems very reasonable to me for the benefit of eliminating a substantial portion of the code. On principal, I do agree that condition checking is generally a best practice. Papayrus is pretty frail. It has no error handling other than to abort functions. Beginning modders should follow IsharaMeradin's advice and check for all potential error conditions. Nonetheless, I admit that I would use the simpler statement. Not to get philosophical, but I generally subscribe to the notion that less and simpler code is inherently more stable, performant, and manageable. I can get away with the simpler code only because I understand that calling RemoveItem call on a container which has none of the specified objects will simply do nothing, not even throw an error. This makes it safe to call RemoveItem without the conditional checks. Simply put... HoldingContainer.removeItem(IngotsNOre, 1000000, False, SortChest1) ... moves up to 1 million instances of every item in the IngotsNOre list from HoldingContainer to SortChest, but does nothing whatsoever if HoldingContainer has no ores or ingots. The only opportunity for error here is if references to the list or containers are not set. These are error conditions for which the original code also did not check.
-
[SCRIPT] Follower Magic AI: Directed Heals&Buffs
jaxonz replied to Ayporos's topic in Skyrim's Skyrim LE
Hi Ayporos, Sounds like a worthy endeavor. To my knowledge only Vilja has the smarts to heal the PC... Your approach to add this ability to all NPCs certainly makes sense. Also will make group enemies more realistic and challenging. Here's a first pass at pointers to your bullets above: script automatically runs on any Actor designated as a follower (not sure yet as to how to implement this, will hopefully figure out after having learned Papyrus)I think that would be NPCs belonging to the Followers factionYou might consider applying to a broader scope such that enemies could also heal each otherscript will check for available healing/buffing spells known to ActorYou can use GetSpellCount() and GetNthSpell() to iterate through known spells of an NPCmight also be easier to test for as conditional in AI or Questbuffing script will get activated and deactivated on combat start/end and will poll periodically for useful buffs (I'm thinking 1-5 second loop?)RegisterForSingleUpdate(5.0)OnCombatStateChangedhealing script will poll periodically (out of combat 5 seconds in combat 1 second?) // 5 second poll out of combat to identify possible fall damage or other non-combat inflicted damagesame as abovemaybe put a check for Magicka levels here so as not to depletescript will have to keep track of player party (game.getplayer() is easy enough, should be able to fetch a list of active followers easily enough too.. not sure if updating can be set through game event triggers or if I'll have to poll this too)Probably do this with faction membership and line-of-sight (LOS) functions. FindRandomActorFromRef is also useful for locating NPCs within a certain range.during healingscript poll it will check health of all tracked party members and identify who's in need of heals and apply applicable heals depending on available known spells, actual health damage and available magickaGetActorValue is your friend for both Health and Magicka levelsit will require certain tweaks like preserving magicka for heals if magicka runs low and thus actor needs to refrain from using buff spells; disable polling/script if no directed healing/buffing spells are known to the follower npc; move within spellrange of hurt/to be buffed actor upon identifying damage/combat and before trying to cast said spellsI think that much of this could happen as a result of the other conditionals you set up... sometimes it is best to set up simple rules and see what complex behaviors emerge naturally -
Assuming you want to move all items of those types to their appropriate containers, the conditional phrases are also not necessary, so the following code would also work: Scriptname DBM_AutoSortScript extends ObjectReference ObjectReference Property HoldingContainer Auto FormList Property IngotsNOre Auto ObjectReference Property SortChest1 Auto FormList Property GemList Auto ObjectReference Property SortChest2 Auto FormList Property IngredientList Auto ObjectReference Property SortChest3 Auto Event OnActivate(ObjectReference akActionRef) HoldingContainer.removeItem(IngotsNOre, 1000, False, SortChest1) HoldingContainer.removeItem(Gemlist, 1000, False, SortChest2) HoldingContainer.removeItem(IngredientList, 1000, False, SortChest3) Debug.messagebox("All Supplies Sorted") endevent Remarks: The number 1000 is arbitrary, assuming you wouldn't have more than 1000 of any item type in the container. 10,000 also works, but you might avoid ridiculously high numbers for a 32-bit app.You say you have this script bound to the player. Does that mean that player inventory is automatically sorted to these 3 containers? If so, this would probably be considered "lore unfriendly" as inventory will be moved even when those containers are worlds away.I'm not certain when the OnActivate event fires for the player but suspect that if it happens at all it may occur quite frequently. You might consider OnMenuClose to trigger only when inventory menu is closed (or OnMenuOpen if you never want players to see the inventory.)... Fewer event occurences will keep the script from bogging your game down.Another consideration with respect to binding this to the Player is that it may prevent items needed for crafting form being held in player inventory. (e.g., Player goes to SortChest1 and gets some ores, walks over to Smelter only to discover that the ores have been removed back to SortChest1).In the end, there's much to be said for binding this type of script to a sorting chest rather than a player. If that is your intent, there are both stand-alone mods such as Dynamic Sorting or modder's resources such as Autosorting that have this functionality and much more. I certainly don't want to discourage you from modding. It's a great experience of its own. Might save you some frustration though.
-
it is easy to find wall sections with doorways in the Creation Kit (CK). In the Object Window, navigate to WorldObjects/Static/Architecture and then just type Door into the Filter textbox. In the window to the right, it will show you all of the objects for doorways. You should be able to find one that works for you.
-
Got this working pretty well now: http://www.nexusmods.com/skyrim/mods/52583
-
LE Getting Parent Reference from Extended Script
jaxonz replied to jaxonz's topic in Skyrim's Creation Kit and Modders
resolved. Turned out my instance was Disabled. That was the source of the Object reference has no 3D error. -
Hi there, I'm trying to work with and instance of the WeaponRackPlaqueACTIVATORPlayerHouse Activator, which has the script WeaponRackActivateSCRIPT attached that extends ObjectReference. The problem I run into is that the reference the engine gives me is to WeaponRackActivateSCRIPT. When I try to do manipulations such as MoveTo that require the 3D model in WeaponRackPlaqueACTIVATORPlayerHouse, an error is raised: Error: Object reference has no 3D Try as I may, I can't seem to get access to the underlying object instance. I've tried casting to ObjectReference but get the same object WeaponRackActivateSCRIPT. I've tried .GetBaseObject() and correctly get the underlying form, but that does me no good as I really need that specific ObjectInstance. I understand that internally, scripts that extend have the Parent variable available to refer to the base script, but that doesn't seem to be available. Hopiing this is something simple and I'm just bonking from fatigue. Help, help, help.
-
If it helps, as I understand it, other mods that do special criticals such as Locational Damage do their own probability calculations. The game does provide access to critical hit percent chance. This may effectively double the number of criticals landed, but it might also get you closer to what you want.
-
Well, the tricky part is that GetLastHitCritical is a condition function that can be applied for ReferenceAlias filtering. This isn't ever going to throw an event you can detect. And none of my searches came up with events that had this sort of information. GetLastHitCritical also appears to be a console command, unavailable to Papyrus. What you would have to do is set up 2 quests. The first has a ReferenceAlias to the player. In it you use the SKSE function RegisterForActorAction to make the form get OnActorAction events for things like Swing Weapon. (Alternatively you could just use a RegisterForSingleUpdate loop without SKSE, but that sort of polling is terribly inefficient and you may miss events.) When the event is thrown, you Stop and Start the second quest, which has a ReferenceAlias for an actor set to Optional with the GetLastHitCritical condition function. If that alias populates, then it is likely that the player's weapon swing caused a critical hit on that NPC. I say likely, because it is not certain in situations with multiple combatants. IMHO, this is a pretty messy and uncertain solution. Maybe we should step back and see what you are trying to accomplish overall, rather than how to accomplish it.
-
Glad I found this thread, as I just started a new game with Live Another Life as a Thalmore agent. A Thalmore quest line would be awesome!
-
Thoughts on mods requiring users to own DLC?
jaxonz replied to Undivide's topic in Skyrim's Skyrim LE
I suppose it depends on what your mod is or does. If you are creating new content, quests, dungeons, etc. it seems to me that if DLC content makes the experience richer, you should go right ahead and do that. I agree that all of the DLC has become very affordable and that the majority of those looking for new experiences will have already exhausted the official sources. Falksaar and Wyrmstooth are good examples of whole new lands. In both cases they decided not to use DLC content. While both are really great, I can't help but think about how much better they would be with Dragonborn and Dawnguard resources. If you are creating simple new items, spells, weapons, utilities, NPCs and the like it seems to me there is a better case to have as few master dependencies as possible. Not only does this make them available to a wider audience, it can also reduce problems for users. If someone has a bad load order or doesn't have Hearthfire installed and your mod has a reference to it, that's most often going to result in a CTD crash. Not a happy experience. It usually isn't too tough to create patches that enable your mod to work with DLC content or other mods. It is important to remember that one cannot assume your users will have strong technical skills, speak your language, or have much maturity. So that's my 2 cents. Summary points: If you are focused on content without significant scripting I think limiting yourself to just base game content will result in a less-satisfying experience for you and your users.If you do heavy scripting with minimal content, reduced DLC dependency is probably a better choice.