Installation

0Resmon Apartment Installation Document and Basic Concepts

This installation guide covers both ESX and QBCore frameworks.

What is required for installation

  • 0r_lib (You can find it on your Keymaster.)

  • Map Files (You can find it script files)

Supported Inventories

  • qb-inventory

  • ox_inventory

ESX

start es_extended
start 0r_lib
start 0r-apartment-v2
--- esx resources --

QBOX

--[[ Other Scripts ]]
start 0r_lib
start 0r_apartment-v2

QBOX Starter Apartment ?

  • Q: I want new players to choose an apartment and have a random room, what should I do?

  • A: First of all, you should be using qbx_spawn for this. After this you won't need qbox_apartment. However, it is your responsibility to make sure that other scripts that use it don't malfunction. The functions have been edited to replace qbx_apartments. So if you use other scripts, you should fix them according to your settings. Here is what you need to do in order:

1- 0r-apartment-v2\modules\bridge\qb\server.lua If you are already using the latest update, you do not need to !

Line 24~ apartments:client:setupSpawnUI

RegisterNetEvent("apartments:client:setupSpawnUI", function(cData, firstSpawn, isNew)
    if not cData then return end
    if Utils.Functions.IsResourceStart('qbx_core') then
        local Locations = Config.Apartments

        local upLocations = {}

        for key, value in pairs(Locations) do
            upLocations[#upLocations + 1] = {
                label = value.label,
                coords = value.coords.enter,
                propertyId = key,
            }
        end

        TriggerEvent("qb-spawn:client:setupSpawns", cData, true, upLocations)
    else
        Client.Functions.TriggerServerCallback("0r-apartment:Server:GetPlayerRooms", function(result)
            if #result > 0 then
                TriggerEvent("qb-spawn:client:setupSpawns", cData, false, nil)
                TriggerEvent("qb-spawn:client:openUI", true)
            else
                if isNew and Config.ApartmentStarting then
                    local Locations = Config.Apartments
                    TriggerEvent("qb-spawn:client:setupSpawns", cData, true, Locations)
                    TriggerEvent("qb-spawn:client:openUI", true)
                else
                    TriggerEvent("qb-spawn:client:setupSpawns", cData, false, nil)
                    TriggerEvent("qb-spawn:client:openUI", true)
                end
            end
        end, cData.citizenid or cData.cid)
    end
end)

2- qbx_spawn\client\main.lua Line 188~ inputHandler & qb-spawn:client:setupSpawns Update:

local function inputHandler()
    while DoesCamExist(previewCam) do
        if IsControlJustReleased(0, 188) then
            previousButtonID = currentButtonID
            currentButtonID -= 1

            if currentButtonID < 1 then
                currentButtonID = #spawns
            end

            updateScaleform()
        elseif IsControlJustReleased(0, 187) then
            previousButtonID = currentButtonID
            currentButtonID += 1

            if currentButtonID > #spawns then
                currentButtonID = 1
            end

            updateScaleform()
        elseif IsControlJustReleased(0, 191) then
            DoScreenFadeOut(1000)

            while not IsScreenFadedOut() do
                Wait(0)
            end

            TriggerServerEvent('QBCore:Server:OnPlayerLoaded')
            TriggerEvent('QBCore:Client:OnPlayerLoaded')
            FreezeEntityPosition(cache.ped, false)
            DisplayRadar(true)

            local spawnData = spawns[currentButtonID]
            if spawnData.propertyId then
				if GetResourceState('0r-apartment-v2') == 'started' then
					TriggerServerEvent("apartments:server:CreateApartment", spawnData.propertyId, spawnData.label)
				else
					TriggerServerEvent('qbx_properties:server:enterProperty', { id = spawnData.propertyId, isSpawn = true })
				end
            else
                SetEntityCoords(cache.ped, spawnData.coords.x, spawnData.coords.y, spawnData.coords.z, false, false, false, false)
                SetEntityHeading(cache.ped, spawnData.coords.w or 0.0)
            end

            DoScreenFadeIn(1000)

            break
        end

        Wait(0)
    end

    stopCamera()
end

AddEventHandler('qb-spawn:client:setupSpawns', function(cData, useExtra, extraLocations)
    spawns = {}

	if not useExtra then

		local lastCoords, lastPropertyId = lib.callback.await('qbx_spawn:server:getLastLocation')
		spawns[#spawns + 1] = {
			label = locale('last_location'),
			coords = lastCoords,
			propertyId = lastPropertyId
		}

		for i = 1, #config.spawns do
			spawns[#spawns + 1] = config.spawns[i]
		end

		local properties = lib.callback.await('qbx_spawn:server:getProperties')
		for i = 1, #properties do
			spawns[#spawns + 1] = properties[i]
		end

	else
	
		spawns = extraLocations

	end

    Wait(400)

    managePlayer()
    setupCamera()
    setupMap()

    Wait(400)

    currentButtonID = 1
    scaleformDetails(currentButtonID)
    inputHandler()
end)

QBCore

start qb-core
start 0r_lib
start 0r_apartment-v2
--- qbcore resources --

QBCore QB-Apartment ?

  • Q: I want new players to choose an apartment and have a random room, what should I do?

  • A: First of all, you should be using qb-spawn and qb-multicharacter and qb-apartments for this. After this you won't need qb-apartments. However, it is your responsibility to make sure that other scripts that use it don't malfunction. The functions have been edited to replace qb-apartments. So if you use other scripts, you should fix them according to your settings. Here is what you need to do in order:

1- In qb-multicharacter: server/main.lua replace this code block:

RegisterNetEvent('qb-multicharacter:server:createCharacter', function(data)
    local src = source
    local newData = {}
    newData.cid = data.cid
    newData.charinfo = data
    if QBCore.Player.Login(src, false, newData) then
        repeat
            Wait(10)
        until hasDonePreloading[src]
        if GetResourceState('0r-apartment-v2') == 'started' then -- > This place has changed !
            local randbucket = (GetPlayerPed(src) .. math.random(1,999))
            SetPlayerRoutingBucket(src, randbucket)
            print('^2[qb-core]^7 '..GetPlayerName(src)..' has successfully loaded!')
            QBCore.Commands.Refresh(src)
            loadHouseData(src)
            TriggerClientEvent("qb-multicharacter:client:closeNUI", src)
            TriggerClientEvent('apartments:client:setupSpawnUI', src, newData, true, true) -- > This place has changed !
            GiveStarterItems(src)
        else
            print('^2[qb-core]^7 '..GetPlayerName(src)..' has successfully loaded!')
            QBCore.Commands.Refresh(src)
            loadHouseData(src)
            TriggerClientEvent("qb-multicharacter:client:closeNUIdefault", src)
            GiveStarterItems(src)
        end
    end
end)

2- In qb-spawn/fxmanifest: replace shared_scripts with the following.

shared_scripts {
    '@qb-core/shared/locale.lua',
    'locales/en.lua',
    'locales/*.lua',
    'config.lua',
    --'@qb-apartments/config.lua',
    "@0r-apartment-v2/shared/config.lua",
}

3- qb-spawn/client.lua

local Apartments = Config.Apartments -- You should add this at the top.

You must change all Apartments.Locations definitions in the file to Apartments.

For example: client line 136.

TriggerServerEvent("apartments:server:CreateApartment", appaYeet, Apartments.Locations[appaYeet].label) Instead 
> to
TriggerServerEvent("apartments:server:CreateApartment", appaYeet, Apartments[appaYeet].label)
-- As you can see, instead of `Apartments.Locations` I wrote `Apartments`

4- qb-spawn/client.lua line 135 / function RegisterNUICallback('chooseAppa', function(data, cb)

    local appaYeet = tonumber(data.appType) or data.appType
	if type(appaYeet) == "number" then
		appaYeet = appaYeet + 1
	end

Then restart your server. Everything should work properly. Please don't create a support ticket until you are sure everything is working properly.

What You Need to Know

  • Q: Where is the sql file ?

  • A: database.sql

  • Q: How to add a motel ?

  • A: You can take an example from Config.Apartments in the Config file.

Last updated