Zum Inhalt springen

Zombies-API

bs_zombies ist groß, aber was andere Ressourcen brauchen, ist eine kurze Liste. Alles steht mit Datei und Zeile auf der bs_zombies-API-Seite.

Client:

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 antworten auch aus dem Statebag bsZombie für ein vernetztes Ped, das dieser Client noch nicht übernommen hat. Nutze sie, prüfe keine Modelle, das Modell kann das Vanilla-Modell sein.

Weitere Client-Helper: Live() (Tabelle übernommener Walker), Count(), HostedCount(), HasWalker(id), IsBeingAttacked(), HordeActive(), PlayerProtectedInVehicle().

Die Server-Registry besitzt die Gesundheit. Client-Schaden wird vom Schützen gemeldet, aber für etwas, das dir auf dem Server gehört (eine Turret, eine Falle), gehst du über:

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

Es prüft, ob der Walker innerhalb von range um x, y ist. Die Turret von bs_gadgets nutzt es, schau in bs_gadgets/server für den Ablauf (Client findet das Ziel, Server prüft Feuerrate und Munition, dann GadgetHit).

Walker an einen Punkt ziehen:

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

Das Köder-Gadget ruft es bei jedem Puls auf.

Für geskriptete Dinge (die Horden-Wellen von bs_events nutzen diese):

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

Getaggte Walker überspringen den Far-Cull, solange sie getaggt sind. Sie zählen weiter gegen die Pool-Limits, du kannst nicht über Streaming.PoolGuard.maxNetworked hinaus spawnen. Und der Spawn-Mindestabstand (100 m zu jedem Spieler) gilt weiterhin.

-- 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()
BagAuf
bsZombiePedRegistry-ID. Wenn es da ist, gehört er uns
zType, zGait, zCrawl, zFeed, zReach, zState, zMhp, zGround, zAppPedZustand im vernetzten Modus
bsZombieDeadPedvernetzte Leiche

Lösche nie selbst einen vernetzten Walker. Der Server verfolgt unerwartete Löschungen, erzeugt den Walker neu, wenn ein Spieler in der Nähe ist, und markiert den Besitzer in bs_guard (zombie_entity_deleted). Wenn du sie weg haben willst, nutze den Event-Tag + EventClear oder frage die Registry.

Der Populations-Sweep von bs_world überspringt bereits alles mit bsZombie. Wenn deine Ressource ebenfalls Peds aufräumt, prüfe zuerst IsWalkerPed.

GlobalState.bsZombieMode ist 'networked' oder 'legacy'. Die meisten Exports funktionieren in beiden gleich.