Mecânica Básica de Pesca
Um sistema de pesca oferece uma das atividades paralelas mais relaxantes e gratificantes em um servidor de roleplay. O loop principal envolve equipar uma vara de pescar, aproximar-se de um corpo de água válido, lançar a linha, esperar por uma mordida e completar um minijogo de captura. Comece definindo zonas de pesca como áreas poligonais ou círculos baseados em raios que cobrem lagos, rios, a costa oceânica e cais. Cada zona deve ter a sua própria tabela de população de peixes com espécies que logicamente pertencem a esse ambiente: espécies de água doce como o robalo e a truta em lagos, espécies de água salgada como o atum e o tubarão no mar, e peixes específicos de rios como o salmão perto de águas correntes. Quando o jogador lança a linha, inicia um cronômetro aleatório entre um tempo de espera mínimo e máximo, influenciado pela isca utilizada, hora do dia, condições climáticas e nível de habilidade de pesca do jogador. Maior habilidade reduz o tempo de espera e aumenta a chance de fisgar espécies raras. A animação do elenco deve usar TaskStartScenarioInPlace com um cenário de pesca para fazer o personagem do jogador segurar visualmente uma vara e ficar na beira da água.
O minijogo de captura
O minijogo é o que separa um sistema de pesca envolvente de um script AFK enfadonho. Projete um minijogo baseado em habilidades que apareça como uma sobreposição de NUI quando um peixe morde. Uma abordagem popular é a mecânica da barra móvel, onde um marcador oscila para frente e para trás em um medidor e o jogador deve pressionar uma tecla quando o marcador estiver dentro de uma zona alvo destacada. O tamanho da zona-alvo varia de acordo com a classificação de dificuldade do peixe, com espécies comuns oferecendo uma janela generosa e peixes lendários exigindo um timing preciso. Adicione várias rodadas a uma única tentativa de captura, onde cada pressionamento de tecla bem-sucedido aproxima o peixe e uma falha permite que ele nade para mais longe. Implemente um medidor de tensão que aumenta à medida que o jogador gira e diminui quando ele deixa a linha descansar, com a linha quebrando se a tensão exceder a classificação máxima da haste. Diferentes níveis de vara devem ter limites de tensão mais altos, dando aos jogadores um motivo para atualizar seus equipamentos à medida que avançam na árvore de habilidades de pesca.
-- Fish loot table configuration
Config.FishingZones = {
['alamo_sea'] = {
label = 'Alamo Sea',
center = vector3(482.12, 3614.89, 33.17),
radius = 200.0,
fishTable = {
{ item = 'fish_bass', label = 'Largemouth Bass', weight = {1.5, 4.2}, chance = 35, difficulty = 1, price = 45 },
{ item = 'fish_catfish', label = 'Channel Catfish', weight = {2.0, 8.5}, chance = 25, difficulty = 2, price = 65 },
{ item = 'fish_bluegill', label = 'Bluegill', weight = {0.3, 1.2}, chance = 30, difficulty = 1, price = 20 },
{ item = 'fish_golden', label = 'Golden Trout', weight = {1.0, 3.0}, chance = 8, difficulty = 4, price = 250 },
{ item = 'item_boot', label = 'Old Boot', weight = {0.5, 0.5}, chance = 2, difficulty = 1, price = 0 },
},
requiredBait = { 'bait_worm', 'bait_minnow', 'bait_lure' },
},
}Zonas de caça e desova de animais
A caça requer uma abordagem mais dinâmica do que a pesca porque os animais são entidades visíveis e móveis que os jogadores devem rastrear, perseguir e atirar. Defina zonas de caça em áreas selvagens, como as florestas do condado de Blaine, o sopé do Monte Chiliad e as regiões desérticas ao redor de Sandy Shores. Dentro de cada zona, crie animais pediátricos usando modelos animais nativos do GTA em intervalos controlados. Use CreatePed com hashes de modelo animal e dê a eles tarefas de deslocamento usando TaskWanderStandard para que eles vaguem naturalmente dentro dos limites da zona. Controle a densidade de spawn com cuidado para evitar problemas de desempenho: limite cada zona a 5-8 animais ativos por vez por jogador, e apenas spawne animais quando um jogador com licença de caça ou arma estiver a uma distância razoável da zona. Desapareça os animais de forma limpa quando não houver caçadores por perto para liberar espaços de entidade. Agrupe animais em rebanhos para espécies como veados, onde atirar em um faz com que o resto fuja usando TaskSmartFleePed, criando uma experiência de caça realista que recompensa a perseguição do paciente em vez de correr e atirar.
Tabelas de saque e colheita
Quando um jogador mata um animal com sucesso, ele não deve simplesmente receber itens instantaneamente. Implemente uma mecânica de colheita onde o jogador se ajoelha ao lado da carcaça do animal e realiza uma animação de abate que dura vários segundos, durante a qual fica vulnerável. O saque largado depende da espécie animal, da arma usada e do posicionamento do tiro. Um tiro certeiro na cabeça com um rifle produz mais carne intacta e uma pele imaculada, enquanto pulverizar o animal com uma arma automática danifica a pele e destrói parte da carne. Acompanhe a colocação do tiro comparando a posição do dano mortal com as coordenadas ósseas da cabeça do animal. Cada animal deve deixar cair uma combinação de carne crua, pele ou couro e itens secundários como chifres, penas ou gordura, dependendo da espécie. Use metadados de itens para armazenar o grau de qualidade de cada item colhido, o que afeta o preço de venda e a qualidade dos produtos artesanais quando processados por um marroquino ou cozinheiro.
-- Server-side harvesting logic
RegisterNetEvent('hunting:harvest')
AddEventHandler('hunting:harvest', function(netId, weaponHash, boneHit)
local src = source
local entity = NetworkGetEntityFromNetworkId(netId)
if not DoesEntityExist(entity) then return end
local model = GetEntityModel(entity)
local animalData = Config.Animals[model]
if not animalData then return end
-- Determine quality based on weapon and hit location
local quality = 'poor'
if boneHit == 'head' then
if IsCleanWeapon(weaponHash) then
quality = 'pristine'
else
quality = 'good'
end
elseif IsCleanWeapon(weaponHash) then
quality = 'good'
end
local priceMultiplier = Config.QualityMultipliers[quality] -- pristine=1.5, good=1.0, poor=0.5
-- Give loot items
for _, loot in ipairs(animalData.lootTable) do
if math.random(100) <= loot.chance then
local count = math.random(loot.min, loot.max)
exports.ox_inventory:AddItem(src, loot.item, count, {
quality = quality,
animal = animalData.label,
weight = math.random(loot.weightMin * 10, loot.weightMax * 10) / 10,
})
end
end
-- Delete carcass after harvesting
DeleteEntity(entity)
TriggerClientEvent('hunting:harvested', src)
end)Sistema de progressão de habilidades
Um sistema de progressão mantém a pesca e a caça envolventes a longo prazo, recompensando jogadores dedicados com melhorias tangíveis. Acompanhe níveis de habilidade separados para pesca e caça, cada um aumentando através de capturas ou mortes bem-sucedidas. À medida que a habilidade de pesca aumenta, o cronômetro de mordida diminui, os peixes raros se tornam mais comuns na tabela de saque, a zona-alvo do minijogo fica um pouco mais ampla e o jogador desbloqueia o acesso a locais de pesca premium que estão restritos aos limites de habilidade. Para a caça, níveis de habilidade mais altos permitem ao jogador ver rastros de animais como marcadores sutis no solo, aumentar o alcance de detecção para avistar animais, reduzir o raio de ruído ao se mover pelo mato e desbloquear a capacidade de usar chamados e cheiros que atraem espécies específicas para a localização do caçador. Armazene XP de habilidade em seu banco de dados e calcule o nível usando uma fórmula de escalonamento em que cada nível sucessivo requer mais XP do que o anterior, evitando que os jogadores atinjam o limite muito rapidamente e ainda proporcionando um avanço constante que parece gratificante durante cada sessão de jogo.
Equipamentos e atualizações
Os níveis de equipamento fornecem aos jogadores objetivos de curto prazo e metas de gastos significativas na economia da pesca e da caça. Para a pesca, ofereça uma progressão desde varas básicas de madeira que só conseguem capturar peixes comuns, até varas de fibra de vidro com melhor controle de tensão, até varas de fibra de carbono que reduzem a dificuldade de captura e aumentam as chances de peixes raros. Combine varas com rolos que afetam a rapidez com que o jogador pode recuperar a linha durante o minijogo. Os tipos de iscas devem influenciar diretamente quais espécies de peixes podem ser capturadas: minhocas para água doce em geral, peixinhos para peixes predadores, iscas especializadas para espécies raras e iscas premium que dobram a taxa de mordida. Para a caça, ofereça vantagens específicas para armas onde um arco composto é silencioso, mas requer alcance mais próximo, um rifle de ferrolho é ideal para mortes limpas à distância e uma espingarda é eficaz para pássaros, mas danifica a pele de animais maiores. Adicione acessórios de caça como binóculos para maior alcance de observação, trajes ghillie que reduzem o raio de detecção do jogador por animais e uma faca de caça que acelera a animação da colheita. Venda todos os equipamentos por meio de um NPC de loja de iscas próximo a locais de pesca e de um fornecedor de caça em áreas rurais, criando pontos de encontro naturais onde entusiastas de atividades ao ar livre podem se encontrar e compartilhar dicas.
Venda de capturas e economia ao ar livre
Conecte a pesca e a caça à economia mais ampla do seu servidor, fornecendo vários pontos de venda para a venda de produtos colhidos. Um NPC do mercado de peixes deve comprar todos os peixes a preços básicos, com espécimes raros e pesados exigindo taxas premium. Um NPC açougueiro compra carne crua e peles de animais. Além das vendas de NPCs, permita a negociação entre jogadores para que um pescador habilidoso possa fornecer peixe fresco ao dono de um restaurante, ou um caçador possa vender peles imaculadas para um artesão de couro que as transforma em roupas ou móveis. Implementar um sistema de procura diária onde certos tipos de peixe ou carne valham mais em dias específicos, incentivando os jogadores a diversificarem as suas actividades em vez de cultivarem repetidamente as mesmas espécies lucrativas. Adicione um quadro de troféus em locais de pesca e caça que exiba os maiores peixes capturados e os animais mais raros colhidos a cada semana, com os recordistas recebendo bônus em dinheiro ou recompensas cosméticas exclusivas. Considere eventos sazonais, como torneios de pesca ou competições de caça, que reúnam a comunidade em torno dessas atividades ao ar livre.
Otimização de desempenho e geração
Os sistemas externos que geram entidades exigem uma otimização cuidadosa para evitar a degradação do desempenho do servidor. Para a desova de animais, use um sistema baseado em proximidade que só crie pedais de animais quando um caçador estiver dentro de um alcance configurável, normalmente de 150 a 200 metros. Implemente um orçamento de entidade global que limite o número total de animais de caça em todo o servidor, distribuindo o orçamento pelas zonas ativas com base na contagem de caçadores. Use pools de entidades que reciclam animais desaparecidos em vez de criar novos, reduzindo a sobrecarga de chamadas CreatePed repetidas. Para pescar, evite gerar entidades de peixes visíveis inteiramente, uma vez que elas não servem para nenhum propósito de jogo e desperdiçam slots de entidades. Em vez disso, use efeitos de partículas ou animações sutis na superfície da água para indicar um peixe na linha. Configurações de zona de cache na memória compartilhada em vez de lê-las no banco de dados em cada interação. Para ambos os sistemas, o banco de dados em lote grava acumulando ganhos, capturas e eliminações de XP na memória e liberando-os no banco de dados a cada 30-60 segundos, em vez de em cada evento individual. Isso reduz drasticamente o volume de consultas ao banco de dados durante os horários de pico, quando muitos jogadores estão pescando ou caçando simultaneamente.

