Overview
RARX Beggar is a comprehensive begging system for FiveM servers. Features a complete progression system with 10 levels, daily missions, achievements, multiple begging styles, dynamic zone rewards, and police heat system. Built with Svelte NUI and multi-framework support.
Features
Multi-Framework Auto-detection for QBCore, QBox, and ESX frameworks
6 Begging Styles Guitar, Box, Sign, Sitting, Accordion, and Veteran styles
Progression System 10 levels with unlockable perks and XP rewards
Zone System Rich, Tourist, and Poor zones with different rewards/risks
Daily Missions 5 daily challenges with money and XP rewards
Achievements 8 unlockable achievements with special rewards
Police System Heat system, strikes, fines, and jail integration
Dynamic Multipliers Weather and time of day affect earnings
Requirements
Requirement Type oxmysql Required QBCore / QBox / ESX Required (auto-detected) ox_target / qb-target Optional
Supported Systems
Frameworks QBCore, QBox (qbx_core), ESX
Inventories ox_inventory, origen_inventory, qs-inventory, framework default
Targets ox_target, qb-target, or none (keybind)
Dispatch ps-dispatch, cd_dispatch, qs-dispatch, core_dispatch, rcore_dispatch, origen_police
Installation
Download & Extract
Download the resource and extract to your resources folder.
Add Items
Add the begging items to your inventory system (see Items section below).
Configure
Edit shared/config.lua to customize settings.
The database table is created automatically on first start.
Items
QBCore / QBox
ox_inventory
ESX
Add to qb-core/shared/items.lua: [ 'begging_box' ] = {[ 'name' ] = 'begging_box' , [ 'label' ] = 'Cardboard Box' , [ 'weight' ] = 500 , [ 'type' ] = 'item' , [ 'image' ] = 'begging_box.png' , [ 'unique' ] = true , [ 'useable' ] = true , [ 'shouldClose' ] = true , [ 'description' ] = 'A box for begging' },
[ 'begging_guitar' ] = {[ 'name' ] = 'begging_guitar' , [ 'label' ] = 'Guitar' , [ 'weight' ] = 2000 , [ 'type' ] = 'item' , [ 'image' ] = 'begging_guitar.png' , [ 'unique' ] = true , [ 'useable' ] = true , [ 'shouldClose' ] = true , [ 'description' ] = 'A guitar for street performances' },
[ 'begging_sign' ] = {[ 'name' ] = 'begging_sign' , [ 'label' ] = 'Cardboard Sign' , [ 'weight' ] = 200 , [ 'type' ] = 'item' , [ 'image' ] = 'begging_sign.png' , [ 'unique' ] = true , [ 'useable' ] = true , [ 'shouldClose' ] = true , [ 'description' ] = 'A sign for begging' },
[ 'begging_accordion' ] = {[ 'name' ] = 'begging_accordion' , [ 'label' ] = 'Accordion' , [ 'weight' ] = 3000 , [ 'type' ] = 'item' , [ 'image' ] = 'begging_accordion.png' , [ 'unique' ] = true , [ 'useable' ] = true , [ 'shouldClose' ] = true , [ 'description' ] = 'An accordion for street performances' },
[ 'begging_veteran_hat' ] = {[ 'name' ] = 'begging_veteran_hat' , [ 'label' ] = 'Veteran Hat' , [ 'weight' ] = 100 , [ 'type' ] = 'item' , [ 'image' ] = 'begging_veteran_hat.png' , [ 'unique' ] = true , [ 'useable' ] = true , [ 'shouldClose' ] = true , [ 'description' ] = 'A veteran hat that earns respect' },
Add to ox_inventory/data/items.lua: [ 'begging_box' ] = {
label = 'Cardboard Box' ,
weight = 500 ,
stack = false ,
close = true ,
},
[ 'begging_guitar' ] = {
label = 'Guitar' ,
weight = 2000 ,
stack = false ,
close = true ,
},
[ 'begging_sign' ] = {
label = 'Cardboard Sign' ,
weight = 200 ,
stack = false ,
close = true ,
},
[ 'begging_accordion' ] = {
label = 'Accordion' ,
weight = 3000 ,
stack = false ,
close = true ,
},
[ 'begging_veteran_hat' ] = {
label = 'Veteran Hat' ,
weight = 100 ,
stack = false ,
close = true ,
},
Run this SQL query: INSERT INTO `items` ( `name` , `label` , `weight` ) VALUES
( 'begging_box' , 'Cardboard Box' , 500 ),
( 'begging_guitar' , 'Guitar' , 2000 ),
( 'begging_sign' , 'Cardboard Sign' , 200 ),
( 'begging_accordion' , 'Accordion' , 3000 ),
( 'begging_veteran_hat' , 'Veteran Hat' , 100 );
Configuration
Framework Settings
Config . Framework = 'auto' -- 'auto', 'qb', 'esx'
Config . Target = 'auto' -- 'auto', 'ox_target', 'qb-target', 'none'
Config . Inventory = 'auto' -- 'auto', 'ox_inventory', 'origen_inventory', 'qs-inventory'
Boss NPC Locations
Config . BossLocations = {
{
id = 'main_boss' ,
coords = vector4 ( 130.14 , - 1178.68 , 28.69 , 182.0 ),
model = 'a_m_o_acult_02' ,
blip = {
enabled = true ,
sprite = 480 ,
color = 2 ,
scale = 0.7 ,
label = 'Beggar Boss'
}
},
}
Begging Styles
Each style has different rewards and police risk:
Style Reward Multiplier Police Risk Unlock Level Sitting 0.5x 0.5x 1 Box 1.0x 0.8x 1 Guitar 1.5x 1.0x 1 Sign 1.2x 0.9x 2 Accordion 1.8x 1.2x 5 Veteran 2.0x 0.3x 7
Zone Configuration
Config . Zones = {
rich = {
multiplier = 2.0 ,
policeMultiplier = 2.0 ,
areas = {
{ center = vector3 ( - 1600.0 , - 400.0 , 40.0 ), radius = 300.0 , name = 'Rockford Hills' },
}
},
tourist = {
multiplier = 1.5 ,
policeMultiplier = 1.5 ,
areas = {
{ center = vector3 ( - 1650.0 , - 1000.0 , 10.0 ), radius = 200.0 , name = 'Del Perro Beach' },
}
},
poor = {
multiplier = 0.7 ,
policeMultiplier = 0.5 ,
areas = {
{ center = vector3 ( 100.0 , - 1900.0 , 20.0 ), radius = 300.0 , name = 'Davis' },
}
},
}
Police System
Config . Police = {
enabled = true ,
baseAlertChance = 15 , -- Base % chance of police alert
heatEnabled = true , -- Heat increases risk over time
heatIncreasePerMinute = 5 ,
heatDecayPerMinute = 2 ,
maxHeat = 100 ,
zoneCooldown = 300 , -- Seconds before returning to zone
strikePenalties = {
[ 1 ] = { type = 'fine' , amount = 100 },
[ 2 ] = { type = 'fine' , amount = 250 },
[ 3 ] = { type = 'jail' , time = 5 },
},
}
Progression System
Config . Progression = {
enabled = true ,
xpPerDonation = 10 ,
xpBonusMultiplier = 2 , -- Big tips give double XP
levels = {
{ level = 1 , xpRequired = 0 , title = 'Newcomer' },
{ level = 2 , xpRequired = 100 , title = 'Street Rookie' },
{ level = 3 , xpRequired = 300 , title = 'Beggar' },
-- ... up to level 10
{ level = 10 , xpRequired = 5500 , title = 'Homeless God' },
},
}
Dispatch System
Config . Dispatch = {
system = 'ps-dispatch' , -- See options below
code = '10-15' ,
priority = 3 ,
}
Available dispatch systems:
custom - Define your own function
ps-dispatch - Project Sloth Dispatch
cd_dispatch - Codesign Dispatch
qs-dispatch - Quasar Dispatch
core_dispatch - Core Dispatch
rcore_dispatch - RCore Dispatch
origen_police - Origen Police
none - Disable police alerts
Custom Functions
For custom integrations, edit the files in the custom/ folder:
Client (custom/client.lua)
-- Custom notification system
Custom . Notify = function ( message , type , duration )
exports [ 'okokNotify' ]: Alert ( 'Beggar' , message , duration , type )
end
-- Custom progress bar
Custom . ProgressBar = function ( duration , label , dict , anim , flags , canCancel )
return exports [ 'progressBars' ]: startUI ( duration , label )
end
-- Custom help text
Custom . ShowHelpText = function ( text )
exports [ 'okokTextUI' ]: Open ( text , 'darkblue' , 'left' )
end
Server (custom/server.lua)
-- Custom money system
Custom . AddMoney = function ( source , amount , moneyType )
return exports [ 'my_banking' ]: AddMoney ( source , moneyType , amount )
end
-- Custom inventory
Custom . AddItem = function ( source , item , count )
return exports [ 'my_inventory' ]: AddItem ( source , item , count )
end
-- Custom jail integration
Custom . JailPlayer = function ( source , time )
exports [ 'my_jail' ]: JailPlayer ( source , time , 'Illegal begging' )
end
Exports
Client Exports
-- Check if player is currently begging
exports [ 'rarx_beggar' ]: IsBegging ()
-- Start begging with specific style
exports [ 'rarx_beggar' ]: StartBegging ( 'guitar' )
-- Stop begging
exports [ 'rarx_beggar' ]: StopBegging ()
-- Open style selection menu
exports [ 'rarx_beggar' ]: OpenBeggingStyleMenu ()
Server Exports
-- Add XP to player
exports [ 'rarx_beggar' ]: AddPlayerXp ( source , 100 )
-- Get player data
exports [ 'rarx_beggar' ]: GetCachedPlayerData ( identifier )
-- Update mission progress
exports [ 'rarx_beggar' ]: UpdateMissionProgress ( source , 'donations' , 1 )
-- Check achievement
exports [ 'rarx_beggar' ]: CheckAchievement ( source , 'donations' , 50 )
Localization
Set language in server.cfg:
Available languages:
en - English
es - Spanish
To add a new language, create a file in translates/ folder (e.g., fr.lua) copying the structure from en.lua.
Troubleshooting
Verify the coordinates in Config.BossLocations and ensure no other scripts are deleting peds in that area.
Make sure you added the items to your inventory system and the item names match exactly.
Verify your framework is detected correctly. Check server console for framework detection message.
Daily missions not resetting
Check database connection and verify the rarx_beggar_players table exists.
Police alerts not triggering
Ensure Config.Police.enabled is true and your dispatch system is configured correctly.