Jump to content

Arocide

Supporter
  • Posts

    123
  • Joined

  • Last visited

Everything posted by Arocide

  1. You can technically check to see if your mod is not installed by using GetFormFromFile, since forms from your mod won't exist anymore you could perform that check at the end of each Event and Function you have in your mod, then print a message box saying it wasn't uninstalled correctly. You can't do much other then that nor can you call any functions from any of your mods scripts since they won't exist anymore (As was said previously :wink: ). Since it would add more time to your scripts can't say it's a good idea, and well it's not your fault if a user doesn't follow the instructions that you set out.
  2. If it was a INI setting supported by Skyrim, since the functions don't read the file themselves they read what Skyrim has already read in, so adding custom ini entries won't work, "fJumpFallHeightMult" would not work even if you were to add it to the file itself. That's a fairly important distinction to make.
  3. Oh, no worries. Ini settings and Game Settings are two different things, You'll find the game settings data contained within the plugin files themselves (which you can find in creation kit by looking at Gameplay > Settings) and ini settings are within the Skyrim.ini file usually contained in your user folder under "My Games\Skyrim\". You can't use Set Functions to create new entries for either though, and any changes made will reset once Skyrim is closed. The SetINI<type> functions are native and weren't added by SKSE, SetGameSetting<type> are though.
  4. If they all needed to be true I would use A && B && C && D, but that would depend on the flow I needed, you could do either depending on what you find easier to read, personally I find having them all on the same line (or broken into two or sometimes three using \ ) easier to follow then if A if B if C if D, but that's up to you. Don't worry about speed there's almost no difference (separate ifs are narrowly faster), either way B C D won't even run if A is not true. A better way of optimising these kind of if statements is to put what would be the most commonly false statement first in either instance (A) since that would short circuit all the checks, and that would save more thread time then using one method or the other ever would, but don't go mental with that knowledge. Apply it to functions or events that are really commonly called in your mod that could be considered slow or important to be done quickly. Same can be said for a if / elseif chain but in reverse, you would want to place the most commonly true statement first.
  5. SKSE Functions are almost all Native themselves (very rarely do they add a non-native function unless it's for convenience), there is no speed difference (or it is so insignificant that it's not worth mentioning) between an SKSE Native function and a Native function. Native means it is handled by game code (of which skse hooks itself into) and not papyrus code. Global has a different meaning a function can be both Native and Global, Global means it is not attached to any one object but is instead called on the Type (Script) itself. All Game Script Functions are global since there is only ever one game instance there's little point in a non-global game function, SKSE Functions included.
  6. It's correct the SetGameIni functions were added in skse 1.5.10 You might still have the source files from SKSE left over (since the compiler uses those to check if the Functions exist or not you can still compile the script). It shouldn't work in game however and I think the error that should show up is Unbound Native Function... not sure on that one. In saying that the Wiki is out of date and still incomplete sadly there's probably over a hundred functions (skse) still not documented there in any way and hundreds that don't even have a page yet, so always check the skse / native source files for the full list of functions you can use. EDIT: Might have exaggerated that a little probably less then a hundred functions that aren't mentioned on the wiki.
  7. Oh Interesting, I thought Missing Masters only caused crashes after the logo. It seems like you are missing a plugin called "Apocalypse - More Apocalypse.esp", which if I am reading it right is needed for the PerMa Compatibility Patch
  8. maybe, have you tried loading your mod order in TESVEdit? I would have suggested that first if the crash was after the Logo Screen... but since it's before, well can't hurt.
  9. You maybe able to use AnimVars instead such as: akTarget.GetAnimationVariableBool("IsCastingRight") akTarget.GetAnimationVariableBool("IsCastingLeft") akTarget.GetAnimationVariableBool("IsCastingDual") You can check those to see if they are true which would indicate the target is casting something. Never used those specific AnimVars myself but they might do what you require. EDIT: Changed IsDualCasting to IsCastingDual after Hack pointed it out.
  10. I originally had this in an edit but you posted as I placed it so I'll write it here ;) Why is your Memory page so high? 100000 (min) 5000000 (max) 1800000000 (max total) Is Way more then it would ever need to be. The default values which are 128 (min) 512 (max) 76800 (max total) are more then enough in most cases or you could use 256 (min) 512 (max) 153600(max total), but I wouldn't go much higher then that. Since it is neither of the other two I suspect it is the Memory page try changing it back to default.
  11. Try Verifying your Steam Cache for Skyrim, you may also want to check SKSEs Log for any errors.
  12. My understanding of it is variables which are declared outside of Functions or Events are declared and initialised to their default values when the script is first initialised and remain existing until the script is removed(at which point the values are thrown out). Since initialisation is local and not a call it is still faster then a function (Just an educated guess I haven't actually tested that or found it written anywhere). The same is applied to Variables you 'create' within functions / events, except they are created on the line where you declared them and then destroyed at the end of function / event. I am going to say generally if you are going to use the exact same value (from a function call) more then two to three times in the scope you would want to keep the value instead of calling for it again, results in less time waiting for calls, meaning your scripts are taking up less thread time (Which is a good thing). EDIT: Since I am not one to (usually) say something without backing it up here is the results of my testing, each snippet here is run over 10 iterations, the time it took to complete is shown in seconds. The values may not be entirely accurate due to script lag but it does show the significant differences [12/21/2014 - 04:24:42AM] Double Alias Call: 0.350002 while i < 10 playerRef.GetAV("Health") + 4.5 playerRef.GetAV("Health") + 5.1 i+= 1 EndWhile [12/21/2014 - 04:24:43AM] Double Call: 0.349998 while i < 10 playerRef.GetActorValue("Health") + 4.5 playerRef.GetActorValue("Health") + 5.1 i+= 1 EndWhile [12/21/2014 - 04:24:43AM] Declare, Init and access: 0.183998 float health while i < 10 health = playerRef.GetActorValue("Health") health + 4.5 health + 5.1 i+= 1 EndWhile [12/21/2014 - 04:24:43AM] Declare, Init and access (Alt): 0.183998 while i < 10 float health = playerRef.GetActorValue("Health") health + 4.5 health + 5.1 i+= 1 EndWhile
  13. I see, well you have a few choices you could link up the idle markers to create a circuit (A patrol route), you could create your own custom package which will allow the NPCs to randomly find markers in the area and then travel to them or the third is scripting... Well I am sure there are others but that's all I can think of off the top of my head. Also 512 is quite a large radius to set for markers, I usually only do 20-64. The Radius is the distance from the marker the NPC has to be within before it is considered reached. EDIT: You could also use a wander only sandbox package too if you wanted, but I am not sure how well that would work.
  14. Are you able to provide a screen shot of your NPCs package? (of the package tab) I could guess at the issue but that info would help to see if something is off with the package data. I assume the Package is directly attached to the actor without any conditions? or a schedule?
  15. No problem, if it doesn't turn out to be what you're after just let me know, or hell if you need someone to assist with any further scripting send me a pm. Usually not doing much anyway :wink: .
  16. I thought your name looked familiar, I've used your mod before :smile: . This makes it much simpler, they are set as fire and forget so it won't work the way I set it out, my bad. The most simple solution I could think of that requires little rewriting would be something like this: Scriptname JTAeatscript extends ActiveMagicEffect Idle Property IdleEatingStandingStart AUTO Idle Property chaireatingstart AUTO Float Property animationDuration = 1.2 auto ;1.2 default, what you would want to do is change this to the duration (in seconds) of the animation, this will prevent movement for the duration of the animation, but is a property so you can customise the duration if need be per script instance via creation kit. Event OnEffectStart (actor akactor, actor akCaster) Game.DisablePlayerControls() ; Which by default disables movement, fighting (attacking input), activating and entering menus If akactor.GetSitState() == 0 akactor.playidle(IdleEatingStandingStart) ElseIf akactor.GetSitState() == 3 akactor.playidle(chaireatingstart) endif ;if the duration will always be the same then you can just skip creating a property and directly place a float in the wait function. Utility.Wait(animationDuration) ; Pauses Script execution for x seconds Game.EnablePlayerControls() ;Sister Function to Disable which by default enables all. EndEvent Didn't test it but it should do what you want... I hope. You may also want to setDontMove as well, to prevent the player from being pushed around while the animations are playing, otherwise they could still ghost :wink:
  17. How exactly is your magic effect applied? is it an Ability or a Spell, is it a constant effect or concentration or fire and forget?
  18. I quite simply copy pasted what you posted, there are numerous errors in the script which need to be addressed. now that makes a lot more sense. It would be pretty simple, just add PlayerControls functions like this: Scriptname JTAeatscript extends ActiveMagicEffect Idle Property IdleEatingStandingStart AUTO Idle Property chaireatingstart AUTO Event OnEffectStart (actor akactor, actor akCaster) Game.DisablePlayerControls() ; Which by default disables movement, fighting (attacking input), activating and entering menus If akactor.GetSitState() == 0 akactor.playidle(IdleEatingStandingStart) ElseIf akactor.GetSitState() == 3 akactor.playidle(chaireatingstart) endif EndEvent Event OnEffectFinish(Actor akTarget, Actor akCaster) Game.EnablePlayerControls() ;Sister Function to Disable which by default enables all. EndEvent I assume the target of the magic effect is the player
  19. If you don't want the player to be able to move through input (W, S, A, D) then Game.DisablePlayerControls is the way to go, SetDontMove just stops the actor (in your case the player actor) from moving / being pushed around, so the player can potentially still do actions that could stuff up the animations. So an example of what it could look like (If I am reading what you are asking correctly) could look like this: Scriptname JTAeatscript extends ActiveMagicEffect Idle Property IdleEatingStandingStart AUTO Idle Property chaireatingstart AUTO Event OnEffectStart (actor akTarget, actor akCaster) Game.player.SetDontMove() Game.DisablePlayerControls() ; Which by default disables movement, fighting (attacking input), activating and entering menus if Game.Getplayer().GetSitState() == 0 ; While the player has a weapon drawn, try to have him sheathe it every tenth-second. while !EscapeClause && player.IsWeaponDrawn() && !player.IsDead() Game.player.SetDontMove().playidle(IdleEatingStandingStart) endwhile elseif Game.Getplayer().GetSitState() == 3 Game.Getplayer().playidle(chaireatingstart) endif EndEvent Event OnEffectFinish(Actor akTarget, Actor akCaster) Game.EnablePlayerControls() ;Sister Function to Disable which by default enables all. EndEvent
  20. EDIT: Put on hold for now, working on other things
×
×
  • Create New...