# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [9.2.1] - 2026-02-08 ### Added - Log analyzer tool suite (`tools/loganalyzer/`) for filtering, error analysis, connection tracking, and real-time monitoring of server logs - User check CLI tool (`tools/usercheck/`) for querying connected users and server status - File-based server logging enabled by default with log rotation - Docker configuration backported from main for local testing and deployment - Release automation CI/CD workflow - CI pipeline with gofmt and golangci-lint checks - Database connection pool configuration options - `RealClientMode` infrastructure for multi-version client support - Database schemas directory from upstream ### Changed - Upgraded Go version requirement from 1.19 to 1.25 - Renamed `config.json` to `config.example.json` as template file - Distribution system refactored to use `distribution_items` table instead of data blob - Docker setup improved with smaller image size and more robust init script - Renamed `GuildMealDuration` to `ClanMealDuration` to match upstream naming - Replaced panic calls with proper error handling throughout the codebase ### Fixed - Personal poogie (goocoo) system completely broken due to database table/column name mismatch; backported correct implementation from main - `TimeWeekStart` returning next Monday instead of last Monday on Sundays, breaking all weekly reset logic - Infinite loop in gacha `getRandomEntries` when no valid entries available - Guild poogie outfit unlock using incorrect math.Pow calculation instead of bitmask - Guild `GetGuildManageRight` nil pointer condition (wrong `&&` vs `||`) - Guild `InfoGuild` writing GR field unconditionally, crashing pre-G10 clients - Cafe `PointCost` read as wrong type for G1-G5.2 clients - Entrance server clan member limit hardcoded instead of reading from config - Quest data compatibility for Season 6.0 clients - Stage deadlock causing 60-second timeout when players change zones - Three race conditions in stage handlers causing nil pointer panics - Session race condition during player logout - Array out-of-bounds crash on clans with 0 members - Save error crashes on disconnect - `LoadDecoMyset` crash when players have more than 40 decoration presets - `WaitStageBinary` handler missing timeout, could hang indefinitely - Race condition in server broadcast causing panics ### Security - Bumped golang.org/x/net from 0.33.0 to 0.38.0 - Bumped golang.org/x/crypto from 0.31.0 to 0.35.0 ### Testing - Expanded overall test coverage significantly across all packages - Sign server coverage increased from 1.5% to 45.2% - Channel server coverage increased from ~7% to 25% - Pascal string coverage at 100% - Added comprehensive tests for guild, gacha, cafe, goocoo packet parsing, and core network layer ## [9.2.0] - 2023-04-01 ### Added in 9.2.0 - Gacha system with box gacha and stepup gacha support - Multiple login notices support - Daily quest allowance configuration - Gameplay options system - Support for stepping stone gacha rewards - Guild semaphore locking mechanism - Feature weapon schema and generation system - Gacha reward tracking and fulfillment - Koban my mission exchange for gacha ### Changed in 9.2.0 - Reworked logging code and syntax - Reworked broadcast functions - Reworked netcafe course activation - Reworked command responses for JP chat - Refactored guild message board code - Separated out gacha function code - Rearranged gacha functions - Updated golang dependencies - Made various handlers non-fatal errors - Moved various packet handlers - Moved caravan event handlers - Enhanced feature weapon RNG ### Fixed in 9.2.0 - Mail item workaround removed (replaced with proper implementation) - Possible infinite loop in gacha rolls - Feature weapon RNG and generation - Feature weapon times and return expiry - Netcafe timestamp handling - Guild meal enumeration and timer - Guild message board enumerating too many posts - Gacha koban my mission exchange - Gacha rolling and reward handling - Gacha enumeration recommendation tag - Login boost creating hanging connections - Shop-db schema issues - Scout enumeration data - Missing primary key in schema - Time fixes and initialization - Concurrent stage map write issue - Nil savedata errors on logout - Patch schema inconsistencies - Edge cases in rights integer handling - Missing period in broadcast strings ### Removed in 9.2.0 - Unused database tables - Obsolete LauncherServer code - Unused code from gacha functionality - Mail item workaround (replaced with proper implementation) ### Security in 9.2.0 - Escaped database connection arguments ## [9.1.1] - 2022-11-10 ### Changed in 9.1.1 - Temporarily reverted versioning system - Fixed netcafe time reset behavior ## [9.1.0] - 2022-11-04 ### Added in 9.1.0 - Multi-language support system - Support for JP strings in broadcasts - Guild scout language support - Screenshot sharing support - New sign server implementation - Multi-language string mappings - Language-based chat command responses ### Changed in 9.1.0 - Rearranged configuration options - Converted token to library - Renamed sign server - Mapped language to server instead of session ### Fixed in 9.1.0 - Various packet responses ## [9.1.0-rc3] - 2022-11-02 ### Fixed in 9.1.0-rc3 - Prevented invalid bitfield issues ## [9.1.0-rc2] - 2022-10-28 ### Changed in 9.1.0-rc2 - Set default featured weapons to 1 ## [9.1.0-rc1] - 2022-10-24 ### Removed in 9.1.0-rc1 - Migrations directory ## [9.0.1] - 2022-08-04 ### Changed in 9.0.1 - Updated login notice ## [9.0.0] - 2022-08-03 ### Fixed in 9.0.0 - Fixed readlocked channels issue - Prevent rp logs being nil - Prevent applicants from receiving message board notifications ### Added in 9.0.0 - Implement guild semaphore locking - Support for more courses - Option to flag corruption attempted saves as deleted - Point limitations for currency --- ## Historical Context This changelog documents releases from v9.0.0 onwards. For a complete history of all changes, refer to the [git repository](https://github.com/Mezeporta/Erupe). The project follows semantic versioning and maintains tagged releases for stable versions. Development continues on the main branch with features merged from feature branches.