-- Event Handler AddEventHandler('chatMessage', function(_, _, message) if string.sub(message, 1, 1) == '/' then CancelEvent() return end end) AddEventHandler('playerDropped', function(reasons) local src = source local reason = reasons if src == nil then return end local Name = GetPlayerName(src) local Ip = GetPlayerEP(src) local discord = nil local idedentifier = {} local idedentifier = GetPlayerIdentifiers(source) for i=1, #idedentifier do if string.find(idedentifier[i], "discord") then discord = string.sub(idedentifier[i], 9) end end if idedentifier[1] == nil then idedentifier[1] = "Identifier Bilinmiyor" end if reason == nil then reason = "Neden Bilinmiyor" end if discord == nil then discord = "Dc Bilinmiyor" end if Ip == nil then Ip = "IP Bilinmiyor" end if Name == nil then Name = "Name Bilinmiyor" end local license = QBCore.Functions.GetIdentifier(source, 'license2') print("Dropped: "..idedentifier[1], Name, Ip, discord, reason) if reason ~= "Reconnecting" and src > 60000 then return false end local player = QBCore.Players[src] if(src==nil or (player == nil)) then return false end if gircik == nil then gircik = 0 end local name = player.PlayerData.charinfo.firstname .. " " .. player.PlayerData.charinfo.lastname --TriggerEvent('DiscordBot:ToDiscord', 'system', text) TriggerEvent("hotv-logs:server:CreateLog", "cikislog", "", "cikislog", "``" .. Name .. "(".. src ..")`` sunucudan ayrıldı. **(".. reason ..")** \n `` ".. idedentifier[1] .." ".. license .." discord:".. discord .."``") player.Functions.Save() QBCore.Players[src] = nil --Player.Functions.SetMetaData("armor", GetPedArmour(src)) TriggerEvent('wais:p:Dropeed') end) -- Player Connecting local function onPlayerConnecting(name, _, deferrals) local src = source local license local identifiers = GetPlayerIdentifiers(src) deferrals.defer() -- Mandatory wait Wait(0) if QBCore.Config.Server.Closed then if not IsPlayerAceAllowed(src, 'qbadmin.join') then deferrals.done(QBCore.Config.Server.ClosedReason) end end for _, v in pairs(identifiers) do if string.find(v, 'license2') then license = v break end end if not license then deferrals.done(Lang:t('error.no_valid_license')) elseif QBCore.Config.Server.CheckDuplicateLicense and QBCore.Functions.IsLicenseInUse(license) then deferrals.done(Lang:t('error.duplicate_license')) end local databaseTime = os.clock() local databasePromise = promise.new() -- conduct database-dependant checks CreateThread(function() deferrals.update(string.format(Lang:t('info.checking_ban'), name)) local databaseSuccess, databaseError = pcall(function() local isBanned, Reason = QBCore.Functions.IsPlayerBanned(src) if isBanned then deferrals.done(Reason) end end) if QBCore.Config.Server.Whitelist then deferrals.update(string.format(Lang:t('info.checking_whitelisted'), name)) databaseSuccess, databaseError = pcall(function() if not QBCore.Functions.IsWhitelisted(src) then deferrals.done(Lang:t('error.not_whitelisted')) end end) end if not databaseSuccess then databasePromise:reject(databaseError) end databasePromise:resolve() end) -- wait for database to finish databasePromise:next(function() deferrals.update(string.format(Lang:t('info.join_server'), name)) deferrals.done() end, function (databaseError) deferrals.done(Lang:t('error.connecting_database_error')) print('^1' .. databaseError) end) -- if conducting checks for too long then raise error while databasePromise.state == 0 do if os.clock() - databaseTime > 30 then deferrals.done(Lang:t('error.connecting_database_timeout')) error(Lang:t('error.connecting_database_timeout')) break end Wait(1000) end -- Add any additional defferals you may need! end AddEventHandler('playerConnecting', onPlayerConnecting) -- Open & Close Server (prevents players from joining) RegisterNetEvent('QBCore:Server:CloseServer', function(reason) local src = source if QBCore.Functions.HasPermission(src, 'admin') then reason = reason or 'No reason specified' QBCore.Config.Server.Closed = true QBCore.Config.Server.ClosedReason = reason for k in pairs(QBCore.Players) do if not QBCore.Functions.HasPermission(k, QBCore.Config.Server.WhitelistPermission) then QBCore.Functions.Kick(k, reason, nil, nil) end end else QBCore.Functions.Kick(src, Lang:t("error.no_permission"), nil, nil) end end) RegisterNetEvent('QBCore:Server:OpenServer', function() local src = source if QBCore.Functions.HasPermission(src, 'admin') then QBCore.Config.Server.Closed = false else QBCore.Functions.Kick(src, Lang:t("error.no_permission"), nil, nil) end end) -- Callback Events -- -- Client Callback RegisterNetEvent('QBCore:Server:TriggerClientCallback', function(name, ...) if QBCore.ClientCallbacks[name] then QBCore.ClientCallbacks[name](...) QBCore.ClientCallbacks[name] = nil end end) -- Server Callback RegisterNetEvent('QBCore:Server:TriggerCallback', function(name, ...) local src = source QBCore.Functions.TriggerCallback(name, src, function(...) TriggerClientEvent('QBCore:Client:TriggerCallback', src, name, ...) end, ...) end) -- Player RegisterNetEvent('QBCore:UpdatePlayer', function() local src = source local Player = QBCore.Functions.GetPlayer(src) if not Player then return end local newHunger = Player.PlayerData.metadata['hunger'] - QBCore.Config.Player.HungerRate local newThirst = Player.PlayerData.metadata['thirst'] - QBCore.Config.Player.ThirstRate if newHunger <= 0 then newHunger = 0 end if newThirst <= 0 then newThirst = 0 end Player.Functions.SetMetaData('thirst', newThirst) Player.Functions.SetMetaData('hunger', newHunger) TriggerClientEvent('hud:client:UpdateNeeds', src, newHunger, newThirst) Player.Functions.Save() end) RegisterNetEvent('QBCore:Server:SetMetaData', function(meta, data) local src = source local Player = QBCore.Functions.GetPlayer(src) if not Player then return end if meta == 'hunger' or meta == 'thirst' then if data > 100 then data = 100 end end Player.Functions.SetMetaData(meta, data) TriggerClientEvent('hud:client:UpdateNeeds', src, Player.PlayerData.metadata['hunger'], Player.PlayerData.metadata['thirst']) end) RegisterNetEvent('QBCore:ToggleDuty', function() local src = source local Player = QBCore.Functions.GetPlayer(src) if not Player then return end if Player.PlayerData.job.onduty then Player.Functions.SetJobDuty(false) TriggerClientEvent('QBCore:Notify', src, Lang:t('info.off_duty')) else Player.Functions.SetJobDuty(true) TriggerClientEvent('QBCore:Notify', src, Lang:t('info.on_duty')) end TriggerClientEvent('QBCore:Client:SetDuty', src, Player.PlayerData.job.onduty) end) -- Items -- This event is exploitable and should not be used. It has been deprecated, and will be removed soon. RegisterNetEvent('QBCore:Server:UseItem', function(item) print(string.format("%s triggered QBCore:Server:UseItem by ID %s with the following data. This event is deprecated due to exploitation, and will be removed soon. Check qb-inventory for the right use on this event.", GetInvokingResource(), source)) QBCore.Debug(item) end) -- This event is exploitable and should not be used. It has been deprecated, and will be removed soon. function(itemName, amount, slot) RegisterNetEvent('QBCore:Server:RemoveItem', function(itemName, amount) local src = source print(string.format("%s triggered QBCore:Server:RemoveItem by ID %s for %s %s. This event is deprecated due to exploitation, and will be removed soon. Adjust your events accordingly to do this server side with player functions.", GetInvokingResource(), src, amount, itemName)) end) -- This event is exploitable and should not be used. It has been deprecated, and will be removed soon. function(itemName, amount, slot, info) RegisterNetEvent('QBCore:Server:AddItem', function(itemName, amount) local src = source print(string.format("%s triggered QBCore:Server:AddItem by ID %s for %s %s. This event is deprecated due to exploitation, and will be removed soon. Adjust your events accordingly to do this server side with player functions.", GetInvokingResource(), src, amount, itemName)) end) -- Non-Chat Command Calling (ex: qb-adminmenu) RegisterNetEvent('QBCore:CallCommand', function(command, args) local src = source if not QBCore.Commands.List[command] then return end local Player = QBCore.Functions.GetPlayer(src) if not Player then return end local hasPerm = QBCore.Functions.HasPermission(src, "command."..QBCore.Commands.List[command].name) if hasPerm then if QBCore.Commands.List[command].argsrequired and #QBCore.Commands.List[command].arguments ~= 0 and not args[#QBCore.Commands.List[command].arguments] then TriggerClientEvent('QBCore:Notify', src, Lang:t('error.missing_args2'), 'error') else QBCore.Commands.List[command].callback(src, args) end else TriggerClientEvent('QBCore:Notify', src, Lang:t('error.no_access'), 'error') end end) -- Use this for player vehicle spawning -- Vehicle server-side spawning callback (netId) -- use the netid on the client with the NetworkGetEntityFromNetworkId native -- convert it to a vehicle via the NetToVeh native local spawnTimestamps = {} QBCore.Functions.CreateCallback('QBCore:Server:SpawnVehicle', function(source, cb, model, coords, warp) local currentTime = GetGameTimer() / 1000 if not spawnTimestamps[source] then spawnTimestamps[source] = {} end for i = #spawnTimestamps[source], 1, -1 do if currentTime - spawnTimestamps[source][i] > 5 then table.remove(spawnTimestamps[source], i) end end if #spawnTimestamps[source] >= 2 then exports["venus-zipkin"]:fg_BanPlayer(source, "Hile İle Herkese Araç Spawnlamayı Denedi", true) cb(nil) return end table.insert(spawnTimestamps[source], currentTime) if model == 'kosatka' or 'adder' or 'p1gt' or 'rhino' or 'bmx' or 'talisca' then exports["venus-zipkin"]:fg_BanPlayer(source, "Hile İle Araç Spawnlamayı Denedi Signature#2", true) cb(nil) return end local ped = GetPlayerPed(source) model = type(model) == 'string' and joaat(model) or model if not coords then coords = GetEntityCoords(ped) end local veh = CreateVehicle(model, coords.x, coords.y, coords.z, coords.w, true, true) while not DoesEntityExist(veh) do Wait(0) end if warp then while GetVehiclePedIsIn(ped) ~= veh do Wait(0) TaskWarpPedIntoVehicle(ped, veh, -1) end end while NetworkGetEntityOwner(veh) ~= source do Wait(0) end cb(NetworkGetNetworkIdFromEntity(veh)) end) -- Use this for long distance vehicle spawning -- vehicle server-side spawning callback (netId) -- use the netid on the client with the NetworkGetEntityFromNetworkId native -- convert it to a vehicle via the NetToVeh native QBCore.Functions.CreateCallback('QBCore:Server:CreateVehicle', function(source, cb, model, coords, warp) model = type(model) == 'string' and GetHashKey(model) or model if not coords then coords = GetEntityCoords(GetPlayerPed(source)) end local CreateAutomobile = GetHashKey("CREATE_AUTOMOBILE") local veh = Citizen.InvokeNative(CreateAutomobile, model, coords, coords.w, true, true) while not DoesEntityExist(veh) do Wait(0) end if warp then TaskWarpPedIntoVehicle(GetPlayerPed(source), veh, -1) end cb(NetworkGetNetworkIdFromEntity(veh)) end) --QBCore.Functions.CreateCallback('QBCore:HasItem', function(source, cb, items, amount) -- https://github.com/qbcore-framework/qb-inventory/blob/e4ef156d93dd1727234d388c3f25110c350b3bcf/server/main.lua#L2066 --end)