Jump to content
ℹ️ Intermittent Download History issues ×

Sphered

Premium Member
  • Posts

    439
  • Joined

  • Last visited

Everything posted by Sphered

  1. You have entered an area of scripting that is severely under-documented Now the statements below might seem equivalent. Veteran scripters often believe they are identical Player.AddItem(Game.GetForm(WhateverSwordBaseID)) Player.AddItem(Player.PlaceAtMe(Game.GetForm(WhateverSwordBaseID)))) They are not the same. You have a sword in your inventory now sure... but thats where the similarity ends Under the hood, the game treats things differently depending on how they came into the world. This is not common knowledge To test this. Do a GetType() on each of the above. One will have no type aka 0. The other will be Type 61 One will be much more useful to you than the other. Guess which one This matters. 61 will receive Objectreference Events and otherwise be something you can do things with. The other? Not so much I am not an active author anymore so kinda fuzzy on the super effective ways to utilize SKSE to its potential, but I hope this helps steer you the right direction
  2. Sounds like your goal was to edit the shape, aka the changes made were to the vertices. So really, if thats the case, you can take the modifed mesh, and in nikskope go Ctrl C over the vertices, then switchover to the original mesh in skope and Ctrl V over its vertices section to paste those coords to the original nif. This guarantees nothing else got changed. If you changed skinned weights and such though, that may not work Otherwise maybe just throw up a screenshot of how your node tree looks in Nifskope. I'm leaning towards shapes-need-to-be-directly-under-root being the culprit
  3. 3DS Max likes to give shapes a parent node. Skinned trishapes have to be at root level to be visible for Skyrim. 3DS might have also modfied alpha and shader settings so make sure those are in line with what Skyrim likes to see
  4. Enchantment FortifyIllusionSomething = Game.GetForm(0xBE003) as Enchantment FortifyIllusionSomething.SetPlayerKnows(True)Use false to unlearn the enchantment. Works for alchemy/whatever else too
  5. You seem to be having a time with this so I adapted the approach I use into a demo to show a different way you can have follower mounting with ease I since infer you arent using SKSE? Why lol? The AI package is the main part anyhow so ignore the rest and feel free to use it as a template to incorporate into whatever you use to have them reliably mount when you do. The important part is to ensure the summoned entity sets either your followers actorbase or a faction the follower is in, to be its owner so the follower can mount it. The faction, if you go that route, has to be flagged as able to be owner. But yeah, works smoothly https://www.dropbox.com/s/q40cowjlni8s11h/EZMountDemo.zip?dl=0
  6. Exactly pointing out what has worked flawlessly for me making encounter mods for personal use over the years, so take with a grain of Frost Salt Leaving stuff hanging around is like walking in someones home with muddy boots. Sure you left, but now also left a mess that now has to be addressed. IDK random analogy Spawn live in-game only, with the persist flag. I fully sanitize only things I created, and when I am no longer near them. I avoid aliasing and other things that make refs linger in other elements of the game which could lead to mud on the floor. Dynamic AI packs at the NPC level are best. Scripts are cleanest on magic effects since they have a very efficient built in way of cleaning themselves up OnEffectFinish, with Is3DLoaded() and other relevant checks to ensure they conclude. Utilize GotoState of FormID chaining via StringUtil (FormID as String + "zz" + AnotherFormID as String + "zz" + AnotherFormID + etc etc) which you can then perform a String Split on GetState() to read. This lets you store variables vs needing to declare properties. GotoState("") to wipe that slate. I give the game as little as possible to have to worry about behind the scenes My Sanitize routine RemoveAnyFXOrMagic() RemoveFromAllFactions() RemoveAllItems() GotoState("") BriefPause() Disable() BriefPause() Delete() Like they never existed. Again. This has always worked great for me. YMMV. I tend to keep load orders light tho
  7. NPCs favor higher damaging spells. They cast lower cheaper spells in a priority sort of way, so if a spell does no damage, they may opt to never use it This can be handled in different ways. What I do is give them a shout which uses a Target Actor spell. I give this spell a certain amount of damage, I think maybe 50 I used, but anyway the point being to make them want to use it. Shouts have a built in cooldown too so its tidy there in regulating spammage The shout hits their target, which now can invoke a script. Not sure how well you can use Grab Actor here, but what I'd likely do is not use that at all, and instead write a script with translation routines, to make the enemy get pulled. You can also use PushActorAway() with a negative value to pull them forward, but IMO translate is better since more controlled and you can add elevation
  8. I found papyrus to be very simple compared to other languages. Also being a game, you have that extra motivation to learn coding, so that in itself makes it a good gateway to the programming world. It only helps so much though. Eventually it clicks and you see how all programming languages are more or less doing the same thing, just go about it differently. We are communicating with a software. Code is the way the human communicates with the machine
  9. I would avoid special characters in folder names. Ideally it wouldnt matter but because reasons, its good to simplify naming conventions as much as possible. I even avoid spaces. Use underscores if you really want that extra readability If you mean facegen, make sure the facegen folders match the esp file name with extension. Those two folders you do have to have a period in them Also check XEdit to make sure paths didnt get messed up which the CK is known to do sometimes
  10. I like using Mod Events for batch commanding muliple units. Once tagged, have your followers enter listening mode via RegisterForModEvent. When you want to relay a command to all of them, SendModEvent out, which basically broadcasts a command to them This ModEvent can contain arguments. You can also command them to Send another ModEvent to a central listener. This can tell the listener where they are and you can relay commands at will. Kinda complicated if you havent played with ModEvents but incredibly powerful underused capability there
  11. You can increase the cap with a perk. If that is sufficient, just take Twin Souls as a base and increase the numbers of Commanded Actors you want to enable for that perk user. You can play with the keywords in that perk to allow certain magic keywords to have a higher cap, while leaving the other atronach counts unchanged Indeed, you cannot actively prevent a summoned a creature from counting as one. If the above doesnt work for you, you can created a scripted spell that spawns an entity and maintains it. After x time have it expire like a normal summon would. Bit more work, but point is this is a workable concept
  12. I use Bool checks If WhateverCell as Bool DoThings() EndIf With numbers though Bool will say True if its anything other than 0. If its negative 1 for example that is True as Bool. For these do WhateverDigit != 0 to know if it has any value
  13. Form ForLeft = Whoever.GetEquippedObject(0) Form ForRight = Whoever.GetEquippedObject(1) Then if they exist aka something is armed, you can do GetType() checks to know what to do If its a spell, call UnequipSpell and declare it the appropriate hand slot If its an item in right hand just unequip. If its something in their left hand I think the syntax is Whoever.UnEquipItemEx(ForLeft,2,False)
  14. Well for SKSE support you dont need another esp. Just have modified scripts available for users that want the extra SKSE capabilities. So upload a SKSE-free version as the main download, and if they know they have SKSE and want those features, you have a side download they can download to overwrite the existing scripts
  15. For what its worth it doesnt break anything if the CK complains about an otherwise working function. It expects to see certain syntax in the psc so if it doesnt like what you rearranged their layout or syntax it will cough up that lovely feature
  16. String format is just a Bethesda quirk. If the engine has already declared a string in a certain context it doesnt change between upper and lower if it sees that string again A somewhat reliable workaround is to declare a Read Only String Property where it is the visually preferred format. Couple other tricks too but I havent scripted for a while so dont remember them but the readonly thing is good
  17. Complex scene and encounter scripts can take hours and hours to write. Those touchups especially, after you setup a solid sequence and enter the "lets make this perfect" phase What have you done so far? What seems to be giving you issues when you test it in-game? Thing is, there isnt a particular thing you are asking for assistance on from what I can tell. But yeah, IMO take some scenes that perform tasks similar to what you envision in yours, and adapt them to a custom scene, or just to have a reference for how to implement a certain component
  18. If its an ability simply give it a duration of 1 second, and in theory when you pop on the spell will go away per duration elapsed If it is not an ability, its worth a shot but not sure this will work smoothly, but change it to an ability, then set it to 1 second duration BTW I am talking about the spell the effect is for, and change the effect to constant self so it becomes ability-friendly Not making promises but I imagine this will work, albeit if you are wanting to revert these after, and/or effects have scripts on them... yeah... This is not something I can say is a good practice to do TBH
  19. Trickier than one may think, since its almost like Bethesda really didn't want or feel the need for an easy way to apply effects in dynamic situations. Perhaps due to how busy it has to be under the hood. There might be more than one way but here's how I'd go about it A Cloak Spell. More or less copy shock cloak for example, and tweak its radius, visuals, and other values to your liking. I recommend rendering this cloak harmless and visually invisible. Now edit the castable cloak spell to be an ability. Make a perk and choose that ability as the spell it uses. This effectively makes it where you always have this cloak going after you learn this perk. That's the "busy" part since it basically is interacting with every single entity you get close enough to. Good idea to add a "IsUsingABow" or whatever conditions so its only active when it even could do something, and if you copy a cloak I believe it has combat conditions etc, which you should probably keep there to make it less busy Now add a script to the damage effect aka the effect for the secondary "proc" spell your cloak casts on enemies. On this script you want an OnHit Event. In this OnHit Event you will want to now inflict fire damage So declare target (enemy) on effect start and OnHit go... FireWhateverEffect.Cast(Target,Target) The above conditions can render no need for script conditions which is ideal Hesitated to post since perks are not something I dabble with much and ppl love to correct others etc, but saw no one responding so... Anyway might be a better route, like maybe mess with Paralytic Shot and see if you can adapt that into a fire proc of some kind. Good luck
  20. Kinda tired so if I misunderstood something my bad in advance To clarify, references/actors can be aliased by multiple quests so that in itself is no issue. However if you are expecting certain AI, the winner there is the quest with top priority. MagicKeywords are active while a magic effect is applied which has that keyword. The point there is to avoid multiple versions of a certain spell type being applied at once. If you want multiple animals there are various ways to manage that. If you cant summon indoors its because something has an interior check preventing it. You'd need to remove that for it to work. Outside of that, some animals like say, mammoths, yeah they wont play nice indoors. Heh
  21. The animations dont necessarily play sound. Some animations can, and do, but I suppose I never checked those so its possible they do not, and instead play through the audio files instead. If so, you'd need to add that in. Doable, but could be a lot more work than you think. Ghetto approach I suppose would be put a sound marker there too of whatever beat you want to hear, but it may not lineup with the animation
  22. AI Packages can have a "Flee" routine in them which can supercede npc settings. You'd have to crack knuckles and see which package is causing it. Like if you use a follower framework, it may have a routine where they run when under x health. Change that to 0.1 health or perhaps remove that, but be careful if you do so you dont break the stack
  23. You have to tell it who the animal actor is. I assume you are pointing to one that already exists so in the CK you would want to assign MyAnimal to the actor you want The keyword check you have there is a bool so yeah its not finding MyAnimal. If you want that keyword check you could do that as a condition in the CK too so this effect wont even happen unless its got that keyword
  24. A nifty workaround I have seen mods do is give an invisible actor a skin or outfit of the object. So basically a humanoid wearing a tent. Reason for this is humans can spawn to line up with the terrain, where as object placement via script is literal. It will just hover in the air or be clipped into the ground, where as the humanoid wearing the tent skin, wont do that You then can tell said human to placeatme an object that matches his current look, then delete the human. Voila awkward but effective placement. FollowerLivePackage builds camps this way. I thought it was clever
  25. Event OnActivate(ObjectReference akActionRef) Bool ShowMenu = akActionRef.GetFormID() == 0x14 && WhateverOtherConditionsYouWant() If ShowMenu Int Prompt = WhateverMessage.Show() If Prompt == 1; Choice 1 EffectOne.Cast(akActionRef) Debug.Notification("You have gained " + EffectOne.GetName()) ElseIf Prompt == 2; Choice 2 EffectTwo.Cast(akActionRef) Debug.Notification("You have gained " + EffectTwo.GetName()) ElseIf Prompt == 3; Choice 3 EffectThree.Cast(akActionRef) Debug.Notification("You have gained " + EffectThree.GetName()) EndIf EndIf EndEvent Above assumes choice 0 is set to cancel so adapt as desired. This also assumes you named your effects so again tailor as wanted
×
×
  • Create New...