Jump to content

Qvorvm

Members
  • Posts

    564
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by Qvorvm

  1. Traditionally, finding the navmesh Z is done by placing an object or marker and using havok to make it settle to ground level. In some other context, I need dynamic spots where to safely teleport NPCs. I mark previous positions of the player for that purpose. They are all obviously appropriate for my purpose, and you can easily add a isSwimming check in your case. Though, admittedly, it's not ideal for "randomly" placing encounters.
  2. If your game version is not 1.9.32.0, you are using Skyrim SE or AE but are asking for help on the LE forum. Skyrim SE comes in different versions (various versions of SE and others of AE), and many mods need to provide specific packages for specific versions. You should make sure all your mods match you game branch (AE in your case, I believe), install the correct version of the address library for the specific AE version you have installed, and then get help on remaining problems on the Skyrim SE forum.
  3. It should compile without the quest. No need to create a quest until it does, though it will not hurt any if you do. These are boiler plate syntax error. Not unusual for a beginner. Don't let the number of errors discourage you. We all start there. Typically, only the 1st or first few errors are significant; the rest are often artifacts of the first errors. So, just concentrate on them one at a time. It is finding something wrong with the base script "ReferenceAlias". If you did anything to that file, UNDO IT NOW! Otherwise, this is telling you that you did not install the base scripts correctly. Review that: 1- You should have unzipped the sources.zip file (or is it sources.rar?) 2- Then you should have installed the SKSE scripts 3- If using MO2, make sure you launch the CK and compiler from within MO2 (using its launch button). I see from the error messages that you have scripts in data/scripts/source. This is incorrect for SE (but normal for LE). In SE, all your script source files should be in data/source/scripts, so copy your scripts/source directory content there. Using LE, you should not have a source/scripts directory (or at least its content will be ignored). Using SE, you should not have a scripts/source directory (or at least it should be ignored). You could also have a wrong setting in SkyrimEditor.ini for sScriptSourceFolder.
  4. It makes little difference whether an idle quest is running or not, except if you have objectives for the log, or if you flag actors in aliases as reserved, protected, essential, quest item, etc. It can make sense to keep them running, or be detrimental to other quests.
  5. Earlier you had said you set your quest "run once". If you do that, startquest will not work a 2nd time. In those cases where all aliases are unfilled, you should also note that the quest is not running, even after startquest.
  6. The console commands "startquest" and "stopquest" are indeed useful in debugging. However, I usually don't use stages, so I do not know if the stage number is preserved (I think it is, but there may be other implications I cannot fully describe). Depending on how you configure your quest, using "setstage" after "startquest" can simulate advancing through the quest to bring you back to a point where you can continue testing. Using papyrus is equivalent to the console but has the advantage that you can automate complex sequences. You can also use "ForceRefTo" and other quest functions to affect the quest in ways not easily accessible through the console, but all that requires some familiarity with programming. Not everything is doable with papyrus, so that's also not a panacea. Having to start new games to test things is an unfortunate reality in many occasions. Look for ways to artificially advance your quest so you don't actually have to actually play it through to get where you need to test things. Console "setStage" is often useful in this regard, but you do have to specifically plan for that, and you often need some scripting. Without knowing more about your quest, it's difficult to give more specific advice.
  7. If you are not using "ForceRefTo" from papyrus, then what I wrote does not apply. Perhaps then, you are trying to develop your mod and test it on a running game without starting new games. You would then notice that new aliases that you add to the quest do appear when you reload your save game, but that the newly added aliases are unfilled no matter how you configure them in the CK. That's the normal behavior of quests and aliases. Aliases are only filled as part of starting the quest, even if you configure the alias (in the CK) to be filled with a constant value. Your options do reduce to (1) create all your aliases from the getgo, (2) stop/start the quest to refill the aliases and/or (3) use papyrus code to force fill the aliases.
  8. There are number of strange behaviors in the quest/alias mechanism. I do not believe I have encountered this one before though. If by "changing or moving" an alias, you mean using ForceRefTo, I strongly recommend you do that only on a quest that is started and on an alias set to "specific reference: None". All other combos have strange corner cases, often involving the quest not restoring into the same state after saving and reloading. If you want to populate your "specific reference: none" aliases when the quest starts up, do it in the "OnInit" event, under a "isRunning()" condition. Perhaps something like this: ObjectReference[] property initialAliasRefs Auto event OnInit() if isRunning() && getStage() == 0 int i = initialAliasRefs.length while i i -= 1 (getAlias( i) as ReferenceAlias).forceRefTo( initialAliasRefs[i]) endwhile endif endevent
  9. Looking at how the Underground Bathhouse mod does it... it only has two map markers; one in Tamriel and the other in the new worldspace. Both show in game. The new worldspace record itself looks simple. Two flags standout: "parent: Tamriel, flags: Use Map Data", and "DATA: Small World". After that, it's probably just a matter of finding proper coordinates. I remember the author mentioning having lowered the map markers way below the "normal" level so that they will remain visible onscreen wherever you center the map. The numbers I see however don't seem that extreme... I'm looking at xEdit. Dunno how that shows in CK.
  10. Are you using a non ascii input method when editing this file? The first complaint is about "f" in "If". This clearly indicates it is not recognizing it as the ascii "f". On the same line, you have non ascii quote characters to delimit your string (If (page == "")), but using “” instead of "". Subtle, but clearly not the expected ascii characters.
  11. You did something to deal with the "casting perk" requirement of "DestructionMaster100"? Surely you have. It's so obvious you just forgot to mention it.
  12. Furniture object can't be moved with MoveTo. This applies to various other object types as well. You should place a xmarkerheading object first, move it around, then test you have line-of-sight (to avoid spawning your ambush inside a rock), then place your ambush directly in its final position. I also recommend you add more debugging info in these situations so you can confirm which parts of the script work and which don't.
  13. SM is reliable, once you understand what triggers it. In fact, the only events that have obscure conditions are the spontaneous dialogue ones I mentioned earlier, and those that don't work at all. RegisterForSingleUpdate works on the level of the Form. If you have multiple scripts on the same object, they all share the same schedule. Separate objects each have their own schedule. You can indeed use registerForSingleUpdate with randomized times. I use that a lot, with exponentially distributed wait times: RegisterForSingleUpdate( -30.0 * Math.log( Utility.randomFloat())) ; exponential with 30.0s average; requires SKSE Your method of chaining your scene after an initial greet is a good option. If you have other, more complex cases, let us know. There are many different ways to deal with all sorts of situations (and some situations for which there are no simple solutions, alas).
  14. Not a fault, except in the documentation which is way too fragmentary. When you say "play randomly", exactly what do you intend? The story manager on its own does not do it, but it can still be a useful component to use. I remember being in that same situation, wanting to run scenes at "intervals" and trying to use the "actor dialogue", "actor hello" and other SM events to trigger my scenes. These event are triggered in specific situations with complex preconditions and it turns out poorly adapted to my needs. Here's an idea which may help you, or not: Use a quest script with an update loop (OnUpdate finishing with a call to RegisterForSingleUpdate) to periodically launch a SM "script event", which starts a quest to fill aliases and then start your scene. I'll explain every step in detail if you need to. PM me if you're shy.
  15. ForceRefTo will work no matter how you set up the alias (except if the quest is stopped; don't do that! The game engine behavior is weird if you do). However, you should use forceRefTo on aliases you set up with the "specific reference", "none" fill type. If you set it up like that, the CK will allow you to add conditions, but will then fail to write them to disk when you save.
  16. Predator/prey behaviors come from an interplay of AI packages and factions. I haven't worked with them directly so I am unclear on the details, but you should look at the corresponding tabs in vanilla wolf and deer records.
  17. forceRefTo bypasses all conditions and allow-flags. If you configure your optional aliases correctly for script filling, the CK will delete any conditions you have set. Check for the keyword in your script before forceRefTo-ing.
  18. It would have to be on some other script, like a quest script. That works well for a unique ring, or if you have a finite supply of such rings. Otherwise, I can't think of anything short of putting rings in an array (referenced from a quest script), and then looping through the array to find which ring is in the inventory you are interested in. Somewhat inconvenient and with potential performance implications if you have more than 1 or 2 dozens.
  19. Vanilla papyrus and skse won't let you get a reference to an inventory item unless either (1) you drop it first, or (2) keep that reference in memory as a script variable, script property or quest alias. There could be skse plugins that do give you inventory references, but your milage may vary... inventories don't necessarily keep track of all references, only special ones. For others, the inventory only keeps a count of not-special item instances. I'm guessing that having a script attached makes the reference "special" though.
  20. SM Event nodes are not that scary. It's the vanilla way of doing things, though Dylbill's magic event is simpler.
  21. You might also use the "Craft Item" SM Event to detect when food is cooked. I use it for potions at the alchemy station, but it should work the same.
  22. I am not seeing how removing a space in a script can fix anything. Still, tout est bien qui finit bien. Felice di essere utile.
  23. You need: A new global variable (int) to store the last seen numChildrenAdopted value; start it at zero. I'll assume it's called YourAdoptedChildCount. A quest ready to receive the scene; any quest that is running by the time you want to start counting children, or a new SEQ quest if you don't have one already. A new scene in that quest with a single phase and no actors. You'll want to start the scene, perhaps simply by marking it "begin on quest start". Make the scene "repeat while true" without conditions. Add a condition to the phase's "end on conditions": "getVmQuestVariable BYOHRelationshipAdoption,numChildrenAdopted != global.YourAdoptedChildCount" Add a semicolon (;) in the script box for the end conditions. Now, you need to exit the scene tab and return to it so that the script fragment file gets created. You can now finish setting up the script. Starting where you inserted the semicolon: Add a property to access the global variable: type GlobalVariable, name YourAdoptedChildCount; it should autofill. Add a property to access BYOHRelationshipAdoption: type quest, name BYOHRelationshipAdoption; it should autofill. In the scene's "Scene Data" tab, right click the script filename, "Edit source" and change the type of the property from quest to BYOHRelationshipAdoptionScript; save and close the file. Go back to the script fragment box and replace the semicolon with the following: YourAdoptedChildCount.setValueInt( BYOHRelationshipAdoption.numChildrenAdopted) ; do whatever else you want to do when children are added or removed. Report any difficulties you encounter. Good luck.
  24. I spent a few weeks trying to make sense of the info in UESP and other sources, then combined that with partial code from god knows where and then tweaked a few more days. What I can up with is almost perfect (I think I still have one rounding wrong somewhere). You'll find all I know on this topic in my mods source scripts: Stow'n'Sell
  25. There is not any method by which an alias automatically gets filled when the external situation changes. Aliases only get filled when the quest starts, or when forceRefTo/forceLocationTo is used. In either case, you need a trigger. In you case, you want that trigger to be when some other quest's alias gets filled. I don't think there is any easy way to do this without making changes to that quest. However, I'm seeing that there is a property called BYOHRelationshipAdoption.numChildrenAdopted. This property can be monitored continuously using a scene, so that you can run a script when it's value changes. In that script, you can inspect the Child1 and Child2 aliases and take proper action to fill your own aliases correspondingly. For all this to work robustly, you will likely need to also research mods that expand the number of children you can adopt, so that you can handle these additional children as well. If you are interested in this approach, I can provide more detailed instructions on how to set up the scene that detects changes in the numChildrenAdopted property.
×
×
  • Create New...
OSZAR »