Назад к блогу
Guide7 мин чтения

Скрипты рыбалки и охоты FiveM: лучшие ресурсы

Выбирайте подходящие скрипты рыбалки и охоты для вашего FiveM сервера. Сравнение функций, поддержка фреймворков и советы по созданию живой экономики на открытом воздухе.

Agency Scripts

Основатель и ведущий разработчик Agency Scripts

Основные механики рыбалки

Система рыбалки , одно из самых расслабляющих и вознаграждающих побочных занятий на ролевом сервере. Основной цикл включает экипировку удочки, подход к подходящему водоёму, заброс лески, ожидание поклёвки и выполнение мини-игры по поимке. Начните с определения зон рыбалки в виде полигональных областей или кругов с радиусом, охватывающих озёра, реки, морское побережье и пирсы. Каждая зона должна иметь собственную таблицу популяции рыб с видами, логично обитающими в данной среде: пресноводные, такие как бас и форель в озёрах, морские, такие как тунец и акула у берега, и речные, например лосось вблизи проточной воды. При забросе лески запускайте случайный таймер между минимальным и максимальным временем ожидания, зависящий от используемой наживки, времени суток, погодных условий и уровня навыка рыбалки игрока. Более высокий навык сокращает время ожидания и увеличивает шанс поймать редкие виды. Анимация заброса должна использовать TaskStartScenarioInPlace с сценарием рыбалки, чтобы персонаж игрока визуально держал удочку и стоял на берегу воды.

Мини-игра Catch

Мини-игра , это то, что отличает увлекательную систему рыбалки от скучного AFK-скрипта. Разработайте мини-игру на основе навыков, которая появляется как NUI-оверлей, когда клюёт рыба. Популярный подход , механика движущейся полосы, где маркер колеблется по шкале, и игрок должен нажать клавишу, когда маркер находится в выделенной зоне. Размер зоны зависит от сложности рыбы: для обычных видов окно достаточно большое, для легендарных требуется точное время. Добавьте несколько раундов в одной попытке поймать рыбу, где каждый успешный клик приближает рыбу, а промах , отпускает её дальше. Реализуйте индикатор натяжения, который растёт при подматывании и уменьшается, когда игрок даёт леске отдохнуть; леска рвётся, если натяжение превышает максимальный порог удочки. Разные уровни удочек имеют разные пороги натяжения, давая игрокам стимул улучшать снаряжение по мере прокачки навыка рыбалки.

-- 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' },
    },
}

Зоны охоты и спаун животных

Охота требует более динамичного подхода, чем рыбалка, потому что животные , это видимые, подвижные сущности, которых игроки должны отслеживать, преследовать и стрелять. Определите охотничьи зоны в диких местах, таких как леса округа Блейн, предгорья горы Чилиад и пустынные районы вокруг Санди Шорс. В каждой зоне спауньте животных с использованием нативных моделей GTA с контролируемыми интервалами. Используйте CreatePed с хэшами моделей животных и давайте им задачи блуждания с помощью TaskWanderStandard чтобы они естественно перемещались в пределах границ зоны. Контролируйте плотность спавна, чтобы избежать проблем с производительностью: ограничьте каждую зону 5-8 активными животными одновременно на игрока и спавните животных только когда игрок с лицензией на охоту или оружием находится на разумном расстоянии от зоны. Удаляйте животных, когда охотников поблизости нет, чтобы освободить слоты сущностей. Группируйте животных в стада для таких видов, как олени, где выстрел в одного заставляет остальных убегать, используя TaskSmartFleePed создавая реалистичный охотничий опыт, который вознаграждает терпеливое преследование вместо беготни и стрельбы.

Таблицы добычи и сбор ресурсов

Когда игрок успешно убивает животное, он не должен сразу получать предметы. Реализуйте механику сбора, при которой игрок становится на колени рядом с тушей и выполняет анимацию разделки, которая занимает несколько секунд, в течение которых он уязвим. Добыча зависит от вида животного, использованного оружия и места попадания. Чистый выстрел в голову из винтовки даёт больше целого мяса и чистую шкуру, тогда как обстрел животного из автоматического оружия повреждает шкуру и уничтожает часть мяса. Отслеживайте место попадания, сравнивая координаты урона с координатами кости головы животного. Каждое животное должно давать комбинацию сырого мяса, шкуры или кожи и вторичных предметов, таких как рога, перья или жир, в зависимости от вида. Используйте метаданные предметов для хранения качества каждого собранного предмета, что влияет на цену продажи и качество изготовленных товаров при обработке у кожевника или повара.

-- 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)

Система прогрессии навыков

Система прогрессии делает рыбалку и охоту интересными в долгосрочной перспективе, вознаграждая преданных игроков ощутимыми улучшениями. Отслеживаются отдельные уровни навыков для рыбалки и охоты, которые повышаются при успешных уловах или добыче. С ростом навыка рыбалки уменьшается таймер поклевки, редкие рыбы становятся чаще в таблице добычи, зона мини-игры немного расширяется, а игрок получает доступ к премиальным рыболовным местам, закрытым за порогами навыков. Для охоты более высокие уровни навыков позволяют видеть следы животных в виде тонких отметок на земле, увеличивают радиус обнаружения животных, уменьшают шум при движении по кустам и открывают возможность использовать манки и запахи, привлекающие определённые виды к охотнику. XP навыков хранится в базе данных, уровень рассчитывается по формуле с масштабированием, где каждый следующий уровень требует больше XP, предотвращая слишком быстрое достижение максимума, но обеспечивая стабильный прогресс, который ощущается наградой в каждой игровой сессии.

Оборудование и улучшения

Уровни оборудования дают игрокам краткосрочные цели и значимые точки для трат в экономике рыбалки и охоты. Для рыбалки предложите прогрессию от базовых деревянных удочек, которые ловят только обычную рыбу, до стеклопластиковых с лучшей управляемостью натяжения, и углеродных удочек, которые снижают сложность ловли и увеличивают шансы на редкую рыбу. Сочетайте удочки с катушками, которые влияют на скорость сматывания лески в мини-игре. Типы приманок должны напрямую влиять на виды рыбы: черви для пресной воды, мальки для хищников, специализированные приманки для редких видов и премиум-приманки, удваивающие частоту поклёвок. Для охоты предложите оружейные бонусы: составной лук бесшумен, но требует близкого расстояния, винтовка с болтовым затвором идеальна для чистых выстрелов с дистанции, а дробовик эффективен для птиц, но повреждает шкуры крупных животных. Добавьте аксессуары для охоты: бинокли для увеличенного обзора, костюмы маскировки, уменьшающие радиус обнаружения игрока животными, и охотничий нож, ускоряющий анимацию снятия добычи. Всё оборудование продаётся через NPC в магазине приманок у рыболовных точек и охотничьем магазине в сельской местности, создавая естественные места сбора для любителей активного отдыха.

Продажи уловов и уличная экономика

Свяжите рыбалку и охоту с более широкой экономикой сервера, предоставляя несколько точек для продажи собранных товаров. NPC рыбный рынок должен покупать всю рыбу по базовым ценам, при этом редкие и крупные экземпляры оцениваются выше. NPC мясник покупает сырое мясо и шкуры животных. Помимо продаж NPC, включите торговлю между игроками, чтобы опытный рыбак мог поставлять свежую рыбу владельцу ресторана, а охотник продавать отличные шкуры кожевеннику, который превращает их в одежду или мебель. Реализуйте систему ежедневного спроса, где определённые виды рыбы или мяса стоят дороже в определённые дни, побуждая игроков разнообразить деятельность, а не фармить одни и те же прибыльные виды. Добавьте доску трофеев на местах рыбалки и охоты, которая показывает самую крупную пойманную рыбу и самых редких животных за неделю, а рекордсмены получают бонусные деньги или эксклюзивные косметические награды. Рассмотрите сезонные события, такие как турниры по рыбалке или охотничьи соревнования, которые объединяют сообщество вокруг этих активностей.

Производительность и оптимизация спавна

Системы спавна сущностей на открытом воздухе требуют тщательной оптимизации, чтобы не ухудшать производительность сервера. Для спавна животных используйте систему на основе близости, которая создаёт животных только когда охотник находится в настраиваемом радиусе, обычно 150-200 метров. Реализуйте глобальный лимит сущностей, который ограничивает общее количество охотничьих животных на сервере, распределяя лимит по активным зонам в зависимости от количества охотников. Используйте пулы сущностей, которые перерабатывают исчезнувших животных вместо создания новых, снижая нагрузку от повторного CreatePed звонки. Для рыбалки избегайте появления видимых сущностей рыб, так как они не имеют игрового смысла и занимают слоты сущностей. Вместо этого используйте эффекты частиц или тонкие анимации поверхности воды, чтобы показать, что рыба на крючке. Кэшируйте конфигурации зон в общей памяти, а не считывайте их из базы данных при каждом взаимодействии. Для обеих систем группируйте записи в базу данных, накапливая опыт, уловы и убийства в памяти и сбрасывая их в базу каждые 30-60 секунд, а не при каждом отдельном событии. Это значительно снижает нагрузку на базу данных в часы пик, когда многие игроки одновременно рыбачат или охотятся.

Готовы начать?

Возьмите скрипты в нашем магазине или заходите в Discord за поддержкой, обновлениями и анонсами.