Advanced Hotel Manager

Advanced Hotel Manager

$19.99

Add to Basket

inf-hotels

A complete hotel system for QBCore. Rentals, elevators, ownership, and valet parking — built in-game from a single manager UI.

v1.0.0 · QBCore · QB-Inventory or OX-Inventory · QB-Target or OX-Target


[https://www.youtube.com/watch?v=4OvN_l2u0UA]


Four systems. One script.

This isn't a hotel script. It's a hotel system. Four pillars, deeply integrated, all built in-world through a single admin NUI. No JSON editing. No coords pasted by hand. No restart per change.

Rentals — the foundation

  • Real-door locking through GTA's native door system. Works on every MLO door, no scripting required.
  • 24-hour real-time rentals with 2 / 7 / 14 day options at configurable discounts.
  • Physical keycard item — survives logout, can be handed off, lost & found preserves it on checkout.
  • Clerk ped at the front desk: inquire, replacement keycards, turn-in flow, extend stays, claim lost & found.
  • Knock mechanic. Auto-checkout server-side whether the player is online or not.
  • Stash + wardrobe per room. Contents go to lost & found on checkout, never destroyed.

Elevators — opt-in per motel

  • Number-keyed sort with free-text labels. Build -1 Parking, 1 Lobby, 2 Pool Deck, 99 Penthouse — admin picks the order, players see only the labels.
  • Floors placed by walking to the spot and pressing E. No raycast (no floor-clipping when players teleport).
  • Bouncing amber cylinder marker at each floor. ox_lib floor-picker menu on E.
  • Fade-out → teleport → fade-in. Smooth and brand-correct.

Ownership — a passive landlord market

  • Players buy motels from the bank at the clerk's purchase-inquiry option.
  • Admin sets purchase price + minimum nightly rate floor.
  • Owner gets exactly one lever: the nightly rate. Adjustable within bounds, gated by:
    • 24-hour cooldown
    • Cannot change while any room is rented (grandfathering enforced structurally)
    • Confirm dialog before commit
  • 70/30 income split (configurable). Owner share lands in a per-motel earnings vault. Manual withdraw to bank — accumulated profit visible as a number, encourages owner engagement.
  • Daily auto-upkeep deducted from owner's bank. Formula: base + (perRoom × room_count). Survives server restarts.
  • Foreclosure cascade — Day 3 final notice, Day 7 motel reverts to bank pool. Debt forgiven. Vault preserved.
  • Offline upkeep + foreclosure handled via QBCore.Player.GetOfflinePlayer. Owners can lose motels for non-payment whether logged in or not.
  • Owner panel at the clerk: rolling books (income, upkeep, net, occupancy, vault), adjust rate, withdraw earnings.

Valet parking — JG Advanced Garages integrated

  • One park spot (drive-in + E), one valet ped (retrieval), N spawn points per motel.
  • Ghost-vehicle placement preview that snaps to the ground with mouse-wheel rotation.
  • Red bouncing cylinder marker at the park spot (distinct from elevator amber).
  • Park gates, all server-validated:
    • Driver of the vehicle
    • Within park radius of marker
    • Vehicle speed below threshold
    • Ownership check against player_vehicles — only your own cars
    • Active rental at this motel
    • Under per-renter cap
  • Retrieve: target the valet ped → menu of your parked cars → system picks the first unoccupied spawn point → vehicle spawned server-side → properties applied (mods, color, plate, fuel, damage all preserved) → player warped into the driver seat.
  • Park-while-rented, retrieve-anytime. Forgot your car at the hotel? Come back days later, it's still there.
  • JG registerVehicleOutside / deleteOutsideVehicle integration prevents plate-duplication exploits.
  • Works standalone without JG — anti-dup hooks just no-op.

Why this is different

Everything is built in-world. Walk into any MLO. Open the manager NUI. Raycast a door. Drop a clerk. Place an elevator floor by standing on it. Drop a valet park spot by previewing a ghost car snapped to the ground. That's the entire builder workflow. No coords pasted by hand, no JSON files to edit, no resource restart per change.

One config file. Every server-tunable parameter lives in config.lua. ⚠️ TUNE THIS markers flag every field worth reviewing on install.

Adapter pattern throughout. Auto-detects your inventory (qb-inventory or ox_inventory), target (qb-target or ox_target), notify (qb-core or ox_lib), and garage (jg-advancedgarages). Set explicitly in config if auto picks wrong.

Architectural rigor. No lib.callback server-side. All money/item mutations server-authoritative. Rate limits in milliseconds. Foreign-key cascades clean up rooms, rentals, lost & found, income/upkeep ledgers, and valet tickets automatically on motel delete. Doors locked via GTA's native door system, same approach battle-tested by qb-doorlock.


Dependencies

Required

  • QBCore
  • oxmysql
  • ox_lib
  • qb-target or ox_target
  • qb-inventory or ox_inventory

Optional

  • jg-advancedgarages (valet anti-duplication integration)
  • qb-clothing / illenium-appearance / fivem-appearance (wardrobe targets — graceful fallback if absent)

What's open / what's escrowed

Editable (escrow_ignore): config.lua, README.md, CHANGELOG.md, schema.sql. Tune economy, locale, rate limits, bounds. Read the schema. Everything else stays escrowed.

Database: Single schema.sql installs every table with proper foreign-key cascades. JSON columns require MySQL 5.7+ or MariaDB 10.2+ (drop to TEXT for older installs — script reads/writes JSON strings either way).


Support

  • Discord: discord.gg/bh77yjDegd
  • Docs: Full README + CHANGELOG ship with the resource
  • Updates: Tracked in CHANGELOG.md, posted in Discord on release

Scripts built different. By one dev. For the streets. — Infamous Development