Follow-up security & stability pass. No client update required.
🔴 Crash Fixes
🟠 Teleporter out-of-bounds crash
A crafted teleporter request with a negative index read past the destination list — garbage teleport, or a world-server crash on a large negative value. Now bounds-checked on both ends.
-# Impact: one packet at a teleporter NPC could take down a channel.
💰 Cash Shop Fixes
🔴 Point loss on concurrent top-up (real money)
Purchases overwrote the whole balance instead of subtracting, so a website credit that landed at the same moment was silently lost. Switched to an atomic database deduction — a concurrent top-up can no longer be eaten, and you can't overspend.
-# Impact: real money/points could vanish on a rare timing overlap.
🟠 Purchase spam throttling
Cash-shop buys now count as "expensive" in the packet rate limiter, so a modified client can no longer flood the buy handler and hammer the database worker.
🟡 Gift to invalid recipient
The shop accepted any character id — a fake id meant the buyer paid and the item vanished into nowhere. The recipient must now be a real character (any character; no friends requirement).
Follow-up security & stability pass. No client update required.
🔴 Crash Fixes
🟠 Teleporter out-of-bounds crash
A crafted teleporter request with a negative index read past the destination list — garbage teleport, or a world-server crash on a large negative value. Now bounds-checked on both ends.
-# Impact: one packet at a teleporter NPC could take down a channel.
💰 Cash Shop Fixes
🔴 Point loss on concurrent top-up (real money)
Purchases overwrote the whole balance instead of subtracting, so a website credit that landed at the same moment was silently lost. Switched to an atomic database deduction — a concurrent top-up can no longer be eaten, and you can't overspend.
-# Impact: real money/points could vanish on a rare timing overlap.
🟠 Purchase spam throttling
Cash-shop buys now count as "expensive" in the packet rate limiter, so a modified client can no longer flood the buy handler and hammer the database worker.
🟡 Gift to invalid recipient
The shop accepted any character id — a fake id meant the buyer paid and the item vanished into nowhere. The recipient must now be a real character (any character; no friends requirement).