Jump to content

LoginToDownload

Members
  • Posts

    1666
  • Joined

  • Last visited

Everything posted by LoginToDownload

  1. Oh hey, Reaper! Good luck with Dark Tower the second. Many, many thanks to all. This is very good information for whatever nebulous half-plans I currently have boiling.
  2. I agree, but I don't care so much about the prescriptive side (or, for that matter, popularity) as whether it would actually bother people. Thanks to both of you. Please, keep them coming! It's always useful to have a bunch of opinions on questions like this.
  3. Just a quick question: Are quest mods nowadays (/old geezer) expected to be voice-acted, to the point where no voice acting is thought of as a significant strike against? I'd like to know before I hypothetically start work on such a mod.
  4. The script does indeed involve globals, but unless there's a weird bug with globals it's all property accounted for. It is possible that it's a savegame memory issue, but it would be problematic if everyone installing the mod had the same problem, and only one of the scripts would even have been called before now. Tomorrow I'll run through the game again with the mod enabled from the get-go. As near as I can tell, both the old and new scripts are running.
  5. I've been trying to make a werewolf mod, and that means replacing some vanilla scripts. Because scripts and papyrus fragments are held externally and I don't want to leave a mess when it's uninstalled, I do this by copying the standard werewolf quest and changing all of the properties to point to that one instead. Then I can make whatever changes I want, and none of it will remain when you deactivate the .esp file. Unfortunately, the old werewolf quest is still running and being triggered by outside scripts when it normally would, and I have no idea why. This quest isn't connected to anything. Its 'users' count is 0. I have no other mods installed, nor have I since I started this save file. Some of the changes I need to make are negative, so it isn't something I can really work around. I have a backup option in just stopping the old quest from the new one, but that seems like it has the potential to get messy fast, so I'm saving it for a last resort. What's causing this madness? Thanks to all.
  6. At a glance, putting it in MQKillDragon should work. Sorry, I've never actually used animations before. :(
  7. Note: The following is ill-researched guesswork. -Have you filled the property properly? Properties don't automatically point to whatever shares their name. To fill your property, right-click on your script and click "Edit Properties". From there you can click "Auto-Fill" or select something for it point to manually. Empty properties have tripped me up more times than I care to say. -Conventionally, people declare properties at the top of the script rather than the bottom. It probably doesn't matter, but I guess there's a chance? -If none of that works, have you tried using SendAnimationEvent instead?
  8. The last real obstacle to my current project is figuring out if an actor has been hit with a Rally spell. Effects like Demoralize and Charm have keywords associated with them, but Rally effects don't seem to. Checking if their Confidence is higher than their Base Confidence also doesn't work, perhaps because most of the game's enemies already have the highest possible Confidence. Is there any other way I can do it? This isn't strictly necessary for the mod's completion, and since it's used on enemies they'll probably never get Rallied in the first place, but it would be a bit silly if Rallied people were fleeing under the exact circumstances that you would expect a Rallied character to stand and fight under. Thanks to all.
  9. I assure you, trawling the Creation Kit Wiki is more-or-less an automatic response to anything I don't understand. :P It should be doable so long as GetAlias can be used consistently.
  10. Alright, so I can add 20 or so aliases and assign them to actors via scripts? That sounds viable. Thank you.
  11. For my current project, I need a script that can make any actor, selected in-game, run away. I do mean "run away", mind you, not "cower in a corner" like the Demoralize effect does. Back in Oblivion I would do this via AddScriptPackage, but it no longer seems to exist in Skyrim and I can't seem to find any alternative for using AI Packages in scripting. Once again, giving the packages to the actors in-CK isn't at all an option. Has the functionality been lost completely? Thank you.
  12. I'm pretty sure you can't use OnHit like that. I think it can only be applied to ObjectReference scripts, and only runs when the ObjectReference in question is hit. Sorry I can't be of more help.
  13. DISCLAIMER: The only testing I did was making sure the script compiled. I think this will work, but no guarantees. If it doesn't, let me know and I'll give it a more thorough look-through. Step 1: Open up the 'scripts' tab of your dialogue quest. Click the 'add' button, and [New Script]. Name it whatever you'd like (for the purposes of this guide, we'll call it MyQuestScript). The 'Extends' textbox should say Quest, and you can leave the Documentation String empty for now. It just contains a description of the script. Note that you only need to do this if the Quest doesn't already have a script. Paste the following into it. Scriptname MyQuestScript extends Quest {Used to ensure the questgiver dies when his quest fails and the player isn't in the area} Actor Property Victim Auto {Declaring a variable, in this case the questgiver to kill. 'Actor' is the type of variable, 'Property' lets it refer to something not in the script and 'Auto' saves us the complexity of setting the Property up.} ;If you give this Property the same name as the questgiver's Reference ID instead of Victim, it will make a future step easier. Event OnUpdate() ;This will make sense later. if (GetStage() == 10) ;The stage in which we're supposed to kill our questgiver. if (Victim.GetParentCell() != Game.GetPlayer().GetParentCell() ) ;If they're in different cells... Victim.kill() UnregisterForUpdate() ;Again, this will make sense later. endif else ;If, for some reason, we exited the victim-killing stage and no longer want to off him... UnregisterForUpdate() endif EndEvent If I knew more about Quest scripting, I could probably get it to work with the alias rather than a new property, but alas (no pun intended) I don't. Save the script up and close it. Step 2: Still in the scripts tab, click your script once and press the 'Properties' button. This should bring up a list of the script's Properties, in this case only the one. If you named it the same as your questgiver's Reference ID, you can just click the 'Auto-Fill All' button. If not, click the Property, press the Edit Value button and select your questgiver's Reference ID from the drop-down list. If you haven't given them a Reference ID yet, you'll probably want to do that. Now the script knows who we're talking about when we use that Property. Step 3: Open up Stage 10 of your Quest, and paste the following into the Papyrus Fragment textbox. kMyQuest.RegisterForUpdate(30) Also, set the kMyQuest drop-down box above your Papyrus Fragment to MyQuestScript. RegisterForUpdate sends an 'Update' Event to the Form in question every () seconds (and the UnregisterForUpdate functions from earlier stop doing so). That is, when you set the Stage to 10, our OnUpdate block will run once every 30 seconds to check if the player has left yet. Feel free to decrease that number for testing purposes, or if you want to kill the questgiver really fast, but there's no need to gobble up unnecessary processing power. Click the 'Compile' button and you should be set.
  14. You might get more help if you post details in-thread. Asking people to message you seems like an unnecessary step.
  15. The functions are tied to the calling variables, not script types. In other words, the functions you can see there are the ones that you can run on an ActiveMagicEffect, and the events are the ones you can run in an ActiveMagicEffect script. If you say 'MyActor.kill()', it will still work (if you're doing this in an OnEffectStart Event, you could use akTarget for that purpose), because the variable in question is (presumably) an Actor. If you just say 'kill()' in an ActiveMagicEffect script it won't work, because it'll assume you want to kill the ActiveMagicEffect itself and that would be silly. :P It also means, yes, that PlaceAtMe can only be run on ObjectReference variables and not Actor variables. You can get around this by either casting the Actor variable as an ObjectReference (that is, if I have this right, 'MyObject = MyActor as ObjectReference'. I only ever tried it once) or use the PlaceActorAtMe function instead. As for using an OnDeath event in an ActiveMagicEffect script, don't take my word for it because I'm a bit of a newbie too and have never tried, but I don't think it would work. Back in Oblivion I would use OnEffectFinish (effects end when their subject dies) and check if the subject is dead inside. EDIT: Oh, yeah: A warning about PlaceAtMe. Most of the stuff in Skyrim is stored in the .esp and .esm files, but you can't do this when using PlaceAtMe to create new objects in-game. Instead, they get stored in the save file, and that adds up. As the save gets bigger, it starts causing bugs and making the game load more slowly, so using PlaceAtMe a potentially indefinite number of times is frowned upon if you don't use the Delete function to clean the objects up when you're done with them.
  16. So I spent slightly over a month working on a mod whose primary premise is 'sticking scripted Actors into a LeveledCharacter', and it's more-or-less complete. Unfortunately, I've just learned that LeveledCharacters can't actually hold scripted Actors. Needless to say, this is a bit of a roadblock. Is there any way around this? I'm currently toying with two ideas, but both of them are horribly sub-optimal. -Idea 1 is to give the result Actor a script that, through generous use of if blocks (alas, these Actors are using States for something else that's neither optional nor doable differently), contains the thirteen other scripts and about a hundred properties run depending on which Actor is selected. After that, I just hope all the ifs don't break the processing power limits too badly. -Idea 2 is to just use PlaceAtMe/Delete to do a switcheroo with the LeveledCharacter result, which is simpler on my end, but since the Actors in question are dragons it's likely to mess up their AI substantially (sleeping on dragon mounts and flying in from a great distance to attack the Player, for example) and make the Radiant quests a bit weird. I'm currently leaning toward Idea 1. If I need to pick one of these two, which would be less disastrous, or are they both so bad that it would be better to abandon it or just hand-place the dragon varieties? Thanks to all.
  17. Thanks very, very much. That will almost certainly work, and I had no idea it existed.
  18. Hopefully this will be the last time I pester you fine folks with my failed CK acclimatization, at least for the time being. I have a Magic Anomaly-esque creature following a Dragon around using TranslateToRef, but it tends to go 'splat' whenever the Dragon lands. Creating a copy of MagicAnomalyRace with 'flies' enabled resulted in an invisible Magic Anomaly, and I haven't found a nearly-reliable-enough way to toggle Invulnerability on and off. In Oblivion there was a specific function that could be used to cut falling damage, but if there's one in Skyrim I sure can't find it. This one really has me puzzled, and it's a matter of 'resolve or cut content'. Am I missing something?
  19. Well, at least we agree that the glass has about half as much as one would expect when ordering a glass of water. :D
  20. Nope. Didn't even take a second glance at it while I was cycling through the function list. That will quite likely be useful, depending on how they layer. Thanks very much. I tried the infinite while loop because OnUpdate blocks got overwhelmed around the same point (half a second). I know very little about actual programming, so I'm stuck in a lot of Oblivion CS habits.
  21. Unlike Oblivion, in Papyrus every script is only given a set amount of processing time. If a script gobbles up more processing time than it's allowed, it has to wait briefly to get some more. For example, if you run one SetPosition function in a neverending While loop, it will actually run about four times every second. This is done so poorly-written scripts don't bog down the entire game. The problem is that the processing limits are extremely harsh. As said before, a single SetPosition function, running as fast as possible, will still move jerkily enough that you can't use it for smooth movement in scripting (my current problem). I've more-or-less come to terms with the fact that it's not really possible and I'll need to change some gameplay ideas for this mod, but if any of you know how to get around it (something specifically designed not to be gotten around) that would be great. If not, no worries about letting this fall. It's a long shot, and I feel a bit guilty wasting space.
  22. I would be very surprised if the Force Push and Pull worked through a method other than PushActorAway, and... Actually, the ultra-quick tests I just ran suggest you *can* juggle actors with PushActorAway in Skyrim, which means it can theoretically be used to hold someone up and repeatedly shove them cursor-ward. How about that, I'm honestly surprised it worked. It would take some serious scripting, though.
  23. Thank you again. If someone with a basic understanding of the scripts says they should work, that's easily good enough for me.
  24. Ordinarily I would just suck it up, let this thread fall down and act as if it was impossible, but the Delete function seems tailor-made for this and it's not something I can really test personally. Can someone pretty please confirm/deny that Delete can be used to completely remove PlaceAtMe'd objects?
  25. Alright, I'll stick to the old-fashioned way. Thank you. Grumblemumble stupid CK... EDIT: What if one uses the Delete function?
×
×
  • Create New...