- Status
- Offline
- Joined
- Mar 3, 2026
- Messages
- 667
- Reaction score
- 457
Digging into a Conquer Online source and hit the wall with shop windows? We've all been there—trying to add a custom Quest Point NPC or a unique shop without nuking the Horse Racing or Warehouse functionality. If you're tired of guessing packet IDs for UI elements, you need a solid list of window commands to call the right interface from the client.
Developing a custom reward system is one thing; getting the client to display the right shop window without replacing essential functions is the real headache. Below is a mapping of ushort IDs used to trigger specific UI windows in several popular CO2 bases.
How to map new IDs via Brute Force
If you are searching for a specific window that isn't listed (like a hidden event shop), a pro tip is to script a temporary NPC that increments the window ID by 1 on every click. It's the fastest way to manually verify what the client actually supports without dumping the entire binary.
Shop Configuration and .ini Files
When you create a new shop .ini, remember that the NPC needs to send the specific window command associated with that shop type. You can define your items and prices in the configuration files, but the server-side logic must bridge the gap between the NPC interaction and the window ID being pushed to the client.
Testing these on older clients might cause crashes if the UI resource doesn't exist, so always back up your source before mass-editing IDs.
Drop a comment if you've found any other hidden IDs in the newer client builds.
Developing a custom reward system is one thing; getting the client to display the right shop window without replacing essential functions is the real headache. Below is a mapping of ushort IDs used to trigger specific UI windows in several popular CO2 bases.
Code:
public class WindowCommands
{
public const ushort
Compose = 1,
Craft = 2,
Warehouse = 4,
DetainRedeem = 336,
DetainClaim = 337,
VIPWarehouse = 341,
Breeding = 368,
PurificationWindow = 455,
StabilizationWindow = 459,
JiangHuSetName = 0x269,
TalismanUpgrade = 347,
GemComposing = 422,
OpenSockets = 425,
Blessing = 426,
TortoiseGemComposing = 438,
RefineryStabilization = 448,
HorseRacingStore = 464,
Reincarnation = 485,
SecondaryPasswordVerification = 568,
CrapsTable = 656;
}
How to map new IDs via Brute Force
If you are searching for a specific window that isn't listed (like a hidden event shop), a pro tip is to script a temporary NPC that increments the window ID by 1 on every click. It's the fastest way to manually verify what the client actually supports without dumping the entire binary.
Shop Configuration and .ini Files
When you create a new shop .ini, remember that the NPC needs to send the specific window command associated with that shop type. You can define your items and prices in the configuration files, but the server-side logic must bridge the gap between the NPC interaction and the window ID being pushed to the client.
- Identify an unused or low-priority window ID.
- Update your server-side constants to include the new command.
- Link your shop .ini logic to the specific ushort ID.
Testing these on older clients might cause crashes if the UI resource doesn't exist, so always back up your source before mass-editing IDs.
Drop a comment if you've found any other hidden IDs in the newer client builds.