Feature Guide
Current gameplay flow and system behavior for oxide-animalcontroljob, including dispatch, animal handling, crews, progression, and payouts.
Overview of the current oxide-animalcontroljob gameplay flow and systems.
Shift Flow
Players manage the job from the dispatcher NPC at the animal control office using the configured o-link target integration.
Menu modes
Config.menuStyle supports:
'nui': full-screen Vue menu with location camera, progression card, and crew portraits'menu':olink.menuflow for servers that want a lighter interface
Both modes support:
- clocking in and out
- viewing progression and complaint state
- inviting a crew partner
- responding to pending crew invites
Shift states
IDLEWAITINGON_CALLWORKING
Normal flow is:
IDLE -> WAITING -> ON_CALL -> WORKING -> WAITING
Slot limits
Each office location has a configurable maximum number of concurrent shift slots (default: 3). If all slots are full, new players cannot clock in at that location.
Dispatch System
After clock-in, dispatch waits a random amount of time between Config.Calls.minIntervalSeconds and Config.Calls.maxIntervalSeconds, then sends an incoming animal report.
Current call behavior
- accept with
E - decline with
Backspace - response window controlled by
Config.Calls.responseTimeSeconds - missed and declined calls both count toward the same cap
- hitting
Config.Calls.maxMissedCallsautomatically ends the shift
Event rotation
The resource tracks used events during a shift and groups scenes by shared coordinates to reduce immediate repetition. Once all events have been used, the pool resets.
Job Types
There are 4 job types.
Aggressive Animal
- drive to the reported location where a reporting NPC is being attacked
- use the tranquilizer dart gun to sedate the animal
- the animal becomes ragdolled for 30 seconds
- bring your truck close and interact to load the sedated animal
- drive to the shelter delivery point and unload
The animal attacks the reporting NPC, then redirects aggression to the player within the configured attack range. Nearby world peds flee from the animal.
Stray Capture
- take bait from the truck via the target interaction
- place the bait near the animal using the ghost preview system
- move away from the bait (at least 15m) and wait for the animal to approach
- once the animal is eating, sneak up while crouching to avoid spooking it
- get within capture range and interact to calm the animal
- load the calmed animal into the truck and deliver to the shelter
The animal wanders within its spawn radius. If the player approaches too quickly while standing, there is a configurable chance to spook the animal, causing it to flee before eventually returning.
Wildlife Removal
- drive to the reported location with no reporting NPC
- the animal patrols between predefined waypoints, wandering at each point
- stay crouched and approach carefully to avoid spooking it
- use the tranquilizer dart gun to sedate the animal
- load the sedated animal into the truck and deliver to the shelter
The animal follows a waypoint patrol route with detection ranges for standing vs crouching players. Nearby world peds flee within the configured radius.
Deceased Pickup
- drive to the reported location with no reporting NPC
- the animal is lying on the ground in a dead state
- interact to collect the remains into a body bag
- carry the body bag back to the truck and load it
No tranquilization or shelter delivery is required.
Tranquilizer System
A tranquilizer dart gun is provided through the inventory system when a player clocks in.
Current behavior
- On clock-in, the server gives the player a
weapon_g2item througho-link.inventory, along with one free pack of darts (Config.Tranquilizer.ammoPerCall, default 5). - Extra dart packs can be bought during the shift from the shift menu — the cost is taken out of the end-of-shift pay.
- Dart damage is restricted to only affect the active job's animal while on shift.
- A successful hit sedates the animal for
Config.Tranquilizer.sedationDuration(default 30 seconds). - If the animal wakes up before it is loaded, it must be tranquilized again.
- On clock-out, the weapon is removed from the player's inventory.
Damage restriction
The server intercepts all weaponDamageEvent events for the dart weapon. While on shift, dart damage only passes through to the active job animal. All other targets are blocked.
PvP tranq effect
Dart hits on other players trigger a brief screen effect and camera shake on the victim.
Bait System
Bait is used in stray capture jobs to lure frightened animals.
Current behavior
- Take bait from the truck via target interaction.
- The bait attaches to the player's hand with a carry animation.
- A ghost preview appears where the player aims with a max range of 8m.
- Press
Eto place the bait, orBackspaceto cancel. - A scent particle effect plays at the bait location.
- The player must move at least 15m away before the animal approaches.
- After a delay, the animal moves toward the bait.
- Once the animal is eating, the player can sneak up to capture range.
Spook mechanics
If the player approaches a stray too quickly while standing, there is a configurable chance to spook the animal. Spooked animals flee before eventually returning to the bait area.
Stealth Detection
The stealth system determines whether a player is sneaking for animal spook checks.
Native mode (default)
When Config.Stealth.useNativeStealth is true, the system uses GetPedStealthMovement to detect whether the player is crouching.
Fallback mode
When Config.Stealth.useNativeStealth is false (for servers with custom crouch systems), spook checks use random chance via Config.Stealth.fallbackSpookChance and Config.Stealth.fallbackSafeChance.
Animal Behavior
Each job type has distinct AI behavior for how the animal interacts with the player and the world.
Animal state machine
All animals follow a unified state machine:
ALIVE— Active, performing job-type-specific behaviorSEDATED— Tranquilized and ragdolled (temporary, wakes up after sedation duration)CAPTURED— Calmed by player (stray capture only)LOADED— Loaded into the truckDEAD— Killed or spawned dead (deceased pickup)
Escape detection
Each job type has its own escape radius. If the animal moves beyond that distance from its spawn point, it is considered escaped. An escaped animal triggers a complaint and cancels the current job.
World NPC reactions
Aggressive animals and wildlife events cause nearby world NPCs to flee within their configured radius.
Animal Loading and Delivery
After sedating or calming an animal, it must be loaded into the truck and, for most jobs, delivered to the shelter.
Loading
Bring the truck within range of the animal and interact to begin loading. The animal attaches to the cargo area at the configured offset.
Shelter delivery
For jobs with requiresDelivery = true, a delivery blip and waypoint appear. Drive to the shelter and interact to unload the animal.
Deceased remains
For deceased pickup jobs, interact with the animal to collect remains into a body bag, then carry it back to the truck and load it.
Mission Timers
Timers are distance-based, not fixed per event.
timeLimit = Config.Timer.baseTime + math.floor(distance * Config.Timer.timePerDistanceUnit)If the timer expires:
- the job can still be completed
- the speed bonus is lost
Config.Timer.expiredPenaltyis applied to the pay calculation
Progression
Progression is stored in the unified job_progression table under job = 'animalcontrol'.
Level rewards
Levels increase:
- pay multiplier
- tip chance
- tip range
Default progression is 5 levels from Volunteer through Chief Officer.
Daily streaks
Completing at least one job on consecutive real-world days increases daily_streak up to the configured cap.
Complaints and timeout
Complaints are added for:
- animal escape
- animal killed
- vehicle destruction
- death or downed state during shift
Complaints decay as jobs are completed. Reaching the configured limit causes a temporary timeout.
Payment
Per-job payment includes:
- base pay by job type
- distance bonus
- on-time speed bonus
- level multiplier
- late-job penalty multiplier
- streak bonus
- random tip
Per-job formula:
subtotal = floor((basePay + distanceBonus + speedBonus) * levelMultiplier * timerMultiplier)
total = subtotal + streakBonus + tipShift payout is settled when the shift ends, including forced endings such as hospitalization or disconnect — players never lose pay they already earned.
The following are deducted from the shift payout:
- vehicle damage charge (if the truck comes back banged up)
- ammo resupply costs (extra dart packs bought during the shift)
- gas fee
- taxes
Fines work differently: the vehicle destruction fine and the animal kill fine are charged on the spot, taken from the account set in Config.Payment.fineAccount (cash by default) — not from the shift payout.
Shift payouts are deposited to the account set in Config.Payment.payoutAccount (bank by default) through o-link.money.
Crew System
Crews are limited to 2 players.
Crew behavior
- the leader must already be on shift
- the invite target must be nearby
- the target cannot already be in a crew or active shift
- the leader is the only member who accepts or rejects dispatch calls
- both members can participate in the scene and receive payout breakdowns
- crew jobs add
Config.Crew.coopBonusPercent
Crew continuity
If one member leaves, disconnects, or dies, the remaining member can continue and may inherit the truck and shift state depending on who left.
Reporting NPC
For aggressive animal, stray capture, and some wildlife events, a random civilian NPC spawns near the animal to represent the person who called in the report.
The NPC cycles through contextual animations (beckoning, frightened, hand gestures) when the player is within range, switches to an ambient scenario when far away, and plays a thank-you animation on job completion.
A pool of 16 civilian ped models is used, with a random selection per job.
Vehicle System
An animal control truck spawns at the office vehicle spawn point when a player clocks in.
Current behavior
- license plate set to
ANIMAL - vehicle keys provided through
o-link - health monitored at a configurable interval
- target interactions for taking bait, loading animals, and loading remains
- destruction triggers a complaint, a fine, and dispatch stop
Vehicle damage charges
At clock-out, if the truck body health is below the configured threshold, a damage charge is calculated and deducted from the shift payout.
Crew vehicle sharing
When a crew is formed, the partner receives a reference to the leader's truck. If the leader clocks out, ownership transfers to the partner.
Safety Zones
Around each animal scene, two invisible speed zones slow down passing NPC traffic so cars don't barrel through and disrupt the job.
Current defaults:
- inner zone: 15m radius (traffic slows to a crawl)
- outer zone: 30m radius (traffic slows down)
Both zones are removed automatically when the job ends. Radii and speeds are configurable under Config.SafetyZone in shared/config/visuals.lua, or the whole system can be turned off with Config.SafetyZone.enabled = false.
HUD Overlay
A NUI panel appears during active jobs showing:
- mission timer countdown with late indicator
- job type label
- context-sensitive hint text synced to the crew partner when applicable
Waypoints
A floating 3D waypoint marker appears above the current destination.
It supports:
- configurable height offset
- distance-based scaling
- distance text
- visibility toggling by holding
H
Summary Output
Config.shiftSummary controls how end-of-shift information is shown:
'nui': NUI summary screen whenConfig.menuStyle ~= 'menu''text': service message througho-link.phonewhenConfig.usePhone = true, otherwise notification
Uniforms (Optional)
If Config.uniformsEnabled = true, the player's appearance is swapped to the configured animal-control outfit on clock-in and reverted on clock-out, death, or disconnect. The previous appearance is snapshotted and restored through o-link.clothing.
Default components in shared/config/outfits.lua are placeholders — replace the drawable and texture IDs with values from your clothing pack before enabling.
Phone Integration
If Config.usePhone = true, email notifications are sent through o-link.phone for key shift events:
- shift start welcome message
- vehicle destruction alerts
- death or hospitalization notices
- animal escape and kill incident reports
- end-of-shift summary with full payment breakdown
Tutorials
The resource includes 16 tutorial prompts covering:
- first clock-in
- incoming calls
- first decline or miss
- each job type
- tranquilizer hit
- bait placement
- animal loading and delivery
- timer expiry
- vehicle destruction
- first completion
- crew formation
- level-up
Players can toggle or reset tutorials with:
/animalcontroltutorials/animalcontroltutorialreset
Next Steps
Configuration Reference
Current configuration map and defaults for oxide-animalcontroljob, including job flow, progression, animal behavior, visuals, and o-link-dependent settings.
Admin & Developer Tools
Commands, admin permissions, builder usage, and progression SQL examples for oxide-animalcontroljob.