Modifications

Remember that this resource has verified DMCA protection, and its illegal use or distribution could imply a claim for protection of Title 17 of Chapter 512 (c) (3) of the Digital Millennium Copyright Act

Lock inventory

Quasar Inventory brings a system to block the use of inventory in a simple and fast way, here we will add an event to block and another to unblock
CLIENT
SERVER
1
TriggerEvent('canUseInventoryAndHotbar:toggle', true) -- Enable
2
TriggerEvent('canUseInventoryAndHotbar:toggle', false) -- Disable
1
TriggerEvent('canHandsUp:toggle', true) -- Enable
2
TriggerEvent('canHandsUp:toggle', false) -- Disable
In the following example we will add an inventory lock to a basic progressbar
1
TriggerEvent('canUseInventoryAndHotbar:toggle', false) -- Disable
2
QS.Progressbar("combine_anim", animText, animTimeout, false, true, {
3
disableMovement = false,
4
disableCarMovement = true,
5
disableMouse = false,
6
disableCombat = true,
7
}, {
8
animDict = aDict,
9
anim = aLib,
10
flags = 16,
11
}, {}, {}, function() -- Done
12
TriggerEvent('canUseInventoryAndHotbar:toggle', true) -- Enable
13
StopAnimTask(PlayerPedId(), aDict, aLib, 1.0)
14
TriggerServerEvent('inventory:server:combineItem', combineData.reward, data.requiredItem, data.usedItem)
15
end, function() -- Cancel
16
TriggerEvent('canUseInventoryAndHotbar:toggle', true) -- Enable
17
StopAnimTask(PlayerPedId(), aDict, aLib, 1.0)
18
end)

Remove items

This part is for you to learn how to remove items from the inventory such as after death with esx_ambulancejob or with another script that your imagination allows you to modify
We will use esx_ambulancejob as an example, but you can apply the same wherever you want
Whenever we are going to export QS events in another resource, we must add the export of qs-core in line 1, in this case of esx_ambulancejob/server/main.lua
../server/main.lua
1
QS = nil
2
TriggerEvent('qs-core:getSharedObject', function(library) QS = library end)
In the following example, we will remove items from our inventory upon death by looking for the esx_ambulancejob:removeItemsAfterRPDeath event within esx_ambulancejob/server/main.lua
Inside this event, we will declare a GetPlayerFromId as QS, so that it takes the data and information from qs-core, as in the following example
../server/main.lua
1
ESX.RegisterServerCallback('esx_ambulancejob:removeItemsAfterRPDeath', function(source, cb)
2
local xPlayer = ESX.GetPlayerFromId(source)
3
local qPlayer = QS.GetPlayerFromId(source)
4
5
if Config.RemoveCashAfterRPDeath then
6
if xPlayer.getMoney() > 0 then
7
xPlayer.removeMoney(xPlayer.getMoney())
8
end
9
10
if xPlayer.getAccount('black_money').money > 0 then
11
xPlayer.removeAccountMoney('black_money', xPlayer.getAccount('black_money').money)
12
end
13
end
14
15
if Config.RemoveItemsAfterRPDeath then
16
qPlayer.ClearInventoryItems()
17
end
18
19
if Config.RemoveWeaponsAfterRPDeath then
20
qPlayer.ClearInventoryWeapons()
21
end
22
23
cb()
24
end)
Value
Information
ClearInventory
Remove items and weapons
ClearInventoryItems
Remove only the items
ClearInventoryWeapons
Remove only the weapons

Stash system

Quasar Inventory has stashes of all sizes and types, for this we can choose the easy way and create one in the qs-shops configuration, there we can add jobs, sizes and extremely advanced things for each stash
But most likely you will need to add these stashes within other scripts, such as in a housing system or in a job script, so for that we created this section with a small stashes installation guide

Basic integration

To create a basic stash, we need to look for the event where the stash of your external resource is located, in this example we will use esx_property, we look for the part where the inventory is executed and we will enter the following code, which we must vary the stash identifier according to the resource , in this case it is only owner
1
TriggerServerEvent ("inventory:server:OpenInventory", "stash", "Stash_"..owner)
2
TriggerEvent ("inventory:client:SetCurrentStash", "Stash_"..owner)
If you're having trouble finding the stash id, simply add your player id as the stash id like so, example: ESX.GetPlayerData().identifier
1
TriggerServerEvent ("inventory:server:OpenInventory", "stash", "Stash_"..ESX.GetPlayerData().identifier)
2
TriggerEvent ("inventory:client:SetCurrentStash", "Stash_"..ESX.GetPlayerData().identifier)
If you do not have the necessary skills ask for help in the support channel or get a developer with basic Lua experience to correctly execute this step.

Advanced integration

For the most advanced and looking to go further than anyone else, they have this option to add advanced stashes, with larger space levels and slots and better configuration
To execute this event, we will do the same as in step Basic integration, but integrating the following full event
1
local other = {}
2
other.maxweight = 10000 -- Custom weight statsh.
3
other.slots = 50 -- Custom slots spaces.
4
TriggerServerEvent("inventory:server:OpenInventory", "stash", "Stash_"..lockerID, other)
5
TriggerEvent("inventory:client:SetCurrentStash", "Stash_"..lockerID)
You can use the first step of Basic integration as a reference to execute this function correctly, the only change is the number of lines that it brings.

Search player inventory

Quasar Inventory includes a special event to perform this job, that is, it will be useful for police work or even for your gang factions, you are free to add it wherever you want
The event is for the client side, and it is simply this
1
TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", GetPlayerServerId(closestPlayer))
This code must be implemented within the event with which you plan to steal or search another player's inventory, as in the following example
1
RegisterNetEvent('event:search')
2
AddEventHandler('event:search', function(closestPlayer)
3
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
4
if closestPlayer ~= -1 and closestDistance <= 3.0 then
5
TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", GetPlayerServerId(closestPlayer))
6
end
7
end)

Give metadata items

From version 1.4.5 an event was added to give items with metadata and information to the items automatically and easily
The event is simple, but you will only be able to use it on the server side
1
TriggerEvent('qs-inventory:addItem', source, 'lockpick', 1, false, {
2
Firstname = 'Quasar',
3
Lastname = 'Store',
4
showAllDescriptions = true
5
})
You can run a test by command using the following example
1
RegisterCommand('metadatatest', function(source)
2
TriggerEvent('qs-inventory:addItem', source, 'lockpick', 1, false, {
3
Firstname = 'Quasar',
4
Lastname = 'Store',
5
showAllDescriptions = true
6
})
7
end)

Add webhooks

To provide greater security to the owners of the servers, a webhook system was recently integrated that will notify you when a house is created, bought or deleted on your server, for this we can find everything in config_discord.lua
To create our webhook we can follow the guide below by clicking here

Add-on Weapons

For this example we will use the add-on weapon MK18
  • Go to qs-core and add the item in qs-core/shared/items.lua
1
["weapon_mk18"] = {
2
["name"] = "weapon_mk18",
3
["label"] = "MK18",
4
["weight"] = 1000,
5
["type"] = "weapon",
6
["ammotype"] = "AMMO_PISTOL",
7
["image"] = "weapon_mk18.png",
8
["unique"] = true,
9
["useable"] = false,
10
["combinable"] = nil,
11
["description"] = "It does not contain a description."
12
},
  • Go to qs-core and add the weoib in qs-core/config/config_weapons.lua
1
[GetHashKey("weapon_mk18")] = {
2
["name"] = "weapon_mk18",
3
["label"] = "MK18",
4
["weight"] = 1000,
5
["type"] = "weapon",
6
["ammotype"] = nil,
7
["image"] = "weapon_mk18.png",
8
["unique"] = true,
9
["useable"] = false,
10
["description"] = "It does not contain a description."
11
},
1
Config.UseMultiplier = {
2
["weapon_mk18"] = 0.15,
3
}
1
Config.DurabilityMultiplier = {
2
["weapon_mk18"] = 0.15,
3
}
1
Config.WeaponAttachments = {
2
["WEAPON_MK18"] = {
3
["scope"] = {
4
component = "COMPONENT_MK18_SCOPE_01",
5
label = "Scope 1",
6
item = "mk18_scope1",
7
},
8
["scope2"] = {
9
component = "COMPONENT_MK18_SCOPE_02",
10
label = "Scope 2",
11
item = "mk18_scope2",
12
},
13
["scope3"] = {
14
component = "COMPONENT_MK18_SCOPE_03",
15
label = "Scope 3",
16
item = "mk18_scope3",
17
},
18
["scope4"] = {
19
component = "COMPONENT_MK18_SCOPE_04",
20
label = "Scope 4",
21
item = "mk18_scope4",
22
},
23
["scope5"] = {
24
component = "COMPONENT_MK18_SCOPE_05",
25
label = "Scope 5",
26
item = "mk18_scope5",
27
},
28
["scope6"] = {
29
component = "COMPONENT_MK18_SCOPE_06",
30
label = "Scope 6",
31
item = "mk18_scope6",
32
},
33
["scope7"] = {
34
component = "COMPONENT_MK18_SCOPE_07",
35
label = "Scope 7",
36
item = "mk18_scope7",
37
},
38
["scope8"] = {
39
component = "COMPONENT_MK18_SCOPE_08",
40
label = "Scope 8",
41
item = "mk18_scope8",
42
},
43
["scope9"] = {
44
component = "COMPONENT_MK18_SCOPE_09",
45
label = "Scope 9",
46
item = "mk18_scope9",
47
},
48
49
-- Suppresoors
50
["suppressor"] = {
51
component = "COMPONENT_MK18_SUPPRESSOR_01",
52
label = "Suppressor 1",
53
item = "mk18_supp1",
54
},
55
["suppressor2"] = {
56
component = "COMPONENT_MK18_SUPPRESSOR_02",
57
label = "Suppressor 2",
58
item = "mk18_supp2",
59
},
60
["suppressor3"] = {
61
component = "COMPONENT_MK18_SUPPRESSOR_03",
62
label = "Suppressor 3",
63
item = "mk18_supp3",
64
},
65
["suppressor4"] = {
66
component = "COMPONENT_MK18_SUPPRESSOR_04",
67
label = "Suppressor 4",
68
item = "mk18_supp4",
69
},
70
["suppressor5"] = {
71
component = "COMPONENT_MK18_SUPPRESSOR_05",
72
label = "Suppressor 5",
73
item = "mk18_supp5",
74
},
75
["suppressor6"] = {
76
component = "COMPONENT_MK18_SUPPRESSOR_06",
77
label = "Suppressor 6",
78
item = "mk18_supp6",
79
},
80
81
["suppressor7"] = {
82
component = "COMPONENT_MK18_GRIP_01",
83
label = "Grip 1",
84
item = "mk18_grip1",
85
},
86
87
["suppressor8"] = {
88
component = "COMPONENT_MK18_STOCK_01",
89
label = "Stock 1",
90
item = "mk18_stock1",
91
},
92
93
["tint"] = {
94
component = "COMPONENT_MK18_FRAME_01",
95
label = "Frame 1",
96
item = "mk18_frame1",
97
},
98
["tint2"] = {
99
component = "COMPONENT_MK18_FRAME_02",
100
label = "Frame 2",
101
item = "mk18_frame2",
102
},
103
["tint3"] = {
104
component = "COMPONENT_MK18_FRAME_03",
105
label = "Frame 3",
106
item = "mk18_frame3",
107
},
108
--- Flashlight
109
110
["flashlight"] = {
111
component = "COMPONENT_MK18_FLASH_01",
112
label = "Flash 1",
113
item = "mk18_flash1",
114
},
115
["flashlight2"] = {
116
component = "COMPONENT_MK18_FLASH_02",
117
label = "Flash 2",
118
item = "mk18_flash2",
119
},
120
["flashlight3"] = {
121
component = "COMPONENT_MK18_FLASH_03",
122
label = "Flash 3",
123
item = "mk18_flash3",
124
},
125
["flashlight4"] = {
126
component = "COMPONENT_MK18_FLASH_04",
127
label = "Flash 4",
128
item = "mk18_flash4",
129
},
130
["flashlight5"] = {
131
component = "COMPONENT_MK18_FLASH_05",
132
label = "Flash 5",
133
item = "mk18_flash5",
134
},
135
["flashlight6"] = {
136
component = "COMPONENT_MK18_FLASH_06",
137
label = "Flash 6",
138
item = "mk18_flash6",
139
},
140
["flashlight7"] = {
141
component = "COMPONENT_MK18_FLASH_07",
142
label = "Flash 7",
143
item = "mk18_flash7",
144
},
145
146
["clip1"] = {
147
component = "COMPONENT_MK18_CLIP_01",
148
label = "Clip 1",
149
item = "mk18_clip1",
150
},
151
["clip2"] = {
152
component = "COMPONENT_MK18_CLIP_02",
153
label = "Clip 2",
154
item = "mk18_clip2",
155
},
156
["clip3"] = {
157
component = "COMPONENT_MK18_CLIP_03",
158
label = "Clip 3",
159
item = "mk18_clip3",
160
},
161
["clip4"] = {
162
component = "COMPONENT_MK18_CLIP_04",
163
label = "Clip 4",
164
item = "mk18_clip4",
165
},
166
["clip5"] = {
167
component = "COMPONENT_MK18_CLIP_05",
168
label = "Clip 5",
169
item = "mk18_clip5",
170
},
171
["clip6"] = {
172
component = "COMPONENT_MK18_CLIP_06",
173
label = "Clip 6",
174
item = "mk18_clip6",
175
},
176
["clip7"] = {
177
component = "COMPONENT_MK18_CLIP_07",
178
label = "Clip 7",
179
item = "mk18_clip7",
180
},
181
},
182
}
  • Go to qs-inventory/config/config_usableitems.lua, your attchments and Weapon.
1
QS.RegisterUsableItem("mk18_frame1", function(source, item)
2
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "tint")
3
end)
4
5
QS.RegisterUsableItem("mk18_frame2", function(source, item)
6
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "tint2")
7
end)
8
9
QS.RegisterUsableItem("mk18_frame3", function(source, item)
10
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "tint3")
11
end)
12
13
---------------
14
-- MK 18 Mags
15
16
QS.RegisterUsableItem("mk18_clip1", function(source, item)
17
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "clip1")
18
end)
19
20
QS.RegisterUsableItem("mk18_clip2", function(source, item)
21
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "clip2")
22
end)
23
24
QS.RegisterUsableItem("mk18_clip3", function(source, item)
25
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "clip3")
26
end)
27
28
QS.RegisterUsableItem("mk18_clip4", function(source, item)
29
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "clip4")
30
end)
31
32
QS.RegisterUsableItem("mk18_clip5", function(source, item)
33
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "clip5")
34
end)
35
36
QS.RegisterUsableItem("mk18_clip6", function(source, item)
37
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "clip6")
38
end)
39
40
QS.RegisterUsableItem("mk18_clip7", function(source, item)
41
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "clip7")
42
end)
43
44
---------------
45
-- MK 18 Flash
46
47
QS.RegisterUsableItem("mk18_flash1", function(source, item)
48
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "flashlight")
49
end)
50
51
QS.RegisterUsableItem("mk18_flash2", function(source, item)
52
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "flashlight2")
53
end)
54
55
QS.RegisterUsableItem("mk18_flash3", function(source, item)
56
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "flashlight3")
57
end)
58
59
QS.RegisterUsableItem("mk18_flash4", function(source, item)
60
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "flashlight4")
61
end)
62
63
QS.RegisterUsableItem("mk18_flash5", function(source, item)
64
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "flashlight5")
65
end)
66
67
QS.RegisterUsableItem("mk18_flash6", function(source, item)
68
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "flashlight6")
69
end)
70
71
QS.RegisterUsableItem("mk18_flash7", function(source, item)
72
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "flashlight7")
73
end)
74
75
---------------
76
-- MK 18 Scope
77
78
QS.RegisterUsableItem("mk18_scope1", function(source, item)
79
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope")
80
end)
81
82
QS.RegisterUsableItem("mk18_scope2", function(source, item)
83
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope2")
84
end)
85
86
QS.RegisterUsableItem("mk18_scope3", function(source, item)
87
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope3")
88
end)
89
90
QS.RegisterUsableItem("mk18_scope4", function(source, item)
91
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope4")
92
end)
93
94
QS.RegisterUsableItem("mk18_scope5", function(source, item)
95
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope5")
96
end)
97
98
QS.RegisterUsableItem("mk18_scope6", function(source, item)
99
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope6")
100
end)
101
102
QS.RegisterUsableItem("mk18_scope7", function(source, item)
103
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope7")
104
end)
105
106
QS.RegisterUsableItem("mk18_scope8", function(source, item)
107
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope8")
108
end)
109
110
QS.RegisterUsableItem("mk18_scope9", function(source, item)
111
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope9")
112
end)
113
114
---------------
115
-- MK 18 Suppressor
116
117
QS.RegisterUsableItem("mk18_supp1", function(source, item)
118
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor")
119
end)
120
121
QS.RegisterUsableItem("mk18_supp2", function(source, item)
122
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor2")
123
end)
124
125
QS.RegisterUsableItem("mk18_supp3", function(source, item)
126
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor3")
127
end)
128
129
QS.RegisterUsableItem("mk18_supp4", function(source, item)
130
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor4")
131
end)
132
133
QS.RegisterUsableItem("mk18_supp5", function(source, item)
134
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor5")
135
end)
136
137
QS.RegisterUsableItem("mk18_supp6", function(source, item)
138
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor6")
139
end)
140
141
---------------
142
-- MK 18 Suppressor
143
144
QS.RegisterUsableItem("mk18_grip1", function(source, item)
145
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor6")
146
end)
147
148
QS.RegisterUsableItem("mk18_grip2", function(source, item)
149
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_grip2")
150
end)
151
152
QS.RegisterUsableItem("mk18_grip3", function(source, item)
153
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_grip3")
154
end)
155
156
QS.RegisterUsableItem("mk18_grip4", function(source, item)
157
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_grip4")
158
end)
159
160
QS.RegisterUsableItem("mk18_grip5", function(source, item)
161
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_grip5")
162
end)
163
164
---------------
165
-- MK 18 Stocks
166
167
QS.RegisterUsableItem("mk18_stock1", function(source, item)
168
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "suppressor8")
169
end)
170
171
QS.RegisterUsableItem("mk18_stock2", function(source, item)
172
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_stock2")
173
end)
174
175
QS.RegisterUsableItem("mk18_stock3", function(source, item)
176
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_stock3")
177
end)
178
179
QS.RegisterUsableItem("mk18_stock4", function(source, item)
180
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_stock4")
181
end)
182
183
QS.RegisterUsableItem("mk18_stock5", function(source, item)
184
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_stock5")
185
end)
186
187
QS.RegisterUsableItem("mk18_stock6", function(source, item)
188
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_stock6")
189
end)
190
191
QS.RegisterUsableItem("mk18_stock7", function(source, item)
192
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "mk18_stock7")
193
end)

Add-on Attachments

Be careful with this, if you don't follow it your weapon may not work with attachments
To declare your attachments on your weapon you must first follow this go to qs-inventory/config/config_weapons.lua
For the attachments you have to go ahead and put these names in specific
1
["WEAPON_MK18"] = {
2
["scope"] = { -- ALWAYS
3
component = "COMPONENT_MK18_SCOPE_01", -- NAME OF COMPONENT
4
label = "Scope 1", -- Label
5
item = "mk18_scope1", -- item from qs-core/config/config_items.lua
6
},
7
}
If you need to add more scopes you have to add them in this waym, this is the same with all attachments
1
["WEAPON_MK18"] = {
2
["scope"] = { -- ALWAYS
3
component = "COMPONENT_MK18_SCOPE_01", -- NAME OF COMPONENT
4
label = "Scope 1", -- Label
5
item = "mk18_scope1", -- item from qs-core/config/config_items.lua
6
},
7
["scope2"] = { -- ALWAYS
8
component = "COMPONENT_MK18_SCOPE_02", -- NAME OF COMPONENT
9
label = "Scope 2", -- Label
10
item = "mk18_scope2", -- item from qs-core/config/config_items.lua
11
},
12
["scope3"] = { -- ALWAYS
13
component = "COMPONENT_MK18_SCOPE_03", -- NAME OF COMPONENT
14
label = "Scope 3", -- Label
15
item = "mk18_scope3", -- item from qs-core/config/config_items.lua
16
},
17
}
Scopes
Suppressors
Flashlight
Clips
Tint
scope
suppressor
flashlight
extendedclip
tint
scope2
suppressor2
flashlight2
drummag
tint2
scope3
suppressor3
flashlight3
clip1 to clip10
tint3
scope4
suppressor4
flashlight4
tint4
scope5
suppressor5
flashlight5
luxury
scope6
suppressor6
flashlight6
weaponcolor
scope7
suppressor7
flashlight7
to
scope8
suppressor8
flashlight8
weaponcolor10
scope9
suppressor9
flashlight9
scope10
suppressor10
flashlight10
To declare your items on your weapon you must first follow this go to qs-inventory/config/config_usableitems.lua
For the attachments you have to go ahead and put these names in specific
1
QS.RegisterUsableItem("mk18_scope", function(source, item)
2
TriggerClientEvent("weapons:client:EquipAttachment", source, item, "scope")
3
end)
"scope" It has to be the same one you put in qs-inventory/config/config_weapons.lua

Developer tools

Quasar Inventory has some useful tools that could fully optimize your server, which we will mention one by one in this section
If you don't have basic notions of ESX or Lua please don't follow this part of the guide

DRAWTEXT3D

Using this little function, we can completely eliminate all the DrawText3D functions from our server, that means optimizing all the codes that we want to modify with a simple method
Exporting this function is as simple as adding the following code in your scripts
1
exports['qs-core']:DrawText3D(location.x, location.y, location.z, "E- Example Text")
The correct way to execute this function is within an event already created, so that an example similar to the following remains

NOTIFICATIONS

Quasar Core has a configuration to modify and customize our notification system, its progressbar, icons or even the position where they will appear
By default this notification system includes the following functionalities