API Reference GE Extensions career modules Marketplace Player-to-NPC vehicle marketplace. Handles listing vehicles for sale, generating timed buyer offers, price negotiation with personality-driven AI opponents (private individuals and dealerships), and o
Player-to-NPC vehicle marketplace. Handles listing vehicles for sale, generating timed buyer offers, price negotiation with personality-driven AI opponents (private individuals and dealerships), and offer lifecycle.
Field Type Description M.firstNameCountvaries Assigned as #M.firstNames M.initialCountvaries Assigned as #M.initials M.initialProbabilitiestable Letter → probability mapping for weighted last-name initials
Function Signature Description M.listVehicles(vehicles)List vehicles for sale [{inventoryId, value}] M.removeVehicleListing(inventoryId)Remove a vehicle listing M.findVehicleListing(inventoryId) → listing/nilFind listing by inventory ID M.getListings() → tableGet all listings with disable states M.openMenu(computerId)Open marketplace via vehicle shopping M.menuOpened(open)Notify menu open/close state
Function Signature Description M.generateOffer(inventoryId) → offerGenerate a buyer offer for a listing M.acceptOffer(inventoryId, offerIndex)Accept and sell at offer price M.declineOffer(inventoryId, offerIndex)Remove an offer
Function Signature Description M.startNegotiateBuyingOffer(inventoryId, offerIndex)Start negotiation when selling to buyer M.startNegotiateSellingOffer(shopId)Start negotiation when buying from seller M.getNegotiationState() → tableCurrent negotiation state for UI M.makeNegotiationOffer(price) → boolSubmit a counter-offer M.takeTheirOffer()Accept opponent's current offer M.cancelNegotiation()Walk away from negotiation M.generatePersonality(buyer, archetypes) → tableGenerate NPC personality
Hook Purpose M.onUpdateGenerate new offers periodically, debug UI M.onVehicleRemovedRemove listing for deleted vehicle M.onSaveCurrentSaveSlotPersist listings M.onExtensionLoadedLoad listings from save
New offers generated every ~95s per listing (±60% random)
Price influenced by: marketRatio, buyer personality priceMultiplier, noise function
Offers expire after ~500s (±50% variance)
If listed price < 90% market: offers capped near listed price
If listed price > 110% market: offers capped near market value
offerTimeMultiplier adjusts generation speed based on pricing
Two modes: selling (player lists, buyer offers) and buying (player at dealership).
Property Description counterOfferReadinessWillingness to counter-offer priceMultiplierStarting price bias delayRangeThinking time range isDealershipDealer vs private individual desperationChance of going below market (dealers) insultThresholdBaseLowball rejection threshold startingPatienceInitial patience (0–1)
initial → thinking → typing → counterOffer / accepted / refused / failed / counterOfferLastChance
M.firstNames - 500+ first names for NPC generation
M.initials - Weighted last-name initials
M.privateSellerQuotes - 50 quotes for private sellers
M.dealershipBuyerQuotes - 25 quotes for dealership buyers