返回博客
Guide1 分钟阅读

FiveM 钓鱼和狩猎脚本:最佳资源

为你的FiveM服务器选择合适的钓鱼和狩猎脚本。功能对比、框架支持及构建活跃户外经济的建议。

Agency Scripts

Agency Scripts 创始人兼首席开发者

核心钓鱼机制

钓鱼系统为角色扮演服务器提供了最放松且有回报的副活动之一。核心循环包括装备钓鱼竿,接近有效水体,抛竿,等待咬钩,并完成捕捉小游戏。首先定义钓鱼区域为多边形区域或基于半径的圆形,覆盖湖泊、河流、海岸线和码头。每个区域应有自己的鱼类种群表,包含逻辑上属于该环境的物种:湖泊中的淡水鱼如鲈鱼和鳟鱼,近海的盐水鱼如金枪鱼和鲨鱼,河流中特有的鱼类如鲑鱼。玩家抛竿时,启动一个介于最短和最长等待时间之间的随机计时器,受所用鱼饵、时间、天气和玩家钓鱼技能等级影响。更高技能减少等待时间并增加钓到稀有鱼种的概率。抛竿动画应使用 TaskStartScenarioInPlace 带有钓鱼场景,使玩家角色视觉上握杆站在水边。

抓捕小游戏

小游戏是区分有趣钓鱼系统与无聊挂机脚本的关键。设计基于技能的小游戏,鱼咬钩时以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' },
    },
}

狩猎区域与动物生成

狩猎比钓鱼需要更动态的方法,因为动物是可见的、移动的实体,玩家必须追踪、潜行并射击。定义荒野区域的狩猎区,如Blaine County森林、Mount Chiliad山麓和Sandy Shores周围的沙漠区域。在每个区域内,使用GTA原生动物模型以受控间隔生成动物peds。使用 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)

技能进阶系统

进阶系统通过奖励专注玩家实质性提升,保持钓鱼和狩猎的长期吸引力。分别跟踪钓鱼和狩猎技能等级,通过成功捕获或猎杀提升。钓鱼技能提升时,咬钩计时器缩短,稀有鱼类在战利品表中更常见,小游戏目标区稍微扩大,玩家解锁受技能门槛限制的高级钓鱼点。狩猎技能提升允许玩家看到地面上的动物踪迹标记,增加发现动物的检测范围,减少穿越灌木时的噪音半径,并解锁使用呼叫和气味吸引特定物种的能力。将技能经验存储在数据库,使用递增经验需求的公式计算等级,防止玩家过快达到最高级,同时在每次游戏中提供稳步且有成就感的进展。

装备与升级

装备等级为玩家在钓鱼和狩猎经济中提供短期目标和有意义的消费方向。钓鱼方面,提供从只能捕获普通鱼类的基础木杆,到张力更好的玻璃纤维杆,再到降低捕获难度并提升稀有鱼概率的碳纤维杆的进阶。配合影响玩家在小游戏中收线速度的卷线器。饵料类型直接影响可捕获鱼种:蚯蚓适用于一般淡水鱼,鱼苗适合掠食鱼,专用鱼饵针对稀有鱼类,高级饵料则使咬钩率翻倍。狩猎方面,提供武器专属加成:复合弓安静但需近距离,栓动步枪适合远距离干净击杀,猎枪适合鸟类但会损伤大型动物皮毛。添加狩猎配件如望远镜延长观察范围,迷彩服减少动物发现半径,狩猎刀加快采集动画。所有装备通过钓鱼点附近的饵料店NPC和乡村地区的狩猎装备店出售,形成户外爱好者自然聚集和交流的场所。

销售陷阱与户外经济

将钓鱼和狩猎与服务器更广泛的经济系统连接,提供多种出售收获物的渠道。鱼市 NPC 应以基础价格购买所有鱼类,稀有和大型鱼类可获得溢价。屠夫 NPC 购买生肉和动物皮毛。除 NPC 销售外,启用玩家间交易,使熟练渔夫能向餐厅老板供应新鲜鱼类,猎人能将优质兽皮卖给制皮匠,制成服装或家具。实施每日需求系统,特定鱼类或肉类在特定日子价值更高,鼓励玩家多样化活动,而非重复养殖同一高利润物种。钓鱼和狩猎地点设立奖杯榜,展示每周捕获的最大鱼和最稀有动物,记录保持者可获得现金奖励或独家外观奖励。考虑举办季节性活动,如钓鱼锦标赛或狩猎比赛,促进社区围绕这些户外活动的互动。

性能与生成优化

户外生成实体系统需谨慎优化,避免服务器性能下降。动物生成使用基于距离的系统,仅当猎人进入配置范围(通常150-200米)时生成动物NPC。实现全局实体预算,限制服务器内狩猎动物总数,根据活跃区域猎人数量分配预算。使用实体池回收已消失动物,减少重复创建开销。 CreatePed 调用。对于钓鱼,避免生成可见的鱼实体,因为它们没有游戏用途且浪费实体槽。相反,使用粒子效果或细微的水面动画来表示鱼上钩。缓存区域配置在共享内存中,而不是每次交互时从数据库读取。对于这两个系统,通过在内存中累积经验值、捕获和击杀,并每 30-60 秒刷新到数据库,而不是每个事件都写入数据库,批量写入数据库。这大大减少了高峰时段许多玩家同时钓鱼或狩猎时的数据库查询量。

准备好开始了吗?

在我们的商店获取脚本,或加入 Discord 获取支持、更新以及新功能预告。