API ReferenceGE Extensionscareermodules
Career Part Inventory Module
M.dependencies = {'career_career'}
Dependencies
M.dependencies = {'career_career'}Manages the global inventory of vehicle parts across all owned vehicles. Tracks which parts are installed in which vehicle (by location = inventoryId) or loose in storage (location = 0). Handles part removal, selling, and persistence.
Public API
| Function | Signature | Description |
|---|---|---|
M.generateAndGetPartsFromVehicle | (inventoryId) → table | Reads JBeam tree and returns all parts for a vehicle |
M.changedPartsCallback | (partConditions, inventoryId) | Callback after vehicle config change; tracks moved-out parts |
M.initConditionsCallback | (_, inventoryId) | Queues part-condition init on vehicle object |
M.sendUIData | () | Sends full part list, vehicles, and broken-state to UI |
M.openMenu | (originComputerId) | Opens the "My Parts" UI screen |
M.closeMenu | () | Closes menu; autosaves dirty vehicles first |
M.partInventoryClosed | () | Marks menu as closed |
M.getSlotToPartIdMap | () → table | Returns {inventoryId → {slot → partId}} |
M.getPartPathToPartIdMap | () → table | Returns {inventoryId → {partPath → partId}} |
M.getInventory | () → table | Returns the raw partInventory table |
M.addPartToInventory | (part) | Adds a part with auto-incremented ID |
M.getPart | (inventoryId, path) → part | Finds part by vehicle + slot path |
M.updatePartConditionsInInventory | () | Syncs part conditions from vehicle data |
M.sellParts | (partIds) | Sells loose parts (location=0) for calculated value |
Lifecycle Hooks
| Hook | Purpose |
|---|---|
M.onExtensionLoaded | Loads part inventory from save file |
M.onUpdate | Processes deferred vehicle-part additions and map updates |
M.onVehicleSaveFinished | Persists partInventory.json |
M.onSaveFinished | Closes menu after autosave |
M.onEnterVehicleFinished | Triggers map rebuild for current vehicle |
M.onVehicleAdded | Queues part generation for new vehicle |
M.onVehicleRemoved | Removes all parts belonging to the vehicle |
M.onComputerAddFunctions | Registers "My Parts" button on computers |
M.onPartShoppingTransactionComplete | Rebuilds slot/path maps |
Dependencies
career_career- active checkcareer_modules_inventory- vehicle data, spawning, part conditionscareer_modules_valueCalculator- part value for sellingcareer_modules_playerAttributes- money credit on sellcareer_modules_insurance_insurance- broken-vehicle check for UIcareer_modules_permissions- part-swapping permission status
Part Structure
part = {
name = "pickup_bed_long", -- JBeam part name
value = 1200, -- base value from JBeam
description = { ... }, -- from jbeamIO.getAvailableParts()
partCondition = {integrityValue=1, odometer=500, visualValue=1},
tags = {},
vehicleModel = "pickup",
location = 5, -- inventoryId (0 = loose)
containingSlot = "/bed_slot/",
partPath = "/bed_slot/pickup_bed_long",
mainPart = false, -- true for root "/"
}Usage Example
-- Sell loose parts
local looseIds = {}
for id, part in pairs(career_modules_partInventory.getInventory()) do
if part.location == 0 then table.insert(looseIds, id) end
end
career_modules_partInventory.sellParts(looseIds)
-- Find part by slot path
local part = career_modules_partInventory.getPart(inventoryId, "/engine_slot/")See Also
- partShopping - Buy/swap parts in the shop
- valueCalculator - Part value calculation
- painting - Primer flag on parts