MelonDisrupt Posted May 16 Posted May 16 Patch Notes - 3rd May to 16th May 2026 Two solid weeks of work from the dev team. Big refactor under the hood, a new drug economy on top, and a long list of fixes scattered through almost every system. Credits per section below. Core engine + tooling Developer: @java TypeORM migration. Around 140 manager files moved off raw SQL onto TypeORM repositories and the query builder. One AppDataSource, automatic snake_case mapping, migrations table now owns schema changes. Command system rewrite. All new commands use defineCommand in systems/<domain>/commands/<name>.ts, registered via static readonly commands on the manager class. Typed args, guards, cooldowns, automatic usage hints, dev-mode-only gating. Vue overlay framework. Vue 3 + Tailwind v4 overlay replaces the old per-feature CEF browsers. Centralised CursorManager with key-based refcount swept across 145 files. Strict ipc layer with six directional event enums to keep server, client, and overlay talking through typed strings. Chat moved fully to Vue with 1:1 visual parity to the legacy chat plus FontAwesome Pro 6.4 icons and scoped SCSS. Server-side boot initialisation now waits for every system to be ready before processing events. Boot-time DDL stripped from manager initialisers (DB and migrations own schema now). Dockerised the application with deployment configuration. Refactor moved event handlers out of index.ts into their owning managers; index.ts is now bootstrap-only. Drug system (new) Developer: @MelonDisrupt A full player-driven drug economy. No NPC dealers, no auto-spawn customers. Every gram is produced and sold by a real character. Cannabis lifecycle Plant a strain seed in a grow setup and harvest wet buds. /trimweed runs a leaf-snip minigame. /dryweed hangs trimmed buds on a drying rack. Ready in ~30 minutes, over-dried past 90. /curejar seals dried weed in a mason jar; 2 hours unlocks premium tier. /presskief sifts trim into kief; /presshash compresses it. /makebutter for cannabis butter, /bakeedible for brownies. Quality propagates through every stage. Bad inputs cap the ceiling. Lab pipelines Eight commands: /cookcocaine /cookmeth /cookheroin /cookmdma /cooklsd /cookfentanyl /cookdmt /cookcrack. Data-driven engine walks per-drug recipes from the catalog. Each stage runs a minigame and produces an intermediate item. Run the same command repeatedly to advance through stages. 11 new precursor + intermediate items (cocaine_base, heroin_base, ergotamine, lsd_liquid, lsd_blotter, fentanyl_raw, fentanyl_packaged, mimosa_bark, dmt_extract, dmt_crude, dmt_crystal). Mushrooms /sterilizejar pressure-cooks a grain jar. /inoculate injects a spore syringe. /checkcake promotes the substrate after a 1-hour colonisation. /mistcake keeps humidity up; debounced 5 minutes. /harvestflush pulls a flush every 3 hours, up to 3 per cake. /drymushrooms is a passive 30-minute dry. Davis Head Shop Old Hydroponics shop renamed and rebuilt as a Vue panel. Two tabs: Cultivation Supplies (seeds, grow gear, drying racks, cure jars, scales, baggies) and Head Shop (mushroom kit, reagent kits, fentanyl test strips). Legal notice banner on the Head Shop tab. Walk up to the marker and press E. Addiction, withdrawal, overdose Every dose stamps the drug_addictions row: tolerance up, total uses up, lastUse refreshed. Withdrawal severity climbs the longer you go without a dose. Visual timecycle + HP regen tax. Overdose math: effective dose against lethalDoseBaseline × (1 + tolerance / 50). Triggers the existing INJURED bleed-out state. /naloxone <id> revives opioid OD victims within 5 minutes. 3m proximity gate. /detox at Pillbox Hill Medical Center clears every addiction record for $1,500. Weighing, bagging, cutting, selling /weigh reads exact grams and quality off a bag. Needs a digital scale. /bag splits a parent bag into a smaller baggie (small / medium / large = 1g / 7g / 28g). /testdrug burns a Marquis kit, Mecke kit, or fentanyl strip. Reveals quality and adulterants. /cut mixes a cutting agent into a drug bag, bumps weight without quality. /sell <player> <drug> <grams> <price> hand-to-hand sale, 3m proximity, atomic cash transfer. /relationships shows your last 20 trade partners. Private to you. New drug_p2p_sales table backs the reputation log. Vehicles + ELS + animations Developer: @FatCatTuxedo New ELS system (client + server). Replaces the old one. Vehicle engine sync and light sync re-coded. Vehicle doors sync migrated to the new class. Engine behaviour fixed on entry and exit. New animation system, including /crun in dev mode. Anim class converted to the new coding standards. Server permission fix for /setfaction and /setrank. Phone rebuild Developer: @MelonDisrupt Halo OS-style redesign in two phases. Every app wired through to the new shell. Hand-attached phone prop while in use. Tuned position, rotation, and bone attachment. Holding-phone pose triggers when open. F3 keeps the phone open instead of cancelling. Clock locked to UK time (Europe/London). Rebound default hotkey to M. Optional Windows desktop notifications for /pm and messenger DMs when the GTA window is alt-tabbed. Toggle in /settings → Chat → Accessibility. Property Developer: @MelonDisrupt /propertyadmin redesigned to match /amotd visual language. Streaming payload for large lists, instant re-render after every mutation. Interior picker per row (filtered by tier and search). Re-list button on owned rows with optional refund to the previous owner. Duplicate address rejection on create. Soft-delete with 30-day restore in trash tab. On-duty admins can lock or unlock any property via /aduty. Property creator UI rebuilt as a makeup-style tabbed panel with 29 new interior shells and typed natives. Entry/exit prompts now use the shared bottom prompt-hud. Lock + entry bug fixed after stale-cache scenarios. Combat, death, EMS Developer: @MelonDisrupt New three-state injury flow: INJURED → DEAD with bleed-out timer. GTA death cam skipped on player death. Custom edge vignette replaces the oppressive death FX stack. Timecycle cleared on revive; re-shot injured players execute properly. Live damage chat ping on every weapon hit, with attacker, weapon, damage taken, and remaining HP. /damages command lists your last 25 hits. Per-weapon damage multipliers calibrated against 100 HP: pistols ~1.6x, rifles ~2.0x, snipers 4x, shotguns ~2.5x, knives 1.4x. Gunshot audio pings within 50m, flushed every 4s. Down state hardened: corpses can no longer walk through their own ragdoll by holding W. /tackle command (closest player or /tackle <id>) and E-key sprint tackle when running. Both players ragdoll, attacker plays the takedown anim. /blindfold toggleable IC blindfold with fullscreen black render. Weapon draw protected against firing or fast-swapping mid-animation. Tab cycle plays an /ame so bystanders see the draw or holster. Chat Developers: @java & @MelonDisrupt Default font bigger, full opacity, shadows restored for readability. Reliable scroll-to-bottom; MESSAGE_LIMIT bumped to 2000. Vue overlay defaults to top-left and suppresses Tab focus cycling. Rich disconnect cards with FontAwesome icons per reason (left / kicked / banned / timeout). Admin staff feed: connect, login, disconnect, duty toggle broadcasts. /anotify toggles per-admin. Welcome card improved with server time + recording-notice band. Player IDs shown on chat lines, prefixed with the stable playerIdNumber (matches /admins and /id). Per-type colour overrides in /settings → Chat → Message Colours (IC speech, action, OOC, whisper). Native colour picker swapped for in-page palette + hex popover (CEF doesn't render the native one). Action chat (/me /amy /melow /melonger /do) detected and tagged for no-shadow purple rendering. IC speech (says / shouts / whispers / phone) detected client-side: pure white, semi-bold, full opacity even when the chatOpacity slider dims everything. /b OOC lines get a thin 1px text outline so the slate-grey reads cleanly. ASCII emoticons render as unicode emoji on display (<3, :), :(, ;D, etc.). Only OOC, PM, and system lines get the swap; IC stays literal. /pm visual polish with direction arrows (← incoming, → outgoing) and brighter name/id colours. /w <id> <message> directed 3m whisper with /ame for bystanders. Suggestions popup floats above the input instead of pushing it down. Chat hint and built-in chat hide reliably at init. Settings sync wired: fade toggle, text outline, high-contrast, reduce motion, dyslexia-friendly, emoticons toggle, timestamps. Accessibility section added to /settings Chat tab. Settings + accessibility Developer: @MelonDisrupt 4K / 5K / 6K / 8K-friendly scale ranges. Bumped slider max for chat font, HUD scale, nametag size, /ame text size, UI scale, notification scale, phone scale. Display Preset dropdown in /settings → General: Auto-detect, 1080p, 1440p, 4K, 5K, 6K, 8K, Custom. Bulk-applies tuned values. UI Sounds toggle in /settings → Chat → Accessibility. Show My Own Nametag toggle (default on). Show Player IDs toggle (default on). Chat Text Outline toggle (default on). Hair, wardrobe, tattoos Developer: @MelonDisrupt Hair slots cap raised from 10 to 60 saved styles per character. Wardrobe panel becomes scrollable with an "X / 60" header. /hair <slot> applies a saved style anywhere in the world. /hair list enumerates them. /hairstyle temporary restyling without touching the saved appearance. 12 presets. State in-memory, reverts on relog. /hairtattoo scalp overlays sold at the barber. Star, crossed lines, lightning bolt, tribal, skull detail, and 7 more. Priced $150 to $250. Hair colour palette now queried from the engine directly, so wardrobe swatches match what gets rendered. Freemode undershirt baseline re-applied after any hair-component write, so the default bra/sports-top stops bleeding through on female peds. First-outfit setup on character creation: wardrobe opens in a one-shot free creation mode with 30-second dwell timer. first_outfit_done flag stops second freebies. /shirt and /undershirt sync torso arms to the bare-arms variant when both upper layers are off. Tattoos use typed natives, re-apply after component changes, propagate to remote peds. Survives /nude, outfit loads, and wardrobe changes. /nude gated to private dimensions only (not main world). Wardrobe: hiddenZones cleared on outfit purchase or load so saved hats stop disappearing. Custom CEF dialogs replace native window.prompt / confirm / alert across propertyadmin, motd, wardrobe, faction management (CEF doesn't render natives — they froze the panels). Admin tools Developer: @MelonDisrupt /giveweapon ported to a Vue overlay panel with weapon, ammo, attachment, and audit tabs. /factionmanagement rebuilt to match /propertyadmin style. Sidebar faction list, Details / Ranks / Members tabs, inline modals for confirm and prompt flows, snapshot push after every mutation. Inline rank-picker modal replaces per-row dropdowns. Same picker drives Add Member. Permission gate: faction_management department flag OR admin level 4+. /forcereconnect <id|name> [reason] for admin level 1+. Drops with a chat line, kicks 1.5s later. /givemoney now allowed for admin 5+ OR the economy_manager department. Each give writes a price_audit_log row. /spectate camera fixed (was spinning due to two render handlers fighting for the same cam). Spectator / vanish actually hides the local ped now (the previous flag was setting an unrelated config flag). /amotd login MOTDs with BBCode and per-character ack. /aduty defence-in-depth gate and audit log for admin teleports. Rate-limited. /getup heal exempted from the cooldown bypass it was failing. Pets Developer: @MelonDisrupt Pet panel rewritten to /settings-style sidebar with Overview, Tricks, Wardrobe, and Stats tabs. /pets opens the panel. New columns: hunger, happiness, health, energy, xp, level, bond, personality, rarity, collar, walks, tricks, favorite. 5-minute global SQL decay tick runs against offline pets too. pet:action router handles feed, play, pat, walk, train, spawn, despawn with stat deltas and /me chat. Pet shop rebuilt with rarity, personality, descriptions, inline adopt card, owned-pets tab. Follow loop re-issues taskFollowToOffsetOf when the pet falls more than 2m behind. 4 Hz tick, walk/jog/sprint by distance. Auto-/me from pets broadcasts as the pet ("* Max wags its tail") instead of through the owner. Pets switched to typed Ped instance methods so they actually follow (the old globals didn't exist in the type defs). Trading cards Developer: @MelonDisrupt First Year (2026) Pack with 400 cards and holographic UI. Full design-pack visuals: frame, art-bg, gloss, holo, shimmer, mouse tilt, legendary burst, wax-seal pack. 10h playtime gate dropped on cash purchases. First pack auto-opens on purchase. Inactive series hidden in the store. /collection panel with sort and cash-only export. Bag double-counting fixed (exported cards filtered out of the collection grid). Card export refuses on inventory full and only flips is_exported=1 if addItem succeeded. Using a trading_card from inventory now redeems it back into the collection. First-press E drop on the card store fixed (was throttled to 500ms). Reports Developer: @MelonDisrupt /reports rebuilt as a settings-style threaded panel. Quick /report <msg> and /areply commands. Chat banners and off-duty flood pings. Refresh open admin panels on new submission. Off-duty admins included. Inline resolve modal, chat-delivery feedback, arg coercion fixed. Smoking, props, ambience Developer: @MelonDisrupt Smoking system: looping animation, hand-attached cigarette, visible smoke, toggle-off. 247store UI made bigger with a smoking section, multi-use packs, more snacks. Radio muffling logic dropped the isWindowIntact gate (false-positive on coupes). 3D audio is unmuffled when any window is down or broken. /domelight and /vwindow toggles, synced via vehicle vars and broadcast through player.call. Trash cleanup expanded from ~20 to ~80 binbag / cardboard / pizza box / cup / bottle / cigarette pack / tyre pile / litter models. Scan radius bumped 80 → 120m. Per-tick per-hash cap raised. /cleantrash for on-demand admin sweep. Spraytag occlusion raycast, scale cap, lazy redraw, typed natives. Speed limiter caps by blocking the accelerator instead of forcing speed. Shipping + jobs Developer: @MelonDisrupt Shipping manual box loading and unloading, better blips, HUD. /jobs settings-style hub with Trucking + Bus Driver tabs (active job, lifetime stats, recent history) backed by JobsHubManager. Website, docs, infrastructure Developer: @MelonDisrupt New /docs section with Notion-style sidebar and .md content. 9 starter pages + 5 added (glossary, ATMs detail, joining a faction, inventory & items, death / injuries / EMS). Docs visual overhaul: hero card per page, index card-grid with category icons, sidebar icons + scroll-spy TOC, callout post-processor (NOTE / TIP / IMPORTANT / WARNING / CAUTION). Homepage pulls real stats from /api/public/stats. Download points to the correct game server. Developer forum decommissioned. Tip text points to forum.roleplayproject.net. News page removed from website nav; legacy WelcomeFest music emitter deleted. UCP login API base fixed; register page removed (in-game only). Legacy UCP HTML scanned into the CSS bundle. Security audit Developer: @MelonDisrupt Critical + high + medium severity fixes from the audit pass: /kick and /admins authorization corrected. propertyadmin SQL injection vector closed with a whitelist. Metrics endpoint locked down to 127.0.0.1 with env token, SQL action dropped. 9 secrets hoisted to .env (Revolut, Intercom, 6 Discord webhooks, metrics token). CayoPerico TOCTOU debit closed. Vehicle health monotonic guard. Admin teleport rate-limit and audit log. EnergyManager IN clause parameterised. /aduty defence-in-depth gate. Registration verification fixed (was "Data too long for column code" — verifyCode wrote a 48-char token into a VARCHAR(6) column). Smaller fixes worth knowing Developer: @MelonDisrupt /pay and /pm now resolve player IDs by displayed playerIdNumber instead of RAGEMP's runtime slot. /factionmanagement invite same fix. Gym prop spam crash fixed (was minting a new prop entity 60×/sec when attach silently threw). Indicator off-state stuck bug fixed. /vol 0 no longer falls back to 50%. /vehicles spawn race-double fixed. Cards: first-press E drop fixed by recomputing distance on demand. Carlot uses live /economy prices instead of frozen catalogue. Spawn: ped tasks cleared and level rotation set server-side. Registration code timestamp uses DB-side NOW() / DATE_ADD so codes don't appear pre-expired across timezones. Pollable browser init helper replaces single-shot setTimeout in 18 init sites. Eliminates blank UIs on slow CEF loads. 11 "Press X to do Y" prompts converted from scaledText to the shared bottom prompt-hud. 142 raw mp.game.invoke 0xHASH calls converted to typed natives across the client. Plus 91 in rounds 2 and 3, plus 38 more in round 4. Trading-card export refuses on full inventory and only marks exported on success. /cleantrash for on-demand admin sweep. Phone clock locked to UK time. Server perms Developer: @FatCatTuxedo Permission fix for /setfaction and /setrank. Two follow-up perm passes. 1
Recommended Posts