Usage — Dog Walker Job | Quasar Store | Quasar Store
Documentation
Usage
How the Dog Walker Job plays and how to tune it: the owners and dogs, the panel, walk rules, cleaning up, happiness and tips, the paw menu, walking off the leash, levels and the leaderboard.
A walk has three parts, and all of them happen at a dog's owner or beside the dog itself — there is no menu to open from anywhere else.
Step
What happens
Collect
Talk to an owner. The camera cuts to them, the panel opens beside them, and Start walk hands you the dog on a leash.
Walk
Keep moving until the walk timer reaches zero. Look after the dog on the way: clean up after it, use the paw menu, and decide whether to let it off the leash.
Return
Go back to the same owner within the extra time and press . The server checks the walk and pays you in money and experience.
A fresh install ships with ten owners around Mirror Park, each with a dog, a blip and a floating marker. The longer walks pay more and need a higher level.
Dog
Owner
Walk
Pays
XP
Level
Rocky — rottweiler
Carlos Mendez
2 min
150
120
1
Clifford — retriever
Laura Torres
2 min
150
150
1
Duke — poodle
Roberto Jimenez
3 min
150
150
1
Storm — westie
Ana Garcia
3 min
150
150
1
Buddy — retriever
Miguel Santos
5 min
200
150
2
Max — shepherd
Sofia Reyes
8 min
250
180
1
Coco — poodle
Isabella Martinez
12 min
300
220
4
Daisy — Chop
Alejandro Cruz
15 min
350
250
5
Charlie — westie
Valentina Lopez
18 min
400
300
6
Luna — pug
Diego Hernandez
22 min
450
350
7
Each owner wears a model picked at random from Config.EmployerModels. Blips are only shown to players who can work, and change colour while you are walking that dog, so you can always find your way back.
Every entry of Config.Locations is one owner and one dog. Add as many as you like:
lua
Config.Locations = {
{
employer_coords = vector4(1302.26, -529.99, 71.27, 163.87), -- where the owner stands
dog_coords = vector4(1304.51, -532.17, 71.40, 120.44), -- where the dog waits
dog_model = 'a_c_rottweiler', -- ped model of the dog
dog_name = 'Rocky', -- panel, blip and paw menu
owner_name = 'Carlos Mendez', -- the owner's card in the panel
dog_image = 'rottweiler.png', -- picture on the dog card
price_money = 150, -- paid when the dog is handed back in time
walking_time = 2, -- length of the walk, in MINUTES
experience = 120, -- experience paid on a successful walk
required_level = 1-- level needed to take this dog out
},
}
dog_image is a file in assets/dogs/ (Config.DogImageFolder). Pictures ship for the poodle, pug, retriever, rottweiler and shepherd; drop your own PNG there and restart the resource — transparent PNGs look best, the card puts its own glow behind them. A value containing :// is used as a web address instead, and Config.DogImageFallback is shown for a location with no picture.
Any dog ped works. a_c_rottweiler, a_c_shepherd, a_c_chop and a_c_retriever sit while they wait at the door; the others stand. A misspelled model prints invalid model in the F8 console and that dog is skipped.
Talking to an owner opens the panel. The camera cuts to a close shot of the owner, framed into the left half of the screen with a card carrying their name and the Config.PedGreeting line; the panel takes the right half.
Section
What it shows
The dog
Its picture, its name and its owner.
Job details
The level required, the walk time, the reward and the experience for this dog.
Your progress
Your level and experience, your level bonus, how many dogs you may walk at once and what cleaning up is worth.
Start walk / Return dog
Start walk while the dog is home, Return dog while you are walking it. A notice replaces the button while the dog is resting, or when you already walk as many dogs as your level allows.
Guide
A walkthrough of the job, read from config/translations.lua (GUIDE_INTRO, GUIDE_STEP_1–6, GUIDE_TIP_1–4). Reword any line there; delete a key and that line disappears.
Statistics
The leaderboard. Hidden when Config.Leaderboard.enable is false.
Handing a dog back before its timer is up asks first — Return the dog before the walk is over? — and confirming with Abandon walk ends it with no pay. There is no separate abandon button: returning early is abandoning.
The panel closes on its own when you walk more than 6 m from the owner or die with it open, so nobody is ever left with a stuck cursor.
Once the leash is on, a tracker card shows the dog, the time left, its happiness and anything that needs your attention. The rules of the walk live in Config.Walk:
Setting
Default
What it does
onlyCountWhileMoving
true
The timer only runs while you walk, run or sprint. Standing still pauses it, and the card says Keep moving to advance the walk.
additionalTime
3 min
Extra time to bring the dog back once the timer is over. Run out of it and the dog goes home on its own, unpaid.
cooldown
1 min
Rest before you can take the same dog out again. It survives a reconnect.
maxDistance
100 m
A dog left this far behind for three seconds in a row runs home and the walk fails.
failOnVehicle
true
Getting into any vehicle ends the walk.
leashLength
5.0 m
Length of the leash rope.
renderDistance
150 m
How far away other players' dogs are drawn. See Other Players' Dogs.
maxRemoteLeashes
8
Most leashes drawn on other players at once, closest first.
If the dog is knocked over by a ped or a vehicle, the leash is tied back on, the dog loses happiness and you get a warning. If its entity is lost to streaming, it is put back behind you rather than failing the walk.
Once per walk, at a random point between 30% and 80% of the timer, the dog stops to do its business and the tracker says There is something to clean up. Walk up and press G — or third-eye it — to pick it up for extra experience and happiness. Whatever is left on the ground is removed when the walk ends.
lua
Config.Poop = {
chance = 100, -- % chance the dog stops during a walk
minPercent = 30, -- earliest point of the walk (% elapsed)
maxPercent = 80, -- latest point of the walk (% elapsed)
experience = 10, -- experience for cleaning it up
maxPerWalk = 1, -- cleanups the server will pay for per walk
}
Every dog starts the walk at 70% happiness. It drains slowly on the leash, drops when you sprint or the dog gets hurt, and climbs with attention. The happier the dog when you hand it back, the bigger the tip. Happiness only changes while the walk timer is running.
The payout is the dog's price_money plus three tips, and the experience is the dog's experience plus an off-leash bonus. All of it is worked out on the server:
lua
payment = price_money × (1 + level tip + happiness tip + off-leash tip)
experience = experience + off-leash experience
Bonus
Worth
Capped at
Level tip
+1% per level (TipPerLevel)
+50% (MaxTipMultiplier)
Happiness tip
Scales with happiness when the dog is handed back
+15% at 100% (Config.Happiness.maxTipBonus)
Off-leash tip
+3% per full minute loose (tipPerMinute)
+30% (Config.FreeRoam.maxTipBonus)
Off-leash experience
+10 per full minute loose (experiencePerMinute)
+30% of the dog's experience (maxExperienceBonus)
Example: a level 10 walker hands Luna back at 80% happiness after 4 minutes off the leash. They are paid 450 × (1 + 0.10 + 0.12 + 0.12) = 603, and earn 350 + 40 = 390 experience.
Money is paid in cash — the money account on ESX, cash on QBCore and Qbox. With qs-job-management running, it goes through that instead.
Go to the dog you are walking and press E — or third-eye it — to open a radial menu shaped like a paw print. The centre pad shows the dog's name, its happiness and its mood: Wagging its tail from 75%, Could use some attention from 45%, Not enjoying this walk below that.
Action
What it does
Happiness
Cooldown
Pet
The game's own Chop petting scene: you kneel, the dog is placed in front of you, and both play facial animations. Movement is locked for the scene; the camera is not.
+14
20 s
Sit
The dog sits and stays where it is instead of following you.
+5
10 s
Heel
Calls the dog back to your side.
+5
10 s
Let go
Unclips the leash. Shown only while the dog is leashed.
+10
5 s
Leash
Clips it back on. Shown only while the dog is loose.
0
5 s
Only one of Let go and Leash is on screen at a time, so the menu shows four toes — which is what makes it read as a paw. Every option is an entry of Config.PawMenu.options:
lua
{ id = 'pet', label = 'PAW_PET', hint = 'PAW_PET_HINT', icon = 'pet', color = 'pink', happiness = 14, cooldown = 20 },
-- id one of the built-in actions: pet, sit, heel, release, leash-- label/hint translation keys from config/translations.lua-- icon pet, play, treat, sit, heel, speak, water, photo, trick, praise, star, paw-- color blue, green, amber, purple, pink, red-- requires 'leashed' or 'loose' to show it only in that state-- happiness happiness the action gives back-- cooldown seconds before it can be used again
Config.Petting tunes the petting scene: its duration (4.5 s), lockCamera to also take the mouse during it, and leashCamera for the scripted camera shot when the leash is clipped on and off. If the Chop animations are missing on your game build, a simpler petting clip is played instead.
Let go turns the walk into a gamble. Loose, the dog trots a little wider beside you, its happiness climbs fast instead of draining, and every full minute pays extra money and experience. But once it has been loose for five seconds, it may bolt — rolled once every second:
A level 1 walker with an unhappy dog risks about 1.1% a second; a level 15 walker with a dog at 100% sits on the 0.1% floor. Experience and a happy dog are what make letting go worth it.
When it bolts, the leash drops, the dog runs off with a red blip on it, and the walk clock stops. Get within 3 m and press E — or third-eye it — to grab it: it goes back on the leash, a little less happy. Fail to catch it in 90 seconds and it runs home for good, and the walk fails.
lua
Config.FreeRoam = {
enable = true,
experiencePerMinute = 10, -- extra experience per full minute loose
tipPerMinute = 0.03, -- extra payment per minute, as a fraction of price_money
maxTipBonus = 0.30, -- never more than +30% from free roaming
maxExperienceBonus = 0.30, -- never more than +30% of the walk's experience
happinessPerMinute = 25, -- happiness gained per minute while loose
escapeChance = 1.2, -- % chance per second that a loose dog bolts
levelReduction = 0.06, -- subtracted per walker level
happinessReduction = 0.8, -- subtracted at 100% happiness, scaled below it
minChance = 0.1, -- never drops below this
catchTime = 90, -- seconds to catch it before it runs home
catchDistance = 3.0, -- how close you must get to grab it
runDistance = 80.0, -- how far it runs when it bolts
catchPenalty = 15, -- happiness lost by the chase
}
Experience fills a bar toward the next level. Level 1 needs 1,000 experience and every level after it needs 10% more than the last, so level 5 needs 1,464 and level 10 needs 2,357.
Every level adds +1% to each payout (up to +50%), unlocks the dogs that require it, and raises how many dogs you may walk at the same time:
From level
Dogs at once
1
1
4
2
10
3
15
4
lua
Config.LevelExperience = {
BaseExperience = 1000, -- experience required for level 1
GrowthFactor = 1.1, -- each level needs this much more than the last
TipPerLevel = 0.01, -- +1% payment per level
MaxTipMultiplier = 0.5, -- never more than +50% from levels
DogWalkingAmount = {
{ level = 1, max_dogs = 1 },
{ level = 4, max_dogs = 2 },
{ level = 10, max_dogs = 3 },
{ level = 15, max_dogs = 4 },
},
}
Each extra dog is its own walk: its own leash, timer, tracker card and payout. A level-up announces itself with a notification.
There is no command to set a level. To move somebody's level, edit level and experience in their qs_dog_walker row while they are offline; the server reads it again when they come back.
The Statistics button in the panel opens three rankings — All time, Season and Today — each ordered by experience with the earnings beside it, a search box, your own row highlighted, a countdown to the next reset and the last winners.
The daily board resets every day at 00:00 server time, and the season board at 00:00 on the first day of every month. At each reset the top three are paid:
Place
Daily
Season
1st
2,500
25,000
2nd
1,200
12,000
3rd
600
6,000
A winner who is offline at the reset has the reward banked and paid the next time they load in.
Resets are checked a minute after midnight and on every start, and each one is claimed in the database before anything is paid. A restart in the middle of a payout can never pay a board twice, and a server that was off at midnight pays on its next start.
true puts third-eye options on the owners, the dogs and the poop. false uses key prompts instead.
Config.TargetScript
"ox"
"ox" for ox_target, "qb" for qb-target.
Config.DrawText3D
false
true draws the prompts as floating 3D text (through qs-textui when it runs). false shows them in the interface's hint panel.
Config.Keys.Interact
38 (E)
Talk to an owner, open the paw menu, catch a dog that bolted.
Config.Keys.Poop
58 (G)
Clean up after the dog.
Key prompts appear within 3 m of an owner and 2 m of your dog. When both are in range the owner wins — your dog is beside you at the door too — except for a dog that bolted: catching it beats everything. Key codes are the FiveM control IDs.
Config.Blip = {
enable = true,
sprite = 463,
size = 1.0,
display = 2,
colorFree = 3, -- while the dog is waiting for a walker
colorWalking = 1, -- while you are out walking that dog
useDogNames = false, -- true = blip named after the dog
defaultName = "Dog",
}
Config.PedMarker = {
enabled = true,
type = 0, -- 0 = the upside-down cone
height = 1.2, -- metres above the owner's head
distance = 25.0, -- how close you must be to see it
bob = true, -- drifts gently up and down
size = { x = 0.25, y = 0.25, z = 0.18 },
color = { r = 59, g = 130, b = 246, a = 170 },
}
Everyone sees everyone's walks. When a player takes a dog out, every client nearby draws that dog leashed to their hand, and the dog that was waiting at the owner's door disappears for everybody until it is brought back. Players who join mid-walk, or walk into range later, pick up the walks already running.
Every dog drawn is a ped, a rope and the physics between them, so two settings in Config.Walk decide what that costs weaker machines: renderDistance (150 m) and maxRemoteLeashes (8, closest first). Above roughly 400 m nothing can be drawn whatever the setting: past the game's network range the other player's character does not exist on your client.