Roblox Mining Sim
Roblox Simulator game (collect→upgrade→rebirth) being built in Studio \"Lugar de TarzanGalatico\" — money-making project
User building a Roblox Simulator game to make money (genre: collect → upgrade → rebirth, tool-treadmill like Mining Simulator / Bubble Gum / Pet Sim).
- Studio: place renamed to "ChungChungus" (was "Lugar de TarzanGalatico", same studio id 73c67821-9811-4cf9-84ab-5d979a641149). Built via Roblox Studio MCP.
set_active_studiothen build. - Theme: not final. User rejected generic picks, wants original-ish; settled on the tool-treadmill mechanic (collect → better tool collects more → zones → rebirth multiplier). Mining is the working base, reskinnable.
- Working prototype (validated end-to-end 2026-06-09):
Workspace.Prototype— Floor, Spawn, 4 neon pads (SellPad/PickaxeShop/BackpackShop/RebirthPad),OreZonegrid of 54 ore blocks (3 HP each).ReplicatedStorage.Remotes— RemoteEvents MineBlock, Notify.StarterPack.Pickaxe(Tool + LocalScriptPickaxeClient: Activated → raycast/mouse target → FireServer, reach 40, cooldown 0.2).ServerScriptService.MiningServer— server-authoritative. CONFIG block with tunable curves: pickaxePower/Cost, backpackCap/Cost, rebirthCost/Mult, SELL_VALUE=3, RESPAWN_TIME=4. Per-player data table, leaderstats (Cash/Rebirths) + Stats folder (Ore/Capacity/Power/costs).StarterGui.MiningHUD— HUD (Cash/Mochila/Poder/Rebirths) + toast from Notify.
- Loop proven: mine block (3 hits) → bag fills → touch SellPad → cash → buy pickaxe/backpack upgrade → rebirth multiplies sell value.
- Lesson: original ore HP was 30 w/ power 1 = 30 clicks/block, felt "broken". Tune HP low (3) for juicy early game.
- Expanded (2026-06-09) via
roblox-sim-builder:ReplicatedStorage.GameConfig(ModuleScript, all curves + gamepass/devproduct IDs as placeholders), 4 zones gated by ReqPower attribute (Workspace.ZonesZone2/3/4), DataStore persistence (MiningSave_v1, UpdateAsync+retry+BindToClose), monetization pads (AutoMine/DoubleCash/BigBackpack gamepass + CashPack dev product w/ idempotent ProcessReceipt ledger), break FX (floating +N + Explosion burst). - Juice added (2026-06-09):
StarterPlayerScripts.CarryStackClient(LocalScript) — ore blocks visually stack on character's back as bag fills, pop off on sell, colored by mined ore (server setsplayer:SetAttribute("CarryColor", ore.Color)on break). Pickaxe swing animatesTool.Griplerp (NOT Motor6D.C0 — that's read-only via tween/assignment in this rig; and TweenService can't tween Grip either, use manual lerp). - Melee contact mining (2026-06-10): PickaxeClient REWORKED — no more click-at-distance.
MELEE = 9: a swing only mines if there's an ore within 9 studs of HRP (mouse target if close, else nearest ore in range), else it's a "swing at air" (no mine). Impact sound (Smash) plays ONLY on contact (playImpact when ore found), NOT on every swing — fixes "break sound when hitting air". swing() = Grip anim only, silent. Server tryMine manual proximity tightened from 40→14 studs (validates contact). Auto-mine gamepass still uses its own range. - Gotchas learned: Motor6D.C0 read-only in this avatar rig (ownership/animator) → animate Tool.Grip instead. swing() must not throw before FireServer or mining breaks. Carry stack reads replicated player.Stats.Ore so all clients see all stacks.
- TODO theme/reskin still open (user said current look "amador"). Next polish: tune stack position (sits a bit high), add break sound, swing maybe more visible. Then reskin theme.
- Creator Store assets (2026-06-09): pickaxe now uses store mesh (MeshId 22147051 / TextureId 704114950) + impact sounds (Smash1/2 cloned to Handle, played on swing). Ores use crystal mesh
rbxassetid://8886132054(no texture, VertexColor+Glass per zone: cyan/green/blue/magenta). Carry-stack blocks also crystal mesh. SECURITY: only extracted meshes/textures/sounds from free models, DELETED their scripts (SwordScript/CollectionScript etc) — never ran third-party code. Insert requires Edit mode (not Play). Use search_creator_store→insert_from_creator_store. - Shop UI (2026-06-10):
StarterGui.ShopGuiLocalScript — dark premium panel (toggle 🛒 LOJA), upgrades (cash: pickaxe/backpack/rebirth) + Robux rows (gamepasses+CashPack), live affordability greying. Server RemoteEventShoproutes to existing onBuy* funcs. Shop pads now redundant (kept). - Rare ore — REWORKED 2026-06-10 (drop-based, not field node): mining ANY ore has RareChance (0.012) to also drop a glowing rare crystal (in
spawnDropsafter normal chunks). Rare drop =launchChunk(...isRare=true)→applyRareGlow(gold Neon + PointLight + sparkle + Highlight + "RARO" billboard), physics fall + magnet like normal. On collect (collectChunkisRare branch): d.rareCarry++, d.rareValue += val, Raros leaderstat++, sets player attribute CarryingRare=true, firesRareRemoteEvent → client plays FANFARE (4-note ascending bell arpeggio, bell SoundId rbxassetid://6022184873 from store, played in SoundService at PlaybackSpeed 1.0/1.26/1.5/2.0). Backpack glows while CarryingRare (CarryStackClient: PointLight "RareGlow" on HRP + carry blocks → Neon). onSell adds rareValuemult to cash + clears rareCarry/rareValue + CarryingRare=false (glow off). rareCarry/rareValue persisted. Rare value = baseOreValueRareValueMult(75)*SELL_VALUE (before rebirth mult, applied at sell). The OLD field-node rare system (setRare/spin loop/init pass) was REMOVED. - Debug (2026-06-10): RemoteEvent
Debug(dev-gated: RunService:IsStudio() or CreatorId or Config.DevUserIds) actions: cash/pick/bag/rebirth/maxAll/forceRare(spawns rare drop at player)/rareChance(sets Config.RareChance live).StarterGui.DebugGuiLocalScript = dev-only panel (🛠 DEBUG red accent). Gotcha: gsub replacement string can't contain raw%(use literal find/splice helper). - Global rare alert (2026-06-10): RemoteEvent
Announce; serverFireAllClients(player.DisplayName, rareVal)on rare drop (in spawnDrops + debug forceRareDrop).StarterGui.AnnounceGuiLocalScript shows a prominent gold banner (top-center, slides down, GothamBlack white text, queued) to ALL players: "✨ {name} achou um MINÉRIO RARO! (+$X)". Stays ~3.4s. - Studio MCP gotcha: studio kept flipping back to Play mode between edits —
execute_luauEdit-datamodel fails with "Edit datamodel is not available in Play mode"; just callstart_stop_play(false)and retry. Alsoscreen_capturehas multi-second latency — it misses transient/animated GUI (toasts, banners that show <4s); verify those via reading.Visible/.Textinexecute_luauinstead, or freeze the element before capturing. - Physics ore drops (2026-06-10): breaking a block no longer instant-adds to bag.
spawnDrops(player,ore,val)in MiningServer spawns 1-3 physical crystal chunks (OreDrop parts, CanCollide, tossed via AssemblyLinearVelocity → fall+bounce) with impact Sound (Smash1 cloned from pickaxe Handle). After 0.35s physics they anchor+magnet-lerp to owner's HRP; on proximity (<5) or 3s timeout → collectChunk adds to d.ore (clamped to room), pickup sound (Smash at PlaybackSpeed 1.8), sets CarryColor. Server-authoritative, no lost ore (timeout fallback). Sounds reuse pickaxe Smash (no new asset). Rare ores still give instant cash (no drop). - Game-style HUD (2026-06-10): rebuilt
StarterGui.MiningHUD— top-center currency display. Hero cash pill: 💰 + amount in Enum.Font.FredokaOne (chunky game font) with gold UIGradient + dark UIStroke, gold-stroked capsule. Animated count-up (NumberValue tweened) + UIScale pulse on change + "+$X" green popup on gain. Stat pills row below (🎒 mochila / ⛏️ poder / ✨ raros / 🔄 rebirths), each colored UIStroke + gradient. Notify toast kept. Replaced old plain top-left text HUD. - Player bases (2026-06-10):
Workspace.Basesfolder w/ 6 base Models (Base1..6) at z=-80, x=-90..90. Each = Platform + neon Border +Spawn(SpawnLocation, Neutral, Enabled) +SellPad+OwnerSign(Part w/ BillboardGui). Server base manager (appended in MiningServer before final print):assignBaseon PlayerAdded → claims first free base, setsplayer.RespawnLocation = base.Spawn, sign "Base de {DisplayName}";teleportToBaseon CharacterAdded;freeBaseon PlayerRemoving (sign → "Base Livre"). Each base SellPad hooked to onSell (sells for the toucher = their own ore). Old globalPrototype.Spawndisabled (Enabled=false), old globalPrototype.SellPadremoved. Central shop/rebirth/monetization pads stay (z=-40). >6 players = no free base → RespawnLocation unset, fall back to random neutral base spawn (add more plots if needed). - Golem passive income (2026-06-10, Steal-a-Brainrot formula): research confirmed trending = Steal a Brainrot/Grow a Garden (creatures on base → $/s by rarity). Our twist: golems DROP from mining (not conveyor purchase). GameConfig:
Monsters5 tiers (Comum cinza $1/s, Incomum verde $6/s, Raro azul $30/s, Épico roxo $150/s, Lendário dourado $750/s),MonsterChance=0.04, per-zone tier odds (Z1: 80/18/2/0/0 … Z4: 10/30/35/20/5, keyed off ore ReqPower),BaseSlots=4.ReplicatedStorage.GolemBuilderModuleScript = visual builder (crystal mesh + eyes, tier color/size/glow, T4+ neon/light, T5 particle). Flow: ore break → roll (blocked while CarryingMonster) → physical drop+magnet → welds to Head (attribute CarryingMonster=tier) → touch OWN base Platform → mounts free pedestal (24 pedestals added, 4/base) → server income loop ticks income×rebirthMult every 1s, float "+$" every 5 ticks. Stats.Income ($/s) + HUD pill 💸. Announce global for T4+. Persisted asmonsters:[tiers]in payload; restoreGolems after assignBase; freeBase clears pedestals. Debug actions: monster(tier)/monsterChance + DebugGui buttons. GolemIdleClient animates mounted golems (bob/spin, client-side). Tweak candidates: T5 golem visual is HUGE (taller than base) — scale down if user complains; income balance vs mining ($750/s T5 vs Z4 ~$9k/min active). - Visual/level rework (2026-06-10): (1) GolemBuilder rewritten = humanoid stone golem (chunky torso/head/arms/legs Slate, 2 neon eyes, tier crystals as ACCENTS on back/shoulders/chest; T4+ neon+light, T5 particle; sizes T1 3.0→T5 5.8 total height; everything welded to PrimaryPart "Body" so GolemIdleClient spin/bob works). GOTCHA: SpecialMesh visual size = mesh Scale only (Part.Size ignored) — crystal accents use Scale len0.26/0.34/0.26; first version had len0.5/0.6 and T5 looked like a crystal blob engulfing the body (user complained "tem que ter aparência de golem"). (2) Ore redistribution: organic clusters (6/zone, jitter/rotation/scale 0.8-1.3) replacing 9x6 grids; ZoneGround slabs per zone (different material/color); zone signs at entrances z=96/192/288; Floor expanded 300x502. GameConfig.Zones gained center/radius (origin/cols/rows/spacing legacy). (3) Bases = open-front one-room houses 34x26x14 (3 walls+roof, neon blue trim, x=-100..100 spacing 40): 4 elevated display stands at back (Pedestal1-4 = stand tops, spotlights), Spawn corner, SellPad green corner, OwnerSign above entrance, Platform = interior floor (same names → server untouched). Tweak candidates: warm spotlights tint stone golems tan (cool StandSpot color or darken STONE_COLOR); empty stands show small center cylinder.
- Caves + geography + cabins (2026-06-10): map = valley concept. South z≈-64..-100: village of 6 log cabins (store asset 92421233555395, scripts-free, door facing hub) on grass; functional parts repositioned inside (Spawn inside door, SellPad front lawn, OwnerSign facade, Platform interior floor, Pedestal1-4 display stands at back wall w/ spotlights). Center z≈-40: hub plaza — pads in two rings around lit campfire on cobblestone. North z=11..404: stepped rocky mountain (PART-shell technique, not Terrain — chosen for solid floors) with 4 hollow cave chambers built AROUND existing ore clusters (ores unmoved): Cave1 wide bright mouth at base → Cave4 deepest/darkest lit by its own magenta crystals; zone signs at cave mouths (Zone1Sign was created, didn't exist). All in
Workspace.MapVisuals(Caves/Mountain/Lighting/Plaza/Ground/_CabinTemplate) — logic folders untouched. Validated: spawn-in-cabin, sell, melee mining inside all 4 caves (no void drops), power gate, golem T5 carry→stand mount→income 750/s, auto-mine reaches cave ores. Pendências: mountain silhouette blocky from afar; zone sign billboards (AlwaysOnTop) visible through walls; gamepass IDs still placeholder. - Cabin expansion + HUD cleanup (2026-06-10): (1)
Config.CabinLevels= lvl1 4 slots $0 / lvl2 6 slots $25k / lvl3 8 slots $250k. Pedestal5-8 added to all bases (hidden by default: Transparency 1 + attr Hidden; revealed to ALL when unlocked — golems are physical). Server: cabinLevel in data+save, Stats CabinLevel/CabinCost/Slots, Shop action "cabin", setBaseCabin stamps base attrs OwnerUserId/CabinLevel, freeBase resets.StarterPlayerScripts.CabinVisualClientrenders expansion shell ONLY for owner (client-side_LocalCabinUpgrade: lvl2 gold trims+lanterns, lvl3 balcony+banners+beacon). ShopGui row "🏠 Expandir Cabana" (MAX at lvl3). Debug "cabinlvl" + buttons. (2) Monetization pads REMOVED from plaza (Robux items only in Shop UI ROBUX section). spawnFloatingText rewritten: FredokaOne+stroke, pop-in Back overshoot, smooth rise/fade, random X offset, AlwaysOnTop=false MaxDistance=90. All world billboards: zone signs MaxDistance 120, OwnerSign/SellPad 80, SlotTags 40, gameplay pads 70 — nothing leaks through walls. Verified: shop rows = MELHORIAS(Picareta/Mochila/Rebirth/Expandir Cabana) + ROBUX(Auto-Mine/2x Cash/Mochila 2x/Cash Pack); plaza clean; 5th golem mounts after lvl2; owner-only visuals bound to OwnerUserId. - PVP cycles + golem theft (2026-06-10): Steal-a-Brainrot style phases.
Config.Cyclepeace=240/warn=15/pvp=120;Config.PVPhitMaxDist=12/hitCooldown=0.8/dropFrac=0.4/dropMaxChunks=8/neutralLife=10/stealWalkSpeed=10/knockback=38. Replicated state:ReplicatedStorage.PhaseState(StringValue) +PhaseEndsAt(GetServerTimeNow-based, clients compute countdown locally); remotePhasefires only on transitions. PVP combat: pickaxe swing with no ore in range during pvp →HitPlayerremote → server validates (phase/dist/cooldown) → victim drops 40% carried ore (cap 8) as NEUTRAL physical drops (launchNeutralChunk: no magnet, any player ≤5 collects, 10s expiry) + carried rare drops glowing + knockback + red "-N". Theft: touching a mounted golem pedestal of another base during pvp → golem to thief's head (CarryingStolen + StolenFromUserId attrs, WalkSpeed 16→10), owner notified+announce; claim by touching own Platform (enters monsters→persists); thief hit OR pvp end OR thief leaves → golem returns to owner pedestal (or neutral drop if full). HUD: top-center phase badge (☮️ PAZ blue / ⚠️ warn orange / ⚔️ PVP red pulsing) + red vignette on pvp start. Debug "phase" action + Força PVP/Paz buttons. Agent validated via simulated-player harness (proxy players + R15 rigs), harness fully removed after. Server print: "...PVP cycle + theft". TODO ideas: weekly theft leaderboard, Escudo PVP gamepass, pickaxe-based stealing variant, real 2-player feel test. - Dark interconnected caves + lanterns (2026-06-10): cave system rebuilt as ONE descending underground complex (
Workspace.MapVisuals.CaveComplex, 84 parts): lit vestibule mouth (only interior light) → ramp tunnels (≤39°, width 14, ceiling 16) → Z1 chamber y-8 → Z2 y-22 → Z3 y-36 → Z4 y-52 (deeper = rarer). Zone signs at transitions. Old separate cave boxes/grounds/oversized plates deleted (Baseplate shrunk to valley, ValleyFloor replaces giant plate). Darkness technique: fully sealed sub-y0 geometry + Lighting.Ambient (30,30,35), OutdoorAmbient (120,122,130), Brightness 3, ClockTime 14, EnvironmentDiffuse/Specular=0 — caves pitch black, valley sunny. Ores DON'T emit (Z4 Neon→Glass, 0 lights/particles on ores, reflectance ≤0.1); rare drops + T4/T5 golems still glow (jackpot beacons in the dark). Lanterns: Config.Lantern {cashCost 20000, range 24, br 1.6} + GamePasses.ProLantern placeholder {range 44, br 2.4, amber}; data.lantern persisted; attachLantern welds amber part+PointLight to torso on every CharacterAdded; Stats.Lantern (0/1/2); Shop action "lantern" + UI rows 🔦 Lanterna (cash/ATIVA) + 🔦 Lanterna Pro (Robux prompt); Debug "lantern" toggle. Verified: Z3 pitch black w/o lantern, lit with it; mining/drops/gate/auto-mine/golems/PVP all work in new chambers; no void holes. - Ore size halved (2026-06-10): all 216 ores Part.Size and SpecialMesh.Scale ×0.5, re-seated on floor (lowered by oldHeight/4). Now ~player height. Mining verified.
- Ore visual variety (2026-06-10): store models were junk (1288-part showcases, legacy meshes) — went procedural instead. 4 random styles per ore: spire (thin/tall/tilted), cluster (2-3 satellite crystals), rock-base (slate slab + 2 shards), geode (rock ball + crystal). Decorations = child Parts named "OreDeco" (CanCollide/CanQuery false, attr BaseTransparency) inside the Ore part — safe for logic (isOre checks the part itself). Server patched:
setOreDecoVisible(ore, visible)called on break (hide) and respawn (show). Verified full cycle: break hides ore+decos, respawn restores. - Fog + map bounds (2026-06-10): Lighting fog FogStart=60 FogEnd=260 FogColor (190,200,215) — player sees surroundings + cave entrance, rest of map fades out (cave interiors barely affected: chambers <100 wide).
Workspace.MapBounds= 8 invisible walls (Transparency 1, CanCollide): West/East x±170 spanning z[-160..470], South z-160, Back z+470 (behind mountain z459), NorthEdgeW/E covering void strips beside mountain at z+24 (baseplate ends z24, mountain only x±105), NorthHigh1 z+26 y30..170 + NorthHigh2 z+200 y30..200 (anti-climb walls with bottoms ABOVE cave ceiling y25 — CaveComplex spans X±56 Y[-58..25] Z[-22..396], verified zero AABB intersection with any wall). Tested: player stopped at x-166.5 against west wall; cave interior unobstructed. - Procedural hybrid caves (2026-06-10, option B approved by user):
ServerScriptService.CaveGenerator(~770 lines) runs at server boot, seeded per server (seed logged). FIXED anchors: vestibule, 4 zone chambers, zone signs,CaveComplex.TunnelSockets(8 invisible socket parts at fixed 14-stud portals in chamber walls). PROCEDURAL per seed: tunnels between sockets (lateral S/U detours sizedneedRun = drop/tan(MAX_SLOPE-8°)for ≤40° slopes since chambers are Y-stacked; Catmull-Rom XZ smoothing then monotonic Y assignment — splining Y directly caused overshoot bug; sealed Slate segments w/ 1.5 overlap, width 10-16, ceiling ≤y25, CastShadow false) + ≥1 side pocket per tunnel (18-24 wide, 3-6 bonus oresBonus=trueOreValue×1.5). Ore re-scatter: 54/chamber into 5-7 organic clusters + 4-style restyling each boot. Auto-validation w/ reseed up to 5×: floor raycasts every 4 studs along path, floor under every ore, nothing above y25 or |X|>100. Output inWorkspace.GeneratedCaves(runtime only, ~112-128 parts/seed).regenerate()via_G.RegenerateCaves+ Debug action "regen" ("A MINA DESABOU" announce, teleports all players to base) + DebugGui button — future "mine collapse" event hook. Static tunnels deleted from CaveComplex. Agent validated 2 full seeds live (walks, mining, bonus ores, deco toggle, regen). GOTCHA: MCP start_stop_play handshake can WEDGE ("Start play hasn't finished yet" loop) — requires manual Play press or Studio restart; code unaffected (user pressing Play themselves un-wedges it). - Void-hole fix (2026-06-10): user fell through a hole out of the map. Root cause: segment floors are FLAT at avg of endpoint Ys → staircase slots on descents + wedge gaps at outer corners of turns; centerline-only validation missed off-axis holes. Fixed 3-way: (1) buildTunnel now adds 20x20 JOINT PATCHES under every interior path point at the lower neighbor floor + 22x22 MOUTH APRONS at both endpoints; (2) validate() probes 3 lanes (center ± perpendicular 3.5); (3) VOID SAFETY NET in MiningServer — 1s loop, any player HRP.Y < -80 → teleportToBase + notify ("caiu num buraco"). Verified: boot+2 regens all attempt=1 (~150-186 parts), thrown player at y-150 rescued to base in 2s, 10/10 floor drop-tests no real falls (note: naive Y-stability checks give false "QUEDA" flags because joint patches sit below main floors — test with Freefall state + y<-80 instead).
- Blocked-entrance fix saga (2026-06-10): user reported cave-zone entrances getting blocked by generation. Root cause discovery: out/in portals were nearly COINCIDENT in XZ (Δz 1-18, same x=0) and stacked vertically (Δy 9-16) — an arrival corridor (min interior 12 + 4 slab) entering the lower portal ALWAYS pokes its ceiling through the upper portal's mouth. My intermediate attempts that failed (lessons): Z-axis straight stubs (portal axis assumption wrong), corridor-clearance rays along path (graze jambs forever — corridors run parallel to portal walls), GetPartBoundsInRadius standing-room check (AABB inflates on rotated parts → 100% false positives; use GetPartsInPart with a real Ball part for exact overlap). Final validation kept in CaveGenerator: exact standing-room probe (Ball r3.5 at +4.5, Include GeneratedCaves) at path[1],path[2],path[n-1],path[n] — strict, never loosen. Final geometry fix (2 agent sessions, SurgeryV2..V5 attrs): (1) in-sockets moved laterally ±28 + new wall openings + old sealed (Vest→Z1 solved with arcWaypoints semicircle). (2) Deep pairs (chamber gaps only
9 studs wide vs 14 drop — ramps impossible in gap): out-sockets sunk INTO origin chambers aligned to dest X, generated corridor runs 100% FLAT at origin floor level through the gap, and the 14-stud descent happens in a STATIC RAMP ARRIVAL HALL (30°, sealed, anchor geometry in CaveComplex) from wall mouth (MouthX/Y/Z attrs on in-sockets) down to chamber floor. gapWaypoints rewritten (axial stub + early diagonal + long axial run-in, X and Y snapped near mouths), GAP_SEG_LEN=6, MOUTH_FLAT=10, slim joint patches 14x8 for gap tunnels, HALL_KEEPOUT rects per zone so ores never spawn inside halls, corridor-clearance now Include{genRoot}. Verified independently: boot+regens all attempt=1 (~167-175 parts), exact probe = 0 parts at all sockets+mouths, full walk validated by agent. - Use agent
roblox-sim-builderfor economy/monetization design + build. Server-authoritative + ProfileStore + idempotent ProcessReceipt mandatory.
See always-commit-push-deploy — user wants things live, not left half-done.
- Kills + leaderboard + AI bots (2026-06-11): PVP hits now deal
Config.PVP.hitDamage=34(3 hits=KO) during pvp phase only; KO credits attackerKills+1(new persisted leaderstat, killCreditWindow 5s), victim respawns at own base, global announce, full heal on peace.Workspace.KillLeaderboard(plaza): "TOP ASSASSINOS" SurfaceGui top-5 session kills (players+bots), rendered byServerScriptService.LeaderboardServerfrom_G.MiningSessionKills.ServerScriptService.BotService(ModuleScript required by MiningServer): debug-spawned R6 blocky bots (max 6,Workspace.Bots, IsBot attr, name billboard, PointLight, HRP=collidable body — non-collide rig fell through world and became undying zombie). FSM WANDER→MINE (PathfindingService into caves + teleport-assist ≤8 fallback, mines via_G.MiningBotMinereusing tryMine, bag cap 10)→SELL→COMBAT (pvp: hunts nearest player/bot ≤60, hits via_G.MiningBotHitthrough actor-agnosticapplyHitCorerefactor). Bots die/respawn 3s, drop neutral crystals when hit; HitPlayer remote + PickaxeClient nearestEnemy accept bot Models. Debug: bots(N)/botsclear + DebugGui buttons. Validated end-to-end incl. bot-kills-player (respawn at own base OK — note Players.RespawnTime=5s, don't read position earlier), bots survive regen, botsclear clean, zero regression. GOTCHA:_Gnot shared between execute_luau(Server) and game scripts — read state via Client replication. - To publish: create gamepasses/devproducts (AutoMine/DoubleCash/BigBackpack/ProLantern + CashPack) on Creator Hub → paste IDs in GameConfig; enable Studio Access to API Services for DataStore persistence.
- End-to-end walkability guarantee (2026-06-11, 2nd blocked-entrance report): point-probes were insufficient — pathfind diagnosis showed 5/8 route legs NoPath. ROOT CAUSES (agent-confirmed): (1) static chamber exit walls had NO doorway at out-sockets (generated corridors don't pierce perpendicular static walls — the literal "solid rock at the mouth"); (2) 3.8-5 stud step at static mouth-sill→ramp-hall handoff (navmesh treats risers >2 as walls; stepped slabs leave a ~0.5 "knee" — single inclined slab deck fixes it); (3) Z1 entrance was a 9-stud cliff (replaced broken U-arc with wide 24° entrance ramp at x=28 opening); (4) CanCollide ores cutting in→out lanes inside chambers (CORRIDOR_LANES scatter keepout added). FINAL JUDGE in CaveGenerator validate():
pathfindJudge()— PathfindingService (AgentRadius 2.5/Height 5/CanJump) on all 8 legs valley→Vest→Z1in→Z1out→Z2in→...→Z4in, ALL must be Success; 2s navmesh settle + 4 retries ×0.8s (navmesh updates async); MAX_ATTEMPTS=12. CIRCUIT BREAKER: all-fail → deterministic safe layoutgenerateOnce(1337)(tested: builds + 8/8). Results: 9/9 generations attempt=1 pathcheck 8/8; independently verified (own 8-leg pathcheck + REAL MoveTo walk valley→Z1 ore, 19 waypoints, no teleport). Pendência menor: BotService teleport-assist still fires on detour route (watchdog tuning, not geometry). - Main entrance restored (2026-06-11, 3rd entrance report): user spotted it exactly — the FIXED vestibule (torch-lit main entrance) became a dead-end: the walkability agent had replaced the Vest→Z1 generated tunnel with a surface ramp at x=28 ("the other entrance"), and pathfind legs passed by routing AROUND outside. Behind the vest door were TWO overlapping wall layers at z22: a 14-wide seal slab AND a 72-wide wall (x-51..21) — both covering the door slot. Fix (static, attr MainEntranceV1 in CaveComplex): seal slab → lintel (y13..18) + underground sill fill (y-8..1); 72-wide wall → split WallWestOfDoor (x-51..-7) + WallEastOfDoor (x7..21) leaving 14-wide doorway clear; static MainEntranceRamp single inclined slab (~22°, 14 wide, +rails) from vest doorway (0,1,25) down to Z1 floor (0,-8,47); HALL_KEEPOUT Zone1 += rect x-10..10 z19..54 so ores never spawn on the ramp. x=28 ramp kept as secondary entrance. Verified: 9/9 door rays clear, REAL MoveTo walk valley→vestibule→door→ramp→Z1 floor in 5s, 2 regens pathcheck 8/8 + 0 ores in ramp lane. LESSON: anchor walls can be multi-layered/overlapping — cutting one slab isn't enough, raycast the actual opening after surgery.
- Killboard moved to HUD (2026-06-11): physical
Workspace.KillLeaderboardplaza board REMOVED per user. New RemoteEventKillboard;LeaderboardServerrewritten to FireAllClients(top-5 sorted list from _G.MiningSessionKills) on rev bump + 2s safety + on PlayerAdded. HUDClient (MiningHUD) renders compact gold-stroked panel top-right (below playerlist, y170, AutomaticSize, hidden when empty): "🏆 TOP KILLS" FredokaOne + 5 medal rows (players+bots). Verified live with bots fighting. - Steal system completed + pads→UI (2026-06-11): (A) Base lock: Config.PVP lockDuration=20/lockCooldown=90, remote
BaseLock, base attrs LockedUntil/LockCooldownUntil, ForceField dome visual, stealGolem rejects locked, pvp-phase-only. (B) Thief marked: red Highlight server-side while CarryingStolen (players+bots). (C) Owner alarm: remotesStolenAlert/StolenAlertClear→ bell sound + "⚠️ SEU GOLEM!" billboard pinned on thief (through walls). (D) Crash-safety: grab moves tier monsters→stolenOut; save serializes monsters∪stolenOut (owner never loses on crash); claim removes from owner stolenOut; return moves back. (E) Bot thieves: Config.Bots.stealChance=0.4, FSM STEAL (navigate to mounted unlocked pedestal, _G.MiningBotSteal via actor-agnostic stealGolemCore) + FLEE (kiting); bots never claim (no base) — kill them or wait pvp end to recover. (F) Pads removed: plaza PickaxeShop/BackpackShop/RebirthPad + all base SellPads deleted; Spawn pads invisible (functional); HUD action cluster bottom-right: 💰 VENDER (enabled ≤25 studs from own base Platform, server validates too via nearOwnBase in onSell) + 🔒 TRANCAR (3 states: ready/active countdown/cooldown via base attrs + GetServerTimeNow). (G) stealCooldownPerBase=15s anti-spam + claim announce "😈 X ROUBOU o Golem...". Debug: playersteal action, DbgMonsters/DbgStolenOut attrs. All 9 validations passed (agent) + independent spot-check (pads gone, HUD buttons, lock+dome live, income). Pendência: bot thieves slow navigating plaza→bases (~60 studs), steal path works when they arrive. - Auto-sell + Events system (2026-06-11): (1) AUTO-SELL: stepping on own base Platform sells bag automatically (Platform.Touched handler in base manager: autoSellCD 1s + onSell; nearOwnBase still validates); VENDER button removed from HUD action cluster (TRANCAR stays). Note: teleporting onto Platform doesn't fire Touched — walking does (normal play fine). (2) EVENTS: designed via ultracode workflow judge panel (retention + economy designers + tech-lead merge; full critique in events-critique.txt).
ServerScriptService.EventService(~907 lines): scheduler hooks PhaseState→peace, phase-counted cooldowns, weighted roll (veio 40/rush 25/febre 15/none 20), pity 3, max 1/phase, never-same-twice, lifecycle IDLE→TELEGRAPH→ACTIVE→RESOLVE→CLEANUP, hard deadline peaceEndsAt−20s, defensive stop on warn/regen/killswitch with partial force-resolve, replication via ReplicatedStorage.EventState attributes, all payouts through central grantCash (_G.MiningGrantCash, rebirthMult+log[EVENT] id payout user). Events: Veio Premiado (signature: zone weighted by real-player population, giant gold vein w/ vertical Beam beacon, shared HP = 40×median pickaxe power×clamp(participants/3,1,2.5), damage via existing mining pipeline (Part Name="Ore" IsEventVein=true), contribution map, ≥3s first-hit sanity, break → fragments clamp(4+2×contributors,6,12) worth zoneBase×25×3 each, pickup ≤10 studs+rate-limit+cap 3/player, direct cash); Febre Dourada (rare chance 0.012→0.048 via rareChanceFor override hook in spawnDrops, cap 2 golds/player, announce throttle, guaranteed cleanup reset); Corrida do Brilho (zone ore drops ×2, respects bag cap intentionally, client amber glow ≤16 lights). GameConfig.Events tunables + global/per-event killswitch. Debug: "event" (veio/febre/rush)/"eventoff" + DebugGui buttons. Wave-2 designs documented (Golem Errante rental variant, Mina Rica). Built across 2 agent sessions (first hit session limit at ~98%; second audited+fixed one bot guardIsEventVeinin _G.MiningBotMine + validated all 10 edge cases with exact numbers). Independently verified: veio telegraph→spawn→HP 40 dropping by real power, badge in HUD. - Auto-Mine FX + gamepass debug toggle (2026-06-11): Debug action "givepass" (arg AutoMine/DoubleCash/BigBackpack) toggles passCache[player][key] — lets dev QA gamepass perks WITHOUT real IDs; DebugGui buttons ⚡ Auto-Mine / 💰 2x Cash / 🎒 +Mochila. Auto-Mine visual feedback: server sets replicated attr
HasAutoMine(in the auto-mine loop, only changes) + firesAutoMineFXRemoteEvent FireAllClients(player, orePos) per mined ore.StarterPlayerScripts.AutoMineFXClient: range disc (Cylinder part, radius 41 = nearestOre bestDist, neon cyan, Transparency 0.86, welded to HRP at floor, shown only while HasAutoMine) + per-tick rays (neon part from chest to ore + impact spark, fade ~0.15s). Validated. Could swap full disc for thin ring outline if user wants less fill. - PENDING pre-launch audit: stopped mid-run (user wanted auto-mine test). Partial finding to fix: MineBlock has NO server-side rate-limit — client SWING_COOLDOWN only; exploiter can spam FireServer to break ores instantly (balance exploit, not infinite cash since sell needs proximity). Re-dispatch audit when user is done testing in Studio (it runs in background and conflicts with manual Play). All other RemoteEvents audited OK in partial: Shop/HitPlayer/StealGolem/BaseLock/Debug(isDev-gated)/Prompt all validate server-side.
- Sell Bot consumable (2026-06-11): dev product
SellBot(Robux consumable, Config.DevProducts.SellBot=0 placeholder). Minecart model from store (assetId 216368797, scripts stripped) stored asReplicatedStorage.SellBotModel. On purchase/grant →_G.MiningActivateSellBot: spawns cart inWorkspace.SellBots, follows player (anchored + CFrame lerp on single Heartbeat — no physics/pathfind, void-proof), auto-sells bag every Config.SellBot.sellInterval(2s) for Config.SellBot.duration(30s) viasellCargo(player, bypassProximity=true)(refactored from onSell — onSell now wrapper applying nearOwnBase gate; sellCargo reuses grantCash central). FX: spawnFloatingText "+$N" + chime (6022184873). At end: cart departs+shrinks, destroyed. Cleanup on Died/PlayerRemoving. Reactivate renews (no stacking). ProcessReceipt branch SellBot idempotent (ledger). Shop ROBUX row "🛒 Bot de Venda" + Debug "sellbot" action/button. Validated: sells at 197 studs from base (gate 25), follows, 30s expiry no leak, rare included (+1125). GOTCHA: first SoundId 607665064 was invalid (sound load spam) → use 6022184873. Tunable Config.SellBot. - Sell Bot REWORK — courier + 3 tiers (2026-06-11): replaced follow+autosell with FSM IDLE→FILL→TRAVEL→SELL→RETURN loop. Cart physically travels to base via PathfindingService waypoints + CFrame glide + per-frame raycast FLOOR-SNAP (fixed a void bug where cart fell to Y=-46000; abs void guard Y<-80) + teleport-assist watchdog (BotService pattern). FILL gate: waits bag 80% (gatherFrac) OR 3s (gatherTime), rare pulls immediately — avoids 1-ore trips. cartLoad stored as RAW {ore, rareValue}, sold on arrival via sellCartLoad→grantCash central (rebirthMult×DoubleCash applied ONCE at sell with current mult — proved 7 ore × 3 × (1.5 reb × 2 dc) = 63 exact). 3 tiers Config.SellBot.tiers {1m=60, 30m=1800, 1h=3600}; Config.DevProducts.SellBot1m/30m/1h=0 placeholders (SellBot legacy=alias 1m). Reactivate higher tier extends, never stacks (1 cart). ProcessReceipt 3 branches idempotent. Crash-safety: cartLoad always credited on regen/death/PlayerRemoving/expiry/pathfind-fail (never lost — validated regen delta=42, death delta=27, 0 orphans). Cart has own PointLight (range 26). Shop ROBUX 3 rows + Debug 3 buttons (sellbot arg=tier). Independently verified: cart traveled 195→21 studs to base (monotonic), sold +15 exact, returned. Nav quality: good, smooth, teleport-assist rarely fires (pathfind 8/8 helps).
- Golem System Fase A (2026-06-14) — golem rico + float + migração: grande expansão do sistema de golem (golem deixa de ser
intde tier, vira objeto rico). Design completo via workflow ultracode (5 designers + 3 críticos) salvo no vaultbrain/projects/chungchungus/golem-system-design.md(fonte de verdade). Decisões travadas: 10 raridades (Comum→Primordial, #7-10 só breeding) curva 5× preservando income legado 1:1; float 0-1 imutável viés-baixo (min de 3 rolls, média ~0.21) afeta stats E visual (5 bandas de finish Rústico→Imaculado); nearTierBonus 35% ("float entre raridades"); 18 espécies base + 15 mutações secretas (Fase B); breeding genética raridade-tende-ao-pior (anti-impressora) pais não consumidos (Fase B); marketplace instant-buy escrow MemoryStore anti-dupe (Fase C); moeda única (cash) + CashPack Robux; upkeep pedestal 8% anti-inflação; cap 200; monetização Hunter's Luck + Breeder's Crest + Instant Hatch (sem P2W em qualidade). CONSTRUÍDA Fase A:GameConfig(tabelas Golem v2),GolemData(novo ModuleScript, funções puras: getPowerScore/floatMult/nearTierBonus/floatToFinish/displayName/validate),GolemBuilderreescrito (build(golem)por species+rarity+float+finish, cap 4 PointLights/base, handle :Destroy() anti-leak/zombie),MiningServer(migração saveVersion 1→2 lazy idempotentemonsters[int]→golems[uid], drop rico c/ Random.new(serverSeed) server-only, income net upkeep 8%, carry/mount/restore/steal em objeto rico, cap 200 antes do MonsterChance). GOTCHA migração: float legado = 4000 (0.40) não 5000 → floatMult exatamente 1.0 → income byte-idêntico ao legado (0.50 daria +5%). Validado em Play: migração idempotente sem nerf, drops com float/species/rarity teto Mítico, render sem leak, zero regressão (mining/mount/steal/rebirth). Pendente: Fases B (breeding) / C (marketplace) / D (dex+polish). Edições em memória no Studio — precisa Save/Publish. (Schema já tem hooks parentA/B/parentSnapshot/mutations/mutationMult prontos pra Fase B.) - Golem System Fase B (2026-06-14) — breeding genética + mutações: construída em cima da Fase A.
GameConfig:GolemSecretSpecies(15 secretas steam→genesis, merge em GolemSpecies=33 total, dropBias=0/secret=true),GolemMutations(16 receitas c/ gates minGen/minFloat/minRarity + rarityUp eclipse/genesis +2 + wildcard livingglass),Config.Breed(todos tunables §7).GolemData:mutationMultreal (produto), campoorigin(mine/breed/legacy), resolvers PUROS RNG-injetado (resolveChildRarity/rarityUpChance/resolveChildFloat/mutChance/findRecipe/buildParentSnapshot).BreedingService(NOVO, server-auth):doBreedvalida posse+WALLET+cooldown+slot+cash, debita cash (sink), pais NÃO consumidos (ganham parentCooldown=breedTime×1.5), serverSeed=hash(uids,os.clock_hi,secretNonce) nunca replicado, filho selado no início (anti re-roll por leave), herança tende-ao-pior + float média+ruído + mutação c/ pity + garantia dura 41º, generation max+1, parentSnapshot 2 níveis. Breeds ativos persistidos (finishAt absoluto = progresso offline), claim respeita cap 200. InstantHatch token guardável cap 10/dia ProcessReceipt idempotente._G.MiningBreeding/MiningBreedingHooksbridge. Remotes Breed/BreedQuery(redatada)/BreedSync.StarterGui.BreedingGui(dark premium): seleciona 2 pais, mostra custo+tempo+odds APROXIMADAS (nunca mutação exata/seed), breeds ativos countdown, claim/InstantHatch, genealogia. Debug: givegolem/hatchgive. Validado (N=2000): tende-ao-pior 39.7%hi/60.3%lo (pop não infla), par puro 0-abaixo, receitas+gates corretos (eclipse→Celestial, genesis→Primordial), custo/cooldown/Crest 3-slots, persistência round-trip, hatch cap 10/dia idempotente, garantia 41º, zero regressão Fase A. Pendente Fase C (marketplace) / D (dex+polish). Em memória no Studio — precisa Save/Publish. - Golem System Fase C (2026-06-14) — marketplace cross-server anti-dupe: a fase crítica.
GameConfig:PRICE_PER_PS=1800,rarityScarcity,Config.Market(fee 0.10, relistCooldown 6h, listTTL 7d, maxListings 10, escrowTimeout, progressiveTax 10/20/35% se <24h, wash-filter, sharding),Config.MarketStores(nomes versionados).GolemData:fairPriceAnchor(=getPowerScore×PRICE_PER_PS×rarityScarcity, mesma fonte do income = anti-arbitragem),priceBucket.ReplicatedStorage.MarketCore(NOVO ModuleScript) = protocolo PURO com injeção de dependência (Store+Hooks+Players) → MESMO código roda em prod (DataStore/MemoryStore reais) e em teste (mock per-key-atômico) = zero drift. Funcs: doList/doBuy/doCancel/drainPayout/drainIncoming/reconcilePending/reaperSweep/browse/recordSale.ServerScriptService.MarketService(NOVO) = camada fina: monta Store real (DataStore GolemEscrow_v1/Payout_v1/Incoming_v1/TxLedger_v1/Sales_v1 + MemoryStore SortedMap LiveListings), injeta em MarketCore, bind_G.MiningMarketHooks, remotes rate-limit+validate, drena Payout/Incoming/reconcile no login, reaper a cada 30s.MiningServer:_G.MiningMarketHooks(beginList/commitList/abortList/onSold/chargeCash/creditSellerOnline/deliverBought/quickFlipTax) +unmountGolem; schema v2 aditivo: pendingList (golem completo embutido=crash-safety), purchasedAt, marketFlips, listCooldowns, activeListings.StarterGui.MarketGui(dark premium): abas Procurar(filtros)/Inspect(float exato+powerScore+genealogia+mediana±quartis+BUY 2-tap)/Vender/Receber. Remotes MarketList/Buy/Cancel/Browse/Sync. PROTOCOLO §4.4: LIST (profile remove+pendingList → escrow c/ txToken → commit; reaper tombstone aborted), BUY (corrida decidida DENTRO do UpdateAsync do escrow por uid, DataStore serializa por chave = 1 vencedor; comprador processedTx-guard; Payout idempotente; reaper varre MemoryStore NUNCA ListKeysAsync). Listar DESMONTA (imune a roubo). Validado 95/95 asserts: corrida 2-buyers conserva 1 golem, seller offline paga via Payout drenado no login (idempotente), crash mid-LIST/mid-BUY resolvido por reconcile/reaper/tombstone sem dupe nem sumiço, LIST-vs-STEAL 1 vence, fee 10% sink, imposto progressivo, wash ping-pong não move mediana, anchor nunca vaza, idempotência, zero regressão A+B. BUG corrigido: escrow SOLD+claimed vazava na chave do vendedor → doBuy limpa o registro após delivery. GOTCHA path vault: MCP write_note já prefixabrain/(passar path relativo a brain/, exprojects/...nãobrain/projects/). Pendente Fase D (dex+monetização+polish). Em memória no Studio — Save/Publish + ligar API Services + MemoryStore exige jogo publicado. - Golem System Fase D (2026-06-14) — Dex + Hunter's Luck + loops + leaderboards (FECHA o sistema):
ReplicatedStorage.DexCore(NOVO, matemática pura: key/distinctBaseSpecies/completedRarities/incomeMult/rebirthBonus/completionPct/summary).ServerScriptService.DexService(NOVO, snapshot DexQuery/DexSync + 2 leaderboards cross-server via OrderedDataStore: completion + Genesis).ServerScriptService.QuestService(NOVO, diárias+semanais reset UTC, progresso persistido, claim idempotente,_G.MiningQuests.bump).StarterGui.DexGui(grid espécie×raridade: descoberto colorido/visto cinza/locked, header de buff, marcos, boards) +StarterGui.QuestGui(diárias/semanais, progresso, claim, countdown reset). 8 remotes novos.GameConfig:GamePasses.HuntersLuck=599,Config.Dex/Config.Quests/Config.DexLeaderboards.MiningServer: namespaceDexD(helpers consolidados — MiningServer bateu no limite Luau de 200 locais por escopo, resolvido com 1 namespace em vez de ~12 locais; TECH-DEBT: MiningServer tá grande/frágil, considerar split futuro),DexD.creditGolem(funil anti-alt-feed), incomeMult/rebirthMult em totalIncome/grantCash, Hunter's Luck (rollDropRarityLuckybest-of-2 cap Mítico + chance 0.07), hooks de quest em mine/breed/sell/PVP, Genesis announce em depositChild, save fields dexOwned/dexSeen/dexMilestones/dexTitle/quests, debug dexreset/dexcredit/dexfill/questbump/givepass HuntersLuck. DEX BUFF anti alt-feed (provado): só golem origin mine/breed credita descoberta+buff; comprar no market sobe "seen" mas income IDÊNTICO. Buff: +1%/espécie cap +18%, +5% rebirthMult/raridade completa (18 base). AUDITORIA RUNTIME APROVADA (2026-06-14, Play destravado manual): 4 fases (A+B+C+D) rodam ao vivo zero erro de game-script, ZERO bugs/fixes. Provado live: anti-alt-feed (produzir espécie nova sobe buff; comprar no market = seen sobe mas buff/income IDÊNTICO), Genesis announce disparou (eclipse×eclipse→Primordial r10, banner global 🌟 + quest dexSecret), income/upkeep 0.92, migração no-nerf byte-idêntico, breeding tende-ao-pior + recipes/gates, Hunter's Luck best-of-2 cap Mítico, quest claim idempotente + reset UTC, GUIs sem colisão de toggle. Marketplace validado via MOCK per-key-atômico 10/10 (MemoryStore/DataStore INERTE no Studio sem API access). NÃO testável no Studio (API OFF): stores reais (vitrine/escrow/payout) + ordenação OrderedDataStore das leaderboards — crash-safe via pcall, precisa API access ON + jogo PUBLICADO pra QA real. Follow-up trivial: comentário stale MiningServer L156-157 diz float=5000, código usa 4000 (correto). GOTCHA build: multi_edit corrompeu GameConfig (casoureturn Configdentro de cabinSlots) → corrigido. SISTEMA DE GOLEM COMPLETO (A+B+C+D) — pendente: QA runtime em Play + Save/Publish + API Services + jogo publicado (MemoryStore). Design completo: vaultbrain/projects/chungchungus/golem-system-design.md. - BreedingGui bug fix (2026-06-15) — duplicação no toggle + seleção morta:
StarterGui.BreedingGui.BreedingClient—renderWallet/renderBreedslimpavam children comch:IsA("Frame"), MAS as linhas da carteira sãoTextButton(não Frame) → limpeza não apagava nada → cada abrir/fechar EMPILHAVA a carteira de novo. "Não consigo selecionar" era sintoma: clique batia em linha antiga empilhada, mas repaint do highlight (walletRows) apontava só pras linhas do render mais novo. FIX: limpeza porch:IsA("GuiObject")(pega TextButton+Frame, preserva UIListLayout). ServidorsnapshotFor/breedable(BreedingService L248+) estava correto (sem 2º bug). NOTA: golem MONTADO no pedestal aparece "ocupado"/não-selecionável — só golem em estado WALLET é breedable (by design). GOTCHAS Studio reforçadas: (1)multi_editreportou "Modified ... 1 edits applied" mas NÃO aplicou (Source real inalterado) — verifiquei viaexecute_luaulendo.Sourcee apliquei o fix setandosc.Source = s:gsub(...)direto (confiável). Sempre verificar edição via .Source, não confiar no retorno do multi_edit. (2)script_grepem Play mode só vê scripts do CLIENT (ServerScriptService não replica) — pra grepar server, ir pro Edit mode. (3)script_greptrata query como padrão Luau (parênteses = metacaracteres). (4)VirtualInputManager:SendMouseButtonEventfalha no execute_luau ("lacking capability RobloxScript") — não dá pra simular clique real; testar lógica de UI de forma determinística. 2º fix (mesmo report do user "não dá pra selecionar golems pro breeding"): causa raiz =doBreed(BreedingService L317) exigiastate==WALLET, mas golems ficam MOUNTED no pedestal e NÃO existe remote/ação de desmontar (única forma de tirar do pedestal era listar no mercado) → breeding inalcançável pros golems montados. FIX: permitir cruzar golem MONTADO direto (breeding não consome nem move o pai — só lê genes + dá parentCooldown; pai continua montado gerando renda, filho vai pra carteira). Alterado em BreedingService:snapshotForbreedable =(state==WALLET or state==MOUNTED) and not busy+ gate dodoBreedaceita WALLET ou MOUNTED. Aplicado via.Sourcegsub (multi_edit não-confiável). NOTA Studio: API access OFF = save real não carrega, player começa com 0 golems (BreedQuery walletEntries=0) — testar breeding real exige spawnar+montar golems (DEBUG "Golem T3/T5") ou jogar no publicado. 3º fix (user "delay nas ações, coletar missão/breed demora"): latência de save bloqueante. Os handlers (doBreed/claimBreed/hatch, QuestService claim, market) chamavamH.save(player)(=savePlayer→safeSave→DataStore UpdateAsync,0.2s+retry; em Studio API-off bloqueia mais) ANTES do1624/1665/1993) trocados prapushSync→ UI só atualizava depois do save. FIX em MiningServer: novolocal function queueSave(player)(save em background, debounced 0.15s, coalesce bursts, guard data[player]) inserido após savePlayer; os 3 hookssave = function(player) savePlayer(player) end(MiningBreedingHooks/MiningMarketHooks/MiningDexHooks LqueueSave. Agora handler responde + pushSync na hora; save persiste sozinho depois. savePlayer direto (autosave loop/PlayerRemoving/ProcessReceipt) continua SÍNCRONO (crítico). Aplicado via .Source, boot limpo. Padrão pra qualquer ação que pareça lenta: nunca await DataStore antes de responder ao client. - Per-player ore nodes (2026-06-14) — fairness fix: user concern "auto-mine + upgraded pickaxe makes game unviable for others" = a maxed auto-miner camping a cluster kept shared ores perpetually broken, starving others. FIX: mining is now PER-PLAYER. Server NEVER touches ore.Transparency/CanCollide/HP attr during mining (node is static). Per-actor state table
oreState[actorKey][ore]={hp,cd}(weak keys both levels; actorKey=Player or bot Model; cd=GetServerTimeNow expiry). New remoteOreBreak(server→miner only): respawnSec>0 = break (client hides node+OreDeco+PointLight locally, spawns +N/burst/sound, restores after RESPAWN_TIME), respawnSec==0 = partial hit dim.StarterPlayerScripts.OreVisualClient(new) = per-player visual layer + miner-only FX (breakFx/floatingtext/sound moved client-side so others don't see phantom breaks). Ores now CanCollide=false ALWAYS (walk-through;makeOrePassableboot pass + DescendantAdded watcher; fixes the stand-on-ore-fall edge too), CanQuery=true. nearestOre skips per-player cooldown._G.MiningBotCanMine(bot,ore)new hook for BotService re-pick (HP no longer global). Event vein (IsEventVein) stays SHARED raid-boss (early-return branch above per-player logic in tryMine + MiningBotMine). Regen wrapper clears oreState. INDEPENDENTLY VERIFIED: client mines ore → client transp 1.0 (hidden for me) BUT server global transp 0.10/HP 3/intact (proves per-player). Client-side property changes don't replicate = the per-player mechanism. setOreDecoVisible now dead code (harmless). MINOR remaining: AutoMineFX rays still FireAllClients (others see your auto-mine rays hitting nodes full for them — cosmetic, one-liner to FireClient if wanted). REMINDER: Studio edits are in-memory — Save/publish the place to persist.