From 371481941cb1d2d04696ed9d57f8e1d46555af4d Mon Sep 17 00:00:00 2001 From: gononono64 <96976330+gononono64@users.noreply.github.com> Date: Tue, 25 Feb 2025 18:22:08 -0600 Subject: [PATCH 1/9] css fix for dialogue yum `;,;.;,;.;.' ..:;:;::;: ..--''' '' ' ' '''--. /' . .' '. .`\ | / / \ '.| | | : : :| .'| | : : :| ,: /\ \.._\ __..===..__/_../ /`. |'' | :.| `' `' |.' ::. | | ''| :''; | , `''\ |.: \/ | /'-.`' ':'.-'\ | \, | | ' / / | / |... | \ | | |';'| \ _ |:.| |_\_|`.' |_/_| |.:| _ | /,.,.|' \__ . . __/ '|.,.,\ | ':`.`----._____.---'.' | l42 \ `:"""-------'""' | | ',-,-', .'-=,=, --- web/dist/assets/index-BEeeZu6c.css | 92 +++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/web/dist/assets/index-BEeeZu6c.css b/web/dist/assets/index-BEeeZu6c.css index c1b9180..82b9d67 100644 --- a/web/dist/assets/index-BEeeZu6c.css +++ b/web/dist/assets/index-BEeeZu6c.css @@ -1 +1,91 @@ -.container{display:flex;flex-direction:column;align-items:center;width:100%;min-height:100vh;background:transparent}.dialogue-container{position:fixed;bottom:30px;width:50%;background:transparent;padding:25px;left:50%;transform:translate(-50%)}.dialogue-text{background:#000000d9;padding:20px;border-radius:4px;margin:15px 0;line-height:1.6;font-size:1.1em;border:1px solid rgba(255,255,255,.15);box-shadow:0 4px 16px #0000004d}.dialogue-options{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px;justify-content:space-between;margin-top:20px;width:100%}.dialogue-button{background:#000000d9;border:1px solid rgba(255,255,255,.15);color:#fff;padding:12px 24px;border-radius:4px;cursor:pointer;transition:all .2s ease;font-size:.95em;flex:1;text-align:center;min-width:calc(33.333% - 8px);box-shadow:0 4px 16px #0003}.dialogue-button:hover{background:#3333338c;transform:translateY(-1px);box-shadow:0 6px 20px #0000004d;border:1px solid rgba(255,255,255,.3)}h2{color:#fff;margin:0;font-size:1.4em;font-weight:600;text-shadow:0 2px 4px rgba(0,0,0,.3)}p{color:#fff;margin:0;text-shadow:0 1px 2px rgba(0,0,0,.2)}*{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.hidden{display:none}*{overflow-y:hidden;overflow-x:hidden} +.container { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + min-height: 100vh; + background: transparent +} + +.dialogue-container { + position: fixed; + bottom: 30px; + width: 50%; + background: transparent; + padding: 15px; + left: 50%; + transform: translate(-50%) +} + +.dialogue-text { + background: #242424; + padding: 10px; + border-radius: 4px; + margin: 10px 0; + line-height: 1.6; + font-size: 1.1em; + border: 0.5px dotted rgba(203, 203, 203, 0.5); + box-shadow: 0 4px 16px #0000007e; + +} + +.dialogue-options { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 6px; + justify-content: space-between; + margin-top: 20px; + width: 100% +} + +.dialogue-button { + background: #242424; + border: 0.5px solid rgba(203, 203, 203, 0.5); + color: #fff; + padding: 12px 24px; + border-radius: 4px; + cursor: pointer; + transition: all .2s ease; + font-size: .95em; + flex: 1; + text-align: center; + min-width: calc(33.333% - 8px); + box-shadow: 0 4px 16px #0003 +} + +.dialogue-button:hover { + background: #3333338c; + transform: translateY(-1px); + box-shadow: 0 4px 16px #0000007e; + border: 1px solid rgba(255, 255, 255, .3); +} + +h2 { + color: #fff; + margin: 0; + font-size: 1.4em; + font-weight: 600; + text-shadow: 0 2px 4px rgba(0, 0, 0, .3) +} + +p { + color: #fff; + margin: 0; + text-shadow: 0 1px 2px rgba(0, 0, 0, .2) +} + +* { + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.hidden { + display: none +} + +* { + overflow-y: hidden; + overflow-x: hidden +} \ No newline at end of file From 971da2ec5199058cfdfeb810aad98cf700b3212e Mon Sep 17 00:00:00 2001 From: MrNewb <47620135+MrNewb@users.noreply.github.com> Date: Wed, 26 Feb 2025 01:32:03 -0500 Subject: [PATCH 2/9] nd core removed to incomplete bridging, same for ox_core nd_core adoption remains low, same for ox_core. Instead of updating the other bridges easily and going through hoops on these we have decided to abandon the support for them. If someone reads this and wishes to *complete* and pr them back in it is welcomed. Until then they are holding back progress. --- modules/framework/nd_core/client.lua | 61 -------- modules/framework/nd_core/server.lua | 208 --------------------------- modules/framework/ox_core/client.lua | 64 --------- modules/framework/ox_core/server.lua | 147 ------------------- 4 files changed, 480 deletions(-) delete mode 100644 modules/framework/nd_core/client.lua delete mode 100644 modules/framework/nd_core/server.lua delete mode 100644 modules/framework/ox_core/client.lua delete mode 100644 modules/framework/ox_core/server.lua diff --git a/modules/framework/nd_core/client.lua b/modules/framework/nd_core/client.lua deleted file mode 100644 index 69f90ae..0000000 --- a/modules/framework/nd_core/client.lua +++ /dev/null @@ -1,61 +0,0 @@ -if GetResourceState('ND_Core') ~= 'started' then return end - -local NDCore = exports["ND_Core"]:GetCoreObject() - -Framework = {} - -Framework.GetPlayerData = function() - return NDCore:getPlayer() -end - -Framework.GetPlayerMetaData = function(metadata) - return NDCore:getPlayer().metadata[metadata] -end - ---[[ --- Unused by this framework -Framework.GetItemInfo = function(item) - -end - -Framework.GetPlayerInventory = function() - -end ---]] - -Framework.GetPlayerIdentifier = function() - return NDCore:getPlayer().id -end - -Framework.GetPlayerName = function() - return NDCore:getPlayer().fullname -end - -Framework.GetPlayerJob = function() - local player = NDCore:getPlayer().jobInfo - return player.name, player.label, player.rankname, player.rank -end - -Framework.GetIsPlayerDead = function() - local playerState = LocalPlayer.state - return playerState.dead -end - -RegisterNetEvent("ND:characterLoaded",function(character) - Wait(1500) - FillBridgeTables() - TriggerEvent('community_bridge:Client:OnPlayerLoaded') -end) - -RegisterNetEvent("ND:characterUnloaded",function() - ClearClientSideVariables() - TriggerEvent('community_bridge:Client:OnPlayerUnload') -end) - -RegisterNetEvent("ND:updateCharacter", function(character) - PlayerJobName = character.jobInfo.name - PlayerJobLabel = character.jobInfo.label - PlayerJobGradeName = character.jobInfo.rankName - PlayerJobGradeLevel = character.jobInfo.rank - TriggerEvent('community_bridge:Client:OnPlayerJobUpdate', PlayerJobName, PlayerJobLabel, PlayerJobGradeName, PlayerJobGradeLevel) -end) \ No newline at end of file diff --git a/modules/framework/nd_core/server.lua b/modules/framework/nd_core/server.lua deleted file mode 100644 index 5ceb7fa..0000000 --- a/modules/framework/nd_core/server.lua +++ /dev/null @@ -1,208 +0,0 @@ ---local NDCore = exports["ND_Core"]:GetCoreObject() -if GetResourceState('ND_Core') ~= 'started' then return end -local NDCore = exports["ND_Core"] - -Framework = {} - --- Framework.GetPlayerIdentifier(src) --- Returns the citizen ID of the player. -Framework.GetPlayerIdentifier = function(src) - local player = NDCore:getPlayer(src) - return player.id -end - --- Framework.GetPlayerName(src) --- Returns the first and last name of the player. -Framework.GetPlayerName = function(src) - local player = NDCore:getPlayer(src) - return player.fullname -end - ---[[ --- Unused by this framework -Framework.GetItem = function(src, item, metadata) - -end - -Framework.GetItemCount = function(src, item, metadata) - -end - -Framework.GetPlayerInventory = function(src) - -end - -Framework.AddItem = function(src, item, amount, slot, metadata) - -end - -Framework.RemoveItem = function(src, item, amount, slot, metadata) - -end - -Framework.SetMetadata = function(src, item, slot, metadata) - -end - - -Framework.Commands = {} -Framework.Commands.Add = function(name, help, arguments, argsrequired, callback, permission, ...) - -end - ---]] - --- Framework.SetMetadata(src, metadata, value) --- Adds the specified metadata key and number value to the player's data. -Framework.SetPlayerMetadata = function(src, metadata, value) - local player = NDCore:getPlayer(src) - player.setMetadata(metadata, value) - return true -end - --- Framework.GetMetadata(src, metadata) --- Gets the specified metadata key to the player's data. -Framework.GetPlayerMetadata = function(src, metadata) - local player = NDCore:getPlayer(src) - local playerData = player.getMetadata(metadata) - return playerData or false -end - --- Framework.AddStress(src, value) --- Adds the specified value to the player's stress level and updates the client HUD. -Framework.AddStress = function(src, value) - print("Not Bridged Yet") - return 0 -end - --- Framework.RemoveStress(src, value) --- Removes the specified value from the player's stress level and updates the client HUD. -Framework.RemoveStress = function(src, value) - print("Not Bridged Yet") - return 0 -end - --- Framework.AddHunger(src, value) --- Adds the specified value from the player's hunger level. -Framework.AddHunger = function(src, value) - -- Im stuck -end - --- Framework.AddThirst(src, value) --- Adds the specified value from the player's thirst level. -Framework.AddThirst = function(src, value) - -- Im stuck -end - -Framework.GetHunger = function(src) - local player = NDCore:getPlayer(src) - local metaData = player.metadata - local hunger = metaData.status.hunger.status - return hunger -end - -Framework.GetThirst = function(src) - local player = NDCore:getPlayer(src) - local metaData = player.metadata - local thirst = metaData.status.thirst.status - return thirst -end - --- Framework.GetPlayerPhone(src) --- Returns the phone number of the player. -Framework.GetPlayerPhone = function(src) - local player = NDCore:getPlayer(src) - return player.phonenumber -end - --- Framework.GetPlayerGang(src) --- Returns the gang name of the player. -Framework.GetPlayerGang = function(src) - print("Not Bridged Yet") - return "none" -end - --- Framework.GetPlayersByJob(jobname) --- returns a table of player sources that have the specified job name. -Framework.GetPlayersByJob = function(job) - local playerList = {} - local players = NDCore:getPlayers("job", job, false) - for playerSource, _ in pairs(players) do - table.insert(playerList, playerSource) - end - return playerList -end - --- Framework.GetPlayerJob(src) --- Returns the job name, label, grade name, and grade level of the player. -Framework.GetPlayerJob = function(src) - local player = NDCore:getPlayer(src) - local jobName, jobInfo = player.getJob() - return jobInfo.name, jobInfo.label, jobInfo.rankName, jobInfo.rank -end - --- Framework.SetPlayerJob(src, name, grade) --- Sets the player's job to the specified name and grade. -Framework.SetPlayerJob = function(src, name, grade) - local player = NDCore:getPlayer(src) - return player.setJob(name, grade) -end - -Framework.ToggleDuty = function(src, status) - print("Not Bridged Yet") - return false -end - --- Framework.AddAccountBalance(src, _type, amount) --- Adds the specified amount to the player's account balance of the specified type. -Framework.AddAccountBalance = function(src, _type, amount) - local player = NDCore:getPlayer(src) - if _type == 'money' then _type = 'cash' end - return player.addMoney(_type, amount, "") -end - --- Framework.RemoveAccountBalance(src, _type, amount) --- Removes the specified amount from the player's account balance of the specified type. -Framework.RemoveAccountBalance = function(src, _type, amount) - local player = NDCore:getPlayer(src) - if _type == 'money' then _type = 'cash' end - return player.deductMoney(_type, amount, "") -end - --- Framework.GetAccountBalance(src, _type) --- Returns the player's account balance of the specified type. -Framework.GetAccountBalance = function(src, _type) - local player = NDCore:getPlayer(src) - if _type == 'money' then _type = 'cash' end - return player.getData(_type) -end - -Framework.GetOwnedVehicles = function(src) - local player = NDCore:getPlayer(src) - local vehicles = NDCore:getVehicles(player.id) - local foundvehicles = {} - for i=1, #vehicles do - local veh = vehicles[i] - table.insert(foundvehicles, {vehicle = veh.properties.model, plate = veh.plate}) - end - return foundvehicles -end - -Framework.RegisterUsableItem = function(itemName, cb) - exports(itemName, function(event, item, inventory, slot, data) - local slotData = exports.ox_inventory:GetSlot(inventory.id, slot) - if event == 'usingItem' then - cb(inventory.id, slotData) - return false - end - end) -end - -RegisterNetEvent("ND:characterUnloaded", function() - TriggerEvent("community_bridge:Server:OnPlayerUnload", source) -end) - -AddEventHandler("playerDropped", function() - local src = source - TriggerEvent("community_bridge:Server:OnPlayerUnload", src) -end) \ No newline at end of file diff --git a/modules/framework/ox_core/client.lua b/modules/framework/ox_core/client.lua deleted file mode 100644 index 8084091..0000000 --- a/modules/framework/ox_core/client.lua +++ /dev/null @@ -1,64 +0,0 @@ -if GetResourceState('ox_core') ~= 'started' then return end - -local Ox = require '@ox_core.lib.init' - -Framework = {} - -Framework.GetPlayerData = function() - -- wip -end - -Framework.GetPlayerMetaData = function(metadata) - -- wip -end - -Framework.GetPlayerIdentifier = function() - local player = Ox.GetPlayer() - return player.stateId -end - -Framework.GetPlayerName = function() - local player = Ox.GetPlayer() - local first = player.get('firstName') - local last = player.get('lastName') - return first, last -end - -Framework.GetPlayerJob = function() - local group, grade, title = Ox.getGroupInfo() - return group, title, title, grade -end - -Framework.HasItem = function() - local itemCount = ox_inventory:Search('count', item) - local hasItem = itemCount ~= 0 - return hasItem -end - -Framework.GetPlayerInventory = function() - return exports.ox_inventory:GetPlayerItems() -end - -Framework.GetIsPlayerDead = function() - -- wip -end - -RegisterNetEvent('ox:playerLoaded', function() - Wait(1500) - FillBridgeTables() - TriggerEvent('community_bridge:Client:OnPlayerLoaded') -end) - - -RegisterNetEvent('ox:playerLogout', function() - ClearClientSideVariables() - TriggerEvent('community_bridge:Client:OnPlayerUnload') -end) - -RegisterNetEvent('ox:setGroup', function(name, grade) - PlayerJobName = name - PlayerJobLabel = name - PlayerJobGradeName = grade - PlayerJobGradeLevel = grade - TriggerEvent('community_bridge:Client:OnPlayerJobUpdate',PlayerJobName, PlayerJobLabel, PlayerJobGradeName, PlayerJobGradeLevel) -end) diff --git a/modules/framework/ox_core/server.lua b/modules/framework/ox_core/server.lua deleted file mode 100644 index 26735c0..0000000 --- a/modules/framework/ox_core/server.lua +++ /dev/null @@ -1,147 +0,0 @@ -if GetResourceState('ox_core') ~= 'started' then return end - -local Ox = require '@ox_core.lib.init' - -Framework = {} - --- Framework.GetPlayerIdentifier(src) --- Returns the citizen ID of the player. -Framework.GetPlayerIdentifier = function(src) - -- wip -end - --- Framework.GetPlayerName(src) --- Returns the first and last name of the player. -Framework.GetPlayerName = function(src) - -- wip -end - --- Framework.GetItem(src, item, metadata) --- Returns a table of items matching the specified name and if passed metadata from the player's inventory. --- returns {name = v.name, count = v.amount, metadata = v.info, slot = v.slot} -Framework.GetItem = function(src, item, _) - -- wip -end - --- Framework.GetItemCount(src, item, _) --- Returns the count of items matching the specified name and if passed metadata from the player's inventory. -Framework.GetItemCount = function(src, item, _) - -- wip -end - --- Framework.GetPlayerInventory(src) --- Returns the entire inventory of the player as a table. --- returns {name = v.name, count = v.amount, _, _} -Framework.GetPlayerInventory = function(src) - -- wip -end - --- Framework.SetMetadata(src, metadata, value) --- Adds the specified metadata key and number value to the player's data. -Framework.SetPlayerMetadata = function(src, metadata, value) - -- wip -end - --- Framework.GetMetadata(src, metadata) --- Gets the specified metadata key and value to the player's data. -Framework.GetPlayerMetadata = function(src, metadata) - -- wip -end - --- defualt esx Available tables are --- identifier, accounts, group, inventory, job, job_grade, loadout, --- metadata, position, firstname, lastname, dateofbirth, sex, height, --- skin, status, is_dead, id, disabled, last_property, created_at, last_seen, --- phone_number, pincode -Framework.GetStatus = function(src, column) - -- wip -end - --- Framework.AddThirst(src, value) --- Adds the specified value from the player's thirst level. -Framework.AddThirst = function(src, value) - -- wip -end - --- Framework.AddHunger(src, value) --- Adds the specified value from the player's hunger level. -Framework.AddHunger = function(src, value) - -- wip -end - -Framework.GetHunger = function(src) - -- wip -end - -Framework.GetThirst = function(src) - -- wip -end - --- Framework.GetPlayerPhone(src) --- Returns the phone number of the player. -Framework.GetPlayerPhone = function(src) - -- wip -end - --- Framework.GetPlayerJob(src) --- Returns the job name, label, grade name, and grade level of the player. -Framework.GetPlayerJob = function(src) - -- wip -end - --- Framework.GetPlayersByJob(jobname) --- returns a table of player sources that have the specified job name. -Framework.GetPlayersByJob = function(job) - -- wip -end - --- Framework.SetPlayerJob(src, name, grade) --- Sets the player's job to the specified name and grade. -Framework.SetPlayerJob = function(src, name, grade) - -- wip -end - -Framework.ToggleDuty = function(src, status) - -- wip -end - --- Framework.AddAccountBalance(src, _type, amount) --- Adds the specified amount to the player's account balance of the specified type. -Framework.AddAccountBalance = function(src, _type, amount) - -- wip -end - --- Framework.RemoveAccountBalance(src, _type, amount) --- Removes the specified amount from the player's account balance of the specified type. -Framework.RemoveAccountBalance = function(src, _type, amount) - -- wip -end - --- Framework.GetAccountBalance(src, _type) --- Returns the player's account balance of the specified type. -Framework.GetAccountBalance = function(src, _type) - -- wip -end - --- Framework.AddItem(src, item, amount, _, _) --- Adds the specified item to the player's inventory. -Framework.AddItem = function(src, item, amount, slot, metadata) - -- wip -end - --- Framework.RemoveItem(src, item, amount, _, _) --- Removes the specified item from the player's inventory. -Framework.RemoveItem = function(src, item, amount, slot, metadata) - -- wip -end - --- Framework.RegisterUsableItem(item, cb) --- Registers a usable item with a callback function. -Framework.RegisterUsableItem = function(itemName, cb) - exports(itemName, function(event, item, inventory, slot, data) - local slotData = exports.ox_inventory:GetSlot(inventory.id, slot) - if event == 'usingItem' then - cb(inventory.id, item, slotData) - end - end) -end \ No newline at end of file From b03e83933fe77c67c38d0e2b6b3b89c9ef27233e Mon Sep 17 00:00:00 2001 From: MrNewb <47620135+MrNewb@users.noreply.github.com> Date: Wed, 26 Feb 2025 01:34:47 -0500 Subject: [PATCH 3/9] feat(Framework.GetPlayerDob) available now on supported cores near you! --- modules/framework/es_extended/client.lua | 6 +++ modules/framework/es_extended/server.lua | 6 +++ modules/framework/qb-core/client.lua | 6 +++ modules/framework/qb-core/server.lua | 51 +++++++++++++++++------- modules/framework/qbx_core/client.lua | 5 +++ modules/framework/qbx_core/server.lua | 5 +++ 6 files changed, 64 insertions(+), 15 deletions(-) diff --git a/modules/framework/es_extended/client.lua b/modules/framework/es_extended/client.lua index 328530c..e905e97 100644 --- a/modules/framework/es_extended/client.lua +++ b/modules/framework/es_extended/client.lua @@ -12,6 +12,12 @@ Framework.GetPlayerData = function() return ESX.PlayerData end +Framework.GetPlayerDob = function() + local playerData = ESX.GetPlayerData() + local dob = playerData.dateofbirth + return dob +end + Framework.GetPlayerMetaData = function(metadata) return ESX.GetPlayerData().metadata[metadata] end diff --git a/modules/framework/es_extended/server.lua b/modules/framework/es_extended/server.lua index 80394fa..4496eee 100644 --- a/modules/framework/es_extended/server.lua +++ b/modules/framework/es_extended/server.lua @@ -8,6 +8,12 @@ Framework.GetFrameworkName = function() return 'es_extended' end +Framework.GetPlayerDob = function(src) + local xPlayer = ESX.GetPlayerFromId(src) + local dob = xPlayer.get("dateofbirth") + return dob +end + -- Framework.GetPlayerIdentifier(src) -- Returns the citizen ID of the player. Framework.GetPlayerIdentifier = function(src) diff --git a/modules/framework/qb-core/client.lua b/modules/framework/qb-core/client.lua index 727787d..67766e8 100644 --- a/modules/framework/qb-core/client.lua +++ b/modules/framework/qb-core/client.lua @@ -13,6 +13,12 @@ Framework.GetPlayerData = function() return QBCore.Functions.GetPlayerData() end +Framework.GetPlayerDob = function() + local player = QBCore.Functions.GetPlayerData() + local playerData = player.PlayerData + return playerData.charinfo.birthdate +end + Framework.GetPlayerMetaData = function(metadata) return QBCore.Functions.GetPlayerData().metadata[metadata] end diff --git a/modules/framework/qb-core/server.lua b/modules/framework/qb-core/server.lua index 7772e2e..6ea0e5d 100644 --- a/modules/framework/qb-core/server.lua +++ b/modules/framework/qb-core/server.lua @@ -12,21 +12,32 @@ end -- Framework.GetPlayerIdentifier(src) -- Returns the citizen ID of the player. Framework.GetPlayerIdentifier = function(src) - return QBCore.Functions.GetPlayer(src).PlayerData.citizenid + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + return playerData.citizenid end -- Framework.GetPlayerName(src) -- Returns the first and last name of the player. Framework.GetPlayerName = function(src) - local playerData = QBCore.Functions.GetPlayer(src).PlayerData + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData return playerData.charinfo.firstname, playerData.charinfo.lastname end +Framework.GetPlayerDob = function(src) + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + return playerData.charinfo.birthdate +end + -- Framework.GetItem(src, item, metadata) -- Returns a table of items matching the specified name and if passed metadata from the player's inventory. -- returns {name = v.name, count = v.amount, metadata = v.info, slot = v.slot} Framework.GetItem = function(src, item, metadata) - local playerInventory = QBCore.Functions.GetPlayer(src).PlayerData.items + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + local playerInventory = playerData.items local repackedTable = {} for _, v in pairs(playerInventory) do if v.name == item and (not metadata or v.info == metadata) then @@ -44,7 +55,9 @@ end -- Framework.GetItemCount(src, item, metadata) -- Returns the count of items matching the specified name and if passed metadata from the player's inventory. Framework.GetItemCount = function(src, item, metadata) - local playerInventory = QBCore.Functions.GetPlayer(src).PlayerData.items + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + local playerInventory = playerData.items local count = 0 for _, v in pairs(playerInventory) do if v.name == item and (not metadata or v.info == metadata) then @@ -58,9 +71,11 @@ end -- Returns the entire inventory of the player as a table. -- returns {name = v.name, count = v.amount, metadata = v.info, slot = v.slot} Framework.GetPlayerInventory = function(src) - local playerItems = QBCore.Functions.GetPlayer(src).PlayerData.items + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + local playerInventory = playerData.items local repackedTable = {} - for _, v in pairs(playerItems) do + for _, v in pairs(playerInventory) do table.insert(repackedTable, { name = v.name, count = v.amount, @@ -72,9 +87,11 @@ Framework.GetPlayerInventory = function(src) end Framework.GetItemBySlot = function(src, slot) - local playerItems = QBCore.Functions.GetPlayer(src).PlayerData.items + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + local playerInventory = playerData.items local repack = {} - for _, v in pairs(playerItems) do + for _, v in pairs(playerInventory) do if v.slot == slot then return { name = v.name, @@ -159,23 +176,26 @@ Framework.GetHunger = function(src) end Framework.GetThirst = function(src) - local player = QBCore.Functions.GetPlayer(src).PlayerData - local newThirst = (player.metadata.thirst or 0) + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + local newThirst = (playerData.metadata.thirst or 0) return newThirst end -- Framework.GetPlayerPhone(src) -- Returns the phone number of the player. Framework.GetPlayerPhone = function(src) - local playerData = QBCore.Functions.GetPlayer(src).PlayerData + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData return playerData.charinfo.phone end -- Framework.GetPlayerGang(src) -- Returns the gang name of the player. Framework.GetPlayerGang = function(src) - local player = QBCore.Functions.GetPlayer(src).PlayerData - return player.gang.name + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + return playerData.gang.name end -- Framework.GetPlayersByJob(jobname) @@ -195,8 +215,9 @@ end -- Framework.GetPlayerJob(src) -- Returns the job name, label, grade name, and grade level of the player. Framework.GetPlayerJob = function(src) - local player = QBCore.Functions.GetPlayer(src).PlayerData - return player.job.name, player.job.label, player.job.grade.name, player.job.grade.level + local player = QBCore.Functions.GetPlayer(src) + local playerData = player.PlayerData + return playerData.job.name, playerData.job.label, playerData.job.grade.name, playerData.job.grade.level end -- Framework.SetPlayerJob(src, name, grade) diff --git a/modules/framework/qbx_core/client.lua b/modules/framework/qbx_core/client.lua index f11dcd8..5d17c3f 100644 --- a/modules/framework/qbx_core/client.lua +++ b/modules/framework/qbx_core/client.lua @@ -12,6 +12,11 @@ Framework.GetPlayerData = function() return QBox.GetPlayerData() end +Framework.GetPlayerDob = function() + local playerData = QBox.GetPlayerData() + return playerData.charinfo.birthdate +end + Framework.GetPlayerMetaData = function(metadata) local playerData = QBox.GetPlayerData() return playerData.metadata[metadata] diff --git a/modules/framework/qbx_core/server.lua b/modules/framework/qbx_core/server.lua index 850cc93..7790468 100644 --- a/modules/framework/qbx_core/server.lua +++ b/modules/framework/qbx_core/server.lua @@ -8,6 +8,11 @@ Framework.GetFrameworkName = function() return 'qbx_core' end +Framework.GetPlayerDob = function(src) + local playerData = QBox:GetPlayer(src).PlayerData + return playerData.charinfo.birthdate +end + -- Framework.GetPlayerIdentifier(src) -- Returns the citizen ID of the player. Framework.GetPlayerIdentifier = function(src) From 4c86b8074b625c67327bcb4e12621d068c30c469 Mon Sep 17 00:00:00 2001 From: gononono64 <96976330+gononono64@users.noreply.github.com> Date: Wed, 26 Feb 2025 01:18:49 -0600 Subject: [PATCH 4/9] point 1 for crowley ... 20 for newb --- lib/shared/tables.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/shared/tables.lua b/lib/shared/tables.lua index 148db7f..26c5888 100644 --- a/lib/shared/tables.lua +++ b/lib/shared/tables.lua @@ -63,7 +63,9 @@ end Table.FindFirstUnoccupiedSlot = function(tbl) local occupiedSlots = {} for _, v in pairs(tbl) do - occupiedSlots[v.slot] = true + if v.slot then + occupiedSlots[v.slot] = true + end end for i = 1, BridgeServerConfig.MaxInventorySlots do if not occupiedSlots[i] then From 35dffa3ee17ff5c20fdf8464481c949d5e9df9a0 Mon Sep 17 00:00:00 2001 From: MrNewb <47620135+MrNewb@users.noreply.github.com> Date: Wed, 26 Feb 2025 03:06:41 -0500 Subject: [PATCH 5/9] hope it works --- modules/inventory/core_inventory/client.lua | 31 ++++++++ modules/inventory/core_inventory/server.lua | 83 +++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 modules/inventory/core_inventory/client.lua create mode 100644 modules/inventory/core_inventory/server.lua diff --git a/modules/inventory/core_inventory/client.lua b/modules/inventory/core_inventory/client.lua new file mode 100644 index 0000000..46301cf --- /dev/null +++ b/modules/inventory/core_inventory/client.lua @@ -0,0 +1,31 @@ +if GetResourceState('core_inventory') ~= 'started' then return end + +Inventory = Inventory or {} + +local core = exports.core_inventory + +Inventory = Inventory or {} + +Inventory.HasItem = function(item) + return core:hasItem(item, 1) +end + +Inventory.GetImagePath = function(item) + local file = LoadResourceFile("core_inventory", string.format("html/img/%s.png", item)) + local imagePath = file and string.format("nui://core_inventory/html/img/%s.png", item) + return imagePath or "https://avatars.githubusercontent.com/u/47620135" +end + +Inventory.GetPlayerInventory = function() + local playerItems = core:getInventory() + local repackedTable = {} + for _, v in pairs(playerItems) do + table.insert(repackedTable, { + name = v.name, + count = v.count, + metadata = v.metadata, + slot = v.slot, + }) + end + return repackedTable +end \ No newline at end of file diff --git a/modules/inventory/core_inventory/server.lua b/modules/inventory/core_inventory/server.lua new file mode 100644 index 0000000..eba94a3 --- /dev/null +++ b/modules/inventory/core_inventory/server.lua @@ -0,0 +1,83 @@ +if GetResourceState('core_inventory') ~= 'started' then return end + +Inventory = Inventory or {} + +local core = exports.core_inventory + +Inventory.GetPlayerInventory = function(src) + local playerItems = core:getInventory(src) + local repackedTable = {} + for _, v in pairs(playerItems) do + table.insert(repackedTable, { + name = v.name, + count = v.count, + metadata = v.metadata, + slot = v.slot, + }) + end + return repackedTable +end + +Inventory.GetImagePath = function(item) + local file = LoadResourceFile("core_inventory", string.format("html/img/%s.png", item)) + local imagePath = file and string.format("nui://core_inventory/html/img/%s.png", item) + return imagePath or "https://avatars.githubusercontent.com/u/47620135" +end + +Inventory.SetMetadata = function(src, item, slot, metadata) + core:SetMetadata(src, slot, metadata) +end + +Inventory.AddItem = function(src, item, count, slot, metadata) + local success = core:addItem(src, item, count, metadata, 'content') + if success then + TriggerClientEvent('core_inventory:client:notification', src, item, 'add', count) + TriggerClientEvent("community_bridge:client:inventory:updateInventory", src, {action = "add", item = item, count = count, slot = slot, metadata = metadata}) + end + return success +end + +Inventory.GetItemBySlot = function(src, slot) + return core:getItemBySlot(src, slot) +end + +Inventory.RemoveItem = function(src, item, count, slot, metadata) + local success = false + if slot then + local itemData = Inventory.GetItemBySlot(src, slot) + if itemData then success = core:removeItemExact(src, itemData.id, count) end + else + success = core:removeItem(src, item, count, metadata) + end + if not success then return false end + TriggerClientEvent('core_inventory:client:notification', src, item, 'remove', count) + TriggerClientEvent("community_bridge:client:inventory:updateInventory", src, {action = "remove", item = item, count = count, slot = slot, metadata = metadata}) + return success +end + +Inventory.GetItemCount = function(src, item, metadata) + return core:getItemCount(src, item) +end + +Inventory.CanCarryItem = function(src, item, count) + return core:canCarry(src, item, count) +end + +Inventory.UpdatePlate = function(oldplate, newplate) + -- have no clue if this will work but fingers crossed + local queries = { + 'UPDATE coreinventories SET name = @newplate WHERE name = @oldplate', + 'UPDATE coreinventories SET name = @newplate WHERE name = @glovebox_oldplate', + 'UPDATE coreinventories SET name = @newplate WHERE name = @trunk_oldplate', + } + local values = { + newplate = newplate, + oldplate = oldplate, + glovebox_oldplate = 'glovebox-' .. oldplate, + trunk_oldplate = 'trunk-' .. oldplate + } + MySQL.transaction.await(queries, values) + if GetResourceState('jg-mechanic') ~= 'started' then return true end + exports["jg-mechanic"]:vehiclePlateUpdated(oldplate, newplate) + return true +end \ No newline at end of file From d47017f14e4590c339facae6a9443a1f94098554 Mon Sep 17 00:00:00 2001 From: MrNewb <47620135+MrNewb@users.noreply.github.com> Date: Wed, 26 Feb 2025 03:15:29 -0500 Subject: [PATCH 6/9] fuck this inventory --- modules/inventory/core_inventory/client.lua | 18 ------- modules/inventory/core_inventory/server.lua | 53 --------------------- 2 files changed, 71 deletions(-) diff --git a/modules/inventory/core_inventory/client.lua b/modules/inventory/core_inventory/client.lua index 46301cf..206e39e 100644 --- a/modules/inventory/core_inventory/client.lua +++ b/modules/inventory/core_inventory/client.lua @@ -6,26 +6,8 @@ local core = exports.core_inventory Inventory = Inventory or {} -Inventory.HasItem = function(item) - return core:hasItem(item, 1) -end - Inventory.GetImagePath = function(item) local file = LoadResourceFile("core_inventory", string.format("html/img/%s.png", item)) local imagePath = file and string.format("nui://core_inventory/html/img/%s.png", item) return imagePath or "https://avatars.githubusercontent.com/u/47620135" -end - -Inventory.GetPlayerInventory = function() - local playerItems = core:getInventory() - local repackedTable = {} - for _, v in pairs(playerItems) do - table.insert(repackedTable, { - name = v.name, - count = v.count, - metadata = v.metadata, - slot = v.slot, - }) - end - return repackedTable end \ No newline at end of file diff --git a/modules/inventory/core_inventory/server.lua b/modules/inventory/core_inventory/server.lua index eba94a3..6ff7faa 100644 --- a/modules/inventory/core_inventory/server.lua +++ b/modules/inventory/core_inventory/server.lua @@ -4,65 +4,12 @@ Inventory = Inventory or {} local core = exports.core_inventory -Inventory.GetPlayerInventory = function(src) - local playerItems = core:getInventory(src) - local repackedTable = {} - for _, v in pairs(playerItems) do - table.insert(repackedTable, { - name = v.name, - count = v.count, - metadata = v.metadata, - slot = v.slot, - }) - end - return repackedTable -end - Inventory.GetImagePath = function(item) local file = LoadResourceFile("core_inventory", string.format("html/img/%s.png", item)) local imagePath = file and string.format("nui://core_inventory/html/img/%s.png", item) return imagePath or "https://avatars.githubusercontent.com/u/47620135" end -Inventory.SetMetadata = function(src, item, slot, metadata) - core:SetMetadata(src, slot, metadata) -end - -Inventory.AddItem = function(src, item, count, slot, metadata) - local success = core:addItem(src, item, count, metadata, 'content') - if success then - TriggerClientEvent('core_inventory:client:notification', src, item, 'add', count) - TriggerClientEvent("community_bridge:client:inventory:updateInventory", src, {action = "add", item = item, count = count, slot = slot, metadata = metadata}) - end - return success -end - -Inventory.GetItemBySlot = function(src, slot) - return core:getItemBySlot(src, slot) -end - -Inventory.RemoveItem = function(src, item, count, slot, metadata) - local success = false - if slot then - local itemData = Inventory.GetItemBySlot(src, slot) - if itemData then success = core:removeItemExact(src, itemData.id, count) end - else - success = core:removeItem(src, item, count, metadata) - end - if not success then return false end - TriggerClientEvent('core_inventory:client:notification', src, item, 'remove', count) - TriggerClientEvent("community_bridge:client:inventory:updateInventory", src, {action = "remove", item = item, count = count, slot = slot, metadata = metadata}) - return success -end - -Inventory.GetItemCount = function(src, item, metadata) - return core:getItemCount(src, item) -end - -Inventory.CanCarryItem = function(src, item, count) - return core:canCarry(src, item, count) -end - Inventory.UpdatePlate = function(oldplate, newplate) -- have no clue if this will work but fingers crossed local queries = { From 337832d21eb2e36b357cdc0c93c94b7cde00b545 Mon Sep 17 00:00:00 2001 From: gononono64 <96976330+gononono64@users.noreply.github.com> Date: Wed, 26 Feb 2025 12:55:16 -0600 Subject: [PATCH 7/9] added job to qb-target from .groups qb-target was missing conversion for ox format to qb format for .job. Added --- modules/target/qb-target/client.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/target/qb-target/client.lua b/modules/target/qb-target/client.lua index f747694..72a7001 100644 --- a/modules/target/qb-target/client.lua +++ b/modules/target/qb-target/client.lua @@ -23,6 +23,7 @@ Target.FixOptions = function(options) return action(entityOrData) end options[k].action = select + options[k].job = v.job or v.groups end return options end From e13c623d4bb85e80a8cdc05e5fe385f247992726 Mon Sep 17 00:00:00 2001 From: gononono64 <96976330+gononono64@users.noreply.github.com> Date: Fri, 28 Feb 2025 16:08:18 -0600 Subject: [PATCH 8/9] promise for dialogue --- modules/dialogue/default/client/client.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/dialogue/default/client/client.lua b/modules/dialogue/default/client/client.lua index f74d175..7b3deed 100644 --- a/modules/dialogue/default/client/client.lua +++ b/modules/dialogue/default/client/client.lua @@ -81,12 +81,16 @@ function Dialogue.Open( name, dialogue, characterOptions, dialogueOptions, onSel }) SetNuiFocus(true, true) + + local prom = promise.new() local wrappedFunction = function(selected) SetNuiFocus(false, false) Dialogue.Close(name) - onSelected(selected) + if onSelected then onSelected(selected) end + prom:resolve(selected) end promises[name] = wrappedFunction + return Citizen.Await(prom) end From 2335d645cd130475b886917298f31d6dd559a418 Mon Sep 17 00:00:00 2001 From: MrNewb <47620135+MrNewb@users.noreply.github.com> Date: Sat, 1 Mar 2025 15:58:57 -0500 Subject: [PATCH 9/9] Update fxmanifest.lua --- fxmanifest.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fxmanifest.lua b/fxmanifest.lua index 3007408..4ac2de0 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -4,7 +4,7 @@ lua54 'yes' use_experimental_fxv2_oal 'yes' author 'The Order of the Sacred Framework' description 'A bridge made for the community to use as a base for their own projects. This bridge will allow a single format to work with nearly all commonly used systems while still offering expandability.' -version '0.3.11' +version '0.3.12' shared_scripts { '@ox_lib/init.lua',