diff options
-rw-r--r-- | db/re/item_db.conf | 120 | ||||
-rw-r--r-- | db/re/mob_db.txt | 18 | ||||
-rw-r--r-- | db/re/skill_cast_db.txt | 13 | ||||
-rw-r--r-- | npc/re/mobs/dungeons/ecl_tdun.txt | 27 | ||||
-rw-r--r-- | npc/re/mobs/fields/eclage.txt | 5 | ||||
-rw-r--r-- | sql-files/item_db_re.sql | 11 | ||||
-rw-r--r-- | src/common/mapindex.h | 1 | ||||
-rw-r--r-- | src/map/battle.c | 30 | ||||
-rw-r--r-- | src/map/battle.h | 4 | ||||
-rw-r--r-- | src/map/skill.c | 434 | ||||
-rw-r--r-- | src/map/skill.h | 35 | ||||
-rw-r--r-- | src/map/unit.c | 4 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc | 144 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc | 38 | ||||
-rw-r--r-- | src/plugins/HPMHooking/HPMHooking_map.Hooks.inc | 952 |
15 files changed, 1746 insertions, 90 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/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/map/battle.c b/src/map/battle.c index de57e7d2c..edb5fd69f 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -757,6 +757,9 @@ int64 battle_calc_masteryfix(struct block_list *src, struct block_list *target, case HT_FREEZINGTRAP: damage += 40 * pc->checkskill(sd, RA_RESEARCHTRAP); break; + default: + battle->calc_masteryfix_unknown(src, target, &skill_id, &skill_lv, &damage, &div, &left, &weapon); + break; } if( sc ){ // sc considered as masteries @@ -837,6 +840,10 @@ int64 battle_calc_masteryfix(struct block_list *src, struct block_list *target, return damage; } + +void battle_calc_masteryfix_unknown(struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int64 *damage, int *div, bool *left, bool *weapon) { +} + /*========================================== * Elemental attribute fix. *------------------------------------------*/ @@ -1771,6 +1778,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block } } break; + default: + battle->calc_skillratio_magic_unknown(&attack_type, src, target, &skill_id, &skill_lv, &skillratio, &flag); + break; } break; case BF_WEAPON: @@ -2537,6 +2547,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block case MH_MAGMA_FLOW: skillratio += -100 + 100 * skill_lv; break; + default: + battle->calc_skillratio_weapon_unknown(&attack_type, src, target, &skill_id, &skill_lv, &skillratio, &flag); + break; } //Skill damage modifiers that stack linearly if(sc && skill_id != PA_SACRIFICE){ @@ -2581,6 +2594,13 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block return 0; return skillratio; } + +void battle_calc_skillratio_magic_unknown(int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag) { +} + +void battle_calc_skillratio_weapon_unknown(int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag) { +} + /*========================================== * Check damage trough status. * ATK may be MISS, BLOCKED FAIL, reduce, increase, end status... @@ -3938,6 +3958,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * } break; + default: + battle->calc_misc_attack_unknown(src, target, &skill_id, &skill_lv, &mflag, &md); + break; } if (nk&NK_SPLASHSPLIT){ // Divide ATK among targets @@ -4078,6 +4101,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * return md; } +void battle_calc_misc_attack_unknown(struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *mflag, struct Damage *md) { +} + /*========================================== * battle_calc_weapon_attack (by Skotlex) *------------------------------------------*/ @@ -7262,4 +7288,8 @@ void battle_defaults(void) { battle->config_adjust = battle_adjust_conf; battle->get_enemy_area = battle_getenemyarea; battle->damage_area = battle_damage_area; + battle->calc_masteryfix_unknown = battle_calc_masteryfix_unknown; + battle->calc_skillratio_magic_unknown = battle_calc_skillratio_magic_unknown; + battle->calc_skillratio_weapon_unknown = battle_calc_skillratio_weapon_unknown; + battle->calc_misc_attack_unknown = battle_calc_misc_attack_unknown; } diff --git a/src/map/battle.h b/src/map/battle.h index e80e0091d..ea2538c30 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -612,6 +612,10 @@ struct battle_interface { struct block_list* (*get_enemy_area) (struct block_list *src, int x, int y, int range, int type, int ignore_id); /* damages area, originally for royal guard's reflect damage */ int (*damage_area) (struct block_list *bl, va_list ap); + void (*calc_masteryfix_unknown) (struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int64 *damage, int *div, bool *left, bool *weapon); + void (*calc_skillratio_magic_unknown) (int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag); + void (*calc_skillratio_weapon_unknown) (int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag); + void (*calc_misc_attack_unknown) (struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *mflag, struct Damage *md); }; struct battle_interface *battle; diff --git a/src/map/skill.c b/src/map/skill.c index a89f61a49..2e31c5821 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; @@ -1348,6 +1349,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case MH_XENO_SLASHER: sc_start2(src, bl, SC_BLOODING, 10 * skill_lv, skill_lv, src->id, skill->get_time(skill_id,skill_lv)); break; + default: + skill->additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &dmg_lv, &tick); + break; } if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai) { @@ -1577,6 +1581,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 return 0; } +void skill_additional_effect_unknown(struct block_list* src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int *dmg_lv, int64 *tick) { +} + int skill_onskillusage(struct map_session_data *sd, struct block_list *bl, uint16 skill_id, int64 tick) { int temp, skill_lv, i, type, notok; struct block_list *tbl; @@ -1744,6 +1751,9 @@ int skill_counter_additional_effect(struct block_list* src, struct block_list *b clif->millenniumshield(bl, sc->fv_counter++); } break; + default: + skill->counter_additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &tick); + break; } if( sd && (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR @@ -1898,6 +1908,10 @@ int skill_counter_additional_effect(struct block_list* src, struct block_list *b return 0; } + +void skill_counter_additional_effect_unknown(struct block_list* src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int64 *tick) { +} + /*========================================================================= * Breaks equipment. On-non players causes the corresponding strip effect. * - rate goes from 0 to 10000 (100.00%) @@ -2330,8 +2344,8 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr unit->cancel_combo(src); // Cancel combo wait break; default: - if( src == dsrc ) // Ground skills are exceptions. [Inkfish] - status_change_end(src, SC_COMBOATTACK, INVALID_TIMER); + skill->attack_combo1_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag, sce, &combo); + break; } } switch(skill_id) { @@ -2392,9 +2406,12 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr if( pc->checkskill(sd, SR_TIGERCANNON) > 0 || pc->checkskill(sd, SR_GATEOFHELL) > 0 ) combo = 1; break; + default: + skill->attack_combo2_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag, &combo); + break; } //Switch End if (combo) { //Possible to chain - if ( (combo = DIFF_TICK32(sd->ud.canact_tick, tick)) < 50 ) combo = 50;/* less is a waste. */ + combo = max(status_get_amotion(src), DIFF_TICK32(sd->ud.canact_tick, tick)); sc_start2(NULL,src,SC_COMBOATTACK,100,skill_id,bl->id,combo); clif->combo_delay(src, combo); } @@ -2511,14 +2528,7 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr case AB_DUPLELIGHT_MAGIC: dmg.amotion = 300;/* makes the damage value not overlap with previous damage (when displayed by the client) */ default: - if( flag&SD_ANIMATION && dmg.div_ < 2 ) //Disabling skill animation doesn't works on multi-hit. - type = 5; - if( bl->type == BL_SKILL ){ - TBL_SKILL *su = (TBL_SKILL*)bl; - if( su->group && skill->get_inf2(su->group->skill_id)&INF2_TRAP )// show damage on trap targets - clif->skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, flag&SD_LEVEL?-1:skill_lv, 5); - } - dmg.dmotion = clif->skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, flag&SD_LEVEL?-1:skill_lv, type); + skill->attack_display_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag, &type, &dmg, &damage); break; } @@ -2562,6 +2572,9 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr case LG_OVERBRAND_PLUSATK: copy_skill = LG_OVERBRAND; break; + default: + copy_skill = skill->attack_copy_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag); + break; } cidx = skill->get_index(copy_skill); if ((tsd->status.skill[cidx].id == 0 || tsd->status.skill[cidx].flag == SKILL_FLAG_PLAGIARIZED) && @@ -2667,6 +2680,9 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr case MC_CARTREVOLUTION: dir = 6; // Official servers push target to the West break; + default: + dir = skill->attack_dir_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag); + break; } @@ -2690,12 +2706,7 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr } break; default: - skill->blown(dsrc,bl,dmg.blewcount,dir, 0x0 ); - if ( !dmg.blewcount && bl->type == BL_SKILL && damage > 0 ){ - TBL_SKILL *su = (TBL_SKILL*)bl; - if( su->group && su->group->skill_id == HT_BLASTMINE) - skill->blown(src, bl, 3, -1, 0); - } + skill->attack_blow_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag, &type, &dmg, &damage, &dir); break; } } @@ -2784,6 +2795,9 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr case SR_TIGERCANNON: status_zap(bl, 0, damage/10); // 10% of damage dealt break; + default: + skill->attack_post_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag); + break; } if( sd ) skill->onskillusage(sd, bl, skill_id, tick); @@ -2807,6 +2821,45 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr return (int)cap_value(damage,INT_MIN,INT_MAX); } +void skill_attack_combo1_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_change_entry *sce, int *combo) { + if (src == dsrc) // Ground skills are exceptions. [Inkfish] + status_change_end(src, SC_COMBOATTACK, INVALID_TIMER); +} + +void skill_attack_combo2_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *combo) { +} + +void skill_attack_display_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage) { + if (*flag & SD_ANIMATION && dmg->div_ < 2) //Disabling skill animation doesn't works on multi-hit. + *type = 5; + if (bl->type == BL_SKILL ) { + TBL_SKILL *su = (TBL_SKILL*)bl; + if (su->group && skill->get_inf2(su->group->skill_id) & INF2_TRAP) // show damage on trap targets + clif->skill_damage(src, bl, *tick, dmg->amotion, dmg->dmotion, *damage, dmg->div_, *skill_id, *flag & SD_LEVEL ? -1 : *skill_lv, 5); + } + dmg->dmotion = clif->skill_damage(dsrc, bl, *tick, dmg->amotion, dmg->dmotion, *damage, dmg->div_, *skill_id, *flag & SD_LEVEL ? -1 : *skill_lv, *type); +} + +int skill_attack_copy_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + return *skill_id; +} + +int skill_attack_dir_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + return -1; +} + +void skill_attack_blow_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir) { + skill->blown(dsrc, bl, dmg->blewcount, *dir, 0x0); + if (!dmg->blewcount && bl->type == BL_SKILL && *damage > 0){ + TBL_SKILL *su = (TBL_SKILL*)bl; + if (su->group && su->group->skill_id == HT_BLASTMINE) + skill->blown(src, bl, 3, -1, 0); + } +} + +void skill_attack_post_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { +} + /*========================================== * sub function for recursive skill call. * Checking bl battle flag and display damage @@ -3138,7 +3191,8 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) { case SR_SKYNETBLOW: break; default: - continue; // Caster is Dead + if (!skill->timerskill_dead_unknown(src, ud, skl)) + continue; // Caster is Dead } } if(status->isdead(target) && skl->skill_id != RG_INTIMIDATE && skl->skill_id != WZ_WATERBALL) @@ -3294,7 +3348,7 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) { } } default: - skill->attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag); + skill->timerskill_target_unknown(tid, tick, src, target, ud, skl); break; } } else { @@ -3327,6 +3381,9 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) { map->foreachinpath(skill->attack_area,src->m,src->x,src->y,skl->x,skl->y,4,2,BL_CHAR, skill->get_type(skl->skill_id),src,src,skl->skill_id,skl->skill_lv,tick,skl->flag,BCT_ENEMY); break; + default: + skill->timerskill_notarget_unknown(tid, tick, src, target, ud, skl); + break; } } } while (0); @@ -3335,6 +3392,20 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) { return 0; } +bool skill_timerskill_dead_unknown(struct block_list *src, struct unit_data *ud, struct skill_timerskill *skl) +{ + return false; +} + +void skill_timerskill_target_unknown(int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl) +{ + skill->attack(skl->type, src, src, target, skl->skill_id, skl->skill_lv, tick, skl->flag); +} + +void skill_timerskill_notarget_unknown(int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl) +{ +} + /*========================================== * *------------------------------------------*/ @@ -3388,6 +3459,10 @@ int skill_cleartimerskill (struct block_list *src) case SR_TIGERCANNON: case SR_SKYNETBLOW: continue; + default: + skill->cleartimerskill_unknown(ud->skilltimerskill[i]->skill_id); + continue; + } timer->delete(ud->skilltimerskill[i]->timer, skill->timerskill); ers_free(skill->timer_ers, ud->skilltimerskill[i]); @@ -3396,6 +3471,11 @@ int skill_cleartimerskill (struct block_list *src) } return 1; } + +void skill_cleartimerskill_unknown(int skill_id) +{ +} + int skill_activate_reverberation(struct block_list *bl, va_list ap) { struct skill_unit *su = (TBL_SKILL*)bl; struct skill_unit_group *sg; @@ -4697,12 +4777,9 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 break; default: - ShowWarning("skill_castend_damage_id: Unknown skill used:%d\n",skill_id); - clif->skill_damage(src, bl, tick, status_get_amotion(src), tstatus->dmotion, - 0, abs(skill->get_num(skill_id, skill_lv)), - skill_id, skill_lv, skill->get_hit(skill_id)); - map->freeblock_unlock(); - return 1; + if (skill->castend_damage_id_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag, tstatus, sc)) + return 1; + break; } if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) //Should only remove after the skill has been casted. @@ -4726,6 +4803,16 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 return 0; } +bool skill_castend_damage_id_unknown(struct block_list* src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_data *tstatus, struct status_change *sc) +{ + ShowWarning("skill_castend_damage_id: Unknown skill used:%d\n", *skill_id); + clif->skill_damage(src, bl, *tick, status_get_amotion(src), tstatus->dmotion, + 0, abs(skill->get_num(*skill_id, *skill_lv)), + *skill_id, *skill_lv, skill->get_hit(*skill_id)); + map->freeblock_unlock(); + return true; +} + /*========================================== * *------------------------------------------*/ @@ -4809,6 +4896,10 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) { ud->skilly = target->y; ud->skilltimer = tid; return skill->castend_pos(tid,tick,id,data); + default: + if (skill->castend_id_unknown(ud, src, target)) + return 0; + break; } if(ud->skill_id == RG_BACKSTAP) { @@ -5008,6 +5099,9 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) { else ud->skill_id = 0; //mobs can't clear this one as it is used for skill condition 'afterskill' ud->skill_lv = ud->skilltarget = 0; } + + unit->setdir(src, map->calc_dir(src, target->x, target->y)); + map->freeblock_unlock(); return 1; } while(0); @@ -5059,6 +5153,11 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) { return 0; } +bool skill_castend_id_unknown(struct unit_data *ud, struct block_list *src, struct block_list *target) +{ + return false; +} + /*========================================== * *------------------------------------------*/ @@ -5106,7 +5205,9 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin case WM_DEADHILLHERE: break; default: - return 1; + if (skill->castend_nodamage_id_dead_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag)) + return 1; + break; } } @@ -5121,6 +5222,8 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin clif->skill_fail(sd,skill_id,USESKILL_FAIL_TOTARGET,0); return 0; default: + if (skill->castend_nodamage_id_mado_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag)) + return 0; break; } } @@ -5223,9 +5326,13 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin } break; default: - //Skill is actually ground placed. - if (src == bl && skill->get_unit_id(skill_id,0)) - return skill->castend_pos2(src,bl->x,bl->y,skill_id,skill_lv,tick,0); + if (skill->castend_nodamage_id_undead_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag)) + { + //Skill is actually ground placed. + if (src == bl && skill->get_unit_id(skill_id,0)) + return skill->castend_pos2(src,bl->x,bl->y,skill_id,skill_lv,tick,0); + } + break; } type = status->skill2sc(skill_id); @@ -9167,32 +9274,72 @@ 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: @@ -9665,10 +9812,9 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin case SO_ELEMENTAL_SHIELD:/* somehow its handled outside this switch, so we need a empty case otherwise default would be triggered. */ break; default: - ShowWarning("skill_castend_nodamage_id: Unknown skill used:%d\n",skill_id); - clif->skill_nodamage(src,bl,skill_id,skill_lv,1); - map->freeblock_unlock(); - return 1; + if (skill->castend_nodamage_id_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag)) + return 1; + break; } if(skill_id != SR_CURSEDCIRCLE) { @@ -9698,6 +9844,29 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin return 0; } +bool skill_castend_nodamage_id_dead_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) +{ + return true; +} + +bool skill_castend_nodamage_id_undead_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) +{ + return true; +} + +bool skill_castend_nodamage_id_mado_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) +{ + return false; +} + +bool skill_castend_nodamage_id_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) +{ + ShowWarning("skill_castend_nodamage_id: Unknown skill used:%d\n", *skill_id); + clif->skill_nodamage(src, bl, *skill_id, *skill_lv, 1); + map->freeblock_unlock(); + return true; +} + /*========================================== * *------------------------------------------*/ @@ -9843,6 +10012,8 @@ int skill_castend_pos(int tid, int64 tick, int id, intptr_t data) { ud->skill_lv = ud->skillx = ud->skilly = 0; } + unit->setdir(src, map->calc_dir(src, ud->skillx, ud->skilly)); + map->freeblock_unlock(); return 1; } while(0); @@ -10046,10 +10217,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case SC_ESCAPE: break; //Effect is displayed on respective switch case. default: - if(skill->get_inf(skill_id)&INF_SELF_SKILL) - clif->skill_nodamage(src,src,skill_id,skill_lv,1); - else - clif->skill_poseffect(src,skill_id,skill_lv,x,y,tick); + skill->castend_pos2_effect_unknown(src, &x, &y, &skill_id, &skill_lv, &tick, &flag); + break; } // SC_MAGICPOWER needs to switch states before any damage is actually dealt @@ -10725,8 +10894,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui break; default: - ShowWarning("skill_castend_pos2: Unknown skill used:%d\n",skill_id); - return 1; + if (skill->castend_pos2_unknown(src, &x, &y, &skill_id, &skill_lv, &tick, &flag)) + return 1; + break; } if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) //Should only remove after the skill has been casted. @@ -10747,6 +10917,18 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui return 0; } +void skill_castend_pos2_effect_unknown(struct block_list* src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + if (skill->get_inf(*skill_id) & INF_SELF_SKILL) + clif->skill_nodamage(src, src, *skill_id, *skill_lv, 1); + else + clif->skill_poseffect(src, *skill_id, *skill_lv, *x, *y, *tick); +} + +bool skill_castend_pos2_unknown(struct block_list* src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + ShowWarning("skill_castend_pos2: Unknown skill used:%d\n", *skill_id); + return true; +} + /// transforms 'target' skill unit into dissonance (if conditions are met) int skill_dance_overlap_sub(struct block_list* bl, va_list ap) { struct skill_unit* target = (struct skill_unit*)bl; @@ -11211,6 +11393,9 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_ } } break; + default: + skill->unitsetting1_unknown(src, &skill_id, &skill_lv, &x, &y, &flag, &val1, &val2, &val3); + break; } nullpo_retr(NULL, group=skill->init_unitgroup(src,layout->count,skill_id,skill_lv,skill->get_unit_id(skill_id,flag&1)+subunt, limit, interval)); @@ -11312,8 +11497,7 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_ val2 = src->id; break; default: - if (group->state.song_dance&0x1) - val2 = unit_flag&(UF_DANCE|UF_SONG); //Store whether this is a song/dance + skill->unitsetting2_unknown(src, &skill_id, &skill_lv, &x, &y, &flag, &unit_flag, &val1, &val2, &val3, group); break; } if (skill->get_unit_flag(skill_id) & UF_RANGEDSINGLEUNIT && i == (layout->count / 2)) @@ -11354,6 +11538,14 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_ return group; } +void skill_unitsetting1_unknown(struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *val1, int *val2, int *val3) { +} + +void skill_unitsetting2_unknown(struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *unit_flag, int *val1, int *val2, int *val3, struct skill_unit_group *group) { + if (group->state.song_dance & 0x1) + *val2 = *unit_flag & (UF_DANCE | UF_SONG); //Store whether this is a song/dance +} + /*========================================== * *------------------------------------------*/ @@ -11578,10 +11770,16 @@ int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int64 tick if ( !sce && battle->check_target(&sg->unit->bl,bl,sg->target_flag) > 0 ) sc_start4(ss,bl,type,100,sg->skill_lv,0,0,0,1000); break; + default: + skill->unit_onplace_unknown(src, bl, &tick); + break; } return skill_id; } +void skill_unit_onplace_unknown(struct skill_unit *src, struct block_list *bl, int64 *tick) { +} + /*========================================== * *------------------------------------------*/ @@ -12873,6 +13071,12 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id case KO_YAMIKUMO: if( sc && sc->data[status->skill2sc(skill_id)] ) return 1; + default: + { + int ret = skill->check_condition_castbegin_off_unknown(sc, &skill_id); + if (ret >= 0) + return ret; + } } // Check the skills that can be used while mounted on a warg @@ -12907,7 +13111,11 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id case ALL_FULL_THROTTLE: break; default: // in official there is no message. - return 0; + { + int ret = skill->check_condition_castbegin_mount_unknown(sc, &skill_id); + if (ret >= 0) + return ret; + } } } @@ -12946,7 +13154,11 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id case NC_MAGMA_ERUPTION_DOTDAMAGE: break; default: - return 0; + { + int ret = skill->check_condition_castbegin_madogear_unknown(sc, &skill_id); + if (ret >= 0) + return ret; + } } } @@ -13523,6 +13735,12 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id } } break; + default: + { + int ret = skill->check_condition_castbegin_unknown(sc, &skill_id); + if (ret >= 0) + return ret; + } } switch(require.state) { @@ -13705,6 +13923,27 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id return 1; } +int skill_check_condition_castbegin_off_unknown(struct status_change *sc, uint16 *skill_id) +{ + return -1; +} + +int skill_check_condition_castbegin_mount_unknown(struct status_change *sc, uint16 *skill_id) +{ + return 0; +} + +int skill_check_condition_castbegin_madogear_unknown(struct status_change *sc, uint16 *skill_id) +{ + return 0; +} + +int skill_check_condition_castbegin_unknown(struct status_change *sc, uint16 *skill_id) +{ + return -1; +} + + int skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id, uint16 skill_lv) { struct skill_condition require; struct status_data *st; @@ -13809,6 +14048,9 @@ int skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id, } } break; + default: + skill->check_condition_castend_unknown(sd, &skill_id, &skill_lv); + break; } st = &sd->battle_status; @@ -13894,6 +14136,9 @@ int skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id, return 1; } +void skill_check_condition_castend_unknown(struct map_session_data* sd, uint16 *skill_id, uint16 *skill_lv) { +} + // type&2: consume items (after skill was used) // type&1: consume the others (before skill was used) int skill_consume_requirement( struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type) { @@ -14022,6 +14267,12 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16 case KO_YAMIKUMO: if( sc && sc->data[status->skill2sc(skill_id)] ) return req; + default: + { + if (skill->get_requirement_off_unknown(sc, &skill_id)) + return req; + break; + } } idx = skill->get_index(skill_id); @@ -14133,6 +14384,12 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16 if( i < 3 ) continue; break; + default: + { + if (skill->get_requirement_item_unknown(sc, sd, &skill_id, &skill_lv, &idx, &i)) + continue; + break; + } } req.itemid[i] = skill->db[idx].itemid[i]; @@ -14281,11 +14538,28 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16 if( sc && (sc->data[SC_HEATER_OPTION] || sc->data[SC_COOLER_OPTION] || sc->data[SC_BLAST_OPTION] || sc->data[SC_CURSED_SOIL_OPTION] )) req.sp += req.sp * 150 / 100; break; + default: + skill->get_requirement_unknown(sc, sd, &skill_id, &skill_lv, &req); + break; } return req; } +bool skill_get_requirement_off_unknown(struct status_change *sc, uint16 *skill_id) +{ + return false; +} + +int skill_get_requirement_item_unknown(struct status_change *sc, struct map_session_data* sd, uint16 *skill_id, uint16 *skill_lv, uint16 *idx, int *i) +{ + return -1; +} + +void skill_get_requirement_unknown(struct status_change *sc, struct map_session_data* sd, uint16 *skill_id, uint16 *skill_lv, struct skill_condition *req) +{ +} + /*========================================== * Does cast-time reductions based on dex, item bonuses and config setting *------------------------------------------*/ @@ -15314,7 +15588,9 @@ int skill_cell_overlap(struct block_list *bl, va_list ap) { skill->delunit(su); return 1; } - if( !(skill->get_inf2(su->group->skill_id)&(INF2_SONG_DANCE|INF2_TRAP)) || su->group->skill_id == WZ_FIREPILLAR || su->group->skill_id == GN_HELLS_PLANT) { //It deletes everything except songs/dances and traps + // SA_LANDPROTECTOR blocks everything except songs/dances/traps (and NOLP) + // TODO: Do these skills ignore land protector when placed on top? + if( !(skill->get_inf2(su->group->skill_id)&(INF2_SONG_DANCE|INF2_TRAP|INF2_NOLP)) || su->group->skill_id == WZ_FIREPILLAR || su->group->skill_id == GN_HELLS_PLANT) { skill->delunit(su); return 1; } @@ -15371,8 +15647,8 @@ int skill_cell_overlap(struct block_list *bl, va_list ap) { break; } - if (su->group->skill_id == SA_LANDPROTECTOR && !(skill->get_inf2(skill_id)&(INF2_SONG_DANCE|INF2_TRAP))) { - //It deletes everything except songs/dances/traps + if (su->group->skill_id == SA_LANDPROTECTOR && !(skill->get_inf2(skill_id)&(INF2_SONG_DANCE|INF2_TRAP|INF2_NOLP))) { + //SA_LANDPROTECTOR blocks everything except songs/dances/traps (and NOLP) (*alive) = 0; return 1; } @@ -19029,4 +19305,36 @@ void skill_defaults(void) { skill->cooldown_save = skill_cooldown_save; skill->get_new_group_id = skill_get_new_group_id; skill->check_shadowform = skill_check_shadowform; + skill->additional_effect_unknown = skill_additional_effect_unknown; + skill->counter_additional_effect_unknown = skill_counter_additional_effect_unknown; + skill->attack_combo1_unknown = skill_attack_combo1_unknown; + skill->attack_combo2_unknown = skill_attack_combo2_unknown; + skill->attack_display_unknown = skill_attack_display_unknown; + skill->attack_copy_unknown = skill_attack_copy_unknown; + skill->attack_dir_unknown = skill_attack_dir_unknown; + skill->attack_blow_unknown = skill_attack_blow_unknown; + skill->attack_post_unknown = skill_attack_post_unknown; + skill->timerskill_dead_unknown = skill_timerskill_dead_unknown; + skill->timerskill_target_unknown = skill_timerskill_target_unknown; + skill->timerskill_notarget_unknown = skill_timerskill_notarget_unknown; + skill->cleartimerskill_unknown = skill_cleartimerskill_unknown; + skill->castend_damage_id_unknown = skill_castend_damage_id_unknown; + skill->castend_id_unknown = skill_castend_id_unknown; + skill->castend_nodamage_id_dead_unknown = skill_castend_nodamage_id_dead_unknown; + skill->castend_nodamage_id_mado_unknown = skill_castend_nodamage_id_mado_unknown; + skill->castend_nodamage_id_undead_unknown = skill_castend_nodamage_id_undead_unknown; + skill->castend_nodamage_id_unknown = skill_castend_nodamage_id_unknown; + skill->castend_pos2_effect_unknown = skill_castend_pos2_effect_unknown; + skill->castend_pos2_unknown = skill_castend_pos2_unknown; + skill->unitsetting1_unknown = skill_unitsetting1_unknown; + skill->unitsetting2_unknown = skill_unitsetting2_unknown; + skill->unit_onplace_unknown = skill_unit_onplace_unknown; + skill->check_condition_castbegin_off_unknown = skill_check_condition_castbegin_off_unknown; + skill->check_condition_castbegin_mount_unknown = skill_check_condition_castbegin_mount_unknown; + skill->check_condition_castbegin_madogear_unknown = skill_check_condition_castbegin_madogear_unknown; + skill->check_condition_castbegin_unknown = skill_check_condition_castbegin_unknown; + skill->check_condition_castend_unknown = skill_check_condition_castend_unknown; + skill->get_requirement_off_unknown = skill_get_requirement_off_unknown; + skill->get_requirement_item_unknown = skill_get_requirement_item_unknown; + skill->get_requirement_unknown = skill_get_requirement_unknown; } diff --git a/src/map/skill.h b/src/map/skill.h index f0a54b982..fa88bce99 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -16,9 +16,11 @@ /** * Declarations **/ +struct Damage; struct homun_data; struct map_session_data; struct mercenary_data; +struct unit_data; struct skill_unit; struct square; struct status_change_entry; @@ -2040,6 +2042,39 @@ struct skill_interface { void (*cooldown_save) (struct map_session_data * sd); int (*get_new_group_id) (void); bool (*check_shadowform) (struct block_list *bl, int64 damage, int hit); + + bool (*castend_damage_id_unknown) (struct block_list* src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_data *tstatus, struct status_change *sc); + void (*additional_effect_unknown) (struct block_list* src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int *dmg_lv, int64 *tick); + void (*counter_additional_effect_unknown) (struct block_list* src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int64 *tick); + void (*attack_combo1_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_change_entry *sce, int *combo); + void (*attack_combo2_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *combo); + void (*attack_display_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage); + int (*attack_copy_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + int (*attack_dir_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + void (*attack_blow_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir); + void (*attack_post_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + bool (*timerskill_dead_unknown) (struct block_list *src, struct unit_data *ud, struct skill_timerskill *skl); + void (*timerskill_target_unknown) (int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); + void (*timerskill_notarget_unknown) (int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); + void (*cleartimerskill_unknown) (int skill_id); + bool (*castend_id_unknown) (struct unit_data *ud, struct block_list *src, struct block_list *target); + bool (*castend_nodamage_id_dead_unknown) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + bool (*castend_nodamage_id_undead_unknown) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + bool (*castend_nodamage_id_mado_unknown) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + bool (*castend_nodamage_id_unknown) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + void (*castend_pos2_effect_unknown) (struct block_list* src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + bool (*castend_pos2_unknown) (struct block_list* src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + void (*unitsetting1_unknown) (struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *val1, int *val2, int *val3); + void (*unitsetting2_unknown) (struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *unit_flag, int *val1, int *val2, int *val3, struct skill_unit_group *group); + void (*unit_onplace_unknown) (struct skill_unit *src, struct block_list *bl, int64 *tick); + int (*check_condition_castbegin_off_unknown) (struct status_change *sc, uint16 *skill_id); + int (*check_condition_castbegin_mount_unknown) (struct status_change *sc, uint16 *skill_id); + int (*check_condition_castbegin_madogear_unknown) (struct status_change *sc, uint16 *skill_id); + int (*check_condition_castbegin_unknown) (struct status_change *sc, uint16 *skill_id); + void (*check_condition_castend_unknown) (struct map_session_data* sd, uint16 *skill_id, uint16 *skill_lv); + bool (*get_requirement_off_unknown) (struct status_change *sc, uint16 *skill_id); + int (*get_requirement_item_unknown) (struct status_change *sc, struct map_session_data* sd, uint16 *skill_id, uint16 *skill_lv, uint16 *idx, int *i); + void (*get_requirement_unknown) (struct status_change *sc, struct map_session_data* sd, uint16 *skill_id, uint16 *skill_lv, struct skill_condition *req); }; struct skill_interface *skill; diff --git a/src/map/unit.c b/src/map/unit.c index deb061f78..7f41f4709 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1599,6 +1599,8 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui ud->skill_lv = skill_lv; if( casttime > 0 ) { + if (src->id != target->id) // self-targeted skills shouldn't show different direction + unit->setdir(src, map->calc_dir(src, target->x, target->y)); ud->skilltimer = timer->add( tick+casttime, skill->castend_id, src->id, 0 ); if( sd && (pc->checkskill(sd,SA_FREECAST) > 0 || skill_id == LG_EXEEDBREAK) ) status_calc_bl(&sd->bl, SCB_SPEED); @@ -1742,6 +1744,7 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, ui // in official this is triggered even if no cast time. clif->skillcasting(src, src->id, 0, skill_x, skill_y, skill_id, skill->get_ele(skill_id, skill_lv), casttime); if( casttime > 0 ) { + unit->setdir(src, map->calc_dir(src, skill_x, skill_y)); ud->skilltimer = timer->add( tick+casttime, skill->castend_pos, src->id, 0 ); if( (sd && pc->checkskill(sd,SA_FREECAST) > 0) || skill_id == LG_EXEEDBREAK) status_calc_bl(&sd->bl, SCB_SPEED); @@ -2170,6 +2173,7 @@ int unit_attack_timer_sub(struct block_list* src, int tid, int64 tick) { } if(ud->state.attack_continue) { + unit->setdir(src, map->calc_dir(src, target->x, target->y)); if( src->type == BL_PC && battle_config.idletime_criteria & BCIDLE_ATTACK ) ((TBL_PC*)src)->idletime = sockt->last_tick; ud->attacktimer = timer->add(ud->attackabletime,unit->attack_timer,src->id,0); diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc index c2c6daf58..9090af876 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc @@ -165,6 +165,14 @@ struct { struct HPMHookPoint *HP_battle_get_enemy_area_post; struct HPMHookPoint *HP_battle_damage_area_pre; struct HPMHookPoint *HP_battle_damage_area_post; + struct HPMHookPoint *HP_battle_calc_masteryfix_unknown_pre; + struct HPMHookPoint *HP_battle_calc_masteryfix_unknown_post; + struct HPMHookPoint *HP_battle_calc_skillratio_magic_unknown_pre; + struct HPMHookPoint *HP_battle_calc_skillratio_magic_unknown_post; + struct HPMHookPoint *HP_battle_calc_skillratio_weapon_unknown_pre; + struct HPMHookPoint *HP_battle_calc_skillratio_weapon_unknown_post; + struct HPMHookPoint *HP_battle_calc_misc_attack_unknown_pre; + struct HPMHookPoint *HP_battle_calc_misc_attack_unknown_post; struct HPMHookPoint *HP_bg_init_pre; struct HPMHookPoint *HP_bg_init_post; struct HPMHookPoint *HP_bg_final_pre; @@ -4711,6 +4719,70 @@ struct { struct HPMHookPoint *HP_skill_get_new_group_id_post; struct HPMHookPoint *HP_skill_check_shadowform_pre; struct HPMHookPoint *HP_skill_check_shadowform_post; + struct HPMHookPoint *HP_skill_castend_damage_id_unknown_pre; + struct HPMHookPoint *HP_skill_castend_damage_id_unknown_post; + struct HPMHookPoint *HP_skill_additional_effect_unknown_pre; + struct HPMHookPoint *HP_skill_additional_effect_unknown_post; + struct HPMHookPoint *HP_skill_counter_additional_effect_unknown_pre; + struct HPMHookPoint *HP_skill_counter_additional_effect_unknown_post; + struct HPMHookPoint *HP_skill_attack_combo1_unknown_pre; + struct HPMHookPoint *HP_skill_attack_combo1_unknown_post; + struct HPMHookPoint *HP_skill_attack_combo2_unknown_pre; + struct HPMHookPoint *HP_skill_attack_combo2_unknown_post; + struct HPMHookPoint *HP_skill_attack_display_unknown_pre; + struct HPMHookPoint *HP_skill_attack_display_unknown_post; + struct HPMHookPoint *HP_skill_attack_copy_unknown_pre; + struct HPMHookPoint *HP_skill_attack_copy_unknown_post; + struct HPMHookPoint *HP_skill_attack_dir_unknown_pre; + struct HPMHookPoint *HP_skill_attack_dir_unknown_post; + struct HPMHookPoint *HP_skill_attack_blow_unknown_pre; + struct HPMHookPoint *HP_skill_attack_blow_unknown_post; + struct HPMHookPoint *HP_skill_attack_post_unknown_pre; + struct HPMHookPoint *HP_skill_attack_post_unknown_post; + struct HPMHookPoint *HP_skill_timerskill_dead_unknown_pre; + struct HPMHookPoint *HP_skill_timerskill_dead_unknown_post; + struct HPMHookPoint *HP_skill_timerskill_target_unknown_pre; + struct HPMHookPoint *HP_skill_timerskill_target_unknown_post; + struct HPMHookPoint *HP_skill_timerskill_notarget_unknown_pre; + struct HPMHookPoint *HP_skill_timerskill_notarget_unknown_post; + struct HPMHookPoint *HP_skill_cleartimerskill_unknown_pre; + struct HPMHookPoint *HP_skill_cleartimerskill_unknown_post; + struct HPMHookPoint *HP_skill_castend_id_unknown_pre; + struct HPMHookPoint *HP_skill_castend_id_unknown_post; + struct HPMHookPoint *HP_skill_castend_nodamage_id_dead_unknown_pre; + struct HPMHookPoint *HP_skill_castend_nodamage_id_dead_unknown_post; + struct HPMHookPoint *HP_skill_castend_nodamage_id_undead_unknown_pre; + struct HPMHookPoint *HP_skill_castend_nodamage_id_undead_unknown_post; + struct HPMHookPoint *HP_skill_castend_nodamage_id_mado_unknown_pre; + struct HPMHookPoint *HP_skill_castend_nodamage_id_mado_unknown_post; + struct HPMHookPoint *HP_skill_castend_nodamage_id_unknown_pre; + struct HPMHookPoint *HP_skill_castend_nodamage_id_unknown_post; + struct HPMHookPoint *HP_skill_castend_pos2_effect_unknown_pre; + struct HPMHookPoint *HP_skill_castend_pos2_effect_unknown_post; + struct HPMHookPoint *HP_skill_castend_pos2_unknown_pre; + struct HPMHookPoint *HP_skill_castend_pos2_unknown_post; + struct HPMHookPoint *HP_skill_unitsetting1_unknown_pre; + struct HPMHookPoint *HP_skill_unitsetting1_unknown_post; + struct HPMHookPoint *HP_skill_unitsetting2_unknown_pre; + struct HPMHookPoint *HP_skill_unitsetting2_unknown_post; + struct HPMHookPoint *HP_skill_unit_onplace_unknown_pre; + struct HPMHookPoint *HP_skill_unit_onplace_unknown_post; + struct HPMHookPoint *HP_skill_check_condition_castbegin_off_unknown_pre; + struct HPMHookPoint *HP_skill_check_condition_castbegin_off_unknown_post; + struct HPMHookPoint *HP_skill_check_condition_castbegin_mount_unknown_pre; + struct HPMHookPoint *HP_skill_check_condition_castbegin_mount_unknown_post; + struct HPMHookPoint *HP_skill_check_condition_castbegin_madogear_unknown_pre; + struct HPMHookPoint *HP_skill_check_condition_castbegin_madogear_unknown_post; + struct HPMHookPoint *HP_skill_check_condition_castbegin_unknown_pre; + struct HPMHookPoint *HP_skill_check_condition_castbegin_unknown_post; + struct HPMHookPoint *HP_skill_check_condition_castend_unknown_pre; + struct HPMHookPoint *HP_skill_check_condition_castend_unknown_post; + struct HPMHookPoint *HP_skill_get_requirement_off_unknown_pre; + struct HPMHookPoint *HP_skill_get_requirement_off_unknown_post; + struct HPMHookPoint *HP_skill_get_requirement_item_unknown_pre; + struct HPMHookPoint *HP_skill_get_requirement_item_unknown_post; + struct HPMHookPoint *HP_skill_get_requirement_unknown_pre; + struct HPMHookPoint *HP_skill_get_requirement_unknown_post; struct HPMHookPoint *HP_status_init_pre; struct HPMHookPoint *HP_status_init_post; struct HPMHookPoint *HP_status_final_pre; @@ -5250,6 +5322,14 @@ struct { int HP_battle_get_enemy_area_post; int HP_battle_damage_area_pre; int HP_battle_damage_area_post; + int HP_battle_calc_masteryfix_unknown_pre; + int HP_battle_calc_masteryfix_unknown_post; + int HP_battle_calc_skillratio_magic_unknown_pre; + int HP_battle_calc_skillratio_magic_unknown_post; + int HP_battle_calc_skillratio_weapon_unknown_pre; + int HP_battle_calc_skillratio_weapon_unknown_post; + int HP_battle_calc_misc_attack_unknown_pre; + int HP_battle_calc_misc_attack_unknown_post; int HP_bg_init_pre; int HP_bg_init_post; int HP_bg_final_pre; @@ -9796,6 +9876,70 @@ struct { int HP_skill_get_new_group_id_post; int HP_skill_check_shadowform_pre; int HP_skill_check_shadowform_post; + int HP_skill_castend_damage_id_unknown_pre; + int HP_skill_castend_damage_id_unknown_post; + int HP_skill_additional_effect_unknown_pre; + int HP_skill_additional_effect_unknown_post; + int HP_skill_counter_additional_effect_unknown_pre; + int HP_skill_counter_additional_effect_unknown_post; + int HP_skill_attack_combo1_unknown_pre; + int HP_skill_attack_combo1_unknown_post; + int HP_skill_attack_combo2_unknown_pre; + int HP_skill_attack_combo2_unknown_post; + int HP_skill_attack_display_unknown_pre; + int HP_skill_attack_display_unknown_post; + int HP_skill_attack_copy_unknown_pre; + int HP_skill_attack_copy_unknown_post; + int HP_skill_attack_dir_unknown_pre; + int HP_skill_attack_dir_unknown_post; + int HP_skill_attack_blow_unknown_pre; + int HP_skill_attack_blow_unknown_post; + int HP_skill_attack_post_unknown_pre; + int HP_skill_attack_post_unknown_post; + int HP_skill_timerskill_dead_unknown_pre; + int HP_skill_timerskill_dead_unknown_post; + int HP_skill_timerskill_target_unknown_pre; + int HP_skill_timerskill_target_unknown_post; + int HP_skill_timerskill_notarget_unknown_pre; + int HP_skill_timerskill_notarget_unknown_post; + int HP_skill_cleartimerskill_unknown_pre; + int HP_skill_cleartimerskill_unknown_post; + int HP_skill_castend_id_unknown_pre; + int HP_skill_castend_id_unknown_post; + int HP_skill_castend_nodamage_id_dead_unknown_pre; + int HP_skill_castend_nodamage_id_dead_unknown_post; + int HP_skill_castend_nodamage_id_undead_unknown_pre; + int HP_skill_castend_nodamage_id_undead_unknown_post; + int HP_skill_castend_nodamage_id_mado_unknown_pre; + int HP_skill_castend_nodamage_id_mado_unknown_post; + int HP_skill_castend_nodamage_id_unknown_pre; + int HP_skill_castend_nodamage_id_unknown_post; + int HP_skill_castend_pos2_effect_unknown_pre; + int HP_skill_castend_pos2_effect_unknown_post; + int HP_skill_castend_pos2_unknown_pre; + int HP_skill_castend_pos2_unknown_post; + int HP_skill_unitsetting1_unknown_pre; + int HP_skill_unitsetting1_unknown_post; + int HP_skill_unitsetting2_unknown_pre; + int HP_skill_unitsetting2_unknown_post; + int HP_skill_unit_onplace_unknown_pre; + int HP_skill_unit_onplace_unknown_post; + int HP_skill_check_condition_castbegin_off_unknown_pre; + int HP_skill_check_condition_castbegin_off_unknown_post; + int HP_skill_check_condition_castbegin_mount_unknown_pre; + int HP_skill_check_condition_castbegin_mount_unknown_post; + int HP_skill_check_condition_castbegin_madogear_unknown_pre; + int HP_skill_check_condition_castbegin_madogear_unknown_post; + int HP_skill_check_condition_castbegin_unknown_pre; + int HP_skill_check_condition_castbegin_unknown_post; + int HP_skill_check_condition_castend_unknown_pre; + int HP_skill_check_condition_castend_unknown_post; + int HP_skill_get_requirement_off_unknown_pre; + int HP_skill_get_requirement_off_unknown_post; + int HP_skill_get_requirement_item_unknown_pre; + int HP_skill_get_requirement_item_unknown_post; + int HP_skill_get_requirement_unknown_pre; + int HP_skill_get_requirement_unknown_post; int HP_status_init_pre; int HP_status_init_post; int HP_status_final_pre; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index 89ded9041..d83b398eb 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc @@ -87,6 +87,10 @@ struct HookingPointData HookingPoints[] = { { HP_POP(battle->config_adjust, HP_battle_config_adjust) }, { HP_POP(battle->get_enemy_area, HP_battle_get_enemy_area) }, { HP_POP(battle->damage_area, HP_battle_damage_area) }, + { HP_POP(battle->calc_masteryfix_unknown, HP_battle_calc_masteryfix_unknown) }, + { HP_POP(battle->calc_skillratio_magic_unknown, HP_battle_calc_skillratio_magic_unknown) }, + { HP_POP(battle->calc_skillratio_weapon_unknown, HP_battle_calc_skillratio_weapon_unknown) }, + { HP_POP(battle->calc_misc_attack_unknown, HP_battle_calc_misc_attack_unknown) }, /* bg */ { HP_POP(bg->init, HP_bg_init) }, { HP_POP(bg->final, HP_bg_final) }, @@ -2391,6 +2395,38 @@ struct HookingPointData HookingPoints[] = { { HP_POP(skill->cooldown_save, HP_skill_cooldown_save) }, { HP_POP(skill->get_new_group_id, HP_skill_get_new_group_id) }, { HP_POP(skill->check_shadowform, HP_skill_check_shadowform) }, + { HP_POP(skill->castend_damage_id_unknown, HP_skill_castend_damage_id_unknown) }, + { HP_POP(skill->additional_effect_unknown, HP_skill_additional_effect_unknown) }, + { HP_POP(skill->counter_additional_effect_unknown, HP_skill_counter_additional_effect_unknown) }, + { HP_POP(skill->attack_combo1_unknown, HP_skill_attack_combo1_unknown) }, + { HP_POP(skill->attack_combo2_unknown, HP_skill_attack_combo2_unknown) }, + { HP_POP(skill->attack_display_unknown, HP_skill_attack_display_unknown) }, + { HP_POP(skill->attack_copy_unknown, HP_skill_attack_copy_unknown) }, + { HP_POP(skill->attack_dir_unknown, HP_skill_attack_dir_unknown) }, + { HP_POP(skill->attack_blow_unknown, HP_skill_attack_blow_unknown) }, + { HP_POP(skill->attack_post_unknown, HP_skill_attack_post_unknown) }, + { HP_POP(skill->timerskill_dead_unknown, HP_skill_timerskill_dead_unknown) }, + { HP_POP(skill->timerskill_target_unknown, HP_skill_timerskill_target_unknown) }, + { HP_POP(skill->timerskill_notarget_unknown, HP_skill_timerskill_notarget_unknown) }, + { HP_POP(skill->cleartimerskill_unknown, HP_skill_cleartimerskill_unknown) }, + { HP_POP(skill->castend_id_unknown, HP_skill_castend_id_unknown) }, + { HP_POP(skill->castend_nodamage_id_dead_unknown, HP_skill_castend_nodamage_id_dead_unknown) }, + { HP_POP(skill->castend_nodamage_id_undead_unknown, HP_skill_castend_nodamage_id_undead_unknown) }, + { HP_POP(skill->castend_nodamage_id_mado_unknown, HP_skill_castend_nodamage_id_mado_unknown) }, + { HP_POP(skill->castend_nodamage_id_unknown, HP_skill_castend_nodamage_id_unknown) }, + { HP_POP(skill->castend_pos2_effect_unknown, HP_skill_castend_pos2_effect_unknown) }, + { HP_POP(skill->castend_pos2_unknown, HP_skill_castend_pos2_unknown) }, + { HP_POP(skill->unitsetting1_unknown, HP_skill_unitsetting1_unknown) }, + { HP_POP(skill->unitsetting2_unknown, HP_skill_unitsetting2_unknown) }, + { HP_POP(skill->unit_onplace_unknown, HP_skill_unit_onplace_unknown) }, + { HP_POP(skill->check_condition_castbegin_off_unknown, HP_skill_check_condition_castbegin_off_unknown) }, + { HP_POP(skill->check_condition_castbegin_mount_unknown, HP_skill_check_condition_castbegin_mount_unknown) }, + { HP_POP(skill->check_condition_castbegin_madogear_unknown, HP_skill_check_condition_castbegin_madogear_unknown) }, + { HP_POP(skill->check_condition_castbegin_unknown, HP_skill_check_condition_castbegin_unknown) }, + { HP_POP(skill->check_condition_castend_unknown, HP_skill_check_condition_castend_unknown) }, + { HP_POP(skill->get_requirement_off_unknown, HP_skill_get_requirement_off_unknown) }, + { HP_POP(skill->get_requirement_item_unknown, HP_skill_get_requirement_item_unknown) }, + { HP_POP(skill->get_requirement_unknown, HP_skill_get_requirement_unknown) }, /* status */ { HP_POP(status->init, HP_status_init) }, { HP_POP(status->final, HP_status_final) }, @@ -2586,4 +2622,4 @@ struct HookingPointData HookingPoints[] = { { HP_POP(vending->searchall, HP_vending_searchall) }, }; -int HookingPointsLenMax = 41; +int HookingPointsLenMax = 49; diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index ff08b8909..3249949e7 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc @@ -2217,6 +2217,110 @@ int HP_battle_damage_area(struct block_list *bl, va_list ap) { } return retVal___; } +void HP_battle_calc_masteryfix_unknown(struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int64 *damage, int *div, bool *left, bool *weapon) { + int hIndex = 0; + if( HPMHooks.count.HP_battle_calc_masteryfix_unknown_pre ) { + void (*preHookFunc) (struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int64 *damage, int *div, bool *left, bool *weapon); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_masteryfix_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_battle_calc_masteryfix_unknown_pre[hIndex].func; + preHookFunc(src, target, skill_id, skill_lv, damage, div, left, weapon); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.battle.calc_masteryfix_unknown(src, target, skill_id, skill_lv, damage, div, left, weapon); + } + if( HPMHooks.count.HP_battle_calc_masteryfix_unknown_post ) { + void (*postHookFunc) (struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int64 *damage, int *div, bool *left, bool *weapon); + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_masteryfix_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_battle_calc_masteryfix_unknown_post[hIndex].func; + postHookFunc(src, target, skill_id, skill_lv, damage, div, left, weapon); + } + } + return; +} +void HP_battle_calc_skillratio_magic_unknown(int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag) { + int hIndex = 0; + if( HPMHooks.count.HP_battle_calc_skillratio_magic_unknown_pre ) { + void (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_skillratio_magic_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_battle_calc_skillratio_magic_unknown_pre[hIndex].func; + preHookFunc(attack_type, src, target, skill_id, skill_lv, skillratio, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.battle.calc_skillratio_magic_unknown(attack_type, src, target, skill_id, skill_lv, skillratio, flag); + } + if( HPMHooks.count.HP_battle_calc_skillratio_magic_unknown_post ) { + void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_skillratio_magic_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_battle_calc_skillratio_magic_unknown_post[hIndex].func; + postHookFunc(attack_type, src, target, skill_id, skill_lv, skillratio, flag); + } + } + return; +} +void HP_battle_calc_skillratio_weapon_unknown(int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag) { + int hIndex = 0; + if( HPMHooks.count.HP_battle_calc_skillratio_weapon_unknown_pre ) { + void (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_skillratio_weapon_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_battle_calc_skillratio_weapon_unknown_pre[hIndex].func; + preHookFunc(attack_type, src, target, skill_id, skill_lv, skillratio, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.battle.calc_skillratio_weapon_unknown(attack_type, src, target, skill_id, skill_lv, skillratio, flag); + } + if( HPMHooks.count.HP_battle_calc_skillratio_weapon_unknown_post ) { + void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *skillratio, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_skillratio_weapon_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_battle_calc_skillratio_weapon_unknown_post[hIndex].func; + postHookFunc(attack_type, src, target, skill_id, skill_lv, skillratio, flag); + } + } + return; +} +void HP_battle_calc_misc_attack_unknown(struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *mflag, struct Damage *md) { + int hIndex = 0; + if( HPMHooks.count.HP_battle_calc_misc_attack_unknown_pre ) { + void (*preHookFunc) (struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *mflag, struct Damage *md); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_misc_attack_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_battle_calc_misc_attack_unknown_pre[hIndex].func; + preHookFunc(src, target, skill_id, skill_lv, mflag, md); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.battle.calc_misc_attack_unknown(src, target, skill_id, skill_lv, mflag, md); + } + if( HPMHooks.count.HP_battle_calc_misc_attack_unknown_post ) { + void (*postHookFunc) (struct block_list *src, struct block_list *target, uint16 *skill_id, uint16 *skill_lv, int *mflag, struct Damage *md); + for(hIndex = 0; hIndex < HPMHooks.count.HP_battle_calc_misc_attack_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_battle_calc_misc_attack_unknown_post[hIndex].func; + postHookFunc(src, target, skill_id, skill_lv, mflag, md); + } + } + return; +} /* bg */ void HP_bg_init(bool minimal) { int hIndex = 0; @@ -63364,6 +63468,854 @@ bool HP_skill_check_shadowform(struct block_list *bl, int64 damage, int hit) { } return retVal___; } +bool HP_skill_castend_damage_id_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_data *tstatus, struct status_change *sc) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_castend_damage_id_unknown_pre ) { + bool (*preHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_data *tstatus, struct status_change *sc); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_damage_id_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_damage_id_unknown_pre[hIndex].func; + retVal___ = preHookFunc(src, bl, skill_id, skill_lv, tick, flag, tstatus, sc); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.castend_damage_id_unknown(src, bl, skill_id, skill_lv, tick, flag, tstatus, sc); + } + if( HPMHooks.count.HP_skill_castend_damage_id_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_data *tstatus, struct status_change *sc); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_damage_id_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_damage_id_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, src, bl, skill_id, skill_lv, tick, flag, tstatus, sc); + } + } + return retVal___; +} +void HP_skill_additional_effect_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int *dmg_lv, int64 *tick) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_additional_effect_unknown_pre ) { + void (*preHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int *dmg_lv, int64 *tick); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_additional_effect_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_additional_effect_unknown_pre[hIndex].func; + preHookFunc(src, bl, skill_id, skill_lv, attack_type, dmg_lv, tick); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.additional_effect_unknown(src, bl, skill_id, skill_lv, attack_type, dmg_lv, tick); + } + if( HPMHooks.count.HP_skill_additional_effect_unknown_post ) { + void (*postHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int *dmg_lv, int64 *tick); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_additional_effect_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_additional_effect_unknown_post[hIndex].func; + postHookFunc(src, bl, skill_id, skill_lv, attack_type, dmg_lv, tick); + } + } + return; +} +void HP_skill_counter_additional_effect_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int64 *tick) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_counter_additional_effect_unknown_pre ) { + void (*preHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int64 *tick); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_counter_additional_effect_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_counter_additional_effect_unknown_pre[hIndex].func; + preHookFunc(src, bl, skill_id, skill_lv, attack_type, tick); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.counter_additional_effect_unknown(src, bl, skill_id, skill_lv, attack_type, tick); + } + if( HPMHooks.count.HP_skill_counter_additional_effect_unknown_post ) { + void (*postHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int64 *tick); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_counter_additional_effect_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_counter_additional_effect_unknown_post[hIndex].func; + postHookFunc(src, bl, skill_id, skill_lv, attack_type, tick); + } + } + return; +} +void HP_skill_attack_combo1_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_change_entry *sce, int *combo) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_attack_combo1_unknown_pre ) { + void (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_change_entry *sce, int *combo); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_combo1_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_attack_combo1_unknown_pre[hIndex].func; + preHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, sce, combo); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.attack_combo1_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, sce, combo); + } + if( HPMHooks.count.HP_skill_attack_combo1_unknown_post ) { + void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, struct status_change_entry *sce, int *combo); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_combo1_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_attack_combo1_unknown_post[hIndex].func; + postHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, sce, combo); + } + } + return; +} +void HP_skill_attack_combo2_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *combo) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_attack_combo2_unknown_pre ) { + void (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *combo); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_combo2_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_attack_combo2_unknown_pre[hIndex].func; + preHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, combo); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.attack_combo2_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, combo); + } + if( HPMHooks.count.HP_skill_attack_combo2_unknown_post ) { + void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *combo); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_combo2_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_attack_combo2_unknown_post[hIndex].func; + postHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, combo); + } + } + return; +} +void HP_skill_attack_display_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_attack_display_unknown_pre ) { + void (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_display_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_attack_display_unknown_pre[hIndex].func; + preHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.attack_display_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage); + } + if( HPMHooks.count.HP_skill_attack_display_unknown_post ) { + void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_display_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_attack_display_unknown_post[hIndex].func; + postHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage); + } + } + return; +} +int HP_skill_attack_copy_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_skill_attack_copy_unknown_pre ) { + int (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_copy_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_attack_copy_unknown_pre[hIndex].func; + retVal___ = preHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.attack_copy_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_attack_copy_unknown_post ) { + int (*postHookFunc) (int retVal___, int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_copy_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_attack_copy_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + } + return retVal___; +} +int HP_skill_attack_dir_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_skill_attack_dir_unknown_pre ) { + int (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_dir_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_attack_dir_unknown_pre[hIndex].func; + retVal___ = preHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.attack_dir_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_attack_dir_unknown_post ) { + int (*postHookFunc) (int retVal___, int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_dir_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_attack_dir_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + } + return retVal___; +} +void HP_skill_attack_blow_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_attack_blow_unknown_pre ) { + void (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_blow_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_attack_blow_unknown_pre[hIndex].func; + preHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage, dir); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.attack_blow_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage, dir); + } + if( HPMHooks.count.HP_skill_attack_blow_unknown_post ) { + void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_blow_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_attack_blow_unknown_post[hIndex].func; + postHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage, dir); + } + } + return; +} +void HP_skill_attack_post_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_attack_post_unknown_pre ) { + void (*preHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_post_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_attack_post_unknown_pre[hIndex].func; + preHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.attack_post_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_attack_post_unknown_post ) { + void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_post_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_attack_post_unknown_post[hIndex].func; + postHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag); + } + } + return; +} +bool HP_skill_timerskill_dead_unknown(struct block_list *src, struct unit_data *ud, struct skill_timerskill *skl) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_timerskill_dead_unknown_pre ) { + bool (*preHookFunc) (struct block_list *src, struct unit_data *ud, struct skill_timerskill *skl); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_timerskill_dead_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_timerskill_dead_unknown_pre[hIndex].func; + retVal___ = preHookFunc(src, ud, skl); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.timerskill_dead_unknown(src, ud, skl); + } + if( HPMHooks.count.HP_skill_timerskill_dead_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct block_list *src, struct unit_data *ud, struct skill_timerskill *skl); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_timerskill_dead_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_timerskill_dead_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, src, ud, skl); + } + } + return retVal___; +} +void HP_skill_timerskill_target_unknown(int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_timerskill_target_unknown_pre ) { + void (*preHookFunc) (int *tid, int64 *tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_timerskill_target_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_timerskill_target_unknown_pre[hIndex].func; + preHookFunc(&tid, &tick, src, target, ud, skl); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.timerskill_target_unknown(tid, tick, src, target, ud, skl); + } + if( HPMHooks.count.HP_skill_timerskill_target_unknown_post ) { + void (*postHookFunc) (int *tid, int64 *tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_timerskill_target_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_timerskill_target_unknown_post[hIndex].func; + postHookFunc(&tid, &tick, src, target, ud, skl); + } + } + return; +} +void HP_skill_timerskill_notarget_unknown(int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_timerskill_notarget_unknown_pre ) { + void (*preHookFunc) (int *tid, int64 *tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_timerskill_notarget_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_timerskill_notarget_unknown_pre[hIndex].func; + preHookFunc(&tid, &tick, src, target, ud, skl); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.timerskill_notarget_unknown(tid, tick, src, target, ud, skl); + } + if( HPMHooks.count.HP_skill_timerskill_notarget_unknown_post ) { + void (*postHookFunc) (int *tid, int64 *tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_timerskill_notarget_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_timerskill_notarget_unknown_post[hIndex].func; + postHookFunc(&tid, &tick, src, target, ud, skl); + } + } + return; +} +void HP_skill_cleartimerskill_unknown(int skill_id) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_cleartimerskill_unknown_pre ) { + void (*preHookFunc) (int *skill_id); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_cleartimerskill_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_cleartimerskill_unknown_pre[hIndex].func; + preHookFunc(&skill_id); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.cleartimerskill_unknown(skill_id); + } + if( HPMHooks.count.HP_skill_cleartimerskill_unknown_post ) { + void (*postHookFunc) (int *skill_id); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_cleartimerskill_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_cleartimerskill_unknown_post[hIndex].func; + postHookFunc(&skill_id); + } + } + return; +} +bool HP_skill_castend_id_unknown(struct unit_data *ud, struct block_list *src, struct block_list *target) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_castend_id_unknown_pre ) { + bool (*preHookFunc) (struct unit_data *ud, struct block_list *src, struct block_list *target); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_id_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_id_unknown_pre[hIndex].func; + retVal___ = preHookFunc(ud, src, target); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.castend_id_unknown(ud, src, target); + } + if( HPMHooks.count.HP_skill_castend_id_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct unit_data *ud, struct block_list *src, struct block_list *target); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_id_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_id_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, ud, src, target); + } + } + return retVal___; +} +bool HP_skill_castend_nodamage_id_dead_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_castend_nodamage_id_dead_unknown_pre ) { + bool (*preHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_dead_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_dead_unknown_pre[hIndex].func; + retVal___ = preHookFunc(src, bl, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.castend_nodamage_id_dead_unknown(src, bl, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_castend_nodamage_id_dead_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_dead_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_dead_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, src, bl, skill_id, skill_lv, tick, flag); + } + } + return retVal___; +} +bool HP_skill_castend_nodamage_id_undead_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_castend_nodamage_id_undead_unknown_pre ) { + bool (*preHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_undead_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_undead_unknown_pre[hIndex].func; + retVal___ = preHookFunc(src, bl, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.castend_nodamage_id_undead_unknown(src, bl, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_castend_nodamage_id_undead_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_undead_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_undead_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, src, bl, skill_id, skill_lv, tick, flag); + } + } + return retVal___; +} +bool HP_skill_castend_nodamage_id_mado_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_castend_nodamage_id_mado_unknown_pre ) { + bool (*preHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_mado_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_mado_unknown_pre[hIndex].func; + retVal___ = preHookFunc(src, bl, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.castend_nodamage_id_mado_unknown(src, bl, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_castend_nodamage_id_mado_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_mado_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_mado_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, src, bl, skill_id, skill_lv, tick, flag); + } + } + return retVal___; +} +bool HP_skill_castend_nodamage_id_unknown(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_castend_nodamage_id_unknown_pre ) { + bool (*preHookFunc) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_unknown_pre[hIndex].func; + retVal___ = preHookFunc(src, bl, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.castend_nodamage_id_unknown(src, bl, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_castend_nodamage_id_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_nodamage_id_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_nodamage_id_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, src, bl, skill_id, skill_lv, tick, flag); + } + } + return retVal___; +} +void HP_skill_castend_pos2_effect_unknown(struct block_list *src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_castend_pos2_effect_unknown_pre ) { + void (*preHookFunc) (struct block_list *src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_pos2_effect_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_pos2_effect_unknown_pre[hIndex].func; + preHookFunc(src, x, y, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.castend_pos2_effect_unknown(src, x, y, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_castend_pos2_effect_unknown_post ) { + void (*postHookFunc) (struct block_list *src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_pos2_effect_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_pos2_effect_unknown_post[hIndex].func; + postHookFunc(src, x, y, skill_id, skill_lv, tick, flag); + } + } + return; +} +bool HP_skill_castend_pos2_unknown(struct block_list *src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_castend_pos2_unknown_pre ) { + bool (*preHookFunc) (struct block_list *src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_pos2_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_castend_pos2_unknown_pre[hIndex].func; + retVal___ = preHookFunc(src, x, y, skill_id, skill_lv, tick, flag); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.castend_pos2_unknown(src, x, y, skill_id, skill_lv, tick, flag); + } + if( HPMHooks.count.HP_skill_castend_pos2_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct block_list *src, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_castend_pos2_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_castend_pos2_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, src, x, y, skill_id, skill_lv, tick, flag); + } + } + return retVal___; +} +void HP_skill_unitsetting1_unknown(struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *val1, int *val2, int *val3) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_unitsetting1_unknown_pre ) { + void (*preHookFunc) (struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *val1, int *val2, int *val3); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_unitsetting1_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_unitsetting1_unknown_pre[hIndex].func; + preHookFunc(src, skill_id, skill_lv, x, y, flag, val1, val2, val3); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.unitsetting1_unknown(src, skill_id, skill_lv, x, y, flag, val1, val2, val3); + } + if( HPMHooks.count.HP_skill_unitsetting1_unknown_post ) { + void (*postHookFunc) (struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *val1, int *val2, int *val3); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_unitsetting1_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_unitsetting1_unknown_post[hIndex].func; + postHookFunc(src, skill_id, skill_lv, x, y, flag, val1, val2, val3); + } + } + return; +} +void HP_skill_unitsetting2_unknown(struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *unit_flag, int *val1, int *val2, int *val3, struct skill_unit_group *group) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_unitsetting2_unknown_pre ) { + void (*preHookFunc) (struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *unit_flag, int *val1, int *val2, int *val3, struct skill_unit_group *group); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_unitsetting2_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_unitsetting2_unknown_pre[hIndex].func; + preHookFunc(src, skill_id, skill_lv, x, y, flag, unit_flag, val1, val2, val3, group); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.unitsetting2_unknown(src, skill_id, skill_lv, x, y, flag, unit_flag, val1, val2, val3, group); + } + if( HPMHooks.count.HP_skill_unitsetting2_unknown_post ) { + void (*postHookFunc) (struct block_list *src, uint16 *skill_id, uint16 *skill_lv, int16 *x, int16 *y, int *flag, int *unit_flag, int *val1, int *val2, int *val3, struct skill_unit_group *group); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_unitsetting2_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_unitsetting2_unknown_post[hIndex].func; + postHookFunc(src, skill_id, skill_lv, x, y, flag, unit_flag, val1, val2, val3, group); + } + } + return; +} +void HP_skill_unit_onplace_unknown(struct skill_unit *src, struct block_list *bl, int64 *tick) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_unit_onplace_unknown_pre ) { + void (*preHookFunc) (struct skill_unit *src, struct block_list *bl, int64 *tick); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_unit_onplace_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_unit_onplace_unknown_pre[hIndex].func; + preHookFunc(src, bl, tick); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.unit_onplace_unknown(src, bl, tick); + } + if( HPMHooks.count.HP_skill_unit_onplace_unknown_post ) { + void (*postHookFunc) (struct skill_unit *src, struct block_list *bl, int64 *tick); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_unit_onplace_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_unit_onplace_unknown_post[hIndex].func; + postHookFunc(src, bl, tick); + } + } + return; +} +int HP_skill_check_condition_castbegin_off_unknown(struct status_change *sc, uint16 *skill_id) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_skill_check_condition_castbegin_off_unknown_pre ) { + int (*preHookFunc) (struct status_change *sc, uint16 *skill_id); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_off_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_off_unknown_pre[hIndex].func; + retVal___ = preHookFunc(sc, skill_id); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.check_condition_castbegin_off_unknown(sc, skill_id); + } + if( HPMHooks.count.HP_skill_check_condition_castbegin_off_unknown_post ) { + int (*postHookFunc) (int retVal___, struct status_change *sc, uint16 *skill_id); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_off_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_off_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sc, skill_id); + } + } + return retVal___; +} +int HP_skill_check_condition_castbegin_mount_unknown(struct status_change *sc, uint16 *skill_id) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_skill_check_condition_castbegin_mount_unknown_pre ) { + int (*preHookFunc) (struct status_change *sc, uint16 *skill_id); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_mount_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_mount_unknown_pre[hIndex].func; + retVal___ = preHookFunc(sc, skill_id); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.check_condition_castbegin_mount_unknown(sc, skill_id); + } + if( HPMHooks.count.HP_skill_check_condition_castbegin_mount_unknown_post ) { + int (*postHookFunc) (int retVal___, struct status_change *sc, uint16 *skill_id); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_mount_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_mount_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sc, skill_id); + } + } + return retVal___; +} +int HP_skill_check_condition_castbegin_madogear_unknown(struct status_change *sc, uint16 *skill_id) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_skill_check_condition_castbegin_madogear_unknown_pre ) { + int (*preHookFunc) (struct status_change *sc, uint16 *skill_id); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_madogear_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_madogear_unknown_pre[hIndex].func; + retVal___ = preHookFunc(sc, skill_id); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.check_condition_castbegin_madogear_unknown(sc, skill_id); + } + if( HPMHooks.count.HP_skill_check_condition_castbegin_madogear_unknown_post ) { + int (*postHookFunc) (int retVal___, struct status_change *sc, uint16 *skill_id); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_madogear_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_madogear_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sc, skill_id); + } + } + return retVal___; +} +int HP_skill_check_condition_castbegin_unknown(struct status_change *sc, uint16 *skill_id) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_skill_check_condition_castbegin_unknown_pre ) { + int (*preHookFunc) (struct status_change *sc, uint16 *skill_id); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_unknown_pre[hIndex].func; + retVal___ = preHookFunc(sc, skill_id); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.check_condition_castbegin_unknown(sc, skill_id); + } + if( HPMHooks.count.HP_skill_check_condition_castbegin_unknown_post ) { + int (*postHookFunc) (int retVal___, struct status_change *sc, uint16 *skill_id); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castbegin_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_check_condition_castbegin_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sc, skill_id); + } + } + return retVal___; +} +void HP_skill_check_condition_castend_unknown(struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_check_condition_castend_unknown_pre ) { + void (*preHookFunc) (struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castend_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_check_condition_castend_unknown_pre[hIndex].func; + preHookFunc(sd, skill_id, skill_lv); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.check_condition_castend_unknown(sd, skill_id, skill_lv); + } + if( HPMHooks.count.HP_skill_check_condition_castend_unknown_post ) { + void (*postHookFunc) (struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_castend_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_check_condition_castend_unknown_post[hIndex].func; + postHookFunc(sd, skill_id, skill_lv); + } + } + return; +} +bool HP_skill_get_requirement_off_unknown(struct status_change *sc, uint16 *skill_id) { + int hIndex = 0; + bool retVal___ = false; + if( HPMHooks.count.HP_skill_get_requirement_off_unknown_pre ) { + bool (*preHookFunc) (struct status_change *sc, uint16 *skill_id); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_requirement_off_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_get_requirement_off_unknown_pre[hIndex].func; + retVal___ = preHookFunc(sc, skill_id); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.get_requirement_off_unknown(sc, skill_id); + } + if( HPMHooks.count.HP_skill_get_requirement_off_unknown_post ) { + bool (*postHookFunc) (bool retVal___, struct status_change *sc, uint16 *skill_id); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_requirement_off_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_get_requirement_off_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sc, skill_id); + } + } + return retVal___; +} +int HP_skill_get_requirement_item_unknown(struct status_change *sc, struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv, uint16 *idx, int *i) { + int hIndex = 0; + int retVal___ = 0; + if( HPMHooks.count.HP_skill_get_requirement_item_unknown_pre ) { + int (*preHookFunc) (struct status_change *sc, struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv, uint16 *idx, int *i); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_requirement_item_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_get_requirement_item_unknown_pre[hIndex].func; + retVal___ = preHookFunc(sc, sd, skill_id, skill_lv, idx, i); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.skill.get_requirement_item_unknown(sc, sd, skill_id, skill_lv, idx, i); + } + if( HPMHooks.count.HP_skill_get_requirement_item_unknown_post ) { + int (*postHookFunc) (int retVal___, struct status_change *sc, struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv, uint16 *idx, int *i); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_requirement_item_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_get_requirement_item_unknown_post[hIndex].func; + retVal___ = postHookFunc(retVal___, sc, sd, skill_id, skill_lv, idx, i); + } + } + return retVal___; +} +void HP_skill_get_requirement_unknown(struct status_change *sc, struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv, struct skill_condition *req) { + int hIndex = 0; + if( HPMHooks.count.HP_skill_get_requirement_unknown_pre ) { + void (*preHookFunc) (struct status_change *sc, struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv, struct skill_condition *req); + *HPMforce_return = false; + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_requirement_unknown_pre; hIndex++ ) { + preHookFunc = HPMHooks.list.HP_skill_get_requirement_unknown_pre[hIndex].func; + preHookFunc(sc, sd, skill_id, skill_lv, req); + } + if( *HPMforce_return ) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.skill.get_requirement_unknown(sc, sd, skill_id, skill_lv, req); + } + if( HPMHooks.count.HP_skill_get_requirement_unknown_post ) { + void (*postHookFunc) (struct status_change *sc, struct map_session_data *sd, uint16 *skill_id, uint16 *skill_lv, struct skill_condition *req); + for(hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_requirement_unknown_post; hIndex++ ) { + postHookFunc = HPMHooks.list.HP_skill_get_requirement_unknown_post[hIndex].func; + postHookFunc(sc, sd, skill_id, skill_lv, req); + } + } + return; +} /* status */ int HP_status_init(bool minimal) { int hIndex = 0; |