onInteract(player) let currentVehicle = getCurrentVehicle(player); if (!currentVehicle) notify(player, "You must be in a vehicle"); return; showMenu(player, upgrades, function(selectedUpgrade) if (getPlayerCash(player) >= selectedUpgrade.price) applyUpgrade(currentVehicle, selectedUpgrade); player.wallet.deductMoney(selectedUpgrade.price); log.info(player.name + " tuned " + currentVehicle.model); else notify(player, "Need $" + selectedUpgrade.price); );
1. Introduction NEW Greenville Script (GVS) is a lightweight, event-driven scripting language for vehicle economy & roleplay servers. It replaces legacy "Greenville Logic" with cleaner syntax, native async support, and built-in vehicle physics hooks.
onPlayerDowned(player) respawnTimer = 120; // seconds notifyEMS(player.position); onEMSArrive(medic, downedPlayer) revivePlayer(downedPlayer, 50); // 50% health medic.addExperience(10); -NEW- Greenville Script
serverData totalVehiclesSold = 0; topPlayer = null; updateStats(player) totalVehiclesSold++; if (player.vehiclesOwned > topPlayer.vehiclesOwned) topPlayer = player;
3.1 Core Vehicle Object let car = Vehicle model: "Corvette C8", plate: "GRN-2025", fuel: 65.0, engineOn: false, damage: 0.0, color: "Red" ; 3.2 Built-in Vehicle Functions startEngine(car); // returns bool repairVehicle(car, 100); // repair 100% setVehicleLock(car, true); // lock doors let speed = getSpeed(car); // km/h damageVehicle(car, 25); // apply damage 3.3 Vehicle Events onVehicleDamaged(player, vehicle, amount) addReputation(player, -5); createCrashReport(vehicle); onPlayerDowned(player) respawnTimer = 120
8.1 Console Logging Levels log.info("Player joined"); log.warn("Low fuel"); log.error("Vehicle desync"); 8.2 Visual Debug Overlay enableDebugOverlay(true); watchVariable("playerCash", playerCash); watchVehicleStat(vehicle, "speed", "damage"); 8.3 Command Line REPL While server is running, type:
7.1 Delayed Execution async function delayedReward(player) await sleep(5000); // 5 seconds giveMoney(player, 1000); // seconds notifyEMS(player.position)
> getPlayer vehicle_007 > setFuel vehicle_007 80 > list jobs | Legacy Syntax | NEW GVS Syntax | |---------------|----------------| | wait(1000) | await sleep(1000) | | script.onVehicleTouch | onVehicleEnter | | game:GetService("Players") | implicit player object | | cash = cash + 500 | wallet.addMoney(500) | | no built-in dealership | dealership block | | if car.EngineOn then | if (isEngineOn(car)) | 10. Complete Example: Custom Tuning Shop tuningShop "Street Customs" location: (x: 890.2, y: 0, z: 420.5); upgrades = [ part: "Engine Tune", price: 5000, effect: "speed_multiplier", value: 1.2, part: "Brakes", price: 2000, effect: "brake_efficiency", value: 1.3 ];
onPurchase(player, vehicleModel) if (getPlayerCash(player) >= vehicleModel.price) giveVehicle(player, vehicleModel); playerCash -= vehicleModel.price; logTransaction(player, vehicleModel);