Jump to content
ℹ️ Intermittent Download History issues ×

JonathanOstrus

Premium Member
  • Posts

    754
  • Joined

  • Last visited

Posts posted by JonathanOstrus

  1. RE 1: Two really simple options.

    • Move the chests far away from their current location in the hidden area of Breeze Home.
    • Move the chests to a different cell entirely. You'd need to use xEdit to pull this off properly in a simple manner. The form records should already be marked persistent so putting them anywhere else should be fine. My go to junk cell for crap like that is the AAAMarkers [CELL:0005EAC7]. Cause hell why not. It doesn't matter if you override that cell record. As long as it's not deleted nothing really cares about it. You could also make your own cell and stuff it in there. Either way, you'll need the cell record in your target mod. So if it isn't there already make one (or override). Then find the chest reference record in Breezehome and at the top of the spreadsheet view you'll see the cell listed. Right click and hit edit. Give it the form ID of the cell you want it moved to. Done. Repeat for any other chests you want to move.

    RE 2: Depending on the price it may not. There is a certain minimum price for the speech scaling. I haven't seen anything that specifically causes any scaling on speech or barter ability buffs. But I have noticed that at a certain price even with extra barter reduction or higher speech the price doesn't change. This might also be affected by faction ranks but I've not tested. So the simple answer may be, "You can't do anything about it".

  2. This should help you understand

     

    https://imgur.com/a/G5k0AxB

     

    Note in the alias example I show I didn't actually fill it. You would need to properly fill it and set up the other flags as necessary. I just outlined the 2 key parts related to name overrides.

     

    I'm not sure that this will actually change the name visible in the container inventory window, but it will change the display name of the crate on the floor.

  3. The short version. It's all handled by a generic function CommandUnlockAttempt() in FollowerScript on the quest Followers.

     

    When you command any follower to attempt a hack, the Followers quest runs a scene (Command_HackTerminal_Scene). Then depending on the actor that is currently a follower a dialogue will play and then either insta fail if they can't, or call CommandUnlockAttempt() on FollowerScript dice roll for success. I believe it's setup to retry up to 4 times automatically before ultimately failing if all 4 attempts fail. But any follower who is flagged for terminal hack enabled will have the same chance for success. And that is directly proportional to the terminal lock level. The specific logic is this:

     

    int lockLevel = target.GetLockLevel()
    
    int roll = Utility.RandomInt(0, 110)
    
    CommandUnlockSuccess = roll > lockLevel
    
  4.  

    As a general rule, if you want to see less complaints about users unable to load certain textures, stay away from BC7, since it's a DirectX11 exclusive format.

     

     

    I can't disagree with the fact you might get complains for using BC7. But...Fallout 4 is a DX11 game. BC7 is proven superior in visual quality over BC1/BC3? Users will complain regardless. I would much prefer to give a superior quality texture and tell the complaining users to get better tools rather than provide a sub par product.

     

    General users shouldn't be trying to view the textures directly. The more savvy ones should be using proper tools. Last I checked GIMP was the last (commonly used tool) hold out for BC7 support. Even Paint.NET has a plugin available for it now (I haven't tried it personally). If one really must use GIMP you can edit in a layer native format. Save to an uncompressed DDS. Then use Elric (provided with the Fallout 4 Creation Kit) to convert to a BC7 compressed form including mipmaps. So all free tools. This way your users still get the best quality possible short of an uncompressed texture.

     

    This is also another nicely put together page with visual comparisons between different modes http://reedbeta.com/blog/understanding-bcn-texture-compression-formats/

  5. I'm creating a quest mod, and I need to advance the quest when an item is picked up (it is not an essential item, you can sell it or drop it after).

    I've looked online for some scripts to make this happen but nothing really works. Here's what I've tried already:

    Scriptname HoDKhajiitiAmuletScript extends ObjectReference  
    
    Actor Property PlayerREF Auto
    Quest Property HoDBloodEx  Auto
    
    Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
    	If akNewContainer == PlayerREF
    		HoDBloodEx.SetStage(30)
    		GoToState("Taken")
    	EndIf
    EndEvent
     
    State Taken
    	; Do nothing
    EndState
    
    

     

    I'm surprised nobody mentioned your "Taken" state is broken. Since you declare the OnContainerChanged in the empty state, it will always run, unless the state you're in has an override. When you change state to taken, since the event does not exist there, it will re-run in the empty state. You need to either make an auto state that holds the event (my personal preference), or put a blank event in the Taken state like this:

    State Taken
        Event OnContainerChanged (ObjectReference akNewContainer, ObjectReference akOldContainer)
            ; Do nothing
        EndEvent
    EndState

    Also, did you assign the properties in CK to point to the proper targets? And are you testing with a save that has never seen the mod before?

     

    If you're using a save which previously had the item created (even if you never saw it or interacted with it) from before the script was attached, it will be broken. It will not get the script until the item is respawned from a new save that never saw it before. Similar issues if the script was missing assignment of properties and you load a save that had bad assignments. They don't update unless a new object is created.

     

    So for testing you should always use a dummy save that has never seen the mod so it's clean. Depending on the circumstances of the mod, you might be able to get away with just COCing into the area with the object you're testing and interact with it without doing any other prerequisite stuff.

  6. The simplest to get a grasp on the properties to add to an OMOD for ammo change would be looking at the extended magazines or the drum magazines.

     

    There's 2 methods for adding ammo. Multiply+Add, and just Add. The Multiply+Add is simplest for taking whatever your current amount is and manipulating a percentage. Such as just straight doubling, tripling, etc. The Add just adds a static number of ammo cartridges to the magazine size.

     

    AAA_mod_TEMPLATE_Mag_ExtraLarge

    mod_PipeGun_Mag_ExtraLarge (drum)

    mod_PipeGun_Mag_Large

     

    Pay attention to the AmmoCapacity property. You'll need to play with the numbers to understand how they interact.
    Edit: Keep in mind perks may also affect the values.
  7. Impossible to answer with the given information.

     

    RE Mannequins: You didn't state exactly how it's not working. Like you can't activate it to trade? It won't display items you give it? What? Assuming the mannequin could be activated and items stored, then deleting it would also delete anything that was stored. Just moving it's Z position to hide it is bad too because if things are stored you can't get them back. Of these 2 options I like the first best as it leaves less cruft. But you would need to make sure your users understand they need to get their items back BEFORE UPGRADING.

     

    I'm not that familiar with the staff display. I think it just takes the item and tries to disable havok or something and pin it on the display. Presuming from my limited understanding of the display system I would guess when you activate it, nothing is happening? In which case there's no risk of an item loss due to removing the broken display and putting down a new one.

     

    Both of these requires proper scripts to be attached to the played objects and it's possible they're missing or misconfigured. Which is likely the cause of your problems. And before you ask, no you can't just go put them on now and fix it. They have to be on it when the object is first seen by the game. It gets baked in the save, even if the object hasn't been loaded in a cell yet.

  8. The reason they're not available is they're not persistent and are unloaded.

     

    Flagging their reference as persistent, adding them as a property on a running script, or adding them to an alias on a running quest will cause the engine to keep them loaded for the purpose of what you're doing. I'm not sure if changing the flag mid-game will change the persistence currently active. However the latter two options will do so temporarily as long as the reference is being held by the property or alias.

  9. I believe the recipe info you're looking for are properties on the "DLC05:WorkshopBuilderScript" script for the container that would built it. So for example ammunition.

     

    The container that builds is DLC05WorkshopBuilderAmmo01 "Ammunition Plant". The recipes for the ammunition a combination of a bunch of properties.

     

    Then have terminal record that gives you the list of recipes to build. The ones related to my example builder is DLC05nativeWorkshopBuilderAmmo01Terminal > DLC05nativeWorkshopBuilderAmmo01TerminalSubMenu

     

    It's not designed to be added to. You could create override records and add a recipe to an existing builder. But it would probably be better to make the DLCworkshop02.esm a master and then just make your own builder item with your own recipes.

  10. I'm not at a computer to check it right now, but I think they use a walk away trigger. So when you "walk away", aka hit escape, tab, whatever, it runs that topic choice.

     

    Edit: Friend of mine tells me that's not it. Though that may be of some use. You could at least capture the walk away and run a fragment on another topic. Maybe to rescue the broken quest and do something at that point. Or fire back up another force greet.

  11.  

    Scriptname RobotTerminalScript extends ObjectReference
    
    Quest Property DLC01MQ02 Auto Const
    
    Event OnLoad()
     AddInventoryEventFilter(None)
       _Reg()
        debug.notification("onloadevent") ;this fires fine.... goes from here to the function _Reg()
    EndEvent
    
    Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer)
      debug.notification("itemadded event")   ;no matter what i do this notification doesn't fire....
    endEvent
    
    function _Reg()
    
        RegisterForRemoteEvent(Game.GetPlayer(), "OnItemAdded")
        debug.notification("_Reg()")    ;I get this notification fine so it makes it into here....
    endfunction
    
    so i can take items out of the workbench, drop items on the ground pick them up. the robotworkbench i made even adds an empty whiskey bottle into my inventory .... the notification never pops up.

     

    Thats the first issue that is a result of the following problem.

     

    <snip>

     

    The way you've got it written, the script registers for a remote event on the player. It has no local event declared to capture the call back. The event you have defined is for adding an item to the object that has the script attached to it. Not the player.

     

    You have to create the callback using the type of remote trigger. In this case an ObjectReference event is being used. The first argument will also need to be added which is the calling target who's event it's from. You need to have

     

    Event ObjectReference.OnItemAdded(ObjectReference akSource, Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
        ; put callback code here to handle when the remote target gets an item
        Debug.Trace("The item " + akBaseItem + " was added to " + akSource)
    EndEvent
    
  12. I don't think the list populates unless the file already exists. It may need to exist prior to CK launch. I've tried by deliberately changing voice types to see if it shows me the new paths and it does not. But making the path and a dummy file prior to launching CK allowed it to do so.

     

    If your files do exist at load time then that's mildly concerning. All I could guess is that there's something about the conditions making it confused about what it can match to.

  13. I don't believe you can extend a conjured/summoned actor's duration. The timer is specified during the act of casting via the spell used. The perks that affect conjuration duration take place before the spell is cast so that the duration timer is set at casting to be longer.

     

    As for detecting what the spell hit or who cast it, that would need to have a magic effect that applies to the target. A script on that effect can capture the event OnEffectStart(Actor akTarget, Actor akCaster).

     

    I don't believe there is any way to use an actor ref and determine what spell was used to conjure them. From the actor ref it will look like any other actor. The difference is that the system has an internal timer to despawn the actor when the duration expires.

     

    Edit: After posting I thought about it and checked the actor.psc file. There are some functions HasMagicEffect, HasMagicEffectWithKeyword which might apply the the actor that was summoned. I don't have time to test but you could make a test spell and have it check if the target has a magic effect of one of the conjure spells or a keyword that is on the conjure spells. They might be applied. I don't know. In the back of my mind I'm thinking they aren't but it would require testing. If it does then it would also require that you made a list and check each type against the target. Which means it won't be generic for any conjured/summoned actor only ones your script "knows" about.

  14. Ah, I didn't know such a command existed. That's the downside to just discovering this language. :smile: Thanks!

     

    If you haven't already you might check out https://www.creationkit.com/index.php?title=Category:Papyrus

    As boring as it's going to be it's worth at least browsing through the list of all the different functions to know what's out there. You don't necessarily need to understand what they all do immediately. But later having seen the names, it may prove useful to remember that something might exist to do what you want.

  15. You could use CK to enter the housing cell. Find the enable markers and write down their ref ids. They'll be persistent since they're used on the dialogue fragments to enable them. Then go in game and use the console

     

    prid <refID>
    enable
    

    Repeat for each enable marker. Note that for DLC forms the first 2 digits is the load order index. It may be different in game than it is in CK.

     

    The ones in Breeze Home are

     

    WhiterunPlayerHouseDecorateLoft [REFR:000C6E39]
    WhiterunPlayerHouseDecorateBedroom [REFR:000C6E3A]
    WhiterunPlayerHouseDecorateLivingRoom [REFR:000C6E3B]
    WhiterunPlayerHouseDecorateKitchen [REFR:000C6E3C]
    WhiterunPlayerHouseAlchemyLaboratory [REFR:000E4EC8]
    WhiterunPlayerHouseDecorateDiningRoom [REFR:000E4EC9]
    
  16. There's a few things to clarify first. Is the dialogue on the quest ARTQuest? If so the fragment could be simplified to a generic something like

     

    GetOwningQuest().SetStage(250)
    

    It should be obvious but GetOwningQuest() will return the quest reference of whoever is running the fragment. Since dialogues are on quests it gives you the quest that owns the dialogue. Quite often that is what is desired. This also benefits as you don't have to add any properties to the fragment.

     

    There may be edge cases where that is not. In which case you need to add a property to the fragment. The simplest way I find to do that is just create an empty fragment with a semi-colon for a temporary comment. Then it creates the script and gives you the option to open the properties. Do so and add one. Choose quest type and name it ARTQuest and hit ok. If it does not auto fill the property you'll need to assign the actual quest you want that property to point to. Then in your fragment replace the ; with your ARTQuest.SetStage(250) and it will compile.

  17. My first thought might be something to do with the graphics driver. You mentioned having a GTX 980m. So you're on a laptop? Does it use switchable graphics? If so, it could be using the integrated Intel or AMD driver instead of switching to the 980m. You could open the nVidia control panel and make sure CreationKit.exe is being given the high performance option.

     

    If that's not it, and you have any ENB, ReShade, or similar type tool that adds a DLL to the game folder installed you could try removing them temporarily to see if that resolves the issue. Short of that I would check for updated graphics drivers.

  18. My favorite is followers that can "heal" healing enemies. A bit tricky to pull off but still amusing.

     

    A twist on the misplaced items would be to have him just randomly drop them while traveling. Would at least allow the player a chance to recover it if desired.

     

    Making the NPC a reserved reference won't necessarily prevent them from being used on other quests. All they would have to do is "allow reserved" on the alias.

     

    I had to do an arguably ugly hack to prevent Mirai from being added to AFT. Not sure about EFF or other follower systems.

     

     

    ReferenceAlias Property Alias_Mirai  Auto  
    Faction Property TweakIgnoreFaction Auto
     
    Function CheckAFT()
        TweakIgnoreFaction = Game.GetFormFromFile(0x0229C3, "AmazingFollowerTweaks.esp") as Faction
        if TweakIgnoreFaction
            Alias_Mirai.GetActorReference().AddToFaction(TweakIgnoreFaction)
        endif
    EndFunction
    

×
×
  • Create New...