local QBCore = exports['qb-core']:GetCoreObject() -- Coordinates of the motel local motelCoords = Config.MotelCoords local inviteRadius = 10.0 local roomCoordinates = { basic = Config.BasicRoomCoords, room1 = Config.Room1Coords, room2 = Config.Room2Coords } -- Event to handle sending invite RegisterNetEvent('rafializade-motels:sendInvite') AddEventHandler('rafializade-motels:sendInvite', function(data) local src = source local targetPlayerId = data.target local inviter = QBCore.Functions.GetPlayer(src) local inviterName = inviter.PlayerData.charinfo.firstname .. " " .. inviter.PlayerData.charinfo.lastname local inviterCoords = GetEntityCoords(GetPlayerPed(src)) print("Sending invite from", inviterName, "at coords", inviterCoords) -- Notify the invited player TriggerClientEvent('rafializade-motels:receiveInvite', targetPlayerId, inviterName, src, inviterCoords) end) -- Event to handle accepting invite RegisterNetEvent('rafializade-motels:acceptInvite') AddEventHandler('rafializade-motels:acceptInvite', function(inviterId, inviterCoords) local src = source local inviter = QBCore.Functions.GetPlayer(inviterId) if inviter then print("Teleporting", src, "to coords", inviterCoords) -- Assign the inviter's routing bucket to the invitee SetPlayerRoutingBucket(src, inviterId) -- Teleport the invitee to the stored inviter's coordinates TriggerClientEvent('rafializade-motels:teleportToCoords', src, inviterCoords) else TriggerClientEvent('QBCore:Notify', src, "Davet eden kişi bulunamadı.", "error", 5000) end end) RegisterNetEvent('rafializade-motels:requestPlayerNames') AddEventHandler('rafializade-motels:requestPlayerNames', function() local src = source local players = QBCore.Functions.GetPlayers() local playerNames = {} for _, playerId in pairs(players) do if playerId ~= src then local player = QBCore.Functions.GetPlayer(playerId) if player then local playerName = player.PlayerData.charinfo.firstname .. " " .. player.PlayerData.charinfo.lastname local playerCoords = GetEntityCoords(GetPlayerPed(playerId)) table.insert(playerNames, { id = playerId, name = playerName, coords = playerCoords }) end end end TriggerClientEvent('rafializade-motels:receivePlayerNames', src, playerNames) end) -- Event to notify inviter that invitee is too far RegisterNetEvent('rafializade-motels:inviteeTooFar') AddEventHandler('rafializade-motels:inviteeTooFar', function(inviterId) TriggerClientEvent('QBCore:Notify', inviterId, "The person is away from the motel", "error", 5000) end) -- Event to register stash RegisterServerEvent("rafializade-motels:registerstash") AddEventHandler("rafializade-motels:registerstash", function(motel_label) exports.ox_inventory:RegisterStash(motel_label, motel_label, 100, 5000000, QBCore.Functions.GetPlayer(source).PlayerData.citizenid) end) -- Event to check player data RegisterServerEvent("rafializade-motels:datacheck") AddEventHandler("rafializade-motels:datacheck", function() local src = source local xPlayer = QBCore.Functions.GetPlayer(src) local PlayerCitizenID = xPlayer.PlayerData.citizenid local motel_type_data = nil MySQL.scalar('SELECT `motel_type` FROM `players` WHERE `citizenid` = ? LIMIT 1', { PlayerCitizenID }, function(motel_type) motel_type_data = motel_type TriggerEvent("rafializade-motels:server:teleportRoom", src, motel_type_data) end) end) -- Event to handle room purchase RegisterNetEvent("rafializade-motels:buyRoom") AddEventHandler("rafializade-motels:buyRoom", function(motel_type) local src = source local motel_type_data = motel_type local xPlayer = QBCore.Functions.GetPlayer(src) local PlayerCash = xPlayer.Functions.GetMoney("cash") local PlayerBank = xPlayer.Functions.GetMoney("bank") if motel_type_data == "basic" then if Config.BasicRoomPrice <= PlayerCash then xPlayer.Functions.RemoveMoney("cash", Config.BasicRoomPrice, "Basit motel odası satın alındı") TriggerEvent("rafializade-motels:addDatabase", src, "basic") TriggerClientEvent("QBCore:Notify", src, "Başarıyla basit motel odası satın aldınız!", "success", 3000) elseif Config.BasicRoomPrice <= PlayerBank then xPlayer.Functions.RemoveMoney("bank", Config.BasicRoomPrice, "Basit motel odası satın alındı") TriggerEvent("rafializade-motels:addDatabase", src, "basic") TriggerClientEvent("QBCore:Notify", src, "Başarıyla basit motel odası satın aldınız!", "success", 3000) else TriggerClientEvent("QBCore:Notify", src, "Yeterli paranız bulunmamakta", "error", 3000) end elseif motel_type_data == "room1" then if Config.Room1Price <= PlayerCash then xPlayer.Functions.RemoveMoney("cash", Config.Room1Price, "Orta motel odası satın alındı") TriggerEvent("rafializade-motels:addDatabase", src, "room1") TriggerClientEvent("QBCore:Notify", src, "Başarıyla orta motel odası satın aldınız!", "success", 3000) elseif Config.Room1Price <= PlayerBank then xPlayer.Functions.RemoveMoney("bank", Config.Room1Price, "Orta motel odası satın alındı") TriggerEvent("rafializade-motels:addDatabase", src, "room1") TriggerClientEvent("QBCore:Notify", src, "Başarıyla orta motel odası satın aldınız!", "success", 3000) else TriggerClientEvent("QBCore:Notify", src, "Yeterli paranız bulunmamakta", "error", 3000) end elseif motel_type_data == "room2" then if Config.Room2Price <= PlayerCash then xPlayer.Functions.RemoveMoney("cash", Config.Room2Price, "Büyük motel odası satın alındı") TriggerEvent("rafializade-motels:addDatabase", src, "room2") TriggerClientEvent("QBCore:Notify", src, "Başarıyla büyük motel odası satın aldınız!", "success", 3000) elseif Config.Room2Price <= PlayerBank then xPlayer.Functions.RemoveMoney("bank", Config.Room2Price, "Büyük motel odası satın alındı") TriggerClientEvent("QBCore:Notify", src, "Başarıyla büyük motel odası satın aldınız!", "success", 3000) TriggerEvent("rafializade-motels:addDatabase", src, "room2") else TriggerClientEvent("QBCore:Notify", src, "Yeterli paranız bulunmamakta", "error", 3000) end end end) -- Event to add room data to database RegisterNetEvent("rafializade-motels:addDatabase") AddEventHandler("rafializade-motels:addDatabase", function(source, motel_type) local src = source local motel_type_data = motel_type local xPlayer = QBCore.Functions.GetPlayer(src) local PlayerCitizenID = xPlayer.PlayerData.citizenid local query = "UPDATE players SET motel_type = ? WHERE citizenid = ?" local values = {motel_type_data, PlayerCitizenID} MySQL.Async.execute(query, values, function(rowsChanged) end) end) -- Event to teleport player to the room RegisterNetEvent("rafializade-motels:server:teleportRoom") AddEventHandler("rafializade-motels:server:teleportRoom", function(source, motel_type) local src = source local motel_type_data = motel_type SetPlayerRoutingBucket(src, src) TriggerClientEvent("rafializade-motels:teleportRoom", src, motel_type_data) end) -- Event to exit room RegisterNetEvent('rafializade-motels:ExitRoom') AddEventHandler('rafializade-motels:ExitRoom', function() SetPlayerRoutingBucket(source, Config.MainBucket) end)