Jump to content

LarannKiar

Premium Member
  • Posts

    1256
  • Joined

  • Last visited

Everything posted by LarannKiar

  1. Also you can use the PlaceAtMe() function (initially disabled as dylbill said) and then enable you references with an Enable disable marker (check the "Pop In" flag on the marker's reference). That, or the PlaceAtMe(), then EnableNoWait().
  2. They are not actually two SETTLEMENTS, they are just two isolated WORKSHOPS. The distinction is important as a workshop only becomes a settlement when its location has LocTypeWorkshopSettlement and it is registered with WorkshopParentScript for recruitment and resource assignment and production. If you are interested you can learn more from the WORKSHOP STATES section of this article. Yeah, I see.. so it should be called Fizztop Workshop.. :) I didn't try creating one workshop or settlement from both exterior and interior cells yet.. I don't know if it's possible at all. Nice article you have by the way.
  3. Because I want it to be a full settlement, with settlers, supply lines, the works. Well, I don't know how you could make that so I guess you have to create two settlements but register only one of them in the workshop system.
  4. Ahh, sorry, I misunderstood what you wrote.. technically, they are indeed two settlements. I don't know if an exterior and an interior cell can function with one workbench, etc.
  5. Okay, I had to test it again.. I uploaded it in a Google Drive folder (I don't remember all the details). I made it in February but I haven't released it because I haven't been to Nuka World for a long time. It's a not full settlement so it's not shows up in the Pip-Boy, you can't send there Settlers, Companions, supplies. Also, it has different containers (for exterior, interior). So it's just a simple player house. There's a holotape I made to disable all the nasty stuff in / near the Fizztop Grille (that's why there are a lot overwritten records in the plugin).
  6. Quest items won't be removed. Only items with the specified keywords will be removed from the dead bodies. It's in the quest script: if (CurrentLooter.GetReference() as Actor).GetCombatState() == 0 int iWaponCount = CurrentlyLooted.GetReference().GetItemCount(ObjectTypeWeapon) int iArmorCount = CurrentlyLooted.GetReference().GetItemCount(ObjectTypeArmor) int iStimpakCount = CurrentlyLooted.GetReference().GetItemCount(ObjectTypeWeapon) int iBottlecapCount = CurrentlyLooted.GetReference().GetItemCount(Bottlecaps) int iAmmoCount = CurrentlyLooted.GetReference().GetItemCount(ObjectTypeAmmo) if iWaponCount > 0 (CurrentlyLooted.GetReference() as Actor).RemoveItem(ObjectTypeWeapon, iWaponCount, abSilent = true, akOtherContainer = CurrentLooter.GetReference()) endif if iArmorCount == 1 (CurrentlyLooted.GetReference() as Actor).RemoveItem(ObjectTypeArmor, abSilent = true, akOtherContainer = CurrentLooter.GetReference()) elseif iArmorCount > 1 && iArmorCount < 4 int iRandomInt = Utility.RandomInt(1, 2) (CurrentlyLooted.GetReference() as Actor).RemoveItem(ObjectTypeArmor, iRandomInt, abSilent = true, akOtherContainer = CurrentLooter.GetReference()) elseif iArmorCount >= 4 int iRandomInt = Utility.RandomInt(2, 4) (CurrentlyLooted.GetReference() as Actor).RemoveItem(ObjectTypeArmor, iRandomInt, abSilent = true, akOtherContainer = CurrentLooter.GetReference()) endif if iStimpakCount > 0 (CurrentlyLooted.GetReference() as Actor).RemoveItem(ObjectTypeStimpak, iStimpakCount, abSilent = true, akOtherContainer = CurrentLooter.GetReference()) endif if iBottlecapCount > 0 (CurrentlyLooted.GetReference() as Actor).RemoveItem(Bottlecaps, iBottlecapCount, abSilent = true, akOtherContainer = CurrentLooter.GetReference()) endif if iAmmoCount > 0 (CurrentlyLooted.GetReference() as Actor).RemoveItem(ObjectTypeAmmo, iAmmoCount, abSilent = true, akOtherContainer = CurrentLooter.GetReference()) endif endif The loot timer is defined by a Global Variable: NDB_G_Start_Helper_Timer_Time. It's set to 10. StartTimer() uses real-time which means it's 10 seconds. It's not Constant so you can change this global: if you change it to 3600, you'll see only one looting NPC in one "real" hour. But changing the StartTimer() (real-time rimer) to StartTimerGameTime() (game-time timer) is also an option. In the updated version, the same looter and corpse won't be used by the looter quest for at least 2 game-hours. That's why the RecentlyLooted_01 - 10 and the RecentLooter_01 - 10 aliases are: each alias has a keyword (NDB_RecentlyLooted_Keyword and NDB_RecentLooter_Keyword). After looting, these aliases get filled with the references of the looted body and the looter. The looter quest will not pick NPCs with these keywords. You don't have to worry about save bloat either. The new version only uses one script variable (the furniture: LootFurniture) which is set to be disabled and deleted immediatelly after the looter quest stops. Also, keywords won't be added to actors by scripts. NPCs only have temporary keywords (by being quest aliases). Quest aliases will be cleared by this game timer: Function InitializeMe() StartTimerGameTime(NDB_G_RecentLooter_Timer_Initial_Time.GetValue(), RecentLooter_TimerID) EndFunction Event OnTimerGameTime(int aiTimerID) if Self.GetReference().Is3DLoaded() == 1 StartTimerGameTime(NDB_G_RecentLooter_Timer_Time.GetValue(), RecentLooter_TimerID) else RecentLooters.RemoveRef(Self.GetReference()) Self.Clear() endif EndEvent Event OnDeath(Actor akKiller) RecentLooters.RemoveRef(Self.GetReference()) Self.Clear() EndEvent
  7. Sorry.. I’ve made a Fizztop grille player house some months ago and it has interior and exterior cells but that isn’t actually a “full settlement”.. so it’s not in the Pip-Boy list. It works perfectly though. Why, do you like to create a full settlement? With registering it to the workshop system?
  8. Animations can be conditionalized so if you’d like to have different animations depending on whether you’re in a power armor or not (WornHasKeyword — isPowerArmorFrame == 1), just add different conditions to the “recoil” animations.
  9. In the Creation Kit, right click on the "Armor_Gasmask" >> Use Info. In a window, you'll see "Leveled Items" like this: LL_Armor_Raider_Helmets. You can replace the default mask with your mask. Note that NPCs which have been already loaded in your game won't switch masks.. Only the new ones (who haven't been spawned yet).
  10. Well, I'm not sure but.. if they're in the same Encounter Zone and Location, then I'd say yes.
  11. In the submenus. Submenus are just simple terminals.
  12. You shouldn't give up. :smile: The more time you spend creating mods, the more experienced you'll be. I've made an updated version, here. Of course it's not a problem if you don't understand everything at first.. I always upload the source codes of my scripts, now there are also a lot of notes in them.. Anyway I won't steal your idea so you can do whatever you like with it.. :smile:
  13. Glad it works now. Of course I don't want to tell you how to write your own mod but I'd give you some advice.. because my initial version was a bit rushed.. So I'd change some things. - replacing the script variables (like LootedBody_01_Actor) with reference aliases. Filling up the aliases from the quest script; start the game timer (with the OnInit() event) in the ref alias scripts and not in the quest script .. - use the OnCombatStateChanged event: if the actor enters into a combat, the loot package should stop. - also adding IsInCombat == 0 conditions to ref aliases.. (if they're in combat, they would loot nearby bodies.. a mod shouldn't interfere with this vanilla behavior) - IsChild == 0 (just to be sure...) - also you can add the GetInFaction -- WorkshopNPCFaction == 0 (so your settlers won't wander into the wastes to loot bodies).
  14. Microstutters are common unfortunately.. Did you try installing the game on a “clean” Windows 7 configuration? (I noticed less stuttering on Windows 7). I’m not a technician but as far as I know, a PCIE SSD is better for FO4 than a SATA SSD. But I don’t know how would that affect microstutters..
  15. So you like to spawn an armor with specific modifications? Then you might want to take a look at the Object Templates. Just choose your configuration and set it to Default.
  16. Glad it works now but which alias couldn't be filled? If an important alias wasn't filled with the proper reference, the quest will be buggy. So you should still check on the aliases (ShowQuestAliases FFDiamondCity01). If one of them is NONE, use the ForceRefIntoAlias or ForceLocationIntoAlias command (you can see the proper references in the Creation Kit or in FO4Edit).
  17. Well, the "TEMP_Q_for_Aliases" starts in a shorter period of time than the game timer expires.. while the "LootedBody_01_Actor" still has the "TEMP_K_Looted" keyword.. the MarkBodyAsLooted() function changes the script variable "LootedBody_01_Actor" every time when the "TEMP_Q_for_Aliases" quest starts.. (this may prevent the "TEMP_K_Looted" keyword from being removed from the actor if the game timer is still running). I think it can be fixed by arrays... When a quest stops, it clears its reference aliases (the "TEMP_Q_for_Aliases" quest stops in the End_loot() function) so you don't need to clear them manually. Also, creating failsafes like this might be useful: ElseIf TEMP_G_PackageFinished.GetValueInt() == 1 ; ;function was called from the package "on end" fragment If LootedBody_01_Actor != (Alias_Body01.GetReference() as Actor) ;<______NEW_CONDITIONS_______failsafe: make sure the previously looted body is not the new body picked by the "Temp_Q_For_Aliases" quest LootProcedure() MarkBodyAsLooted() if TEMP_Q_for_Aliases.IsRunning() == 1 TEMP_Q_for_Aliases.Stop() endif TEMP_G_01.SetValueInt(0) StartTimer(10, 255) ;start again LOOP timer Else debug.notification("Alias quest picked the previously looted body") ;Do not loot if TEMP_Q_for_Aliases.IsRunning() == 1 TEMP_Q_for_Aliases.Stop() endif TEMP_G_01.SetValueInt(0) StartTimer(10, 255) ;start again LOOP timer EndIf EndIf Well, I didn't have the time to create a more detailed version.. I only put the basics in the plugin and the scripts.. it still needs a lot of improvements.. But I think you're on the right track :smile:
  18. What happens if you flag all aliases on the bugged quest FFDiamondCity01 as "Optional" in that .esp file? If the quest doesn't start after unchecking the "Run Once" flag and typing "StartQuest FFDiamondCity01", then the problem is with one of aliases (see my previous post in this).
  19. Yes, but if there's a corpse nearby but its ref alias get filled only after the looter's alias, then the looter alias couldn't fill beucase there it won't see any corpse. The quest picks NPCs fully randomly, only depending on the conditions. But why the Chems vendor gets stuck in the loot package? The package should've been stopped right after looting.
  20. Don't forget to remove the "looted" keyword from actors (I guess this function was in the game timer?) and then also remove the actors from being script variables (maybe LootedBody_01_Actor). As for the screenshot, I'm not sure using the GetDistance like that is a good idea. You're comparing the distance between two ref aliases. The problem is that if Alias_Looter gets filled before Alias_Body01 then its GetDistance condition couldn't measure anything. So you can't check the distance of a non existing reference. (It might not happen always but there's a chance).
  21. So you've spoken to a Diamond City resident who said something like "Newcomer, huh? Talk to Abbot at the wall if'd like a history lesson." and then you got the quest marker? Then it's a different issue. The problem is that the FFDiamondCity01 is flagged as "Run Once" so if it's already stopped, you can't start it again.. I think this time you'd really need an .esp plugin.. just for removing the "Run Once" flag. Then you can stop, reset (and if it's still not running, then) start the quest. It's important if a Reference Alias on the FFDiamondCity01 quest is not flagged as "Optional" and it can't fill when you try to start its quest, the quest will not start. (References usually fill when their quest starts).
  22. Intersting.. the Preferred Speed flag usually do the trick. You can add animals to the looter alias: GetInFaction CurrentCompanionFaction == 0 AND GetInFaction RaiderFaction == 0 AND Also you can exclude raiders from looters. HasKeyword ActorTypeNPC == 1 OR HasKeyword ActorTypeAnimal == 1 OR Ahh, and yes.. if you're using the "Find Matching Reference" on the Alias_Looter, you should use the GetDistance condition on it as well.
  23. Open the Creation Kit and load DLCNukaWorld.esm. Search for the dialogue quest and remove the “Run Once” flag and “Start Game Enabled” flag. Launch the game, then use the StopQuest, ResetQuest, StartQuest commands. Hopefully, the aliases will be filled.
×
×
  • Create New...