Exports & Quest Types
📖 Quest Types Overview
Prism Rewards supports a wide variety of Quest Types to engage your players. Each Quest Type tracks different player activities and can be configured with specific requirements.
⚠️ IMPORTANT: Quest ID Must Be Unique
Each quest must have a unique ID. The
idfield is used to identify and track quests in the server. If two quests share the same ID, it will cause conflicts and tracking errors.Format Recommendation: Use a namespaced format like
prefix:category:name(e.g.,prism:driving:basic,myserver:vip:speedster)
Repetitive Sets Logic
If a quest has
count = 5anddata.distance = 1000, the player must complete 5 sets of 1,000 meters each. Each time they reach 1,000 meters, the quest progress increments by 1.Example: A quest with
count = 3anddistance = 500means the player must travel 500 meters three separate times. Each completed 500-meter segment adds 1 to their progress.
🚗 Vehicle Activities
Quests related to driving various types of vehicles.
Driving
Tracking: Repetitive Distance Sets
Complete X sets of driving Y meters in any land vehicle.
{
id = 'prism:driving:basic',
type = 'driving',
name = 'Road Trip',
description = 'Drive 5000 meters',
count = 1,
data = {
distance = 5000 -- Meters
}
}Data Fields:
distance(Number) - Meters to drive per set
Boating
Tracking: Repetitive Distance Sets
Complete X sets of boating Y meters in any watercraft.
{
id = 'prism:boating:sailor',
type = 'boating',
name = 'Set Sail',
description = 'Boat for 2000 meters',
count = 1,
data = {
distance = 2000 -- Meters
}
}Data Fields:
distance(Number) - Meters to boat per set
Flying
Tracking: Repetitive Distance Sets
Complete X sets of flying Y meters in any aircraft.
{
id = 'prism:flying:pilot',
type = 'flying',
name = 'Take Flight',
description = 'Fly 10000 meters',
count = 1,
data = {
distance = 10000 -- Meters
}
}Data Fields:
distance(Number) - Meters to fly per set
Motorcycling
Tracking: Repetitive Distance Sets
Complete X sets of riding Y meters on motorcycles.
{
id = 'prism:moto:rider',
type = 'motorcycling',
name = 'Biker Gang',
description = 'Ride 3000 meters on a motorcycle',
count = 1,
data = {
distance = 3000 -- Meters
}
}Data Fields:
distance(Number) - Meters to ride per set
Cycling
Tracking: Repetitive Distance Sets
Complete X sets of cycling Y meters on bicycles.
{
id = 'prism:cycling:fitness',
type = 'cycling',
name = 'Pedal Power',
description = 'Cycle 2000 meters',
count = 1,
data = {
distance = 2000 -- Meters
}
}Data Fields:
distance(Number) - Meters to cycle per set
Offroading
Tracking: Repetitive Distance Sets
Complete X sets of offroading Y meters in off-road conditions.
{
id = 'prism:offroad:adventure',
type = 'offroading',
name = 'Off the Beaten Path',
description = 'Offroad for 1500 meters',
count = 1,
data = {
distance = 1500 -- Meters
}
}Data Fields:
distance(Number) - Meters to offroad per set
Speeding
Tracking: Repetitive Distance Sets Above Speed Threshold
Stay above a specific speed for Y meters to complete one set. The player must maintain the threshold speed continuously while traveling the required distance.
{
id = 'prism:speeding:demon',
type = 'speeding',
name = 'Speed Demon',
description = 'Drive over 120km/h for 2km (Repeat 2 times)',
count = 2,
data = {
threshold = 120, -- Km/h
distance = 2000 -- Meters
}
}Data Fields:
threshold(Number) - Minimum speed in km/h that must be maintaineddistance(Number) - Meters to travel while maintaining the speed threshold per set
Wheelie
Tracking: Repetitive Distance Sets
Perform wheelies for Y meters on motorcycles or bikes. The player must keep the front wheel elevated continuously.
{
id = 'prism:wheelie:stunt',
type = 'wheelie',
name = 'Wheelie Master',
description = 'Wheelie for 500 meters',
count = 1,
data = {
distance = 500 -- Meters
}
}Data Fields:
distance(Number) - Meters to wheelie per set
Drifting
Tracking: Repetitive Distance Sets
Drift for Y meters to complete sets. The vehicle must be actively drifting (sliding sideways) while traveling.
{
id = 'prism:drift:master',
type = 'drifting',
name = 'Drift King',
description = 'Drift for 1000 meters',
count = 1,
data = {
distance = 1000 -- Meters
}
}Data Fields:
distance(Number) - Meters to drift per set
Airtime
Tracking: Repetitive Distance Sets
Achieve air distance by jumping vehicles. Tracks the horizontal distance traveled while the vehicle is airborne.
{
id = 'prism:airtime:stunt',
type = 'airtime',
name = 'Flying High',
description = 'Get 200 meters of airtime',
count = 1,
data = {
distance = 200 -- Meters
}
}Data Fields:
distance(Number) - Meters of air distance per set
🏃 Movement & Fitness
Player movement-based activities performed on foot.
Running
Tracking: Repetitive Distance Sets
Run for Y meters on foot. The player must be in a running state (sprinting).
{
id = 'prism:running:marathon',
type = 'running',
name = 'Marathon Runner',
description = 'Run for 5000 meters',
count = 1,
data = {
distance = 5000 -- Meters
}
}Data Fields:
distance(Number) - Meters to run per set
Swimming
Tracking: Repetitive Distance Sets
Swim for Y meters in water.
{
id = 'prism:swimming:athlete',
type = 'swimming',
name = 'Swimmer',
description = 'Swim for 1000 meters',
count = 1,
data = {
distance = 1000 -- Meters
}
}Data Fields:
distance(Number) - Meters to swim per set
Diving
Tracking: Repetitive Distance Sets
Dive underwater for Y meters. The player must be fully submerged while traveling.
{
id = 'prism:diving:explorer',
type = 'diving',
name = 'Deep Diver',
description = 'Dive for 500 meters',
count = 1,
data = {
distance = 500 -- Meters
}
}Data Fields:
distance(Number) - Meters to dive per set
Stealth
Tracking: Repetitive Distance Sets
Move in stealth mode for Y meters. The player must be in a crouched or sneaking state.
{
id = 'prism:stealth:ninja',
type = 'stealth',
name = 'Silent Shadow',
description = 'Sneak for 300 meters',
count = 1,
data = {
distance = 300 -- Meters
}
}Data Fields:
distance(Number) - Meters to sneak per set
Parachuting
Tracking: Repetitive Distance Sets
Glide with parachute for Y meters. Tracks distance traveled while parachuting is active.
{
id = 'prism:parachute:skydiver',
type = 'parachuting',
name = 'Skydiver',
description = 'Parachute for 2000 meters',
count = 1,
data = {
distance = 2000 -- Meters
}
}Data Fields:
distance(Number) - Meters to glide per set
🔫 Combat & Action
Combat-related quest activities.
Aiming
Tracking: Repetitive Time Sets
Aim down sights for Y seconds per set. The player must be actively aiming with a weapon.
{
id = 'prism:aiming:sniper',
type = 'aiming',
name = 'Steady Hands',
description = 'Aim with a weapon for 10 seconds (Repeat 5 times)',
count = 5,
data = {
weapon = 'weapon_pistol', -- Optional: Specific weapon
seconds = 10
}
}Data Fields:
seconds(Number) - Seconds to aim per setweapon(String, Optional) - Specific weapon hash/name to track. If not specified, any weapon counts.
Reloading
Tracking: Each Reload Counts
Reload a weapon X times. Each reload action increments progress by 1.
{
id = 'prism:reload:tactical',
type = 'reloading',
name = 'Tactical Reload',
description = 'Reload your weapon 10 times',
count = 10,
data = {
weapon = 'weapon_pistol' -- Optional: Specific weapon
}
}Data Fields:
weapon(String, Optional) - Specific weapon hash/name to track. If not specified, any weapon counts.
Melee
Tracking: Each Melee Hit Counts
Engage in melee combat X times. Each successful melee hit increments progress by 1.
{
id = 'prism:melee:brawler',
type = 'melee',
name = 'Street Fighter',
description = 'Land 20 melee hits',
count = 20,
data = {}
}Data Fields: None required
🗺️ Exploration & Interaction
Location and exploration-based quests.
Reach Zone
Tracking: One-Shot Completion
Arrive at a specific location. Quest completes when the player enters the defined radius around the target coordinates.
{
id = 'prism:reach:lighthouse',
type = 'reach_zone',
name = 'Tourist',
description = 'Visit the lighthouse',
count = 1,
data = {
coords = vector3(3430.0, 5178.0, 7.0),
radius = 50.0 -- Detection radius in meters
}
}Data Fields:
coords(Vector3) - Target coordinates (X, Y, Z)radius(Number) - Detection radius in meters from the target coordinates
Find Object
Tracking: Proximity to Object Model
Find a specific object/prop model. Quest completes when the player gets within the specified radius of the object.
{
id = 'prism:find:treasure',
type = 'find_object',
name = 'Treasure Hunter',
description = 'Find the hidden treasure chest',
count = 1,
data = {
model = 'prop_box_wood02a_pu',
radius = 5.0,
minutes = 0 -- Optional: Time to stay near object
}
}Data Fields:
model(String) - Object model hash/name to findradius(Number) - Detection radius in meters from the objectminutes(Number, Optional) - Time in minutes the player must stay near the object. If 0 or not specified, instant completion on arrival.
Find Ped
Tracking: Proximity to Ped Model
Find a specific NPC/ped model. Quest completes when the player gets within the specified radius of the NPC.
{
id = 'prism:find:celebrity',
type = 'find_ped',
name = 'Celebrity Spotter',
description = 'Find the famous actor',
count = 1,
data = {
model = 'a_m_y_business_01',
radius = 3.0,
minutes = 0 -- Optional: Time to stay near ped
}
}Data Fields:
model(String) - Ped model hash/name to findradius(Number) - Detection radius in meters from the pedminutes(Number, Optional) - Time in minutes the player must stay near the ped. If 0 or not specified, instant completion on arrival.
🔌 Exports
Client Side
GetPlayerProgress
Get current player’s progression data including level, XP, coins, and active quests.
local progress = exports['prism_reward']:GetPlayerProgress()
print(progress.level, progress.xp, progress.coins)Returns:
table- Player progression datalevel(Number) - Current levelxp(Number) - Current experience pointscoins(Number) - Current coinsquests(Table) - Active quest progress
GetActiveQuests
Get list of player’s active quests with their current progress.
local quests = exports['prism_reward']:GetActiveQuests()
for _, quest in ipairs(quests) do
print(quest.name, quest.progress, quest.count)
endReturns:
table- Array of active quests with progress information
IsQuestActive
Check if a specific quest is currently active for the player.
local isActive = exports['prism_reward']:IsQuestActive('prism:driving:basic')Parameters:
questId(String) - Quest identifier to check
Returns:
boolean- Whether the quest is currently active
Server Side
AddPlayerXP
Add experience points to a player. Can trigger level-up if enough XP is accumulated.
exports['prism_reward']:AddPlayerXP(source, 100)Parameters:
source(Number) - Player server IDamount(Number) - XP amount to add
AddPlayerCoins
Add coins to a player’s balance.
exports['prism_reward']:AddPlayerCoins(source, 50)Parameters:
source(Number) - Player server IDamount(Number) - Coins to add
RemovePlayerCoins
Remove coins from a player’s balance. Returns false if the player doesn’t have enough coins.
local success = exports['prism_reward']:RemovePlayerCoins(source, 100)Parameters:
source(Number) - Player server IDamount(Number) - Coins to remove
Returns:
boolean- Whether removal was successful (false if insufficient coins)
GetPlayerData
Get a player’s complete progression data including identifier, level, XP, and coins.
local data = exports['prism_reward']:GetPlayerData(source)
print(data.identifier, data.level, data.xp, data.coins)Parameters:
source(Number) - Player server ID
Returns:
table- Player dataidentifier(String) - Player identifierlevel(Number) - Current levelxp(Number) - Experience pointscoins(Number) - Coins balance
CompleteQuest
Manually complete a quest for a player, bypassing normal progression. Useful for admin commands or special events.
exports['prism_reward']:CompleteQuest(source, 'prism:driving:basic')Parameters:
source(Number) - Player server IDquestId(String) - Quest identifier to complete
📡 Events
Client Side Events
prism_reward:client:QuestComplete
Triggered when a player completes a quest. Provides quest data including rewards.
AddEventHandler('prism_reward:client:QuestComplete', function(questData)
print("Completed quest:", questData.name)
print("Rewards:", questData.rewards.xp, questData.rewards.coins)
end)Parameters:
questData(Table) - Quest information including name and rewards
prism_reward:client:LevelUp
Triggered when a player levels up. Receives the new level as a parameter.
AddEventHandler('prism_reward:client:LevelUp', function(newLevel)
print("New level:", newLevel)
end)Parameters:
newLevel(Number) - The new level reached
Server Side Events
prism_reward:server:PlayerLoaded
Triggered when a player’s reward data is loaded from the database. Useful for initialization scripts.
AddEventHandler('prism_reward:server:PlayerLoaded', function(source, playerData)
print("Player loaded:", playerData.identifier)
end)Parameters:
source(Number) - Player server IDplayerData(Table) - Player’s progression data
💡 Integration Examples
Custom Quest Trigger
Trigger custom quest progress from your own scripts. Useful for integrating with other resources.
-- Trigger custom quest progress from your scripts
TriggerServerEvent('prism_reward:server:UpdateQuestProgress', {
type = 'custom',
questId = 'my_custom_quest',
progress = 1
})Level-Based Permissions
Grant permissions or access based on player reward level. Perfect for progression-locked content.
-- Grant permissions based on reward level
local playerData = exports['prism_reward']:GetPlayerData(source)
if playerData.level >= 10 then
-- Grant special access
endEconomy Integration
Use coins as a secondary currency in your economy system.
-- Use coins as secondary currency
RegisterCommand('buyitem', function(source, args)
local playerData = exports['prism_reward']:GetPlayerData(source)
if playerData.coins >= 100 then
exports['prism_reward']:RemovePlayerCoins(source, 100)
-- Give item
end
end)