K
Kodama Vault
knowledge hub
Vault
HomeBoardMap of ContentChatConversasAuditoria
Agentes
AgentsIssuesTerminalPreviews
Sistema
MCPSetup MCPSettings
Brain
Global agent instructions
Análise custos migração — evitar senha no payloadLevantamento fluxo registro + duplicados StripeRelatório segurança + pentes finos (Cláudio)Revisão security concerns e race conditionsMagic link / esqueceu senha via SupabaseCorrigir erros pós-upgrade TypeScriptTestar PRs do agente Vault para mergeAnálise de 3 issues para iniciarErro no terminal do VSCodePR #173 — aguardando aprovação do LeoTestar fluxo ponta a ponta — criação de clients no StripePR #172 — testar e subir correção de funções deprecatedPitch de vendas SaaS — agendar call de conversãoOrganizar issues e bugs rápidos para a semanaMerge PR cadastro-novo — funcionalidades e correçõesCorrigir bugs PR #173 e #172 — image domainsPR mesosóico — página de acesso mobile + segurança OTPRefatoração de códigos — PR #202Ajustes em PRs abertos de ontemEstudo de jornada de compra e técnicas de fechamentoDefinir preço e entregável do produtoProspecção de reuniões para esta semanaAgente anti AI slop — centralização de conhecimento ConnfitPR #179 — resolver conflitos e erros de teste CLIAlinhamento de preços e usos da ConffitFix adicional para PR #183 — perfil do usuárioCorrigir estilização da Connfit para identidade visualSubir modificações no copy da ConnfitCriação de 4 campanhas no Meta AdsRevisão de PRs do GilinesExploração do Roblox EditorRelatório João — devolutiva TikTok ShopReunião presencial Zassi Uniformes — diagnóstico automaçõesCriar repositório de diagnósticos e relatórios de entrevistasDiagnóstico da ZassiGeração de relatórios para reuniões de fechamentoProposta Zassi — apresentação amanhãProspecção — Clínica Odontológica Dr. But
VPS Hermes — acesso e estrutura
Always Commit Push DeployHermes Voice GeminiHermes VPSKodama Prospects TrackerMEMORYObsidian VaultRoblox Mining Sim
OpenSpec -- Spec-Driven Development no VaultPlano de Teste — OpenSpec Vault Persistence
CaumzitoNyxzZanini
Claude Code — Setup MCP VaultClaude Desktop — Setup MCP Vault (remote)VS Code + Copilot — Setup MCP Vault
Skill — Carousel Designer (Paper Style)
Standup 2026-05-14Standup 2026-05-15Standup 2026-05-16Standup 2026-05-17Standup 2026-05-18Standup 2026-05-19Standup 2026-05-20Standup 2026-05-21Standup 2026-05-22Standup 2026-05-25Standup 2026-05-26Standup 2026-05-27Standup 2026-05-28Standup 2026-05-29Standup 2026-06-01Standup 2026-06-02Standup 2026-06-03Standup 2026-06-05Standup 2026-06-11Standup 2026-06-15Standup 2026-06-16Standup 2026-06-17Standups
MOCWelcome
v0.3
K
Kodama Vault
brain / memory

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_studio then 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), OreZone grid of 54 ore blocks (3 HP each).
    • ReplicatedStorage.Remotes — RemoteEvents MineBlock, Notify.
    • StarterPack.Pickaxe (Tool + LocalScript PickaxeClient: 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.Zones Zone2/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 sets player:SetAttribute("CarryColor", ore.Color) on break). Pickaxe swing animates Tool.Grip lerp (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.ShopGui LocalScript — dark premium panel (toggle 🛒 LOJA), upgrades (cash: pickaxe/backpack/rebirth) + Robux rows (gamepasses+CashPack), live affordability greying. Server RemoteEvent Shop routes 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 spawnDrops after normal chunks). Rare drop = launchChunk(...isRare=true) → applyRareGlow (gold Neon + PointLight + sparkle + Highlight + "RARO" billboard), physics fall + magnet like normal. On collect (collectChunk isRare branch): d.rareCarry++, d.rareValue += val, Raros leaderstat++, sets player attribute CarryingRare=true, fires Rare RemoteEvent → 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.DebugGui LocalScript = 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; server FireAllClients(player.DisplayName, rareVal) on rare drop (in spawnDrops + debug forceRareDrop). StarterGui.AnnounceGui LocalScript 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_luau Edit-datamodel fails with "Edit datamodel is not available in Play mode"; just call start_stop_play(false) and retry. Also screen_capture has multi-second latency — it misses transient/animated GUI (toasts, banners that show <4s); verify those via reading .Visible/.Text in execute_luau instead, 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.Bases folder 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): assignBase on PlayerAdded → claims first free base, sets player.RespawnLocation = base.Spawn, sign "Base de {DisplayName}"; teleportToBase on CharacterAdded; freeBase on PlayerRemoving (sign → "Base Livre"). Each base SellPad hooked to onSell (sells for the toucher = their own ore). Old global Prototype.Spawn disabled (Enabled=false), old global Prototype.SellPad removed. 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: Monsters 5 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.GolemBuilder ModuleScript = 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 as monsters:[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.CabinVisualClient renders 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.Cycle peace=240/warn=15/pvp=120; Config.PVP hitMaxDist=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); remote Phase fires only on transitions. PVP combat: pickaxe swing with no ore in range during pvp → HitPlayer remote → 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 sized needRun = 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 ores Bonus=true OreValue×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 in Workspace.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-builder for 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 attacker Kills+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 by ServerScriptService.LeaderboardServer from _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.MiningBotMine reusing tryMine, bag cap 10)→SELL→COMBAT (pvp: hunts nearest player/bot ≤60, hits via _G.MiningBotHit through actor-agnostic applyHitCore refactor). 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: _G not 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 layout generateOnce(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.KillLeaderboard plaza board REMOVED per user. New RemoteEvent Killboard; LeaderboardServer rewritten 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: remotes StolenAlert/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 guard IsEventVein in _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) + fires AutoMineFX RemoteEvent 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 as ReplicatedStorage.SellBotModel. On purchase/grant → _G.MiningActivateSellBot: spawns cart in Workspace.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) via sellCargo(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 int de tier, vira objeto rico). Design completo via workflow ultracode (5 designers + 3 críticos) salvo no vault brain/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), GolemBuilder reescrito (build(golem) por species+rarity+float+finish, cap 4 PointLights/base, handle :Destroy() anti-leak/zombie), MiningServer (migração saveVersion 1→2 lazy idempotente monsters[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: mutationMult real (produto), campo origin (mine/breed/legacy), resolvers PUROS RNG-injetado (resolveChildRarity/rarityUpChance/resolveChildFloat/mutChance/findRecipe/buildParentSnapshot). BreedingService (NOVO, server-auth): doBreed valida 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/MiningBreedingHooks bridge. 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á prefixa brain/ (passar path relativo a brain/, ex projects/... não brain/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: namespace DexD (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 (rollDropRarityLucky best-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 (casou return Config dentro 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: vault brain/projects/chungchungus/golem-system-design.md.
  • BreedingGui bug fix (2026-06-15) — duplicação no toggle + seleção morta: StarterGui.BreedingGui.BreedingClient — renderWallet/renderBreeds limpavam children com ch:IsA("Frame"), MAS as linhas da carteira são TextButton (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 por ch:IsA("GuiObject") (pega TextButton+Frame, preserva UIListLayout). Servidor snapshotFor/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_edit reportou "Modified ... 1 edits applied" mas NÃO aplicou (Source real inalterado) — verifiquei via execute_luau lendo .Source e apliquei o fix setando sc.Source = s:gsub(...) direto (confiável). Sempre verificar edição via .Source, não confiar no retorno do multi_edit. (2) script_grep em Play mode só vê scripts do CLIENT (ServerScriptService não replica) — pra grepar server, ir pro Edit mode. (3) script_grep trata query como padrão Luau (parênteses = metacaracteres). (4) VirtualInputManager:SendMouseButtonEvent falha 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) exigia state==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: snapshotFor breedable = (state==WALLET or state==MOUNTED) and not busy + gate do doBreed aceita WALLET ou MOUNTED. Aplicado via .Source gsub (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) chamavam H.save(player) (=savePlayer→safeSave→DataStore UpdateAsync, 0.2s+retry; em Studio API-off bloqueia mais) ANTES do pushSync → UI só atualizava depois do save. FIX em MiningServer: novo local function queueSave(player) (save em background, debounced 0.15s, coalesce bursts, guard data[player]) inserido após savePlayer; os 3 hooks save = function(player) savePlayer(player) end (MiningBreedingHooks/MiningMarketHooks/MiningDexHooks L1624/1665/1993) trocados pra queueSave. 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 remote OreBreak (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; makeOrePassable boot 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.
notas relacionadas
carregando…