Commit Graph

291 Commits

Author SHA1 Message Date
duckietm 7786ba8e8f 🆙 Chatlog logging 2026-04-08 08:05:11 +02:00
duckietm 6f2766547b 🆙 No debug logging for MariaDB 2026-04-07 16:14:40 +02:00
duckietm bcdb1f1812 🆙 Bumb to 4.1.1 2026-04-07 15:52:10 +02:00
duckietm 9bde0b72d0 🔈 added DB settings to config.ini 2026-04-07 15:49:23 +02:00
duckietm 5e3a43a62b Stage 2 of DB rebuild 2026-04-07 15:02:45 +02:00
duckietm 46230d0709 🆙 Stage 1 of DB rebuild 2026-04-07 13:53:21 +02:00
duckietm 75b73df8dc 🆙 Make Emulator Full MariaDB
- Swap mysql-connector-j → mariadb-java-client in pom.xml
- Changed JDBC URL to jdbc:mariadb://
Add all the HikariCP properties above (configurable via config.ini with sensible defaults)
- Fix the double-close in Database.dispose()
2026-04-07 11:00:04 +02:00
duckietm 0634c3d600 🆙 Small update to the script 2026-04-07 10:21:15 +02:00
duckietm e9efb23518 🆙 Latest Compiled version 2026-04-07 09:21:50 +02:00
duckietm 5e586d1093 🆙 Fix in habbomanager
The getCloneAccounts query had an operator-precedence bug:

WHERE ip_register = ? OR ip_current = ? AND id != ?
-- parsed as:
WHERE ip_register = ? OR (ip_current = ? AND id != ?)

So a user whose ip_register matched themselves would show up in their own clone list. Added parentheses:

WHERE (ip_register = ? OR ip_current = ?) AND id != ?

So please run the 006_HabboManager_fix before you run the update Emulator !
2026-04-07 09:20:15 +02:00
duckietm 65c777dbc8 Merge branch 'dev' of https://github.com/duckietm/Arcturus-Morningstar-Extended into dev 2026-04-07 08:45:44 +02:00
duckietm d161d8da82 🆙 Set all wired interaction type's 2026-04-07 08:45:42 +02:00
DuckieTM 0adb99a962 🆙 Update Gifts 2026-04-05 14:53:10 +02:00
DuckieTM 773694460f 🆙 Small fix Wired Highscore 2026-04-04 16:26:20 +02:00
DuckieTM e6f824aedd 🆙 Wired Core updates
Thanks to Migueg
2026-04-04 16:19:46 +02:00
DuckieTM 0916ff1e0b 🆙 Redone the userwalk flood detection 2026-04-04 08:49:19 +02:00
duckietm c030ea5fc6 🆙 Small update to SQL 2026-04-03 19:10:55 +02:00
duckietm d52609e78b 🆙 Update Optimize script, if run please run again ! 2026-04-03 14:09:25 +02:00
duckietm 791ddf679e 💯 added missing SQL 2026-04-01 11:19:13 +02:00
duckietm 0235421bec 🆙 Latest compiled 2026-04-01 09:08:19 +02:00
duckietm 8459e1a45e 🆙 Remove SQL for emu settings Youtube Thumbnail 2026-03-31 14:55:59 +02:00
duckietm 2246d82dc7 🆙 Fix Youtube TV's 2026-03-31 11:41:08 +02:00
DuckieTM 3bc82ee147 Merge pull request #59 from Lorenzune/feature/pr-20260327
Extend wired runtime metadata and placeholder support
2026-03-31 09:01:11 +02:00
duckietm 62814f2e21 🆙 Added permissions for Furni Editor 2026-03-30 16:21:03 +02:00
duckietm 544ea8c50f 👶 Oepsie in SQL 2026-03-30 13:56:13 +02:00
duckietm 52559dc748 🆙 SQL update file renamed 2026-03-30 13:10:03 +02:00
DuckieTM 88536e4e88 Merge pull request #53 from simoleo89/furnieditor
feat: FurniEditor WebSocket (packets 10040-10045)
2026-03-30 11:12:13 +02:00
DuckieTM 570ff24655 🆙 Update latest compiled version "READ the Description!"
We have upgrade our builder with Java JDK 25 !!!
On Linux please run : apt install openjdk-25-jdk
2026-03-29 16:07:44 +02:00
DuckieTM 0ebb303e0c 🆙 Small security fix Forum Groups & better cache
GuildChangeSettingsEvent 2000ms - Write
GuildForumPostThreadEvent 2000ms - Write
ModerateMessage/Thread 2000ms - Write
ThreadUpdate 2000ms -Write
UpdateSettings 2000ms- Write
MarkAsRead 2000ms - Write
Data/List/Threads/Messages - 500ms Read-only
2026-03-29 16:04:52 +02:00
DuckieTM 33a1a511ce Merge pull request #54 from duckietm/main
Sync Main to Dev
2026-03-29 14:48:57 +02:00
DuckieTM c34bf49e64 🆕 Groups Forums
- Please run the 002_forum_groups.sql !
2026-03-29 14:46:53 +02:00
DuckieTM bf0f246b84 🆙 stage 1 2026-03-28 19:35:00 +01:00
Life 7e736900a3 feat: FurniEditor WebSocket handlers (10040-10045) — search, detail, update, delete, interactions 2026-03-27 20:10:03 +01:00
duckietm 9cbfc6c1db 🆙 Fix Groups Forum SQL code 2026-03-27 17:11:21 +01:00
Lorenzune dfd9cd1357 Extend wired runtime metadata and placeholder support
- add wf_xtra_text_output_furni_name and expand text placeholders for furni, users, bots and pets

- include room, entry, teleport and item metadata needed by the new :wired tools flow

- animate furniture position updates through the wired movement path

- fix teleport pair persistence/lookups for items_teleports with explicit column inserts
2026-03-27 09:37:14 +01:00
DuckieTM f22e4c30a8 Merge pull request #52 from duckietm/dev
Dev
2026-03-26 15:22:04 +01:00
DuckieTM f7a75d8614 Merge pull request #51 from Lorenzune/feature/pr-20260326
Add wired evaluation and text placeholder extras
2026-03-26 15:19:59 +01:00
DuckieTM 00893b1436 Merge pull request #50 from duckietm/dev
🆙 Fix rooms loading
2026-03-26 15:19:23 +01:00
duckietm 95aea934bd 🆙 Fix rooms loading
- Layout Cache (eliminates 1 DB query per room load)

Standard room models (model_a, model_b, etc.) are loaded once at startup and cached in memory
RoomLayout gets a new constructor from cached data instead of ResultSet
~99% of rooms use standard models, so this saves a DB round-trip on nearly every room load

- Better Parallel Pipeline (reduced critical path)

Before: layout → [items|rights|wordfilter] → heightmap → [bots|pets|wired]
After:  layout → [items|rights|wordfilter|bots|pets] → [heightmap|wired]

Bots and pets only need layout for positioning, not items - so they now start immediately
Wired only needs items loaded (not heightmap) - so it now runs parallel with heightmap

-  Deferred Promotion Query (faster Room instantiation)

Moved room_promotions DB query from constructor to loadDataInternal() as an async task
Room constructor now only runs bans query (needed for entry check)
Saves ~20ms per Room instantiation for promoted rooms

-  Smart Heightmap (reduced tile iterations by 80-95%)

Instead of updating ALL tiles (1024 for 32x32 room), only updates tiles with items on them
Uses getTilesAt() for correct rotation-aware multi-tile coverage
For a room with 100 items on a 32x32 grid: ~200 tile updates instead of 1024
2026-03-26 12:44:12 +01:00
DuckieTM caf7affe77 Merge pull request #49 from duckietm/dev
Dev
2026-03-26 10:48:02 +01:00
duckietm b755828d85 🆙 Small fix UserCreditsComposer
se this instead of this.client.getHabbo() since giveCredits() is already called on the Habbo instance itself. No need for the round-trip through the client.
2026-03-26 10:43:26 +01:00
duckietm 31ebb96a9c 🆙 Speeds up the badge loading 2026-03-26 10:15:40 +01:00
duckietm f2d8f109ff 🆙 Optimization for the gameserver
- Room Cleanup Optimization (RoomManager.java)

Added roomsByOwner ConcurrentHashMap that tracks which rooms belong to which owner
clearInactiveRooms() now iterates unique owners instead of ALL rooms
Went from O(rooms × clients) to O(unique_owners × clients) every 120s

 - Volatile Fields (Room.java)

Removed volatile from 27 room config fields (score, category, chatMode, allowPets, etc.)
Kept volatile only on 8 fields that genuinely need cross-thread visibility (loaded, preLoaded, needsUpdate, muted, etc.)
Reduces CPU cache line invalidation on every room cycle tick

- Search Cache TTL (SearchUserEvent.java + CleanerThread.java)

SearchUserEvent now has 30-second TTL per entry instead of full wipe every 10s
SearchRoomsEvent already had LRU eviction (max 200) — removed redundant .clear() call
Frequently searched users stay cached, only stale entries get cleaned

- scheduledComposers/scheduledTasks — After reading the code, these are actually already handled correctly: processScheduledTasks() swaps the set with a fresh one before processing, and processScheduledComposers() calls .clear() after sending. No leak risk.
2026-03-26 09:59:02 +01:00
duckietm 5319e5e5c3 🆙 Database performance fixes
1. HabboManager - O(1) username lookup
Before: getHabbo(String) held a synchronized lock and iterated ALL online users every call
After: Secondary ConcurrentHashMap<String, Habbo> keyed by lowercase username → instant get() lookup, no lock contention

2. ItemsComponent - Batch DB saves
Before: dispose() spawned a separate thread per dirty item, each opening its own DB connection
After: Single connection, JDBC addBatch()/executeBatch() for both UPDATE and DELETE, flushed every 100 items. A user with 500 dirty items now does 5 batch executions instead of 500 thread spawns + 500 connections.

3. AcceptFriendRequestEvent - N+1 elimination
Before: For each offline user: query 1 (getOfflineHabboInfo by ID) → query 2 (load full Habbo by username) = 2 queries × up to 100 users = 200 queries
After: Single query by user ID directly = 1 query × up to 100 users = 100 queries (50% reduction)

4. RoomManager - Direct HashMap lookup
Before: getCategory(int id) iterated all categories checking getId() == id even though the map is already keyed by ID
After: Direct roomCategories.get(id) → O(1) instead of O(n)
2026-03-26 09:41:31 +01:00
duckietm f2b0ba0138 🆙 Start working on SQL 2026-03-26 09:20:49 +01:00
duckietm 954d0d9703 Stop tracking .idea directory 2026-03-26 09:18:24 +01:00
duckietm 7c0d3c2405 Stop tracking .idea directory 2026-03-26 09:17:35 +01:00
Lorenzune 32d2915b78 Add wired evaluation and text placeholder extras 2026-03-26 05:24:53 +01:00
DuckieTM 8a0fe42c94 Merge pull request #48 from duckietm/dev
🆙 Bump to Version 4.1.0
2026-03-25 12:46:58 +01:00
duckietm d4c0ddf09c 🆙 Bump to Version 4.1.0 2026-03-25 12:46:07 +01:00