Перейти к содержимому

API зомби

bs_zombies большой, но другим ресурсам нужен короткий список. Всё описано на странице API bs_zombies с файлом и строкой.

Клиент:

if exports.bs_zombies:IsWalkerPed(ped) then
local id = exports.bs_zombies:WalkerIdOf(ped) -- registry id, nil if not a walker
end
local crawler = exports.bs_zombies:IsCrawlerPed(ped)

IsWalkerPed/WalkerIdOf отвечают также по statebag bsZombie для сетевого педа, которого этот клиент ещё не принял. Используйте их, не проверяйте модели, модель может быть ванильной.

Другие клиентские помощники: Live() (таблица принятых ходячих), Count(), HostedCount(), HasWalker(id), IsBeingAttacked(), HordeActive(), PlayerProtectedInVehicle().

Здоровьем владеет серверный реестр. Урон от клиента сообщает стрелок, но для того, чем владеете вы на сервере (турель, ловушка), идите через:

-- server
exports.bs_zombies:GadgetHit(src, walkerId, damage, x, y, range, weapon)

Он проверяет, что ходячий в пределах range от x, y. Его использует турель bs_gadgets, смотрите bs_gadgets/server (клиент находит цель, сервер проверяет скорострельность и патроны, затем GadgetHit).

Притянуть ходячих к точке:

-- server
exports.bs_zombies:EventNoise(x, y, z, loud)

Гаджет-приманка вызывает это на каждом импульсе.

Для скриптовых событий (их используют волны орд bs_events):

-- server
exports.bs_zombies:EventSpawn(x, y, 'walker', { tag = 'myres:wave1', hpScale = 1.0 })
exports.bs_zombies:EventDrive('myres:wave1', x, y, z, seconds) -- push tagged walkers towards a point
local n = exports.bs_zombies:EventCount('myres:wave1')
exports.bs_zombies:EventClear('myres:wave1', keepAsNormal)

Помеченные ходячие пропускают дальнее отсечение, пока помечены. Они всё равно учитываются в лимитах пула, нельзя заспавнить сверх Streaming.PoolGuard.maxNetworked. И минимальная дистанция спавна (100 м от каждого игрока) по-прежнему действует.

-- server
exports.bs_zombies:SafeZones() -- zone list
exports.bs_zombies:SafeZonesPadded()
exports.bs_zombies:Total() -- registry count
exports.bs_zombies:Heat(zoneId)
exports.bs_zombies:Snapshot()
BagНа
bsZombieпедid в реестре. Если он есть, это наш
zType, zGait, zCrawl, zFeed, zReach, zState, zMhp, zGround, zAppпедсостояние сетевого режима
bsZombieDeadпедсетевой труп

Никогда не удаляйте сетевого ходячего сами. Сервер отслеживает неожиданные удаления, пересоздаёт ходячего, если рядом игрок, и отмечает владельца в bs_guard (zombie_entity_deleted). Если они нужны удалёнными, используйте тег события и EventClear или обратитесь к реестру.

Зачистка населения в bs_world уже пропускает всё с bsZombie. Если ваш ресурс тоже чистит педов, сначала проверьте IsWalkerPed.

GlobalState.bsZombieMode - 'networked' или 'legacy'. Большинство экспортов работают одинаково в обоих.