cq_action Table GuideWelcome to the ultimate guide for understanding the cq_action table used in Eudemons Online private servers. This table plays a critical role in controlling game behavior — from NPC dialogs and item rewards to experience gains, system messages, and conditional logic.
Whether you’re new to EO development or looking to refine your scripting skills, this guide will walk you through:
cq_action tabletype codes and how they workid_next and handling conditions with id_nextfailAll content is written clearly and includes real-world examples to help you build, debug, and expand your server’s functionality faster.
⚙️ Built by the EO dev community — for the EO dev community.
Explore the sections below and level up your EO server customization!
cq_action?cq_action?
The cq_action table controls sequences of actions triggered in-game — like when you click an NPC, receive an item, or complete a quest. It uses an ID-based flow system with support for conditions and multiple outcomes.
INSERT INTO `cq_action` (`id`, `id_next`, `id_nextfail`, `type`, `data`, `param`) VALUES (1000, 0000, 0000, 0501, 810007, '');
| Field | Description |
|---|---|
id |
Unique action ID |
id_next |
Next action if success/condition true |
id_nextfail |
Next action if condition fails |
type |
Type of action (dialog, give item, etc.) |
data |
Depends on type (item ID, message ID, etc.) |
param |
Usually contains message text or command |
| Type Code | Description |
|---|---|
0101 |
NPC Dialog Text |
0102 |
NPC Options (buttons) |
0125 |
System Announcement (Global) |
0126 |
System Tip (Local) |
501 |
Give Item |
1001 |
Give EXP, Money, Stones |
You can download the full explanation of action types here.
This action shows a dialog when the player interacts with an NPC or item.
REPLACE INTO `cq_action` VALUES (1001, 1002, 0000, 0101, 0, 'I can sell it only for an hour every day.'); REPLACE INTO `cq_action` VALUES (1002, 1003, 0000, 0101, 0, 'Do you want to give it a go?'); REPLACE INTO `cq_action` VALUES (1003, 1004, 0000, 0102, 0, 'Just~one,~please. 1007'); REPLACE INTO `cq_action` VALUES (1004, 1005, 0000, 0102, 0, 'Sorry,~but~I~dont~need~it. 0'); REPLACE INTO `cq_action` VALUES (1005, 1006, 0000, 0104, 0, '0 0 34'); REPLACE INTO `cq_action` VALUES (1006, 0000, 0000, 0120, 0, '');
REPLACE INTO `cq_task` VALUES (1001, 1001, 0000, '', '', 0, 0, 999, -100000, 100000, 0999, 0000, 0, -1, 0); REPLACE INTO `cq_task` VALUES (1007, 1007, 0000, '', '', 0, 0, 999, -100000, 100000, 0999, 0000, 0, -1, 0);
| Type | Purpose | param Explanation |
|---|---|---|
101 |
Show dialog text | NPC or item dialog string (≈ 40–45 chars per line) |
102 |
Dialog options / buttons | Text ~ spacing + task_id (use 0 for close) |
104 |
Dialog face image | x y pic_id — from Ani/NpcFace.ANI (e.g. Face34) |
120 |
End of dialog | (none) |
type 101 must have a corresponding cq_task entrytask_id used in type 102 must also exist in cq_task~ for spacing inside all dialog text and option strings0104 to show NPC face image (optional)0120 to ensure it closes cleanlycq_task entries!
This dialog system creates stylish, story-driven NPC interactions with portrait images, background panels, and up to 4 interactive options.This feature is only available on the 🆕 New Engine.
REPLACE INTO cq_action VALUES (1001, 1002, 0000, 0101, 0, 'Hello~i`am~Linleria~the~designer,~do~you~have~enough~essence~to~trade~off~with~these~cosmetic~items?'); REPLACE INTO cq_action VALUES (1002, 1003, 0000, 0102, 0, 'Yes,send~me~there. 1006'); REPLACE INTO cq_action VALUES (1003, 1004, 0000, 0102, 0, 'Close. 1005'); REPLACE INTO cq_action VALUES (1004, 0000, 0000, 0132, 0, '0 Tasksystem_GeneralbotPic Linleria 0 Tasksystem_WnbeishangPic'); REPLACE INTO cq_action VALUES (1005, 0000, 0000, 133, 0, '');
data/interface/style01/Tasksystem/God/WnbeishangPic.dds
REPLACE INTO cq_action VALUES (1001, 1002, 0000, 0101, 0, 'Do~You~see~the~Sword~there?~This~sword~is~belong~to~King~of~the~Four~Seas.~I~need~your~help~to~stop~him. sound/dice_move.wav'); REPLACE INTO cq_action VALUES (1002, 1003, 0000, 0102, 0, 'I~am~going~to~absorb~the~energy. 1006'); REPLACE INTO cq_action VALUES (1003, 1004, 0000, 0102, 0, 'Close. 1005'); REPLACE INTO cq_action VALUES (1004, 0000, 0000, 0132, 0, 'Novice_BottomBG Novice_RolePic 21650'); REPLACE INTO cq_action VALUES (1005, 0000, 0000, 0133, 2, '');
data/interface/style01/Rookie/RolePic.dds0102) per dialogtype 133)~ instead of spaces in all dialog lines or they won't display!Type 132 requires the player to be very close to the NPC (within ~5 tiles)type 133 must use data = 2 to allow proper closing for some UIsparam like sound/dice_move.wav (Skuld dialog only!)~ instead of spaces. Example:Hello~brave~warrior! ✅ Hello brave warrior! ❌
Sends specific items to the player when triggered. Used for quest rewards, shop systems, monster drops, and more.
-- Give 1 item (basic) REPLACE INTO cq_action VALUES (1000, 1002134, 0000, 0501, 754826, '');
-- With custom stats (Old Engine) REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0501, 1081990, '0 0 0 0 0 0 0 0 0 0 0 0 1'); -- Old Engine Params: amount amount_limit ident gem1 gem2 magic1 magic2 magic3 data warghostexp gemtype availabletime MONOPOLY
-- With custom stats (New Engine) REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0501, 1081990, '0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0'); -- New Engine Params: amount amount_limit ident gem1 gem2 magic1 magic2 magic3 data warghostexp gemtype availabletime MONOPOLY eudemon_attack1 eudemon_attack2 eudemon_attack3 eudemon_attack4 special_effect Gem3 GodExp prescription
-- Type 501 (New Engine): Give Necro Eudemon Egg
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0501, 1081610, '1');
-- Notes:
When giving a Eudemon Egg (e.g., 1081610), setting the first param to 1 marks it as a Necro Eudemon.
This applies only in the New Engine and only for specific Necro Eudemon egg items.
-- Type 525 (New Engine Only): Same as 501 but "availabletime" becomes "aging days".This type can only be used for 820xxxx items only. REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0525, 820646, '0 0 0 0 0 0 0 0 0 0 0 30'); -- 30 = 30 days
-- Type 540 (Both Engines): Modifies stackable item count REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0540, 1020171, 'amount += 1'); -- Notes: Supports: +=, -=, =, >, <, >=, <= Can also be used to remove items: 'amount += -1' Only works for stackable items Recommended for adjusting count instead of deleting via 502
-- Type 550 (New Engine Only): Same as 501 but with client-side display effect REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0550, 1600261, '');
type 503 to check item count before giving or removing540 is more flexible and safer than deleting stackable items with 502550 (New Engine only)525 is useful for timed items like trial gear or eventsType 502 is used to remove one or more items from the player’s inventory based on type or name.
data = ItemTypeID (or 0 to match by name)param = quantity or item name (if using data = 0)id_nextfail to handle missing items or not enough quantityREPLACE INTO cq_action VALUES (1001, 1003, 1002, 0502, 1020030, '1 1'); REPLACE INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You don`t have enough item.');
REPLACE INTO cq_action VALUES (1001, 1003, 1002, 0502, 810002, '10'); REPLACE INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You don`t have enough item.');
-- Delete 2x [ItemID: 111006] if item is NOT stackable REPLACE INTO cq_action VALUES (1001, 1002, 1003, 0502, 111006, 0); REPLACE INTO cq_action VALUES (1002, 1004, 1003, 0502, 111006, 0); REPLACE INTO cq_action VALUES (1003, 0000, 0000, 0126, 0, 'You don`t have enough item.');
-- Delete 2x "Blue Crest Helmet" by item name REPLACE INTO cq_action VALUES (1001, 1002, 1003, 0502, 0, 'Blue~Crest~Helmet'); REPLACE INTO cq_action VALUES (1002, 1004, 1003, 0502, 0, 'Blue~Crest~Helmet'); REPLACE INTO cq_action VALUES (1003, 0000, 0000, 0126, 0, 'You don`t have enough item.');
Type 540 (Recommended)-- Safely subtract 5x stackable item (e.g., EXP Scroll) REPLACE INTO cq_action VALUES (1001, 0000, 0000, 0540, 1020116, 'amount += -5');
type 503 to check quantity before deleting itemstype 0126 to notify player if the item is missingtype 540 is cleaner and more reliabletype 502 multiple times to match how many you want to delete.
Type 503 is used to check if a player has a specific item, with optional quantity/durability validation.
data = ItemTypeID (or 0 for name-based check)param = quantity or full item name (if data = 0)param = 0id_nextfail-- Check if player has at least 5x of ItemTypeID 111007 REPLACE INTO cq_action VALUES (0001, 0002, 0003, 0503, 111007, 5); -- Success REPLACE INTO cq_action VALUES (0002, 0000, 0000, 0126, 0, 'You have this item'); -- Failure REPLACE INTO cq_action VALUES (0003, 0000, 0000, 0126, 0, 'You don`t have this item');
REPLACE INTO cq_action VALUES (0001, 0002, 0003, 0503, 111007, 0); REPLACE INTO cq_action VALUES (0002, 0000, 0000, 0126, 0, 'You have this item'); REPLACE INTO cq_action VALUES (0003, 0000, 0000, 0126, 0, 'You don`t have this item');
REPLACE INTO cq_action VALUES (0001, 0002, 0003, 0503, 0, 'Blue~Crest~Helmet'); REPLACE INTO cq_action VALUES (0002, 0000, 0000, 0126, 0, 'You have this item'); REPLACE INTO cq_action VALUES (0003, 0000, 0000, 0126, 0, 'You don`t have this item');
type 502 to verify quantity before removingid_nextfail for fallback messaging.
This action modifies or checks player attributes using logic like +=, ==, <, etc.
INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 1001, 0, 'e_money += 13500'); // add INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 1001, 0, 'e_money += -13500'); // remove
life, mana, money, exp, pk, energy(stamina) — (+=, ==, <)xp, nob_rank_donate — (+=)profession — (==, set, >=, <=)level, force, dexterity, speed, health, soul — (+=, ==, <)rank, rankshow — (==, <)iterator — (=, <=, +=, ==)crime — (==, set)gamecard, gamecard2, totalbattlelev — (==, >=, <=)metempsychosis — (==, <)mercenary_rank, mercenary_exp, exploit — (==, <, +=)maxlifepercent — (+=, ==, <)tutor_exp, tutor_level — (==, <, +=, =)eudemon_boord_size — (==, <, +=, =)syn_proffer, maxeudemon, soul_value — (<, +=, =)ahlife — (-=)moonmoney, starmoney — (==, +=, <>)BftitlePlaneid — (==, +=, =)DstitleId — (==, <)crystalmoney, honourmoney, olggodmoney — (+=, <, ==)energy — (<, +=, =)goddesspoint — (==, <, +=)godexp — (+=, ==, <)exp_percent, godexp_percent — (+=)🧠 Most attributes use += to add, == to compare, and < to check thresholds.
cq_user or cq_user_new table to verify which fields are available in your version.cq_usercq_user_new
These types allow you to introduce randomness into your server logic:
param format: "chance total"
INSERT INTO cq_action VALUES (1000, 1001, 1002, 0121, 0, '20 100'); INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'succeed'); INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'fails');
This means: 20 out of 100 (20%) chance of success.
id_next (1001)id_nextfail (1002)param format: "action0 action1 action2 ... action7"
INSERT INTO cq_action VALUES (1000, 0000, 0000, 0122, 0, '1001 1002 1003 1004 1005 1006 1007 1008');
This means: randomly choose ONE action ID from the list above.
Each ID must refer to a valid cq_action that will be executed.
'1001 1001 1001 1002 1002 1003 1004 1005'1001 a higher weight than the others (appears 3 out of 8).
type 121 is great for chance-based triggers (e.g. success/failure),
while type 122 is ideal for random branching events, rewards, or NPC reactions.
Type 126 displays a simple message box popup on the client with a YES button. It is for informational purposes only — it does not execute any action on click.
INSERT INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Your text here.');
~.Type 125 sends system-wide broadcast messages across different UI locations depending on the data value (channel type).
-- Top-left corner (Old & New Engine) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0125, 2005, 'Your text here'); -- Center screen classic popup (Old & New Engine) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0125, 2011, 'Your text here'); -- Bottom-left in chat (New Engine only) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0125, 2007, 'Your text here'); -- Center screen modern popup (New Engine only) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0125, 2024, 'Your text here');
| Channel | Location | Preview | Engine |
|---|---|---|---|
2007 |
Bottom-left (chat area) | ![]() |
New Engine Only |
2005 |
Top-left system notice | ![]() |
Old & New Engine |
2024 |
Modern popup (center screen) | ![]() |
New Engine Only |
2011 |
Classic popup (center screen) | ![]() |
Old & New Engine |
data based on how visible the message should be.2007 for chat-style messages, 2024 for clean centered alerts.
Type 1010 is used for sending client-side local messages, popups, and web links. The display behavior is defined by the data (channel) value.
-- Local chat system notice INSERT INTO cq_action VALUES (1000, 0000, 0000, 1010, 2000, 'Your text here.'); -- Modern pop-up (new engine only) INSERT INTO cq_action VALUES (1000, 0000, 0000, 1010, 2024, 'You`ve arrived in Forgotten Realms'); -- Web link INSERT INTO cq_action VALUES (1000, 0000, 0000, 1010, 2105, 'http://www.google.com');
| Data | Channel | Message Example |
|---|---|---|
2000/2007 |
System Chat Channel | Welcome to Knightfall. |
2001 |
Whisper Chat Channel | Announcer: reminder has end. |
2002 |
[Action] Chat Channel | Eliminate 16 Elite monsters. |
2003 |
Team Chat Channel | %user_name has used Double EXP Potion.(your teammate cannot see this.) |
2023 |
Boss Chat Channel | King MadBull has Appear! |
2025 |
Help Chat Channel | You don't have enough gold. |
2005 |
Top-left Notice | You learned Tornado Skill. |
2011 |
Center Screen - [System] | You donated 1000 HP and the Hatred Wraith revived! |
2024 |
Modern Popup (New Engine) | You’ve arrived in Cronus |
2105 |
Open Web Link | http://www.google.com |
type 1010 for immersive local feedback like quests, status effects, zone tips, or helper links — without global broadcast noise.
Type 508 checks if the player has enough remaining space in a specific inventory bag. If not enough space is available, it goes to id_nextfail.
required_space weight pack_type
0 (reserved for future logic)pack_type Values:| Pack Type | Description | Engine |
|---|---|---|
50 |
Common item bag (main backpack) | ✅ Old & New Engine |
52 |
Eudemons Egg bag | ✅ Old & New Engine |
53 |
Eudemons Inventory | ✅ Old & New Engine |
46 |
Quest item bag | 🆕 New Engine Only |
47 |
Material item bag | 🆕 New Engine Only |
43 |
Divine Fire item bag | 🆕 New Engine Only |
50, 52, 5346, 47, 43, 50, 52, 53
-- Check 1 slot in main backpack INSERT INTO cq_action VALUES (1000, 1002, 1001, 0508, 0, '1 0 50'); INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your backpack is full!'); INSERT INTO cq_action VALUES (1002, 0000, 0000, 0501, 191740, ''); -- Check 1 slot in egg bag INSERT INTO cq_action VALUES (1000, 1002, 1001, 0508, 0, '1 0 52'); INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your egg bag is full.'); INSERT INTO cq_action VALUES (1002, 0000, 0000, 0501, 1083060, ''); -- Check 1 slot in Eudemon Inventory INSERT INTO cq_action VALUES (1000, 1002, 1001, 0508, 0, '1 0 53'); INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You need 1 free space in your inventory.'); INSERT INTO cq_action VALUES (1002, 0000, 0000, 0526, 0, '');
type 126 to show user-friendly messages when space is insufficient.
Type 123 checks the current server time using various time-based formats. It can be used to limit actions to certain dates, times, or days of the week.
Depends on data (0 to 6) – see formats below
data values):| Data | Format | Example | Description | Engine |
|---|---|---|---|---|
0 |
%d-%d-%d %d:%d %d-%d-%d %d:%d |
2024-04-01 10:00 2024-04-01 18:00 | Full date & time range | Old & New |
1 |
%m-%d %H:%M %m-%d %H:%M |
04-01 09:00 04-01 17:00 | Month-day with time range | Old & New |
2 |
%d %H:%M %d %H:%M |
15 10:00 15 12:00 | Day of month with time range | Old & New |
3 |
%d %H:%M %d %H:%M |
2 14:00 2 18:00 | Day of week (1=Monday) with time range | Old & New |
4 |
%H:%M %H:%M |
08:00 17:00 | Any time of day (daily range) | Old & New |
5 |
%d %d |
10 20 | Minute range in current hour | Old & New |
6 |
%d %d %d %d %d %d %d |
0 1 1 0 0 0 0 | Day of week (Mon–Sun as 1/0 mask) | 🆕 New Engine Only |
-- Run only from 9 AM to 5 PM daily INSERT INTO cq_action VALUES (1000, 1002, 1001, 0123, 4, '09:00 17:00'); -- Run only on Tuesday and Wednesday INSERT INTO cq_action VALUES (1000, 1002, 1001, 0123, 6, '0 1 1 0 0 0 0'); -- Run only from minute 10 to 20 of each hour INSERT INTO cq_action VALUES (1000, 1002, 1001, 0123, 5, '10 20');
id_next for when the time check passes and id_nextfail for when it fails.data = 6 (weekday mask) is only supported in the new engine.
Type 130 displays in-game announcement window (like patch notes or news). It supports multiple lines of text chained via id_next.
-- Start of announcement chain INSERT INTO cq_action VALUES (1000064, 1000065, 0000, 0130, 0, 'Knightfall newest update! Information is showed below:'); INSERT INTO cq_action VALUES (1000065, 1000066, 0000, 0130, 0, 'New class and new features come to Cronus!'); INSERT INTO cq_action VALUES (1000066, 1000067, 0000, 0130, 0, '1.New Class `Star Guardian` and brand new skill!'); INSERT INTO cq_action VALUES (1000067, 1000068, 0000, 0130, 0, '2.Celebrity hall fully fixed and updated.'); INSERT INTO cq_action VALUES (1000068, 1000069, 0000, 0130, 0, '3.Skytower introduced! limit level up to 310 floor!'); INSERT INTO cq_action VALUES (1000069, 1000070, 0000, 0130, 0, '4.Complete demon rising expansion to explore!'); INSERT INTO cq_action VALUES (1000070, 1000071, 0000, 0130, 0, '5.New domain! Get high stats with new talisman'); INSERT INTO cq_action VALUES (1000071, 1000072, 0000, 0130, 0, '6.New divine fire level 85 with latest tomb to conquer'); -- End of announcement INSERT INTO cq_action VALUES (1000072, 0000, 0000, 0131, 0, '0');
type 130 is one line of texttype 131 to close the windowType 188 opens the God’s Treasure spinning interface, where players can draw from 8 randomized rewards. This feature is only available on the 🆕 New Engine.
ItemID Quantity DisplayActionID RandomWeight
There must be exactly 8 entries, separated by commas.
data = total price (in EP) to Claim All itemsdata = 0 to disable the Claim All button-- Open interface (Claim All disabled) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0188, 0, '1026624 3 1001 1, 1026625 1 1002 20, 1026624 1 1003 20, 1026624 1 1004 20, 1026625 3 1005 1, 1026626 3 1006 1, 1026626 1 1007 20, 1026626 1 1008 20'); -- Rewards for each draw INSERT INTO cq_action VALUES (1001, 0000, 0000, 0540, 1026624, 'amount += 3'); INSERT INTO cq_action VALUES (1002, 0000, 0000, 0540, 1026625, 'amount += 1'); INSERT INTO cq_action VALUES (1003, 0000, 0000, 0540, 1026624, 'amount += 1'); INSERT INTO cq_action VALUES (1004, 0000, 0000, 0540, 1026624, 'amount += 1'); INSERT INTO cq_action VALUES (1005, 0000, 0000, 0540, 1026625, 'amount += 3'); INSERT INTO cq_action VALUES (1006, 0000, 0000, 0540, 1026626, 'amount += 3'); INSERT INTO cq_action VALUES (1007, 0000, 0000, 0540, 1026626, 'amount += 1'); INSERT INTO cq_action VALUES (1008, 0000, 0000, 0540, 1026626, 'amount += 1');
ItemID: The item to show in the gift boxQuantity: How much to displayDisplayActionID: What action runs when claimedRandomWeight: The higher the number, the easier it is to get. The lower the number, the rarer it becomes (e.g., 1 = rare, 20 = common).type 188 with type 121/122 if you want conditional treasure or tiered draw access.
Type 189 is used for two purposes depending on the data value:
data = 204: Temporary dialog box (shows for 4–5 seconds)data = 202: Opens a web browser window in-game (linked to areaid.ini)
INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 0189, 204, 'Lorem~ipsum~dolor~sit~amet. Tasksystem_GeneralbotPic|1 null -520 30 250 -30 1 Tasksystem_xnhlhxtgwbsx Title~Manager|100|217|1 500 500');
Lorem~ipsum~dolor~sit~amet: Dialog content (must use ~ for spacing)Tasksystem_GeneralbotPic: Background panel (black theme, default)|1: Unknown, typically set to 1null: Placeholder for optional elements (e.g., sound/dice_move.wav)-520 30: X and Y position of the dialog box (X: left/right, Y: up/down)250 -30: Text position (left/right, up/down)1: Dialog screen location (1 = center screen, 2 = top right)Tasksystem_xnhlhxtgwbsx: Portrait (from control.ani)Title~Manager: Name below portrait (use ~ instead of spaces)|100: Name X offset (right = bigger, left = smaller)|217: Name Y offset (down = bigger, up = smaller)|1: Name alignment/location (guess)500 500: Unknown values (typically left untouched)INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 0189, 204, 'Well?~Is~that~the~young~Ranger~who~fought~off~the~enemy~at~the~city~gates~you~are?~Not~bad. Archer_PhoenixPic null -520 30 250 -250 1');
Some portraits already include name overlays and background. Browse: data/interface/style01/Tasksystem/God/
INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 0189, 202, '6 6'); INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 0189, 202, '8 654'); INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 0189, 202, '9 1396'); INSERT INTO `cq_action` VALUES (1000, 0000, 0000, 0189, 202, '6 4');
size: Window layout (see chart below)areaid: Web index (linked to areaid.ini)URL654 = http://knightfall.my.to/newbie/| Size | Dimensions |
|---|---|
| 1 | 300 × 400 |
| 2 | 400 × 500 |
| 3 | 500 × 600 |
| 4 | 500 × 500 |
| 5 | 580 × 475 |
| 6 | 900 × 650 |
| 7 | 427 × 469 |
| 8 | 820 × 568 |
| 9 | 900 × 650 |
| 10 | 990 × 730 |
| 11 | 905 × 655 |
areaid.ini as URL{areaid}.
Type 191 and Type 192 are used to manipulate global or session-wide variables stored in cq_vardata and cq_varstrdata respectively.
cq_vardata)Used to store and manipulate numbers like counters, flags, or progress markers.
-- Add +1 to variable index 3 INSERT INTO cq_action VALUES (1000, 0000, 0, 191, 0, 'var(3) += 1'); -- Set variable index 3 to 999 INSERT INTO cq_action VALUES (1000, 0000, 0, 191, 0, 'var(3) set 999'); -- Conditional check: If var(3) equals 100 INSERT INTO cq_action VALUES (1000, 1001, 1002, 191, 0, 'var(3) == 100');
set, +=, /=, *=, ==id_nextfail for failure path📥 Access value in dialog: %public_var_data3
-- Display value of public_var_data3 INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, '%public_var_data3');
cq_varstrdata)Used to store names, states, or any string-based logic values.
-- Set string var(3) to "Hello" INSERT INTO cq_action VALUES (1000, 0000, 0, 192, 0, 'var(3) set Hello'); -- Check if var(3) is "Hello" INSERT INTO cq_action VALUES (1000, 1001, 1002, 192, 0, 'var(3) == Hello');
set, ==id_nextfail for string mismatch handling📥 Access value in dialog: %public_var_str3
-- Display value of public_var_str3 INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, '%public_var_str3');
type 101 or 125 for dynamic storytelling or debugging purposes.
Type 201 and Type 206 are used to check or modify NPC attributes such as data, datastr, life, lookface, and more. These can apply to both cq_npc and cq_dynanpc tables.
Type 201 is used when the NPC is within the same map or thread. It can check values, compare, or perform operations like +=, pass, etc. This is commonly used to control quest flow or internal NPC states.
-- Check if npc.data3 >= 21 INSERT INTO cq_action VALUES (1000, 1001, 1002, 0201, 0, 'data3 >= 21 20257'); INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your data3 is more than 21.'); INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Your data3 is less than 21.');
-- Decrease data1 by 1 INSERT INTO cq_action VALUES (1000, 0000, 0000, 0201, 0, 'data1 += -1 20362');
attr opt value npc_id (e.g., data3 >= 21 20257)data0 ~ data3, datastrlife, maxlifeownerid, ownertype, lookfacenewdata1 ~ newdata8, newdatastr1 ~ newdatastr2pass to adjust date/time values ,e.g., data2 pass +3 increases DateStamp by 3 days (Just theory never seen in database).
Type 206 is used when the target NPC is outside the current execution thread (e.g. different map or unrelated script). It can only be used to directly assign values using = (no checking, no math).
-- Set data0 of npc_id 10018 to 1 INSERT INTO cq_action VALUES (1000, 0000, 0000, 0206, 0, '10018 data0 = 1');
npc_id attr = valuedata0 ~ data3, datastr, lookfacenewdata1 ~ newdata8, newdatastr1 ~ newdatastr2-- Set newdatastr1 to HelloWorld INSERT INTO cq_action VALUES (1001, 0000, 0000, 0206, 0, '10018 newdatastr1 = HelloWorld');
= only. Old Engine only supports data fields (data0~3).
cq_npc and cq_dynanpc, only datastr, newdatastr1, and newdatastr2 can store letters and numbers (A–Z, 0–9). All other fields must use numeric values only.
Type 205 is used to delete a dynamic NPC from the map. It only works on NPCs created in cq_dynanpc — not static NPCs from cq_npc. Once deleted, the NPC is permanently removed and cannot be used in any further action steps.
-- Delete current dynamic NPC INSERT INTO cq_action VALUES (8410200, 8410201, 0000, 0205, 0, '');
cq_dynanpc (dynamic NPCs)type in the current mapmap_id type pair-- Delete all dynanpc with type = 999 in current map INSERT INTO cq_action VALUES (1000, 0000, 0000, 0205, 999, '');
-- Delete NPCs of type 888 from map 1002 INSERT INTO cq_action VALUES (1000, 0000, 0000, 0205, 0, '1002 888');
0205 or they will never run.
Type 223 & 226 checks whether the current time is within the configured Legion War period. It's used to control war-based logic like teleportation, dialogue conditions, or reward distribution.
id_nextid_nextfail-- Check if it's Legion War time REPLACE INTO cq_action VALUES (1001, 1002, 1003, 0226, 0, ''); -- If war is on REPLACE INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Legion War is already start'); -- If war is off REPLACE INTO cq_action VALUES (1003, 0000, 0000, 0126, 0, 'Legion war not started yet');
type 126 to give user-friendly feedback, or teleport (type 1006) if war is active.
These actions manage player warehouse passwords, including checks and clearance. Used for secure item storage systems.
Purpose: Verifies if the warehouse is password-locked before clearance.
Behavior:
id_next (clear password with 229).id_nextfail (error message).REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0228, 0, ''); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Warehouse not locked!');
Purpose: Removes the warehouse password (requires prior 228 check).
Behavior:
id_next.REPLACE INTO `cq_action` VALUES (1001, 1003, 0000, 0229, 0, '');
Purpose: Validates if the password was cleared successfully.
Behavior:
id_next (confirmation message).id_nextfail (error message).REPLACE INTO `cq_action` VALUES (1003, 1004, 1005, 1058, 0, ''); REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 0126, 0, 'Password cleared!'); REPLACE INTO `cq_action` VALUES (1005, 0000, 0000, 0126, 0, 'Clearance failed.');
-- 1. Check lock status REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0228, 0, ''); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'No password set.'); -- 2. Clear password REPLACE INTO `cq_action` VALUES (1001, 1003, 0000, 0229, 0, ''); -- 3. Confirm result REPLACE INTO `cq_action` VALUES (1003, 1004, 1005, 1058, 0, ''); REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 0126, 0, 'Success!'); REPLACE INTO `cq_action` VALUES (1005, 0000, 0000, 0126, 0, 'Failed.');
type 126 for user feedback. Use id_nextfail rigorously for error handling.
This system allows players to exchange items via NPCs using Type 250 actions and the cq_exchangegoods table.
data value must always be 601 for exchange shop interface
Purpose: Opens the exchange store interface.
Parameters:
data: Fixed value 601 (required for interface)param: Unused (leave empty)REPLACE INTO `cq_action` VALUES (80000000, 80000001, 0, 0101, 0, 'Welcome honored guest. I can exchange various'); REPLACE INTO `cq_action` VALUES (80000001, 80000002, 0, 0101, 0, 'robes for you. A well-crafted robe can enhance'); REPLACE INTO `cq_action` VALUES (80000002, 80000003, 0, 0101, 0, 'your charm. Would you like to choose one?'); REPLACE INTO `cq_action` VALUES (80000003, 80000004, 0, 0102, 0, 'I~want~to~exchange~items. 80000007'); REPLACE INTO `cq_action` VALUES (80000004, 80000005, 0, 0102, 0, 'No~thanks. 0'); REPLACE INTO `cq_action` VALUES (80000005, 80000006, 0, 0104, 0, '10 10 10'); REPLACE INTO `cq_action` VALUES (80000006, 0, 0, 0120, 0, ''); REPLACE INTO `cq_action` VALUES (80000007, 0, 0, 0250, 601, '');
| Field | Description |
|---|---|
id |
Unique entry ID |
ownerid |
NPC ID (from cq_npc or cq_dynanpc) |
itemtype |
Item ID to give |
price |
Quantity of needitem required |
needitem |
Item ID required for exchange |
maxcount |
Daily exchange limit (-1 = unlimited) |
RetainField |
Unused (set to 0) |
INSERT INTO `cq_exchangegoods` VALUES (0001, 1044, 753231, 18, 1020157, -1, 0), -- Unlimited exchanges (0002, 1044, 753232, 8, 1025644, -1, 0), (0003, 1044, 753233, 12, 1025644, -1, 0), (0004, 1044, 753234, 18, 1020157, -1, 0), (0005, 1044, 753235, 8, 1025644, -1, 0), (0006, 1044, 753236, 12, 1025644, -1, 0);
maxcount=-1 for unlimited exchangesownerid must match an existing NPC IDThis action moves static NPCs (from cq_npc) to specified map coordinates or hides them by moving to (0,0).
cq_npc (not dynamic NPCs from cq_dynanpc)| Field | Usage |
|---|---|
data |
NPC ID (from cq_npc) |
param |
"map_id posX posY" coordinates |
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0301, 2678, '1000 174 388');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0301, 2678, '1000 0 0');
type 123 (time check) for NPCs that appear/disappear at specific times.
This action checks player counts on specified maps, with special handling for large map IDs (>2.1 billion) in New Engine.
INSERT INTO `cq_action` VALUES (1000, 1001, 1002, 0302, 8764, 'alive_user == 1'); INSERT INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'There are 1 user in that map'); INSERT INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'There are 0 or more than 1 user in that map');
| Field | Value |
|---|---|
data |
Map ID (from cq_map) |
param |
"cmd opt quantity" |
cmd |
map_user (all users) or alive_user (non-ghost users) |
opt |
==, <=, or >= |
INSERT INTO `cq_action` VALUES (1000, 1001, 1002, 0302, 0, '1200 map_user <= 0'); INSERT INTO `cq_action` VALUES (1000, 1001, 1002, 0302, 0, '4070000001 map_user <= 0'); -- instance map INSERT INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'There are no user in that map'); INSERT INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'There are user in that map');
| Field | Value |
|---|---|
data |
Must be 0 |
param |
"map_id cmd opt quantity" |
map_user >= 50)alive_user == 1)map_user <= 0 check before teleport)type 1006 (teleport) to create player-limited zones.Sends a broadcast message to all players on a specific map.
data field requires a valid map ID
| Field | Usage |
|---|---|
data |
Target map ID |
param |
Message text |
REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0303, 1000, 'Congratulations! %user_name has combined a Super Amber.');
type 125 instead.
Spawns items at specified map coordinates with optional lifetime and protection periods.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0304, 0, '1010030 1000 492 320');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0304, 0, '1010030 1000 492 320 1800 900');
| Parameter | Description | Example |
|---|---|---|
idItemType |
Item ID to spawn | 1010030 |
idMap |
Target map ID | 1000 |
nPosX nPosY |
Spawn coordinates | 492 320 |
alivesecs |
Item lifetime (seconds) New Engine only |
1800 (30 mins) |
priv_secs |
Protection period (seconds) New Engine only |
900 (15 mins) |
alivesecs and priv_secs are 0 or empty, uses server defaultstype 303 to announce important item spawns.
Checks or modifies specific map attributes. Supports conditional checks and direct modifications.
param = "field opt data [idMap]"
REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0306, 0, 'mapdoc == 8773');
| Field | Operations | Description |
|---|---|---|
synid |
==, = | Synarchy ID operations |
status |
test, set, reset | Map status flags |
type |
test | Map type check |
res_lev |
=, ==, < | Resource level |
mapdoc |
=, == | Map document ID |
portal0_x |
= | Main portal X coordinate |
portal0_y |
= | Main portal Y coordinate |
castle |
== | Castle association |
idMap is omitted, affects current mapid_nextfail for conditional failure paths-- Check map document ID REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0306, 0, 'mapdoc == 8773'); -- Modify resource level REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0306, 0, 'res_lev = 3 1002'); -- Test castle association REPLACE INTO `cq_action` VALUES (1002, 1003, 1004, 0306, 0, 'castle == 5');
type 1006 for conditional map teleports.
Checks entity counts within specific map regions with different detection methods.
REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0322, 1, '1000 527 361 5 > 1');
Parameters: mapid x y radius > value
data=1: Exclude ghost players>, ==, >=REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0323, 1, '1000 106 406 12 12 > 3');
Parameters: mapid x y width height > value
| Type | Area Shape | Ghost Handling | Operators |
|---|---|---|---|
| 322 | Circle (radius) | data=0/1 |
>, ==, >= |
| 323 | Rectangle (w/h) | data=0/1 |
>, ==, >= |
data=1 for alive-player-only eventsType 309 is used to move a dynamic NPC (dynaNPC) to a specified map and coordinates. You can also hide the NPC by moving it to coordinate (0,0).
-- Move dynaNPC id=5001 to map 1000 (x=300, y=300) REPLACE INTO cq_action VALUES (910010, 910011, 910012, 309, 5001, '1000 300 300'); -- Success message REPLACE INTO cq_action VALUES (910011, 0, 0, 126, 0, 'dynaNPC #5001 moved to (300,300).'); -- Fail message REPLACE INTO cq_action VALUES (910012, 0, 0, 126, 0, 'Failed to move dynaNPC #5001.');
| Field | Description | Example |
|---|---|---|
data | dynaNPC ID | 5001 |
param | mapId posX posY | 1000 300 300 |
0 0 to hide the dynaNPC without deleting it.id_next is executed on success, id_next_fail on failure.Displays visual effects at specified map coordinates. Supports hundreds of built-in effect animations.
param = "idMap x y EffectName"
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0312, 0, '2010 325 438 fire555');
| Parameter | Description | Example |
|---|---|---|
idMap |
Target map ID | 2010 |
x y |
Effect coordinates | 325 438 |
EffectName |
Predefined effect identifier | fire555 |
type 303 for coordinated effect+announcement combos.
Manipulates persistent variables tied to specific maps, supporting both numeric and text data.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0316, 0, 'map_var(1000,10) set 0');
Format: map_var(map_id,index) set value
%map_iter_var_data{index}REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0317, 0, 'map_var(1200,0) += 1');
Operations: = == += -= *= /=
REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0318, 0, 'map_var(%user_map_id,2) == Tree'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'This is Tree'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'This is not Tree');
Note: Case-insensitive comparison
REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0319, 0, 'map_var(1000,5) set %user_name');
Variables: %map_iter_var_str{index}
| Type | Index Range | Variable Format |
|---|---|---|
| Numeric | 0-19 | %map_iter_var_data{index} |
| Text | 0-19 | %map_iter_var_str{index} |
%user_map_id - Current player's mapcq_maptype 201 (NPC attributes) for complex map behaviors.
Retrieves current or max HP of monsters on a map and stores in variables.
param = "mapmonsterhp(map_id,monster_type_id,var_index,var_type,hp_mode)"
| Parameter | Description | Values |
|---|---|---|
map_id |
Target map ID | Number or %user_map_id |
monster_type_id |
Monster ID from cq_monstertype |
e.g. 26171 |
var_index |
Variable storage slot | 0-99 |
var_type |
Variable scope |
0 = Personal (%iter_var_data#)1 = Global ( %public_var_data#)
|
hp_mode |
HP retrieval mode |
0 = Current HP 1 = Max HP |
-- Check current HP REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0325, 0, 'mapmonsterhp(%user_map_id,26171,3,0,0)'); REPLACE INTO `cq_action` VALUES (1001, 0, 0, 0126, 0, 'HP:%iter_var_data3'); REPLACE INTO `cq_action` VALUES (1002, 0, 0, 0126, 0, 'Get failed, the monster does not exist or HP is 0'); -- Check max HP REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0325, 0, 'mapmonsterhp(%user_map_id,26171,3,0,1)'); REPLACE INTO `cq_action` VALUES (1001, 0, 0, 0126, 0, 'Max HP:%iter_var_data3'); REPLACE INTO `cq_action` VALUES (1002, 0, 0, 0126, 0, 'Get failed, the monster does not exist or max HP is 0');
-- Check current HP REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0325, 0, 'mapmonsterhp(%user_map_id,26171,3,1,0)'); REPLACE INTO `cq_action` VALUES (1001, 0, 0, 0126, 0, 'HP:%public_var_data3'); REPLACE INTO `cq_action` VALUES (1002, 0, 0, 0126, 0, 'Get failed, the monster does not exist or HP is 0'); -- Check max HP REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0325, 0, 'mapmonsterhp(%user_map_id,26171,3,1,1)'); REPLACE INTO `cq_action` VALUES (1001, 0, 0, 0126, 0, 'Max HP:%public_var_data3'); REPLACE INTO `cq_action` VALUES (1002, 0, 0, 0126, 0, 'Get failed, the monster does not exist or max HP is 0');
false if monster doesn't exist or is deadtype 317 to create HP-based event counters.
Deletes the item that triggered the action chain. Requires specifying the ItemTypeID and should be the last action in a sequence.
data field must contain the ItemTypeIDdata = ItemTypeID param = "" (empty)
-- Delete current item (verified) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0498, 729011, ''); -- Full item exchange workflow: REPLACE INTO `cq_action` VALUES (1001, 1002, 0000, 0501, 500002, '1 1 2 0 0 0 0 0 200 0 0 0'); -- Give reward REPLACE INTO `cq_action` VALUES (1002, 1003, 0000, 1010, 2005, 'You received Eudemon Crystal.'); -- Announce REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0498, 729011, ''); -- Delete original item (LAST!)
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0498, 0, ''); -- ERROR: Missing ItemTypeID
Handles batch operations for ranges of items with binding status control.
data=0REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0507, 0, '743032 743032 10');
Parameters: "start_id end_id quantity"
REPLACE INTO `cq_action` VALUES (1001, 1003, 0000, 0506, 0, '743032 743032 10');
data |
Behavior | Engine Support |
|---|---|---|
| 0 | Ignore binding status (delete/check all) | Old & New Engine |
| 1 | Delete/check both bound and unbound | New Engine Only |
| 2 | Only affect bound items | New Engine Only |
-- Check for 10 Flower Cards (ID 743032) REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0507, 0, '743032 743032 10'); -- Success path: Delete 10 Flower Cards REPLACE INTO `cq_action` VALUES (1001, 1003, 0000, 0506, 0, '743032 743032 10'); REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0126, 0, 'You have given 10 flower cards'); -- Failure path REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Sorry, but you don`t have 10 flower cards');
type 501 for exchange systemsVerifies if a player has specific equipment in a particular slot.
data = Equipment slot position param = ItemTypeID to check
REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0511, 4, '480001'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Weapon equipped'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Weapon not equipped');
| Position | Value | Description |
|---|---|---|
| Helmet | 1 | Head slot |
| Necklace | 2 | Amulet/necklace slot |
| Armor | 3 | Armor slot |
| Weapon | 4 | Weapon slot |
| Ring | 7 | Ring slot |
| Shoes | 8 | Foot slot |
| Casual | 12 | Casual slot |
| Wardrobe Toy | 38 | Toy slot (New Engine) |
id_next for equipped caseid_nextfail for unequipped casetype 503 to check both equipment and inventory items.
Enables user to teleport to team members location. Requires party membership.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0517, 0, '');
-- Portal Scroll item action chain REPLACE INTO `cq_action` VALUES (1000, 1001, 0, 0517, 0, ''); REPLACE INTO `cq_action` VALUES (1001, 0, 0, 0126, 0, 'Teleported to teammate!');
Used to identify unknown equipment using a scroll, like the Equipment Scroll (ItemID: 810004).
-- Use Equipment Scroll (ItemID 810004) to identify an item REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0519, 0, '');
Used to identify an Eudemon using an identification scroll, checking its stats and quality. This action is triggered by using the Eudemon Scroll (ItemID: 810002).
-- Use Eudemon Scroll (ItemID 810002) to identify an Eudemon's stats REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0520, 0, '');
cq_eudemons table.These actions allow players to create Eudemons directly in their inventory. Each type corresponds to different star ratings of Eudemons:
Type 526: Create a 12-star XO Eudemon directly in the player's inventory.Type 527: Create an 8-star O Eudemon directly in the player's inventory.Type 530: Create a 6-star O Eudemon directly in the player's inventory.Type 531: Create a 19-star XO Eudemon directly in the player's inventory.-- Check if the player has enough space in the inventory (Eudemon bag 53) REPLACE INTO `cq_action` VALUES (1000, 1001, 1003, 0508, 0, '1 0 53'); -- Create 12-Star XO Eudemon (ID 815038) REPLACE INTO `cq_action` VALUES (1001, 1002, 0000, 0526, 0, ''); -- Remove the used item (creation item used) REPLACE INTO `cq_action` VALUES (1002, 1004, 0000, 0502, 815038, ''); -- Notify the player of insufficient space if needed REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0126, 0, 'You need 1 free space in your inventory.'); -- Confirm the success of the creation REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 0126, 0, 'Congratulations! You have obtained a 12-Star UniversalXO!');
Type 0502 is used to remove the item (used for the Eudemon creation) after successful creation.Type 0126 provides feedback messages, like informing the player if there is insufficient space or confirming the successful creation of the Eudemon.Type 503 before attempting to create the Eudemon.Type 503 action should handle the check for available space before the creation.Type 0126 to notify the player if their inventory is full, or confirm successful creation with a custom message.Used for checking and modifying Eudemon stats. A common example is changing an Eudemon’s elemental type using an item like Thunder Juice (ItemID: 831002).
Type 523: Checks multiple conditions related to the Eudemon — ownership, summon status, level, state, etc.Type 524: Applies a stat change to the Eudemon — such as setting its damage, level, or element. Only one condition per statement allowed.-- Check: must be user's Eudemon, summoned, alive, level 1, and not already thunder REPLACE INTO `cq_action` VALUES (1000, 1002, 1001, 0523, 0, 'ismyselfeudemon == 1,iscallout == 1,isalive == 1,level == 1,damage != 5'); -- Failure Message: not valid target REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Thunder Juice can only be used on level 1 Eudemons.'); -- Set Eudemon damage element to 5 (Thunder) REPLACE INTO `cq_action` VALUES (1002, 1003, 0000, 0524, 0, 'damage 5'); -- Delete the used Thunder Juice item REPLACE INTO `cq_action` VALUES (1003, 1004, 0000, 0498, 831002, ''); -- Announce to local system message REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 1010, 2005, '%target_name has changed its race to Thunder!');
damage 5 or level 2)ismyselfeudemon ensures the target belongs to the playeriscallout ensures the Eudemon is currently summonedisalive ensures it's not dead or dismissedismyselfeudemon == 1 → belongs to the playeriscallout == 1 → summonedisalive == 1 → not deadlevel == 1 → required leveldamage != 5 → not already thundergodlevel == 1 → required levelid_nextfail for 523 to show rejection reasonThis action creates a 25-star XO Eudemon directly on the player's body. The param determines the number of stars, with a value of 0 indicating a 25-star XO Eudemon. Other values can be used to create Eudemons with different star ratings.
Type 538: Creates a specified star-rated XO Eudemon directly on the player's body.param = 0, a 25-star XO Eudemon is created.param = 3500), it creates a corresponding number of stars (e.g., 35-star XO Eudemon).-- Check for free space in the player's Eudemon bag (inventory bag 53) REPLACE INTO `cq_action` VALUES (1000, 1002, 1001, 0508, 0, '1 0 53'); -- Failure Message: not enough space in inventory REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You need 1 free space in your inventory.'); -- Remove 1 used creation item (e.g., Eudemon creation item) REPLACE INTO `cq_action` VALUES (1002, 1003, 0000, 0540, 1024838, 'amount += -1'); -- Create 25-star XO Eudemon directly on the player's body REPLACE INTO `cq_action` VALUES (1003, 1004, 0000, 0538, 0, '2500'); -- Success Message: Notify the player of the Eudemon creation REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 0126, 0, 'You received 25-star XO Eudemons.');
Type 0508 checks if there is enough space in the player's Eudemon bag (inventory bag 53) before proceeding with the Eudemon creation.Type 0540 removes the used creation item (such as a scroll or other item used to trigger the Eudemon creation).Type 0538 actually creates the Eudemon on the player's body with a specified number of stars (e.g., 25 stars). The param value can be customized to create Eudemons with other star ratings (e.g., param = 3500 creates a 35-star XO Eudemon).Type 0126 sends feedback messages to the player — either about inventory space or confirmation of the Eudemon creation.Type 0508.param value accordingly (e.g., 3500 for 35 stars).id_nextfail to handle space issues or prevent creation if prerequisites aren’t met.Type 801 is used to drop items, money, or traps after a monster is killed. The parameters supported are `dropitem`, `dropmoney`, and `droptrap`. You can specify the item type, money amount, or a trap to be dropped. The new engine extension also allows for specifying the quantity for item drops. Below are examples of how to use this action type:
-- Drop an item with ItemTypeID 131000
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0801, 0, 'dropitem 131000');
-- Drop 100,000 money
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0801, 0, 'dropmoney 100000');
-- Drop a trap with ID 3000 (trap ID from cq_trap) and life period 30 (seconds)
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0801, 0, 'droptrap 3000 30');
-- New Engine Only: Drop 3 items of ItemTypeID 723003
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0801, 0, 'dropitem 723003 3');
| Field | Operator | Description | Example |
|---|---|---|---|
| dropitem | itemtype |
Drop a specified item by ItemTypeID | `dropitem 131000` (drop item with ItemTypeID 131000) |
| dropmoney | money |
Drop a specified amount of money | `dropmoney 100000` (drop 100,000 money) |
| droptrap | trap_id lifeperiod |
Drop a trap with a specified ID (from cq_trap) and a life period |
`droptrap 3000 30` (drop trap with ID 3000, with a life period of 30 seconds) |
| dropitem (New Engine Only) | itemtype quantity |
Drop a specified quantity of a given item | `dropitem 723003 3` (drop 3 items of ItemTypeID 723003) |
Type 802 is used to check, learn, or upgrade player skills (spells). The param supports multiple modes:
check type – Check if the player has learned the skill with type type.check type level – Check if the player has learned a skill of type type at a specific level.learn type – Learn a spell of type at level 0.uplevel type – Upgrade an existing spell of type to the next level.Note: The type value refers to the spell ID from cq_magictype.
-- Check if skill 8001 is already learned REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0802, 0, 'check 8001'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 1010, 2005, 'You already learned this skill'); -- Learn the skill 8001 if not yet learned REPLACE INTO `cq_action` VALUES (1002, 1003, 0000, 0802, 0, 'learn 8001'); REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 1010, 2005, 'You learned a new skill!');
-- Upgrade skill 3011 to the next level REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0802, 0, 'uplevel 3011');
-- Check if player has learned skill 3011 at level 0 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 0802, 0, 'check 3011 0'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your skill is level 1'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Your skill is not level 1');
| Format | Function | Example |
|---|---|---|
check type |
Check if the player has learned this skill | check 8001 |
check type level |
Check if the skill is at the given level | check 3011 0 |
learn type |
Learn the skill (adds skill at level 0) | learn 8001 |
uplevel type |
Increase the spell's level by 1 | uplevel 3011 |
check before learn to prevent duplicate skills.cq_magictype.uplevel carefully — it assumes the player already has the skill.id_nextfail when checking skills to show appropriate fallback messages.Type 5001 checks the player's VIP level or sets it directly (new engine only). You can use this to branch actions depending on the player's VIP status, or upgrade the VIP level programmatically. Supported operators include ==, >, <, >=, <=, and = (only in new engine for setting VIP).
-- Check if VIP level is exactly 4 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 5001, 0, '== 4'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You`re vip 4'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You`re not vip 4'); -- Check if VIP is greater than 3 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 5001, 0, '> 3'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your vip is higher than 3'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Your vip is less than or equal to 3'); -- Check if VIP is less than 4 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 5001, 0, '< 4'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your vip is less than 4'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Your vip is 4 or higher'); -- Check if VIP is 5 or higher REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 5001, 0, '>= 5'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your vip is 5 and above'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Your vip is less than 5');
-- Set player's VIP level to 4 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 5001, 0, '= 4');
==, >, <, >=, or <= to perform condition checks.= to directly assign a VIP level to the player. Only works in the New Engine.account database and player database must be in the same database schema.= to set VIP level is only supported in the new engine.Type 1503 is used to check various attributes of a player's summoned Eudemon, such as its star rating, callout status, damage type, and other attributes. Type 1504 is used for deleting Eudemons, with specific checks related to the summoned Eudemon. The New Engine introduces the newtype parameter to more specifically refer to Eudemons, as well as additional support for deskknight and syndicate checks.
-- Check if Eudemon's damage type is 5 (Thunder) and if it's summoned REPLACE INTO `cq_action` VALUES (1000, 1001, 1004, 1503, 0, 'damagetype == 5 callout == 1'); -- Check if Eudemon's type is 42 (Warrior Lulu) and if it's summoned REPLACE INTO `cq_action` VALUES (1001, 1002, 1005, 1503, 0, 'type == 42 callout == 1'); -- Check if Eudemon's type is 42 (Warrior Lulu) and then delete it REPLACE INTO `cq_action` VALUES (1002, 1003, 0000, 1504, 0, 'type == 42 callout == 1'); -- Display message if Eudemon has been deleted REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0126, 0, 'Your Warrior Lulu has been deleted.'); -- Display message if Eudemon is not of Thunder damage type REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 0126, 0, 'Your pet is not thunder.'); -- Display message if no Warrior Lulu is summoned REPLACE INTO `cq_action` VALUES (1005, 0000, 0000, 0126, 0, 'Please summon Warrior Lulu first.');
New Engine introduces newtype to replace type, with the algorithm itemtype / 10 to specify the exact Eudemon. Additionally, deskknight == 1 and syndicate == 1 can be added to check whether the desk knight and the legion totem have been registered.
-- Check if Eudemon's star is less than 500. REPLACE INTO `cq_action` VALUES (1000, 1001, 1004, 1503, 0, 'star > 500,callout == 1'); -- Use newtype (itemtype / 10) for more specific Eudemon type REPLACE INTO `cq_action` VALUES (1001, 1003, 1005, 1503, 0, 'newtype == 107019,callout == 1'); -- Eudemon with itemtype 107019, newtype = 107019 -- Delete Eudemon of newtype 107019 REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 1504, 0, 'newtype == 107019,callout == 1'); -- Display message if Eudemon star is less than 500. REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 0126, 0, 'Your eudemons is less than 5 star.'); -- Display message if not specific Eudemon type. REPLACE INTO `cq_action` VALUES (1005, 0000, 0000, 0126, 0, 'Please summon Kong first.');
| Field | Operator | Description | Example |
|---|---|---|---|
| star | <, >, ==, >=, <= |
Check or compare the star level of the Eudemon | `star < 500` (check if star is less than 500) |
| callout | == |
Check if the Eudemon is summoned | `callout == 1` (check if summoned) |
| damagetype | == |
Check the damage type of the Eudemon | `damagetype == 5` (check if the damage type is Thunder) |
| type / newtype | == |
Check the Eudemon type | `type == 42` |
| newtype (new engine) | == |
Check the Eudemon specific type | `newtype == 107019` (check for a specific Eudemon ID) |
| deskknight (new engine) | == |
Check if the desk knight is registered | `deskknight == 1` |
| syndicate (new engine) | == |
Check if the syndicate (legion totem) is registered | `syndicate == 1` |
callout field to check if an Eudemon is currently summoned (1 for summoned, 0 for not summoned).newtype to refer to Eudemons more specifically, calculated as itemtype / 10.damagetype, use 5 for Thunder element Eudemons.Type 1531 is used to resurrect dead Eudemons. The behavior of the action is controlled by the data field:
-- Old Engine: Revive only summoned dead Eudemons REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1531, 0, ''); -- New Engine: Revive all dead Eudemons (including unsummoned ones) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1531, 1, '');
| Data | Engine | Effect |
|---|---|---|
0 |
Old & New | Revives only currently summoned (in-battle) dead Eudemons. |
1 |
New Engine Only | Revives all dead Eudemons, including unsummoned ones. |
data = 0 for compatibility with both old and new engines.data = 1 only if your server runs the new engine and you want to fully restore all fallen Eudemons.Type 1539 is used to resurrect the player character, but only if the player is dead and the internal cooldown time has passed. Type 1540 is used to instantly revive all Eudemons, including those not currently summoned, without any time check. Useful for full revives during events or special rewards.
-- Check if player is dead REPLACE INTO `cq_action` VALUES (1000, 1001, 0000, 1001, 0, 'life == 0'); -- Resurrect character if time condition is met REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 1539, 0, '');
life == 0).-- Instantly revive all Eudemons, summoned or not REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1540, 0, '');
0126 to display messages like "You have been revived!"These action types control the log delivery system using a cart (style 991–994). Players can begin a delivery run with a specified wood quantity, unit price, and time limit. During delivery, teleporting is restricted. Delivery ends when the task is complete or aborted manually.
-- Start delivery: 1000 logs, 100 gold each, 3600 seconds (1 hour), cart style 991 REPLACE INTO `cq_action` VALUES (1001, 1004, 1003, 1511, 991, '1000 100 3600'); -- Player can't buy logs due to flying status or insufficient gold REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0126, 0, 'Unable to buy these logs when you are flying or don`t have enough gold.'); -- Delivery start confirmation message REPLACE INTO `cq_action` VALUES (1004, 0000, 0000, 0126, 0, 'You must deliver 1,000 logs to the destination within one hour.');
-- End the delivery run manually or upon completion REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1512, 0, '');
-- Check if the player is currently in delivery REPLACE INTO `cq_action` VALUES (1000, 1001, 0000, 1513, 0, ''); -- Player is delivering, block teleport REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Sorry, you can`t be teleported during delivery.');
woodquantity – Logs to deliver (e.g. 1000)unitprice – Gold per log (e.g. 100)endtime – Time limit in seconds (e.g. 3600 = 1 hour)1513 to block such actions.0126 so players know delivery status or failure reasons.Type 1514 manages life skills such as Delivery Skill (ID 300). It supports:
learn – To learn a new life skillcheck – To check if the player has the skill, or verify its leveladdexp – To increase skill EXP-- Learn delivery skill (ID 300) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1514, 0, 'learn 300');
-- Check if skill 300 is level 9 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1514, 0, 'check 300 9');
-- Add 1000 EXP to skill 300 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1514, 0, 'addexp 300 1000');
learn [id] – Learns the specified life skill.check [id] [level] – Verifies if the player has the skill at that level. Level can be skipped to just check if learned.addexp [id] [amount] – Adds EXP to that skill (triggers level-up if thresholds met).check before allowing delivery quests or crafting tasks.addexp after events.TrainReward was supported in older engines but i dont know how it works.Type 1515 is used to check how many Eudemons the player currently has summoned. The action checks the value of callout_num, which represents the number of Eudemons currently summoned. Based on the value, the system can return different messages.
-- Check if the player has fewer than 1 summoned Eudemon REPLACE INTO `cq_action` VALUES (1000, 1003, 1004, 1515, 0, 'callout_num < 1'); -- Check if the player has fewer than 2 summoned Eudemons REPLACE INTO `cq_action` VALUES (1001, 1003, 1004, 1515, 0, 'callout_num < 2'); -- Check if the player has fewer than 3 summoned Eudemons REPLACE INTO `cq_action` VALUES (1002, 1003, 1004, 1515, 0, 'callout_num < 3'); -- Player message if not all Eudemons are summoned REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0126, 0, 'Please summon all eudemons first!');
<, ==, >callout_num == 1 to check if exactly 1 Eudemon is summoned.callout_num < 1 or similar checks to ensure that players have summoned the required number of Eudemons for an event or task.0126 to notify players if they need to summon additional Eudemons.callout_num < 2 or higher. Use callout_num == 1 for such checks in older engines.Type 1518 is used to add experience time for leveling up. The experience is calculated based on 432 seconds (1 minute) of monster killing experience multiplied by the monster's experience multiplier.
The data parameter in this action i cant figure it out what is this:
-- Add 4500 seconds of experience (1 minute = 432 seconds) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1518, 3, 'uplevtime += 4500'); -- Add 304 seconds of experience REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1518, 2, 'uplevtime += 304'); -- Add 1800 seconds of experience REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1518, 1, 'uplevtime += 1800');
-- Add 77760 seconds of experience in the new engine REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1518, 2, 'uplevtime += 77760');
uplevtime – The experience time added for leveling up. It is calculated in seconds, and can be modified based on the experience multiplier for the monster type.uplevtime action accordingly.Type 1002 is used to fill up a player's attributes, such as their life and mana. You can specify which attribute to fill by passing life or mana as the parameter. This action can be used to instantly restore the player's life or mana to full.
-- Restore player's life REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1002, 0, 'life');
-- Restore player's mana REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1002, 0, 'mana');
life – Fills the player's life attribute to full.mana – Fills the player's mana attribute to full.life and mana to instantly restore the respective attributes during battle or events.Type 1003 is used to change the player's map. It requires the map ID, the X and Y coordinates, and optionally a flag to allow prison exit. By default, players cannot exit the prison, but setting the bPrisonChk parameter to 1 allows them to do so.
-- Change map to ID 1000, position (280, 411), allowing prison exit (bPrisonChk = 1) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1003, 0, '1000 280 411 1');
idMap – The ID of the target map to change to.nPosX – The X-coordinate for the new position on the map.nPosY – The Y-coordinate for the new position on the map.bPrisonChk – Optional parameter:
0 – Cannot exit the prison (default behavior).1 – Allows the player to exit the prison.bPrisonChk = 1 to enable this feature.Type 1004 is used to record the player's current position on the map, allowing them to return to this point later. The parameters include the map ID, X-coordinate, and Y-coordinate.
-- Record the player's position on map ID 1000 at coordinates (316, 467) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1004, 0, '1000 316 467');
idMap – The ID of the map where the point is being recorded.nMapX – The X-coordinate for the recorded point.nMapY – The Y-coordinate for the recorded point.Type 1006 is used to change the player's map to a previously recorded point. This action helps players quickly travel back to a saved location. Make sure to first set the checkpoint using Type 1004 before attempting to use this action.
-- Change to the recorded map point (ID 1000030) REPLACE INTO `cq_action` VALUES (1000030, 0000, 0000, 1006, 0, '');
idMap – The map ID of the recorded point to travel to.Type 1004 before using Type 1006 to change maps to that recorded point.Type 1008 is used to change the player's avatar. The parameter for this action is the ID of the new avatar that the player wants to switch to.
-- Change the player's avatar to ID 84 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1008, 0, '84');
id – The avatar ID to change to. This ID corresponds to a specific avatar in the game.Type 1009 is used to check whether the player is currently in a specific state. It simply checks whether a status exists (i.e. whether the seconds remaining is greater than 0), without needing to calculate time ranges or expiration.
-- Check if the player is under EXP boost (state 158) REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1009, 0, '158 second > 0'); -- If true, show message REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You are currently under an EXP boost.'); -- If false, show alternate message REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You are not under an EXP boost.');
-- Check if Drop Rate Boost (State 889) is active REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1009, 0, '889 second > 0'); -- If active REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You are already in Drop Rate Boost status.'); -- If not active, apply 10x drop boost for 20s REPLACE INTO `cq_action` VALUES (1002, 1003, 0000, 4001, 0, '889 1000 20 0'); REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0126, 0, 'You have received 10x drop boost for 20 seconds.');
[state_id] second > 0 – Returns true if the player is in that status158 – EXP Boost43 – EXP Boost164 – Dragon Morph184 – Flying166 – Delivery Log889 – Drop Rate Boost248, 249, 1014 – Unknown0126 to provide user feedback.Type 4001 to apply statuses conditionally.Type 1014 is used to check whether the player is currently wearing a specific avatar. This is useful for avatar-based conditions such as quest checks, special dialogue, or restricted access features.
-- Check if the player is equipped with avatar ID 45 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1014, 0, 'ChkFace 45'); -- If true, show message REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You equip this avatar.'); -- If false, show alternate message REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You are not equip this avatar.');
ChkFace [id] – Checks if the current player face (avatar) matches the given ID.0126 to show clear feedback to the player.Type 1008.Type 1012 is used to manage the "God Blessing" status on a player. You can check if the blessing is active, or apply it using either add or addonly. The second parameter is always 1 (purpose unknown, just required). The last parameter is the duration in hours.
-- Adds blessing only if the player does not already have it (720 hours = 30 days) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1012, 0, 'addonly 1 720');
-- Adds blessing regardless of current status (24 hours = 1 day) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1012, 0, 'add 1 24');
-- Check if player has God Blessing active REPLACE INTO `cq_action` VALUES (1001, 1002, 1003, 1012, 0, 'check 1 0'); -- If not active REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You don\'t have blessing on you.'); -- If active REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0126, 0, 'You have blessing on you.');
add – Adds the blessing, even if one already exists. (just my theory)addonly – Adds the blessing only if none currently exists. (just my theory)check – Verifies if the blessing is active.1 – Always used in second position (actual meaning unknown, but required).duration – Length of the blessing in hours (e.g. 24 = 1 day, 720 = 30 days).addonly if you want to avoid refreshing or overwriting an existing blessing.add if you want to forcibly apply or refresh the blessing regardless of status. check with branching to show different messages depending on whether the blessing is active.0126 messages to notify players when blessings are applied or missing.Type 1020 is used to manage player skills. It supports checking, learning, leveling up, and adding EXP to specific magic skills. The skill type refers to the skill ID from cq_magictype.
-- Learn skill with ID 33001 (level 1) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1020, 0, 'learn 33001'); -- Learn skill 33001 at level 3 directly REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1020, 0, 'learn 33001 2');
-- Check if player has learned skill ID 1008 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1020, 0, 'check 1008'); -- If learned REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You already learn this skill'); -- If not learned REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You not learn this skill');
-- Add 5000 EXP to skill ID 5305 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1020, 0, 'addexp 5305 5000');
check [type] – Checks if the player has learned the skill ID.check [type] [level] – Checks if the player has the skill at a specific level.learn [type] – Teaches the player a new skill (defaults to level 0).learn [type] [level] – Teaches a skill at the specified level.uplevel [type] – Increases the level of an existing skill by 1.addexp [type] [exp] – Adds experience points to the specified skill.check before learn to avoid teaching duplicate skills.uplevel to simulate skill mastery over time or quests.addexp is useful for skill training systems or battle rewards.Type 1022 is used to write custom log entries to the GM log. This log is saved to the MSGServer/gmlog directory. The log message supports placeholders that automatically insert the triggering player's information such as name, ID, location, item, and NPC data.
-- Log player info, map, item, and NPC during action REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1022, 0, '%user_name[%user_id] Location(%user_map_id %user_map_x %user_map_y) ITEM(%item_type %target_name) NPC(%name %id %npc_x %npc_y) actionid = 930000070 param = e_money += 54000');
%user_name – Player's name%user_id – Player's ID%user_map_id – Current map ID%user_map_x – Player's X position%user_map_y – Player's Y position%item_type – Item type ID%target_name – Item or target name%name – NPC name%id – NPC ID%npc_x – NPC X coordinate%npc_y – NPC Y coordinateMSGServer/gmlog and can be reviewed by server staff.These action types are used to manage player marriage status in the game. Type 1025 checks if the player is married, while Type 1024 is used to perform a divorce action.
-- Check if the player is married REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1025, 0, ''); -- If not married REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You not married'); -- If already married REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You already married');
-- Perform divorce REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1024, 0, '');
Type 1025 before allowing marriage-related actions like teleportation or gifting.Type 1024 for NPC-based divorce options or special item effects.0126) to clearly inform the player of their status.Type 1026 is used to check the player's gender. It branches using id_next for male and id_nextfail for female. This is useful for displaying gender-specific messages or giving gender-specific items like casual outfits.
-- Check if player is male or female REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1026, 0, ''); -- Male REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You are male'); -- Female REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You are female');
In the new engine, the Star Guardian class (ID 110) uses different casual outfits. You need to check class first, then gender, before giving the appropriate item.
-- Check if class is Star Guardian (profession 110) REPLACE INTO `cq_action` VALUES (1000, 1001, 1010, 1001, 0, 'profession == 110'); -- Star Guardian gender check REPLACE INTO `cq_action` VALUES (1001, 1002, 1003, 1026, 0, '0'); -- Male Star Guardian gets item 198500 REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0501, 198500, 0); -- Female Star Guardian gets item 198520 REPLACE INTO `cq_action` VALUES (1003, 0000, 0000, 0501, 198520, 0); -- Other class gender check REPLACE INTO `cq_action` VALUES (1010, 1011, 1012, 1026, 0, '0'); -- Male (other class) gets item 194600 REPLACE INTO `cq_action` VALUES (1011, 0000, 0000, 0501, 194600, 0); -- Female (other class) gets item 194620 REPLACE INTO `cq_action` VALUES (1012, 0000, 0000, 0501, 194620, 0);
0 as a placeholder.id_next → Maleid_nextfail → Femaleprofession before gender if giving class-specific items.Type 0501 to give items based on gender.Type 1027 applies a visual special effect to the player or target. The effect can be visible to everyone, only the target, or only the triggering player. The effect name must match one defined in ini/3deffect.ini.
Type 1060 is used to remove effects applied by Type 1027. It uses the same format but clears the visual from the client. This is supported in new engine only.
-- Show effect to yourself (others can see) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1027, 0, 'self skill307'); -- Show effect to target (others can see) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1027, 0, 'target flower2'); -- Show effect to target (only target sees it) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1027, 0, 'targetlone flower-red');
-- Show chained effect only to self REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1027, 0, 'selflone shfbqqskill_spexx100');
-- Remove previously applied effect from self REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1060, 0, 'self shfbqqskill_spsxx100');
opt effect – Two-part value: visibility type and effect nameopt options:
self – Player sees the effect (public)target – Target sees the effect (public)targetlone – Only target sees the effectselflone – Only the triggering player sees the effecteffect – The effect ID or name as listed in ini/3deffect.iniself or target for effects visible to others.selflone or targetlone for personal/secret visuals.Type 1028 is used to perform operations on task masks. Task masks are used to track task-related flags using bit values (0–31). The action supports checking, adding, and clearing specific mask bits.
-- Check if task mask index 3 is active REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1028, 0, 'chk 3');
-- Set task mask index 4 to active REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1028, 0, 'add 4');
-- Clear task mask index 4 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1028, 0, 'clr 4');
chk idx – Checks if the bit at index idx is set.add idx – Sets the bit at index idx to 1 (mark as complete).clr idx – Clears the bit at index idx to 0 (reset).idx – The task mask index (range: 0 to 31).chk with id_next and id_nextfail to branch based on task progress.Type 1029 is used to trigger media playback on the client side. You can use it to play sound or video files that exist in the client directory. The param supports play or broadcast followed by the path to the media file.
-- Play a sound file (trap.wav) located in the "sound" folder of the client REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1029, 0, 'play sound/trap.wav 0 0 1');
opt media_path [0 0 1]opt – Action type:
play – Play the media for the triggering player only.broadcast – Broadcast the media to all nearby players (if supported).media_path – Path to the media file in the client folder (e.g. sound/trap.wav).0 0 1 values are typically reserved or unused in most cases, but must be included for format compatibility.play for personalized sound effects (e.g. when opening a chest).broadcast if you want the effect shared with other players in the area (new engine required).These actions are used to convert Eudemon cards from the cq_card or cq_card2 table into Eudemon Points (EP). When triggered, the system checks the player's card table, converts available entries to EP, sends the points to the player, and updates the card entry's used column to 1 (used).
cq_card cards are worth 270 EP each.
cq_card2 cards are worth 1380 EP each.
-- Checkout cq_card and convert to EP if exists REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1032, 0, ''); -- Success message REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You`ve taken out a Eudemon Card. Your Eudemon Points increased.'); -- Fail message REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You don`t have a Eudemon Card here.');
-- Checkout cq_card2 and convert to EP if exists REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1037, 0, ''); -- Success message REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You`ve taken out a Eudemon Card. Your Eudemon Points increased.'); -- Fail message REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You don`t have a Eudemon Card here.');
cq_card or cq_card2 table.used = 1 in the database1032 for standard card redemption (270 EP).1037 for higher-tier card redemption (1380 EP).0126 to inform the player whether the card was redeemed.Type 1039 is used to permanently delete one or more skills from the player. This type accepts up to 20 skill IDs in the param field. Once a skill is removed using this action, it cannot be restored at its previous level — if the player relearns it, the skill will start again from level 1.
-- Permanently remove multiple skills from the player REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1039, 0, '7010 7015 7002 7008 7000 7012 7013 7004 7003 6000 6004 6002 6001 6005 6003 6006 6040 6007 6008 6009');
type1 type2 ... type20 – A space-separated list of up to 20 skill type IDs (from cq_magictype) to be permanently removed.learn, it will restart at level 0.0126 messages to alert the player before and after removal.1020 uplevel or addexp afterward if you want to selectively regrant skills at a different progression pace.Type 1041 is used to notify the client to open a web page in the user's browser. This is useful for directing players to event pages, registration forms, donation portals, patch notes, or community links.
-- Open Knightfall Online website REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1041, 0, 'https://knightfall-online.com');
param – The full URL of the web page to open, including http:// or https://.Type 1044 is used to delete specific magic skills from a player, typically during rebirth, skill reset, or class change. You can specify up to 20 skill type IDs in the parameter (for new engine). Skills removed this way are permanent and will restart from level 0 if relearned.
-- Remove multiple skills during rebirth REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1044, 0, '17400 17100 17300 17000 18500');
-- Old engine supports only 1 skill per line REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1044, 0, '7012');
type1 type2 ... type20 – Space-separated list of skill type IDs (from cq_magictype).0126 messages when deleting important skills.1020 learn or uplevel to rebuild or replace skill sets.Type 1046 is used to open a client-side interface (UI dialog) by its ID. The data field determines which interface will appear. Different dialog IDs are supported depending on the engine version.
-- Open dialog ID 37 (Compose UI) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1046, 37, '');
data – ID of the interface/dialog to open on the client.Old Engine:
301, 300, 71, 70, 62, 61, 60, 59, 58, 56, 55, 53, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 31, 30, 29, 28, 27, 25, 24, 23, 22, 21, 19, 17, 16, 15, 14, 13, 12, 11, 10, 8, 7, 6, 5, 3, 1
New Engine:
10020, 10002, 10001, 10000, 1041, 927, 918, 917, 701, 602, 501, 421, 420, 419, 418, 415, 412, 410, 301, 300, 122, 121, 81, 80, 79, 74, 72, 60, 59, 58, 56, 55, 53, 49, 47, 43, 41, 40, 39, 37, 36, 35, 29, 28, 27, 25, 24, 23, 22, 21, 19, 16, 13, 12, 11, 10, 3, 1
10000+.Type 1052 is used to teleport the player to the main map’s respawn point. This action will automatically use the map's default revival location, based on the fields reborn_map, portal0_x, and portal0_y set in cq_map for the current map.
-- Teleport to the main map's configured respawn point REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1052, 0, '');
reborn_map, portal0_x, and portal0_y from cq_map according to the current map ID.reborn_map and portal coordinates in cq_map, or the teleport may fail.Type 1053 randomly teleports the player to any valid coordinate on the current map. This can be used for random warp scrolls, escape abilities, or event-based scattering.
-- Randomly teleport the player somewhere on the current map REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1053, 0, '');
Type 1027 to enhance the teleport animation.Type 1080 is used to manage custom task entries for the player. It supports creating tasks, deleting them, and checking if a task already exists. The task number is stored in cq_taskdetail, where its state can also be tracked or modified manually.
-- Create a new task with ID 1114 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1080, 1114, 'new');
-- Delete task ID 1114 from the player's task record REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1080, 1114, 'delete');
-- Check if the player has task ID 1114 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1080, 1114, 'isexit'); -- If task exists REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You task is exist.'); -- If task does not exist REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You task not exist.');
data – Task number to manage (e.g. 1114).param – Operation type:
new – Create a new task entry.delete – Delete the task entry.isexit – Check if the task exists for the player.isexit before giving or resetting a task to avoid duplicates.0126 to notify the player if the task was already created or removed.Type 1081 is used to operate on internal values of a task created with Type 1080. It can check or update task phase, completion count, or timing data. Useful for multi-stage quests, cooldowns, and advanced task conditions.
-- Reset the start time of task 1114 to current server time REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1081, 1114, 'begintime reset');
-- Check if task 1114 is in phase 3 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1081, 1114, 'phase == 3'); -- If task is in phase 3 REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You task currently in phase 3.'); -- If task is not in phase 3 REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You task is not in phase 3.');
-- Add 1 to the completion count of task 1114 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1081, 1114, 'completenum += 1');
data – Task ID to operate on. Use -1 to apply on the task returned by findnext.param – Format is: ope opt value
phase – Operates on task phase.completenum – Operates on completion count.begintime – Operates on task start time.data1, data2, data3, data4 – Custom data fields for new engine.opt – Operator used in the operation:
==, >= – Compare values= – Assign values+= – Increase value (or add seconds for begintime)reset – Only for begintime, resets to current timevalue – Can be number (e.g. 3), duration in seconds, or timestamp (yyyy-mm-dd hh:mm:ss)phase, completenum, data1–4 have no set limits.data = -1 if you're using findnext and want to operate on its result.0126 to inform the player of their progress or cooldowns.+= to advance task phase or increment completion count.reset with begintime to track time-based cooldowns or delays between attempts.Type 1082 is used to compare the current server time with the start time of a specific task. It checks whether the time passed since the task began exceeds the given number of seconds. This is useful for cooldowns, waiting periods, or time-limited quest progression.
-- Check if at least 300 seconds have passed since task 1114 started REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1082, 1114, '300'); -- If enough time has passed REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You are well-rested and may proceed with your mission.'); -- If not enough time has passed REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You need more rest before continuing. Please come back later.');
data – Task ID (set with Type 1080).param – Number of seconds to compare. Returns true if the elapsed time since the task started is greater than this value.1081 begintime reset when the task begins.0126 so players understand when they can retry.1080 and 1081 for full control over task state and timing.Type 1085 is used to write custom logs from scripts into a text file. Although originally marked as unused in official sources, it works in practice and allows writing formatted lines into a specified log file. This can be useful for event tracking, race results, or custom admin tools.
-- Write to gmlog/action_log.txt with formatted values REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1085, 0, 'gmlog/action_log 340,%user_name[%user_id],0,0,1,0,124,0,0,0');
folder/filename – Path to the log file, relative to MSGServer (e.g. gmlog/action_log).log content – The string to be written. Can include variables like:
%user_name%user_id~ for spaces in the message (e.g. %user_name~won~the~mount~race).gmlog with any folder name, such as eventlog, and change the filename like mount_race to create eventlog/mount_race.txt.-- Custom win message for event REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1085, 0, 'eventlog/mount_race %user_name~won~the~mount~race!');
Type 1086 is used to compare the current date with the start time of a specific task. It checks whether the number of full days passed since the task was created is greater than or equal to the given value. This is typically used for daily/weekly reward cooldowns or time-locked progression.
Important: Make sure the task is created first using Type 1080 (new), and its start time is set using Type 1081 (begintime reset).
-- Check if 4 days have passed since task 1114 started REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1086, 1114, '4'); -- If 4 days or more have passed REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You can receive reward now'); -- If not enough days have passed REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Sorry! You have received reward, please come after 4 days.');
data – Task ID created with Type 1080.param – Number of days to compare. Returns true if current time is greater than or equal to the required days since task start.Type 1080 to create the task.Type 1081 begintime reset to set the task start time.0126 to inform the player if they can claim or must wait.1085 to log redemptions when the cooldown expires.Type 1101 is used to send a custom message to the team chat channel. It allows for dynamic player announcements, progress sharing, or event notifications among team members. Variables like %user_name can be used to personalize the broadcast.
-- Broadcast to team: "[PlayerName]: I have completed Fire Tomb 2 times today." REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1101, 0, '%user_name: I have completed Fire Tomb 2 times today.');
param – The message to send. Can include player variables:
%user_name – Player's name%user_id – Player's ID (optional if needed)%user_name to personalize messages automatically for the triggering player.Type 1102 is used to check or operate on attributes of a team. You can check the number of teammates, the level or god level of members, or if specific types of relations like mate or friend are present. If the player is not in a team, the check will return false immediately.
-- Check if the player's mate is in the team REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1102, 0, 'mate'); -- If mate is found in the team REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your mate is in your team'); -- If mate is not found REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Your mate is not in your team');
-- Check if team size is less than 2 (need at least 1 teammate) REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1102, 0, 'count < 2'); -- If not enough teammates REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You need at least 1 teammate'); -- If requirement is met REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You can proceed now');
param – Format is field opt data depending on the field type.
level – Compare team member levels. Supports operators: <, >, ==.godlev – Compare team member god levels (new engine only). Supports operators: <, >, ==.count – Check total number of players in the team (including captain). Supports operators: <, ==.count_near – Check number of alive players on the same map. Supports operators: <, ==.mate – Check if the player's mate is in the team and alive. No operator needed, only the field name is required (new engine only).friend – Check if the player's friend is in the team and alive. No operator needed, only the field name is required (new engine only).count and other checks will immediately return false.mate and friend are new engine features and require the players to be alive and near.id_next and id_nextfail properly to branch based on check results.0126 to show clear reasons when blocking player actions.Type 1107 is used to teleport an entire team, including the team leader, to a new location. All team members must be alive, and the teleport must happen within the same map group (grouped maps only, not cross-world teleport).
-- Move the entire team to Map ID 8901 at coordinates (35, 48) REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1107, 0, '8901 35 48');
mapid – Target map ID where the team will teleport.x – Target X coordinate.y – Target Y coordinate.1102 count or count_near before calling this action.1027 visual effects for dramatic entrance effects after teleport.Type 1501 is used to check whether the player is currently the team leader. No parameters are needed for this action. This is useful when you want only the team leader to trigger certain actions like entering dungeons or starting events.
-- Check if the player is the team leader REPLACE INTO `cq_action` VALUES (1000, 1002, 1001, 1501, 0, ''); -- If player is leader REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'You are team leader.'); -- If player is not leader REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'You are not team leader.');
id_next will execute.id_nextfail will execute.1010 or 0126 message to inform players why an action is blocked.1102 count to further check if the team has enough members.Type 1508 is used to trigger a Lottery event related to entries in the cq_lottery table. The action uses data and param fields to specify draw settings, although full behavior depends on server handling and table setup.
-- Trigger a Lottery with color = 1 and type = 5 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 1508, 1, '5');
data – Assumed to be the "color" field in cq_lottery.param – Assumed to be the "type" field in cq_lottery.color and type must match entries inside cq_lottery for the draw to succeed.cq_lottery using the color and type values provided and select an appropriate reward randomly.cq_lottery database entries.cq_lottery table is correctly populated and balanced to avoid empty draws.Types 1521–1524 are used to manage temporary user variables (integer or string) during script execution. These variables are NOT saved into any database. They only exist during the current session and will be lost if the player logs out or if the server restarts. Useful for short-term event tracking, temporary counters, or dynamic scripting without needing database storage.
Initialize an integer variable. You can directly set it to a fixed number or assign a random value within a range.
-- Initialize var(3) to 0 REPLACE INTO `cq_action` VALUES (1000, 1001, 0000, 1521, 0, 'var(3) set 0'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your Integer variable 3 is %iter_var_data3');
-- Initialize var(2) to random between 10 and 50 REPLACE INTO `cq_action` VALUES (1000, 1001, 0000, 1521, 0, 'var(2) randset 10 50'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your Integer variable 3 randset is %iter_var_data2');
Perform operations on integer variables like adding, dividing, multiplying, or comparing values.
-- Increase var(3) by 1 REPLACE INTO `cq_action` VALUES (1000, 1001, 0000, 1522, 0, 'var(5) += 1'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your Integer variable 5 is %iter_var_data5');
-- Take var(5) and get remainder after division by 3 REPLACE INTO cq_action VALUES (1000, 1001, 0000, 1522, 0, 'var(5) $= 3'); REPLACE INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your Integer variable 5 after modulo 3 is %iter_var_data5');
== – Compare if equal+= – Add a value/= – Divide by a value (New Engine)*= – Multiply by a value (New Engine)$= – Modulo (remainder after division) operation (New Engine)Compare text variables (not case sensitive). Useful for checking user input, answers, or choice selections.
-- Compare if var(8) equals 50 REPLACE INTO `cq_action` VALUES (1000, 1001, 1002, 1523, 0, 'var(8) == Untungla'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your String variable 8 is Untungla'); REPLACE INTO `cq_action` VALUES (1002, 0000, 0000, 0126, 0, 'Your String variable 8 is not Untungla');
-- Set var(3) to "Sembang~Lebat" REPLACE INTO `cq_action` VALUES (1000, 1001, 0000, 1524, 0, 'var(3) set Sembang~Lebat'); REPLACE INTO `cq_action` VALUES (1001, 0000, 0000, 0126, 0, 'Your string variable 3 is %iter_var_str3');
var(n) will link to system variables like %iter_var_dataX (integer) or %iter_var_strX (string).%iter_var_data0 ~ %iter_var_data99 (100 slots for integers)%iter_var_str0 ~ %iter_var_str19 (20 slots for strings)%iter_var_data0 ~ %iter_var_data9 (10 slots for integers)%iter_var_str0 ~ %iter_var_str9 (10 slots for strings)randset is only available for integers (1521).Type 1534 is used to count how many specific items a player owns, and save the result into a player variable (iter_var_data field).
data = item_type_idszParam = "var_id bind_flag"cq_itemtype)-- Count all 1111210 items (bound + non-bound), save result into var(6) INSERT INTO cq_action VALUES (1000, 0000, 0000, 1534, 1111210, '6 0');
-- Count only non-bound 1111210 items, save into var(1) INSERT INTO cq_action VALUES (1000, 0000, 0000, 1534, 1111210, '1 1');
Type 1533 is used to check or modify Eudemon (pet) attributes such as stars, rebirth, luck, god level, and more.
star (supports +=, <, >=, ==)uplevtime (supports +=, <, >=, ==)rebornlimitadd (supports +=, <, >=, ==)luck (supports +=, <, >=, ==)iscallout (supports ==) — Check if summoned or notalive (supports ==) — Check if Eudemon is dead or alivestar (+=, <, >=, ==) – can directly increase/decrease starsrebornlimitadd (+=, <, >=, ==)luck (+=, <, >=, ==) – ⚠️ New engine: Adjusting luck does NOT affect stars automaticallydamagetype (=, ==)alive (==)iscallout (==)egg (==)godlev (+=, <, >=, ==)upgodlevtime += value – add divine EXP (multiplying 432)reborn (+=, >=, ==) – auto updates scorerebornandday (+=) – rebirth limited to once per dayattribute operator value
Example: star >= 30 or alive == 0
-- Check if pet is dead INSERT INTO cq_action VALUES (1000, 1001, 1002, 1533, 0, 'alive == 0'); -- If dead INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your eudemon is dead.'); -- If alive INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Your eudemon is alive.');
-- Add +1 to eudemon rebirth (and auto update rating) INSERT INTO cq_action VALUES (2000, 0000, 0000, 1533, 0, 'reborn += 1');
-- Check if God Level is at least 5 INSERT INTO cq_action VALUES (1000, 1001, 1002, 1533, 0, 'luck >= 50'); -- If above INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your eudemon luck is greater than or equal to 50.'); -- If below INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Your eudemon luck is less than or equal to 50.');
reborn and rebornandday for new systems instead of manual rebornlimitadd editing.luck += 1 does NOT increase pet stars automatically. Use star += if needed.
Type 2003 and Type 2004 are used to compare system or player attributes dynamically during script execution.
data1 opt data2%user_map_id, %user_map_x, %iter_var_data7)-- Type 2003 (Signed) - Allow negative number INSERT INTO cq_action VALUES (1000, 0000, 0000, 2003, 0, '%iter_var_data7 < -4');
-- Type 2004 (Unsigned) - Positive only INSERT INTO cq_action VALUES (1000, 0000, 0000, 2004, 0, '%user_map_id == 8971');
Type 2003 when your variable might be negative. Use Type 2004 when comparing IDs, positions, or timers that are always positive.
Type 2006 is used to create a monster (or summon) dynamically in the map. You must specify at least 7 parameters. The created monster will exist based on the parameters set.
nOwnerType idOwner idMap nPosX nPosY idGen idType [nData] [szName]accept parameter is used, it will rename monster based on accept stringszName provided at the end-- Create a monster without a custom name INSERT INTO cq_action VALUES (1000, 0000, 0000, 2006, 0, '0 0 %user_map_id 592 486 2013801 20138');
-- Create a Void Wraith monster with name INSERT INTO cq_action VALUES (1000, 0000, 0000, 2006, 0, '0 0 %user_map_id 465 637 9639001 12600 0 Void~Wraith');
cq_monstertype)~ instead of spaces)Void~Wraith format if you want custom monster names (replace spaces with ~).
Type 2007 is used to dynamically create a brand new NPC in the map. The created NPC will be stored in cq_dynanpc, not cq_npc.
name type sort lookface ownertype ownerid mapid posx posy [life base linkid task0-task7 data0-data3 datastr]-- Create basic blocking NPC INSERT INTO cq_action VALUES (1000, 0000, 0000, 2007, 0, 'Blocker 2 1 520410 0 0 %user_map_id 185 110');
-- Create full custom NPC with tasks and extra data INSERT INTO cq_action VALUES (1000, 0000, 0000, 2007, 0, 'Mallos 154 01 762530 0 0 %user_map_id 64 71 0 0 0 20080250 0 0 0 0 0 0 0 0 0 0 0 0');
~ instead of space)When creating an NPC, the lookface field controls its appearance and facing direction. It uses the format 52041x where x is the facing direction (0 to 7).
ini/npc.ini (example: 52041)
Type 2008 is used to check the number of monsters in the same map based on their generator ID or monster name. Useful for quests, event triggers, and hunting missions.
idMap field data opt num-- Check if number of monster generator ID 1000500 is less than 30 INSERT INTO cq_action VALUES (1000, 1001, 1002, 2008, 0, '%user_map_id gen_id 1000500 < 30'); -- If less than 30 INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Monster amount is less than 30.'); -- If not INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Monster amount is enough.');
-- Check if "Gory" monster is still alive INSERT INTO cq_action VALUES (1000, 1001, 1002, 2008, 0, '%user_map_id name Gory == 0'); -- If no Gory left INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'No more Gory monsters on map.'); -- If Gory still exists INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Gory monsters still alive.');
cq_generator (generator type ID)cq_monstertype (monster name)id_next and id_nextfail properly to handle success/fail pathType 126 to show friendly system messages after checking monster status!
Type 2009 is used to delete monsters from a specific map. You can delete based on monster type alone, or both type and monster name together.
idMap type [data] [name]cq_monstertype)-- Delete all monsters of type 23105 from map 1990 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2009, 0, '1990 23105');
-- Delete only "Amanyta" monsters of type 23105 from map 1990 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2009, 0, '1990 23105 0 Amanyta');
type is faster and more recommended for large map cleanupsname if you need to precisely target a specific monstercq_monstertype tableType 2011 is used to delete all dynamic NPCs (cq_dynanpc) of a specific type in a given map. Once deleted, you cannot perform any further operations on them.
idMap type%user_map_id for current user's map-- Delete all NPCs of type 2 from map 1990 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2011, 0, '1990 2');
-- Delete all NPCs of type 23 from current map INSERT INTO cq_action VALUES (1000, 0000, 0000, 2011, 0, '%user_map_id 23');
cq_dynanpc (dynamic created NPCs)2011 or you might remove unintended NPCs.
Type 2012 is used to make every player inside a specific map execute a specified action script immediately. Useful for mass events, global messages, or sudden teleportation.
idMap idAction -1%user_map_id for current mapcq_action to execute for each player-1 (purpose unknown but required)-- Run action 1002 for all players in map 1954 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2012, 0, '1954 1002 -1');
-- Run action 1002 for all players in user's current map INSERT INTO cq_action VALUES (1000, 0000, 0000, 2012, 0, '%user_map_id 1002 -1');
idAction exists in cq_action or nothing will happen.-1 is mandatory even though its function is unknown.Type 126 (system messages) or teleport actions for smooth mass events!
Type 2101 is used to create a trap in the map. Traps are invisible or visible triggers that perform actions when players step into them. Trap types are based on entries from cq_traptype table.
type look owner_id map_id pos_x pos_y data [pos_cx pos_cy]cq_traptype)-- Create trap at position (103, 144) on map 1000 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2101, 0, '11506 0 0 1000 103 144 0');
-- Create trap at (103, 144) with center offset (20, 20) INSERT INTO cq_action VALUES (1000, 0000, 0000, 2101, 0, '11506 0 0 1000 103 144 0 20 20');
type must match an ID inside cq_traptypelook = 0 for invisible traps (invisible teleport, triggers, etc.)pos_cx and pos_cy only if using New Engine features (larger trap trigger area)Type 2102 is used to delete (erase) a trap that was created. Once deleted, the trap is permanently removed and cannot be triggered or operated anymore.
-- Delete the current trap INSERT INTO cq_action VALUES (1000, 0000, 0000, 2102, 0, '');
2102 because it cannot be recovered after deletion.
Type 2103 is used to check the number of traps of a specific type within a defined area of the map. Useful for checking if traps have been activated, removed, or if an area is clear.
map_id pos_x pos_y pos_cx pos_cy count type%user_map_idcq_traptype)-- Check if number of trap ID 8839 in area (782,734) is less than 1 INSERT INTO cq_action VALUES (1000, 1001, 1002, 2103, 0, '%user_map_id 782 734 782 734 1 8839'); -- If trap count < 1 INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'No traps found in the area.'); -- If trap count >= 1 INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'There are still traps active.');
cq_traptype.trap erase or teleport traps for smoother map event handling.
Type 2105 is used to delete all traps of a specific type in a specific map. Once deleted, the traps are permanently removed and cannot be triggered or operated anymore.
map_id typecq_traptype)-- Delete all traps of type 9525 from map 1000 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2105, 0, '1000 9525');
cq_traptype.Type 4001 is used to apply a special status (buff, debuff, aura, etc.) to the player. Depending on engine version, you can set basic or extended parameters. The status will persist across relogin if saved into cq_special_status table, but will auto-remove after the timer expires.
status power secs timestatus power secs time other savedb-- Give status 245 for 86400 seconds (1 day) without database saving INSERT INTO cq_action VALUES (1000, 0000, 0000, 4001, 0, '245 0 86400 0');
-- Give status 245 for 86400 seconds (1 day) and save into cq_special_status INSERT INTO cq_action VALUES (1000, 0000, 0000, 4001, 0, '245 0 86400 0 0 1');
savedb = 1 stores the status in cq_special_status.secs expires.savedb=1 for buffs or event statuses that must survive relogin, but still expire automatically after time ends.
Type 4004 is used to remove an active player status. If the status is stored in cq_special_status, it can also be deleted from the database by setting DelDB = 1.
data = unused (use 0)param = statusID DelDBstatusID = The ID of the state to removeDelDB = 1 to delete from cq_special_status, 0 to remove from memory onlyREPLACE INTO cq_action VALUES (11000, 0000, 0000, 4004, 0, '2000 0');
REPLACE INTO cq_action VALUES (11001, 0000, 0000, 4004, 0, '2000 1');
Status effects can stack. Before applying a new title/status, always clear the previous ones to avoid visual or effect overlaps.
-- Clear all known title statuses (2000 to 2012) from cq_special_status and memory REPLACE INTO cq_action VALUES (12000, 12001, 0000, 4004, 0, '2000 1'); REPLACE INTO cq_action VALUES (12001, 12002, 0000, 4004, 0, '2001 1'); REPLACE INTO cq_action VALUES (12002, 12003, 0000, 4004, 0, '2002 1'); REPLACE INTO cq_action VALUES (12003, 12004, 0000, 4004, 0, '2003 1'); REPLACE INTO cq_action VALUES (12004, 12005, 0000, 4004, 0, '2004 1'); REPLACE INTO cq_action VALUES (12005, 12006, 0000, 4004, 0, '2005 1'); REPLACE INTO cq_action VALUES (12006, 12007, 0000, 4004, 0, '2006 1'); REPLACE INTO cq_action VALUES (12007, 12008, 0000, 4004, 0, '2007 1'); REPLACE INTO cq_action VALUES (12008, 12009, 0000, 4004, 0, '2008 1'); REPLACE INTO cq_action VALUES (12009, 12010, 0000, 4004, 0, '2009 1'); REPLACE INTO cq_action VALUES (12010, 12011, 0000, 4004, 0, '2010 1'); REPLACE INTO cq_action VALUES (12011, 12012, 0000, 4004, 0, '2011 1'); REPLACE INTO cq_action VALUES (12012, 0000, 0000, 4004, 0, '2012 1');
Type 4002 is used to trigger a magic-type effect directly on a player or target. Only specific types of magic (Detach Status or Steal Status) are supported. It is not used for regular damage skills.
data = magic type ID (from magictype table)szParam = magic level (optional, usually 0)-- Use magic type 5025 (must be MAGICSORT_DETACHSTATUS or MAGICSORT_STEAL) INSERT INTO cq_action VALUES (1000, 0000, 0000, 4002, 5025, '');
magictype table with correct magic sort type.szParam can specify magic level if needed (leave empty if default).Type 4003 is used to teach a specific skill to a Eudemon (pet). This allows controlling which pets can learn which skills and at what level they are allowed to learn.
data = skill_id × 10szParam = "skill_id * level_requirement"cq_magic-- Pet will learn skill 5003 at level 20 INSERT INTO cq_action VALUES (1000, 0000, 0000, 4003, 50030, '5003 * 20');
Type 8000 is used to start a countdown timer for a player. When the countdown reaches zero, a specified script will execute automatically. If data = 0, it will close any existing countdown without executing anything.
data = seconds (duration of countdown)szParam = action_id (script to execute when countdown ends)-- Start countdown for 120 seconds, run action 1001 after finish INSERT INTO cq_action VALUES (1000, 0000, 0000, 8000, 120, '1001');
-- Stop any existing countdown INSERT INTO cq_action VALUES (1000, 0000, 0000, 8000, 0, '');
data=0, it simply closes the countdown without running any script.
Type 8001 is an advanced countdown for players, supporting visual effects and interruption controls. It will display a message, optionally show an animation, and execute a script when the countdown ends. Countdown can be interrupted if configured.
data = seconds (duration of countdown)szParam = "can_interrupt action_id effect_name display_text"3deffect.ini (use "null" if no effect)-- 2 seconds countdown, can interrupt, no effect, shows "Collecting" INSERT INTO cq_action VALUES (1000, 0000, 0000, 8001, 2, '1 1001 null Collecting');
-- 5 seconds countdown, cannot interrupt, shows "Pulling out the Holy Sword" with RichGod_Ground effect INSERT INTO cq_action VALUES (1000, 0000, 0000, 8001, 5, '0 1001 RichGod_Ground Pulling~out~the~Holy~Sword');
-- Stop any existing countdown immediately INSERT INTO cq_action VALUES (1000, 0000, 0000, 8001, 0, '');
can_interrupt=1, countdown will stop.effect_name must exist in 3deffect.ini if not set to "null".display_text spaces must be replaced with ~ symbol.
Type 8002 is used to start a countdown timer specific for players inside a duplicate (instance) map. If the player leaves the map before the countdown ends, the timer is automatically cancelled without executing anything.
data = duplicate ID (must be from cq_duplicate)szParam = action_id (script to run after countdown ends)-- Start a countdown linked to duplicate ID 303, execute action 1001 when finished INSERT INTO cq_action VALUES (1000, 0000, 0000, 8002, 303, '1001');
cq_duplicate and Duplicate.ini.cq_duplicate set the teleport arrival coordinates.Type 8003,8005,8006 is used to start a hidden countdown timer for a player. The countdown will not display any visible time or message on the client's screen. When the countdown reaches zero, a specified action script will execute. Useful for stealth events, traps, or silent triggers.
data = seconds (duration of countdown)szParam = action_id (script to run after countdown ends)-- Start hidden countdown for 300 seconds, then run action 1001 INSERT INTO cq_action VALUES (1000, 0000, 0000, 8003, 300, '1001');
-- Stop any existing hidden countdown immediately INSERT INTO cq_action VALUES (1000, 0000, 0000, 8003, 0, '');
data = 0, it closes the countdown without running the script.
Type 8010 is used to change the player's pose (animation) based on the pose ID. The pose IDs are configured in the 3dmotion.ini file.
data = pose ID-- Set player pose to ID 335 INSERT INTO cq_action VALUES (1000, 0000, 0000, 8010, 335, '');
| Pose ID | Pose ID | Pose ID | Pose ID | Pose ID | Pose ID | Pose ID |
|---|---|---|---|---|---|---|
| 100 | 101 | 210 | 233 | 256 | 260 | 261 |
| 265 | 335 | 351 | 532 | 533 | 534 | 535 |
| 536 | 537 | 538 | 778 | 779 | 780 | 781 |
| 782 | 783 | 784 | 851 | 853 |
Type 8011 is used to initiate an automatic pathfinding movement across different maps. The system will automatically calculate the route based on predefined path information.
param = mapid x y-- Auto path to (388,476) on map 1000 INSERT INTO cq_action VALUES (1000, 0000, 0000, 8011, 0, '1000 388 476');
cq_acrossmappathinfo and AcrossMapPathInfo.ini entries are correct for smooth auto-path transitions!
Type 230 and Type 231 are used exclusively for the Celebrity Hall system. They must be performed by Celebrity Hall related NPCs only (Type 100).
cq_npc ID range 10200 to 11199-- Register player into Celebrity Hall INSERT INTO cq_action VALUES (1000, 0000, 0000, 0230, 0, '');
-- Sign up player for Celebrity Hall event INSERT INTO cq_action VALUES (1000, 0000, 0000, 0231, 0, '');
cq_npc range 10200–11199 and official Celebrity Hall system flow.
Type 1067 is used to check if the player's currently summoned Eudemon has already been registered by another player into the Celebrity Hall for this week. If yes, it will block further registration.
param empty)-- Check if current summoned Eudemon is already registered INSERT INTO cq_action VALUES (1000, 1001, 1002, 1067, 0, ''); -- If already registered INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Eudemons that you are currently summon already register in other statues and cannot be re-registered this week!');
Type 232 is used to register the player's ranking into the Divine Fire Statue system. This script type must only be performed by Divine Fire Statue NPCs inside Cronus whic is using type 125.
-- Register player into Divine Fire Statue ranking INSERT INTO cq_action VALUES (1000, 0000, 0000, 0232, 0, '');
Type 2020 is used to execute a script on players located inside a specific area on a map. You can define a rectangular zone and choose to affect all players or a limited number of players.
param = mapid x y cx cy scriptid count-- Trigger action 10519091 for all players inside area (106,406) ~ (118,418) on map 1000 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2020, 0, '1000 106 406 12 12 10519091 -1');
x,y and cx,cy.count = -1 if you want to trigger for all players in the zone.Type 1602 and NPC Type 126 are used together to manage PK Tournament Statue behavior inside the server. These functions allow updating the PK statue's appearance or settings during PK events.
cq_npc.-- Update PK Statue info for NPC 12850 INSERT INTO cq_action VALUES (1000, 0000, 0000, 1602, 0, '');
type = 126 inside cq_npc.Type 2015 deletes all monsters currently existing in the specified map.
param = mapid-- Delete all monsters in map 11052 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2015, 0, '11052');
Type 2016 removes all cq_dynanpc entries from the given map. This clears all scripted or event-based NPCs.
param = mapid-- Delete all dynamic NPCs in map 11052 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2016, 0, '11052');
cq_npc.Type 2017 deletes all traps from the specified map, regardless of type or origin.
param = mapid-- Delete all traps in map 11052 INSERT INTO cq_action VALUES (1000, 0000, 0000, 2017, 0, '11052');
Type 2101 or related trap scripts.Type 324 is used to spawn one or more items on the map at a specified coordinate. This can be used as a reward drop, quest item spawn, or map event chest drop.
Param = idItemType itemCount idMap x y nRange aliveSecs privSecscq_itemtype%user_map_id)%killmonster_x, %user_pos_x-- Spawn 30x item 1042068 near kill location, radius 16, lasts 10 minutes, protected for 10 seconds INSERT INTO cq_action VALUES (1000, 0000, 0000, 0324, 0, '1042068 30 %user_map_id %killmonster_x %killmonster_y 16 600 10');
cq_itemtypeprivSecs, item becomes free-for-allType 2019 creates a monster with extended attributes such as HP, damage reduction, and magic power. It's an upgraded version of Type 2018 with more control over the monster's stats.
nOwnerType idOwner idMap nPosX nPosY nDir idGen idType nHP nDefence2 nSealDevilVal nData szName-- Spawn Trial Judge monster with custom HP, defence, and power INSERT INTO cq_action VALUES (1000, 0000, 0000, 2019, 0, '0 0 %user_map_id 71 67 7 0 43003 100000000 10000 0 0 Trial~Judge');
cq_generator, but type field is ignored)accept, monster name will follow accepted value, else use szName
Type 187 is used to open a specific UI window on the client. This is typically used to trigger interfaces like Divine Furnace or other special panels. The param value is passed to the client and included in the packet, but its purpose is currently unknown.
data = window IDparam = client-side argument (optional, usage unknown)-- Open Divine Furnace UI (Window ID 13047) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0187, 13047, '0');
13047 – (Divine Furnace)param is included in the sent packet but function unknown (can sniff via packet capture).Type 1601 is used to send stage unlock and player-specific data to the client, usually after opening the Divine Furnace UI using Type 187. After stage unlocking (1202), two additional info are sent: last dungeon level (1203) and remaining entries (1204).
szParam = ID data1|2|3|4|5)%iter_taskdetail_1data800)%iter_taskdetail_completenum800)-- Step 1: Open Divine Furnace UI INSERT INTO cq_action VALUES (1000, 1001, 0000, 0187, 13047, '0'); -- Step 2: Send unlocked stages (1 to 5) INSERT INTO cq_action VALUES (1001, 1002, 0000, 1601, 0, '1202 1|2|3|4|5'); -- Step 3: Send last entered dungeon level INSERT INTO cq_action VALUES (1002, 1003, 0000, 1601, 0, '1203 %iter_taskdetail_1data800'); -- Step 4: Send remaining entry times INSERT INTO cq_action VALUES (1003, 0000, 0000, 1601, 0, '1204 %iter_taskdetail_completenum800');
1202 - Shows which stages are unlocked1203 - Displays last dungeon difficulty player entered1204 - Shows remaining allowed entriesType 1601 immediately after Type 187 to sync the UI correctly.
These types are used to implement a CAPTCHA-style quiz system. When triggered, a question will appear on the screen and the player must answer within the given time. You can check whether it's currently active and respond accordingly.
-- Show CAPTCHA for 99 seconds INSERT INTO cq_action VALUES (1000, 0000, 0000, 1065, 99, '');
-- Check if CAPTCHA UI is active, and branch accordingly INSERT INTO cq_action VALUES (1000, 1001, 1002, 1064, 0, ''); -- If wrong INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You answer wrong'); -- If right INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You answer right');
Type 1066 is used to forcefully disconnect a player from the server. This script must always be used as the final line in an action chain to prevent unexpected behavior.
data = 0 (unused)param = reason for disconnect-- Kick player with reason "Detected cheating behavior" INSERT INTO cq_action VALUES (1000, 0000, 0000, 1066, 0, 'Detected cheating behavior');
Type 134 is used to run a specific script (action ID) on a targeted player or guild. Only one target condition can be used per call. This is useful for personal rewards, guild triggers, or conditional execution based on name or ID.
param = [action_id] [target_type] [value]user_id – Player UID (unique account/player ID)user_name – Exact player name (case-sensitive)syn_id – Guild ID-- Run action 1001 for player with user_id 100000 INSERT INTO cq_action VALUES (1000, 0000, 0000, 0134, 0, '1001 user_id 100000');
-- Run action 1001 for player named "DuaSelipar" INSERT INTO cq_action VALUES (1000, 0000, 0000, 0134, 0, '1001 user_name DuaSelipar');
-- Run action 1001 for all players in guild ID 10 INSERT INTO cq_action VALUES (1000, 0000, 0000, 0134, 0, '1001 syn_id 10');
Type 1063 grants divine experience to all currently summoned pets that have evolved into Divine form. The amount of divine experience added is based on a multiplier formula depending on the duration specified.
data = minutes (length of boost time)param = empty-- Add Divine EXP equivalent to 5 minutes to all active Divine pets INSERT INTO cq_action VALUES (1000, 0000, 0000, 1063, 5, '');
divine EXP rate × 432 × minutesdata = 0 does nothing.Type 1480 checks whether team members have accepted a specific task. It operates based on the isexit condition, ensuring task requirements across the team.
data = task IDparam = [requirement] isexit1 isexit – All team members must have the task.0 isexit – Only one team member needs to have the task.INSERT INTO cq_action VALUES (1000, 1001, 1002, 1480, 1164, '1 isexit'); -- If all have the task INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'All of your team members have accepted this task.'); -- If any member does not have the task INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Some of your team members have not accepted this task.');
isexit condition (task existence check).Type 1481 is the team version of Type 1081, used to check internal task values (like phase or completion count) across party members. It only supports == and >= operations and must begin with a check mode flag.
data = task IDparam = [check_mode] field operator valuedata – Task ID to operate onparam – Format: [0/1] field operator value
phase, completenum, data1–data4== or >=-- Check if all team members have task 1200 in phase 2 INSERT INTO cq_action VALUES (1000, 1001, 1002, 1481, 1200, '1 phase == 2'); -- If all match INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'All team members are in phase 2.'); -- If someone doesn't match INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Someone in your team is not in phase 2.');
-- Check if at least one player has completed 5 times INSERT INTO cq_action VALUES (2000, 2001, 2002, 1481, 1200, '0 completenum >= 5'); -- If one or more match INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'Someone in your team has done this 5 or more times.'); -- If no one matches INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'No one in your team has done this 5 times yet.');
== and >= operators.0126 to give feedback to players.Type 1482 is the team-based version of Type 1082. It checks whether the cooldown period (in seconds) has passed since the start time of a specific task for one or all team members. Useful for team entry conditions, cooldown gates, and timed challenges.
data = task IDparam = [0/1] seconds0 – at least one member must satisfy the time condition1 – all members must satisfy the time conditiondata – Task ID to checkparam – Format: [check_mode] seconds0 = any member, 1 = all members-- Check if all members' task 1200 started more than 5 minutes ago INSERT INTO cq_action VALUES (1000, 1001, 1002, 1482, 1200, '1 300'); -- All passed INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'All of your team may proceed.'); -- At least one did not wait long enough INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Someone in your team must wait longer before proceeding.');
-- Check if any member passed cooldown INSERT INTO cq_action VALUES (2000, 2001, 2002, 1482, 1200, '0 300'); -- Success INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'At least one member is ready.'); -- Failure INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'No one in your team is ready yet.');
1081 begintime reset to set the task start time.Type 1486 checks if a specified number of full days have passed since the begintime of a task, for all or part of a team. This is the team-based version of Type 1086.
data = task IDparam = [0/1] daysdata – Task ID assigned via 1080param – Format: [check_mode] [day_count]-- Check if 4 days have passed for all team members INSERT INTO cq_action VALUES (1000, 1001, 1002, 1486, 1114, '1 4'); -- If all okay INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Everyone in your team can now continue.'); -- If at least one hasn't waited enough INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Someone in your team must wait longer before continuing.');
-- Check if any member waited at least 4 days INSERT INTO cq_action VALUES (2000, 2001, 2002, 1486, 1114, '0 4'); -- If one or more passed INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'One of your teammates is ready to proceed.'); -- If no one passed INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'None of your teammates have reached the cooldown time.');
1081 begintime reset to initialize the cooldown start time.
Type 1180 is used to manage new UI-based task entries. These tasks are displayed in the in-game panel (Story / Daily / Event), and stored in cq_newtaskdetail. It supports creating, deleting, and checking for task existence. It does not trigger any scripts from cq_newtaskconfig.
data = new task IDparam = new | delete | isexitnew – Creates a new task entrydelete – Deletes the task entryisexit – Checks whether the task exists for the player-- Create task 2001 (e.g., Beast Hunting) INSERT INTO cq_action VALUES (1000, 0000, 0000, 1180, 2001, 'new');
-- Remove task 2001 INSERT INTO cq_action VALUES (1000, 0000, 0000, 1180, 2001, 'delete');
-- Check if task 2001 exists INSERT INTO cq_action VALUES (1000, 1001, 1002, 1180, 2001, 'isexit'); -- If task exists INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'This task is already active.'); -- If task doesn't exist INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You don\'t have this task yet.');
cq_newtaskdetail.cq_newtaskconfig.Type 1180 to prepare new UI tasks, and combine with Type 1181 to update their status and data.
Type 1181 is used to manipulate or compare values within cq_newtaskdetail. This is the backbone for progressing new UI-based tasks. You can change phase, mark task complete, set custom counters (like kill count), and reset cooldown timers.
data = task IDparam = field operator valuephase – Task phase or stagecomplete – Task completion statebegintime – Time the task starteddata1 ~ data10 – Task-specific progress variables== – Equal to (check only)>= – Greater or equal (check only)+= – Increment (add number)= – Assign (set to specific value)reset – Only for begintime, resets to current time-- Add 1 kill to Beast Hunting Common Beast (task 2001, data1) INSERT INTO cq_action VALUES (1000, 0000, 0000, 1181, 2001, 'data1 += 1');
-- Mark task 2001 as complete INSERT INTO cq_action VALUES (1001, 0000, 0000, 1181, 2001, 'complete = 1');
-- Reset task 2001 start time INSERT INTO cq_action VALUES (1002, 0000, 0000, 1181, 2001, 'begintime reset');
-- Conditional check on task phase INSERT INTO cq_action VALUES (2000, 2001, 2002, 1181, 2001, 'phase >= 3'); -- If true INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'You have reached phase 3.'); -- If false INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'You have not reached phase 3 yet.');
1180 new to progress or update task state.cq_newtaskdetail.complete should be set to 1 when task is done.phase is often used for multi-stage growth tasks.data1~data10 for things like kill count, collection progress, etc. Phase is ideal for story or growth tasks!
Type 1182 checks whether a specified number of seconds has passed since the begintime of a new UI-based task stored in cq_newtaskdetail. This is useful for cooldown enforcement, retry restrictions, or time-locked progression.
data = task IDparam = seconds (e.g. 300 for 5 minutes)data – Task ID that has a begintime setparam – Duration in seconds to check against current time-- Check if 300 seconds (5 minutes) have passed since task 2001 started INSERT INTO cq_action VALUES (1000, 1001, 1002, 1182, 2001, '300'); -- If enough time has passed INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You are well-rested and may proceed.'); -- If not enough time INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You need to wait a bit longer before continuing.');
1181 begintime = now to set start time when task begins.Type 1181 to manage cooldown windows and progression delays.
Type 1186 checks whether a specified number of full calendar days has passed since the begintime of a new UI task stored in cq_newtaskdetail. This is perfect for time-gated features such as daily rewards, long-term quests, or event re-entry limits.
data = task IDparam = number of days (e.g. 4 for 4 days)data – Task ID assigned using Type 1180param – Integer number of days since task start-- Check if 4 days have passed since task 2001 started INSERT INTO cq_action VALUES (1000, 1001, 1002, 1186, 2001, '4'); -- If 4+ days have passed INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You are now eligible to proceed.'); -- If not enough days have passed INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You must wait a few more days before continuing.');
Type 1180begintime should be set using Type 1181 begintime resetType 1971 is used to check the attributes of a player's eudemons. If at least one eudemon matches all conditions, the result is considered true. The scope of which eudemons are checked depends on the data value.
data = Eudemon scope (0, 1, or 2)param = comma-separated attribute checks0 – Only summoned and alive1 – Summoned (including dead)2 – All pets (summoned or not, alive or dead)level – Eudemon levelstarlev – Star levelcallout – 1 if summonedgodlev – Divine level-- One of your summoned & alive pets must have level 20+ INSERT INTO cq_action VALUES (1000, 1001, 1002, 1971, 0, 'level >= 20'); -- If condition true INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'At least one of your pets is level 20 or higher.'); -- If condition false INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'None of your pets meet the level requirement.');
-- Check if any summoned pet is called out AND star level ≥ 1000 AND not Divine INSERT INTO cq_action VALUES (1000, 1001, 1002, 1971, 0, 'callout == 1,starlev >= 1000,godlev == 0');
Type 0126 to show messages depending on your pet’s power, star level, or evolution.
Type 1580 is used to check whether a specified new task exists for players in a party. It works like Type 1180 but supports team-based checking. It only supports the isexit operation.
data = task IDparam = [check_mode] isexit0 isexit – At least one member must have the task1 isexit – All members must have the taskcq_newtaskdetail0 isexit – One member is enough1 isexit – All members must have the task-- Check if all team members have task 2001 INSERT INTO cq_action VALUES (1000, 1001, 1002, 1580, 2001, '1 isexit'); -- If true INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'All your team members have accepted the task.'); -- If false INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Someone in your team has not accepted the task.');
-- Check if any member has task 2001 INSERT INTO cq_action VALUES (2000, 2001, 2002, 1580, 2001, '0 isexit'); -- If true INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'One of your teammates has the required task.'); -- If false INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'No one in your team has accepted the task yet.');
Type 1180 (new UI quests)0126 to notify player clearly1580 to control access to multiplayer content that requires synchronized task progress!
Type 1581 is the team-based version of Type 1181. It checks whether the values in cq_newtaskdetail for all or some members meet a specified condition. It only supports comparison operators == and >=.
data = task IDparam = [check_mode] field operator value0 – Only one team member must meet the condition1 – All team members must meet the conditionphasedata1 ~ data10==>=-- Check if all members have task 2001 at phase 2 or above INSERT INTO cq_action VALUES (1000, 1001, 1002, 1581, 2001, '1 phase >= 2'); -- If true INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your entire team has reached phase 2.'); -- If false INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Someone in your team is still below phase 2.');
-- Check if any member has collected 5 or more INSERT INTO cq_action VALUES (2000, 2001, 2002, 1581, 2001, '0 data1 >= 5'); -- If true INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'One of your teammates has enough items.'); -- If false INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'No one in your team has collected enough yet.');
== and >= operators.Type 0126 to give user feedback.Type 1180.Type 1582 is the team-based version of Type 1182. It checks whether the specified cooldown duration (in seconds) has passed since the task begintime for all or some members in the team. Useful for real-time co-op cooldown gates or retry control.
data = task IDparam = [check_mode] seconds0 – at least one member must pass1 – all members must passdata – Task ID assigned via Type 1180param – Format: [0/1] seconds-- Check if 5 minutes have passed for all members INSERT INTO cq_action VALUES (1000, 1001, 1002, 1582, 2001, '1 300'); -- If passed INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Your team is ready to continue.'); -- If failed INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Someone in your team still needs to wait.');
-- Check if any member waited 300 seconds INSERT INTO cq_action VALUES (2000, 2001, 2002, 1582, 2001, '0 300'); -- If success INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'Someone in your team is ready.'); -- If all failed INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'No one in your team has finished the cooldown yet.');
begintime is set using 1181 begintime reset at task start.Type 1186 for calendar-day cooldowns and Type 1581 for team-based phase/data checks!
Type 1586 checks if a specified number of full calendar days have passed since the begintime of a task (from cq_newtaskdetail) for some or all members in a team. It is the team-based version of Type 1186. If the player is not in a party, no check is performed.
data = task IDparam = [check_mode] days0 – at least one member must meet the condition1 – all members must meet the conditionType 1180)[0/1] [day_count]-- Check if all team members have waited 4 days INSERT INTO cq_action VALUES (1000, 1001, 1002, 1586, 2001, '1 4'); -- All passed INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Everyone in your team is eligible.'); -- At least one didn’t wait enough INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Someone in your team still needs to wait.');
-- At least one member waited long enough INSERT INTO cq_action VALUES (2000, 2001, 2002, 1586, 2001, '0 4'); -- Passed INSERT INTO cq_action VALUES (2001, 0000, 0000, 0126, 0, 'Someone in your team is ready.'); -- None passed INSERT INTO cq_action VALUES (2002, 0000, 0000, 0126, 0, 'No one in your team is ready yet.');
cq_newtaskdetail.begintime to compare full calendar days.Type 1180 and begintime set via 1181 begintime reset.Type 1412 is used to trigger a specific action script for all members in the current team, including the one who initiated it. If the player is not in a team, the script will not be executed for anyone.
data = 0param = action ID to execute (for all teammates)-- Execute action ID 1001 for each teammate INSERT INTO cq_action VALUES (1000, 0000, 0000, 1412, 0, '1001');
-- Show message to each team member INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'This message was sent to every member of your team.');
Type 7001 triggers an invitation-style dialog box for the player, using a message string from strres.ini. A countdown is shown, and if the player confirms before it ends, a predefined script will be executed. This script ID is set server-side via 邀请对话框确认执行脚本 = [ActionID].
data = message ID (from strres.ini)param = countdown time in seconds (optional)-- Show invitation dialog with message 5010010, wait 20 seconds INSERT INTO cq_action VALUES (1000, 0000, 0000, 7001, 5010010, '20');
邀请对话框确认执行脚本 = 1001
-- Message after player accepts the dialog INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You have accepted the invitation.');
strres.ini using the ID in data.Type 197 broadcasts an invitation dialog to all players in a specific map or globally. It uses a message from strres.ini and shows a countdown. If a player confirms before it expires, the server executes a predefined script via 邀请对话框确认执行脚本 = [ActionID].
data = message ID (from strres.ini)param = mapid countdown-- Global invitation dialog (all maps), 300s countdown INSERT INTO cq_action VALUES (1000, 0000, 0000, 0197, 191123, '0 300'); -- Send dialog only to players in map 7000, countdown 300s INSERT INTO cq_action VALUES (1000, 0000, 0000, 0197, 191123, '7000 300');
邀请对话框确认执行脚本 = 1001
-- Display confirmation message after player clicks "OK" INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You accepted the event invitation!');
mapid specified will receive the dialog.mapid = 0, all online players will receive it.197 to announce server-wide challenges or dungeon invites with real-time confirmation.
Type 1964 is used to activate the Vampire Awakening form. It should only be triggered if the player is not already in the status 1014. This awakening grants enhanced power and visuals for the Vampire class.
data = 0param = 0Check if player does NOT already have status 1014 before triggering.
-- If not awakened, trigger awakening INSERT INTO cq_action VALUES (1000, 0000, 0000, 1964, 0, '0');
1014 indicates the player is already in awakening mode.Type 549 creates a new Eudemon directly in the player's Eudemon backpack with customized stats. You can define its level, divine level, star rating, binding status, and whether it is a necro-type pet.
data = Eudemon Type ID (e.g. 1071960)param = level godlevel score [bind] [is_necro]1 to force bind the pet1 to make it a Necro-type Eudemon-- Create a 25-star, divine Level 1 XO-type Eudemon (unbound) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0549, 1071960, '81 1 2500');
-- Create a 25-star Necro-type Eudemon that is bound to the player INSERT INTO cq_action VALUES (1001, 0000, 0000, 0549, 1071960, '81 1 2500 1 1');
1 makes it a Necro Eudemon (compatible with "Spirit" fusion).Type 1968 checks if the player is currently located in the Cronus Market map (also known as 雷鸣市场). It requires no parameters and simply returns true if the player is in the correct map.
data = 0param = (empty)-- Check if player is in Cronus Market INSERT INTO cq_action VALUES (1000, 1001, 1002, 1968, 0, ''); -- If true INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You are currently in Cronus Market.'); -- If false INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'This feature is only available in Cronus Market.');
1000.Type 1969 checks if the current player is logged in from a mobile client. This is useful for triggering mobile-exclusive content, messages, or limiting features that are not supported on mobile devices.
data = 0param = (empty)-- Check if player is using mobile client INSERT INTO cq_action VALUES (1000, 1001, 1002, 1969, 0, ''); -- If mobile INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Welcome mobile player! You are now connected via the mobile client.'); -- If not mobile (likely PC) INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You are currently using the PC client.');
data = 0.Type 196 sends a pigeon system message (normal or golden). It works like Type 125, but includes the player's name in the param. All spaces in the message must be replaced with ~.
data = message type:
0 = normal pigeon1 = golden pigeonparam = [type] [player_name] [message_with_tildes]-- Send golden pigeon (VIP boradcast) INSERT INTO cq_action VALUES (1000, 0000, 0000, 0196, 2017, '1 DuaSelipar[PM] Hello~World');
-- Send normal pigeon INSERT INTO cq_action VALUES (1000, 0000, 0000, 0196, 2017, '0 DuaSelipar[PM] Hello~World');
~ instead of spaces in the message content to avoid script parsing errors.Type 1532 automatically moves the player to the specified NPC using pathfinding and opens its dialog. Commonly used in guided quests, tutorials, and main storyline scenes.
data = 0param = x y npc_id map_idINSERT INTO cq_action VALUES (1000, 0000, 0000, 1532, 0, '335 455 1034 1000');
cq_npc table.Type 1967 is used to summon a follow pet (non-Eudemon) that follows the player around and typically auto-collects dropped items. The player must already own the follow pet before this script can successfully summon it.
data = follow pet IDparam = leave empty-- Summon follow pet with ID 1 (must be owned) INSERT INTO cq_action VALUES (1000, 0000, 0000, 1967, 1, '');
Type 194 is used to trigger animation or scripted visual effects from luapartscript.ini. It's typically used for cinematic effects, transformations, special skill triggers, or cutscene visuals.
data = 0param = type param1 param20 0 0 – Likely stops all current effects (optional)10 0 LuaScriptName – Runs a script from luapartscript.ini1 effect_id duration – Plays a single effect (e.g. stealth for 8s)-- Plays Lua script from luapartscript.ini [10] INSERT INTO cq_action VALUES (1000, 1001, 0000, 0194, 0, '10 0 PerformanceScript_10');
-- This will apply an invisible/stealth-like effect INSERT INTO cq_action VALUES (1001, 0000, 0000, 0194, 0, '1 52000 10');
-- Optional: Clear current effect layers INSERT INTO cq_action VALUES (1000, 0000, 0000, 0194, 0, '0 0 0');
PerformanceScript_10 must be defined inside luapartscript.ini.52000 are internal and engine-specific.194 actions for scripted cinematics or epic scene transitions!
Type 195 plays a sound from SoundRes.ini. It can be used in events, NPC interactions, transformations, or dramatic reveals.
data = 0param = sound_id sound_name-- Sound must be defined in SoundRes.ini INSERT INTO cq_action VALUES (20006403, 0000, 0000, 0195, 0, '20015 BGM_State1');
[20015] Sound=sound/BGM_State1.wav
sound_id and sound name match SoundRes.ini exactly.Type 194 for full audiovisual cutscenes or boss intro effects.
Type 1987 checks whether the player has access to the Divine Fire system. Returns true if it is unlocked and available.
-- Check if Divine Fire is unlocked INSERT INTO cq_action VALUES (1000, 1001, 1002, 1987, 0, ''); -- If unlocked INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Divine Fire system is already unlocked.'); -- If locked INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'You have not unlocked the Divine Fire system yet.');
Type 1988 checks whether a specific Divine Fire slot is open (1–4). Each slot controls 2 grid positions in the interface.
data = 1 ~ 4 (slot number)INSERT INTO cq_action VALUES (1000, 1001, 1002, 1988, 2, ''); -- If open INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'Slot 2 is already open.'); -- If not open INSERT INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'Slot 2 is still locked.');
Type 1989 unlocks a specific Divine Fire slot. This is typically triggered via reward, quest, or item usage.
data = 1 ~ 4 (slot number to unlock)-- Unlock slot 3 INSERT INTO cq_action VALUES (1000, 1001, 0000, 1989, 3, ''); INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You have unlocked Divine Fire Slot 3.');
1987).
These script types are used to manage player titles based on the title.ini file. Titles are stored in cq_titleid and can be unlocked, equipped, or checked using the following actions:
1996 – Check if a title is already unlocked1997 – Unlock a title for the player1998 – Equip an unlocked titledata = Title ID (must match title.ini)param = (leave blank)-- Step 1: Check if title 45 is already unlocked INSERT INTO cq_action VALUES (1000, 1001, 1002, 1996, 45, ''); -- If unlocked INSERT INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You have already unlocked this title,please equip in wardrobe.'); -- Step 2: If not unlocked → Unlock it first INSERT INTO cq_action VALUES (1002, 1003, 0000, 1997, 45, ''); -- Step 3: Equip after unlocking INSERT INTO cq_action VALUES (1003, 1004, 0000, 1998, 45, '');
-- Title equipped INSERT INTO cq_action VALUES (1004, 0000, 0000, 0126, 0, 'Title equipped successfully.');
title.inicq_titleid1996 before equipping to avoid invalid equip attempts
Type 1980 is used to send mail with attachments (items, EP, PP, Lunar Point) to players. The mail format uses a template from cq_mailtemplate and stores the sent data in cq_mailinfo.
data = Mail Template ID (from cq_mailtemplate)param = Mail content (see breakdown below)--INSERT INTO cq_action VALUES (1000, 0000, 0000, 1980, 1,'30 5000 4000 3000 754859 1 1 1025491 1 1 751022 1 1 2000 1000' );
| Position | Field | Description | Example |
|---|---|---|---|
| 1 | saveday | How many days the mail stays. Use 0 = permanent (100 days) | 30 |
| 2 | money | Gold | 5000 |
| 3 | emoney | EP | 4000 |
| 4 | emoney2 | PP | 3000 |
| 5 | item1 | First item ID to send | 754859 |
| 6 | item1Amount | Amount (must be 1 for equipment) | 1 |
| 7 | item1Lock | 1 = Bound, 0 = Unbound | 1 |
| 8 | item2 | Second item ID | 1025491 |
| 9 | item2Amount | Amount | 1 |
| 10 | item2Lock | Bound status | 1 |
| 11 | item3 | Third item ID | 751022 |
| 12 | item3Amount | Amount | 1 |
| 13 | item3Lock | Bound status | 1 |
| 14 | moonvalue | Lunar Point | 2000 |
| 15 | starvalue | Star Point | 1000 |
lock = 1 to make items bound to the player.cq_mailinfo.This set of scripts is used to allow players to rename their characters, specifically those with default names like rerole[123456]. It includes validation, duplication checks, and rename request logic.
rerole[ (e.g. rerole[20345])-- Step 1: Ask for new name input REPLACE INTO cq_action VALUES (1000, 1001, 0000, 0101, 0, 'Please enter your new name.'); REPLACE INTO cq_action VALUES (1001, 1002, 0000, 0103, 0, '15 1003 New~name:'); REPLACE INTO cq_action VALUES (1002, 4000000, 0000, 0104, 0, '0 0 0'); -- Step 2: Check if current name is in rerole[xxxx] format REPLACE INTO cq_action VALUES (1003, 1005, 1004, 1990, 0, ''); REPLACE INTO cq_action VALUES (1004, 0000, 0000, 0126, 0, 'Your current name is not a temporary name. Rename is not required.'); -- Step 3: Check if player already applied for rename REPLACE INTO cq_action VALUES (1005, 1007, 1006, 1991, 0, ''); REPLACE INTO cq_action VALUES (1006, 0000, 0000, 0126, 0, 'You have already submitted a rename request. Please wait for it to be applied.'); -- Step 4: Store new name input into var(0) REPLACE INTO cq_action VALUES (1007, 1008, 0000, 1524, 0, 'var(0) set %accept0'); -- Step 5: Ask for confirmation (re-type) REPLACE INTO cq_action VALUES (1008, 1009, 0000, 0101, 0, 'Please enter your new name again.'); REPLACE INTO cq_action VALUES (1009, 1010, 0000, 0103, 0, '15 1011 Re-enter~new~name:'); REPLACE INTO cq_action VALUES (1010, 4000000, 0000, 0104, 0, '0 0 0'); -- Step 6: Compare both entries (var(0) vs second input) REPLACE INTO cq_action VALUES (1011, 1012, 1014, 1523, 0, 'var(0) == %accept0'); -- Step 7A: If match, apply rename request REPLACE INTO cq_action VALUES (1012, 1013, 10025049, 1992, 0, '%iter_var_str0'); REPLACE INTO cq_action VALUES (1013, 0000, 0000, 0126, 0, 'Your rename request has been submitted. It will take effect after the next maintenance.'); -- Step 7B: If mismatch REPLACE INTO cq_action VALUES (1014, 0000, 0000, 0126, 0, 'The two name entries do not match. Please try again.');
1990 only allows rename for characters named rerole[xxxx].1991 prevents duplicate rename requests.1992 will not instantly rename — it marks the request to be applied after restart/maintenance.This script flow allows legion leaders with default names like resyn[xxxxx] to rename their guild. It checks for leader permission, validates if the name is still default, prevents duplicate requests, and requires confirmation of the new name.
1993 – Check if current legion name is resyn[xxx]1994 – Check if a rename request has already been submitted1995 – Submit the legion rename request (applies on next maintenance)-- Ask for new legion name REPLACE INTO cq_action VALUES (1000, 1001, 0000, 0101, 0, 'Please enter your new legion name.'); REPLACE INTO cq_action VALUES (1001, 1002, 0000, 0103, 0, '15 1003 New~legion~name:'); REPLACE INTO cq_action VALUES (1002, 4000000, 0000, 0104, 0, '0 0 0'); -- Only the leader can rename REPLACE INTO cq_action VALUES (1003, 1005, 1004, 1001, 0, 'ranksshow == 1000'); REPLACE INTO cq_action VALUES (1004, 0000, 0000, 0126, 0, 'Only the legion leader can rename the legion.'); -- Check if name is still resyn[xxx] REPLACE INTO cq_action VALUES (1005, 1007, 1006, 1993, 0, ''); REPLACE INTO cq_action VALUES (1006, 0000, 0000, 0126, 0, 'This legion already has a custom name. Rename is not required.'); -- Check if rename was already submitted REPLACE INTO cq_action VALUES (1007, 1009, 1008, 1994, 0, ''); REPLACE INTO cq_action VALUES (1008, 0000, 0000, 0126, 0, 'A rename request has already been submitted. Please wait for the next maintenance.'); -- Save first input REPLACE INTO cq_action VALUES (1009, 1010, 0000, 1524, 0, 'var(0) set %accept0'); -- Confirm re-entry REPLACE INTO cq_action VALUES (1010, 1011, 0000, 0101, 0, 'Please enter your new legion name again.'); REPLACE INTO cq_action VALUES (1011, 1012, 0000, 0103, 0, '15 1013 Re-enter~legion~name:'); REPLACE INTO cq_action VALUES (1012, 4000000, 0000, 0104, 0, '0 0 0'); -- Compare both inputs REPLACE INTO cq_action VALUES (1013, 1014, 1017, 1523, 0, 'var(0) == %accept0'); -- Attempt rename REPLACE INTO cq_action VALUES (1014, 1015, 1016, 1995, 0, '%iter_var_str0'); REPLACE INTO cq_action VALUES (1015, 0000, 0000, 0126, 0, 'Your legion rename request has been submitted. The new name will take effect after the next maintenance.'); REPLACE INTO cq_action VALUES (1016, 0000, 0000, 0126, 0, 'That name is already taken or invalid. Please choose another.'); -- Name mismatch REPLACE INTO cq_action VALUES (1017, 0000, 0000, 0126, 0, 'The two name entries do not match. Please try again.');
ranksshow == 1000) can rename the legion.resyn[xxxxx]).var(0) and 1523.Type 193 is used to determine if a Legion War is currently ongoing. It behaves similarly to Type 226.
data = 0 (required)param = (leave blank)-- If legion war is active REPLACE INTO cq_action VALUES (1000, 1001, 1002, 193, 0, ''); -- If true REPLACE INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'A legion war is currently in progress!'); -- If false REPLACE INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'There is no legion war happening right now.');
Type 126 to inform players through dialog.These script types are used to send announcements to players within a specific map. Similar to Type 303.
data = map ID where the message will be shownparam = message text-- Show message in lower-left of map 1000 REPLACE INTO cq_action VALUES (1000, 0000, 0000, 320, 1000, 'Legion War has started! Join now!');
-- Show center-screen message on map 1000 REPLACE INTO cq_action VALUES (1000, 0000, 0000, 321, 1000, 'BOSS has appeared in the center of the battlefield!');
data.320 for passive info (e.g., tips or alerts), and 321 for impactful messages (e.g., countdowns or boss spawn).
Type 1986 is used to unsummon all currently summoned from the player. This is needed because modern engines no longer auto-recall summoned Eudemons when switching maps.
data = 0param = (leave blank)-- Recall all currently summoned (visible) Eudemons REPLACE INTO cq_action VALUES (1000, 0000, 0000, 1986, 0, '');
These scripts are used to manage the Servants of the Goddess system. There are two servants: Gift Master (1) and Spirit Master (2). Scripts let you check if they’re activated, activate them, and give them EXP.
1983 – Check if a servant is activated (data = 1 or 2)1984 – Activate a servant (data = 1 or 2)1985 – Add EXP to a servant (data = 1 or 2, param = EXP)REPLACE INTO cq_action VALUES (16000, 16001, 16002, 1983, 1, ''); -- If activated REPLACE INTO cq_action VALUES (16001, 0000, 0000, 0126, 0, 'Gift Master is already activated.'); -- If not REPLACE INTO cq_action VALUES (16002, 0000, 0000, 0126, 0, 'Gift Master is not activated.');
-- Activate Gift Master REPLACE INTO cq_action VALUES (16010, 16011, 0000, 1984, 1, ''); REPLACE INTO cq_action VALUES (16011, 0000, 0000, 0126, 0, 'Gift Master has been activated.'); -- Activate Spirit Master REPLACE INTO cq_action VALUES (16012, 16013, 0000, 1984, 2, ''); REPLACE INTO cq_action VALUES (16013, 0000, 0000, 0126, 0, 'Spirit Master has been activated.');
-- Add 1000 EXP to Gift Master REPLACE INTO cq_action VALUES (16020, 0000, 0000, 1985, 1, '1000'); -- Add 2500 EXP to Spirit Master REPLACE INTO cq_action VALUES (16021, 0000, 0000, 1985, 2, '2500');
1983 before activating using 1984.1985 can be tied to quests, kill rewards, achievements, etc.0126 messages or title unlocks.Type 1527 sets the player's PK (player-kill) mode. This allows you to force or script PK mode changes for dungeon rules, arenas, PvP zones, or specific events. Each mode determines who the player can or cannot attack.
data = unused (set as 0)param = PK mode (0–5)| Param | Mode | Description |
|---|---|---|
0 | Peace Mode | Attack monsters only. Cannot attack any players. |
1 | Team Mode | Attack monsters and players not in your team. |
2 | Capture Mode | Attack monsters, red-named (PK) and blue-named (criminal) players only. |
3 | Free PK Mode | Attack anyone freely without restriction. |
4 | Legion Mode | Attack all except your own legion members. |
5 | Ally Mode | Attack all except your legion and allied legions. |
REPLACE INTO cq_action VALUES (17000, 0000, 0000, 1527, 0, '4');
0 (Peace) after exit.
These scripts are used to check and unlock character hairstyles. Hair styles are defined in HairData.ini and DressRoomItem.ini (where type = 2).
1974 – Check if a specific hairstyle is already unlocked1975 – Unlock a specific hairstyleHairData.ini)DressRoomItem.ini as type 2REPLACE INTO cq_action VALUES (18000, 18001, 18002, 1974, 225, ''); -- If already unlocked REPLACE INTO cq_action VALUES (18001, 0000, 0000, 0126, 0, 'This hairstyle is already unlocked!'); -- If not yet unlocked REPLACE INTO cq_action VALUES (18002, 0000, 0000, 0126, 0, 'This hairstyle is not yet unlocked.');
REPLACE INTO cq_action VALUES (18010, 18011, 0000, 1975, 225, ''); REPLACE INTO cq_action VALUES (18011, 0000, 0000, 0126, 0, 'You have unlocked hairstyle 225!');
HairData.ini and DressRoomItem.ini (with type 2).0126 to notify player about success or already-unlocked status.cq_hairinfotype. Once unlocked, the data is stored in cq_hairinfo.
These script types are used to check and unlock player avatar icons (also called head icons or portraits). Avatar data must exist in cq_faceinfotype, and unlocked data is stored in cq_faceinfo.
1976 – Check if a specific avatar is already unlocked1977 – Unlock a specific avatarcq_faceinfotype)REPLACE INTO cq_action VALUES (1000, 1001, 1002, 1976, 85, ''); -- If already unlocked REPLACE INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'This avatar is already unlocked.'); -- If not yet unlocked REPLACE INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'This avatar is not yet unlocked.');
REPLACE INTO cq_action VALUES (1000, 1001, 0000, 1977, 85, ''); REPLACE INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You have successfully unlocked avatar 85!');
cq_faceinfotypecq_faceinfocq_faceinfotype and saved per player in cq_faceinfo.
These script types manage the unlocking of Eudemon Skins. Skins are defined in cq_eudlookinfotype, and once unlocked, are stored in cq_eudlookinfo.
cq_eudlookinfotype)REPLACE INTO cq_action VALUES (1000, 1001, 1002, 1972, 22, ''); -- If unlocked REPLACE INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You have already unlocked this Eudemon skin.'); -- If not unlocked REPLACE INTO cq_action VALUES (1002, 0000, 0000, 0126, 0, 'This Eudemon skin has not been unlocked yet.');
REPLACE INTO cq_action VALUES (1000, 1001, 0000, 1973, 22, ''); REPLACE INTO cq_action VALUES (1001, 0000, 0000, 0126, 0, 'You have successfully unlocked Eudemon skin 22!');
cq_eudlookinfotypecq_eudlookinfoType 1970 is used to divinize Eudemons on your character. It targets pets that are summoned/unsummoned (visible or stored).
data defines the scope of pets affected:param = stat requirements, must match all to trigger:
level and starlev<, >, >=, ==REPLACE INTO cq_action VALUES (21000, 0000, 0000, 1970, 2, 'level >= 1,starlev >= 4000');
This section will explain about the types of variables available in the server. Some variables can be modified, while others are read-only and provided by the system.
These variables can be displayed or checked using dialog windows (Type 101), message boxes (Type 126), and other script actions depending on how they are used in the event system.
-- Show the current server date using %datestamp
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%datestamp');
When displayed using a message box (Type 126), it will appear like this:
-- Show the current server time (timestamp) using %time
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%time');
When displayed using a message box (Type 126), it will appear like this:
-- Show the maximum allowed Eudemon star level REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%maxeudemon_starlev');
When displayed using a message box (Type 126), it will appear like this:
2018-01-01.| Variable | Meaning | Week Start Day |
|---|---|---|
%date_ywday1 | Weekly index if your week starts on Monday | Monday |
%date_ywday2 | Weekly index if your week starts on Tuesday | Tuesday |
%date_ywday3 | Weekly index if your week starts on Wednesday | Wednesday |
%date_ywday4 | Weekly index if your week starts on Thursday | Thursday |
%date_ywday5 | Weekly index if your week starts on Friday | Friday |
%date_ywday6 | Weekly index if your week starts on Saturday | Saturday |
%date_ywday7 | Weekly index if your week starts on Sunday | Sunday |
-- This shows how many weeks have passed since 2018-01-01, treating Tuesday as start of the week
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Week Index (Tuesday Start): %date_ywday2');
%date_ywdayX depending on which day you want your server's week to begin (e.g., Monday for school ranking, Sunday for arena season).
cq_itemtype.TYPE field in cq_item table.
-- Show the item type using %item_type
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%item_type');
cq_itemtype.data field in cq_item table.
-- Show the item data using %item_data
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%item_data');
cq_npc or cq_dynanpc to access these variables.
datastr field from the NPC record. It can contain letters and numbers.
-- Show the datastr field using %datastr
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%datastr');
data0 to data3 fields of the NPC.
-- Show data0 field using %data0
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%data0');
-- Show NPC name using %name
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%name');
-- Show NPC ID using %id
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%id');
-- Show NPC X and Y positions
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'X: %npc_x Y: %npc_y');
-- Show the owner ID using %npc_ownerid
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%npc_ownerid');
-- Show maximum life using %npc_maxlife
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%npc_maxlife');
-- Show NPC's current map ID
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%npc_mapid');
-- Show new numeric field using %newdata1 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%newdata1');
-- Show new string field using %newdatastr1 REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%newdatastr1');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%user_id');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Map: %user_map_id, X: %user_map_x, Y: %user_map_y');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%user_home_id');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Legion: %syn_name (%syn_id)');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Name: %user_name / Mate: %mate_name');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Map Owner ID: %map_owner_id, Type: %map_owner_type');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Ally0: %ally_syn0, Enemy0: %enemy_syn0');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Tutor EXP: %tutor_exp, Student EXP: %student_exp');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%user_sealmagic');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%user_level');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, '%user_bp');
0 if not ranked.
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Your Celebrity Hall Rank: %halloffamerank');
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'God Fire Rank: %godfirerank');
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Current Fire Score: %currentfirepoint');
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'You last killed: %killusertarget_name (ID: %killusertarget_id)');
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Your Divine Fire Realm Level: %firelev');
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Highest Fire Score: %firepoint');
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Your Bonus Points: %bonuspoint');
REPLACE INTO cq_action VALUES (1000, 0000, 0000, 0126, 0, 'Total Goddess Tier: %allgoddesslevel');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'PK Kills: %pkgame_user_kill');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'PK Balance EXP: %pkgame_user_balance_exp');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Available Legion Fund: %available_fund');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Map Data 0: %map_iter_var_data0');
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Map String 0: %map_iter_var_str0');
cq_map database table.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Backmap ID: %backmapid, X: %backmap_x, Y: %backmap_y');
cq_map database table.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Map ID: %mapid, Map Name: %map_name');
Global Variables are used to store server-wide persistent values. These variables are shared across all players, maps, and events. Numeric variables use the cq_vardata table, while string variables use the cq_varstrdata table. To modify these variables, refer to Global Variable Control (Type 191 & 192).
cq_vardata. Supports index 1 to 99.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Global Data 0: %public_var_data1');
cq_varstrdata. Supports index 1 to 99.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Global String 0: %public_var_str1');
Monster Variables are used to retrieve the position (X, Y coordinates) where a monster was killed. These variables are only available during monster death event triggers. Must be placed on monster kill actions.
REPLACE INTO `cq_action` VALUES (1000, 0000, 0000, 0126, 0, 'Kill Position: %killmonster_x / %killmonster_y');