mirror of
https://github.com/ND-Framework/ND_Core.git
synced 2026-08-17 05:56:01 +01:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46f4bdbd64 | ||
|
|
4870d639d4 | ||
|
|
ed895b4e6d | ||
|
|
5d2925d0c3 | ||
|
|
0500cef32f | ||
|
|
0e1fb43cd2 | ||
|
|
3260aa01f2 | ||
|
|
71a54be704 | ||
|
|
d939607d64 | ||
|
|
5cb038819c | ||
|
|
9f5bb34bdd | ||
|
|
29006870c3 | ||
|
|
a60e1b9e32 |
@@ -29,7 +29,7 @@ AddEventHandler("gameEventTriggered", function(name, args)
|
|||||||
local victim = args[1]
|
local victim = args[1]
|
||||||
if not IsPedAPlayer(victim) or NetworkGetPlayerIndexFromPed(victim) ~= cache.playerId then return end
|
if not IsPedAPlayer(victim) or NetworkGetPlayerIndexFromPed(victim) ~= cache.playerId then return end
|
||||||
|
|
||||||
if not IsPedDeadOrDying(victim, true) and GetEntityHealth(victim) > 0 then
|
if not IsPedDeadOrDying(victim, true) then
|
||||||
local hit, bone = GetPedLastDamageBone(victim)
|
local hit, bone = GetPedLastDamageBone(victim)
|
||||||
if hit and usingAmbulance then
|
if hit and usingAmbulance then
|
||||||
local damageWeapon = ambulance:getLastDamagingWeapon(victim)
|
local damageWeapon = ambulance:getLastDamagingWeapon(victim)
|
||||||
|
|||||||
@@ -26,6 +26,13 @@ function NDCore.getPlayersFromCoords(distance, coords)
|
|||||||
return closePlayers
|
return closePlayers
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function NDCore.getConfig(info)
|
||||||
|
if not info then
|
||||||
|
return Config
|
||||||
|
end
|
||||||
|
return Config[info]
|
||||||
|
end
|
||||||
|
|
||||||
function NDCore.revivePlayer(reset, keepDead)
|
function NDCore.revivePlayer(reset, keepDead)
|
||||||
local usingAmbulance = GetResourceState("ND_Ambulance") == "started"
|
local usingAmbulance = GetResourceState("ND_Ambulance") == "started"
|
||||||
if not keepDead then
|
if not keepDead then
|
||||||
|
|||||||
@@ -697,9 +697,14 @@ lib.addKeybind({
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
if not playerVehicle then return end
|
if not playerVehicle then return end
|
||||||
|
|
||||||
|
local speed = math.floor(GetEntitySpeed(playerVehicle) * 2.236936)
|
||||||
|
if speed < 10 then return end
|
||||||
|
|
||||||
cruiseControlEnabled = true
|
cruiseControlEnabled = true
|
||||||
cruiseSpeedVehicle = math.floor(GetEntitySpeed(playerVehicle) * 2.236936)
|
cruiseSpeedVehicle = speed
|
||||||
cruiseSpeedSet = cruiseSpeedVehicle
|
cruiseSpeedSet = cruiseSpeedVehicle
|
||||||
|
|
||||||
lib.notify({
|
lib.notify({
|
||||||
title = "Cruise control",
|
title = "Cruise control",
|
||||||
description = ("Set to %d mph."):format(math.floor(cruiseSpeedSet)),
|
description = ("Set to %d mph."):format(math.floor(cruiseSpeedSet)),
|
||||||
|
|||||||
@@ -5,13 +5,32 @@ exports("GetCoreObject", function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
NDCore.Functions = {}
|
NDCore.Functions = {}
|
||||||
NDCore.Functions.GetPlayer = NDCore.getPlayer
|
|
||||||
NDCore.Functions.GetPlayers = NDCore.getPlayers
|
NDCore.Functions.GetPlayers = NDCore.getPlayers
|
||||||
NDCore.Functions.GetUserDiscordInfo = NDCore.getDiscordInfo
|
NDCore.Functions.GetUserDiscordInfo = NDCore.getDiscordInfo
|
||||||
NDCore.Functions.SetActiveCharacter = NDCore.setActiveCharacter
|
NDCore.Functions.SetActiveCharacter = NDCore.setActiveCharacter
|
||||||
NDCore.Functions.GetPlayerCharacters = NDCore.fetchAllCharacters
|
NDCore.Functions.GetPlayerCharacters = NDCore.fetchAllCharacters
|
||||||
NDCore.Functions.GetPlayerByCharacterId = NDCore.fetchCharacter
|
NDCore.Functions.GetPlayerByCharacterId = NDCore.fetchCharacter
|
||||||
|
|
||||||
|
function NDCore.Functions.GetPlayer(src)
|
||||||
|
local player = NDCore.getPlayer(src)
|
||||||
|
return {
|
||||||
|
source = player.source,
|
||||||
|
id = player.id,
|
||||||
|
firstName = player.firstname,
|
||||||
|
lastName = player.lastname,
|
||||||
|
dob = player.dob,
|
||||||
|
gender = player.gender,
|
||||||
|
cash = player.cash,
|
||||||
|
bank = player.bank,
|
||||||
|
phoneNumber = player.metadata.phone,
|
||||||
|
lastLocation = player.metadata.lastLocation,
|
||||||
|
inventory = player.inventory,
|
||||||
|
discordInfo = player.discordInfo,
|
||||||
|
data = player.metadata,
|
||||||
|
job = player.job
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
function NDCore.Functions.GetPlayerIdentifierFromType(identifierType, src)
|
function NDCore.Functions.GetPlayerIdentifierFromType(identifierType, src)
|
||||||
return GetPlayerIdentifierByType(src, identifierType)
|
return GetPlayerIdentifierByType(src, identifierType)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ function NDCore.GetPlayerData()
|
|||||||
|
|
||||||
player.coords = GetEntityCoords(cache.ped)
|
player.coords = GetEntityCoords(cache.ped)
|
||||||
player.loadout = {}
|
player.loadout = {}
|
||||||
player.maxWeight = exports.ox_inventory:GetPlayerMaxWeight()
|
player.maxWeight = GetResourceState("ox_inventory") == "started" and exports.ox_inventory:GetPlayerMaxWeight() or 0
|
||||||
player.money = player.Accounts.Money
|
player.money = player.Accounts.Money
|
||||||
player.sex = player.gender
|
player.sex = player.gender
|
||||||
player.firstName = player.firstname
|
player.firstName = player.firstname
|
||||||
@@ -112,7 +112,7 @@ function NDCore.Progressbar(message, lenght, options)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function NDCore.SearchInventory(item, count)
|
function NDCore.SearchInventory(item, count)
|
||||||
local itemCount = exports.ox_inventory:Search(item)
|
local itemCount = GetResourceState("ox_inventory") == "started" and exports.ox_inventory:Search(item) or 0
|
||||||
return itemCount >= count and itemCount
|
return itemCount >= count and itemCount
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ function NDCore.ShowHelpNotification()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function NDCore.ShowInventory()
|
function NDCore.ShowInventory()
|
||||||
exports.ox_inventory:openInventory("player", cache.serverId)
|
return GetResourceState("ox_inventory") == "started" and exports.ox_inventory:openInventory("player", cache.serverId)
|
||||||
end
|
end
|
||||||
|
|
||||||
function NDCore.ShowNotification(msg, type, time)
|
function NDCore.ShowNotification(msg, type, time)
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ local registeredItems = {}
|
|||||||
|
|
||||||
local function getAmmoFromWeapon(weapon)
|
local function getAmmoFromWeapon(weapon)
|
||||||
if not weapon then return end
|
if not weapon then return end
|
||||||
for item, data in pairs(exports.ox_inventory:Items()) do
|
local items = GetResourceState("ox_inventory") == "started" and exports.ox_inventory:Items() or {}
|
||||||
|
for item, data in pairs(items) do
|
||||||
if data.weapon and data.model and data.model:lower() == weapon:lower() then
|
if data.weapon and data.model and data.model:lower() == weapon:lower() then
|
||||||
return data.ammoname
|
return data.ammoname
|
||||||
end
|
end
|
||||||
@@ -60,7 +61,7 @@ local function createPlayerFunctions(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function self.addInventoryItem(item, count)
|
function self.addInventoryItem(item, count)
|
||||||
exports.ox_inventory:AddItem(self.source, item, count)
|
return GetResourceState("ox_inventory") == "started" and exports.ox_inventory:AddItem(self.source, item, count)
|
||||||
end
|
end
|
||||||
|
|
||||||
function self.addMoney(amount)
|
function self.addMoney(amount)
|
||||||
@@ -100,11 +101,11 @@ local function createPlayerFunctions(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function self.canCarryItem(item, count)
|
function self.canCarryItem(item, count)
|
||||||
return exports.ox_inventory:CanCarryItem(self.source, item, count)
|
return GetResourceState("ox_inventory") == "started" and exports.ox_inventory:CanCarryItem(self.source, item, count)
|
||||||
end
|
end
|
||||||
|
|
||||||
function self.canSwapItem(firstItem, firstItemCount, testItem, testItemCount)
|
function self.canSwapItem(firstItem, firstItemCount, testItem, testItemCount)
|
||||||
exports.ox_inventory:CanSwapItem(self.source, firstItem, firstItemCount, testItem, testItemCount)
|
return GetResourceState("ox_inventory") == "started" and exports.ox_inventory:CanSwapItem(self.source, firstItem, firstItemCount, testItem, testItemCount)
|
||||||
end
|
end
|
||||||
|
|
||||||
function self.clearMeta(index)
|
function self.clearMeta(index)
|
||||||
@@ -137,7 +138,7 @@ local function createPlayerFunctions(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function self.getInventory(minimal)
|
function self.getInventory(minimal)
|
||||||
local playerItems = exports.ox_inventory:GetInventoryItems(self.source)
|
local playerItems = GetResourceState("ox_inventory") == "started" and exports.ox_inventory:GetInventoryItems(self.source) or {}
|
||||||
if not minimal then
|
if not minimal then
|
||||||
return playerItems
|
return playerItems
|
||||||
end
|
end
|
||||||
@@ -145,7 +146,7 @@ local function createPlayerFunctions(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function self.getInventoryItem(item)
|
function self.getInventoryItem(item)
|
||||||
local playerItems = exports.ox_inventory:GetInventoryItems(self.source)
|
local playerItems = GetResourceState("ox_inventory") == "started" and exports.ox_inventory:GetInventoryItems(self.source) or {}
|
||||||
for name, data in pairs(playerItems) do
|
for name, data in pairs(playerItems) do
|
||||||
if name == item then
|
if name == item then
|
||||||
return data
|
return data
|
||||||
@@ -162,11 +163,11 @@ local function createPlayerFunctions(self)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function self.hasItem(item, metadata)
|
function self.hasItem(item, metadata)
|
||||||
return exports.ox_inventory:GetItem(self.source, item, metadata)
|
return GetResourceState("ox_inventory") == "started" and exports.ox_inventory:GetItem(self.source, item, metadata)
|
||||||
end
|
end
|
||||||
|
|
||||||
function self.removeInventoryItem(item, count)
|
function self.removeInventoryItem(item, count)
|
||||||
exports.ox_inventory:RemoveItem(self.source, item, count)
|
return GetResourceState("ox_inventory") == "started" and exports.ox_inventory:RemoveItem(self.source, item, count)
|
||||||
end
|
end
|
||||||
|
|
||||||
function self.removeMoney(amount)
|
function self.removeMoney(amount)
|
||||||
@@ -304,7 +305,8 @@ end
|
|||||||
function NDCore.GetItemLabel(item)
|
function NDCore.GetItemLabel(item)
|
||||||
if not itemNames then
|
if not itemNames then
|
||||||
itemNames = {}
|
itemNames = {}
|
||||||
for item, data in pairs(exports.ox_inventory:Items()) do
|
local items = GetResourceState("ox_inventory") == "started" and exports.ox_inventory:Items() or {}
|
||||||
|
for item, data in pairs(items) do
|
||||||
itemNames[item] = data.label
|
itemNames[item] = data.label
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
author "Andyyy#7666"
|
author "Andyyy#7666"
|
||||||
description "ND Framework Core"
|
description "ND Framework Core"
|
||||||
version "2.0.1"
|
version "2.0.2"
|
||||||
|
|
||||||
fx_version "cerulean"
|
fx_version "cerulean"
|
||||||
game "gta5"
|
game "gta5"
|
||||||
|
|||||||
@@ -194,27 +194,50 @@ end)
|
|||||||
lib.addCommand("pay", {
|
lib.addCommand("pay", {
|
||||||
help = "give money to nearby player.",
|
help = "give money to nearby player.",
|
||||||
params = {
|
params = {
|
||||||
|
{
|
||||||
|
name = "target",
|
||||||
|
type = "playerId",
|
||||||
|
help = "Target player's server id"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name = "amount",
|
name = "amount",
|
||||||
type = "number"
|
type = "number",
|
||||||
|
help = "Amount of cash to give"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, function(source, args, raw)
|
}, function(source, args, raw)
|
||||||
if not source then return end
|
if not source then return end
|
||||||
local targetPlayer
|
|
||||||
local pedCoords = GetEntityCoords(GetPlayerPed(source))
|
|
||||||
for targetId, targetInfo in pairs(NDCore.players) do
|
|
||||||
local targetCoords = GetEntityCoords(GetPlayerPed(targetId))
|
|
||||||
if #(pedCoords-targetCoords) < 2.0 and targetId ~= source then
|
|
||||||
targetPlayer = targetInfo
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local player = NDCore.getPlayer(source)
|
local player = NDCore.getPlayer(source)
|
||||||
if not player then return end
|
local targetPlayer = NDCore.getPlayer(args.target)
|
||||||
local success = player.deductMoney("cash", args.amount)
|
|
||||||
|
|
||||||
|
if not player or not targetPlayer then
|
||||||
|
return player.notify({
|
||||||
|
title = "Error",
|
||||||
|
description = "No player found",
|
||||||
|
type = "error"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if player.cash < args.amount then
|
||||||
|
return player.notify({
|
||||||
|
title = "Error",
|
||||||
|
description = "You don't have enough cash",
|
||||||
|
type = "error"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local playerCoords = GetEntityCoords(GetPlayerPed(player.source))
|
||||||
|
local targetCoords = GetEntityCoords(GetPlayerPed(targetPlayer.source))
|
||||||
|
if #(playerCoords-targetCoords) > 2.0 then
|
||||||
|
return player.notify({
|
||||||
|
title = "Error",
|
||||||
|
description = "Player is not nearby",
|
||||||
|
type = "error"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local success = player.deductMoney("cash", args.amount) and targetPlayer.addMoney("cash", args.amount)
|
||||||
if not success then
|
if not success then
|
||||||
return player.notify({
|
return player.notify({
|
||||||
title = "Couldn't give money",
|
title = "Couldn't give money",
|
||||||
@@ -223,19 +246,18 @@ lib.addCommand("pay", {
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
if not targetPlayer or not targetPlayer.addMoney("cash", args.amount) then return end
|
|
||||||
targetPlayer.notify({
|
targetPlayer.notify({
|
||||||
title = "Money received",
|
title = "Money received",
|
||||||
description = ("Received $%d in cash"):format(args.amount),
|
description = ("Received $%d in cash"):format(args.amount),
|
||||||
type = "inform",
|
type = "inform",
|
||||||
duration = 10000
|
duration = 5000
|
||||||
})
|
})
|
||||||
|
|
||||||
player.notify({
|
player.notify({
|
||||||
title = "Money given",
|
title = "Money given",
|
||||||
description = ("You gave someone $%d in cash"):format(args.amount),
|
description = ("You gave $%d in cash"):format(args.amount),
|
||||||
type = "inform",
|
type = "inform",
|
||||||
duration = 10000
|
duration = 5000
|
||||||
})
|
})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ function NDCore.getPlayerServerInfo(source)
|
|||||||
return PlayersInfo[source]
|
return PlayersInfo[source]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function NDCore.getConfig(info)
|
||||||
|
if not info then
|
||||||
|
return Config
|
||||||
|
end
|
||||||
|
return Config[info]
|
||||||
|
end
|
||||||
|
|
||||||
---@param fileLocation string|tabale
|
---@param fileLocation string|tabale
|
||||||
---@return boolean
|
---@return boolean
|
||||||
function NDCore.loadSQL(fileLocation, resource)
|
function NDCore.loadSQL(fileLocation, resource)
|
||||||
|
|||||||
@@ -309,20 +309,28 @@ local function createCharacterTable(info)
|
|||||||
---@return boolean
|
---@return boolean
|
||||||
function self.addGroup(name, rank, isJob)
|
function self.addGroup(name, rank, isJob)
|
||||||
local groupRank = tonumber(rank) or 1
|
local groupRank = tonumber(rank) or 1
|
||||||
local groupInfo = Config.groups[name]
|
local groupInfo = Config.groups?[name]
|
||||||
|
local bossRank = groupInfo and groupInfo.minimumBossRank
|
||||||
|
|
||||||
-- if not groupInfo then return end
|
-- if not groupInfo then return end
|
||||||
if isJob then
|
if isJob then
|
||||||
for _, group in pairs(self.groups) do
|
for _, group in pairs(self.groups) do
|
||||||
group.isJob = nil
|
group.isJob = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
self.groups[name] = {
|
self.groups[name] = {
|
||||||
|
name = name,
|
||||||
label = groupInfo and groupInfo.label or name,
|
label = groupInfo and groupInfo.label or name,
|
||||||
rankName = groupInfo and groupInfo.ranks[groupRank] or groupRank,
|
rankName = groupInfo and groupInfo.ranks[groupRank] or groupRank,
|
||||||
rank = groupRank,
|
rank = groupRank,
|
||||||
isJob = isJob
|
isJob = isJob,
|
||||||
|
isBoss = bossRank and groupRank >= bossRank
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if not isJob then
|
||||||
self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self))
|
self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self))
|
||||||
|
end
|
||||||
lib.addPrincipal(self.source, ("group.%s"):format(name))
|
lib.addPrincipal(self.source, ("group.%s"):format(name))
|
||||||
return self.groups[name]
|
return self.groups[name]
|
||||||
end
|
end
|
||||||
@@ -337,6 +345,12 @@ local function createCharacterTable(info)
|
|||||||
function self.removeGroup(name)
|
function self.removeGroup(name)
|
||||||
local group = self.groups[name]
|
local group = self.groups[name]
|
||||||
if not group then return end
|
if not group then return end
|
||||||
|
|
||||||
|
if self.job == name then
|
||||||
|
self.job = nil
|
||||||
|
self.jobInfo = nil
|
||||||
|
end
|
||||||
|
|
||||||
self.groups[name] = nil
|
self.groups[name] = nil
|
||||||
self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self))
|
self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self))
|
||||||
lib.removePrincipal(self.source, ("group.%s"):format(name))
|
lib.removePrincipal(self.source, ("group.%s"):format(name))
|
||||||
@@ -349,11 +363,11 @@ local function createCharacterTable(info)
|
|||||||
function self.setJob(name, rank)
|
function self.setJob(name, rank)
|
||||||
self.removeGroup(self.job)
|
self.removeGroup(self.job)
|
||||||
local job = self.addGroup(name, rank, true)
|
local job = self.addGroup(name, rank, true)
|
||||||
local jobName, jobInfo = self.getJob()
|
if job then
|
||||||
if jobInfo then
|
self.job = job.name
|
||||||
self.job = jobName
|
self.jobInfo = job
|
||||||
self.jobInfo = jobInfo
|
|
||||||
end
|
end
|
||||||
|
self.triggerEvent("ND:updateCharacter", removeCharacterFunctions(self))
|
||||||
return job
|
return job
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -576,7 +576,15 @@ AddEventHandler("entityCreated", function(entity)
|
|||||||
local state = Entity(entity).state
|
local state = Entity(entity).state
|
||||||
if state.owner or state.locked ~= nil then return end
|
if state.owner or state.locked ~= nil then return end
|
||||||
|
|
||||||
|
time = os.time()
|
||||||
local driver = GetPedInVehicleSeat(entity, -1)
|
local driver = GetPedInVehicleSeat(entity, -1)
|
||||||
|
while DoesEntityExist(entity) and driver == 0 and os.time()-time < 2 do
|
||||||
|
driver = GetPedInVehicleSeat(entity, -1)
|
||||||
|
Wait(100)
|
||||||
|
end
|
||||||
|
|
||||||
|
if not DoesEntityExist(entity) then return end
|
||||||
|
|
||||||
if DoesEntityExist(driver) and IsPedAPlayer(driver) then
|
if DoesEntityExist(driver) and IsPedAPlayer(driver) then
|
||||||
state.locked = false
|
state.locked = false
|
||||||
state.hotwired = true
|
state.hotwired = true
|
||||||
|
|||||||
Reference in New Issue
Block a user