Configuration Reference

Complete reference for all oxide-animalcontroljob configuration settings.

Complete reference for all oxide-animalcontroljob configuration settings, organized by config file.


Config File Map

FilePurpose
shared/config.luaGeneral settings (debug, phone, menu style, slot limits, shift states, job types)
shared/config/job.luaCrew, payment, complaints, timer, call dispatch settings
shared/config/levels.luaProgression level definitions
shared/config/locations.luaOffice locations with NPC and vehicle spawn positions, shelter delivery point
shared/config/events.luaAll 55 job events with coordinates, animal models, and behavior flags
shared/config/vehicles.luaService vehicle model and health settings
shared/config/animals.luaAnimal model registry, tranquilizer config, stealth detection, per-type behavior, loading settings
shared/config/props.luaBait props, deceased bag, progress bar animations
shared/config/visuals.luaNPC models, blips, reporting NPC behavior, safety zones, waypoints
shared/config/tutorials.luaTutorial tooltip definitions
shared/init.luaBridge initialization, debug function
server/main.luaRate limit configuration

General Settings

File: shared/config.lua

SettingTypeDefaultDescription
Config.DebugbooleanfalseEnable debug logging with [oxide-animalcontroljob] prefix
Config.usePhonebooleantrueSend shift emails via phone instead of toast notifications
Config.shiftSummarystring'text'Shift summary display mode: 'nui' for popup summary screen, 'text' for email summary
Config.menuStylestring'nui'Dispatcher menu style: 'nui' for Vue shift menu with cinematic camera, 'menu' for Bridge.Menu context menu
Config.MaxSlotsPerLocationnumber3Maximum concurrent shift slots per office location

Job Settings

File: shared/config/job.lua

Crew

SettingTypeDefaultDescription
Config.Crew.maxSizenumber2Maximum crew members (leader + partner)
Config.Crew.inviteTimeoutnumber60Seconds before a crew invite expires
Config.Crew.coopBonusPercentnumber0.15Bonus percentage applied to jobs completed while in a crew (15%)

Payment

SettingTypeDefaultDescription
Config.Payment.basePaytableSee belowBase pay per job type
Config.Payment.distanceBonusPerUnitnumber0.30Bonus per distance unit from accept location to event
Config.Payment.speedBonusAmountnumber25Flat bonus for completing a job before the timer expires
Config.Payment.vehicleDestroyFinenumber200Flat fine when the service truck is destroyed
Config.Payment.streakBonusPerDaynumber10Bonus added per consecutive daily streak day
Config.Payment.maxStreakDaysnumber7Maximum streak days (caps the streak bonus)
Config.Payment.gasFeePercentnumber0.05Gas fee as a percentage of gross pay (5%)
Config.Payment.taxPercentnumber0.10Tax as a percentage of gross pay (10%)

Base Pay by Job Type

Job TypeBase Pay
Aggressive Animal$85
Stray Capture$70
Wildlife Removal$110
Deceased Pickup$55
Config.Payment.basePay = {
    [JobType.AGGRESSIVE_ANIMAL] = 85,
    [JobType.STRAY_CAPTURE]     = 70,
    [JobType.WILDLIFE_REMOVAL]  = 110,
    [JobType.DECEASED_PICKUP]   = 55,
}

Complaints

SettingTypeDefaultDescription
Config.Complaints.maxComplaintsnumber3Complaints needed to trigger a suspension
Config.Complaints.timeoutMinutesnumber30Suspension duration in minutes
Config.Complaints.animalEscapePenaltynumber1Complaints added when an animal escapes
Config.Complaints.animalKillPenaltynumber1Complaints added when an animal is killed
Config.Complaints.animalKillFinenumber150Fine deducted from cash when an animal is killed
Config.Complaints.vehicleDestroyPenaltynumber1Complaints added when the service truck is destroyed
Config.Complaints.deathPenaltynumber1Complaints added when the player dies on shift
Config.Complaints.decayPerJobnumber1Complaints removed per successful job completion

Timer

SettingTypeDefaultDescription
Config.Timer.baseTimenumber90Base timer in seconds before distance scaling
Config.Timer.timePerDistanceUnitnumber0.20Additional seconds per distance unit from player to event
Config.Timer.expiredPenaltynumber0.85Payment multiplier when completing after the timer expires (15% penalty)

Calls

SettingTypeDefaultDescription
Config.Calls.minIntervalSecondsnumber15Minimum seconds between dispatch calls
Config.Calls.maxIntervalSecondsnumber45Maximum seconds between dispatch calls
Config.Calls.responseTimeSecondsnumber30Seconds to accept/decline a call before it counts as missed
Config.Calls.maxMissedCallsnumber3Missed/declined calls before automatic clock-out

Levels

File: shared/config/levels.lua

Each level is defined as an entry in Config.Levels:

FieldTypeDescription
titlestringLocale key for the level title
requiredJobsnumberTotal jobs needed to reach this level
payMultipliernumberMultiplier applied to base pay calculation
tipChancenumberProbability of receiving a tip (0.0 - 1.0)
tipRangetableMin/max tip amount { min, max }

Default Levels

Config.Levels = {
    [1] = { title = 'level.volunteer',        requiredJobs = 0,   payMultiplier = 1.0,  tipChance = 0.10, tipRange = { 5, 15 }  },
    [2] = { title = 'level.handler',          requiredJobs = 15,  payMultiplier = 1.1,  tipChance = 0.15, tipRange = { 5, 20 }  },
    [3] = { title = 'level.senior_handler',   requiredJobs = 40,  payMultiplier = 1.2,  tipChance = 0.25, tipRange = { 10, 30 } },
    [4] = { title = 'level.field_supervisor', requiredJobs = 80,  payMultiplier = 1.35, tipChance = 0.30, tipRange = { 10, 40 } },
    [5] = { title = 'level.chief_officer',    requiredJobs = 150, payMultiplier = 1.5,  tipChance = 0.40, tipRange = { 15, 50 } },
}

Locations

File: shared/config/locations.lua

Each location in Config.Locations defines a complete animal control office:

FieldTypeDescription
namestringLocale key for the location name
coordsvector3Dispatcher NPC position
headingnumberNPC facing direction
vehicleSpawnvec4Service truck spawn position and heading
menuCameratableCamera settings for NUI menu (coords, heading, rotation, fov)

Shelter Delivery Point

Config.ShelterDeliveryPoint defines the global delivery coordinates for all live animal transport jobs.

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

Default Location

Config.Locations = {
    {
        name = 'location.animal_control_office',
        coords = vector3(-1162.75, -321.83, 37.61),
        heading = 172.06,
        vehicleSpawn = vec4(-1181.48, -340.36, 37.29, 339.7),
        menuCamera = {
            coords = vector3(-1172.27, -334.03, 42.44),
            heading = 339.69,
            rotation = vector3(0.00, 0.00, 0.00),
            fov = 50.0,
        },
    },
}

Events

File: shared/config/events.lua

Each event in Config.Events defines an animal report:

FieldTypeDescription
typestringJob type constant (JobType.AGGRESSIVE_ANIMAL, JobType.STRAY_CAPTURE, JobType.WILDLIFE_REMOVAL, JobType.DECEASED_PICKUP)
labelstringLocale key for the event label
animalModelstringGTA animal model name
coordsvec4Spawn position and heading for the animal
reportingNpcbooleanWhether to spawn a reporting civilian NPC
requiresDeliverybooleanWhether the animal must be delivered to the shelter
animalWaypointstable(Wildlife removal only) Array of vector3 patrol waypoints

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 to nil for normal operation.

Config.DebugForceJobType = nil -- Set to JobType.STRAY_CAPTURE to test only strays

Vehicle

File: shared/config/vehicles.lua

SettingTypeDefaultDescription
Config.Vehicle.modelstring'kennel'Animal control truck model name (Vapid Kennel addon)
Config.Vehicle.spawnDistancenumber5.0Distance threshold for spawn area clearing
Config.Vehicle.healthCheckIntervalnumber1000Milliseconds between health checks
Config.Vehicle.destroyedThresholdnumber150Engine health below which the truck is considered destroyed
Config.Vehicle.damageChargeRatenumber0.50Dollar charge per health point below damage threshold
Config.Vehicle.damageChargeThresholdnumber950Body health below which damage charges apply

Animals

File: shared/config/animals.lua

Animal Models

Config.Animals maps animal model names to their display name and health values:

ModelNameHealth
a_c_rottweilerRottweiler200
a_c_rottweiler_02Rottweiler200
a_c_shepherdGerman Shepherd200
a_c_huskyHusky200
a_c_retrieverGolden Retriever200
a_c_poodlePoodle100
a_c_pugPug80
a_c_westyWest Highland Terrier100
a_c_cat_01Cat80
a_c_cat_02Cat80
a_c_coyoteCoyote250
a_c_mtlionMountain Lion350
a_c_pantherPanther400
a_c_deerDeer200

Tranquilizer

SettingTypeDefaultDescription
Config.Tranquilizer.weaponHashstring'WEAPON_G2'Weapon hash for the tranquilizer dart gun
Config.Tranquilizer.ammoPerCallnumber5Darts provided per dispatch call
Config.Tranquilizer.sedationDurationnumber30000Milliseconds the animal stays sedated after a hit

Stealth Detection

SettingTypeDefaultDescription
Config.Stealth.useNativeStealthbooleantrueUse GetPedStealthMovement for crouch detection
Config.Stealth.fallbackSpookChancenumber0.35Chance to spook per check when not using native stealth
Config.Stealth.fallbackSafeChancenumber0.70Chance to be considered "sneaking" when using fallback mode

Animal Behavior

Per-job-type behavior settings in Config.AnimalBehavior:

Aggressive Animal

SettingTypeDefaultDescription
taskstring'combat'Behavior type
attackPlayerRangenumber10.0Range at which the animal redirects aggression to the player
escapeRadiusnumber80.0Distance from spawn beyond which the animal is considered escaped
npcScanRadiusnumber30.0Radius to scan for nearby world peds to target
npcFleeRadiusnumber20.0Radius within which world peds flee from the animal

Stray Capture

SettingTypeDefaultDescription
taskstring'stray'Behavior type
wanderRadiusnumber15.0Area the animal wanders in
escapeRadiusnumber60.0Distance from spawn beyond which the animal is considered escaped
fleeRangenumber12.0Distance at which the animal flees if the player approaches standing
sneakRangenumber5.0Distance the player can approach while crouching without spooking
spookChancenumber0.440% chance to spook if the player approaches standing
spookFleeDistancenumber20.0How far the animal runs when spooked
returnToBaitDelaynumber8000Milliseconds before a spooked animal returns to bait
baitApproachDelaynumber5000Milliseconds after player leaves before animal approaches bait
captureRangenumber2.5Distance required to calm/capture the animal

Wildlife Removal

SettingTypeDefaultDescription
taskstring'patrol'Behavior type
spotRangenumber25.0Distance at which the animal spots a standing player
sneakRangenumber12.0Distance a crouching player can approach
panicRangenumber5.0Distance that spooks regardless of crouch state
wanderAtPointRadiusnumber8.0Wander radius at each waypoint
wanderAtPointTimetable{ 5000, 10000 }Min/max milliseconds to wander before moving to next waypoint
escapeRadiusnumber100.0Distance from spawn beyond which the animal is considered escaped
npcFleeRadiusnumber25.0Radius within which world peds flee from the wildlife

Deceased Pickup

SettingTypeDefaultDescription
taskstring'dead'Behavior type (ragdoll/dead state)

Animal Loading

SettingTypeDefaultDescription
Config.AnimalLoading.loadDurationnumber5000Progress bar duration for loading animal into truck (ms)
Config.AnimalLoading.unloadDurationnumber4000Progress bar duration for unloading at shelter (ms)
Config.AnimalLoading.loadRangenumber3.0Max distance from animal to begin loading
Config.AnimalLoading.shelterRangenumber5.0Max distance from shelter point to unload
Config.AnimalLoading.vehicleAttachOffsetvec3(0.0, -1.5, 0.5)Offset inside vehicle cargo area for attached animal
Config.AnimalLoading.vehicleAttachRotationvec3(0.0, 0.0, 0.0)Rotation for vehicle-attached animal

Props

File: shared/config/props.lua

Bait

SettingTypeDefaultDescription
Config.Props.bait.modelstring'm25_1_prop_m51_dog_bowl_full'Bait prop model (dog bowl)
Config.Props.bait.placementRangenumber8.0Max placement distance from player (meters)
Config.Props.bait.playerLeaveRadiusnumber15.0Player must be this far from bait before the animal approaches

Scent Effect

SettingTypeDefaultDescription
Config.Props.bait.scentEffect.dictstring'core'Particle effect dictionary
Config.Props.bait.scentEffect.namestring'exp_grd_bzgas_smoke'Particle effect name
Config.Props.bait.scentEffect.scalenumber0.2Particle scale
Config.Props.bait.scentEffect.offsetvec3(0.0, 0.0, 0.15)Offset from bait position

Player Attach

SettingTypeDefaultDescription
Config.Props.bait.playerAttach.bonenumber28422Player bone (SKEL_R_Hand)
Config.Props.bait.playerAttach.offsetvec3(0.01, -0.1, -0.2)Attachment offset
Config.Props.bait.playerAttach.rotationvec3(0.0, 0.0, 0.0)Attachment rotation
Config.Props.bait.playerAttach.animDictstring'anim@heists@box_carry@'Carry animation dictionary
Config.Props.bait.playerAttach.animNamestring'idle'Carry animation clip

Deceased Bag

SettingTypeDefaultDescription
Config.DeceasedBag.modelstring'm25_2_prop_m52_binbag_01a'Body bag prop model (bin bag)
Config.DeceasedBag.pickupDurationnumber1500Remains collection duration (ms)
Config.DeceasedBag.loadDurationnumber4000Loading into truck duration (ms)

Animations

Progress bar animations for different actions:

AnimationDurationDictClipLabel
Capture8000msmini@repairfixing_a_playerprogress.capturing_animal
Bait Place3000mspickup_objectpickup_lowprogress.placing_bait
Load5000msmini@repairfixing_a_playerprogress.loading_animal
Unload4000msanim@heists@box_carry@idleprogress.unloading_animal

Visuals

File: shared/config/visuals.lua

NPC and Blip Settings

SettingTypeDefaultDescription
Config.NpcModelstring's_m_m_doctor_01'Ped model for the dispatcher NPC
Config.NpcScenariostring'WORLD_HUMAN_CLIPBOARD'Ambient scenario the NPC performs
Config.Blip.spritenumber273Map blip sprite ID
Config.Blip.colornumber2Map blip color
Config.Blip.scalenumber0.8Map blip scale
Config.Blip.labelstring'blip.animal_control'Locale key for blip label
Config.EventBlip.spritenumber463Blip sprite for job event locations
Config.EventBlip.colornumber1Event blip color
Config.EventBlip.scalenumber1.2Event blip scale
Config.DeliveryBlip.spritenumber141Blip sprite for shelter delivery point
Config.DeliveryBlip.colornumber2Delivery blip color
Config.DeliveryBlip.scalenumber1.0Delivery blip scale

Reporting NPC Behavior

SettingTypeDefaultDescription
Config.ReportingNPC.standOffsetvec3(3.0, 0.0, 0.0)Offset from animal for NPC standing position
Config.ReportingNPC.animationDistancenumber40.0Distance threshold for animation vs ambient scenario
Config.ReportingNPC.farScenariostring'WORLD_HUMAN_STAND_MOBILE'Ambient scenario when player is far away

Safety Zone

SettingTypeDefaultDescription
Config.SafetyZone.enabledbooleantrueEnable traffic safety zones around animal scenes
Config.SafetyZone.scenarioBlockRadiusnumber15.0Radius to block ambient ped scenarios
Config.SafetyZone.clearVehiclesRadiusnumber8.0Radius to clear parked vehicles on job start

Speed Zone Tiers

TierRadiusSpeed
Inner15m8.0
Outer30m20.0

Waypoints

SettingTypeDefaultDescription
Config.Waypoints.heightOffsetnumber5.0Height above ground for waypoint marker
Config.Waypoints.scaleMinnumber0.5Minimum scale at far distance
Config.Waypoints.scaleMaxnumber1.0Maximum scale at near distance
Config.Waypoints.scaleNearDistnumber30.0Distance at which maximum scale is used
Config.Waypoints.scaleFarDistnumber300.0Distance at which minimum scale is used

Tutorials

File: shared/config/tutorials.lua

17 contextual tutorial tooltips guide new players. Each entry defines an icon, title, body text, screen position, and auto-dismiss duration. Tutorials persist via KVP storage and are shown once per topic.

Tutorial Keys

KeyTrigger
first_clockinFirst time clocking in
first_incoming_callFirst dispatch call received
first_call_declineFirst declined or missed call
first_aggressive_jobFirst aggressive animal job
first_stray_jobFirst stray capture job
first_wildlife_jobFirst wildlife removal job
first_deceased_jobFirst deceased pickup job
first_tranq_hitFirst successful tranquilizer hit
first_bait_placedFirst bait placement
first_animal_loadedFirst animal loaded into truck
first_shelter_deliveryFirst shelter delivery
first_timer_expiredFirst late job finish
first_vehicle_damageFirst vehicle destruction
first_job_completeFirst job completed
first_crewFirst crew formation
first_level_upFirst level up

Enums

ShiftState

ValueConstantDescription
'idle'ShiftState.IDLENot on shift
'waiting'ShiftState.WAITINGOn shift, waiting for dispatch
'on_call'ShiftState.ON_CALLCall accepted, driving to scene
'working'ShiftState.WORKINGHandling the animal

JobType

ValueConstantDescription
'aggressive_animal'JobType.AGGRESSIVE_ANIMALAggressive animal combat/tranquilize job
'stray_capture'JobType.STRAY_CAPTUREStray animal bait and capture job
'wildlife_removal'JobType.WILDLIFE_REMOVALWildlife patrol and tranquilize job
'deceased_pickup'JobType.DECEASED_PICKUPDeceased animal remains collection job

Rate Limits

File: server/main.lua

Server-side rate limiting prevents action spam. Each action has a cooldown period in milliseconds:

ActionCooldown (ms)Description
clockIn2000Clocking in to a shift
clockOut2000Clocking out of a shift
acceptCall2000Accepting a dispatch call
rejectCall2000Rejecting a dispatch call
completeJob5000Completing a service job
crewInvite5000Sending a crew invite
respondToInvite2000Accepting/declining a crew invite
propSync500Prop state sync to crew partner
animalSync1000Animal state sync to crew partner
updateAnimal5000Animal network ID update
updateReportingNpc5000Reporting NPC network ID update
updateVehicle2000Service truck network ID update
vehicleDestroyed10000Vehicle destroyed event
animalEscaped5000Animal escaped event
animalKilled10000Animal killed event

Next Steps