diff options
66 files changed, 4633 insertions, 2103 deletions
diff --git a/conf/char-server.conf b/conf/char-server.conf index cbba2fe0b..4ff2a3398 100644 --- a/conf/char-server.conf +++ b/conf/char-server.conf @@ -64,7 +64,7 @@ console_silent: 0 // Type of server. // No functional side effects at the moment. // Displayed next to the server name in the client. -// 0=normal, 1=maintenance, 2=over 18, 3=paying, 4=P2P +// 0=normal, 1=maintenance, 2=over 18, 3=paying, 4=F2P char_server_type: 0 // Minimum Group ID to join char server when it is on char_server_type 1 (maintenance) diff --git a/conf/inter-server.conf b/conf/inter-server.conf index db94494f1..a3acad9f5 100644 --- a/conf/inter-server.conf +++ b/conf/inter-server.conf @@ -76,6 +76,8 @@ mysql_reconnect_count:1 //Shared interreg_db: interreg +global_acc_reg_num_db: global_acc_reg_num_db +global_acc_reg_str_db: global_acc_reg_str_db // Char Database Tables char_db: char @@ -85,7 +87,6 @@ cart_db: cart_inventory inventory_db: inventory charlog_db: charlog storage_db: storage -reg_db: global_reg_value skill_db: skill interlog_db: interlog memo_db: memo @@ -110,6 +111,10 @@ mercenary_owner_db: mercenary_owner ragsrvinfo_db: ragsrvinfo elemental_db: elemental account_data_db: account_data +acc_reg_num_db: acc_reg_num_db +acc_reg_str_db: acc_reg_str_db +char_reg_str_db: char_reg_str_db +char_reg_num_db: char_reg_num_db // Map Database Tables item_db_db: item_db @@ -120,14 +125,27 @@ mob_db2_db: mob_db2 mob_skill_db_db: mob_skill_db mob_skill_db2_db: mob_skill_db2 mapreg_db: mapreg - -// Use SQL for item_db? +autotrade_merchants_db: autotrade_merchants +autotrade_data_db: autotrade_data + +// == SQL item, mob, mob skill databases +// ===================================== +// Note: the following databases may get out of date at times, or not be +// thoroughly tested (if at all, since they're auto-generated). As such it is +// not advisable to rely on them other than for informative reasons (Control +// Panels, websites, etc.) +// Unless you know what you're doing, please consider using their txt version. +// Note2: It is perfectly legit (and recommended) to use txt databases in +// Hercules, while still loading the SQL tables we provide to be used +// exclusively by your Control Panel or Website. + +// Use SQL for item_db? (not recommended) use_sql_item_db: no -// Use SQL for mob_db? +// Use SQL for mob_db? (not recommended) use_sql_mob_db: no -// Use SQL for mob_skill_db? +// Use SQL for mob_skill_db? (not recommended) use_sql_mob_skill_db: no import: conf/import/inter_conf.txt diff --git a/db/pre-re/mob_db.txt b/db/pre-re/mob_db.txt index 8d1151dda..05e564ece 100644 --- a/db/pre-re/mob_db.txt +++ b/db/pre-re/mob_db.txt @@ -1141,4 +1141,4 @@ 2081,E_HYDRA,Suspicious Hydra,Strange Hydra,34,854,1,0,0,7,1,2,100,100,1,1,1,1,1,1,10,12,0,3,41,0x0,1000,800,432,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 2082,G_PIRANHA,Piranha,Piranha,75,4522,0,0,0,1,182,223,2,10,69,45,30,30,66,35,10,12,1,5,61,0x3295,200,768,768,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -2308,KO_ZANZOU,Zanzou,Zanzou,1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2308,KO_KAGE,Zanzou,Zanzou,1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/db/re/mob_db.txt b/db/re/mob_db.txt index 7bf4cff0e..c0f905dbc 100644 --- a/db/re/mob_db.txt +++ b/db/re/mob_db.txt @@ -1445,7 +1445,7 @@ 2305,E_UNGOLIANT,Ungoliant,Ungoliant,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 2306,E_GOLDEN_BUG,Golden Thief Bug,Golden Thief Bug,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 2307,J_MISTRESS,Mistress,Mistress,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -2308,KO_ZANZOU,Zanzou,Zanzou,1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2308,KO_KAGE,Zanzou,Zanzou,1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // Malaya Port 2309,BUNGISNGIS,Bungisngis,Bungisngis,121,25513,0,1960,1650,1,851,1276,115,35,100,100,30,30,100,30,10,12,2,7,42,0x3795,200,1000,792,336,0,0,0,0,0,0,0,7054,2000,6510,1000,12700,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/doc/script_commands.txt b/doc/script_commands.txt index f5f2d7d9c..c0b848663 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -637,8 +637,8 @@ even a value from an another array) to get at an array value: This will make @arrayofnumbers[100] equal to 10. -Notice that index numbering always starts with 0. Arrays cannot hold more -than 128 variables (so the last one can't have a number higher than 127). +Notice that index numbering always starts with 0. Arrays can hold over +4 billion variables. And array indexes probably can't be negative. Nobody tested what happens when you try to get a negatively numbered variable from an array, but it's @@ -7960,6 +7960,14 @@ Returns name of the instanced map on success, otherwise an empty string. --------------------------------------- +*has_instance2("<map name>"); + +Same as has_instance, with exception it returns the instance id of the map, +as long as the user is assigned to a instance containing that map. +It will return -1 upon failure, valid instance ids are >= 0. + +--------------------------------------- + *instance_id(); Retrieves the instance id of the script it is being run on. @@ -8508,7 +8516,11 @@ attempts to remove <Item_ID> from the current shop list. *setcurrency <Val1>{,<Val2>}; -updates the currently attached player shop funds. +updates the currently attached player shop funds, +to be used within a "OnCountFunds" event of a NST_CUSTOM trader type. + +<Val1> is the value used in the *Cash* Points field +<Val2> is the value used in the Kafra Points field --------------------------------------- @@ -8526,7 +8538,8 @@ By default, all npcs staart with tradertype(NST_ZENY); *purchaseok(); -Signs that the transaction (on a NST_CUSTOM trader) has been successful. +Signs that the transaction (on a NST_CUSTOM trader) has been successful, +to be used within a "OnPayFunds" event of a NST_CUSTOM trader. --------------------------------------- diff --git a/npc/custom/test.txt b/npc/custom/test.txt index 5d5dcf8e9..07523f008 100644 --- a/npc/custom/test.txt +++ b/npc/custom/test.txt @@ -10,14 +10,24 @@ - script HerculesSelfTest -1,{ end; + +OnReportError: + .@msg$ = getarg(0,"Unknown Error"); + .@val$ = getarg(1,""); + .@ref$ = getarg(2,""); + if (.errors == 1) + debugmes "**** WARNING: Any self-test results past this point are unreliable because of previous errors. ****"; + debugmes "Error: "+.@msg$+": '"+.@val$+"' (found) != '"+.@ref$+"' (expected)"; + .errors++; + //end; + return; + OnCheck: .@msg$ = getarg(0,"Unknown Error"); .@val = getarg(1,0); .@ref = getarg(2,1); if (.@val != .@ref) { - debugmes "Error: "+.@msg$+": '"+.@val+"' != '"+.@ref+"'"; - .errors++; - //end; + callsub(OnReportError, .@msg$, ""+.@val, ""+.@ref); // String coercion } return; OnCheckStr: @@ -25,9 +35,7 @@ OnCheckStr: .@val$ = getarg(1,""); .@ref$ = getarg(2,""); if (.@val$ != .@ref$) { - debugmes "Error: "+.@msg$+": '"+.@val$+"' != '"+.@ref$+"'"; - .errors++; - //end; + callsub(OnReportError, .@msg$, .@val$, .@ref$); } return; OnInit: @@ -390,9 +398,131 @@ OnInit: .@x = 3; callsub(OnCheck, "Dangling else", .@x, 0); + + // Array operations + .@x[0] = 1; + callsub(OnCheck, "Array size (single value)", getarraysize(.@x), 1); + .@x[0] = 0; + callsub(OnCheck, "Array size (single value removal)", getarraysize(.@x), 0); + + .@x[0] = 1; + .@x[1] = 2; + .@x[2] = 3; + .@x[5] = 4; + .@x[8] = 5; + .@x[9] = 0; + setarray .@y[0], 1, 2, 3, 0, 0, 4, 0, 0, 5; + callsub(OnCheck, "Array size (assignment)", getarraysize(.@x), 9); + callsub(OnCheck, "Array size (setarray)", getarraysize(.@y), 9); + for (.@i = 0; .@i < 10; ++.@i) { + callsub(OnCheck, "Array subscript and setarray [" + .@i + "]", .@x[.@i], .@y[.@i]); + } + + cleararray .@x[1], 8, 6; + callsub(OnCheck, "cleararray (value) [0]", .@x[0], 1); + for (.@i = 1; .@i < 7; ++.@i) { + callsub(OnCheck, "cleararray (value) [" + .@i + "]", .@x[.@i], 8); + } + callsub(OnCheck, "cleararray (value) [7]", .@x[7], 0); + callsub(OnCheck, "cleararray (value) [8]", .@x[8], 5); + callsub(OnCheck, "cleararray (value) [9]", .@x[9], 0); + + cleararray .@x, 0, getarraysize(.@x); + cleararray .@y, 0, getarraysize(.@y); + callsub(OnCheck, "cleararray and getarraysize", getarraysize(.@x), 0); + for (.@i = 0; .@i < 10; ++.@i) { + callsub(OnCheck, "cleararray (zero) [" + .@i + "]", .@x[.@i], 0); + } + + cleararray .@x, 0, getarraysize(.@x); + setarray .@x[1], 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0, 13, 14, 15, 16; + deletearray .@x; + callsub(OnCheck, "deletearray (clear) and getarraysize", getarraysize(.@x), 0); + for (.@i = 0; .@i < 18; ++.@i) { + callsub(OnCheck, "deletearray (clear) [" + .@i + "]", .@x[.@i], 0); + } + + deletearray .@x; + deletearray .@y; + setarray .@x[1], 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0, 0, 13, 14, 15, 16; + setarray .@y, 0, 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0, 13, 14, 15, 16; + deletearray .@x[9], 1; + callsub(OnCheck, "deletearray (single) and getarraysize", getarraysize(.@x), 16); + for (.@i = 0; .@i < 18; ++.@i) { + callsub(OnCheck, "deletearray (single) [" + .@i + "]", .@x[.@i], .@y[.@i]); + } + + deletearray .@x; + deletearray .@y; + setarray .@x[1], 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0, 13, 14, 15, 16; + setarray .@y, 0, 1, 6, 7, 8, 0, 0, 0, 13, 14, 15, 16; + deletearray .@x[2], 4; + callsub(OnCheck, "deletearray (multiple) and getarraysize", getarraysize(.@x), 12); + for (.@i = 0; .@i < 18; ++.@i) { + callsub(OnCheck, "deletearray (multiple) [" + .@i + "]", .@x[.@i], .@y[.@i]); + } + + deletearray .@x; + deletearray .@y; + setarray .@x[1], 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0, 13, 14, 15, 16; + setarray .@y, 0, 1; + deletearray .@x[2], 1000; + callsub(OnCheck, "deletearray (large count) and getarraysize", getarraysize(.@x), 2); + for (.@i = 0; .@i < 18; ++.@i) { + callsub(OnCheck, "deletearray (large count) [" + .@i + "]", .@x[.@i], .@y[.@i]); + } + + deletearray .@x; + deletearray .@y; + setarray .@x[1], 1, 2, 0, 0, 0, 6, 7, 8, 0, 0, 0, 13, 14, 15, 16; + setarray .@y, 0, 1; + deletearray .@x[2]; + callsub(OnCheck, "deletearray (truncate) and getarraysize", getarraysize(.@x), 2); + for (.@i = 0; .@i < 18; ++.@i) { + callsub(OnCheck, "deletearray (truncate) [" + .@i + "]", .@x[.@i], .@y[.@i]); + } + + deletearray .@x; + .@x[1] = 2; + .@x[65536] = 1; + callsub(OnCheck, "large array index", .@x[65536], 1); + callsub(OnCheck, "large array index and getarraysize", getarraysize(.@x), 65537); + .@x[65536] = 0; + callsub(OnCheck, "large array index (shrink)", .@x[65536], 0); + callsub(OnCheck, "large array index and getarraysize (shrink)", getarraysize(.@x), 2); + .@x[1] = 0; + callsub(OnCheck, "array shrink", .@x[1], 0); + callsub(OnCheck, "array shrink and getarraysize", getarraysize(.@x), 0); + + + // Constants + callsub(OnCheck, "'true' constant", true, 1); + callsub(OnCheck, "'false' constant", false, 0); + callsub(OnCheck, "'PORING' mob ID", PORING, 1002); + callsub(OnCheck, "'NV_BASIC' skill ID", NV_BASIC, 1); + callsub(OnCheck, "'Red_Potion' item ID", Red_Potion, 501); + callsub(OnCheck, "'Monster's_Feed' item ID", Monster's_Feed, 528); + + + // setd/getd + .@x = 1; .@x$ = ".@x"; + callsub(OnCheck, "getd", getd(".@x"), 1); + callsub(OnCheck, "getd arguments", getd(.@x$), 1); + .@y = 0; .@y$ = ".@y"; + setd(".@y", .@x); + callsub(OnCheck, "setd", .@y, 1); + setd(.@y$, 2); + callsub(OnCheck, "setd arguments", .@y, 2); + set getd(".@x"), getd(".@y"); + callsub(OnCheck, "set getd", .@x, .@y); + .@y = 1; + setd(".@x", getd(".@y")); + callsub(OnCheck, "setd getd", .@x, .@y); + + if (.errors) { debugmes "Script engine self-test [ FAILED ]"; - debugmes "The test was completed with " + .errors + " errors."; + debugmes "**** The test was completed with " + .errors + " errors. ****"; } else { debugmes "Script engine self-test [ PASSED ]"; } diff --git a/sql-files/main.sql b/sql-files/main.sql index 906c329fa..398bdcfe4 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -189,20 +189,6 @@ CREATE TABLE IF NOT EXISTS `hotkey` ( ) ENGINE=MyISAM; -- --- Table structure for table `global_reg_value` --- - -CREATE TABLE IF NOT EXISTS `global_reg_value` ( - `char_id` int(11) unsigned NOT NULL default '0', - `str` varchar(255) NOT NULL default '', - `value` varchar(255) NOT NULL default '0', - `type` tinyint(1) NOT NULL default '3', - `account_id` int(11) unsigned NOT NULL default '0', - PRIMARY KEY (`char_id`,`str`,`account_id`), - KEY `account_id` (`account_id`) -) ENGINE=MyISAM; - --- -- Table structure for table `guild` -- @@ -462,11 +448,10 @@ INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `sex`, `email`) VALUES -- CREATE TABLE IF NOT EXISTS `mapreg` ( - `varname` varchar(32) NOT NULL, + `varname` varchar(32) BINARY NOT NULL, `index` int(11) unsigned NOT NULL default '0', `value` varchar(255) NOT NULL, - KEY `varname` (`varname`), - KEY `index` (`index`) + PRIMARY KEY (`varname`,`index`) ) ENGINE=MyISAM; -- @@ -672,6 +657,8 @@ INSERT INTO `sql_updates` (`timestamp`) VALUES (1383955424); INSERT INTO `sql_updates` (`timestamp`) VALUES (1384545461); INSERT INTO `sql_updates` (`timestamp`) VALUES (1384588175); INSERT INTO `sql_updates` (`timestamp`) VALUES (1387844126); +INSERT INTO `sql_updates` (`timestamp`) VALUES (1388854043); +INSERT INTO `sql_updates` (`timestamp`) VALUES (1389028967); -- -- Table structure for table `sstatus` @@ -743,3 +730,106 @@ CREATE TABLE IF NOT EXISTS `npc_market_data` ( PRIMARY KEY (`name`,`itemid`) ) ENGINE=MyISAM; +-- +-- Table structure for table `acc_reg_num_db` +-- + +CREATE TABLE IF NOT EXISTS `acc_reg_num_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` int(11) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `acc_reg_str_db` +-- + +CREATE TABLE IF NOT EXISTS `acc_reg_str_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` varchar(254) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `char_reg_num_db` +-- + +CREATE TABLE IF NOT EXISTS `char_reg_num_db` ( + `char_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` int(11) NOT NULL default '0', + PRIMARY KEY (`char_id`,`key`,`index`), + KEY `char_id` (`char_id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `char_reg_str_db` +-- + +CREATE TABLE IF NOT EXISTS `char_reg_str_db` ( + `char_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` varchar(254) NOT NULL default '0', + PRIMARY KEY (`char_id`,`key`,`index`), + KEY `char_id` (`char_id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `global_acc_reg_num_db` +-- + +CREATE TABLE IF NOT EXISTS `global_acc_reg_num_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` int(11) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `global_acc_reg_str_db` +-- + + +CREATE TABLE IF NOT EXISTS `global_acc_reg_str_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` varchar(254) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `autotrade_merchants` +-- + +CREATE TABLE IF NOT EXISTS `autotrade_merchants` ( + `account_id` int(11) NOT NULL default '0', + `char_id` int(11) NOT NULL default '0', + `sex` tinyint(2) NOT NULL default '0', + `title` varchar(80) NOT NULL default 'Buy From Me!', + PRIMARY KEY (`account_id`,`char_id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `autotrade_data` +-- + +CREATE TABLE IF NOT EXISTS `autotrade_data` ( + `char_id` int(11) NOT NULL default '0', + `itemkey` int(11) NOT NULL default '0', + `amount` int(11) NOT NULL default '0', + `price` int(11) NOT NULL default '0', + PRIMARY KEY (`char_id`,`itemkey`) +) ENGINE=MyISAM; + diff --git a/sql-files/mob_db.sql b/sql-files/mob_db.sql index f51df2d07..894c34650 100644 --- a/sql-files/mob_db.sql +++ b/sql-files/mob_db.sql @@ -64,18 +64,17 @@ CREATE TABLE `mob_db` ( PRIMARY KEY (`ID`) ) ENGINE=MyISAM; -# Monster Database -# -# Structure of Database : +# Monster Database +# +# Structure of Database : # REPLACE INTO `mob_db` VALUES ( ID,'Sprite_Name','kROName','iROName',LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Mode,Speed,aDelay,aMotion,dMotion,MEXP,MVP1id,MVP1per,MVP2id,MVP2per,MVP3id,MVP3per,Drop1id,Drop1per,Drop2id,Drop2per,Drop3id,Drop3per,Drop4id,Drop4per,Drop5id,Drop5per,Drop6id,Drop6per,Drop7id,Drop7per,Drop8id,Drop8per,Drop9id,Drop9per,DropCardid,DropCardper); -# Note: Keep the Sprite_Name field as it is (in the game client). You may change Name,JName field tough - +# Note: Keep the Sprite_Name field as it is in the game client. REPLACE INTO `mob_db` VALUES (1001,'SCORPION','Scorpion','Scorpion',24,1109,0,287,176,1,80,135,30,0,1,24,24,5,52,5,10,12,0,4,23,0x3195,200,1564,864,576,0,0,0,0,0,0,0,990,70,904,5500,757,57,943,210,7041,100,508,200,625,20,0,0,0,0,4068,1); REPLACE INTO `mob_db` VALUES (1002,'PORING','Poring','Poring',1,50,0,2,1,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,512,150,619,20,0,0,0,0,4001,1); -#REPLACE INTO `mob_db` VALUES (1003,'TESTEGG','Test Egg','Test Egg',2,100000,0,10,10,0,3,9,99,0,1,99,1,1,1,1,10,12,0,4,22,0x0,512,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1003,'TESTEGG','Test Egg','Test Egg',2,100000,0,10,10,0,3,9,99,0,1,99,1,1,1,1,10,12,0,4,22,0x0,512,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1004,'HORNET','Hornet','Hornet',8,169,0,19,15,1,22,27,5,5,6,20,8,10,17,5,10,12,0,4,24,0x1189,150,1292,792,216,0,0,0,0,0,0,0,992,80,939,9000,909,3500,1208,15,511,350,518,150,0,0,0,0,0,0,4019,1); REPLACE INTO `mob_db` VALUES (1005,'FARMILIAR','Familiar','Familiar',8,155,0,28,15,1,20,28,0,0,1,12,8,5,28,0,10,12,0,2,27,0x3885,150,1276,576,384,0,0,0,0,0,0,0,913,5500,1105,20,2209,15,601,50,514,100,507,700,645,50,0,0,0,0,4020,1); -#REPLACE INTO `mob_db` VALUES (1006,'THIEF_BUG_LARVA','Thief Bug Larva','Thief Bug Larva',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x651,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1006,'THIEF_BUG_LARVA','Thief Bug Larva','Thief Bug Larva',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x651,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1007,'FABRE','Fabre','Fabre',2,63,0,3,2,1,8,11,0,0,1,2,4,0,7,5,10,12,0,4,22,0x181,400,1672,672,480,0,0,0,0,0,0,0,914,6500,949,500,1502,80,721,5,511,700,705,1000,1501,200,0,0,0,0,4002,1); REPLACE INTO `mob_db` VALUES (1008,'PUPA','Pupa','Pupa',2,427,0,2,4,0,1,2,0,20,1,1,1,0,1,20,10,12,0,4,22,0x100,1000,1001,1,1,0,0,0,0,0,0,0,1010,80,915,5500,938,600,2102,2,935,1000,938,600,1002,200,0,0,0,0,4003,1); REPLACE INTO `mob_db` VALUES (1009,'CONDOR','Condor','Condor',5,92,0,6,5,1,11,14,0,0,1,13,5,0,13,10,10,12,1,2,24,0x1089,150,1148,648,480,0,0,0,0,0,0,0,917,9000,1702,150,715,80,1750,5500,517,400,916,2000,582,600,0,0,0,0,4015,1); @@ -86,17 +85,17 @@ REPLACE INTO `mob_db` VALUES (1013,'WOLF','Wolf','Wolf',25,919,0,329,199,1,37,46 REPLACE INTO `mob_db` VALUES (1014,'SPORE','Spore','Spore',16,510,0,66,108,1,24,48,0,5,1,12,12,5,19,8,10,12,1,3,21,0x81,200,1872,672,288,0,0,0,0,0,0,0,921,9000,507,800,510,50,743,10,2220,40,7033,5,578,600,0,0,0,0,4022,1); REPLACE INTO `mob_db` VALUES (1015,'ZOMBIE','Zombie','Zombie',15,534,0,50,33,1,67,79,0,10,1,8,7,0,15,0,10,12,1,1,29,0x3885,400,2612,912,288,0,0,0,0,0,0,0,957,9000,724,5,938,1000,958,50,727,70,0,0,0,0,0,0,0,0,4038,1); REPLACE INTO `mob_db` VALUES (1016,'ARCHER_SKELETON','Archer Skeleton','Archer Skeleton',31,3040,0,483,283,9,128,153,0,0,1,8,14,5,90,5,10,12,1,1,29,0x2085,300,2864,864,576,0,0,0,0,0,0,0,932,4500,756,70,2285,3,1708,35,1752,1000,507,1800,1701,150,0,0,0,0,4094,1); -#REPLACE INTO `mob_db` VALUES (1017,'THIEF_BUG_FEMALE','Thief Bug Female','Thief Bug Female',10,170,0,35,18,1,33,40,5,5,1,15,10,5,23,5,10,12,1,4,27,0x651,200,988,288,768,0,0,0,0,0,0,0,955,3500,910,250,1108,15,928,200,507,400,716,50,1002,400,0,0,0,0,4026,1); +# REPLACE INTO `mob_db` VALUES (1017,'THIEF_BUG_FEMALE','Thief Bug Female','Thief Bug Female',10,170,0,35,18,1,33,40,5,5,1,15,10,5,23,5,10,12,1,4,27,0x651,200,988,288,768,0,0,0,0,0,0,0,955,3500,910,250,1108,15,928,200,507,400,716,50,1002,400,0,0,0,0,4026,1); REPLACE INTO `mob_db` VALUES (1018,'CREAMY','Creamy','Creamy',16,595,0,105,70,1,53,64,0,30,1,40,16,15,16,55,10,12,0,4,24,0x181,150,1136,720,840,0,0,0,0,0,0,0,924,9000,2322,10,518,150,602,100,2207,2,712,500,692,100,0,0,0,0,4040,1); REPLACE INTO `mob_db` VALUES (1019,'PECOPECO','Peco Peco','Peco Peco',19,531,0,159,72,1,50,64,0,0,1,13,13,25,27,9,10,12,2,2,23,0x1089,200,1564,864,576,0,0,0,0,0,0,0,925,9000,2402,20,508,200,507,900,1604,100,0,0,582,1000,0,0,0,0,4031,1); REPLACE INTO `mob_db` VALUES (1020,'MANDRAGORA','Mandragora','Mandragora',12,405,0,45,32,4,26,35,0,25,1,12,24,0,36,15,10,12,1,3,62,0x84,1000,1768,768,576,0,0,0,0,0,0,0,993,50,905,9000,1405,30,511,350,711,300,706,3,1967,10,0,0,0,0,4030,1); -#REPLACE INTO `mob_db` VALUES (1021,'THIEF_BUG_MALE','Thief Bug Male','Thief Bug Male',19,583,0,223,93,1,76,88,15,5,1,29,16,5,36,1,10,12,1,4,27,0x653,300,988,288,768,0,0,0,0,0,0,0,1011,40,928,5500,955,1500,1152,10,508,90,729,5,1116,50,0,0,0,0,4050,1); -#REPLACE INTO `mob_db` VALUES (1022,'WEREWOLF','Werewolf','Werewolf',80,28600,0,11813,7289,2,2560,3280,65,35,1,97,60,1,135,52,10,10,2,0,40,0x163,200,1500,768,652,0,0,0,0,0,0,0,999,500,1034,4000,984,500,985,500,7017,800,0,0,1912,300,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1021,'THIEF_BUG_MALE','Thief Bug Male','Thief Bug Male',19,583,0,223,93,1,76,88,15,5,1,29,16,5,36,1,10,12,1,4,27,0x653,300,988,288,768,0,0,0,0,0,0,0,1011,40,928,5500,955,1500,1152,10,508,90,729,5,1116,50,0,0,0,0,4050,1); +# REPLACE INTO `mob_db` VALUES (1022,'WEREWOLF','Werewolf','Werewolf',80,28600,0,11813,7289,2,2560,3280,65,35,1,97,60,1,135,52,10,10,2,0,40,0x163,200,1500,768,652,0,0,0,0,0,0,0,999,500,1034,4000,984,500,985,500,7017,800,0,0,1912,300,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1023,'ORK_WARRIOR','Orc Warrior','Orc Warrior',24,1400,0,408,160,1,104,126,10,5,1,24,48,25,34,10,10,12,1,7,22,0x3885,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,9000,756,40,2267,3,1352,10,1304,5,1301,100,0,0,0,0,4066,1); REPLACE INTO `mob_db` VALUES (1024,'WORM_TAIL','Wormtail','Wormtail',14,426,0,59,40,2,42,51,5,0,1,14,28,5,46,5,10,12,1,3,22,0x91,200,1048,48,192,0,0,0,0,0,0,0,993,60,1011,25,906,5500,1408,30,508,70,721,5,10015,100,0,0,0,0,4034,1); REPLACE INTO `mob_db` VALUES (1025,'SNAKE','Snake','Boa',15,471,0,72,48,1,46,55,0,0,1,15,15,10,35,5,10,12,1,2,22,0x81,200,1576,576,576,0,0,0,0,0,0,0,926,9000,1117,15,507,900,1011,35,937,800,954,1,578,600,0,0,0,0,4037,1); REPLACE INTO `mob_db` VALUES (1026,'MUNAK','Munak','Munak',30,2872,0,601,318,1,150,230,0,0,1,15,20,5,46,15,10,12,1,1,29,0x3885,200,2468,768,288,0,0,0,0,0,0,0,901,9000,2264,2,2404,15,609,20,2337,1,2305,100,1558,5,0,0,0,0,4090,1); -#REPLACE INTO `mob_db` VALUES (1027,'RAPTICE','Raptice','Raptice',17,600,0,100,55,1,0,0,5,10,5,20,20,0,28,10,10,12,1,2,22,0x131,200,2000,1000,500,0,0,0,0,0,0,0,909,7000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1027,'RAPTICE','Raptice','Raptice',17,600,0,100,55,1,0,0,5,10,5,20,20,0,28,10,10,12,1,2,22,0x131,200,2000,1000,500,0,0,0,0,0,0,0,909,7000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1028,'SOLDIER_SKELETON','Soldier Skeleton','Soldier Skeleton',29,2334,0,372,226,1,221,245,10,15,1,15,22,5,40,15,10,12,1,1,29,0x3885,200,2276,576,432,0,0,0,0,0,0,0,932,5500,756,60,1214,12,507,700,934,10,1201,150,1216,50,0,0,0,0,4086,1); REPLACE INTO `mob_db` VALUES (1029,'ISIS','Isis','Isis',47,7003,0,3709,1550,1,423,507,10,35,38,65,43,50,66,15,10,12,2,6,27,0x3195,200,1384,768,336,0,0,0,0,0,0,0,936,5335,2233,5,2603,1,733,150,732,20,954,1000,731,5,0,0,0,0,4116,1); REPLACE INTO `mob_db` VALUES (1030,'ANACONDAQ','Anacondaq','Anacondaq',23,1109,0,300,149,1,124,157,0,0,1,23,28,10,36,5,10,12,1,2,25,0x91,200,1576,576,576,0,0,0,0,0,0,0,1011,50,937,9000,1455,10,926,1500,936,200,508,150,756,50,0,0,0,0,4062,1); @@ -108,11 +107,11 @@ REPLACE INTO `mob_db` VALUES (1035,'HUNTER_FLY','Hunter Fly','Hunter Fly',42,524 REPLACE INTO `mob_db` VALUES (1036,'GHOUL','Ghoul','Ghoul',40,5418,0,1088,622,1,420,500,5,20,1,20,29,0,45,20,10,12,1,1,49,0x3885,250,2456,912,504,0,0,0,0,0,0,0,958,6000,756,110,509,700,511,800,2609,60,934,150,1260,1,0,0,0,0,4110,1); REPLACE INTO `mob_db` VALUES (1037,'SIDE_WINDER','Side Winder','Side Winder',43,4929,0,1996,993,1,240,320,5,10,38,43,40,15,115,20,10,12,1,2,25,0x3095,200,1576,576,576,0,0,0,0,0,0,0,954,5335,912,1400,756,134,1120,2,937,2500,926,5000,509,1000,0,0,0,0,4117,1); REPLACE INTO `mob_db` VALUES (1038,'OSIRIS','Osiris','Osiris',78,415400,0,71500,28600,1,780,2880,10,25,1,75,30,37,86,40,10,12,1,1,89,0x37B5,100,1072,672,384,35750,603,4000,608,3000,751,500,617,2000,1232,150,2235,200,1255,600,1009,1000,5053,150,1285,100,0,0,0,0,4144,1); -REPLACE INTO `mob_db` VALUES (1039,'BAPHOMET','Baphomet','Baphomet',81,668000,0,107250,37895,2,3220,4040,35,45,1,152,30,85,120,95,10,12,2,6,67,0x37B5,100,768,768,576,53625,607,2000,750,500,923,5000,1466,200,2256,200,1476,50,714,500,5160,10,985,5432,984,4171,0,0,0,0,4147,1); +REPLACE INTO `mob_db` VALUES (1039,'BAPHOMET','Baphomet','Baphomet',81,668000,0,107250,37895,2,3220,4040,35,45,1,152,30,85,120,95,10,12,2,6,67,0x37B5,100,768,768,576,53625,607,2000,750,500,923,5000,1466,400,2256,300,1476,50,714,500,5160,10,985,5432,984,4171,0,0,0,0,4147,1); REPLACE INTO `mob_db` VALUES (1040,'GOLEM','Golem','Golem',25,3900,0,465,94,1,175,187,40,0,1,15,25,0,15,0,10,12,2,0,60,0x91,300,1608,816,396,0,0,0,0,0,0,0,999,150,953,9000,912,220,757,70,1003,210,715,200,998,350,0,0,0,0,4072,1); REPLACE INTO `mob_db` VALUES (1041,'MUMMY','Mummy','Mummy',37,5176,0,800,602,1,305,360,0,10,28,19,32,0,63,20,10,12,1,1,49,0x3885,300,1772,72,384,0,0,0,0,0,0,0,930,9000,756,100,934,550,2604,1,2611,10,525,250,508,850,0,0,0,0,4106,1); REPLACE INTO `mob_db` VALUES (1042,'STEEL_CHONCHON','Steel Chonchon','Steel Chonchon',17,530,0,109,71,1,54,65,15,0,1,43,17,5,33,10,10,12,0,4,24,0x118B,150,1076,576,480,0,0,0,0,0,0,0,992,90,999,30,910,2400,935,9000,943,30,998,200,1002,300,0,0,0,0,4042,1); -#REPLACE INTO `mob_db` VALUES (1043,'SEAHORES','Seahorse','Seahorse',18,1452,0,122,78,3,100,150,15,7,1,1,1,1,1,1,10,10,0,5,22,0x131,200,1500,800,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1043,'SEAHORES','Seahorse','Seahorse',18,1452,0,122,78,3,100,150,15,7,1,1,1,1,1,1,10,10,0,5,22,0x131,200,1500,800,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1044,'OBEAUNE','Obeaune','Obeaune',31,3952,0,644,407,1,141,165,0,40,1,31,31,55,74,85,10,12,1,5,41,0x3095,200,1872,672,288,0,0,0,0,0,0,0,995,13,950,9000,5014,1,2326,10,720,10,951,500,748,30,0,0,0,0,4093,1); REPLACE INTO `mob_db` VALUES (1045,'MARC','Marc','Marc',36,6900,0,988,625,1,220,280,5,10,1,36,36,20,56,30,10,12,1,5,41,0x3885,150,1272,72,480,0,0,0,0,0,0,0,995,18,956,9000,756,95,951,1000,720,10,717,200,509,700,0,0,0,0,4105,1); REPLACE INTO `mob_db` VALUES (1046,'DOPPELGANGER','Doppelganger','Doppelganger',72,249000,0,51480,10725,1,1340,1590,60,35,88,90,30,35,125,65,10,12,1,6,67,0x37B5,100,480,480,288,25740,724,1500,505,6000,0,0,2317,250,1162,220,1168,150,2258,350,1411,550,985,3686,984,2700,0,0,0,0,4142,1); @@ -144,7 +143,7 @@ REPLACE INTO `mob_db` VALUES (1071,'PIRATE_SKEL','Pirate Skeleton','Pirate Skele REPLACE INTO `mob_db` VALUES (1072,'KAHO','Kaho','Kaho',60,8409,0,3990,450,1,110,760,5,50,1,55,43,88,80,46,10,12,1,6,83,0x3985,150,1700,1000,500,0,0,0,0,0,0,0,994,30,1003,150,7097,3000,690,100,757,1000,716,300,970,5,0,0,0,0,4065,1); REPLACE INTO `mob_db` VALUES (1073,'CRAB','Crab','Crab',20,2451,0,163,101,1,71,81,35,0,18,20,15,0,36,15,7,12,0,5,21,0x81,200,992,792,360,0,0,0,0,0,0,0,964,5500,960,1500,7049,700,1001,13,0,0,0,0,757,37,0,0,0,0,4153,1); REPLACE INTO `mob_db` VALUES (1074,'SHELLFISH','Shellfish','Shellfish',15,920,0,66,44,1,35,42,35,0,1,12,8,0,32,5,10,12,0,5,21,0x91,200,864,864,384,0,0,0,0,0,0,0,965,5500,966,1000,7049,500,1056,1000,1001,10,0,0,757,18,0,0,0,0,4273,1); -#REPLACE INTO `mob_db` VALUES (1075,'TURTLE','Turtle','Turtle',3,77,0,0,0,1,1,2,35,0,1,1,1,1,1,1,7,12,0,5,22,0x81,200,500,500,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1075,'TURTLE','Turtle','Turtle',3,77,0,0,0,1,1,2,35,0,1,1,1,1,1,1,7,12,0,5,22,0x81,200,500,500,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1076,'SKELETON','Skeleton','Skeleton',10,234,0,18,14,1,39,47,10,10,1,5,10,0,12,0,10,12,1,1,29,0x91,200,2228,528,576,0,0,0,0,0,0,0,1010,90,932,800,1505,80,909,3000,507,850,2609,30,0,0,0,0,0,0,4025,1); REPLACE INTO `mob_db` VALUES (1077,'POISON_SPORE','Poison Spore','Poison Spore',19,665,0,186,93,1,89,101,0,0,1,19,25,0,24,0,10,12,1,3,25,0x3885,200,1672,672,288,0,0,0,0,0,0,0,7033,9000,2221,20,511,550,510,60,972,50,921,1200,912,5,0,0,0,0,4048,1); REPLACE INTO `mob_db` VALUES (1078,'RED_PLANT','Red Plant','Red Plant',1,10,0,0,0,1,1,2,100,99,0,0,0,0,0,0,7,12,0,3,22,0x40,2000,1,1,1,0,0,0,0,0,0,0,507,5500,712,1000,711,1000,905,500,906,300,914,500,708,50,2269,2,0,0,0,0); @@ -205,8 +204,8 @@ REPLACE INTO `mob_db` VALUES (1132,'KHALITZBURG','Khalitzburg','Khalitzburg',63, REPLACE INTO `mob_db` VALUES (1133,'KOBOLD_1','Kobold','Kobold',36,3893,0,988,625,1,265,318,15,10,1,90,36,30,52,20,10,12,1,7,44,0x308D,150,1028,528,360,0,0,0,0,0,0,0,999,100,1034,5335,912,700,757,25,1220,2,2104,5,0,0,0,0,0,0,4091,1); REPLACE INTO `mob_db` VALUES (1134,'KOBOLD_2','Kobold','Kobold',31,2179,0,806,407,1,262,324,15,10,1,31,31,20,46,20,10,12,1,7,45,0x308D,200,1528,528,360,0,0,0,0,0,0,0,999,100,1034,5335,912,200,2104,3,508,100,2101,100,0,0,0,0,0,0,4091,1); REPLACE INTO `mob_db` VALUES (1135,'KOBOLD_3','Kobold','Kobold',31,2179,0,644,407,1,186,216,15,10,1,31,31,20,88,20,10,12,1,7,43,0x308D,300,1228,528,360,0,0,0,0,0,0,0,990,35,999,100,1034,5335,912,200,1355,5,2104,3,508,100,0,0,0,0,4091,1); -#REPLACE INTO `mob_db` VALUES (1136,'KOBOLD_4','Kobold','Kobold',31,2179,0,806,407,1,262,324,15,10,1,31,31,20,46,20,10,12,1,7,45,0x31AD,200,1528,528,360,0,0,0,0,0,0,0,999,50,1034,5335,912,100,1355,5,2104,3,508,100,1301,150,0,0,0,0,4091,1); -#REPLACE INTO `mob_db` VALUES (1137,'KOBOLD_5','Kobold','Kobold',31,2179,0,644,407,1,186,216,15,10,1,31,31,20,88,20,10,12,1,7,43,0x31AD,300,1228,528,360,0,0,0,0,0,0,0,999,40,1034,5335,912,100,1514,5,2104,3,508,100,1501,150,0,0,0,0,4091,1); +# REPLACE INTO `mob_db` VALUES (1136,'KOBOLD_4','Kobold','Kobold',31,2179,0,806,407,1,262,324,15,10,1,31,31,20,46,20,10,12,1,7,45,0x31AD,200,1528,528,360,0,0,0,0,0,0,0,999,50,1034,5335,912,100,1355,5,2104,3,508,100,1301,150,0,0,0,0,4091,1); +# REPLACE INTO `mob_db` VALUES (1137,'KOBOLD_5','Kobold','Kobold',31,2179,0,644,407,1,186,216,15,10,1,31,31,20,88,20,10,12,1,7,43,0x31AD,300,1228,528,360,0,0,0,0,0,0,0,999,40,1034,5335,912,100,1514,5,2104,3,508,100,1501,150,0,0,0,0,4091,1); REPLACE INTO `mob_db` VALUES (1138,'MAGNOLIA','Magnolia','Magnolia',26,3195,0,393,248,1,120,151,5,30,1,26,26,0,39,5,10,12,0,6,21,0x183,250,1560,360,360,0,0,0,0,0,0,0,7031,9000,910,800,911,100,912,10,737,40,508,400,12127,5,0,0,0,0,4076,1); REPLACE INTO `mob_db` VALUES (1139,'MANTIS','Mantis','Mantis',26,2472,0,393,248,1,118,149,10,0,1,26,24,5,45,15,10,12,1,4,22,0x3195,200,1528,660,432,0,0,0,0,0,0,0,993,110,1031,9000,911,1400,757,70,943,250,721,10,507,650,0,0,0,0,4079,1); REPLACE INTO `mob_db` VALUES (1140,'MARDUK','Marduk','Marduk',40,4214,0,1238,752,1,315,382,0,60,1,40,20,79,78,20,10,12,2,7,23,0x3095,300,1540,840,504,0,0,0,0,0,0,0,994,35,1045,4365,1608,10,2617,1,1614,3,691,100,642,20,0,0,0,0,4112,1); @@ -237,12 +236,12 @@ REPLACE INTO `mob_db` VALUES (1164,'REQUIEM','Requiem','Requiem',35,3089,0,800,4 REPLACE INTO `mob_db` VALUES (1165,'SAND_MAN','Sandman','Sandman',34,3413,0,810,492,1,180,205,10,25,24,34,58,38,60,5,10,12,1,0,62,0x3885,250,1672,720,288,0,0,0,0,0,0,0,997,35,1056,5335,757,118,7043,350,1001,200,1257,1,1622,5,0,0,0,0,4101,1); REPLACE INTO `mob_db` VALUES (1166,'SAVAGE','Savage','Savage',26,2092,0,521,248,1,120,150,10,5,1,26,54,10,37,15,10,12,2,2,42,0x91,150,1960,960,384,0,0,0,0,0,0,0,1028,9000,514,300,702,2,2276,1,605,10,757,70,526,2,0,0,0,0,4078,1); REPLACE INTO `mob_db` VALUES (1167,'SAVAGE_BABE','Savage Babe','Savage Babe',7,182,0,14,12,1,20,25,0,0,1,7,14,5,12,35,10,12,0,2,22,0x81,400,1624,624,576,0,0,0,0,0,0,0,919,9000,1302,100,517,500,1750,1000,949,850,1010,80,627,40,0,0,0,0,4017,1); -#REPLACE INTO `mob_db` VALUES (1168,'SCORPION_KING','Scorpion King','Scorpion King',50,6354,0,2187,1346,1,500,603,40,10,1,50,47,1,83,30,10,12,2,7,23,0x1B1,200,1700,1000,500,0,0,0,0,0,0,0,994,45,1046,4850,1005,15,904,5000,943,3000,509,700,0,0,0,0,0,0,4130,1); +# REPLACE INTO `mob_db` VALUES (1168,'SCORPION_KING','Scorpion King','Scorpion King',50,6354,0,2187,1346,1,500,603,40,10,1,50,47,1,83,30,10,12,2,7,23,0x1B1,200,1700,1000,500,0,0,0,0,0,0,0,994,45,1046,4850,1005,15,904,5000,943,3000,509,700,0,0,0,0,0,0,4130,1); REPLACE INTO `mob_db` VALUES (1169,'SKEL_WORKER','Skeleton Worker','Skeleton Worker',30,2872,0,397,240,1,242,288,0,15,1,15,30,5,42,10,10,12,1,1,29,0x3885,400,2420,720,384,0,0,0,0,0,0,0,998,400,1041,5500,757,90,5009,2,999,100,1003,200,1002,800,0,0,0,0,4092,1); REPLACE INTO `mob_db` VALUES (1170,'SOHEE','Sohee','Sohee',33,5628,0,739,455,1,210,251,0,10,1,33,33,10,58,15,10,12,1,6,21,0x191,250,2112,912,576,0,0,0,0,0,0,0,1020,9000,1049,50,2277,1,2504,5,1217,5,507,1000,662,350,0,0,0,0,4100,1); -#REPLACE INTO `mob_db` VALUES (1171,'SOLDIER_ANDRE','Soldier Andre','Soldier Andre',22,1245,0,219,138,1,105,127,20,0,1,22,44,20,40,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,2700,911,800,757,10,1111,15,1001,30,943,150,0,0,0,0,0,0,4059,1); -#REPLACE INTO `mob_db` VALUES (1172,'SOLDIER_DENIRO','Soldier Deniro','Soldier Deniro',29,2047,0,450,274,1,162,193,20,0,1,29,58,20,54,10,10,12,0,4,42,0x3095,200,2000,1000,500,0,0,0,0,0,0,0,1014,5500,911,2000,757,15,1111,20,943,270,1001,50,0,0,0,0,0,0,4059,1); -#REPLACE INTO `mob_db` VALUES (1173,'SOLDIER_PIERE','Soldier Piere','Soldier Piere',23,1217,0,240,149,1,109,131,25,0,1,23,46,20,38,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,3100,911,800,911,10,1114,15,1001,35,943,200,0,0,0,0,0,0,4059,1); +# REPLACE INTO `mob_db` VALUES (1171,'SOLDIER_ANDRE','Soldier Andre','Soldier Andre',22,1245,0,219,138,1,105,127,20,0,1,22,44,20,40,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,2700,911,800,757,10,1111,15,1001,30,943,150,0,0,0,0,0,0,4059,1); +# REPLACE INTO `mob_db` VALUES (1172,'SOLDIER_DENIRO','Soldier Deniro','Soldier Deniro',29,2047,0,450,274,1,162,193,20,0,1,29,58,20,54,10,10,12,0,4,42,0x3095,200,2000,1000,500,0,0,0,0,0,0,0,1014,5500,911,2000,757,15,1111,20,943,270,1001,50,0,0,0,0,0,0,4059,1); +# REPLACE INTO `mob_db` VALUES (1173,'SOLDIER_PIERE','Soldier Piere','Soldier Piere',23,1217,0,240,149,1,109,131,25,0,1,23,46,20,38,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,3100,911,800,911,10,1114,15,1001,35,943,200,0,0,0,0,0,0,4059,1); REPLACE INTO `mob_db` VALUES (1174,'STAINER','Stainer','Stainer',16,538,0,105,70,1,53,64,10,0,1,40,16,5,30,5,10,12,0,4,24,0x191,200,1688,1188,612,0,0,0,0,0,0,0,992,70,1011,30,1013,9000,910,2100,757,25,943,10,1002,300,0,0,0,0,4039,1); REPLACE INTO `mob_db` VALUES (1175,'TAROU','Tarou','Tarou',11,284,0,57,28,1,34,45,0,0,1,20,11,10,24,5,10,12,0,2,27,0x91,150,1744,1044,684,0,0,0,0,0,0,0,1016,9000,919,3000,949,800,528,1000,701,2,0,0,0,0,0,0,0,0,4028,1); REPLACE INTO `mob_db` VALUES (1176,'VITATA','Vitata','Vitata',20,894,0,163,101,1,69,80,15,20,1,20,25,65,40,70,10,12,0,4,22,0x191,300,1768,768,384,0,0,0,0,0,0,0,993,90,955,5000,911,200,518,350,518,350,526,200,756,26,0,0,0,0,4053,1); @@ -250,7 +249,7 @@ REPLACE INTO `mob_db` VALUES (1177,'ZENORC','Zenorc','Zenorc',31,2585,0,967,407, REPLACE INTO `mob_db` VALUES (1178,'ZEROM','Zerom','Zerom',23,1109,0,240,149,1,127,155,0,10,1,23,23,5,42,0,10,12,1,7,23,0x3885,200,1780,1080,432,0,0,0,0,0,0,0,1011,55,998,190,2339,200,2265,3,2408,10,1002,300,1002,300,0,0,0,0,4064,1); REPLACE INTO `mob_db` VALUES (1179,'WHISPER','Whisper','Whisper',34,1796,0,591,599,1,180,221,0,45,1,51,14,0,60,0,10,12,0,6,68,0x3195,150,1960,960,504,0,0,0,0,0,0,0,1001,150,1059,5335,2282,1,2333,10,0,0,0,0,0,0,0,0,0,0,4102,1); REPLACE INTO `mob_db` VALUES (1180,'NINE_TAIL','Nine Tail','Nine Tail',51,7766,0,2812,825,1,610,734,10,25,1,80,46,1,74,85,10,12,1,2,63,0x3695,150,840,540,480,0,0,0,0,0,0,0,1022,4656,746,200,603,100,604,100,526,250,525,350,756,100,0,0,0,0,4159,1); -#REPLACE INTO `mob_db` VALUES (1181,'ZOMBIE_DRAGON','Zombie Dragon','Zombie Dragon',1,1000,0,49500,1650,3,7900,9140,0,0,120,145,145,145,130,120,10,12,2,9,89,0x37B5,400,2700,1000,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1181,'ZOMBIE_DRAGON','Zombie Dragon','Zombie Dragon',1,1000,0,49500,1650,3,7900,9140,0,0,120,145,145,145,130,120,10,12,2,9,89,0x37B5,400,2700,1000,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1182,'THIEF_MUSHROOM','Thief Mushroom','Thief Mushroom',1,15,0,0,0,1,1,2,100,99,0,0,0,0,0,0,7,12,0,3,22,0x40,2000,1,1,1,0,0,0,0,0,0,0,1069,1500,1070,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1183,'CHONCHON_','Chonchon','Chonchon',4,67,0,5,4,1,10,13,10,0,1,10,4,5,12,2,10,12,0,4,24,0x3985,200,1076,576,480,0,0,0,0,0,0,0,998,50,935,5500,909,1500,1205,55,601,100,742,5,0,0,0,0,0,0,4009,1); REPLACE INTO `mob_db` VALUES (1184,'FABRE_','Fabre','Fabre',1,30,0,1,0,1,4,7,0,0,1,2,1,1,4,5,10,12,0,4,22,0x3985,400,1672,672,480,0,0,0,0,0,0,0,914,2000,949,250,1502,80,721,2,511,350,705,500,1501,200,0,0,0,0,0,0); @@ -259,7 +258,7 @@ REPLACE INTO `mob_db` VALUES (1186,'WHISPER_BOSS','Giant Whisper','Giant Whisper REPLACE INTO `mob_db` VALUES (1187,'SWITCH','Switch','Switch',1,2,0,1,1,1,1,2,0,0,1,1,1,0,1,0,1,12,1,0,20,0x0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1188,'BON_GUN','Bongun','Bongun',32,3520,0,424,242,1,220,260,0,0,45,15,36,10,48,15,10,12,1,1,29,0x3095,200,1720,500,420,0,0,0,0,0,0,0,1094,5500,7014,40,618,60,5046,1,609,15,508,1000,508,1250,0,0,0,0,4212,1); REPLACE INTO `mob_db` VALUES (1189,'ORC_ARCHER','Orc Archer','Orc Archer',49,7440,0,1729,1787,9,310,390,10,5,1,44,25,20,125,20,10,12,1,7,22,0x3095,300,1960,620,480,0,0,0,0,0,0,0,1063,4656,1753,1000,1756,2500,1755,2500,1734,2,507,1400,509,900,0,0,0,0,4256,1); -REPLACE INTO `mob_db` VALUES (1190,'ORC_LORD','Orc Lord','Orc Lord',74,783000,0,62205,8580,1,3700,4150,40,5,85,82,30,70,110,85,10,12,2,7,82,0x37B5,100,1248,500,360,31102,968,5500,617,2000,0,0,1363,200,2601,500,5007,150,1371,400,617,1000,985,4268,16000,100,0,0,0,0,4135,1); +REPLACE INTO `mob_db` VALUES (1190,'ORC_LORD','Orc Lord','Orc Lord',74,783000,0,62205,8580,1,3700,4150,40,5,85,82,30,70,110,85,10,12,2,7,82,0x37B5,100,1248,500,360,31102,968,5500,617,2000,0,0,1363,400,2621,400,5007,400,1371,400,617,1000,985,4268,16000,3100,0,0,0,0,4135,1); REPLACE INTO `mob_db` VALUES (1191,'MIMIC','Mimic','Mimic',51,6120,182,165,165,1,150,900,10,40,44,121,1,60,75,110,10,12,1,0,60,0x3095,100,972,500,288,0,0,0,0,0,0,0,617,5,603,45,1065,1200,611,3000,714,3,2626,1,757,270,0,0,0,0,4205,1); REPLACE INTO `mob_db` VALUES (1192,'WRAITH','Wraith','Wraith',53,10999,0,2199,1099,1,580,760,5,30,1,95,30,65,95,35,10,12,2,1,89,0x3695,300,1816,576,240,0,0,0,0,0,0,0,1059,5820,2206,10,2506,2,716,650,602,1300,2505,10,731,5,0,0,0,0,4190,1); REPLACE INTO `mob_db` VALUES (1193,'ALARM','Alarm','Alarm',58,10647,0,3987,2300,1,480,600,15,15,1,62,72,10,85,45,10,12,1,0,60,0x3695,300,1020,500,768,0,0,0,0,0,0,0,1095,5335,2607,1,7005,1500,611,1300,984,105,7026,20,912,1500,0,0,0,0,4244,1); @@ -279,7 +278,7 @@ REPLACE INTO `mob_db` VALUES (1206,'ANOLIAN','Anolian','Anolian',61,18960,0,5900 REPLACE INTO `mob_db` VALUES (1207,'STING','Sting','Sting',61,9500,0,4081,2970,1,850,1032,5,30,57,45,55,5,120,85,10,12,1,0,62,0x3695,300,528,500,240,0,0,0,0,0,0,0,7004,4850,1756,1500,2624,1,1003,130,997,25,10007,10,719,3,0,0,0,0,4226,1); REPLACE INTO `mob_db` VALUES (1208,'WANDER_MAN','Wander Man','Wanderer',74,8170,0,5786,4730,2,450,1170,5,5,1,192,38,45,127,85,10,12,1,6,24,0x3795,100,672,500,192,0,0,0,0,0,0,0,7005,4850,616,1,13015,5,2270,5,610,650,984,217,1164,1,0,0,0,0,4210,1); REPLACE INTO `mob_db` VALUES (1209,'CRAMP','Cramp','Cramp',56,4720,0,2300,1513,1,395,465,0,5,1,85,35,5,65,60,10,12,0,2,45,0x3095,100,1000,500,1000,0,0,0,0,0,0,0,7007,4656,528,1000,726,80,746,110,568,250,510,70,984,95,0,0,0,0,4296,1); -#REPLACE INTO `mob_db` VALUES (1210,'FILAMENTOUS','Filamentous','Filamentous',51,6088,0,1926,1353,1,425,525,35,10,1,35,30,5,83,40,10,12,1,4,23,0x3095,200,1500,500,1000,0,0,0,0,0,0,0,7008,4850,947,8000,943,3880,993,200,1451,40,757,18,509,1600,0,0,0,0,4045,1); +# REPLACE INTO `mob_db` VALUES (1210,'FILAMENTOUS','Filamentous','Filamentous',51,6088,0,1926,1353,1,425,525,35,10,1,35,30,5,83,40,10,12,1,4,23,0x3095,200,1500,500,1000,0,0,0,0,0,0,0,7008,4850,947,8000,943,3880,993,200,1451,40,757,18,509,1600,0,0,0,0,4045,1); REPLACE INTO `mob_db` VALUES (1211,'BRILIGHT','Brilight','Brilight',46,5562,0,1826,1331,1,298,383,30,5,1,90,15,10,50,35,10,12,0,4,23,0x3195,200,1500,500,1000,0,0,0,0,0,0,0,7009,5335,992,200,912,1200,602,1000,757,220,610,250,509,2600,0,0,0,0,4213,1); REPLACE INTO `mob_db` VALUES (1212,'IRON_FIST','Iron Fist','Iron Fist',47,4221,0,1435,1520,1,430,590,40,5,1,25,15,10,81,20,10,12,1,4,60,0x3195,200,1500,500,1000,0,0,0,0,0,0,0,7010,5335,757,229,757,22,1002,750,999,180,998,300,0,0,0,0,0,0,4239,1); REPLACE INTO `mob_db` VALUES (1213,'HIGH_ORC','High Orc','High Orc',52,6890,0,3618,1639,1,428,533,15,5,55,46,55,35,82,40,10,12,2,7,43,0x3695,150,1500,500,1000,0,0,0,0,0,0,0,7002,2500,1304,10,999,90,931,7500,912,1300,756,196,508,900,0,0,0,0,4322,1); @@ -289,18 +288,18 @@ REPLACE INTO `mob_db` VALUES (1216,'PENOMENA','Penomena','Penomena',57,7256,0,28 REPLACE INTO `mob_db` VALUES (1219,'KNIGHT_OF_ABYSS','Knight of Abyss','Abysmal Knight',79,36140,0,8469,6268,1,1600,2150,55,50,66,68,64,25,135,50,10,12,2,7,87,0x3695,300,1500,500,1000,0,0,0,0,0,0,0,1064,5335,7023,5,2318,1,1421,25,1162,1,985,369,984,259,0,0,0,0,4140,1); REPLACE INTO `mob_db` VALUES (1220,'M_DESERT_WOLF','Desert Wolf','Desert Wolf',27,1716,0,388,242,1,169,208,0,10,1,27,45,15,56,10,10,12,1,2,23,0x3695,200,1120,420,288,0,0,0,0,0,0,0,1253,5,7030,5500,2311,1,517,1200,920,2000,756,53,0,0,0,0,0,0,4082,1); REPLACE INTO `mob_db` VALUES (1221,'M_SAVAGE','Savage','Savage',26,2092,0,357,226,1,146,177,10,5,1,26,54,10,37,10,10,12,2,2,42,0x3695,150,1960,960,384,0,0,0,0,0,0,0,1028,6000,514,150,702,3,2276,2,605,15,757,70,0,0,0,0,0,0,4078,1); -#REPLACE INTO `mob_db` VALUES (1222,'L_HIGH_ORC','High Orc','High Orc',52,6890,0,2128,1490,1,428,533,15,5,1,46,55,35,82,40,10,12,2,7,43,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7002,2500,1304,10,999,120,931,8000,912,1600,756,196,508,1100,0,0,0,0,4066,1); -#REPLACE INTO `mob_db` VALUES (1223,'L_ORC','Orc','Orc',24,1400,0,261,160,1,114,136,10,5,1,24,48,25,34,10,10,12,1,7,22,0x3695,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,2267,3,1352,10,1304,5,1301,100,0,0,0,0,4066,1); -#REPLACE INTO `mob_db` VALUES (1224,'L_POISON_SPORE','Poison Spore','Poison Spore',19,665,0,169,85,1,89,101,0,0,1,19,25,1,24,1,10,12,1,3,25,0x3695,200,1672,672,288,0,0,0,0,0,0,0,921,8000,2221,20,511,650,510,55,972,35,0,0,0,0,0,0,0,0,4048,1); -#REPLACE INTO `mob_db` VALUES (1225,'L_CHOCO','Choco','Choco',43,4278,0,1150,1150,1,315,402,5,5,1,68,55,45,65,25,10,12,0,2,23,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7011,5335,942,7000,508,1900,513,5000,2311,2,532,1000,607,25,0,0,0,0,4051,1); -#REPLACE INTO `mob_db` VALUES (1226,'L_KOBOLD','Kobold','Kobold',36,3893,0,898,568,1,265,318,15,10,1,90,36,30,52,30,10,12,1,7,44,0x3695,200,1028,528,360,0,0,0,0,0,0,0,999,90,1034,5820,912,750,985,25,1220,2,2104,5,0,0,0,0,0,0,4091,1); -#REPLACE INTO `mob_db` VALUES (1227,'L_GOBLIN','Goblin','Goblin',25,1176,0,282,171,1,118,140,10,5,1,63,25,20,38,45,10,12,1,7,24,0x3695,100,1120,620,240,0,0,0,0,0,0,0,998,270,911,1200,756,43,2297,3,1211,10,2104,5,507,800,0,0,0,0,4060,1); -#REPLACE INTO `mob_db` VALUES (1228,'L_PHEN','Phen','Phen',26,3347,0,357,226,1,138,150,0,15,1,26,26,1,88,75,10,12,1,5,41,0x3695,150,2544,1344,1152,0,0,0,0,0,0,0,1023,6000,963,2300,720,8,517,1100,951,550,756,25,0,0,0,0,0,0,4077,1); +# REPLACE INTO `mob_db` VALUES (1222,'L_HIGH_ORC','High Orc','High Orc',52,6890,0,2128,1490,1,428,533,15,5,1,46,55,35,82,40,10,12,2,7,43,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7002,2500,1304,10,999,120,931,8000,912,1600,756,196,508,1100,0,0,0,0,4066,1); +# REPLACE INTO `mob_db` VALUES (1223,'L_ORC','Orc','Orc',24,1400,0,261,160,1,114,136,10,5,1,24,48,25,34,10,10,12,1,7,22,0x3695,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,2267,3,1352,10,1304,5,1301,100,0,0,0,0,4066,1); +# REPLACE INTO `mob_db` VALUES (1224,'L_POISON_SPORE','Poison Spore','Poison Spore',19,665,0,169,85,1,89,101,0,0,1,19,25,1,24,1,10,12,1,3,25,0x3695,200,1672,672,288,0,0,0,0,0,0,0,921,8000,2221,20,511,650,510,55,972,35,0,0,0,0,0,0,0,0,4048,1); +# REPLACE INTO `mob_db` VALUES (1225,'L_CHOCO','Choco','Choco',43,4278,0,1150,1150,1,315,402,5,5,1,68,55,45,65,25,10,12,0,2,23,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7011,5335,942,7000,508,1900,513,5000,2311,2,532,1000,607,25,0,0,0,0,4051,1); +# REPLACE INTO `mob_db` VALUES (1226,'L_KOBOLD','Kobold','Kobold',36,3893,0,898,568,1,265,318,15,10,1,90,36,30,52,30,10,12,1,7,44,0x3695,200,1028,528,360,0,0,0,0,0,0,0,999,90,1034,5820,912,750,985,25,1220,2,2104,5,0,0,0,0,0,0,4091,1); +# REPLACE INTO `mob_db` VALUES (1227,'L_GOBLIN','Goblin','Goblin',25,1176,0,282,171,1,118,140,10,5,1,63,25,20,38,45,10,12,1,7,24,0x3695,100,1120,620,240,0,0,0,0,0,0,0,998,270,911,1200,756,43,2297,3,1211,10,2104,5,507,800,0,0,0,0,4060,1); +# REPLACE INTO `mob_db` VALUES (1228,'L_PHEN','Phen','Phen',26,3347,0,357,226,1,138,150,0,15,1,26,26,1,88,75,10,12,1,5,41,0x3695,150,2544,1344,1152,0,0,0,0,0,0,0,1023,6000,963,2300,720,8,517,1100,951,550,756,25,0,0,0,0,0,0,4077,1); REPLACE INTO `mob_db` VALUES (1229,'META_FABRE','Fabre','Fabre',2,63,0,3,2,1,8,11,0,0,1,2,4,0,7,5,10,12,0,4,22,0x181,400,1672,672,480,0,0,0,0,0,0,0,914,6500,949,600,1502,80,721,8,511,750,705,1500,1501,200,0,0,0,0,4002,1); REPLACE INTO `mob_db` VALUES (1230,'META_PUPA','Pupa','Pupa',2,427,0,2,4,0,1,2,20,20,1,1,1,0,1,20,10,12,0,4,22,0x100,1000,1001,1,1,0,0,0,0,0,0,0,1010,300,915,6000,938,700,2102,2,935,1300,938,700,1002,300,0,0,0,0,4003,1); REPLACE INTO `mob_db` VALUES (1231,'META_CREAMY','Creamy','Creamy',16,595,0,96,64,1,53,64,0,30,1,40,16,15,16,55,10,12,0,4,24,0x181,200,1220,720,288,0,0,0,0,0,0,0,924,6000,2322,10,518,180,602,200,2207,4,712,800,0,0,0,0,0,0,4040,1); REPLACE INTO `mob_db` VALUES (1232,'META_PECOPECO_EGG','Peco Peco Egg','Peco Peco Egg',3,420,0,4,4,0,1,2,20,20,1,1,1,0,1,20,10,12,0,0,60,0x0,1000,1001,1,1,0,0,0,0,0,0,0,1010,120,935,1500,2102,2,507,450,507,450,713,2000,736,15,0,0,0,0,4007,1); -#REPLACE INTO `mob_db` VALUES (1233,'CONCEIVE_PECOPECO','Peco Peco','Peco Peco',19,531,0,159,36,1,50,64,0,0,1,13,13,25,27,9,10,12,2,2,23,0x81,200,1564,864,576,0,0,0,0,0,0,0,925,6000,2402,20,508,55,507,950,1604,100,0,0,582,1000,0,0,0,0,4031,1); +# REPLACE INTO `mob_db` VALUES (1233,'CONCEIVE_PECOPECO','Peco Peco','Peco Peco',19,531,0,159,36,1,50,64,0,0,1,13,13,25,27,9,10,12,2,2,23,0x81,200,1564,864,576,0,0,0,0,0,0,0,925,6000,2402,20,508,55,507,950,1604,100,0,0,582,1000,0,0,0,0,4031,1); REPLACE INTO `mob_db` VALUES (1234,'PROVOKE_YOYO','Yoyo','Yoyo',19,879,0,135,85,1,71,82,0,0,1,24,30,35,32,55,10,12,0,2,22,0x108B,200,1054,54,384,0,0,0,0,0,0,0,942,6000,7182,500,508,130,919,5500,753,7,578,500,582,1000,0,0,0,0,4051,1); REPLACE INTO `mob_db` VALUES (1235,'SMOKING_ORC','Smoking Orc','Smoking Orc',24,1400,0,261,160,1,114,136,10,20,1,24,48,20,34,0,10,12,1,7,22,0x308D,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,2267,3,1352,10,1304,5,1301,100,0,0,0,0,4066,1); REPLACE INTO `mob_db` VALUES (1236,'META_ANT_EGG','Ant Egg','Ant Egg',4,420,0,5,4,0,1,2,20,20,1,1,1,0,1,20,10,12,0,0,60,0x0,1000,1001,1,1,0,0,0,0,0,0,0,1010,135,935,2740,909,3000,938,750,713,2000,1002,220,0,0,0,0,0,0,4013,1); @@ -329,7 +328,7 @@ REPLACE INTO `mob_db` VALUES (1258,'GOBLIN_ARCHER','Goblin Archer','Goblin Arche REPLACE INTO `mob_db` VALUES (1259,'GRYPHON','Gryphon','Gryphon',72,27800,0,5896,4400,1,880,1260,35,35,68,95,78,65,115,75,10,12,2,2,84,0x37B5,100,704,504,432,0,0,0,0,0,0,0,7048,2500,7054,5335,7063,120,1452,1500,1417,1,984,185,996,150,0,0,0,0,4163,1); REPLACE INTO `mob_db` VALUES (1260,'DARK_FRAME','Dark Frame','Dark Frame',59,7500,0,3652,3271,1,960,1210,10,45,1,72,42,45,85,25,10,12,1,6,67,0x3795,200,920,720,200,0,0,0,0,0,0,0,7054,4656,734,1000,2505,30,0,0,0,0,1000,80,747,3,0,0,0,0,4170,1); REPLACE INTO `mob_db` VALUES (1261,'WILD_ROSE','Wild Rose','Wild Rose',38,2980,0,1113,688,1,315,360,0,15,65,85,15,35,65,80,10,12,0,2,24,0x83,100,964,864,288,0,0,0,0,0,0,0,7053,5335,748,50,5037,120,1767,3000,624,35,528,600,2244,2,0,0,0,0,4257,1); -REPLACE INTO `mob_db` VALUES (1262,'MUTANT_DRAGON','Mutant Dragon','Mutant Dragonoid',65,62600,0,4730,3536,4,2400,3400,15,20,75,47,30,68,45,35,10,12,2,9,43,0x37B5,250,1280,1080,240,0,0,0,0,0,0,0,7054,4850,1035,500,1036,500,930,500,1559,400,7296,1500,2527,50,0,0,0,0,4203,1); +REPLACE INTO `mob_db` VALUES (1262,'MUTANT_DRAGON','Mutant Dragon','Mutant Dragonoid',65,62600,0,4730,3536,4,2400,3400,15,20,75,47,30,68,45,35,10,12,2,9,43,0x37B5,250,1280,1080,240,0,0,0,0,0,0,0,7054,4850,1035,500,1036,500,930,500,1559,100,7296,1500,2527,50,0,0,0,0,4203,1); REPLACE INTO `mob_db` VALUES (1263,'WIND_GHOST','Wind Ghost','Wind Ghost',51,4820,0,2424,1488,2,489,639,0,45,1,89,15,90,85,25,10,12,1,6,64,0x3795,150,1056,1056,336,0,0,0,0,0,0,0,912,4559,932,6000,7005,500,693,100,1611,8,996,100,1615,1,0,0,0,0,4264,1); REPLACE INTO `mob_db` VALUES (1264,'MERMAN','Merman','Merman',53,14690,0,4500,3000,2,482,964,10,35,72,45,46,35,60,55,10,12,1,7,61,0x3695,220,916,816,336,0,0,0,0,0,0,0,1054,1300,523,300,568,400,720,40,995,35,1460,3,756,203,0,0,0,0,4199,1); REPLACE INTO `mob_db` VALUES (1265,'COOKIE','Cookie','Cookie',25,950,0,310,188,1,130,145,0,25,1,35,20,53,37,90,10,12,0,7,60,0x1089,200,1036,936,240,0,0,0,0,0,0,0,538,1000,530,150,979,1,11002,50,2402,30,12001,100,529,320,0,0,0,0,4293,1); @@ -339,7 +338,7 @@ REPLACE INTO `mob_db` VALUES (1268,'BLOODY_KNIGHT','Bloody Knight','Bloody Knigh REPLACE INTO `mob_db` VALUES (1269,'CLOCK','Clock','Clock',60,11050,0,3410,2904,1,720,909,15,10,1,70,50,25,90,50,10,12,1,0,42,0x91,200,1092,792,480,0,0,0,0,0,0,0,1095,5335,1019,800,509,1900,568,320,7026,30,7027,30,985,163,0,0,0,0,4299,1); REPLACE INTO `mob_db` VALUES (1270,'C_TOWER_MANAGER','Clock Tower Manager','Clock Tower Manager',63,18600,0,4378,2850,3,880,1180,35,30,1,75,20,64,75,60,10,12,2,0,80,0x91,200,1072,672,384,0,0,0,0,0,0,0,1095,5335,7054,5335,999,500,520,850,2109,1,7026,2000,7027,2000,0,0,0,0,4229,1); REPLACE INTO `mob_db` VALUES (1271,'ALLIGATOR','Alligator','Alligator',42,6962,0,1379,866,1,315,360,2,5,1,45,50,10,69,65,10,12,1,2,21,0x91,200,1100,900,480,0,0,0,0,0,0,0,912,1000,1099,600,7003,2000,608,50,0,0,0,0,756,129,0,0,0,0,4252,1); -REPLACE INTO `mob_db` VALUES (1272,'DARK_LORD','Dark Lord','Dark Lord',80,720000,0,65780,45045,2,2800,3320,30,70,1,120,30,118,99,60,10,12,2,6,89,0x37B5,100,868,768,480,32890,7005,6000,5093,500,617,2000,1615,800,2004,100,1237,300,2334,300,2507,100,985,5141,984,3977,0,0,0,0,4168,1); +REPLACE INTO `mob_db` VALUES (1272,'DARK_LORD','Dark Lord','Dark Lord',80,720000,0,65780,45045,2,2800,3320,30,70,1,120,30,118,99,60,10,12,2,6,89,0x37B5,100,868,768,480,32890,7005,6000,5093,500,617,2000,1615,800,2004,100,1237,300,2334,300,2507,100,985,5141,5162,10,0,0,0,0,4168,1); REPLACE INTO `mob_db` VALUES (1273,'ORC_LADY','Orc Lady','Orc Lady',31,2000,0,644,407,1,135,170,10,10,35,42,25,15,69,55,10,12,1,7,42,0x3695,200,1050,900,288,0,0,0,0,0,0,0,7053,4656,998,300,2602,1,2206,1,12127,10,7477,3,2338,1,0,0,0,0,4255,1); REPLACE INTO `mob_db` VALUES (1274,'MEGALITH','Megalith','Megalith',45,5300,0,1758,1075,9,264,314,50,25,1,45,60,5,95,5,10,12,2,0,80,0x84,200,1332,1332,672,0,0,0,0,0,0,0,912,100,7049,1000,617,1,0,0,0,0,985,61,757,207,0,0,0,0,4200,1); REPLACE INTO `mob_db` VALUES (1275,'ALICE','Alice','Alice',62,10000,221,3583,2400,1,550,700,5,5,64,64,42,85,100,130,10,12,1,7,60,0x91,200,502,2304,480,0,0,0,0,0,0,0,7047,2500,637,40,2407,3,739,30,5085,1,12128,10,12002,100,0,0,0,0,4253,1); @@ -351,7 +350,7 @@ REPLACE INTO `mob_db` VALUES (1280,'STEAM_GOBLIN','Steam Goblin','Goblin Steamri REPLACE INTO `mob_db` VALUES (1281,'SAGEWORM','Sage Worm','Sage Worm',43,3850,0,1155,1320,1,120,280,0,50,1,52,24,88,79,55,10,12,0,2,60,0x91,200,936,936,288,0,0,0,0,0,0,0,2716,5,1097,1000,1055,3000,691,100,505,40,689,100,5012,1,0,0,0,0,4219,1); REPLACE INTO `mob_db` VALUES (1282,'KOBOLD_ARCHER','Kobold Archer','Kobold Archer',33,2560,0,739,455,9,155,185,10,5,10,20,15,30,100,25,10,12,0,7,23,0x2085,200,1008,1008,384,0,0,0,0,0,0,0,912,250,999,60,1034,4850,5118,50,1763,2000,1711,5,756,79,0,0,0,0,4292,1); REPLACE INTO `mob_db` VALUES (1283,'CHIMERA','Chimera','Chimera',70,32600,0,4950,3000,1,1200,1320,30,10,1,72,110,88,75,85,10,12,2,2,63,0x37B5,200,772,672,360,0,0,0,0,0,0,0,7054,5335,1048,2500,568,1000,1306,1,7295,1500,1364,1,984,160,0,0,0,0,4300,1); -#REPLACE INTO `mob_db` VALUES (1284,'HUGELING','Hugeling','Hugeling',1,5000,0,2,1,4,7,10,0,0,1,1,1,1,6,1,10,12,2,3,21,0x91,200,1872,672,480,0,0,0,0,0,0,0,512,100,512,100,512,100,512,100,512,100,512,100,512,100,512,100,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1284,'HUGELING','Hugeling','Hugeling',1,5000,0,2,1,4,7,10,0,0,1,1,1,1,6,1,10,12,2,3,21,0x91,200,1872,672,480,0,0,0,0,0,0,0,512,100,512,100,512,100,512,100,512,100,512,100,512,100,512,100,0,0,0,0); REPLACE INTO `mob_db` VALUES (1285,'ARCHER_GUARDIAN','Archer Guardian','Archer Guardian',74,28634,0,1,1,12,1120,1600,35,60,95,80,80,90,165,55,14,16,2,7,80,0x1FA5,265,1200,1200,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1286,'KNIGHT_GUARDIAN','Knight Guardian','Knight Guardian',86,30214,0,1,1,2,1280,1560,55,30,110,40,140,65,125,65,14,16,2,7,80,0x1FA5,275,1200,1200,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1287,'SOLDIER_GUARDIAN','Soldier Guardian','Soldier Guardian',56,15670,0,1,1,1,873,1036,35,0,85,56,100,45,103,43,10,12,0,4,22,0x21A5,265,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -474,14 +473,14 @@ REPLACE INTO `mob_db` VALUES (1403,'ANTIQUE_FIRELOCK','Antique Firelock','Firelo REPLACE INTO `mob_db` VALUES (1404,'MIYABI_NINGYO','Miyabi Ningyo','Miyabi Doll',33,6300,0,795,453,1,250,305,1,20,1,52,15,10,62,15,10,12,1,6,27,0x191,250,1938,2112,768,0,0,0,0,0,0,0,7152,5335,7153,2500,509,1550,1000,1250,12127,10,13014,5,1904,2,0,0,0,0,4208,1); REPLACE INTO `mob_db` VALUES (1405,'TENGU','Tengu','Tengu',65,16940,0,4207,2843,2,660,980,12,82,90,42,69,45,78,80,10,12,2,6,42,0x3985,200,1439,1920,672,0,0,0,0,0,0,0,7159,3500,7158,5500,13301,5,522,150,13302,5,12128,20,687,100,0,0,0,0,4282,1); REPLACE INTO `mob_db` VALUES (1406,'KAPHA','Kapha','Kapha',41,7892,0,2278,1552,3,399,719,20,38,1,51,49,22,73,45,10,12,1,5,21,0x3885,165,2012,1728,672,0,0,0,0,0,0,0,7149,6500,7053,3500,13304,20,521,2300,708,2,1915,10,13008,5,0,0,0,0,4287,1); -#REPLACE INTO `mob_db` VALUES (1407,'DOKEBI_','Dokebi','Dokebi',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1407,'DOKEBI_','Dokebi','Dokebi',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1408,'BLOOD_BUTTERFLY','Bloody Butterfly','Bloody Butterfly',55,8082,0,2119,1562,3,121,342,5,23,1,59,14,55,68,15,10,12,1,4,44,0x318D,145,472,576,288,0,0,0,0,0,0,0,7163,4608,7168,2500,602,1200,924,5500,1802,3,1962,1,0,0,0,0,0,0,4327,1); REPLACE INTO `mob_db` VALUES (1409,'RICE_CAKE_BOY','Rice Cake Boy','Dumpling Child',27,2098,0,231,149,1,112,134,5,12,1,22,29,5,41,10,10,12,0,7,20,0x91,160,647,768,420,0,0,0,0,0,0,0,7150,3200,7151,2500,2262,1,7192,5000,553,1000,7187,3000,0,0,0,0,0,0,4154,1); REPLACE INTO `mob_db` VALUES (1410,'LIVE_PEACH_TREE','Live Peach Tree','Enchanted Peach Tree',53,8905,0,2591,1799,7,301,351,10,38,72,45,35,39,80,5,10,12,1,3,42,0x2085,410,400,672,480,0,0,0,0,0,0,0,7164,4365,0,0,526,1000,604,400,532,100,603,5,0,0,0,0,0,0,4217,1); -#REPLACE INTO `mob_db` VALUES (1411,'PEACH_TREE_BULLET','Peach Tree Bullet','Peach Tree Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1411,'PEACH_TREE_BULLET','Peach Tree Bullet','Peach Tree Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1412,'EVIL_CLOUD_HERMIT','Evil Cloud Hermit','Taoist Hermit',56,10392,0,3304,2198,10,311,333,25,59,1,20,18,50,136,11,10,12,2,0,40,0x2085,190,480,840,432,0,0,0,0,0,0,0,7162,4656,548,5600,550,4500,553,6800,1908,2,757,150,693,100,0,0,0,0,4262,1); REPLACE INTO `mob_db` VALUES (1413,'WILD_GINSENG','Wild Ginseng','Hermit Plant',46,6900,0,1038,692,1,220,280,10,20,13,42,36,55,66,30,10,12,0,3,43,0x91,140,512,756,360,0,0,0,0,0,0,0,520,3500,521,3500,1033,3800,1032,4800,516,4800,1951,1,578,1000,0,0,0,0,4232,1); -#REPLACE INTO `mob_db` VALUES (1414,'GINSENG_BULLET','Ginseng Bullet','Ginseng Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1414,'GINSENG_BULLET','Ginseng Bullet','Ginseng Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1415,'BABY_LEOPARD','Baby Leopard','Baby Leopard',32,2590,0,352,201,2,155,207,0,5,20,44,20,4,49,10,10,12,0,2,28,0x3885,150,318,528,420,0,0,0,0,0,0,0,7171,5200,7172,3200,756,150,517,2000,1214,100,537,500,0,0,0,0,0,0,4233,1); REPLACE INTO `mob_db` VALUES (1416,'WICKED_NYMPH','Wicked Nymph','Evil Nymph',63,16029,0,3945,2599,2,399,1090,12,75,1,64,12,69,100,80,10,12,1,6,67,0x3795,200,637,1008,360,0,0,0,0,0,0,0,7165,3977,7166,1380,984,10,1904,4,1906,1,12002,100,1918,10,0,0,0,0,4258,1); REPLACE INTO `mob_db` VALUES (1417,'ZIPPER_BEAR','Zipper Bear','Zipper Bear',35,2901,0,370,225,1,248,289,10,5,30,25,55,15,28,25,10,12,1,2,27,0x91,155,780,1008,420,0,0,0,0,0,0,0,7161,4462,7167,3500,526,400,518,900,512,90,0,0,0,0,0,0,0,0,4281,1); @@ -559,21 +558,19 @@ REPLACE INTO `mob_db` VALUES (1488,'G_ANOLIAN','Anolian','Anolian',63,18960,0,0, REPLACE INTO `mob_db` VALUES (1489,'G_STING','Sting','Sting',61,9500,0,0,0,1,850,1032,5,30,57,45,55,5,120,85,10,12,1,0,62,0x3885,300,528,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1490,'G_WANDER_MAN','Wander Man','Wanderer',74,8170,0,0,0,2,450,1170,5,5,1,192,38,45,127,85,10,12,1,6,24,0x3985,100,672,500,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1491,'G_DOKEBI','Dokebi','Dokebi',33,2697,0,0,0,1,197,249,0,10,50,50,40,35,69,40,10,12,0,6,27,0x3985,250,1156,456,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Umbala +# Umbala REPLACE INTO `mob_db` VALUES (1492,'INCANTATION_SAMURAI','Incantation Samurai','Samurai Specter',71,218652,0,33095,18214,3,2219,3169,10,51,91,85,30,85,150,60,10,12,2,7,67,0x37B5,135,874,1344,576,16547,607,5500,608,3500,985,5500,1165,2,985,3500,5096,500,607,4500,999,6305,13303,7500,1235,80,0,0,0,0,4263,1); REPLACE INTO `mob_db` VALUES (1493,'DRYAD','Dryad','Dryad',50,8791,0,2763,1493,3,499,589,15,33,1,75,55,1,78,45,10,12,1,3,82,0x3885,170,950,2520,576,0,0,0,0,0,0,0,7197,5335,7198,1000,7188,3000,1951,80,1964,1,2270,10,7100,3000,0,0,0,0,4177,1); REPLACE INTO `mob_db` VALUES (1494,'KIND_OF_BEETLE','Beetle King','Beetle King',34,1874,0,679,442,1,191,243,45,12,1,34,10,0,40,0,10,12,0,4,22,0x1189,165,1247,768,576,0,0,0,0,0,0,0,7190,6500,7202,4500,928,1000,955,500,2102,1,0,0,0,0,0,0,0,0,4307,1); REPLACE INTO `mob_db` VALUES (1495,'STONE_SHOOTER','Stone Shooter','Stone Shooter',42,4104,0,1238,752,10,309,350,12,45,1,40,20,79,92,20,10,12,1,3,63,0x3885,175,2413,1248,768,0,0,0,0,0,0,0,7203,5000,7201,5000,7188,1000,1019,2000,756,100,7049,1000,0,0,0,0,0,0,4225,1); -#REPLACE INTO `mob_db` VALUES (1496,'STONE_SHOOTER_BULLET','Stone Shooter Bullet','Stone Shooter Bullet',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1496,'STONE_SHOOTER_BULLET','Stone Shooter Bullet','Stone Shooter Bullet',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1497,'WOODEN_GOLEM','Wooden Golem','Wooden Golem',51,9200,0,1926,1353,1,570,657,32,36,1,41,69,5,85,155,10,12,2,3,82,0x3885,165,1543,1632,480,0,0,0,0,0,0,0,7189,4000,7188,4000,757,110,2270,10,604,100,7201,5000,921,1000,0,0,0,0,4259,1); REPLACE INTO `mob_db` VALUES (1498,'WOOTAN_SHOOTER','Wootan Shooter','Wootan Shooter',39,3977,0,886,453,10,84,105,10,28,15,35,29,15,100,42,10,12,1,7,42,0x3885,200,857,1056,576,0,0,0,0,0,0,0,7195,4500,7200,3500,513,1000,7049,1000,512,100,7182,100,5116,10,0,0,0,0,4260,1); REPLACE INTO `mob_db` VALUES (1499,'WOOTAN_FIGHTER','Wootan Fighter','Wootan Fighter',41,4457,0,1790,833,1,395,480,30,19,1,41,31,10,45,30,10,12,1,7,43,0x3885,200,912,1344,480,0,0,0,0,0,0,0,517,4500,7196,4000,1801,3,1812,1,513,1000,7198,1000,5116,5,0,0,0,0,4261,1); REPLACE INTO `mob_db` VALUES (1500,'PARASITE','Parasite','Parasite',49,5188,0,1098,1453,8,215,430,10,19,1,40,30,30,90,50,10,12,1,3,44,0x84,400,864,864,672,0,0,0,0,0,0,0,7193,5500,7194,2000,7186,3880,7198,500,1957,1,1969,1,711,500,0,0,0,0,4309,1); -#REPLACE INTO `mob_db` VALUES (1501,'PARASITE_BULLET','Parasite Bullet','Parasite Bullet... (mode 2181)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1501,'PARASITE_BULLET','Parasite Bullet','Parasite Bullet... (mode 2181)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1502,'PORING_V','Pori Pori','Bring it on!',99,95000000,0,87250,27895,1,10000,30000,0,10,100,100,65,100,255,255,10,12,1,3,25,0x39A5,160,1672,672,480,43625,10020,1000,4005,100,2286,200,5035,10000,2344,2500,2346,2500,2350,2500,2348,2500,2655,4000,7126,10000,2110,4500,0,0,0,0); - -# Niflheim +# Niflheim REPLACE INTO `mob_db` VALUES (1503,'GIBBET','Gibbet','Gibbet',58,6841,0,4011,1824,1,418,656,28,31,0,42,42,27,46,28,10,12,2,6,27,0x3985,180,917,1584,576,0,0,0,0,0,0,0,7212,1800,7218,5335,7222,4074,724,300,716,100,604,10,0,0,0,0,0,0,4278,1); REPLACE INTO `mob_db` VALUES (1504,'DULLAHAN','Dullahan','Dullahan',62,12437,0,4517,2963,2,647,1065,47,38,0,30,5,45,62,22,10,12,1,1,49,0x3885,155,847,1152,480,0,0,0,0,0,0,0,7209,3200,7210,4850,2614,1,2505,13,2506,1,0,0,0,0,0,0,0,0,4176,1); REPLACE INTO `mob_db` VALUES (1505,'LOLI_RURI','Loli Ruri','Loli Ruri',71,23470,0,6641,4314,2,1476,2317,39,44,0,66,54,74,81,43,10,12,2,6,87,0x3985,125,747,1632,576,0,0,0,0,0,0,0,7206,800,7219,3000,7214,5044,985,100,7019,1,2718,5,0,0,0,0,0,0,4191,1); @@ -582,10 +579,8 @@ REPLACE INTO `mob_db` VALUES (1507,'BLOODY_MURDERER','Bloody Murderer','Bloody M REPLACE INTO `mob_db` VALUES (1508,'QUVE','Quve','Quve',40,4559,0,414,306,1,299,469,12,12,0,61,24,19,37,24,10,12,0,1,29,0x3885,150,912,1248,576,0,0,0,0,0,0,0,7205,3200,7220,5723,601,1000,7154,100,756,10,0,0,0,0,0,0,0,0,4294,1); REPLACE INTO `mob_db` VALUES (1509,'LUDE','Lude','Lude',36,3214,0,392,247,2,287,451,14,10,0,59,21,18,36,21,10,12,0,1,29,0x3885,150,890,960,480,0,0,0,0,0,0,0,7225,3200,7220,5723,1059,1000,2282,10,757,10,12001,100,0,0,0,0,0,0,4193,1); REPLACE INTO `mob_db` VALUES (1510,'HYLOZOIST','Hylozoist','Heirozoist',51,7186,0,2314,1297,1,317,498,16,51,0,28,26,47,66,14,10,12,0,6,47,0x3985,155,741,1536,480,0,0,0,0,0,0,0,7215,4365,7217,5335,7213,2000,740,80,7220,300,757,10,5113,1,0,0,0,0,4321,1); - REPLACE INTO `mob_db` VALUES (1511,'AMON_RA','Amon Ra','Amon Ra',88,1214138,0,87264,35891,3,1647,2576,26,52,0,1,90,124,74,45,14,12,2,7,62,0x1A4,170,854,2016,480,43632,607,5500,608,3500,732,5500,5053,150,2615,50,7211,7760,985,3880,616,400,1552,10,607,3000,0,0,0,0,4236,1); - -# Louyang +# Louyang REPLACE INTO `mob_db` VALUES (1512,'HYEGUN','Hyegun','Yao Jun',56,9981,0,2199,1022,1,710,1128,12,10,60,40,36,10,73,15,10,12,1,1,49,0x3885,180,890,1320,720,0,0,0,0,0,0,0,7054,3880,609,100,985,10,2406,1,7277,300,0,0,0,0,0,0,0,0,4328,1); REPLACE INTO `mob_db` VALUES (1513,'CIVIL_SERVANT','Civil Servant','Mao Guai',62,14390,0,4023,2750,2,650,1010,42,5,58,15,20,60,80,50,10,12,1,2,44,0x3885,200,1257,528,432,0,0,0,0,0,0,0,7262,4171,7263,2000,606,10,1023,100,693,100,0,0,0,0,0,0,0,0,4202,1); REPLACE INTO `mob_db` VALUES (1514,'DANCING_DRAGON','Dancing Dragon','Zhu Po Long',54,9136,0,3030,769,2,550,789,39,10,55,62,55,25,72,22,10,12,1,9,44,0x83,160,600,840,504,0,0,0,0,0,0,0,7266,4365,7265,3000,7268,800,1036,1000,7038,3000,0,0,0,0,0,0,0,0,4272,1); @@ -658,14 +653,12 @@ REPLACE INTO `mob_db` VALUES (1580,'G_INCUBUS','Incubus','Incubus',75,17281,0,0, REPLACE INTO `mob_db` VALUES (1581,'G_VOCAL','Vocal','Vocal',18,3016,0,0,0,1,71,82,10,30,77,28,26,30,53,40,10,12,1,4,22,0x3795,200,1080,648,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1582,'DEVILING','Deviling','Deviling',31,64500,0,211,412,1,135,270,5,70,30,50,20,75,77,200,10,12,1,6,87,0x37B5,200,1072,1056,384,0,0,0,0,0,0,0,1039,3000,912,4850,2255,100,512,5000,7023,1,983,100,694,100,0,0,0,0,4174,1); REPLACE INTO `mob_db` VALUES (1583,'TAO_GUNKA','Tao Gunka','Tao Gunka',70,193000,0,59175,10445,2,1450,1770,20,20,1,85,78,35,140,60,10,12,2,6,60,0x37B5,150,1020,288,144,29587,984,6000,617,3000,505,6000,7300,4850,7067,4850,728,1000,2296,400,504,3000,1002,1000,2231,5,0,0,0,0,4302,1); - -# Ayothaya +# Ayothaya REPLACE INTO `mob_db` VALUES (1584,'TAMRUAN','Tamruan','Tamruan',52,10234,0,3812,55,1,489,534,15,35,80,62,38,75,72,15,10,12,2,6,67,0x318D,140,512,1152,672,0,0,0,0,0,0,0,7301,4850,7069,3000,1117,40,1155,8,2315,3,0,0,0,0,0,0,0,0,4304,1); REPLACE INTO `mob_db` VALUES (1585,'MIME_MONKEY','Mime Monkey','Mime Monkey',40,6000,0,200,22,3,300,350,40,40,1,40,40,40,40,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,741,5,619,20,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1586,'LEAF_CAT','Leaf Cat','Leaf Cat',38,2396,0,165,1212,1,266,307,5,19,25,67,12,45,60,29,10,12,0,2,22,0x83,150,960,864,720,0,0,0,0,0,0,0,7198,4365,520,300,608,5,1023,1100,568,250,567,500,7298,5335,0,0,0,0,4195,1); REPLACE INTO `mob_db` VALUES (1587,'KRABEN','Kraben','Kraben',50,5880,0,206,1322,1,125,765,5,42,50,125,1,66,75,50,10,12,1,0,48,0x3095,100,1152,1536,576,0,0,0,0,0,0,0,912,3500,519,3000,521,1000,2102,1,7299,4850,7286,1000,603,10,0,0,0,0,4295,1); - -# Some more G_Mobs and Xmas_Orc +# Some more G_Mobs and Xmas_Orc REPLACE INTO `mob_db` VALUES (1588,'ORC_XMAS','Christmas Orc','Christmas Orc',24,1400,0,261,160,1,104,126,10,5,1,24,48,25,34,10,10,12,1,7,22,0x81,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,7175,1600,1352,10,644,15,7174,1600,0,0,0,0,4066,1); REPLACE INTO `mob_db` VALUES (1589,'G_MANDRAGORA','Mandragora','Mandragora',12,405,0,0,0,4,26,35,0,25,1,12,24,0,36,15,10,12,1,3,62,0x84,1000,1768,768,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1590,'G_GEOGRAPHER','Geographer','Geographer',56,8071,0,0,0,3,467,621,28,26,1,66,47,60,68,44,10,12,1,3,62,0x84,2000,1308,1008,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -691,8 +684,7 @@ REPLACE INTO `mob_db` VALUES (1609,'G_DANCING_DRAGON','Dancing Dragon','Zhu Po L REPLACE INTO `mob_db` VALUES (1610,'A_MUNAK','Munak','Munak',30,2872,0,0,0,1,40,50,0,0,1,15,20,5,120,15,10,12,1,1,89,0x39A5,100,2468,768,288,0,0,0,0,0,0,0,502,2000,0,0,0,0,0,0,0,0,0,0,12017,100,12016,100,0,0,0,0); REPLACE INTO `mob_db` VALUES (1611,'A_BON_GUN','Bongun','Bongun',32,3520,0,0,0,1,220,260,0,0,45,15,36,10,48,15,10,12,1,1,89,0x31B5,200,1720,500,420,0,0,0,0,0,0,0,502,2000,0,0,0,0,0,0,0,0,0,0,12017,100,12016,100,0,0,0,0); REPLACE INTO `mob_db` VALUES (1612,'A_HYEGUN','Hyegun','Yao Jun',56,9981,0,0,0,1,710,1128,12,10,60,40,36,10,73,15,10,12,1,1,89,0x39A5,180,890,1320,720,0,0,0,0,0,0,0,502,2000,0,0,0,0,0,0,0,0,0,0,12017,100,12016,100,0,0,0,0); - -# Einbroch +# Einbroch REPLACE INTO `mob_db` VALUES (1613,'METALING','Metaling','Metaling',26,889,0,492,249,1,135,270,5,3,30,15,10,18,35,2,10,12,0,0,20,0x83,300,384,672,480,0,0,0,0,0,0,0,7325,4000,1002,1000,998,500,7126,1000,7317,200,13103,5,7312,5000,0,0,0,0,4341,1); REPLACE INTO `mob_db` VALUES (1614,'MINERAL','Mineral','Mineral',56,7950,0,3563,1768,1,723,812,29,35,60,52,35,21,67,32,10,12,0,0,40,0x91,250,648,480,360,0,0,0,0,0,0,0,7321,3000,728,500,714,2,984,80,1011,800,715,100,969,2,0,0,0,0,4339,1); REPLACE INTO `mob_db` VALUES (1615,'OBSIDIAN','Obsidian','Obsidian',50,8812,0,2799,1802,1,841,980,35,5,62,32,42,24,61,55,10,12,0,0,42,0x3885,350,720,864,504,0,0,0,0,0,0,0,7315,3000,730,500,1003,500,985,50,999,500,1263,10,0,0,0,0,0,0,4338,1); @@ -706,11 +698,9 @@ REPLACE INTO `mob_db` VALUES (1622,'TEDDY_BEAR','Teddy Bear','Teddy Bear',71,810 REPLACE INTO `mob_db` VALUES (1623,'RSX_0806','RSX 0806','RSX-0806',86,560733,0,31010,32011,1,2740,5620,39,41,85,51,30,25,93,84,10,12,2,0,60,0x37B5,220,128,1104,240,15505,607,5500,5104,3500,732,5500,7093,6000,1230,10,13017,1,617,1000,7327,5000,1242,50,1531,20,0,0,0,0,4342,1); REPLACE INTO `mob_db` VALUES (1624,'G_WASTE_STOVE','Waste Stove','Old Stove',68,15895,0,0,0,1,500,889,23,10,20,69,55,5,79,77,10,12,2,0,20,0x3885,220,1152,528,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1625,'G_PORCELLIO','Porcellio','Porcellio',43,5523,0,1024,693,1,164,494,0,8,0,31,21,50,64,85,10,12,0,4,62,0x3985,150,720,360,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Hellion Revenant +# Hellion Revenant REPLACE INTO `mob_db` VALUES (1626,'G_DARK_PRIEST','Hellion Revenant','Hellion Revenant',88,286900,0,1,1,2,50,3150,25,50,1,80,50,99,130,99,10,12,1,6,69,0x37B5,150,432,384,192,0,0,0,0,0,0,0,7337,8000,7337,5000,7337,3000,7337,1000,7337,500,7337,100,0,0,0,0,0,0,0,0); - -# Lighthalzen +# Lighthalzen REPLACE INTO `mob_db` VALUES (1627,'ANOPHELES','Anopheles','Anopheles',23,100,0,99,55,1,48,63,0,90,1,200,4,5,120,5,10,12,0,4,64,0x3985,200,140,864,430,0,0,0,0,0,0,0,601,1000,7119,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4344,1); REPLACE INTO `mob_db` VALUES (1628,'MOLE','Mole','Holden',36,2209,0,268,172,9,52,63,0,5,24,18,23,30,45,5,10,12,0,2,42,0x1089,300,140,960,504,0,0,0,0,0,0,0,1017,5000,1018,5000,5119,50,13101,5,0,0,0,0,0,0,0,0,0,0,4343,1); REPLACE INTO `mob_db` VALUES (1629,'HILL_WIND','Hill Wind','Hill Wind',43,3189,0,1800,1100,3,290,480,10,15,21,42,31,50,41,23,10,12,1,2,64,0x3885,200,336,540,432,0,0,0,0,0,0,0,517,1000,528,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4345,1); @@ -718,43 +708,42 @@ REPLACE INTO `mob_db` VALUES (1630,'BACSOJIN_','Bacsojin','White Lady',85,253221 REPLACE INTO `mob_db` VALUES (1631,'CHUNG_E_','Chung E','Green Maiden',59,23900,0,4256,920,2,460,1050,8,15,38,65,43,30,90,15,10,12,1,7,44,0x3885,150,1728,816,1188,0,0,0,0,0,0,0,7053,4200,740,100,1806,10,518,500,12395,10,0,0,5042,50,0,0,0,0,4373,1); REPLACE INTO `mob_db` VALUES (1632,'GREMLIN','Gremlin','Gremlin',53,9280,0,4355,1768,1,329,762,29,25,80,41,59,75,62,15,10,12,2,6,47,0x191,140,432,540,432,0,0,0,0,0,0,0,7340,3000,938,3000,719,100,2406,1,1265,1,0,0,603,2,0,0,0,0,4355,1); REPLACE INTO `mob_db` VALUES (1633,'BEHOLDER','Beholder','Beholder',56,7950,0,4821,3822,6,723,812,17,30,60,62,25,59,85,32,10,12,0,0,44,0x91,190,336,840,360,0,0,0,0,0,0,0,576,3000,605,100,996,100,985,10,0,0,0,0,603,2,0,0,0,0,4356,1); -# Normal advanced class mobs +# Normal advanced class mobs REPLACE INTO `mob_db` VALUES (1634,'SEYREN','Seyren','Seyren Windsor',91,88402,0,100000,116460,1,2100,2530,63,12,90,89,72,20,99,25,10,12,1,6,63,0x3195,170,76,384,288,0,0,0,0,0,0,0,7345,3000,13001,2,1163,200,603,30,2229,12,2317,1,13421,1,0,0,0,0,4358,1); REPLACE INTO `mob_db` VALUES (1635,'EREMES','Eremes','Eremes Guile',87,60199,0,100000,99800,1,2020,2320,23,12,45,138,31,19,99,30,10,12,1,6,85,0x3195,180,76,384,288,0,0,0,0,0,0,0,7347,2000,1284,1,2514,1,1262,3,1264,30,678,110,2336,2,0,0,0,0,4360,1); REPLACE INTO `mob_db` VALUES (1636,'HARWORD','Harword','Howard Alt-Eisen',83,78690,0,100000,112540,1,1890,2390,59,10,90,62,99,35,98,66,10,12,1,7,81,0x3095,180,76,384,288,0,0,0,0,0,0,0,7345,3000,2514,1,1311,1,1361,110,2104,10,2318,1,603,50,0,0,0,0,4362,1); REPLACE INTO `mob_db` VALUES (1637,'MAGALETA','Magaleta','Margaretha Sorin',90,61282,0,100000,117800,1,1300,2053,35,60,1,9,97,145,88,40,10,12,1,7,66,0x3295,180,1152,384,288,0,0,0,0,0,0,0,7347,2000,1647,2,1602,200,1561,10,2327,1,603,50,2504,10,0,0,0,0,4364,1); REPLACE INTO `mob_db` VALUES (1638,'SHECIL','Shecil','Cecil Damon',82,58900,0,100000,118260,14,1226,1854,25,15,1,145,27,32,134,80,10,12,1,7,64,0x3095,180,76,384,288,0,0,0,0,0,0,0,7345,3000,12014,110,2331,10,1711,100,12007,150,603,50,1745,1,0,0,0,0,4368,1); REPLACE INTO `mob_db` VALUES (1639,'KATRINN','Katrinn','Kathryne Keyron',92,47280,0,100000,116470,1,497,1697,10,74,1,5,77,180,110,39,10,12,1,7,68,0x3295,150,1152,384,288,0,0,0,0,0,0,0,7345,3000,603,50,1646,1,1620,5,2102,30,5085,1,2404,20,0,0,0,0,4366,1); -# MVP Slaves +# MVP Slaves REPLACE INTO `mob_db` VALUES (1640,'G_SEYREN','Lord Knight Seyren','Lord Knight Seyren',99,347590,0,18000,10000,1,4238,5040,72,37,120,110,81,65,130,52,10,12,1,7,83,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,617,10,0,0,0,0); REPLACE INTO `mob_db` VALUES (1641,'G_EREMES','Assassin Cross Eremes','Assassin Cross Eremes',99,211230,0,18000,10000,1,3189,5289,27,39,90,181,62,37,122,60,10,12,1,7,85,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,617,10,0,0,0,0); REPLACE INTO `mob_db` VALUES (1642,'G_HARWORD','Whitesmith Harword','Whitesmith Howard',99,310000,0,18000,10000,1,4822,5033,66,36,100,73,112,35,136,60,10,12,1,7,81,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,617,10,0,0,0,0); REPLACE INTO `mob_db` VALUES (1643,'G_MAGALETA','High Priest Magaleta','High Priest Margaretha',99,182910,0,18000,10000,1,1688,2580,35,78,1,84,64,182,92,100,10,12,1,7,86,0x37B5,125,1152,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,617,10,0,0,0,0); REPLACE INTO `mob_db` VALUES (1644,'G_SHECIL','Sniper Shecil','Sniper Cecil',99,209000,0,18000,10000,14,1892,5113,22,35,1,180,39,67,193,130,10,12,1,7,84,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,617,10,0,0,0,0); REPLACE INTO `mob_db` VALUES (1645,'G_KATRINN','High Wizard Katrinn','High Wizard Kathryne',99,189920,0,18000,10000,1,497,2094,10,88,1,89,42,223,128,93,10,12,1,7,68,0x37B5,150,1152,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,617,10,0,0,0,0); -# MVP Monsters +# MVP Monsters REPLACE INTO `mob_db` VALUES (1646,'B_SEYREN','Lord Knight Seyren','Lord Knight Seyren',99,1647590,0,4835600,1569970,1,7238,11040,72,37,120,110,81,65,130,52,10,12,1,7,83,0x37B5,100,76,384,288,2417800,617,5500,603,5000,732,2000,1132,2500,2342,3500,2412,9000,1470,3500,1469,3000,1166,2500,1415,1500,0,0,0,0,4357,1); REPLACE INTO `mob_db` VALUES (1647,'B_EREMES','Assassin Cross Eremes','Assassin Cross Eremes',99,1411230,0,4083400,1592380,1,4189,8289,37,39,90,181,62,37,122,60,10,12,1,7,85,0x37B5,100,76,384,288,2041700,617,5500,603,5000,732,2000,1234,1500,1230,1500,2319,9000,1233,3500,1232,3500,1265,3500,13002,3500,0,0,0,0,4359,1); REPLACE INTO `mob_db` VALUES (1648,'B_HARWORD','Whitesmith Harword','Whitesmith Howard',99,1460000,0,4002340,1421000,1,7822,8251,66,36,100,73,112,35,136,60,10,12,1,7,82,0x37B5,100,76,384,288,2001170,617,5500,603,5000,732,2000,1138,3500,1140,2500,2318,9000,1365,3500,1364,3500,1369,2500,1368,3500,0,0,0,0,4361,1); REPLACE INTO `mob_db` VALUES (1649,'B_MAGALETA','High Priest Magaleta','High Priest Margaretha',99,1092910,0,4257000,1318800,1,4688,5580,35,78,1,84,64,182,92,100,10,12,1,7,86,0x37B5,125,1152,384,288,2128500,617,5500,603,5000,732,2000,1814,3500,2615,2500,2513,9000,1557,3500,1527,3500,1528,2500,1560,3500,0,0,0,0,4363,1); REPLACE INTO `mob_db` VALUES (1650,'B_SHECIL','Sniper Shecil','Sniper Cecil',99,1349000,0,4093000,1526000,14,4892,9113,22,35,1,180,39,67,193,130,10,12,1,7,84,0x37B5,100,76,384,288,2046500,617,5500,603,5000,1723,2000,1228,3500,1236,3500,617,9000,1234,1500,1237,3500,1720,1500,1724,2500,0,0,0,0,4367,1); REPLACE INTO `mob_db` VALUES (1651,'B_KATRINN','High Wizard Katrinn','High Wizard Kathryne',99,1069920,0,4008200,1636700,1,1197,4394,10,88,1,89,42,223,128,93,10,12,1,7,68,0x37B5,150,1152,384,288,2004100,617,5500,603,5000,732,2000,1241,3500,1242,3500,2616,9000,2343,2500,2513,2500,1618,3000,2319,3500,0,0,0,0,4365,1); -# 1'st Class Mobs +# 1'st Class Mobs REPLACE INTO `mob_db` VALUES (1652,'YGNIZEM','Ygnizem','Egnigem Cenia',58,11200,0,4870,98,1,823,1212,35,8,60,35,52,18,79,20,10,12,1,7,43,0x3885,145,576,432,288,0,0,0,0,0,0,0,7347,1000,1170,1,1158,20,1127,20,2313,10,1152,80,2317,1,0,0,0,0,4346,1); REPLACE INTO `mob_db` VALUES (1653,'WHIKEBAIN','Whikebain','Wickebine Tres',62,7320,0,4204,21,1,693,889,9,8,1,102,34,20,83,30,10,12,1,7,65,0x3885,120,576,432,288,0,0,0,0,0,0,0,7345,2000,1223,1,2306,40,1220,10,2315,2,2620,2,13004,10,0,0,0,0,4348,1); REPLACE INTO `mob_db` VALUES (1654,'ARMAIA','Armaia','Armeyer Dinze',66,7110,0,4008,35,1,750,913,42,6,5,36,50,15,89,60,10,12,1,7,62,0x3885,120,576,432,288,0,0,0,0,0,0,0,7345,1000,2504,1,1358,50,1352,40,2311,10,1302,80,1307,10,0,0,0,0,4347,1); REPLACE INTO `mob_db` VALUES (1655,'EREND','Erend','Errende Ebecee',59,6980,0,4501,67,1,896,1159,14,30,1,31,41,93,67,30,10,12,1,7,46,0x3885,130,576,432,288,0,0,0,0,0,0,0,7345,500,2217,5,1514,50,1517,20,2326,5,2324,10,1523,1,0,0,0,0,4349,1); REPLACE INTO `mob_db` VALUES (1656,'KAVAC','Kavac','Kavach Icarus',60,7899,0,4090,86,9,684,904,12,5,48,100,10,15,118,40,10,12,1,7,44,0x3885,150,576,432,288,0,0,0,0,0,0,0,7347,2000,1716,1,12006,100,1708,10,2308,5,2402,30,2404,2,0,0,0,0,4351,1); REPLACE INTO `mob_db` VALUES (1657,'RAWREL','Rawrel','Laurell Weinder',61,6168,0,4620,30,1,430,517,8,48,1,41,5,120,45,10,10,12,1,7,48,0x3885,150,576,432,288,0,0,0,0,0,0,0,934,1000,1616,1,2102,5,1608,50,2322,10,2333,30,2607,1,0,0,0,0,4350,1); -# 1'st Class MvP (Ygnizem/Egnigem Cenia) and her mobs. +# 1'st Class MvP (Ygnizem/Egnigem Cenia) and her mobs. REPLACE INTO `mob_db` VALUES (1658,'B_YGNIZEM','Ygnizem','Egnigem Cenia',79,214200,0,258760,86000,1,3890,5690,48,25,82,60,45,31,110,40,10,12,1,7,43,0x37B5,100,1008,864,288,129380,617,5500,603,5000,732,2000,1162,1000,644,5000,603,5000,1167,1000,2320,1000,2406,1000,1130,1000,0,0,0,0,4352,1); REPLACE INTO `mob_db` VALUES (1659,'G_WHIKEBAIN','Whikebain','Wickebine Tres',62,7320,0,0,0,1,593,789,9,12,1,102,34,23,74,30,10,12,1,7,65,0x3885,120,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1660,'G_ARMAIA','Armaia','Armeyer Dinze',66,7110,0,0,0,1,650,813,42,6,5,36,40,15,80,60,10,12,1,7,62,0x3885,120,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1661,'G_EREND','Erend','Errende Ebecee',59,6980,0,0,0,1,796,1059,14,30,1,31,41,93,60,30,10,12,1,7,46,0x3885,130,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1662,'G_KAVAC','Kavac','Kavach Icarus',60,7899,0,0,0,9,584,804,12,5,48,100,10,20,118,40,10,12,1,7,44,0x3885,150,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1663,'G_RAWREL','Rawrel','Laurell Weinder',61,6168,0,0,0,1,330,417,8,48,1,41,5,100,45,10,10,12,1,7,48,0x3885,150,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Juperos +# Juperos REPLACE INTO `mob_db` VALUES (1664,'POTON_CANON','Photon Cannon','Photon Cannon',66,8000,0,3900,1800,9,800,900,10,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,7126,5000,718,1000,938,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1665,'POTON_CANON_1','Photon Cannon','Photon Cannon',67,7500,0,4300,2000,9,700,800,15,30,1,40,30,40,86,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,7126,5000,726,1000,938,1000,13160,5,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1666,'POTON_CANON_2','Photon Cannon','Photon Cannon',64,7100,0,3100,2700,9,800,900,8,30,1,40,21,29,80,91,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,7126,5000,721,1000,938,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -783,8 +772,7 @@ REPLACE INTO `mob_db` VALUES (1688,'LADY_TANEE','Lady Tanee','Lady Tanee',89,493 REPLACE INTO `mob_db` VALUES (1689,'G_BACSOJIN','Bacsojin','White Lady',85,253221,0,45250,16445,3,1868,6124,20,55,52,65,44,112,152,35,10,12,2,7,64,0x37B5,130,576,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1690,'G_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',12,15,0,0,0,1,0,0,100,99,1,1,1,1,1,1,10,12,1,2,42,0xC3,160,1120,552,511,0,0,0,0,0,0,0,12194,100,12706,300,12708,300,7888,5000,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1691,'G_KRABEN','Kraben','Kraben',70,10880,0,0,0,1,125,765,5,42,50,155,1,66,112,60,10,12,1,0,48,0x3885,100,1152,1536,576,0,0,0,0,0,0,0,521,1,521,1,521,1,521,1,521,1,521,1,521,1,0,0,0,0,0,0); - -# Thanatos Tower & Abyss +# Thanatos Tower & Abyss REPLACE INTO `mob_db` VALUES (1692,'BREEZE','Breeze','Breeze',56,5099,0,2390,1340,2,94,215,7,32,1,96,6,38,91,45,10,12,1,0,64,0x3885,100,140,384,504,0,0,0,0,0,0,0,945,500,706,10,2270,10,1733,10,604,10,2269,10,996,10,0,0,0,0,4390,1); REPLACE INTO `mob_db` VALUES (1693,'PLASMA_Y','Plasma','Plasma',56,8400,0,2200,2100,3,400,900,0,40,1,30,10,83,105,45,10,12,0,0,88,0x3885,100,608,1440,576,0,0,0,0,0,0,0,911,100,644,10,731,2,715,100,969,1,0,0,0,0,0,0,0,0,4389,1); REPLACE INTO `mob_db` VALUES (1694,'PLASMA_R','Plasma','Plasma',43,5700,0,2000,1000,3,300,700,0,30,1,30,5,56,90,30,10,12,0,0,83,0x3885,150,608,1440,576,0,0,0,0,0,0,0,911,100,644,10,731,2,716,100,990,45,0,0,0,0,0,0,0,0,4389,1); @@ -826,8 +814,7 @@ REPLACE INTO `mob_db` VALUES (1729,'R_BAPHOMET_','Baphomet Jr.','Baphomet Jr.',5 REPLACE INTO `mob_db` VALUES (1730,'R_DEVIRUCHI','Deviruchi','Deviruchi',46,7360,0,0,0,1,475,560,10,25,1,69,40,55,87,30,10,12,0,6,27,0x183,150,980,600,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1731,'G_DOPPELGANGER','Doppelganger','Doppelganger',72,12000000,0,3000000,2000000,1,5000,10000,99,99,88,180,70,75,180,65,10,12,2,8,48,0x37B5,190,480,480,288,0,0,0,0,0,0,0,7484,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1732,'G_TREASURE_BOX','Treasure Chest','Treasure Chest',98,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,7486,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Kiel Dungeon monsters +# Kiel Dungeon monsters REPLACE INTO `mob_db` VALUES (1733,'KIEL','Kiel','Kiehl',90,523000,0,36500,23405,3,1682,3311,28,32,100,112,76,89,156,102,10,12,1,0,47,0x37B5,140,1152,576,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1734,'KIEL_','Kiel D-01','Kiel D-01',90,1523000,0,2356200,512602,3,3280,6560,28,32,100,130,30,160,199,180,10,12,1,0,47,0x37B5,130,1152,576,432,1178100,617,5500,603,5000,616,2000,7513,3000,617,3000,2651,1000,2319,1000,1618,500,1242,500,2650,1000,0,0,0,0,4403,1); REPLACE INTO `mob_db` VALUES (1735,'ALICEL','Alicel','Alicel',75,37520,0,8890,5420,2,1800,2770,30,30,50,58,50,51,92,40,10,12,1,6,60,0x318D,250,1080,480,504,0,0,0,0,0,0,0,7512,2000,7507,3000,999,200,7317,500,1270,5,985,10,2517,20,0,0,0,0,4401,1); @@ -846,9 +833,8 @@ REPLACE INTO `mob_db` VALUES (1747,'G_SNAKE','Snake','Boa',15,471,0,0,0,1,46,55, REPLACE INTO `mob_db` VALUES (1748,'G_ANACONDAQ','Anacondaq','Anacondaq',23,1109,0,0,0,1,124,157,0,0,1,23,28,10,36,5,10,12,1,2,25,0x3885,200,1576,576,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1749,'G_MEDUSA','Medusa','Medusa',79,22408,0,0,0,1,827,1100,48,38,1,74,50,57,77,69,10,12,1,6,40,0x3985,180,1720,1320,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1750,'G_RED_PLANT','Red Plant','Red Plant',1,100,0,0,0,1,100,200,100,99,0,0,0,0,0,100,7,12,0,3,22,0x40,2000,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Odin monsters -REPLACE INTO `mob_db` VALUES (1751,'RANDGRIS','Valkyrie Randgris','Valkyrie Randgris',99,3567200,0,2854900,3114520,3,5560,9980,25,42,100,120,30,120,220,210,10,12,2,8,86,0x37B5,100,576,576,480,1427450,617,5500,603,5000,616,2000,7510,5000,2357,1600,2524,1500,2421,1500,2229,2500,7024,2500,0,0,0,0,0,0,4407,1); +# Odin monsters +REPLACE INTO `mob_db` VALUES (1751,'RANDGRIS','Valkyrie Randgris','Valkyrie Randgris',99,3567200,0,2854900,3114520,3,5560,9980,25,42,100,120,30,120,220,210,10,12,2,8,86,0x37B5,100,576,576,480,1427450,617,5500,603,5000,616,2000,7510,5000,2357,1600,2524,3000,2421,3000,2229,5000,7024,2500,0,0,0,0,0,0,4407,1); REPLACE INTO `mob_db` VALUES (1752,'SKOGUL','Skogul','Skogul',70,87544,0,27620,10,2,1110,1930,20,15,1,69,70,50,67,52,10,12,1,6,67,0x3395,190,720,384,480,0,0,0,0,0,0,0,7511,3500,7054,1000,716,1000,739,500,2609,100,757,500,1271,5,0,0,0,0,4404,1); REPLACE INTO `mob_db` VALUES (1753,'FRUS','Frus','Frus',69,83422,0,20620,10,2,1110,1780,20,15,1,69,60,50,76,52,10,12,1,6,67,0x3395,150,480,576,432,0,0,0,0,0,0,0,7511,3500,7054,1000,716,1000,2622,3,2308,10,757,500,0,0,0,0,0,0,4405,1); REPLACE INTO `mob_db` VALUES (1754,'SKEGGIOLD','Skeggiold','Skeggiold',81,295200,0,91100,10,1,1400,2020,12,24,80,100,50,72,90,50,10,12,0,8,46,0x37B5,250,672,780,480,0,0,0,0,0,0,0,7511,6000,2254,1,7063,1000,2001,25,7511,1000,2322,100,2353,100,0,0,0,0,4406,1); @@ -865,8 +851,7 @@ REPLACE INTO `mob_db` VALUES (1764,'G_SKEGGIOLD_','Skeggiold','Skeggiold',83,103 REPLACE INTO `mob_db` VALUES (1765,'G_RANDGRIS','Valkyrie','Valkyrie',99,1567200,0,10000,10000,3,5560,9980,25,42,100,120,80,120,220,210,10,12,2,8,86,0x37B5,100,576,576,480,0,0,0,0,0,0,0,7510,500,617,100,2115,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1766,'EM_ANGELING','Angeling','Angeling',99,128430,0,0,0,1,60,71,40,50,1,17,80,80,126,20,10,12,0,8,66,0x4B5,300,1288,288,384,0,909,5000,909,5000,741,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1767,'EM_DEVILING','Deviling','Deviling',99,128430,0,0,0,1,60,71,40,50,1,17,80,80,126,20,10,12,0,8,66,0x4B5,300,1288,288,384,0,909,5000,909,5000,741,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Rachel / Ice Dungeon monsters +# Rachel / Ice Dungeon monsters REPLACE INTO `mob_db` VALUES (1768,'GLOOMUNDERNIGHT','Gloom Under Night','Gloom Under Night',89,2298000,0,962175,276445,3,5880,9516,10,20,100,115,98,78,111,50,10,12,2,0,68,0x37B5,200,1344,2880,576,481087,607,5500,617,5000,617,5000,7566,7000,7023,4000,7022,2000,616,5000,2513,1000,1377,100,0,0,0,0,0,0,4408,1); REPLACE INTO `mob_db` VALUES (1769,'AGAV','Agav','Agav',73,29620,0,9780,6622,1,103,1109,15,35,1,32,27,132,69,15,10,12,1,7,80,0x3295,300,768,360,360,0,0,0,0,0,0,0,7567,2500,2422,2,7563,4000,2109,1,12183,50,7563,100,0,0,0,0,0,0,4409,1); REPLACE INTO `mob_db` VALUES (1770,'ECHIO','Echio','Echio',69,34900,0,13560,4300,1,750,1800,33,11,74,74,52,35,59,56,10,12,1,7,80,0x3295,250,768,360,360,0,0,0,0,0,0,0,7567,2500,608,10,7563,4000,5172,20,12183,20,7563,100,2366,20,0,0,0,0,4410,1); @@ -897,7 +882,6 @@ REPLACE INTO `mob_db` VALUES (1794,'G_ROWEEN','Roween','Roween',31,5716,0,0,0,1, REPLACE INTO `mob_db` VALUES (1795,'BLOODY_KNIGHT_','Bloody Knight','Bloody Knight',82,800000,0,0,0,3,10000,30000,60,60,88,121,100,100,125,55,10,12,2,8,28,0x37B5,250,828,528,192,0,0,0,0,0,0,0,1417,100,2412,100,2514,200,2342,300,2513,200,1620,200,617,7000,7578,10000,0,0,0,0); REPLACE INTO `mob_db` VALUES (1796,'AUNOE','Aunoe','Aunoe',62,21297,0,7102,5102,1,1500,2144,11,19,1,28,12,91,57,12,10,12,1,7,80,0x3295,250,768,432,360,0,0,0,0,0,0,0,2109,1,2545,1,7568,2500,2422,1,7563,1000,2610,10,2601,3,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1797,'FANAT','Fanat','Fanat',62,21297,0,7102,5102,1,1500,2144,11,19,1,28,12,91,57,12,10,12,1,7,80,0x3885,250,768,432,360,0,0,0,0,0,0,0,2109,1,2388,1,7568,2500,526,10,7563,1000,5172,10,13027,10,0,0,0,0,0,0); - REPLACE INTO `mob_db` VALUES (1798,'TREASURE_BOX_','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x40,0,0,0,0,0,0,0,0,0,0,0,7582,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1799,'G_SEYREN_','Lord Knight Seyren','Lord Knight Seyren',99,347590,0,18000,10000,1,4238,5040,72,37,120,110,81,65,130,52,10,12,1,7,83,0x37B5,100,76,384,288,0,0,0,0,0,0,0,7583,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1800,'G_EREMES_','Assassin Cross Eremes','Assassin Cross Eremes',99,211230,0,18000,10000,1,3189,5289,27,39,90,181,62,37,122,60,10,12,1,7,85,0x37B5,100,76,384,288,0,0,0,0,0,0,0,7583,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -964,8 +948,7 @@ REPLACE INTO `mob_db` VALUES (1860,'E_COCO','Coco','Coco',17,817,0,120,78,1,56,6 REPLACE INTO `mob_db` VALUES (1861,'E_CHOCO','Choco','Choco',43,4278,0,1265,1265,1,315,402,5,5,65,68,55,45,65,25,10,12,0,2,23,0x3095,200,1500,500,1000,0,0,0,0,0,0,0,7011,5335,942,7000,985,53,513,5000,634,20,7749,1000,607,25,0,0,0,0,4285,1); REPLACE INTO `mob_db` VALUES (1862,'E_MARTIN','Martin','Martin',18,1109,0,134,86,1,52,63,0,5,12,18,30,15,15,5,10,12,0,2,42,0x81,300,1480,480,480,0,0,0,0,0,0,0,1017,9000,7750,500,1251,10,2225,5,5009,1,10010,10,2224,15,0,0,0,0,4046,1); REPLACE INTO `mob_db` VALUES (1863,'E_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',25,4500,0,0,0,1,292,406,14,10,20,15,15,5,15,5,10,12,1,2,42,0x83,160,1120,552,511,0,0,0,0,0,0,0,7860,5000,7861,5000,7862,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Cursed Abbey +# Cursed Abbey REPLACE INTO `mob_db` VALUES (1864,'ZOMBIE_SLAUGHTER','Zombie Slaughter','Zombie Slaughter',77,43000,0,12000,8500,1,1055,1655,35,45,1,30,50,1,75,35,10,12,1,1,69,0x3695,200,676,648,432,0,0,0,0,0,0,0,7752,3000,13404,10,934,1500,7753,3000,938,3000,0,0,0,0,0,0,0,0,4435,1); REPLACE INTO `mob_db` VALUES (1865,'RAGGED_ZOMBIE','Ragged Zombie','Ragged Zombie',75,25000,0,8500,5500,9,1200,1500,25,35,1,77,25,10,101,50,10,12,1,1,69,0x3695,150,1960,576,420,0,0,0,0,0,0,0,7752,3000,2424,15,934,1500,932,4500,2703,2,13107,10,0,0,0,0,0,0,4436,1); REPLACE INTO `mob_db` VALUES (1866,'HELL_POODLE','Hell Poodle','Hell Poodle',71,9000,0,4000,3000,1,400,600,35,20,5,26,14,5,39,10,10,12,0,6,27,0x3795,140,824,432,360,0,0,0,0,0,0,0,528,5000,13028,10,1268,10,932,4500,628,20,919,5500,537,400,0,0,0,0,4437,1); @@ -982,8 +965,7 @@ REPLACE INTO `mob_db` VALUES (1876,'E_LORD_OF_DEATH','Lord of the Dead','Lord of REPLACE INTO `mob_db` VALUES (1877,'CRYSTAL_5','Crystal','Crystal',1,15,0,0,0,0,0,0,100,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,7863,10,644,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1878,'E_SHINING_PLANT','Shining Plant','Shining Plant',1,20,0,0,0,1,1,2,100,99,0,0,0,0,0,90,7,12,0,3,26,0x40,2000,1,1,1,0,0,0,0,0,0,0,7864,3000,906,1500,511,500,507,2000,508,1500,914,500,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1879,'ECLIPSE_P','Eclipse Pet','Eclipse',6,1800,0,0,0,1,20,26,0,40,1,36,6,0,11,80,10,12,1,2,60,0x37B5,200,1456,456,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Moscovia monsters +# Moscovia monsters REPLACE INTO `mob_db` VALUES (1880,'WOOD_GOBLIN','Wood Goblin','Wood Goblin',42,6982,0,2201,1552,1,600,620,32,3,1,5,45,45,55,155,10,12,1,3,62,0x81,320,2304,840,360,0,0,0,0,0,0,0,2719,5,7203,4000,7201,2000,907,2000,916,500,7032,500,574,50,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1881,'LES','Les','Les',39,3080,0,1521,912,1,102,113,0,17,1,33,12,32,52,38,10,12,1,3,82,0x1089,230,1728,720,576,0,0,0,0,0,0,0,7100,2000,511,1000,711,1000,905,2500,2270,1,521,500,510,50,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1882,'VAVAYAGA','Baba Yaga','Baba Yaga',49,7444,0,2583,2583,2,255,387,4,29,1,76,24,88,55,18,10,12,1,7,21,0x3885,270,1536,600,420,0,0,0,0,0,0,0,7099,1000,7762,5000,1630,10,7226,150,539,1500,519,1500,580,1500,0,0,0,0,0,0); @@ -991,8 +973,7 @@ REPLACE INTO `mob_db` VALUES (1883,'UZHAS','Uzhas','Uzhas',61,13707,0,4002,3003, REPLACE INTO `mob_db` VALUES (1884,'MAVKA','Mavka','Mavka',63,19200,0,8301,6353,7,589,623,32,19,1,42,55,35,89,177,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,1572,5,629,300,707,300,710,50,747,1500,748,300,510,3000,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1885,'GOPINICH','Gopinich','Gopinich',85,299321,0,45250,16445,3,1868,6124,20,42,50,65,55,103,152,35,10,12,2,2,62,0x37B5,150,1536,864,432,22625,607,5500,617,5000,617,5000,617,4000,2621,200,12080,1000,1737,100,1417,5,7444,5000,5007,1,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1886,'G_MAVKA','Mavka','Mavka',63,19200,0,0,0,7,589,623,32,19,1,42,55,35,89,177,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (1887,'FREEZER_R','Freezer','Freezer',72,8636,0,0,0,2,671,983,55,43,69,41,59,5,67,100,10,12,1,2,41,0x3695,250,1452,483,528,0,0,0,0,0,0,0,7053,2000,7066,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1888,'GARM_BABY_R','Garm Baby','Baby Hatii',61,15199,0,100,100,1,680,1580,24,13,45,30,36,55,85,30,10,12,1,2,41,0x3885,450,879,672,576,0,0,0,0,0,0,0,0,0,7066,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1889,'GARM_R','Marozka\'s Guard','Marozka\'s Guard',73,100000,0,1000,1000,3,900,2200,20,23,85,126,10,50,95,60,10,12,2,2,81,0x37B5,400,608,408,336,0,0,0,0,0,0,0,7053,2000,7066,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1006,13 +987,12 @@ REPLACE INTO `mob_db` VALUES (1896,'EVENT_KATRINN','Katrinn','Kathryne Keyron',9 REPLACE INTO `mob_db` VALUES (1897,'EVENT_BAPHOMET_','Baphomet','Baphomet',81,668000,0,0,0,2,3220,4040,35,45,1,152,30,85,120,95,10,12,2,6,67,0x37B5,100,768,768,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1898,'EVENT_ZOMBIE','Zombie','Zombie',12,434,0,0,0,1,67,79,0,10,1,1,1,1,1,1,10,12,1,1,29,0x3885,400,2612,912,288,0,0,0,0,0,0,0,7884,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1899,'SWORD_GUARDIAN_','Sword Guardian','Sword Guardian',86,152533,0,0,0,2,7590,9140,60,33,110,40,54,65,125,65,14,16,2,7,80,0x20A5,170,140,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (1900,'BOW_GUARDIAN_','Archer Guardian','Archer Guardian',80,80404,0,0,0,12,1840,2520,40,62,95,80,33,90,165,55,14,16,2,7,80,0x20A5,170,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1900,'BOW_GUARDIAN_','Archer Guardian','Archer Guardian',80,80404,0,0,0,12,1840,2520,40,62,95,80,33,90,165,55,14,16,2,7,80,0x20A5,170,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1901,'E_CONDOR','Condor','Condor',5,8000,0,100,100,1,200,400,10,15,1,13,10,25,95,10,10,12,0,8,26,0x1089,150,1148,648,480,0,0,0,0,0,0,0,7781,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1902,'E_TREASURE1','Treasure Box','Treasure Box',99,49,0,0,0,0,0,0,100,0,0,0,0,0,999,0,0,0,0,0,26,0x120,0,0,0,0,0,0,0,0,0,0,0,7782,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1903,'E_TREASURE2','Treasure Box','Treasure Box',99,49,0,0,0,0,0,0,100,0,0,0,0,0,999,0,0,0,0,0,26,0x120,0,0,0,0,0,0,0,0,0,0,0,7783,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1904,'BOMBPORING','Bomb Poring','Bomb Poring',28,1000000,0,461,284,1,120,320,100,99,1,28,28,0,33,50,10,12,0,0,20,0x308D,300,1672,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# WoE Second Edition; Battle Fields +# WoE Second Edition; Battle Fields REPLACE INTO `mob_db` VALUES (1905,'BARRICADE','Barricade','Barricade',98,600000,0,0,0,1,0,0,0,0,1,17,1,80,126,20,10,12,2,0,20,0x120,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1906,'BARRICADE_','Barricade','Barricade',98,150,0,0,0,1,0,0,100,99,1,17,1,80,126,20,10,12,2,0,20,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1907,'S_EMPEL_1','Guardian Stone','Guardian Stone',90,120000,0,0,0,0,1,2,40,50,1,1,1,1,1,1,0,0,0,0,20,0x120,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1024,8 +1004,7 @@ REPLACE INTO `mob_db` VALUES (1912,'OBJ_FLAG_A','Lion Flag','Lion Flag',90,150,0 REPLACE INTO `mob_db` VALUES (1913,'OBJ_FLAG_B','Eagle Flag','Eagle Flag',90,150,0,0,0,0,1,2,100,99,1,1,1,1,1,1,0,0,2,0,20,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1914,'OBJ_A2','Blue Crystal','Blue Crystal',90,250,0,0,0,0,1,2,100,99,1,1,1,1,1,1,0,0,2,0,20,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1915,'OBJ_B2','Pink Crystal','Pink Crystal',90,250,0,0,0,0,1,2,100,99,1,1,1,1,1,1,0,0,2,0,20,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Satan Morroc +# Satan Morroc REPLACE INTO `mob_db` VALUES (1916,'MOROCC','Satan Morroc','Satan Morroc',99,8388607,0,6700000,4500000,2,32000,32001,29,65,140,160,30,250,180,50,10,12,2,6,87,0x37B5,100,76,540,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1917,'MOROCC_','Wounded Morroc','Wounded Morroc',99,8388607,0,3600000,3000000,2,15000,18000,29,65,140,160,30,250,180,40,10,12,2,6,87,0x37B5,100,576,540,432,3600000,607,5500,617,5000,617,5000,5808,1000,2374,5000,2375,5000,2433,5000,7799,9000,7798,9000,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1918,'MOROCC_1','Incarnation of Morroc','Incarnation of Morroc',97,190000,0,61000,140000,1,7000,8600,20,35,150,152,30,180,186,70,10,12,2,8,27,0x37B5,110,576,540,432,0,0,0,0,0,0,0,2111,10,7799,1000,7798,3000,985,160,7054,4850,2537,3,1541,20,0,0,0,0,0,0); @@ -1036,7 +1015,7 @@ REPLACE INTO `mob_db` VALUES (1922,'G_MOROCC_1','Incarnation of Morroc','Incarna REPLACE INTO `mob_db` VALUES (1923,'G_MOROCC_2','Incarnation of Morroc','Incarnation of Morroc',97,1200000,0,0,0,1,16000,16001,20,5,120,83,20,10,166,50,10,12,1,6,67,0x37B5,150,576,540,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1924,'G_MOROCC_3','Incarnation of Morroc','Incarnation of Morroc',96,1200000,0,0,0,2,16000,16001,15,37,40,200,20,60,100,37,10,12,1,6,69,0x37B5,150,212,540,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1925,'G_MOROCC_4','Incarnation of Morroc','Incarnation of Morroc',98,1200000,0,0,0,1,16000,16001,18,54,60,60,30,220,125,20,10,12,1,6,68,0x37B5,150,1536,540,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -# God Item Creation (WoE SE); Catacombs +# God Item Creation (WoE SE); Catacombs REPLACE INTO `mob_db` VALUES (1926,'JAKK_H','Jakk','Jakk',38,300,0,0,0,1,5,10,5,30,1,38,38,43,75,45,10,12,1,0,43,0x3695,200,1180,480,648,0,0,0,0,0,0,0,1062,3000,1062,3000,0,0,535,3000,535,3000,535,3000,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1927,'WHISPER_H','Whisper','Whisper',34,100,0,0,0,1,5,10,0,45,1,51,14,0,60,0,10,12,0,6,68,0x3195,150,1960,960,504,0,0,0,0,0,0,0,1059,5000,1059,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1928,'DEVIRUCHI_H','Deviruchi','Deviruchi',46,500,0,0,0,1,5,10,10,25,1,69,40,55,70,30,10,12,0,6,27,0x3795,150,980,600,384,0,0,0,0,0,0,0,1038,3000,1039,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1062,21 +1041,21 @@ REPLACE INTO `mob_db` VALUES (1947,'PIAMETTE_','Piamette','Piamette',90,500000,0 REPLACE INTO `mob_db` VALUES (1948,'G_YGNIZEM','Ygnizem','Egnigem Cenia',58,11200,0,0,0,1,823,1212,35,8,60,35,52,18,79,20,10,12,1,7,43,0x3885,145,576,432,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1949,'B_S_GUARDIAN','Camp Guardian','Camp Guardian',86,457599,0,0,0,2,7590,9140,60,33,110,40,5,65,125,65,14,16,2,7,80,0x2085,170,140,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1950,'B_B_GUARDIAN','Camp Guardian','Camp Guardian',80,241212,0,0,0,12,1840,2520,40,62,95,80,5,90,165,55,14,16,2,7,80,0x2085,170,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -# Ravies Sister's 'Valyrie's Gift' monsters. +# Ravies Sister's 'Valyrie's Gift' monsters. REPLACE INTO `mob_db` VALUES (1951,'CRYSTAL_6','Crystal','Crystal',1,15,0,0,0,0,0,0,100,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,665,4900,0,0,532,6500,558,5000,607,200,0,0,0,0); REPLACE INTO `mob_db` VALUES (1952,'CRYSTAL_7','Crystal','Crystal',1,15,0,0,0,0,0,0,100,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,667,4900,0,0,531,6500,558,5000,608,250,0,0,0,0); REPLACE INTO `mob_db` VALUES (1953,'CRYSTAL_8','Crystal','Crystal',1,15,0,0,0,0,0,0,100,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,664,4900,0,0,534,6500,558,5000,604,300,0,0,0,0); REPLACE INTO `mob_db` VALUES (1954,'CRYSTAL_9','Crystal','Crystal',1,15,0,0,0,0,0,0,100,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,666,4900,0,0,533,6500,558,5000,603,100,0,0,0,0); -# ? +# ? REPLACE INTO `mob_db` VALUES (1955,'TREASURE_BOX_I','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x83,0,0,0,0,0,0,0,0,0,0,0,12281,3000,7849,4000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -# Endless Tower +# Endless Tower REPLACE INTO `mob_db` VALUES (1956,'NAGHT_SIEGER','Naght Sieger','Naght Sieger',99,8000000,0,4000000,2000000,2,32000,64000,60,40,1,50,80,220,220,30,10,12,2,6,88,0x37B5,100,76,432,504,0,0,0,0,0,0,0,13412,9000,13413,9000,2542,9000,5017,9000,616,9000,2514,9000,7294,9000,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1957,'ENTWEIHEN','Entweihen Crothen','Entweihen Crothen',90,5400000,0,2700000,1350000,12,32000,40000,44,66,1,70,40,250,220,30,14,16,1,6,87,0x1A4,0,140,540,576,0,0,0,0,0,0,0,1636,9000,1631,9000,2513,9000,1624,9000,616,9000,1618,9000,7291,9000,0,0,0,0,4451,1); REPLACE INTO `mob_db` VALUES (1958,'G_ENTWEIHEN_R','Thorny Skeleton','Thorny Skeleton',89,5400000,0,0,0,12,4040,4720,44,66,1,35,33,180,125,30,14,16,0,6,87,0x1A4,0,432,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1959,'G_ENTWEIHEN_H','Thorn of Recovery','Thorn of Recovery',89,350000,0,0,0,12,2040,2720,44,66,1,35,33,180,125,30,14,16,0,6,88,0x1A4,0,2864,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1960,'G_ENTWEIHEN_M','Thorn of Magic','Thorn of Magic',89,5400000,0,0,0,12,2040,2720,44,66,1,35,33,180,125,30,14,16,0,6,87,0x1A4,0,1024,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1961,'G_ENTWEIHEN_S','Thorn of Purification','Thorn of Purification',89,5400000,0,0,0,12,2040,2720,44,66,1,35,33,180,125,30,14,16,0,6,87,0x1A4,0,2864,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (1962,'ANTONIO_','Christmas Thief','Christmas Thief',10,15,0,0,0,1,13,20,100,99,1,1,1,50,100,100,10,12,1,7,20,0x83,100,720,720,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1963,'P_CHUNG_E','New Year Doll','New Year Doll',49,23900,0,2396,993,1,460,1050,8,15,38,65,43,30,90,15,10,12,1,7,40,0x3695,170,1728,816,1188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1964,'NIGHTMARE_T','Nightmare','Nightmare',30,2000,0,512,387,1,100,200,0,40,1,100,1,1,100,1,10,12,2,2,68,0x120,150,1816,816,432,0,0,0,0,0,0,0,505,2000,510,3000,7913,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1089,7 +1068,7 @@ REPLACE INTO `mob_db` VALUES (1970,'E_OBEAUNE','Obeune','Obeune',31,3952,0,1288, REPLACE INTO `mob_db` VALUES (1971,'E_VADON','Vadon','Vadon',19,1017,0,270,170,1,74,85,20,0,1,19,16,10,36,15,10,12,0,5,21,0x120,300,1632,432,540,0,0,0,0,0,0,0,991,40,960,9000,910,3000,2313,10,943,100,757,80,717,50,0,0,0,0,4049,1); REPLACE INTO `mob_db` VALUES (1972,'E_MARINA','Marina','Marina',21,2087,0,436,280,1,84,106,0,5,1,21,21,0,36,10,10,12,0,3,41,0x120,400,2280,1080,864,0,0,0,0,0,0,0,1052,5000,938,1500,991,90,995,4,717,200,631,40,0,0,0,0,0,0,4055,1); REPLACE INTO `mob_db` VALUES (1973,'E_PORING','Poring','Poring',1,50,0,2,1,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,909,7000,938,400,512,1000,713,1500,12303,3000,0,0,0,0,0,0,0,0,0,0); -# WoE SE Guild Dungeon +# WoE SE Guild Dungeon REPLACE INTO `mob_db` VALUES (1974,'BANSHEE_MASTER','Banshee Master','Banshee Master',84,47222,0,30000,24000,2,2666,3609,20,40,30,74,1,180,105,1,10,12,1,6,47,0x3795,150,676,504,504,0,0,0,0,0,0,0,7054,5335,7751,3000,2365,10,2748,2,2528,10,934,1500,2135,20,0,0,0,0,4450,1); REPLACE INTO `mob_db` VALUES (1975,'BEHOLDER_MASTER','Beholder Master','Beholder master',70,24150,0,9000,11400,6,1723,2300,17,30,60,62,25,89,85,32,10,12,1,0,44,0x3885,190,336,840,360,0,0,0,0,0,0,0,576,3000,605,100,996,100,985,10,2386,10,603,2,2749,2,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1976,'COBALT_MINERAL','Cobalt Mineral','Cobalt Mineral',72,29665,0,12332,10379,1,1446,2979,40,30,60,77,35,57,77,32,10,12,1,0,40,0x3885,200,648,480,360,0,0,0,0,0,0,0,7321,3000,728,500,13414,5,984,80,1011,800,715,100,969,2,0,0,0,0,714,2); @@ -1097,12 +1076,12 @@ REPLACE INTO `mob_db` VALUES (1977,'HEAVY_METALING','Heavy Metaling','Heavy Meta REPLACE INTO `mob_db` VALUES (1978,'HELL_APOCALIPS','Hell Apocalips','Hell Apocalypse',86,65433,0,46666,32000,2,5733,6073,62,23,1,48,30,98,110,85,10,12,2,0,60,0x3885,250,1840,1440,384,0,0,0,0,0,0,0,7095,5335,999,2500,7094,2400,7093,2200,2506,20,985,5,2391,1,0,0,0,0,1484,1); REPLACE INTO `mob_db` VALUES (1979,'ZAKUDAM','Zukadam','Zakudam',82,43699,0,27213,16300,3,2000,3227,30,30,65,65,35,75,80,15,10,12,2,7,60,0x3885,180,580,288,360,0,0,0,0,0,0,0,7317,5000,999,500,984,200,985,200,13156,5,13167,5,2390,10,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1980,'KUBLIN','Kubkin','Kublin',85,1176000,0,100000,100000,1,1180,1400,20,10,1,106,25,40,72,20,10,12,1,7,22,0x37B5,100,964,648,300,100000,6010,10000,0,0,0,0,998,270,911,9000,756,43,2297,3,0,0,0,0,507,1800,0,0,0,0,0,0); -# Orc Dungeon Instance +# Orc Dungeon Instance REPLACE INTO `mob_db` VALUES (1981,'I_HIGH_ORC','Safeguard Chief','Safeguard Chief',88,111111,0,3618,1639,1,428,533,15,5,55,46,55,35,82,40,10,12,2,7,43,0x3695,150,1500,500,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1982,'I_ORC_ARCHER','Orc Sniper','Orc Sniper',85,62000,0,1729,1787,9,1310,1390,10,5,1,44,25,20,125,20,10,12,1,7,22,0x3095,300,1960,620,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1983,'I_ORC_SKELETON','Depraved Orc Spirit','Depraved Orc Spirit',87,80087,0,4501,67,1,896,1159,14,30,1,31,41,93,67,30,10,12,1,1,29,0x3885,130,2420,720,648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1984,'I_ORC_LADY','Shaman Cargalache','Shaman Cargalache',58,50058,0,4870,98,1,823,1212,35,10,60,35,52,18,79,20,10,12,1,7,42,0x3695,145,1050,900,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -# Another World (13.1) +# Another World (13.1) REPLACE INTO `mob_db` VALUES (1985,'DANDELION','Dandelion Member','Dandelion Member',37,5176,0,0,0,1,305,360,0,10,28,19,32,0,63,20,10,12,1,7,47,0x3695,250,1772,72,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1986,'TATACHO','Tatacho','Tatacho',106,39500,0,23700,13825,2,10000,11000,20,17,106,40,30,25,115,6,10,12,1,2,22,0x108B,150,1000,768,360,0,0,0,0,0,0,0,1544,20,1925,10,6020,4000,6021,3000,579,3100,516,3000,0,0,0,0,0,0,4442,1); REPLACE INTO `mob_db` VALUES (1987,'CENTIPEDE','Centipede','Centipede',110,45662,0,27397,15982,2,15000,16000,40,25,112,43,30,5,131,12,10,12,1,4,45,0x3795,150,1000,792,336,0,0,0,0,0,0,0,2746,2,2747,2,1741,10,1042,5335,912,5000,955,9000,943,2500,0,0,0,0,4447,1); @@ -1114,24 +1093,24 @@ REPLACE INTO `mob_db` VALUES (1992,'CORNUS','Cornus','Cornus',108,41220,0,30854, REPLACE INTO `mob_db` VALUES (1993,'NAGA','Naga','Naga',111,46708,0,30360,16348,3,8000,8800,38,15,113,42,30,108,122,13,10,12,2,2,42,0x3695,150,400,864,432,0,0,0,0,0,0,0,2389,10,2134,10,1485,10,926,5000,936,3500,954,2000,1408,20,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1994,'LUCIOLA_VESPA','Luciola Vespa','Luciola Vespa',104,32600,0,16300,11410,1,9000,9900,29,5,104,56,30,20,116,4,10,12,1,4,24,0x7795,110,1000,864,432,0,0,0,0,0,0,0,2744,2,955,9000,939,9000,518,300,992,160,526,200,943,3000,0,0,0,0,4445,1); REPLACE INTO `mob_db` VALUES (1995,'PINGUICULA','Pinguicula','Pinguicula',80,13680,0,6840,3420,1,600,720,25,5,102,23,30,10,86,2,10,12,1,3,62,0x308D,150,700,600,360,0,0,0,0,0,0,0,2745,1,1980,10,2270,10,7100,5000,7198,2000,7188,3000,712,1000,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (1996,'BACSOJIN_T','Bacsojin','White Lady',85,253221,0,45250,16445,3,1868,6124,20,55,52,65,44,112,152,35,10,12,2,7,64,0x37B5,130,576,960,480,0,0,0,0,0,0,0,5411,500,2638,80,2639,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1996,'BACSOJIN_T','Bacsojin','White Lady',85,253221,0,45250,16445,3,1868,6124,20,55,52,65,44,112,152,35,10,12,2,7,64,0x37B5,130,576,960,480,0,0,0,0,0,0,0,5411,500,2638,80,2639,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1997,'G_TATACHO','Tatacho','Tatacho',106,39500,0,0,0,2,10000,11000,20,17,106,40,30,25,115,6,10,12,1,2,22,0x108B,150,1000,768,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1998,'G_HILLSRION','Hillslion','Hillslion',105,34600,0,0,0,1,5000,5500,28,15,105,60,30,15,115,5,10,12,0,2,22,0x308D,100,400,780,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1999,'CENTIPEDE_LARVA','Centipede Larva','Centipede Larva',80,12000,0,3600,4800,2,948,1115,20,20,80,33,15,3,75,10,10,12,0,4,25,0x3795,150,1000,792,336,0,0,0,0,0,0,0,2406,9,732,50,0,0,1042,5335,912,5000,955,9000,943,2500,0,0,0,0,4452,1); -#REPLACE INTO `mob_db` VALUES (2000,'M_GAMEMASTER','Male Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2001,'F_GAMEMASTER','Female Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2002,'T_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',50,8000,0,3982,1766,1,585,813,29,21,45,61,5,15,77,90,10,12,1,2,42,0x120,160,1120,552,511,0,0,0,0,0,0,0,12190,1000,6061,500,6068,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2003,'T_BACSOJIN','White Lady','White Lady',72,56380,0,0,0,2,560,1446,10,15,38,65,34,80,102,35,10,12,2,7,41,0x3695,160,576,960,480,0,0,0,0,0,0,0,7406,1000,7407,1000,6062,1000,6063,1000,6064,1000,6065,1000,6066,1000,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2004,'T_WICKED_NYMPH','Evil Nymph','Evil Nymph',63,16029,0,0,0,2,399,1090,12,75,1,64,12,69,100,80,10,12,1,6,67,0x3695,200,637,1008,360,0,0,0,0,0,0,0,7406,800,7407,800,6063,800,6064,800,6065,800,6066,800,6067,800,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2005,'T_PLASMA_B','Plasma','Plasma',44,8200,0,0,0,3,300,700,0,30,1,30,5,73,90,30,10,12,0,0,81,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6062,500,6063,500,6064,500,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2006,'T_PLASMA_P','Plasma','Plasma',49,5900,0,0,0,3,300,700,0,30,1,30,5,54,90,30,10,12,0,0,87,0x120,150,608,1440,576,0,0,0,0,0,0,0,6062,500,6063,500,6064,500,6065,500,6066,500,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2007,'T_PLASMA_R','Plasma','Plasma',43,5700,0,0,0,3,300,700,0,30,1,30,5,56,90,30,10,12,0,0,83,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6064,500,6065,500,6066,500,6067,500,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2000,'M_GAMEMASTER','Male Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2001,'F_GAMEMASTER','Female Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2002,'T_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',50,8000,0,3982,1766,1,585,813,29,21,45,61,5,15,77,90,10,12,1,2,42,0x120,160,1120,552,511,0,0,0,0,0,0,0,12190,1000,6061,500,6068,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2003,'T_BACSOJIN','White Lady','White Lady',72,56380,0,0,0,2,560,1446,10,15,38,65,34,80,102,35,10,12,2,7,41,0x3695,160,576,960,480,0,0,0,0,0,0,0,7406,1000,7407,1000,6062,1000,6063,1000,6064,1000,6065,1000,6066,1000,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2004,'T_WICKED_NYMPH','Evil Nymph','Evil Nymph',63,16029,0,0,0,2,399,1090,12,75,1,64,12,69,100,80,10,12,1,6,67,0x3695,200,637,1008,360,0,0,0,0,0,0,0,7406,800,7407,800,6063,800,6064,800,6065,800,6066,800,6067,800,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2005,'T_PLASMA_B','Plasma','Plasma',44,8200,0,0,0,3,300,700,0,30,1,30,5,73,90,30,10,12,0,0,81,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6062,500,6063,500,6064,500,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2006,'T_PLASMA_P','Plasma','Plasma',49,5900,0,0,0,3,300,700,0,30,1,30,5,54,90,30,10,12,0,0,87,0x120,150,608,1440,576,0,0,0,0,0,0,0,6062,500,6063,500,6064,500,6065,500,6066,500,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2007,'T_PLASMA_R','Plasma','Plasma',43,5700,0,0,0,3,300,700,0,30,1,30,5,56,90,30,10,12,0,0,83,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6064,500,6065,500,6066,500,6067,500,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2008,'WOOMAWANG','Woomawang','Woomawang',82,4000000,0,100000,100000,3,8000,10000,40,40,60,110,200,250,166,66,10,12,2,6,48,0x3695,250,828,528,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2009,'WOOMAWANG_','Woomawang','Woomawang',82,2000000,0,100000,100000,1,16000,20000,40,40,60,110,200,250,166,66,10,12,1,6,48,0x3695,100,414,1080,336,0,0,0,0,0,0,0,7930,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2010,'G_MAJORUROS','Ox','Ox',66,500000,0,10,10,1,1200,3200,25,15,65,50,20,20,85,48,10,12,2,6,28,0x120,250,1100,960,780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2011,'E_GHOUL','Ghoul','Ghoul',40,99999,0,1088,622,1,2100,2500,100,20,1,20,29,0,180,20,10,12,1,1,49,0x120,100,2456,912,504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2012,'E_ZOMBIE','Zombie','Zombie',15,99999,0,50,33,1,335,395,100,10,1,8,7,0,60,0,10,12,1,1,29,0x120,150,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -# Another World (13.2) +# REPLACE INTO `mob_db` VALUES (2011,'E_GHOUL','Ghoul','Ghoul',40,99999,0,1088,622,1,2100,2500,100,20,1,20,29,0,180,20,10,12,1,1,49,0x120,100,2456,912,504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2012,'E_ZOMBIE','Zombie','Zombie',15,99999,0,50,33,1,335,395,100,10,1,8,7,0,60,0,10,12,1,1,29,0x120,150,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# Another World (13.2) REPLACE INTO `mob_db` VALUES (2013,'DRACO','Draco','Draco',82,18300,0,6100,4100,1,410,710,10,5,1,23,30,34,62,2,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,0,0,0,0,0,0,4444,1); REPLACE INTO `mob_db` VALUES (2014,'DRACO_EGG','Draco Egg','Draco Egg',67,9822,0,1200,1600,0,1,2,56,40,1,1,56,34,1,63,10,12,1,9,82,0x0,1000,24,0,0,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2015,'PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',83,8780,0,7740,5200,1,600,1450,15,5,1,23,22,12,89,2,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,0,0,0,0,0,0,0,0,0,0); @@ -1142,55 +1121,53 @@ REPLACE INTO `mob_db` VALUES (2019,'ANCIENT_TREE','Ancient Tree','Ancient Tree', REPLACE INTO `mob_db` VALUES (2020,'RHYNCHO','Rhyncho','Rhyncho',85,18900,0,2040,6000,1,350,2300,5,19,1,56,12,35,89,10,10,12,1,0,61,0x308D,240,576,660,420,0,0,0,0,0,0,0,7326,5000,972,5,6087,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2021,'PHYLLA','Phylla','Phylla',85,23880,0,3040,6600,10,350,2550,8,22,1,59,15,25,99,10,10,12,1,0,61,0x2085,240,360,780,432,0,0,0,0,0,0,0,7326,5000,971,5,6088,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2022,'S_NYDHOG','Nidhoggr\'s Shadow','Nidhoggr\'s Shadow',117,3450000,0,4800000,3900000,2,17000,49000,60,75,1,34,62,236,188,34,10,12,2,9,87,0x37B5,150,1596,1620,864,2400000,0,0,0,0,0,0,6091,5000,7444,5000,2610,5000,1484,500,1170,500,1417,500,2554,2000,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2023,'DARK_SHADOW','Dark Shadow','Dark Shadow',114,42900,0,21000,14000,1,10000,15000,35,44,1,23,12,145,102,60,10,12,0,0,47,0x3195,220,768,1776,648,0,0,0,0,0,0,0,7205,5000,2609,1000,13038,5,6089,1000,2783,5,1385,10,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2023,'DARK_SHADOW','Dark Shadow','Dark Shadow',114,42900,0,21000,14000,1,10000,15000,35,44,1,23,12,145,102,60,10,12,0,0,47,0x3195,220,768,1776,648,0,0,0,0,0,0,0,7205,5000,2609,1000,13038,5,6089,1000,2783,5,1385,10,0,0,0,0,0,0,4449,1); REPLACE INTO `mob_db` VALUES (2024,'BRADIUM_GOLEM','Bradium Golem','Bradium Golem',101,45200,0,14000,18920,1,12000,13000,78,22,0,10,82,25,60,12,10,12,2,0,42,0x3295,300,1008,1200,540,0,0,0,0,0,0,0,7067,3000,953,5000,6090,500,2138,10,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2025,'MYSTCASE_EVENT','Mystcase','Mystcase',10,15,0,0,0,1,160,360,99,99,65,50,25,5,48,75,10,12,1,0,20,0x120,400,1248,1248,432,0,0,0,0,0,0,0,14550,5000,14546,5000,12355,50,6092,2000,7175,2000,7174,2000,529,3000,0,0,0,0,530,3000); +# REPLACE INTO `mob_db` VALUES (2025,'MYSTCASE_EVENT','Mystcase','Mystcase',10,15,0,0,0,1,160,360,99,99,65,50,25,5,48,75,10,12,1,0,20,0x120,400,1248,1248,432,0,0,0,0,0,0,0,14550,5000,14546,5000,12355,50,6092,2000,7175,2000,7174,2000,529,3000,0,0,0,0,530,3000); REPLACE INTO `mob_db` VALUES (2026,'DANDELION_','Runaway Dandelion Member','Runaway Dandelion Member',90,552000,0,50000,25000,1,3050,4300,25,35,1,66,66,45,88,66,10,12,1,7,27,0x3695,230,1772,72,384,0,0,0,0,0,0,0,7031,5000,579,500,7016,2000,581,3000,12125,500,511,5000,7032,3000,0,0,0,0,902,2000); REPLACE INTO `mob_db` VALUES (2027,'G_DARK_SHADOW','Dark Shadow','Dark Shadow',114,42900,0,0,0,1,10000,15000,35,44,1,23,12,145,102,60,10,12,0,0,47,0x3795,220,768,1776,648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2028,'E_MINOROUS','Minorous','Minorous',1,741,0,0,0,1,30,48,2,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2029,'E_MINOROUS_','Minorous','Minorous',10,15,0,10,0,1,100,150,100,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,11708,2000,11708,4000,11708,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1); +# REPLACE INTO `mob_db` VALUES (2028,'E_MINOROUS','Minorous','Minorous',1,741,0,0,0,1,30,48,2,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2029,'E_MINOROUS_','Minorous','Minorous',10,15,0,10,0,1,100,150,100,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,11708,2000,11708,4000,11708,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1); REPLACE INTO `mob_db` VALUES (2030,'HIDEN_PRIEST','Hiden Priest','Hiden Priest',90,240000,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x37B5,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2031,'DANDELION_H','Dandelion','Dandelion',80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x37B5,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2032,'GUARDIAN_FOREST','Forest Guardian','Forest Guardian',50,8578,0,0,0,1,1000,1103,15,25,1,75,55,1,93,45,10,12,0,6,27,0x120,100,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2033,'GOLDEN_TULIP','Golden Tulip','Golden Tulip',1,299,0,0,0,1,1,2,100,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2034,'M_DESERT_WOLF_B','Baby Desert Wolf','Baby Desert Wolf',9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2035,'NIHILITY_ZEM','Nihility Zem','Nihility Zem',90,200000,0,0,0,0,1,2,0,20,1,1,1,0,1,20,10,12,0,4,22,0x120,1000,1001,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2036,'VALKYRIE_N','Valkyrie Randgris','Valkyrie Randgris',53,11280,0,0,0,1,780,930,10,20,1,24,39,0,72,25,10,12,1,1,69,0x120,170,576,576,480,0,0,0,0,0,0,0,6154,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2037,'VALKYRIE_A','Valkyrie Randgris','Valkyrie Randgris',90,5000,15,0,0,1,10,160,10,20,1,20,40,0,20,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2038,'VALKYRIE_B','Valkyrie Randgris','Valkyrie Randgris',90,10000,15,0,0,1,300,450,10,40,1,20,80,0,80,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2039,'EXECUTIONER_R','Executioner','Executioner',65,28980,0,0,0,2,570,950,35,35,64,85,40,25,88,60,10,12,2,0,47,0x120,200,768,500,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2040,'TIRFING_R','Tirfing','Ogretooth',71,29900,0,0,0,1,950,1146,30,35,58,87,55,35,132,65,10,12,1,0,67,0x120,100,816,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2041,'MYSTELTAINN_R','Mysteltainn','Mysteltainn',76,33350,0,0,0,2,1160,1440,30,30,77,139,80,35,159,65,10,12,2,0,87,0x120,250,1152,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# **** -# NC Mechanic Summons +# REPLACE INTO `mob_db` VALUES (2032,'GUARDIAN_FOREST','Forest Guardian','Forest Guardian',50,8578,0,0,0,1,1000,1103,15,25,1,75,55,1,93,45,10,12,0,6,27,0x120,100,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2033,'GOLDEN_TULIP','Golden Tulip','Golden Tulip',1,299,0,0,0,1,1,2,100,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2034,'M_DESERT_WOLF_B','Baby Desert Wolf','Baby Desert Wolf',9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2035,'NIHILITY_ZEM','Nihility Zem','Nihility Zem',90,200000,0,0,0,0,1,2,0,20,1,1,1,0,1,20,10,12,0,4,22,0x120,1000,1001,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2036,'VALKYRIE_N','Valkyrie Randgris','Valkyrie Randgris',53,11280,0,0,0,1,780,930,10,20,1,24,39,0,72,25,10,12,1,1,69,0x120,170,576,576,480,0,0,0,0,0,0,0,6154,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2037,'VALKYRIE_A','Valkyrie Randgris','Valkyrie Randgris',90,5000,15,0,0,1,10,160,10,20,1,20,40,0,20,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2038,'VALKYRIE_B','Valkyrie Randgris','Valkyrie Randgris',90,10000,15,0,0,1,300,450,10,40,1,20,80,0,80,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2039,'EXECUTIONER_R','Executioner','Executioner',65,28980,0,0,0,2,570,950,35,35,64,85,40,25,88,60,10,12,2,0,47,0x120,200,768,500,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2040,'TIRFING_R','Tirfing','Ogretooth',71,29900,0,0,0,1,950,1146,30,35,58,87,55,35,132,65,10,12,1,0,67,0x120,100,816,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2041,'MYSTELTAINN_R','Mysteltainn','Mysteltainn',76,33350,0,0,0,2,1160,1440,30,30,77,139,80,35,159,65,10,12,2,0,87,0x120,250,1152,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# **** +# NC Mechanic Summons REPLACE INTO `mob_db` VALUES (2042,'SILVERSNIPER','Silver Sniper','Silver Sniper',100,4500,0,0,0,9,300,300,80,10,10,60,10,10,100,10,10,12,1,0,20,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2043,'MAGICDECOY_FIRE','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,23,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2044,'MAGICDECOY_WATER','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,21,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2045,'MAGICDECOY_EARTH','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,22,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2046,'MAGICDECOY_WIND','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,24,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - REPLACE INTO `mob_db` VALUES (2047,'W_NAGA','Naga','Naga',99,46708,0,0,0,3,492,605,61,15,113,42,30,18,122,13,10,12,2,2,42,0x3695,150,400,864,432,0,0,0,0,0,0,0,0,0,0,0,0,0,926,5000,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2048,'W_PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2048,'W_PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2049,'W_BRADIUM_GOLEM','Bradium Golem','Bradium Golem',99,45200,0,0,0,1,720,886,125,18,0,10,82,2,60,12,10,12,2,0,42,0x3895,300,1008,1200,540,0,0,0,0,0,0,0,0,0,0,0,6090,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2050,'W_AQUA_ELEMENTAL','Aqua Elemental','Aqua Elemental',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2051,'E_BAPHOMET','Baphomet','Baphomet',1,1,0,0,0,1,1,2,1,0,1,1,1,1,1,1,10,12,2,6,20,0x120,100,768,768,576,0,0,0,0,0,0,0,12396,5000,12397,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2052,'E_DARK_LORD','Dark Lord','Dark Lord',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2053,'NC_DIMIK','Dimik','Dimik',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2054,'E_BATHORY','Bathory','Bathory',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2055,'E_INCUBUS','Incubus','Incubus',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2056,'E_ZHERLTHSH','Zherlthsh','Zealotus',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2050,'W_AQUA_ELEMENTAL','Aqua Elemental','Aqua Elemental',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2051,'E_BAPHOMET','Baphomet','Baphomet',1,1,0,0,0,1,1,2,1,0,1,1,1,1,1,1,10,12,2,6,20,0x120,100,768,768,576,0,0,0,0,0,0,0,12396,5000,12397,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2052,'E_DARK_LORD','Dark Lord','Dark Lord',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2053,'NC_DIMIK','Dimik','Dimik',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2054,'E_BATHORY','Bathory','Bathory',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2055,'E_INCUBUS','Incubus','Incubus',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2056,'E_ZHERLTHSH','Zherlthsh','Zealotus',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2057,'E_CRAMP','Cramp','Cramp',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2058,'M_MIMIC','Mimic','Mimic',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2059,'M_DISGUISE','Disguise','Disguise',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2060,'M_ALICE','Alice','Alice',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2061,'E_STAPO','Stapo','Stapo',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2062,'E_POPORING','Poporing','poporing',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2063,'E_DROPS','Drops','Drops',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2064,'E_MAGMARING','Magmaring','Magmaring',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2065,'E_METALING','Metaling','Metaling',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2066,'E_ANOPHELES','Anopheles','Anopheles',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2067,'E_ANOPHELES_','Anopheles','Anopheles',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2058,'M_MIMIC','Mimic','Mimic',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2059,'M_DISGUISE','Disguise','Disguise',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2060,'M_ALICE','Alice','Alice',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2061,'E_STAPO','Stapo','Stapo',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2062,'E_POPORING','Poporing','poporing',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2063,'E_DROPS','Drops','Drops',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2064,'E_MAGMARING','Magmaring','Magmaring',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2065,'E_METALING','Metaling','Metaling',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2066,'E_ANOPHELES','Anopheles','Anopheles',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2067,'E_ANOPHELES_','Anopheles','Anopheles',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2068,'BOITATA','Boitata','Boitata',93,1283990,0,74288,77950,2,1060,2022,7,36,140,99,30,109,100,90,10,12,2,0,63,0x37B5,200,1150,1150,288,37144,0,0,0,0,0,0,7444,5000,985,1000,984,1000,607,500,1377,100,1422,100,1471,100,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2069,'IARA','Iara','Iara',79,5890,0,1070,890,1,171,270,0,39,69,14,41,60,69,20,10,12,1,5,61,0x91,200,672,380,288,0,0,0,0,0,0,0,950,9000,951,500,747,100,748,50,710,10,995,5,2334,1,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2070,'PIRANHA','Piranha','Piranha',75,4522,0,899,1023,1,182,223,2,10,69,45,30,30,66,35,10,12,1,5,61,0x3295,200,768,768,384,0,0,0,0,0,0,0,963,9000,956,600,1053,500,1054,500,995,5,1249,5,13027,1,0,0,0,0,0,0); @@ -1198,19 +1175,13 @@ REPLACE INTO `mob_db` VALUES (2071,'HEADLESS_MULE','Headless Mule','Headless Mul REPLACE INTO `mob_db` VALUES (2072,'JAGUAR','Jaguar','Jaguar',71,3914,0,720,512,1,192,234,9,12,69,30,45,5,59,5,10,12,1,2,42,0x3885,150,1250,580,360,0,0,0,0,0,0,0,7171,3000,7172,2000,919,1000,756,40,1810,1,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2073,'TOUCAN','Toucan','Toucan',70,3640,0,659,544,1,166,201,3,10,54,14,40,35,44,10,10,12,0,2,44,0x3885,155,1450,960,480,0,0,0,0,0,0,0,917,3000,7053,1000,2612,200,508,100,510,50,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2074,'CURUPIRA','Curupira','Curupira',68,3096,0,622,450,1,140,175,9,10,32,23,38,20,45,10,10,12,1,6,22,0x118B,250,530,530,384,0,0,0,0,0,0,0,517,3000,7267,500,757,250,1505,100,1011,10,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2075,'E_VADON_X','Vadon','Vadon',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2075,'E_VADON_X','Vadon','Vadon',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2076,'S_WIND_GHOST','Shadow of Deception','Shadow of Deception',105,190800,1,0,0,1,462,957,64,51,62,44,25,105,85,20,10,12,1,6,64,0x3795,150,1056,1056,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2077,'S_SKOGUL','Shadow of Illusion','Shadow of Illusion',105,244400,1,0,0,1,910,1166,72,15,100,88,63,99,95,37,10,12,1,6,67,0x3395,190,720,384,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2078,'S_SUCCUBUS','Shadow of Pleasure','Shadow of Pleasure',105,206660,1,0,0,1,880,1204,76,48,100,70,45,110,102,85,10,12,1,6,67,0x3795,155,1306,1056,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2079,'CRYSTAL_H','Crystal','Crystal',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2080,'CRYSTAL_L','Crystal','Crystal',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2079,'CRYSTAL_H','Crystal','Crystal',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2080,'CRYSTAL_L','Crystal','Crystal',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2081,'E_HYDRA','Suspicious Hydra','Strange Hydra',34,854,1,0,0,7,1,2,100,100,1,1,1,1,1,1,10,12,0,3,41,0x0,1000,800,432,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2082,'G_PIRANHA','Piranha','Piranha',75,4522,0,0,0,1,182,223,2,10,69,45,30,30,66,35,10,12,1,5,61,0x3295,200,768,768,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Homunculus S Summons -REPLACE INTO `mob_db` VALUES (2158,'S_HORNET','Hornet','Hornet',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2159,'S_GIANT_HORNET','Giant Hornet','Giant Hornet',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2160,'S_LUCIOLA_VESPA','Luciola Vespa','Luciola Vespa',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -REPLACE INTO `mob_db` VALUES (2308,'KO_ZANZOU','Zanzou','Zanzou',1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2308,'KO_KAGE','Zanzou','Zanzou',1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); diff --git a/sql-files/mob_db_re.sql b/sql-files/mob_db_re.sql index 0f75dcbc0..bd2ab084f 100644 --- a/sql-files/mob_db_re.sql +++ b/sql-files/mob_db_re.sql @@ -64,18 +64,17 @@ CREATE TABLE `mob_db` ( PRIMARY KEY (`ID`) ) ENGINE=MyISAM; -# Monster Database -# -# Structure of Database : +# Monster Database +# +# Structure of Database : # REPLACE INTO `mob_db` VALUES ( ID,'Sprite_Name','kROName','iROName',LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Mode,Speed,aDelay,aMotion,dMotion,MEXP,MVP1id,MVP1per,MVP2id,MVP2per,MVP3id,MVP3per,Drop1id,Drop1per,Drop2id,Drop2per,Drop3id,Drop3per,Drop4id,Drop4per,Drop5id,Drop5per,Drop6id,Drop6per,Drop7id,Drop7per,Drop8id,Drop8per,Drop9id,Drop9per,DropCardid,DropCardper); -# Note: Keep the Sprite_Name field as it is (in the game client). You may change Name,JName field though - +# Note: Keep the Sprite_Name field as it is in the game client. REPLACE INTO `mob_db` VALUES (1001,'SCORPION','Scorpion','Scorpion',16,153,1,108,81,1,33,40,16,5,12,15,10,5,19,5,10,12,0,4,23,0x3191,200,1564,864,576,0,0,0,0,0,0,0,990,70,904,5500,757,57,943,210,7041,100,508,200,625,20,0,0,0,0,4068,1); REPLACE INTO `mob_db` VALUES (1002,'PORING','Poring','Poring',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,512,150,619,20,0,0,0,0,4001,1); -#REPLACE INTO `mob_db` VALUES (1003,'TESTEGG','Test Egg','Test Egg',2,100000,0,10,10,0,3,9,99,0,1,99,1,1,1,1,10,12,0,4,22,0x0,512,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1003,'TESTEGG','Test Egg','Test Egg',2,100000,0,10,10,0,3,9,99,0,1,99,1,1,1,1,10,12,0,4,22,0x0,512,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1004,'HORNET','Hornet','Hornet',11,90,1,81,60,1,13,16,7,1,12,24,4,5,6,5,10,12,0,4,24,0x1181,150,1292,792,216,0,0,0,0,0,0,0,992,80,939,9000,909,3500,1208,15,511,350,518,150,0,0,0,0,0,0,4019,1); REPLACE INTO `mob_db` VALUES (1005,'FARMILIAR','Familiar','Familiar',24,427,1,144,162,1,68,77,26,5,15,19,20,5,20,1,10,12,0,2,27,0x3881,150,1276,576,384,0,0,0,0,0,0,0,913,5500,1105,20,2209,15,601,50,514,100,507,700,645,50,0,0,0,0,4020,1); -#REPLACE INTO `mob_db` VALUES (1006,'THIEF_BUG_LARVA','Thief Bug Larva','Thief Bug Larva',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x651,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1006,'THIEF_BUG_LARVA','Thief Bug Larva','Thief Bug Larva',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x651,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1007,'FABRE','Fabre','Fabre',6,72,1,54,41,1,12,15,24,0,12,5,5,5,12,5,10,12,0,4,22,0x181,400,1672,672,480,0,0,0,0,0,0,0,914,6500,949,500,1502,80,721,5,511,700,705,1000,1501,200,0,0,0,0,4002,1); REPLACE INTO `mob_db` VALUES (1008,'PUPA','Pupa','Pupa',4,66,1,36,27,1,1,4,24,2,11,1,3,3,8,6,10,12,0,4,22,0x100,1000,1001,1,1,0,0,0,0,0,0,0,1010,80,915,5500,938,600,2102,2,935,1000,938,600,1002,200,0,0,0,0,4003,1); REPLACE INTO `mob_db` VALUES (1009,'CONDOR','Condor','Condor',12,114,1,81,60,1,14,20,7,5,14,7,6,0,13,5,10,12,1,2,24,0x1081,150,1148,648,480,0,0,0,0,0,0,0,917,9000,1702,150,715,80,1750,5500,517,400,916,2000,582,600,0,0,0,0,4015,1); @@ -85,21 +84,21 @@ REPLACE INTO `mob_db` VALUES (1012,'RODA_FROG','Roda Frog','Roda Frog',13,160,1, REPLACE INTO `mob_db` VALUES (1013,'WOLF','Wolf','Wolf',45,1219,1,342,386,1,80,91,55,3,27,24,30,15,33,5,10,12,1,2,22,0x1089,200,1054,504,432,0,0,0,0,0,0,0,1011,20,920,9000,2308,10,517,650,528,1050,919,5500,578,600,0,0,0,0,4029,1); REPLACE INTO `mob_db` VALUES (1014,'SPORE','Spore','Spore',18,280,1,117,87,1,25,33,12,10,15,5,10,0,12,0,10,12,1,3,21,0x81,200,1872,672,288,0,0,0,0,0,0,0,921,9000,507,800,510,50,743,10,2220,40,7033,5,578,600,0,0,0,0,4022,1); REPLACE INTO `mob_db` VALUES (1015,'ZOMBIE','Zombie','Zombie',17,234,1,117,87,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x3885,400,2612,912,288,0,0,0,0,0,0,0,957,9000,724,5,938,1000,958,50,727,70,0,0,0,0,0,0,0,0,4038,1); -REPLACE INTO `mob_db` VALUES (1016,'ARCHER_SKELETON','Archer Skeleton','Archer Skeleton',50,1646,1,405,455,9,90,113,47,10,30,29,20,10,32,5,10,12,1,1,29,0x2085,300,2864,864,576,0,0,0,0,0,0,0,932,4500,756,70,2285,3,1708,35,1752,1000,507,1800,1701,150,0,0,0,0,4094,1); -#REPLACE INTO `mob_db` VALUES (1017,'THIEF_BUG_FEMALE','Thief Bug Female','Thief Bug Female',10,170,0,35,18,1,33,40,5,5,1,15,10,5,23,5,10,12,1,4,27,0x651,200,988,288,768,0,0,0,0,0,0,0,955,3500,910,250,1108,15,928,200,507,400,716,50,1002,400,0,0,0,0,4026,1); +REPLACE INTO `mob_db` VALUES (1016,'ARCHER_SKELETON','Archer Skeleton','Archer Skeleton',50,1646,1,405,455,9,95,118,47,10,30,29,20,10,35,5,10,12,1,1,29,0x2085,300,2864,864,576,0,0,0,0,0,0,0,932,4500,756,70,2285,3,1708,35,1752,1000,507,1800,1701,150,0,0,0,0,4094,1); +# REPLACE INTO `mob_db` VALUES (1017,'THIEF_BUG_FEMALE','Thief Bug Female','Thief Bug Female',10,170,0,35,18,1,33,40,5,5,1,15,10,5,23,5,10,12,1,4,27,0x651,200,988,288,768,0,0,0,0,0,0,0,955,3500,910,250,1108,15,928,200,507,400,716,50,1002,400,0,0,0,0,4026,1); REPLACE INTO `mob_db` VALUES (1018,'CREAMY','Creamy','Creamy',23,378,1,144,162,1,61,62,28,20,16,1,1,0,1,20,10,12,0,4,24,0x181,150,1136,720,840,0,0,0,0,0,0,0,924,9000,2322,10,518,150,602,100,2207,2,712,500,692,100,0,0,0,0,4040,1); REPLACE INTO `mob_db` VALUES (1019,'PECOPECO','Peco Peco','Peco Peco',25,446,1,162,183,1,76,83,48,0,21,10,13,5,28,5,10,12,2,2,23,0x1089,200,1564,864,576,0,0,0,0,0,0,0,925,9000,2402,20,508,200,507,900,1604,100,0,0,582,1000,0,0,0,0,4031,1); REPLACE INTO `mob_db` VALUES (1020,'MANDRAGORA','Mandragora','Mandragora',13,156,1,97,73,4,20,23,13,2,12,3,5,5,10,5,10,12,1,3,62,0x84,1000,1768,768,576,0,0,0,0,0,0,0,993,50,905,9000,1405,30,511,350,711,300,706,3,1967,10,0,0,0,0,4030,1); -#REPLACE INTO `mob_db` VALUES (1021,'THIEF_BUG_MALE','Thief Bug Male','Thief Bug Male',19,583,0,223,93,1,76,88,15,5,1,29,16,5,36,1,10,12,1,4,27,0x653,300,988,288,768,0,0,0,0,0,0,0,1011,40,928,5500,955,1500,1152,10,508,90,729,5,1116,50,0,0,0,0,4050,1); -#REPLACE INTO `mob_db` VALUES (1022,'WEREWOLF','Werewolf','Werewolf',80,28600,0,11813,7289,2,2560,3280,65,35,1,97,60,1,135,52,10,10,2,0,40,0x163,200,1500,768,652,0,0,0,0,0,0,0,999,500,1034,4000,984,500,985,500,7017,800,0,0,1912,300,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1021,'THIEF_BUG_MALE','Thief Bug Male','Thief Bug Male',19,583,0,223,93,1,76,88,15,5,1,29,16,5,36,1,10,12,1,4,27,0x653,300,988,288,768,0,0,0,0,0,0,0,1011,40,928,5500,955,1500,1152,10,508,90,729,5,1116,50,0,0,0,0,4050,1); +# REPLACE INTO `mob_db` VALUES (1022,'WEREWOLF','Werewolf','Werewolf',80,28600,0,11813,7289,2,2560,3280,65,35,1,97,60,1,135,52,10,10,2,0,40,0x163,200,1500,768,652,0,0,0,0,0,0,0,999,500,1034,4000,984,500,985,500,7017,800,0,0,1912,300,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1023,'ORK_WARRIOR','Orc Warrior','Orc Warrior',44,1434,1,350,540,1,71,104,52,3,32,15,24,15,16,10,10,12,1,7,22,0x3885,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,9000,756,40,2267,3,1352,10,1304,5,2147,3,0,0,0,0,4066,1); REPLACE INTO `mob_db` VALUES (1024,'WORM_TAIL','Wormtail','Wormtail',17,200,1,117,87,1,22,27,16,0,10,6,14,5,12,35,10,12,1,3,22,0x91,200,1048,48,192,0,0,0,0,0,0,0,993,60,1011,25,906,5500,1408,30,508,70,721,5,10015,100,0,0,0,0,4034,1); REPLACE INTO `mob_db` VALUES (1025,'SNAKE','Snake','Boa',18,217,1,117,87,1,23,28,9,8,10,8,18,10,14,15,10,12,1,2,22,0x81,200,1576,576,576,0,0,0,0,0,0,0,926,9000,1117,15,507,900,1011,35,937,800,954,1,578,600,0,0,0,0,4037,1); -REPLACE INTO `mob_db` VALUES (1026,'MUNAK','Munak','Munak',58,2445,1,495,557,1,175,205,77,15,53,9,25,10,30,10,10,12,1,1,29,0x3885,200,2468,768,288,0,0,0,0,0,0,0,901,9000,2264,2,2404,15,609,20,2337,1,2305,100,1558,5,0,0,0,0,4090,1); -#REPLACE INTO `mob_db` VALUES (1027,'RAPTICE','Raptice','Raptice',17,600,0,100,55,1,0,0,5,10,5,20,20,0,28,10,10,12,1,2,22,0x131,200,2000,1000,500,0,0,0,0,0,0,0,909,7000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (1026,'MUNAK','Munak','Munak',58,2445,1,495,557,1,184,214,77,15,53,9,25,10,33,10,10,12,1,1,29,0x3885,200,2468,768,288,0,0,0,0,0,0,0,901,9000,2264,2,2404,15,609,20,2337,1,2305,100,1558,5,0,0,0,0,4090,1); +# REPLACE INTO `mob_db` VALUES (1027,'RAPTICE','Raptice','Raptice',17,600,0,100,55,1,0,0,5,10,5,20,20,0,28,10,10,12,1,2,22,0x131,200,2000,1000,500,0,0,0,0,0,0,0,909,7000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1028,'SOLDIER_SKELETON','Soldier Skeleton','Soldier Skeleton',34,804,1,216,243,1,84,98,53,5,14,10,32,5,29,3,10,12,1,1,29,0x3885,200,2276,576,432,0,0,0,0,0,0,0,932,5500,756,60,1214,12,507,700,934,10,2315,1,1216,50,0,0,0,0,4086,1); -REPLACE INTO `mob_db` VALUES (1029,'ISIS','Isis','Isis',59,2092,1,531,597,1,192,229,83,5,58,43,22,5,39,15,10,12,2,6,27,0x3195,200,1384,768,336,0,0,0,0,0,0,0,936,5335,2233,5,2603,1,733,150,732,20,954,1000,731,5,0,0,0,0,4116,1); -REPLACE INTO `mob_db` VALUES (1030,'ANACONDAQ','Anacondaq','Anacondaq',100,8510,1,1602,1202,1,388,443,92,0,79,46,28,43,56,25,10,12,1,2,25,0x91,200,1576,576,576,0,0,0,0,0,0,0,6247,200,937,9000,1455,10,926,1500,936,200,508,150,756,50,0,0,0,0,4062,1); +REPLACE INTO `mob_db` VALUES (1029,'ISIS','Isis','Isis',59,2092,1,531,597,1,202,239,83,5,58,43,22,5,43,15,10,12,2,6,27,0x3195,200,1384,768,336,0,0,0,0,0,0,0,936,5335,2233,5,2603,1,733,150,732,20,954,1000,731,5,0,0,0,0,4116,1); +REPLACE INTO `mob_db` VALUES (1030,'ANACONDAQ','Anacondaq','Anacondaq',100,8510,1,1602,1202,1,504,559,92,0,79,46,28,43,67,25,10,12,1,2,25,0x91,200,1576,576,576,0,0,0,0,0,0,0,6247,200,937,9000,1455,10,926,1500,936,200,508,150,756,50,0,0,0,0,4062,1); REPLACE INTO `mob_db` VALUES (1031,'POPORING','Poporing','Poporing',30,524,1,198,224,1,74,94,36,17,17,26,20,18,36,5,10,12,1,3,25,0x83,300,1672,672,480,0,0,0,0,0,0,0,938,5500,910,1500,511,500,514,200,512,5,1207,5,512,250,0,0,0,0,4033,1); REPLACE INTO `mob_db` VALUES (1032,'VERIT','Verit','Verit',52,1944,1,414,467,1,132,152,63,10,51,4,25,10,5,5,10,12,1,1,29,0x83,250,2468,768,480,0,0,0,0,0,0,0,929,9000,912,700,930,1100,509,600,2609,1,2612,200,639,20,0,0,0,0,4107,1); REPLACE INTO `mob_db` VALUES (1033,'ELDER_WILOW','Elder Willow','Elder Willow',34,599,1,233,263,1,80,94,45,0,10,14,25,0,29,0,10,12,1,3,43,0x3095,200,1372,672,432,0,0,0,0,0,0,0,990,50,907,9000,7939,1,757,40,2329,30,690,100,604,100,0,0,0,0,4052,1); @@ -112,7 +111,7 @@ REPLACE INTO `mob_db` VALUES (1039,'BAPHOMET','Baphomet','Baphomet',81,668000,1, REPLACE INTO `mob_db` VALUES (1040,'GOLEM','Golem','Golem',61,2245,1,540,608,1,198,223,190,12,70,27,67,5,31,5,10,12,2,0,60,0x91,300,1608,816,396,0,0,0,0,0,0,0,999,150,953,9000,912,220,757,70,2146,5,715,200,998,350,0,0,0,0,4072,1); REPLACE INTO `mob_db` VALUES (1041,'MUMMY','Mummy','Mummy',55,2155,1,486,548,1,171,192,95,3,54,4,14,1,62,0,10,12,1,1,49,0x3885,300,1772,72,384,0,0,0,0,0,0,0,930,9000,756,100,934,550,2604,1,2611,10,525,250,508,850,0,0,0,0,4106,1); REPLACE INTO `mob_db` VALUES (1042,'STEEL_CHONCHON','Steel Chonchon','Steel Chonchon',48,1199,1,369,414,1,77,112,57,20,30,62,20,10,56,10,10,12,0,4,24,0x118B,150,1076,576,480,0,0,0,0,0,0,0,992,90,999,30,910,2400,935,9000,943,30,998,200,1002,300,0,0,0,0,4042,1); -#REPLACE INTO `mob_db` VALUES (1043,'SEAHORES','Seahorse','Seahorse',18,1452,0,122,78,3,100,150,15,7,1,1,1,1,1,1,10,10,0,5,22,0x131,200,1500,800,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1043,'SEAHORES','Seahorse','Seahorse',18,1452,0,122,78,3,100,150,15,7,1,1,1,1,1,1,10,10,0,5,22,0x131,200,1500,800,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1044,'OBEAUNE','Obeaune','Obeaune',53,2158,1,476,534,1,102,147,48,26,54,47,21,40,36,25,10,12,1,5,41,0x3095,200,1872,672,288,0,0,0,0,0,0,0,995,13,950,9000,5014,1,2326,10,720,10,951,500,748,30,0,0,0,0,4093,1); REPLACE INTO `mob_db` VALUES (1045,'MARC','Marc','Marc',56,2522,1,525,590,1,138,163,55,24,50,24,22,15,48,20,10,12,1,5,41,0x3885,150,1272,72,480,0,0,0,0,0,0,0,995,18,956,9000,756,95,951,1000,720,10,717,200,509,700,0,0,0,0,4105,1); REPLACE INTO `mob_db` VALUES (1046,'DOPPELGANGER','Doppelganger','Doppelganger',77,380000,1,313200,250560,1,1639,2815,246,86,122,122,105,67,169,72,10,12,1,6,67,0x37B5,100,480,480,288,156600,724,1500,505,6000,0,0,2317,250,1162,220,1168,150,2258,350,1411,550,985,3686,984,2700,0,0,0,0,4142,1); @@ -144,7 +143,7 @@ REPLACE INTO `mob_db` VALUES (1071,'PIRATE_SKEL','Pirate Skeleton','Pirate Skele REPLACE INTO `mob_db` VALUES (1072,'KAHO','Kaho','Kaho',98,7045,1,1953,1463,1,504,728,106,55,81,61,55,65,66,73,10,12,1,6,83,0x3985,150,1700,1000,500,0,0,0,0,0,0,0,994,30,1003,150,7097,3000,690,100,757,1000,716,300,970,5,0,0,0,0,4065,1); REPLACE INTO `mob_db` VALUES (1073,'CRAB','Crab','Crab',43,1233,1,315,354,1,69,79,36,11,22,14,24,7,28,15,7,12,0,5,21,0x81,200,992,792,360,0,0,0,0,0,0,0,964,5500,960,1500,7049,700,1001,13,0,0,0,0,757,37,0,0,0,0,4153,1); REPLACE INTO `mob_db` VALUES (1074,'SHELLFISH','Shellfish','Shellfish',50,1680,1,405,455,1,70,92,43,5,42,11,48,25,26,10,10,12,0,5,21,0x91,200,864,864,384,0,0,0,0,0,0,0,965,5500,966,1000,7049,500,1056,1000,1001,10,0,0,757,18,0,0,0,0,4273,1); -#REPLACE INTO `mob_db` VALUES (1075,'TURTLE','Turtle','Turtle',3,77,0,0,0,1,1,2,35,0,1,1,1,1,1,1,7,12,0,5,22,0x81,200,500,500,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1075,'TURTLE','Turtle','Turtle',3,77,0,0,0,1,1,2,35,0,1,1,1,1,1,1,7,12,0,5,22,0x81,200,500,500,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1076,'SKELETON','Skeleton','Skeleton',27,612,1,162,183,1,78,102,21,2,24,15,30,5,19,1,10,12,1,1,29,0x91,200,2228,528,576,0,0,0,0,0,0,0,1010,90,932,800,1505,80,909,3000,507,850,2609,30,0,0,0,0,0,0,4025,1); REPLACE INTO `mob_db` VALUES (1077,'POISON_SPORE','Poison Spore','Poison Spore',26,456,1,162,183,1,68,83,40,8,19,17,22,5,20,5,10,12,1,3,25,0x3885,200,1672,672,288,0,0,0,0,0,0,0,7033,9000,2221,20,511,550,510,60,972,50,921,1200,912,5,0,0,0,0,4048,1); REPLACE INTO `mob_db` VALUES (1078,'RED_PLANT','Red Plant','Red Plant',1,5,0,0,0,1,1,2,100,99,0,0,0,0,0,0,7,12,0,3,22,0x40,2000,1,1,1,0,0,0,0,0,0,0,507,5500,712,1000,711,1000,905,500,7933,300,914,500,708,50,0,0,0,0,2269,2); @@ -205,8 +204,8 @@ REPLACE INTO `mob_db` VALUES (1132,'KHALITZBURG','Khalitzburg','Khalitzburg',118 REPLACE INTO `mob_db` VALUES (1133,'KOBOLD_1','Kobold','Kobold',107,10483,1,2274,1706,1,539,626,103,25,109,76,61,53,82,30,10,12,1,7,44,0x308D,150,1028,528,360,0,0,0,0,0,0,0,999,100,1034,5335,912,700,757,25,1220,2,2104,5,0,0,0,0,0,0,4091,1); REPLACE INTO `mob_db` VALUES (1134,'KOBOLD_2','Kobold','Kobold',102,9152,1,1944,1458,1,367,429,117,59,96,61,55,48,79,20,10,12,1,7,45,0x308D,200,1528,528,360,0,0,0,0,0,0,0,999,100,1034,5335,912,200,2104,3,508,100,2101,100,0,0,0,0,0,0,4091,1); REPLACE INTO `mob_db` VALUES (1135,'KOBOLD_3','Kobold','Kobold',101,9078,1,1827,1371,1,360,424,109,48,103,64,59,42,67,20,10,12,1,7,43,0x308D,300,1228,528,360,0,0,0,0,0,0,0,990,35,999,100,1034,5335,912,200,1355,5,2104,3,508,100,0,0,0,0,4091,1); -#REPLACE INTO `mob_db` VALUES (1136,'KOBOLD_4','Kobold','Kobold',31,1961,1,783,395,1,316,378,24,10,1,31,31,20,55,20,10,12,1,7,45,0x31AD,200,1528,528,360,0,0,0,0,0,0,0,999,50,1034,5335,912,100,1355,5,2104,3,508,100,1301,150,0,0,0,0,4091,1); -#REPLACE INTO `mob_db` VALUES (1137,'KOBOLD_5','Kobold','Kobold',31,1962,1,580,366,1,223,256,24,10,1,31,31,20,88,20,10,12,1,7,43,0x31AD,300,1228,528,360,0,0,0,0,0,0,0,999,40,1034,5335,912,100,1514,5,2104,3,508,100,1501,150,0,0,0,0,4091,1); +# REPLACE INTO `mob_db` VALUES (1136,'KOBOLD_4','Kobold','Kobold',31,1961,1,783,395,1,316,378,24,10,1,31,31,20,55,20,10,12,1,7,45,0x31AD,200,1528,528,360,0,0,0,0,0,0,0,999,50,1034,5335,912,100,1355,5,2104,3,508,100,1301,150,0,0,0,0,4091,1); +# REPLACE INTO `mob_db` VALUES (1137,'KOBOLD_5','Kobold','Kobold',31,1962,1,580,366,1,223,256,24,10,1,31,31,20,88,20,10,12,1,7,43,0x31AD,300,1228,528,360,0,0,0,0,0,0,0,999,40,1034,5335,912,100,1514,5,2104,3,508,100,1501,150,0,0,0,0,4091,1); REPLACE INTO `mob_db` VALUES (1138,'MAGNOLIA','Magnolia','Magnolia',53,1984,1,441,495,1,91,256,51,8,49,25,21,50,28,85,10,12,0,6,21,0x183,200,1054,504,432,0,0,0,0,0,0,0,7031,9000,910,800,911,100,912,10,737,40,508,400,12127,5,0,0,0,0,4076,1); REPLACE INTO `mob_db` VALUES (1139,'MANTIS','Mantis','Mantis',65,2719,1,594,669,1,178,209,90,0,55,33,24,5,42,15,10,12,1,4,22,0x3195,200,1528,660,432,0,0,0,0,0,0,0,993,110,1031,9000,911,1400,757,70,943,250,721,10,507,650,0,0,0,0,4079,1); REPLACE INTO `mob_db` VALUES (1140,'MARDUK','Marduk','Marduk',73,2893,1,774,872,1,180,292,66,43,66,49,21,40,66,25,10,12,2,7,23,0x3095,300,1540,840,504,0,0,0,0,0,0,0,994,35,1045,4365,1608,10,2617,1,1614,3,691,100,642,20,0,0,0,0,4112,1); @@ -237,12 +236,12 @@ REPLACE INTO `mob_db` VALUES (1164,'REQUIEM','Requiem','Requiem',71,3089,1,738,8 REPLACE INTO `mob_db` VALUES (1165,'SAND_MAN','Sandman','Sandman',61,2887,1,626,705,1,156,212,126,24,44,8,55,15,31,25,10,12,1,0,62,0x3885,250,1672,720,288,0,0,0,0,0,0,0,997,35,1056,5335,757,118,7043,350,1001,200,1257,1,1622,5,0,0,0,0,4101,1); REPLACE INTO `mob_db` VALUES (1166,'SAVAGE','Savage','Savage',59,2301,1,573,644,1,172,195,126,3,56,21,54,10,47,15,10,12,2,2,42,0x91,150,1960,960,384,0,0,0,0,0,0,0,1028,9000,514,300,702,2,2276,1,6249,10,757,70,526,2,0,0,0,0,4078,1); REPLACE INTO `mob_db` VALUES (1167,'SAVAGE_BABE','Savage Babe','Savage Babe',14,180,1,90,68,1,19,25,22,0,16,8,9,5,21,18,10,12,0,2,22,0x81,400,1624,624,576,0,0,0,0,0,0,0,919,9000,1302,100,517,500,6249,1,949,850,1010,80,627,40,0,0,0,0,4017,1); -#REPLACE INTO `mob_db` VALUES (1168,'SCORPION_KING','Scorpion King','Scorpion King',50,5719,1,1968,1211,1,600,713,64,10,1,50,47,1,83,30,10,12,2,7,23,0x1B1,200,1700,1000,500,0,0,0,0,0,0,0,994,45,1046,4850,1005,15,904,5000,943,3000,509,700,0,0,0,0,0,0,4130,1); +# REPLACE INTO `mob_db` VALUES (1168,'SCORPION_KING','Scorpion King','Scorpion King',50,5719,1,1968,1211,1,600,713,64,10,1,50,47,1,83,30,10,12,2,7,23,0x1B1,200,1700,1000,500,0,0,0,0,0,0,0,994,45,1046,4850,1005,15,904,5000,943,3000,509,700,0,0,0,0,0,0,4130,1); REPLACE INTO `mob_db` VALUES (1169,'SKEL_WORKER','Skeleton Worker','Skeleton Worker',44,1240,1,333,374,1,92,104,45,5,30,13,22,10,37,25,10,12,1,1,29,0x3885,400,2420,720,384,0,0,0,0,0,0,0,998,400,1041,5500,757,90,5009,2,999,100,1003,200,7938,10,0,0,0,0,4092,1); REPLACE INTO `mob_db` VALUES (1170,'SOHEE','Sohee','Sohee',64,2875,1,594,669,1,169,199,61,21,61,24,29,20,37,25,10,12,1,6,21,0x191,250,2112,912,576,0,0,0,0,0,0,0,1020,9000,1049,50,2277,1,2504,5,1217,5,15012,5,662,350,0,0,0,0,4100,1); -#REPLACE INTO `mob_db` VALUES (1171,'SOLDIER_ANDRE','Soldier Andre','Soldier Andre',22,1245,0,219,138,1,105,127,20,0,1,22,44,20,40,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,2700,911,800,757,10,1111,15,1001,30,943,150,0,0,0,0,0,0,4059,1); -#REPLACE INTO `mob_db` VALUES (1172,'SOLDIER_DENIRO','Soldier Deniro','Soldier Deniro',29,2047,0,450,274,1,162,193,20,0,1,29,58,20,54,10,10,12,0,4,42,0x3095,200,2000,1000,500,0,0,0,0,0,0,0,1014,5500,911,2000,757,15,1111,20,943,270,1001,50,0,0,0,0,0,0,4059,1); -#REPLACE INTO `mob_db` VALUES (1173,'SOLDIER_PIERE','Soldier Piere','Soldier Piere',23,1217,0,240,149,1,109,131,25,0,1,23,46,20,38,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,3100,911,800,911,10,1114,15,1001,35,943,200,0,0,0,0,0,0,4059,1); +# REPLACE INTO `mob_db` VALUES (1171,'SOLDIER_ANDRE','Soldier Andre','Soldier Andre',22,1245,0,219,138,1,105,127,20,0,1,22,44,20,40,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,2700,911,800,757,10,1111,15,1001,30,943,150,0,0,0,0,0,0,4059,1); +# REPLACE INTO `mob_db` VALUES (1172,'SOLDIER_DENIRO','Soldier Deniro','Soldier Deniro',29,2047,0,450,274,1,162,193,20,0,1,29,58,20,54,10,10,12,0,4,42,0x3095,200,2000,1000,500,0,0,0,0,0,0,0,1014,5500,911,2000,757,15,1111,20,943,270,1001,50,0,0,0,0,0,0,4059,1); +# REPLACE INTO `mob_db` VALUES (1173,'SOLDIER_PIERE','Soldier Piere','Soldier Piere',23,1217,0,240,149,1,109,131,25,0,1,23,46,20,38,10,10,12,0,4,42,0x3095,200,1001,1,1,0,0,0,0,0,0,0,1014,3100,911,800,911,10,1114,15,1001,35,943,200,0,0,0,0,0,0,4059,1); REPLACE INTO `mob_db` VALUES (1174,'STAINER','Stainer','Stainer',21,365,1,126,143,1,65,74,22,25,10,10,24,0,39,15,10,12,0,4,24,0x191,200,1688,1188,612,0,0,0,0,0,0,0,992,70,1011,30,1013,9000,910,2100,757,25,943,10,1002,300,0,0,0,0,4039,1); REPLACE INTO `mob_db` VALUES (1175,'TAROU','Tarou','Tarou',22,420,1,135,152,1,72,78,23,5,21,6,12,0,10,1,10,12,0,2,27,0x91,150,1744,1044,684,0,0,0,0,0,0,0,1016,9000,919,3000,949,800,528,1000,701,2,0,0,0,0,0,0,0,0,4028,1); REPLACE INTO `mob_db` VALUES (1176,'VITATA','Vitata','Vitata',35,756,1,234,264,1,68,86,44,12,20,11,24,20,21,5,10,12,0,4,22,0x191,300,1768,768,384,0,0,0,0,0,0,0,993,90,955,5000,911,200,518,350,518,350,526,200,756,26,0,0,0,0,4053,1); @@ -250,7 +249,7 @@ REPLACE INTO `mob_db` VALUES (1177,'ZENORC','Zenorc','Zenorc',54,1816,1,450,507, REPLACE INTO `mob_db` VALUES (1178,'ZEROM','Zerom','Zerom',70,2687,1,720,960,1,312,350,93,15,57,49,30,15,56,20,10,12,1,7,23,0x3885,200,1780,1080,432,0,0,0,0,0,0,0,1011,55,998,190,2339,200,2265,3,2408,10,1002,300,7938,1,0,0,0,0,4064,1); REPLACE INTO `mob_db` VALUES (1179,'WHISPER','Whisper','Whisper',46,1109,1,242,513,1,65,120,20,40,32,48,20,35,52,20,10,12,0,6,68,0x3195,150,1960,960,504,0,0,0,0,0,0,0,1001,150,1059,5335,2282,1,2333,10,0,0,0,0,0,0,0,0,0,0,4102,1); REPLACE INTO `mob_db` VALUES (1180,'NINE_TAIL','Nine Tail','Nine Tail',72,2783,1,887,998,1,446,496,95,40,61,38,30,20,88,50,10,12,1,2,63,0x3695,150,840,540,480,0,0,0,0,0,0,0,1022,4656,746,200,603,100,604,100,526,250,525,350,756,100,0,0,0,0,4159,1); -#REPLACE INTO `mob_db` VALUES (1181,'ZOMBIE_DRAGON','Zombie Dragon','Zombie Dragon',1,1000,1,44550,1485,3,7900,9140,0,0,120,145,145,145,130,120,10,12,2,9,89,0x37B5,400,2700,1000,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1181,'ZOMBIE_DRAGON','Zombie Dragon','Zombie Dragon',1,1000,1,44550,1485,3,7900,9140,0,0,120,145,145,145,130,120,10,12,2,9,89,0x37B5,400,2700,1000,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1182,'THIEF_MUSHROOM','Thief Mushroom','Thief Mushroom',1,15,1,0,0,1,1,2,160,99,0,0,0,0,0,0,7,12,0,3,22,0x40,2000,1,1,1,0,0,0,0,0,0,0,1069,1500,1070,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1183,'CHONCHON_','Chonchon','Chonchon',5,63,1,36,27,1,11,14,29,0,13,4,4,0,7,5,10,12,0,4,24,0x3985,200,1076,576,480,0,0,0,0,0,0,0,998,50,935,5500,909,1500,1205,55,601,100,742,5,0,0,0,0,0,0,4009,1); REPLACE INTO `mob_db` VALUES (1184,'FABRE_','Fabre','Fabre',1,30,1,1,0,1,4,7,0,0,1,2,1,1,4,5,10,12,0,4,22,0x3985,400,1672,672,480,0,0,0,0,0,0,0,914,2000,949,250,1502,80,721,2,511,350,705,500,1501,200,0,0,0,0,0,0); @@ -278,7 +277,7 @@ REPLACE INTO `mob_db` VALUES (1206,'ANOLIAN','Anolian','Anolian',109,15547,1,293 REPLACE INTO `mob_db` VALUES (1207,'STING','Sting','Sting',104,10143,1,2172,1629,1,611,678,146,34,108,49,68,34,99,24,10,12,1,0,62,0x3695,300,528,500,240,0,0,0,0,0,0,0,7004,4850,1756,1500,2624,1,1003,130,997,25,10007,10,6213,800,0,0,0,0,4226,1); REPLACE INTO `mob_db` VALUES (1208,'WANDER_MAN','Wander Man','Wanderer',120,19307,1,3389,2466,2,711,816,64,5,118,92,36,15,107,33,10,12,1,6,24,0x3795,100,672,500,192,0,0,0,0,0,0,0,7005,4850,616,1,13015,5,2270,5,610,650,984,217,1164,1,0,0,0,0,4210,1); REPLACE INTO `mob_db` VALUES (1209,'CRAMP','Cramp','Cramp',82,3898,1,972,1094,1,395,443,88,42,65,43,35,25,68,30,10,12,0,2,45,0x3095,100,1000,500,1000,0,0,0,0,0,0,0,7007,4656,528,1000,726,80,746,110,568,250,510,70,984,95,0,0,0,0,4296,1); -#REPLACE INTO `mob_db` VALUES (1210,'FILAMENTOUS','Filamentous','Filamentous',51,6088,0,1926,1353,1,425,525,35,10,1,35,30,5,83,40,10,12,1,4,23,0x3095,200,1500,500,1000,0,0,0,0,0,0,0,7008,4850,947,8000,943,3880,993,200,1451,40,757,18,509,1600,0,0,0,0,4045,1); +# REPLACE INTO `mob_db` VALUES (1210,'FILAMENTOUS','Filamentous','Filamentous',51,6088,0,1926,1353,1,425,525,35,10,1,35,30,5,83,40,10,12,1,4,23,0x3095,200,1500,500,1000,0,0,0,0,0,0,0,7008,4850,947,8000,943,3880,993,200,1451,40,757,18,509,1600,0,0,0,0,4045,1); REPLACE INTO `mob_db` VALUES (1211,'BRILIGHT','Brilight','Brilight',71,2772,1,738,831,1,306,339,93,25,51,19,38,32,56,30,10,12,0,4,23,0x3195,200,1500,500,1000,0,0,0,0,0,0,0,7009,5335,992,200,912,1200,7938,100,757,220,610,250,509,2600,0,0,0,0,4213,1); REPLACE INTO `mob_db` VALUES (1212,'IRON_FIST','Iron Fist','Iron Fist',47,4221,0,1292,1368,1,430,590,40,5,1,17,15,10,73,20,10,12,1,4,60,0x3195,200,1500,500,1000,0,0,0,0,0,0,0,7010,5335,757,229,757,22,1002,750,999,180,998,300,0,0,0,0,0,0,4239,1); REPLACE INTO `mob_db` VALUES (1213,'HIGH_ORC','High Orc','High Orc',81,4193,1,1099,1158,1,389,439,101,45,75,16,40,31,69,20,10,12,2,7,43,0x3695,150,1500,500,1000,0,0,0,0,0,0,0,7002,2500,1304,10,999,90,931,7500,912,1300,756,196,508,900,0,0,0,0,4322,1); @@ -288,18 +287,18 @@ REPLACE INTO `mob_db` VALUES (1216,'PENOMENA','Penomena','Penomena',85,4589,1,11 REPLACE INTO `mob_db` VALUES (1219,'KNIGHT_OF_ABYSS','Knight of Abyss','Abysmal Knight',122,23297,1,4779,4013,1,810,1002,102,50,121,55,68,70,97,37,10,12,2,7,87,0x3695,300,1500,500,1000,0,0,0,0,0,0,0,1064,5335,7023,5,2318,1,1421,25,1162,1,985,369,15014,10,0,0,0,0,4140,1); REPLACE INTO `mob_db` VALUES (1220,'M_DESERT_WOLF','Desert Wolf','Desert Wolf',103,9447,1,349,218,1,254,313,114,47,93,69,63,61,82,42,10,12,1,2,23,0x3695,200,1120,420,288,0,0,0,0,0,0,0,1253,5,7030,5500,2311,1,517,1200,920,2000,756,53,0,0,0,0,0,0,4082,1); REPLACE INTO `mob_db` VALUES (1221,'M_SAVAGE','Savage','Savage',26,2092,0,321,203,1,146,177,16,5,1,26,54,10,37,10,10,12,2,2,42,0x3695,150,1960,960,384,0,0,0,0,0,0,0,1028,6000,514,150,702,3,2276,2,605,15,757,70,0,0,0,0,0,0,4078,1); -#REPLACE INTO `mob_db` VALUES (1222,'L_HIGH_ORC','High Orc','High Orc',52,6890,0,2128,1490,1,428,533,15,5,1,46,55,35,82,40,10,12,2,7,43,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7002,2500,1304,10,999,120,931,8000,912,1600,756,196,508,1100,0,0,0,0,4066,1); -#REPLACE INTO `mob_db` VALUES (1223,'L_ORC','Orc','Orc',24,1400,0,261,160,1,114,136,10,5,1,24,48,25,34,10,10,12,1,7,22,0x3695,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,2267,3,1352,10,1304,5,1301,100,0,0,0,0,4066,1); -#REPLACE INTO `mob_db` VALUES (1224,'L_POISON_SPORE','Poison Spore','Poison Spore',19,665,0,169,85,1,89,101,0,0,1,19,25,1,24,1,10,12,1,3,25,0x3695,200,1672,672,288,0,0,0,0,0,0,0,921,8000,2221,20,511,650,510,55,972,35,0,0,0,0,0,0,0,0,4048,1); -#REPLACE INTO `mob_db` VALUES (1225,'L_CHOCO','Choco','Choco',43,4278,0,1150,1150,1,315,402,5,5,1,68,55,45,65,25,10,12,0,2,23,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7011,5335,942,7000,508,1900,513,5000,2311,2,532,1000,607,25,0,0,0,0,4051,1); -#REPLACE INTO `mob_db` VALUES (1226,'L_KOBOLD','Kobold','Kobold',36,3893,0,898,568,1,265,318,15,10,1,90,36,30,52,30,10,12,1,7,44,0x3695,200,1028,528,360,0,0,0,0,0,0,0,999,90,1034,5820,912,750,985,25,1220,2,2104,5,0,0,0,0,0,0,4091,1); -#REPLACE INTO `mob_db` VALUES (1227,'L_GOBLIN','Goblin','Goblin',25,1176,0,282,171,1,118,140,10,5,1,63,25,20,38,45,10,12,1,7,24,0x3695,100,1120,620,240,0,0,0,0,0,0,0,998,270,911,1200,756,43,2297,3,1211,10,2104,5,507,800,0,0,0,0,4060,1); -#REPLACE INTO `mob_db` VALUES (1228,'L_PHEN','Phen','Phen',26,3347,0,357,226,1,138,150,0,15,1,26,26,1,88,75,10,12,1,5,41,0x3695,150,2544,1344,1152,0,0,0,0,0,0,0,1023,6000,963,2300,720,8,517,1100,951,550,756,25,0,0,0,0,0,0,4077,1); +# REPLACE INTO `mob_db` VALUES (1222,'L_HIGH_ORC','High Orc','High Orc',52,6890,0,2128,1490,1,428,533,15,5,1,46,55,35,82,40,10,12,2,7,43,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7002,2500,1304,10,999,120,931,8000,912,1600,756,196,508,1100,0,0,0,0,4066,1); +# REPLACE INTO `mob_db` VALUES (1223,'L_ORC','Orc','Orc',24,1400,0,261,160,1,114,136,10,5,1,24,48,25,34,10,10,12,1,7,22,0x3695,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,2267,3,1352,10,1304,5,1301,100,0,0,0,0,4066,1); +# REPLACE INTO `mob_db` VALUES (1224,'L_POISON_SPORE','Poison Spore','Poison Spore',19,665,0,169,85,1,89,101,0,0,1,19,25,1,24,1,10,12,1,3,25,0x3695,200,1672,672,288,0,0,0,0,0,0,0,921,8000,2221,20,511,650,510,55,972,35,0,0,0,0,0,0,0,0,4048,1); +# REPLACE INTO `mob_db` VALUES (1225,'L_CHOCO','Choco','Choco',43,4278,0,1150,1150,1,315,402,5,5,1,68,55,45,65,25,10,12,0,2,23,0x3695,200,1500,500,1000,0,0,0,0,0,0,0,7011,5335,942,7000,508,1900,513,5000,2311,2,532,1000,607,25,0,0,0,0,4051,1); +# REPLACE INTO `mob_db` VALUES (1226,'L_KOBOLD','Kobold','Kobold',36,3893,0,898,568,1,265,318,15,10,1,90,36,30,52,30,10,12,1,7,44,0x3695,200,1028,528,360,0,0,0,0,0,0,0,999,90,1034,5820,912,750,985,25,1220,2,2104,5,0,0,0,0,0,0,4091,1); +# REPLACE INTO `mob_db` VALUES (1227,'L_GOBLIN','Goblin','Goblin',25,1176,0,282,171,1,118,140,10,5,1,63,25,20,38,45,10,12,1,7,24,0x3695,100,1120,620,240,0,0,0,0,0,0,0,998,270,911,1200,756,43,2297,3,1211,10,2104,5,507,800,0,0,0,0,4060,1); +# REPLACE INTO `mob_db` VALUES (1228,'L_PHEN','Phen','Phen',26,3347,0,357,226,1,138,150,0,15,1,26,26,1,88,75,10,12,1,5,41,0x3695,150,2544,1344,1152,0,0,0,0,0,0,0,1023,6000,963,2300,720,8,517,1100,951,550,756,25,0,0,0,0,0,0,4077,1); REPLACE INTO `mob_db` VALUES (1229,'META_FABRE','Fabre','Fabre',2,63,1,3,2,1,8,11,0,0,1,2,4,0,7,5,10,12,0,4,22,0x181,400,1672,672,480,0,0,0,0,0,0,0,914,6500,949,600,1502,80,721,8,511,750,705,1500,1501,200,0,0,0,0,4002,1); REPLACE INTO `mob_db` VALUES (1230,'META_PUPA','Pupa','Pupa',2,427,1,2,4,0,1,2,32,20,1,1,1,0,1,20,10,12,0,4,22,0x100,1000,1001,1,1,0,0,0,0,0,0,0,1010,300,915,6000,938,700,2102,2,935,1300,938,700,1002,300,0,0,0,0,4003,1); REPLACE INTO `mob_db` VALUES (1231,'META_CREAMY','Creamy','Creamy',16,595,1,86,58,1,53,64,0,30,1,40,16,15,16,55,10,12,0,4,24,0x181,200,1220,720,288,0,0,0,0,0,0,0,924,6000,2322,10,518,180,602,200,2207,4,712,800,0,0,0,0,0,0,4040,1); REPLACE INTO `mob_db` VALUES (1232,'META_PECOPECO_EGG','Peco Peco Egg','Peco Peco Egg',3,420,1,4,4,0,1,2,32,20,1,1,1,0,1,20,10,12,0,0,60,0x0,1000,1001,1,1,0,0,0,0,0,0,0,1010,120,935,1500,2102,2,507,450,507,450,713,2000,736,15,0,0,0,0,4007,1); -#REPLACE INTO `mob_db` VALUES (1233,'CONCEIVE_PECOPECO','Peco Peco','Peco Peco',19,531,0,159,36,1,50,64,0,0,1,13,13,25,27,9,10,12,2,2,23,0x81,200,1564,864,576,0,0,0,0,0,0,0,925,6000,2402,20,508,55,507,950,1604,100,0,0,582,1000,0,0,0,0,4031,1); +# REPLACE INTO `mob_db` VALUES (1233,'CONCEIVE_PECOPECO','Peco Peco','Peco Peco',19,531,0,159,36,1,50,64,0,0,1,13,13,25,27,9,10,12,2,2,23,0x81,200,1564,864,576,0,0,0,0,0,0,0,925,6000,2402,20,508,55,507,950,1604,100,0,0,582,1000,0,0,0,0,4031,1); REPLACE INTO `mob_db` VALUES (1234,'PROVOKE_YOYO','Yoyo','Yoyo',19,879,1,122,77,1,71,82,0,0,1,24,30,35,32,55,10,12,0,2,22,0x108B,200,1054,54,384,0,0,0,0,0,0,0,942,6000,7182,500,508,130,919,5500,753,7,578,500,582,1000,0,0,0,0,4051,1); REPLACE INTO `mob_db` VALUES (1235,'SMOKING_ORC','Smoking Orc','Smoking Orc',24,1400,1,235,144,1,114,136,16,20,1,24,48,20,34,0,10,12,1,7,22,0x308D,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,2267,3,1352,10,1304,5,1301,100,0,0,0,0,4066,1); REPLACE INTO `mob_db` VALUES (1236,'META_ANT_EGG','Ant Egg','Ant Egg',4,420,1,5,4,0,1,2,32,20,1,1,1,0,1,20,10,12,0,0,60,0x0,1000,1001,1,1,0,0,0,0,0,0,0,1010,135,935,2740,909,3000,938,750,713,2000,1002,220,0,0,0,0,0,0,4013,1); @@ -308,8 +307,7 @@ REPLACE INTO `mob_db` VALUES (1238,'META_PIERE','Piere','Piere',18,733,1,110,70, REPLACE INTO `mob_db` VALUES (1239,'META_DENIRO','Deniro','Deniro',19,760,1,122,77,1,68,79,24,0,1,19,30,20,43,10,10,12,0,4,22,0x1181,150,1288,288,576,0,0,0,0,0,0,0,955,6000,910,3000,938,1200,990,45,1001,8,1002,450,757,34,0,0,0,0,4043,1); REPLACE INTO `mob_db` VALUES (1240,'META_PICKY','Picky','Picky',3,80,1,4,3,1,9,12,0,0,1,3,3,0,10,30,10,12,0,2,23,0x81,200,988,288,168,0,0,0,0,0,0,0,916,6500,949,850,2302,150,507,650,519,350,715,60,0,0,0,0,0,0,4008,1); REPLACE INTO `mob_db` VALUES (1241,'META_PICKY_','Picky','Picky',4,83,1,5,4,1,8,11,32,0,1,3,3,0,11,20,10,12,0,2,23,0x81,200,988,288,168,0,0,0,0,0,0,0,916,6500,949,850,5015,7,507,750,519,350,715,60,0,0,0,0,0,0,4011,1); - -# Lutie (2.0) +# Lutie (2.0) REPLACE INTO `mob_db` VALUES (1242,'MARIN','Marin','Marin',37,987,1,282,317,1,69,83,32,8,24,5,10,5,30,15,10,12,1,3,41,0x83,400,1872,672,480,0,0,0,0,0,0,0,910,3200,938,1500,700,100,720,40,510,75,529,350,5035,1,0,0,0,0,4196,1); REPLACE INTO `mob_db` VALUES (1243,'SASQUATCH','Sasquatch','Sasquatch',72,3163,1,765,860,1,266,296,101,28,70,35,60,10,59,20,10,12,2,2,60,0x3695,300,1260,192,192,0,0,0,0,0,0,0,912,750,509,800,949,1000,5030,1,948,5000,727,30,757,90,0,0,0,0,4216,1); REPLACE INTO `mob_db` VALUES (1244,'JAKK_XMAS','Christmas Jakk','Christmas Jakk',63,2054,1,1002,619,1,218,255,90,25,58,43,42,25,55,15,10,12,1,0,43,0x81,200,1180,480,648,0,0,0,0,0,0,0,1062,5335,912,900,985,31,2331,5,644,20,7175,1200,7174,1200,0,0,0,0,4109,1); @@ -321,8 +319,7 @@ REPLACE INTO `mob_db` VALUES (1249,'MYSTCASE','Myst Case','Myst Case',39,879,1,2 REPLACE INTO `mob_db` VALUES (1250,'CHEPET','Chepet','Chepet',42,4950,0,1315,1854,1,79,112,55,25,32,35,35,21,32,23,10,12,1,7,23,0x3695,400,672,672,288,0,0,0,0,0,0,0,7035,2500,912,750,512,5500,619,40,10019,5,508,1300,2508,5,0,0,0,0,4284,1); REPLACE INTO `mob_db` VALUES (1251,'KNIGHT_OF_WINDSTORM','Knight of Windstorm','Stormy Knight',92,630500,1,413800,302200,2,2677,4110,306,166,126,165,132,104,171,79,10,12,2,0,84,0x37B5,200,468,468,288,206900,720,4500,2406,500,995,3000,1468,150,603,3000,617,4000,2621,200,2506,500,985,4559,5007,1,0,0,0,0,4318,1); REPLACE INTO `mob_db` VALUES (1252,'GARM','Garm','Hatii',98,1275500,1,758880,613800,3,1862,3595,173,103,122,153,135,116,146,72,10,12,2,2,81,0x37B5,400,608,408,336,379440,7036,1000,603,3000,995,3000,7036,5500,1131,150,1256,500,1815,500,0,0,985,3977,984,2900,0,0,0,0,4324,1); - -# Comodo (3.0) +# Comodo (3.0) REPLACE INTO `mob_db` VALUES (1253,'GARGOYLE','Gargoyle','Gargoyle',100,8772,1,1900,1425,9,383,472,98,43,100,61,60,57,100,70,10,12,1,6,64,0x2185,200,1020,720,384,0,0,0,0,0,0,0,912,3880,1039,500,2506,2,1746,5,2619,1,1769,2000,757,238,0,0,0,0,4149,1); REPLACE INTO `mob_db` VALUES (1254,'RAGGLER','Raggler','Raggler',48,1148,1,369,414,1,72,111,56,10,30,42,38,15,54,27,10,12,0,2,24,0x3695,200,1000,900,384,0,0,0,0,0,0,0,7053,3000,916,5000,645,200,514,200,992,90,2225,7,756,32,0,0,0,0,4186,1); REPLACE INTO `mob_db` VALUES (1255,'NERAID','Neraid','Nereid',98,9550,1,1575,1181,1,196,267,100,37,97,45,60,30,69,50,10,12,0,2,22,0x3695,200,776,576,288,0,0,0,0,0,0,0,1055,5100,7053,1000,510,230,1966,10,514,250,757,180,985,37,0,0,0,0,4167,1); @@ -354,9 +351,8 @@ REPLACE INTO `mob_db` VALUES (1280,'STEAM_GOBLIN','Steam Goblin','Goblin Steamri REPLACE INTO `mob_db` VALUES (1281,'SAGEWORM','Sage Worm','Sage Worm',70,2872,1,720,810,1,158,279,109,45,39,29,28,71,44,30,10,12,0,2,60,0x91,200,936,936,288,0,0,0,0,0,0,0,2716,5,1097,1000,1055,3000,691,100,505,40,689,100,5012,1,0,0,0,0,4219,1); REPLACE INTO `mob_db` VALUES (1282,'KOBOLD_ARCHER','Kobold Archer','Kobold Archer',108,11053,1,2160,2620,9,586,619,84,5,99,39,48,30,103,25,10,12,0,7,23,0x2085,200,1008,1008,384,0,0,0,0,0,0,0,912,250,999,60,1034,4850,5118,50,1763,2000,1711,5,756,79,0,0,0,0,4292,1); REPLACE INTO `mob_db` VALUES (1283,'CHIMERA','Chimera','Chimera',70,26406,1,5168,4698,1,980,1128,159,10,1,38,110,88,83,85,10,12,2,2,63,0x37B5,200,772,672,360,0,0,0,0,0,0,0,7054,5335,1048,2500,568,1000,1306,1,7295,1500,1364,1,984,160,0,0,0,0,4300,1); -#REPLACE INTO `mob_db` VALUES (1284,'HUGELING','Hugeling','Hugeling',1,5000,0,2,1,4,7,10,0,0,1,1,1,1,6,1,10,12,2,3,21,0x91,200,1872,672,480,0,0,0,0,0,0,0,512,100,512,100,512,100,512,100,512,100,512,100,512,100,512,100,0,0,0,0); - -# War Of Emperium & Guild Dungeon (4.1) +# REPLACE INTO `mob_db` VALUES (1284,'HUGELING','Hugeling','Hugeling',1,5000,0,2,1,4,7,10,0,0,1,1,1,1,6,1,10,12,2,3,21,0x91,200,1872,672,480,0,0,0,0,0,0,0,512,100,512,100,512,100,512,100,512,100,512,100,512,100,512,100,0,0,0,0); +# War Of Emperium & Guild Dungeon (4.1) REPLACE INTO `mob_db` VALUES (1285,'ARCHER_GUARDIAN','Archer Guardian','Archer Guardian',74,28634,1,1,1,12,1120,1600,56,60,95,80,80,90,165,55,14,16,2,7,80,0x1FA5,265,1200,1200,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1286,'KNIGHT_GUARDIAN','Knight Guardian','Knight Guardian',86,30214,1,1,1,2,1280,1560,88,30,110,40,140,65,125,65,14,16,2,7,80,0x1FA5,275,1200,1200,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1287,'SOLDIER_GUARDIAN','Soldier Guardian','Soldier Guardian',56,15670,1,1,1,1,873,1036,56,0,85,56,100,45,103,43,10,12,2,7,20,0x21A5,265,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -384,8 +380,7 @@ REPLACE INTO `mob_db` VALUES (1308,'PANZER_GOBLIN','Panzer Goblin','Panzer Gobli REPLACE INTO `mob_db` VALUES (1309,'GAJOMART','Gajomart','Gajomart',81,3825,0,1317,1490,1,355,412,98,50,77,47,39,33,78,40,10,12,0,0,83,0x3695,300,1000,1152,828,0,0,0,0,0,0,0,953,6500,912,2300,508,870,2279,8,1752,10000,2131,20,994,180,0,0,0,0,4151,1); REPLACE INTO `mob_db` VALUES (1310,'MAJORUROS','Majoruros','Majoruros',107,11801,1,3090,2200,1,654,1086,111,25,112,58,65,55,72,49,10,12,2,2,43,0x3695,250,1100,960,780,0,0,0,0,0,0,0,941,4413,1361,4,6254,300,984,16,509,1850,2611,160,1000,250,0,0,0,0,4201,1); REPLACE INTO `mob_db` VALUES (1311,'GULLINBURSTI','Gullinbursti','Gullinbursti',89,7080,0,1478,1677,1,371,419,108,43,88,54,82,35,63,15,10,12,2,2,42,0x3695,150,1960,960,384,0,0,0,0,0,0,0,1028,3500,514,290,702,6,2276,1,605,15,2627,1,912,160,0,0,0,0,4164,1); - -# Turtle Dungeon (4.0) +# Turtle Dungeon (4.0) REPLACE INTO `mob_db` VALUES (1312,'TURTLE_GENERAL','Turtle General','Turtle General',110,1442000,1,933120,748440,2,2438,4504,394,123,116,123,154,99,181,98,10,12,2,2,42,0x37B5,200,900,1000,500,466560,967,5500,607,1500,617,2000,1529,8,1306,5,7480,200,1417,9,7070,5335,1141,80,658,1,0,0,0,0,4305,1); REPLACE INTO `mob_db` VALUES (1313,'MOBSTER','Mobster','Mobster',58,2253,1,495,557,1,149,172,87,18,72,36,33,21,41,5,10,12,1,7,20,0x3695,250,1100,560,580,0,0,0,0,0,0,0,1239,3,726,4559,2621,1,6264,500,912,2500,525,450,6265,500,0,0,0,0,4317,1); REPLACE INTO `mob_db` VALUES (1314,'PERMETER','Permeter','Permeter',90,6575,1,1305,1467,2,265,321,144,50,68,28,55,40,42,25,10,12,1,2,40,0x91,250,1100,483,528,0,0,0,0,0,0,0,967,4413,6263,200,7939,100,507,2450,912,1240,522,25,605,1,0,0,0,0,4311,1); @@ -398,8 +393,7 @@ REPLACE INTO `mob_db` VALUES (1320,'OWL_DUKE','Owl Duke','Owl Duke',92,7381,1,13 REPLACE INTO `mob_db` VALUES (1321,'DRAGON_TAIL','Dragon Tail','Dragon Tail',86,4680,1,1264,1422,1,182,217,63,25,61,65,35,40,52,20,10,12,1,4,44,0x3795,175,862,534,312,0,0,0,0,0,0,0,7064,4413,1096,400,943,800,2207,8,2226,2,601,300,602,150,0,0,0,0,4178,1); REPLACE INTO `mob_db` VALUES (1322,'SPRING_RABBIT','Spring Rabbit','Spring Rabbit',88,6684,1,1341,1509,1,288,328,108,42,68,66,35,30,48,5,10,12,1,2,42,0x83,160,1120,552,511,0,0,0,0,0,0,0,7054,3500,7053,2500,949,2500,511,4500,508,800,510,200,509,800,0,0,0,0,4227,1); REPLACE INTO `mob_db` VALUES (1323,'SEE_OTTER','Sea Otter','Sea Otter',48,1820,1,428,480,1,83,125,31,18,32,26,33,26,41,28,10,12,1,2,61,0x3885,190,1132,583,532,0,0,0,0,0,0,0,722,150,965,5500,7065,4365,725,50,726,50,746,650,7053,1200,0,0,0,0,4326,1); - -# WoE Treasure Boxes +# WoE Treasure Boxes REPLACE INTO `mob_db` VALUES (1324,'TREASURE_BOX1','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,732,7760,608,3000,607,2500,2504,800,2404,800,2315,800,2104,800,616,1000,0,0,0,0); REPLACE INTO `mob_db` VALUES (1325,'TREASURE_BOX2','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,7073,80,658,500,604,10000,984,4850,985,7275,1239,1500,5027,75,1165,8,0,0,0,0); REPLACE INTO `mob_db` VALUES (1326,'TREASURE_BOX3','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,732,7760,608,3000,607,2500,2504,800,2404,800,2315,800,2104,800,616,1000,0,0,0,0); @@ -440,8 +434,7 @@ REPLACE INTO `mob_db` VALUES (1360,'TREASURE_BOX37','Treasure Chest','Treasure C REPLACE INTO `mob_db` VALUES (1361,'TREASURE_BOX38','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,7091,80,658,500,604,10000,984,4850,985,7275,1417,50,5053,50,2229,50,0,0,0,0); REPLACE INTO `mob_db` VALUES (1362,'TREASURE_BOX39','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,732,7760,608,3000,607,2500,2504,800,2404,800,2315,800,2104,800,616,1000,0,0,0,0); REPLACE INTO `mob_db` VALUES (1363,'TREASURE_BOX40','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,7092,80,658,500,604,10000,984,4850,985,7275,2506,43,2254,43,1529,38,0,0,0,0); - -# Yuno (5.0) +# Yuno (5.0) REPLACE INTO `mob_db` VALUES (1364,'G_ASSULTER','Assaulter','Assaulter',98,7798,1,0,0,2,225,292,83,49,100,86,30,20,82,15,10,12,1,6,44,0x3795,155,1000,900,432,0,0,0,0,0,0,0,1019,9000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1365,'APOCALIPS','Apocalypse','Apocalypse',121,22090,1,3042,2282,2,752,868,136,26,130,53,76,25,89,15,10,12,2,0,60,0x91,400,1840,1440,384,0,0,0,0,0,0,0,7095,5335,7094,2400,7093,2200,985,5,13161,1,2506,20,12735,100,0,0,0,0,4242,1); REPLACE INTO `mob_db` VALUES (1366,'LAVA_GOLEM','Lava Golem','Lava Golem',103,8452,1,2232,1674,1,598,651,299,27,126,42,103,28,77,15,10,12,2,0,83,0x3095,400,2190,2040,336,0,0,0,0,0,0,0,7096,4559,7097,3686,2317,1,2316,2,509,2500,1818,20,6245,500,0,0,0,0,4184,1); @@ -477,11 +470,9 @@ REPLACE INTO `mob_db` VALUES (1395,'CRYSTAL_1','Wind Crystal','Wind Crystal',1,1 REPLACE INTO `mob_db` VALUES (1396,'CRYSTAL_2','Earth Crystal','Earth Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,667,4900,0,0,531,6500,558,5000,0,0,0,0,608,150); REPLACE INTO `mob_db` VALUES (1397,'CRYSTAL_3','Fire Crystal','Fire Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,664,4900,0,0,534,6500,558,5000,0,0,0,0,604,150); REPLACE INTO `mob_db` VALUES (1398,'CRYSTAL_4','Water Crystal','Water Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,666,4900,0,0,533,6500,558,5000,0,0,0,0,603,100); - -# Event MVP +# Event MVP REPLACE INTO `mob_db` VALUES (1399,'EVENT_BAPHO','Baphomet','Baphomet',68,1264000,0,78525,25106,3,1847,2267,35,45,1,152,96,85,120,95,10,12,2,6,67,0x37B5,130,768,768,576,130875,607,5500,526,5000,732,5000,1417,550,1306,680,1145,480,2110,640,2327,1500,2111,500,2621,1720,0,0,0,0,2256,1550); - -# Amatsu (6.0) +# Amatsu (6.0) REPLACE INTO `mob_db` VALUES (1400,'KARAKASA','Karakasa','Karakasa',72,3092,1,765,860,1,156,198,93,29,66,73,33,20,53,60,10,12,1,0,60,0x81,155,1638,2016,576,0,0,0,0,0,0,0,7151,5000,7150,4268,1019,3200,7111,2200,912,4074,746,30,13012,5,0,0,0,0,4286,1); REPLACE INTO `mob_db` VALUES (1401,'SHINOBI','Shinobi','Shinobi',95,8000,1,1691,1902,2,441,492,49,45,71,70,55,30,69,30,10,12,1,7,67,0x3695,150,1003,1152,336,0,0,0,0,0,0,0,7156,5335,2337,2,6214,700,2654,100,2336,1,7157,2000,13013,5,0,0,0,0,4230,1); REPLACE INTO `mob_db` VALUES (1402,'POISON_TOAD','Poison Toad','Poison Toad',87,4876,1,1341,1509,3,212,266,80,42,66,42,40,45,58,30,10,12,1,2,45,0x81,160,1148,1728,864,0,0,0,0,0,0,0,7155,5500,7154,2400,2610,4,511,540,724,2,526,2,1246,10,0,0,0,0,4175,1); @@ -489,22 +480,20 @@ REPLACE INTO `mob_db` VALUES (1403,'ANTIQUE_FIRELOCK','Antique Firelock','Firelo REPLACE INTO `mob_db` VALUES (1404,'MIYABI_NINGYO','Miyabi Ningyo','Miyabi Doll',85,5188,1,1116,1256,1,216,282,57,19,66,30,30,55,73,40,10,12,1,6,27,0x191,250,1938,2112,768,0,0,0,0,0,0,0,7152,5335,7153,2500,509,1550,1000,1250,12127,10,13014,5,1904,2,0,0,0,0,4208,1); REPLACE INTO `mob_db` VALUES (1405,'TENGU','Tengu','Tengu',98,10196,1,1701,1275,2,211,294,134,46,99,38,40,30,67,60,10,12,2,6,42,0x3985,200,1439,1920,672,0,0,0,0,0,0,0,7159,3500,7158,5500,13301,5,522,150,13302,5,12128,20,687,100,0,0,0,0,4282,1); REPLACE INTO `mob_db` VALUES (1406,'KAPHA','Kapha','Kapha',83,5470,1,1035,1164,1,278,310,61,38,67,59,40,31,61,24,10,12,1,5,21,0x3885,165,2012,1728,672,0,0,0,0,0,0,0,7149,6500,7053,3500,13304,20,521,2300,708,2,1915,10,13008,5,0,0,0,0,4287,1); -#REPLACE INTO `mob_db` VALUES (1407,'DOKEBI_','Dokebi','Dokebi',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Gonryun (6.1) +# REPLACE INTO `mob_db` VALUES (1407,'DOKEBI_','Dokebi','Dokebi',1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# Gonryun (6.1) REPLACE INTO `mob_db` VALUES (1408,'BLOOD_BUTTERFLY','Bloody Butterfly','Bloody Butterfly',94,7030,1,1555,1749,3,278,345,79,50,70,68,40,55,90,30,10,12,1,4,44,0x318D,145,472,576,288,0,0,0,0,0,0,0,7163,4608,7168,2500,602,1200,924,5500,1802,3,1962,1,0,0,0,0,0,0,4327,1); REPLACE INTO `mob_db` VALUES (1409,'RICE_CAKE_BOY','Rice Cake Boy','Dumpling Child',60,2098,1,531,597,1,128,150,96,12,50,43,29,5,43,10,10,12,0,7,20,0x91,160,1247,768,420,0,0,0,0,0,0,0,7150,3200,7151,2500,2262,1,7192,5000,553,1000,7187,3000,0,0,0,0,0,0,4154,1); REPLACE INTO `mob_db` VALUES (1410,'LIVE_PEACH_TREE','Live Peach Tree','Enchanted Peach Tree',92,8777,1,1499,1724,7,270,342,109,40,76,52,55,40,77,50,10,12,1,3,42,0x2085,410,400,672,480,0,0,0,0,0,0,0,7164,4365,7939,100,526,1000,604,400,532,100,603,5,0,0,0,0,0,0,4217,1); -#REPLACE INTO `mob_db` VALUES (1411,'PEACH_TREE_BULLET','Peach Tree Bullet','Peach Tree Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1411,'PEACH_TREE_BULLET','Peach Tree Bullet','Peach Tree Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1412,'EVIL_CLOUD_HERMIT','Evil Cloud Hermit','Taoist Hermit',96,8266,1,1503,1127,10,470,500,66,46,63,57,45,60,99,45,10,12,2,0,40,0x2085,190,480,840,432,0,0,0,0,0,0,0,7162,4656,548,5600,550,4500,553,6800,1908,2,757,150,693,100,0,0,0,0,4262,1); REPLACE INTO `mob_db` VALUES (1413,'WILD_GINSENG','Wild Ginseng','Hermit Plant',90,6052,1,1409,1586,1,523,594,56,62,76,51,60,60,76,50,10,12,0,3,43,0x91,140,512,756,360,0,0,0,0,0,0,0,520,3500,521,3500,1033,3800,1032,4800,6217,800,1951,1,578,1000,0,0,0,0,4232,1); -#REPLACE INTO `mob_db` VALUES (1414,'GINSENG_BULLET','Ginseng Bullet','Ginseng Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1414,'GINSENG_BULLET','Ginseng Bullet','Ginseng Bullet... (mode 129)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1415,'BABY_LEOPARD','Baby Leopard','Baby Leopard',68,2590,1,500,1016,2,277,329,77,5,46,36,20,4,55,10,10,12,0,2,28,0x3885,150,318,528,420,0,0,0,0,0,0,0,7171,5200,7172,3200,756,150,517,2000,1214,100,537,500,0,0,0,0,0,0,4233,1); REPLACE INTO `mob_db` VALUES (1416,'WICKED_NYMPH','Wicked Nymph','Evil Nymph',97,8491,1,1775,1331,2,340,468,46,45,84,46,45,70,77,60,10,12,1,6,67,0x3795,200,637,1008,360,0,0,0,0,0,0,0,7165,3977,7166,1380,984,10,1904,4,1906,1,12002,100,1918,10,0,0,0,0,4258,1); REPLACE INTO `mob_db` VALUES (1417,'ZIPPER_BEAR','Zipper Bear','Zipper Bear',90,6620,1,1305,1467,1,410,467,130,40,68,51,50,35,58,20,10,12,1,2,27,0x91,155,780,1008,420,0,0,0,0,0,0,0,7161,4462,7167,3500,526,400,518,900,512,90,0,0,0,0,0,0,0,0,4281,1); REPLACE INTO `mob_db` VALUES (1418,'DARK_SNAKE_LORD','Evil Snake Lord','Evil Snake Lord',105,1101000,1,720000,630000,3,2217,4203,314,185,122,172,107,135,196,88,10,12,2,2,68,0x37B5,200,588,816,420,78120,607,5500,608,3500,985,5500,7169,5820,10020,5100,1471,80,5012,80,1474,500,7226,900,661,2000,0,0,0,0,4330,1); - -# Additional G_Mobs +# Additional G_Mobs REPLACE INTO `mob_db` VALUES (1419,'G_FARMILIAR','Familiar','Familiar',24,427,1,0,0,1,68,77,26,5,15,19,20,5,20,1,10,12,0,2,27,0x3881,150,1276,576,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1420,'G_ARCHER_SKELETON','Archer Skeleton','Archer Skeleton',50,1646,1,0,0,9,90,113,47,10,30,29,20,10,32,5,10,12,1,1,29,0x3885,300,2864,864,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1421,'G_ISIS','Isis','Isis',59,2092,1,0,0,1,192,229,83,5,58,43,22,5,39,15,10,12,2,6,27,0x3985,200,1384,768,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -578,23 +567,20 @@ REPLACE INTO `mob_db` VALUES (1488,'G_ANOLIAN','Anolian','Anolian',109,15547,1,0 REPLACE INTO `mob_db` VALUES (1489,'G_STING','Sting','Sting',104,14143,1,0,0,1,521,588,146,50,108,49,68,43,87,24,10,12,1,0,62,0x3885,300,528,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1490,'G_WANDER_MAN','Wander Man','Wanderer',120,19307,1,0,0,2,711,816,64,5,118,92,36,15,107,33,10,12,1,6,24,0x3985,100,672,500,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1491,'G_DOKEBI','Dokebi','Dokebi',68,2820,1,0,0,1,317,347,85,20,52,56,35,20,60,25,10,12,0,6,27,0x3985,250,1156,456,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Umbala (6.2) +# Umbala (6.2) REPLACE INTO `mob_db` VALUES (1492,'INCANTATION_SAMURAI','Incantation Samurai','Samurai Specter',100,901000,1,751680,595080,3,2196,3132,296,140,145,161,88,66,155,60,10,12,2,7,67,0x37B5,135,874,1344,576,375840,607,5500,608,3500,985,5500,1165,2,985,3500,5096,500,607,4500,999,6305,13303,7500,1235,80,0,0,0,0,4263,1); REPLACE INTO `mob_db` VALUES (1493,'DRYAD','Dryad','Dryad',68,3640,1,837,939,3,266,301,153,8,54,14,40,35,67,10,10,12,1,3,82,0x3885,170,950,2520,576,0,0,0,0,0,0,0,7197,5335,7198,1000,7188,3000,6265,500,1964,1,7939,100,7100,3000,0,0,0,0,4177,1); REPLACE INTO `mob_db` VALUES (1494,'KIND_OF_BEETLE','Beetle King','Beetle King',55,2061,1,450,507,1,110,162,79,8,53,47,10,0,45,0,10,12,0,4,22,0x1189,165,1247,768,576,0,0,0,0,0,0,0,7190,6500,7202,4500,928,1000,955,500,2102,1,0,0,0,0,0,0,0,0,4307,1); REPLACE INTO `mob_db` VALUES (1495,'STONE_SHOOTER','Stone Shooter','Stone Shooter',64,2101,1,689,776,10,201,254,88,15,55,55,36,15,77,15,10,12,1,3,63,0x3885,175,2413,1248,768,0,0,0,0,0,0,0,7203,5000,7201,5000,7188,1000,1019,2000,756,100,7049,1000,0,0,0,0,0,0,4225,1); -#REPLACE INTO `mob_db` VALUES (1496,'STONE_SHOOTER_BULLET','Stone Shooter Bullet','Stone Shooter Bullet',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1496,'STONE_SHOOTER_BULLET','Stone Shooter Bullet','Stone Shooter Bullet',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1497,'WOODEN_GOLEM','Wooden Golem','Wooden Golem',72,3914,1,950,1079,1,292,334,249,26,69,30,45,5,49,5,10,12,2,3,82,0x3885,165,1543,1632,480,0,0,0,0,0,0,0,7189,4000,7188,4000,757,110,2270,10,604,100,7201,5000,7936,300,0,0,0,0,4259,1); REPLACE INTO `mob_db` VALUES (1498,'WOOTAN_SHOOTER','Wootan Shooter','Wootan Shooter',67,3096,1,711,798,10,140,175,91,21,32,23,38,20,69,10,10,12,1,7,42,0x3885,200,857,1056,576,0,0,0,0,0,0,0,7195,4500,7200,3500,513,1000,7049,1000,7939,100,7182,100,5116,10,0,0,0,0,4260,1); REPLACE INTO `mob_db` VALUES (1499,'WOOTAN_FIGHTER','Wootan Fighter','Wootan Fighter',67,2327,1,709,798,1,243,279,103,8,63,14,36,5,56,15,10,12,1,7,43,0x3885,200,912,1344,480,0,0,0,0,0,0,0,517,4500,7196,4000,1801,3,1812,1,7939,100,7198,1000,5116,5,0,0,0,0,4261,1); REPLACE INTO `mob_db` VALUES (1500,'PARASITE','Parasite','Parasite',76,3222,1,923,1337,8,161,206,63,30,55,78,33,50,88,40,10,12,1,3,44,0x84,400,864,864,672,0,0,0,0,0,0,0,7193,5500,7194,2000,7186,3880,7198,500,1957,1,1969,1,6265,800,0,0,0,0,4309,1); -#REPLACE INTO `mob_db` VALUES (1501,'PARASITE_BULLET','Parasite Bullet','Parasite Bullet... (mode 2181)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Event MVP +# REPLACE INTO `mob_db` VALUES (1501,'PARASITE_BULLET','Parasite Bullet','Parasite Bullet... (mode 2181)',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# Event MVP REPLACE INTO `mob_db` VALUES (1502,'PORING_V','Pori Pori','Bring it on!',99,95000000,1,78525,25106,1,5000,10000,0,10,100,100,65,100,255,255,10,12,1,3,25,0x39A5,160,1672,672,480,43625,10020,1000,4005,100,2286,200,5035,10000,2344,2500,2346,2500,2350,2500,2348,2500,2655,500,7126,10000,0,0,0,0,2110,4500); - -# Nifflheim (7.0) +# Nifflheim (7.0) REPLACE INTO `mob_db` VALUES (1503,'GIBBET','Gibbet','Gibbet',105,12999,1,1944,1458,1,536,621,116,45,103,56,62,55,61,37,10,12,2,6,27,0x3985,180,917,1584,576,0,0,0,0,0,0,0,7212,1800,7218,5335,7222,4074,724,300,716,100,604,10,7939,100,0,0,0,0,4278,1); REPLACE INTO `mob_db` VALUES (1504,'DULLAHAN','Dullahan','Dullahan',108,18546,1,2509,1977,2,666,741,111,38,121,29,51,43,87,3,10,12,1,1,49,0x3885,155,847,1152,480,0,0,0,0,0,0,0,7209,3200,7210,4850,2614,1,2505,13,2506,1,0,0,0,0,0,0,0,0,4176,1); REPLACE INTO `mob_db` VALUES (1505,'LOLI_RURI','Loli Ruri','Loli Ruri',109,15280,1,2790,2093,2,787,1017,53,44,111,50,47,79,79,79,10,12,2,6,87,0x3985,125,747,1632,576,0,0,0,0,0,0,0,7206,800,7219,3000,7214,5044,985,100,7019,1,2718,5,6246,300,0,0,0,0,4191,1); @@ -603,11 +589,9 @@ REPLACE INTO `mob_db` VALUES (1507,'BLOODY_MURDERER','Bloody Murderer','Bloody M REPLACE INTO `mob_db` VALUES (1508,'QUVE','Quve','Quve',100,11090,1,1638,1229,1,226,323,96,55,84,54,55,50,71,60,10,12,0,1,29,0x3885,150,912,1248,576,0,0,0,0,0,0,0,7205,3200,7220,5723,601,1000,7154,100,756,10,6245,500,0,0,0,0,0,0,4294,1); REPLACE INTO `mob_db` VALUES (1509,'LUDE','Lude','Lude',101,11574,1,1692,1269,2,218,296,90,53,97,38,55,82,69,55,10,12,0,1,29,0x3885,150,890,960,480,0,0,0,0,0,0,0,7225,3200,7220,5723,1059,1000,2282,10,757,10,12001,100,6246,300,0,0,0,0,4193,1); REPLACE INTO `mob_db` VALUES (1510,'HYLOZOIST','Hylozoist','Heirozoist',102,12000,1,1876,1406,1,268,349,101,68,97,67,72,88,69,60,10,12,0,6,47,0x3985,155,741,1536,480,0,0,0,0,0,0,0,7215,4365,7217,5335,7213,2000,740,80,7220,300,757,10,5113,1,0,0,0,0,4321,1); - -# Pyramid Basement +# Pyramid Basement REPLACE INTO `mob_db` VALUES (1511,'AMON_RA','Amon Ra','Amon Ra',69,319000,1,240120,187920,3,710,1762,213,123,86,89,120,131,101,92,14,12,2,7,62,0x1A4,170,854,2016,480,120060,607,5500,608,3500,732,5500,5053,150,2615,50,7211,7760,985,3880,616,400,1552,10,607,3000,0,0,0,0,4236,1); - -# Louyang (8.0) +# Louyang (8.0) REPLACE INTO `mob_db` VALUES (1512,'HYEGUN','Hyegun','Yao Jun',87,6996,1,1283,1445,1,246,294,84,43,69,38,40,20,68,20,10,12,1,1,49,0x3885,180,890,1320,720,0,0,0,0,0,0,0,7054,3880,609,100,985,10,2406,1,7277,300,15013,10,0,0,0,0,0,0,4328,1); REPLACE INTO `mob_db` VALUES (1513,'CIVIL_SERVANT','Civil Servant','Mao Guai',89,5292,1,1349,1512,2,276,337,90,56,67,76,40,65,62,30,10,12,1,2,44,0x3885,200,1257,528,432,0,0,0,0,0,0,0,7262,4171,7263,2000,606,10,1023,100,693,100,0,0,0,0,0,0,0,0,4202,1); REPLACE INTO `mob_db` VALUES (1514,'DANCING_DRAGON','Dancing Dragon','Zhu Po Long',82,3943,1,972,1094,2,268,303,83,36,59,76,40,30,61,30,10,12,1,9,44,0x83,160,600,840,504,0,0,0,0,0,0,0,7266,4365,7265,3000,7268,800,1036,1000,7038,3000,0,0,0,0,0,0,0,0,4272,1); @@ -617,8 +601,7 @@ REPLACE INTO `mob_db` VALUES (1517,'LI_ME_MANG_RYANG','Li Me Mang Ryang','Jing G REPLACE INTO `mob_db` VALUES (1518,'BACSOJIN','Bacsojin','White Lady',97,720500,1,668160,542880,2,1088,3124,210,178,118,244,98,126,205,102,10,12,2,7,41,0x3695,160,576,960,480,0,0,0,0,0,0,0,1020,5500,603,2,617,2,7165,3000,7166,1000,747,500,0,0,0,0,0,0,2234,1); REPLACE INTO `mob_db` VALUES (1519,'CHUNG_E','Chung E','Green Maiden',49,23900,0,2156,894,1,460,1050,8,15,38,65,43,30,90,15,10,12,1,7,40,0x3695,170,1728,816,1188,0,0,0,0,0,0,0,7053,4850,740,100,1806,10,518,500,0,0,0,0,0,0,0,0,0,0,5042,2); REPLACE INTO `mob_db` VALUES (1520,'BOILED_RICE','Boiled Rice','Boiled Rice',15,777,1,7,7,1,7,14,0,10,7,7,7,17,17,7,10,12,1,3,21,0x81,170,1152,672,672,0,0,0,0,0,0,0,564,5500,7272,3000,7194,1000,7198,1000,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional G_Mobs & Bosses +# Additional G_Mobs & Bosses REPLACE INTO `mob_db` VALUES (1521,'G_ALICE','Alice','Alice',100,9230,1,0,0,1,395,493,93,73,82,53,45,70,80,80,10,12,1,7,60,0x91,200,520,2304,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1522,'G_ANCIENT_MUMMY','Ancient Mummy','Ancient Mummy',115,29157,1,0,0,1,701,801,93,27,126,57,55,69,56,15,10,12,1,1,49,0x3695,175,1772,120,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1523,'G_ANTIQUE_FIRELOCK','Antique Firelock','Firelock Soldier',88,7524,1,0,0,10,324,369,72,30,67,44,30,30,83,30,10,12,1,1,49,0x2085,170,1084,2304,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -682,14 +665,12 @@ REPLACE INTO `mob_db` VALUES (1580,'G_INCUBUS','Incubus','Incubus',120,28000,1,0 REPLACE INTO `mob_db` VALUES (1581,'G_VOCAL','Vocal','Vocal',18,3317,1,0,0,1,71,82,77,26,77,26,26,30,53,40,10,12,1,4,22,0x3795,200,1080,648,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1582,'DEVILING','Deviling','Deviling',66,16890,1,2281,2379,1,298,481,67,70,48,50,33,75,77,200,10,12,1,6,87,0x37B5,200,1072,1056,384,0,0,0,0,0,0,0,1039,3000,912,4850,2255,100,512,5000,7023,1,983,100,694,100,0,0,0,0,4174,1); REPLACE INTO `mob_db` VALUES (1583,'TAO_GUNKA','Tao Gunka','Tao Gunka',110,1252000,1,900000,720000,2,2890,4150,404,143,135,175,98,110,199,66,10,12,2,6,60,0x37B5,150,1020,288,144,450000,984,6000,617,3000,505,6000,7300,4850,7067,4850,728,1000,2296,400,504,3000,12738,200,2231,5,0,0,0,0,4302,1); - -# Ayothaya (9.0) +# Ayothaya (9.0) REPLACE INTO `mob_db` VALUES (1584,'TAMRUAN','Tamruan','Tamruan',73,3195,1,898,1010,1,305,342,63,30,60,38,40,20,61,20,10,12,2,6,67,0x318D,140,512,1152,672,0,0,0,0,0,0,0,7301,4850,7069,3000,1117,40,1155,8,2315,3,12736,300,0,0,0,0,0,0,4304,1); REPLACE INTO `mob_db` VALUES (1585,'MIME_MONKEY','Mime Monkey','Mime Monkey',40,6000,0,200,22,3,300,350,40,40,1,40,40,40,40,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,909,7000,1202,100,938,400,512,1000,713,1500,741,5,619,20,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1586,'LEAF_CAT','Leaf Cat','Leaf Cat',64,2635,1,594,669,1,140,181,88,16,46,16,12,45,33,29,10,12,0,2,22,0x83,150,960,864,720,0,0,0,0,0,0,0,7198,4365,520,300,608,5,1023,1100,568,250,567,500,7298,5335,0,0,0,0,4195,1); REPLACE INTO `mob_db` VALUES (1587,'KRABEN','Kraben','Kraben',70,2901,1,510,1095,1,266,311,108,20,54,33,35,15,62,20,10,12,1,0,48,0x3095,100,1152,1536,576,0,0,0,0,0,0,0,912,3500,519,3000,521,1000,2102,1,7299,4850,7286,1000,603,10,0,0,0,0,4295,1); - -# Additional G_Mobs & Xmas_Orc +# Additional G_Mobs & Xmas_Orc REPLACE INTO `mob_db` VALUES (1588,'ORC_XMAS','Christmas Orc','Christmas Orc',24,1400,1,235,144,1,104,126,16,5,1,24,48,25,34,10,10,12,1,7,22,0x81,200,1864,864,288,0,0,0,0,0,0,0,998,210,931,5500,756,40,7175,1600,1352,10,644,15,7174,1600,0,0,0,0,4066,1); REPLACE INTO `mob_db` VALUES (1589,'G_MANDRAGORA','Mandragora','Mandragora',13,156,1,0,0,4,38,41,13,2,12,3,5,5,10,5,10,12,1,3,62,0x84,1000,1768,768,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1590,'G_GEOGRAPHER','Geographer','Geographer',73,3866,1,0,0,3,281,363,158,42,81,26,35,56,60,60,10,12,1,3,62,0x84,2000,1308,1008,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -715,8 +696,7 @@ REPLACE INTO `mob_db` VALUES (1609,'G_DANCING_DRAGON','Dancing Dragon','Zhu Po L REPLACE INTO `mob_db` VALUES (1610,'A_MUNAK','Munak','Munak',30,2872,0,0,0,1,40,50,0,0,1,15,20,5,120,15,10,12,1,1,89,0x39A5,100,2468,768,288,0,0,0,0,0,0,0,502,2000,0,0,0,0,0,0,0,0,0,0,12017,100,0,0,0,0,12016,100); REPLACE INTO `mob_db` VALUES (1611,'A_BON_GUN','Bongun','Bongun',59,2510,1,0,0,1,189,218,88,5,55,24,24,5,34,10,10,12,1,1,89,0x31B5,200,1720,500,420,0,0,0,0,0,0,0,502,2000,0,0,0,0,0,0,0,0,0,0,12017,100,0,0,0,0,12016,100); REPLACE INTO `mob_db` VALUES (1612,'A_HYEGUN','Hyegun','Yao Jun',56,9981,0,0,0,1,710,1128,20,10,60,40,36,10,73,15,10,12,1,1,89,0x39A5,180,890,1320,720,0,0,0,0,0,0,0,502,2000,0,0,0,0,0,0,0,0,0,0,12017,100,0,0,0,0,12016,100); - -# Einbroch (10.1) +# Einbroch (10.1) REPLACE INTO `mob_db` VALUES (1613,'METALING','Metaling','Metaling',81,4300,1,954,1074,1,171,210,69,28,58,30,49,17,50,5,10,12,0,0,20,0x83,300,384,672,480,0,0,0,0,0,0,0,7325,4000,1002,1000,998,500,7126,1000,7317,200,13103,5,7312,5000,0,0,0,0,4341,1); REPLACE INTO `mob_db` VALUES (1614,'MINERAL','Mineral','Mineral',96,8300,1,1503,1127,1,578,635,127,23,70,61,40,50,62,50,10,12,0,0,40,0x91,250,648,480,360,0,0,0,0,0,0,0,7321,3000,728,500,714,2,984,80,1011,800,715,100,969,2,0,0,0,0,4339,1); REPLACE INTO `mob_db` VALUES (1615,'OBSIDIAN','Obsidian','Obsidian',97,10088,1,1652,1239,1,590,670,129,37,84,38,40,60,53,50,10,12,0,0,42,0x3885,350,720,864,504,0,0,0,0,0,0,0,7315,3000,730,500,1003,500,985,50,999,500,1263,10,0,0,0,0,0,0,4338,1); @@ -730,11 +710,9 @@ REPLACE INTO `mob_db` VALUES (1622,'TEDDY_BEAR','Teddy Bear','Teddy Bear',91,723 REPLACE INTO `mob_db` VALUES (1623,'RSX_0806','RSX 0806','RSX-0806',100,1001000,1,720000,576000,1,2315,3291,317,96,153,143,110,128,165,84,10,12,2,0,60,0x37B5,220,128,1104,240,360000,607,5500,5104,3500,732,5500,7093,6000,1230,5,13017,1,617,1000,7327,5000,1242,100,1531,40,0,0,0,0,4342,1); REPLACE INTO `mob_db` VALUES (1624,'G_WASTE_STOVE','Waste Stove','Old Stove',92,7400,1,0,0,1,408,468,100,47,76,61,50,30,56,15,10,12,2,0,20,0x3885,220,1152,528,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1625,'G_PORCELLIO','Porcellio','Porcellio',85,5544,1,922,624,1,165,218,79,37,67,48,28,40,62,30,10,12,0,4,62,0x3985,150,720,360,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Hellion Revenant +# Hellion Revenant REPLACE INTO `mob_db` VALUES (1626,'G_DARK_PRIEST','Hellion Revenant','Hellion Revenant',79,8600,1,1,1,2,178,238,88,50,54,63,40,78,56,99,10,12,1,6,69,0x37B5,150,432,384,192,0,0,0,0,0,0,0,7337,8000,7337,5000,7337,3000,7337,1000,7337,500,7337,100,0,0,0,0,0,0,0,0); - -# Lighthalzen (10.2) +# Lighthalzen (10.2) REPLACE INTO `mob_db` VALUES (1627,'ANOPHELES','Anopheles','Anopheles',95,7238,1,1691,1902,1,242,260,7,10,64,60,42,58,88,42,10,12,0,4,64,0x3985,170,1084,2304,576,0,0,0,0,0,0,0,601,1000,7119,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4344,1); REPLACE INTO `mob_db` VALUES (1628,'MOLE','Mole','Holden',85,6228,1,1206,1358,9,260,309,82,16,53,65,31,30,48,31,10,12,0,2,42,0x1089,300,1400,960,504,0,0,0,0,0,0,0,1017,5000,1018,5000,5119,50,13101,5,0,0,0,0,0,0,0,0,0,0,4343,1); REPLACE INTO `mob_db` VALUES (1629,'HILL_WIND','Hill Wind','Hill Wind',43,2870,0,340,340,3,290,480,9,15,21,50,31,50,59,23,10,12,1,2,64,0x3885,200,336,540,432,0,0,0,0,0,0,0,517,1000,528,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4345,1); @@ -742,43 +720,42 @@ REPLACE INTO `mob_db` VALUES (1630,'BACSOJIN_','Bacsojin','White Lady',97,720500 REPLACE INTO `mob_db` VALUES (1631,'CHUNG_E_','Chung E','Green Maiden',82,3901,0,1049,1481,2,247,310,69,15,66,79,36,48,66,43,10,12,1,7,44,0x3885,150,1728,816,1188,0,0,0,0,0,0,0,7053,4200,740,100,1806,10,518,500,0,0,0,0,5042,50,0,0,0,0,4373,1); REPLACE INTO `mob_db` VALUES (1632,'GREMLIN','Gremlin','Gremlin',118,20313,1,3091,2318,1,606,744,76,25,141,75,48,61,90,37,10,12,2,6,47,0x191,140,432,540,432,0,0,0,0,0,0,0,7340,3000,938,3000,719,100,2406,1,1265,1,0,0,603,2,0,0,0,0,4355,1); REPLACE INTO `mob_db` VALUES (1633,'BEHOLDER','Beholder','Beholder',120,19280,1,3285,2463,6,588,718,50,30,96,82,65,107,94,82,10,12,0,0,44,0x91,190,336,840,360,0,0,0,0,0,0,0,576,3000,605,100,996,100,985,10,0,0,0,0,603,2,0,0,0,0,4356,1); -# Normal advanced class mobs +# Normal advanced class mobs REPLACE INTO `mob_db` VALUES (1634,'SEYREN','Seyren','Seyren Windsor',142,194962,1,10386,7790,1,1670,1987,166,12,142,69,86,49,132,55,10,12,1,6,63,0x3195,170,76,384,288,0,0,0,0,0,0,0,7345,3000,13001,2,1163,200,6223,10,2229,12,2317,1,13421,100,0,0,0,0,4358,1); REPLACE INTO `mob_db` VALUES (1635,'EREMES','Eremes','Eremes Guile',140,190525,1,10329,6846,1,1503,1674,122,12,145,87,59,67,127,76,10,12,1,6,85,0x3195,180,76,384,288,0,0,0,0,0,0,0,7347,2000,6223,1,2514,1,1262,3,1264,30,678,110,1284,100,0,0,0,0,4360,1); REPLACE INTO `mob_db` VALUES (1636,'HARWORD','Harword','Howard Alt-Eisen',142,348100,1,10854,7241,1,1308,1590,131,10,138,79,62,53,82,48,10,12,1,7,81,0x3095,180,76,384,288,0,0,0,0,0,0,0,7345,3000,2514,1,1311,100,1361,110,2104,10,2318,1,6223,10,0,0,0,0,4362,1); REPLACE INTO `mob_db` VALUES (1637,'MAGALETA','Magaleta','Margaretha Sorin',140,220800,1,9895,7421,1,851,1405,108,93,126,74,71,123,99,65,10,12,1,7,66,0x3295,180,1152,384,288,0,0,0,0,0,0,0,7347,2000,1647,100,6223,1,1561,10,2327,1,603,50,2504,10,0,0,0,0,4364,1); REPLACE INTO `mob_db` VALUES (1638,'SHECIL','Shecil','Cecil Damon',141,190255,1,10103,7577,14,1158,1406,76,15,121,126,67,80,165,42,10,12,1,7,64,0x3095,180,76,384,288,0,0,0,0,0,0,0,7345,3000,12014,110,2331,10,1711,100,12007,150,6223,1,1745,100,0,0,0,0,4368,1); REPLACE INTO `mob_db` VALUES (1639,'KATRINN','Katrinn','Kathryne Keyron',141,219780,1,9207,6905,1,726,1449,77,74,108,78,55,144,139,49,10,12,1,7,68,0x3295,150,1152,384,288,0,0,0,0,0,0,0,7345,3000,6223,1,1646,100,1620,5,2102,30,5085,1,2404,20,0,0,0,0,4366,1); -# MVP Slaves +# MVP Slaves REPLACE INTO `mob_db` VALUES (1640,'G_SEYREN','Lord Knight Seyren','Lord Knight Seyren',160,2680000,1,0,0,1,4290,6632,567,155,303,165,181,110,178,66,10,12,1,7,83,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6223,100,0,0,0,0,617,10); REPLACE INTO `mob_db` VALUES (1641,'G_EREMES','Assassin Cross Eremes','Assassin Cross Eremes',160,1230000,1,0,0,1,4055,5433,445,98,211,181,114,83,225,60,10,12,1,7,85,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6223,100,0,0,0,0,617,10); REPLACE INTO `mob_db` VALUES (1642,'G_HARWORD','Whitesmith Harword','Whitesmith Howard',160,3750000,1,0,0,1,3500,4965,301,106,275,148,156,72,177,60,10,12,1,7,82,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6223,100,0,0,0,0,617,10); REPLACE INTO `mob_db` VALUES (1643,'G_MAGALETA','High Priest Magaleta','High Priest Margaretha',160,2800000,1,0,0,1,1666,5062,231,349,172,150,164,203,155,88,10,12,1,7,86,0x37B5,125,1152,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6223,100,0,0,0,0,617,10); REPLACE INTO `mob_db` VALUES (1644,'G_SHECIL','Sniper Shecil','Sniper Cecil',160,4140000,1,0,0,14,2770,4320,178,135,176,258,155,132,309,95,10,12,1,7,84,0x37B5,100,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6223,100,0,0,0,0,617,10); REPLACE INTO `mob_db` VALUES (1645,'G_KATRINN','High Wizard Katrinn','High Wizard Kathryne',160,4500000,1,0,0,1,1398,6652,215,456,165,190,142,236,199,93,10,12,1,7,68,0x37B5,150,1152,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6223,100,0,0,0,0,617,10); -# MVP Monsters +# MVP Monsters REPLACE INTO `mob_db` VALUES (1646,'B_SEYREN','Lord Knight Seyren','Lord Knight Seyren',160,4680000,1,4642560,3481920,1,4290,6632,567,155,303,165,181,110,178,66,10,12,1,7,83,0x37B5,100,76,384,288,2321280,617,5500,603,5000,732,2000,1132,2500,2342,3500,2412,9000,1470,3500,1469,3000,1166,2500,1415,1500,0,0,0,0,4357,1); REPLACE INTO `mob_db` VALUES (1647,'B_EREMES','Assassin Cross Eremes','Assassin Cross Eremes',160,4230000,1,4185000,3147120,1,4055,5433,445,98,211,181,114,83,225,60,10,12,1,7,85,0x37B5,100,76,384,288,2092500,617,5500,603,5000,732,2000,1234,1500,1230,1500,2319,9000,1233,3500,1232,3500,1265,3500,13002,3500,0,0,0,0,4359,1); REPLACE INTO `mob_db` VALUES (1648,'B_HARWORD','Whitesmith Harword','Whitesmith Howard',160,6750000,1,3555000,2664000,1,3500,4965,301,106,275,148,156,72,177,60,10,12,1,7,82,0x37B5,100,76,384,288,1777500,617,5500,603,5000,732,2000,1138,3500,1140,2500,2318,9000,1365,3500,1364,3500,1369,2500,1368,3500,0,0,0,0,4361,1); REPLACE INTO `mob_db` VALUES (1649,'B_MAGALETA','High Priest Magaleta','High Priest Margaretha',160,4800000,1,3465000,2520000,1,1666,5062,231,349,172,150,164,203,155,88,10,12,1,7,86,0x37B5,125,1152,384,288,1732500,617,5500,603,5000,732,2000,1814,3500,2615,2500,2513,9000,1557,3500,1527,3500,1528,2500,1560,3500,0,0,0,0,4363,1); REPLACE INTO `mob_db` VALUES (1650,'B_SHECIL','Sniper Shecil','Sniper Cecil',160,4140000,1,4106880,3080160,14,2770,4320,178,135,176,258,155,132,309,95,10,12,1,7,84,0x37B5,100,76,384,288,2053440,617,5500,603,5000,1723,2000,1228,3500,1236,3500,617,9000,1234,1500,1237,3500,1720,1500,1724,2500,0,0,0,0,4367,1); REPLACE INTO `mob_db` VALUES (1651,'B_KATRINN','High Wizard Katrinn','High Wizard Kathryne',160,4500000,1,3240000,2430000,1,1398,6652,215,456,165,190,142,236,199,93,10,12,1,7,68,0x37B5,150,1152,384,288,1620000,617,5500,603,5000,732,2000,1241,3500,1242,3500,2616,9000,2343,2500,2513,2500,1618,3000,2319,3500,0,0,0,0,4365,1); -# 1'st Class Mobs +# 1'st Class Mobs REPLACE INTO `mob_db` VALUES (1652,'YGNIZEM','Ygnizem','Egnigem Cenia',136,44327,1,5229,4461,1,790,1018,124,8,144,92,86,69,99,68,10,12,1,7,43,0x3885,145,576,432,288,0,0,0,0,0,0,0,7347,1000,1170,1,1158,20,1127,20,2313,10,1152,80,2317,1,0,0,0,0,4346,1); REPLACE INTO `mob_db` VALUES (1653,'WHIKEBAIN','Whikebain','Wickebine Tres',132,43191,1,5094,4721,1,876,1020,114,66,114,91,69,42,85,55,10,12,1,7,65,0x3885,120,576,432,288,0,0,0,0,0,0,0,7345,2000,1223,1,2306,40,1220,10,2315,2,2620,1,13004,10,0,0,0,0,4348,1); REPLACE INTO `mob_db` VALUES (1654,'ARMAIA','Armaia','Armeyer Dinze',134,46878,1,4895,4909,1,793,948,119,4,123,59,85,65,96,62,10,12,1,7,62,0x3885,120,576,432,288,0,0,0,0,0,0,0,7345,1000,2504,1,1358,50,1352,40,2311,10,1302,80,1307,10,0,0,0,0,4347,1); REPLACE INTO `mob_db` VALUES (1655,'EREND','Erend','Errende Ebecee',133,42764,1,4860,4545,1,558,880,106,99,77,66,90,105,87,62,10,12,1,7,46,0x3885,130,576,432,288,0,0,0,0,0,0,0,7345,500,2217,5,1514,50,1517,20,2326,5,2324,10,1523,1,0,0,0,0,4349,1); REPLACE INTO `mob_db` VALUES (1656,'KAVAC','Kavac','Kavach Icarus',135,43079,1,5103,4276,9,663,792,86,48,103,109,62,50,149,48,10,12,1,7,44,0x3885,150,576,432,288,0,0,0,0,0,0,0,7347,2000,1716,1,12006,100,1708,10,2308,5,2402,30,2404,2,0,0,0,0,4351,1); REPLACE INTO `mob_db` VALUES (1657,'RAWREL','Rawrel','Laurell Weinder',133,40282,1,4500,4477,1,445,877,76,88,67,79,65,122,112,57,10,12,1,7,48,0x3885,150,576,432,288,0,0,0,0,0,0,0,934,1000,1616,1,2102,5,1608,50,2322,10,2333,30,2607,1,0,0,0,0,4350,1); -# 1'st Class MvP (Ygnizem/Egnigem Cenia) and her mobs. +# 1'st Class MvP (Ygnizem/Egnigem Cenia) and her mobs. REPLACE INTO `mob_db` VALUES (1658,'B_YGNIZEM','Ygnizem','Egnigem Cenia',141,2910088,1,1054400,1860000,1,3057,5408,373,175,188,177,165,142,185,105,10,12,1,7,43,0x37B5,100,1008,864,288,527200,617,5500,603,5000,732,2000,1162,1000,644,5000,603,5000,1167,1000,2320,1000,2406,1000,1130,1000,0,0,0,0,4352,1); REPLACE INTO `mob_db` VALUES (1659,'G_WHIKEBAIN','Whikebain','Wickebine Tres',132,43191,1,0,0,1,876,1020,114,66,114,91,69,42,85,55,10,12,1,7,65,0x3885,120,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1660,'G_ARMAIA','Armaia','Armeyer Dinze',134,46878,1,0,0,1,793,948,119,4,123,59,85,65,96,62,10,12,1,7,62,0x3885,120,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1661,'G_EREND','Erend','Errende Ebecee',133,42764,1,0,0,1,558,880,106,99,77,66,90,105,87,62,10,12,1,7,46,0x3885,130,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1662,'G_KAVAC','Kavac','Kavach Icarus',135,43079,1,0,0,9,663,792,86,48,103,109,62,50,149,48,10,12,1,7,44,0x3885,150,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1663,'G_RAWREL','Rawrel','Laurell Weinder',133,40282,1,0,0,1,445,877,76,88,67,79,65,122,112,57,10,12,1,7,48,0x3885,150,1008,864,288,0,0,0,0,0,0,0,0,0,644,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Juperos +# Juperos REPLACE INTO `mob_db` VALUES (1664,'POTON_CANON','Photon Cannon','Photon Cannon',66,8000,0,800,600,9,800,900,16,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,7126,5000,718,1000,938,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1665,'POTON_CANON_1','Photon Cannon','Photon Cannon',67,7500,0,600,800,9,700,800,24,30,1,40,30,40,86,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,7126,5000,726,1000,938,1000,13160,5,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1666,'POTON_CANON_2','Photon Cannon','Photon Cannon',64,7100,0,800,600,9,800,900,13,30,1,40,21,29,80,91,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,7126,5000,721,1000,938,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -807,8 +784,7 @@ REPLACE INTO `mob_db` VALUES (1688,'LADY_TANEE','Lady Tanee','Lady Tanee',80,360 REPLACE INTO `mob_db` VALUES (1689,'G_BACSOJIN','Bacsojin','White Lady',97,720500,1,0,0,3,1088,3124,210,178,118,244,98,126,205,102,10,12,2,7,64,0x37B5,130,576,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1690,'G_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',12,15,1,0,0,1,0,0,160,99,1,1,1,1,1,1,10,12,1,2,20,0xC3,160,1120,552,511,0,0,0,0,0,0,0,6005,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1691,'G_KRABEN','Kraben','Kraben',70,2901,1,0,0,1,266,311,108,20,54,33,35,15,62,20,10,12,1,0,48,0x3885,100,1152,1536,576,0,0,0,0,0,0,0,521,1,521,1,521,1,521,1,521,1,521,1,521,1,0,0,0,0,0,0); - -# Thanatos Tower (10.3) +# Thanatos Tower (10.3) REPLACE INTO `mob_db` VALUES (1692,'BREEZE','Breeze','Breeze',92,6755,1,1598,1797,2,379,431,83,32,75,101,46,35,66,55,10,12,1,0,64,0x3885,100,140,384,504,0,0,0,0,0,0,0,945,500,706,10,2270,10,1733,10,604,10,2269,10,996,10,0,0,0,0,4390,1); REPLACE INTO `mob_db` VALUES (1693,'PLASMA_Y','Plasma','Plasma',119,20600,1,2111,2882,1,615,750,130,45,141,94,75,91,103,50,10,12,0,0,88,0x3885,150,1056,1056,336,0,0,0,0,0,0,0,911,100,644,10,731,2,715,100,969,1,7938,300,0,0,0,0,0,0,4389,1); REPLACE INTO `mob_db` VALUES (1694,'PLASMA_R','Plasma','Plasma',118,16789,1,3549,2661,1,835,935,111,12,147,77,66,65,95,50,10,12,0,0,83,0x3885,150,912,1248,576,0,0,0,0,0,0,0,911,100,644,10,731,2,716,100,990,45,0,0,0,0,0,0,0,0,4389,1); @@ -830,8 +806,7 @@ REPLACE INTO `mob_db` VALUES (1709,'G_THA_ODIUM','Thanatos Odium','Odium of Than REPLACE INTO `mob_db` VALUES (1710,'G_THA_DESPERO','Thanatos Despero','Despero of Thanatos',129,41111,1,0,0,2,737,908,95,69,111,96,66,65,91,52,10,12,2,1,88,0x33B5,150,160,528,360,0,0,0,0,0,0,0,7054,1000,731,500,732,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1711,'G_THA_MAERO','Thanatos Maero','Maero of Thanatos',129,42599,1,0,0,2,756,1001,96,90,97,111,70,133,82,67,10,12,1,1,88,0x33B5,150,160,480,360,0,0,0,0,0,0,0,7054,1000,731,500,732,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1712,'G_THA_DOLOR','Thanatos Dolor','Dolor of Thanatos',129,45000,1,0,0,2,700,901,71,80,91,72,59,96,78,79,10,12,0,1,88,0x33B5,150,160,672,480,0,0,0,0,0,0,0,7054,1000,731,500,732,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Abyss Lake +# Abyss Lake REPLACE INTO `mob_db` VALUES (1713,'ACIDUS','Acidus','Acidus',130,48430,1,4520,3389,2,622,1017,101,90,109,78,50,55,77,55,10,12,2,9,46,0x3095,170,168,1008,300,0,0,0,0,0,0,0,7938,500,1035,4000,7444,5,1036,3589,7448,800,1269,10,2114,50,0,0,0,0,4378,1); REPLACE INTO `mob_db` VALUES (1714,'FERUS','Ferus','Ferus',126,25668,1,3985,2989,2,692,807,96,45,94,80,55,60,78,50,10,12,2,9,43,0x3095,100,108,576,432,0,0,0,0,0,0,0,578,2200,1035,1000,7123,1000,1036,2000,7447,800,994,20,5122,50,0,0,0,0,4380,1); REPLACE INTO `mob_db` VALUES (1715,'NOVUS','Novus','Novus',90,6670,1,1305,1505,1,388,445,95,48,74,56,57,25,90,45,10,12,0,9,20,0x3885,110,151,288,360,0,0,0,0,0,0,0,511,3000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4383,1); @@ -852,8 +827,7 @@ REPLACE INTO `mob_db` VALUES (1729,'R_BAPHOMET_','Baphomet Jr.','Baphomet Jr.',5 REPLACE INTO `mob_db` VALUES (1730,'R_DEVIRUCHI','Deviruchi','Deviruchi',64,2300,1,0,0,1,210,283,62,30,61,17,30,35,52,5,10,12,0,6,27,0x183,150,980,600,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1731,'G_DOPPELGANGER','Doppelganger','Doppelganger',77,380000,1,313200,250560,1,1639,2815,246,86,122,122,105,67,169,72,10,12,2,8,48,0x37B5,190,480,480,288,0,0,0,0,0,0,0,7484,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1732,'G_TREASURE_BOX','Treasure Chest','Treasure Chest',98,500,1,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,7486,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Kiel Dungeon (10.4) +# Kiel Dungeon (10.4) REPLACE INTO `mob_db` VALUES (1733,'KIEL','Kiel','Kiehl',90,523500,1,32850,21065,3,2018,3647,45,32,100,112,76,89,156,102,10,12,1,0,47,0x37B5,140,1152,576,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1734,'KIEL_','Kiel D-01','Kiel D-01',125,2502000,1,1800000,1440000,3,2937,6517,314,232,166,187,155,141,199,180,10,12,1,0,47,0x37B5,130,1152,576,432,900000,617,5500,603,5000,616,2000,7513,3000,617,3000,2651,1000,2319,1000,1618,500,1242,500,2650,1000,0,0,0,0,4403,1); REPLACE INTO `mob_db` VALUES (1735,'ALICEL','Alicel','Alicel',115,18000,1,2565,1923,2,537,635,109,30,121,53,59,63,73,60,10,12,1,6,60,0x318D,250,1080,480,504,0,0,0,0,0,0,0,7512,2000,7507,3000,2148,5,6214,200,1270,5,985,10,2517,20,0,0,0,0,4401,1); @@ -872,8 +846,7 @@ REPLACE INTO `mob_db` VALUES (1747,'G_SNAKE','Snake','Boa',18,217,1,0,0,1,29,34, REPLACE INTO `mob_db` VALUES (1748,'G_ANACONDAQ','Anacondaq','Anacondaq',100,8510,1,0,0,1,388,443,92,0,79,46,28,43,56,25,10,12,1,2,25,0x3885,200,1576,576,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1749,'G_MEDUSA','Medusa','Medusa',102,10045,1,0,0,1,477,590,87,66,99,68,65,79,69,15,10,12,1,6,40,0x3985,180,1720,1320,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1750,'G_RED_PLANT','Red Plant','Red Plant',1,100,1,0,0,1,100,200,160,99,0,0,0,0,0,100,7,12,0,3,22,0x40,2000,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Odin's Temple +# Odin's Temple REPLACE INTO `mob_db` VALUES (1751,'RANDGRIS','Valkyrie Randgris','Valkyrie Randgris',141,2205000,1,2000000,2200000,3,2895,9307,588,506,196,131,125,276,267,156,10,12,2,8,86,0x37B5,100,576,576,480,1000000,617,5500,603,5000,616,2000,7510,5000,2357,1600,2524,3000,2421,3000,2229,5000,7024,2500,0,0,0,0,0,0,4407,1); REPLACE INTO `mob_db` VALUES (1752,'SKOGUL','Skogul','Skogul',126,34240,1,4280,3210,2,791,947,72,15,100,71,63,85,82,37,10,12,1,6,67,0x3395,190,720,384,480,0,0,0,0,0,0,0,7511,3500,7054,1000,716,1000,739,500,2609,100,757,500,1271,5,0,0,0,0,4404,1); REPLACE INTO `mob_db` VALUES (1753,'FRUS','Frus','Frus',128,39520,1,4562,3421,2,710,879,65,35,114,77,66,51,79,27,10,12,1,6,67,0x3395,150,480,576,432,0,0,0,0,0,0,0,7511,3500,7054,1000,716,1000,2622,3,2308,10,757,500,0,0,0,0,0,0,4405,1); @@ -891,8 +864,7 @@ REPLACE INTO `mob_db` VALUES (1764,'G_SKEGGIOLD_','Skeggiold','Skeggiold',131,52 REPLACE INTO `mob_db` VALUES (1765,'G_RANDGRIS','Valkyrie','Valkyrie',141,1005000,1,10000,10000,3,2895,6101,588,506,196,131,125,276,267,156,10,12,2,8,86,0x37B5,100,576,576,480,0,0,0,0,0,0,0,7510,500,617,100,2115,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1766,'EM_ANGELING','Angeling','Angeling',99,128430,0,0,0,1,60,71,64,50,1,17,80,80,126,20,10,12,0,8,66,0x4B5,300,1288,288,384,0,909,5000,909,5000,741,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1767,'EM_DEVILING','Deviling','Deviling',99,128430,0,0,0,1,60,71,64,50,1,17,80,80,126,20,10,12,0,8,66,0x4B5,300,1288,288,384,0,909,5000,909,5000,741,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Rachel / Ice Dungeon (11.1) +# Rachel / Ice Dungeon (11.1) REPLACE INTO `mob_db` VALUES (1768,'GLOOMUNDERNIGHT','Gloom Under Night','Gloom Under Night',139,3005000,1,2160000,1800000,3,3061,5846,479,262,191,223,187,155,241,163,10,12,2,0,68,0x37B5,200,1344,2880,576,1080000,607,5500,617,5000,617,5000,7566,7000,7023,4000,7022,2000,616,5000,2513,1000,1377,100,0,0,0,0,0,0,4408,1); REPLACE INTO `mob_db` VALUES (1769,'AGAV','Agav','Agav',128,40000,1,3933,2949,1,637,818,77,82,85,66,55,113,86,61,10,12,1,7,80,0x3295,300,768,360,360,0,0,0,0,0,0,0,7567,2500,2422,2,7563,4000,2109,1,12183,50,7563,100,1061,2500,0,0,0,0,4409,1); REPLACE INTO `mob_db` VALUES (1770,'ECHIO','Echio','Echio',126,31620,1,3690,2768,1,606,765,66,11,111,63,51,37,94,45,10,12,1,7,80,0x3295,250,768,360,360,0,0,0,0,0,0,0,7567,2500,608,10,7563,4000,5172,25,12183,20,7563,100,2366,20,0,0,0,0,4410,1); @@ -921,12 +893,10 @@ REPLACE INTO `mob_db` VALUES (1792,'SOCCER_BALL','Soccer Ball','Soccer Ball',1,1 REPLACE INTO `mob_db` VALUES (1793,'G_MEGALITH','Megalith','Megalith',65,2451,1,0,0,9,116,146,66,18,57,14,35,10,90,3,10,12,2,0,80,0x3695,200,1332,1332,672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1794,'G_ROWEEN','Roween','Roween',95,7385,1,0,0,1,175,210,73,33,70,82,55,45,73,25,10,12,1,2,24,0x3295,200,412,840,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1795,'BLOODY_KNIGHT_','Bloody Knight','Bloody Knight',116,68500,1,0,0,3,942,1065,122,50,132,59,70,57,98,45,10,12,2,8,28,0x37B5,250,828,528,192,0,0,0,0,0,0,0,1417,100,2412,100,2514,200,2342,300,2513,200,1620,200,617,7000,0,0,0,0,7578,10000); - -# WoE SE Guild Dungeon +# WoE SE Guild Dungeon REPLACE INTO `mob_db` VALUES (1796,'AUNOE','Aunoe','Aunoe',110,13050,0,1935,1454,1,646,727,107,42,118,63,62,77,70,35,10,12,1,7,80,0x3295,250,768,432,360,0,0,0,0,0,0,0,7568,2500,2422,2,7563,4000,2109,1,12183,50,7563,100,2545,5,0,0,0,0,4464,1); REPLACE INTO `mob_db` VALUES (1797,'FANAT','Fanat','Fanat',120,21000,1,3042,2282,1,599,705,81,64,102,66,70,47,79,57,10,12,1,7,80,0x3885,250,768,432,360,0,0,0,0,0,0,0,2388,10,2422,2,7563,4000,2109,1,12183,50,7568,2500,0,0,0,0,0,0,4465,1); - -# Additional Event Monsters +# Additional Event Monsters REPLACE INTO `mob_db` VALUES (1798,'TREASURE_BOX_','Treasure Chest','Treasure Chest',99,0,1,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x40,0,0,0,0,0,0,0,0,0,0,0,7582,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1799,'G_SEYREN_','Lord Knight Seyren','Lord Knight Seyren',10,10,1,1,1,1,1,2,1,1,1,1,1,1,1,1,10,12,1,7,83,0x37B5,100,76,384,288,0,0,0,0,0,0,0,7583,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1800,'G_EREMES_','Assassin Cross Eremes','Assassin Cross Eremes',10,10,1,1,1,1,1,2,1,1,1,1,1,1,1,1,10,12,1,7,85,0x37B5,100,76,384,288,0,0,0,0,0,0,0,7583,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -958,8 +928,7 @@ REPLACE INTO `mob_db` VALUES (1825,'EVENT_GOBLINE_XMAS','Christmas Goblin','Chri REPLACE INTO `mob_db` VALUES (1826,'EVENT_MYST','Myst','Myst',39,879,1,0,0,1,68,89,50,11,26,19,40,35,31,25,10,12,2,0,25,0x3695,200,1576,576,384,0,0,0,0,0,0,0,7850,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1827,'EVENT_SASQUATCH','Sasquatch','Sasquatch',30,3163,0,0,0,1,250,280,8,0,75,25,60,10,34,20,10,12,2,2,60,0x3695,300,1260,192,192,0,0,0,0,0,0,0,7850,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1828,'EVENT_GULLINBURSTI','Gullinbrusti','Gullinbrusti',20,20,0,0,0,1,59,72,160,99,1,14,14,0,19,15,10,12,2,2,42,0x3695,150,1960,960,384,0,0,0,0,0,0,0,7303,6000,570,9000,571,8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Thor Volcano (11.2) +# Thor Volcano (11.2) REPLACE INTO `mob_db` VALUES (1829,'SWORD_GUARDIAN','Sword Guardian','Sword Guardian',133,70000,0,4500,3375,2,751,880,122,62,122,87,54,65,103,65,14,16,2,7,80,0x37B5,170,140,384,288,0,0,0,0,0,0,0,7069,3000,1370,30,1163,50,1168,1,2122,10,1176,50,6223,100,0,0,0,0,4427,1); REPLACE INTO `mob_db` VALUES (1830,'BOW_GUARDIAN','Bow Guardian','Bow Guardian',132,63000,0,4392,3294,12,766,886,127,62,109,80,65,52,122,55,14,16,2,7,80,0x37B5,170,76,384,288,0,0,0,0,0,0,0,7069,3000,1723,30,1701,50,2367,20,2701,4,0,0,6223,100,0,0,0,0,4428,1); REPLACE INTO `mob_db` VALUES (1831,'SALAMANDER','Salamander','Salamander',138,80390,1,5919,7139,2,1399,1799,141,68,189,105,72,85,132,72,10,12,2,0,63,0x37B5,160,140,384,288,0,0,0,0,0,0,0,7097,3000,994,30,6223,10,2680,1,1920,50,2621,1,2364,20,0,0,0,0,4429,1); @@ -971,8 +940,7 @@ REPLACE INTO `mob_db` VALUES (1836,'MAGMARING','Magmaring','Magmaring',110,13079 REPLACE INTO `mob_db` VALUES (1837,'IMP','Imp','Imp',129,36830,1,4594,3445,1,885,1091,56,75,66,83,65,88,72,27,10,12,0,6,63,0x3395,150,824,432,360,0,0,0,0,0,0,0,7122,3000,13303,3,7098,2500,1376,10,1972,25,12374,1,6223,1,0,0,0,0,4433,1); REPLACE INTO `mob_db` VALUES (1838,'KNOCKER','Knocker','Knocker',126,43900,1,3690,3768,1,633,736,126,62,93,62,58,56,99,70,10,12,0,6,22,0x191,200,1548,384,288,0,0,0,0,0,0,0,997,30,1003,150,1040,5500,2286,1,6223,10,2124,3,1732,5,0,0,0,0,4434,1); REPLACE INTO `mob_db` VALUES (1839,'BYORGUE','Byorgue','Byrogue',135,92544,1,7725,5543,2,793,934,120,13,114,86,70,65,81,70,14,16,1,7,20,0x37B5,170,800,600,360,0,0,0,0,0,0,0,1270,50,5096,3,13027,150,12087,100,603,40,2530,1,7110,4365,0,0,0,0,4426,1); - -# Additional Event Monsters +# Additional Event Monsters REPLACE INTO `mob_db` VALUES (1840,'GOLDEN_SAVAGE','Golden Savage','Golden Savage',99,500,1,1,1,1,500,700,160,99,0,1,1,50,120,1,10,12,2,2,42,0xF1,150,1960,480,384,0,0,0,0,0,0,0,610,3000,7444,100,616,5,969,500,714,100,5159,1,12238,3000,0,0,0,0,12239,3000); REPLACE INTO `mob_db` VALUES (1841,'G_SNAKE_','Snake Lord\'s Minion','Snake Lord\'s Minion',15,10,1,1,1,1,46,55,160,99,1,15,15,10,35,5,10,12,1,2,22,0x81,200,1576,576,576,0,0,0,0,0,0,0,673,1000,12715,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1842,'G_ANACONDAQ_','Snake Lord\'s Minion','Snake Lord\'s Minion',23,15,1,1,1,1,124,157,160,99,1,46,28,10,51,5,10,12,1,2,25,0x91,200,1576,576,576,0,0,0,0,0,0,0,673,1000,673,1000,12715,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -997,8 +965,7 @@ REPLACE INTO `mob_db` VALUES (1860,'E_COCO','Coco','Coco',17,817,0,108,70,1,56,6 REPLACE INTO `mob_db` VALUES (1861,'E_CHOCO','Choco','Choco',43,4278,0,1139,1139,1,315,402,8,5,65,68,55,45,65,25,10,12,0,2,23,0x3095,200,1500,500,1000,0,0,0,0,0,0,0,7011,5335,942,7000,985,53,513,5000,634,20,7749,1000,607,25,0,0,0,0,4285,1); REPLACE INTO `mob_db` VALUES (1862,'E_MARTIN','Martin','Martin',18,1109,0,121,77,1,52,63,0,5,12,18,30,15,15,5,10,12,0,2,42,0x81,300,1480,480,480,0,0,0,0,0,0,0,1017,9000,7750,500,1251,10,2225,5,5009,1,10010,10,2224,15,0,0,0,0,4046,1); REPLACE INTO `mob_db` VALUES (1863,'E_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',25,4500,0,0,0,1,292,406,23,10,20,15,15,5,15,5,10,12,1,2,42,0x83,160,1120,552,511,0,0,0,0,0,0,0,7860,5000,7861,5000,7862,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Cursed Abbey (11.3) +# Cursed Abbey (11.3) REPLACE INTO `mob_db` VALUES (1864,'ZOMBIE_SLAUGHTER','Zombie Slaughter','Zombie Slaughter',124,40440,1,3938,2702,1,707,824,100,45,117,58,82,13,97,21,10,12,1,1,69,0x3695,200,676,648,432,0,0,0,0,0,0,0,7752,3000,13404,10,934,1500,7753,3000,938,3000,6223,1,0,0,0,0,0,0,4435,1); REPLACE INTO `mob_db` VALUES (1865,'RAGGED_ZOMBIE','Ragged Zombie','Ragged Zombie',123,38574,1,3515,3087,9,810,940,85,35,81,50,64,56,127,23,10,12,1,1,69,0x3695,150,1960,576,420,0,0,0,0,0,0,0,7752,3000,2424,15,934,1500,932,4500,2703,2,13107,10,6223,1,0,0,0,0,4436,1); REPLACE INTO `mob_db` VALUES (1866,'HELL_POODLE','Hell Poodle','Hellhound',115,17168,1,2565,1923,1,642,787,86,20,114,56,59,82,77,54,10,12,0,6,27,0x3795,140,824,432,360,0,0,0,0,0,0,0,528,5000,13028,10,1268,10,932,4500,628,20,919,5500,537,400,0,0,0,0,4437,1); @@ -1015,8 +982,7 @@ REPLACE INTO `mob_db` VALUES (1876,'E_LORD_OF_DEATH','Lord of the Dead','Lord of REPLACE INTO `mob_db` VALUES (1877,'CRYSTAL_5','Crystal','Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,7863,10,644,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1878,'E_SHINING_PLANT','Shining Plant','Shining Plant',1,20,0,0,0,1,1,2,100,99,0,0,0,0,0,90,7,12,0,3,26,0x40,2000,1,1,1,0,0,0,0,0,0,0,7864,3000,906,1500,511,500,507,2000,508,1500,914,500,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1879,'ECLIPSE_P','Eclipse Pet','Eclipse',6,1800,0,0,0,1,20,26,0,40,1,36,6,0,11,80,10,12,1,2,60,0x37B5,200,1456,456,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Moscovia +# Moscovia REPLACE INTO `mob_db` VALUES (1880,'WOOD_GOBLIN','Wood Goblin','Wood Goblin',81,5499,1,1106,1245,1,193,208,144,12,73,19,56,15,56,25,10,12,1,3,62,0x81,320,2304,840,360,0,0,0,0,0,0,0,2719,5,7203,4000,7201,2000,907,2000,916,500,7032,500,574,50,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1881,'LES','Les','Les',82,6216,1,1205,1356,1,270,300,123,30,63,20,35,25,52,30,10,12,1,3,82,0x1089,230,1728,720,576,0,0,0,0,0,0,0,7100,2000,511,1000,711,1000,905,2500,2270,1,521,500,510,50,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1882,'VAVAYAGA','Baba Yaga','Baba-Yaga',87,6498,1,1188,1337,2,282,353,63,60,69,45,30,60,51,35,10,12,1,7,21,0x3885,270,1536,600,420,0,0,0,0,0,0,0,7099,1000,7762,5000,1630,10,7226,150,539,1500,519,1500,580,1500,0,0,0,0,0,0); @@ -1024,8 +990,7 @@ REPLACE INTO `mob_db` VALUES (1883,'UZHAS','Uzhas','Uzhas',85,7140,1,1294,1455,1 REPLACE INTO `mob_db` VALUES (1884,'MAVKA','Mavka','Mavka',84,5421,1,1253,1530,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,1572,5,629,300,707,300,710,50,747,1500,748,300,510,3000,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1885,'GOPINICH','Gopinich','Gopinich',97,1120500,1,714240,580320,3,1988,3849,355,121,127,102,143,102,152,76,10,12,2,2,62,0x37B5,150,1536,864,432,357120,607,5500,617,5000,617,5000,617,4000,2621,200,12080,1000,1737,100,1417,5,7444,5000,5007,1,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1886,'G_MAVKA','Mavka','Mavka',84,5421,1,0,0,7,263,323,98,58,65,31,50,35,81,30,10,12,1,3,62,0x3885,170,1536,504,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (1887,'FREEZER_R','Freezer','Freezer',94,9990,1,0,0,2,388,438,68,38,68,47,50,45,49,25,10,12,1,2,41,0x3695,250,1452,483,528,0,0,0,0,0,0,0,7053,2000,7066,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1888,'GARM_BABY_R','Garm Baby','Baby Hatii',61,15199,0,90,90,1,680,1580,24,13,45,30,36,55,85,30,10,12,1,2,41,0x3885,450,879,672,576,0,0,0,0,0,0,0,0,0,7066,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1889,'GARM_R','Marozka\'s Guard','Marozka\'s Guard',73,100000,0,900,900,3,900,2200,20,23,85,126,10,50,95,60,10,12,2,2,81,0x37B5,400,608,408,336,0,0,0,0,0,0,0,7053,2000,7066,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1038,8 +1003,7 @@ REPLACE INTO `mob_db` VALUES (1895,'EVENT_SEYREN','Seyren','Seyren Windsor',91,8 REPLACE INTO `mob_db` VALUES (1896,'EVENT_KATRINN','Katrinn','Kathryne Keyron',92,47780,0,0,0,1,497,1697,10,74,1,5,77,180,110,39,10,12,1,7,68,0x3295,150,1152,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1897,'EVENT_BAPHOMET_','Baphomet','Baphomet',81,668000,0,0,0,2,3220,4040,35,45,1,152,30,85,120,95,10,12,2,6,67,0x37B5,100,768,768,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1898,'EVENT_ZOMBIE','Zombie','Zombie',12,434,0,0,0,1,67,79,0,10,1,1,1,1,1,1,10,12,1,1,29,0x3885,400,2612,912,288,0,0,0,0,0,0,0,7884,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# WoE Second Edition; Battlegrounds +# WoE Second Edition; Battlegrounds REPLACE INTO `mob_db` VALUES (1899,'SWORD_GUARDIAN_','Sword Guardian','Sword Guardian',133,70000,0,0,0,2,451,580,122,33,122,87,54,65,103,65,14,16,2,7,80,0x20A5,170,140,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1900,'BOW_GUARDIAN_','Archer Guardian','Archer Guardian',80,80404,1,0,0,12,1840,2520,64,62,95,80,33,90,165,55,14,16,2,7,80,0x20A5,170,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1901,'E_CONDOR','Condor','Condor',10,15,0,90,90,1,13,20,10,15,1,1,1,50,100,100,10,12,0,2,26,0x1081,150,1148,648,480,0,0,0,0,0,0,0,7973,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1057,8 +1021,7 @@ REPLACE INTO `mob_db` VALUES (1912,'OBJ_FLAG_A','Lion Flag','Lion Flag',90,650,1 REPLACE INTO `mob_db` VALUES (1913,'OBJ_FLAG_B','Eagle Flag','Eagle Flag',90,650,1,0,0,0,1,2,160,99,1,1,1,1,1,1,0,0,2,0,20,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1914,'OBJ_A2','Blue Crystal','Blue Crystal',90,750,1,0,0,0,1,2,160,99,1,1,1,1,1,1,0,0,2,0,20,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1915,'OBJ_B2','Pink Crystal','Pink Crystal',90,750,1,0,0,0,1,2,160,99,1,1,1,1,1,1,0,0,2,0,20,0x160,300,1288,288,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Dimentional Gorge (12.1) +# Dimentional Gorge (12.1) REPLACE INTO `mob_db` VALUES (1916,'MOROCC','Satan Morroc','Satan Morroc',151,7000000,1,0,0,2,3560,6200,400,65,165,182,180,225,180,89,10,12,2,6,87,0x37B5,100,312,624,432,0,0,0,0,0,0,0,5808,1500,2374,7000,2375,7000,2433,7000,7799,9000,7798,9000,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1917,'MOROCC_','Wounded Morroc','Wounded Morroc',151,5000000,1,4050000,3042000,2,3020,5900,425,65,165,185,200,245,180,89,10,12,2,6,87,0x37B5,100,312,624,432,2025000,607,5500,617,5000,617,5000,5808,1000,2374,5000,2375,5000,2433,5000,7799,9000,7798,9000,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1918,'MOROCC_1','Incarnation of Morroc','Incarnation of Morroc',132,63900,1,4392,3294,1,1267,1412,199,35,126,91,63,61,76,37,10,12,2,8,27,0x37B5,110,576,480,432,0,0,0,0,0,0,0,2111,10,7799,1000,7798,3000,985,160,7054,4850,2537,3,1541,20,0,0,0,0,0,0); @@ -1069,8 +1032,7 @@ REPLACE INTO `mob_db` VALUES (1922,'G_MOROCC_1','Incarnation of Morroc','Incarna REPLACE INTO `mob_db` VALUES (1923,'G_MOROCC_2','Incarnation of Morroc','Incarnation of Morroc',132,64922,1,0,0,1,1083,1242,92,5,121,86,71,65,75,44,10,12,1,6,67,0x37B5,150,312,648,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1924,'G_MOROCC_3','Incarnation of Morroc','Incarnation of Morroc',133,94800,1,0,0,2,812,1175,111,37,102,59,55,82,98,54,10,12,1,6,69,0x37B5,150,212,432,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1925,'G_MOROCC_4','Incarnation of Morroc','Incarnation of Morroc',134,77389,1,0,0,1,823,1422,109,54,114,88,62,97,109,43,10,12,1,6,68,0x37B5,150,1536,648,300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# God Item Creation (WoE SE); Catacombs +# God Item Creation (WoE SE); Catacombs REPLACE INTO `mob_db` VALUES (1926,'JAKK_H','Jakk','Jakk',1,1000,0,0,0,1,1,2,1,1,1,1,1,1,1,1,10,12,1,0,43,0x3695,200,1180,480,648,0,0,0,0,0,0,0,12396,1000,6298,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1927,'WHISPER_H','Whisper','Whisper',1,1000,0,0,0,1,1,2,1,1,1,1,1,1,1,1,10,12,0,6,68,0x3195,150,1960,960,504,0,0,0,0,0,0,0,12397,1000,6299,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1928,'DEVIRUCHI_H','Deviruchi','Deviruchi',46,500,0,0,0,1,5,10,10,25,1,69,40,55,70,30,10,12,0,6,27,0x3795,150,980,600,384,0,0,0,0,0,0,0,1038,3000,1039,3000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1094,28 +1056,24 @@ REPLACE INTO `mob_db` VALUES (1945,'TREASURE_BOX48','Treasure Chest','Treasure C REPLACE INTO `mob_db` VALUES (1946,'TREASURE_BOX49','Treasure Chest','Treasure Chest',99,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x120,0,0,0,0,0,0,0,0,0,0,0,7838,80,658,500,12999,10000,984,4850,985,7275,1626,150,1270,150,2532,50,0,0,0,0); REPLACE INTO `mob_db` VALUES (1947,'PIAMETTE_','Piamette','Piamette',90,500500,1,0,0,2,1500,2700,56,35,1,66,5,99,120,15,10,12,0,7,20,0x37B5,100,432,768,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1948,'G_YGNIZEM','Ygnizem','Egnigem Cenia',136,44327,1,0,0,1,790,1018,124,8,144,92,86,69,99,68,10,12,1,7,43,0x3885,145,576,432,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Battlegrounds Guardians +# Battlegrounds Guardians REPLACE INTO `mob_db` VALUES (1949,'B_S_GUARDIAN','Camp Guardian','Camp Guardian',86,457599,1,0,0,2,7590,9140,96,33,110,40,5,65,125,65,14,16,2,7,80,0x2085,170,140,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1950,'B_B_GUARDIAN','Camp Guardian','Camp Guardian',80,241212,1,0,0,12,1840,2520,64,62,95,80,5,90,165,55,14,16,2,7,80,0x2085,170,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Ravies Sister's 'Valyrie's Gift' monsters. +# Ravies Sister's 'Valyrie's Gift' monsters. REPLACE INTO `mob_db` VALUES (1951,'CRYSTAL_6','Crystal','Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,665,4900,0,0,532,6500,558,5000,0,0,0,0,607,200); REPLACE INTO `mob_db` VALUES (1952,'CRYSTAL_7','Crystal','Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,667,4900,0,0,531,6500,558,5000,0,0,0,0,608,250); REPLACE INTO `mob_db` VALUES (1953,'CRYSTAL_8','Crystal','Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,664,4900,0,0,534,6500,558,5000,0,0,0,0,604,300); REPLACE INTO `mob_db` VALUES (1954,'CRYSTAL_9','Crystal','Crystal',1,15,1,0,0,0,0,0,160,99,1,1,1,1,999,1,0,0,0,0,20,0x161,190,0,0,0,0,0,0,0,0,0,0,539,3800,530,4500,561,5000,666,4900,0,0,533,6500,558,5000,0,0,0,0,603,100); -# ? +# ? REPLACE INTO `mob_db` VALUES (1955,'TREASURE_BOX_I','Treasure Chest','Treasure Chest',1,1,1,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,20,0x83,0,0,0,0,0,0,0,0,0,0,0,12281,9000,12281,2000,12281,1000,721,2000,723,2000,727,2000,732,100,0,0,0,0,719,2000); - -# Endless Tower +# Endless Tower REPLACE INTO `mob_db` VALUES (1956,'NAGHT_SIEGER','Naght Sieger','Naght Sieger',99,5000000,1,3600000,1800000,2,5400,8600,410,40,190,60,80,220,264,30,16,16,2,6,88,0x37B5,100,76,432,504,0,0,0,0,0,0,0,13412,9000,13413,9000,2542,9000,5017,9000,616,9000,2514,9000,7294,9000,0,0,0,0,4457,1); REPLACE INTO `mob_db` VALUES (1957,'ENTWEIHEN','Entweihen Crothen','Entweihen Crothen',90,2400500,1,1430000,1215000,12,4400,8000,171,66,90,70,40,160,190,30,14,16,1,6,87,0x1A4,0,140,540,576,0,0,0,0,0,0,0,1636,9000,1631,9000,2513,9000,1624,9000,616,9000,1618,9000,7291,9000,0,0,0,0,4451,1); REPLACE INTO `mob_db` VALUES (1958,'G_ENTWEIHEN_R','Thorny Skeleton','Thorny Skeleton',89,5400000,1,0,0,12,4040,4720,71,66,1,35,33,180,125,30,14,16,0,6,87,0x1A4,0,432,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1959,'G_ENTWEIHEN_H','Thorn of Recovery','Thorn of Recovery',89,350000,1,0,0,12,2040,2720,71,66,1,35,33,180,125,30,14,16,0,6,88,0x1A4,0,2864,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1960,'G_ENTWEIHEN_M','Thorn of Magic','Thorn of Magic',89,5400000,1,0,0,12,2040,2720,71,66,1,35,33,180,125,30,14,16,0,6,87,0x1A4,0,1024,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1961,'G_ENTWEIHEN_S','Thorn of Purification','Thorn of Purification',89,5400000,1,0,0,12,2040,2720,71,66,1,35,33,180,125,30,14,16,0,6,87,0x1A4,0,2864,288,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (1962,'ANTONIO_','Christmas Thief','Christmas Thief',10,15,1,0,0,1,13,20,160,99,1,1,1,50,100,100,10,12,1,7,20,0x83,100,720,720,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1963,'P_CHUNG_E','New Year Doll','New Year Doll',49,23900,0,2156,894,1,460,1050,8,15,38,65,43,30,90,15,10,12,1,7,40,0x3695,170,1728,816,1188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1964,'NIGHTMARE_T','Nightmare','Nightmare',30,2000,0,461,348,1,100,200,0,40,1,100,1,1,100,1,10,12,2,2,68,0x120,150,1816,816,432,0,0,0,0,0,0,0,505,2000,510,3000,7913,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1128,8 +1086,7 @@ REPLACE INTO `mob_db` VALUES (1970,'E_OBEAUNE','Obeune','Obeune',31,3952,0,1159, REPLACE INTO `mob_db` VALUES (1971,'E_VADON','Vadon','Vadon',19,1017,0,243,153,1,74,85,32,0,1,19,16,10,36,15,10,12,0,5,21,0x120,300,1632,432,540,0,0,0,0,0,0,0,991,40,960,9000,910,3000,2313,10,943,100,757,80,717,50,0,0,0,0,4049,1); REPLACE INTO `mob_db` VALUES (1972,'E_MARINA','Marina','Marina',21,2087,0,392,252,1,84,106,0,5,1,21,21,0,36,10,10,12,0,3,41,0x120,400,2280,1080,864,0,0,0,0,0,0,0,1052,5000,938,1500,991,90,995,4,717,200,631,40,0,0,0,0,0,0,4055,1); REPLACE INTO `mob_db` VALUES (1973,'E_PORING','Poring','Poring',1,50,0,2,1,1,7,10,0,5,1,1,1,0,6,30,10,12,1,3,21,0x120,400,1872,672,480,0,0,0,0,0,0,0,909,7000,938,400,512,1000,713,1500,12303,3000,0,0,0,0,0,0,0,0,0,0); - -# WoE SE Guild Dungeon +# WoE SE Guild Dungeon REPLACE INTO `mob_db` VALUES (1974,'BANSHEE_MASTER','Banshee Master','Banshee Master',118,20320,0,3402,2556,2,599,897,87,94,121,58,48,122,60,44,10,12,1,6,47,0x3795,150,676,504,504,0,0,0,0,0,0,0,7751,3000,2365,10,2748,2,2528,10,934,1500,7054,5335,0,0,0,0,0,0,4450,1); REPLACE INTO `mob_db` VALUES (1975,'BEHOLDER_MASTER','Beholder Master','Beholder Master',106,10135,0,2430,1845,6,471,559,73,62,103,67,42,69,69,32,10,12,1,0,44,0x3885,190,336,840,360,0,0,0,0,0,0,0,576,3000,605,100,996,100,985,10,2386,10,2749,2,603,2,0,0,0,0,4466,1); REPLACE INTO `mob_db` VALUES (1976,'COBALT_MINERAL','Cobalt Mineral','Cobalt Mineral',113,15800,0,2700,2070,1,645,737,113,44,110,55,65,57,95,41,10,12,1,0,40,0x3885,200,648,480,360,0,0,0,0,0,0,0,7321,3000,728,500,13414,5,984,80,1011,800,715,100,969,2,0,0,0,0,4475,1); @@ -1137,14 +1094,12 @@ REPLACE INTO `mob_db` VALUES (1977,'HEAVY_METALING','Heavy Metaling','Heavy Meta REPLACE INTO `mob_db` VALUES (1978,'HELL_APOCALIPS','Hell Apocalips','Hell Vesper',121,22100,0,3348,3020,2,780,902,155,43,135,62,80,48,89,37,10,12,2,0,60,0x3885,250,1840,1440,384,0,0,0,0,0,0,0,7095,5335,7094,2400,7093,2200,985,5,2391,10,1484,4,999,2500,0,0,0,0,4477,1); REPLACE INTO `mob_db` VALUES (1979,'ZAKUDAM','Zukadam','Zakudam',115,17200,0,2880,2160,3,650,780,106,92,122,66,70,61,66,55,10,12,2,7,60,0x3885,180,580,288,360,0,0,0,0,0,0,0,7317,5000,999,500,984,200,985,200,13156,5,13167,5,2390,10,0,0,0,0,4474,1); REPLACE INTO `mob_db` VALUES (1980,'KUBLIN','Kubkin','Kublin',85,633600,0,90000,90000,1,1180,1400,22,10,85,81,25,40,55,20,10,12,1,7,22,0x37B5,100,964,648,300,45000,6010,10000,0,0,0,0,998,270,911,9000,756,43,2297,3,1061,2500,0,0,507,1800,0,0,0,0,0,0); - -# Orc Dungeon Instance +# Orc Dungeon Instance REPLACE INTO `mob_db` VALUES (1981,'I_HIGH_ORC','Safeguard Chief','Safeguard Chief',81,44193,1,0,0,1,489,639,101,45,75,16,40,31,69,20,10,12,2,7,43,0x3695,150,1500,500,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1982,'I_ORC_ARCHER','Orc Sniper','Orc Sniper',78,54835,1,0,0,9,460,503,67,31,55,32,24,30,125,15,10,12,1,7,22,0x3095,300,1960,620,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1983,'I_ORC_SKELETON','Depraved Orc Spirit','Depraved Orc Spirit',87,80087,0,0,0,1,496,759,23,30,1,31,41,93,67,30,10,12,1,1,29,0x3885,130,2420,720,648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1984,'I_ORC_LADY','Shaman Cargalache','Shaman Cargalache',80,50058,0,0,0,1,423,812,56,10,60,35,52,18,79,20,10,12,1,7,42,0x3695,145,1050,900,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Another World (13.1) +# Another World (13.1) REPLACE INTO `mob_db` VALUES (1985,'DANDELION','Dandelion Member','Dandelion Member',37,45000,0,0,0,1,305,360,0,10,28,19,32,0,63,20,10,12,1,7,47,0x3695,250,1772,72,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1986,'TATACHO','Tatacho','Tatacho',128,33336,1,3762,3092,2,727,799,151,14,119,33,70,56,78,33,10,12,1,2,22,0x108B,200,1000,768,360,0,0,0,0,0,0,0,1544,20,1925,10,6020,4000,6021,3000,579,3100,6224,10,1061,2500,0,0,0,0,4442,1); REPLACE INTO `mob_db` VALUES (1987,'CENTIPEDE','Centipede','Centipede',125,24992,1,3201,2711,2,601,713,143,25,133,71,69,39,86,49,10,12,1,4,45,0x3795,150,1000,792,336,0,0,0,0,0,0,0,2746,2,2747,2,1741,10,1042,5335,912,5000,6224,10,943,2500,0,0,0,0,4447,1); @@ -1156,27 +1111,25 @@ REPLACE INTO `mob_db` VALUES (1992,'CORNUS','Cornus','Cornus',120,20722,1,6240,4 REPLACE INTO `mob_db` VALUES (1993,'NAGA','Naga','Naga',117,21099,1,2944,2212,3,489,591,72,5,112,65,71,32,71,33,10,12,2,2,42,0x3695,150,400,864,432,0,0,0,0,0,0,0,2389,10,2134,10,1485,10,6224,10,936,3500,954,2000,1408,20,0,0,0,0,4469,1); REPLACE INTO `mob_db` VALUES (1994,'LUCIOLA_VESPA','Luciola Vespa','Luciola Vespa',109,12466,1,1622,1806,1,299,410,59,55,88,89,55,32,119,59,10,12,1,4,24,0x7795,110,1000,864,432,0,0,0,0,0,0,0,2744,2,6224,1,939,9000,518,300,992,160,526,200,943,3000,0,0,0,0,4445,1); REPLACE INTO `mob_db` VALUES (1995,'PINGUICULA','Pinguicula','Pinguicula',105,13058,1,2221,1662,1,189,511,46,77,67,60,64,107,64,34,10,12,1,3,62,0x308D,200,700,600,360,0,0,0,0,0,0,0,2745,1,1980,10,2270,10,7100,5000,7198,2000,7188,3000,7939,1000,0,0,0,0,4476,1); -#REPLACE INTO `mob_db` VALUES (1996,'BACSOJIN_T','Bacsojin','White Lady',97,720500,1,668160,542880,3,1088,3124,210,178,118,244,98,126,205,102,10,12,2,7,64,0x37B5,130,576,960,480,0,0,0,0,0,0,0,5411,3,2638,80,2639,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (1996,'BACSOJIN_T','Bacsojin','White Lady',97,720500,1,668160,542880,3,1088,3124,210,178,118,244,98,126,205,102,10,12,2,7,64,0x37B5,130,576,960,480,0,0,0,0,0,0,0,5411,3,2638,80,2639,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1997,'G_TATACHO','Tatacho','Tatacho',128,33336,1,0,0,2,727,799,151,14,119,33,70,56,78,33,10,12,1,2,22,0x108B,200,1000,768,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1998,'G_HILLSRION','Hillslion','Hillslion',123,21422,1,0,0,1,450,552,83,15,110,69,72,41,102,12,10,12,0,2,22,0x308D,100,400,780,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (1999,'CENTIPEDE_LARVA','Centipede Larva','Centipede Larva',118,20667,1,2930,2003,2,521,609,98,17,103,62,66,27,77,44,10,12,0,4,25,0x3795,150,1000,792,336,0,0,0,0,0,0,0,2406,9,732,50,0,0,1042,5335,912,5000,955,9000,943,2500,0,0,0,0,4452,1); - -# Additional Monsters -#REPLACE INTO `mob_db` VALUES (2000,'M_GAMEMASTER','Male Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2001,'F_GAMEMASTER','Female Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2002,'T_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',50,8000,0,3584,1589,1,585,813,47,21,45,61,5,15,77,90,10,12,1,2,42,0x120,160,1120,552,511,0,0,0,0,0,0,0,12188,1000,6061,500,6068,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2003,'T_BACSOJIN','White Lady','White Lady',97,720500,1,0,0,2,1088,3124,210,178,118,244,98,126,205,102,10,12,2,7,41,0x3695,160,576,960,480,0,0,0,0,0,0,0,7406,1000,7407,1000,6062,1000,6063,1000,6064,1000,6065,1000,6066,1000,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2004,'T_WICKED_NYMPH','Evil Nymph','Evil Nymph',63,16029,0,0,0,2,399,1090,20,75,1,64,12,69,100,80,10,12,1,6,67,0x3695,200,637,1008,360,0,0,0,0,0,0,0,7406,800,7407,800,6063,800,6064,800,6065,800,6066,800,6067,800,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2005,'T_PLASMA_B','Plasma','Plasma',44,8200,0,0,0,3,300,700,0,30,1,30,5,73,90,30,10,12,0,0,81,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6062,500,6063,500,6064,500,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2006,'T_PLASMA_P','Plasma','Plasma',49,5900,0,0,0,3,300,700,0,30,1,30,5,54,90,30,10,12,0,0,87,0x120,150,608,1440,576,0,0,0,0,0,0,0,6062,500,6063,500,6064,500,6065,500,6066,500,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2007,'T_PLASMA_R','Plasma','Plasma',43,5700,0,0,0,3,300,700,0,30,1,30,5,56,90,30,10,12,0,0,83,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6064,500,6065,500,6066,500,6067,500,0,0,0,0,0,0,0,0); +# Additional Monsters +# REPLACE INTO `mob_db` VALUES (2000,'M_GAMEMASTER','Male Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2001,'F_GAMEMASTER','Female Game Master','Game Master',50,7000,250,0,0,1,25,25,10,10,44,121,1,60,75,110,10,12,1,7,20,0x120,200,300,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2002,'T_SPRING_RABBIT','Spring Rabbit','Spring Rabbit',50,8000,0,3584,1589,1,585,813,47,21,45,61,5,15,77,90,10,12,1,2,42,0x120,160,1120,552,511,0,0,0,0,0,0,0,12188,1000,6061,500,6068,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2003,'T_BACSOJIN','White Lady','White Lady',97,720500,1,0,0,2,1088,3124,210,178,118,244,98,126,205,102,10,12,2,7,41,0x3695,160,576,960,480,0,0,0,0,0,0,0,7406,1000,7407,1000,6062,1000,6063,1000,6064,1000,6065,1000,6066,1000,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2004,'T_WICKED_NYMPH','Evil Nymph','Evil Nymph',63,16029,0,0,0,2,399,1090,20,75,1,64,12,69,100,80,10,12,1,6,67,0x3695,200,637,1008,360,0,0,0,0,0,0,0,7406,800,7407,800,6063,800,6064,800,6065,800,6066,800,6067,800,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2005,'T_PLASMA_B','Plasma','Plasma',44,8200,0,0,0,3,300,700,0,30,1,30,5,73,90,30,10,12,0,0,81,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6062,500,6063,500,6064,500,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2006,'T_PLASMA_P','Plasma','Plasma',49,5900,0,0,0,3,300,700,0,30,1,30,5,54,90,30,10,12,0,0,87,0x120,150,608,1440,576,0,0,0,0,0,0,0,6062,500,6063,500,6064,500,6065,500,6066,500,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2007,'T_PLASMA_R','Plasma','Plasma',43,5700,0,0,0,3,300,700,0,30,1,30,5,56,90,30,10,12,0,0,83,0x120,150,608,1440,576,0,0,0,0,0,0,0,7406,500,7407,500,6064,500,6065,500,6066,500,6067,500,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2008,'WOOMAWANG','Woomawang','Woomawang',82,4000000,0,90000,90000,3,8000,10000,40,40,60,110,200,250,166,66,10,12,2,6,48,0x3695,250,828,528,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2009,'WOOMAWANG_','Woomawang','Woomawang',82,2000000,0,90000,90000,1,16000,20000,40,40,60,110,200,250,166,66,10,12,1,6,48,0x3695,100,414,1080,336,0,0,0,0,0,0,0,7930,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2010,'G_MAJORUROS','Ox','Ox',66,500000,0,9,9,1,1200,3200,25,15,65,50,20,20,85,48,10,12,2,6,28,0x3885,250,1100,960,780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2011,'E_GHOUL','Ghoul','Ghoul',40,99999,0,979,560,1,420,500,100,20,1,20,29,0,45,20,10,12,1,1,49,0x120,250,2456,912,504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2012,'E_ZOMBIE','Zombie','Zombie',15,99999,0,45,30,1,67,79,100,10,1,8,7,0,15,0,10,12,1,1,29,0x120,400,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Enter The Unknown (13.2) +# REPLACE INTO `mob_db` VALUES (2011,'E_GHOUL','Ghoul','Ghoul',40,99999,0,979,560,1,420,500,100,20,1,20,29,0,45,20,10,12,1,1,49,0x120,250,2456,912,504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2012,'E_ZOMBIE','Zombie','Zombie',15,99999,0,45,30,1,67,79,100,10,1,8,7,0,15,0,10,12,1,1,29,0x120,400,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# Enter The Unknown (13.2) REPLACE INTO `mob_db` VALUES (2013,'DRACO','Draco','Draco',114,20099,1,1995,1205,1,556,666,56,3,21,58,47,34,71,66,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,2399,10,0,0,0,0,4444,1); REPLACE INTO `mob_db` VALUES (2014,'DRACO_EGG','Draco Egg','Draco Egg',101,100000,1,2000,1500,0,1,2,384,30,1,1,135,92,1,98,10,12,1,9,82,0x0,1000,24,0,0,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4471,1); REPLACE INTO `mob_db` VALUES (2015,'PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',113,17002,1,2101,2419,1,251,640,59,35,89,55,55,95,66,12,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,7939,1500,2148,10,0,0,0,0,4468,1); @@ -1189,78 +1142,71 @@ REPLACE INTO `mob_db` VALUES (2021,'PHYLLA','Phylla','Phylla',139,345560,1,6107, REPLACE INTO `mob_db` VALUES (2022,'S_NYDHOG','Nidhoggr\'s Shadow','Nidhoggur\'s Shadow',117,3452000,0,4320000,3510000,2,4040,7880,60,75,1,34,62,236,188,34,10,12,2,9,87,0x37B5,150,1596,1620,864,2160000,0,0,0,0,0,0,6091,5000,7444,5000,6224,1000,1484,500,1170,500,1417,500,2554,2000,0,0,0,0,4456,1); REPLACE INTO `mob_db` VALUES (2023,'DARK_SHADOW','Dark Shadow','Dark Shadow',147,434300,1,7630,5721,1,902,1059,140,44,155,126,89,108,142,76,10,12,0,0,47,0x3195,220,768,1776,648,0,0,0,0,0,0,0,7205,5000,2609,1000,13038,5,6089,1000,2783,5,1385,10,6224,10,0,0,0,0,4449,1); REPLACE INTO `mob_db` VALUES (2024,'BRADIUM_GOLEM','Bradium Golem','Bradium Golem',133,45739,1,6553,3595,1,871,974,359,12,189,25,125,45,69,33,10,12,2,0,42,0x3295,300,1008,1200,540,0,0,0,0,0,0,0,7067,3000,953,5000,6090,500,2138,10,12738,10,6224,500,0,0,0,0,0,0,4472,1); -#REPLACE INTO `mob_db` VALUES (2025,'MYSTCASE_EVENT','Mystcase','Mystcase',10,10,0,77,77,1,10,20,1,99,1,1,1,1,48,1,10,12,1,0,20,0x120,400,1248,1248,432,0,0,0,0,0,0,0,558,5000,558,5000,559,1000,560,1000,561,1000,573,1000,573,10,0,0,0,0,573,10); +# REPLACE INTO `mob_db` VALUES (2025,'MYSTCASE_EVENT','Mystcase','Mystcase',10,10,0,77,77,1,10,20,1,99,1,1,1,1,48,1,10,12,1,0,20,0x120,400,1248,1248,432,0,0,0,0,0,0,0,558,5000,558,5000,559,1000,560,1000,561,1000,573,1000,573,10,0,0,0,0,573,10); REPLACE INTO `mob_db` VALUES (2026,'DANDELION_','Runaway Dandelion Member','Runaway Dandelion Member',90,552500,0,45000,22500,1,3050,4300,40,35,1,66,66,45,88,66,10,12,1,7,27,0x3695,230,1772,72,384,0,0,0,0,0,0,0,7031,5000,579,500,7016,2000,581,3000,12125,500,511,5000,7032,3000,0,0,0,0,902,2000); REPLACE INTO `mob_db` VALUES (2027,'G_DARK_SHADOW','Dark Shadow','Dark Shadow',147,434300,1,0,0,1,902,1059,140,44,155,126,89,108,142,76,10,12,0,0,47,0x3795,220,768,1776,648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Monsters -#REPLACE INTO `mob_db` VALUES (2028,'E_MINOROUS','Minorous','Minorous',1,741,0,0,0,1,30,48,4,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2029,'E_MINOROUS_','Minorous','Minorous',10,15,0,9,0,1,100,150,160,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,6119,2000,6119,4000,6119,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1); +# Additional Monsters +# REPLACE INTO `mob_db` VALUES (2028,'E_MINOROUS','Minorous','Minorous',1,741,0,0,0,1,30,48,4,5,6,4,6,6,5,3,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,7606,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2029,'E_MINOROUS_','Minorous','Minorous',10,15,0,9,0,1,100,150,160,99,1,1,1,1,100,100,10,12,2,2,43,0x120,200,1360,960,432,0,0,0,0,0,0,0,941,10,6119,2000,6119,4000,6119,1000,516,1000,2289,1,577,1000,0,0,0,0,644,1); REPLACE INTO `mob_db` VALUES (2030,'HIDEN_PRIEST','Hiden Priest','Hiden Priest',90,240500,0,0,0,2,1300,1983,0,30,1,32,40,100,82,40,10,12,2,6,89,0x37B5,150,432,432,360,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2031,'DANDELION_H','Dandelion','Dandelion',80,120000,0,0,0,1,305,610,0,10,1,19,32,0,63,20,10,12,1,7,47,0x37B5,250,1772,72,384,0,0,0,0,0,0,0,12379,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2032,'GUARDIAN_FOREST','Forest Guardian','Forest Guardian',50,99999,0,0,0,1,3000,6000,160,99,100,100,100,100,100,100,10,12,0,6,27,0x120,200,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2033,'GOLDEN_TULIP','Golden Tulip','Golden Tulip',1,100,0,0,0,1,1,2,160,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2034,'M_DESERT_WOLF_B','Baby Desert Wolf','Baby Desert Wolf',9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2032,'GUARDIAN_FOREST','Forest Guardian','Forest Guardian',50,99999,0,0,0,1,3000,6000,160,99,100,100,100,100,100,100,10,12,0,6,27,0x120,200,868,480,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2033,'GOLDEN_TULIP','Golden Tulip','Golden Tulip',1,100,0,0,0,1,1,2,160,99,0,0,0,0,0,0,7,12,0,3,22,0x120,2000,1,1,1,0,0,0,0,0,0,0,7951,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2034,'M_DESERT_WOLF_B','Baby Desert Wolf','Baby Desert Wolf',9,164,15,0,0,1,500,600,0,0,1,9,9,5,40,40,10,12,0,2,23,0x120,100,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2035,'NIHILITY_ZEM','Nihility Zem','Nihility Zem',90,200500,0,0,0,0,1,2,0,20,1,1,1,0,1,20,10,12,0,4,22,0x100,1000,1001,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2036,'VALKYRIE_N','Valkyrie Randgris','Valkyrie Randgris',98,11780,0,0,0,1,780,930,16,20,1,24,39,0,72,25,10,12,1,1,69,0x308D,170,576,576,480,0,0,0,0,0,0,0,6154,9000,6154,5000,6154,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2037,'VALKYRIE_A','Valkyrie Randgris','Valkyrie Randgris',90,5500,15,0,0,1,10,160,16,20,1,20,40,0,20,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2038,'VALKYRIE_B','Valkyrie Randgris','Valkyrie Randgris',90,10500,15,0,0,1,300,450,16,40,1,20,80,0,80,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2037,'VALKYRIE_A','Valkyrie Randgris','Valkyrie Randgris',90,5500,15,0,0,1,10,160,16,20,1,20,40,0,20,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2038,'VALKYRIE_B','Valkyrie Randgris','Valkyrie Randgris',90,10500,15,0,0,1,300,450,16,40,1,20,80,0,80,20,10,12,1,8,66,0x120,100,576,576,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2039,'EXECUTIONER_R','Executioner','Executioner',65,28980,0,0,0,2,570,950,56,35,64,85,40,25,88,60,10,12,2,0,47,0x37B5,200,768,500,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2040,'TIRFING_R','Tirfing','Ogretooth',71,29900,0,0,0,1,950,1146,48,35,58,87,55,35,132,65,10,12,1,0,67,0x37B5,100,816,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2041,'MYSTELTAINN_R','Mysteltainn','Mysteltainn',76,33350,0,0,0,2,1160,1440,48,30,77,139,80,35,159,65,10,12,2,0,87,0x37B5,250,1152,500,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Mechanic Fixed Autonomous Weapon Platforms +# Mechanic Fixed Autonomous Weapon Platforms REPLACE INTO `mob_db` VALUES (2042,'SILVERSNIPER','Silver Sniper','Silver Sniper',100,4500,0,0,0,9,300,300,80,10,10,60,10,10,100,10,10,12,1,0,20,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2043,'MAGICDECOY_FIRE','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,23,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2044,'MAGICDECOY_WATER','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,21,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2045,'MAGICDECOY_EARTH','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,22,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2046,'MAGICDECOY_WIND','Magic Decoy','Magic Decoy',100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,24,0x84,2000,504,1020,360,0,0,0,0,0,0,0,999,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (2047,'W_NAGA','Naga','Naga',99,46708,0,0,0,3,492,605,61,15,113,42,30,18,122,13,10,12,2,2,42,0x3695,150,400,864,432,0,0,0,0,0,0,0,0,0,0,0,0,0,926,5000,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2048,'W_PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',99,8780,0,0,0,1,536,656,24,5,1,23,22,1,89,2,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6086,1000,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2049,'W_BRADIUM_GOLEM','Bradium Golem','Bradium Golem',99,45200,0,0,0,1,720,886,125,18,0,10,82,2,60,12,10,12,2,0,42,0x3895,300,1008,1200,540,0,0,0,0,0,0,0,0,0,0,0,6090,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2050,'W_AQUA_ELEMENTAL','Aqua Elemental','Aqua Elemental',99,33220,0,0,0,1,421,516,13,12,1,23,19,8,77,2,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,0,0,0,0,12353,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2051,'E_BAPHOMET','Baphomet','Baphomet',1,1,0,0,0,1,1,2,2,0,1,1,1,1,1,1,10,12,2,6,20,0x37B5,100,768,768,576,0,0,0,0,0,0,0,12396,5000,12397,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2051,'E_BAPHOMET','Baphomet','Baphomet',1,1,0,0,0,1,1,2,2,0,1,1,1,1,1,1,10,12,2,6,20,0x37B5,100,768,768,576,0,0,0,0,0,0,0,12396,5000,12397,5000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2052,'E_DARK_LORD','Dark Lord','Dark Lord',96,1190900,1,2010,2010,2,3027,5112,330,168,118,136,154,142,161,66,10,12,2,6,89,0x37B5,100,868,768,480,1005,7005,6000,5093,2000,5093,2000,1615,800,2004,100,1237,300,2334,300,12539,100,985,5141,5162,10,0,0,0,0,4169,1); -#REPLACE INTO `mob_db` VALUES (2053,'NC_DIMIK','Dimik','Dimik',77,10000,0,0,0,5,1040,1880,72,28,15,35,40,15,120,42,10,12,1,0,40,0x3885,200,576,720,432,0,0,0,0,0,0,0,7319,2000,7352,50,998,300,7094,300,13153,5,984,10,12128,50,0,0,0,0,4370,1); -#REPLACE INTO `mob_db` VALUES (2054,'E_BATHORY','Bathory','Bathory',86,5242,1,0,0,1,229,325,61,41,66,38,40,55,56,50,10,12,1,7,27,0x3695,100,1504,840,900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2055,'E_INCUBUS','Incubus','Incubus',75,17281,0,0,0,2,0,0,58,46,1,97,95,103,89,87,10,12,1,6,67,0x3795,165,850,600,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2056,'E_ZHERLTHSH','Zherlthsh','Zealotus',63,18300,0,0,0,1,0,0,10,15,70,85,40,30,125,60,10,12,1,7,60,0x308D,200,800,2112,768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2053,'NC_DIMIK','Dimik','Dimik',77,10000,0,0,0,5,1040,1880,72,28,15,35,40,15,120,42,10,12,1,0,40,0x3885,200,576,720,432,0,0,0,0,0,0,0,7319,2000,7352,50,998,300,7094,300,13153,5,984,10,12128,50,0,0,0,0,4370,1); +# REPLACE INTO `mob_db` VALUES (2054,'E_BATHORY','Bathory','Bathory',86,5242,1,0,0,1,229,325,61,41,66,38,40,55,56,50,10,12,1,7,27,0x3695,100,1504,840,900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2055,'E_INCUBUS','Incubus','Incubus',75,17281,0,0,0,2,0,0,58,46,1,97,95,103,89,87,10,12,1,6,67,0x3795,165,850,600,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2056,'E_ZHERLTHSH','Zherlthsh','Zealotus',63,18300,0,0,0,1,0,0,10,15,70,85,40,30,125,60,10,12,1,7,60,0x308D,200,800,2112,768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2057,'E_CRAMP','Suspicious Mouse','Strange Mouse',1,4720,0,0,0,1,1,2,100,100,1,1,1,1,1,1,10,12,0,2,45,0x3095,100,1000,500,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2058,'M_MIMIC','Mimic','Mimic',51,6120,182,0,0,1,800,950,10,40,44,121,1,60,75,110,10,12,1,0,60,0x120,100,972,500,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2059,'M_DISGUISE','Disguise','Disguise',55,7543,180,0,0,2,526,693,18,29,0,72,45,35,48,65,10,12,1,6,82,0x120,147,516,768,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2060,'M_ALICE','Alice','Alice',62,10000,221,0,0,1,700,850,5,5,64,64,42,85,100,130,10,12,1,7,60,0x120,200,502,1999,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2061,'E_STAPO','Stapo','Stapo',23,666,0,299,199,1,135,370,90,5,12,11,15,12,23,1,10,12,0,0,42,0x83,300,936,792,432,0,0,0,0,0,0,0,909,1000,7312,1000,512,1000,7126,100,993,10,1821,3,7956,5000,0,0,0,0,4424,1); -#REPLACE INTO `mob_db` VALUES (2062,'E_POPORING','Poporing','poporing',14,344,0,73,40,1,59,72,0,10,1,14,14,0,19,15,10,12,1,3,25,0x83,300,1672,672,480,0,0,0,0,0,0,0,938,5500,910,1500,511,500,514,200,7957,2000,1207,5,512,250,0,0,0,0,4033,1); -#REPLACE INTO `mob_db` VALUES (2063,'E_DROPS','Drops','Drops',3,55,0,4,3,1,10,13,0,0,1,3,3,0,12,15,10,12,1,3,23,0x83,400,1372,672,480,0,0,0,0,0,0,0,909,7500,1602,80,938,500,512,1100,713,1700,7955,2000,620,20,0,0,0,0,4004,1); -#REPLACE INTO `mob_db` VALUES (2064,'E_MAGMARING','Magmaring','Magmaring',40,5300,0,1899,1719,1,550,700,25,24,40,60,30,10,60,17,10,12,0,0,43,0x83,300,1472,384,288,0,0,0,0,0,0,0,7097,3000,757,34,7955,2000,7956,2000,7957,2000,7958,2000,0,0,0,0,0,0,4432,1); -#REPLACE INTO `mob_db` VALUES (2065,'E_METALING','Metaling','Metaling',26,889,0,443,224,1,135,270,5,3,30,15,10,18,35,2,10,12,0,0,20,0x83,300,384,672,480,0,0,0,0,0,0,0,7325,4000,7958,4000,998,500,7126,1000,7317,200,13103,5,7312,5000,0,0,0,0,4341,1); +# REPLACE INTO `mob_db` VALUES (2058,'M_MIMIC','Mimic','Mimic',51,6120,182,0,0,1,800,950,10,40,44,121,1,60,75,110,10,12,1,0,60,0x120,100,972,500,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2059,'M_DISGUISE','Disguise','Disguise',55,7543,180,0,0,2,526,693,18,29,0,72,45,35,48,65,10,12,1,6,82,0x120,147,516,768,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2060,'M_ALICE','Alice','Alice',62,10000,221,0,0,1,700,850,5,5,64,64,42,85,100,130,10,12,1,7,60,0x120,200,502,1999,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2061,'E_STAPO','Stapo','Stapo',23,666,0,299,199,1,135,370,90,5,12,11,15,12,23,1,10,12,0,0,42,0x83,300,936,792,432,0,0,0,0,0,0,0,909,1000,7312,1000,512,1000,7126,100,993,10,1821,3,7956,5000,0,0,0,0,4424,1); +# REPLACE INTO `mob_db` VALUES (2062,'E_POPORING','Poporing','poporing',14,344,0,73,40,1,59,72,0,10,1,14,14,0,19,15,10,12,1,3,25,0x83,300,1672,672,480,0,0,0,0,0,0,0,938,5500,910,1500,511,500,514,200,7957,2000,1207,5,512,250,0,0,0,0,4033,1); +# REPLACE INTO `mob_db` VALUES (2063,'E_DROPS','Drops','Drops',3,55,0,4,3,1,10,13,0,0,1,3,3,0,12,15,10,12,1,3,23,0x83,400,1372,672,480,0,0,0,0,0,0,0,909,7500,1602,80,938,500,512,1100,713,1700,7955,2000,620,20,0,0,0,0,4004,1); +# REPLACE INTO `mob_db` VALUES (2064,'E_MAGMARING','Magmaring','Magmaring',40,5300,0,1899,1719,1,550,700,25,24,40,60,30,10,60,17,10,12,0,0,43,0x83,300,1472,384,288,0,0,0,0,0,0,0,7097,3000,757,34,7955,2000,7956,2000,7957,2000,7958,2000,0,0,0,0,0,0,4432,1); +# REPLACE INTO `mob_db` VALUES (2065,'E_METALING','Metaling','Metaling',26,889,0,443,224,1,135,270,5,3,30,15,10,18,35,2,10,12,0,0,20,0x83,300,384,672,480,0,0,0,0,0,0,0,7325,4000,7958,4000,998,500,7126,1000,7317,200,13103,5,7312,5000,0,0,0,0,4341,1); REPLACE INTO `mob_db` VALUES (2066,'E_ANOPHELES','Anopheles','Anopheles',5,50,1,1,1,1,140,158,8,10,1,30,1,1,30,1,10,12,0,4,64,0x37B5,170,1084,2304,576,0,5586,10000,5586,0,5586,0,601,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4344,1); REPLACE INTO `mob_db` VALUES (2067,'E_ANOPHELES_','Anopheles','Anopheles',3,500,1,1,1,1,40,58,8,100,1,100,1,1,100,1,10,12,0,4,64,0x120,170,1084,2304,576,0,0,0,0,0,0,0,601,1000,702,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4344,1); - -# Brasilis +# Brasilis REPLACE INTO `mob_db` VALUES (2068,'BOITATA','Boitata','Boitata',93,1283990,1,74288,77950,2,1060,2022,32,66,140,99,30,109,100,90,10,12,2,2,63,0x37B5,200,1152,1152,576,37144,617,5500,617,5000,616,2000,7444,5000,1377,100,1422,100,607,500,985,1000,984,1000,1471,100,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2069,'IARA','Iara','Iara',79,5890,1,1070,890,1,171,270,0,76,69,14,41,60,69,20,10,12,1,5,61,0x91,200,384,672,288,0,0,0,0,0,0,0,995,5,950,9000,951,500,748,50,747,100,710,10,2334,1,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2070,'PIRANHA','Piranha','Piranha',75,4522,1,899,1023,1,182,223,7,12,69,45,30,30,66,35,10,12,2,5,61,0x3885,200,768,480,864,0,0,0,0,0,0,0,956,600,995,5,963,9000,1053,500,1054,500,13027,1,1249,5,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2071,'HEADLESS_MULE','Headless Mule','Headless Mule',80,6620,1,1011,1120,1,210,267,33,44,68,51,50,35,67,20,10,12,2,6,63,0x3985,165,1216,816,432,0,0,0,0,0,0,0,7120,4000,2317,5,7097,1000,7122,1000,1269,1,2317,1,1255,2,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2072,'JAGUAR','Jaguar','Jaguar',71,3914,1,720,512,1,192,234,44,15,69,30,45,5,59,5,10,12,1,2,42,0x91,150,576,1248,480,0,0,0,0,0,0,0,7171,3000,7172,2000,919,1000,756,40,1810,1,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2073,'TOUCAN','Toucan','Toucan',70,3640,1,659,544,1,166,201,12,12,54,14,40,35,44,10,10,12,1,2,44,0x1089,155,960,1440,960,0,0,0,0,0,0,0,917,3000,7053,1000,510,50,508,100,2612,200,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2074,'CURUPIRA','Curupira','Curupira',68,3096,1,622,450,1,140,175,42,12,32,23,38,20,45,10,10,12,1,7,22,0x118B,250,528,480,384,0,0,0,0,0,0,0,517,3000,757,250,1011,10,7267,500,1505,100,0,0,0,0,0,0,0,0,0,0); - -# Event MVP +REPLACE INTO `mob_db` VALUES (2074,'CURUPIRA','Curupira','Curupira',68,3096,1,622,450,1,140,175,42,12,32,23,38,20,45,10,10,12,1,7,22,0x108B,250,528,480,384,0,0,0,0,0,0,0,517,3000,757,250,1011,10,7267,500,1505,100,0,0,0,0,0,0,0,0,0,0); +# Event MVP REPLACE INTO `mob_db` VALUES (2075,'E_VADON_X','Ragunta','Ragunta',150,25000000,0,9999999,9999999,1,7000,10000,500,500,100,100,100,100,100,100,10,12,2,5,88,0x37B5,150,1632,432,540,4999999,0,0,0,0,0,0,960,5000,7095,3000,7093,3000,984,1000,985,500,7444,50,617,10,0,0,0,0,6414,9000); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (2076,'S_WIND_GHOST','Shadow of Deception','Shadow of Deception',105,190800,1,0,0,1,462,957,64,51,62,44,25,105,85,20,10,12,1,6,64,0x3795,150,1056,1056,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2077,'S_SKOGUL','Shadow of Illusion','Shadow of Illusion',105,244400,1,0,0,1,910,1166,72,15,100,88,63,99,95,37,10,12,1,6,67,0x3395,190,720,384,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2078,'S_SUCCUBUS','Shadow of Pleasure','Shadow of Pleasure',105,206660,1,0,0,1,880,1204,76,48,100,70,45,110,102,85,10,12,1,6,67,0x3795,155,1306,1056,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2079,'CRYSTAL_H','Crystal','Crystal',77,7777777,1,3777777,3777777,0,17777,25554,77,77,1,7,7,77,77,77,0,0,2,0,60,0x120,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2080,'CRYSTAL_L','Crystal','Crystal',7,77,1,7,7,0,7,14,7,7,1,7,7,7,7,77,0,0,2,0,60,0x120,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2079,'CRYSTAL_H','Crystal','Crystal',77,7777777,1,3777777,3777777,0,17777,25554,77,77,1,7,7,77,77,77,0,0,2,0,60,0x120,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2080,'CRYSTAL_L','Crystal','Crystal',7,77,1,7,7,0,7,14,7,7,1,7,7,7,7,77,0,0,2,0,60,0x120,177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2081,'E_HYDRA','Suspicious Hydra','Strange Hydra',34,854,1,0,0,7,1,2,100,100,1,1,1,1,1,1,10,12,0,3,41,0x0,1000,800,432,600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2082,'G_PIRANHA','Piranha','Piranha',75,4522,1,0,0,1,182,223,7,12,69,45,30,30,66,35,10,12,2,5,61,0x3295,200,768,480,864,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# El Dicastes (13.3) +# El Dicastes (13.3) REPLACE INTO `mob_db` VALUES (2083,'HORN_SCARABA','Scaraba','One-Horned Scaraba',130,51100,1,5220,4011,1,633,724,135,20,44,59,55,21,71,33,10,12,0,4,22,0x1189,200,384,672,360,0,0,0,0,0,0,0,6324,6500,1433,2,12735,10,7939,10,993,2,0,0,0,0,0,0,0,0,4505,1); REPLACE INTO `mob_db` VALUES (2084,'HORN_SCARABA2','Scaraba','Two-Horned Scaraba',134,58900,1,5780,4549,1,690,795,150,38,44,68,72,45,84,51,10,12,0,4,22,0x1189,150,336,360,360,0,0,0,0,0,0,0,6323,6500,13061,2,12735,10,7939,10,993,2,0,0,0,0,0,0,0,0,4505,1); REPLACE INTO `mob_db` VALUES (2085,'ANTLER_SCARABA','Antler Scaraba','Antler Scaraba',136,62600,1,6330,5255,1,412,822,155,102,23,99,59,129,91,45,10,12,1,4,42,0x3985,200,504,624,360,0,0,0,0,0,0,0,6322,6500,1930,10,12735,10,7939,10,993,2,0,0,0,0,0,0,0,0,4505,1); @@ -1272,8 +1218,7 @@ REPLACE INTO `mob_db` VALUES (2090,'ANTLER_SCARABA_EGG','Antler Scaraba Egg','An REPLACE INTO `mob_db` VALUES (2091,'RAKE_SCARABA_EGG','Rake Scaraba Egg','Rake Scaraba Egg',128,72000,1,4000,3000,0,1,2,290,44,1,1,130,39,1,80,10,12,0,4,20,0x100,2000,96,1,480,0,0,0,0,0,0,0,7032,5000,518,100,985,10,2153,10,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2092,'DOLOMEDES','Dolomedes','Dolomedes',132,54591,1,5155,5155,3,677,963,112,52,149,34,82,55,95,67,10,12,2,4,61,0x3985,250,360,360,600,0,0,0,0,0,0,0,6319,3000,6325,5000,6090,500,2789,2,12738,10,6224,500,1984,2,0,0,0,0,4506,1); REPLACE INTO `mob_db` VALUES (2093,'BOTARING','Botaring','Botaring',15,15,1,7,7,2,20,40,20,20,10,10,10,10,77,77,10,12,0,0,26,0x81,170,1872,672,480,0,0,0,0,0,0,0,12492,7000,12492,3500,12492,1000,5204,700,664,2000,665,2000,666,2000,0,0,0,0,603,500); - -# Additional MVPs +# Additional MVPs REPLACE INTO `mob_db` VALUES (2094,'E_ORK_HERO2','Orc Hero','Orc Hero',50,362000,1,2010,2010,1,662,1103,197,70,97,82,107,71,144,43,10,12,2,7,42,0x37B5,150,1678,780,648,1005,725,2000,607,5000,607,5000,968,9700,10018,500,1366,150,12539,50,1124,1000,985,4559,1387,100,0,0,0,0,4143,1); REPLACE INTO `mob_db` VALUES (2095,'E_EDDGA','Eddga','Eddga',65,247500,1,2010,2010,1,866,1342,166,70,92,80,103,66,90,85,10,12,2,2,23,0x37B5,300,872,1344,432,1005,1030,5000,1030,3000,1030,3000,1133,150,2268,250,518,10000,12539,50,1030,250,985,2300,13046,100,0,0,0,0,4074,1); REPLACE INTO `mob_db` VALUES (2096,'E_OSIRIS2','Osiris','Osiris',68,475840,1,2010,2010,1,1580,2483,172,164,97,99,86,131,145,67,10,12,1,1,89,0x37B5,100,1072,672,384,1005,603,2000,608,500,608,500,617,2000,1232,150,2235,200,12539,50,1009,1000,5053,150,1285,100,0,0,0,0,4144,1); @@ -1294,40 +1239,38 @@ REPLACE INTO `mob_db` VALUES (2110,'E_IFRIT','Ifrit','Ifrit',146,6935000,1,2010, REPLACE INTO `mob_db` VALUES (2111,'E_B_HARWORD','Whitesmith Harword','Whitesmith Howard',160,6750000,1,2010,2010,1,3500,4965,301,106,275,148,156,72,177,60,10,12,1,7,82,0x37B5,100,76,384,288,1005,617,5500,603,2000,603,2000,1138,3500,1140,2500,12539,200,1365,3500,1364,3500,1369,2500,1368,3500,0,0,0,0,4361,1); REPLACE INTO `mob_db` VALUES (2112,'E_B_SEYREN','Lord Knight Seyren','Lord Knight Seyren',160,4680000,1,2010,2010,1,4290,6632,567,155,303,165,181,110,178,66,10,12,1,7,83,0x37B5,100,76,384,288,1005,617,5500,603,2000,603,2000,1132,2500,2342,3500,12539,200,1470,3500,1469,3000,1166,2500,1415,1500,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2113,'E_B_EREMES','Assassin Cross Eremes','Assassin Cross Eremes',160,4230000,1,2010,2010,1,4055,5433,445,98,211,181,114,83,225,60,10,12,1,7,85,0x37B5,100,76,384,288,1005,617,5500,603,2000,603,2000,1234,1500,13017,1500,12539,200,1233,3500,1232,3500,1265,3500,13002,3500,0,0,0,0,4359,1); - -# Sorcerer Elemental Spirits -# 2114,EL_AGNI_S,Agni,Agni,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,0,0,83,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2115,EL_AGNI_M,Agni,Agni,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,1,0,83,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2116,EL_AGNI_L,Agni,Agni,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,2,0,83,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2117,EL_AQUA_S,Aqua,Aqua,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,0,0,81,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2118,EL_AQUA_M,Aqua,Aqua,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,1,0,81,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2119,EL_AQUA_L,Aqua,Aqua,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,2,0,81,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2120,EL_VENTUS_S,Ventus,Ventus,100,0,1,0,0,4,0,0,0,0,0,0,0,0,0,0,5,0,0,0,84,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2121,EL_VENTUS_M,Ventus,Ventus,100,0,1,0,0,4,0,0,0,0,0,0,0,0,0,0,5,0,1,0,84,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2122,EL_VENTUS_L,Ventus,Ventus,100,0,1,0,0,4,0,0,0,0,0,0,0,0,0,0,5,0,2,0,84,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2123,EL_TERA_S,Tera,Tera,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,0,0,82,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2124,EL_TERA_M,Tera,Tera,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,1,0,82,0x120,200,0,0,0,0,0,0,0,0,0,0,0 -# 2125,EL_TERA_L,Tera,Tera,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,2,0,82,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# Sorcerer Elemental Spirits +# 2114,EL_AGNI_S,Agni,Agni,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,0,0,83,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2115,EL_AGNI_M,Agni,Agni,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,1,0,83,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2116,EL_AGNI_L,Agni,Agni,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,2,0,83,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2117,EL_AQUA_S,Aqua,Aqua,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,0,0,81,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2118,EL_AQUA_M,Aqua,Aqua,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,1,0,81,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2119,EL_AQUA_L,Aqua,Aqua,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,2,0,81,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2120,EL_VENTUS_S,Ventus,Ventus,100,0,1,0,0,4,0,0,0,0,0,0,0,0,0,0,5,0,0,0,84,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2121,EL_VENTUS_M,Ventus,Ventus,100,0,1,0,0,4,0,0,0,0,0,0,0,0,0,0,5,0,1,0,84,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2122,EL_VENTUS_L,Ventus,Ventus,100,0,1,0,0,4,0,0,0,0,0,0,0,0,0,0,5,0,2,0,84,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2123,EL_TERA_S,Tera,Tera,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,0,0,82,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2124,EL_TERA_M,Tera,Tera,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,1,0,82,0x120,200,0,0,0,0,0,0,0,0,0,0,0 +# 2125,EL_TERA_L,Tera,Tera,100,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,5,0,2,0,82,0x120,200,0,0,0,0,0,0,0,0,0,0,0 REPLACE INTO `mob_db` VALUES (2126,'M_ANOPHELES','Anopheles','Anopheles',100,8000,1,0,0,1,300,400,0,0,40,70,40,40,80,40,10,12,0,4,64,0x3985,170,1084,2304,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2127,'M_HORNET','Hornet','Hornet',110,9000,1,0,0,1,350,450,0,0,40,70,40,40,90,40,10,12,0,4,24,0x1181,150,1292,792,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2128,'M_HORNET2','Hornet','Hornet',120,10000,1,0,0,1,400,500,0,0,40,70,40,40,100,40,10,12,0,4,24,0x1181,150,1292,792,216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2129,'M_LUCIOLA_VESPA','Luciola Vespa','Luciola Vespa',130,11000,1,0,0,1,450,650,0,0,60,80,50,50,110,50,10,12,1,4,24,0x7795,110,1000,864,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2130,'M_LUCIOLA_VESPA2','Luciola Vespa','Luciola Vespa',140,12000,1,0,0,1,500,700,0,0,60,80,50,50,120,50,10,12,1,4,24,0x7795,110,1000,864,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Bifrost (14.1) -REPLACE INTO `mob_db` VALUES (2131,'LOST_DRAGON','Lost Dragon','Lost Dragon',135,608920,0,30000,30000,3,1050,1580,60,51,140,81,69,122,98,61,10,12,2,9,67,0x3795,150,840,648,576,15000,617,2500,616,5000,0,0,2610,1000,13062,1000,607,1000,608,500,610,500,1985,500,2854,300,0,0,0,0,0,0); +# Bifrost (14.1) +REPLACE INTO `mob_db` VALUES (2131,'LOST_DRAGON','Lost Dragon','Lost Dragon',135,608920,0,30000,30000,3,1050,1580,60,51,140,81,69,122,98,61,10,12,2,9,67,0x3695,150,840,648,576,15000,617,2500,616,5000,0,0,2610,1000,13062,1000,607,1000,608,500,610,500,1985,500,2854,300,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2132,'POM_SPIDER','Pom Spider','Pom Spider',145,122110,1,8010,8037,1,632,847,240,115,156,85,178,88,139,102,10,12,1,4,62,0x3985,250,864,1056,576,0,0,0,0,0,0,0,12573,500,11520,1000,1042,1000,13431,10,1654,3,0,0,0,0,0,0,0,0,4514,1); REPLACE INTO `mob_db` VALUES (2133,'ANGRA_MANTIS','Angra Mantis','Angra Mantis',144,91720,1,7790,7020,1,579,756,175,81,122,155,119,81,132,79,10,12,1,4,42,0x3985,150,576,480,480,0,0,0,0,0,0,0,6086,5000,7194,1000,997,10,1830,10,0,0,0,0,0,0,0,0,0,0,4513,1); REPLACE INTO `mob_db` VALUES (2134,'PARUS','Parus','Parus',142,86990,1,7310,6990,1,511,663,161,39,80,136,128,44,105,51,10,12,0,2,42,0x3885,180,384,792,432,0,0,0,0,0,0,0,6393,5000,7063,1000,12736,100,6383,5000,6383,3000,6383,1000,0,0,0,0,0,0,4512,1); REPLACE INTO `mob_db` VALUES (2135,'CREEPER','Creeper','Creeper',100,1000,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,3,22,0x40,2000,192,192,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2136,'LITTLE_FATUM','Little Fatum','Little Fatum',142,85100,1,7500,6500,1,442,894,51,198,10,66,17,148,148,97,10,12,0,7,44,0x3885,150,432,300,432,0,0,0,0,0,0,0,6395,5000,7938,100,11519,100,2465,3,0,0,0,0,0,0,0,0,0,0,4511,1); REPLACE INTO `mob_db` VALUES (2137,'MIMING','Miming','Miming',140,81200,1,7100,6300,1,430,652,120,120,90,66,105,77,133,77,10,12,0,0,20,0x3885,250,576,1140,504,0,0,0,0,0,0,0,6394,5000,7938,100,969,1,2853,3,0,0,0,0,0,0,0,0,0,0,4510,1); -REPLACE INTO `mob_db` VALUES (2138,'NYDHOG_MEMORY1_1','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0xC9,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2139,'NYDHOG_MEMORY1_2','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0xC9,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2140,'NYDHOG_MEMORY2_1','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0xC9,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2141,'NYDHOG_MEMORY2_2','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0xC9,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2142,'NYDHOG_MEMORY3_1','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0xC9,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2143,'NYDHOG_MEMORY3_2','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0xC9,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2138,'NYDHOG_MEMORY1_1','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x161,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2139,'NYDHOG_MEMORY1_2','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x161,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2140,'NYDHOG_MEMORY2_1','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x161,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2141,'NYDHOG_MEMORY2_2','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x161,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2142,'NYDHOG_MEMORY3_1','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x161,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2143,'NYDHOG_MEMORY3_2','Nydhogg\'s Memory','Nydhogg\'s Memory',130,10,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x161,200,1248,576,1248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2144,'G_ANTLER_SCARABA','Antler Scaraba','Antler Scaraba',136,62600,1,0,0,1,412,822,155,102,23,99,59,129,91,45,10,12,1,4,42,0x3985,200,504,624,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2145,'G_RAKE_SCARABA','Rake Scaraba','Rake Scaraba',139,67700,1,0,0,1,830,942,250,70,90,66,145,52,112,77,10,12,1,4,42,0x3985,150,588,768,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2146,'G_S_NYDHOG','G_S_NYDHOG','G_S_NYDHOG',117,300000,0,0,0,2,840,1680,60,60,1,30,30,136,88,30,10,12,2,9,87,0x37B5,150,1596,1620,864,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1335,8 +1278,7 @@ REPLACE INTO `mob_db` VALUES (2147,'E_WHITE_PLANT','White Plant','White Plant',1 REPLACE INTO `mob_db` VALUES (2148,'E_BLUE_PLANT','Blue Plant','Blue Plant',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2149,'E_SAVAGE_BABE','Savage Babe','Savage Babe',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2150,'WATERMELON','Watermelon','Watermelon',12,10,0,0,0,1,7,10,1,1,1,1,1,1,6,30,10,12,1,3,21,0x40,2000,1,1,1,0,0,0,0,0,0,0,6411,5000,911,2000,7198,2000,741,100,0,0,0,0,0,0,0,0,0,0,0,0); - -# Dewata +# Dewata REPLACE INTO `mob_db` VALUES (2151,'ALNOLDI','Alnoldi','Rafflesia Alnoldi',80,5149,0,1399,1280,1,378,447,80,20,1,32,24,61,85,30,10,12,1,3,22,0x3895,300,768,768,576,0,0,0,0,0,0,0,705,250,520,425,905,4500,711,300,521,250,2269,100,0,0,0,0,0,0,4515,1); REPLACE INTO `mob_db` VALUES (2152,'COMODO','Comodo','Comodo',81,4002,0,1072,1581,1,427,469,92,11,50,52,35,20,94,48,10,12,1,2,65,0x3895,165,432,432,360,0,0,0,0,0,0,0,6403,5000,517,9000,911,9000,908,5000,0,0,0,0,0,0,0,0,0,0,4516,1); REPLACE INTO `mob_db` VALUES (2153,'CENDRAWASIH','Cendrawasih','Cendrawasih',84,5556,0,2612,2687,1,297,467,72,33,50,77,51,58,92,45,10,12,1,8,23,0x3895,220,768,768,576,0,0,0,0,0,0,0,6405,9000,7063,8000,916,9000,0,0,0,0,0,0,0,0,0,0,0,0,4517,1); @@ -1344,13 +1286,11 @@ REPLACE INTO `mob_db` VALUES (2154,'BANASPATY','Banaspaty','Banaspaty',85,4680,0 REPLACE INTO `mob_db` VALUES (2155,'BUTOIJO','Butoijo','Butoijo',88,7524,0,1355,1752,1,358,460,77,12,50,65,30,30,106,44,10,12,2,6,43,0x4995,200,1100,483,528,0,0,0,0,0,0,0,938,2750,537,500,520,450,0,0,0,0,0,0,0,0,0,0,0,0,4519,1); REPLACE INTO `mob_db` VALUES (2156,'LEAK','Leak','Leak',94,1266000,0,472800,300120,1,3723,5007,280,128,100,125,30,85,186,55,10,12,2,6,47,0x37B5,150,151,288,360,236400,607,5500,617,2250,616,450,1422,10,617,2500,607,2500,15032,500,12738,3500,518,2500,969,2000,0,0,0,0,4520,1); REPLACE INTO `mob_db` VALUES (2157,'G_BANASPATY','Banaspaty','Banaspaty',85,4680,0,0,0,1,200,382,63,89,1,78,35,77,79,20,10,12,0,0,63,0x37B5,220,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Homunculus S Summons +# Homunculus S Summons REPLACE INTO `mob_db` VALUES (2158,'S_HORNET','Hornet','Hornet',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2159,'S_GIANT_HORNET','Giant Hornet','Giant Hornet',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2160,'S_LUCIOLA_VESPA','Luciola Vespa','Luciola Vespa',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Nightmare Scaraba Hole +# Nightmare Scaraba Hole REPLACE INTO `mob_db` VALUES (2161,'I_HORN_SCARABA','Gold One-Horn Scaraba','Gold One-Horn Scaraba',130,204400,0,15660,12033,1,1266,1448,135,20,1,109,55,121,121,33,10,12,0,4,22,0x3795,150,76,384,288,0,0,0,0,0,0,0,6324,10000,1433,4,12735,20,7939,20,993,4,0,0,0,0,0,0,0,0,4508,1); REPLACE INTO `mob_db` VALUES (2162,'I_HORN_SCARABA2','Gold Two-Horn Scaraba','Gold Two-Horn Scaraba',134,235600,0,17340,13647,1,1380,1590,150,38,1,118,72,145,134,51,10,12,0,4,22,0x3795,150,76,384,288,0,0,0,0,0,0,0,6323,10000,13061,4,12735,20,7939,20,993,4,0,0,0,0,0,0,0,0,4508,1); REPLACE INTO `mob_db` VALUES (2163,'I_ANTLER_SCARABA','Gold Antler Scaraba','Gold Antler Scaraba',136,250400,0,18990,15675,1,824,1644,155,102,1,149,59,229,141,45,10,12,1,4,42,0x3795,220,76,384,288,0,0,0,0,0,0,0,6322,10000,1930,4,12735,20,7939,20,993,4,0,0,0,0,0,0,0,0,4508,1); @@ -1364,8 +1304,7 @@ REPLACE INTO `mob_db` VALUES (2170,'I_G_ANTLER_SCARABA','Gold Antler Scaraba','G REPLACE INTO `mob_db` VALUES (2171,'I_G_RAKE_SCARABA','Gold Rake Scaraba','Gold Rake Scaraba',139,270800,0,0,0,1,1660,1884,250,70,1,116,145,152,162,77,10,12,1,4,42,0x37B5,200,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2172,'I_G_HORN_SCARABA','Gold One-Horn Scaraba','Gold One-Horn Scaraba',130,204400,0,0,0,1,1266,1448,135,20,1,109,55,121,121,33,10,12,0,4,22,0x37B5,150,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2173,'I_G_HORN_SCARABA2','Gold Two-Horn Scaraba','Gold Two-Horn Scaraba',134,235600,0,0,0,1,1380,1590,150,38,1,118,72,145,134,51,10,12,0,4,22,0x37B5,150,76,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Malangdo Island +# Malangdo Island REPLACE INTO `mob_db` VALUES (2174,'MD_VADON','Deep Sea Vadon','Deep Sea Vadon',95,120000,0,1500,1500,1,710,1384,154,21,1,63,84,60,99,45,10,12,0,5,21,0x37B5,300,1632,432,540,0,0,0,0,0,0,0,991,40,960,9000,910,3000,2313,5,943,100,757,40,717,50,0,0,0,0,4049,1); REPLACE INTO `mob_db` VALUES (2175,'MD_MARSE','Deep Sea Marse','Deep Sea Marse',95,120000,0,1500,1500,1,740,1456,58,218,1,51,75,30,99,30,10,12,0,5,41,0x37B5,300,1956,756,528,0,0,0,0,0,0,0,1024,9000,962,3000,717,200,720,10,995,12,1007,5,514,300,0,0,0,0,4095,1); REPLACE INTO `mob_db` VALUES (2176,'MD_CRAB','Deep Sea Crab','Deep Sea Crab',95,120000,0,1500,1500,1,600,1176,136,15,54,42,72,21,84,45,7,12,0,5,21,0x37B5,200,992,792,360,0,0,0,0,0,0,0,964,5500,960,1500,7049,700,1001,13,0,0,0,0,757,37,0,0,0,0,4153,1); @@ -1392,19 +1331,17 @@ REPLACE INTO `mob_db` VALUES (2196,'MD_G_STROUF','Strouf','Strouf',1,50,0,0,0,1, REPLACE INTO `mob_db` VALUES (2197,'RED_ERUMA','Red Eruma','Red Eruma',91,9900,0,1909,1909,1,620,930,102,102,1,75,40,40,75,30,10,12,1,5,41,0x89,150,768,768,576,0,0,0,0,0,0,0,6426,7000,965,4000,966,4000,1056,2000,757,200,756,50,603,10,0,0,0,0,4531,1); REPLACE INTO `mob_db` VALUES (2198,'KING_DRAMOH','King Dramoh','King Dramoh',117,28800,0,3350,1300,1,1320,1848,480,22,100,70,30,50,100,70,10,12,2,5,41,0x37B5,120,432,432,360,0,0,0,0,0,0,0,960,7000,943,3000,7938,500,995,100,6256,100,1523,1,13035,1,0,0,0,0,4524,1); REPLACE INTO `mob_db` VALUES (2199,'SIORAVA','Siorava','Siorava',87,6500,0,1200,1200,1,450,675,20,40,1,30,25,55,60,30,10,12,0,0,21,0x83,200,1872,672,480,0,0,0,0,0,0,0,958,7000,7071,3000,7005,1000,932,1000,12624,500,1202,10,13034,1,0,0,0,0,4530,1); - -# Izlude Dungeon F6 -#REPLACE INTO `mob_db` VALUES (2200,'J_TAINI','Taini','Taini',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# Izlude Dungeon F6 +# REPLACE INTO `mob_db` VALUES (2200,'J_TAINI','Taini','Taini',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2201,'SROPHO','Sropho','Sropho',113,24002,0,1934,1900,1,571,856,44,91,100,50,30,70,90,30,10,12,1,5,41,0x3795,135,700,600,360,0,0,0,0,0,0,0,951,7000,7938,500,756,250,12012,25,1971,25,1972,10,0,0,0,0,0,0,4522,1); REPLACE INTO `mob_db` VALUES (2202,'KRAKEN','Kraken','Kraken',124,5602800,0,983332,961111,3,3823,4969,55,229,150,150,150,180,180,150,10,12,2,5,81,0x37B5,150,768,768,576,491666,607,5500,617,2250,616,450,962,9000,1422,1000,1484,500,1131,300,2347,100,7444,5000,0,0,0,0,0,0,4525,1); REPLACE INTO `mob_db` VALUES (2203,'POT_DOFLE','Pot Dofle','Pot Dofle',115,25211,0,2650,1350,1,1088,1632,122,55,100,50,50,70,100,30,10,12,0,5,41,0x1089,135,768,768,576,0,0,0,0,0,0,0,1056,3000,7013,1000,1024,500,6257,100,969,2,617,1,0,0,0,0,0,0,4523,1); REPLACE INTO `mob_db` VALUES (2204,'SEDORA','Sedora','Sedora',110,22050,0,1853,1739,1,758,1137,92,55,100,50,50,30,70,30,10,12,1,5,41,0x3795,120,504,960,576,0,0,0,0,0,0,0,962,5000,1024,5000,6256,100,7939,100,2424,10,603,5,0,0,0,0,0,0,4521,1); -#REPLACE INTO `mob_db` VALUES (2205,'TACNU','Tacnu','Tacnu',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2205,'TACNU','Tacnu','Tacnu',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2206,'KRAKEN_LEG','Kraken Leg','Kraken Leg',124,39190,0,0,0,2,1685,2190,128,158,100,100,100,130,130,100,10,12,2,5,81,0x37B5,150,768,768,576,0,0,0,0,0,0,0,7565,10,6253,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -#REPLACE INTO `mob_db` VALUES (2207,'RACARCH','Racarch','Racarch',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# REPLACE INTO `mob_db` VALUES (2207,'RACARCH','Racarch','Racarch',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2208,'WILD_RIDER','Wild Rider','Wild Rider',95,33300,0,8300,3300,1,1320,1848,480,22,100,100,30,70,100,30,10,12,2,5,41,0x37B5,150,432,432,360,0,0,0,0,0,0,0,956,7000,12624,7000,720,4000,995,2000,7938,1000,617,1000,0,0,0,0,0,0,4532,1); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (2209,'E_THIEF_BUG','Thief Bug','Thief Bug',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2210,'XMAS_LUNATIC','Xmas Lunatic','Christmas Lunatic',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2211,'E_TEDDY_BEAR','Teddy Bear','Teddy Bear',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1417,8 +1354,7 @@ REPLACE INTO `mob_db` VALUES (2217,'M_TEDDY_BEAR','Teddy Bear','Teddy Bear',1,60 REPLACE INTO `mob_db` VALUES (2218,'E_OCTOPUS_LEG','Octopus Leg','Octopus Tentacle',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2219,'E_GIANT_OCTOPUS','Giant Octopus','Giant Octopus',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2220,'E_QUVE','Quve','Quve',1,60,1,27,20,1,8,9,2,5,6,1,1,0,6,5,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Lighthalzen Biolab F4 +# Lighthalzen Biolab F4 REPLACE INTO `mob_db` VALUES (2221,'RANDEL','Randel','Randel',141,478745,0,32367,24055,1,3055,4277,180,56,142,69,86,49,132,55,10,12,1,7,66,0x3095,170,76,384,288,0,0,0,0,0,0,0,7345,3000,6470,300,6471,300,985,100,617,10,1435,1,2162,1,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2222,'FLAMEL','Flamel','Flamel',141,316468,0,31166,21445,1,1074,1503,93,40,138,79,62,53,82,48,10,12,1,7,63,0x3095,180,76,384,288,0,0,0,0,0,0,0,7345,3000,6470,300,6471,300,984,100,617,10,16010,10,15044,1,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2223,'CELIA','Celia','Celia',141,253145,0,22107,19017,1,1612,2256,74,312,108,78,55,144,139,49,10,12,1,7,68,0x3295,150,1152,384,288,0,0,0,0,0,0,0,7345,3000,6470,300,6471,300,985,100,1654,10,2853,10,18111,1,0,0,0,0,0,0); @@ -1442,14 +1378,13 @@ REPLACE INTO `mob_db` VALUES (2240,'B_ALPHOCCIO','Clown Alphoccio','Clown Alphoc REPLACE INTO `mob_db` VALUES (2241,'B_TRENTINI','Gypsy Trentini','Gypsy Trentini',160,3894278,0,4463758,2563096,1,1070,1498,181,112,176,258,155,132,309,95,10,12,1,7,84,0x37B5,100,76,384,288,2231879,0,0,0,0,0,0,12623,9000,12616,9000,616,9000,6224,9000,18103,5000,18110,5000,1963,5000,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2242,'MD_DESERT_WOLF','Desert Wolf','Desert Wolf',135,551578,0,0,0,1,1040,1158,151,39,93,69,63,61,82,42,10,12,1,6,20,0x37B5,200,1120,420,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2243,'MD_DESERT_WOLF_B','Desert Wolf','Desert Wolf',130,274531,0,0,0,1,66,82,13,0,10,12,8,5,17,7,10,12,0,6,20,0x37B5,300,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -# Fix me! 2244 needs new info. +# Fix me! 2244 needs new info. REPLACE INTO `mob_db` VALUES (2244,'QUEST_CHEN','Champion Chen','Champion Chen',99,15000,2000,0,0,1,1700,3000,216,134,126,74,71,123,99,65,10,12,1,7,68,0x37B5,180,1152,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2245,'EXP_TEST','Exp Test','Exp Test',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2246,'Q_WOOTAN_FIGHTER','Wootan Fighter','Wootan Fighter',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2247,'Q_INCREASE_SOIL','Increase Soil','Mi Gao',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2248,'GOLDPORING','Gold Poring','Gold Poring',1,15,0,0,0,1,1,2,160,5,1,1,1,1,6,30,10,12,1,3,21,0xC3,400,1872,672,480,0,0,0,0,0,0,0,7602,3000,7470,3000,6012,3000,6485,3000,6486,3000,6487,3000,6487,3000,0,0,0,0,0,0); - -# Hall of Abyss Guild Dungeon +# Hall of Abyss Guild Dungeon REPLACE INTO `mob_db` VALUES (2249,'PYURIEL','Pyuriel','Pyuriel',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2250,'LORA','Lora','Lora',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2251,'GIOIA','Gioia','Gioia',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1490,8 +1425,7 @@ REPLACE INTO `mob_db` VALUES (2285,'GLD_KOBOLD_2','Abysmal Kobold','Abysmal Kobo REPLACE INTO `mob_db` VALUES (2286,'GLD_KOBOLD_3','Abysmal Kobold','Abysmal Kobold',141,182830,0,1827,1371,1,360,424,109,48,103,64,59,42,67,20,10,12,1,7,43,0x37B5,300,1228,528,360,0,0,0,0,0,0,0,990,35,999,100,1034,5335,912,200,1355,5,2104,3,508,100,0,0,0,0,4091,1); REPLACE INTO `mob_db` VALUES (2287,'GLD_KOBOLD_ARCHER','Abysmal Kobold Archer','Abysmal Kobold Archer',142,180530,0,2160,2620,9,586,619,84,5,99,39,48,30,103,25,10,12,0,7,23,0x37B5,200,1008,1008,384,0,0,0,0,0,0,0,912,250,999,60,1034,4850,5118,50,1763,2000,1711,5,756,79,0,0,0,0,4292,1); REPLACE INTO `mob_db` VALUES (2288,'GLD_TREASURE','Treasure Chest','Treasure Chest',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (2289,'E_FABRE','Fabre','Fabre',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2290,'J_THIEF_BUG','Thief Bug','Thief Bug',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2291,'E_HORNET','Hornet','Hornet',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1511,9 +1445,8 @@ REPLACE INTO `mob_db` VALUES (2304,'E_QUEEN_SCARABA','Queen Scaraba','Queen Scar REPLACE INTO `mob_db` VALUES (2305,'E_UNGOLIANT','Ungoliant','Ungoliant',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2306,'E_GOLDEN_BUG','Golden Thief Bug','Golden Thief Bug',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2307,'J_MISTRESS','Mistress','Mistress',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); -REPLACE INTO `mob_db` VALUES (2308,'KO_ZANZOU','Zanzou','Zanzou',1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Malaya Port +REPLACE INTO `mob_db` VALUES (2308,'KO_KAGE','Zanzou','Zanzou',1,50,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0x0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# Malaya Port REPLACE INTO `mob_db` VALUES (2309,'BUNGISNGIS','Bungisngis','Bungisngis',121,25513,0,1960,1650,1,851,1276,115,35,100,100,30,30,100,30,10,12,2,7,42,0x3795,200,1000,792,336,0,0,0,0,0,0,0,7054,2000,6510,1000,12700,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2310,'ENGKANTO','Engkanto','Engkanto',125,23948,0,1723,1547,1,675,1012,101,41,100,100,30,30,125,30,10,12,1,7,40,0x3795,200,1000,792,336,0,0,0,0,0,0,0,7054,1000,6510,2000,528,1000,12700,100,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2311,'MANANANGGAL','Manananggal','Manananggal',107,20451,0,1415,1410,1,801,1201,64,31,100,100,30,30,200,30,10,12,1,6,47,0x3795,120,432,432,360,0,0,0,0,0,0,0,6508,3000,6511,2000,6510,1000,7006,500,913,500,0,0,0,0,0,0,0,0,0,0); @@ -1547,8 +1480,7 @@ REPLACE INTO `mob_db` VALUES (2338,'MD_MANANANGGAL','Bangungot Manananggal','Ban REPLACE INTO `mob_db` VALUES (2339,'MD_MANGKUKULAM','Bangungot Mangkukulam','Bangungot Mangkukulam',110,102154,0,0,0,1,598,766,89,75,100,100,30,30,100,30,10,12,1,6,47,0x3795,120,1000,792,336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2340,'MD_TIYANAK','Tiyanak','Tiyanak',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2341,'RWC_BOSS2011','RWC Boss','RWC Boss',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Mercenary Monsters +# Additional Mercenary Monsters REPLACE INTO `mob_db` VALUES (2342,'MER_DIABOLIC','Diabolic','Diabolic',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2343,'HIDDEN_MOB_W','Hidden Mob','Hidden Mob',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2344,'MER_WISH_MAIDEN','Wish Maiden','Wish Maiden',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1559,8 +1491,7 @@ REPLACE INTO `mob_db` VALUES (2348,'MER_CIVIL_SERVANT','Civil Servant','Mao Guai REPLACE INTO `mob_db` VALUES (2349,'MER_LOLI_RURI','Loli Ruri','Loli Ruri',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2350,'MER_SEDORA','Sedora','Sedora',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2351,'MER_CHEPET','Chepet','Chepet',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Nightmare Pyrimids +# Nightmare Pyrimids REPLACE INTO `mob_db` VALUES (2352,'E_RSX_0805','RSX 0805','RSX 0805',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2353,'N_MINOROUS','Nightmare Minorous','Nightmare Minorous',121,27141,0,16176,12252,1,853,1279,131,41,1,1,1,1,6,30,10,12,2,2,43,0x3795,200,1360,960,432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2354,'N_MUMMY','Nightmare Mummy','Nightmare Mummy',117,22557,0,15480,11670,1,761,1141,110,21,1,1,1,1,6,30,10,12,1,1,49,0x3795,300,1772,72,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1572,8 +1503,7 @@ REPLACE INTO `mob_db` VALUES (2359,'G_N_ARCLOUSE','Nightmare Arclouse','Nightmar REPLACE INTO `mob_db` VALUES (2360,'N_ANCIENT_MUMMY','Nightmare Ancient Mummy','Nightmare Ancient Mummy',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2361,'G_N_ANCIENT_MUMMY','Nightmare Ancient Mummy','Nightmare Ancient Mummy',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2362,'N_AMON_RA','Nightmare Amon Ra','Nightmare Amon Ra',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Eclage (14.2) +# Eclage (14.2) REPLACE INTO `mob_db` VALUES (2363,'MENBLATT','Menblatt','Menblatt',143,82200,0,4150,3421,1,816,1224,79,50,1,1,1,1,6,30,10,12,1,4,44,0x3795,145,472,576,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2364,'PETAL','Petal','Petal',141,81031,0,4058,3361,1,671,1006,73,33,1,1,1,1,6,30,10,12,1,2,24,0x3795,200,1500,500,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2365,'CENERE','Cenere','Cenere',146,130131,0,7117,5712,1,1802,2342,87,81,1,1,1,1,6,30,10,12,0,3,24,0x3795,300,1500,500,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1583,8 +1513,7 @@ REPLACE INTO `mob_db` VALUES (2368,'LICHTERN_Y','Yellow Lichtern','Yellow Lichte REPLACE INTO `mob_db` VALUES (2369,'LICHTERN_R','Red Lichtern','Red Lichtern',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2370,'LICHTERN_G','Green Lichtern','Green Lichtern',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2371,'FAITHFUL_MANAGER','Faithful Manager','Faithful Manager',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); - -# Additional Monsters +# Additional Monsters REPLACE INTO `mob_db` VALUES (2372,'SOIL','Soil','Soil',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2373,'ROCK','Rock','Rock',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2374,'THICKET','Thicket','Thicket',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); @@ -1594,3 +1523,735 @@ REPLACE INTO `mob_db` VALUES (2377,'E_NOVUS_','Novus','Novus',1,50,0,0,0,1,7,10, REPLACE INTO `mob_db` VALUES (2378,'MER_ANTLER_SCARABA','Antler Scaraba','Antler Scaraba',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2379,'XMAS_SMOKEY_SOCK','Smokey Sock','Smokey Sock',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); REPLACE INTO `mob_db` VALUES (2380,'XMAS_SMOKEY_GIFT','Smokey Gift','Smokey Gift',1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x83,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# Monster's Waitting To Be Coded In +# 2381,E_VADON_X_S +# 2382,E_VADON_X_H +# 2383,E_VADON_X_H_S +# 2384,KRAKEN_LEG_1 +# 2385,KRAKEN_LEG_2 +# 2386,KRAKEN_LEG_3 +# 2387,KRAKEN_LEG_4 +# 2388,KRAKEN_LEG_5 +# 2389,G_KRAKEN_LEG_1 +# 2390,G_KRAKEN_LEG_2 +# 2391,G_KRAKEN_LEG_3 +# 2392,G_KRAKEN_LEG_4 +# 2393,G_KRAKEN_LEG_5 +# 2394,MERMAN_SE +# 2395,SEIREN +# 2396,POSEIDON +# 2397,KRAKEN_BABY +# 2398,LITTLE_PORING +# 2399,E_MINI_DEMON +# 2400,E_DIABOLIC +# 2401,G_PORING +# 2402,POPORING_IMMUNE_M +# 2403,POPORING_IMMUNE_A +# 2404,DEAD_PLANKTON +# 2405,WEAK_SKELETON +# 2406,WEAK_SKEL_SOLDIER +# 2407,SAILOR_SKELETON +REPLACE INTO `mob_db` VALUES (2408,'DUMMY_10','Dummy 10','Dummy 10',10,99999999,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,1,0,20,0x0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2409,'DUMMY_50','Dummy 50','Dummy 50',50,99999999,1,0,0,0,0,0,50,50,0,0,0,0,0,0,0,200,1,0,20,0x0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2410,'DUMMY_100','Dummy 100','Dummy 100',100,99999999,1,0,0,0,0,0,90,90,0,0,0,0,0,0,0,200,1,0,20,0x0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2411,'DUMMY_150','Dummy 150','Dummy 150',150,99999999,1,0,0,0,0,0,120,120,0,0,0,0,0,0,0,200,1,0,20,0x0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# 2412,E_VALKIWI +REPLACE INTO `mob_db` VALUES (2413,'DUMMY_10_FIRE','Dummy 10','Dummy 10',10,99999999,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,1,0,23,0x0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# 2414,RUNAWAY_BOOK +# 2415,L_SEYREN +# 2416,L_EREMES +# 2417,L_HARWORD +# 2418,L_SHECIL +# 2419,L_KATRINN +# 2420,L_MAGALETA +# 2421,L_YGNIZEM +# 2422,L_WHIKEBAIN +# 2423,L_ARMAIA +# 2424,L_KAVAC +# 2425,L_DANCER +# 2426,L_RAWREL +# 2427,L_EREND +# 2428,G_L_SEYREN +# 2429,G_L_EREMES +# 2430,G_L_HARWORD +# 2431,G_L_SHECIL +# 2432,G_L_KATRINN +# 2433,G_L_MAGALETA +# 2434,G_L_YGNIZEM +# 2435,G_L_WHIKEBAIN +# 2436,G_L_ARMAIA +# 2437,G_L_KAVAC +# 2438,G_L_DANCER +# 2439,G_L_RAWREL +# 2440,G_L_EREND +# 2441,B_NOVICE +# 2442,B_SUPERNOVICE +# 2443,AIRA +# 2444,KULUNA +# 2445,MALLINA +# 2446,EZELLA +# 2447,LUNE +# 2448,MORIN +# 2449,NASARIN +# 2450,THIEF_PORING +# 2451,BABY_STRANGE +# 2452,TREASURE_BOX_TE +# 2453,TREASURE_BOX_TE_1 +# 2454,TREASURE_BOX_TE_2 +# 2455,TREASURE_BOX_TE_3 +# 2456,TREASURE_BOX_TE_4 +# 2457,TREASURE_BOX_TE_5 +# 2458,TREASURE_BOX_TE_6 +# 2459,TREASURE_BOX_TE_7 +# 2460,TREASURE_BOX_TE_8 +# 2461,TREASURE_BOX_TE_9 +# 2462,TREASURE_BOX_TE_10 +# 2463,E_BOMBPORING +# Old Glast Heim (currently placeholders) +REPLACE INTO `mob_db` VALUES (2464,'MG_ZOMBIE','Zombie','Zombie',17,9340,1,117,87,1,38,50,20,3,15,8,17,0,15,0,10,12,1,1,29,0x3885,400,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2465,'MG_WRAITH','Wraith','Wraith',77,23168,1,1190,1191,1,335,396,80,40,62,26,30,55,76,5,10,12,2,1,89,0x3695,300,1816,576,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2466,'MG_GHOUL','Ghoul','Ghoul',61,12614,1,583,656,1,216,245,78,5,56,12,19,11,27,10,10,12,1,1,49,0x3885,250,2456,912,504,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2467,'MG_ARCLOUSE','Arclouse','Arclouze',107,14020,1,1844,2607,1,269,309,101,36,60,73,45,35,140,15,10,12,1,4,42,0x3195,100,960,500,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2468,'MG_RAYDRIC','Raydric','Raydric',115,25408,1,20770,2076,1,572,668,89,15,129,87,55,32,76,27,10,12,2,7,47,0x3095,150,824,780,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2469,'MG_RAYDRIC_ARCHER','Raydric Archer','Raydric Archer',82,30370,1,1049,1332,9,377,395,63,40,53,24,40,15,112,30,10,12,1,6,47,0x2185,200,1152,1152,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2470,'MG_KNIGHT_OF_ABYSS','Knight of Abyss','Abysmal Knight',122,332970,1,4779,4013,1,810,1002,102,50,121,55,68,70,97,37,10,12,2,7,87,0x3695,300,1500,500,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2471,'MG_KHALITZBURG','Khalitzburg','Khalitzburg',118,109860,1,2862,2147,1,737,833,125,10,121,48,40,31,89,32,10,12,2,1,29,0x3695,350,528,1000,396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2472,'MG_BLOODY_KNIGHT','Bloody Knight','Bloody Knight',116,285000,1,7348,6511,3,942,1065,122,50,132,59,70,57,98,45,10,12,2,0,87,0x3695,250,828,528,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2473,'MG_M_UNDEAD_KNIGHT','Undead Knight','Undead Knight',133,500000,0,4500,3375,2,751,880,122,62,122,87,54,65,103,65,14,16,2,7,80,0x37B5,170,140,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2474,'MG_F_UNDEAD_KNIGHT','Undead Knight','Undead Knight',133,500000,0,4500,3375,2,751,880,122,62,122,87,54,65,103,65,14,16,2,7,80,0x37B5,170,140,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2475,'MG_CORRUPTION_ROOT','Root of Corruption','Root of Corruption',136,3190000,1,240120,187920,3,710,1762,213,123,86,89,120,131,101,92,14,12,2,7,62,0x1A4,170,854,2016,480,120060,607,5500,608,3500,732,5500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +REPLACE INTO `mob_db` VALUES (2476,'MG_AMDARAIS','Amdarias','Amdarias',143,3283990,1,74288,77950,2,8860,10022,32,66,140,159,30,109,300,90,10,12,2,2,63,0x37B5,200,1152,1152,576,37144,617,5500,617,5000,616,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +# 2477,NG_WANDER_MAN +# 2478,NG_RIDEWORD +# 2479,NG_MIMIC +# 2480,NG_EVIL_DRUID +# 2481,NG_WRAITH_DEAD +# 2482,G_MG_KHALITZBURG +# 2483,NG_BAPHOMET +# 2484,G_NG_BAPHOMET_ +# 2485,NG_CHIMERA +# 2486,ISIS_ANNIV +# 2487,PASANA_ANNIV +# 2488,OSIRIS_ANNIV +# 2489,GM_WOMAN +# 2490,GM_SAY +# 2491,GM_SMOKIE +# 2492,GM_PHOENIX +# 2493,GM_MEN +# 2494,GM_HINALLE +# 2495,HIDDEN_MOB2 +# 2496,I_UZHAS +# 2497,I_DOKEBI +# 2498,G_WISH_MAIDEN +# 2499,J_PORING +# 2500,E_MEGALODON +# 2501,E_ASTER +# 2502,E_CRAB +# 2503,E_SHELLFISH +# 2504,E_COELACANTH_N_E +# 2505,E_RED_ERUMA +# 2506,E_KING_DRAMOH +# 2507,E_CORNUTUS +# 2508,E_PENOMENA +# 2509,KRAKEN_LEG_6 +# 2510,WATERMELON_1 +# 2511,WATERMELON_2 +# 2512,WATERMELON_3 +# 2513,WATERMELON_4 +# 2514,WATERMELON_5 +# 2515,WATERMELON_6 +# 2516,WATERMELON_7 +# 2517,WATERMELON_8 +# 2518,WATERMELON_9 +# 2519,WATERMELON_10 +# 2520,WATERMELON_11 +# 2521,WATERMELON_12 +# 2522,WATERMELON_13 +# 2523,WATERMELON_14 +# 2524,WATERMELON_15 +# 2525,WATERMELON_16 +# 2526,E_BANDIT +# 2527,ME_ANOPHELES +# 2528,FACEWORM +# 2529,FACEWORM_QUEEN +# 2530,FACEWORM_DARK +# 2531,VENOM_BUG +# 2532,FACEWORM_QUEEN_R +# 2533,FACEWORM_QUEEN_G +# 2534,FACEWORM_QUEEN_B +# 2535,FACEWORM_QUEEN_Y +# 2536,HIDDEN_MOB3 +# 2537,HIDDEN_MOB4 +# 2538,E_KING_PORING +# 2539,HIDDEN_MOB5 +# 2540,FACEWORM_EGG +# 2541,FACEWORM_LARVA +# 2542,IRENE_ELDER +# 2543,PAYONSOLDIER +# 2544,PAYONSOLDIER2 +# 2545,GUARDDOG +# 2546,GUARDDOG2 +# 2547,MER_GARM_BABY +# 2548,MER_HILLSRION +# 2549,GEFFEN_MAGE_1 +# 2550,GEFFEN_MAGE_2 +# 2551,GEFFEN_MAGE_3_1 +# 2552,GEFFEN_MAGE_3_2 +# 2553,GEFFEN_MAGE_3_3 +# 2554,GEFFEN_MAGE_4 +# 2555,GEFFEN_MAGE_5 +# 2556,GEFFEN_MAGE_6 +# 2557,GEFFEN_MAGE_7 +# 2558,GEFFEN_MAGE_8 +# 2559,GEFFEN_MAGE_9 +# 2560,GEFFEN_MAGE_10 +# 2561,GEFFEN_MAGE_11 +# 2562,GEFFEN_MAGE_12 +# 2563,FEI_KANABIAN +# 2564,GEFFEN_FENRIR +# 2565,ALPHONSE +# 2566,ALPHONSE_JR +# 2567,E_GEFFEN_MAGE_3_2 +# 2568,E_GEFFEN_MAGE_3_3 +# 2569,G_ANOPHELES +# 2570,G_BREEZE +# 2571,G_BUTOIJO +# 2572,G_CARAMEL +# 2573,G_CHONCHON +# 2574,G_CIVIL_SERVANT +# 2575,G_COCO +# 2576,G_CREAMY +# 2577,G_FABRE +# 2578,G_HORN +# 2579,G_HYLOZOIST +# 2580,G_KAHO +# 2581,G_LUDE +# 2582,G_LUNATIC +# 2583,G_MARTIN +# 2584,G_MINERAL +# 2585,G_MOLE +# 2586,G_NERAID +# 2587,G_OBSIDIAN +# 2588,G_PITMAN +# 2589,G_POPORING +# 2590,G_ROCKER +# 2591,G_SAVAGE +# 2592,G_SIORAVA +# 2593,G_SIROMA +# 2594,G_SNOWIER +# 2595,G_STAINER +# 2596,G_STAPO +# 2597,G_STEEL_CHONCHON +# 2598,G_UNGOLIANT +# 2599,G_WILD_RIDER +# 2600,G_WOLF +# 2601,G_YOYO +# 2602,G_ZIPPER_BEAR +# 2603,C1_ZOMBIE_SLAUGHTER +# 2604,C2_ZOMBIE_PRISONER +# 2605,C3_ZOMBIE_MASTER +# 2606,C4_ZOMBIE +# 2607,C5_ZAKUDAM +# 2608,C1_YOYO +# 2609,C2_YOYO +# 2610,C3_WORM_TAIL +# 2611,C4_WOOTAN_FIGHTER +# 2612,C5_WOOD_GOBLIN +# 2613,C1_WOLF +# 2614,C2_WIND_GHOST +# 2615,C3_WILOW +# 2616,C4_WILD_ROSE +# 2617,C5_WICKED_NYMPH +# 2618,C2_WHISPER +# 2619,C3_WEAK_SKELETON +# 2620,C4_WANDER_MAN +# 2621,C5_VIOLY +# 2622,C1_VIOLY +# 2623,C2_VIOLY +# 2624,C3_VENOMOUS +# 2625,C4_VENATU_1 +# 2626,C5_VAVAYAGA +# 2627,C1_VANBERK +# 2628,C2_VADON +# 2629,C3_UNGOLIANT +# 2630,C4_TOUCAN +# 2631,C5_TIYANAK +# 2632,C2_THIEF_BUG +# 2633,C3_THIEF_BUG +# 2634,C4_THIEF_BUG +# 2635,C5_THARA_FROG +# 2636,C1_TEDDY_BEAR +# 2637,C2_TATACHO +# 2638,C3_TAROU +# 2639,C4_TAMRUAN +# 2640,C5_STING +# 2641,C1_STEM_WORM +# 2642,C2_STEEL_CHONCHON +# 2643,C3_STAPO +# 2644,C4_STALACTIC_GOLEM +# 2645,C5_STAINER +# 2646,C1_SPORE +# 2647,C2_SOLIDER +# 2648,C3_SOLDIER_SKELETON +# 2649,C4_SOLDIER_SKELETON +# 2650,C5_SOLACE +# 2651,C1_SOHEE +# 2652,C2_SNOWIER +# 2653,C3_SNAKE +# 2654,C4_SMOKIE +# 2655,C5_SLEEPER +# 2656,C1_SLEEPER +# 2657,C2_SKOGUL +# 2658,C3_SKELETON_GENERAL +# 2659,C4_SKELETON_GENERAL +# 2660,C5_SKEL_WORKER +# 2661,C1_SIROMA +# 2662,C2_SIDE_WINDER +# 2663,C3_SIDE_WINDER +# 2664,C4_SHINOBI +# 2665,C5_SHELTER +# 2666,C1_SHELLFISH +# 2667,C2_SHECIL +# 2668,C3_SEE_OTTER +# 2669,C4_SEDORA +# 2670,C5_SCORPION +# 2671,C1_SAVAGE_BABE +# 2672,C2_SAVAGE +# 2673,C3_SAVAGE +# 2674,C4_SAND_MAN +# 2675,C5_SALAMANDER +# 2676,C1_SAILOR_SKELETON +# 2677,C2_ROWEEN +# 2678,C3_RODA_FROG +# 2679,C4_RODA_FROG +# 2680,C5_ROCKER +# 2681,C1_RIDEWORD +# 2682,C2_RIDEWORD +# 2683,C3_RICE_CAKE_BOY +# 2684,C4_RETRIBUTION +# 2685,C5_RETRIBUTION +# 2686,C1_RETRIBUTION +# 2687,C2_REQUIEM +# 2688,C3_REMOVAL +# 2689,C5_RED_ERUMA +# 2690,C1_RAYDRIC +# 2691,C2_RAYDRIC +# 2692,C3_RAWREL +# 2693,C4_RAKE_SCARABA +# 2694,C5_RAGGLER +# 2695,C1_RAFFLESIA +# 2696,C3_PORING +# 2697,C4_PORING +# 2698,C5_PORING +# 2699,C1_PORING +# 2700,C2_PORCELLIO +# 2701,C3_POPORING +# 2702,C4_POPORING +# 2703,C5_POPORING +# 2704,C1_POISON_TOAD +# 2705,C2_POISON_SPORE +# 2706,C3_PLASMA_Y +# 2707,C4_PLANKTON +# 2708,C5_PITMAN +# 2709,C1_PIRANHA +# 2710,C2_PINGUICULA_D +# 2711,C3_PINGUICULA +# 2712,C4_PICKY_ +# 2713,C5_PHEN +# 2714,C1_PETIT +# 2715,C2_PETIT +# 2716,C3_PENOMENA +# 2717,C4_PENOMENA +# 2718,C5_PECOPECO +# 2719,C1_PASANA +# 2720,C2_PARASITE +# 2721,C3_OWL_DUKE +# 2722,C4_ORK_WARRIOR +# 2723,C5_ORC_ZOMBIE +# 2724,C1_ORC_SKELETON +# 2725,C2_ORC_LADY +# 2726,C3_OBSERVATION +# 2727,C4_NOXIOUS +# 2728,C5_NOVUS +# 2729,C1_NOVUS +# 2730,C2_NOVUS +# 2731,C3_NOVUS +# 2732,C4_NIGHTMARE_TERROR +# 2733,C5_NG_WRAITH_DEAD +# 2734,C1_NG_WANDER_MAN +# 2735,C2_NEPENTHES +# 2736,C3_NECROMANCER +# 2737,C4_MYSTCASE +# 2738,C5_MUSCIPULAR +# 2739,C1_MUMMY +# 2740,C2_MUMMY +# 2741,C3_MUKA +# 2742,C4_MOROCC_1 +# 2743,C5_MOROCC_1 +# 2744,C1_MOROCC_1 +# 2745,C2_MOLE +# 2746,C3_MIYABI_NINGYO +# 2747,C4_MINOROUS +# 2748,C5_MINOROUS +# 2749,C1_MINOROUS +# 2750,C2_MINERAL +# 2751,C3_MIMING +# 2752,C4_MIMIC +# 2753,C5_MIMIC +# 2754,C1_METALLER +# 2755,C2_METALING +# 2756,C3_METALING +# 2757,C4_MERMAN +# 2758,C5_MENBLATT +# 2759,C1_MEDUSA +# 2760,C2_MARTIN +# 2761,C3_MARIONETTE +# 2762,C4_MARIN +# 2763,C5_MARDUK +# 2764,C1_MANTIS +# 2765,C2_MANDRAGORA +# 2766,C3_MANANANGGAL +# 2767,C4_MAJORUROS +# 2768,C5_MAGNOLIA +# 2769,C1_MAGMARING +# 2770,C2_LUNATIC +# 2771,C3_LUNATIC +# 2772,C4_LUDE +# 2773,C5_LUCIOLA_VESPA +# 2774,C1_LOLI_RURI +# 2775,C2_LIVE_PEACH_TREE +# 2776,C3_LITTLE_PORING +# 2777,C4_LITTLE_FATUM +# 2778,C5_LI_ME_MANG_RYANG +# 2779,C1_LES +# 2780,C2_LEIB_OLMAI +# 2781,C3_LEAF_CAT +# 2782,C4_L_WHIKEBAIN +# 2783,C5_L_EREMES +# 2784,C1_KOBOLD_ARCHER +# 2785,C2_KOBOLD_1 +# 2786,C3_KNOCKER +# 2787,C4_KIND_OF_BEETLE +# 2788,C5_KASA +# 2789,C1_KARAKASA +# 2790,C2_ISIS +# 2791,C3_ISILLA +# 2792,C4_INJUSTICE +# 2793,C5_INCREASE_SOIL +# 2794,C1_ICE_TITAN +# 2795,C2_IARA +# 2796,C3_HYEGUN +# 2797,C4_HUNTER_FLY +# 2798,C5_HORNET +# 2799,C1_HORN_SCARABA +# 2800,C2_HORN +# 2801,C3_HODREMLIN +# 2802,C4_HODE +# 2803,C5_HILL_WIND_1 +# 2804,C1_HILL_WIND_1 +# 2805,C2_HIGH_ORC +# 2806,C3_HARPY +# 2807,C4_HARPY +# 2808,C5_GREEN_IGUANA +# 2809,C1_GREATEST_GENERAL +# 2810,C2_GRAND_PECO +# 2811,C3_GRAND_PECO +# 2812,C4_GOLEM +# 2813,C5_GOBLIN_1 +# 2814,C1_GOBLIN_1 +# 2815,C2_GOAT +# 2816,C3_GOAT +# 2817,C4_GLD_KOBOLD_2 +# 2818,C5_GLD_KOBOLD_2 +# 2819,C1_GLD_DARK_SHADOW +# 2820,C2_GLD_DARK_SHADOW +# 2821,C3_GIANT_HONET +# 2822,C4_GHOUL +# 2823,C5_GHOUL +# 2824,C1_GEOGRAPHER +# 2825,C2_GEOGRAPHER +# 2826,C3_GARGOYLE +# 2827,C4_GARGOYLE +# 2828,C5_GALION +# 2829,C1_FUR_SEAL +# 2830,C2_FREEZER +# 2831,C3_FREEZER +# 2832,C4_FERUS_ +# 2833,C5_FARMILIAR +# 2834,C1_FAKE_ANGEL +# 2835,C2_FABRE +# 2836,C3_FABRE +# 2837,C4_EXPLOSION +# 2838,C5_EVIL_DRUID +# 2839,C1_ELDER_WILOW +# 2840,C2_ELDER_WILOW +# 2841,C3_ECHIO +# 2842,C4_DUSTINESS +# 2843,C1_DRYAD +# 2844,C2_DROSERA +# 2845,C3_DROPS +# 2846,C4_DRILLER +# 2847,C5_DRAINLIAR +# 2848,C1_DRAGON_TAIL +# 2849,C2_DRACO +# 2850,C3_DOLOMEDES +# 2851,C4_DOKEBI +# 2852,C5_DISGUISE +# 2853,C1_DIMIK_1 +# 2854,C2_DEVIRUCHI +# 2855,C3_DESERT_WOLF_B +# 2856,C4_DESERT_WOLF_B +# 2857,C5_DENIRO +# 2858,C1_DEATHWORD +# 2859,C2_DEATHWORD +# 2860,C3_DEATHWORD +# 2861,C4_DARK_PRIEST +# 2862,C5_DANCING_DRAGON +# 2863,C1_CREAMY +# 2864,C2_CORNUTUS +# 2865,C3_COOKIE +# 2866,C4_CONSTANT +# 2867,C5_COMODO +# 2868,C1_COCO +# 2869,C2_COCO +# 2870,C3_CLOCK +# 2871,C4_CLOCK +# 2872,C5_CHONCHON +# 2873,C1_CENTIPEDE +# 2874,C2_CENERE +# 2875,C3_CELIA +# 2876,C4_CATERPILLAR +# 2877,C5_CARAT +# 2878,C1_CARAMEL +# 2879,C2_BUNGISNGIS +# 2880,C3_BREEZE +# 2881,C4_BREEZE +# 2882,C5_BRADIUM_GOLEM +# 2883,C1_BLOOD_BUTTERFLY +# 2884,C3_BIGFOOT +# 2885,C4_BATHORY +# 2886,C5_BANSHEE_MASTER +# 2887,C1_BANSHEE +# 2888,C2_BANASPATY +# 2889,C3_ASSULTER +# 2890,C4_ARGOS +# 2891,C5_ARGIOPE +# 2892,C1_ARGIOPE +# 2893,C2_ARCLOUSE +# 2894,C3_ARCLOUSE +# 2895,C4_APOCALIPS +# 2896,C5_ANTLER_SCARABA +# 2897,C1_ANTIQUE_BOOK +# 2898,C2_ANTIQUE_BOOK +# 2899,C4_ANOLIAN +# 2900,C5_ANGRA_MANTIS +# 2901,C1_ANGRA_MANTIS +# 2902,C2_ANDRE +# 2903,C3_ANCIENT_MIMIC +# 2904,C4_ANACONDAQ +# 2905,C5_AMBERNITE +# 2906,C1_ALNOLDI +# 2907,C2_ALLIGATOR +# 2908,C3_ALIZA +# 2909,C4_ALICEL +# 2910,C5_ALARM +# 2911,C1_AGAV +# 2912,C2_ACIDUS_ +# 2913,C3_ACIDUS_ +# 2914,E_GEFFEN_MAGE_3_1 +# 2915,HIDDEN_MOB6 +# 2916,BIG_BEN +# 2917,BIG_BELL +# 2918,TIME_KEEPER +# 2919,NEO_PUNK +# 2920,ARC_ELDER +# 2921,OWL_VISCOUNT +# 2922,G_OWL_VISCOUNT +# 2923,OWL_MARQUEES +# 2924,T_ELDER_WILOW +# 2925,T_WILOW +# 2926,T_HARPY +# 2927,T_MINERAL +# 2928,T_GIBBET +# 2929,T_PLASMA_G +# 2930,T_SOLACE +# 2931,T_METALING +# 2932,T_POPORING +# 2933,T_DEVILING +# 2934,T_ARCHANGELING +# 2935,T_EVIL_CLOUD_HERMIT +# 2936,E_GHOSTRING +# 2937,M_LOKI +# 2938,MM_MAGIC_SEAL +# 2939,MM_EVIL_SHADOW1 +# 2940,MM_EVIL_SHADOW2 +# 2941,MM_EVIL_SHADOW3 +# 2942,MM_EVIL_FANATICS +# 2943,MM_ICE_MINE +# 2944,J_HORNET +# 2945,J_MUMMY +# 2946,J_ANUBIS +# 2947,J_EGGYRA +# 2948,CURSED_SOLDIER +# 2949,CURSED_SENTINEL +# 2950,BROKEN_MIND +# 2951,FLOATING_WORD +# 2952,LIKE_LOVE +# 2953,CURSED_MEMORY +# 2954,COLORLESS_VOW +# 2955,OLD_FRIENDSHIP +# 2956,SWEET_SLAUGHTER +# 2957,FORGOTTEN_NAME +# 2958,FATAL_DAYS +# 2959,TORTUROUS_REDEEMER +# 2960,MM_FLAMECROSS +# 2961,E_TORTUROUS_REDEEMER +# 2962,E_DEVILING +# 2963,WOODIE +# 2964,EXP_1000 +# 2965,TW_APOCALIPS_H +# 2966,TW_B_EREMES +# 2967,TW_B_HARWORD +# 2968,TW_B_SEYREN +# 2969,TW_BAPHOMET2 +# 2970,TW_DARK_LORD +# 2971,TW_DARK_SNAKE_LORD +# 2972,TW_DOPPELGANGER +# 2973,TW_DRACULA +# 2974,TW_EDDGA +# 2975,TW_FALLINGBISHOP +# 2976,TW_GLOOMUNDERNIGHT +# 2977,TW_IFRIT +# 2978,TW_KTULLANUX +# 2979,TW_LORD_OF_DEATH2 +# 2980,TW_MISTRESS +# 2981,TW_ORK_HERO2 +# 2982,TW_OSIRIS2 +# 2983,TW_RANDGRIS +# 2984,TW_TURTLE_GENERAL +# 2985,E_MYSTERIOUS_BUG +# 2986,J_XMAS_SMOKEY_GIFT +# 2987,XM_TREE +# 2988,XM_ANTONIO +# 2989,XM_COOKIE +# 2990,XM_CRUISER +# 2991,XM_MYSTCASE +# 2992,XM_LUDE +# 2993,XM_HYLOZOIST +# 2994,XM_MARIONETTE +# 2995,XM_TEDDY_BEAR +# 2996,XM_CELINE_KIMI +# 2997,G_XM_CELINE_KIMI +# 2998,EP14_MORS_EVENT +# 2999,EP14_MORS_BOSSA +# 3000,EP14_MORS_BOSSB +# 3001,EP14_MORS_MOB1 +# 3002,EP14_MORS_MOB2 +# 3003,EP14_MORS_MOB3 +# 3004,EP14_MORS_MOB4 +# 3005,EP14_MORS_MOB5 +# 3006,EP14_MORS_MOB6 +# 3007,EP14_MORS_DUMMY +# 3008,EP14_MORS_HIDDEN +# 3009,EP14_3_DEATH_BOSS +# 3010,EP14_3_DEATH_A_MOB1 +# 3011,EP14_3_DEATH_A_MOB2 +# 3012,EP14_3_DEATH_A_MOB3 +# 3013,EP14_3_DEATH_B_MOB1 +# 3014,EP14_3_DEATH_B_MOB2 +# 3015,EP14_3_DEATH_B_MOB3 +# 3016,EP14_3_DEATH_C_MOB1 +# 3017,EP14_3_DEATH_C_MOB2 +# 3018,EP14_3_DEATH_C_MOB3 +# 3019,CELINE_KIMI +# 3020,FIRE_CONDOR +# 3021,FIRE_SAND_MAN +# 3022,FIRE_FRILLDORA +# 3023,FIRE_GOLEM +# 3024,14_3_MERCENARY_A +# 3025,14_3_MERCENARY_B +# 3026,FIREPIT +# 3027,FULBUK +# 3028,SONIA +# 3029,GRIM_REAPER_ANKOU +# 3030,STANDING_SOUL +# 3031,MUTANT_NECROMANCER +# 3032,MUTANT_GHOUL +# 3033,MUTANT_OSIRIS +# 3034,MUTANT_ARCHER_SKELETON +# 3035,MUTANT_WRAITH_DEAD +# 3036,MUTANT_VERIT +# 3037,MUTANT_LUDE +# 3038,HIDDEN_MOB7 +# 3039,B_MOROCC_1 +# 3040,B_MOROCC_2 +# 3041,B_MOROCC_4 +# 3042,WATERMELON_17 +# 3043,WATERMELON_18 +# 3044,WATERMELON_19 +# 3045,WATERMELON_20 +# 3046,WATERMELON_21 +# 3047,WATERMELON_22 +# 3048,WATERMELON_23 +# 3049,WATERMELON_24 +# 3050,WATERMELON_25 +# 3051,WATERMELON_26 +# 3052,WATERMELON_27 +# 3053,WATERMELON_28 +# 3054,WATERMELON_29 +# 3055,WATERMELON_30 +# 3056,WATERMELON_31 +# 3057,WATERMELON_32 +# 3058,WATERMELON_33 +# 3059,EIGHT_DIVISION +# 3060,E_QUESTION_OCTOPUS +# 3061,E_ANGRY_MIMIC +# 3062,GIANT_DEVIRUCHI +# 3063,DEVIRUCHI_W +# 3064,GIANT_DEVIRUCHI_W +# 3065,E_ICE_MINE +# 3066,SNAKE_NEWYEAR +# 3067,E_ORC_WOMAN +# 3068,E_PYTHON_SKIN +# 3069,PERE1 +# 3070,PERE2 +# 3071,PERE3 +# 3072,PERE4 +# 3073,GRAND_PERE +# 3074,TIMEHOLDER +# 3075,WA_TREASURE +# 3076,WA_MONSTER_1 +# 3077,WA_MONSTER_2 +# 3078,WA_MONSTER_3 +# 3079,WA_MONSTER_4 +# 3080,WA_MONSTER_5 +# 3081,WA_MONSTER_6 +# 3082,WA_MONSTER_7 +# 3083,WA_MONSTER_8 +# 3084,WA_MONSTER_9 +# 3085,WA_MONSTER_10 +# 3086,WA_MERCENARY +# 3087,M_NYDHOG +# 3088,MM_BRINARANEA_BABY +# 3089,MM_LOCO_KASA +# 3090,MM_LOCO_SALAMANDER +# 3091,MM_BRINARANEA +# 3092,MM_MUSPELLSKOLL +# 3093,MM_BRINARANEA_CORE +# 3094,MM_MUSPELLSKOLL_CORE +# 3095,MM_GOD_SHADOW +# 3096,MM_MOROCC_KID +# 3097,MM_MOROCC_ADT +# 3098,MM_MOROCC_ORIGIN +# 3099,MM_MOROCC_REST +# 3100,MM_MANA_BLACK +# 3101,MM_MANA_WHITE +# 3102,MM_MANA_RED +# 3103,MM_MANA_YELLOW +# 3104,MM_MANA_BLUE +# 3105,MM_GB_MOROCC_1 +# 3106,MM_GB_MOROCC_4 +# 3107,E_EASTER_BUNNY +# 3108,JITTERBUG1 +# 3109,JITTERBUG2 + diff --git a/sql-files/upgrades/2014-01-04--16-47.sql b/sql-files/upgrades/2014-01-04--16-47.sql new file mode 100644 index 000000000..a60ec1d24 --- /dev/null +++ b/sql-files/upgrades/2014-01-04--16-47.sql @@ -0,0 +1,61 @@ +#1388854043 +ALTER TABLE `mapreg` ADD PRIMARY KEY (`varname`, `index`); +ALTER TABLE `mapreg` DROP INDEX `varname`; +ALTER TABLE `mapreg` DROP INDEX `index`; +ALTER TABLE `mapreg` MODIFY `varname` varchar(32) BINARY NOT NULL; +CREATE TABLE IF NOT EXISTS `acc_reg_num_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` int(11) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; +CREATE TABLE IF NOT EXISTS `acc_reg_str_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` varchar(254) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; +CREATE TABLE IF NOT EXISTS `char_reg_num_db` ( + `char_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` int(11) NOT NULL default '0', + PRIMARY KEY (`char_id`,`key`,`index`), + KEY `char_id` (`char_id`) +) ENGINE=MyISAM; +CREATE TABLE IF NOT EXISTS `char_reg_str_db` ( + `char_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` varchar(254) NOT NULL default '0', + PRIMARY KEY (`char_id`,`key`,`index`), + KEY `char_id` (`char_id`) +) ENGINE=MyISAM; +CREATE TABLE IF NOT EXISTS `global_acc_reg_num_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` int(11) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; +CREATE TABLE IF NOT EXISTS `global_acc_reg_str_db` ( + `account_id` int(11) unsigned NOT NULL default '0', + `key` varchar(32) BINARY NOT NULL default '', + `index` int(11) unsigned NOT NULL default '0', + `value` varchar(254) NOT NULL default '0', + PRIMARY KEY (`account_id`,`key`,`index`), + KEY `account_id` (`account_id`) +) ENGINE=MyISAM; +INSERT INTO `acc_reg_num_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 2 AND `str` NOT LIKE '%$'; +INSERT INTO `acc_reg_str_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 2 AND `str` LIKE '%$'; +INSERT INTO `char_reg_num_db` (`char_id`, `key`, `index`, `value`) SELECT `char_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 3 AND `str` NOT LIKE '%$'; +INSERT INTO `char_reg_str_db` (`char_id`, `key`, `index`, `value`) SELECT `char_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 3 AND `str` LIKE '%$'; +INSERT INTO `global_acc_reg_num_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 1 AND `str` NOT LIKE '%$'; +INSERT INTO `global_acc_reg_str_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 1 AND `str` LIKE '%$'; +#DROP TABLE `global_reg_value`; +INSERT INTO `sql_updates` (`timestamp`) VALUES (1388854043);
\ No newline at end of file diff --git a/sql-files/upgrades/2014-01-06--17-22.sql b/sql-files/upgrades/2014-01-06--17-22.sql new file mode 100644 index 000000000..0ba9cb69f --- /dev/null +++ b/sql-files/upgrades/2014-01-06--17-22.sql @@ -0,0 +1,16 @@ +#1389028967 +CREATE TABLE IF NOT EXISTS `autotrade_merchants` ( + `account_id` int(11) NOT NULL default '0', + `char_id` int(11) NOT NULL default '0', + `sex` tinyint(2) NOT NULL default '0', + `title` varchar(80) NOT NULL default 'Buy From Me!', + PRIMARY KEY (`account_id`,`char_id`) +) ENGINE=MyISAM; +CREATE TABLE IF NOT EXISTS `autotrade_data` ( + `char_id` int(11) NOT NULL default '0', + `itemkey` int(11) NOT NULL default '0', + `amount` int(11) NOT NULL default '0', + `price` int(11) NOT NULL default '0', + PRIMARY KEY (`char_id`,`itemkey`) +) ENGINE=MyISAM; +INSERT INTO `sql_updates` (`timestamp`) VALUES (1389028967); diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt index 0c4ac87e5..bf404d919 100644 --- a/sql-files/upgrades/index.txt +++ b/sql-files/upgrades/index.txt @@ -15,4 +15,6 @@ 2013-11-15--19-57.sql 2013-11-16--07-49.sql 2013-11-18--08-23.sql -2013-12-24--00-15.sql
\ No newline at end of file +2013-12-24--00-15.sql +2014-01-04--16-47.sql +2014-01-06--17-22.sql
\ No newline at end of file diff --git a/src/char/char.c b/src/char/char.c index 8d7ff1ab4..a6588dc09 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -45,7 +45,6 @@ char inventory_db[256] = "inventory"; char charlog_db[256] = "charlog"; char storage_db[256] = "storage"; char interlog_db[256] = "interlog"; -char reg_db[256] = "global_reg_value"; char skill_db[256] = "skill"; char memo_db[256] = "memo"; char guild_db[256] = "guild"; @@ -71,6 +70,10 @@ char ragsrvinfo_db[256] = "ragsrvinfo"; char elemental_db[256] = "elemental"; char interreg_db[32] = "interreg"; char account_data_db[256] = "account_data"; +char acc_reg_num_db[32] = "acc_reg_num_db"; +char acc_reg_str_db[32] = "acc_reg_str_db"; +char char_reg_str_db[32] = "char_reg_str_db"; +char char_reg_num_db[32] = "char_reg_num_db"; // show loading/saving messages int save_log = 1; @@ -500,7 +503,7 @@ int mmo_char_tosql(int char_id, struct mmo_charstatus* p) strcat(save_status, " status"); } - if( p->bank_vault != cp->bank_vault || p->mod_exp != cp->mod_exp || p->mod_drop != cp->mod_drop || p->mod_death != p->mod_death ) { + if( p->bank_vault != cp->bank_vault || p->mod_exp != cp->mod_exp || p->mod_drop != cp->mod_drop || p->mod_death != cp->mod_death ) { if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`bank_vault`,`base_exp`,`base_drop`,`base_death`) VALUES ('%d','%d','%d','%d','%d')",account_data_db,p->account_id,p->bank_vault,p->mod_exp,p->mod_drop,p->mod_death) ) { Sql_ShowDebug(sql_handle); errors++; @@ -1793,7 +1796,9 @@ int delete_char_sql(int char_id) Sql_ShowDebug(sql_handle); /* delete character registry */ - if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `type`=3 AND `char_id`='%d'", reg_db, char_id) ) + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id`='%d'", char_reg_str_db, char_id) ) + Sql_ShowDebug(sql_handle); + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id`='%d'", char_reg_num_db, char_id) ) Sql_ShowDebug(sql_handle); /* delete skills */ @@ -2270,7 +2275,7 @@ int parse_fromlogin(int fd) { // acknowledgement of account authentication request case 0x2713: - if (RFIFOREST(fd) < 29) + if (RFIFOREST(fd) < 33) return 0; { int account_id = RFIFOL(fd,2); @@ -2282,7 +2287,8 @@ int parse_fromlogin(int fd) { uint32 version = RFIFOL(fd,20); uint8 clienttype = RFIFOB(fd,24); int group_id = RFIFOL(fd,25); - RFIFOSKIP(fd,29); + unsigned int expiration_time = RFIFOL(fd, 29); + RFIFOSKIP(fd,33); if( session_isActive(request_id) && (sd=(struct char_session_data*)session[request_id]->session_data) && !sd->auth && sd->account_id == account_id && sd->login_id1 == login_id1 && sd->login_id2 == login_id2 && sd->sex == sex ) @@ -2300,6 +2306,14 @@ int parse_fromlogin(int fd) { WFIFOSET(client_fd,3); break; } + /* the client will already deny this request, this check is to avoid someone bypassing. */ + if( char_server_type == CST_PAYING && (time_t)expiration_time < time(NULL) ) { + WFIFOHEAD(client_fd,3); + WFIFOW(client_fd,0) = 0x6c; + WFIFOB(client_fd,2) = 0;// rejected from server + WFIFOSET(client_fd,3); + break; + } char_auth_ok(client_fd, sd); break; case 1:// auth failed @@ -2451,17 +2465,12 @@ int parse_fromlogin(int fd) { break; // reply to an account_reg2 registry request - case 0x2729: + case 0x3804: if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2)) return 0; - - { //Receive account_reg2 registry, forward to map servers. - unsigned char buf[13+ACCOUNT_REG2_NUM*sizeof(struct global_reg)]; - memcpy(buf,RFIFOP(fd,0), RFIFOW(fd,2)); - WBUFW(buf,0) = 0x3804; //Map server can now receive all kinds of reg values with the same packet. [Skotlex] - mapif_sendall(buf, WBUFW(buf,2)); + //Receive account_reg2 registry, forward to map servers. + mapif_sendall(RFIFOP(fd, 0), RFIFOW(fd,2)); RFIFOSKIP(fd, RFIFOW(fd,2)); - } break; // State change of account/ban notification (from login-server) @@ -2594,21 +2603,76 @@ int request_accreg2(int account_id, int char_id) } return 0; } - -//Send packet forward to login-server for account saving -int save_accreg2(unsigned char* buf, int len) -{ - if (login_fd > 0) { - WFIFOHEAD(login_fd,len+4); - memcpy(WFIFOP(login_fd,4), buf, len); - WFIFOW(login_fd,0) = 0x2728; - WFIFOW(login_fd,2) = len+4; - WFIFOSET(login_fd,len+4); - return 1; +/** + * Handles global account reg saving that continues with global_accreg_to_login_add and global_accreg_to_send + **/ +void global_accreg_to_login_start (int account_id, int char_id) { + WFIFOHEAD(login_fd, 60000 + 300); + WFIFOW(login_fd,0) = 0x2728; + WFIFOW(login_fd,2) = 14; + WFIFOL(login_fd,4) = account_id; + WFIFOL(login_fd,8) = char_id; + WFIFOW(login_fd,12) = 0;/* count */ +} +/** + * Completes global account reg saving that starts global_accreg_to_login_start and continues with global_accreg_to_login_add + **/ +void global_accreg_to_login_send (void) { + WFIFOSET(login_fd, WFIFOW(login_fd,2)); +} +/** + * Handles global account reg saving that starts global_accreg_to_login_start and ends with global_accreg_to_send + **/ +void global_accreg_to_login_add (const char *key, unsigned int index, intptr_t val, bool is_string) { + int nlen = WFIFOW(login_fd, 2); + size_t len; + + len = strlen(key)+1; + + WFIFOB(login_fd, nlen) = (unsigned char)len;/* won't be higher; the column size is 32 */ + nlen += 1; + + safestrncpy((char*)WFIFOP(login_fd,nlen), key, len); + nlen += len; + + WFIFOL(login_fd, nlen) = index; + nlen += 4; + + if( is_string ) { + WFIFOB(login_fd, nlen) = val ? 2 : 3; + nlen += 1; + + if( val ) { + char *sval = (char*)val; + len = strlen(sval)+1; + + WFIFOB(login_fd, nlen) = (unsigned char)len;/* won't be higher; the column size is 254 */ + nlen += 1; + + safestrncpy((char*)WFIFOP(login_fd,nlen), sval, len); + nlen += len; + } + + } else { + WFIFOB(login_fd, nlen) = val ? 0 : 1; + nlen += 1; + + if( val ) { + WFIFOL(login_fd, nlen) = (int)val; + nlen += 4; + } + + } + + WFIFOW(login_fd,12) += 1; + + WFIFOW(login_fd, 2) = nlen; + if( WFIFOW(login_fd, 2) > 60000 ) { + int account_id = WFIFOL(login_fd,4), char_id = WFIFOL(login_fd,8); + global_accreg_to_login_send(); + global_accreg_to_login_start(account_id,char_id);/* prepare next */ } - return 0; } - void char_read_fame_list(void) { int i; char* data; @@ -3070,6 +3134,7 @@ int parse_frommap(int fd) node->login_id2 = login_id2; //node->sex = 0; node->ip = ntohl(ip); + /* sounds troublesome. */ //node->expiration_time = 0; // unlimited/unknown time by default (not display in map-server) //node->gmlevel = 0; idb_put(auth_db, account_id, node); @@ -3493,14 +3558,14 @@ int parse_frommap(int fd) break; case 0x2b26: // auth request from map-server - if (RFIFOREST(fd) < 19) + if (RFIFOREST(fd) < 20) return 0; { int account_id; int char_id; int login_id1; - char sex; + char sex, standalone; uint32 ip; struct auth_node* node; struct mmo_charstatus* cd; @@ -3511,15 +3576,36 @@ int parse_frommap(int fd) login_id1 = RFIFOL(fd,10); sex = RFIFOB(fd,14); ip = ntohl(RFIFOL(fd,15)); - RFIFOSKIP(fd,19); + standalone = RFIFOB(fd, 19); + RFIFOSKIP(fd,20); node = (struct auth_node*)idb_get(auth_db, account_id); cd = (struct mmo_charstatus*)uidb_get(char_db_,char_id); - if( cd == NULL ) - { //Really shouldn't happen. + + if( cd == NULL ) { //Really shouldn't happen. mmo_char_fromsql(char_id, &char_dat, true); cd = (struct mmo_charstatus*)uidb_get(char_db_,char_id); } + + if( runflag == CHARSERVER_ST_RUNNING && cd && standalone ) { + cd->sex = sex; + + WFIFOHEAD(fd,25 + sizeof(struct mmo_charstatus)); + WFIFOW(fd,0) = 0x2afd; + WFIFOW(fd,2) = 25 + sizeof(struct mmo_charstatus); + WFIFOL(fd,4) = account_id; + WFIFOL(fd,8) = 0; + WFIFOL(fd,12) = 0; + WFIFOL(fd,16) = 0; + WFIFOL(fd,20) = 0; + WFIFOB(fd,24) = 0; + memcpy(WFIFOP(fd,25), cd, sizeof(struct mmo_charstatus)); + WFIFOSET(fd, WFIFOW(fd,2)); + + set_char_online(id, char_id, account_id); + break; + } + if( runflag == CHARSERVER_ST_RUNNING && cd != NULL && node != NULL && @@ -4004,6 +4090,14 @@ int parse_char(int fd) WFIFOSET(fd,3); break; } + /* the client will already deny this request, this check is to avoid someone bypassing. */ + if( char_server_type == CST_PAYING && (time_t)node->expiration_time < time(NULL) ) { + WFIFOHEAD(fd,3); + WFIFOW(fd,0) = 0x6c; + WFIFOB(fd,2) = 0;// rejected from server + WFIFOSET(fd,3); + break; + } idb_remove(auth_db, account_id); char_auth_ok(fd, sd); } @@ -4862,8 +4956,6 @@ void sql_config_read(const char* cfgName) safestrncpy(charlog_db, w2, sizeof(charlog_db)); else if(!strcmpi(w1,"storage_db")) safestrncpy(storage_db, w2, sizeof(storage_db)); - else if(!strcmpi(w1,"reg_db")) - safestrncpy(reg_db, w2, sizeof(reg_db)); else if(!strcmpi(w1,"skill_db")) safestrncpy(skill_db, w2, sizeof(skill_db)); else if(!strcmpi(w1,"interlog_db")) @@ -4916,6 +5008,15 @@ void sql_config_read(const char* cfgName) safestrncpy(interreg_db,w2,sizeof(interreg_db)); else if(!strcmpi(w1,"account_data_db")) safestrncpy(account_data_db,w2,sizeof(account_data_db)); + else if(!strcmpi(w1,"char_reg_num_db")) + safestrncpy(char_reg_num_db, w2, sizeof(char_reg_num_db)); + else if(!strcmpi(w1,"char_reg_str_db")) + safestrncpy(char_reg_str_db, w2, sizeof(char_reg_str_db)); + else if(!strcmpi(w1,"acc_reg_str_db")) + safestrncpy(acc_reg_str_db, w2, sizeof(acc_reg_str_db)); + else if(!strcmpi(w1,"acc_reg_num_db")) + safestrncpy(acc_reg_num_db, w2, sizeof(acc_reg_num_db)); + //support the import command, just like any other config else if(!strcmpi(w1,"import")) sql_config_read(w2); diff --git a/src/char/char.h b/src/char/char.h index c6aa1b66d..3e3774c1f 100644 --- a/src/char/char.h +++ b/src/char/char.h @@ -1,5 +1,6 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder +// Copyright (c) Hercules Dev Team, licensed under GNU GPL. +// See the LICENSE file +// Portions Copyright (c) Athena Dev Teams #ifndef _CHAR_SQL_H_ #define _CHAR_SQL_H_ @@ -68,7 +69,6 @@ int char_child(int parent_id, int child_id); int char_family(int pl1,int pl2,int pl3); int request_accreg2(int account_id, int char_id); -int save_accreg2(unsigned char* buf, int len); int login_fd; extern int char_name_option; extern char char_name_letters[]; @@ -83,7 +83,6 @@ extern char inventory_db[256]; extern char charlog_db[256]; extern char storage_db[256]; extern char interlog_db[256]; -extern char reg_db[256]; extern char skill_db[256]; extern char memo_db[256]; extern char guild_db[256]; @@ -106,6 +105,10 @@ extern char mercenary_owner_db[256]; extern char ragsrvinfo_db[256]; extern char elemental_db[256]; extern char interreg_db[32]; +extern char acc_reg_num_db[32]; +extern char acc_reg_str_db[32]; +extern char char_reg_str_db[32]; +extern char char_reg_num_db[32]; extern int db_use_sql_item_db; extern int db_use_sql_mob_db; @@ -114,4 +117,8 @@ extern int db_use_sql_mob_skill_db; extern int guild_exp_rate; extern int log_inter; +void global_accreg_to_login_start (int account_id, int char_id); +void global_accreg_to_login_send (void); +void global_accreg_to_login_add (const char *key, unsigned int index, intptr_t val, bool is_string); + #endif /* _CHAR_SQL_H_ */ diff --git a/src/char/int_guild.c b/src/char/int_guild.c index 6bd8ca568..427c57531 100644 --- a/src/char/int_guild.c +++ b/src/char/int_guild.c @@ -43,7 +43,6 @@ static bool guild_check_empty(struct guild *g); int guild_calcinfo(struct guild *g); int mapif_guild_basicinfochanged(int guild_id,int type,const void *data,int len); int mapif_guild_info(int fd,struct guild *g); -int guild_break_sub(int key,void *data,va_list ap); int inter_guild_tosql(struct guild *g,int flag); static int guild_save_timer(int tid, int64 tick, int id, intptr_t data) { diff --git a/src/char/inter.c b/src/char/inter.c index 63e1564ff..34ecebd36 100644 --- a/src/char/inter.c +++ b/src/char/inter.c @@ -42,7 +42,6 @@ char char_server_pw[32] = "ragnarok"; char char_server_db[32] = "ragnarok"; char default_codepage[32] = ""; //Feature by irmin. -static struct accreg *accreg_pt; unsigned int party_share_level = 10; // recv. packet list @@ -592,127 +591,225 @@ void mapif_parse_accinfo(int fd) { return; } -//-------------------------------------------------------- -// Save registry to sql -int inter_accreg_tosql(int account_id, int char_id, struct accreg* reg, int type) -{ - struct global_reg* r; - StringBuf buf; - int i; - - if( account_id <= 0 ) - return 0; - reg->account_id = account_id; - reg->char_id = char_id; - - //`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`) - switch( type ) - { - case 3: //Char Reg - if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `type`=3 AND `char_id`='%d'", reg_db, char_id) ) - Sql_ShowDebug(sql_handle); - account_id = 0; - break; - case 2: //Account Reg - if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `type`=2 AND `account_id`='%d'", reg_db, account_id) ) - Sql_ShowDebug(sql_handle); - char_id = 0; - break; - case 1: //Account2 Reg - ShowError("inter_accreg_tosql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n"); - return 0; - default: - ShowError("inter_accreg_tosql: Invalid type %d\n", type); - return 0; - } - - if( reg->reg_num <= 0 ) - return 0; - - StrBuf->Init(&buf); - StrBuf->Printf(&buf, "INSERT INTO `%s` (`type`,`account_id`,`char_id`,`str`,`value`) VALUES ", reg_db); - - for( i = 0; i < reg->reg_num; ++i ) { - r = ®->reg[i]; - if( r->str[0] != '\0' && r->value[0] != '\0' ) { - char str[32]; - char val[256]; - - if( i > 0 ) - StrBuf->AppendStr(&buf, ","); - - SQL->EscapeString(sql_handle, str, r->str); - SQL->EscapeString(sql_handle, val, r->value); - - StrBuf->Printf(&buf, "('%d','%d','%d','%s','%s')", type, account_id, char_id, str, val); +/** + * Handles save reg data from map server and distributes accordingly. + * + * @param val either str or int, depending on type + * @param type false when int, true otherwise + **/ +void inter_savereg(int account_id, int char_id, const char *key, unsigned int index, intptr_t val, bool is_string) { + /* to login server we go! */ + if( key[0] == '#' && key[1] == '#' ) {/* global account reg */ + global_accreg_to_login_add(key,index,val,is_string); + } else if ( key[0] == '#' ) {/* local account reg */ + if( is_string ) { + if( val ) { + if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", acc_reg_str_db, account_id, key, index, (char*)val) ) + Sql_ShowDebug(sql_handle); + } else { + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", acc_reg_str_db, account_id, key, index) ) + Sql_ShowDebug(sql_handle); + } + } else { + if( val ) { + if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%d')", acc_reg_num_db, account_id, key, index, (int)val) ) + Sql_ShowDebug(sql_handle); + } else { + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", acc_reg_num_db, account_id, key, index) ) + Sql_ShowDebug(sql_handle); + } + } + } else { /* char reg */ + if( is_string ) { + if( val ) { + if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`char_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", char_reg_str_db, char_id, key, index, (char*)val) ) + Sql_ShowDebug(sql_handle); + } else { + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", char_reg_str_db, char_id, key, index) ) + Sql_ShowDebug(sql_handle); + } + } else { + if( val ) { + if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`char_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%d')", char_reg_num_db, char_id, key, index, (int)val) ) + Sql_ShowDebug(sql_handle); + } else { + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", char_reg_num_db, char_id, key, index) ) + Sql_ShowDebug(sql_handle); + } } } - - if( SQL_ERROR == SQL->QueryStr(sql_handle, StrBuf->Value(&buf)) ) { - Sql_ShowDebug(sql_handle); - } - - StrBuf->Destroy(&buf); - - return 1; + } // Load account_reg from sql (type=2) -int inter_accreg_fromsql(int account_id,int char_id, struct accreg *reg, int type) +int inter_accreg_fromsql(int account_id,int char_id, int fd, int type) { - struct global_reg* r; char* data; size_t len; - int i; + unsigned int plen = 0; - if( reg == NULL) - return 0; - - memset(reg, 0, sizeof(struct accreg)); - reg->account_id = account_id; - reg->char_id = char_id; + switch( type ) { + case 3: //char reg + if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `char_id`='%d'", char_reg_str_db, char_id) ) + Sql_ShowDebug(sql_handle); + break; + case 2: //account reg + if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", acc_reg_str_db, account_id) ) + Sql_ShowDebug(sql_handle); + break; + case 1: //account2 reg + ShowError("inter_accreg_fromsql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n"); + return 0; + default: + ShowError("inter_accreg_fromsql: Invalid type %d\n", type); + return 0; + } + + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 1;/* is string type */ + WFIFOW(fd, 14) = 0;/* count */ + plen = 16; + + /** + * Vessel! + * + * str type + * { keyLength(B), key(<keyLength>), index(L), valLength(B), val(<valLength>) } + **/ + while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) { + + SQL->GetData(sql_handle, 0, &data, NULL); + len = strlen(data)+1; + + WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */ + plen += 1; + + safestrncpy((char*)WFIFOP(fd,plen), data, len); + plen += len; + + SQL->GetData(sql_handle, 1, &data, NULL); + + WFIFOL(fd, plen) = (unsigned int)atol(data); + plen += 4; + + SQL->GetData(sql_handle, 2, &data, NULL); + len = strlen(data)+1; + + WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 254 */ + plen += 1; + + safestrncpy((char*)WFIFOP(fd,plen), data, len); + plen += len; + + WFIFOW(fd, 14) += 1; + + if( plen > 60000 ) { + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); + + /* prepare follow up */ + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 1;/* is string type */ + WFIFOW(fd, 14) = 0;/* count */ + plen = 16; + } + } + + /* mark & go. */ + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); - //`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`) - switch( type ) - { - case 3: //char reg - if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `str`, `value` FROM `%s` WHERE `type`=3 AND `char_id`='%d'", reg_db, char_id) ) - Sql_ShowDebug(sql_handle); - break; - case 2: //account reg - if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `str`, `value` FROM `%s` WHERE `type`=2 AND `account_id`='%d'", reg_db, account_id) ) - Sql_ShowDebug(sql_handle); - break; - case 1: //account2 reg - ShowError("inter_accreg_fromsql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n"); - return 0; - default: - ShowError("inter_accreg_fromsql: Invalid type %d\n", type); - return 0; + SQL->FreeResult(sql_handle); + + switch( type ) { + case 3: //char reg + if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `char_id`='%d'", char_reg_num_db, char_id) ) + Sql_ShowDebug(sql_handle); + break; + case 2: //account reg + if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", acc_reg_num_db, account_id) ) + Sql_ShowDebug(sql_handle); + break; + case 1: //account2 reg + ShowError("inter_accreg_fromsql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n"); + return 0; } - for( i = 0; i < MAX_REG_NUM && SQL_SUCCESS == SQL->NextRow(sql_handle); ++i ) - { - r = ®->reg[i]; - // str - SQL->GetData(sql_handle, 0, &data, &len); - memcpy(r->str, data, min(len, sizeof(r->str))); - // value - SQL->GetData(sql_handle, 1, &data, &len); - memcpy(r->value, data, min(len, sizeof(r->value))); + + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 0;/* is int type */ + WFIFOW(fd, 14) = 0;/* count */ + plen = 16; + + /** + * Vessel! + * + * int type + * { keyLength(B), key(<keyLength>), index(L), value(L) } + **/ + while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) { + + SQL->GetData(sql_handle, 0, &data, NULL); + len = strlen(data)+1; + + WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */ + plen += 1; + + safestrncpy((char*)WFIFOP(fd,plen), data, len); + plen += len; + + SQL->GetData(sql_handle, 1, &data, NULL); + + WFIFOL(fd, plen) = (unsigned int)atol(data); + plen += 4; + + SQL->GetData(sql_handle, 2, &data, NULL); + + WFIFOL(fd, plen) = atoi(data); + plen += 4; + + WFIFOW(fd, 14) += 1; + + if( plen > 60000 ) { + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); + + /* prepare follow up */ + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 0;/* is int type */ + WFIFOW(fd, 14) = 0;/* count */ + plen = 16; + } } - reg->reg_num = i; + + /* mark as complete & go. */ + WFIFOB(fd, 12) = type; + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); + SQL->FreeResult(sql_handle); return 1; } -// Initialize -int inter_accreg_sql_init(void) -{ - CREATE(accreg_pt, struct accreg, 1); - return 0; - -} - /*========================================== * read config file *------------------------------------------*/ @@ -833,7 +930,6 @@ int inter_init_sql(const char *file) inter_homunculus_sql_init(); inter_mercenary_sql_init(); inter_elemental_sql_init(); - inter_accreg_sql_init(); inter_mail_sql_init(); inter_auction_sql_init(); @@ -857,8 +953,6 @@ void inter_final(void) inter_mail_sql_final(); inter_auction_sql_final(); - if (accreg_pt) aFree(accreg_pt); - do_final_msg(); return; } @@ -921,36 +1015,15 @@ int mapif_wis_end(struct WisData *wd, int flag) } // Account registry transfer to map-server -static void mapif_account_reg(int fd, unsigned char *src) -{ - WBUFW(src,0)=0x3804; //NOTE: writing to RFIFO - mapif_sendallwos(fd, src, WBUFW(src,2)); -} +//static void mapif_account_reg(int fd, unsigned char *src) +//{ +// WBUFW(src,0)=0x3804; //NOTE: writing to RFIFO +// mapif_sendallwos(fd, src, WBUFW(src,2)); +//} // Send the requested account_reg -int mapif_account_reg_reply(int fd,int account_id,int char_id, int type) -{ - struct accreg *reg=accreg_pt; - WFIFOHEAD(fd, 13 + 5000); - inter_accreg_fromsql(account_id,char_id,reg,type); - - WFIFOW(fd,0)=0x3804; - WFIFOL(fd,4)=account_id; - WFIFOL(fd,8)=char_id; - WFIFOB(fd,12)=type; - if(reg->reg_num==0){ - WFIFOW(fd,2)=13; - }else{ - int i,p; - for (p=13,i = 0; i < reg->reg_num && p < 5000; i++) { - p+= sprintf((char*)WFIFOP(fd,p), "%s", reg->reg[i].str)+1; //We add 1 to consider the '\0' in place. - p+= sprintf((char*)WFIFOP(fd,p), "%s", reg->reg[i].value)+1; - } - WFIFOW(fd,2)=p; - if (p>= 5000) - ShowWarning("Too many acc regs for %d:%d, not all values were loaded.\n", account_id, char_id); - } - WFIFOSET(fd,WFIFOW(fd,2)); +int mapif_account_reg_reply(int fd,int account_id,int char_id, int type) { + inter_accreg_fromsql(account_id,char_id,fd,type); return 0; } @@ -1128,34 +1201,50 @@ int mapif_parse_WisToGM(int fd) // Save account_reg into sql (type=2) int mapif_parse_Registry(int fd) { - int j,p,len, max; - struct accreg *reg=accreg_pt; - - memset(accreg_pt,0,sizeof(struct accreg)); - switch (RFIFOB(fd, 12)) { - case 3: //Character registry - max = GLOBAL_REG_NUM; - break; - case 2: //Account Registry - max = ACCOUNT_REG_NUM; - break; - case 1: //Account2 registry, must be sent over to login server. - return save_accreg2(RFIFOP(fd,4), RFIFOW(fd,2)-4); - default: - return 1; - } - for(j=0,p=13;j<max && p<RFIFOW(fd,2);j++){ - sscanf((char*)RFIFOP(fd,p), "%31c%n",reg->reg[j].str,&len); - reg->reg[j].str[len]='\0'; - p +=len+1; //+1 to skip the '\0' between strings. - sscanf((char*)RFIFOP(fd,p), "%255c%n",reg->reg[j].value,&len); - reg->reg[j].value[len]='\0'; - p +=len+1; - } - reg->reg_num=j; + int account_id = RFIFOL(fd, 4), char_id = RFIFOL(fd, 8), count = RFIFOW(fd, 12); + + if( count ) { + int cursor = 14, i; + char key[32], sval[254]; + unsigned int index; + + global_accreg_to_login_start(account_id,char_id); + + for(i = 0; i < count; i++) { + safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + cursor += RFIFOB(fd, cursor) + 1; + + index = RFIFOL(fd, cursor); + cursor += 4; + + switch (RFIFOB(fd, cursor++)) { + /* int */ + case 0: + inter_savereg(account_id,char_id,key,index,RFIFOL(fd, cursor),false); + cursor += 4; + break; + case 1: + inter_savereg(account_id,char_id,key,index,0,false); + break; + /* str */ + case 2: + safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + cursor += RFIFOB(fd, cursor) + 1; + inter_savereg(account_id,char_id,key,index,(intptr_t)sval,true); + break; + case 3: + inter_savereg(account_id,char_id,key,index,0,true); + break; + + default: + ShowError("mapif_parse_Registry: unknown type %d\n",RFIFOB(fd, cursor - 1)); + return 1; + } - inter_accreg_tosql(RFIFOL(fd,4),RFIFOL(fd,8),reg, RFIFOB(fd,12)); - mapif_account_reg(fd,RFIFOP(fd,0)); // Send updated accounts to other map servers. + } + + global_accreg_to_login_send(); + } return 0; } diff --git a/src/common/HPMi.h b/src/common/HPMi.h index 742132cde..78a3a9ab5 100644 --- a/src/common/HPMi.h +++ b/src/common/HPMi.h @@ -138,6 +138,9 @@ enum HPluginConfType { /* HPMi->addBattleConf */ #define addBattleConf(bcname,funcname) HPMi->addConf(HPMi->pid,HPCT_BATTLE,bcname,funcname) +/* HPMi->addPCGPermission */ +#define addGroupPermission(pcgname,maskptr) HPMi->addPCGPermission(HPMi->pid,pcgname,&maskptr) + /* Hercules Plugin Mananger Include Interface */ HPExport struct HPMi_interface { /* */ @@ -161,6 +164,8 @@ HPExport struct HPMi_interface { bool (*addArg) (unsigned int pluginID, char *name, bool has_param,void (*func) (char *param),void (*help) (void)); /* battle-config recv param */ bool (*addConf) (unsigned int pluginID, enum HPluginConfType type, char *name, void (*func) (const char *val)); + /* pc group permission */ + void (*addPCGPermission) (unsigned int pluginID, char *name, unsigned int *mask); } HPMi_s; #ifndef _HPM_H_ HPExport struct HPMi_interface *HPMi; diff --git a/src/common/db.c b/src/common/db.c index efe7ca8b2..8c15c0feb 100644 --- a/src/common/db.c +++ b/src/common/db.c @@ -47,6 +47,7 @@ * - create a db that organizes itself by splaying * * HISTORY: + * 2013/08/25 - Added int64/uint64 support for keys [Ind/Hercules] * 2013/04/27 - Added ERS to speed up iterator memory allocation [Ind/Hercules] * 2012/03/09 - Added enum for data types (int, uint, void*) * 2008/02/19 - Fixed db_obj_get not handling deleted entries correctly. @@ -236,10 +237,14 @@ static struct db_stats { uint32 db_uint_alloc; uint32 db_string_alloc; uint32 db_istring_alloc; + uint32 db_int64_alloc; + uint32 db_uint64_alloc; uint32 db_int_destroy; uint32 db_uint_destroy; uint32 db_string_destroy; uint32 db_istring_destroy; + uint32 db_int64_destroy; + uint32 db_uint64_destroy; // Function usage counters uint32 db_rotate_left; uint32 db_rotate_right; @@ -256,10 +261,14 @@ static struct db_stats { uint32 db_uint_cmp; uint32 db_string_cmp; uint32 db_istring_cmp; + uint32 db_int64_cmp; + uint32 db_uint64_cmp; uint32 db_int_hash; uint32 db_uint_hash; uint32 db_string_hash; uint32 db_istring_hash; + uint32 db_int64_hash; + uint32 db_uint64_hash; uint32 db_release_nothing; uint32 db_release_key; uint32 db_release_data; @@ -298,6 +307,8 @@ static struct db_stats { uint32 db_i2key; uint32 db_ui2key; uint32 db_str2key; + uint32 db_i642key; + uint32 db_ui642key; uint32 db_i2data; uint32 db_ui2data; uint32 db_ptr2data; @@ -830,10 +841,14 @@ static void db_free_unlock(DBMap_impl* db) * db_uint_cmp - Default comparator for DB_UINT databases. * * db_string_cmp - Default comparator for DB_STRING databases. * * db_istring_cmp - Default comparator for DB_ISTRING databases. * + * db_int64_cmp - Default comparator for DB_INT64 databases. * + * db_uint64_cmp - Default comparator for DB_UINT64 databases. * * db_int_hash - Default hasher for DB_INT databases. * * db_uint_hash - Default hasher for DB_UINT databases. * * db_string_hash - Default hasher for DB_STRING databases. * * db_istring_hash - Default hasher for DB_ISTRING databases. * + * db_int64_hash - Default hasher for DB_INT64 databases. * + * db_uint64_hash - Default hasher for DB_UINT64 databases. * * db_release_nothing - Releaser that releases nothing. * * db_release_key - Releaser that only releases the key. * * db_release_data - Releaser that only releases the data. * @@ -921,6 +936,51 @@ static int db_istring_cmp(DBKey key1, DBKey key2, unsigned short maxlen) } /** + * Default comparator for DB_INT64 databases. + * Compares key1 to key2. + * Return 0 if equal, negative if lower and positive if higher. + * <code>maxlen</code> is ignored. + * @param key1 Key to be compared + * @param key2 Key being compared to + * @param maxlen Maximum length of the key to hash + * @return 0 if equal, negative if lower and positive if higher + * @see DBType#DB_INT64 + * @see #DBComparator + * @see #db_default_cmp(DBType) + */ +static int db_int64_cmp(DBKey key1, DBKey key2, unsigned short maxlen) +{ + (void)maxlen;//not used + DB_COUNTSTAT(db_int64_cmp); + if (key1.i64 < key2.i64) return -1; + if (key1.i64 > key2.i64) return 1; + return 0; +} + +/** + * Default comparator for DB_UINT64 databases. + * Compares key1 to key2. + * Return 0 if equal, negative if lower and positive if higher. + * <code>maxlen</code> is ignored. + * @param key1 Key to be compared + * @param key2 Key being compared to + * @param maxlen Maximum length of the key to hash + * @return 0 if equal, negative if lower and positive if higher + * @see DBType#DB_UINT64 + * @see #DBComparator + * @see #db_default_cmp(DBType) + */ +static int db_uint64_cmp(DBKey key1, DBKey key2, unsigned short maxlen) +{ + (void)maxlen;//not used + DB_COUNTSTAT(db_uint64_cmp); + if (key1.ui64 < key2.ui64) return -1; + if (key1.ui64 > key2.ui64) return 1; + return 0; +} + + +/** * Default hasher for DB_INT databases. * Returns the value of the key as an unsigned int. * <code>maxlen</code> is ignored. @@ -931,11 +991,11 @@ static int db_istring_cmp(DBKey key1, DBKey key2, unsigned short maxlen) * @see #DBHasher * @see #db_default_hash(DBType) */ -static unsigned int db_int_hash(DBKey key, unsigned short maxlen) +static uint64 db_int_hash(DBKey key, unsigned short maxlen) { (void)maxlen;//not used DB_COUNTSTAT(db_int_hash); - return (unsigned int)key.i; + return (uint64)key.i; } /** @@ -949,11 +1009,11 @@ static unsigned int db_int_hash(DBKey key, unsigned short maxlen) * @see #DBHasher * @see #db_default_hash(DBType) */ -static unsigned int db_uint_hash(DBKey key, unsigned short maxlen) +static uint64 db_uint_hash(DBKey key, unsigned short maxlen) { (void)maxlen;//not used DB_COUNTSTAT(db_uint_hash); - return key.ui; + return (uint64)key.ui; } /** @@ -965,7 +1025,7 @@ static unsigned int db_uint_hash(DBKey key, unsigned short maxlen) * @see #DBHasher * @see #db_default_hash(DBType) */ -static unsigned int db_string_hash(DBKey key, unsigned short maxlen) +static uint64 db_string_hash(DBKey key, unsigned short maxlen) { const char *k = key.str; unsigned int hash = 0; @@ -980,7 +1040,7 @@ static unsigned int db_string_hash(DBKey key, unsigned short maxlen) break; } - return hash; + return (uint64)hash; } /** @@ -991,7 +1051,7 @@ static unsigned int db_string_hash(DBKey key, unsigned short maxlen) * @see DBType#DB_ISTRING * @see #db_default_hash(DBType) */ -static unsigned int db_istring_hash(DBKey key, unsigned short maxlen) +static uint64 db_istring_hash(DBKey key, unsigned short maxlen) { const char *k = key.str; unsigned int hash = 0; @@ -1006,7 +1066,43 @@ static unsigned int db_istring_hash(DBKey key, unsigned short maxlen) break; } - return hash; + return (uint64)hash; +} + +/** + * Default hasher for DB_INT64 databases. + * Returns the value of the key as an unsigned int. + * <code>maxlen</code> is ignored. + * @param key Key to be hashed + * @param maxlen Maximum length of the key to hash + * @return hash of the key + * @see DBType#DB_INT64 + * @see #DBHasher + * @see #db_default_hash(DBType) + */ +static uint64 db_int64_hash(DBKey key, unsigned short maxlen) +{ + (void)maxlen;//not used + DB_COUNTSTAT(db_int64_hash); + return (uint64)key.i64; +} + +/** + * Default hasher for DB_UINT64 databases. + * Just returns the value of the key. + * <code>maxlen</code> is ignored. + * @param key Key to be hashed + * @param maxlen Maximum length of the key to hash + * @return hash of the key + * @see DBType#DB_UINT64 + * @see #DBHasher + * @see #db_default_hash(DBType) + */ +static uint64 db_uint64_hash(DBKey key, unsigned short maxlen) +{ + (void)maxlen;//not used + DB_COUNTSTAT(db_uint64_hash); + return key.ui64; } /** @@ -2122,6 +2218,8 @@ static int db_obj_vdestroy(DBMap* self, DBApply func, va_list args) case DB_UINT: DB_COUNTSTAT(db_uint_destroy); break; case DB_STRING: DB_COUNTSTAT(db_string_destroy); break; case DB_ISTRING: DB_COUNTSTAT(db_istring_destroy); break; + case DB_INT64: DB_COUNTSTAT(db_int64_destroy); break; + case DB_UINT64: DB_COUNTSTAT(db_uint64_destroy); break; } #endif /* DB_ENABLE_STATS */ db_free_lock(db); @@ -2246,6 +2344,8 @@ static DBOptions db_obj_options(DBMap* self) * db_i2key - Manual cast from 'int' to 'DBKey'. * db_ui2key - Manual cast from 'unsigned int' to 'DBKey'. * db_str2key - Manual cast from 'unsigned char *' to 'DBKey'. + * db_i642key - Manual cast from 'int64' to 'DBKey'. + * db_ui642key - Manual cast from 'uin64' to 'DBKey'. * db_i2data - Manual cast from 'int' to 'DBData'. * db_ui2data - Manual cast from 'unsigned int' to 'DBData'. * db_ptr2data - Manual cast from 'void*' to 'DBData'. @@ -2272,7 +2372,9 @@ DBOptions db_fix_options(DBType type, DBOptions options) DB_COUNTSTAT(db_fix_options); switch (type) { case DB_INT: - case DB_UINT: // Numeric database, do nothing with the keys + case DB_UINT: + case DB_INT64: + case DB_UINT64: // Numeric database, do nothing with the keys return (DBOptions)(options&~(DB_OPT_DUP_KEY|DB_OPT_RELEASE_KEY)); default: @@ -2292,6 +2394,8 @@ DBOptions db_fix_options(DBType type, DBOptions options) * @see #db_uint_cmp(DBKey,DBKey,unsigned short) * @see #db_string_cmp(DBKey,DBKey,unsigned short) * @see #db_istring_cmp(DBKey,DBKey,unsigned short) + * @see #db_int64_cmp(DBKey,DBKey,unsigned short) + * @see #db_uint64_cmp(DBKey,DBKey,unsigned short) */ DBComparator db_default_cmp(DBType type) { @@ -2301,6 +2405,8 @@ DBComparator db_default_cmp(DBType type) case DB_UINT: return &db_uint_cmp; case DB_STRING: return &db_string_cmp; case DB_ISTRING: return &db_istring_cmp; + case DB_INT64: return &db_int64_cmp; + case DB_UINT64: return &db_uint64_cmp; default: ShowError("db_default_cmp: Unknown database type %u\n", type); return NULL; @@ -2316,6 +2422,8 @@ DBComparator db_default_cmp(DBType type) * @see #db_uint_hash(DBKey,unsigned short) * @see #db_string_hash(DBKey,unsigned short) * @see #db_istring_hash(DBKey,unsigned short) + * @see #db_int64_hash(DBKey,unsigned short) + * @see #db_uint64_hash(DBKey,unsigned short) */ DBHasher db_default_hash(DBType type) { @@ -2325,6 +2433,8 @@ DBHasher db_default_hash(DBType type) case DB_UINT: return &db_uint_hash; case DB_STRING: return &db_string_hash; case DB_ISTRING: return &db_istring_hash; + case DB_INT64: return &db_int64_hash; + case DB_UINT64: return &db_uint64_hash; default: ShowError("db_default_hash: Unknown database type %u\n", type); return NULL; @@ -2412,6 +2522,8 @@ DBMap* db_alloc(const char *file, const char *func, int line, DBType type, DBOpt case DB_UINT: DB_COUNTSTAT(db_uint_alloc); break; case DB_STRING: DB_COUNTSTAT(db_string_alloc); break; case DB_ISTRING: DB_COUNTSTAT(db_istring_alloc); break; + case DB_INT64: DB_COUNTSTAT(db_int64_alloc); break; + case DB_UINT64: DB_COUNTSTAT(db_uint64_alloc); break; } #endif /* DB_ENABLE_STATS */ db = ers_alloc(db_alloc_ers, struct DBMap_impl); @@ -2511,6 +2623,36 @@ DBKey db_str2key(const char *key) } /** + * Manual cast from 'int64' to the union DBKey. + * @param key Key to be casted + * @return The key as a DBKey union + * @public + */ +DBKey db_i642key(int64 key) +{ + DBKey ret; + + DB_COUNTSTAT(db_i642key); + ret.i64 = key; + return ret; +} + +/** + * Manual cast from 'uin64' to the union DBKey. + * @param key Key to be casted + * @return The key as a DBKey union + * @public + */ +DBKey db_ui642key(uint64 key) +{ + DBKey ret; + + DB_COUNTSTAT(db_ui642key); + ret.ui64 = key; + return ret; +} + +/** * Manual cast from 'int' to the struct DBData. * @param data Data to be casted * @return The data as a DBData struct @@ -2609,9 +2751,10 @@ void* db_data2ptr(DBData *data) * @see #db_final(void) */ void db_init(void) { - db_iterator_ers = ers_new(sizeof(struct DBIterator_impl),"db.c::db_iterator_ers",ERS_OPT_CLEAN); - db_alloc_ers = ers_new(sizeof(struct DBMap_impl),"db.c::db_alloc_ers",ERS_OPT_CLEAN); + db_iterator_ers = ers_new(sizeof(struct DBIterator_impl),"db.c::db_iterator_ers",ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); + db_alloc_ers = ers_new(sizeof(struct DBMap_impl),"db.c::db_alloc_ers",ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); ers_chunk_size(db_alloc_ers, 50); + ers_chunk_size(db_iterator_ers, 10); DB_COUNTSTAT(db_init); } @@ -2632,10 +2775,14 @@ void db_final(void) "DB_UINT : allocated %10u, destroyed %10u\n" "DB_STRING : allocated %10u, destroyed %10u\n" "DB_ISTRING : allocated %10u, destroyed %10u\n", + "DB_INT64 : allocated %10u, destroyed %10u\n" + "DB_UINT64 : allocated %10u, destroyed %10u\n" stats.db_int_alloc, stats.db_int_destroy, stats.db_uint_alloc, stats.db_uint_destroy, stats.db_string_alloc, stats.db_string_destroy, - stats.db_istring_alloc, stats.db_istring_destroy); + stats.db_istring_alloc, stats.db_istring_destroy, + stats.db_int64_alloc, stats.db_int64_destroy, + stats.db_uint64_alloc, stats.db_uint64_destroy,); ShowInfo(CL_WHITE"Database function counters"CL_RESET":\n" "db_rotate_left %10u, db_rotate_right %10u,\n" "db_rebalance %10u, db_rebalance_erase %10u,\n" @@ -2645,8 +2792,10 @@ void db_final(void) "db_free_lock %10u, db_free_unlock %10u,\n" "db_int_cmp %10u, db_uint_cmp %10u,\n" "db_string_cmp %10u, db_istring_cmp %10u,\n" + "db_int64_cmp %10u, db_uint64_cmp %10u,\n" "db_int_hash %10u, db_uint_hash %10u,\n" "db_string_hash %10u, db_istring_hash %10u,\n" + "db_int64_hash %10u, db_uint64_hash %10u,\n" "db_release_nothing %10u, db_release_key %10u,\n" "db_release_data %10u, db_release_both %10u,\n" "dbit_first %10u, dbit_last %10u,\n" @@ -2666,6 +2815,7 @@ void db_final(void) "db_default_release %10u, db_custom_release %10u,\n" "db_alloc %10u, db_i2key %10u,\n" "db_ui2key %10u, db_str2key %10u,\n" + "db_i642key %10u, db_ui642key %10u,\n" "db_i2data %10u, db_ui2data %10u,\n" "db_ptr2data %10u, db_data2i %10u,\n" "db_data2ui %10u, db_data2ptr %10u,\n" @@ -2678,8 +2828,10 @@ void db_final(void) stats.db_free_lock, stats.db_free_unlock, stats.db_int_cmp, stats.db_uint_cmp, stats.db_string_cmp, stats.db_istring_cmp, + stats.db_int64_cmp, stats.db_uint64_cmp, stats.db_int_hash, stats.db_uint_hash, stats.db_string_hash, stats.db_istring_hash, + stats.db_int64_hash, stats.db_uint64_hash, stats.db_release_nothing, stats.db_release_key, stats.db_release_data, stats.db_release_both, stats.dbit_first, stats.dbit_last, @@ -2699,6 +2851,7 @@ void db_final(void) stats.db_default_release, stats.db_custom_release, stats.db_alloc, stats.db_i2key, stats.db_ui2key, stats.db_str2key, + stats.db_i642key, stats.db_ui642key, stats.db_i2data, stats.db_ui2data, stats.db_ptr2data, stats.db_data2i, stats.db_data2ui, stats.db_data2ptr, @@ -2855,4 +3008,7 @@ void db_defaults(void) { DB->str2key = db_str2key; DB->ui2data = db_ui2data; DB->ui2key = db_ui2key; + DB->i642key = db_i642key; + DB->ui642key = db_ui642key; + } diff --git a/src/common/db.h b/src/common/db.h index 5f4478909..c00489b93 100644 --- a/src/common/db.h +++ b/src/common/db.h @@ -20,6 +20,7 @@ * - see what functions need or should be added to the database interface * * * * HISTORY: * + * 2013/08/25 - Added int64/uint64 support for keys * * 2012/03/09 - Added enum for data types (int, uint, void*) * * 2007/11/09 - Added an iterator to the database. * * 2.1 (Athena build #???#) - Portability fix * @@ -83,6 +84,8 @@ typedef enum DBRelease { * @param DB_UINT Uses unsigned int's for keys * @param DB_STRING Uses strings for keys. * @param DB_ISTRING Uses case insensitive strings for keys. + * @param DB_INT64 Uses int64's for keys + * @param DB_UINT64 Uses uint64's for keys * @public * @see #DBOptions * @see #DBKey @@ -96,7 +99,9 @@ typedef enum DBType { DB_INT, DB_UINT, DB_STRING, - DB_ISTRING + DB_ISTRING, + DB_INT64, + DB_UINT64, } DBType; /** @@ -145,6 +150,8 @@ typedef union DBKey { int i; unsigned int ui; const char *str; + int64 i64; + uint64 ui64; } DBKey; /** @@ -158,7 +165,7 @@ typedef union DBKey { typedef enum DBDataType { DB_DATA_INT, DB_DATA_UINT, - DB_DATA_PTR + DB_DATA_PTR, } DBDataType; /** @@ -245,7 +252,7 @@ typedef int (*DBComparator)(DBKey key1, DBKey key2, unsigned short maxlen); * @public * @see #db_default_hash(DBType) */ -typedef unsigned int (*DBHasher)(DBKey key, unsigned short maxlen); +typedef uint64 (*DBHasher)(DBKey key, unsigned short maxlen); /** * Format of the releaser used by the database system. @@ -598,65 +605,86 @@ struct DBMap { // For easy access to the common functions. -#define db_exists(db,k) ( (db)->exists((db),(k)) ) -#define idb_exists(db,k) ( (db)->exists((db),DB->i2key(k)) ) -#define uidb_exists(db,k) ( (db)->exists((db),DB->ui2key(k)) ) -#define strdb_exists(db,k) ( (db)->exists((db),DB->str2key(k)) ) +#define db_exists(db,k) ( (db)->exists((db),(k)) ) +#define idb_exists(db,k) ( (db)->exists((db),DB->i2key(k)) ) +#define uidb_exists(db,k) ( (db)->exists((db),DB->ui2key(k)) ) +#define strdb_exists(db,k) ( (db)->exists((db),DB->str2key(k)) ) +#define i64db_exists(db,k) ( (db)->exists((db),DB->i642key(k)) ) +#define ui64db_exists(db,k) ( (db)->exists((db),DB->ui642key(k)) ) // Get pointer-type data from DBMaps of various key types -#define db_get(db,k) ( DB->data2ptr((db)->get((db),(k))) ) -#define idb_get(db,k) ( DB->data2ptr((db)->get((db),DB->i2key(k))) ) -#define uidb_get(db,k) ( DB->data2ptr((db)->get((db),DB->ui2key(k))) ) -#define strdb_get(db,k) ( DB->data2ptr((db)->get((db),DB->str2key(k))) ) +#define db_get(db,k) ( DB->data2ptr((db)->get((db),(k))) ) +#define idb_get(db,k) ( DB->data2ptr((db)->get((db),DB->i2key(k))) ) +#define uidb_get(db,k) ( DB->data2ptr((db)->get((db),DB->ui2key(k))) ) +#define strdb_get(db,k) ( DB->data2ptr((db)->get((db),DB->str2key(k))) ) +#define i64db_get(db,k) ( DB->data2ptr((db)->get((db),DB->i642key(k))) ) +#define ui64db_get(db,k) ( DB->data2ptr((db)->get((db),DB->ui642key(k))) ) + // Get int-type data from DBMaps of various key types -#define db_iget(db,k) ( DB->data2i((db)->get((db),(k))) ) -#define idb_iget(db,k) ( DB->data2i((db)->get((db),DB->i2key(k))) ) -#define uidb_iget(db,k) ( DB->data2i((db)->get((db),DB->ui2key(k))) ) -#define strdb_iget(db,k) ( DB->data2i((db)->get((db),DB->str2key(k))) ) +#define db_iget(db,k) ( DB->data2i((db)->get((db),(k))) ) +#define idb_iget(db,k) ( DB->data2i((db)->get((db),DB->i2key(k))) ) +#define uidb_iget(db,k) ( DB->data2i((db)->get((db),DB->ui2key(k))) ) +#define strdb_iget(db,k) ( DB->data2i((db)->get((db),DB->str2key(k))) ) +#define i64db_iget(db,k) ( DB->data2i((db)->get((db),DB->i642key(k))) ) +#define ui64db_iget(db,k) ( DB->data2i((db)->get((db),DB->ui642key(k))) ) // Get uint-type data from DBMaps of various key types -#define db_uiget(db,k) ( DB->data2ui((db)->get((db),(k))) ) -#define idb_uiget(db,k) ( DB->data2ui((db)->get((db),DB->i2key(k))) ) -#define uidb_uiget(db,k) ( DB->data2ui((db)->get((db),DB->ui2key(k))) ) -#define strdb_uiget(db,k) ( DB->data2ui((db)->get((db),DB->str2key(k))) ) +#define db_uiget(db,k) ( DB->data2ui((db)->get((db),(k))) ) +#define idb_uiget(db,k) ( DB->data2ui((db)->get((db),DB->i2key(k))) ) +#define uidb_uiget(db,k) ( DB->data2ui((db)->get((db),DB->ui2key(k))) ) +#define strdb_uiget(db,k) ( DB->data2ui((db)->get((db),DB->str2key(k))) ) +#define i64db_uiget(db,k) ( DB->data2ui((db)->get((db),DB->i642key(k))) ) +#define ui64db_uiget(db,k) ( DB->data2ui((db)->get((db),DB->ui642key(k))) ) // Put pointer-type data into DBMaps of various key types -#define db_put(db,k,d) ( (db)->put((db),(k),DB->ptr2data(d),NULL) ) -#define idb_put(db,k,d) ( (db)->put((db),DB->i2key(k),DB->ptr2data(d),NULL) ) -#define uidb_put(db,k,d) ( (db)->put((db),DB->ui2key(k),DB->ptr2data(d),NULL) ) -#define strdb_put(db,k,d) ( (db)->put((db),DB->str2key(k),DB->ptr2data(d),NULL) ) +#define db_put(db,k,d) ( (db)->put((db),(k),DB->ptr2data(d),NULL) ) +#define idb_put(db,k,d) ( (db)->put((db),DB->i2key(k),DB->ptr2data(d),NULL) ) +#define uidb_put(db,k,d) ( (db)->put((db),DB->ui2key(k),DB->ptr2data(d),NULL) ) +#define strdb_put(db,k,d) ( (db)->put((db),DB->str2key(k),DB->ptr2data(d),NULL) ) +#define i64db_put(db,k,d) ( (db)->put((db),DB->i642key(k),DB->ptr2data(d),NULL) ) +#define ui64db_put(db,k,d) ( (db)->put((db),DB->ui642key(k),DB->ptr2data(d),NULL) ) // Put int-type data into DBMaps of various key types -#define db_iput(db,k,d) ( (db)->put((db),(k),DB->i2data(d),NULL) ) -#define idb_iput(db,k,d) ( (db)->put((db),DB->i2key(k),DB->i2data(d),NULL) ) -#define uidb_iput(db,k,d) ( (db)->put((db),DB->ui2key(k),DB->i2data(d),NULL) ) -#define strdb_iput(db,k,d) ( (db)->put((db),DB->str2key(k),DB->i2data(d),NULL) ) +#define db_iput(db,k,d) ( (db)->put((db),(k),DB->i2data(d),NULL) ) +#define idb_iput(db,k,d) ( (db)->put((db),DB->i2key(k),DB->i2data(d),NULL) ) +#define uidb_iput(db,k,d) ( (db)->put((db),DB->ui2key(k),DB->i2data(d),NULL) ) +#define strdb_iput(db,k,d) ( (db)->put((db),DB->str2key(k),DB->i2data(d),NULL) ) +#define i64db_iput(db,k,d) ( (db)->put((db),DB->i642key(k),DB->i2data(d),NULL) ) +#define ui64db_iput(db,k,d) ( (db)->put((db),DB->ui642key(k),DB->i2data(d),NULL) ) // Put uint-type data into DBMaps of various key types -#define db_uiput(db,k,d) ( (db)->put((db),(k),DB->ui2data(d),NULL) ) -#define idb_uiput(db,k,d) ( (db)->put((db),DB->i2key(k),DB->ui2data(d),NULL) ) -#define uidb_uiput(db,k,d) ( (db)->put((db),DB->ui2key(k),DB->ui2data(d),NULL) ) -#define strdb_uiput(db,k,d) ( (db)->put((db),DB->str2key(k),DB->ui2data(d),NULL) ) +#define db_uiput(db,k,d) ( (db)->put((db),(k),DB->ui2data(d),NULL) ) +#define idb_uiput(db,k,d) ( (db)->put((db),DB->i2key(k),DB->ui2data(d),NULL) ) +#define uidb_uiput(db,k,d) ( (db)->put((db),DB->ui2key(k),DB->ui2data(d),NULL) ) +#define strdb_uiput(db,k,d) ( (db)->put((db),DB->str2key(k),DB->ui2data(d),NULL) ) +#define i64db_uiput(db,k,d) ( (db)->put((db),DB->i642key(k),DB->ui2data(d),NULL) ) +#define ui64db_uiput(db,k,d) ( (db)->put((db),DB->ui642key(k),DB->ui2data(d),NULL) ) // Remove entry from DBMaps of various key types -#define db_remove(db,k) ( (db)->remove((db),(k),NULL) ) -#define idb_remove(db,k) ( (db)->remove((db),DB->i2key(k),NULL) ) -#define uidb_remove(db,k) ( (db)->remove((db),DB->ui2key(k),NULL) ) -#define strdb_remove(db,k) ( (db)->remove((db),DB->str2key(k),NULL) ) +#define db_remove(db,k) ( (db)->remove((db),(k),NULL) ) +#define idb_remove(db,k) ( (db)->remove((db),DB->i2key(k),NULL) ) +#define uidb_remove(db,k) ( (db)->remove((db),DB->ui2key(k),NULL) ) +#define strdb_remove(db,k) ( (db)->remove((db),DB->str2key(k),NULL) ) +#define i64db_remove(db,k) ( (db)->remove((db),DB->i642key(k),NULL) ) +#define ui64db_remove(db,k) ( (db)->remove((db),DB->ui642key(k),NULL) ) //These are discarding the possible vargs you could send to the function, so those //that require vargs must not use these defines. -#define db_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),(k),(f))) ) -#define idb_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->i2key(k),(f))) ) -#define uidb_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->ui2key(k),(f))) ) -#define strdb_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->str2key(k),(f))) ) +#define db_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),(k),(f))) ) +#define idb_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->i2key(k),(f))) ) +#define uidb_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->ui2key(k),(f))) ) +#define strdb_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->str2key(k),(f))) ) +#define i64db_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->i642key(k),(f))) ) +#define ui64db_ensure(db,k,f) ( DB->data2ptr((db)->ensure((db),DB->ui642key(k),(f))) ) // Database creation and destruction macros #define idb_alloc(opt) DB->alloc(__FILE__,__func__,__LINE__,DB_INT,(opt),sizeof(int)) #define uidb_alloc(opt) DB->alloc(__FILE__,__func__,__LINE__,DB_UINT,(opt),sizeof(unsigned int)) #define strdb_alloc(opt,maxlen) DB->alloc(__FILE__,__func__,__LINE__,DB_STRING,(opt),(maxlen)) #define stridb_alloc(opt,maxlen) DB->alloc(__FILE__,__func__,__LINE__,DB_ISTRING,(opt),(maxlen)) +#define i64db_alloc(opt) DB->alloc(__FILE__,__func__,__LINE__,DB_INT64,(opt),sizeof(int64)) +#define ui64db_alloc(opt) DB->alloc(__FILE__,__func__,__LINE__,DB_UINT64,(opt),sizeof(uint64)) #define db_destroy(db) ( (db)->destroy((db),NULL) ) // Other macros #define db_clear(db) ( (db)->clear((db),NULL) ) @@ -682,6 +710,8 @@ struct DBMap { * db_i2key - Manual cast from 'int' to 'DBKey'. * * db_ui2key - Manual cast from 'unsigned int' to 'DBKey'. * * db_str2key - Manual cast from 'unsigned char *' to 'DBKey'. * + * db_i642key - Manual cast from 'int64' to 'DBKey'. * + * db_ui642key - Manual cast from 'uint64' to 'DBKey'. * * db_i2data - Manual cast from 'int' to 'DBData'. * * db_ui2data - Manual cast from 'unsigned int' to 'DBData'. * * db_ptr2data - Manual cast from 'void*' to 'DBData'. * @@ -803,6 +833,22 @@ DBKey (*ui2key) (unsigned int key); DBKey (*str2key) (const char *key); /** + * Manual cast from 'int64' to the union DBKey. + * @param key Key to be casted + * @return The key as a DBKey union + * @public + */ +DBKey (*i642key) (int64 key); + +/** + * Manual cast from 'uint64' to the union DBKey. + * @param key Key to be casted + * @return The key as a DBKey union + * @public + */ +DBKey (*ui642key) (uint64 key); + +/** * Manual cast from 'int' to the struct DBData. * @param data Data to be casted * @return The data as a DBData struct @@ -882,8 +928,8 @@ struct linkdb_node { typedef void (*LinkDBFunc)(void* key, void* data, va_list args); -void linkdb_insert (struct linkdb_node** head, void *key, void* data); // d•¡‚ðl—¶‚µ‚È‚¢ -void linkdb_replace (struct linkdb_node** head, void *key, void* data); // d•¡‚ðl—¶‚·‚é +void linkdb_insert (struct linkdb_node** head, void *key, void* data); // Doesn't take into account duplicate keys +void linkdb_replace (struct linkdb_node** head, void *key, void* data); // Takes into account duplicate keys void* linkdb_search (struct linkdb_node** head, void *key); void* linkdb_erase (struct linkdb_node** head, void *key); void linkdb_final (struct linkdb_node** head); diff --git a/src/common/ers.c b/src/common/ers.c index a7dad49ab..eb351a988 100644 --- a/src/common/ers.c +++ b/src/common/ers.c @@ -45,6 +45,7 @@ #include "../common/cbasetypes.h" #include "../common/malloc.h" // CREATE, RECREATE, aMalloc, aFree #include "../common/showmsg.h" // ShowMessage, ShowError, ShowFatalError, CL_BOLD, CL_NORMAL +#include "../common/nullpo.h" #include "ers.h" #ifndef DISABLE_ERS @@ -88,6 +89,9 @@ typedef struct ers_cache // Default = ERS_BLOCK_ENTRIES, can be adjusted for performance for individual cache sizes. unsigned int ChunkSize; + // Misc options, some options are shared from the instance + enum ERSOptions Options; + // Linked list struct ers_cache *Next, *Prev; } ers_cache_t; @@ -123,12 +127,14 @@ static ers_cache_t *CacheList = NULL; static struct ers_instance_t *InstanceList = NULL; #endif -static ers_cache_t *ers_find_cache(unsigned int size) -{ +/** + * @param Options the options from the instance seeking a cache, we use it to give it a cache with matching configuration + **/ +static ers_cache_t *ers_find_cache(unsigned int size, enum ERSOptions Options) { ers_cache_t *cache; for (cache = CacheList; cache; cache = cache->Next) - if (cache->ObjectSize == size) + if ( cache->ObjectSize == size && cache->Options == ( Options & ERS_CACHE_OPTIONS ) ) return cache; CREATE(cache, ers_cache_t, 1); @@ -141,6 +147,7 @@ static ers_cache_t *ers_find_cache(unsigned int size) cache->UsedObjs = 0; cache->Max = 0; cache->ChunkSize = ERS_BLOCK_ENTRIES; + cache->Options = (Options & ERS_CACHE_OPTIONS); if (CacheList == NULL) { @@ -239,7 +246,7 @@ static void ers_obj_free_entry(ERS self, void *entry) return; } - if( instance->Options & ERS_OPT_CLEAN ) + if( instance->Cache->Options & ERS_OPT_CLEAN ) memset((unsigned char*)reuse + sizeof(struct ers_list), 0, instance->Cache->ObjectSize - sizeof(struct ers_list)); reuse->Next = instance->Cache->ReuseList; @@ -297,9 +304,10 @@ static void ers_obj_destroy(ERS self) void ers_cache_size(ERS self, unsigned int new_size) { struct ers_instance_t *instance = (struct ers_instance_t *)self; - if (instance == NULL) {//change as per piotrhalaczkiewicz comment - ShowError("ers_cache_size: NULL object, skipping...\n"); - return; + nullpo_retv(instance); + + if( !(instance->Cache->Options&ERS_OPT_FLEX_CHUNK) ) { + ShowWarning("ers_cache_size: '%s' has adjusted its chunk size to '%d', however ERS_OPT_FLEX_CHUNK is missing!\n",instance->Name,new_size); } instance->Cache->ChunkSize = new_size; @@ -324,7 +332,8 @@ ERS ers_new(uint32 size, char *name, enum ERSOptions options) instance->Name = ( options & ERS_OPT_FREE_NAME ) ? aStrdup(name) : name; instance->Options = options; - instance->Cache = ers_find_cache(size); + instance->Cache = ers_find_cache(size,instance->Options); + instance->Cache->ReferenceCount++; #ifdef DEBUG if (InstanceList == NULL) { diff --git a/src/common/ers.h b/src/common/ers.h index e63711b81..d74ee02a5 100644 --- a/src/common/ers.h +++ b/src/common/ers.h @@ -76,6 +76,10 @@ enum ERSOptions { ERS_OPT_WAIT = 0x2,/* wait for entries to come in order to list! */ ERS_OPT_FREE_NAME = 0x4,/* name is dynamic memory, and should be freed */ ERS_OPT_CLEAN = 0x8,/* clears used memory upon ers_free so that its all new to be reused on the next alloc */ + ERS_OPT_FLEX_CHUNK = 0x10,/* signs that it should look for its own cache given it'll have a dynamic chunk size, so that it doesn't affect the other ERS it'd otherwise be sharing */ + + /* Compound, is used to determine whether it should be looking for a cache of matching options */ + ERS_CACHE_OPTIONS = ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK, }; /** diff --git a/src/common/mmo.h b/src/common/mmo.h index bd5da6a9f..cb1e52311 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -101,11 +101,6 @@ //Update this max as necessary. 55 is the value needed for Super Baby currently //Raised to 84 since Expanded Super Novice needs it. #define MAX_SKILL_TREE 84 -#define GLOBAL_REG_NUM 256 // Max permanent character variables per char -#define ACCOUNT_REG_NUM 64 // Max permanent local account variables per account -#define ACCOUNT_REG2_NUM 16 // Max permanent global account variables per account -//Should hold the max of GLOBAL/ACCOUNT/ACCOUNT2 (needed for some arrays that hold all three) -#define MAX_REG_NUM 256 #define DEFAULT_WALK_SPEED 150 #define MIN_WALK_SPEED 20 /* below 20 clips animation */ #define MAX_WALK_SPEED 1000 @@ -269,16 +264,19 @@ struct s_skill { unsigned char flag; // See enum e_skill_flag }; -struct global_reg { - char str[32]; - char value[256]; +struct script_reg_state { + unsigned int type : 1;/* because I'm a memory hoarder and having them in the same struct would be a 8-byte/instance waste while ints outnumber str on a 10000-to-1 ratio. */ + unsigned int update : 1;/* whether it needs to be sent to char server for insertion/update/delete */ }; -// Holds array of global registries, used by the char server and converter. -struct accreg { - int account_id, char_id; - int reg_num; - struct global_reg reg[MAX_REG_NUM]; +struct script_reg_num { + struct script_reg_state flag; + int value; +}; + +struct script_reg_str { + struct script_reg_state flag; + char *value; }; // For saving status changes across sessions. [Skotlex] @@ -483,15 +481,6 @@ struct auction_data { int auction_end_timer; }; -struct registry { - int global_num; - struct global_reg global[GLOBAL_REG_NUM]; - int account_num; - struct global_reg account[ACCOUNT_REG_NUM]; - int account2_num; - struct global_reg account2[ACCOUNT_REG2_NUM]; -}; - struct party_member { int account_id; int char_id; @@ -547,6 +536,7 @@ struct guild_skill { int id,lv; }; +struct hChSysCh; struct guild { int guild_id; short guild_lv, connect_member, max_member, average_lv; @@ -569,7 +559,7 @@ struct guild { short *instance; unsigned short instances; - void *channel; + struct hChSysCh *channel; }; struct guild_castle { @@ -863,7 +853,15 @@ enum e_char_server_type { CST_MAINTENANCE = 1, CST_OVER18 = 2, CST_PAYING = 3, - CST_P2P = 4, + CST_F2P = 4, +}; + +enum e_pc_reg_loading { + PRL_NONE = 0x0, + PRL_CHAR = 0x1, + PRL_ACCL = 0x2,/* local */ + PRL_ACCG = 0x4,/* global */ + PRL_ALL = 0xFF, }; /* packet size constant for itemlist */ diff --git a/src/common/socket.c b/src/common/socket.c index 9c6938008..95333cdce 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -1407,7 +1407,7 @@ void socket_init(void) timer->add_interval(timer->gettick()+1000, connect_check_clear, 0, 0, 5*60*1000); #endif - ShowInfo("Server supports up to '"CL_WHITE"%lld"CL_RESET"' concurrent connections.\n", rlim_cur); + ShowInfo("Server supports up to '"CL_WHITE"%"PRId64""CL_RESET"' concurrent connections.\n", rlim_cur); /* Hercules Plugin Manager */ HPM->share(session,"session"); @@ -1464,8 +1464,6 @@ void socket_datasync(int fd, bool send) { { sizeof(struct item) }, { sizeof(struct point) }, { sizeof(struct s_skill) }, - { sizeof(struct global_reg) }, - { sizeof(struct accreg) }, { sizeof(struct status_change_data) }, { sizeof(struct storage_data) }, { sizeof(struct guild_storage) }, @@ -1476,7 +1474,6 @@ void socket_datasync(int fd, bool send) { { sizeof(struct s_friend) }, { sizeof(struct mail_message) }, { sizeof(struct mail_data) }, - { sizeof(struct registry) }, { sizeof(struct party_member) }, { sizeof(struct party) }, { sizeof(struct guild_member) }, @@ -1487,6 +1484,7 @@ void socket_datasync(int fd, bool send) { { sizeof(struct guild) }, { sizeof(struct guild_castle) }, { sizeof(struct fame_list) }, + { PACKETVER }, }; unsigned short i; unsigned int alen = ARRAYLENGTH(data_list); diff --git a/src/config/core.h b/src/config/core.h index daadc6455..edd5c2b2a 100644 --- a/src/config/core.h +++ b/src/config/core.h @@ -67,6 +67,10 @@ /// Uncomment to enable real-time server stats (in and out data and ram usage). [Ai4rei] //#define SHOW_SERVER_STATS + +/// Comment to disable autotrade persistency (where autotrading merchants survive server restarts) +#define AUTOTRADE_PERSISTENCY + /** * No settings past this point **/ diff --git a/src/login/account.h b/src/login/account.h index f55e38b0c..74a9e9626 100644 --- a/src/login/account.h +++ b/src/login/account.h @@ -1,5 +1,6 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder +// Copyright (c) Hercules Dev Team, licensed under GNU GPL. +// See the LICENSE file +// Portions Copyright (c) Athena Dev Teams #ifndef __ACCOUNT_H_INCLUDED__ #define __ACCOUNT_H_INCLUDED__ @@ -32,8 +33,6 @@ struct mmo_account char lastlogin[24]; // date+time of last successful login char last_ip[16]; // save of last IP of connection char birthdate[10+1]; // assigned birth date (format: YYYY-MM-DD, default: 0000-00-00) - int account_reg2_num; - struct global_reg account_reg2[ACCOUNT_REG2_NUM]; // account script variables (stored on login server) }; @@ -137,4 +136,7 @@ struct AccountDB Sql *account_db_sql_up(AccountDB* self); +void mmo_send_accreg2(AccountDB* self, int fd, int account_id, int char_id); +void mmo_save_accreg2(AccountDB* self, int fd, int account_id, int char_id); + #endif // __ACCOUNT_H_INCLUDED__ diff --git a/src/login/account_sql.c b/src/login/account_sql.c index 283eb3a0d..1483196ab 100644 --- a/src/login/account_sql.c +++ b/src/login/account_sql.c @@ -9,6 +9,7 @@ #include "../common/strlib.h" #include "../common/timer.h" #include "../common/console.h" +#include "../common/socket.h" #include "account.h" #include <stdlib.h> #include <string.h> @@ -40,7 +41,9 @@ typedef struct AccountDB_SQL // other settings bool case_sensitive; char account_db[32]; - char accreg_db[32]; + char global_acc_reg_num_db[32]; + char global_acc_reg_str_db[32]; + } AccountDB_SQL; @@ -106,7 +109,8 @@ AccountDB* account_db_sql(void) // other settings db->case_sensitive = false; safestrncpy(db->account_db, "login", sizeof(db->account_db)); - safestrncpy(db->accreg_db, "global_reg_value", sizeof(db->accreg_db)); + safestrncpy(db->global_acc_reg_num_db, "global_acc_reg_num_db", sizeof(db->global_acc_reg_num_db)); + safestrncpy(db->global_acc_reg_str_db, "global_acc_reg_str_db", sizeof(db->global_acc_reg_str_db)); return &db->vtable; } @@ -250,8 +254,11 @@ static bool account_db_sql_get_property(AccountDB* self, const char* key, char* if( strcmpi(key, "account_db") == 0 ) safesnprintf(buf, buflen, "%s", db->account_db); else - if( strcmpi(key, "accreg_db") == 0 ) - safesnprintf(buf, buflen, "%s", db->accreg_db); + if( strcmpi(key, "global_acc_reg_str_db") == 0 ) + safesnprintf(buf, buflen, "%s", db->global_acc_reg_str_db); + else + if( strcmpi(key, "global_acc_reg_num_db") == 0 ) + safesnprintf(buf, buflen, "%s", db->global_acc_reg_num_db); else return false;// not found return true; @@ -321,8 +328,11 @@ static bool account_db_sql_set_property(AccountDB* self, const char* key, const if( strcmpi(key, "account_db") == 0 ) safestrncpy(db->account_db, value, sizeof(db->account_db)); else - if( strcmpi(key, "accreg_db") == 0 ) - safestrncpy(db->accreg_db, value, sizeof(db->accreg_db)); + if( strcmpi(key, "global_acc_reg_str_db") == 0 ) + safestrncpy(db->global_acc_reg_str_db, value, sizeof(db->global_acc_reg_str_db)); + else + if( strcmpi(key, "global_acc_reg_num_db") == 0 ) + safestrncpy(db->global_acc_reg_num_db, value, sizeof(db->global_acc_reg_num_db)); else return false;// not found return true; @@ -393,7 +403,9 @@ static bool account_db_sql_remove(AccountDB* self, const int account_id) if( SQL_SUCCESS != SQL->QueryStr(sql_handle, "START TRANSACTION") || SQL_SUCCESS != SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = %d", db->account_db, account_id) - || SQL_SUCCESS != SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = %d", db->accreg_db, account_id) ) + || SQL_SUCCESS != SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = %d", db->global_acc_reg_num_db, account_id) + || SQL_SUCCESS != SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = %d", db->global_acc_reg_str_db, account_id) + ) Sql_ShowDebug(sql_handle); else result = true; @@ -520,7 +532,6 @@ static bool mmo_auth_fromsql(AccountDB_SQL* db, struct mmo_account* acc, int acc { Sql* sql_handle = db->accounts; char* data; - int i = 0; // retrieve login entry for the specified account if( SQL_ERROR == SQL->Query(sql_handle, @@ -556,27 +567,6 @@ static bool mmo_auth_fromsql(AccountDB_SQL* db, struct mmo_account* acc, int acc SQL->FreeResult(sql_handle); - - // retrieve account regs for the specified user - if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `str`,`value` FROM `%s` WHERE `type`='1' AND `account_id`='%d'", db->accreg_db, acc->account_id) ) - { - Sql_ShowDebug(sql_handle); - return false; - } - - acc->account_reg2_num = (int)SQL->NumRows(sql_handle); - - while( SQL_SUCCESS == SQL->NextRow(sql_handle) ) - { - SQL->GetData(sql_handle, 0, &data, NULL); safestrncpy(acc->account_reg2[i].str, data, sizeof(acc->account_reg2[i].str)); - SQL->GetData(sql_handle, 1, &data, NULL); safestrncpy(acc->account_reg2[i].value, data, sizeof(acc->account_reg2[i].value)); - ++i; - } - SQL->FreeResult(sql_handle); - - if( i != acc->account_reg2_num ) - return false; - return true; } @@ -585,7 +575,6 @@ static bool mmo_auth_tosql(AccountDB_SQL* db, const struct mmo_account* acc, boo Sql* sql_handle = db->accounts; SqlStmt* stmt = SQL->StmtMalloc(sql_handle); bool result = false; - int i; // try do @@ -647,34 +636,6 @@ static bool mmo_auth_tosql(AccountDB_SQL* db, const struct mmo_account* acc, boo } } - // remove old account regs - if( SQL_SUCCESS != SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `type`='1' AND `account_id`='%d'", db->accreg_db, acc->account_id) ) - { - Sql_ShowDebug(sql_handle); - break; - } - // insert new account regs - if( SQL_SUCCESS != SQL->StmtPrepare(stmt, "INSERT INTO `%s` (`type`, `account_id`, `str`, `value`) VALUES ( 1 , '%d' , ? , ? );", db->accreg_db, acc->account_id) ) - { - SqlStmt_ShowDebug(stmt); - break; - } - for( i = 0; i < acc->account_reg2_num; ++i ) - { - if( SQL_SUCCESS != SQL->StmtBindParam(stmt, 0, SQLDT_STRING, (void*)acc->account_reg2[i].str, strlen(acc->account_reg2[i].str)) - || SQL_SUCCESS != SQL->StmtBindParam(stmt, 1, SQLDT_STRING, (void*)acc->account_reg2[i].value, strlen(acc->account_reg2[i].value)) - || SQL_SUCCESS != SQL->StmtExecute(stmt) - ) { - SqlStmt_ShowDebug(stmt); - break; - } - } - if( i < acc->account_reg2_num ) - { - result = false; - break; - } - // if we got this far, everything was successful result = true; @@ -686,6 +647,7 @@ static bool mmo_auth_tosql(AccountDB_SQL* db, const struct mmo_account* acc, boo return result; } + Sql* account_db_sql_up(AccountDB* self) { AccountDB_SQL* db = (AccountDB_SQL*)self; Sql_HerculesUpdateCheck(db->accounts); @@ -694,3 +656,196 @@ Sql* account_db_sql_up(AccountDB* self) { #endif return db->accounts; } +void mmo_save_accreg2(AccountDB* self, int fd, int account_id, int char_id) { + Sql* sql_handle = ((AccountDB_SQL*)self)->accounts; + AccountDB_SQL* db = (AccountDB_SQL*)self; + int count = RFIFOW(fd, 12); + + if( count ) { + int cursor = 14, i; + char key[32], sval[254]; + unsigned int index; + + for(i = 0; i < count; i++) { + safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + cursor += RFIFOB(fd, cursor) + 1; + + index = RFIFOL(fd, cursor); + cursor += 4; + + switch (RFIFOB(fd, cursor++)) { + /* int */ + case 0: + if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%d')", db->global_acc_reg_num_db, account_id, key, index, RFIFOL(fd, cursor)) ) + Sql_ShowDebug(sql_handle); + cursor += 4; + break; + case 1: + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", db->global_acc_reg_num_db, account_id, key, index) ) + Sql_ShowDebug(sql_handle); + break; + /* str */ + case 2: + safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + cursor += RFIFOB(fd, cursor) + 1; + if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", db->global_acc_reg_str_db, account_id, key, index, sval) ) + Sql_ShowDebug(sql_handle); + break; + case 3: + if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", db->global_acc_reg_str_db, account_id, key, index) ) + Sql_ShowDebug(sql_handle); + break; + + default: + ShowError("mmo_save_accreg2: DA HOO UNKNOWN TYPE %d\n",RFIFOB(fd, cursor - 1)); + return; + } + + } + + } + +} +void mmo_send_accreg2(AccountDB* self, int fd, int account_id, int char_id) { + Sql* sql_handle = ((AccountDB_SQL*)self)->accounts; + AccountDB_SQL* db = (AccountDB_SQL*)self; + char* data; + int plen = 0; + size_t len; + + if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", db->global_acc_reg_str_db, account_id) ) + Sql_ShowDebug(sql_handle); + + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 1;/* is string type */ + WFIFOW(fd, 14) = 0;/* count */ + plen = 16; + + /** + * Vessel! + * + * str type + * { keyLength(B), key(<keyLength>), index(L), valLength(B), val(<valLength>) } + **/ + while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) { + + SQL->GetData(sql_handle, 0, &data, NULL); + len = strlen(data)+1; + + WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */ + plen += 1; + + safestrncpy((char*)WFIFOP(fd,plen), data, len); + plen += len; + + SQL->GetData(sql_handle, 1, &data, NULL); + + WFIFOL(fd, plen) = (unsigned int)atol(data); + plen += 4; + + SQL->GetData(sql_handle, 2, &data, NULL); + len = strlen(data)+1; + + WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 254 */ + plen += 1; + + safestrncpy((char*)WFIFOP(fd,plen), data, len); + plen += len; + + WFIFOW(fd, 14) += 1; + + if( plen > 60000 ) { + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); + + /* prepare follow up */ + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 1;/* is string type */ + WFIFOW(fd, 14) = 0;/* count */ + plen = 16; + } + } + + /* mark & go. */ + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); + + SQL->FreeResult(sql_handle); + + if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", db->global_acc_reg_num_db, account_id) ) + Sql_ShowDebug(sql_handle); + + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 0;/* is int type */ + WFIFOW(fd, 14) = 0;/* count */ + plen = 16; + + /** + * Vessel! + * + * int type + * { keyLength(B), key(<keyLength>), index(L), value(L) } + **/ + while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) { + + SQL->GetData(sql_handle, 0, &data, NULL); + len = strlen(data)+1; + + WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */ + plen += 1; + + safestrncpy((char*)WFIFOP(fd,plen), data, len); + plen += len; + + SQL->GetData(sql_handle, 1, &data, NULL); + + WFIFOL(fd, plen) = (unsigned int)atol(data); + plen += 4; + + SQL->GetData(sql_handle, 2, &data, NULL); + + WFIFOL(fd, plen) = atoi(data); + plen += 4; + + WFIFOW(fd, 14) += 1; + + if( plen > 60000 ) { + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); + + /* prepare follow up */ + WFIFOHEAD(fd, 60000 + 300); + WFIFOW(fd, 0) = 0x3804; + /* 0x2 = length, set prior to being sent */ + WFIFOL(fd, 4) = account_id; + WFIFOL(fd, 8) = char_id; + WFIFOB(fd, 12) = 0;/* var type (only set when all vars have been sent, regardless of type) */ + WFIFOB(fd, 13) = 0;/* is int type */ + WFIFOW(fd, 14) = 0;/* count */ + + plen = 16; + } + } + + /* mark as complete & go. */ + WFIFOB(fd, 12) = 1; + WFIFOW(fd, 2) = plen; + WFIFOSET(fd, plen); + + SQL->FreeResult(sql_handle); +} diff --git a/src/login/login.c b/src/login/login.c index feed7239b..e9d0eac9d 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -67,6 +67,7 @@ struct auth_node { uint32 version; uint8 clienttype; int group_id; + time_t expiration_time; }; static DBMap* auth_db; // int account_id -> struct auth_node* @@ -398,7 +399,7 @@ int parse_fromchar(int fd) //ShowStatus("Char-server '%s': authentication of the account %d accepted (ip: %s).\n", server[id].name, account_id, ip); // send ack - WFIFOHEAD(fd,29); + WFIFOHEAD(fd,33); WFIFOW(fd,0) = 0x2713; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = login_id1; @@ -409,7 +410,8 @@ int parse_fromchar(int fd) WFIFOL(fd,20) = node->version; WFIFOB(fd,24) = node->clienttype; WFIFOL(fd,25) = node->group_id; - WFIFOSET(fd,29); + WFIFOL(fd,29) = (unsigned int)node->expiration_time; + WFIFOSET(fd,33); // each auth entry can only be used once idb_remove(auth_db, account_id); @@ -417,7 +419,7 @@ int parse_fromchar(int fd) else {// authentication not found ShowStatus("Char-server '%s': authentication of the account %d REFUSED (ip: %s).\n", server[id].name, account_id, ip); - WFIFOHEAD(fd,29); + WFIFOHEAD(fd,33); WFIFOW(fd,0) = 0x2713; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = login_id1; @@ -428,7 +430,8 @@ int parse_fromchar(int fd) WFIFOL(fd,20) = 0; WFIFOB(fd,24) = 0; WFIFOL(fd,25) = 0; - WFIFOSET(fd,29); + WFIFOL(fd,29) = 0; + WFIFOSET(fd,33); } } break; @@ -701,30 +704,8 @@ int parse_fromchar(int fd) if( !accounts->load_num(accounts, &acc, account_id) ) ShowStatus("Char-server '%s': receiving (from the char-server) of account_reg2 (account: %d not found, ip: %s).\n", server[id].name, account_id, ip); - else - { - int len; - int p; - ShowNotice("char-server '%s': receiving (from the char-server) of account_reg2 (account: %d, ip: %s).\n", server[id].name, account_id, ip); - for( j = 0, p = 13; j < ACCOUNT_REG2_NUM && p < RFIFOW(fd,2); ++j ) - { - sscanf((char*)RFIFOP(fd,p), "%31c%n", acc.account_reg2[j].str, &len); - acc.account_reg2[j].str[len]='\0'; - p +=len+1; //+1 to skip the '\0' between strings. - sscanf((char*)RFIFOP(fd,p), "%255c%n", acc.account_reg2[j].value, &len); - acc.account_reg2[j].value[len]='\0'; - p +=len+1; - remove_control_chars(acc.account_reg2[j].str); - remove_control_chars(acc.account_reg2[j].value); - } - acc.account_reg2_num = j; - - // Save - accounts->save(accounts, &acc); - - // Sending information towards the other char-servers. - RFIFOW(fd,0) = 0x2729;// reusing read buffer - charif_sendallwos(fd, RFIFOP(fd,0), RFIFOW(fd,2)); + else { + mmo_save_accreg2(accounts,fd,account_id,RFIFOL(fd, 8)); } RFIFOSKIP(fd,RFIFOW(fd,2)); } @@ -794,34 +775,11 @@ int parse_fromchar(int fd) if (RFIFOREST(fd) < 10) return 0; { - struct mmo_account acc; - size_t off; - int account_id = RFIFOL(fd,2); int char_id = RFIFOL(fd,6); RFIFOSKIP(fd,10); - WFIFOHEAD(fd,ACCOUNT_REG2_NUM*sizeof(struct global_reg)); - WFIFOW(fd,0) = 0x2729; - WFIFOL(fd,4) = account_id; - WFIFOL(fd,8) = char_id; - WFIFOB(fd,12) = 1; //Type 1 for Account2 registry - - off = 13; - if( accounts->load_num(accounts, &acc, account_id) ) - { - for( j = 0; j < acc.account_reg2_num; j++ ) - { - if( acc.account_reg2[j].str[0] != '\0' ) - { - off += sprintf((char*)WFIFOP(fd,off), "%s", acc.account_reg2[j].str)+1; //We add 1 to consider the '\0' in place. - off += sprintf((char*)WFIFOP(fd,off), "%s", acc.account_reg2[j].value)+1; - } - } - } - - WFIFOW(fd,2) = (uint16)off; - WFIFOSET(fd,WFIFOW(fd,2)); + mmo_send_accreg2(accounts,fd,account_id,char_id); } break; @@ -1006,11 +964,6 @@ int mmo_auth(struct login_session_data* sd, bool isServer) { return 1; // 1 = Incorrect Password } - if( acc.expiration_time != 0 && acc.expiration_time < time(NULL) ) { - ShowNotice("Connection refused (account: %s, pass: %s, expired ID, ip: %s)\n", sd->userid, sd->passwd, ip); - return 2; // 2 = This ID is expired - } - if( acc.unban_time != 0 && acc.unban_time > time(NULL) ) { char tmpstr[24]; timestamp2string(tmpstr, sizeof(tmpstr), acc.unban_time, login_config.date_format); @@ -1062,6 +1015,7 @@ int mmo_auth(struct login_session_data* sd, bool isServer) { safestrncpy(sd->lastlogin, acc.lastlogin, sizeof(sd->lastlogin)); sd->sex = acc.sex; sd->group_id = (uint8)acc.group_id; + sd->expiration_time = acc.expiration_time; // update account data timestamp2string(acc.lastlogin, sizeof(acc.lastlogin), time(NULL), "%Y-%m-%d %H:%M:%S"); @@ -1183,7 +1137,12 @@ void login_auth_ok(struct login_session_data* sd) WFIFOW(fd,47+n*32+4) = ntows(htons(server[i].port)); // [!] LE byte order here [!] memcpy(WFIFOP(fd,47+n*32+6), server[i].name, 20); WFIFOW(fd,47+n*32+26) = server[i].users; - WFIFOW(fd,47+n*32+28) = server[i].type; + + if( server[i].type == CST_PAYING && sd->expiration_time > time(NULL) ) + WFIFOW(fd,47+n*32+28) = CST_NORMAL; + else + WFIFOW(fd,47+n*32+28) = server[i].type; + WFIFOW(fd,47+n*32+30) = server[i].new_; n++; } @@ -1199,6 +1158,7 @@ void login_auth_ok(struct login_session_data* sd) node->version = sd->version; node->clienttype = sd->clienttype; node->group_id = sd->group_id; + node->expiration_time = sd->expiration_time; idb_put(auth_db, sd->account_id, node); { diff --git a/src/login/login.h b/src/login/login.h index 494912698..d6a021125 100644 --- a/src/login/login.h +++ b/src/login/login.h @@ -1,5 +1,6 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder +// Copyright (c) Hercules Dev Team, licensed under GNU GPL. +// See the LICENSE file +// Portions Copyright (c) Athena Dev Teams #ifndef _LOGIN_H_ #define _LOGIN_H_ @@ -42,6 +43,8 @@ struct login_session_data { int has_client_hash; int fd; + + time_t expiration_time; }; struct mmo_char_server { diff --git a/src/map/HPMmap.c b/src/map/HPMmap.c index 8d7c74ef2..9c09a7ad1 100644 --- a/src/map/HPMmap.c +++ b/src/map/HPMmap.c @@ -65,8 +65,9 @@ void HPM_map_grabHPData(struct HPDataOperationStorage *ret, enum HPluginDataType } void HPM_map_plugin_load_sub(struct hplugin *plugin) { - plugin->hpi->addCommand = HPM->import_symbol("addCommand",plugin->idx); - plugin->hpi->addScript = HPM->import_symbol("addScript",plugin->idx); + plugin->hpi->addCommand = HPM->import_symbol("addCommand",plugin->idx); + plugin->hpi->addScript = HPM->import_symbol("addScript",plugin->idx); + plugin->hpi->addPCGPermission = HPM->import_symbol("addGroupPermission",plugin->idx); } bool HPM_map_add_atcommand(char *name, AtCommandFunc func) { @@ -98,6 +99,30 @@ void HPM_map_atcommands(void) { } void HPM_map_do_final(void) { + unsigned char i; + if( atcommand_list ) aFree(atcommand_list); + /** + * why is pcg->HPM being cleared here? because PCG's do_final is not final, + * is used on reload, and would thus cause plugin-provided permissions to go away + **/ + for( i = 0; i < pcg->HPMpermissions_count; i++ ) { + aFree(pcg->HPMpermissions[i].name); + } + if( pcg->HPMpermissions ) + aFree(pcg->HPMpermissions); +} + +/** + * Adds a new group permission to the HPM-provided list + **/ +void HPM_map_add_group_permission(unsigned int pluginID, char *name, unsigned int *mask) { + unsigned char index = pcg->HPMpermissions_count; + + RECREATE(pcg->HPMpermissions, struct pc_groups_new_permission, ++pcg->HPMpermissions_count); + + pcg->HPMpermissions[index].pID = pluginID; + pcg->HPMpermissions[index].name = aStrdup(name); + pcg->HPMpermissions[index].mask = mask; } diff --git a/src/map/HPMmap.h b/src/map/HPMmap.h index f5fe70276..f86f02eb9 100644 --- a/src/map/HPMmap.h +++ b/src/map/HPMmap.h @@ -20,4 +20,6 @@ void HPM_map_plugin_load_sub(struct hplugin *plugin); void HPM_map_do_final(void); +void HPM_map_add_group_permission(unsigned int pluginID, char *name, unsigned int *mask); + #endif /* _HPM_MAP_ */ diff --git a/src/map/atcommand.c b/src/map/atcommand.c index ce73319e2..b2d486520 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -5479,12 +5479,19 @@ ACMD(autotrade) { int timeout = atoi(message); status->change_start(&sd->bl, SC_AUTOTRADE, 10000, 0, 0, 0, 0, ((timeout > 0) ? min(timeout,battle_config.at_timeout) : battle_config.at_timeout) * 60000, 0); } - + clif->chsys_quit(sd); clif->authfail_fd(sd->fd, 15); + +#ifdef AUTOTRADE_PERSISTENCY + pc->autotrade_prepare(sd); + + return false;/* we fail to not cause it to proceed on is_atcommand */ +#else return true; +#endif } /*========================================== @@ -8437,12 +8444,12 @@ ACMD(set) { break; case '#': if( reg[1] == '#' ) - data->u.str = pc_readaccountreg2str(sd, reg);// global + data->u.str = pc_readaccountreg2str(sd, script->add_str(reg));// global else - data->u.str = pc_readaccountregstr(sd, reg);// local + data->u.str = pc_readaccountregstr(sd, script->add_str(reg));// local break; default: - data->u.str = pc_readglobalreg_str(sd, reg); + data->u.str = pc_readglobalreg_str(sd, script->add_str(reg)); break; } @@ -8466,12 +8473,12 @@ ACMD(set) { break; case '#': if( reg[1] == '#' ) - data->u.num = pc_readaccountreg2(sd, reg);// global + data->u.num = pc_readaccountreg2(sd, script->add_str(reg));// global else - data->u.num = pc_readaccountreg(sd, reg);// local + data->u.num = pc_readaccountreg(sd, script->add_str(reg));// local break; default: - data->u.num = pc_readglobalreg(sd, reg); + data->u.num = pc_readglobalreg(sd, script->add_str(reg)); break; } @@ -8640,7 +8647,7 @@ ACMD(join) { } else if( hChSys.ally && sd->status.guild_id && strcmpi(name + 1, hChSys.ally_name) == 0 ) { struct guild *g = sd->guild; if( !g ) return false;/* unlikely, but we wont let it crash anyway. */ - channel = (struct hChSysCh *)g->channel; + channel = g->channel; } else if( !( channel = strdb_get(clif->channel_db, name + 1) ) ) { sprintf(atcmd_output, msg_txt(1400),name,command); // Unknown Channel '%s' (usage: %s <#channel_name>) clif->message(fd, atcmd_output); @@ -8684,8 +8691,8 @@ ACMD(join) { int i; for (i = 0; i < MAX_GUILDALLIANCE; i++) { if( g->alliance[i].opposition == 0 && g->alliance[i].guild_id && (sg = guild->search(g->alliance[i].guild_id) ) ) { - if( !(((struct hChSysCh*)sg->channel)->banned && idb_exists(((struct hChSysCh*)sg->channel)->banned, sd->status.account_id))) { - clif->chsys_join((struct hChSysCh *)sg->channel,sd); + if( !(sg->channel->banned && idb_exists(sg->channel->banned, sd->status.account_id))) { + clif->chsys_join(sg->channel,sd); } } } @@ -8815,7 +8822,7 @@ ACMD(channel) { if( hChSys.ally && sd->status.guild_id ) { struct guild *g = sd->guild; if( !g ) { dbi_destroy(iter); return false; } - sprintf(atcmd_output, msg_txt(1409), hChSys.ally_name, db_size(((struct hChSysCh *)g->channel)->users));// - #%s ( %d users ) + sprintf(atcmd_output, msg_txt(1409), hChSys.ally_name, db_size(g->channel->users));// - #%s ( %d users ) clif->message(fd, atcmd_output); } for(channel = dbi_first(iter); dbi_exists(iter); channel = dbi_next(iter)) { diff --git a/src/map/battleground.c b/src/map/battleground.c index 6029a8c35..96d39aa45 100644 --- a/src/map/battleground.c +++ b/src/map/battleground.c @@ -496,7 +496,7 @@ void bg_match_over(struct bg_arena *arena, bool canceled) { if( canceled ) clif->colormes(sd->fd,COLOR_RED,"BG Match Cancelled: not enough players"); else { - pc_setglobalreg(sd, arena->delay_var, (unsigned int)time(NULL)); + pc_setglobalreg(sd, script->add_str(arena->delay_var), (unsigned int)time(NULL)); } } } @@ -693,7 +693,7 @@ enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, struct bg_ tsec = (unsigned int)time(NULL); - if ( ( tick = pc_readglobalreg(sd, bg->gdelay_var) ) && tsec < tick ) { + if ( ( tick = pc_readglobalreg(sd, script->add_str(bg->gdelay_var)) ) && tsec < tick ) { char response[100]; if( (tick-tsec) > 60 ) sprintf(response, "You are a deserter! Wait %d minute(s) before you can apply again",(tick-tsec)/60); @@ -703,7 +703,7 @@ enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, struct bg_ return BGQA_FAIL_DESERTER; } - if ( ( tick = pc_readglobalreg(sd, arena->delay_var) ) && tsec < tick ) { + if ( ( tick = pc_readglobalreg(sd, script->add_str(arena->delay_var)) ) && tsec < tick ) { char response[100]; if( (tick-tsec) > 60 ) sprintf(response, "You can't reapply to this arena so fast. Apply to the different arena or wait %d minute(s)",(tick-tsec)/60); diff --git a/src/map/chat.c b/src/map/chat.c index 52d7f246a..50fe2aeb5 100644 --- a/src/map/chat.c +++ b/src/map/chat.c @@ -318,7 +318,7 @@ int chat_kickchat(struct map_session_data* sd, const char* kickusername) { if (pc_has_permission(cd->usersd[i], PC_PERM_NO_CHAT_KICK)) return 0; //gm kick protection [Valaris] - idb_put(cd->kick_list,cd->usersd[i]->status.char_id,(void*)1); + idb_iput(cd->kick_list,cd->usersd[i]->status.char_id,1); chat->leave(cd->usersd[i],1); return 0; diff --git a/src/map/chrif.c b/src/map/chrif.c index e9c3bbabf..1bed99d3a 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -119,16 +119,13 @@ struct auth_node* chrif_auth_check(int account_id, int char_id, enum sd_state st bool chrif_auth_delete(int account_id, int char_id, enum sd_state state) { struct auth_node *node; - + if ( (node = chrif->auth_check(account_id, char_id, state) ) ) { int fd = node->sd ? node->sd->fd : node->fd; if ( session[fd] && session[fd]->session_data == node->sd ) session[fd]->session_data = NULL; - if ( node->char_dat ) - aFree(node->char_dat); - if ( node->sd ) aFree(node->sd); @@ -265,12 +262,8 @@ int chrif_save(struct map_session_data *sd, int flag) { sd->state.storage_flag = 0; //Force close it. //Saving of registry values. - if (sd->state.reg_dirty&4) - intif->saveregistry(sd, 3); //Save char regs - if (sd->state.reg_dirty&2) - intif->saveregistry(sd, 2); //Save account regs - if (sd->state.reg_dirty&1) - intif->saveregistry(sd, 1); //Save account2 regs + if (sd->vars_dirty) + intif->saveregistry(sd); WFIFOHEAD(chrif->fd, sizeof(sd->status) + 13); WFIFOW(chrif->fd,0) = 0x2b01; @@ -456,7 +449,7 @@ int chrif_reconnect(DBKey key, DBData *data, va_list ap) { switch (node->state) { case ST_LOGIN: - if ( node->sd && node->char_dat == NULL ) {//Since there is no way to request the char auth, make it fail. + if ( node->sd ) {//Since there is no way to request the char auth, make it fail. pc->authfail(node->sd); chrif->char_offline(node->sd); chrif->auth_delete(node->account_id, node->char_id, ST_LOGIN); @@ -486,6 +479,7 @@ int chrif_reconnect(DBKey key, DBData *data, va_list ap) { /// Called when all the connection steps are completed. void chrif_on_ready(void) { + static bool once = false; ShowStatus("Map Server is now online.\n"); chrif->state = 2; @@ -503,6 +497,13 @@ void chrif_on_ready(void) { //Re-save any guild castles that were modified in the disconnection time. guild->castle_reconnect(-1, 0, 0); + + if( !once ) { +#ifdef AUTOTRADE_PERSISTENCY + pc->autotrade_load(); +#endif + once = true; + } } @@ -544,22 +545,23 @@ int chrif_scdata_request(int account_id, int char_id) { /*========================================== * Request auth confirmation *------------------------------------------*/ -void chrif_authreq(struct map_session_data *sd) { +void chrif_authreq(struct map_session_data *sd, bool hstandalone) { struct auth_node *node= chrif->search(sd->bl.id); - + if( node != NULL || !chrif->isconnected() ) { set_eof(sd->fd); return; } - WFIFOHEAD(chrif->fd,19); + WFIFOHEAD(chrif->fd,20); WFIFOW(chrif->fd,0) = 0x2b26; WFIFOL(chrif->fd,2) = sd->status.account_id; WFIFOL(chrif->fd,6) = sd->status.char_id; WFIFOL(chrif->fd,10) = sd->login_id1; WFIFOB(chrif->fd,14) = sd->status.sex; WFIFOL(chrif->fd,15) = htonl(session[sd->fd]->client_addr); - WFIFOSET(chrif->fd,19); + WFIFOB(chrif->fd,19) = hstandalone ? 1 : 0; + WFIFOSET(chrif->fd,20); chrif->sd_to_auth(sd, ST_LOGIN); } @@ -594,7 +596,7 @@ void chrif_authok(int fd) { //Causes problems if the currently connected player tries to quit or this data belongs to an already connected player which is trying to re-auth. if ( ( sd = map->id2sd(account_id) ) != NULL ) return; - + if ( ( node = chrif->search(account_id) ) == NULL ) return; // should not happen @@ -613,7 +615,6 @@ void chrif_authok(int fd) { sd = node->sd; if( runflag == MAPSERVER_ST_RUNNING && - node->char_dat == NULL && node->account_id == account_id && node->char_id == char_id && node->login_id1 == login_id1 ) @@ -1366,6 +1367,9 @@ void chrif_skillid2idx(int fd) { if( fd == 0 ) fd = chrif->fd; + if( !session_isValid(fd) ) + return; + WFIFOHEAD(fd,4 + (MAX_SKILL * 4)); WFIFOW(fd,0) = 0x2b0b; for(i = 0; i < MAX_SKILL; i++) { @@ -1592,9 +1596,6 @@ void chrif_send_report(char* buf, int len) { int auth_db_final(DBKey key, DBData *data, va_list ap) { struct auth_node *node = DB->data2ptr(data); - if (node->char_dat) - aFree(node->char_dat); - if (node->sd) aFree(node->sd); diff --git a/src/map/chrif.h b/src/map/chrif.h index b69d34210..1de0901f0 100644 --- a/src/map/chrif.h +++ b/src/map/chrif.h @@ -32,7 +32,6 @@ struct auth_node { int login_id1, login_id2, sex, fd; time_t expiration_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited) struct map_session_data *sd; //Data from logged on char. - struct mmo_charstatus *char_dat; //Data from char server. int64 node_created; //timestamp for node timeouts enum sd_state state; //To track whether player was login in/out or changing maps. }; @@ -79,7 +78,7 @@ struct chrif_interface { bool (*auth_delete) (int account_id, int char_id, enum sd_state state); bool (*auth_finished) (struct map_session_data* sd); - void (*authreq) (struct map_session_data* sd); + void (*authreq) (struct map_session_data* sd, bool hstandalone); void (*authok) (int fd); int (*scdata_request) (int account_id, int char_id); int (*save) (struct map_session_data* sd, int flag); diff --git a/src/map/clif.c b/src/map/clif.c index 2a2151eb0..77d4d20d8 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9194,7 +9194,7 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd) { WFIFOSET(fd,packet_len(0x283)); #endif - chrif->authreq(sd); + chrif->authreq(sd,false); } void clif_hercules_chsys_mjoin(struct map_session_data *sd) { if( !map->list[sd->bl.m].channel ) { @@ -10387,7 +10387,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) } else if( hChSys.ally && sd->status.guild_id && strcmpi(chname, hChSys.ally_name) == 0 ) { struct guild *g = sd->guild; if( !g ) return; - channel = (struct hChSysCh *)g->channel; + channel = g->channel; } if( channel || (channel = strdb_get(clif->channel_db,chname)) ) { int k; @@ -10402,8 +10402,8 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) struct guild *g = sd->guild, *sg = NULL; for (k = 0; k < MAX_GUILDALLIANCE; k++) { if( g->alliance[k].opposition == 0 && g->alliance[k].guild_id && (sg = guild->search(g->alliance[k].guild_id) ) ) { - if( !(((struct hChSysCh*)sg->channel)->banned && idb_exists(((struct hChSysCh*)sg->channel)->banned, sd->status.account_id))) - clif->chsys_join((struct hChSysCh *)sg->channel,sd); + if( !(sg->channel->banned && idb_exists(sg->channel->banned, sd->status.account_id))) + clif->chsys_join(sg->channel,sd); } } } @@ -10683,19 +10683,19 @@ void clif_hercules_chsys_gjoin(struct guild *g1,struct guild *g2) { struct hChSysCh *channel; int j; - if( (channel = (struct hChSysCh*)g1->channel) ) { + if( (channel = g1->channel) ) { for(j = 0; j < g2->max_member; j++) { if( (sd = g2->member[j].sd) != NULL ) { - if( !(((struct hChSysCh*)g1->channel)->banned && idb_exists(((struct hChSysCh*)g1->channel)->banned, sd->status.account_id))) + if( !(g1->channel->banned && idb_exists(g1->channel->banned, sd->status.account_id))) clif->chsys_join(channel,sd); } } } - if( (channel = (struct hChSysCh*)g2->channel) ) { + if( (channel = g2->channel) ) { for(j = 0; j < g1->max_member; j++) { if( (sd = g1->member[j].sd) != NULL ) { - if( !(((struct hChSysCh*)g2->channel)->banned && idb_exists(((struct hChSysCh*)g2->channel)->banned, sd->status.account_id))) + if( !(g2->channel->banned && idb_exists(g2->channel->banned, sd->status.account_id))) clif->chsys_join(channel,sd); } } @@ -10706,7 +10706,7 @@ void clif_hercules_chsys_gleave(struct guild *g1,struct guild *g2) { struct hChSysCh *channel; int j; - if( (channel = (struct hChSysCh*)g1->channel) ) { + if( (channel = g1->channel) ) { for(j = 0; j < g2->max_member; j++) { if( (sd = g2->member[j].sd) != NULL ) { clif->chsys_left(channel,sd); @@ -10714,7 +10714,7 @@ void clif_hercules_chsys_gleave(struct guild *g1,struct guild *g2) { } } - if( (channel = (struct hChSysCh*)g2->channel) ) { + if( (channel = g2->channel) ) { for(j = 0; j < g1->max_member; j++) { if( (sd = g1->member[j].sd) != NULL ) { clif->chsys_left(channel,sd); @@ -14419,7 +14419,7 @@ void clif_parse_FeelSaveOk(int fd,struct map_session_data *sd) sd->feel_map[i].index = map_id2index(sd->bl.m); sd->feel_map[i].m = sd->bl.m; - pc_setglobalreg(sd,pc->sg_info[i].feel_var,sd->feel_map[i].index); + pc_setglobalreg(sd,script->add_str(pc->sg_info[i].feel_var),sd->feel_map[i].index); //Are these really needed? Shouldn't they show up automatically from the feel save packet? // clif_misceffect2(&sd->bl, 0x1b0); diff --git a/src/map/duel.c b/src/map/duel.c index 5e305244a..30277be50 100644 --- a/src/map/duel.c +++ b/src/map/duel.c @@ -24,7 +24,7 @@ void duel_savetime(struct map_session_data* sd) { time(&clock); t = localtime(&clock); - pc_setglobalreg(sd, "PC_LAST_DUEL_TIME", t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min); + pc_setglobalreg(sd, script->add_str("PC_LAST_DUEL_TIME"), t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min); } int duel_checktime(struct map_session_data* sd) { @@ -35,7 +35,7 @@ int duel_checktime(struct map_session_data* sd) { time(&clock); t = localtime(&clock); - diff = t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min - pc_readglobalreg(sd, "PC_LAST_DUEL_TIME"); + diff = t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min - pc_readglobalreg(sd, script->add_str("PC_LAST_DUEL_TIME") ); return !(diff >= 0 && diff < battle_config.duel_time_interval); } diff --git a/src/map/guild.c b/src/map/guild.c index 8a34b7f4b..909c360a8 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -454,7 +454,7 @@ int guild_recv_info(struct guild *sg) { DBData data; struct map_session_data *sd; bool guild_new = false; - void *aChSysSave = NULL; + struct hChSysCh *aChSysSave = NULL; nullpo_ret(sg); @@ -494,8 +494,8 @@ int guild_recv_info(struct guild *sg) { if( sg->alliance[i].guild_id == sd->status.guild_id ) { clif->chsys_join(channel,sd); } else if( tg[i] != NULL ) { - if( !(((struct hChSysCh*)tg[i]->channel)->banned && idb_exists(((struct hChSysCh*)tg[i]->channel)->banned, sd->status.account_id))) - clif->chsys_join((struct hChSysCh*)tg[i]->channel,sd); + if( !(tg[i]->channel->banned && idb_exists(tg[i]->channel->banned, sd->status.account_id))) + clif->chsys_join(tg[i]->channel,sd); } } } @@ -506,7 +506,7 @@ int guild_recv_info(struct guild *sg) { } - aChSysSave = (void*)channel; + aChSysSave = channel; } before=*sg; @@ -725,14 +725,14 @@ void guild_member_joined(struct map_session_data *sd) if( hChSys.ally && hChSys.ally_autojoin ) { struct guild* sg = NULL; - struct hChSysCh *channel = (struct hChSysCh*)g->channel; + struct hChSysCh *channel = g->channel; if( !(channel->banned && idb_exists(channel->banned, sd->status.account_id) ) ) clif->chsys_join(channel,sd); for (i = 0; i < MAX_GUILDALLIANCE; i++) { if( g->alliance[i].opposition == 0 && g->alliance[i].guild_id && (sg = guild->search(g->alliance[i].guild_id) ) ) { - if( !(((struct hChSysCh*)sg->channel)->banned && idb_exists(((struct hChSysCh*)sg->channel)->banned, sd->status.account_id))) - clif->chsys_join((struct hChSysCh*)sg->channel,sd); + if( !(sg->channel->banned && idb_exists(sg->channel->banned, sd->status.account_id))) + clif->chsys_join(sg->channel,sd); } } } @@ -1753,7 +1753,7 @@ int guild_broken(int guild_id,int flag) gstorage->delete(guild_id); if( hChSys.ally ) { if( g->channel != NULL ) { - clif->chsys_delete(( struct hChSysCh * )g->channel); + clif->chsys_delete(g->channel); } } if( g->instance ) @@ -2231,7 +2231,7 @@ void do_final_guild(void) { for( g = dbi_first(iter); dbi_exists(iter); g = dbi_next(iter) ) { if( g->channel != NULL ) - clif->chsys_delete((struct hChSysCh *)g->channel); + clif->chsys_delete(g->channel); if( g->instance != NULL ) { aFree(g->instance); g->instance = NULL; diff --git a/src/map/instance.c b/src/map/instance.c index 924bbfd14..7c092e6cb 100644 --- a/src/map/instance.c +++ b/src/map/instance.c @@ -109,7 +109,8 @@ int instance_create(int owner_id, const char *name, enum instance_owner_type typ instance->list[i].num_map = 0; instance->list[i].owner_id = owner_id; instance->list[i].owner_type = type; - instance->list[i].vars = idb_alloc(DB_OPT_RELEASE_DATA); + instance->list[i].vars = i64db_alloc(DB_OPT_RELEASE_DATA); + instance->list[i].array_db = NULL; instance->list[i].respawn.map = 0; instance->list[i].respawn.y = 0; instance->list[i].respawn.x = 0; @@ -551,6 +552,8 @@ void instance_destroy(int instance_id) { if( instance->list[instance_id].vars ) db_destroy(instance->list[instance_id].vars); + if( instance->list[instance_id].array_db ) + instance->list[instance_id].array_db->destroy(instance->list[instance_id].array_db,script->array_free_db); if( instance->list[instance_id].progress_timer != INVALID_TIMER ) timer->delete( instance->list[instance_id].progress_timer, instance->destroy_timer); diff --git a/src/map/instance.h b/src/map/instance.h index 4f65d7db0..ddca3e36b 100644 --- a/src/map/instance.h +++ b/src/map/instance.h @@ -33,8 +33,9 @@ struct instance_data { unsigned short num_map; unsigned short users; - struct DBMap* vars; // Instance Variable for scripts - + struct DBMap *vars; // Instance Variable for scripts + struct DBMap *array_db ; + int progress_timer; unsigned int progress_timeout; diff --git a/src/map/intif.c b/src/map/intif.c index b9d4d1746..49fbe4721 100644 --- a/src/map/intif.c +++ b/src/map/intif.c @@ -265,60 +265,117 @@ int intif_wis_message_to_gm(char *wisp_name, int permission, char *mes) return 0; } -int intif_regtostr(char* str, struct global_reg *reg, int qty) -{ - int len =0, i; - - for (i = 0; i < qty; i++) { - len+= sprintf(str+len, "%s", reg[i].str)+1; //We add 1 to consider the '\0' in place. - len+= sprintf(str+len, "%s", reg[i].value)+1; - } - return len; -} - //Request for saving registry values. -int intif_saveregistry(struct map_session_data *sd, int type) -{ - struct global_reg *reg; - int count; - int i, p; +int intif_saveregistry(struct map_session_data *sd) { + DBIterator *iter; + DBKey key; + DBData *data; + int plen = 0; + size_t len; if (intif->CheckForCharServer()) return -1; - - switch (type) { - case 3: //Character reg - reg = sd->save_reg.global; - count = sd->save_reg.global_num; - sd->state.reg_dirty &= ~0x4; - break; - case 2: //Account reg - reg = sd->save_reg.account; - count = sd->save_reg.account_num; - sd->state.reg_dirty &= ~0x2; - break; - case 1: //Account2 reg - reg = sd->save_reg.account2; - count = sd->save_reg.account2_num; - sd->state.reg_dirty &= ~0x1; - break; - default: //Broken code? - ShowError("intif_saveregistry: Invalid type %d\n", type); - return -1; - } - WFIFOHEAD(inter_fd, 288 * MAX_REG_NUM+13); - WFIFOW(inter_fd,0)=0x3004; - WFIFOL(inter_fd,4)=sd->status.account_id; - WFIFOL(inter_fd,8)=sd->status.char_id; - WFIFOB(inter_fd,12)=type; - for( p = 13, i = 0; i < count; i++ ) { - if (reg[i].str[0] != '\0' && reg[i].value[0] != '\0') { - p+= sprintf((char*)WFIFOP(inter_fd,p), "%s", reg[i].str)+1; //We add 1 to consider the '\0' in place. - p+= sprintf((char*)WFIFOP(inter_fd,p), "%s", reg[i].value)+1; + + WFIFOHEAD(inter_fd, 60000 + 300); + WFIFOW(inter_fd,0) = 0x3004; + /* 0x2 = length (set later) */ + WFIFOL(inter_fd,4) = sd->status.account_id; + WFIFOL(inter_fd,8) = sd->status.char_id; + WFIFOW(inter_fd,12) = 0;/* count */ + + plen = 14; + + iter = db_iterator(sd->var_db); + for( data = iter->first(iter,&key); iter->exists(iter); data = iter->next(iter,&key) ) { + const char *varname = NULL; + struct script_reg_state *src = NULL; + + if( data->type != DB_DATA_PTR ) /* its a @number */ + continue; + + varname = script->get_str(script_getvarid(key.i64)); + + if( varname[0] == '@' ) /* @string$ can get here, so we skip */ + continue; + + src = DB->data2ptr(data); + + /* no need! */ + if( !src->update ) + continue; + + src->update = false; + + len = strlen(varname)+1; + + WFIFOB(inter_fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */ + plen += 1; + + safestrncpy((char*)WFIFOP(inter_fd,plen), varname, len); + plen += len; + + WFIFOL(inter_fd, plen) = script_getvaridx(key.i64); + plen += 4; + + if( src->type ) { + struct script_reg_str *p = (struct script_reg_str *)src; + + WFIFOB(inter_fd, plen) = p->value ? 2 : 3; + plen += 1; + + if( p->value ) { + len = strlen(p->value)+1; + + WFIFOB(inter_fd, plen) = (unsigned char)len;/* won't be higher; the column size is 254 */ + plen += 1; + + safestrncpy((char*)WFIFOP(inter_fd,plen), p->value, len); + plen += len; + } else { + script->reg_destroy_single(sd,key.i64,&p->flag); + } + + } else { + struct script_reg_num *p = (struct script_reg_num *)src; + + WFIFOB(inter_fd, plen) = p->value ? 0 : 1; + plen += 1; + + if( p->value ) { + WFIFOL(inter_fd, plen) = p->value; + plen += 4; + } else { + script->reg_destroy_single(sd,key.i64,&p->flag); + } + + } + + WFIFOW(inter_fd,12) += 1; + + if( plen > 60000 ) { + WFIFOW(inter_fd, 2) = plen; + WFIFOSET(inter_fd, plen); + + /* prepare follow up */ + WFIFOHEAD(inter_fd, 60000 + 300); + WFIFOW(inter_fd,0) = 0x3004; + /* 0x2 = length (set later) */ + WFIFOL(inter_fd,4) = sd->status.account_id; + WFIFOL(inter_fd,8) = sd->status.char_id; + WFIFOW(inter_fd,12) = 0;/* count */ + + plen = 14; } + } - WFIFOW(inter_fd,2)=p; - WFIFOSET(inter_fd,WFIFOW(inter_fd,2)); + dbi_destroy(iter); + + /* mark & go. */ + WFIFOW(inter_fd, 2) = plen; + WFIFOSET(inter_fd, plen); + + sd->vars_dirty = false; + return 0; } @@ -327,10 +384,7 @@ int intif_request_registry(struct map_session_data *sd, int flag) { nullpo_ret(sd); - sd->save_reg.account2_num = -1; - sd->save_reg.account_num = -1; - sd->save_reg.global_num = -1; - + /* if char server aint online it doesn't load, shouldn't we kill the session then? */ if (intif->CheckForCharServer()) return 0; @@ -927,54 +981,93 @@ void mapif_parse_WisToGM(int fd) // Request player registre void intif_parse_Registers(int fd) { - int j,p,len,max, flag; + int i, flag; struct map_session_data *sd; - struct global_reg *reg; - int *qty; int account_id = RFIFOL(fd,4), char_id = RFIFOL(fd,8); struct auth_node *node = chrif->auth_check(account_id, char_id, ST_LOGIN); + char type = RFIFOB(fd, 13); + if (node) sd = node->sd; else { //Normally registries should arrive for in log-in chars. sd = map->id2sd(account_id); - if (sd && RFIFOB(fd,12) == 3 && sd->status.char_id != char_id) - sd = NULL; //Character registry from another character. } - if (!sd) return; - - flag = (sd->save_reg.global_num == -1 || sd->save_reg.account_num == -1 || sd->save_reg.account2_num == -1); - + + if (!sd || sd->status.char_id != char_id) { + return; //Character registry from another character. + } + + flag = ( sd->vars_received&PRL_ACCG && sd->vars_received&PRL_ACCL && sd->vars_received&PRL_CHAR ) ? 0 : 1; + switch (RFIFOB(fd,12)) { case 3: //Character Registry - reg = sd->save_reg.global; - qty = &sd->save_reg.global_num; - max = GLOBAL_REG_NUM; - break; + sd->vars_received |= PRL_CHAR; + break; case 2: //Account Registry - reg = sd->save_reg.account; - qty = &sd->save_reg.account_num; - max = ACCOUNT_REG_NUM; - break; + sd->vars_received |= PRL_ACCL; + break; case 1: //Account2 Registry - reg = sd->save_reg.account2; - qty = &sd->save_reg.account2_num; - max = ACCOUNT_REG2_NUM; - break; + sd->vars_received |= PRL_ACCG; + break; + case 0: + break; default: ShowError("intif_parse_Registers: Unrecognized type %d\n",RFIFOB(fd,12)); return; } - for(j=0,p=13;j<max && p<RFIFOW(fd,2);j++){ - sscanf((char*)RFIFOP(fd,p), "%31c%n", reg[j].str,&len); - reg[j].str[len]='\0'; - p += len+1; //+1 to skip the '\0' between strings. - sscanf((char*)RFIFOP(fd,p), "%255c%n", reg[j].value,&len); - reg[j].value[len]='\0'; - p += len+1; + /* have it not complain about insertion of vars before loading, and not set those vars as new or modified */ + pc->reg_load = true; + + if( RFIFOW(fd, 14) ) { + char key[32], sval[254]; + unsigned int index; + int max = RFIFOW(fd, 14), cursor = 16, ival; + + /** + * Vessel!char_reg_num_db + * + * str type + * { keyLength(B), key(<keyLength>), index(L), valLength(B), val(<valLength>) } + **/ + if( type ) { + for(i = 0; i < max; i++) { + safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + cursor += RFIFOB(fd, cursor) + 1; + + index = RFIFOL(fd, cursor); + cursor += 4; + + safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + cursor += RFIFOB(fd, cursor) + 1; + + script->set_reg(NULL,sd,reference_uid(script->add_str(key), index), key, (void*)sval, NULL); + } + /** + * Vessel! + * + * int type + * { keyLength(B), key(<keyLength>), index(L), value(L) } + **/ + } else { + for(i = 0; i < max; i++) { + safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + cursor += RFIFOB(fd, cursor) + 1; + + index = RFIFOL(fd, cursor); + cursor += 4; + + ival = RFIFOL(fd, cursor); + cursor += 4; + + script->set_reg(NULL,sd,reference_uid(script->add_str(key), index), key, (void*)__64BPTRSIZE(ival), NULL); + } + } } - *qty = j; - - if (flag && sd->save_reg.global_num > -1 && sd->save_reg.account_num > -1 && sd->save_reg.account2_num > -1) + + /* flag it back */ + pc->reg_load = false; + + if (flag && sd->vars_received&PRL_ACCG && sd->vars_received&PRL_ACCL && sd->vars_received&PRL_CHAR) pc->reg_received(sd); //Received all registry values, execute init scripts and what-not. [Skotlex] } @@ -2157,7 +2250,7 @@ int intif_parse(int fd) #ifdef GP_BOUND_ITEMS intif->pItembound_ack(fd); #else - ShowWarning("intif_parse: Received 0x3856 with GP_BOUND_ITEMS disabled !!!\n") + ShowWarning("intif_parse: Received 0x3856 with GP_BOUND_ITEMS disabled !!!\n"); #endif break; // Mercenary System diff --git a/src/map/intif.h b/src/map/intif.h index bd3908ce7..f0bb5c16e 100644 --- a/src/map/intif.h +++ b/src/map/intif.h @@ -45,7 +45,7 @@ struct intif_interface { int (*main_message) (struct map_session_data* sd, const char* message); int (*wis_message) (struct map_session_data *sd,char *nick,char *mes,size_t mes_len); int (*wis_message_to_gm) (char *Wisp_name, int permission, char *mes); - int (*saveregistry) (struct map_session_data *sd, int type); + int (*saveregistry) (struct map_session_data *sd); int (*request_registry) (struct map_session_data *sd, int flag); int (*request_guild_storage) (int account_id, int guild_id); int (*send_guild_storage) (int account_id, struct guild_storage *gstor); diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 3f7d06e36..3bed3e03d 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -2249,16 +2249,6 @@ void itemdb_name_constants(void) { dbi_destroy(iter); } -/* used to clear conflicts during script reload */ -void itemdb_force_name_constants(void) { - DBIterator *iter = db_iterator(itemdb->names); - struct item_data *data; - - for( data = dbi_first(iter); dbi_exists(iter); data = dbi_next(iter) ) - script->set_constant_force(data->name,data->nameid,0); - - dbi_destroy(iter); -} void do_final_itemdb(void) { itemdb->clear(true); @@ -2286,7 +2276,6 @@ void itemdb_defaults(void) { itemdb->final = do_final_itemdb; itemdb->reload = itemdb_reload; itemdb->name_constants = itemdb_name_constants; - itemdb->force_name_constants = itemdb_force_name_constants; /* */ itemdb->groups = NULL; itemdb->group_count = 0; diff --git a/src/map/itemdb.h b/src/map/itemdb.h index d74b92d4b..b3ff606df 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -499,7 +499,6 @@ struct itemdb_interface { void (*final) (void); void (*reload) (void); void (*name_constants) (void); - void (*force_name_constants) (void); /* */ struct item_group *groups; unsigned short group_count; diff --git a/src/map/map.c b/src/map/map.c index aef34ef00..5344d11bf 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1676,6 +1676,9 @@ int map_quit(struct map_session_data *sd) { if( sd->bg_id && !sd->bg_queue.arena ) /* TODO: dump this chunk after bg_queue is fully enabled */ bg->team_leave(sd,1); + if( sd->state.autotrade && runflag != MAPSERVER_ST_SHUTDOWN && !hChSys.closing ) + pc->autotrade_update(sd,PAUC_REMOVE); + skill->cooldown_save(sd); pc->itemcd_do(sd,false); @@ -3606,6 +3609,10 @@ int inter_config_read(char *cfgName) { map->db_use_sql_mob_skill_db = config_switch(w2); ShowStatus ("Using monster skill database as SQL: '%s'\n", w2); } + else if(strcmpi(w1,"autotrade_merchants_db")==0) + strcpy(map->autotrade_merchants_db, w2); + else if(strcmpi(w1,"autotrade_data_db")==0) + strcpy(map->autotrade_data_db, w2); /* sql log db */ else if(strcmpi(w1,"log_db_ip")==0) strcpy(logs->db_ip, w2); @@ -5372,6 +5379,7 @@ void map_hp_symbols(void) { /* specific */ HPM->share(atcommand->create,"addCommand"); HPM->share(script->addScript,"addScript"); + HPM->share(HPM_map_add_group_permission,"addGroupPermission"); } void map_load_defaults(void) { @@ -5551,9 +5559,10 @@ int do_init(int argc, char *argv[]) map->iwall_db = strdb_alloc(DB_OPT_RELEASE_DATA,2*NAME_LENGTH+2+1); // [Zephyrus] Invisible Walls map->zone_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, MAP_ZONE_NAME_LENGTH); - map->iterator_ers = ers_new(sizeof(struct s_mapiterator),"map.c::map_iterator_ers",ERS_OPT_CLEAN); - - map->flooritem_ers = ers_new(sizeof(struct flooritem_data),"map.c::map_flooritem_ers",ERS_OPT_CLEAN); + map->iterator_ers = ers_new(sizeof(struct s_mapiterator),"map.c::map_iterator_ers",ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); + ers_chunk_size(map->iterator_ers, 25); + + map->flooritem_ers = ers_new(sizeof(struct flooritem_data),"map.c::map_flooritem_ers",ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); ers_chunk_size(map->flooritem_ers, 100); if (!minimal) { diff --git a/src/map/map.h b/src/map/map.h index 906202f83..a39cc7f86 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -839,6 +839,8 @@ struct map_interface { char mob_skill_db_db[32]; char mob_skill_db2_db[32]; char interreg_db[32]; + char autotrade_merchants_db[32]; + char autotrade_data_db[32]; char default_codepage[32]; diff --git a/src/map/mapreg.h b/src/map/mapreg.h index c8f229cef..157e634cc 100644 --- a/src/map/mapreg.h +++ b/src/map/mapreg.h @@ -9,7 +9,7 @@ #include "../common/db.h" struct mapreg_save { - int uid; + int64 uid; union { int i; char *str; @@ -19,19 +19,27 @@ struct mapreg_save { struct mapreg_interface { DBMap *db; // int var_id -> int value + /* TODO duck str_db, use same */ DBMap *str_db; // int var_id -> char* value + /* */ + DBMap *array_db; + /* */ + bool skip_insert; + /* */ struct eri *ers; //[Ind/Hercules] + /* */ char table[32]; + /* */ bool i_dirty; bool str_dirty; /* */ void (*init) (void); void (*final) (void); /* */ - int (*readreg) (int uid); - char* (*readregstr) (int uid); - bool (*setreg) (int uid, int val); - bool (*setregstr) (int uid, const char *str); + int (*readreg) (int64 uid); + char* (*readregstr) (int64 uid); + bool (*setreg) (int64 uid, int val); + bool (*setregstr) (int64 uid, const char *str); void (*load) (void); void (*save) (void); int (*save_timer) (int tid, int64 tick, int id, intptr_t data); diff --git a/src/map/mapreg_sql.c b/src/map/mapreg_sql.c index 6a13ef2a0..c2a35f930 100644 --- a/src/map/mapreg_sql.c +++ b/src/map/mapreg_sql.c @@ -21,51 +21,56 @@ struct mapreg_interface mapreg_s; #define MAPREG_AUTOSAVE_INTERVAL (300*1000) /// Looks up the value of an integer variable using its uid. -int mapreg_readreg(int uid) { - struct mapreg_save *m = idb_get(mapreg->db, uid); +int mapreg_readreg(int64 uid) { + struct mapreg_save *m = i64db_get(mapreg->db, uid); return m?m->u.i:0; } /// Looks up the value of a string variable using its uid. -char* mapreg_readregstr(int uid) { - struct mapreg_save *m = idb_get(mapreg->str_db, uid); +char* mapreg_readregstr(int64 uid) { + struct mapreg_save *m = i64db_get(mapreg->str_db, uid); return m?m->u.str:NULL; } /// Modifies the value of an integer variable. -bool mapreg_setreg(int uid, int val) { +bool mapreg_setreg(int64 uid, int val) { struct mapreg_save *m; - int num = (uid & 0x00ffffff); - int i = (uid & 0xff000000) >> 24; + int num = script_getvarid(uid); + unsigned int i = script_getvaridx(uid); const char* name = script->get_str(num); if( val != 0 ) { - if( (m = idb_get(mapreg->db,uid)) ) { + if( (m = i64db_get(mapreg->db,uid)) ) { m->u.i = val; if(name[1] != '@') { m->save = true; mapreg->i_dirty = true; } } else { + if( i ) + script->array_update(&mapreg->array_db,uid,false); + m = ers_alloc(mapreg->ers, struct mapreg_save); m->u.i = val; m->uid = uid; m->save = false; - if(name[1] != '@') {// write new variable to database + if(name[1] != '@' && !mapreg->skip_insert) {// write new variable to database char tmp_str[32*2+1]; SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, 32)); if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%d')", mapreg->table, tmp_str, i, val) ) Sql_ShowDebug(map->mysql_handle); } - idb_put(mapreg->db, uid, m); + i64db_put(mapreg->db, uid, m); } } else { // val == 0 - if( (m = idb_get(mapreg->db,uid)) ) { + if( i ) + script->array_update(&mapreg->array_db,uid,true); + if( (m = i64db_get(mapreg->db,uid)) ) { ers_free(mapreg->ers, m); } - idb_remove(mapreg->db,uid); + i64db_remove(mapreg->db,uid); if( name[1] != '@' ) {// Remove from database because it is unused. if( SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) ) @@ -77,25 +82,27 @@ bool mapreg_setreg(int uid, int val) { } /// Modifies the value of a string variable. -bool mapreg_setregstr(int uid, const char* str) { +bool mapreg_setregstr(int64 uid, const char* str) { struct mapreg_save *m; - int num = (uid & 0x00ffffff); - int i = (uid & 0xff000000) >> 24; + int num = script_getvarid(uid); + unsigned int i = script_getvaridx(uid); const char* name = script->get_str(num); if( str == NULL || *str == 0 ) { + if( i ) + script->array_update(&mapreg->array_db,uid,true); if(name[1] != '@') { if( SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%d'", mapreg->table, name, i) ) Sql_ShowDebug(map->mysql_handle); } - if( (m = idb_get(mapreg->str_db,uid)) ) { + if( (m = i64db_get(mapreg->str_db,uid)) ) { if( m->u.str != NULL ) aFree(m->u.str); ers_free(mapreg->ers, m); } - idb_remove(mapreg->str_db,uid); + i64db_remove(mapreg->str_db,uid); } else { - if( (m = idb_get(mapreg->str_db,uid)) ) { + if( (m = i64db_get(mapreg->str_db,uid)) ) { if( m->u.str != NULL ) aFree(m->u.str); m->u.str = aStrdup(str); @@ -104,13 +111,16 @@ bool mapreg_setregstr(int uid, const char* str) { m->save = true; } } else { + if( i ) + script->array_update(&mapreg->array_db,uid,false); + m = ers_alloc(mapreg->ers, struct mapreg_save); m->uid = uid; m->u.str = aStrdup(str); m->save = false; - if(name[1] != '@') { //put returned null, so we must insert. + if(name[1] != '@' && !mapreg->skip_insert) { //put returned null, so we must insert. char tmp_str[32*2+1]; char tmp_str2[255*2+1]; SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, 32)); @@ -118,7 +128,7 @@ bool mapreg_setregstr(int uid, const char* str) { if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%d','%s')", mapreg->table, tmp_str, i, tmp_str2) ) Sql_ShowDebug(map->mysql_handle); } - idb_put(mapreg->str_db, uid, m); + i64db_put(mapreg->str_db, uid, m); } } @@ -147,41 +157,36 @@ void script_load_mapreg(void) { return; } + mapreg->skip_insert = true; + SQL->StmtBindColumn(stmt, 0, SQLDT_STRING, &varname[0], sizeof(varname), &length, NULL); SQL->StmtBindColumn(stmt, 1, SQLDT_INT, &index, 0, NULL, NULL); SQL->StmtBindColumn(stmt, 2, SQLDT_STRING, &value[0], sizeof(value), NULL, NULL); - + while ( SQL_SUCCESS == SQL->StmtNextRow(stmt) ) { - struct mapreg_save *m = NULL; int s = script->add_str(varname); int i = index; + if( varname[length-1] == '$' ) { - if( idb_exists(mapreg->str_db, (i<<24)|s) ) { + if( i64db_exists(mapreg->str_db, reference_uid(s, i)) ) { ShowWarning("load_mapreg: duplicate! '%s' => '%s' skipping...\n",varname,value); continue; } + script->set_reg(NULL,NULL,reference_uid(s, i), varname, (void*)value, NULL); } else { - if( idb_exists(mapreg->db, (i<<24)|s) ) { + if( i64db_exists(mapreg->db, reference_uid(s, i)) ) { ShowWarning("load_mapreg: duplicate! '%s' => '%s' skipping...\n",varname,value); continue; } - } - - m = ers_alloc(mapreg->ers, struct mapreg_save); - m->uid = (i<<24)|s; - m->save = false; - if( varname[length-1] == '$' ) { - m->u.str = aStrdup(value); - idb_put(mapreg->str_db, m->uid, m); - } else { - m->u.i = atoi(value); - idb_put(mapreg->db, m->uid, m); + script->set_reg(NULL,NULL,reference_uid(s, i), varname, (void*)__64BPTRSIZE(atoi(value)), NULL); } } SQL->StmtFree(stmt); + mapreg->skip_insert = false; + mapreg->i_dirty = false; mapreg->str_dirty = false; } @@ -195,8 +200,8 @@ void script_save_mapreg(void) { iter = db_iterator(mapreg->db); for( m = dbi_first(iter); dbi_exists(iter); m = dbi_next(iter) ) { if( m->save ) { - int num = (m->uid & 0x00ffffff); - int i = (m->uid & 0xff000000) >> 24; + int num = script_getvarid(m->uid); + int i = script_getvaridx(m->uid); const char* name = script->get_str(num); if( SQL_ERROR == SQL->Query(map->mysql_handle, "UPDATE `%s` SET `value`='%d' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, m->u.i, name, i) ) @@ -212,8 +217,8 @@ void script_save_mapreg(void) { iter = db_iterator(mapreg->str_db); for( m = dbi_first(iter); dbi_exists(iter); m = dbi_next(iter) ) { if( m->save ) { - int num = (m->uid & 0x00ffffff); - int i = (m->uid & 0xff000000) >> 24; + int num = script_getvarid(m->uid); + int i = script_getvaridx(m->uid); const char* name = script->get_str(num); char tmp_str2[2*255+1]; @@ -257,7 +262,13 @@ void mapreg_reload(void) { db_clear(mapreg->db); db_clear(mapreg->str_db); - + + if( mapreg->array_db ) { + mapreg->array_db->destroy(mapreg->array_db,script->array_free_db); + mapreg->array_db = NULL; + } + + mapreg->load(); } @@ -286,11 +297,14 @@ void mapreg_final(void) { db_destroy(mapreg->str_db); ers_destroy(mapreg->ers); + + if( mapreg->array_db ) + mapreg->array_db->destroy(mapreg->array_db,script->array_free_db); } void mapreg_init(void) { - mapreg->db = idb_alloc(DB_OPT_BASE); - mapreg->str_db = idb_alloc(DB_OPT_BASE); + mapreg->db = i64db_alloc(DB_OPT_BASE); + mapreg->str_db = i64db_alloc(DB_OPT_BASE); mapreg->ers = ers_new(sizeof(struct mapreg_save), "mapreg_sql.c::mapreg_ers", ERS_OPT_CLEAN); mapreg->load(); @@ -314,12 +328,16 @@ void mapreg_defaults(void) { mapreg->db = NULL; mapreg->str_db = NULL; mapreg->ers = NULL; + mapreg->skip_insert = false; safestrncpy(mapreg->table, "mapreg", sizeof(mapreg->table)); mapreg->i_dirty = false; mapreg->str_dirty = false; /* */ + mapreg->array_db = NULL; + + /* */ mapreg->init = mapreg_init; mapreg->final = mapreg_final; diff --git a/src/map/mob.c b/src/map/mob.c index d919e7478..6a8aa5f03 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2552,11 +2552,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { if( ++sd->mission_count >= 100 && (temp = mob->get_random_id(0, 0xE, sd->status.base_level)) ) { pc->addfame(sd, 1); sd->mission_mobid = temp; - pc_setglobalreg(sd,"TK_MISSION_ID", temp); + pc_setglobalreg(sd,script->add_str("TK_MISSION_ID"), temp); sd->mission_count = 0; clif->mission_info(sd, temp, 0); } - pc_setglobalreg(sd,"TK_MISSION_COUNT", sd->mission_count); + pc_setglobalreg(sd,script->add_str("TK_MISSION_COUNT"), sd->mission_count); } if( sd->status.party_id ) diff --git a/src/map/npc.c b/src/map/npc.c index 9ed6d2a7e..722e5199c 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -2188,7 +2188,7 @@ int npc_unload(struct npc_data* nd, bool single) { if( single && nd->bl.m != -1 ) map->remove_questinfo(nd->bl.m,nd); - if( (nd->subtype == SHOP || nd->subtype == CASHSHOP) && nd->src_id == 0) //src check for duplicate shops [Orcao] + if( nd->src_id == 0 && ( nd->subtype == SHOP || nd->subtype == CASHSHOP ) ) //src check for duplicate shops [Orcao] aFree(nd->u.shop.shop_item); else if( nd->subtype == SCRIPT ) { struct s_mapiterator* iter; diff --git a/src/map/npc.h b/src/map/npc.h index a3f07e79c..2f4401bf7 100644 --- a/src/map/npc.h +++ b/src/map/npc.h @@ -46,6 +46,7 @@ struct npc_shop_data { struct npc_item_list *item;/* list */ unsigned short items;/* total */ }; +struct npc_parse; struct npc_data { struct block_list bl; struct unit_data *ud; @@ -67,7 +68,7 @@ struct npc_data { unsigned short level; unsigned short stat_point; - void* chatdb; // pointer to a npc_parse struct (see npc_chat.c) + struct npc_parse *chatdb; char* path;/* path dir */ enum npc_subtype subtype; int src_id; @@ -302,12 +303,6 @@ struct pcrematch_set { /* * Entire data structure hung off a NPC - * - * The reason I have done it this way (a void * in npc_data and then - * this) was to reduce the number of patches that needed to be applied - * to a ragnarok distribution to bring this code online. I - * also wanted people to be able to grab this one file to get updates - * without having to do a large number of changes. */ struct npc_parse { struct pcrematch_set* active; diff --git a/src/map/npc_chat.c b/src/map/npc_chat.c index 1372fff21..3f4a1a1c1 100644 --- a/src/map/npc_chat.c +++ b/src/map/npc_chat.c @@ -91,9 +91,9 @@ void finalize_pcrematch_entry(struct pcrematch_entry* e) struct pcrematch_set* lookup_pcreset(struct npc_data* nd, int setid) { struct pcrematch_set *pcreset; - struct npc_parse *npcParse = (struct npc_parse *) nd->chatdb; + struct npc_parse *npcParse = nd->chatdb; if (npcParse == NULL) - nd->chatdb = npcParse = (struct npc_parse *) aCalloc(sizeof(struct npc_parse), 1); + nd->chatdb = npcParse = (struct npc_parse *)aCalloc(sizeof(struct npc_parse), 1); pcreset = npcParse->active; @@ -112,7 +112,7 @@ struct pcrematch_set* lookup_pcreset(struct npc_data* nd, int setid) } if (pcreset == NULL) { - pcreset = (struct pcrematch_set *) aCalloc(sizeof(struct pcrematch_set), 1); + pcreset = (struct pcrematch_set *)aCalloc(sizeof(struct pcrematch_set), 1); pcreset->next = npcParse->inactive; if (pcreset->next != NULL) pcreset->next->prev = pcreset; @@ -132,7 +132,7 @@ struct pcrematch_set* lookup_pcreset(struct npc_data* nd, int setid) void activate_pcreset(struct npc_data* nd, int setid) { struct pcrematch_set *pcreset; - struct npc_parse *npcParse = (struct npc_parse *) nd->chatdb; + struct npc_parse *npcParse = nd->chatdb; if (npcParse == NULL) return; // Nothing to activate... pcreset = npcParse->inactive; @@ -165,7 +165,7 @@ void activate_pcreset(struct npc_data* nd, int setid) void deactivate_pcreset(struct npc_data* nd, int setid) { struct pcrematch_set *pcreset; - struct npc_parse *npcParse = (struct npc_parse *) nd->chatdb; + struct npc_parse *npcParse = nd->chatdb; if (npcParse == NULL) return; // Nothing to deactivate... if (setid == -1) { @@ -202,7 +202,7 @@ void delete_pcreset(struct npc_data* nd, int setid) { int active = 1; struct pcrematch_set *pcreset; - struct npc_parse *npcParse = (struct npc_parse *) nd->chatdb; + struct npc_parse *npcParse = nd->chatdb; if (npcParse == NULL) return; // Nothing to deactivate... pcreset = npcParse->active; @@ -299,7 +299,7 @@ void npc_chat_def_pattern(struct npc_data* nd, int setid, const char* pattern, c */ void npc_chat_finalize(struct npc_data* nd) { - struct npc_parse *npcParse = (struct npc_parse *) nd->chatdb; + struct npc_parse *npcParse = nd->chatdb; if (npcParse == NULL) return; @@ -318,8 +318,8 @@ void npc_chat_finalize(struct npc_data* nd) */ int npc_chat_sub(struct block_list* bl, va_list ap) { - struct npc_data* nd = (struct npc_data *) bl; - struct npc_parse* npcParse = (struct npc_parse *) nd->chatdb; + struct npc_data *nd = (struct npc_data *) bl; + struct npc_parse *npcParse = nd->chatdb; char* msg; int len, i; struct map_session_data* sd; diff --git a/src/map/pc.c b/src/map/pc.c index fc1d56b6d..0a1a474ad 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -968,7 +968,7 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim uint32 ip = session[sd->fd]->client_addr; sd->login_id2 = login_id2; - + if (pc->set_group(sd, group_id) != 0) { ShowWarning("pc_authok: %s (AID:%d) logged in with unknown group id (%d)! kicking...\n", st->name, sd->status.account_id, group_id); @@ -1108,6 +1108,11 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim sd->avail_quests = 0; sd->save_quest = false; + sd->var_db = i64db_alloc(DB_OPT_BASE); + sd->vars_dirty = false; + sd->vars_ok = false; + sd->vars_received = 0x0; + //warp player if ((i=pc->setpos(sd,sd->status.last_point.map, sd->status.last_point.x, sd->status.last_point.y, CLR_OUTSIGHT)) != 0) { ShowError ("Last_point_map %s - id %d not found (error code %d)\n", mapindex_id2name(sd->status.last_point.map), sd->status.last_point.map, i); @@ -1214,7 +1219,7 @@ int pc_set_hate_mob(struct map_session_data *sd, int pos, struct block_list *bl) return 0; //Wrong size } sd->hate_mob[pos] = class_; - pc_setglobalreg(sd,pc->sg_info[pos].hate_var,class_+1); + pc_setglobalreg(sd,script->add_str(pc->sg_info[pos].hate_var),class_+1); clif->hate_info(sd, pos, class_, 1); return 1; } @@ -1226,55 +1231,58 @@ int pc_reg_received(struct map_session_data *sd) { int i,j, idx = 0; - sd->change_level_2nd = pc_readglobalreg(sd,"jobchange_level"); - sd->change_level_3rd = pc_readglobalreg(sd,"jobchange_level_3rd"); - sd->die_counter = pc_readglobalreg(sd,"PC_DIE_COUNTER"); + sd->vars_ok = true; + + sd->change_level_2nd = pc_readglobalreg(sd,script->add_str("jobchange_level")); + sd->change_level_3rd = pc_readglobalreg(sd,script->add_str("jobchange_level_3rd")); + sd->die_counter = pc_readglobalreg(sd,script->add_str("PC_DIE_COUNTER")); // Cash shop - sd->cashPoints = pc_readaccountreg(sd,"#CASHPOINTS"); - sd->kafraPoints = pc_readaccountreg(sd,"#KAFRAPOINTS"); + sd->cashPoints = pc_readaccountreg(sd,script->add_str("#CASHPOINTS")); + sd->kafraPoints = pc_readaccountreg(sd,script->add_str("#KAFRAPOINTS")); // Cooking Exp - sd->cook_mastery = pc_readglobalreg(sd,"COOK_MASTERY"); + sd->cook_mastery = pc_readglobalreg(sd,script->add_str("COOK_MASTERY")); if( (sd->class_&MAPID_BASEMASK) == MAPID_TAEKWON ) { // Better check for class rather than skill to prevent "skill resets" from unsetting this - sd->mission_mobid = pc_readglobalreg(sd,"TK_MISSION_ID"); - sd->mission_count = pc_readglobalreg(sd,"TK_MISSION_COUNT"); + sd->mission_mobid = pc_readglobalreg(sd,script->add_str("TK_MISSION_ID")); + sd->mission_count = pc_readglobalreg(sd,script->add_str("TK_MISSION_COUNT")); } //SG map and mob read [Komurka] for(i=0;i<MAX_PC_FEELHATE;i++) { //for now - someone need to make reading from txt/sql - if ((j = pc_readglobalreg(sd,pc->sg_info[i].feel_var))!=0) { + if ((j = pc_readglobalreg(sd,script->add_str(pc->sg_info[i].feel_var)))!=0) { sd->feel_map[i].index = j; sd->feel_map[i].m = map->mapindex2mapid(j); } else { sd->feel_map[i].index = 0; sd->feel_map[i].m = -1; } - sd->hate_mob[i] = pc_readglobalreg(sd,pc->sg_info[i].hate_var)-1; + sd->hate_mob[i] = pc_readglobalreg(sd,script->add_str(pc->sg_info[i].hate_var))-1; } if ((i = pc->checkskill(sd,RG_PLAGIARISM)) > 0) { - sd->cloneskill_id = pc_readglobalreg(sd,"CLONE_SKILL"); + sd->cloneskill_id = pc_readglobalreg(sd,script->add_str("CLONE_SKILL")); if (sd->cloneskill_id > 0 && (idx = skill->get_index(sd->cloneskill_id))) { sd->status.skill[idx].id = sd->cloneskill_id; - sd->status.skill[idx].lv = pc_readglobalreg(sd,"CLONE_SKILL_LV"); + sd->status.skill[idx].lv = pc_readglobalreg(sd,script->add_str("CLONE_SKILL_LV")); if (sd->status.skill[idx].lv > i) sd->status.skill[idx].lv = i; sd->status.skill[idx].flag = SKILL_FLAG_PLAGIARIZED; } } if ((i = pc->checkskill(sd,SC_REPRODUCE)) > 0) { - sd->reproduceskill_id = pc_readglobalreg(sd,"REPRODUCE_SKILL"); + sd->reproduceskill_id = pc_readglobalreg(sd,script->add_str("REPRODUCE_SKILL")); if( sd->reproduceskill_id > 0 && (idx = skill->get_index(sd->reproduceskill_id))) { sd->status.skill[idx].id = sd->reproduceskill_id; - sd->status.skill[idx].lv = pc_readglobalreg(sd,"REPRODUCE_SKILL_LV"); + sd->status.skill[idx].lv = pc_readglobalreg(sd,script->add_str("REPRODUCE_SKILL_LV")); if( i < sd->status.skill[idx].lv) sd->status.skill[idx].lv = i; sd->status.skill[idx].flag = SKILL_FLAG_PLAGIARIZED; } } + //Weird... maybe registries were reloaded? if (sd->state.active) return 0; @@ -1330,7 +1338,7 @@ int pc_reg_received(struct map_session_data *sd) if( npc->motd ) /* [Ind/Hercules] */ script->run(npc->motd->u.scr.script, 0, sd->bl.id, npc->fake_nd->bl.id); - + return 1; } @@ -1652,7 +1660,7 @@ int pc_calc_skilltree_normalize_job(struct map_session_data *sd) } - pc_setglobalreg (sd, "jobchange_level", sd->change_level_2nd); + pc_setglobalreg (sd, script->add_str("jobchange_level"), sd->change_level_2nd); } if (skill_point < novice_skills + (sd->change_level_2nd - 1)) { @@ -1665,7 +1673,7 @@ int pc_calc_skilltree_normalize_job(struct map_session_data *sd) - (sd->status.job_level - 1) - (sd->change_level_2nd - 1) - novice_skills; - pc_setglobalreg (sd, "jobchange_level_3rd", sd->change_level_3rd); + pc_setglobalreg (sd, script->add_str("jobchange_level_3rd"), sd->change_level_3rd); } if (skill_point < novice_skills + (sd->change_level_2nd - 1) + (sd->change_level_3rd - 1)) { @@ -3777,8 +3785,8 @@ int pc_paycash(struct map_session_data *sd, int price, int points) return -1; } - pc_setaccountreg(sd, "#CASHPOINTS", sd->cashPoints-cash); - pc_setaccountreg(sd, "#KAFRAPOINTS", sd->kafraPoints-points); + pc_setaccountreg(sd, script->add_str("#CASHPOINTS"), sd->cashPoints-cash); + pc_setaccountreg(sd, script->add_str("#KAFRAPOINTS"), sd->kafraPoints-points); if( battle_config.cashshop_show_points ) { @@ -3804,7 +3812,7 @@ int pc_getcash(struct map_session_data *sd, int cash, int points) cash = MAX_ZENY-sd->cashPoints; } - pc_setaccountreg(sd, "#CASHPOINTS", sd->cashPoints+cash); + pc_setaccountreg(sd, script->add_str("#CASHPOINTS"), sd->cashPoints+cash); if( battle_config.cashshop_show_points ) { @@ -3827,7 +3835,7 @@ int pc_getcash(struct map_session_data *sd, int cash, int points) points = MAX_ZENY-sd->kafraPoints; } - pc_setaccountreg(sd, "#KAFRAPOINTS", sd->kafraPoints+points); + pc_setaccountreg(sd, script->add_str("#KAFRAPOINTS"), sd->kafraPoints+points); if( battle_config.cashshop_show_points ) { @@ -4335,10 +4343,6 @@ int pc_isUseitem(struct map_session_data *sd,int n) return 0; } - //Dead Branch & Bloody Branch & Porings Box - if( nameid == ITEMID_BRANCH_OF_DEAD_TREE || nameid == ITEMID_BLOODY_DEAD_BRANCH || nameid == ITEMID_PORING_BOX ) - logs->branch(sd); - return 1; } @@ -4448,6 +4452,10 @@ int pc_useitem(struct map_session_data *sd,int n) { } } + //Dead Branch & Bloody Branch & Porings Box + if( nameid == ITEMID_BRANCH_OF_DEAD_TREE || nameid == ITEMID_BLOODY_DEAD_BRANCH || nameid == ITEMID_PORING_BOX ) + logs->branch(sd); + sd->itemid = sd->status.inventory[n].nameid; sd->itemindex = n; if(sd->catch_target_class != -1) //Abort pet catching. @@ -6505,7 +6513,7 @@ int pc_resetstate(struct map_session_data* sd) if( sd->mission_mobid ) { //bugreport:2200 sd->mission_mobid = 0; sd->mission_count = 0; - pc_setglobalreg(sd,"TK_MISSION_ID", 0); + pc_setglobalreg(sd,script->add_str("TK_MISSION_ID"), 0); } status_calc_pc(sd,SCO_NONE); @@ -6637,7 +6645,7 @@ int pc_resetfeel(struct map_session_data* sd) { sd->feel_map[i].m = -1; sd->feel_map[i].index = 0; - pc_setglobalreg(sd,pc->sg_info[i].feel_var,0); + pc_setglobalreg(sd,script->add_str(pc->sg_info[i].feel_var),0); } return 0; @@ -6651,7 +6659,7 @@ int pc_resethate(struct map_session_data* sd) for (i=0; i<3; i++) { sd->hate_mob[i] = -1; - pc_setglobalreg(sd,pc->sg_info[i].hate_var,0); + pc_setglobalreg(sd,script->add_str(pc->sg_info[i].hate_var),0); } return 0; } @@ -6806,7 +6814,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { if (sd->npc_id && sd->st && sd->st->state != RUN) npc->event_dequeue(sd); - pc_setglobalreg(sd,"PC_DIE_COUNTER",sd->die_counter+1); + pc_setglobalreg(sd,script->add_str("PC_DIE_COUNTER"),sd->die_counter+1); pc->setparam(sd, SP_KILLERRID, src?src->id:0); if( sd->bg_id ) {/* TODO: purge when bgqueue is deemed ok */ @@ -7608,12 +7616,12 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper) // changing from 1st to 2nd job if ((b_class&JOBL_2) && !(sd->class_&JOBL_2) && (b_class&MAPID_UPPERMASK) != MAPID_SUPER_NOVICE) { sd->change_level_2nd = sd->status.job_level; - pc_setglobalreg (sd, "jobchange_level", sd->change_level_2nd); + pc_setglobalreg (sd, script->add_str("jobchange_level"), sd->change_level_2nd); } // changing from 2nd to 3rd job else if((b_class&JOBL_THIRD) && !(sd->class_&JOBL_THIRD)) { sd->change_level_3rd = sd->status.job_level; - pc_setglobalreg (sd, "jobchange_level_3rd", sd->change_level_3rd); + pc_setglobalreg (sd, script->add_str("jobchange_level_3rd"), sd->change_level_3rd); } if(sd->cloneskill_id) { @@ -7625,8 +7633,8 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper) clif->deleteskill(sd,sd->cloneskill_id); } sd->cloneskill_id = 0; - pc_setglobalreg(sd, "CLONE_SKILL", 0); - pc_setglobalreg(sd, "CLONE_SKILL_LV", 0); + pc_setglobalreg(sd, script->add_str("CLONE_SKILL"), 0); + pc_setglobalreg(sd, script->add_str("CLONE_SKILL_LV"), 0); } if(sd->reproduceskill_id) { @@ -7638,8 +7646,8 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper) clif->deleteskill(sd,sd->reproduceskill_id); } sd->reproduceskill_id = 0; - pc_setglobalreg(sd, "REPRODUCE_SKILL",0); - pc_setglobalreg(sd, "REPRODUCE_SKILL_LV",0); + pc_setglobalreg(sd, script->add_str("REPRODUCE_SKILL"),0); + pc_setglobalreg(sd, script->add_str("REPRODUCE_SKILL_LV"),0); } if ( (b_class&MAPID_UPPERMASK) != (sd->class_&MAPID_UPPERMASK) ) { //Things to remove when changing class tree. @@ -8044,341 +8052,246 @@ int pc_candrop(struct map_session_data *sd, struct item *item) return 0; return (itemdb_isdropable(item, pc_get_group_level(sd))); } - -/*========================================== - * Read ram register for player sd - * get val (int) from reg for player sd - *------------------------------------------*/ -int pc_readreg(struct map_session_data* sd, int reg) -{ - int i; - - nullpo_ret(sd); - - ARR_FIND( 0, sd->reg_num, i, sd->reg[i].index == reg ); - return ( i < sd->reg_num ) ? sd->reg[i].data : 0; +/** + * For '@type' variables (temporary numeric char reg) + **/ +int pc_readreg(struct map_session_data* sd, int64 reg) { + return i64db_iget(sd->var_db, reg); } -/*========================================== - * Set ram register for player sd - * memo val(int) at reg for player sd - *------------------------------------------*/ -int pc_setreg(struct map_session_data* sd, int reg, int val) -{ - int i; - - nullpo_ret(sd); - - ARR_FIND( 0, sd->reg_num, i, sd->reg[i].index == reg ); - if( i < sd->reg_num ) - {// overwrite existing entry - sd->reg[i].data = val; - return 1; - } - - ARR_FIND( 0, sd->reg_num, i, sd->reg[i].data == 0 ); - if( i == sd->reg_num ) - {// nothing free, increase size - sd->reg_num++; - RECREATE(sd->reg, struct script_reg, sd->reg_num); +/** + * For '@type' variables (temporary numeric char reg) + **/ +void pc_setreg(struct map_session_data* sd, int64 reg, int val) { + unsigned int index = script_getvaridx(reg); + + if( val ) { + i64db_iput(sd->var_db, reg, val); + if( index ) + script->array_update(&sd->array_db,reg,false); + } else { + i64db_remove(sd->var_db, reg); + if( index ) + script->array_update(&sd->array_db,reg,true); } - sd->reg[i].index = reg; - sd->reg[i].data = val; - - return 1; } -/*========================================== - * Read ram register for player sd - * get val (str) from reg for player sd - *------------------------------------------*/ -char* pc_readregstr(struct map_session_data* sd, int reg) -{ - int i; - - nullpo_ret(sd); +/** + * For '@type$' variables (temporary string char reg) + **/ +char* pc_readregstr(struct map_session_data* sd, int64 reg) { + struct script_reg_str *p = NULL; - ARR_FIND( 0, sd->regstr_num, i, sd->regstr[i].index == reg ); - return ( i < sd->regstr_num ) ? sd->regstr[i].data : NULL; + p = i64db_get(sd->var_db, reg); + + return p ? p->value : NULL; } -/*========================================== - * Set ram register for player sd - * memo val(str) at reg for player sd - *------------------------------------------*/ -int pc_setregstr(struct map_session_data* sd, int reg, const char* str) -{ - int i; - - nullpo_ret(sd); +/** + * For '@type$' variables (temporary string char reg) + **/ +void pc_setregstr(struct map_session_data* sd, int64 reg, const char* str) { + struct script_reg_str *p = NULL; + unsigned int index = script_getvaridx(reg); + DBData prev; - ARR_FIND( 0, sd->regstr_num, i, sd->regstr[i].index == reg ); - if( i < sd->regstr_num ) - {// found entry, update - if( str == NULL || *str == '\0' ) - {// empty string - if( sd->regstr[i].data != NULL ) - aFree(sd->regstr[i].data); - sd->regstr[i].data = NULL; - } - else if( sd->regstr[i].data ) - {// recreate - size_t len = strlen(str)+1; - RECREATE(sd->regstr[i].data, char, len); - memcpy(sd->regstr[i].data, str, len*sizeof(char)); + if( str[0] ) { + p = ers_alloc(pc->str_reg_ers, struct script_reg_str); + + p->value = aStrdup(str); + p->flag.type = 1; + + if( sd->var_db->put(sd->var_db,DB->i642key(reg),DB->ptr2data(p),&prev) ) { + p = DB->data2ptr(&prev); + if( p->value ) + aFree(p->value); + ers_free(pc->str_reg_ers, p); + } else { + if( index ) + script->array_update(&sd->array_db,reg,false); } - else - {// create - sd->regstr[i].data = aStrdup(str); + } else { + if( sd->var_db->remove(sd->var_db,DB->i642key(reg),&prev) ) { + p = DB->data2ptr(&prev); + if( p->value ) + aFree(p->value); + ers_free(pc->str_reg_ers, p); + if( index ) + script->array_update(&sd->array_db,reg,true); } - return 1; } - - if( str == NULL || *str == '\0' ) - return 1;// nothing to add, empty string - - ARR_FIND( 0, sd->regstr_num, i, sd->regstr[i].data == NULL ); - if( i == sd->regstr_num ) - {// nothing free, increase size - sd->regstr_num++; - RECREATE(sd->regstr, struct script_regstr, sd->regstr_num); - } - sd->regstr[i].index = reg; - sd->regstr[i].data = aStrdup(str); - - return 1; } - -int pc_readregistry(struct map_session_data *sd,const char *reg,int type) -{ - struct global_reg *sd_reg; - int i,max; - - nullpo_ret(sd); - switch (type) { - case 3: //Char reg - sd_reg = sd->save_reg.global; - max = sd->save_reg.global_num; - break; - case 2: //Account reg - sd_reg = sd->save_reg.account; - max = sd->save_reg.account_num; - break; - case 1: //Account2 reg - sd_reg = sd->save_reg.account2; - max = sd->save_reg.account2_num; - break; - default: - return 0; - } - if (max == -1) { - ShowError("pc_readregistry: Trying to read reg value %s (type %d) before it's been loaded!\n", reg, type); +/** + * Serves the following variable types: + * - 'type' (permanent nuneric char reg) + * - '#type' (permanent numeric account reg) + * - '##type' (permanent numeric account reg2) + **/ +int pc_readregistry(struct map_session_data *sd, int64 reg) { + struct script_reg_num *p = NULL; + + if (!sd->vars_ok) { + ShowError("pc_readregistry: Trying to read reg %s before it's been loaded!\n", script->get_str(script_getvarid(reg))); //This really shouldn't happen, so it's possible the data was lost somewhere, we should request it again. - intif->request_registry(sd,type==3?4:type); + //intif->request_registry(sd,type==3?4:type); + set_eof(sd->fd); return 0; } + + p = i64db_get(sd->var_db, reg); - ARR_FIND( 0, max, i, strcmp(sd_reg[i].str,reg) == 0 ); - return ( i < max ) ? atoi(sd_reg[i].value) : 0; + return p ? p->value : 0; } - -char* pc_readregistry_str(struct map_session_data *sd,const char *reg,int type) -{ - struct global_reg *sd_reg; - int i,max; - - nullpo_ret(sd); - switch (type) { - case 3: //Char reg - sd_reg = sd->save_reg.global; - max = sd->save_reg.global_num; - break; - case 2: //Account reg - sd_reg = sd->save_reg.account; - max = sd->save_reg.account_num; - break; - case 1: //Account2 reg - sd_reg = sd->save_reg.account2; - max = sd->save_reg.account2_num; - break; - default: - return NULL; - } - if (max == -1) { - ShowError("pc_readregistry: Trying to read reg value %s (type %d) before it's been loaded!\n", reg, type); +/** + * Serves the following variable types: + * - 'type$' (permanent str char reg) + * - '#type$' (permanent str account reg) + * - '##type$' (permanent str account reg2) + **/ +char* pc_readregistry_str(struct map_session_data *sd, int64 reg) { + struct script_reg_str *p = NULL; + + if (!sd->vars_ok) { + ShowError("pc_readregistry_str: Trying to read reg %s before it's been loaded!\n", script->get_str(script_getvarid(reg))); //This really shouldn't happen, so it's possible the data was lost somewhere, we should request it again. - intif->request_registry(sd,type==3?4:type); + //intif->request_registry(sd,type==3?4:type); + set_eof(sd->fd); return NULL; } - ARR_FIND( 0, max, i, strcmp(sd_reg[i].str,reg) == 0 ); - return ( i < max ) ? sd_reg[i].value : NULL; + p = i64db_get(sd->var_db, reg); + + return p ? p->value : NULL; } +/** + * Serves the following variable types: + * - 'type' (permanent nuneric char reg) + * - '#type' (permanent numeric account reg) + * - '##type' (permanent numeric account reg2) + **/ +int pc_setregistry(struct map_session_data *sd, int64 reg, int val) { + struct script_reg_num *p = NULL; + int i; + const char *regname = script->get_str( script_getvarid(reg) ); + unsigned int index = script_getvaridx(reg); -int pc_setregistry(struct map_session_data *sd,const char *reg,int val,int type) -{ - struct global_reg *sd_reg; - int i,*max, regmax; - - nullpo_ret(sd); - - switch( type ) - { - case 3: //Char reg - if( !strcmp(reg,"PC_DIE_COUNTER") && sd->die_counter != val ) - { - i = (!sd->die_counter && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE); - sd->die_counter = val; - if( i ) - status_calc_pc(sd,SCO_NONE); // Lost the bonus. - } - else if( !strcmp(reg,"COOK_MASTERY") && sd->cook_mastery != val ) - { - val = cap_value(val, 0, 1999); - sd->cook_mastery = val; - } - sd_reg = sd->save_reg.global; - max = &sd->save_reg.global_num; - regmax = GLOBAL_REG_NUM; - break; - case 2: //Account reg - if( !strcmp(reg,"#CASHPOINTS") && sd->cashPoints != val ) - { - val = cap_value(val, 0, MAX_ZENY); - sd->cashPoints = val; - } - else if( !strcmp(reg,"#KAFRAPOINTS") && sd->kafraPoints != val ) - { - val = cap_value(val, 0, MAX_ZENY); - sd->kafraPoints = val; - } - sd_reg = sd->save_reg.account; - max = &sd->save_reg.account_num; - regmax = ACCOUNT_REG_NUM; - break; - case 1: //Account2 reg - sd_reg = sd->save_reg.account2; - max = &sd->save_reg.account2_num; - regmax = ACCOUNT_REG2_NUM; - break; - default: - return 0; + /* SAAD! those things should be stored elsewhere e.g. char ones in char table, the cash ones in account_data table! */ + switch( regname[0] ) { + default: //Char reg + if( !strcmp(regname,"PC_DIE_COUNTER") && sd->die_counter != val ) { + i = (!sd->die_counter && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE); + sd->die_counter = val; + if( i ) + status_calc_pc(sd,SCO_NONE); // Lost the bonus. + } else if( !strcmp(regname,"COOK_MASTERY") && sd->cook_mastery != val ) { + val = cap_value(val, 0, 1999); + sd->cook_mastery = val; + } + break; + case '#': + if( !strcmp(regname,"#CASHPOINTS") && sd->cashPoints != val ) { + val = cap_value(val, 0, MAX_ZENY); + sd->cashPoints = val; + } else if( !strcmp(regname,"#KAFRAPOINTS") && sd->kafraPoints != val ) { + val = cap_value(val, 0, MAX_ZENY); + sd->kafraPoints = val; + } + break; } - if (*max == -1) { - ShowError("pc_setregistry : refusing to set %s (type %d) until vars are received.\n", reg, type); - return 1; + + if ( !pc->reg_load && !sd->vars_ok ) { + ShowError("pc_setregistry : refusing to set %s until vars are received.\n", regname); + return 0; } - - // delete reg - if (val == 0) { - ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 ); - if( i < *max ) - { - if (i != *max - 1) - memcpy(&sd_reg[i], &sd_reg[*max - 1], sizeof(struct global_reg)); - memset(&sd_reg[*max - 1], 0, sizeof(struct global_reg)); - (*max)--; - sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved" + + if( (p = i64db_get(sd->var_db, reg) ) ) { + if( val ) { + if( !p->value && index ) /* its a entry that was deleted, so we reset array */ + script->array_update(&sd->array_db,reg,false); + p->value = val; + } else { + p->value = 0; + if( index ) + script->array_update(&sd->array_db,reg,true); + } + if( !pc->reg_load ) + p->flag.update = 1;/* either way, it will require either delete or replace */ + } else if( val ) { + DBData prev; + + if( index ) + script->array_update(&sd->array_db,reg,false); + + p = ers_alloc(pc->num_reg_ers, struct script_reg_num); + + p->value = val; + if( !pc->reg_load ) + p->flag.update = 1; + + if( sd->var_db->put(sd->var_db,DB->i642key(reg),DB->ptr2data(p),&prev) ) { + p = DB->data2ptr(&prev); + ers_free(pc->num_reg_ers, p); } - return 1; } - // change value if found - ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 ); - if( i < *max ) - { - safesnprintf(sd_reg[i].value, sizeof(sd_reg[i].value), "%d", val); - sd->state.reg_dirty |= 1<<(type-1); - return 1; - } - - // add value if not found - if (i < regmax) { - memset(&sd_reg[i], 0, sizeof(struct global_reg)); - safestrncpy(sd_reg[i].str, reg, sizeof(sd_reg[i].str)); - safesnprintf(sd_reg[i].value, sizeof(sd_reg[i].value), "%d", val); - (*max)++; - sd->state.reg_dirty |= 1<<(type-1); - return 1; - } - - ShowError("pc_setregistry : couldn't set %s, limit of registries reached (%d)\n", reg, regmax); + + if( !pc->reg_load && p ) + sd->vars_dirty = true; - return 0; + return 1; } +/** + * Serves the following variable types: + * - 'type$' (permanent str char reg) + * - '#type$' (permanent str account reg) + * - '##type$' (permanent str account reg2) + **/ +int pc_setregistry_str(struct map_session_data *sd, int64 reg, const char *val) { + struct script_reg_str *p = NULL; + const char *regname = script->get_str( script_getvarid(reg) ); + unsigned int index = script_getvaridx(reg); -int pc_setregistry_str(struct map_session_data *sd,const char *reg,const char *val,int type) -{ - struct global_reg *sd_reg; - int i,*max, regmax; - - nullpo_ret(sd); - if (reg[strlen(reg)-1] != '$') { - ShowError("pc_setregistry_str : reg %s must be string (end in '$') to use this!\n", reg); - return 0; - } - - switch (type) { - case 3: //Char reg - sd_reg = sd->save_reg.global; - max = &sd->save_reg.global_num; - regmax = GLOBAL_REG_NUM; - break; - case 2: //Account reg - sd_reg = sd->save_reg.account; - max = &sd->save_reg.account_num; - regmax = ACCOUNT_REG_NUM; - break; - case 1: //Account2 reg - sd_reg = sd->save_reg.account2; - max = &sd->save_reg.account2_num; - regmax = ACCOUNT_REG2_NUM; - break; - default: - return 0; - } - if (*max == -1) { - ShowError("pc_setregistry_str : refusing to set %s (type %d) until vars are received.\n", reg, type); + if ( !pc->reg_load && !sd->vars_ok ) { + ShowError("pc_setregistry_str : refusing to set %s until vars are received.\n", regname); return 0; } - // delete reg - if (!val || strcmp(val,"")==0) - { - ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 ); - if( i < *max ) - { - if (i != *max - 1) - memcpy(&sd_reg[i], &sd_reg[*max - 1], sizeof(struct global_reg)); - memset(&sd_reg[*max - 1], 0, sizeof(struct global_reg)); - (*max)--; - sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved" - if (type!=3) intif->saveregistry(sd,type); + if( (p = i64db_get(sd->var_db, reg) ) ) { + if( val[0] ) { + if( p->value ) + aFree(p->value); + else if ( index ) /* a entry that was deleted, so we reset */ + script->array_update(&sd->array_db,reg,false); + p->value = aStrdup(val); + } else { + p->value = NULL; + if( index ) + script->array_update(&sd->array_db,reg,true); } - return 1; - } + if( !pc->reg_load ) + p->flag.update = 1;/* either way, it will require either delete or replace */ + } else if( val[0] ) { + DBData prev; - // change value if found - ARR_FIND( 0, *max, i, strcmp(sd_reg[i].str, reg) == 0 ); - if( i < *max ) - { - safestrncpy(sd_reg[i].value, val, sizeof(sd_reg[i].value)); - sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved" - if (type!=3) intif->saveregistry(sd,type); - return 1; - } + if( index ) + script->array_update(&sd->array_db,reg,false); - // add value if not found - if (i < regmax) { - memset(&sd_reg[i], 0, sizeof(struct global_reg)); - safestrncpy(sd_reg[i].str, reg, sizeof(sd_reg[i].str)); - safestrncpy(sd_reg[i].value, val, sizeof(sd_reg[i].value)); - (*max)++; - sd->state.reg_dirty |= 1<<(type-1); //Mark this registry as "need to be saved" - if (type!=3) intif->saveregistry(sd,type); - return 1; + p = ers_alloc(pc->str_reg_ers, struct script_reg_str); + + p->value = aStrdup(val); + if( !pc->reg_load ) + p->flag.update = 1; + p->flag.type = 1; + + if( sd->var_db->put(sd->var_db,DB->i642key(reg),DB->ptr2data(p),&prev) ) { + p = DB->data2ptr(&prev); + if( p->value ) + aFree(p->value); + ers_free(pc->str_reg_ers, p); + } } - - ShowError("pc_setregistry : couldn't set %s, limit of registries reached (%d)\n", reg, regmax); - - return 0; + + if( !pc->reg_load && p ) + sd->vars_dirty = true; + + return 1; } /*========================================== @@ -10291,6 +10204,12 @@ void pc_scdata_received(struct map_session_data *sd) { pc->expire_check(sd); } + + if( sd->state.standalone ) { + clif->pLoadEndAck(0,sd); + pc->autotrade_populate(sd); + pc->autotrade_start(sd); + } } int pc_expiration_timer(int tid, int64 tick, int id, intptr_t data) { struct map_session_data *sd = map->id2sd(id); @@ -10342,28 +10261,229 @@ void pc_expire_check(struct map_session_data *sd) { sd->expiration_tid = timer->add(timer->gettick() + (int64)(sd->expiration_time - time(NULL))*1000, pc->expiration_timer, sd->bl.id, 0); } +/** + * Loads autotraders + ***/ +void pc_autotrade_load(void) { + struct map_session_data *sd; + char *data; + + if (SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT `account_id`,`char_id`,`sex`,`title` FROM `%s`",map->autotrade_merchants_db)) + Sql_ShowDebug(map->mysql_handle); + + while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) { + int account_id, char_id; + char title[MESSAGE_SIZE]; + unsigned char sex; + + SQL->GetData(map->mysql_handle, 0, &data, NULL); account_id = atoi(data); + SQL->GetData(map->mysql_handle, 1, &data, NULL); char_id = atoi(data); + SQL->GetData(map->mysql_handle, 2, &data, NULL); sex = atoi(data); + SQL->GetData(map->mysql_handle, 3, &data, NULL); safestrncpy(title, data, sizeof(title)); + + CREATE(sd, TBL_PC, 1); + + pc->setnewpc(sd, account_id, char_id, 0, 0, sex, 0); + + safestrncpy(sd->message, title, MESSAGE_SIZE); + + sd->state.standalone = 1; + sd->group = pcg->get_dummy_group(); + + chrif->authreq(sd,true); + } + + SQL->FreeResult(map->mysql_handle); +} +/** + * Loads vending data and sets it up, is triggered when char server data that pc_autotrade_load requested arrives + **/ +void pc_autotrade_start(struct map_session_data *sd) { + unsigned int count = 0; + int i; + char *data; -/*========================================== - * pc Init/Terminate - *------------------------------------------*/ -void do_final_pc(void) { + if (SQL_ERROR == SQL->Query(map->mysql_handle, "SELECT `itemkey`,`amount`,`price` FROM `%s` WHERE `char_id` = '%d'",map->autotrade_data_db,sd->status.char_id)) + Sql_ShowDebug(map->mysql_handle); - db_destroy(pc->itemcd_db); + while( SQL_SUCCESS == SQL->NextRow(map->mysql_handle) ) { + int itemkey, amount, price; + + SQL->GetData(map->mysql_handle, 0, &data, NULL); itemkey = atoi(data); + SQL->GetData(map->mysql_handle, 1, &data, NULL); amount = atoi(data); + SQL->GetData(map->mysql_handle, 2, &data, NULL); price = atoi(data); + + ARR_FIND(0, MAX_CART, i, sd->status.cart[i].id == itemkey); + + if( i != MAX_CART && itemdb_cantrade(&sd->status.cart[i], 0, 0) ) { + if( amount > sd->status.cart[i].amount ) + amount = sd->status.cart[i].amount; + + if( amount ) { + sd->vending[count].index = i; + sd->vending[count].amount = amount; + sd->vending[count].value = cap_value(price, 0, (unsigned int)battle_config.vending_max_value); + + count++; + } + } + } + + if( !count ) { + pc->autotrade_update(sd,PAUC_REMOVE); + map->quit(sd); + } else { + sd->state.autotrade = 1; + sd->vender_id = ++vending->next_id; + sd->vend_num = count; + sd->state.vending = true; + idb_put(vending->db, sd->status.char_id, sd); + if( map->list[sd->bl.m].users ) + clif->showvendingboard(&sd->bl,sd->message,0); + } +} +/** + * Perform a autotrade action + **/ +void pc_autotrade_update(struct map_session_data *sd, enum e_pc_autotrade_update_action action) { + int i; + + /* either way, this goes down */ + if( action != PAUC_START ) { + if (SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d'",map->autotrade_data_db,sd->status.char_id)) + Sql_ShowDebug(map->mysql_handle); + } + + switch( action ) { + case PAUC_REMOVE: + if (SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d' LIMIT 1",map->autotrade_merchants_db,sd->status.char_id)) + Sql_ShowDebug(map->mysql_handle); + break; + case PAUC_START: + if (SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s` (`account_id`,`char_id`,`sex`,`title`) VALUES ('%d','%d','%d','%s')", + map->autotrade_merchants_db, + sd->status.account_id, + sd->status.char_id, + sd->status.sex, + sd->message + )) + Sql_ShowDebug(map->mysql_handle); + /* yes we want it to fall */ + case PAUC_REFRESH: + for( i = 0; i < sd->vend_num; i++ ) { + if( sd->vending[i].amount == 0 ) + continue; + + if (SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s` (`char_id`,`itemkey`,`amount`,`price`) VALUES ('%d','%d','%d','%d')", + map->autotrade_data_db, + sd->status.char_id, + sd->status.cart[sd->vending[i].index].id, + sd->vending[i].amount, + sd->vending[i].value + )) + Sql_ShowDebug(map->mysql_handle); + } + break; + } +} +/** + * Handles characters upon @autotrade usage + **/ +void pc_autotrade_prepare(struct map_session_data *sd) { + struct autotrade_vending *data; + int i, cursor = 0; + int account_id, char_id; + char title[MESSAGE_SIZE]; + unsigned char sex; + + CREATE(data, struct autotrade_vending, 1); + + memcpy(data->vending, sd->vending, sizeof(sd->vending)); + + for(i = 0; i < sd->vend_num; i++) { + if( sd->vending[i].amount ) { + memcpy(&data->list[cursor],&sd->status.cart[sd->vending[i].index],sizeof(struct item)); + cursor++; + } + } + + data->vend_num = (unsigned char)cursor; + + idb_put(pc->at_db, sd->status.char_id, data); + + account_id = sd->status.account_id; + char_id = sd->status.char_id; + sex = sd->status.sex; + safestrncpy(title, sd->message, sizeof(title)); + + map->quit(sd); + chrif->auth_delete(account_id, char_id, ST_LOGOUT); + + CREATE(sd, TBL_PC, 1); + + pc->setnewpc(sd, account_id, char_id, 0, 0, sex, 0); + + safestrncpy(sd->message, title, MESSAGE_SIZE); + + sd->state.standalone = 1; + sd->group = pcg->get_dummy_group(); + + chrif->authreq(sd,true); +} +/** + * Prepares autotrade data from pc->at_db from a player that has already returned from char server + **/ +void pc_autotrade_populate(struct map_session_data *sd) { + struct autotrade_vending *data; + int i, j, cursor = 0; + + if( !(data = idb_get(pc->at_db,sd->status.char_id)) ) + return; + + for(i = 0; i < data->vend_num; i++) { + if( !data->vending[i].amount ) + continue; + + ARR_FIND(0, MAX_CART, j, !memcmp((char*)(&data->list[i]) + sizeof(data->list[0].id), (char*)(&sd->status.cart[j]) + sizeof(data->list[0].id), sizeof(struct item) - sizeof(data->list[0].id))); + + if( j != MAX_CART ) { + sd->vending[cursor].index = j; + sd->vending[cursor].amount = data->vending[i].amount; + sd->vending[cursor].value = data->vending[i].value; + + cursor++; + } + } + + sd->vend_num = cursor; + pc->autotrade_update(sd,PAUC_START); + + idb_remove(pc->at_db, sd->status.char_id); +} +void do_final_pc(void) { + + db_destroy(pc->itemcd_db); + db_destroy(pc->at_db); + pcg->final(); ers_destroy(pc->sc_display_ers); + ers_destroy(pc->num_reg_ers); + ers_destroy(pc->str_reg_ers); + return; } void do_init_pc(bool minimal) { if (minimal) return; - + pc->itemcd_db = idb_alloc(DB_OPT_RELEASE_DATA); - + pc->at_db = idb_alloc(DB_OPT_RELEASE_DATA); + pc->readdb(); - + timer->add_func_list(pc->invincible_timer, "pc_invincible_timer"); timer->add_func_list(pc->eventtimer, "pc_eventtimer"); timer->add_func_list(pc->inventory_rental_end, "pc_inventory_rental_end"); @@ -10375,28 +10495,33 @@ void do_init_pc(bool minimal) { timer->add_func_list(pc->charm_timer, "pc_charm_timer"); timer->add_func_list(pc->global_expiration_timer,"pc_global_expiration_timer"); timer->add_func_list(pc->expiration_timer,"pc_expiration_timer"); - + timer->add(timer->gettick() + map->autosave_interval, pc->autosave, 0, 0); - + // 0=day, 1=night [Yor] map->night_flag = battle_config.night_at_start ? 1 : 0; - + if (battle_config.day_duration > 0 && battle_config.night_duration > 0) { int day_duration = battle_config.day_duration; int night_duration = battle_config.night_duration; // add night/day timer [Yor] timer->add_func_list(pc->map_day_timer, "pc_map_day_timer"); timer->add_func_list(pc->map_night_timer, "pc_map_night_timer"); - + pc->day_timer_tid = timer->add_interval(timer->gettick() + (map->night_flag ? 0 : day_duration) + night_duration, pc->map_day_timer, 0, 0, day_duration + night_duration); pc->night_timer_tid = timer->add_interval(timer->gettick() + day_duration + (map->night_flag ? night_duration : 0), pc->map_night_timer, 0, 0, day_duration + night_duration); } - + pcg->init(); - pc->sc_display_ers = ers_new(sizeof(struct sc_display_entry), "pc.c:sc_display_ers", ERS_OPT_NONE); -} + pc->sc_display_ers = ers_new(sizeof(struct sc_display_entry), "pc.c:sc_display_ers", ERS_OPT_FLEX_CHUNK); + pc->num_reg_ers = ers_new(sizeof(struct script_reg_num), "pc.c::num_reg_ers", ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); + pc->str_reg_ers = ers_new(sizeof(struct script_reg_str), "pc.c::str_reg_ers", ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); + ers_chunk_size(pc->sc_display_ers, 150); + ers_chunk_size(pc->num_reg_ers, 300); + ers_chunk_size(pc->str_reg_ers, 50); +} /*===================================== * Default Functions : pc.h * Generated by HerculesInterfaceMaker @@ -10410,10 +10535,10 @@ void pc_defaults(void) { }; unsigned int equip_pos[EQI_MAX]={EQP_ACC_L,EQP_ACC_R,EQP_SHOES,EQP_GARMENT,EQP_HEAD_LOW,EQP_HEAD_MID,EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_COSTUME_HEAD_TOP,EQP_COSTUME_HEAD_MID,EQP_COSTUME_HEAD_LOW,EQP_COSTUME_GARMENT,EQP_AMMO, EQP_SHADOW_ARMOR, EQP_SHADOW_WEAPON, EQP_SHADOW_SHIELD, EQP_SHADOW_SHOES, EQP_SHADOW_ACC_R, EQP_SHADOW_ACC_L }; - pc = &pc_s; /* vars */ + pc->at_db = NULL; pc->itemcd_db = NULL; /* */ pc->day_timer_tid = INVALID_TIMER; @@ -10438,6 +10563,11 @@ void pc_defaults(void) { pc->sc_display_ers = NULL; /* */ pc->expiration_tid = INVALID_TIMER; + /* */ + pc->num_reg_ers = NULL; + pc->str_reg_ers = NULL; + /* */ + pc->reg_load = false; /* funcs */ pc->init = do_init_pc; pc->final = do_final_pc; @@ -10681,4 +10811,13 @@ void pc_defaults(void) { pc->expiration_timer = pc_expiration_timer; pc->global_expiration_timer = pc_global_expiration_timer; pc->expire_check = pc_expire_check; + + /** + * Autotrade persistency [Ind/Hercules <3] + **/ + pc->autotrade_load = pc_autotrade_load; + pc->autotrade_update = pc_autotrade_update; + pc->autotrade_start = pc_autotrade_start; + pc->autotrade_prepare = pc_autotrade_prepare; + pc->autotrade_populate = pc_autotrade_populate; } diff --git a/src/map/pc.h b/src/map/pc.h index 5264fa557..f64b20945 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -139,7 +139,6 @@ struct map_session_data { unsigned int abra_flag : 2; // Abracadabra bugfix by Aru unsigned int autocast : 1; // Autospell flag [Inkfish] unsigned int autotrade : 1; //By Fantik - unsigned int reg_dirty : 4; //By Skotlex (marks whether registry variables have been saved or not yet) unsigned int showdelay :1; unsigned int showexp :1; unsigned int showzeny :1; @@ -180,6 +179,7 @@ struct map_session_data { unsigned int snovice_call_flag : 3; //Summon Angel (stage 1~3) unsigned int hpmeter_visible : 1; unsigned int itemcheck : 1; + unsigned int standalone : 1;/* [Ind/Hercules <3] */ } state; struct { unsigned char no_weapon_damage, no_magic_damage, no_misc_damage; @@ -202,7 +202,6 @@ struct map_session_data { unsigned int extra_temp_permissions; /* permissions from @addperm */ struct mmo_charstatus status; - struct registry save_reg; struct item_data* inventory_data[MAX_INVENTORY]; // direct pointers to itemdb entries (faster than doing item_id lookups) short equip_index[EQI_MAX]; unsigned int weight,max_weight; @@ -362,10 +361,6 @@ struct map_session_data { short mission_mobid; //Stores the target mob_id for TK_MISSION int die_counter; //Total number of times you've died int devotion[5]; //Stores the account IDs of chars devoted to. - int reg_num; //Number of registries (type numeric) - int regstr_num; //Number of registries (type string) - struct script_reg *reg; - struct script_regstr *regstr; int trade_partner; struct { struct { @@ -530,6 +525,16 @@ struct map_session_data { struct { unsigned int second,third; } sktree; + + /** + * Account/Char variables & array control of those variables + **/ + DBMap *var_db; + DBMap *array_db; + unsigned char vars_received;/* char loading is only complete when you get it all. */ + bool vars_ok; + bool vars_dirty; + // temporary debugging of bug #3504 const char* delunit_prevfile; int delunit_prevline; @@ -671,18 +676,18 @@ enum equip_pos { #define pc_checkoverhp(sd) ((sd)->battle_status.hp == (sd)->battle_status.max_hp) #define pc_checkoversp(sd) ((sd)->battle_status.sp == (sd)->battle_status.max_sp) -#define pc_readglobalreg(sd,reg) (pc->readregistry((sd),(reg),3)) -#define pc_setglobalreg(sd,reg,val) (pc->setregistry((sd),(reg),(val),3)) -#define pc_readglobalreg_str(sd,reg) (pc->readregistry_str((sd),(reg),3)) -#define pc_setglobalreg_str(sd,reg,val) (pc->setregistry_str((sd),(reg),(val),3)) -#define pc_readaccountreg(sd,reg) (pc->readregistry((sd),(reg),2)) -#define pc_setaccountreg(sd,reg,val) (pc->setregistry((sd),(reg),(val),2)) -#define pc_readaccountregstr(sd,reg) (pc->readregistry_str((sd),(reg),2)) -#define pc_setaccountregstr(sd,reg,val) (pc->setregistry_str((sd),(reg),(val),2)) -#define pc_readaccountreg2(sd,reg) (pc->readregistry((sd),(reg),1)) -#define pc_setaccountreg2(sd,reg,val) (pc->setregistry((sd),(reg),(val),1)) -#define pc_readaccountreg2str(sd,reg) (pc->readregistry_str((sd),(reg),1)) -#define pc_setaccountreg2str(sd,reg,val) (pc->setregistry_str((sd),(reg),(val),1)) +#define pc_readglobalreg(sd,reg) (pc->readregistry((sd),(reg))) +#define pc_setglobalreg(sd,reg,val) (pc->setregistry((sd),(reg),(val))) +#define pc_readglobalreg_str(sd,reg) (pc->readregistry_str((sd),(reg))) +#define pc_setglobalreg_str(sd,reg,val) (pc->setregistry_str((sd),(reg),(val))) +#define pc_readaccountreg(sd,reg) (pc->readregistry((sd),(reg))) +#define pc_setaccountreg(sd,reg,val) (pc->setregistry((sd),(reg),(val))) +#define pc_readaccountregstr(sd,reg) (pc->readregistry_str((sd),(reg))) +#define pc_setaccountregstr(sd,reg,val) (pc->setregistry_str((sd),(reg),(val))) +#define pc_readaccountreg2(sd,reg) (pc->readregistry((sd),(reg))) +#define pc_setaccountreg2(sd,reg,val) (pc->setregistry((sd),(reg),(val))) +#define pc_readaccountreg2str(sd,reg) (pc->readregistry_str((sd),(reg))) +#define pc_setaccountreg2str(sd,reg,val) (pc->setregistry_str((sd),(reg),(val))) /* pc_groups easy access */ #define pc_get_group_level(sd) ( (sd)->group->level ) @@ -724,6 +729,21 @@ struct item_cd { short nameid[MAX_ITEMDELAYS];//skill id }; +enum e_pc_autotrade_update_action { + PAUC_START, + PAUC_REFRESH, + PAUC_REMOVE, +}; + +/** + * Used to temporarily remember vending data + **/ +struct autotrade_vending { + struct item list[MAX_VENDING]; + struct s_vending vending[MAX_VENDING]; + unsigned char vend_num; +}; + /*===================================== * Interface : pc.h * Generated by HerculesInterfaceMaker @@ -732,6 +752,8 @@ struct item_cd { struct pc_interface { /* */ + DBMap *at_db;/* char id -> struct autotrade_vending */ + /* */ DBMap* itemcd_db; /* */ int day_timer_tid; @@ -754,6 +776,13 @@ struct pc_interface { struct eri *sc_display_ers; /* global expiration timer id */ int expiration_tid; + /** + * ERS for the bulk of pc vars + **/ + struct eri *num_reg_ers; + struct eri *str_reg_ers; + /* */ + bool reg_load; /* funcs */ void (*init) (bool minimal); void (*final) (void); @@ -890,14 +919,14 @@ struct pc_interface { int (*readparam) (struct map_session_data *sd,int type); int (*setparam) (struct map_session_data *sd,int type,int val); - int (*readreg) (struct map_session_data *sd,int reg); - int (*setreg) (struct map_session_data *sd,int reg,int val); - char * (*readregstr) (struct map_session_data *sd,int reg); - int (*setregstr) (struct map_session_data *sd,int reg,const char *str); - int (*readregistry) (struct map_session_data *sd,const char *reg,int type); - int (*setregistry) (struct map_session_data *sd,const char *reg,int val,int type); - char * (*readregistry_str) (struct map_session_data *sd,const char *reg,int type); - int (*setregistry_str) (struct map_session_data *sd,const char *reg,const char *val,int type); + int (*readreg) (struct map_session_data *sd, int64 reg); + void (*setreg) (struct map_session_data *sd, int64 reg,int val); + char * (*readregstr) (struct map_session_data *sd, int64 reg); + void (*setregstr) (struct map_session_data *sd, int64 reg, const char *str); + int (*readregistry) (struct map_session_data *sd, int64 reg); + int (*setregistry) (struct map_session_data *sd, int64 reg, int val); + char * (*readregistry_str) (struct map_session_data *sd, int64 reg); + int (*setregistry_str) (struct map_session_data *sd, int64 reg, const char *val); int (*addeventtimer) (struct map_session_data *sd,int tick,const char *name); int (*deleventtimer) (struct map_session_data *sd,const char *name); @@ -1000,6 +1029,15 @@ struct pc_interface { int (*expiration_timer) (int tid, int64 tick, int id, intptr_t data); int (*global_expiration_timer) (int tid, int64 tick, int id, intptr_t data); void (*expire_check) (struct map_session_data *sd); + + /** + * Autotrade persistency [Ind/Hercules <3] + **/ + void (*autotrade_load) (void); + void (*autotrade_update) (struct map_session_data *sd, enum e_pc_autotrade_update_action action); + void (*autotrade_start) (struct map_session_data *sd); + void (*autotrade_prepare) (struct map_session_data *sd); + void (*autotrade_populate) (struct map_session_data *sd); }; struct pc_interface *pc; diff --git a/src/map/pc_groups.c b/src/map/pc_groups.c index 59dd951c7..4ddb95c9b 100644 --- a/src/map/pc_groups.c +++ b/src/map/pc_groups.c @@ -423,10 +423,17 @@ void do_init_pc_groups(void) { for(i = 0; i < len; i++) { unsigned int p; - if( ( p = pcg->add_permission(pc_g_defaults[i].name) ) != pc_g_defaults[i].permission ) + if( ( p = pc_groups_add_permission(pc_g_defaults[i].name) ) != pc_g_defaults[i].permission ) ShowError("do_init_pc_groups: %s error : %d != %d\n",pc_g_defaults[i].name,p,pc_g_defaults[i].permission); } + /** + * Handle plugin-provided permissions + **/ + for(i = 0; i < pcg->HPMpermissions_count; i++) { + *pcg->HPMpermissions[i].mask = pc_groups_add_permission(pcg->HPMpermissions[i].name); + } + pcg->db = idb_alloc(DB_OPT_RELEASE_DATA); pcg->name_db = stridb_alloc(DB_OPT_DUP_KEY, 0); @@ -502,6 +509,9 @@ void pc_groups_defaults(void) { pcg->permissions = NULL; pcg->permission_count = 0; /* */ + pcg->HPMpermissions = NULL; + pcg->HPMpermissions_count = 0; + /* */ pcg->init = do_init_pc_groups; pcg->final = do_final_pc_groups; pcg->reload = pc_groups_reload; @@ -514,5 +524,4 @@ void pc_groups_defaults(void) { pcg->get_name = pc_group_get_name; pcg->get_level = pc_group_get_level; pcg->get_idx = pc_group_get_idx; - pcg->add_permission = pc_groups_add_permission; } diff --git a/src/map/pc_groups.h b/src/map/pc_groups.h index 943fb7fa5..3396512ea 100644 --- a/src/map/pc_groups.h +++ b/src/map/pc_groups.h @@ -49,12 +49,19 @@ struct GroupSettings { config_setting_t *root; // groups.[] }; +typedef struct GroupSettings GroupSettings; + struct pc_groups_permission_table { char *name; unsigned int permission; }; -typedef struct GroupSettings GroupSettings; +/* used by plugins to list permissions */ +struct pc_groups_new_permission { + unsigned int pID;/* plugin identity (for the future unload during runtime support) */ + char *name;/* aStrdup' of the permission name */ + unsigned int *mask;/* pointer to the plugin val that will store the value of the mask */ +}; struct pc_groups_interface { /* */ @@ -64,6 +71,9 @@ struct pc_groups_interface { struct pc_groups_permission_table *permissions; unsigned char permission_count; /* */ + struct pc_groups_new_permission *HPMpermissions; + unsigned char HPMpermissions_count; + /* */ void (*init) (void); void (*final) (void); void (*reload) (void); @@ -76,7 +86,6 @@ struct pc_groups_interface { const char* (*get_name) (GroupSettings *group); int (*get_level) (GroupSettings *group); int (*get_idx) (GroupSettings *group); - unsigned int (*add_permission) (const char *name); }; struct pc_groups_interface *pcg; diff --git a/src/map/script.c b/src/map/script.c index 2f2faf6dc..75469a345 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -212,10 +212,7 @@ void script_reportdata(struct script_data* data) case C_NAME:// reference if( reference_tovariable(data) ) {// variable const char* name = reference_getname(data); - if( not_array_variable(*name) ) - ShowDebug("Data: variable name='%s'\n", name); - else - ShowDebug("Data: variable name='%s' index=%d\n", name, reference_getindex(data)); + ShowDebug("Data: variable name='%s' index=%d\n", name, reference_getindex(data)); } else if( reference_toconstant(data) ) {// constant ShowDebug("Data: constant name='%s' value=%d\n", reference_getname(data), reference_getconstant(data)); } else if( reference_toparam(data) ) {// param @@ -910,7 +907,7 @@ const char* parse_variable(const char* p) { const char *var = p; if( ( p[0] == '+' && p[1] == '+' && (type = C_ADD_PRE) ) // pre ++ - || ( p[1] == '-' && p[1] == '-' && (type = C_SUB_PRE) ) // pre -- + || ( p[0] == '-' && p[1] == '-' && (type = C_SUB_PRE) ) // pre -- ) { var = p = script->skip_space(&p[2]); } @@ -2071,8 +2068,18 @@ void script_set_constant(const char* name, int value, bool isparameter) { void script_set_constant2(const char *name, int value, bool isparameter) { int n = script->add_str(name); - if( ( script->str_data[n].type == C_NAME || script->str_data[n].type == C_PARAM ) && ( script->str_data[n].val != 0 || script->str_data[n].backpatch != -1 ) ) { // existing parameter or constant - ShowNotice("Conflicting var name '%s', prioritising the script var\n",name); + if( script->str_data[n].type == C_PARAM ) { + ShowError("script_set_constant2: Attempted to overwrite existing parameter '%s' with a constant (value=%d).\n", name, value); + return; + } + + if( script->str_data[n].type == C_NAME && script->str_data[n].val ) { + ShowWarning("script_set_constant2: Attempted to overwrite existing variable '%s' with a constant (value=%d).\n", name, value); + return; + } + + if( script->str_data[n].type == C_INT && value && value != script->str_data[n].val ) { // existing constant + ShowWarning("script_set_constant2: Attempted to overwrite existing constant '%s' (old value=%d, new value=%d).\n", name, script->str_data[n].val, value); return; } @@ -2086,21 +2093,6 @@ void script_set_constant2(const char *name, int value, bool isparameter) { script->str_data[n].val = value; } -/* same as constant2 except it will override if necessary, used to clear conflicts during reload */ -void script_set_constant_force(const char *name, int value, bool isparameter) { - int n = script->add_str(name); - - if( script->str_data[n].type == C_PARAM ) - return;/* the one type we don't mess with, reload doesn't affect it. */ - - if( script->str_data[n].type != C_NOP ) { - script->str_data[n].type = C_NOP; - script->str_data[n].val = 0; - script->str_data[n].func = NULL; - script->str_data[n].backpatch = -1; - script->str_data[n].label = -1; - } -} /*========================================== * Reading constant databases * const.txt @@ -2501,9 +2493,9 @@ struct script_data *get_val(struct script_state* st, struct script_data* data) { break; case '#': if( name[1] == '#' ) - data->u.str = pc_readaccountreg2str(sd, name);// global + data->u.str = pc_readaccountreg2str(sd, data->u.num);// global else - data->u.str = pc_readaccountregstr(sd, name);// local + data->u.str = pc_readaccountregstr(sd, data->u.num);// local break; case '.': { @@ -2512,21 +2504,21 @@ struct script_data *get_val(struct script_state* st, struct script_data* data) { st->stack->var_function : // instance/scope variable st->script->script_vars; // npc variable if( n ) - data->u.str = (char*)idb_get(n,reference_getuid(data)); + data->u.str = (char*)i64db_get(n,reference_getuid(data)); else data->u.str = NULL; } break; case '\'': if ( st->instance_id >= 0 ) { - data->u.str = (char*)idb_get(instance->list[st->instance_id].vars,reference_getuid(data)); + data->u.str = (char*)i64db_get(instance->list[st->instance_id].vars,reference_getuid(data)); } else { ShowWarning("script_get_val: cannot access instance variable '%s', defaulting to \"\"\n", name); data->u.str = NULL; } break; default: - data->u.str = pc_readglobalreg_str(sd, name); + data->u.str = pc_readglobalreg_str(sd, data->u.num); break; } @@ -2556,9 +2548,9 @@ struct script_data *get_val(struct script_state* st, struct script_data* data) { break; case '#': if( name[1] == '#' ) - data->u.num = pc_readaccountreg2(sd, name);// global + data->u.num = pc_readaccountreg2(sd, data->u.num);// global else - data->u.num = pc_readaccountreg(sd, name);// local + data->u.num = pc_readaccountreg(sd, data->u.num);// local break; case '.': { @@ -2567,21 +2559,21 @@ struct script_data *get_val(struct script_state* st, struct script_data* data) { st->stack->var_function : // instance/scope variable st->script->script_vars; // npc variable if( n ) - data->u.num = (int)idb_iget(n,reference_getuid(data)); + data->u.num = (int)i64db_iget(n,reference_getuid(data)); else data->u.num = 0; } break; case '\'': if( st->instance_id >= 0 ) - data->u.num = (int)idb_iget(instance->list[st->instance_id].vars,reference_getuid(data)); + data->u.num = (int)i64db_iget(instance->list[st->instance_id].vars,reference_getuid(data)); else { ShowWarning("script_get_val: cannot access instance variable '%s', defaulting to 0\n", name); data->u.num = 0; } break; default: - data->u.num = pc_readglobalreg(sd, name); + data->u.num = pc_readglobalreg(sd, data->u.num); break; } @@ -2592,63 +2584,297 @@ struct script_data *get_val(struct script_state* st, struct script_data* data) { /// Retrieves the value of a reference identified by uid (variable, constant, param) /// The value is left in the top of the stack and needs to be removed manually. -void* get_val2(struct script_state* st, int uid, struct DBMap** ref) { +void* get_val2(struct script_state* st, int64 uid, struct DBMap** ref) { struct script_data* data; script->push_val(st->stack, C_NAME, uid, ref); data = script_getdatatop(st, -1); script->get_val(st, data); - return (data->type == C_INT ? (void*)__64BPTRSIZE(data->u.num) : (void*)__64BPTRSIZE(data->u.str)); + return (data->type == C_INT ? (void*)__64BPTRSIZE((int32)data->u.num) : (void*)__64BPTRSIZE(data->u.str)); // u.num is int32 because it comes from script->get_val } +/** + * Because, currently, array members with key 0 are indifferenciable from normal variables, we should ensure its actually in + * Will be gone as soon as undefined var feature is implemented + **/ +void script_array_ensure_zero(struct script_state *st, struct map_session_data *sd, int64 uid, struct DBMap** ref) { + const char *name = script->get_str(script_getvarid(uid)); + struct DBMap *src = script->array_src(st, sd ? sd : st->rid ? map->id2sd(st->rid) : NULL, name);\ + struct script_array *sa = NULL; + bool insert = false; + + if( sd && !st ) /* when sd comes, st isn't available */ + insert = true; + else { + if( is_string_variable(name) ) { + char* str = (char*)script->get_val2(st, uid, ref); + if( str && *str ) + insert = true; + script_removetop(st, -1, 0); + } else { + int32 num = (int32)__64BPTRSIZE(script->get_val2(st, uid, ref)); + if( num ) + insert = true; + script_removetop(st, -1, 0); + } + } + if( src ) { + if( (sa = idb_get(src, script_getvarid(uid)) ) ) { + unsigned int i; + + ARR_FIND(0, sa->size, i, sa->members[i] == 0); + if( i != sa->size ) { + if( !insert ) + script->array_remove_member(src,sa,i); + return; + } + + script->array_add_member(sa,0); + } else if( insert ) { + script->array_update(&src,reference_uid(script_getvarid(uid), 0),false); + } + } +} +/** + * Returns array size by ID + **/ +unsigned int script_array_size(struct script_state *st, struct map_session_data *sd, const char *name) { + struct script_array *sa = NULL; + struct DBMap *src = script->array_src(st, sd, name); + + if( src ) + sa = idb_get(src, script->search_str(name)); + + return sa ? sa->size : 0; +} +/** + * Returns array's highest key (for that awful getarraysize implementation that doesn't really gets the array size) + **/ +unsigned int script_array_highest_key(struct script_state *st, struct map_session_data *sd, const char *name) { + struct script_array *sa = NULL; + struct DBMap *src = script->array_src(st, sd, name); + + + if( src ) { + int key = script->add_word(name); + + script->array_ensure_zero(st,sd,reference_uid(key, 0),NULL); + + if( ( sa = idb_get(src, key) ) ) { + unsigned int i, highest_key = 0; + + for(i = 0; i < sa->size; i++) { + if( sa->members[i] > highest_key ) + highest_key = sa->members[i]; + } + + return sa->size ? highest_key + 1 : 0; + } + } + + return 0; +} +int script_free_array_db(DBKey key, DBData *data, va_list ap) { + struct script_array *sa = DB->data2ptr(data); + aFree(sa->members); + ers_free(script->array_ers, sa); + return 0; +} +/** + * Clears script_array and removes it from script->array_db + **/ +void script_array_delete(struct DBMap *src, struct script_array *sa) { + aFree(sa->members); + idb_remove(src, sa->id); + ers_free(script->array_ers, sa); +} +/** + * Removes a member from a script_array list + * + * @param idx the index of the member in script_array struct list, not of the actual array member + **/ +void script_array_remove_member(struct DBMap *src,struct script_array *sa, unsigned int idx) { + unsigned int i, cursor; + + /* its the only member left, no need to do anything other than delete the array data */ + if( sa->size == 1 ) { + script->array_delete(src,sa); + return; + } + + sa->members[idx] = UINT_MAX; + + for(i = 0, cursor = 0; i < sa->size; i++) { + if( sa->members[i] == UINT_MAX ) + continue; + if( i != cursor ) + sa->members[cursor] = sa->members[i]; + cursor++; + } + + sa->size = cursor; +} +/** + * Appends a new array index to the list in script_array + * + * @param idx the index of the array member being inserted + **/ +void script_array_add_member(struct script_array *sa, unsigned int idx) { + + RECREATE(sa->members, unsigned int, ++sa->size); + + sa->members[sa->size - 1] = idx; + +} +/** + * Obtains the source of the array database for this type and scenario + * Initializes such database when not yet initialised. + **/ +struct DBMap *script_array_src(struct script_state *st, struct map_session_data *sd, const char *name) { + struct DBMap **src = NULL; + + switch( name[0] ) { + /* from player */ + default: /* char reg */ + case '@':/* temp char reg */ + case '#':/* account reg */ + src = &sd->array_db; + break; + case '$':/* map reg */ + src = &mapreg->array_db; + break; + case '.':/* npc/script */ + src = (name[1] == '@') ? &st->stack->array_function_db : &st->script->script_arrays_db; + break; + case '\'':/* instance */ + if( st->instance_id >= 0 ) { + src = &instance->list[st->instance_id].array_db; + } + break; + } + + if( src ) { + if( !*src ) + *src = idb_alloc(DB_OPT_BASE); + return *src; + } + + return NULL; +} +/** + * Processes a array member modification, and update data accordingly + **/ +void script_array_update(struct DBMap **src, int64 num, bool empty) { + struct script_array *sa = NULL; + int id = script_getvarid(num); + unsigned int index = script_getvaridx(num); + + if( !*src ) { + *src = idb_alloc(DB_OPT_BASE); + } else { + sa = idb_get(*src, id); + } + + if( sa ) { + unsigned int i; + + /* search */ + for(i = 0; i < sa->size; i++) { + if( sa->members[i] == index ) + break; + } + + /* if existent */ + if( i != sa->size ) { + /* if empty, we gotta remove it */ + if( empty ) { + script->array_remove_member(*src,sa,i); + } + } else if( !empty ) { /* new entry */ + script->array_add_member(sa,index); + /* we do nothing if its empty, no point in modifying array data for a new empty member */ + } + } else if ( !empty ) {/* we only move to create if not empty */ + sa = ers_alloc(script->array_ers, struct script_array); + sa->id = id; + sa->members = NULL; + sa->size = 0; + script->array_add_member(sa,index); + idb_put(*src, id, sa); + } +} /*========================================== * Stores the value of a script variable * Return value is 0 on fail, 1 on success. + * TODO: return values are screwed up, have been for some time (reaad: years), e.g. some functions return 1 failure and success. *------------------------------------------*/ -int set_reg(struct script_state* st, TBL_PC* sd, int num, const char* name, const void* value, struct DBMap** ref) -{ +int set_reg(struct script_state* st, TBL_PC* sd, int64 num, const char* name, const void* value, struct DBMap** ref) { char prefix = name[0]; + + if( is_string_variable(name) ) {// string variable + const char *str = (const char*)value; - if( is_string_variable(name) ) - {// string variable - const char* str = (const char*)value; switch (prefix) { - case '@': - return pc->setregstr(sd, num, str); - case '$': - return mapreg->setregstr(num, str); - case '#': - return (name[1] == '#') ? - pc_setaccountreg2str(sd, name, str) : - pc_setaccountregstr(sd, name, str); - case '.': - { - struct DBMap* n; - n = (ref) ? *ref : (name[1] == '@') ? st->stack->var_function : st->script->script_vars; - if( n ) { - idb_remove(n, num); - if (str[0]) idb_put(n, num, aStrdup(str)); + case '@': + pc->setregstr(sd, num, str); + return 1; + case '$': + return mapreg->setregstr(num, str); + case '#': + return (name[1] == '#') ? + pc_setaccountreg2str(sd, num, str) : + pc_setaccountregstr(sd, num, str); + case '.': + { + struct DBMap* n; + n = (ref) ? *ref : (name[1] == '@') ? st->stack->var_function : st->script->script_vars; + if( n ) { + if (str[0]) { + i64db_put(n, num, aStrdup(str)); + if( script_getvaridx(num) ) + script->array_update( + (name[1] == '@') ? + &st->stack->array_function_db : + &st->script->script_arrays_db, + num, + false); + } else { + i64db_remove(n, num); + if( script_getvaridx(num) ) + script->array_update( + (name[1] == '@') ? + &st->stack->array_function_db : + &st->script->script_arrays_db, + num, + true); + } + } } - } - return 1; - case '\'': - if( st->instance_id >= 0 ) { - idb_remove(instance->list[st->instance_id].vars, num); - if( str[0] ) idb_put(instance->list[st->instance_id].vars, num, aStrdup(str)); - } - return 1; - default: - return pc_setglobalreg_str(sd, name, str); + return 1; + case '\'': + if( st->instance_id >= 0 ) { + if( str[0] ) { + i64db_put(instance->list[st->instance_id].vars, num, aStrdup(str)); + if( script_getvaridx(num) ) + script->array_update(&instance->list[st->instance_id].array_db,num,false); + } else { + i64db_remove(instance->list[st->instance_id].vars, num); + if( script_getvaridx(num) ) + script->array_update(&instance->list[st->instance_id].array_db,num,true); + } + } else { + ShowError("script_set_reg: cannot write instance variable '%s', NPC not in a instance!\n", name); + script_reportsrc(st); + } + return 1; + default: + return pc_setglobalreg_str(sd, num, str); } - } - else - {// integer variable + } else {// integer variable int val = (int)__64BPTRSIZE(value); - if(script->str_data[num&0x00ffffff].type == C_PARAM) - { - if( pc->setparam(sd, script->str_data[num&0x00ffffff].val, val) == 0 ) - { - if( st != NULL ) - { + + if(script->str_data[script_getvarid(num)].type == C_PARAM) { + if( pc->setparam(sd, script->str_data[script_getvarid(num)].val, val) == 0 ) { + if( st != NULL ) { ShowError("script:set_reg: failed to set param '%s' to %d.\n", name, val); script->reportsrc(st); st->state = END; @@ -2659,34 +2885,60 @@ int set_reg(struct script_state* st, TBL_PC* sd, int num, const char* name, cons } switch (prefix) { - case '@': - return pc->setreg(sd, num, val); - case '$': - return mapreg->setreg(num, val); - case '#': - return (name[1] == '#') ? - pc_setaccountreg2(sd, name, val) : - pc_setaccountreg(sd, name, val); - case '.': - { - struct DBMap* n; - n = (ref) ? *ref : (name[1] == '@') ? st->stack->var_function : st->script->script_vars; - if( n ) { - idb_remove(n, num); - if( val != 0 ) - idb_iput(n, num, val); + case '@': + pc->setreg(sd, num, val); + return 1; + case '$': + return mapreg->setreg(num, val); + case '#': + return (name[1] == '#') ? + pc_setaccountreg2(sd, num, val) : + pc_setaccountreg(sd, num, val); + case '.': + { + struct DBMap* n; + n = (ref) ? *ref : (name[1] == '@') ? st->stack->var_function : st->script->script_vars; + if( n ) { + if( val != 0 ) { + i64db_iput(n, num, val); + if( script_getvaridx(num) ) + script->array_update( + (name[1] == '@') ? + &st->stack->array_function_db : + &st->script->script_arrays_db, + num, + false); + } else { + i64db_remove(n, num); + if( script_getvaridx(num) ) + script->array_update( + (name[1] == '@') ? + &st->stack->array_function_db : + &st->script->script_arrays_db, + num, + true); + } + } } - } - return 1; - case '\'': - if( st->instance_id >= 0 ) { - idb_remove(instance->list[st->instance_id].vars, num); - if( val != 0 ) - idb_iput(instance->list[st->instance_id].vars, num, val); - } - return 1; - default: - return pc_setglobalreg(sd, name, val); + return 1; + case '\'': + if( st->instance_id >= 0 ) { + if( val != 0 ) { + i64db_iput(instance->list[st->instance_id].vars, num, val); + if( script_getvaridx(num) ) + script->array_update(&instance->list[st->instance_id].array_db,num,false); + } else { + i64db_remove(instance->list[st->instance_id].vars, num); + if( script_getvaridx(num) ) + script->array_update(&instance->list[st->instance_id].array_db,num,true); + } + } else { + ShowError("script_set_reg: cannot write instance variable '%s', NPC not in a instance!\n", name); + script_reportsrc(st); + } + return 1; + default: + return pc_setglobalreg(sd, num, val); } } } @@ -2712,7 +2964,7 @@ const char* conv_str(struct script_state* st, struct script_data* data) else if( data_isint(data) ) {// int -> string CREATE(p, char, ITEM_NAME_LENGTH); - snprintf(p, ITEM_NAME_LENGTH, "%d", data->u.num); + snprintf(p, ITEM_NAME_LENGTH, "%"PRId64"", data->u.num); p[ITEM_NAME_LENGTH-1] = '\0'; data->type = C_STR; data->u.str = p; @@ -2786,7 +3038,7 @@ int conv_num(struct script_state* st, struct script_data* data) { data->u.num = 0; } #endif - return data->u.num; + return (int)data->u.num; } // @@ -2803,7 +3055,7 @@ void stack_expand(struct script_stack* stack) { } /// Pushes a value into the stack (with reference) -struct script_data* push_val(struct script_stack* stack, enum c_op type, int val, struct DBMap** ref) { +struct script_data* push_val(struct script_stack* stack, enum c_op type, int64 val, struct DBMap** ref) { if( stack->sp >= stack->sp_max ) script->stack_expand(stack); stack->stack_data[stack->sp].type = type; @@ -2932,6 +3184,8 @@ void script_free_vars(struct DBMap* var_storage) { void script_free_code(struct script_code* code) { script->free_vars( code->script_vars ); + if( code->script_arrays_db ) + code->script_arrays_db->destroy(code->script_arrays_db,script->array_free_db); aFree( code->script_buf ); aFree( code ); } @@ -2952,7 +3206,8 @@ struct script_state* script_alloc_state(struct script_code* rootscript, int pos, st->stack->sp_max = 64; CREATE(st->stack->stack_data, struct script_data, st->stack->sp_max); st->stack->defsp = st->stack->sp; - st->stack->var_function = idb_alloc(DB_OPT_RELEASE_DATA); + st->stack->var_function = i64db_alloc(DB_OPT_RELEASE_DATA); + st->stack->array_function_db = NULL; st->state = RUN; st->script = rootscript; st->pos = pos; @@ -2962,7 +3217,7 @@ struct script_state* script_alloc_state(struct script_code* rootscript, int pos, st->npc_item_flag = battle_config.item_enabled_npc; if( !st->script->script_vars ) - st->script->script_vars = idb_alloc(DB_OPT_RELEASE_DATA); + st->script->script_vars = i64db_alloc(DB_OPT_RELEASE_DATA); st->id = script->next_id++; script->active_scripts++; @@ -2985,14 +3240,22 @@ void script_free_state(struct script_state* st) { timer->delete(st->sleep.timer, script->run_timer); if( st->stack ) { script->free_vars(st->stack->var_function); + if( st->stack->array_function_db ) + st->stack->array_function_db->destroy(st->stack->array_function_db,script->array_free_db); script->pop_stack(st, 0, st->stack->sp); aFree(st->stack->stack_data); ers_free(script->stack_ers, st->stack); st->stack = NULL; } - if( st->script && st->script->script_vars && !db_size(st->script->script_vars) ) { - script->free_vars(st->script->script_vars); - st->script->script_vars = NULL; + if( st->script ) { + if( st->script->script_vars && !db_size(st->script->script_vars) ) { + script->free_vars(st->script->script_vars); + st->script->script_vars = NULL; + } + if( st->script->script_arrays_db && !db_size(st->script->script_arrays_db) ) { + script->free_vars(st->script->script_arrays_db); + st->script->script_arrays_db = NULL; + } } st->pos = -1; idb_remove(script->st_db, st->id); @@ -3037,20 +3300,6 @@ int get_num(unsigned char *scriptbuf,int *pos) return i+((scriptbuf[(*pos)++]&0x7f)<<j); } -/*========================================== - * Remove the value from the stack - *------------------------------------------*/ -int pop_val(struct script_state* st) -{ - if(st->stack->sp<=0) - return 0; - st->stack->sp--; - script->get_val(st,&(st->stack->stack_data[st->stack->sp])); - if(st->stack->stack_data[st->stack->sp].type==C_INT) - return st->stack->stack_data[st->stack->sp].u.num; - return 0; -} - /// Ternary operators /// test ? if_true : if_false void op_3(struct script_state* st, int op) @@ -3064,7 +3313,7 @@ void op_3(struct script_state* st, int op) if( data_isstring(data) ) flag = data->u.str[0];// "" -> false else if( data_isint(data) ) - flag = data->u.num;// 0 -> false + flag = data->u.num == 0 ? 0 : 1;// 0 -> false else { ShowError("script:op_3: invalid data for the ternary operator test\n"); @@ -3234,8 +3483,8 @@ void op_2(struct script_state *st, int op) } else if( data_isint(left) && data_isint(right) ) {// ii => op_2num - int i1 = left->u.num; - int i2 = right->u.num; + int i1 = (int)left->u.num; + int i2 = (int)right->u.num; script_removetop(st, leftref.type == C_NOP ? -2 : -1, 0); script->op_2num(st, op, i1, i2); @@ -3277,19 +3526,18 @@ void op_1(struct script_state* st, int op) return; } - i1 = data->u.num; + i1 = (int)data->u.num; script_removetop(st, -1, 0); - switch( op ) - { - case C_NEG: i1 = -i1; break; - case C_NOT: i1 = ~i1; break; - case C_LNOT: i1 = !i1; break; - default: - ShowError("script:op_1: unexpected operator %s i1=%d\n", script->op2name(op), i1); - script->reportsrc(st); - script_pushnil(st); - st->state = END; - return; + switch( op ) { + case C_NEG: i1 = -i1; break; + case C_NOT: i1 = ~i1; break; + case C_LNOT: i1 = !i1; break; + default: + ShowError("script:op_1: unexpected operator %s i1=%d\n", script->op2name(op), i1); + script->reportsrc(st); + script_pushnil(st); + st->state = END; + return; } script_pushint(st, i1); } @@ -3350,7 +3598,7 @@ void script_check_buildin_argtype(struct script_state* st, int func) } break; case 'r': - if( !data_isreference(data) ) + if( !data_isreference(data) || reference_toconstant(data) ) {// variables ShowWarning("Unexpected type for argument %d. Expected variable, got %s.\n", idx-1,script->op2name(data->type)); script->reportdata(data); @@ -3400,7 +3648,7 @@ int run_func(struct script_state *st) data = &st->stack->stack_data[st->start]; if( data->type == C_NAME && script->str_data[data->u.num].type == C_FUNC ) - func = data->u.num; + func = (int)data->u.num; else { ShowError("script:run_func: not a buildin command.\n"); @@ -3418,7 +3666,7 @@ int run_func(struct script_state *st) if (!(script->str_data[func].func(st))) //Report error script->reportsrc(st); } else { - ShowError("script:run_func: '%s' (id=%d type=%s) has no C function. please report this!!!\n", script->get_str(func), func, script->op2name(script->str_data[func].type)); + ShowError("script:run_func: '%s' (id=%"PRId64" type=%s) has no C function. please report this!!!\n", script->get_str(func), func, script->op2name(script->str_data[func].type)); script->reportsrc(st); st->state = END; } @@ -3723,10 +3971,8 @@ void run_script_main(struct script_state *st) { } //Restore previous script if any. script->detach_state(st, true); - if (sd->state.reg_dirty&2) - intif->saveregistry(sd,2); - if (sd->state.reg_dirty&1) - intif->saveregistry(sd,1); + if (sd->vars_dirty) + intif->saveregistry(sd); } script->free_state(st); st = NULL; @@ -3813,70 +4059,102 @@ void script_add_autobonus(const char *autobonus) /// resets a temporary character array variable to given value -void script_cleararray_pc(struct map_session_data* sd, const char* varname, void* value) -{ +void script_cleararray_pc(struct map_session_data* sd, const char* varname, void* value) { + struct script_array *sa = NULL; + struct DBMap *src = NULL; + unsigned int i, *list = NULL, size = 0; int key; - uint8 idx; - - if( not_array_variable(varname[0]) || !not_server_variable(varname[0]) ) - { - ShowError("script_cleararray_pc: Variable '%s' has invalid scope (char_id=%d).\n", varname, sd->status.char_id); - return; - } key = script->add_str(varname); - - if( is_string_variable(varname) ) - { - for( idx = 0; idx < SCRIPT_MAX_ARRAYSIZE; idx++ ) - { - pc->setregstr(sd, reference_uid(key, idx), (const char*)value); - } - } - else - { - for( idx = 0; idx < SCRIPT_MAX_ARRAYSIZE; idx++ ) - { - pc->setreg(sd, reference_uid(key, idx), (int)__64BPTRSIZE(value)); - } + + if( !(src = script->array_src(NULL,sd,varname) ) ) + return; + + if( value ) + script->array_ensure_zero(NULL,sd,reference_uid(key,0),NULL); + + if( !(sa = idb_get(src, key)) ) /* non-existent array, nothing to empty */ + return; + + size = sa->size; + list = script->array_cpy_list(sa); + + for(i = 0; i < size; i++) { + script->set_reg(NULL,sd,reference_uid(key, list[i]),varname,value,NULL); } } /// sets a temporary character array variable element idx to given value /// @param refcache Pointer to an int variable, which keeps a copy of the reference to varname and must be initialized to 0. Can be NULL if only one element is set. -void script_setarray_pc(struct map_session_data* sd, const char* varname, uint8 idx, void* value, int* refcache) -{ +void script_setarray_pc(struct map_session_data* sd, const char* varname, uint32 idx, void* value, int* refcache) { int key; - - if( not_array_variable(varname[0]) || !not_server_variable(varname[0]) ) - { - ShowError("script_setarray_pc: Variable '%s' has invalid scope (char_id=%d).\n", varname, sd->status.char_id); - return; - } - - if( idx >= SCRIPT_MAX_ARRAYSIZE ) - { - ShowError("script_setarray_pc: Variable '%s' has invalid index '%d' (char_id=%d).\n", varname, (int)idx, sd->status.char_id); + + if( idx >= SCRIPT_MAX_ARRAYSIZE ) { + ShowError("script_setarray_pc: Variable '%s' has invalid index '%u' (char_id=%d).\n", varname, idx, sd->status.char_id); return; } key = ( refcache && refcache[0] ) ? refcache[0] : script->add_str(varname); - - if( is_string_variable(varname) ) - { - pc->setregstr(sd, reference_uid(key, idx), (const char*)value); - } - else - { - pc->setreg(sd, reference_uid(key, idx), (int)__64BPTRSIZE(value)); - } - + + script->set_reg(NULL,sd,reference_uid(key, idx),varname,value,NULL); + if( refcache ) {// save to avoid repeated script->add_str calls refcache[0] = key; } } +/** + * Clears persistent variables from memory + **/ +int script_reg_destroy(DBKey key, DBData *data, va_list ap) { + struct script_reg_state *src; + + if( data->type != DB_DATA_PTR )/* got no need for those! */ + return 0; + + src = DB->data2ptr(data); + + if( src->type ) { + struct script_reg_str *p = (struct script_reg_str *)src; + + if( p->value ) + aFree(p->value); + + ers_free(pc->str_reg_ers,p); + } else { + ers_free(pc->num_reg_ers,(struct script_reg_num*)src); + } + + return 0; +} +/** + * Clears a single persistent variable + **/ +void script_reg_destroy_single(struct map_session_data *sd, int64 reg, struct script_reg_state *data) { + i64db_remove(sd->var_db, reg); + + if( data->type ) { + struct script_reg_str *p = (struct script_reg_str*)data; + + if( p->value ) + aFree(p->value); + + ers_free(pc->str_reg_ers,p); + } else { + ers_free(pc->num_reg_ers,(struct script_reg_num*)data); + } +} +unsigned int *script_array_cpy_list(struct script_array *sa) { + if( sa->size > script->generic_ui_array_size ) + script->generic_ui_array_expand(sa->size); + memcpy(script->generic_ui_array, sa->members, sizeof(unsigned int)*sa->size); + return script->generic_ui_array; +} +void script_generic_ui_array_expand (unsigned int plus) { + script->generic_ui_array_size += plus + 100; + RECREATE(script->generic_ui_array, unsigned int, script->generic_ui_array_size); +} /*========================================== * Destructor *------------------------------------------*/ @@ -4005,6 +4283,11 @@ void do_final_script(void) { if( script->labels != NULL ) aFree(script->labels); + + ers_destroy(script->array_ers); + + if( script->generic_ui_array ) + aFree(script->generic_ui_array); } /*========================================== * Initialization @@ -4014,8 +4297,9 @@ void do_init_script(bool minimal) { script->userfunc_db = strdb_alloc(DB_OPT_DUP_KEY,0); script->autobonus_db = strdb_alloc(DB_OPT_DUP_KEY,0); - script->st_ers = ers_new(sizeof(struct script_state), "script.c::st_ers", ERS_OPT_CLEAN); - script->stack_ers = ers_new(sizeof(struct script_stack), "script.c::script_stack", ERS_OPT_NONE); + script->st_ers = ers_new(sizeof(struct script_state), "script.c::st_ers", ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); + script->stack_ers = ers_new(sizeof(struct script_stack), "script.c::script_stack", ERS_OPT_NONE|ERS_OPT_FLEX_CHUNK); + script->array_ers = ers_new(sizeof(struct script_array), "script.c::array_ers", ERS_OPT_CLEAN|ERS_OPT_CLEAR); ers_chunk_size(script->st_ers, 10); ers_chunk_size(script->stack_ers, 10); @@ -4062,7 +4346,7 @@ int script_reload(void) { mapreg->reload(); - itemdb->force_name_constants(); + itemdb->name_constants(); return 0; } @@ -4073,7 +4357,7 @@ const char *script_getfuncname(struct script_state *st) { data = &st->stack->stack_data[st->start]; if( data->type == C_NAME && script->str_data[data->u.num].type == C_FUNC ) - return script->get_str(data->u.num); + return script->get_str(script_getvarid(data->u.num)); return NULL; } @@ -4568,7 +4852,7 @@ BUILDIN(callfunc) st->script = scr; st->stack->defsp = st->stack->sp; st->state = GOTO; - st->stack->var_function = idb_alloc(DB_OPT_RELEASE_DATA); + st->stack->var_function = i64db_alloc(DB_OPT_RELEASE_DATA); return true; } @@ -4617,7 +4901,7 @@ BUILDIN(callsub) st->pos = pos; st->stack->defsp = st->stack->sp; st->state = GOTO; - st->stack->var_function = idb_alloc(DB_OPT_RELEASE_DATA); + st->stack->var_function = i64db_alloc(DB_OPT_RELEASE_DATA); return true; } @@ -5150,7 +5434,7 @@ BUILDIN(input) { TBL_PC* sd; struct script_data* data; - int uid; + int64 uid; const char* name; int min; int max; @@ -5214,13 +5498,13 @@ BUILDIN(setr) { TBL_PC* sd = NULL; struct script_data* data; //struct script_data* datavalue; - int num; + int64 num; const char* name; char prefix; data = script_getdata(st,2); //datavalue = script_getdata(st,3); - if( !data_isreference(data) ) { + if( !data_isreference(data) || reference_toconstant(data) ) { ShowError("script:set: not a variable\n"); script->reportdata(script_getdata(st,2)); st->state = END; @@ -5292,34 +5576,6 @@ BUILDIN(setr) { /// Array variables /// -/// Returns the size of the specified array -int32 getarraysize(struct script_state* st, int32 id, int32 idx, int isstring, struct DBMap** ref) -{ - int32 ret = idx; - - if( isstring ) - { - for( ; idx < SCRIPT_MAX_ARRAYSIZE; ++idx ) - { - char* str = (char*)script->get_val2(st, reference_uid(id, idx), ref); - if( str && *str ) - ret = idx + 1; - script_removetop(st, -1, 0); - } - } - else - { - for( ; idx < SCRIPT_MAX_ARRAYSIZE; ++idx ) - { - int32 num = (int32)__64BPTRSIZE(script->get_val2(st, reference_uid(id, idx), ref)); - if( num ) - ret = idx + 1; - script_removetop(st, -1, 0); - } - } - return ret; -} - /// Sets values of an array, from the starting index. /// ex: setarray arr[1],1,2,3; /// @@ -5328,14 +5584,14 @@ BUILDIN(setarray) { struct script_data* data; const char* name; - int32 start; - int32 end; + uint32 start; + uint32 end; int32 id; int32 i; TBL_PC* sd = NULL; data = script_getdata(st, 2); - if( !data_isreference(data) ) + if( !data_isreference(data) || reference_toconstant(data) ) { ShowError("script:setarray: not a variable\n"); script->reportdata(data); @@ -5346,13 +5602,6 @@ BUILDIN(setarray) id = reference_getid(data); start = reference_getindex(data); name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:setarray: illegal scope\n"); - script->reportdata(data); - st->state = END; - return false;// not supported - } if( not_server_variable(*name) ) { @@ -5386,8 +5635,8 @@ BUILDIN(cleararray) { struct script_data* data; const char* name; - int32 start; - int32 end; + uint32 start; + uint32 end; int32 id; void* v; TBL_PC* sd = NULL; @@ -5404,13 +5653,6 @@ BUILDIN(cleararray) id = reference_getid(data); start = reference_getindex(data); name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:cleararray: illegal scope\n"); - script->reportdata(data); - st->state = END; - return false;// not supported - } if( not_server_variable(*name) ) { @@ -5449,7 +5691,7 @@ BUILDIN(copyarray) int32 id2; void* v; int32 i; - int32 count; + uint32 count; TBL_PC* sd = NULL; data1 = script_getdata(st, 2); @@ -5469,14 +5711,6 @@ BUILDIN(copyarray) idx2 = reference_getindex(data2); name1 = reference_getname(data1); name2 = reference_getname(data2); - if( not_array_variable(*name1) || not_array_variable(*name2) ) - { - ShowError("script:copyarray: illegal scope\n"); - script->reportdata(data1); - script->reportdata(data2); - st->state = END; - return false;// not supported - } if( is_string_variable(name1) != is_string_variable(name2) ) { @@ -5534,7 +5768,6 @@ BUILDIN(copyarray) BUILDIN(getarraysize) { struct script_data* data; - const char* name; data = script_getdata(st, 2); if( !data_isreference(data) ) @@ -5546,19 +5779,12 @@ BUILDIN(getarraysize) return false;// not a variable } - name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:getarraysize: illegal scope\n"); - script->reportdata(data); - script_pushnil(st); - st->state = END; - return false;// not supported - } - - script_pushint(st, script->getarraysize(st, reference_getid(data), reference_getindex(data), is_string_variable(name), reference_getref(data))); + script_pushint(st, script->array_highest_key(st,st->rid ? script->rid2sd(st) : NULL,reference_getname(data))); return true; } +int script_array_index_cmp(const void *a, const void *b) { + return ( *(unsigned int*)a - *(unsigned int*)b ); +} /// Deletes count or all the elements in an array, from the starting index. /// ex: deletearray arr[4],2; @@ -5569,10 +5795,12 @@ BUILDIN(deletearray) { struct script_data* data; const char* name; - int start; - int end; + unsigned int start, end, i; int id; TBL_PC *sd = NULL; + struct script_array *sa = NULL; + struct DBMap *src = NULL; + void *value; data = script_getdata(st, 2); if( !data_isreference(data) ) @@ -5586,13 +5814,6 @@ BUILDIN(deletearray) id = reference_getid(data); start = reference_getindex(data); name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:deletearray: illegal scope\n"); - script->reportdata(data); - st->state = END; - return false;// not supported - } if( not_server_variable(*name) ) { @@ -5601,39 +5822,82 @@ BUILDIN(deletearray) return true;// no player attached } - end = SCRIPT_MAX_ARRAYSIZE; + if( !(src = script->array_src(st,sd,name) ) ) { + ShowError("script:deletearray: not a array\n"); + script->reportdata(data); + st->state = END; + return false;// not a variable + } + + script->array_ensure_zero(st,NULL,data->u.num,reference_getref(data)); + + if ( !(sa = idb_get(src, id)) ) { /* non-existent array, nothing to empty */ + return true;// not a variable + } + end = script->array_highest_key(st,sd,name); + if( start >= end ) return true;// nothing to free - if( script_hasdata(st,3) ) - { - int count = script_getnum(st, 3); + if( is_string_variable(name) ) + value = (void *)""; + else + value = (void *)0; + + if( script_hasdata(st,3) ) { + unsigned int count = script_getnum(st, 3); if( count > end - start ) count = end - start; if( count <= 0 ) return true;// nothing to free - // move rest of the elements backward - for( ; start + count < end; ++start ) - { - void* v = script->get_val2(st, reference_uid(id, start + count), reference_getref(data)); - script->set_reg(st, sd, reference_uid(id, start), name, v, reference_getref(data)); - script_removetop(st, -1, 0); + if( end - start < sa->size ) { + // Better to iterate directly on the array, no speed-up from using sa + for( ; start + count < end; ++start ) { + // Compact and overwrite + void* v = script->get_val2(st, reference_uid(id, start + count), reference_getref(data)); + script->set_reg(st, sd, reference_uid(id, start), name, v, reference_getref(data)); + script_removetop(st, -1, 0); + } + for( ; start < end; start++ ) { + // Clean up any leftovers that weren't overwritten + script->set_reg(st, sd, reference_uid(id, start), name, value, reference_getref(data)); + } + } else { + // using sa to speed up + unsigned int *list = NULL, size = 0; + list = script->array_cpy_list(sa); + size = sa->size; + qsort(list, size, sizeof(unsigned int), script_array_index_cmp); + + ARR_FIND(0, size, i, list[i] >= start); + + for( ; i < size && list[i] < start + count; i++ ) { + // Clear any entries between start and start+count, if they exist + script->set_reg(st, sd, reference_uid(id, list[i]), name, value, reference_getref(data)); + } + + for( ; i < size && list[i] < end; i++ ) { + // Move back count positions any entries between start+count to fill the gaps + void* v = script->get_val2(st, reference_uid(id, list[i]), reference_getref(data)); + script->set_reg(st, sd, reference_uid(id, list[i]-count), name, v, reference_getref(data)); + script_removetop(st, -1, 0); + // Clear their originals + script->set_reg(st, sd, reference_uid(id, list[i]), name, value, reference_getref(data)); + } + } + } else { + unsigned int *list = NULL, size = 0; + list = script->array_cpy_list(sa); + size = sa->size; + + for(i = 0; i < size; i++) { + if( list[i] >= start ) // Less expensive than sorting it, most likely + script->set_reg(st, sd, reference_uid(id, list[i]), name, value, reference_getref(data)); } } - // clear the rest of the array - if( is_string_variable(name) ) - { - for( ; start < end; ++start ) - script->set_reg(st, sd, reference_uid(id, start), name, (void *)"", reference_getref(data)); - } - else - { - for( ; start < end; ++start ) - script->set_reg(st, sd, reference_uid(id, start), name, (void*)0, reference_getref(data)); - } return true; } @@ -5644,9 +5908,8 @@ BUILDIN(deletearray) BUILDIN(getelementofarray) { struct script_data* data; - const char* name; int32 id; - int i; + int64 i; data = script_getdata(st, 2); if( !data_isreference(data) ) @@ -5659,27 +5922,18 @@ BUILDIN(getelementofarray) } id = reference_getid(data); - name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:getelementofarray: illegal scope\n"); - script->reportdata(data); - script_pushnil(st); - st->state = END; - return false;// not supported - } i = script_getnum(st, 3); if( i < 0 || i >= SCRIPT_MAX_ARRAYSIZE ) { - ShowWarning("script:getelementofarray: index out of range (%d)\n", i); + ShowWarning("script:getelementofarray: index out of range (%lld)\n", i); script->reportdata(data); script_pushnil(st); st->state = END; return false;// out of range } - script->push_val(st->stack, C_NAME, reference_uid(id, i), reference_getref(data)); + script->push_val(st->stack, C_NAME, reference_uid(id, (unsigned int)i), reference_getref(data)); return true; } @@ -5976,19 +6230,13 @@ BUILDIN(checkweight2) name_it = reference_getname(data_it); name_nb = reference_getname(data_nb); - if( not_array_variable(*name_it) || not_array_variable(*name_nb)) - { - ShowError("script:checkweight2: illegal scope\n"); - script_pushint(st,0); - return false;// not supported - } if(is_string_variable(name_it) || is_string_variable(name_nb)) { ShowError("script:checkweight2: illegal type, need int\n"); script_pushint(st,0); return false;// not supported } - nb_it = script->getarraysize(st, id_it, idx_it, 0, reference_getref(data_it)); - nb_nb = script->getarraysize(st, id_nb, idx_nb, 0, reference_getref(data_nb)); + nb_it = script->array_highest_key(st,sd,reference_getname(data_it)); + nb_nb = script->array_highest_key(st,sd,reference_getname(data_nb)); if(nb_it != nb_nb) { ShowError("Size mistmatch: nb_it=%d, nb_nb=%d\n",nb_it,nb_nb); fail = 1; @@ -12810,7 +13058,7 @@ BUILDIN(getmapxy) struct block_list *bl = NULL; TBL_PC *sd=NULL; - int num; + int64 num; const char *name; char prefix; @@ -12910,7 +13158,7 @@ BUILDIN(getmapxy) //Set MapName$ num=st->stack->stack_data[st->start+2].u.num; - name=script->get_str(num&0x00ffffff); + name=script->get_str(script_getvarid(num)); prefix=*name; if(not_server_variable(prefix)) @@ -12921,7 +13169,7 @@ BUILDIN(getmapxy) //Set MapX num=st->stack->stack_data[st->start+3].u.num; - name=script->get_str(num&0x00ffffff); + name=script->get_str(script_getvarid(num)); prefix=*name; if(not_server_variable(prefix)) @@ -12932,7 +13180,7 @@ BUILDIN(getmapxy) //Set MapY num=st->stack->stack_data[st->start+4].u.num; - name=script->get_str(num&0x00ffffff); + name=script->get_str(script_getvarid(num)); prefix=*name; if(not_server_variable(prefix)) @@ -13537,14 +13785,6 @@ BUILDIN(explode) start = reference_getindex(data); name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:explode: illegal scope\n"); - script->reportdata(data); - st->state = END; - return false;// not supported - } - if( !is_string_variable(name) ) { ShowError("script:explode: not string array\n"); @@ -13586,7 +13826,7 @@ BUILDIN(implode) { struct script_data* data = script_getdata(st, 2); const char *glue = NULL, *name, *temp; - int32 array_size, id; + uint32 array_size, id; size_t len = 0, glue_len = 0, k = 0; int i; @@ -13605,14 +13845,6 @@ BUILDIN(implode) id = reference_getid(data); name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:implode: illegal scope\n"); - script->reportdata(data); - st->state = END; - return false;// not supported - } - if( !is_string_variable(name) ) { ShowError("script:implode: not string array\n"); @@ -13629,7 +13861,7 @@ BUILDIN(implode) } //count chars - array_size = script->getarraysize(st, id, reference_getindex(data), is_string_variable(name), reference_getref(data)) - 1; + array_size = script->array_highest_key(st,sd,name) - 1; if(array_size == -1) { //empty array check (AmsTaff) @@ -14253,7 +14485,7 @@ int buildin_query_sql_sub(struct script_state* st, Sql* handle) const char* query; struct script_data* data; const char* name; - int max_rows = SCRIPT_MAX_ARRAYSIZE; // maximum number of rows + unsigned int max_rows = SCRIPT_MAX_ARRAYSIZE; // maximum number of rows int num_vars; int num_cols; @@ -14270,8 +14502,6 @@ int buildin_query_sql_sub(struct script_state* st, Sql* handle) return false; } } - if( not_array_variable(*name) ) - max_rows = 1;// not an array, limit to one row } else { ShowError("script:query_sql: not a variable\n"); script->reportdata(data); @@ -14857,13 +15087,6 @@ BUILDIN(searchitem) id = reference_getid(data); start = reference_getindex(data); name = reference_getname(data); - if( not_array_variable(*name) ) - { - ShowError("script:searchitem: illegal scope\n"); - script->reportdata(data); - st->state = END; - return false;// not supported - } if( not_server_variable(*name) ) { @@ -16330,11 +16553,15 @@ BUILDIN(has_instance) { const char *str; int16 m; int instance_id = -1; - + bool type = strcmp(script->getfuncname(st),"has_instance2") == 0 ? true : false; + str = script_getstr(st, 2); if( (m = map->mapname2mapid(str)) < 0 ) { - script_pushconststr(st, ""); + if( type ) + script_pushint(st, -1); + else + script_pushconststr(st, ""); return true; } @@ -16381,11 +16608,17 @@ BUILDIN(has_instance) { } if( !instance->valid(instance_id) || (m = instance->map2imap(m, instance_id)) < 0 ) { - script_pushconststr(st, ""); + if( type ) + script_pushint(st, -1); + else + script_pushconststr(st, ""); return true; } - script_pushconststr(st, map->list[m].name); + if( type ) + script_pushint(st, instance_id); + else + script_pushconststr(st, map->list[m].name); return true; } int buildin_instance_warpall_sub(struct block_list *bl,va_list ap) { @@ -18693,6 +18926,7 @@ void script_parse_builtin(void) { BUILDIN_DEF(instance_check_party,"i???"), BUILDIN_DEF(instance_mapname,"s?"), BUILDIN_DEF(instance_set_respawn,"sii?"), + BUILDIN_DEF2(has_instance,"has_instance2","s"), /** * 3rd-related @@ -18811,11 +19045,11 @@ void script_defaults(void) { script->next_id = 0; script->st_ers = NULL; script->stack_ers = NULL; - + script->array_ers = NULL; + script->hq = NULL; script->hqi = NULL; script->hqs = script->hqis = 0; - memset(&script->hqe, 0, sizeof(script->hqe)); script->buildin = NULL; script->buildin_count = 0; @@ -18868,6 +19102,9 @@ void script_defaults(void) { script->potion_flag = script->potion_hp = script->potion_per_hp = script->potion_sp = script->potion_per_sp = script->potion_target = 0; + script->generic_ui_array = NULL; + script->generic_ui_array_size = 0; + /* */ script->init = do_init_script; script->final = do_final_script; script->reload = script_reload; @@ -18894,7 +19131,6 @@ void script_defaults(void) { script->pop_stack = pop_stack; script->set_constant = script_set_constant; script->set_constant2 = script_set_constant2; - script->set_constant_force = script_set_constant_force; script->get_constant = script_get_constant; script->label_add = script_label_add; script->run = run_script; @@ -18955,7 +19191,6 @@ void script_defaults(void) { script->set_reg = set_reg; script->stack_expand = stack_expand; script->push_retinfo = push_retinfo; - script->pop_val = pop_val; script->op_3 = op_3; script->op_2str = op_2str; script->op_2num = op_2num; @@ -18968,7 +19203,6 @@ void script_defaults(void) { script->menu_countoptions = menu_countoptions; script->buildin_areawarp_sub = buildin_areawarp_sub; script->buildin_areapercentheal_sub = buildin_areapercentheal_sub; - script->getarraysize = getarraysize; script->buildin_delitem_delete = buildin_delitem_delete; script->buildin_delitem_search = buildin_delitem_search; script->buildin_killmonster_sub_strip = buildin_killmonster_sub_strip; @@ -19033,4 +19267,24 @@ void script_defaults(void) { script->global_casecheck.str_pos = 0; memset(script->global_casecheck.str_hash, 0, sizeof(script->global_casecheck.str_hash)); // end ENABLE_CASE_CHECK + + /** + * Array Handling + **/ + script->array_src = script_array_src; + script->array_update = script_array_update; + script->array_add_member = script_array_add_member; + script->array_remove_member = script_array_remove_member; + script->array_delete = script_array_delete; + script->array_size = script_array_size; + script->array_free_db = script_free_array_db; + script->array_highest_key = script_array_highest_key; + script->array_ensure_zero = script_array_ensure_zero; + /* */ + script->reg_destroy_single = script_reg_destroy_single; + script->reg_destroy = script_reg_destroy; + /* */ + script->generic_ui_array_expand = script_generic_ui_array_expand; + script->array_cpy_list = script_array_cpy_list; + } diff --git a/src/map/script.h b/src/map/script.h index 2f7499569..97db2a775 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -6,6 +6,7 @@ #define _SCRIPT_H_ #include "../common/strlib.h" //StringBuf +#include "../common/cbasetypes.h" #include "map.h" //EVENT_NAME_LENGTH #include <setjmp.h> @@ -28,8 +29,8 @@ struct eri; #define NUM_WHISPER_VAR 10 -/// Maximum amount of elements in script arrays (soon getting ducked) -#define SCRIPT_MAX_ARRAYSIZE 128 +/// Maximum amount of elements in script arrays +#define SCRIPT_MAX_ARRAYSIZE (UINT_MAX - 1) #define SCRIPT_BLOCK_SIZE 512 @@ -127,9 +128,9 @@ struct eri; /// Returns the unique id of the reference (id and index) #define reference_getuid(data) ( (data)->u.num ) /// Returns the id of the reference -#define reference_getid(data) ( (int32)(reference_getuid(data) & 0x00ffffff) ) +#define reference_getid(data) ( (int32)(int64)(reference_getuid(data) & 0xFFFFFFFF) ) /// Returns the array index of the reference -#define reference_getindex(data) ( (int32)(((uint32)(reference_getuid(data) & 0xff000000)) >> 24) ) +#define reference_getindex(data) ( (uint32)(int64)((reference_getuid(data) >> 32) & 0xFFFFFFFF) ) /// Returns the name of the reference #define reference_getname(data) ( script->str_buf + script->str_data[reference_getid(data)].str ) /// Returns the linked list of uid-value pairs of the reference (can be NULL) @@ -140,10 +141,12 @@ struct eri; #define reference_getparamtype(data) ( script->str_data[reference_getid(data)].val ) /// Composes the uid of a reference from the id and the index -#define reference_uid(id,idx) ( (int32)((((uint32)(id)) & 0x00ffffff) | (((uint32)(idx)) << 24)) ) +#define reference_uid(id,idx) ( (int64) ((uint64)(id) & 0xFFFFFFFF) | ((uint64)(idx) << 32) ) + +#define script_getvarid(var) ( (int32)(int64)(var & 0xFFFFFFFF) ) +#define script_getvaridx(var) ( (uint32)(int64)((var >> 32) & 0xFFFFFFFF) ) #define not_server_variable(prefix) ( (prefix) != '$' && (prefix) != '.' && (prefix) != '\'') -#define not_array_variable(prefix) ( (prefix) != '$' && (prefix) != '@' && (prefix) != '.' && (prefix) != '\'' ) #define is_string_variable(name) ( (name)[strlen(name) - 1] == '$' ) #define BUILDIN(x) bool buildin_ ## x (struct script_state* st) @@ -339,7 +342,7 @@ struct script_retinfo { struct script_data { enum c_op type; union script_data_val { - int num; + int64 num; char *str; struct script_retinfo* ri; } u; @@ -350,8 +353,9 @@ struct script_data { // it must be saved when script state is RERUNLINE. [Eoe / jA 1094] struct script_code { int script_size; - unsigned char* script_buf; - struct DBMap* script_vars; + unsigned char *script_buf; + struct DBMap *script_vars; + struct DBMap *script_arrays_db; }; struct script_stack { @@ -359,7 +363,8 @@ struct script_stack { int sp_max;// capacity of the stack int defsp; struct script_data *stack_data;// stack - struct DBMap* var_function;// scope variables + struct DBMap *var_function;// scope variables + struct DBMap *array_function_db; }; /* [Ind/Hercules] */ @@ -401,13 +406,14 @@ struct script_state { unsigned int id; }; +/* TODO: HELLO DUCK THIS */ struct script_reg { - int index; + int64 index; int data; }; - +/* TODO: HELLO DUCK THIS */ struct script_regstr { - int index; + int64 index; char* data; }; @@ -458,6 +464,12 @@ struct casecheck_data { void (*clear) (void); }; +struct script_array { + unsigned int id;/* the first 32b of the 64b uid, aka the id */ + unsigned int size;/* how many members */ + unsigned int *members;/* member list */ +}; + /** * Interface **/ @@ -472,10 +484,13 @@ struct script_interface { struct hQueue *hq; struct hQueueIterator *hqi; int hqs, hqis; - int hqe[HQO_MAX]; /* */ char **buildin; unsigned int buildin_count; + /** + * used to generate quick script_array entries + **/ + struct eri *array_ers; /* */ struct str_data_struct *str_data; int str_data_size; // size of the data @@ -531,6 +546,9 @@ struct script_interface { int potion_flag; //For use on Alchemist improved potions/Potion Pitcher. [Skotlex] int potion_hp, potion_per_hp, potion_sp, potion_per_sp; int potion_target; + /* */ + unsigned int *generic_ui_array; + unsigned int generic_ui_array_size; /* */ void (*init) (bool minimal); void (*final) (void); @@ -549,15 +567,14 @@ struct script_interface { const char* (*conv_str) (struct script_state *st,struct script_data *data); TBL_PC *(*rid2sd) (struct script_state *st); void (*detach_rid) (struct script_state* st); - struct script_data* (*push_val)(struct script_stack* stack, enum c_op type, int val, struct DBMap** ref); + struct script_data* (*push_val)(struct script_stack* stack, enum c_op type, int64 val, struct DBMap** ref); struct script_data *(*get_val) (struct script_state* st, struct script_data* data); - void* (*get_val2) (struct script_state* st, int uid, struct DBMap** ref); + void* (*get_val2) (struct script_state* st, int64 uid, struct DBMap** ref); struct script_data* (*push_str) (struct script_stack* stack, enum c_op type, char* str); struct script_data* (*push_copy) (struct script_stack* stack, int pos); void (*pop_stack) (struct script_state* st, int start, int end); void (*set_constant) (const char* name, int value, bool isparameter); void (*set_constant2) (const char *name, int value, bool isparameter); - void (*set_constant_force) (const char *name, int value, bool isparameter); bool (*get_constant) (const char* name, int* value); void (*label_add)(int key, int pos); void (*run) (struct script_code *rootscript,int pos,int rid,int oid); @@ -571,7 +588,7 @@ struct script_interface { void (*free_state) (struct script_state* st); void (*run_autobonus) (const char *autobonus,int id, int pos); void (*cleararray_pc) (struct map_session_data* sd, const char* varname, void* value); - void (*setarray_pc) (struct map_session_data* sd, const char* varname, uint8 idx, void* value, int* refcache); + void (*setarray_pc) (struct map_session_data* sd, const char* varname, uint32 idx, void* value, int* refcache); int (*config_read) (char *cfgName); int (*add_str) (const char* p); const char* (*get_str) (int id); @@ -615,10 +632,9 @@ struct script_interface { void (*read_constdb) (void); const char* (*print_line) (StringBuf *buf, const char *p, const char *mark, int line); void (*errorwarning_sub) (StringBuf *buf, const char *src, const char *file, int start_line, const char *error_msg, const char *error_pos); - int (*set_reg) (struct script_state *st, TBL_PC *sd, int num, const char *name, const void *value, struct DBMap **ref); + int (*set_reg) (struct script_state *st, TBL_PC *sd, int64 num, const char *name, const void *value, struct DBMap **ref); void (*stack_expand) (struct script_stack *stack); struct script_data* (*push_retinfo) (struct script_stack *stack, struct script_retinfo *ri, DBMap **ref); - int (*pop_val) (struct script_state *st); void (*op_3) (struct script_state *st, int op); void (*op_2str) (struct script_state *st, int op, const char *s1, const char *s2); void (*op_2num) (struct script_state *st, int op, int i1, int i2); @@ -631,7 +647,6 @@ struct script_interface { int (*menu_countoptions) (const char *str, int max_count, int *total); int (*buildin_areawarp_sub) (struct block_list *bl, va_list ap); int (*buildin_areapercentheal_sub) (struct block_list *bl, va_list ap); - int32 (*getarraysize) (struct script_state *st, int32 id, int32 idx, int isstring, struct DBMap **ref); void (*buildin_delitem_delete) (struct map_session_data *sd, int idx, int *amount, bool delete_items); bool (*buildin_delitem_search) (struct map_session_data *sd, struct item *it, bool exact_match); int (*buildin_killmonster_sub_strip) (struct block_list *bl, va_list ap); @@ -661,6 +676,24 @@ struct script_interface { struct casecheck_data local_casecheck; struct casecheck_data global_casecheck; // end ENABLE_CASE_CHECK + /** + * Array Handling + **/ + struct DBMap *(*array_src) (struct script_state *st, struct map_session_data *sd, const char *name); + void (*array_update) (struct DBMap **src, int64 num, bool empty); + void (*array_delete) (struct DBMap *src, struct script_array *sa); + void (*array_remove_member) (struct DBMap *src, struct script_array *sa, unsigned int idx); + void (*array_add_member) (struct script_array *sa, unsigned int idx); + unsigned int (*array_size) (struct script_state *st, struct map_session_data *sd, const char *name); + unsigned int (*array_highest_key) (struct script_state *st, struct map_session_data *sd, const char *name); + int (*array_free_db) (DBKey key, DBData *data, va_list ap); + void (*array_ensure_zero) (struct script_state *st, struct map_session_data *sd, int64 uid, struct DBMap** ref); + /* */ + void (*reg_destroy_single) (struct map_session_data *sd, int64 reg, struct script_reg_state *data); + int (*reg_destroy) (DBKey key, DBData *data, va_list ap); + /* */ + void (*generic_ui_array_expand) (unsigned int plus); + unsigned int *(*array_cpy_list) (struct script_array *sa); }; struct script_interface *script; diff --git a/src/map/skill.c b/src/map/skill.c index 28937048e..0df90a538 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2539,8 +2539,8 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr } tsd->reproduceskill_id = copy_skill; - pc_setglobalreg(tsd, "REPRODUCE_SKILL", copy_skill); - pc_setglobalreg(tsd, "REPRODUCE_SKILL_LV", lv); + pc_setglobalreg(tsd, script->add_str("REPRODUCE_SKILL"), copy_skill); + pc_setglobalreg(tsd, script->add_str("REPRODUCE_SKILL_LV"), lv); tsd->status.skill[cidx].id = copy_skill; tsd->status.skill[cidx].lv = lv; @@ -2562,8 +2562,8 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr lv = type; tsd->cloneskill_id = copy_skill; - pc_setglobalreg(tsd, "CLONE_SKILL", copy_skill); - pc_setglobalreg(tsd, "CLONE_SKILL_LV", lv); + pc_setglobalreg(tsd, script->add_str("CLONE_SKILL"), copy_skill); + pc_setglobalreg(tsd, script->add_str("CLONE_SKILL_LV"), lv); tsd->status.skill[cidx].id = copy_skill; tsd->status.skill[cidx].lv = lv; @@ -5660,7 +5660,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin } sd->mission_mobid = id; sd->mission_count = 0; - pc_setglobalreg(sd,"TK_MISSION_ID", id); + pc_setglobalreg(sd,script->add_str("TK_MISSION_ID"), id); clif->mission_info(sd, id, 0); clif->skill_nodamage(src,bl,skill_id,skill_lv,1); } @@ -7414,7 +7414,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin if (skill_id == SL_SUPERNOVICE && dstsd && dstsd->die_counter && !(rnd()%100)) { //Erase death count 1% of the casts dstsd->die_counter = 0; - pc_setglobalreg(dstsd,"PC_DIE_COUNTER", 0); + pc_setglobalreg(dstsd,script->add_str("PC_DIE_COUNTER"), 0); clif->specialeffect(bl, 0x152, AREA); //SC_SOULLINK invokes status_calc_pc for us. } @@ -16597,7 +16597,7 @@ int skill_produce_mix(struct map_session_data *sd, uint16 skill_id, int nameid, { //Cooking items. clif->specialeffect(&sd->bl, 608, AREA); if( sd->cook_mastery < 1999 ) - pc_setglobalreg(sd, "COOK_MASTERY",sd->cook_mastery + ( 1 << ( (skill->produce_db[idx].itemlv - 11) / 2 ) ) * 5); + pc_setglobalreg(sd, script->add_str("COOK_MASTERY"),sd->cook_mastery + ( 1 << ( (skill->produce_db[idx].itemlv - 11) / 2 ) ) * 5); } break; } @@ -16698,7 +16698,7 @@ int skill_produce_mix(struct map_session_data *sd, uint16 skill_id, int nameid, { //Cooking items. clif->specialeffect(&sd->bl, 609, AREA); if( sd->cook_mastery > 0 ) - pc_setglobalreg(sd, "COOK_MASTERY", sd->cook_mastery - ( 1 << ((skill->produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill->produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 )); + pc_setglobalreg(sd, script->add_str("COOK_MASTERY"), sd->cook_mastery - ( 1 << ((skill->produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill->produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 )); } } } @@ -18202,13 +18202,15 @@ int do_init_skill(bool minimal) { skill->cd_db = idb_alloc(DB_OPT_BASE); skill->usave_db = idb_alloc(DB_OPT_RELEASE_DATA); - skill->unit_ers = ers_new(sizeof(struct skill_unit_group),"skill.c::skill_unit_ers",ERS_OPT_CLEAN); - skill->timer_ers = ers_new(sizeof(struct skill_timerskill),"skill.c::skill_timer_ers",ERS_OPT_NONE); - skill->cd_ers = ers_new(sizeof(struct skill_cd),"skill.c::skill_cd_ers",ERS_OPT_CLEAR|ERS_OPT_CLEAN); - skill->cd_entry_ers = ers_new(sizeof(struct skill_cd_entry),"skill.c::skill_cd_entry_ers",ERS_OPT_CLEAR); + skill->unit_ers = ers_new(sizeof(struct skill_unit_group),"skill.c::skill_unit_ers",ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); + skill->timer_ers = ers_new(sizeof(struct skill_timerskill),"skill.c::skill_timer_ers",ERS_OPT_NONE|ERS_OPT_FLEX_CHUNK); + skill->cd_ers = ers_new(sizeof(struct skill_cd),"skill.c::skill_cd_ers",ERS_OPT_CLEAR|ERS_OPT_CLEAN|ERS_OPT_FLEX_CHUNK); + skill->cd_entry_ers = ers_new(sizeof(struct skill_cd_entry),"skill.c::skill_cd_entry_ers",ERS_OPT_CLEAR|ERS_OPT_FLEX_CHUNK); ers_chunk_size(skill->cd_ers, 25); ers_chunk_size(skill->cd_entry_ers, 100); + ers_chunk_size(skill->unit_ers, 150); + ers_chunk_size(skill->timer_ers, 150); timer->add_func_list(skill->unit_timer,"skill_unit_timer"); timer->add_func_list(skill->castend_id,"skill_castend_id"); diff --git a/src/map/status.c b/src/map/status.c index d52572466..1f7d81ccf 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2069,9 +2069,9 @@ int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt) { struct status_data *masterstatus = status->get_base_status(mbl); if ( masterstatus ) { if( battle_config.slaves_inherit_speed&(masterstatus->mode&MD_CANMOVE?1:2) ) - masterstatus->speed = masterstatus->speed; - if( masterstatus->speed < 2 ) /* minimum for the unit to function properly */ - masterstatus->speed = 2; + mstatus->speed = masterstatus->speed; + if( mstatus->speed < 2 ) /* minimum for the unit to function properly */ + mstatus->speed = 2; } } diff --git a/src/map/trade.c b/src/map/trade.c index 6f079bdd3..44b669ebd 100644 --- a/src/map/trade.c +++ b/src/map/trade.c @@ -178,7 +178,7 @@ int impossible_trade_check(struct map_session_data *sd) nullpo_retr(1, sd); if(sd->deal.zeny > sd->status.zeny) { - pc_setglobalreg(sd,"ZENY_HACKER",1); + pc_setglobalreg(sd,script->add_str("ZENY_HACKER"),1); return -1; } diff --git a/src/map/unit.c b/src/map/unit.c index 7f722684d..d801a72f0 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -2352,20 +2352,13 @@ int unit_free(struct block_list *bl, clr_type clrtype) { pc->delspiritball(sd,sd->spiritball,1); for(i = 1; i < 5; i++) pc->del_charm(sd, sd->charm[i], i); - - if( sd->reg ) { //Double logout already freed pointer fix... [Skotlex] - aFree(sd->reg); - sd->reg = NULL; - sd->reg_num = 0; - } - if( sd->regstr ) { - for( i = 0; i < sd->regstr_num; ++i ) - if( sd->regstr[i].data ) - aFree(sd->regstr[i].data); - aFree(sd->regstr); - sd->regstr = NULL; - sd->regstr_num = 0; - } + + if( sd->var_db ) + sd->var_db->destroy(sd->var_db,script->reg_destroy); + + if( sd->array_db ) + sd->array_db->destroy(sd->array_db,script->array_free_db); + if( sd->st && sd->st->state != RUN ) {// free attached scripts that are waiting script->free_state(sd->st); sd->st = NULL; diff --git a/src/map/vending.c b/src/map/vending.c index 7d248351c..78bc79a31 100644 --- a/src/map/vending.c +++ b/src/map/vending.c @@ -212,7 +212,8 @@ void vending_purchasereq(struct map_session_data* sd, int aid, unsigned int uid, //Close Vending (this was automatically done by the client, we have to do it manually for autovenders) [Skotlex] vending->close(vsd); map->quit(vsd); //They have no reason to stay around anymore, do they? - } + } else + pc->autotrade_update(vsd,PAUC_REFRESH); } } diff --git a/src/plugins/HPMHooking/HPMHooking.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking.HPMHooksCore.inc index 804ec86e2..bef0cec69 100644 --- a/src/plugins/HPMHooking/HPMHooking.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking.HPMHooksCore.inc @@ -2459,8 +2459,6 @@ struct { struct HPMHookPoint *HP_itemdb_reload_post; struct HPMHookPoint *HP_itemdb_name_constants_pre; struct HPMHookPoint *HP_itemdb_name_constants_post; - struct HPMHookPoint *HP_itemdb_force_name_constants_pre; - struct HPMHookPoint *HP_itemdb_force_name_constants_post; struct HPMHookPoint *HP_itemdb_read_groups_pre; struct HPMHookPoint *HP_itemdb_read_groups_post; struct HPMHookPoint *HP_itemdb_read_chains_pre; @@ -3497,8 +3495,6 @@ struct { struct HPMHookPoint *HP_pcg_get_level_post; struct HPMHookPoint *HP_pcg_get_idx_pre; struct HPMHookPoint *HP_pcg_get_idx_post; - struct HPMHookPoint *HP_pcg_add_permission_pre; - struct HPMHookPoint *HP_pcg_add_permission_post; struct HPMHookPoint *HP_pc_init_pre; struct HPMHookPoint *HP_pc_init_post; struct HPMHookPoint *HP_pc_final_pre; @@ -3893,6 +3889,16 @@ struct { struct HPMHookPoint *HP_pc_global_expiration_timer_post; struct HPMHookPoint *HP_pc_expire_check_pre; struct HPMHookPoint *HP_pc_expire_check_post; + struct HPMHookPoint *HP_pc_autotrade_load_pre; + struct HPMHookPoint *HP_pc_autotrade_load_post; + struct HPMHookPoint *HP_pc_autotrade_update_pre; + struct HPMHookPoint *HP_pc_autotrade_update_post; + struct HPMHookPoint *HP_pc_autotrade_start_pre; + struct HPMHookPoint *HP_pc_autotrade_start_post; + struct HPMHookPoint *HP_pc_autotrade_prepare_pre; + struct HPMHookPoint *HP_pc_autotrade_prepare_post; + struct HPMHookPoint *HP_pc_autotrade_populate_pre; + struct HPMHookPoint *HP_pc_autotrade_populate_post; struct HPMHookPoint *HP_pet_init_pre; struct HPMHookPoint *HP_pet_init_post; struct HPMHookPoint *HP_pet_final_pre; @@ -4045,8 +4051,6 @@ struct { struct HPMHookPoint *HP_script_set_constant_post; struct HPMHookPoint *HP_script_set_constant2_pre; struct HPMHookPoint *HP_script_set_constant2_post; - struct HPMHookPoint *HP_script_set_constant_force_pre; - struct HPMHookPoint *HP_script_set_constant_force_post; struct HPMHookPoint *HP_script_get_constant_pre; struct HPMHookPoint *HP_script_get_constant_post; struct HPMHookPoint *HP_script_label_add_pre; @@ -4163,8 +4167,6 @@ struct { struct HPMHookPoint *HP_script_stack_expand_post; struct HPMHookPoint *HP_script_push_retinfo_pre; struct HPMHookPoint *HP_script_push_retinfo_post; - struct HPMHookPoint *HP_script_pop_val_pre; - struct HPMHookPoint *HP_script_pop_val_post; struct HPMHookPoint *HP_script_op_3_pre; struct HPMHookPoint *HP_script_op_3_post; struct HPMHookPoint *HP_script_op_2str_pre; @@ -4189,8 +4191,6 @@ struct { struct HPMHookPoint *HP_script_buildin_areawarp_sub_post; struct HPMHookPoint *HP_script_buildin_areapercentheal_sub_pre; struct HPMHookPoint *HP_script_buildin_areapercentheal_sub_post; - struct HPMHookPoint *HP_script_getarraysize_pre; - struct HPMHookPoint *HP_script_getarraysize_post; struct HPMHookPoint *HP_script_buildin_delitem_delete_pre; struct HPMHookPoint *HP_script_buildin_delitem_delete_post; struct HPMHookPoint *HP_script_buildin_delitem_search_pre; @@ -4241,6 +4241,32 @@ struct { struct HPMHookPoint *HP_script_getfuncname_post; struct HPMHookPoint *HP_script_calc_hash_ci_pre; struct HPMHookPoint *HP_script_calc_hash_ci_post; + struct HPMHookPoint *HP_script_array_src_pre; + struct HPMHookPoint *HP_script_array_src_post; + struct HPMHookPoint *HP_script_array_update_pre; + struct HPMHookPoint *HP_script_array_update_post; + struct HPMHookPoint *HP_script_array_delete_pre; + struct HPMHookPoint *HP_script_array_delete_post; + struct HPMHookPoint *HP_script_array_remove_member_pre; + struct HPMHookPoint *HP_script_array_remove_member_post; + struct HPMHookPoint *HP_script_array_add_member_pre; + struct HPMHookPoint *HP_script_array_add_member_post; + struct HPMHookPoint *HP_script_array_size_pre; + struct HPMHookPoint *HP_script_array_size_post; + struct HPMHookPoint *HP_script_array_highest_key_pre; + struct HPMHookPoint *HP_script_array_highest_key_post; + struct HPMHookPoint *HP_script_array_free_db_pre; + struct HPMHookPoint *HP_script_array_free_db_post; + struct HPMHookPoint *HP_script_array_ensure_zero_pre; + struct HPMHookPoint *HP_script_array_ensure_zero_post; + struct HPMHookPoint *HP_script_reg_destroy_single_pre; + struct HPMHookPoint *HP_script_reg_destroy_single_post; + struct HPMHookPoint *HP_script_reg_destroy_pre; + struct HPMHookPoint *HP_script_reg_destroy_post; + struct HPMHookPoint *HP_script_generic_ui_array_expand_pre; + struct HPMHookPoint *HP_script_generic_ui_array_expand_post; + struct HPMHookPoint *HP_script_array_cpy_list_pre; + struct HPMHookPoint *HP_script_array_cpy_list_post; struct HPMHookPoint *HP_searchstore_open_pre; struct HPMHookPoint *HP_searchstore_open_post; struct HPMHookPoint *HP_searchstore_query_pre; @@ -7454,8 +7480,6 @@ struct { int HP_itemdb_reload_post; int HP_itemdb_name_constants_pre; int HP_itemdb_name_constants_post; - int HP_itemdb_force_name_constants_pre; - int HP_itemdb_force_name_constants_post; int HP_itemdb_read_groups_pre; int HP_itemdb_read_groups_post; int HP_itemdb_read_chains_pre; @@ -8492,8 +8516,6 @@ struct { int HP_pcg_get_level_post; int HP_pcg_get_idx_pre; int HP_pcg_get_idx_post; - int HP_pcg_add_permission_pre; - int HP_pcg_add_permission_post; int HP_pc_init_pre; int HP_pc_init_post; int HP_pc_final_pre; @@ -8888,6 +8910,16 @@ struct { int HP_pc_global_expiration_timer_post; int HP_pc_expire_check_pre; int HP_pc_expire_check_post; + int HP_pc_autotrade_load_pre; + int HP_pc_autotrade_load_post; + int HP_pc_autotrade_update_pre; + int HP_pc_autotrade_update_post; + int HP_pc_autotrade_start_pre; + int HP_pc_autotrade_start_post; + int HP_pc_autotrade_prepare_pre; + int HP_pc_autotrade_prepare_post; + int HP_pc_autotrade_populate_pre; + int HP_pc_autotrade_populate_post; int HP_pet_init_pre; int HP_pet_init_post; int HP_pet_final_pre; @@ -9040,8 +9072,6 @@ struct { int HP_script_set_constant_post; int HP_script_set_constant2_pre; int HP_script_set_constant2_post; - int HP_script_set_constant_force_pre; - int HP_script_set_constant_force_post; int HP_script_get_constant_pre; int HP_script_get_constant_post; int HP_script_label_add_pre; @@ -9158,8 +9188,6 @@ struct { int HP_script_stack_expand_post; int HP_script_push_retinfo_pre; int HP_script_push_retinfo_post; - int HP_script_pop_val_pre; - int HP_script_pop_val_post; int HP_script_op_3_pre; int HP_script_op_3_post; int HP_script_op_2str_pre; @@ -9184,8 +9212,6 @@ struct { int HP_script_buildin_areawarp_sub_post; int HP_script_buildin_areapercentheal_sub_pre; int HP_script_buildin_areapercentheal_sub_post; - int HP_script_getarraysize_pre; - int HP_script_getarraysize_post; int HP_script_buildin_delitem_delete_pre; int HP_script_buildin_delitem_delete_post; int HP_script_buildin_delitem_search_pre; @@ -9236,6 +9262,32 @@ struct { int HP_script_getfuncname_post; int HP_script_calc_hash_ci_pre; int HP_script_calc_hash_ci_post; + int HP_script_array_src_pre; + int HP_script_array_src_post; + int HP_script_array_update_pre; + int HP_script_array_update_post; + int HP_script_array_delete_pre; + int HP_script_array_delete_post; + int HP_script_array_remove_member_pre; + int HP_script_array_remove_member_post; + int HP_script_array_add_member_pre; + int HP_script_array_add_member_post; + int HP_script_array_size_pre; + int HP_script_array_size_post; + int HP_script_array_highest_key_pre; + int HP_script_array_highest_key_post; + int HP_script_array_free_db_pre; + int HP_script_array_free_db_post; + int HP_script_array_ensure_zero_pre; + int HP_script_array_ensure_zero_post; + int HP_script_reg_destroy_single_pre; + int HP_script_reg_destroy_single_post; + int HP_script_reg_destroy_pre; + int HP_script_reg_destroy_post; + int HP_script_generic_ui_array_expand_pre; + int HP_script_generic_ui_array_expand_post; + int HP_script_array_cpy_list_pre; + int HP_script_array_cpy_list_post; int HP_searchstore_open_pre; int HP_searchstore_open_post; int HP_searchstore_query_pre; diff --git a/src/plugins/HPMHooking/HPMHooking.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking.HookingPoints.inc index 8188f7c30..42e6593a1 100644 --- a/src/plugins/HPMHooking/HPMHooking.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking.HookingPoints.inc @@ -1248,7 +1248,6 @@ struct HookingPointData HookingPoints[] = { { HP_POP(itemdb->final, HP_itemdb_final) }, { HP_POP(itemdb->reload, HP_itemdb_reload) }, { HP_POP(itemdb->name_constants, HP_itemdb_name_constants) }, - { HP_POP(itemdb->force_name_constants, HP_itemdb_force_name_constants) }, { HP_POP(itemdb->read_groups, HP_itemdb_read_groups) }, { HP_POP(itemdb->read_chains, HP_itemdb_read_chains) }, { HP_POP(itemdb->read_packages, HP_itemdb_read_packages) }, @@ -1778,7 +1777,6 @@ struct HookingPointData HookingPoints[] = { { HP_POP(pcg->get_name, HP_pcg_get_name) }, { HP_POP(pcg->get_level, HP_pcg_get_level) }, { HP_POP(pcg->get_idx, HP_pcg_get_idx) }, - { HP_POP(pcg->add_permission, HP_pcg_add_permission) }, /* pc */ { HP_POP(pc->init, HP_pc_init) }, { HP_POP(pc->final, HP_pc_final) }, @@ -1977,6 +1975,11 @@ struct HookingPointData HookingPoints[] = { { HP_POP(pc->expiration_timer, HP_pc_expiration_timer) }, { HP_POP(pc->global_expiration_timer, HP_pc_global_expiration_timer) }, { HP_POP(pc->expire_check, HP_pc_expire_check) }, + { HP_POP(pc->autotrade_load, HP_pc_autotrade_load) }, + { HP_POP(pc->autotrade_update, HP_pc_autotrade_update) }, + { HP_POP(pc->autotrade_start, HP_pc_autotrade_start) }, + { HP_POP(pc->autotrade_prepare, HP_pc_autotrade_prepare) }, + { HP_POP(pc->autotrade_populate, HP_pc_autotrade_populate) }, /* pet */ { HP_POP(pet->init, HP_pet_init) }, { HP_POP(pet->final, HP_pet_final) }, @@ -2056,7 +2059,6 @@ struct HookingPointData HookingPoints[] = { { HP_POP(script->pop_stack, HP_script_pop_stack) }, { HP_POP(script->set_constant, HP_script_set_constant) }, { HP_POP(script->set_constant2, HP_script_set_constant2) }, - { HP_POP(script->set_constant_force, HP_script_set_constant_force) }, { HP_POP(script->get_constant, HP_script_get_constant) }, { HP_POP(script->label_add, HP_script_label_add) }, { HP_POP(script->run, HP_script_run) }, @@ -2115,7 +2117,6 @@ struct HookingPointData HookingPoints[] = { { HP_POP(script->set_reg, HP_script_set_reg) }, { HP_POP(script->stack_expand, HP_script_stack_expand) }, { HP_POP(script->push_retinfo, HP_script_push_retinfo) }, - { HP_POP(script->pop_val, HP_script_pop_val) }, { HP_POP(script->op_3, HP_script_op_3) }, { HP_POP(script->op_2str, HP_script_op_2str) }, { HP_POP(script->op_2num, HP_script_op_2num) }, @@ -2128,7 +2129,6 @@ struct HookingPointData HookingPoints[] = { { HP_POP(script->menu_countoptions, HP_script_menu_countoptions) }, { HP_POP(script->buildin_areawarp_sub, HP_script_buildin_areawarp_sub) }, { HP_POP(script->buildin_areapercentheal_sub, HP_script_buildin_areapercentheal_sub) }, - { HP_POP(script->getarraysize, HP_script_getarraysize) }, { HP_POP(script->buildin_delitem_delete, HP_script_buildin_delitem_delete) }, { HP_POP(script->buildin_delitem_search, HP_script_buildin_delitem_search) }, { HP_POP(script->buildin_killmonster_sub_strip, HP_script_buildin_killmonster_sub_strip) }, @@ -2154,6 +2154,19 @@ struct HookingPointData HookingPoints[] = { { HP_POP(script->run_func, HP_script_run_func) }, { HP_POP(script->getfuncname, HP_script_getfuncname) }, { HP_POP(script->calc_hash_ci, HP_script_calc_hash_ci) }, + { HP_POP(script->array_src, HP_script_array_src) }, + { HP_POP(script->array_update, HP_script_array_update) }, + { HP_POP(script->array_delete, HP_script_array_delete) }, + { HP_POP(script->array_remove_member, HP_script_array_remove_member) }, + { HP_POP(script->array_add_member, HP_script_array_add_member) }, + { HP_POP(script->array_size, HP_script_array_size) }, + { HP_POP(script->array_highest_key, HP_script_array_highest_key) }, + { HP_POP(script->array_free_db, HP_script_array_free_db) }, + { HP_POP(script->array_ensure_zero, HP_script_array_ensure_zero) }, + { HP_POP(script->reg_destroy_single, HP_script_reg_destroy_single) }, + { HP_POP(script->reg_destroy, HP_script_reg_destroy) }, + { HP_POP(script->generic_ui_array_expand, HP_script_generic_ui_array_expand) }, + { HP_POP(script->array_cpy_list, HP_script_array_cpy_list) }, /* searchstore */ { HP_POP(searchstore->open, HP_searchstore_open) }, { HP_POP(searchstore->query, HP_searchstore_query) }, diff --git a/src/plugins/HPMHooking/HPMHooking.Hooks.inc b/src/plugins/HPMHooking/HPMHooking.Hooks.inc index e5aa3bd4a..64194362c 100644 --- a/src/plugins/HPMHooking/HPMHooking.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking.Hooks.inc @@ -3714,13 +3714,13 @@ bool HP_chrif_auth_finished(struct map_session_data *sd) { } return retVal___; } -void HP_chrif_authreq(struct map_session_data *sd) { +void HP_chrif_authreq(struct map_session_data *sd, bool hstandalone) { int hIndex = 0; if( HPMHooks.count.HP_chrif_authreq_pre ) { - void (*preHookFunc) (struct map_session_data *sd); + void (*preHookFunc) (struct map_session_data *sd, bool *hstandalone); for(hIndex = 0; hIndex < HPMHooks.count.HP_chrif_authreq_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_chrif_authreq_pre[hIndex].func; - preHookFunc(sd); + preHookFunc(sd, &hstandalone); } if( *HPMforce_return ) { *HPMforce_return = false; @@ -3728,13 +3728,13 @@ void HP_chrif_authreq(struct map_session_data *sd) { } } { - HPMHooks.source.chrif.authreq(sd); + HPMHooks.source.chrif.authreq(sd, hstandalone); } if( HPMHooks.count.HP_chrif_authreq_post ) { - void (*postHookFunc) (struct map_session_data *sd); + void (*postHookFunc) (struct map_session_data *sd, bool *hstandalone); for(hIndex = 0; hIndex < HPMHooks.count.HP_chrif_authreq_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_chrif_authreq_post[hIndex].func; - postHookFunc(sd); + postHookFunc(sd, &hstandalone); } } return; @@ -27651,14 +27651,14 @@ int HP_intif_wis_message_to_gm(char *Wisp_name, int permission, char *mes) { } return retVal___; } -int HP_intif_saveregistry(struct map_session_data *sd, int type) { +int HP_intif_saveregistry(struct map_session_data *sd) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_intif_saveregistry_pre ) { - int (*preHookFunc) (struct map_session_data *sd, int *type); + int (*preHookFunc) (struct map_session_data *sd); for(hIndex = 0; hIndex < HPMHooks.count.HP_intif_saveregistry_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_intif_saveregistry_pre[hIndex].func; - retVal___ = preHookFunc(sd, &type); + retVal___ = preHookFunc(sd); } if( *HPMforce_return ) { *HPMforce_return = false; @@ -27666,13 +27666,13 @@ int HP_intif_saveregistry(struct map_session_data *sd, int type) { } } { - retVal___ = HPMHooks.source.intif.saveregistry(sd, type); + retVal___ = HPMHooks.source.intif.saveregistry(sd); } if( HPMHooks.count.HP_intif_saveregistry_post ) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *type); + int (*postHookFunc) (int retVal___, struct map_session_data *sd); for(hIndex = 0; hIndex < HPMHooks.count.HP_intif_saveregistry_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_intif_saveregistry_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, &type); + retVal___ = postHookFunc(retVal___, sd); } } return retVal___; @@ -31324,31 +31324,6 @@ void HP_itemdb_name_constants(void) { } return; } -void HP_itemdb_force_name_constants(void) { - int hIndex = 0; - if( HPMHooks.count.HP_itemdb_force_name_constants_pre ) { - void (*preHookFunc) (void); - for(hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_force_name_constants_pre; hIndex++ ) { - preHookFunc = HPMHooks.list.HP_itemdb_force_name_constants_pre[hIndex].func; - preHookFunc(); - } - if( *HPMforce_return ) { - *HPMforce_return = false; - return; - } - } - { - HPMHooks.source.itemdb.force_name_constants(); - } - if( HPMHooks.count.HP_itemdb_force_name_constants_post ) { - void (*postHookFunc) (void); - for(hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_force_name_constants_post; hIndex++ ) { - postHookFunc = HPMHooks.list.HP_itemdb_force_name_constants_post[hIndex].func; - postHookFunc(); - } - } - return; -} void HP_itemdb_read_groups(void) { int hIndex = 0; if( HPMHooks.count.HP_itemdb_read_groups_pre ) { @@ -37350,11 +37325,11 @@ void HP_mapreg_final(void) { } return; } -int HP_mapreg_readreg(int uid) { +int HP_mapreg_readreg(int64 uid) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_mapreg_readreg_pre ) { - int (*preHookFunc) (int *uid); + int (*preHookFunc) (int64 *uid); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_readreg_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_mapreg_readreg_pre[hIndex].func; retVal___ = preHookFunc(&uid); @@ -37368,7 +37343,7 @@ int HP_mapreg_readreg(int uid) { retVal___ = HPMHooks.source.mapreg.readreg(uid); } if( HPMHooks.count.HP_mapreg_readreg_post ) { - int (*postHookFunc) (int retVal___, int *uid); + int (*postHookFunc) (int retVal___, int64 *uid); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_readreg_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_mapreg_readreg_post[hIndex].func; retVal___ = postHookFunc(retVal___, &uid); @@ -37376,11 +37351,11 @@ int HP_mapreg_readreg(int uid) { } return retVal___; } -char* HP_mapreg_readregstr(int uid) { +char* HP_mapreg_readregstr(int64 uid) { int hIndex = 0; char* retVal___ = NULL; if( HPMHooks.count.HP_mapreg_readregstr_pre ) { - char* (*preHookFunc) (int *uid); + char* (*preHookFunc) (int64 *uid); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_readregstr_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_mapreg_readregstr_pre[hIndex].func; retVal___ = preHookFunc(&uid); @@ -37394,7 +37369,7 @@ char* HP_mapreg_readregstr(int uid) { retVal___ = HPMHooks.source.mapreg.readregstr(uid); } if( HPMHooks.count.HP_mapreg_readregstr_post ) { - char* (*postHookFunc) (char* retVal___, int *uid); + char* (*postHookFunc) (char* retVal___, int64 *uid); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_readregstr_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_mapreg_readregstr_post[hIndex].func; retVal___ = postHookFunc(retVal___, &uid); @@ -37402,11 +37377,11 @@ char* HP_mapreg_readregstr(int uid) { } return retVal___; } -bool HP_mapreg_setreg(int uid, int val) { +bool HP_mapreg_setreg(int64 uid, int val) { int hIndex = 0; bool retVal___ = false; if( HPMHooks.count.HP_mapreg_setreg_pre ) { - bool (*preHookFunc) (int *uid, int *val); + bool (*preHookFunc) (int64 *uid, int *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_setreg_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_mapreg_setreg_pre[hIndex].func; retVal___ = preHookFunc(&uid, &val); @@ -37420,7 +37395,7 @@ bool HP_mapreg_setreg(int uid, int val) { retVal___ = HPMHooks.source.mapreg.setreg(uid, val); } if( HPMHooks.count.HP_mapreg_setreg_post ) { - bool (*postHookFunc) (bool retVal___, int *uid, int *val); + bool (*postHookFunc) (bool retVal___, int64 *uid, int *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_setreg_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_mapreg_setreg_post[hIndex].func; retVal___ = postHookFunc(retVal___, &uid, &val); @@ -37428,11 +37403,11 @@ bool HP_mapreg_setreg(int uid, int val) { } return retVal___; } -bool HP_mapreg_setregstr(int uid, const char *str) { +bool HP_mapreg_setregstr(int64 uid, const char *str) { int hIndex = 0; bool retVal___ = false; if( HPMHooks.count.HP_mapreg_setregstr_pre ) { - bool (*preHookFunc) (int *uid, const char *str); + bool (*preHookFunc) (int64 *uid, const char *str); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_setregstr_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_mapreg_setregstr_pre[hIndex].func; retVal___ = preHookFunc(&uid, str); @@ -37446,7 +37421,7 @@ bool HP_mapreg_setregstr(int uid, const char *str) { retVal___ = HPMHooks.source.mapreg.setregstr(uid, str); } if( HPMHooks.count.HP_mapreg_setregstr_post ) { - bool (*postHookFunc) (bool retVal___, int *uid, const char *str); + bool (*postHookFunc) (bool retVal___, int64 *uid, const char *str); for(hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_setregstr_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_mapreg_setregstr_post[hIndex].func; retVal___ = postHookFunc(retVal___, &uid, str); @@ -45032,32 +45007,6 @@ int HP_pcg_get_idx(GroupSettings *group) { } return retVal___; } -unsigned int HP_pcg_add_permission(const char *name) { - int hIndex = 0; - unsigned int retVal___ = 0; - if( HPMHooks.count.HP_pcg_add_permission_pre ) { - unsigned int (*preHookFunc) (const char *name); - for(hIndex = 0; hIndex < HPMHooks.count.HP_pcg_add_permission_pre; hIndex++ ) { - preHookFunc = HPMHooks.list.HP_pcg_add_permission_pre[hIndex].func; - retVal___ = preHookFunc(name); - } - if( *HPMforce_return ) { - *HPMforce_return = false; - return retVal___; - } - } - { - retVal___ = HPMHooks.source.pcg.add_permission(name); - } - if( HPMHooks.count.HP_pcg_add_permission_post ) { - unsigned int (*postHookFunc) (unsigned int retVal___, const char *name); - for(hIndex = 0; hIndex < HPMHooks.count.HP_pcg_add_permission_post; hIndex++ ) { - postHookFunc = HPMHooks.list.HP_pcg_add_permission_post[hIndex].func; - retVal___ = postHookFunc(retVal___, name); - } - } - return retVal___; -} /* pc */ void HP_pc_init(bool minimal) { int hIndex = 0; @@ -47912,11 +47861,11 @@ int HP_pc_setparam(struct map_session_data *sd, int type, int val) { } return retVal___; } -int HP_pc_readreg(struct map_session_data *sd, int reg) { +int HP_pc_readreg(struct map_session_data *sd, int64 reg) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_pc_readreg_pre ) { - int (*preHookFunc) (struct map_session_data *sd, int *reg); + int (*preHookFunc) (struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readreg_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_readreg_pre[hIndex].func; retVal___ = preHookFunc(sd, ®); @@ -47930,7 +47879,7 @@ int HP_pc_readreg(struct map_session_data *sd, int reg) { retVal___ = HPMHooks.source.pc.readreg(sd, reg); } if( HPMHooks.count.HP_pc_readreg_post ) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *reg); + int (*postHookFunc) (int retVal___, struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readreg_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_readreg_post[hIndex].func; retVal___ = postHookFunc(retVal___, sd, ®); @@ -47938,37 +47887,36 @@ int HP_pc_readreg(struct map_session_data *sd, int reg) { } return retVal___; } -int HP_pc_setreg(struct map_session_data *sd, int reg, int val) { +void HP_pc_setreg(struct map_session_data *sd, int64 reg, int val) { int hIndex = 0; - int retVal___ = 0; if( HPMHooks.count.HP_pc_setreg_pre ) { - int (*preHookFunc) (struct map_session_data *sd, int *reg, int *val); + void (*preHookFunc) (struct map_session_data *sd, int64 *reg, int *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setreg_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_setreg_pre[hIndex].func; - retVal___ = preHookFunc(sd, ®, &val); + preHookFunc(sd, ®, &val); } if( *HPMforce_return ) { *HPMforce_return = false; - return retVal___; + return; } } { - retVal___ = HPMHooks.source.pc.setreg(sd, reg, val); + HPMHooks.source.pc.setreg(sd, reg, val); } if( HPMHooks.count.HP_pc_setreg_post ) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *reg, int *val); + void (*postHookFunc) (struct map_session_data *sd, int64 *reg, int *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setreg_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_setreg_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, ®, &val); + postHookFunc(sd, ®, &val); } } - return retVal___; + return; } -char* HP_pc_readregstr(struct map_session_data *sd, int reg) { +char* HP_pc_readregstr(struct map_session_data *sd, int64 reg) { int hIndex = 0; char* retVal___ = NULL; if( HPMHooks.count.HP_pc_readregstr_pre ) { - char* (*preHookFunc) (struct map_session_data *sd, int *reg); + char* (*preHookFunc) (struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readregstr_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_readregstr_pre[hIndex].func; retVal___ = preHookFunc(sd, ®); @@ -47982,7 +47930,7 @@ char* HP_pc_readregstr(struct map_session_data *sd, int reg) { retVal___ = HPMHooks.source.pc.readregstr(sd, reg); } if( HPMHooks.count.HP_pc_readregstr_post ) { - char* (*postHookFunc) (char* retVal___, struct map_session_data *sd, int *reg); + char* (*postHookFunc) (char* retVal___, struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readregstr_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_readregstr_post[hIndex].func; retVal___ = postHookFunc(retVal___, sd, ®); @@ -47990,40 +47938,39 @@ char* HP_pc_readregstr(struct map_session_data *sd, int reg) { } return retVal___; } -int HP_pc_setregstr(struct map_session_data *sd, int reg, const char *str) { +void HP_pc_setregstr(struct map_session_data *sd, int64 reg, const char *str) { int hIndex = 0; - int retVal___ = 0; if( HPMHooks.count.HP_pc_setregstr_pre ) { - int (*preHookFunc) (struct map_session_data *sd, int *reg, const char *str); + void (*preHookFunc) (struct map_session_data *sd, int64 *reg, const char *str); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setregstr_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_setregstr_pre[hIndex].func; - retVal___ = preHookFunc(sd, ®, str); + preHookFunc(sd, ®, str); } if( *HPMforce_return ) { *HPMforce_return = false; - return retVal___; + return; } } { - retVal___ = HPMHooks.source.pc.setregstr(sd, reg, str); + HPMHooks.source.pc.setregstr(sd, reg, str); } if( HPMHooks.count.HP_pc_setregstr_post ) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *reg, const char *str); + void (*postHookFunc) (struct map_session_data *sd, int64 *reg, const char *str); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setregstr_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_setregstr_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, ®, str); + postHookFunc(sd, ®, str); } } - return retVal___; + return; } -int HP_pc_readregistry(struct map_session_data *sd, const char *reg, int type) { +int HP_pc_readregistry(struct map_session_data *sd, int64 reg) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_pc_readregistry_pre ) { - int (*preHookFunc) (struct map_session_data *sd, const char *reg, int *type); + int (*preHookFunc) (struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readregistry_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_readregistry_pre[hIndex].func; - retVal___ = preHookFunc(sd, reg, &type); + retVal___ = preHookFunc(sd, ®); } if( *HPMforce_return ) { *HPMforce_return = false; @@ -48031,25 +47978,25 @@ int HP_pc_readregistry(struct map_session_data *sd, const char *reg, int type) { } } { - retVal___ = HPMHooks.source.pc.readregistry(sd, reg, type); + retVal___ = HPMHooks.source.pc.readregistry(sd, reg); } if( HPMHooks.count.HP_pc_readregistry_post ) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, const char *reg, int *type); + int (*postHookFunc) (int retVal___, struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readregistry_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_readregistry_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, reg, &type); + retVal___ = postHookFunc(retVal___, sd, ®); } } return retVal___; } -int HP_pc_setregistry(struct map_session_data *sd, const char *reg, int val, int type) { +int HP_pc_setregistry(struct map_session_data *sd, int64 reg, int val) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_pc_setregistry_pre ) { - int (*preHookFunc) (struct map_session_data *sd, const char *reg, int *val, int *type); + int (*preHookFunc) (struct map_session_data *sd, int64 *reg, int *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setregistry_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_setregistry_pre[hIndex].func; - retVal___ = preHookFunc(sd, reg, &val, &type); + retVal___ = preHookFunc(sd, ®, &val); } if( *HPMforce_return ) { *HPMforce_return = false; @@ -48057,25 +48004,25 @@ int HP_pc_setregistry(struct map_session_data *sd, const char *reg, int val, int } } { - retVal___ = HPMHooks.source.pc.setregistry(sd, reg, val, type); + retVal___ = HPMHooks.source.pc.setregistry(sd, reg, val); } if( HPMHooks.count.HP_pc_setregistry_post ) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, const char *reg, int *val, int *type); + int (*postHookFunc) (int retVal___, struct map_session_data *sd, int64 *reg, int *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setregistry_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_setregistry_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, reg, &val, &type); + retVal___ = postHookFunc(retVal___, sd, ®, &val); } } return retVal___; } -char* HP_pc_readregistry_str(struct map_session_data *sd, const char *reg, int type) { +char* HP_pc_readregistry_str(struct map_session_data *sd, int64 reg) { int hIndex = 0; char* retVal___ = NULL; if( HPMHooks.count.HP_pc_readregistry_str_pre ) { - char* (*preHookFunc) (struct map_session_data *sd, const char *reg, int *type); + char* (*preHookFunc) (struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readregistry_str_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_readregistry_str_pre[hIndex].func; - retVal___ = preHookFunc(sd, reg, &type); + retVal___ = preHookFunc(sd, ®); } if( *HPMforce_return ) { *HPMforce_return = false; @@ -48083,25 +48030,25 @@ char* HP_pc_readregistry_str(struct map_session_data *sd, const char *reg, int t } } { - retVal___ = HPMHooks.source.pc.readregistry_str(sd, reg, type); + retVal___ = HPMHooks.source.pc.readregistry_str(sd, reg); } if( HPMHooks.count.HP_pc_readregistry_str_post ) { - char* (*postHookFunc) (char* retVal___, struct map_session_data *sd, const char *reg, int *type); + char* (*postHookFunc) (char* retVal___, struct map_session_data *sd, int64 *reg); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_readregistry_str_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_readregistry_str_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, reg, &type); + retVal___ = postHookFunc(retVal___, sd, ®); } } return retVal___; } -int HP_pc_setregistry_str(struct map_session_data *sd, const char *reg, const char *val, int type) { +int HP_pc_setregistry_str(struct map_session_data *sd, int64 reg, const char *val) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_pc_setregistry_str_pre ) { - int (*preHookFunc) (struct map_session_data *sd, const char *reg, const char *val, int *type); + int (*preHookFunc) (struct map_session_data *sd, int64 *reg, const char *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setregistry_str_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_pc_setregistry_str_pre[hIndex].func; - retVal___ = preHookFunc(sd, reg, val, &type); + retVal___ = preHookFunc(sd, ®, val); } if( *HPMforce_return ) { *HPMforce_return = false; @@ -48109,13 +48056,13 @@ int HP_pc_setregistry_str(struct map_session_data *sd, const char *reg, const ch } } { - retVal___ = HPMHooks.source.pc.setregistry_str(sd, reg, val, type); + retVal___ = HPMHooks.source.pc.setregistry_str(sd, reg, val); } if( HPMHooks.count.HP_pc_setregistry_str_post ) { - int (*postHookFunc) (int retVal___, struct map_session_data *sd, const char *reg, const char *val, int *type); + int (*postHookFunc) (int retVal___, struct map_session_data *sd, int64 *reg, const char *val); for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_setregistry_str_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_pc_setregistry_str_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, reg, val, &type); + retVal___ = postHookFunc(retVal___, sd, ®, val); } } return retVal___; @@ -50178,6 +50125,131 @@ void HP_pc_expire_check(struct map_session_data *sd) { } return; } +void HP_pc_autotrade_load(void) { + int hIndex = 0; + if( HPMHooks.count.HP_pc_autotrade_load_pre ) { + void (*preHookFunc) (void); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_load_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_pc_autotrade_load_pre[hIndex].func; + preHookFunc(); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.pc.autotrade_load(); + } + if( HPMHooks.count.HP_pc_autotrade_load_post ) { + void (*postHookFunc) (void); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_load_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_pc_autotrade_load_post[hIndex].func; + postHookFunc(); + } + } + return; +} +void HP_pc_autotrade_update(struct map_session_data *sd, enum e_pc_autotrade_update_action action) { + int hIndex = 0; + if( HPMHooks.count.HP_pc_autotrade_update_pre ) { + void (*preHookFunc) (struct map_session_data *sd, enum e_pc_autotrade_update_action *action); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_update_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_pc_autotrade_update_pre[hIndex].func; + preHookFunc(sd, &action); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.pc.autotrade_update(sd, action); + } + if( HPMHooks.count.HP_pc_autotrade_update_post ) { + void (*postHookFunc) (struct map_session_data *sd, enum e_pc_autotrade_update_action *action); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_update_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_pc_autotrade_update_post[hIndex].func; + postHookFunc(sd, &action); + } + } + return; +} +void HP_pc_autotrade_start(struct map_session_data *sd) { + int hIndex = 0; + if( HPMHooks.count.HP_pc_autotrade_start_pre ) { + void (*preHookFunc) (struct map_session_data *sd); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_start_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_pc_autotrade_start_pre[hIndex].func; + preHookFunc(sd); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.pc.autotrade_start(sd); + } + if( HPMHooks.count.HP_pc_autotrade_start_post ) { + void (*postHookFunc) (struct map_session_data *sd); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_start_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_pc_autotrade_start_post[hIndex].func; + postHookFunc(sd); + } + } + return; +} +void HP_pc_autotrade_prepare(struct map_session_data *sd) { + int hIndex = 0; + if( HPMHooks.count.HP_pc_autotrade_prepare_pre ) { + void (*preHookFunc) (struct map_session_data *sd); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_prepare_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_pc_autotrade_prepare_pre[hIndex].func; + preHookFunc(sd); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.pc.autotrade_prepare(sd); + } + if( HPMHooks.count.HP_pc_autotrade_prepare_post ) { + void (*postHookFunc) (struct map_session_data *sd); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_prepare_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_pc_autotrade_prepare_post[hIndex].func; + postHookFunc(sd); + } + } + return; +} +void HP_pc_autotrade_populate(struct map_session_data *sd) { + int hIndex = 0; + if( HPMHooks.count.HP_pc_autotrade_populate_pre ) { + void (*preHookFunc) (struct map_session_data *sd); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_populate_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_pc_autotrade_populate_pre[hIndex].func; + preHookFunc(sd); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.pc.autotrade_populate(sd); + } + if( HPMHooks.count.HP_pc_autotrade_populate_post ) { + void (*postHookFunc) (struct map_session_data *sd); + for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_autotrade_populate_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_pc_autotrade_populate_post[hIndex].func; + postHookFunc(sd); + } + } + return; +} /* pet */ int HP_pet_init(bool minimal) { int hIndex = 0; @@ -51955,11 +52027,11 @@ void HP_script_detach_rid(struct script_state *st) { } return; } -struct script_data* HP_script_push_val(struct script_stack *stack, enum c_op type, int val, struct DBMap **ref) { +struct script_data* HP_script_push_val(struct script_stack *stack, enum c_op type, int64 val, struct DBMap **ref) { int hIndex = 0; struct script_data* retVal___ = NULL; if( HPMHooks.count.HP_script_push_val_pre ) { - struct script_data* (*preHookFunc) (struct script_stack *stack, enum c_op *type, int *val, struct DBMap **ref); + struct script_data* (*preHookFunc) (struct script_stack *stack, enum c_op *type, int64 *val, struct DBMap **ref); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_push_val_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_script_push_val_pre[hIndex].func; retVal___ = preHookFunc(stack, &type, &val, ref); @@ -51973,7 +52045,7 @@ struct script_data* HP_script_push_val(struct script_stack *stack, enum c_op typ retVal___ = HPMHooks.source.script.push_val(stack, type, val, ref); } if( HPMHooks.count.HP_script_push_val_post ) { - struct script_data* (*postHookFunc) (struct script_data* retVal___, struct script_stack *stack, enum c_op *type, int *val, struct DBMap **ref); + struct script_data* (*postHookFunc) (struct script_data* retVal___, struct script_stack *stack, enum c_op *type, int64 *val, struct DBMap **ref); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_push_val_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_script_push_val_post[hIndex].func; retVal___ = postHookFunc(retVal___, stack, &type, &val, ref); @@ -52007,11 +52079,11 @@ struct script_data* HP_script_get_val(struct script_state *st, struct script_dat } return retVal___; } -void* HP_script_get_val2(struct script_state *st, int uid, struct DBMap **ref) { +void* HP_script_get_val2(struct script_state *st, int64 uid, struct DBMap **ref) { int hIndex = 0; void* retVal___ = NULL; if( HPMHooks.count.HP_script_get_val2_pre ) { - void* (*preHookFunc) (struct script_state *st, int *uid, struct DBMap **ref); + void* (*preHookFunc) (struct script_state *st, int64 *uid, struct DBMap **ref); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_get_val2_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_script_get_val2_pre[hIndex].func; retVal___ = preHookFunc(st, &uid, ref); @@ -52025,7 +52097,7 @@ void* HP_script_get_val2(struct script_state *st, int uid, struct DBMap **ref) { retVal___ = HPMHooks.source.script.get_val2(st, uid, ref); } if( HPMHooks.count.HP_script_get_val2_post ) { - void* (*postHookFunc) (void* retVal___, struct script_state *st, int *uid, struct DBMap **ref); + void* (*postHookFunc) (void* retVal___, struct script_state *st, int64 *uid, struct DBMap **ref); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_get_val2_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_script_get_val2_post[hIndex].func; retVal___ = postHookFunc(retVal___, st, &uid, ref); @@ -52160,31 +52232,6 @@ void HP_script_set_constant2(const char *name, int value, bool isparameter) { } return; } -void HP_script_set_constant_force(const char *name, int value, bool isparameter) { - int hIndex = 0; - if( HPMHooks.count.HP_script_set_constant_force_pre ) { - void (*preHookFunc) (const char *name, int *value, bool *isparameter); - for(hIndex = 0; hIndex < HPMHooks.count.HP_script_set_constant_force_pre; hIndex++ ) { - preHookFunc = HPMHooks.list.HP_script_set_constant_force_pre[hIndex].func; - preHookFunc(name, &value, &isparameter); - } - if( *HPMforce_return ) { - *HPMforce_return = false; - return; - } - } - { - HPMHooks.source.script.set_constant_force(name, value, isparameter); - } - if( HPMHooks.count.HP_script_set_constant_force_post ) { - void (*postHookFunc) (const char *name, int *value, bool *isparameter); - for(hIndex = 0; hIndex < HPMHooks.count.HP_script_set_constant_force_post; hIndex++ ) { - postHookFunc = HPMHooks.list.HP_script_set_constant_force_post[hIndex].func; - postHookFunc(name, &value, &isparameter); - } - } - return; -} bool HP_script_get_constant(const char *name, int *value) { int hIndex = 0; bool retVal___ = false; @@ -52514,10 +52561,10 @@ void HP_script_cleararray_pc(struct map_session_data *sd, const char *varname, v } return; } -void HP_script_setarray_pc(struct map_session_data *sd, const char *varname, uint8 idx, void *value, int *refcache) { +void HP_script_setarray_pc(struct map_session_data *sd, const char *varname, uint32 idx, void *value, int *refcache) { int hIndex = 0; if( HPMHooks.count.HP_script_setarray_pc_pre ) { - void (*preHookFunc) (struct map_session_data *sd, const char *varname, uint8 *idx, void *value, int *refcache); + void (*preHookFunc) (struct map_session_data *sd, const char *varname, uint32 *idx, void *value, int *refcache); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_setarray_pc_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_script_setarray_pc_pre[hIndex].func; preHookFunc(sd, varname, &idx, value, refcache); @@ -52531,7 +52578,7 @@ void HP_script_setarray_pc(struct map_session_data *sd, const char *varname, uin HPMHooks.source.script.setarray_pc(sd, varname, idx, value, refcache); } if( HPMHooks.count.HP_script_setarray_pc_post ) { - void (*postHookFunc) (struct map_session_data *sd, const char *varname, uint8 *idx, void *value, int *refcache); + void (*postHookFunc) (struct map_session_data *sd, const char *varname, uint32 *idx, void *value, int *refcache); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_setarray_pc_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_script_setarray_pc_post[hIndex].func; postHookFunc(sd, varname, &idx, value, refcache); @@ -53589,11 +53636,11 @@ void HP_script_errorwarning_sub(StringBuf *buf, const char *src, const char *fil } return; } -int HP_script_set_reg(struct script_state *st, TBL_PC *sd, int num, const char *name, const void *value, struct DBMap **ref) { +int HP_script_set_reg(struct script_state *st, TBL_PC *sd, int64 num, const char *name, const void *value, struct DBMap **ref) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_script_set_reg_pre ) { - int (*preHookFunc) (struct script_state *st, TBL_PC *sd, int *num, const char *name, const void *value, struct DBMap **ref); + int (*preHookFunc) (struct script_state *st, TBL_PC *sd, int64 *num, const char *name, const void *value, struct DBMap **ref); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_set_reg_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_script_set_reg_pre[hIndex].func; retVal___ = preHookFunc(st, sd, &num, name, value, ref); @@ -53607,7 +53654,7 @@ int HP_script_set_reg(struct script_state *st, TBL_PC *sd, int num, const char * retVal___ = HPMHooks.source.script.set_reg(st, sd, num, name, value, ref); } if( HPMHooks.count.HP_script_set_reg_post ) { - int (*postHookFunc) (int retVal___, struct script_state *st, TBL_PC *sd, int *num, const char *name, const void *value, struct DBMap **ref); + int (*postHookFunc) (int retVal___, struct script_state *st, TBL_PC *sd, int64 *num, const char *name, const void *value, struct DBMap **ref); for(hIndex = 0; hIndex < HPMHooks.count.HP_script_set_reg_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_script_set_reg_post[hIndex].func; retVal___ = postHookFunc(retVal___, st, sd, &num, name, value, ref); @@ -53666,32 +53713,6 @@ struct script_data* HP_script_push_retinfo(struct script_stack *stack, struct sc } return retVal___; } -int HP_script_pop_val(struct script_state *st) { - int hIndex = 0; - int retVal___ = 0; - if( HPMHooks.count.HP_script_pop_val_pre ) { - int (*preHookFunc) (struct script_state *st); - for(hIndex = 0; hIndex < HPMHooks.count.HP_script_pop_val_pre; hIndex++ ) { - preHookFunc = HPMHooks.list.HP_script_pop_val_pre[hIndex].func; - retVal___ = preHookFunc(st); - } - if( *HPMforce_return ) { - *HPMforce_return = false; - return retVal___; - } - } - { - retVal___ = HPMHooks.source.script.pop_val(st); - } - if( HPMHooks.count.HP_script_pop_val_post ) { - int (*postHookFunc) (int retVal___, struct script_state *st); - for(hIndex = 0; hIndex < HPMHooks.count.HP_script_pop_val_post; hIndex++ ) { - postHookFunc = HPMHooks.list.HP_script_pop_val_post[hIndex].func; - retVal___ = postHookFunc(retVal___, st); - } - } - return retVal___; -} void HP_script_op_3(struct script_state *st, int op) { int hIndex = 0; if( HPMHooks.count.HP_script_op_3_pre ) { @@ -54014,32 +54035,6 @@ int HP_script_buildin_areapercentheal_sub(struct block_list *bl, va_list ap) { } return retVal___; } -int32 HP_script_getarraysize(struct script_state *st, int32 id, int32 idx, int isstring, struct DBMap **ref) { - int hIndex = 0; - int32 retVal___ = 0; - if( HPMHooks.count.HP_script_getarraysize_pre ) { - int32 (*preHookFunc) (struct script_state *st, int32 *id, int32 *idx, int *isstring, struct DBMap **ref); - for(hIndex = 0; hIndex < HPMHooks.count.HP_script_getarraysize_pre; hIndex++ ) { - preHookFunc = HPMHooks.list.HP_script_getarraysize_pre[hIndex].func; - retVal___ = preHookFunc(st, &id, &idx, &isstring, ref); - } - if( *HPMforce_return ) { - *HPMforce_return = false; - return retVal___; - } - } - { - retVal___ = HPMHooks.source.script.getarraysize(st, id, idx, isstring, ref); - } - if( HPMHooks.count.HP_script_getarraysize_post ) { - int32 (*postHookFunc) (int32 retVal___, struct script_state *st, int32 *id, int32 *idx, int *isstring, struct DBMap **ref); - for(hIndex = 0; hIndex < HPMHooks.count.HP_script_getarraysize_post; hIndex++ ) { - postHookFunc = HPMHooks.list.HP_script_getarraysize_post[hIndex].func; - retVal___ = postHookFunc(retVal___, st, &id, &idx, &isstring, ref); - } - } - return retVal___; -} void HP_script_buildin_delitem_delete(struct map_session_data *sd, int idx, int *amount, bool delete_items) { int hIndex = 0; if( HPMHooks.count.HP_script_buildin_delitem_delete_pre ) { @@ -54797,6 +54792,349 @@ unsigned int HP_script_calc_hash_ci(const char *p) { } return retVal___; } +struct DBMap* HP_script_array_src(struct script_state *st, struct map_session_data *sd, const char *name) { + int hIndex = 0; + struct DBMap* retVal___ = NULL; + if( HPMHooks.count.HP_script_array_src_pre ) { + struct DBMap* (*preHookFunc) (struct script_state *st, struct map_session_data *sd, const char *name); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_src_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_src_pre[hIndex].func; + retVal___ = preHookFunc(st, sd, name); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.script.array_src(st, sd, name); + } + if( HPMHooks.count.HP_script_array_src_post ) { + struct DBMap* (*postHookFunc) (struct DBMap* retVal___, struct script_state *st, struct map_session_data *sd, const char *name); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_src_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_src_post[hIndex].func; + retVal___ = postHookFunc(retVal___, st, sd, name); + } + } + return retVal___; +} +void HP_script_array_update(struct DBMap **src, int64 num, bool empty) { + int hIndex = 0; + if( HPMHooks.count.HP_script_array_update_pre ) { + void (*preHookFunc) (struct DBMap **src, int64 *num, bool *empty); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_update_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_update_pre[hIndex].func; + preHookFunc(src, &num, &empty); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.array_update(src, num, empty); + } + if( HPMHooks.count.HP_script_array_update_post ) { + void (*postHookFunc) (struct DBMap **src, int64 *num, bool *empty); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_update_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_update_post[hIndex].func; + postHookFunc(src, &num, &empty); + } + } + return; +} +void HP_script_array_delete(struct DBMap *src, struct script_array *sa) { + int hIndex = 0; + if( HPMHooks.count.HP_script_array_delete_pre ) { + void (*preHookFunc) (struct DBMap *src, struct script_array *sa); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_delete_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_delete_pre[hIndex].func; + preHookFunc(src, sa); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.array_delete(src, sa); + } + if( HPMHooks.count.HP_script_array_delete_post ) { + void (*postHookFunc) (struct DBMap *src, struct script_array *sa); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_delete_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_delete_post[hIndex].func; + postHookFunc(src, sa); + } + } + return; +} +void HP_script_array_remove_member(struct DBMap *src, struct script_array *sa, unsigned int idx) { + int hIndex = 0; + if( HPMHooks.count.HP_script_array_remove_member_pre ) { + void (*preHookFunc) (struct DBMap *src, struct script_array *sa, unsigned int *idx); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_remove_member_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_remove_member_pre[hIndex].func; + preHookFunc(src, sa, &idx); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.array_remove_member(src, sa, idx); + } + if( HPMHooks.count.HP_script_array_remove_member_post ) { + void (*postHookFunc) (struct DBMap *src, struct script_array *sa, unsigned int *idx); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_remove_member_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_remove_member_post[hIndex].func; + postHookFunc(src, sa, &idx); + } + } + return; +} +void HP_script_array_add_member(struct script_array *sa, unsigned int idx) { + int hIndex = 0; + if( HPMHooks.count.HP_script_array_add_member_pre ) { + void (*preHookFunc) (struct script_array *sa, unsigned int *idx); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_add_member_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_add_member_pre[hIndex].func; + preHookFunc(sa, &idx); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.array_add_member(sa, idx); + } + if( HPMHooks.count.HP_script_array_add_member_post ) { + void (*postHookFunc) (struct script_array *sa, unsigned int *idx); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_add_member_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_add_member_post[hIndex].func; + postHookFunc(sa, &idx); + } + } + return; +} +unsigned int HP_script_array_size(struct script_state *st, struct map_session_data *sd, const char *name) { + int hIndex = 0; + unsigned int retVal___ = 0; + if( HPMHooks.count.HP_script_array_size_pre ) { + unsigned int (*preHookFunc) (struct script_state *st, struct map_session_data *sd, const char *name); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_size_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_size_pre[hIndex].func; + retVal___ = preHookFunc(st, sd, name); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.script.array_size(st, sd, name); + } + if( HPMHooks.count.HP_script_array_size_post ) { + unsigned int (*postHookFunc) (unsigned int retVal___, struct script_state *st, struct map_session_data *sd, const char *name); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_size_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_size_post[hIndex].func; + retVal___ = postHookFunc(retVal___, st, sd, name); + } + } + return retVal___; +} +unsigned int HP_script_array_highest_key(struct script_state *st, struct map_session_data *sd, const char *name) { + int hIndex = 0; + unsigned int retVal___ = 0; + if( HPMHooks.count.HP_script_array_highest_key_pre ) { + unsigned int (*preHookFunc) (struct script_state *st, struct map_session_data *sd, const char *name); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_highest_key_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_highest_key_pre[hIndex].func; + retVal___ = preHookFunc(st, sd, name); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.script.array_highest_key(st, sd, name); + } + if( HPMHooks.count.HP_script_array_highest_key_post ) { + unsigned int (*postHookFunc) (unsigned int retVal___, struct script_state *st, struct map_session_data *sd, const char *name); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_highest_key_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_highest_key_post[hIndex].func; + retVal___ = postHookFunc(retVal___, st, sd, name); + } + } + return retVal___; +} +int HP_script_array_free_db(DBKey key, DBData *data, va_list ap) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_script_array_free_db_pre ) { + int (*preHookFunc) (DBKey *key, DBData *data, va_list ap); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_free_db_pre; hIndex++ ) { + va_list ap___copy; va_copy(ap___copy, ap); + preHookFunc = HPMHooks.list.HP_script_array_free_db_pre[hIndex].func; + retVal___ = preHookFunc(&key, data, ap___copy); + va_end(ap___copy); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + va_list ap___copy; va_copy(ap___copy, ap); + retVal___ = HPMHooks.source.script.array_free_db(key, data, ap___copy); + va_end(ap___copy); + } + if( HPMHooks.count.HP_script_array_free_db_post ) { + int (*postHookFunc) (int retVal___, DBKey *key, DBData *data, va_list ap); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_free_db_post; hIndex++ ) { + va_list ap___copy; va_copy(ap___copy, ap); + postHookFunc = HPMHooks.list.HP_script_array_free_db_post[hIndex].func; + retVal___ = postHookFunc(retVal___, &key, data, ap___copy); + va_end(ap___copy); + } + } + return retVal___; +} +void HP_script_array_ensure_zero(struct script_state *st, struct map_session_data *sd, int64 uid, struct DBMap **ref) { + int hIndex = 0; + if( HPMHooks.count.HP_script_array_ensure_zero_pre ) { + void (*preHookFunc) (struct script_state *st, struct map_session_data *sd, int64 *uid, struct DBMap **ref); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_ensure_zero_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_ensure_zero_pre[hIndex].func; + preHookFunc(st, sd, &uid, ref); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.array_ensure_zero(st, sd, uid, ref); + } + if( HPMHooks.count.HP_script_array_ensure_zero_post ) { + void (*postHookFunc) (struct script_state *st, struct map_session_data *sd, int64 *uid, struct DBMap **ref); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_ensure_zero_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_ensure_zero_post[hIndex].func; + postHookFunc(st, sd, &uid, ref); + } + } + return; +} +void HP_script_reg_destroy_single(struct map_session_data *sd, int64 reg, struct script_reg_state *data) { + int hIndex = 0; + if( HPMHooks.count.HP_script_reg_destroy_single_pre ) { + void (*preHookFunc) (struct map_session_data *sd, int64 *reg, struct script_reg_state *data); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_reg_destroy_single_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_reg_destroy_single_pre[hIndex].func; + preHookFunc(sd, ®, data); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.reg_destroy_single(sd, reg, data); + } + if( HPMHooks.count.HP_script_reg_destroy_single_post ) { + void (*postHookFunc) (struct map_session_data *sd, int64 *reg, struct script_reg_state *data); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_reg_destroy_single_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_reg_destroy_single_post[hIndex].func; + postHookFunc(sd, ®, data); + } + } + return; +} +int HP_script_reg_destroy(DBKey key, DBData *data, va_list ap) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_script_reg_destroy_pre ) { + int (*preHookFunc) (DBKey *key, DBData *data, va_list ap); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_reg_destroy_pre; hIndex++ ) { + va_list ap___copy; va_copy(ap___copy, ap); + preHookFunc = HPMHooks.list.HP_script_reg_destroy_pre[hIndex].func; + retVal___ = preHookFunc(&key, data, ap___copy); + va_end(ap___copy); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + va_list ap___copy; va_copy(ap___copy, ap); + retVal___ = HPMHooks.source.script.reg_destroy(key, data, ap___copy); + va_end(ap___copy); + } + if( HPMHooks.count.HP_script_reg_destroy_post ) { + int (*postHookFunc) (int retVal___, DBKey *key, DBData *data, va_list ap); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_reg_destroy_post; hIndex++ ) { + va_list ap___copy; va_copy(ap___copy, ap); + postHookFunc = HPMHooks.list.HP_script_reg_destroy_post[hIndex].func; + retVal___ = postHookFunc(retVal___, &key, data, ap___copy); + va_end(ap___copy); + } + } + return retVal___; +} +void HP_script_generic_ui_array_expand(unsigned int plus) { + int hIndex = 0; + if( HPMHooks.count.HP_script_generic_ui_array_expand_pre ) { + void (*preHookFunc) (unsigned int *plus); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_generic_ui_array_expand_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_generic_ui_array_expand_pre[hIndex].func; + preHookFunc(&plus); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.script.generic_ui_array_expand(plus); + } + if( HPMHooks.count.HP_script_generic_ui_array_expand_post ) { + void (*postHookFunc) (unsigned int *plus); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_generic_ui_array_expand_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_generic_ui_array_expand_post[hIndex].func; + postHookFunc(&plus); + } + } + return; +} +unsigned int* HP_script_array_cpy_list(struct script_array *sa) { + int hIndex = 0; + unsigned int* retVal___ = NULL; + if( HPMHooks.count.HP_script_array_cpy_list_pre ) { + unsigned int* (*preHookFunc) (struct script_array *sa); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_cpy_list_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_script_array_cpy_list_pre[hIndex].func; + retVal___ = preHookFunc(sa); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.script.array_cpy_list(sa); + } + if( HPMHooks.count.HP_script_array_cpy_list_post ) { + unsigned int* (*postHookFunc) (unsigned int* retVal___, struct script_array *sa); + for(hIndex = 0; hIndex < HPMHooks.count.HP_script_array_cpy_list_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_script_array_cpy_list_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sa); + } + } + return retVal___; +} /* searchstore */ bool HP_searchstore_open(struct map_session_data *sd, unsigned int uses, unsigned short effect) { int hIndex = 0; |