Starfield

File information

Last updated

Original upload

Created by

SKK50

Uploaded by

SKK50

Virus scan

Safe to use

About this mod

QOL utility console functions including random spawning, follower management, unlimited global storage and more.

Permissions and credits
Changelogs
********** NEWS **********
The first ever new Papyrus script published for Starfield is now sadly out of date.
It all still works, but you should be looking at the comprehensive ESM solutions:

Universal Stash (for unlimited storage).
Starfield Stalkers and Followers (for spawning).
Craftable Ship Tool (for ship stuff).



Copy/Paste these new script functions into the console, create BAT files or assign to HOTKEYS.INI (or whatever hotkeyname.ini you use). There should be no need to actually type any of the functions. 



====================
Random Hostile Spawns


cgf "SKK_ConsoleUtilityScript.SpawnRandomHostiles" Number Faction


Spawns [ Number ] of hostile random pick actors with random difficulty (player level +/- 50%) at a random marker around the player on a planet or interior. Not on a ship or in space.

This function is uncapped. Whilst spawns are [ nonpersistent deletewhenable ] they should automatically cleanup when unloaded, there is no active management so you can totally destroy save games spawning huge volumes of live actors. Fallout4 would fall over with ~ 300 actors in the active uGrids.

The distance and bearing to the lead hostile is regularly notified for 60 seconds {*1} or the lead hostile is killed. Its not quite Combat Stalkers as follow/hunt player AI packages can't yet be applied to actors, so you need to go find them if they have not detected you to aggro.

Optional Faction value will switch from random to pick a specific faction actor:
 
0 or empty = Random pick 
1 = LvlHumanHostile_Assault_Aggro [NPC_:002CA990]
2 = LvlSpacer_Assault_Aggro [NPC_:001691E5]
3 = LvlCrimsonFleet_Assault_Aggro [NPC_:0015E264]
4 = LvlEcliptic_Assault_Aggro [NPC_:00169D7D]
5 = LvlTheFirst_Assault_Aggro [NPC_:0015E253]
6 = LvlVaruun_Aggro [NPC_:002D4151]

Example: [ cgf "SKK_ConsoleUtilityScript.SpawnRandomHostiles" 2 6 ] without the square brackets would spawn 2 LvlVaruun actors.






==========================================
Follower functions (followers are not companions)


cgf "SKK_ConsoleUtilityScript.SwitchFollower" ReferenceID DontUseAmmo

Switches nearly any actor to start/stop being a player follower and ally. Picking a dead follower unfollows them. This will disrupt quests if you kick a quest follower. Yes, you can generate an unlimited follower army. Followers use ammo by default, if the optional DontUseAmmoAvalue is 1 then keyword TeammateDontUseAmmoKeyword is applied. 


cgf "SKK_ConsoleUtilityScript.SpawnRandomFollowers" Number DontUseAmmo Faction

Spawns [ Number ] of friendly random pick actors matching player level at the player.  

This function is uncapped. Whilst spawns are [ nonpersistent deletewhenable ] they should automatically cleanup when unloaded, there is no active management so you can totally destroy save games spawning huge volumes of live actors. Fallout4 would fall over with ~ 300 actors in the active uGrids.

If optional DontUseAmmo value is 1 then keyword TeammateDontUseAmmoKeyword is applied. 

Optional Faction value will switch from random to pick a specific faction actor. Actors are player allies with AI confidence and aggression that will not run from fights (many NPC actors just cower or run away). 

0 or empty = Random pick 
1 = LvlMarine_Assault [NPC_:00056F09]
2 = LvlSecurity_Assault [NPC_:0025C5E5]
3 = LvlSecurity_Freestar [NPC_:0026FB62]
4 = LvlSecurity_Neon [NPC_:00247D45]
5 = LvlSecurity_TrackersAlliance [NPC_:0007F891]
6 = LvlVanguard [NPC_:00096546]

Example: [ cgf "SKK_ConsoleUtilityScript.SpawnRandomFollowers" 4 1 6 ] without the square brackets would spawn 4 DontUseAmmo LvlVanguard actors.


cgf "SKK_ConsoleUtilityScript.RemoveFollowers" RemoveAllFollowers


Default will remove only dead followers, setting RemoveAllFollowers value to 1 removes all followers. Live actors are not disabled or deleted incase they belong to the basegame. If you dont trust [ nonpersistent deletewhenable ] to clean them up then kill 'em all and let god iHoursToClearCorpses sort them out.

Example [ cgf "SKK_ConsoleUtilityScript.RemoveFollowers" 1 ] without the square brackets would remove all followers.


cgf "SKK_ConsoleUtilityScript.OpenCompanionFollowersInventory"

Opens the inventory of the current companion and then each player follower for transfer. Removes any dead followers.


cgf "SKK_ConsoleUtilityScript.HealCompanionFollowers" DontUseMedpacks ClearBleedout


Removes any dead followers, heals active companion and all followers if their health is below 80% and the player has Medpacks in inventory. Set optional DontUseMedpaks value to 1 to skip using them. Set optional ClearBleedout value to 1 to clear essential actors bleedout which will lock the script for 15 seconds so you can't use any other script functions until you see the [ Healed N followers. ] message.

example [ cgf "SKK_ConsoleUtilityScript.HealCompanionFollowers" 1 ] without the square brackets would heall all without using player medpacks. 


cgf "SKK_ConsoleUtilityScript.MoveCompanionFollowersToPlayer"

Combines MoveCompanionToPlayer and MoveFollowersToPlayer into a single call.



=================
Homeship functions


All of these functions are now avalable with a menu interface and craftable activators in Craftable Ship Tools. 


cgf "SKK_ConsoleUtilityScript.MoveToHomeShip"

Move to your homeship interior from anywhere in the universe.


cgf "SKK_ConsoleUtilityScript.OpenHomeShipCargoHold"

Open your homeship cargo inventory to transfer from anywhere in the universe. The ability to transfer items will depend on [ SetGS  fMaxShipTransferDistance ] which defaults to 250 meters.


cgf "SKK_ConsoleUtilityScript.StealSpaceShip"

Call this function within 5 meters of an [ Inaccessible ] or [ Locked ] door, ladder or pilot seat and it will make it accessible. 

Except if the ship is part of a "kill hostiles to take ownership random encounter" which will pop a reminder [ You need to kill the owners. ] Also some of the derelicts are not ships but static objects so you cant actually steal them.

If a theft alarm sounds it locks the script so you wont be able to call any other functions until you (a) run away or (b) fly away so the alarm can clean up.

Stealing ships is not a masive economic opportunity, but it's free and kindof fun. Increase your stable space with [ SetGS  uSpaceshipMaximumOwnedSpaceships ] which defaults to 10.


cgf "SKK_ConsoleUtilityScript.CleanupCorpses" OpenInventory


Will find and remove all dead human actors in a 25 meter radius of the player. Set optional OpenInventory value to 1 to open each inventory in sequence before they are cleaned. This is a disable not a delete to avoid problems with quest/script pointers, just let the game engine bDeleteWhenAble or iHoursToClearCorpses sort them out.

Example [ cgf "SKK_ConsoleUtilityScript.CleanupCorpses" 1 ] without the square brackets would open each corpse inventory and then remove it. 


=======================
Unlimited storage functions


All of these functions are now avalable with a menu interface, craftable activators and automatic event driven connections in  Universal Stash (unlimited storage).


cgf "SKK_ConsoleUtilityScript.LinkLodgeWorkbenches" MoveContainer 


Links Lodge basement workbenches to the no reset player safe unlimited storage [00266e81] for direct crafting. Optional MoveContainer value 1 will move the player safe to the basement under the gun rack for EZ access, value 0 will reset it back to the bedroom. Must be run inside the lodge, only needs to be run once but can switch MoveContainer locations as much as you like.  It does not affect the base game ability for workbenches to use materials in the home ship hold. 

Example [ cgf "SKK_ConsoleUtilityScript.LinkLodgeWorkbenches" 1 ] without the square brackets would link the workbenches and move the player safe to the basement.


cgf "SKK_ConsoleUtilityScript.UnlinkLodgeWorkbenches"

Unlinks workbenches from unlimited storage which can no longer be remote accessed. Does not affect contents of containers.


cgf "SKK_ConsoleUtilityScript.MoveToUnlimitedContainer"

Moves player to the active unlimited storage container if it has been set by the link function. 


cgf "SKK_ConsoleUtilityScript.OpenUnlimitedContainer"

Opens the active unlimited storage container for transfer from anywhere in the universe if it has been set by the link function. 


cgf "SKK_ConsoleUtilityScript.OpenCargoHoldUnlimitedContainer"

Combines OpenHomeShipCargoHold and OpenUnlimitedContainer into a single sequential call so you can transfer cargo hold > player, then transfer player > unlimited storage. Whilst it is possible to RemoveAllItems from cargo hold direct to unlimited storage, wrapping that in a UI (so you can pick specific items or exclude ship repair kits) is not yet possible.


===========================================
Companion functions (companions can be followers)


cgf "SKK_ConsoleUtilityScript.MakeCompanion" ReferenceID

Try to force an actor that has CompanionActorScript to be a companion regardless of quest state and move to player. They will always offer trade dialog but the default Join/Leave/Wait dialog options are only unlocked once quest MQ101 The First Step is completed or stopped [ StopQuest 00003448 ] 



cgf "SKK_ConsoleUtilityScript.DismissCompanion"

Dismiss the current active companion.


cgf "SKK_ConsoleUtilityScript.OpenCompanionInventory"

Open the current active companion inventory for transfer. 


cgf "SKK_ConsoleUtilityScript.MoveCompanionToPlayer"

Move the current active companion.



================
Vendor Functions


cgf "SKK_ConsoleUtilityScript.UpdateVendorCredits" value

Updates 18 LL_Vendor_Credits* level lists with [ value ] * 800 credits, zero removes any updates. Reruns do not stack. New credits automatically refresh every iDaysToRespawnVendor. Does not update landing pad kiosks.

Example: [ cgf "SKK_ConsoleUtilityScript.UpdateVendorCredits" 100 ] without the square brackets would add 80,000 credits to each vendor when their inventory refreshes.  



=============
Utility Functions


cgf "SKK_ConsoleUtilityScript.GetVersion"

Triggers a popup notification [ SKK_ConsoleUtilityScript version N ] If you want to know this is installed and working. 


cgf "SKK_ConsoleUtilityScript.GetInfo" ReferenceID

Dumps object, location and actor informaton for the 8 digit ReferenceID into the Papyrus Debug Log (enable payrus debug logging):

Spoiler:  
Show

SKK_ConsoleUtilityScript ***********************************
GetInfo Object .......................... [sq_shipservicesactorscript < (0005C81D)>]
GetInfo BaseObject ...................... [Form < (0005C81C)>]
GetInfo GetFormID ....................... 378908
GetInfo IntToHex ........................ 0005C81C
GetInfo Is3dLoaded ...................... true
GetInfo GetPositionX .................... -888.795105
GetInfo GetPositionY .................... 1617.161865
GetInfo GetPositionZ .................... -161.485443
GetInfo Player Distance ................. 1
GetInfo GetCurrentPlanet ................ [Planet < (0003F5A1)>]
GetInfo GetWorldSpace ................... [WorldSpace <JemisonPlanetWorld157133511011091040 (FF004400)>]
GetInfo GetParentCell ................... [Cell <Surface (00014CB3)>]
GetInfo GetCurrentShipRef ............... None
GetInfo IsInSpace ....................... false
GetInfo IsInInterior .................... false
GetInfo GetCurrentLocation .............. [Location <CityNewAtlantisLocation (0001295A)>]
GetInfo LocTypeSurface .................. false
GetInfo LocTypeShipInterior ............. false
GetInfo LocTypeStarstationInterior ...... false
GetInfo LocTypeSettlement ............... true
GetInfo LocTypeOutpost .................. false
GetInfo LinkedRef(None) ................. [ObjectReference < (0025FD1D)>]
GetInfo RefsLinkedToMe(None) ............ []
GetInfo GetHeight ....................... 1.800001
GetInfo CompanionActorScript ............ false
GetInfo IsCompanion ..................... false
GetInfo PotentialCrewFaction ............ false -2
GetInfo AvailableCrewFaction ............ false -2
GetInfo CurrentCrewFaction .............. false -2
GetInfo IsEliteCrew ..................... false
GetInfo IsPlayerTeamMate ................ false
GetInfo GetPlayerFollowers .............. -1
GetInfo IsFollower ...................... -1
GetInfo TeammateDontUseAmmoKeyword ...... false
GetInfo IsHostileToPlayer ............... false
GetInfo PlayerEnemyFaction .............. false
GetInfo PlayerFriendFaction ............. false
GetInfo PlayerAllyFaction ............... false
GetInfo PlayerFaction ................... false
GetInfo GetCrimeFaction ................. [Faction < (0005BD93)>]
GetInfo GetGroupFaction ................. None
GetInfo IsGhost ......................... false
GetInfo IsEssential ..................... true
GetInfo GetCurrentPackage ............... [Package < (00044436)>]
GetInfo ArmorTypeSpacesuitBody .......... false





============
General Notes


Most functions will waituntil until the console or menus are closed before running so that calls do not queue/stack and messages are not missed.

Functions that need a target ReferenceID will be difficult to call from hotkeys unless you hardcode the target ReferenceID. These will be delivered with an AddActivate perk when xEdit is enabled for ESP editing.



================================================
Example HOTKEYS.INI (or whatever hotkeyname.ini you use)

F1=cgf "SKK_ConsoleUtilityScript.OpenCompanionFollowersInventory"
F2=cgf "SKK_ConsoleUtilityScript.OpenCargoHoldUnlimitedContainer"
F3=cgf "SKK_ConsoleUtilityScript.HealCompanionFollowers"
F4=cgf "SKK_ConsoleUtilityScript.SpawnRandomHostiles" 4
F5=cgf "SKK_ConsoleUtilityScript.SpawnRandomFollowers" 2 1
Home=cgf "SKK_ConsoleUtilityScript.MoveToUnlimitedContainer"
End=cgf "SKK_ConsoleUtilityScript.MoveToHomeShip"




=========
Installation


1) Extract SKK_ConsoleUtilityScript.pex from the download archive to C:\Program Files (x86)\Steam\steamapps\common\Starfield\Data\Scripts ... or ... wherever starfield.exe lives\Data\Scripts (create \Scripts folder if it doesn't exist).

(2) Enable Loose Files.  

(3) Call the functions from the [ console ] or assign functions to HOTKEYS.INI (or whatever hotkeyname.ini you use).



===========
Compatibility

(1) This is a new standalone Papyrus script file with no dependencies on ANYTHING AT ALL except enabling loose files. The script is stateless and holds no persistent properties or data. As it does not change any existing files or assets the likelyhood of it conflicting with anything should be close to zero.

(2) Running console commands disables achievements.

(3) Some mods that hack the UI or manage locks apparently stop inventory screens being activated or displayed including No Lockpick Activate. That is not a conflict, its you installing stuff that breaks base game mechanics.



===========
Known Issues

None



==============
With thanks to ...


This development has been enabled by CHAMPOLLION and CAPRICA Papyrus tools created and maintined by the amazing software engineering talents of Orvid and Nikitalita. Plus of course xEdit from ElminsterAU to read the ESM database FormIDs and ObjectReferences.