Jump to content

TheWormpie

Premium Member
  • Posts

    281
  • Joined

  • Last visited

Everything posted by TheWormpie

  1. It is correct that the script should be added to the player alias, so the problem isn't that. Oh, yeah, actually, the debug message shouldn't be inside the if statement as I said. Mistake on me. Then the message will only show if you actually reach the objective of 10 hagraven claws. Add the debug line after the endIf line instead. Oh, yeah, and make sure you don't pick up too many items at once - this might cause some issues. I forgot about this too, but to avoid problems with overloading Skyrim's script engine, you should add an event filter to your script, something like this: Event OnInit() AddInventoryEventFilter(HagravenClaw) EndEvent
  2. Well, I'm not sure what's wrong - it's been a while since I worked with this. You're sure that myGlobalCurrent hasn't "Constant" checked? Because that would mean, it can't change from 0. Otherwise, try adding a debugging line to your script, inside the 'if' statement: int CurrentNumber = myGlobalCurrent.value debug.notification("You have gained " + aiItemCount + " hagraven claws, and myGlobalCurrent has updated to " + CurrentNumber) See if this in-game notification shows up at all, and if it shows you the expected values of aiItemCount and myGlobalCurrent.
  3. Yep, thankfully, not everything is as complicated as one might think :) When you think you've done what you can on your own, and the compiler still complains, you're welcome to drop your updated script in here (perhaps inside a 'spoiler', this can be chosen with the Special BBCode button in the upper left corner.) Then I'll have a look and tell what you're missing.
  4. I'm not sure PathToReference can be trusted, especially not with such great distances. Use a package conditioned to run when the quest is completed instead. Then run EvaluatePackage() in the dialogue script fragment.
  5. 1. The first issue is because you place the explosions at "self" (the triggerbox itself), which means it will probably spawn at the center point of the triggerbox, while you spawn the actors at the player. OnTriggerEnter happens as soon as the player enters the border regions of the trigger box - this means that the bigger the box, the further away is the center point from the player, and therefore the further away the explosions will spawn from the player (and where the actors spawn). To solve this problem, you could make sure you spawn the explosions and the actors the same place. With a bit of math, one could also choose to spawn them at another specific point between the player and the triggerbox center. I can find the math for you if you want (I've just been helped by another user in this exact matter ;) ) 2. When you've made optimized the script a bit, as you say you will, I can help you add the PlaceAtMe functionality, so that it's possible for you to get more variation in your ambushes via Leveled Actors. 3. This should be rather simple. Create a int property (I'm calling it "iChance" in this instance), then replace your lines with Int iRandom = Utility.RandomInt(1,100) If (iRandom <= iChance)
  6. Allright, first of all, you should really use a property array for your actors, and utilize while loops to make your script shorter and more readable. So instead of using 8 different properties, use: Actor[] property AABRREFs auto ; array containing all of your actors Then you can change a lots of things to while loops, for instance in the OnTriggerEnter part of the script: ; after self.KnockAreaEffect int iCount = 0 while iCount < AABRREFs.Length ; this meaning: do the following as long as iCount is less than the number of actors placed in my array (the length) AABRREF[iCount].Resurrect() AABRREF[iCount].Disable() ; disablenowait() might be faster here AABRREF[iCount].Enable() ; enablenowait() might be faster here AABRREF[iCount].SetAV("Aggression", 2) AABRREF[iCount].MoveTo(PlayerRef) iCount += 1 ; add 1 to iCount endwhile Also, you should only Delete() your actors if they were placed via PlaceAtMe. Otherwise, it's enough to just disable them and move them back to their editor location, so that they are ready to be used again. Anyway, now that I'm looking at it, it appears to me that the DeleteMe variable, and the part of the script linked to that, might just be leftovers from when you started with PlaceAtMe?
  7. I don't think it's possible to retrieve information about the selected target. SetDoingFavor is what the game uses to bring up the crosshairs.
  8. You need to create a copy of the race and use that instead for your falmer merchant. In the new race object, check "Allow PC Dialogue". If the falmer has anything at all equipped, you need to create copies of these armor objects and their respective armor addons as well, and you need to make sure that the armor addons have your new custom race checked under "Additional Races" - otherwise the armor won't show up. Be aware that even Skin objects can possibly have this issue.
  9. Most probably it had to to with the shader/lighting settings in the nif file. I really can't say for sure, but you should take a look at the alpha setting in the BSLightingShaderProperty branch, it might be that. Good you found a solution on your own, anyway :)
  10. As far as I remember: 1. Create two globals, myGlobalCurrent and myGlobalTotal, both of variable type 'short'. myGlobalTotal should have 'Constant' checked. myGlobalCurrent should be equal 0, while myGlobalTotal should be equal 10 (or whatever the amount of claws you want to collect). 2. Write (<Global=myGlobalCurrent>/<Global=myGlobalTotal>) in your objective field. 3. Add the two globals on your quest's data tab under 'Text Display Globals'. 4. Create an alias and fill it with the player reference. Add a script with the following; quest property myQuest auto globalvariable property myGlobalCurrent auto globalvariable property myGlobalTotal auto ingredient property HagravenClaw auto Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) if akBaseItem == HagravenClaw if MyQuest.ModObjectiveGlobal(aiItemCount, myGlobalCurrent, ObjectiveNumber, myGlobalTotal.value) ; replace "ObjectiveNumber" with whatever number your objective has SetStage(CompleteStage) ; replace "CompleteStage" with whatever stage you want to set when you've collected all the hagraven claws endif endif EndEvent Remember to fill the properties. That should be it. Hope it works for you :)
  11. Yep, thanks :) That works in some instances, but other times the talking activator is positioned inside another object with collision. Replacing the activator with an actor would just spawn the actor somewhere else, parted from any collision being in the way, and probably on the nearest nav-mesh. SetLookAt doesn't seem to work on the player. I've played around with SetPlayerAIDriven and packages to force the player to turn around towards the speaker, since that functionality somehow worked for me in my Santanism mod, but this time I simply can't make it work... what the heck, CK? :dry: Anyway, I've sort of worked around needing to turn the player towards the speaker at all. I've just thrown my quest in another direction. It's not great, but it'll do until I find a better solution. If I do.
  12. Fantastic. Sounds pretty simple, yes, It's been too long since I had math lessons, it seems. Thanks :D
  13. Allright, my math skills are not at all good enough for this SetPosition/SetAngle matter: I have three actors. I want to move ActorA so that he's positioned right in the middle between ActorB and ActorC, no matter where the two latter are standing (although they are of course inside the same cell). I know I can find the coordinates of ActorB and ActorC with GetPositionX, GetPositionY and GetPositionZ, but can't figure out how to find the center point between those sets of coordinates. Then I want ActorA to change Z angle so that he faces ActorC. For this, I have no idea how to even begin. I hope there's a mathematical genius out there who can help me :) Thanks in advance.
  14. EDIT: It seems that this isn't possible at all in the Skyrim engine. I had to use a wacky workaround, registering for frequent updates in a script, checking whether the player has left dialogue with the actor in question, then force the player back into dialogue again. Not perfect but it'll do.
  15. You need to create nav-mesh for the boat. If I were you I'd practice on an interior cell before moving on to exterior nav-mesh since it can be a bit of hassle. There's tutorials and lots of threads covering this around the internet somewhere -- haven't seen this video, but Darkfox is usually pretty good, so try it out.
  16. I don't know what's wrong with your setup then. Make sure that your actual spell works and have visual effects so that you know whether it's being fired or not. You can also use the Debug.Notification function to figure out if any part of your script is failing. If the script is attached to the itemcaster reference itself, you can use mysummon.Cast(self, xMarker01) instead, but it's the same result essentially.
  17. You've called your property ItemCaster01 while you simply use ItemCaster in the Cast function. Apart from that your script looks fine. Remember to fill the properties :smile:
  18. If I understand your question correctly; if doOnce is set to True, your script stays in the Inactive state. If DoOnce is set to false, your script will return to Active state after 10 seconds. I'd recommend as good practice to always set a default value for int, float and bool properties - like this: bool property doOnce = true auto This means that even if you don't fill the bool property manually in the CK, it will still be filled with your default value. It is just what it looks like; a way to check whether it was the player or someone else activating it. The OnActivate event will only run if your reference has actually been activated, so it's not necessary to check for this (although good practice) unless there's a chance that another reference activates it. Use the Special BBCode button (third button from the left in the upper left corner), and choose Spoiler.
  19. Vanilla-style followers already have a ton of dialogue (since a lot of their dialogue, like combat lines, are generic stuff that all npcs use), so they are probably not the best example of the simplest possible follower. The following is the most essential though, I'd say. Misc HelloGoodbyeTopics Start FollowEnd FollowContinue FollowWaitTrade ItemsDo StuffFavor Start FavorExit FavorAgreeImpossible RefuseMoral RefuseCombat There's about 10 different important ones here, but I have survived using almost nothing but the "Hit" topic, because that's the most likely sound to be played in combat.With 2-3 variations of each, that's about 35-45 lines or more depending on how many different combat situations you want to cover. Apart from that there's of course also the tons and tons of less important topics played when something specific happens, like when you absorb a dragon soul or enters a big dungeon area for instance. I've done a follower with only about 20-25 lines of dialogue, leaving out all the favor lines, so that's about the minimum amount, I think.
  20. How can I prevent the player from exiting a dialogue menu? I've already tried checking "Walk Away Invisible In Menu" in the Topic Info settings to no avail.
  21. Finally found the culprit... I had apparently at some point blocked all activation of the talking activator ref via a script that I thought I had deleted. I knew there had to be something obvious wrong :dry: I've still got an issue though. Since I'm not using the actual force-greet functionality, one of its features is missing. Normally, when force-greeted, the player's camera is automatically turned towards the speaker as dialogue is initiated. This does not happen when simply activating the speaker. How can I mimic this effect and somehow force the player's camera to focus on the speaker? I've tried SetLookAt but nothing happened. Should I do something else before SetLookAt will work on a player, like disable looking controls or enable AI for the player?
  22. If you never register your npc for updates, the OnUpdate event will not run... It sounds like you shouldn't use OnUpdate at all, but rather use utility.wait in your stage 30 script fragment -- or even better, run a script in your package when it completes (if Flee packages ever complete, you can figure that out on the wiki too, probably).
  23. Allright. So why and how are you using the OnUpdate() event? Have you checked if it runs at all?
  24. Orientation can easily be changed while still being able to fit the pieces together. SHIFT+Q brings up a crosshair and when a reference is selected, all other references will snap to that reference's orientation.
×
×
  • Create New...