> For the complete documentation index, see [llms.txt](https://code-after-sex.gitbook.io/script-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-after-sex.gitbook.io/script-documentation/cas-advanced-hunting/events.md).

# Events

Events you can listen to or trigger from other resources.

## Server events

| Event                              | Fired when                                           |
| ---------------------------------- | ---------------------------------------------------- |
| `cas:server:onHuntingAnimalKilled` | A player kills a mission animal                      |
| `cas:server:deliverHuntingLoot`    | A player delivers loot (arg: `deliveredList`)        |
| `cas:server:onHuntingPlayerDied`   | A player dies during a hunt                          |
| `cas:server:onHuntingAbandoned`    | A player cancels their contract                      |
| `cas:server:analyzeTracks`         | A player analyzes tracks (arg: `data`)               |
| `cas:server:onTrackFound`          | A track is discovered (`trackType`, `qualityScore`)  |
| `cas:server:setLanguage`           | A player changes language (`language`)               |
| `cas:server:giveHuntingMap`        | A player accepts a contract (`data.tier`, `data.id`) |

`deliverHuntingLoot` items look like `{ species = hash, quality = hash, isPerfect = bool }`.

## Client events

| Event                             | Purpose                                   |
| --------------------------------- | ----------------------------------------- |
| `cas:client:huntingMissionEnded`  | Mission ended (success or cancel)         |
| `cas:client:spawnAnimalsOnRadius` | Spawn mission animals (`mission`)         |
| `cas:client:updateclientxp`       | Hunting XP updated (`xp`)                 |
| `cas:client:updateTraceXp`        | Trace XP updated (`xp`, `level`)          |
| `cas:client:setLanguage`          | Language changed (`language`, `selected`) |
| `cas:client:trackingPulse`        | Start Hunter Vision for a duration (ms)   |
| `cas:client:showHuntingMap`       | Display the hunting map UI (`metadata`)   |
| `cas:client:finishHunting`        | Contract completed and rewards given      |

## Bait system events

| Event                              | Purpose                                       |
| ---------------------------------- | --------------------------------------------- |
| `cas-hunting:client:beginBaitShop` | Open the bait shop UI (`npcPed`)              |
| `cas-hunting:client:openBaitShop`  | Bait shop data ready (`shopData`)             |
| `cas-hunting:client:baitPlaced`    | Bait placed (`baitCoords`)                    |
| `cas-hunting:client:attractAnimal` | Attract nearby animals to bait (`baitCoords`) |
| `cas-hunting:client:useBaitItem`   | Use a bait item (`itemName`)                  |

## Integration examples

**Custom achievement**

```lua
local playerKills = {}
AddEventHandler("cas:server:onHuntingAnimalKilled", function()
    local src = source
    playerKills[src] = (playerKills[src] or 0) + 1
    if playerKills[src] == 100 then
        TriggerClientEvent("achievements:unlock", src, "master_hunter")
    end
end)
```

**Track discovery reward**

```lua
AddEventHandler("cas:server:onTrackFound", function(trackType, qualityScore)
    local src = source
    if qualityScore == 3 then -- perfect track
        exports["cas-hunting"]:addTraceXp(src, 5)
    end
end)
```

## NUI callbacks (internal)

`loadConfig`, `closeHuntingMenu`, `startHunting`, `setLanguage`, `closeHuntingMap`, `closeBaitShop`, `purchaseBait`.
