Pular para o conteúdo

API de Zombies

O bs_zombies é grande, mas o que os outros recursos precisam é uma lista curta. Tudo está na página da API do bs_zombies com ficheiro e linha.

Cliente:

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 também respondem a partir do statebag bsZombie para um ped em rede que este cliente ainda não adotou. Usa-os, não verifiques modelos, o modelo pode ser o original.

Outros helpers de cliente: Live() (tabela de walkers adotados), Count(), HostedCount(), HasWalker(id), IsBeingAttacked(), HordeActive(), PlayerProtectedInVehicle().

O registo do servidor é dono da vida. O dano do cliente é reportado por quem dispara, mas para algo que tu possuis no servidor (uma torreta, uma armadilha) passa por:

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

Verifica que o walker está a menos de range de x, y. A torreta do bs_gadgets usa-o; vê bs_gadgets/server para o fluxo (o cliente encontra o alvo, o servidor verifica cadência e munição, depois GadgetHit).

Atrair walkers para um ponto:

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

O gadget isco chama-o a cada pulso.

Para coisas com guião (as ondas de horda do bs_events usam isto):

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

Os walkers com tag saltam o far-cull enquanto têm tag. Continuam a contar para os limites do pool, não podes criar além de Streaming.PoolGuard.maxNetworked. E o piso de spawn (100 m de cada jogador) continua a aplicar-se.

-- 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()
BagEm
bsZombiepedid do registo. Se existe, é nosso
zType, zGait, zCrawl, zFeed, zReach, zState, zMhp, zGround, zApppedestado do modo em rede
bsZombieDeadpedcadáver em rede

Nunca apagues tu um walker em rede. O servidor regista apagamentos inesperados, volta a criar o walker se houver um jogador perto, e assinala o dono no bs_guard (zombie_entity_deleted). Se precisas deles fora, usa a tag de evento + EventClear, ou pergunta ao registo.

A limpeza de população do bs_world já ignora tudo o que tenha bsZombie. Se o teu recurso também limpa peds, verifica primeiro IsWalkerPed.

GlobalState.bsZombieMode é 'networked' ou 'legacy'. A maioria dos exports funciona igual nos dois.