Skip to Content

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 id field 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 = 5 and data.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 = 3 and distance = 500 means 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 maintained
  • distance (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 set
  • weapon (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 find
  • radius (Number) - Detection radius in meters from the object
  • minutes (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 find
  • radius (Number) - Detection radius in meters from the ped
  • minutes (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 data
    • level (Number) - Current level
    • xp (Number) - Current experience points
    • coins (Number) - Current coins
    • quests (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) end

Returns:

  • 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 ID
  • amount (Number) - XP amount to add

AddPlayerCoins

Add coins to a player’s balance.

exports['prism_reward']:AddPlayerCoins(source, 50)

Parameters:

  • source (Number) - Player server ID
  • amount (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 ID
  • amount (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 data
    • identifier (String) - Player identifier
    • level (Number) - Current level
    • xp (Number) - Experience points
    • coins (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 ID
  • questId (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 ID
  • playerData (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 end

Economy 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)
Last updated on