Configuration Reference

Current configuration map and defaults for oxide-animalcontroljob, including job flow, progression, animal behavior, visuals, and o-link-dependent settings.

Reference for the current oxide-animalcontroljob config layout.

Config File Map

FilePurpose
shared/config.luaCore toggles, menu mode, summary mode, enums
shared/config/job.luaCrew, payment, complaints, timer, and call settings
shared/config/levels.luaLevel thresholds and rewards
shared/config/locations.luaOffice locations and shelter delivery point
shared/config/events.luaDispatch event list
shared/config/vehicles.luaAnimal control truck settings
shared/config/animals.luaAnimal models, tranquilizer, stealth, per-type behavior, loading
shared/config/props.luaBait, deceased bag, and animation settings
shared/config/visuals.luaNPCs, blips, reporting NPC, safety zones, waypoints
shared/config/tutorials.luaTutorial definitions
shared/config/outfits.luaOptional on-duty uniform (off by default)
server/main.luaServer-side rate limits

General Settings

File: shared/config.lua

SettingTypeDefaultDescription
Config.DebugbooleanfalseEnables debug logging
Config.usePhonebooleantrueSends service messages through o-link.phone instead of notification-only flow
Config.shiftSummarystring'text''nui' for popup summary when menu mode is not 'menu', 'text' for phone or toast summary
Config.menuStylestring'nui''nui' for the Vue menu, 'menu' for olink.menu
Config.MaxSlotsPerLocationnumber3Max concurrent shifts at an office

Enums

ShiftState

  • idle
  • waiting
  • on_call
  • working

JobType

  • aggressive_animal
  • stray_capture
  • wildlife_removal
  • deceased_pickup

Job Settings

File: shared/config/job.lua

Crew

SettingDefaultDescription
Config.Crew.maxSize2Crew size limit
Config.Crew.inviteTimeout60Crew invite expiry in seconds
Config.Crew.coopBonusPercent0.15Co-op bonus added to completed jobs

Payment

SettingDefaultDescription
Config.Payment.distanceBonusPerUnit0.30Distance bonus multiplier
Config.Payment.speedBonusAmount25Bonus when finishing before timer expiry
Config.Payment.vehicleDestroyFine200Cash fine when the truck is destroyed
Config.Payment.streakBonusPerDay10Daily streak bonus amount
Config.Payment.maxStreakDays7Daily streak cap
Config.Payment.gasFeePercent0.05Gross-pay gas deduction
Config.Payment.taxPercent0.10Gross-pay tax deduction
Config.Payment.payoutAccount'bank'Account net shift pay is deposited to ('bank', 'cash', 'dirty', etc.)
Config.Payment.fineAccount'cash'Account vehicle-destroy and animal-kill fines are taken from

Base pay by job type

Config.Payment.basePay = {
    [JobType.AGGRESSIVE_ANIMAL] = 85,
    [JobType.STRAY_CAPTURE]     = 70,
    [JobType.WILDLIFE_REMOVAL]  = 110,
    [JobType.DECEASED_PICKUP]   = 55,
}

Complaints

SettingDefaultDescription
Config.Complaints.maxComplaints3Complaints before timeout
Config.Complaints.timeoutMinutes30Timeout duration
Config.Complaints.animalEscapePenalty1Complaints added on animal escape
Config.Complaints.animalKillPenalty1Complaints added on animal kill
Config.Complaints.animalKillFine150Cash fine on animal kill
Config.Complaints.vehicleDestroyPenalty1Complaints added on vehicle destruction
Config.Complaints.deathPenalty1Complaints added on death or down
Config.Complaints.decayPerJob1Complaints removed per completed job

Timer

SettingDefaultDescription
Config.Timer.baseTime90Base mission time in seconds
Config.Timer.timePerDistanceUnit0.20Added seconds per unit from call acceptance to event
Config.Timer.expiredPenalty0.85Pay multiplier for late completion

Current timer formula:

timeLimit = Config.Timer.baseTime + math.floor(distance * Config.Timer.timePerDistanceUnit)

Calls

SettingDefaultDescription
Config.Calls.minIntervalSeconds15Minimum delay between dispatches
Config.Calls.maxIntervalSeconds45Maximum delay between dispatches
Config.Calls.responseTimeSeconds30Accept or decline window
Config.Calls.maxMissedCalls3Misses or declines before auto clock-out

Levels

File: shared/config/levels.lua

Each level entry defines:

  • title
  • requiredJobs
  • payMultiplier
  • tipChance
  • tipRange

Default progression is 5 levels from Volunteer through Chief Officer.

Locations

File: shared/config/locations.lua

Shelter delivery point

Config.ShelterDeliveryPoint = vector3(-1139.70, -319.82, 37.67)

This is used for all live animal transport jobs that require shelter delivery.

Office fields

Each Config.Locations entry contains:

  • name
  • coords
  • heading
  • vehicleSpawn
  • menuCamera

The default package ships with 1 office.

Events

File: shared/config/events.lua

Each event defines a dispatchable animal report.

FieldDescription
typeOne of the JobType values
labelLocale key for the job label
animalModelGTA animal model name
coordsEvent spawn position and heading
reportingNpcWhether to spawn a reporting civilian NPC
requiresDeliveryWhether the animal must be delivered to the shelter
animalWaypoints(Wildlife removal only) Array of patrol waypoints

The default package contains 55 events. Dispatch groups events by shared scene coordinates to reduce repeated locations back-to-back.

Event count by type

Job TypeEvents
Aggressive Animal13
Stray Capture15
Wildlife Removal5
Deceased Pickup22

Debug override

Set Config.DebugForceJobType to a JobType constant to restrict dispatch to a single job type for testing. Set it to nil for normal operation.

Config.DebugForceJobType = nil

Vehicle

File: shared/config/vehicles.lua

SettingDefaultDescription
Config.Vehicle.model'kennel'Animal control truck model
Config.Vehicle.healthCheckInterval1000Health monitor interval in ms
Config.Vehicle.destroyedThreshold150Engine-health destruction threshold
Config.Vehicle.damageChargeRate0.50Damage deduction per body-health point under threshold
Config.Vehicle.damageChargeThreshold950Body-health threshold for clock-out damage charges
Config.Vehicle.livery-1Optional livery index for models that ship multiple liveries (-1 = model default)
Config.Vehicle.extrasnilOptional { [extraId] = enabled } map to force-toggle vehicle extras (decals, replacement-model parts). nil applies none

Animals

File: shared/config/animals.lua

Animal models

Config.Animals maps model names to display name and health values. The default package includes 14 animal models (dogs, cats, coyote, mountain lion, panther, deer).

Tranquilizer

SettingDefaultDescription
Config.Tranquilizer.weaponHash'WEAPON_G2'Weapon hash for the dart gun
Config.Tranquilizer.weaponItem'weapon_g2'Inventory item name for the tranq gun
Config.Tranquilizer.ammoItem'ammo_pistol'Inventory item name for ammo — change this to match your inventory (QBCore: 'pistol_ammo', ox_inventory on ESX/QBX: 'ammo-9')
Config.Tranquilizer.ammoPerCall5Darts in each ammo pack (one free pack is handed out at clock-in)
Config.Tranquilizer.sedationDuration30000Sedation duration in ms
Config.Tranquilizer.ammoResupplyCost50Cost per additional ammo pack (deducted from shift pay)
Config.Tranquilizer.maxAmmoResupplies5Max additional packs per shift (first pack at clock-in is free)

Stealth detection

SettingDefaultDescription
Config.Stealth.useNativeStealthtrueUse native crouch detection
Config.Stealth.fallbackSpookChance0.35Spook chance when not using native stealth
Config.Stealth.fallbackSafeChance0.70Safe chance when using fallback mode

Animal behavior

Per-job behavior settings live in Config.AnimalBehavior. Each job type defines:

  • task type
  • detection and escape radii
  • spook and flee distances
  • wander behavior
  • NPC reaction radii

Animal loading

SettingDefaultDescription
Config.AnimalLoading.loadDuration5000Loading progress bar duration in ms
Config.AnimalLoading.unloadDuration4000Unloading progress bar duration in ms
Config.AnimalLoading.loadRange3.0Max distance from animal to begin loading
Config.AnimalLoading.shelterRange15.0Max distance from shelter to unload
Config.AnimalLoading.vehicleAttachOffsetvec3(0.0, -1.5, 0.5)Offset inside the vehicle cargo area where the loaded animal attaches
Config.AnimalLoading.vehicleAttachRotationvec3(0.0, 0.0, 0.0)Rotation applied to the loaded animal at the attach offset

Props

File: shared/config/props.lua

This file controls:

  • bait prop model and placement range
  • bait scent particle effect
  • bait player attachment offsets
  • deceased bag model and durations
  • deceased bag carry animation
  • capture, bait placement, load, and unload progress bar animations

Primary props:

  • bait (dog bowl)
  • deceasedBag (bin bag)

Visuals

File: shared/config/visuals.lua

NPC and blips

  • Config.NpcModel
  • Config.NpcScenario
  • Config.Blip
  • Config.EventBlip
  • Config.DeliveryBlip

Reporting NPC models

Config.ReportingNpcModels contains 16 possible civilian models for the person who reported the animal incident.

Reporting NPC behavior

Config.ReportingNPC controls:

  • stand offset from animal
  • animation cycle (beckoning, frightened, hand gestures)
  • thank-you animation
  • far-away scenario
  • animation distance threshold

Safety zones

Config.SafetyZone controls:

  • whether safety zones run (enabled)
  • the slow-traffic rings around active job scenes (speedZones — each entry sets a radius and a speed)

Waypoints

Config.Waypoints controls marker height, scaling, and render timing.

Outfits

File: shared/config/outfits.lua

Optional on-duty uniform applied through o-link.clothing when the player clocks in and reverted on clock-out / death / disconnect.

SettingDefaultDescription
Config.uniformsEnabledfalseMaster switch — leave false to disable the uniform feature entirely
Config.AnimalControlOutfitMale{ components, props }Component/prop drawable + texture IDs applied to male peds
Config.AnimalControlOutfitFemale{ components, props }Component/prop drawable + texture IDs applied to female peds

The default values are placeholders (drawable = 0, texture = 0) — replace them with valid IDs from your clothing pack before enabling. The previous appearance is snapshotted on apply and restored on revert via o-link.clothing.SetAppearance / o-link.clothing.Revert.

Tutorials

File: shared/config/tutorials.lua

Config.Tutorials contains 16 first-time guidance prompts. Each entry defines:

  • icon
  • title
  • body
  • position
  • duration

Server Rate Limits

File: server/main.lua

Current rate-limited actions include:

  • clockIn
  • clockOut
  • acceptCall
  • rejectCall
  • completeJob
  • crewInvite
  • respondToInvite
  • propSync
  • requestSedation
  • requestCalm
  • requestCapture
  • requestLoad
  • requestCollect
  • requestLoadDeceased
  • requestBaitPlace
  • requestAmmo
  • animalWokeUp
  • baitReturned
  • updateAnimal
  • updateReportingNpc
  • updateVehicle
  • vehicleDestroyed
  • animalEscaped
  • animalKilled
  • applyUniform
  • removeUniform

Next Steps