Jump to content

SKKmods

Premium Member
  • Posts

    2725
  • Joined

  • Last visited

Nexus Mods Profile

2 Followers

About SKKmods

Profile Fields

  • Website URL
    https://skkmods.com
  • Discord ID
    SKK50#0625
  • Country
    United Kingdom
  • Currently Playing
    Creation Kit
  • Favourite Game
    Fallout 4

Recent Profile Visitors

184279 profile views

SKKmods's Achievements

Grand Master

Grand Master (14/14)

3

Reputation

  1. Its the 1.10.160 ESL headers all over again ... The CreationKit 1.1.943 update uses a new 0x7 format for BA2 archives that is not backward compatible with previous versions of Fallout4.exe or 3rd party archive tools. The Archive2.exe tool included with CK does work. BA2 archives produced with the new CK can only be used by Fallout4.exe 1.10.980 Since my dev system is fully CK & Fallout4.exe updated, my workflow is to hand pack a BA2 using BSArch and publish two versions; SKKSynthVision_002_980 Update 002 using the new BA2 archive format - use this if you have updated Fallout4.exe Apr 2024 1.10.980 SKKSynthVision_002_162 Update 002 using the old BA2 archive format - use this if you are stuck on Fallout4.exe Nov 2019 1.10.162
  2. Use ..\Fallout 4\Tools\Archive2\Archive2.exe which supports Unknown archive version 0x00000007
  3. Timeframe is ~ 60 seconds between applying the exclusion keyword+moving the actor to holding cell and then finding it again. The "finder" quests are not start game enabled and called from a controller quest script using Quest.Start() ... BUT that does not matter, they can be called [ StartQuest ] from the console with Debug.Trace in OnQuestInit() for the same repro. The keyword is applied direct to the actor ObjectReference.AddKeyword() so it persists past transient alias membership. Of all ~ 622 persistent ActorTypeNPC in base game and DLC the ONLY actor this affects is [Actor < (001AC0CF)>] [ActorBase < (001AC0CD)>] To clear it from the debug log I am GetFormFromFile on that ObjectReference and removing it from any subsequent found RefCollections so my native scripts can silently remove all actors and quests from the world without hacking a single base game script or object and still generate ZERO debug log output. HA!
  4. I have a problem with a quest alias conditional fill. This is not a n00b thing, I have HUNDREDS of quest condition fills in published CK mods, its likely a corner/edge case defect. A quest process picks actor ObjectReferences from a FormList (which makes them globally persistent), moves them to a hidden holding cell and marks them with an "ignore for future processing" keyword which works fine and reports in the Debug.Trace log: SKK_476PrepareWorldQuestScript.PrepareCommonwealth [Actor < (001AC0CF)>] [ActorBase < (001AC0CD)>] [Cell <SKK476HoldingCell (080138BA)>] SKK_476NoDisableKeyword True A following quest RefCollectionAlias conditional fill that looks for globally peristent actors to fill finds the expected ~600 actors, but also keeps including that specific INVULNERABLE actor EVEN THOUGH the conditional fill has specific exclusions (see picture) for GetInCell SKK476HoldingCell == 0 and HasKeyword SKK_476NoDisable == 0 Debug.Trace on the actor properties sitting happily in the RefCollectionAlias shows that the exclusion attributes are still attached: SKK_476ReplaceNPCQuestScript.PrepareNPC [Actor < (001AC0CF)>] [ActorBase < (001AC0CD)>] [Cell <SKK476HoldingCell (080138BA)>] SKK_476NoDisableKeyword True How the hell is the quest conditional fill still picking the actor ? The ONLY unusual thing is that the Actorbase is INVULNERABLE which should not affect conditional attribute evaluations. Unless it does.
  5. Use condition GetWorkshopObjectCount on each of the objects to construct exclusion and inclusion recipe logic.
  6. Nope if it has a construction recipe that allow it to be built or moved it can always be stored. My workaround is for the main object that can be constructed once (recipie condition GetWorkshopObjectCount == 0) to detect workshop mode and swap itself out for the workshop movable proxy object that uses the same NIF, then manage that; ;******************************************************************************************** Event OnLoad() Self.RegisterForRemoteEvent(Self.GetLinkedRef(pWorkshopItemKeyword), "OnWorkshopMode") EndEvent ;******************************************************************************************** Event ObjectReference.OnWorkshopMode(ObjectReference akSender, bool aStart) If(aStart == true) Self.Disable() ObjectReference MyProxy = Self.PlaceAtMe(pMyProxyObject) Self.SetLinkedRef(MyProxy, None) Else ObjectReference MyProxy = Self.GetLinkedRef(None) Self.SetLinkedRef(None, None) If(MyProxy != None) && (myProxy.is3dloaded() == true) ; it has not been stored Self.MoveTo(MyProxy) MyProxy.Disable() MyProxy.Delete() EndIf Self.Enable() EndIf EndEvent ;********************************************************************************************
  7. Great core info as usual. In this case the map marker ObjectReferences are all persistent as the global finder quest can find them. The ObjectReferences to exclude are static CK drag n drops into the form list, verified in game with Debug.Trace iteration: SKK_TarkovQuestScript.GenerateEnableStateList 0 [Form < (0009B040)>].IsInList [FormList < (1C01477F)>] SKK_TarkovQuestScript.GenerateEnableStateList 1 [Form < (0010196C)>].IsInList [FormList < (1C01477F)>] SKK_TarkovQuestScript.GenerateEnableStateList 2 [ObjectReference < (0016349B)>].IsInList [FormList < (1C01477F)>] Unfortunatley console [ IsInList ] does not seem to return >> 1.0 for any form types in my games to validate. Appreciate the offer but I cant use any DLL injections
  8. I use a lot of quest conditional fils in object finder quests. Using IsInList > FormList to exclude base object forms works fine e.g. MiscObject, Weapon or ActorBase forms. If the FormList is of in game ObjectReferences, they seem to be ignored. Question: has anyone ever successfully used Condition.IsInList with a list of ObjectReferences ? The usecase: quest confitional fill finds all wordspace mapmarkers (GetIsId==Mapmarker that are enabled IsDisabed==0) fine. But needs to exclude a static list of those that are known to have EnableStateParents. There is no known condition or script function to dynamically detect an object has EnableStateParent. Therefore trying to use (IsInList==ListToExclude) but they are still included in the conditional quest fill.
  9. Whilst the MoveTo navmesh "marker" is not script addressible, just for fun I messed around with xEdit overrides of XNDP (Navigation Door Link - Navmesh) records. Had some unpredictable sucess/failures changing the target navmesh triangle to maintain NPC pathing and map portal targets. Oh well.
  10. I can get a handle to a load door ObjectReference in script and move that fine. Unfortunatley the associated/linked yellow actor teleport marker does not move with the door object (in CK render window or in game with script), the player keeps teleporting to the original teleport marker location. Before I waste a stack of time on this, does anyone KNOW absolutley if it is possible or impossible to get a handle to and move a teleport marker in script ? I was originally using activators with OnActivate scripted Moveto but the game doesnt know about that path for map marker display and npc pathing and I woudl like to have it all.
  11. *** THE ACTUAL ANSWER: For INTERIOR CELL workshops ground collision is provided by floor tiles like CaveRmFloor512Mid01 or DCKitMudGround01, building out a layer of them at -1.0 Z below the decorative floor works perfectly. If anyone knows the specific NIF or HAVOK collison property that makes those objects "workshop ground" let us know. ***
  12. > I can't compare a Global to a global Yes you can: if(myGlobalVariableA.GetValue() == myGlobalVariableB.GetValue()) > I can't compare a Global to an "int" Yes you can: if(myGlobalVariableA.GetValue() as Int == IntVariable) OR if(myGlobalVariableA.GetValue() == (IntVariable as Float)) Although if your Global actually does contain a decimal you may want to use the Math.Ceiling() or Math.Floor() Int conversions. > I can't make "int" = Global. Yes you can: myGlobalVariableA.SetValue(IntVariable as Float)
  13. I find that new textures (and FUZ audio) loose file are often not found in game until they are packed in BA2 archives. Not that the files are read/loaded from the archives with loose files enabled, but as if the game doesnt notice them until it is forced to scan a BA2 and like "oh, hello some new files to load".
  14. Unfortunately BldDecoSmFlrOnly01 also does not work ... but ... trusty old CaveRmFloor512Mid01 does ! And looking more closely at DmndPlayerHome01 it is underpinned by a bunch of DCKitMudGround01 tiles which are flatter than CaveRmFloor. So the answer appears to be that for INTERIOR workshops ground collision is provided by mud tiles and building out a layer below the set dressing pieces at -1.0 Z works perfectly.
×
×
  • Create New...