Skip to content

Latest commit

 

History

History
180 lines (142 loc) · 13.1 KB

File metadata and controls

180 lines (142 loc) · 13.1 KB

[2026-08-21] - Pet Loot & Pirate Charge Patch

  • Removed restrictive pet loot inventory slot checks in PetLootHandler.java and added explicit 1812001 (Item Pouch) and 1812000 (Meso Magnet) global equip verification.
  • Added Pirate Corkscrew Blow (5101004) charge duration bindings to the actual server-side damage calculation formula in CloseRangeDamageHandler.java.

[2026-08-21] - Trade & Storage Security Patch

  • Hardened MapleTrade.java with synchronized methods to prevent concurrent item duping.
  • Synchronized ItemMoveHandler.java packet execution to prevent inventory races.
  • Validated StorageHandler.java negative meso overflow autoban.
  • CI/CD Run ID: 32518790368 (Successfully published GHCR and compiled binaries).

[2026-08-21] - Live Verification

  • OriginalMS CI/CD workflow confirmed green (Run ID: 32515341744)
  • AuraTorrent CI/CD workflow confirmed green (Run ID: 32515049384)

[2026-08-20 - Platform handoff audit]

  • Confirm remote release workflow commit f108d1a completed successfully on GitHub.
  • Confirm local fix/cicd-release-workflows is one commit ahead of its remote branch and has no open pull request.
  • Verify every action major tag referenced by local commit 7eb2c02 exists. Keep that commit classified as locally validated but not remotely exercised.
  • Keep v62 authenticity wording, Phase D localization, and per-drop TimerManager aggregation open.

[2026-08-19]

  • Fix GitHub Actions workflows for GHCR publishing and binary compilation
  • Bump action versions to support Node 24 runtime

Changelog

All notable changes to BiosMS are documented in this file.

The format is based on Keep a Changelog.


[Unreleased] - Target: TBA

Fixed

  • CI: .github/workflows/release_and_packages.yml repaired. Both jobs were pinned to runs-on: ubuntu-22.04, a GitHub-hosted image that has been retired. A job pinned to a withdrawn label never gets a runner. Both now use ubuntu-latest; the compiler is still JDK 8 through setup-java, so the host image does not constrain the build.
  • CI: Two actions ran on the Node 16 action runtime, which current runners refuse to execute: actions/setup-java@v3 and softprops/action-gh-release@v1, now v4 and v2. The setup-java step sits inside "Compile Native Binaries & ZIP Drop-in", which is where the failure was reported.
  • CI: Removed the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 environment variable. The runner does not read it and it never had any effect; each action's runtime comes from its own action.yml. Bumping the actions is the real fix, and leaving a placebo invites the next reader to trust it.
  • CI: The GHCR job probed for a Dockerfile and set a flag gating every step below it. With no Dockerfile the job skipped everything and reported success, so a workflow named "Publish GitHub Container Package" could publish nothing and still go green. A missing Dockerfile is now an error.
  • CI: Added docker/setup-buildx-action before build-push-action, plus GHA layer caching. Runner images ship buildx, but depending on a preinstalled tool makes the job depend on image contents rather than on anything the workflow declares. build-push-action v5 to v6, actions/checkout v4 to v5.
  • CI: Tightened permissions. contents: write and packages: write had been granted to every job at the top level. The top level is now contents: read, the Maven job adds contents: write for the release upload, and the GHCR job adds packages: write.
  • CI: The ZIP step ended every copy with || true and zipped whatever survived. If the build layout ever changed, every copy would fail silently and the step would either ship an empty archive or die on zip's own "nothing to do" with no explanation. target/dist, target/lib, configs and scripts are now required and fail loudly with a ::error:: annotation; launch_*.sh stays optional and says so. mvn gained -B and -DskipTests, the latter because this repository has no src/test.
  • CI: Verified by parsing the workflow, running bash -n over all three shell blocks, and executing the packaging script against two layouts: missing build output exits 1 with the error annotation, and a complete layout populates release-pkg correctly. The zip call, the Maven build and the container build were NOT verified locally, because zip, mvn, java and docker are all absent from this workstation.

Added

  • docs/ORIGINALMS_GAP_ANALYSIS.md, a read-only v62 parity audit measured against the code rather than against the previous documents. No Java, script or WZ data was changed.

Changed

  • Root ORIGINALMS_GAP_ANALYSIS.md is now a pointer to the new document. It was stale: five of its six open items were already implemented, two of them carrying Critical and High severities while the fix sat in the file the document named. Section 1 of the new document records what each item resolved to, with the file and line.

Audit findings, no code changed

  • Phases A, B and C of ORIGINALMS_V62_PLAN.md measure as complete or substantially complete. Phase D, localization, is the critical path to Oct 25: 111 files still carry Portuguese, including live Java handlers, while the README records localization as complete.
  • Cygnus Knights (1000-1511) and Aran (2000-2112) are fully registered and are not GMS v62 content. Cygnus shipped in v75. The project cannot claim authentic v62 parity and carry two post-v62 class lines without saying which it means. Owner decision, recorded not reverted.
  • One genuine open defect: MapleMap.java schedules a separate TimerManager runnable per dropped item at lines 1065, 1100, 1153, 1163 and 1167.
  • README overstates three rows: localization, and by implication job-class authenticity. Gachapon at 12 locations and the Apache MINA network engine both verified accurate.
  • classic is fully merged and safe to delete. OdinMS holds 2 unmerged commits, audit/v62-feature-parity holds 1 documentation-only commit. Six working copies of this repository exist on disk; OriginalMS_Backup has 1361 dirty entries.

[3.2.0-v62] - 2026-08-08

Added

  • docs/v62_FEATURE_AUDIT_REPORT.md documenting the v62 feature parity audit, including Cygnus Knights, Aran, boss gates, and party quests.
  • Authentic GMS v62 Gachapon tables embedded within NPC logic scripts.

Fixed

  • Localized English dialogue strings in Party Quest NPC scripts that were originally in Portuguese:
    • 9020000.js (Kerning PQ Entry - Clott)
    • 2040034.js (Ludibrium PQ Entry - Red Sign)
    • 2012001.js (Orbis Boat Loader)
    • 2013000.js (Orbis PQ Entry - Wonky The Fairy)
    • GuildQuest.js (Guild PQ Event Script)

[3.1.0-v62] - 2026-07-24

Fixed

  • Trade Duplication Exploit - Patched a race condition in MapleTrade.completeTrade() that allowed item duplication via concurrent confirm packets.
  • Meso Storage DoS Exploit - Patched StorageHandler bounds checking to correctly handle Integer.MIN_VALUE rollovers, replacing hard crashes with strict Autoban routines.
  • Inventory Drop Casting - Fixed a synchronization gap in ItemMoveHandler preventing macro packet drop-casting duplication.
  • Pet Loot Restrictions - Overhauled PetLootHandler to accurately recognize the Item Pouch (1812001) cash shop item and allow pets to loot items dropped by the owner.
  • Pirate Corkscrew Blow Calculation - Integrated charge packet decoding into AbstractDealDamageHandler to dynamically modify the damage threshold for fully-charged Corkscrew Blow attacks, preventing false-positive Autobans.
  • Horntail Concurrency Crash - Patched HontalePQ.js to eliminate ConcurrentModificationException thread crashes triggered when a PQ instance disposed itself inside a global iterator loop.

Added

  • Massive Scripting Phase - Initialized phased scripting architecture ledger for missing v62 JavaScript assets.
  • Track 1: Static World NPCs - Generated 15 NPC scripts for Nautilus Harbor using Rhinoscript/JavaScript, including cm.openShop() integration.
  • Track 2: Pirate Job Advancements - Programmed the complete 1st, 2nd, 3rd, and 4th Pirate job advancement sequence within 1090000.js (Kyrin) utilizing Fast-Track instance bypassing.
  • Track 3: Monster Carnival PQ - Programmed the JavaScript orchestration tier for CPQ, including MonsterCarnivalPQ.js event lifecycle and 2042000.js (Spiegelmann) party registration logic.

[1.1.0] - 2023-12-03

Added

  • CPQ2 (Monster Carnival 2) - MonsterCarnivalHandler now detects Magatia map range (980031xxx) and routes to the authentic CPQ2 mob pool (Reinforced Iron Mutae, Hector, Security Camera, Stereo Mist, Soul Teddy, Homunculus, Void Mage, Reinforced Iron Mutae Chief, Roid, King Block Golem). CPQ1 (Ludibrium) mob pool unchanged.
  • Crimsonwood Keep Party Quest (CWKPQ) - New scripts/event/CrimsonwoodPQ.js event for the expedition-based party quest in Crimsonwood Keep maps (610020xxx). Added CWKPQ(5) to MapleSquadType enum.
  • Mu Lung Dojo - New scripts/event/MuLungDojo.js 36-floor solo/party ranking event. Floor progression handled in-event; best floor scores persist in the new dojorecord DB table via EventInstanceManager.saveDojoRecord().
  • Maker Skill handler (MakerSkillHandler.java) - Processes the Maker Skill interface packet (recv opcode 0x9B) for Cygnus Knights and Aran Maker skills (10001007, 20001007). Looks up recipes from maker_recipe and maker_recipe_ingredients tables, validates materials, deducts mesos, and creates the crafted item. Starter recipes included for arrows, throwing stars, and bullets.
  • Party Search handlers (PartySearchHandler.java) - Wires PARTY_SEARCH_REGISTER (0xBD) and PARTY_SEARCH_START (0xBF) recv opcodes that were previously defined in recvops.properties but never handled. Stores LFP state on MapleCharacter (partySearch, partySearchCategory).
  • Steal skill item drop (skill 4201004) - Bandit's Steal now has a chance (driven by the skill's effect chance stat) to drop one random item from a monster's drop table. Each monster can only be stolen from once (isStolenFrom flag on MapleMonster). Implemented in AbstractDealDamageHandler.
  • dojorecord DB table - Tracks character best Mu Lung Dojo floor and timestamp. Uses ON DUPLICATE KEY UPDATE to only record improvements.
  • maker_recipe and maker_recipe_ingredients DB tables - Stores Maker Skill crafting recipes. Seeds basic v62 ammunition recipes on first import.
  • OmegaPQ activated - Added OmegaPQ to world.events active list (script OmegaPQ.js already existed but was dormant).
  • EventInstanceManager.saveDojoRecord() - New Java method callable from event scripts to write dojo ranking records to the DB without requiring direct DB access from JavaScript.

Changed

  • configs/world0/world.properties - Removed BossHunterPQ from the active event list (script file does not exist; the equivalent BossQuest.js was already active). Added OmegaPQ, CrimsonwoodPQ, MuLungDojo.

Fixed

  • BossHunterPQ naming bug - BossHunterPQ was listed in world.events but no BossHunterPQ.js script exists. The server was silently failing to load this event on every startup. Removed the erroneous entry; BossQuest (the correct script) remains active.
  • PARTY_SEARCH opcodes unhandled - PARTY_SEARCH_REGISTER = 0xBD and PARTY_SEARCH_START = 0xBF were present in recvops.properties and mapped in the enum but had no registered handler, causing those packets to be silently dropped. Now handled.

[1.0.0] - 2022-10-24

Added

  • Full translation of all server notices, log messages, and in-game player command output from Portuguese to English.
  • Restored missing packet handler registrations and realigned recv/send opcode enum values to match client.
  • Maven build configuration (pom.xml), Docker Compose stack (docker-compose.yml), and multi-stage Dockerfile (Maven build → JRE slim runtime).
  • Server shell launch scripts (launch_world.sh, launch_login.sh, launch_channel.sh) and logging configuration.
  • JavaScript scripting engine for NPCs, portals, quests, reactors, and events using Rhino/Nashorn with mozilla_compat.js shim.

Foundation (2020–2022)

  • Initial port of the OdinMS v62 codebase to a clean, English-language Java 8 + Maven project.
  • Apache MINA 2.0.9 networking with full login, world, and channel server trio.
  • Complete character system: 52 job classes (Explorer, Cygnus Knights, Aran), all skill trees, buffs, debuffs, combos, energy charge.
  • Party quests: HenesysPQ, KerningPQ, LudiPQ, LudiMazePQ, OrbisPQ, AriantPQ×3, AmoriaPQ, AquariumPQ, PiratePQ, HontalePQ, ZakumPQ, GuildQuest, ElnathPQ.
  • Boss systems: Zakum (squad + altar), Horntail (squad + full fight).
  • CPQ1 (Monster Carnival, Ludibrium) with mob spawn, debuffs, and guardian mechanics.
  • Social systems: guilds, alliances, buddy list, messenger, marriages, spouse chat.
  • Economy: player shops, hired merchants, MTS, Duey delivery, storage.
  • Misc: Pets (auto-pot, loot, chat, food), Mounts, VIP teleport rocks, Maple TV, Silver Box.
  • World rankings computed every 30 minutes by RankingWorker (overall + per-job-class).
  • MySQL 5.7 schema with 76 tables; Tomcat JDBC connection pool.