Steal An EggDocumentation← Portfolio

#Troubleshooting

Start with the Output window. The bootstrap, zone tagger and guardian builder all print a one-line summary, and almost every failure in this place announces itself there.

#No nests or no prompts

  1. Look for [SAE] Backend ready … in Output. If it never appears, a service failed to load — check the error above it.
  2. Confirm Workspace.EggNest and Workspace.Eggs exist; EggSpawnService parents into those folders by name.
  3. Confirm ServerStorage.EggForge, EggSpecs and NestForge are present. Models are built procedurally from those modules, so a missing forge means no nests.

#[SAE][Zone] No floor tile: …

The biome has no geometry that the tagger recognised. Either rename the floor parts to Map1…Map12, or make sure a tile satisfies the footprint test (X × Z ≥ 3000, Z ≥ 60, Y ≤ 10, positioned between Y −8 and 2). Gameplay still works because zones resolve from the X ranges, but props that look up SAE_ZoneId will not find their biome.

#A guardian does not wake up

  • Only the big nest (Config.Eggs.BIG_EGG_NEST_INDEX = 6) owns the guardian. Smaller nests have none by design.
  • The wake is delayed by Config.Guardian.AWAKE_DELAY (1 s) and re-checked: the player must still be carrying that exact egg and be inside the zone.
  • Config.Guardian.ONE_PER_ZONE means extra nests share the same guardian; if the count printed at startup looks wrong, the nest list is wrong.
  • [SAE][Guardian] Brak Workspace.Map.SleepingParticle means the particle template is missing — the guardian still works, it just has no sleep effect.

#"Someone was faster."

The egg was already claimed. EggSpawnService.claim is atomic, so two players pressing the prompt on the same egg produce exactly this message for the loser. It is also the answer when the egg's state is neither nest nor dropped.

#Other pickup refusals

MessageCause
Slow down.The 1-second pickup cooldown, or a rate-limit flag
You are stunned.rt.stunnedUntil is still in the future (a trap or a catch)
Get up first.SAE_KnockedUntil — the character is still in the catch knockdown
This zone requires … Speed.Config.ZoneAccess.SPEED_GATE is on and the zone is above the player's Speed
You are too far away.Distance check against the egg's spawn position
You can only carry 1 egg at a time.Config.Eggs.MAX_CARRIED

#The egg never delivers

Delivery is a volume test against Workspace.Spawn.SafeZone, sampled five times a second. If that part is renamed or resized, carrying an egg becomes a dead end and the chase never ends. Features.Base.FREE_PLACEMENT decides whether the egg becomes an inventory item or starts growing directly.

#A grow timer looks stuck

  • Growth uses os.time(), not a per-server timer: finishAt is an absolute unix timestamp. A server (or machine) with a skewed clock will look frozen until the timestamps catch up.
  • GrowthService.MIN_GROW_SECONDS = 10 floors everything, so a heavily boosted egg still needs ten seconds.
  • The first tutorial egg is forced to Config.Tutorial.FIRST_EGG_GROW_SECONDS = 3.

#The hatch prompt is greyed out

The prompt only enables when GrowthService.isReady(entry) is true; the label above the egg switches from a countdown to READY! at the same moment. If the label already reads READY! but the prompt stays disabled, the entry and the model have drifted apart — check that the model still carries the SAE_GrowingUid attribute and that profile.growing[uid] still exists.

#Progress is not saved

  1. Run the admin command datastore. It performs a real read/write test through DataService.selfTest().
  2. In Studio, enable Game Settings → Security → Enable Studio Access to API Services. Without it profiles are in-memory only.
  3. [SAE] Backend ready … persistence: false in Output says the same thing at startup.
  4. A brand-new field that never saves is usually missing from reconcile() — old profiles do not receive it.

#Robux purchases do nothing

Config.Monetization is still full of id = 0 entries, so MonetizationService.isConfigured() returns false and the whole purchase path is disabled. See Trails & Shop for the checklist.

#Badges never award

Same story: all six entries in Features.Badges are 0.

#The treadmill skin does not change

TreadmillService.applySkin clones Workspace.Treadmills.Treadmill<index> onto the plot and looks for a part literally named TreadMill. Two warnings cover the usual causes:

  • Missing Workspace.Treadmills.Treadmill<n> — the template for that tier is absent.
  • Base <n> has no treadmill part in Workspace - no Touched. — the plot has no belt, so snapping and training cannot work.

#Zones look wrong for one player

GuardianService.outOfBounds() and the startup zone summary are the fastest checks: if the authored geometry and Config.Zones[].xMin/xMax disagree, guardians will clamp into odd places and zone banners will fire at the wrong boundary.

#Guests see half-built models

Set ModelStreamingMode = Atomic on anything that spawns as a multi-part model in the world (nests, guardians and growing eggs already do). Without it a streaming client can receive the parts before the prompt or the attachments.

#Events never appear

  • The Rift is disabled by Config.Flags.Rift = false.
  • Day/night is on a 304.7-second cycle; use the forceNight test command instead of waiting.
  • Great Bloom and Angels & Demons are enabled in Config.Flags, but their timing lives in Config.Events and Features.
  • The Dragon Egg only spawns while BoostService.startAdminAbuse is running.

#Performance drops with several players

The expensive systems are pet roaming (Features.Base.PET_ROAMING), awake guardians, and growing-egg models. The stats admin command prints the live guardian count, and TestHarness/FeatureTests can exercise systems without a full session.