--:--:--
sh_housing
Home/Wiki/sh_housing
FiveM ESX Lua 5.4 ox_lib core_inventory

sh_housing

Housing-System mit Häusern, Motels & Apartments, physischen Schlüssel-Items, Kauf-/Miet-Logik und ED-Banking-Anbindung. Unterstützt MLO-Walk-ins und instanzierte IPL-/Shell-Interiors.

Version: 0.3.0 Framework: es_extended Inventar: core_inventory Interaktion: ox_target

🧭 Überblick

Kaufen, Mieten, Verkaufen und Betreten laufen nicht über Befehle, sondern über das ox_target-Menü am Hauseingang. Befehle braucht man nur zum Anlegen der Häuser (Admin/Creator).

🏘️
Häuser
Kauf & Miete, instanzierte Interiors, Schloss & Schlüssel.
🏨
Motels
Zimmer pro Nacht mieten, Keycards, eigene Buckets.
🔑
Schlüssel-Items
Physische Items über core_inventory mit Metadata.
🚪
MLO Walk-in
Echte GTA-Türen werden ver-/entriegelt statt Teleport.

⚙️ Voraussetzungen

Harte Abhängigkeiten – ohne diese startet sh_housing nicht:

RessourcePflichtWofür
es_extendedJaESX-Framework
oxmysqlJaDatenbank
ox_libJaMenüs / Callbacks / UI
ox_targetJaInteraktion am Eingang
core_inventoryEmpfohlenSchlüssel- & Keycard-Items
ED-BANKINGOptionalKonten für Kauf/Miete
⚠️ core_inventory muss vor sh_housing gestartet werden. Ohne core_inventory greift der Testmodus (Schlüssel werden nur angezeigt, nicht real ausgegeben).

🗄️ 1 · SQL installieren

Das Schema vor dem ersten Start einspielen:

bash
mysql -u DEIN_USER -p DEINE_DB < sh_housing/sql/install.sql

Angelegt werden u. a. housing_properties, housing_occupancy und housing_mail.

📄 2 · server.cfg

server.cfg
ensure oxmysql
ensure es_extended
ensure ox_lib
ensure ox_target
ensure core_inventory     # vor sh_housing!

ensure sh_housing

# ----- Rechte (siehe config/permissions.lua) -----
add_ace group.admin admin.manage allow
add_ace group.admin house.manage allow

🔑 3 · Schlüssel-Items (core_inventory)

Die Item-Namen müssen zur config.lua passen (Config.KeyItem, Config.MotelKeyItem). Wichtig: unique = true, damit Schlüssel mit unterschiedlicher Metadata nicht stapeln.

core_inventory items
['house_key'] = {
    name = 'house_key',
    label = 'Hausschlüssel',
    weight = 50,
    type = 'item',
    image = 'house_key.png',
    unique = true,        -- jeder Schlüssel eigenständig
    useable = false,
    shouldClose = false,
    description = 'Schlüssel für ein Haus',
},

['motel_keycard'] = {
    name = 'motel_keycard',
    label = 'Schlüsselkarte',
    weight = 10,
    type = 'item',
    image = 'motel_keycard.png',
    unique = true,
    useable = false,
    shouldClose = false,
    description = 'Zugangskarte für ein Motel-/Hotelzimmer',
},
sh_housing setzt die Metadata (property, version, label) beim Ausgeben automatisch. Beim „Schloss neu machen" wird key_version erhöht → alte Schlüssel werden ungültig.

🔧 4 · Wichtige Config-Werte

In config/config.lua – die wichtigsten Stellschrauben:

KeyStandardBedeutung
Config.IncomeAccount'7000000006'Konto für Kaufpreis + Miete
Config.StateAccount'0000000001'Staatskonto für Steuern
Config.PurchaseTaxRate0.10Grunderwerbsteuer (10 %)
Config.ResaleRate0.50Rückerstattung beim Wiederverkauf
Config.RentInterval7dMiet-Intervall (Default wöchentlich)
Config.RentMaxMissed3Ausfälle bis zur Räumung
Config.InventoryBackend'auto'auto / core / test
Config.KeyItem'house_key'Schlüssel-Item
Config.KeysOnBuy3Schlüssel beim Kauf
Config.MotelKeyItem'motel_keycard'Keycard-Item
Config.MotelDefaultPrice500Standard-Zimmerpreis / Nacht
ℹ️ Weitere Configs liegen in config/properties.lua (Haus-Vorlagen), config/motels.lua (Motel-Vorlagen), config/interiors_gta.lua (Interior-Definitionen) und config/permissions.lua (Rechte).

🏗️ 5 · Erstes Haus anlegen

An den Eingang stellen & Haus erstellen
ingame
/createhouse <vorlage> <preis> [mietpreis]

Vorlage stammt aus config/properties.lua. Mietpreis ist optional.

Eingang & Innen-Punkte setzen
ingame
/setentrance <id>     # Eingangspunkt (aktuelle Position/Heading)
/setspawn <id>        # Teleportziel im Interior
/setstash <id>        # Lager-/Stash-Punkt im Interior
Fertig – Spieler kauft über das Auge

Freie Häuser bekommen automatisch ein Verkaufsschild. Der Spieler kauft/mietet über das ox_target-Menü am Eingang – kein Befehl nötig.

⌨️ Befehlsliste

Admin/Creator – Recht: admin.manage oder house.manage.

Häuser

BefehlWirkung
/createhouse <vorlage> <preis> [miete]Haus an aktueller Position anlegen
/setentrance <id>Eingangspunkt setzen
/setspawn <id>Teleportziel im Interior setzen
/setstash <id>Stash-Punkt im Interior setzen
/sethousedoor <id>(MLO) anvisierte Tür als Haustür speichern
/setprice <id> <preis>Kaufpreis ändern
/setrent <id> <preis>Mietpreis setzen (0 = nicht mietbar)
/deletehouse <id>Property löschen (Haus oder Motel)

Motels

BefehlWirkung
/createmotel <vorlage>Motel anlegen, Rezeption = aktuelle Position
/addmotelrooms <motelId> <anzahl>Mehrere instanzierte IPL-Zimmer anlegen
/addmotelroom <motelId>Einzelnes MLO-Zimmer mit eigenem Bucket
/setreception <motelId>Rezeptions-Position neu setzen
/setkeycardfee <motelId> <faktor>Gebühr für neue Keycard = Tagesmiete × Faktor

Spieler & Debug

BefehlWirkung
/leavehouseNotausstieg, falls man im Interior festhängt
/doorBetretenes Haus von innen ab-/aufschließen
/housedevMarker an allen Eingängen/Rezeptionen anzeigen
/housingdebug [on|off]Debug-Logs umschalten (Konsole + Marker)

🚪 MLO- / Walk-in-Häuser

Wird /createhouse mit einer MLO-Vorlage (type = 'mlo' in properties.lua) genutzt, ist das Haus ein Walk-in: kein Teleport, man geht durch die echte Tür.

Haus am Eingang erstellen

/createhouse <mlo-vorlage> <preis>

Tür anvisieren & speichern

Direkt vor die Tür stellen, draufschauen, /sethousedoor <id> – nötig, damit das Schloss greift.

Eigentümer schließt ab

Über das Eingangs-Auge ab-/aufschließen. Bei abgeschlossener Tür kommt niemand ohne Eigentümer/Schlüssel rein.