- aether-medical: Stationen/Belegung, Intensivstation, Blutbank, Fuhrpark, Nachrichten/Aushänge, Berichte und Textbausteine (server + NUI) - aether-admin: vollständiges Server-Admin-Panel als echtes FiveM-Resource, an aether-core gekoppelt (Rechte über aether_users.admin_group), mit WebRTC-Live-Kameras (Bildschirmfreigabe) und separatem Media-Server (SFU) - Prototypen admin/ vervollständigt - SQL-Schema aether_admin.sql - Docker-Compose mit MariaDB und idempotenter Auto-Migration (schema_migrations) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
94 lines
3.8 KiB
Lua
94 lines
3.8 KiB
Lua
-- =====================================================================
|
|
-- Aether Garage — Garagen, Standorte und Einstellungen
|
|
-- =====================================================================
|
|
|
|
Garage = Garage or {}
|
|
|
|
Garage.INTERAKTION_WEITE = 3.0 -- Reichweite zum Oeffnen (Meter)
|
|
Garage.EINPARK_WEITE = 12.0 -- Wie nah das Fahrzeug an der Garage sein muss
|
|
Garage.AUSLOESE_GEBUEHR = 500 -- Kosten fuer beschlagnahmte Fahrzeuge
|
|
|
|
-- Bekommt ein neuer Charakter ein Startfahrzeug?
|
|
Garage.STARTFAHRZEUG = { modell = 'blista', garage = 'legion' }
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Garagen
|
|
-- typ 'oeffentlich' = fuer alle zugaenglich
|
|
-- typ 'haus' = nur mit Zugang (spaeter ueber aether-immobilien)
|
|
-- position = Ort der Bedienung, spawn = wo das Fahrzeug erscheint
|
|
-- ---------------------------------------------------------------------
|
|
Garage.Garagen = {
|
|
legion = {
|
|
name = 'Legion Square', typ = 'oeffentlich',
|
|
position = vector3(215.9, -810.0, 30.7),
|
|
spawn = vector4(228.6, -800.5, 30.6, 158.0),
|
|
},
|
|
sandy = {
|
|
name = 'Sandy Shores', typ = 'oeffentlich',
|
|
position = vector3(1735.4, 3710.6, 34.1),
|
|
spawn = vector4(1729.6, 3716.3, 34.1, 20.0),
|
|
},
|
|
delperro = {
|
|
name = 'Del Perro', typ = 'oeffentlich',
|
|
position = vector3(-1160.0, -736.5, 20.4),
|
|
spawn = vector4(-1170.5, -737.7, 19.9, 108.0),
|
|
},
|
|
paleto = {
|
|
name = 'Paleto Bay', typ = 'oeffentlich',
|
|
position = vector3(105.9, 6613.9, 32.0),
|
|
spawn = vector4(112.6, 6608.9, 31.8, 45.0),
|
|
},
|
|
-- Haus-Garagen: sichtbar nur mit Zugang
|
|
villa = {
|
|
name = 'Villa Vinewood Hills', typ = 'haus',
|
|
position = vector3(-174.3, 502.1, 137.4),
|
|
spawn = vector4(-165.9, 496.3, 137.1, 190.0),
|
|
},
|
|
}
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Fahrzeugklassen fuer die Anzeige
|
|
-- Ordnet dem GTA-Klassenindex einen Namen und einen Vorschautyp zu.
|
|
-- ---------------------------------------------------------------------
|
|
Garage.Klassen = {
|
|
[0] = { name = 'Kleinwagen', typ = 'compact' },
|
|
[1] = { name = 'Limousine', typ = 'sedan' },
|
|
[2] = { name = 'SUV', typ = 'suv' },
|
|
[3] = { name = 'Coupé', typ = 'sedan' },
|
|
[4] = { name = 'Muscle', typ = 'muscle' },
|
|
[5] = { name = 'Sportwagen', typ = 'sport' },
|
|
[6] = { name = 'Sportwagen', typ = 'sport' },
|
|
[7] = { name = 'Supersport', typ = 'sport' },
|
|
[8] = { name = 'Motorrad', typ = 'bike' },
|
|
[9] = { name = 'Geländewagen', typ = 'suv' },
|
|
[12]= { name = 'Transporter', typ = 'pickup' },
|
|
[13]= { name = 'Fahrrad', typ = 'bike' },
|
|
[14]= { name = 'Boot', typ = 'sedan' },
|
|
[15]= { name = 'Helikopter', typ = 'sedan' },
|
|
[16]= { name = 'Flugzeug', typ = 'sedan' },
|
|
[17]= { name = 'Service', typ = 'pickup' },
|
|
[18]= { name = 'Einsatz', typ = 'suv' },
|
|
[19]= { name = 'Militär', typ = 'suv' },
|
|
[20]= { name = 'LKW', typ = 'pickup' },
|
|
}
|
|
|
|
--- Liefert Klassenname und Vorschautyp zu einem GTA-Klassenindex
|
|
--- @param index number Klassenindex
|
|
--- @return string Name, string Vorschautyp
|
|
function Garage.Klasse(index)
|
|
local eintrag = Garage.Klassen[index or -1] or { name = 'Fahrzeug', typ = 'sedan' }
|
|
return eintrag.name, eintrag.typ
|
|
end
|
|
|
|
--- Erzeugt ein Kennzeichen im San-Andreas-Format (8 Zeichen)
|
|
--- @return string
|
|
function Garage.ErzeugeKennzeichen()
|
|
local buchstaben = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
local kennzeichen = ('%02d'):format(math.random(0, 99))
|
|
for _ = 1, 3 do
|
|
local pos = math.random(#buchstaben)
|
|
kennzeichen = kennzeichen .. buchstaben:sub(pos, pos)
|
|
end
|
|
return kennzeichen .. ('%03d'):format(math.random(0, 999))
|
|
end
|