Skrypty rybołówstwa i polowania FiveM: Najlepsze zasoby
Wybierz odpowiednie skrypty wędkowania i polowania dla swojego serwera FiveM. Porównanie funkcji, obsługa frameworków i wskazówki dotyczące budowy tętniącej życiem ekonomii outdoorowej.
Agency Scripts
Założyciel i główny deweloper w Agency Scripts
Główne mechaniki łowienia ryb
System wędkarstwa zapewnia jedno z najbardziej relaksujących i satysfakcjonujących zajęć pobocznych na serwerze roleplay. Główna pętla polega na wyciągnięciu wędki, podejściu do odpowiedniego zbiornika wodnego, zarzuceniu żyłki, oczekiwaniu na branie i ukończeniu minigry połowu. Zacznij od zdefiniowania stref wędkarskich jako obszarów wielokątnych lub okręgów o określonym promieniu, obejmujących jeziora, rzeki, wybrzeże oceanu i mola. Każda strefa powinna mieć własną tabelę populacji ryb z gatunkami logicznie pasującymi do danego środowiska: słodkowodne jak okoń i pstrąg w jeziorach, morskie jak tuńczyk i rekin na otwartych wodach oraz ryby rzeczne jak łosoś przy wartkim nurcie. Gdy gracz zarzuca wędkę, uruchom losowy timer między minimalnym a maksymalnym czasem oczekiwania, zależny od użytej przynęty, pory dnia, warunków pogodowych i poziomu umiejętności wędkarskich gracza. Wyższy poziom umiejętności skraca czas oczekiwania i zwiększa szansę na złowienie rzadkich gatunków. Animacja rzutu powinna wykorzystywać TaskStartScenarioInPlace ze scenariuszem wędkowania, aby postać gracza wizualnie trzymała wędkę i stała na brzegu wody.
Minigra w łapanie
Minigra to element odróżniający wciągający system wędkowania od nudnego skryptu AFK. Zaprojektuj zręcznościową minigrę, która pojawia się jako nakładka NUI, gdy ryba chwyci przynętę. Popularnym podejściem jest mechanika poruszającego się paska, w której znacznik oscyluje na wskaźniku, a gracz musi nacisnąć klawisz, gdy znacznik znajduje się w podświetlonej strefie docelowej. Rozmiar strefy docelowej skaluje się wraz z poziomem trudności ryby, powszechne gatunki oferują spore okno czasowe, a legendarne ryby wymagają precyzyjnego wyczucia czasu. Dodaj kilka rund do pojedynczej próby połowu, gdzie każde udane naciśnięcie przyciąga rybę, a chybienie pozwala jej odpłynąć dalej. Zaimplementuj wskaźnik napięcia żyłki, który rośnie podczas zwijania i spada, gdy gracz odpuszcza, przy czym żyłka pęka, jeśli napięcie przekroczy limit wędki. Różne poziomy wędek powinny mieć wyższe progi napięcia, dając graczom powód do ulepszania ekwipunku w miarę postępów w drzewku umiejętności wędkarskich.
-- 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' },
},
}
Strefy polowań i spawnowanie zwierząt
Polowanie wymaga bardziej dynamicznego podejścia niż wędkarstwo, ponieważ zwierzęta to widoczne, mobilne byty, które gracze muszą tropić, podchodzić i strzelać do nich. Zdefiniuj strefy polowań na dzikich terenach, takich jak lasy Blaine County, podnóża Mount Chiliad czy pustynne rejony wokół Sandy Shores. W każdej strefie spawnuj pedy zwierząt przy użyciu natywnych modeli zwierząt z GTA w kontrolowanych odstępach czasu. Użyj CreatePed z hashami modeli zwierząt i przypisz im zadania wędrówki za pomocą TaskWanderStandard aby naturalnie poruszały się w granicach strefy. Kontroluj gęstość spawnu ostrożnie, aby uniknąć problemów z wydajnością: ogranicz każdą strefę do 5-8 aktywnych zwierząt naraz na gracza i spawnuj zwierzęta tylko wtedy, gdy gracz z licencją myśliwską lub bronią znajduje się w rozsądnej odległości od strefy. Usuwaj zwierzęta bez problemów, gdy w pobliżu nie ma myśliwych, aby zwolnić sloty entities. Grupuj zwierzęta w stada dla gatunków takich jak jelenie, gdzie postrzelenie jednego sprawia, że reszta ucieka za pomocą TaskSmartFleePed, tworząc realistyczne doświadczenie łowieckie, które nagradza cierpliwe podkradanie się zamiast biegania i strzelania.
Tabele łupów i zbieranie surowców
Gdy gracz pomyślnie upoluje zwierzę, nie powinien po prostu natychmiast otrzymać przedmiotów. Zaimplementuj mechanikę patroszenia, w której gracz klęka przy truchle zwierzęcia i wykonuje animację oprawiania trwającą kilka sekund, podczas której jest bezbronny. Upuszczony łup zależy od gatunku zwierzęcia, użytej broni oraz miejsca trafienia. Czysty strzał w głowę z karabinu daje więcej nienaruszonego mięsa i nieskazitelną skórę, podczas gdy ostrzelanie zwierzęcia z broni automatycznej uszkadza skórę i niszczy część mięsa. Śledź miejsce trafienia, porównując pozycję obrażeń śmiertelnych ze współrzędnymi kości głowy zwierzęcia. Każde zwierzę powinno upuszczać kombinację surowego mięsa, skóry oraz dodatkowych przedmiotów, takich jak poroże, pióra lub tłuszcz, w zależności od gatunku. Użyj metadanych przedmiotu do przechowywania klasy jakości każdego pozyskanego surowca, co wpływa na cenę sprzedaży oraz jakość wytwarzanych przedmiotów przetwarzanych przez kuśnierza lub kucharza.
-- 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)
System rozwoju umiejętności
System progresji sprawia, że wędkarstwo i myślistwo pozostają angażujące na dłuższą metę, nagradzając zaangażowanych graczy zauważalnymi ulepszeniami. Śledź osobne poziomy umiejętności dla wędkarstwa i myślistwa, zwiększające się przy każdym udanym połowie lub upolowaniu zwierzyny. Wraz ze wzrostem umiejętności wędkarskich skraca się czas oczekiwania na branie, rzadkie ryby pojawiają się częściej w tabeli łupów, strefa docelowa minigry staje się nieco szersza, a gracz odblokowuje dostęp do łowisk premium wymagających odpowiedniego poziomu umiejętności. W przypadku myślistwa wyższe poziomy pozwalają graczowi dostrzegać tropy zwierząt jako subtelne znaczniki na ziemi, zwiększają zasięg wykrywania zwierząt, zmniejszają promień hałasu podczas poruszania się po zaroślach oraz odblokowują możliwość używania wabików i zapachów przyciągających określone gatunki w miejsce pobytu myśliwego. Zapisuj XP umiejętności w bazie danych i obliczaj poziom za pomocą skalowanej formuły, w której każdy kolejny poziom wymaga więcej XP niż poprzedni, co zapobiega zbyt szybkiemu osiągnięciu maksymalnego poziomu i zapewnia stabilny, satysfakcjonujący rozwój podczas każdej sesji.
Ekwipunek i ulepszenia
Poziomy ekwipunku zapewniają graczom krótkoterminowe cele i sensowne wydatki w gospodarce rybołówstwa oraz łowiectwa. W przypadku wędkarstwa zaoferuj progresję od podstawowych drewnianych wędek, na które można złowić tylko pospolite ryby, przez wędki z włókna szklanego o lepszej wytrzymałości na naprężenia, po wędki z włókna węglowego, które zmniejszają trudność połowu i zwiększają szanse na rzadkie ryby. Połącz wędki z kołowrotkami wpływającymi na to, jak szybko gracz może zwijać żyłkę podczas minigry. Rodzaje przynęt powinny bezpośrednio wpływać na poławiane gatunki ryb: robaki na zwykłe ryby słodkowodne, strzeble na ryby drapieżne, specjalistyczne przynęty sztuczne na rzadkie gatunki oraz przynęta premium podwajająca częstotliwość brań. W przypadku łowiectwa zaoferuj atuty przypisane do broni, gdzie łuk bloczkowy jest cichy, ale wymaga mniejszego dystansu, karabin powtarzalny idealnie sprawdza się przy czystych trafieniach z daleka, a strzelba jest skuteczna na ptaki, lecz uszkadza skóry większych zwierząt. Dodaj akcesoria myśliwskie, takie jak lornetki zwiększające zasięg obserwacji, stroje ghillie zmniejszające promień wykrywania gracza przez zwierzęta oraz nóż myśliwski przyspieszający animację patroszenia. Sprzedawaj cały ekwipunek u NPC w sklepie wędkarskim w pobliżu łowisk oraz u sprzedawcy myśliwskiego na obszarach wiejskich, tworząc naturalne miejsca spotkań entuzjastów outdooru do dzielenia się wskazówkami.
Sprzedaż połowów i gospodarka outdoorowa
Połącz wędkarstwo i myślistwo z szerszą gospodarką swojego serwera, zapewniając wiele miejsc zbytu pozyskanych towarów. NPC na targu rybnym powinien skupować wszystkie ryby po cenach bazowych, z wyższymi stawkami za rzadkie i ciężkie okazy. NPC rzeźnik skupuje surowe mięso i skóry zwierzęce. Oprócz sprzedaży u NPC włącz handel między graczami, aby wykwalifikowany rybak mógł dostarczać świeże ryby właścicielowi restauracji, a myśliwy sprzedawać nienaruszone skóry kaletnikowi, który przerabia je na ubrania lub meble. Wprowadź system dziennego popytu, w którym określone rodzaje ryb lub mięsa są warte więcej w wybrane dni, zachęcając graczy do urozmaicania aktywności zamiast ciągłego farmienia tego samego dochodowego gatunku. Dodaj tablicę trofeów w miejscach wędkowania i polowań, która pokazuje największe złowione ryby i najrzadsze upolowane zwierzęta w każdym tygodniu, przy czym rekordziści otrzymują bonusową gotówkę lub ekskluzywne nagrody kosmetyczne. Rozważ wydarzenia sezonowe, takie jak turnieje wędkarskie lub zawody strzeleckie, które jednoczą społeczność wokół tych aktywności na świeżym powietrzu.
Wydajność i optymalizacja spawnowania
Systemy zewnętrzne spawnujące byty wymagają starannej optymalizacji, aby uniknąć spadku wydajności serwera. Do spawnowania zwierząt używaj systemu opartego na odległości, który tworzy pedy zwierząt tylko wtedy, gdy myśliwy znajduje się w konfigurowalnym zasięgu, zazwyczaj 150-200 metrów. Zaimplementuj globalny limit bytów, który ogranicza łączną liczbę zwierząt łownych na całym serwerze, rozdzielając limit na aktywne strefy w oparciu o liczbę myśliwych. Wykorzystaj pule bytów recyklingujące zdespawnowane zwierzęta zamiast tworzenia nowych, co redukuje narzut wielokrotnego CreatePed wywołania. W przypadku łowienia ryb unikaj całkowicie spawnowania widocznych encji ryb, ponieważ nie służą one żadnemu celowi rozgrywki i marnują sloty na encje. Zamiast tego użyj efektów cząsteczkowych lub subtelnych animacji powierzchni wody, aby wskazać rybę na żyłce. Buforuj konfiguracje stref w pamięci współdzielonej, zamiast odczytywać je z bazy danych przy każdej interakcji. W obu systemach grupuj zapisy do bazy danych, gromadząc zdobyte XP, połowy i zabójstwa w pamięci oraz zapisując je w bazie co 30-60 sekund, a nie przy każdym pojedynczym zdarzeniu. Znacząco zmniejsza to liczbę zapytań do bazy danych w godzinach szczytu, gdy wielu graczy jednocześnie łowi ryby lub poluje.