ars_hunting — Manual

Sistema de caça com zonas, spawn de animais, rastreador, isca, fogueira, loja e missões, integrado à progressão de skill do cw-rep.


Sumário

  1. Dependências
  2. Instalação
  3. Itens
  4. Configuração
  5. Zonas de caça
  6. Lojas
  7. Missões
  8. Fogueira
  9. Bloqueio de mira (AimBlock)
  10. Integrações
  11. Localização
  12. Estrutura de arquivos

Dependências

RecursoObrigatórioObservação
ox_libSimCallbacks, context menus, input dialogs, locale, cache e lib.versionCheck
oxmysqlSimCarregado no fxmanifest.lua (@oxmysql/lib/MySQL.lua)
qb-core ou ESXSimO bridge em server/bridge/ detecta qual está rodando e só ativa o correspondente
cw-repSimEsta fork depende do cw-rep. O servidor chama updateSkill(source, 'hunting'/'cooking', 5) ao colher, cozinhar e concluir missão; a loja chama getCurrentLevel('hunting') para liberar itens com levelmin
ox_inventorySim na práticaConfig.ImagesPath aponta para nui://ox_inventory/web/images/. Os ícones das lojas e missões vêm daí
ox_target ou qb-targetNãoDefinido por Config.Target. Com nil, o recurso cai no modo DrawText + tecla
rep-talkNPCNãoSó se Config.npcTalk = true. Cria o NPC “Seu Tião” com diálogo tutorial
pickle_waypointsNãoUsado dentro do diálogo do rep-talkNPC para marcar a zona de caça e o Mestre da Caça no mapa

Instalação

  1. Copie a pasta ars_hunting para resources/.
  2. Adicione ao server.cfg:
    ensure ars_hunting
  3. Registre os itens no inventário. O repositório traz os blocos prontos:
    • !INSTALLATION/ox_items.lua — para o ox_inventory (data/items.lua)
    • !INSTALLATION/qb_items.lua — para o qb-core (shared/items.lua)
  4. Copie as imagens de !INSTALLATION/images/ para a pasta de imagens do inventário (ox_inventory/web/images/).
  5. Registre a arma WEAPON_MUSKET e a munição ammo-musket no inventário se for manter esses itens na loja.
  6. Não há SQL a importar. Os delays de missão são persistidos via KVP do próprio recurso.

Itens

ItemUso
animal_trackerItem usável. Rastreia um animal próximo, com chance de falha
huntingbaitItem usável. É consumido e coloca uma isca no chão que atrai animais
campfireItem usável. É consumido e coloca a fogueira. Pode ser recolhido depois
raw_meatCarne crua colhida do animal
cooked_meatResultado de cozinhar carne crua na fogueira
skin_deer_ruined / skin_deer_low / skin_deer_medium / skin_deer_good / skin_deer_perfectPeles de veado, da mais comum para a mais rara
deer_hornDrop extra raro do veado

Os três primeiros são registrados como usáveis pelo bridge (CreateUseableItem no QBCore, equivalente no ESX). Os nomes vêm de Config.TrackerItem, Config.BaitItem e Config.Campfire.campfireItem.


Configuração

Arquivo: shared/config.lua.

Geral

CampoTipoObrigatórioDescrição
Config.npcTalkboolSimCria o NPC tutorial via rep-talkNPC. Requer o recurso instalado
Config.DebugboolSimAtiva logs de diagnóstico
Config.Targetstring | nilSim"ox_target", "qb-target" ou nil para desativar targeting e usar DrawText
Config.SpawnDelaynúmero (s)SimIntervalo entre spawns de animais. Padrão: 1
Config.DeleteEntityRadiusnúmero (m)SimDistância a partir da qual o animal é deletado. Padrão: 300.0
Config.ImagesPathstringSimCaminho NUI das imagens dos itens. Padrão: nui://ox_inventory/web/images/

Rastreamento

CampoTipoObrigatórioDescrição
Config.TrackerItemstringSimItem que dispara o rastreamento. Padrão: animal_tracker
Config.TrackingDurationnúmero (s)SimDuração do rastreamento. Padrão: 60
Config.DelayBetweenTracksnúmero (s)SimCooldown entre dois rastreamentos. Padrão: 120
Config.TrackingFailureChancenúmero (1-100)SimChance de o rastreamento não encontrar nada. Padrão: 20

Isca

CampoTipoObrigatórioDescrição
Config.BaitItemstringSimItem da isca. Padrão: huntingbait
Config.BaitAttractionDistancenúmero (m)SimRaio em que a isca atrai animais. Padrão: 100.0
Config.BaitTimeLimitnúmero (min)SimTempo até a isca sumir. Padrão: 2

AimBlock

CampoTipoObrigatórioDescrição
Config.AimBlock.enableboolSimLiga o bloqueio de tiro em jogadores e veículos com as armas listadas
Config.AimBlock.globalboolSimtrue bloqueia no mapa inteiro; false só dentro das zonas de caça
Config.AimBlock.weaponsToBlocklista de hashesSimArmas afetadas. Usa backticks: `WEAPON_HEAVYSNIPER_MK2`. Padrão: sniper pesada MK2 e mosquete

Fogueira

CampoTipoObrigatórioDescrição
Config.Campfire.enableboolSimLiga o sistema de fogueira e registra o item como usável
Config.Campfire.campfireItemstringSimItem da fogueira. Padrão: campfire
Config.Campfire.itemslistaSimReceitas. Cada entrada tem label, give (item produzido), cookTime (segundos) e require (lista de { label, item, quantity })

Zonas de caça

Configuradas em Config.HuntingZones, indexadas por nome. A zona incluída de fábrica é CHILIAD_MOUNTAINS, em vec3(1125.88, 4622.2, 80.08), com veado (a_c_deer).

Campo da zonaTipoObrigatórioDescrição
coordsvec3SimCentro da zona
radiusnúmeroSimRaio da zona em metros
maxSpawnsnúmeroSimMáximo de animais vivos ao mesmo tempo
allowedWeaponslista de strings | nilNãoArmas permitidas dentro da zona. nil libera qualquer arma
zone_radius.enableboolNãoDesenha o círculo da zona no mapa
zone_radius.colornúmeroNãoCor do círculo
zone_radius.opacitynúmeroNãoOpacidade do círculo (0-255)
blip.enable / blip.name / blip.type / blip.scale / blip.colorNãoBlip da zona no mapa
animalslistaSimAnimais que podem spawnar na zona

Campos de um animal

CampoTipoObrigatórioDescrição
modelstringSimModelo do ped animal (ex.: a_c_deer)
chancenúmero (1-100)SimPeso do animal no sorteio de spawn
harvestTimenúmero (s)SimDuração da colheita
harvestWeaponslista de stringsSimArmas que permitem esfolar (ex.: WEAPON_DAGGER, WEAPON_KNIFE)
bliptabelaNãoBlip do animal no mapa
markertabelaNãoMarcador 3D sobre o animal, com color = { r, g, b, a }
items.skinslistaSimPeles possíveis, cada uma com item, chance e maxQuantity
items.meatlistaSimCarnes possíveis, mesmo formato
items.extralistaSimDrops raros, mesmo formato

Como o loot é sorteado

A cada colheita o servidor sorteia uma pele e uma carne: rola 1-100 e escolhe aleatoriamente entre os itens cuja chance seja maior ou igual ao valor rolado. Isso significa que chance mais alta = item mais comum. A quantidade entregue é aleatória entre 1 e maxQuantity.

Além disso, em 30% das colheitas o servidor sorteia também um item de items.extra. Cada colheita dá 5 pontos de skill hunting no cw-rep (10 se saiu o extra).

O servidor recusa a colheita se o jogador estiver a mais de 8 metros do animal.


Lojas

Configuradas em Config.Shops, indexadas pelo nome exibido. A loja incluída é “Loja de Caçador”, em vec4(-679.28, 5834.25, 16.33, 132.58).

CampoTipoObrigatórioDescrição
coordsvec4SimPosição e heading do ped da loja
ped.enableboolSimSpawna um ped no local
ped.modelstringSimModelo do ped. Padrão: s_m_m_ammucountry
blip.enable / blip.type / blip.scale / blip.colorNãoBlip da loja
useDrawTextboolNãoSó tem efeito com Config.Target = nil: exibe o texto 3D de interação
items.selllistaNãoO que o jogador pode vender. Cada entrada tem item, price e label
items.buylistaNãoO que o jogador pode comprar. Cada entrada tem item, label, price, e opcionalmente description e levelmin

O levelmin é comparado com exports["cw-rep"]:getCurrentLevel('hunting'). Itens acima do nível do jogador aparecem na lista como desabilitados, com a descrição “Desbloqueia no LV X”.

A quantidade de compra ou venda é digitada pelo jogador em um input dialog, e o preço final é quantidade * price. O servidor valida dinheiro (compra) e posse do item (venda) antes de concluir.


Missões

O Mestre da Caça fica em Config.HuntMastervector4(17.04, 3688.28, 38.68, 147.12), modelo cs_fabien. Também define vehicleSpawn e vehicleDeposit, usados por missões que exigem veículo.

Campo da missãoTipoObrigatórioDescrição
idstringSimIdentificador único. É a chave do KVP de cooldown
labelstringSimNome da missão no menu
contentstringSimDescrição exibida ao jogador
iconstringSimÍcone FontAwesome
imagestringSimImagem exibida no menu (normalmente Config.ImagesPath .. "<item>.png")
typestringSim"item" (entregar itens) ou "animal" (capturar e transportar um animal)
delaynúmero (min)SimCooldown até poder repetir a mesma missão. 0 = sem cooldown
timenúmero (min)SimTempo limite para concluir
vehicle.enable / vehicle.modelSimSpawna um veículo no vehicleSpawn do Mestre da Caça
requirementslistaSó em type = "item"Itens exigidos: { item, label, quantity }
rewardslistaSimItens entregues ao concluir: { item, quantity }. Use item = "money" para dinheiro
animalstringSó em type = "animal"Modelo do animal alvo (ex.: a_c_boar)
spawnslista de vec3Só em type = "animal"Locais possíveis onde o animal aparece
bliptabelaSó em type = "animal"Blip do animal alvo
attachtabelaSó em type = "animal"pos e rot do animal quando carregado no ombro
vehicleAttachtabelaSó em type = "animal"pos e rot do animal quando colocado no veículo

Missões incluídas: mission_1 (10 peles prime), mission_2 (5 chifres) e mission_3 (capturar um javali e levá-lo de volta, com o bodhi2).

O cooldown de cada missão é gravado por jogador com SetResourceKvp usando a chave <id>_<license>, então sobrevive a restart do recurso. O servidor recusa a finalização se o jogador estiver a mais de 3 metros do Mestre da Caça. Concluir uma missão dá 5 pontos de skill hunting.


Fogueira

Usar o item campfire consome o item e posiciona o prop prop_beach_fire no chão. Interagindo com ela, o jogador abre um menu com as receitas de Config.Campfire.items; a receita padrão transforma 1 raw_meat em 1 cooked_meat em 5 segundos. Cozinhar dá 5 pontos de skill cooking no cw-rep.

A fogueira pode ser recolhida (devolve o item), desde que o jogador esteja a menos de 4 metros dela.


Bloqueio de mira (AimBlock)

Com Config.AimBlock.enable = true, ao equipar uma arma listada em weaponsToBlock o recurso passa a bloquear o disparo (DisablePlayerFiring e os controles de ataque) sempre que o jogador não estiver mirando livremente em um alvo válido — ou seja, quando estiver mirando em outro jogador, em um veículo, ou em um ped dentro de um veículo.

Na prática: as armas de caça só disparam contra animais. Com global = false, a restrição vale apenas dentro das zonas de caça.


Localização

As strings são traduzidas via ox_lib locale. Arquivos em locales/:

  • en.json — inglês
  • pt-br.json — português do Brasil

O locale ativo vem da convar ox:locale:

setr ox:locale "pt-br"

Nota: os textos do NPC “Seu Tião” (em client/hunting.lua) e vários label de itens em shared/config.lua estão escritos direto em português no código, fora do sistema de locale.


Estrutura de arquivos

ars_hunting/
├── client/
│   ├── modules/utils.lua   — helpers: drawText3D, notificação, validação de arma
│   ├── hunting.lua         — zonas, spawn e comportamento dos animais, colheita, rastreador, isca, NPC tutorial
│   ├── campfire.lua        — colocar/recolher fogueira e menu de cozinhar
│   ├── shops.lua           — peds das lojas, menu de compra/venda e gate de nível via cw-rep
│   ├── missions.lua        — menu do Mestre da Caça, missões de item e de animal, veículo e transporte
│   └── aimblock.lua        — loop que bloqueia disparo das armas de caça contra jogadores e veículos
├── server/
│   ├── bridge/esx.lua      — implementação do framework para ESX
│   ├── bridge/qb.lua       — implementação do framework para QBCore + itens usáveis
│   └── server.lua          — sorteio de loot, compra/venda, missões, KVP de cooldown, skills do cw-rep
├── shared/
│   └── config.lua          — zonas, animais, lojas, missões, fogueira, aimblock
├── locales/
│   ├── en.json
│   └── pt-br.json
├── !INSTALLATION/
│   ├── ox_items.lua        — bloco de itens para o ox_inventory
│   ├── qb_items.lua        — bloco de itens para o qb-core
│   └── images/             — imagens dos itens para a pasta do inventário
├── _icons/                 — ícones usados pelos menus do recurso
└── fxmanifest.lua