summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/re/item_db.conf120
-rw-r--r--db/re/mob_db.txt18
-rw-r--r--db/re/skill_cast_db.txt13
-rw-r--r--npc/re/mobs/dungeons/ecl_tdun.txt27
-rw-r--r--npc/re/mobs/fields/eclage.txt5
-rw-r--r--sql-files/item_db_re.sql11
-rw-r--r--src/char/char.c9
-rw-r--r--src/common/mapindex.h1
-rw-r--r--src/common/sql.c1
-rw-r--r--src/map/atcommand.c6
-rw-r--r--src/map/battle.c23
-rw-r--r--src/map/npc.c10
-rw-r--r--src/map/npc.h5
-rw-r--r--src/map/packets.h37
-rw-r--r--src/map/script.c2
-rw-r--r--src/map/skill.c75
-rw-r--r--src/map/status.c2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc4
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc1
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc27
20 files changed, 291 insertions, 106 deletions
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index b4b313446..e977e2160 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -32111,6 +32111,7 @@ item_db: (
Loc: 136
EquipLv: 90
Refine: false
+ Script: <" skill "ECLAGE_RECALL",1; ">
},
{
Id: 2917
@@ -39552,6 +39553,125 @@ item_db: (
bonus5 bAutoSpellWhenHit,NPC_WIDESTONE,3,2500,BF_MAGIC,0;
">
},
+{
+ Id: 4593
+ AegisName: "Menblatt_Card"
+ Name: "Menblatt Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 4
+ Script: <" bonus bLongAtkDef,readparam(bDex)/10; ">
+},
+{
+ Id: 4594
+ AegisName: "Petal_Card"
+ Name: "Petal Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 4
+ Script: <" bonus bCritAtkRate,2*(readparam(bLuk)/10); ">
+},
+{
+ Id: 4595
+ AegisName: "Cenere_Card"
+ Name: "Cenere Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 4
+ Script: <"
+ bonus bAspdRate,2*(readparam(bAgi)/10);
+ bonus bDelayrate,-2*(readparam(bAgi)/10);
+ ">
+},
+{
+ Id: 4596
+ AegisName: "Antique_Book_Card"
+ Name: "Antique Book Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 4
+ Script: <" bonus bMatk,5*(readparam(bInt)/10); ">
+},
+{
+ Id: 4597
+ AegisName: "Lichtern_Blue_Card"
+ Name: "Lichtern Blue Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 769
+ Script: <"
+ bonus bMatk,10;
+ bonus2 bMagicAtkEle,Ele_Water,(getrefine()>=9)?10:5;
+ ">
+},
+{
+ Id: 4598
+ AegisName: "Lichtern_Green_Card"
+ Name: "Lichtern Green Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 769
+ Script: <"
+ bonus bMatk,10;
+ bonus2 bMagicAtkEle,Ele_Ghost,(getrefine()>=9)?10:5;
+ ">
+},
+{
+ Id: 4599
+ AegisName: "Lichtern_Red_Card"
+ Name: "Lichtern Red Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 769
+ Script: <"
+ bonus bMatk,10;
+ bonus2 bMagicAtkEle,Ele_Fire,(getrefine()>=9)?10:5;
+ ">
+},
+{
+ Id: 4600
+ AegisName: "Lichtern_Yellow_Card"
+ Name: "Lichtern Yellow Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 769
+ Script: <"
+ bonus bMatk,10;
+ bonus2 bMagicAtkEle,Ele_Earth,(getrefine()>=9)?10:5;
+ ">
+},
+{
+ Id: 4607
+ AegisName: "Faithful_Manager_Card"
+ Name: "Faithful Manager Card"
+ Type: 6
+ Buy: 20
+ Weight: 10
+ Loc: 2
+ Script: <"
+ bonus bBaseAtk,5;
+ bonus bMatk,5;
+ if(getiteminfo(getequipid(EQI_HAND_R),11) == 15) {
+ if(getrefine()>=10) {
+ bonus bBaseAtk,20;
+ bonus bMatk,20;
+ }
+ if(getrefine()>=14) {
+ bonus bBaseAtk,20;
+ bonus bMatk,20;
+ }
+ }
+
+ ">
+},
// Armor Enchant System
// ===================================================================
{
diff --git a/db/re/mob_db.txt b/db/re/mob_db.txt
index ef5f37f74..8b63002bf 100644
--- a/db/re/mob_db.txt
+++ b/db/re/mob_db.txt
@@ -1508,15 +1508,15 @@
2362,N_AMON_RA,Nightmare Amon Ra,Amon Ra (Nightmare),145,2515784,1,3252974,2604174,3,4106,3201,367,301,86,89,120,131,101,92,14,12,2,7,62,0x1A4,170,854,2016,480,813243,607,5500,608,3500,732,5500,5053,300,2615,100,7211,14000,985,7600,616,800,1552,20,607,3000,0,0,0,0,4236,1
// Eclage (14.2)
-2363,MENBLATT,Menblatt,Menblatt,143,82200,1,8300,6842,3,816,201,79,50,70,68,40,55,108,30,10,12,1,4,44,0x3795,145,472,1056,480,0,0,0,0,0,0,0,6557,3000,7168,1000,7163,2304,12813,5,0,0,0,0,0,0,7199,500,0,0,0,0
-2364,PETAL,Petal,Petal,141,81031,1,8116,6722,9,671,173,73,33,70,82,55,45,108,25,10,12,1,2,24,0x3795,200,1500,768,480,0,0,0,0,0,0,0,6558,3000,12346,1000,1026,1000,6089,250,12814,5,0,0,0,0,7199,500,0,0,0,0
-2365,CENERE,Cenere,Cenere,146,130131,1,14234,11424,1,1802,1031,87,81,67,39,30,35,95,45,10,12,0,3,24,0x3795,300,1500,720,360,0,0,0,0,0,0,0,6561,5000,7322,500,7001,1500,7320,1000,12815,500,0,0,0,0,0,0,0,0,0,0
-2366,ANTIQUE_BOOK,Antique Book,Antique Book,148,134615,1,14450,11740,1,1861,1213,74,42,67,53,32,44,125,5,10,12,0,0,60,0x3795,150,864,960,480,0,0,0,0,0,0,0,6560,3000,7015,1000,1097,1000,12812,5,0,0,0,0,0,0,0,0,0,0,0,0
-2367,LICHTERN_B,Blue Lichtern,Lichtern,149,131211,1,14374,11402,1,1513,1410,76,41,124,74,60,55,92,50,10,12,0,0,81,0x3795,150,480,1728,480,0,0,0,0,0,0,0,1000,1000,1001,1000,995,20,12812,5,0,0,0,0,0,0,0,0,0,0,0,0
-2368,LICHTERN_Y,Yellow Lichtern,Lichtern,147,131513,1,14142,11620,1,1416,1561,84,51,141,94,75,91,144,50,10,12,0,0,88,0x3795,150,0,3456,480,0,0,0,0,0,0,0,1000,1000,1001,1000,997,20,12815,5,0,0,0,0,0,0,0,0,0,0,0,0
-2369,LICHTERN_R,Red Lichtern,Lichtern,149,135718,1,14402,12026,1,1647,1449,111,53,147,77,66,65,133,50,10,12,0,0,83,0x3795,150,0,4032,480,0,0,0,0,0,0,0,1000,1000,1001,1000,994,20,12813,5,0,0,0,0,0,0,0,0,0,0,0,0
-2370,LICHTERN_G,Green Lichtern,Lichtern,151,133451,1,14428,11420,1,1547,1594,120,57,121,60,58,62,102,50,10,12,0,0,82,0x3795,100,0,2304,480,0,0,0,0,0,0,0,1000,1000,1001,1000,996,20,12814,5,0,0,0,0,0,0,0,0,0,0,0,0
-2371,FAITHFUL_MANAGER,Faithful Manager,Faithful Manager,155,151548,1,17352,13002,3,2091,1607,204,141,80,28,40,25,88,45,10,12,2,0,80,0x3795,200,480,1536,480,0,0,0,0,0,0,0,6559,3000,12353,1000,970,100,971,100,972,100,0,0,0,0,0,0,0,0,0,0
+2363,MENBLATT,Menblatt,Menblatt,143,82200,1,4150,4105,3,816,201,79,50,70,68,40,55,108,30,10,12,1,4,44,0x3795,145,472,1056,480,0,0,0,0,0,0,0,6557,3000,7168,1000,7163,2304,12813,5,0,0,0,0,0,0,0,0,0,0,4593,1
+2364,PETAL,Petal,Petal,141,81031,1,4058,4033,9,671,173,73,33,70,82,55,45,108,25,10,12,1,2,24,0x3795,200,1500,768,480,0,0,0,0,0,0,0,6558,3000,12346,1000,1026,1000,6089,250,12814,5,0,0,0,0,0,0,0,0,4594,1
+2365,CENERE,Cenere,Cenere,146,130131,1,7117,6854,1,1802,1031,87,81,67,39,30,35,95,45,10,12,0,3,24,0x3795,300,1500,720,360,0,0,0,0,0,0,0,6561,5000,7322,500,7001,1500,7320,1000,12815,500,0,0,0,0,0,0,0,0,4595,1
+2366,ANTIQUE_BOOK,Antique Book,Antique Book,148,134615,1,7225,7044,1,1861,1213,74,42,67,53,32,44,125,5,10,12,0,0,60,0x3795,150,864,960,480,0,0,0,0,0,0,0,6560,3000,7015,1000,1097,1000,12812,5,0,0,0,0,0,0,0,0,0,0,4596,1
+2367,LICHTERN_B,Blue Lichtern,Lichtern,149,131211,1,7187,6841,1,1513,1410,76,41,124,74,60,55,92,50,10,12,0,0,81,0x3795,150,480,1728,480,0,0,0,0,0,0,0,1000,1000,1001,1000,995,20,12812,5,0,0,0,0,0,0,0,0,0,0,4597,1
+2368,LICHTERN_Y,Yellow Lichtern,Lichtern,147,131513,1,7071,6972,1,1416,1561,84,51,141,94,75,91,144,50,10,12,0,0,82,0x3795,100,0,2304,480,0,0,0,0,0,0,0,1000,1000,1001,1000,996,20,12814,5,0,0,0,0,0,0,0,0,0,0,4600,1
+2369,LICHTERN_R,Red Lichtern,Lichtern,149,135718,1,7201,7215,1,1647,1449,111,53,147,77,66,65,133,50,10,12,0,0,83,0x3795,150,0,4032,480,0,0,0,0,0,0,0,1000,1000,1001,1000,994,20,12813,5,0,0,0,0,0,0,0,0,0,0,4599,1
+2370,LICHTERN_G,Green Lichtern,Lichtern,151,133451,1,7214,6852,1,1547,1594,120,57,121,60,58,62,102,50,10,12,0,0,88,0x3795,150,0,3456,480,0,0,0,0,0,0,0,1000,1000,1001,1000,997,20,12815,5,0,0,0,0,0,0,0,0,0,0,4598,1
+2371,FAITHFUL_MANAGER,Faithful Manager,Faithful Manager,155,151548,1,8676,7801,3,2091,1607,204,141,80,28,40,25,88,45,10,12,2,0,80,0x3795,200,480,1536,480,0,0,0,0,0,0,0,6559,3000,12353,1000,970,100,971,100,972,100,0,0,0,0,0,0,0,0,4607,1
// Additional Monsters
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
diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt
index 91bd7bac4..d57982486 100644
--- a/db/re/skill_cast_db.txt
+++ b/db/re/skill_cast_db.txt
@@ -1720,6 +1720,19 @@
3027,1000,0,0,10000:15000:20000:25000:30000,0,15000,0
//-- OB_AKAITSUKI
3029,1000:1500:2000:2500:3000,1000,0,10000:15000:20000:25000:30000,0,30000,2000
+
+//===== Eclage Skills ======================
+//-- ECL_SNOWFLIP
+3031,0,0,0,0,0,5000,0
+//-- ECL_PEONYMAMY
+3032,0,0,0,0,0,5000,0
+//-- ECL_SADAGUI
+3033,0,0,0,0,0,5000,0
+//-- ECL_SEQUOIADUST
+3034,0,0,0,0,0,5000,0
+//-- ECLAGE_RECALL
+3035,0,0,0,0,0,300000,3000
+
//==========================================
//-- ALL_FULL_THROTTLE
diff --git a/npc/re/mobs/dungeons/ecl_tdun.txt b/npc/re/mobs/dungeons/ecl_tdun.txt
index 0bfd17e0f..f768a5797 100644
--- a/npc/re/mobs/dungeons/ecl_tdun.txt
+++ b/npc/re/mobs/dungeons/ecl_tdun.txt
@@ -8,30 +8,29 @@
//= jRO monster spawns, taken from Auriga.
//===== Additional Comments: =================================
//= 1.0 First version. [Euphy]
+//= 1.1 Aegis Conversion [Michieru]
//============================================================
//==================================================
// ecl_tdun01 - Bifrost Tower F1
//==================================================
-ecl_tdun01.gat,0,0,0,0 monster Cenere 2365,5,5000,0,0
-ecl_tdun01.gat,0,0,0,0 monster Antique Book 2366,5,5000,0,0
-ecl_tdun01.gat,0,0,0,0 monster Blue Lichtern 2367,5,5000,0,0
+ecl_tdun01,0,0,0,0 monster Cenere 2365,15,5000,0,0
+ecl_tdun01,0,0,0,0 monster Antique Book 2366,10,5000,0,0
+ecl_tdun01,0,0,0,0 monster Blue Lichtern 2367,5,5000,0,0
+ecl_tdun01,0,0,0,0 monster Yellow Lichtern 2368,5,5000,0,0
//==================================================
// ecl_tdun02 - Bifrost Tower F2
//==================================================
-ecl_tdun02.gat,0,0,0,0 monster Cenere 2365,10,5000,0,0
-ecl_tdun02.gat,0,0,0,0 monster Antique Book 2366,10,5000,0,0
-ecl_tdun02.gat,0,0,0,0 monster Blue Lichtern 2367,15,5000,0,0
-ecl_tdun02.gat,0,0,0,0 monster Yellow Lichtern 2368,5,5000,0,0
+ecl_tdun02,0,0,0,0 monster Cenere 2365,15,5000,0,0
+ecl_tdun02,0,0,0,0 monster Antique Book 2366,15,5000,0,0
+ecl_tdun02,0,0,0,0 monster Yellow Lichtern 2368,5,5000,0,0
+ecl_tdun02,0,0,0,0 monster Red Lichtern 2369,5,5000,0,0
//==================================================
// ecl_tdun03 - Bifrost Tower F3
//==================================================
-ecl_tdun03.gat,0,0,0,0 monster Cenere 2365,15,5000,0,0
-ecl_tdun03.gat,0,0,0,0 monster Antique Book 2366,15,5000,0,0
-ecl_tdun03.gat,0,0,0,0 monster Blue Lichtern 2367,5,5000,0,0
-ecl_tdun03.gat,0,0,0,0 monster Yellow Lichtern 2368,15,5000,0,0
-ecl_tdun03.gat,0,0,0,0 monster Red Lichtern 2369,10,5000,0,0
-ecl_tdun03.gat,0,0,0,0 monster Green Lichtern 2370,15,5000,0,0
-ecl_tdun03.gat,0,0,0,0 monster Faithful Manager 2371,5,5000,0,0
+ecl_tdun03,0,0,0,0 monster Antique Book 2366,15,5000,0,0
+ecl_tdun03,0,0,0,0 monster Yellow Lichtern 2368,5,5000,0,0
+ecl_tdun03,0,0,0,0 monster Green Lichtern 2370,5,5000,0,0
+ecl_tdun03,0,0,0,0 monster Faithful Manager 2371,3,5000,0,0
diff --git a/npc/re/mobs/fields/eclage.txt b/npc/re/mobs/fields/eclage.txt
index 76c53be2b..89754e1df 100644
--- a/npc/re/mobs/fields/eclage.txt
+++ b/npc/re/mobs/fields/eclage.txt
@@ -8,10 +8,11 @@
//= jRO monster spawns, taken from Auriga.
//===== Additional Comments: =================================
//= 1.0 First version. [Euphy]
+//= 1.1 Aegis Conversion [Michieru]
//============================================================
//==================================================
// ecl_fild01 - Blooming Flower Land
//==================================================
-ecl_fild01.gat,0,0,0,0 monster Menblatt 2363,60,5000,0,0
-ecl_fild01.gat,0,0,0,0 monster Petal 2364,20,5000,0,0
+ecl_fild01,0,0,0,0 monster Menblatt 2363,50,5000,0,0
+ecl_fild01,0,0,0,0 monster Petal 2364,50,5000,0,0
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index be65ef246..1b85c5415 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -1949,7 +1949,7 @@ REPLACE INTO `item_db_re` VALUES ('2912','Xylitol_2011','Xylitol 2011','5','20',
REPLACE INTO `item_db_re` VALUES ('2913','Thief_Handcuff','Thieves Large Handcuffs','5','20','10','1400','0','0','0','0','1','4294967295','63','2','136','0','10',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db_re` VALUES ('2914','Wizard_Left_Eye','Wizard Left Eye','5','20','10','100','0','0','1','0','1','1040256','63','2','136','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4; bonus bMdef,3;','','');
REPLACE INTO `item_db_re` VALUES ('2915','Ettlang_Keepsake','Ettlang Keepsake','5','20','10','50','0','0','0','0','0','4294967295','63','2','136','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10;','','');
-REPLACE INTO `item_db_re` VALUES ('2916','Fairy_Wing','Fairy Wing','5','0','0','10','0','0','0','0','0','4294967295','63','2','136','0','90',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db_re` VALUES ('2916','Fairy_Wing','Fairy Wing','5','0','0','10','0','0','0','0','0','4294967295','63','2','136','0','90',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill \"ECLAGE_RECALL\",1;','','');
REPLACE INTO `item_db_re` VALUES ('2917','Str_Glove','Str Glove','5','75000','37500','100','0','0','0','0','0','4294967295','63','2','136','0','100',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,100; bonus bMaxSP,20; bonus bBaseAtk,(readparam(bStr)/10); if(readparam(bStr)>=110) bonus bAtkRate,1;','','');
REPLACE INTO `item_db_re` VALUES ('2918','Int_Glove','Int Glove','5','75000','37500','100','0','0','0','0','0','4294967295','63','2','136','0','100',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,100; bonus bMaxSP,20; bonus bMatk,(readparam(bInt)/10); if(readparam(bInt)>=110) bonus bMatkRate,1;','','');
REPLACE INTO `item_db_re` VALUES ('2919','Agi_Glove','Agi Glove','5','75000','37500','100','0','0','0','0','0','4294967295','63','2','136','0','100',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,100; bonus bMaxSP,20; bonus bFlee,(readparam(bAgi)/10); if(readparam(bAgi)>=110) bonus bFlee2,1;','','');
@@ -2535,6 +2535,15 @@ REPLACE INTO `item_db_re` VALUES ('4589','Jejeling_Card','Jejeling Card','6','20
REPLACE INTO `item_db_re` VALUES ('4590','Bangungot_Card','Bangungot Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4; bonus5 bAutoSpellWhenHit,NPC_WIDESLEEP,3,2500,BF_MAGIC,0;','','');
REPLACE INTO `item_db_re` VALUES ('4591','Bakonawa_Card','Bakonawa Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,4; bonus2 bAddEffWhenHit,Eff_Bleeding,2000;','','');
REPLACE INTO `item_db_re` VALUES ('4592','Buwaya_Card','Buwaya Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,4; bonus5 bAutoSpellWhenHit,NPC_WIDESTONE,3,2500,BF_MAGIC,0;','','');
+REPLACE INTO `item_db_re` VALUES ('4593','Menblatt_Card','Menblatt Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','4','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkDef,readparam(bDex)/10;','','');
+REPLACE INTO `item_db_re` VALUES ('4594','Petal_Card','Petal Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','4','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritAtkRate,2*(readparam(bLuk)/10);','','');
+REPLACE INTO `item_db_re` VALUES ('4595','Cenere_Card','Cenere Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','4','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate,2*(readparam(bAgi)/10); bonus bDelayrate,-2*(readparam(bAgi)/10);','','');
+REPLACE INTO `item_db_re` VALUES ('4596','Antique_Book_Card','Antique Book Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','4','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,5*(readparam(bInt)/10);','','');
+REPLACE INTO `item_db_re` VALUES ('4597','Lichtern_Blue_Card','Lichtern Blue Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','769','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Water,(getrefine()>=9)?10:5;','','');
+REPLACE INTO `item_db_re` VALUES ('4598','Lichtern_Green_Card','Lichtern Green Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','769','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Ghost,(getrefine()>=9)?10:5;','','');
+REPLACE INTO `item_db_re` VALUES ('4599','Lichtern_Red_Card','Lichtern Red Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','769','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Fire,(getrefine()>=9)?10:5;','','');
+REPLACE INTO `item_db_re` VALUES ('4600','Lichtern_Yellow_Card','Lichtern Yellow Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','769','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,10; bonus2 bMagicAtkEle,Ele_Earth,(getrefine()>=9)?10:5;','','');
+REPLACE INTO `item_db_re` VALUES ('4607','Faithful_Manager_Card','Faithful Manager Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,5; bonus bMatk,5; if(getiteminfo(getequipid(EQI_HAND_R),11) == 15) { if(getrefine()>=10) { bonus bBaseAtk,20; bonus bMatk,20; } if(getrefine()>=14) { bonus bBaseAtk,20; bonus bMatk,20; } }','','');
REPLACE INTO `item_db_re` VALUES ('4700','Strength1','STR+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
REPLACE INTO `item_db_re` VALUES ('4701','Strength2','STR+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
REPLACE INTO `item_db_re` VALUES ('4702','Strength3','STR+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
diff --git a/src/char/char.c b/src/char/char.c
index f63f1c66d..1b8d466f9 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -1952,17 +1952,16 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p) {
WBUFW(buf,48) = min(p->max_sp, INT16_MAX);
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
WBUFW(buf,52) = p->class_;
- WBUFW(buf,54) = p->hair;
-
#if PACKETVER >= 20141022
- //When the weapon is sent and your option is riding, the client crashes on login!?
- WBUFL(buf,56) = p->option&(0x20|0x80000|0x100000|0x200000|0x400000|0x800000|0x1000000|0x2000000|0x4000000|0x8000000) ? 0 : p->weapon;
+ WBUFL(buf,54) = p->hair;
offset+=2;
buf = WBUFP(buffer,offset);
#else
+ WBUFW(buf,54) = p->hair;
+#endif
+
//When the weapon is sent and your option is riding, the client crashes on login!?
WBUFW(buf,56) = p->option&(0x20|0x80000|0x100000|0x200000|0x400000|0x800000|0x1000000|0x2000000|0x4000000|0x8000000) ? 0 : p->weapon;
-#endif
WBUFW(buf,58) = p->base_level;
WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
diff --git a/src/common/mapindex.h b/src/common/mapindex.h
index 91bf4562e..8e552261a 100644
--- a/src/common/mapindex.h
+++ b/src/common/mapindex.h
@@ -54,6 +54,7 @@
#define MAP_MALANGDO "malangdo"
#define MAP_MALAYA "malaya"
#define MAP_ECLAGE "eclage"
+#define MAP_ECLAGE_IN "ecl_in01"
#define mapindex_id2name(n) mapindex->id2name((n),__FILE__, __LINE__, __func__)
#define mapindex_exists(n) ( mapindex->list[(n)].name[0] != '\0' )
diff --git a/src/common/sql.c b/src/common/sql.c
index 7f89e9828..abc2ed57a 100644
--- a/src/common/sql.c
+++ b/src/common/sql.c
@@ -410,6 +410,7 @@ void Sql_Free(Sql* self) {
SQL->FreeResult(self);
StrBuf->Destroy(&self->buf);
if( self->keepalive != INVALID_TIMER ) timer->delete(self->keepalive, Sql_P_KeepaliveTimer);
+ mysql_close(&self->handle);
aFree(self);
}
}
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 6f97141b2..5e50a06ee 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -4591,7 +4591,7 @@ ACMD(disguise)
if ((id = atoi(message)) > 0) {
//Acquired an ID
- if (!mob->db_checkid(id) && !npcdb_checkid(id))
+ if (!mob->db_checkid(id) && !npc->db_checkid(id))
id = 0; //Invalid id for either mobs or npcs.
} else {
//Acquired a Name
@@ -4643,7 +4643,7 @@ ACMD(disguiseall)
if ((mob_id = mob->db_searchname(message)) == 0) // check name first (to avoid possible name begining by a number)
mob_id = atoi(message);
- if (!mob->db_checkid(mob_id) && !npcdb_checkid(mob_id)) { //if mob or npc...
+ if (!mob->db_checkid(mob_id) && !npc->db_checkid(mob_id)) { //if mob or npc...
clif->message(fd, msg_txt(123)); // Monster/NPC name/id not found.
return false;
}
@@ -4676,7 +4676,7 @@ ACMD(disguiseguild)
}
if( (id = atoi(monster)) > 0 ) {
- if( !mob->db_checkid(id) && !npcdb_checkid(id) )
+ if( !mob->db_checkid(id) && !npc->db_checkid(id) )
id = 0;
} else {
if( (id = mob->db_searchname(monster)) == 0 ) {
diff --git a/src/map/battle.c b/src/map/battle.c
index 86134db52..de57e7d2c 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -4742,6 +4742,18 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
else
wd.dmg_lv = ATK_DEF;
break;
+
+ case KO_BAKURETSU:
+ {
+#ifdef RENEWAL
+ GET_NORMAL_ATTACK((sc && sc->data[SC_MAXIMIZEPOWER] ? 1 : 0) | (sc && sc->data[SC_WEAPONPERFECT] ? 8 : 0));
+#endif
+ skillratio = skill_lv * (50 + status_get_dex(src) / 4);
+ skillratio = (int)(skillratio * (sd ? pc->checkskill(sd, NJ_TOBIDOUGU) : 10) * 40.f / 100.0f * status->get_lv(src) / 120);
+ ATK_RATE(skillratio + 10 * (sd ? sd->status.job_level : 0));
+ }
+ break;
+
#ifdef RENEWAL
case NJ_TATAMIGAESHI:
ATK_RATE(200);
@@ -4768,17 +4780,6 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
wd.damage = battle->calc_masteryfix(src, target, skill_id, skill_lv, wd.damage, wd.div_, 0, flag.weapon);
}
#endif
-
- case KO_BAKURETSU:
- {
-#ifdef RENEWAL
- GET_NORMAL_ATTACK((sc && sc->data[SC_MAXIMIZEPOWER] ? 1 : 0) | (sc && sc->data[SC_WEAPONPERFECT] ? 8 : 0));
-#endif
- skillratio = skill_lv * (50 + status_get_dex(src) / 4);
- skillratio = (int)(skillratio * (sd ? pc->checkskill(sd, NJ_TOBIDOUGU) : 10) * 40.f / 100.0f * status->get_lv(src) / 120);
- ATK_RATE(skillratio + 10 * (sd ? sd->status.job_level : 0));
- }
- break;
default:
ATK_RATE(battle->calc_skillratio(BF_WEAPON, src, target, skill_id, skill_lv, skillratio, wflag));
}
diff --git a/src/map/npc.c b/src/map/npc.c
index 04df22f2d..28709d34f 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -75,7 +75,7 @@ struct view_data* npc_get_viewdata(int class_)
//Returns the viewdata for normal npc classes.
if( class_ == INVISIBLE_CLASS )
return &npc_viewdb[0];
- if (npcdb_checkid(class_) || class_ == WARP_CLASS){
+ if (npc->db_checkid(class_) || class_ == WARP_CLASS){
if( class_ > MAX_NPC_CLASS2_START ){
return &npc_viewdb2[class_-MAX_NPC_CLASS2_START];
}else{
@@ -85,6 +85,13 @@ struct view_data* npc_get_viewdata(int class_)
return NULL;
}
+//Checks if a given id is a valid npc id. [Skotlex]
+//Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001)
+bool npc_db_checkid(int id)
+{
+ return ((id >= 46 && id <= 125) || id == HIDDEN_WARP_CLASS || (id > 400 && id < MAX_NPC_CLASS) || id == INVISIBLE_CLASS || (id > MAX_NPC_CLASS2_START && id < MAX_NPC_CLASS2_END));
+}
+
/// Returns a new npc id that isn't being used in id_db.
/// Fatal error if nothing is available.
int npc_get_new_npc_id(void) {
@@ -4745,4 +4752,5 @@ void npc_defaults(void) {
npc->market_tosql = npc_market_tosql;
npc->market_delfromsql = npc_market_delfromsql;
npc->market_delfromsql_sub = npc_market_delfromsql_sub;
+ npc->db_checkid = npc_db_checkid;
}
diff --git a/src/map/npc.h b/src/map/npc.h
index a5a2b4676..b0014e323 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -124,10 +124,6 @@ enum actor_classes {
#define MAX_NPC_CLASS2_START 10000
#define MAX_NPC_CLASS2_END 10110
-//Checks if a given id is a valid npc id. [Skotlex]
-//Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001)
-#define npcdb_checkid(id) ( ( (id) >= 46 && (id) <= 125) || (id) == HIDDEN_WARP_CLASS || ( (id) > 400 && (id) < MAX_NPC_CLASS ) || (id) == INVISIBLE_CLASS || ( (id) > MAX_NPC_CLASS2_START && (id) < MAX_NPC_CLASS2_END ) )
-
//Script NPC events.
enum npce_event {
NPCE_LOGIN,
@@ -276,6 +272,7 @@ struct npc_interface {
void (*market_tosql) (struct npc_data *nd, unsigned short index);
void (*market_delfromsql) (struct npc_data *nd, unsigned short index);
void (*market_delfromsql_sub) (const char *npcname, unsigned short index);
+ bool (*db_checkid) (const int id);
/**
* For the Secure NPC Timeout option (check config/Secure.h) [RR]
**/
diff --git a/src/map/packets.h b/src/map/packets.h
index b022e369c..ccf1c28ef 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -2767,39 +2767,6 @@ packet(0x020d,-1);
packet(0x09DF,7);
#endif
-// 2014-10-22bRagexe - YomRawr
-#if PACKETVER >= 20141022
- packet(0x0369,7,clif->pActionRequest,2,6);
- packet(0x083C,10,clif->pUseSkillToId,2,4,6);
- packet(0x0437,5,clif->pWalkToXY,2);
- packet(0x035F,6,clif->pTickSend,2);
- packet(0x08AD,5,clif->pChangeDir,2,4);
- packet(0x094E,6,clif->pTakeItem,2);
- packet(0x087D,6,clif->pDropItem,2,4);
- packet(0x0878,8,clif->pMoveToKafra,2,4);
- packet(0x08AA,8,clif->pMoveFromKafra,2,4);
- packet(0x023B,10,clif->pUseSkillToPos,2,4,6,8);
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
- packet(0x096A,6,clif->pGetCharNameRequest,2);
- packet(0x0368,6,clif->pSolveCharName,2);
- packet(0x0835,12,clif->pSearchStoreInfoListItemClick,2,6,10);
- packet(0x0940,2,clif->pSearchStoreInfoNextPage,0);
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
- packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12);
- packet(0x0360,6,clif->pReqClickBuyingStore,2);
- packet(0x0817,2,clif->pReqCloseBuyingStore,0);
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89);
- packet(0x0955,18,clif->pPartyBookingRegisterReq,2,4);
- // packet(0x092B,8); // CZ_JOIN_BATTLE_FIELD
- packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8);
- packet(0x093B,19,clif->pWantToConnection,2,6,10,14,18);
- packet(0x0896,26,clif->pPartyInvite2,2);
- // packet(0x08AB,4); // CZ_GANGSI_RANK
- packet(0x091A,26,clif->pFriendsListAdd,2);
- packet(0x0899,5,clif->pHomMenu,2,4);
- packet(0x0438,36,clif->pStoragePassword,0);
-#endif
-
// 2014-10-16aRagexe - YomRawr
#if PACKETVER >= 20141016
packet(0x0369,7,clif->pActionRequest,2,6);
@@ -3113,10 +3080,6 @@ packet(0x020d,-1);
packetKeys(0x04810281,0x42814281,0x42814281); /* Themon */
#endif
-#if PACKETVER >= 20141022
- packetKeys(0x290551EA,0x2B952C75,0x2D67669B); /* YomRawr */
-#endif
-
#if PACKETVER >= 20141016
packetKeys(0x2DFF467C,0x444B37EE,0x2C1B634F); /* YomRawr */
#endif
diff --git a/src/map/script.c b/src/map/script.c
index 3ed779fba..aca4650c5 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -12488,7 +12488,7 @@ BUILDIN(disguise)
id = script_getnum(st,2);
- if (mob->db_checkid(id) || npcdb_checkid(id)) {
+ if (mob->db_checkid(id) || npc->db_checkid(id)) {
pc->disguise(sd, id);
script_pushint(st,id);
} else
diff --git a/src/map/skill.c b/src/map/skill.c
index cd46be0fa..429a0b739 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -493,6 +493,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
case AL_WARP:
case RETURN_TO_ELDICASTES:
case ALL_GUARDIAN_RECALL:
+ case ECLAGE_RECALL:
if(map->list[m].flag.nowarp) {
clif->skill_mapinfomessage(sd,0);
return 1;
@@ -9170,34 +9171,74 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
}
break;
-
case RETURN_TO_ELDICASTES:
case ALL_GUARDIAN_RECALL:
- if( sd )
- {
- short x, y; // Destiny position.
- unsigned short map_index;
+ case ECLAGE_RECALL:
+ if( sd ) {
+ short x = 0, y = 0; //Destiny position.
+ unsigned short map_index = 0;
- if( skill_id == RETURN_TO_ELDICASTES) {
- x = 198;
- y = 187;
- map_index = mapindex->name2id(MAP_DICASTES);
- } else {
- x = 44;
- y = 151;
- map_index = mapindex->name2id(MAP_MORA);
+ switch( skill_id ) {
+ default:
+ case RETURN_TO_ELDICASTES:
+ x = 198;
+ y = 187;
+ map_index = mapindex->name2id(MAP_DICASTES);
+ break;
+ case ALL_GUARDIAN_RECALL:
+ x = 44;
+ y = 151;
+ map_index = mapindex->name2id(MAP_MORA);
+ break;
+ case ECLAGE_RECALL:
+ x = 47;
+ y = 31;
+ map_index = mapindex->name2id(MAP_ECLAGE_IN);
+ break;
}
-
- if(!map_index) {
- //Given map not found?
+ if( !mapindex ) { //Given map not found?
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
map->freeblock_unlock();
return 0;
}
- pc->setpos(sd, map_index, x, y, CLR_TELEPORT);
+ pc->setpos(sd,map_index,x,y,CLR_TELEPORT);
}
break;
+ case ECL_SNOWFLIP:
+ case ECL_PEONYMAMY:
+ case ECL_SADAGUI:
+ case ECL_SEQUOIADUST:
+ switch( skill_id ) {
+ case ECL_SNOWFLIP:
+ status_change_end(bl,SC_SLEEP,INVALID_TIMER);
+ status_change_end(bl,SC_BLOODING,INVALID_TIMER);
+ status_change_end(bl,SC_BURNING,INVALID_TIMER);
+ status_change_end(bl,SC_DEEP_SLEEP,INVALID_TIMER);
+ break;
+ case ECL_PEONYMAMY:
+ status_change_end(bl,SC_FREEZE,INVALID_TIMER);
+ status_change_end(bl,SC_FROSTMISTY,INVALID_TIMER);
+ status_change_end(bl,SC_COLD,INVALID_TIMER);
+ break;
+ case ECL_SADAGUI:
+ status_change_end(bl,SC_STUN,INVALID_TIMER);
+ status_change_end(bl,SC_CONFUSION,INVALID_TIMER);
+ status_change_end(bl,SC_ILLUSION,INVALID_TIMER);
+ status_change_end(bl,SC_FEAR,INVALID_TIMER);
+ break;
+ case ECL_SEQUOIADUST:
+ status_change_end(bl,SC_STONE,INVALID_TIMER);
+ status_change_end(bl,SC_POISON,INVALID_TIMER);
+ status_change_end(bl,SC_CURSE,INVALID_TIMER);
+ status_change_end(bl,SC_BLIND,INVALID_TIMER);
+ status_change_end(bl,SC_ORCISH,INVALID_TIMER);
+ break;
+ }
+ clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
+ clif->skill_damage(src,bl,tick, status_get_amotion(src), 0, 0, 1, skill_id, -2, 6);
+ break;
+
case GM_SANDMAN:
if( tsc ) {
if( tsc->opt1 == OPT1_SLEEP )
diff --git a/src/map/status.c b/src/map/status.c
index c0611f97b..7b4e6f274 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -6203,7 +6203,7 @@ void status_set_viewdata(struct block_list *bl, int class_)
nullpo_retv(bl);
if (mob->db_checkid(class_) || mob->is_clone(class_))
vd = mob->get_viewdata(class_);
- else if (npcdb_checkid(class_) || (bl->type == BL_NPC && class_ == WARP_CLASS))
+ else if (npc->db_checkid(class_) || (bl->type == BL_NPC && class_ == WARP_CLASS))
vd = npc->get_viewdata(class_);
else if (homdb_checkid(class_))
vd = homun->get_viewdata(class_);
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
index 034b14b79..c2c6daf58 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
@@ -3399,6 +3399,8 @@ struct {
struct HPMHookPoint *HP_npc_market_delfromsql_post;
struct HPMHookPoint *HP_npc_market_delfromsql_sub_pre;
struct HPMHookPoint *HP_npc_market_delfromsql_sub_post;
+ struct HPMHookPoint *HP_npc_db_checkid_pre;
+ struct HPMHookPoint *HP_npc_db_checkid_post;
struct HPMHookPoint *HP_npc_secure_timeout_timer_pre;
struct HPMHookPoint *HP_npc_secure_timeout_timer_post;
struct HPMHookPoint *HP_party_init_pre;
@@ -8482,6 +8484,8 @@ struct {
int HP_npc_market_delfromsql_post;
int HP_npc_market_delfromsql_sub_pre;
int HP_npc_market_delfromsql_sub_post;
+ int HP_npc_db_checkid_pre;
+ int HP_npc_db_checkid_post;
int HP_npc_secure_timeout_timer_pre;
int HP_npc_secure_timeout_timer_post;
int HP_party_init_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
index 21f48134c..89ded9041 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
@@ -1726,6 +1726,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(npc->market_tosql, HP_npc_market_tosql) },
{ HP_POP(npc->market_delfromsql, HP_npc_market_delfromsql) },
{ HP_POP(npc->market_delfromsql_sub, HP_npc_market_delfromsql_sub) },
+ { HP_POP(npc->db_checkid, HP_npc_db_checkid) },
{ HP_POP(npc->secure_timeout_timer, HP_npc_secure_timeout_timer) },
/* party */
{ HP_POP(party->init, HP_party_init) },
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index 9078efe2e..ff08b8909 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -45435,6 +45435,33 @@ void HP_npc_market_delfromsql_sub(const char *npcname, unsigned short index) {
}
return;
}
+bool HP_npc_db_checkid(const int id) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if( HPMHooks.count.HP_npc_db_checkid_pre ) {
+ bool (*preHookFunc) (const int *id);
+ *HPMforce_return = false;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_npc_db_checkid_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_npc_db_checkid_pre[hIndex].func;
+ retVal___ = preHookFunc(&id);
+ }
+ if( *HPMforce_return ) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.npc.db_checkid(id);
+ }
+ if( HPMHooks.count.HP_npc_db_checkid_post ) {
+ bool (*postHookFunc) (bool retVal___, const int *id);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_npc_db_checkid_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_npc_db_checkid_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, &id);
+ }
+ }
+ return retVal___;
+}
int HP_npc_secure_timeout_timer(int tid, int64 tick, int id, intptr_t data) {
int hIndex = 0;
int retVal___ = 0;