×
King Maps
What's new

Aleks_

Gold Elite
Joined
Jun 24, 2021
Messages
55
Reaction score
157
Points
246
Location
Belfast
[PAID] Nopixel 4.0 Inventory System

Framework: QBCore & np-base

Contact: Ghost.#4736 or ghost_fmdev



Full QBCore framework compatibility
Modern SolidJS based UI with drag & drop interface
NoPixel 4.0 style item decay system with configurable decay rates
Specialized pocket slots for important items (ID, phone, tablet)
Physical 3D items appear in world when dropped
Optimized drop system with automatic ground item cleanup
Vehicle trunk & glovebox integration
Property/stash storage systems
Complete item decay exemption system for specific items
Comprehensive exports API for developers
Well structured TypeScript/JSX codebase
Backpack system for extra storage
Quality degradation affecting item functionality
Fully open-source and optimized for server performance
Always being improved & updated and 24/7 support

Preview Below:

 

xorathsad

Bronze Elite
Joined
Sep 20, 2021
Messages
28
Reaction score
3
Points
166
Location
Romania
scam, do not buy, it's actually NP code, not inspired, won't work.
 

Attachments

  • Screenshot 2025-05-06 233412.png
    Screenshot 2025-05-06 233412.png
    9.8 KB · Views: 29

Aleks_

Gold Elite
Joined
Jun 24, 2021
Messages
55
Reaction score
157
Points
246
Location
Belfast
scam, do not buy, it's actually NP code, not inspired, won't work.
Or maybe you are just incapable of setting up a new system. Don't buy scripts if you don't know anything about scripting :)
 

xorathsad

Bronze Elite
Joined
Sep 20, 2021
Messages
28
Reaction score
3
Points
166
Location
Romania
Yea, you are absolutely correct, I'm sorry, let me rephrase, it will not work with any known frameworks unless you are ready to put some hard work to it, It will work with np framework staring from 3.2 - 3.5 and upwards. Most of the essential code is obfuscated, quite a few missing dependencies and even if you manage to build the UI and the missing JS scripts as in client and server JS, this inventory won't integrate smoothly withing qbcore environment, due to it's name (qb-core has triggers sent to qb-inventory other scripts will search for qb-inventory) and if you think about replacing the name of the resource to qb-inventory it will still not work because all the triggers inside the inventory are actually np based (see the code examples from the "inspired resource"
Code:
async function displayActionbar(state: any) {
    await getActionbarItems()
    SendNUIMessage({
        event: 'inventory:toggleActionbar'
    });

    TriggerEvent('np-weapons:client:openActionBar')
}
We have no np-weapons we have qb-weapons, meaning that once you will build your client.js file your weapons wont save any ammunition, attachaments, skins, tints etc. If you grab your weapon from your inventory, you will have no functionality :)
Code:
    if (WeaponHash) {
        if (CurItemQuality > 0) {
            console.log(`[DEBUG] Equip WeaponHash: ${JSON.stringify(WeaponHash)}`);
            TriggerEvent('equipWeaponID', WeaponHash, ItemInfo.information, ItemInfo.id);
        }
        justUsed = false;
        useCounter = 0;
        lastCounter = 0;
        setTimeout(() => {
            TriggerEvent('AttachWeapons');
            TriggerEvent('np-hud:armed', 100);
        }, 1500);
        return;
    }
Here is more:
Code:
on('inventory:openTrunk', async(Parameters: any, Entity: any) => {
    inTrunk = true
    trunkPlate = GetVehicleNumberPlateText(Entity)

    RPC.execute('inventory:additionalInventoriesClear')
    const Inventory = await RPC.execute('inventory:getInventories', IsPedInVehicle(PlayerPedId(), GetVehiclePedIsIn(PlayerPedId(), false), false), GetVehicleNumberPlateText(GetVehiclePedIsIn(PlayerPedId(), false)), inTrunk, trunkPlate, await GetGroundLevel(GetEntityCoords(PlayerPedId()), "default"))

    SendNUIMessage({
        Inventory: Inventory,
    })

    SendNUIMessage({
        show: true,
        PlayerData: {
            character: {
                id: global.exports['isPed'].isPed('cid'),
                name: global.exports['isPed'].isPed('fullname'),
                cash: 0,
                personalVehicle: 'N/A',
                home: 'N/A',
                phone: global.exports['isPed'].isPed("phone_number")
            },
 
            settings: {
                holdToDrag: GetResourceKvpInt('inventory:holdToDrag'),
                shiftQuickMove: GetResourceKvpInt('inventory:shiftQuickMove')
            }
        }
    });

    global.exports.focusmanager.SetUIFocus(true, true)
})

export function trunkState() {
    inTrunk = false
}
Judging by this piece of code, without the resource isPed, you won't be able to display your phone number in the inventory, your characters full name and so on. But you did a little overide in the Inventory.ts which will handle that:
Code:
import { inTrunk, trunkPlate } from "./Trunk";
import { GetGroundLevel } from "../../client/controllers/Drops";
import { setClientInventory } from './../controllers/Exports'

RegisterCommand('giveitem', async(source,args) => { // example /giveitem [AMOUNT] phone (REMOVE BEFORE RELEASE THIS IS FOR TESTING)
    let data = {
        Item : args[0].toString(),
        Amount : args[1] || 1,
    }
    TriggerEvent('inventory:addItem', data)
} , false)

RegisterCommand('+inventory', async() => {
    const QBCore = exports['qb-core'].GetCoreObject()

    const playerData = QBCore.Functions.GetPlayerData();

    if (!playerData || !playerData.citizenid) {
        console.error("Critical Error: Player data not found!");
        return;
    }

    const characterId = playerData.citizenid;
    const fullname = `${playerData.charinfo.firstname} ${playerData.charinfo.lastname}`;
    const cash = playerData.money?.cash || 0;
    const phoneNumber = playerData.charinfo.phone || "N/A";

    let formattedPhoneNum = "N/A";
    if (phoneNumber !== "N/A") {
        formattedPhoneNum = `+1 (${phoneNumber.substring(0, 3)})-${phoneNumber.substring(3, 6)}-${phoneNumber.substring(6)}`;
    }

    RPC.execute('inventory:additionalInventoriesClear')

    const Inventory = await RPC.execute('inventory:getInventories', IsPedInVehicle(PlayerPedId(), GetVehiclePedIsIn(PlayerPedId(), false), false), GetVehicleNumberPlateText(GetVehiclePedIsIn(PlayerPedId(), false)), inTrunk, trunkPlate, await GetGroundLevel(GetEntityCoords(PlayerPedId()), "default"))

    setClientInventory(Array.isArray(Inventory) ? Inventory : [Inventory]);

    SendNUIMessage({
        Inventory: Inventory,
    });

    SendNUIMessage({
        show: true,
        PlayerData: {
            character: {
                id: characterId,
                name: fullname,
                cash: cash,
                personalVehicle: "Unknown", // You can add a vehicle here if you have a vehicle system.
                home: 'Unknown', // You can add a home here if you have a housing system.
                phone: formattedPhoneNum
            },
 
            settings: {
                holdToDrag: GetResourceKvpInt('inventory:holdToDrag'),
                shiftQuickMove: GetResourceKvpInt('inventory:shiftQuickMove')
            }
        }
    });

    global.exports.focusmanager.SetUIFocus(true, true)
}, false)

RegisterCommand('-inventory', async() => {}, false)

global.exports['qb-keybinds'].registerKeyMapping('inventory', 'Inventory', 'Open Inventory', '+inventory', '-inventory', 'K', true);

onNet('inventory:addItem', async(data: any) => {
    emit('inventory:sendNotification', data.Item, data.Amount, 'Added')
    RPC.execute('inventory:addItem', data)
})

Just to be clear, you didn't offered the correct way of building the inventory you skipped a few details, however I am a cloud developer for about 20+ years, I breath and live in JS/TS world, building some boilerplate it's a child play my friend. Building it is not the issue, the actual functionality is. You have added some functionality to it, by overiding the origianl NP logic. just to make it look like the actual resource is usable, but it's not 100% operational and WILL NOT work 100% out of the box with qbcore ! Maybe other incapable people like me, would like to have a look at "your resource" code so here it is ! €50 not that much for me, but it's sad to scam people and lie about it, at least own it like a bitch, have some balls :)



For anybody looking to build the actual inventory here are the actual steps:
  1. cd inventory
  2. npm install
  3. cd typescript
  4. npm install
  5. npm run build (if you get some errors about "sh: line 1: tsc: command not found" just type in "npm install --save-dev typescript" then retry npm run build
  6. cd ../web
  7. npm run build

Make sure you open each and every TS file and rewrite the code that is related to NL and make sure it's compatible with QB. You have to rebuild everything each time you modify the TS files. You actually don't need the other resources if you rewrite the TS code to adapt it to QBCore, those were added just to make it work :) Good luck !
 
Last edited:
Top