Saltearse al contenido

API de zombis

bs_zombies es grande, pero lo que otros recursos necesitan es una lista corta. Todo está en la página de la API de bs_zombies con archivo y línea.

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 también responden desde el statebag bsZombie para un ped en red que este cliente aún no ha adoptado. Úsalos, no compruebes modelos, el modelo puede ser el de vanilla.

Otros helpers de cliente: Live() (tabla de walkers adoptados), Count(), HostedCount(), HasWalker(id), IsBeingAttacked(), HordeActive(), PlayerProtectedInVehicle().

El registro del servidor es dueño de la vida. El daño del cliente lo reporta quien dispara, pero para algo que tú posees en el servidor (una torreta, una trampa) pasa por:

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

Comprueba que el walker está a menos de range de x, y. La torreta de bs_gadgets lo usa; mira bs_gadgets/server para el flujo (el cliente encuentra el objetivo, el servidor comprueba cadencia y munición, luego GadgetHit).

Atraer walkers a un punto:

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

El gadget señuelo lo llama en cada pulso.

Para cosas con guion (las oleadas de horda de bs_events usan esto):

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

Los walkers con tag se saltan el far-cull mientras tienen tag. Siguen contando para los límites del pool, no puedes crear más allá de Streaming.PoolGuard.maxNetworked. Y el mínimo de spawn (100 m de cada jugador) sigue aplicándose.

-- 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()
BagEn
bsZombiepedid del registro. Si está, es nuestro
zType, zGait, zCrawl, zFeed, zReach, zState, zMhp, zGround, zApppedestado del modo en red
bsZombieDeadpedcadáver en red

Nunca borres tú un walker en red. El servidor rastrea los borrados inesperados, recrea el walker si hay un jugador cerca y marca al dueño en bs_guard (zombie_entity_deleted). Si necesitas quitarlos, usa la tag de evento + EventClear, o pregunta al registro.

El barrido de población de bs_world ya omite todo lo que tenga bsZombie. Si tu recurso también limpia peds, comprueba primero IsWalkerPed.

GlobalState.bsZombieMode es 'networked' o 'legacy'. La mayoría de los exports funcionan igual en ambos.