Browse Source

* Fixed bug: http://rathena.org/board/tracker/issue-8345-specialeffect-target-self-doesnt-work
* Fixed bug: http://rathena.org/board/tracker/issue-8169-hiding
* Fixed bug: http://rathena.org/board/tracker/issue-8366-egg-type-monster-issue
* Fixed bug: http://rathena.org/board/tracker/issue-8406-item-bonus-not-working
* Added fix with mob_hp update when mob get healed (Hercules merge)

Lilith 11 years ago
parent
commit
a053ccea3f
14 changed files with 96 additions and 69 deletions
  1. 12 15
      db/const.txt
  2. 2 2
      db/pre-re/mob_db.txt
  3. 2 2
      db/re/mob_db.txt
  4. 0 2
      doc/item_bonus.txt
  5. 2 2
      sql-files/mob_db.sql
  6. 2 2
      sql-files/mob_db_re.sql
  7. 47 18
      src/map/battle.c
  8. 8 0
      src/map/clif.c
  9. 3 3
      src/map/map.h
  10. 15 1
      src/map/mob.c
  11. 0 20
      src/map/pc.c
  12. 1 1
      src/map/pc.h
  13. 0 1
      src/map/status.c
  14. 2 0
      src/map/status.h

+ 12 - 15
db/const.txt

@@ -559,8 +559,8 @@ bSPDrainValue	1080
 bWeaponAtk	1081
 bWeaponAtk	1081
 bWeaponAtkRate	1082
 bWeaponAtkRate	1082
 bDelayrate	1083
 bDelayrate	1083
-bHPDrainRateRace	1084
-bSPDrainRateRace	1085
+bHpDrainValueRace	1084
+bSpDrainValueRace	1085
 bIgnoreMdefRaceRate	1086
 bIgnoreMdefRaceRate	1086
 bIgnoreDefRaceRate	1087
 bIgnoreDefRaceRate	1087
 bSkillHeal2	1088
 bSkillHeal2	1088
@@ -596,9 +596,9 @@ bHPLossRate	2023
 bAddRace2	2024
 bAddRace2	2024
 bHPGainValue	2025
 bHPGainValue	2025
 bSubSize	2026
 bSubSize	2026
-bHPDrainValueRace	2027
+bHPDrainValueClass	2027
 bAddItemHealRate	2028
 bAddItemHealRate	2028
-bSPDrainValueRace	2029
+bSPDrainValueClass	2029
 bExpAddRace	2030
 bExpAddRace	2030
 bSPGainRace	2031
 bSPGainRace	2031
 bSubRace2	2032
 bSubRace2	2032
@@ -640,9 +640,7 @@ bAddClass	2064
 bSubClass	2065
 bSubClass	2065
 bMagicAddClass	2066
 bMagicAddClass	2066
 bWeaponComaClass	2067
 bWeaponComaClass	2067
-bHpDrainValueClass	2068
-bSpDrainValueClass	2069
-bIgnoreMdefClassRate	2070
+bIgnoreMdefClassRate	2068
 
 
 EQI_HEAD_TOP	1
 EQI_HEAD_TOP	1
 EQI_ARMOR	2
 EQI_ARMOR	2
@@ -2655,14 +2653,13 @@ GUILD_AREA_WOS	20
 GUILD_NOBG	21
 GUILD_NOBG	21
 DUEL	22
 DUEL	22
 DUEL_WOS	23
 DUEL_WOS	23
-CHAT_MAINCHAT	24
-SELF	25
-BG	26
-BG_WOS	27
-BG_SAMEMAP	28
-BG_SAMEMAP_WOS	29
-BG_AREA	30
-BG_AREA_WOS	31
+SELF	24
+BG	25
+BG_WOS	26
+BG_SAMEMAP	27
+BG_SAMEMAP_WOS	28
+BG_AREA	29
+BG_AREA_WOS	30
 
 
 ARCH_MERC_GUILD	0
 ARCH_MERC_GUILD	0
 SPEAR_MERC_GUILD	1
 SPEAR_MERC_GUILD	1

+ 2 - 2
db/pre-re/mob_db.txt

@@ -748,7 +748,7 @@
 1718,NOVUS_,Novus,Novus,43,5830,0,1411,1100,1,314,414,24,28,1,60,43,39,119,43,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1
 1718,NOVUS_,Novus,Novus,43,5830,0,1411,1100,1,314,414,24,28,1,60,43,39,119,43,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1
 1719,DETALE,Detale,Detardeurus,90,960000,0,291850,123304,3,4560,5548,66,59,100,90,30,136,140,56,10,12,2,9,67,0x37B5,250,432,936,360,145925,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1
 1719,DETALE,Detale,Detardeurus,90,960000,0,291850,123304,3,4560,5548,66,59,100,90,30,136,140,56,10,12,2,9,67,0x37B5,250,432,936,360,145925,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1
 1720,HYDRO,Hydro,Hydrolancer,89,308230,0,83450,2480,3,2554,3910,52,62,1,96,110,86,94,32,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1
 1720,HYDRO,Hydro,Hydrolancer,89,308230,0,83450,2480,3,2554,3910,52,62,1,96,110,86,94,32,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1
-1721,DRAGON_EGG,Dragon Egg,Dragon Egg,43,18322,0,6740,0,0,1,2,78,60,1,1,56,67,1,63,10,12,1,9,40,0x0,1000,24,0,0,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1
+1721,DRAGON_EGG,Dragon Egg,Dragon Egg,43,18322,0,6740,0,0,1,2,78,60,1,1,56,67,1,63,10,12,1,9,40,0x0,1000,24,1,1,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1
 1722,EVENT_JAKK,Jakk,Jakk,99,10310,0,103,100,1,115,182,5,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000
 1722,EVENT_JAKK,Jakk,Jakk,99,10310,0,103,100,1,115,182,5,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000
 1723,A_SHECIL,Shecil Damon,Cecil Damon,82,30000,0,0,0,14,600,900,25,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 1723,A_SHECIL,Shecil Damon,Cecil Damon,82,30000,0,0,0,14,600,900,25,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 1724,A_POTON_CANON,Photon Cannon,Photon Cannon,66,8000,0,0,0,9,1000,1300,10,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 1724,A_POTON_CANON,Photon Cannon,Photon Cannon,66,8000,0,0,0,9,1000,1300,10,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -1067,7 +1067,7 @@
 //2012,E_ZOMBIE,Zombie,Zombie,15,99999,0,50,33,1,335,395,100,10,1,8,7,0,60,0,10,12,1,1,29,0x120,150,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //2012,E_ZOMBIE,Zombie,Zombie,15,99999,0,50,33,1,335,395,100,10,1,8,7,0,60,0,10,12,1,1,29,0x120,150,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 // Another World (13.2)
 // Another World (13.2)
 2013,DRACO,Draco,Draco,82,18300,0,6100,4100,1,410,710,10,5,1,23,30,34,62,2,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,0,0,0,0,0,0,4444,1
 2013,DRACO,Draco,Draco,82,18300,0,6100,4100,1,410,710,10,5,1,23,30,34,62,2,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,0,0,0,0,0,0,4444,1
-2014,DRACO_EGG,Draco Egg,Draco Egg,67,9822,0,1200,1600,0,1,2,56,40,1,1,56,34,1,63,10,12,1,9,82,0x0,1000,24,0,0,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+2014,DRACO_EGG,Draco Egg,Draco Egg,67,9822,0,1200,1600,0,1,2,56,40,1,1,56,34,1,63,10,12,1,9,82,0x0,1000,24,1,1,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 2015,PINGUICULA_D,Dark Pinguicula,Dark Pinguicula,83,8780,0,7740,5200,1,600,1450,15,5,1,23,22,12,89,2,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,0,0,0,0,0,0,0,0,0,0
 2015,PINGUICULA_D,Dark Pinguicula,Dark Pinguicula,83,8780,0,7740,5200,1,600,1450,15,5,1,23,22,12,89,2,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,0,0,0,0,0,0,0,0,0,0
 2016,AQUA_ELEMENTAL,Aqua Elemental,Aqua Elemental,83,33220,0,5430,15300,1,400,1600,8,12,1,23,19,87,77,2,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,0,0,0,0,0,0,0,0,0,0,4443,1
 2016,AQUA_ELEMENTAL,Aqua Elemental,Aqua Elemental,83,33220,0,5430,15300,1,400,1600,8,12,1,23,19,87,77,2,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,0,0,0,0,0,0,0,0,0,0,4443,1
 2017,RATA,Rata,Rata,107,216600,0,70012,34000,1,8000,15000,32,52,1,51,22,132,99,15,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,0,0,0,0,0,0,0,0,0,0,0,0
 2017,RATA,Rata,Rata,107,216600,0,70012,34000,1,8000,15000,32,52,1,51,22,132,99,15,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,0,0,0,0,0,0,0,0,0,0,0,0

+ 2 - 2
db/re/mob_db.txt

@@ -774,7 +774,7 @@
 1718,NOVUS_,Novus,Novus,84,5028,1,1080,1215,1,266,314,88,28,53,43,43,55,90,58,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1
 1718,NOVUS_,Novus,Novus,84,5028,1,1080,1215,1,266,314,88,28,53,43,43,55,90,58,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1
 1719,DETALE,Detale,Detardeurus,135,6005000,1,4320000,3420000,3,4072,6734,364,166,165,153,171,136,185,72,10,12,2,9,67,0x37B5,250,432,936,360,2160000,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1
 1719,DETALE,Detale,Detardeurus,135,6005000,1,4320000,3420000,3,4072,6734,364,166,165,153,171,136,185,72,10,12,2,9,67,0x37B5,250,432,936,360,2160000,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1
 1720,HYDRO,Hydro,Hydrolancer,121,41500,0,6285,4463,3,760,910,92,58,120,72,67,66,88,58,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1
 1720,HYDRO,Hydro,Hydrolancer,121,41500,0,6285,4463,3,760,910,92,58,120,72,67,66,88,58,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1
-1721,DRAGON_EGG,Dragon Egg,Dragon Egg,119,20990,1,2862,2147,0,503,653,172,85,84,59,85,40,118,65,10,12,1,9,40,0x0,1000,24,0,0,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1
+1721,DRAGON_EGG,Dragon Egg,Dragon Egg,119,20990,1,2862,2147,0,503,653,172,85,84,59,85,40,118,65,10,12,1,9,40,0x0,1000,24,1,1,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1
 1722,EVENT_JAKK,Jakk,Jakk,99,10310,0,93,90,1,115,182,8,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000
 1722,EVENT_JAKK,Jakk,Jakk,99,10310,0,93,90,1,115,182,8,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000
 1723,A_SHECIL,Shecil Damon,Cecil Damon,82,30000,0,0,0,14,600,900,40,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 1723,A_SHECIL,Shecil Damon,Cecil Damon,82,30000,0,0,0,14,600,900,40,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 1724,A_POTON_CANON,Photon Cannon,Photon Cannon,66,8000,0,0,0,9,1000,1300,16,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 1724,A_POTON_CANON,Photon Cannon,Photon Cannon,66,8000,0,0,0,9,1000,1300,16,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -1112,7 +1112,7 @@
 
 
 // Enter The Unknown (13.2)
 // Enter The Unknown (13.2)
 2013,DRACO,Draco,Draco,114,20099,1,1995,1205,1,556,666,56,3,21,58,47,34,71,66,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,2399,10,0,0,0,0,4444,1
 2013,DRACO,Draco,Draco,114,20099,1,1995,1205,1,556,666,56,3,21,58,47,34,71,66,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,2399,10,0,0,0,0,4444,1
-2014,DRACO_EGG,Draco Egg,Draco Egg,101,100000,1,2000,1500,0,1,2,384,30,1,1,135,92,1,98,10,12,1,9,82,0x0,1000,24,0,0,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4471,1
+2014,DRACO_EGG,Draco Egg,Draco Egg,101,100000,1,2000,1500,0,1,2,384,30,1,1,135,92,1,98,10,12,1,9,82,0x0,1000,24,1,1,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4471,1
 2015,PINGUICULA_D,Dark Pinguicula,Dark Pinguicula,113,17002,1,2101,2419,1,251,640,59,35,89,55,55,95,66,12,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,7939,1500,2148,10,0,0,0,0,4468,1
 2015,PINGUICULA_D,Dark Pinguicula,Dark Pinguicula,113,17002,1,2101,2419,1,251,640,59,35,89,55,55,95,66,12,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,7939,1500,2148,10,0,0,0,0,4468,1
 2016,AQUA_ELEMENTAL,Aqua Elemental,Aqua Elemental,121,33209,1,4155,4155,1,616,1066,23,8,95,61,25,25,86,40,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,2787,10,0,0,0,0,0,0,0,0,4443,1
 2016,AQUA_ELEMENTAL,Aqua Elemental,Aqua Elemental,121,33209,1,4155,4155,1,616,1066,23,8,95,61,25,25,86,40,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,2787,10,0,0,0,0,0,0,0,0,4443,1
 2017,RATA,Rata,Rata,131,58299,1,7787,6119,1,720,931,81,46,101,74,71,51,98,56,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,6224,10,0,0,0,0,0,0,0,0,4459,1
 2017,RATA,Rata,Rata,131,58299,1,7787,6119,1,720,931,81,46,101,74,71,51,98,56,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,6224,10,0,0,0,0,0,0,0,0,4459,1

+ 0 - 2
doc/item_bonus.txt

@@ -365,8 +365,6 @@ bonus2 bWeaponAtk,x,n;			Adds n ATK when weapon of type x is equipped.
 bonus2 bWeaponAtkRate,x,n;		Adds n% damage to normal attacks when weapon of type x is equipped.
 bonus2 bWeaponAtkRate,x,n;		Adds n% damage to normal attacks when weapon of type x is equipped.
 					x:	see doc/item_db.txt -> view -> weapons for possible values
 					x:	see doc/item_db.txt -> view -> weapons for possible values
 bonus bDelayrate,n;			Increases skill delay by n%.
 bonus bDelayrate,n;			Increases skill delay by n%.
-bonus3 bHPDrainRateRace,r,n,x;		Adds a n/10% chance to receive x% of damage dealt as HP from a monster of race r with normal attack.
-bonus3 bSPDrainRateRace,r,n,x;		Adds a n/10% chance to receive x% of damage dealt as SP from a monster of race r with normal attack.
 bonus3 bAddEffOnSkill,s,x,n;		Adds a n/100% chance to cause status change x on enemy when using skill s (supports skill names)
 bonus3 bAddEffOnSkill,s,x,n;		Adds a n/100% chance to cause status change x on enemy when using skill s (supports skill names)
 bonus4 bAddEffOnSkill,s,x,n,t;		Adds a n/100% chance to cause status change x when using skill s (supports skill names)
 bonus4 bAddEffOnSkill,s,x,n,t;		Adds a n/100% chance to cause status change x when using skill s (supports skill names)
 					t:	ATF_SELF   = causes status change to oneself
 					t:	ATF_SELF   = causes status change to oneself

+ 2 - 2
sql-files/mob_db.sql

@@ -814,7 +814,7 @@ REPLACE INTO `mob_db` VALUES (1717,'FERUS_','Ferus','Ferus',69,21182,0,6750,2230
 REPLACE INTO `mob_db` VALUES (1718,'NOVUS_','Novus','Novus',43,5830,0,1411,1100,1,314,414,24,28,1,60,43,39,119,43,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1);
 REPLACE INTO `mob_db` VALUES (1718,'NOVUS_','Novus','Novus',43,5830,0,1411,1100,1,314,414,24,28,1,60,43,39,119,43,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1);
 REPLACE INTO `mob_db` VALUES (1719,'DETALE','Detale','Detardeurus',90,960000,0,291850,123304,3,4560,5548,66,59,100,90,30,136,140,56,10,12,2,9,67,0x37B5,250,432,936,360,145925,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1);
 REPLACE INTO `mob_db` VALUES (1719,'DETALE','Detale','Detardeurus',90,960000,0,291850,123304,3,4560,5548,66,59,100,90,30,136,140,56,10,12,2,9,67,0x37B5,250,432,936,360,145925,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1);
 REPLACE INTO `mob_db` VALUES (1720,'HYDRO','Hydro','Hydrolancer',89,308230,0,83450,2480,3,2554,3910,52,62,1,96,110,86,94,32,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1);
 REPLACE INTO `mob_db` VALUES (1720,'HYDRO','Hydro','Hydrolancer',89,308230,0,83450,2480,3,2554,3910,52,62,1,96,110,86,94,32,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1);
-REPLACE INTO `mob_db` VALUES (1721,'DRAGON_EGG','Dragon Egg','Dragon Egg',43,18322,0,6740,0,0,1,2,78,60,1,1,56,67,1,63,10,12,1,9,40,0x0,1000,24,0,0,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1);
+REPLACE INTO `mob_db` VALUES (1721,'DRAGON_EGG','Dragon Egg','Dragon Egg',43,18322,0,6740,0,0,1,2,78,60,1,1,56,67,1,63,10,12,1,9,40,0x0,1000,24,1,1,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1);
 REPLACE INTO `mob_db` VALUES (1722,'EVENT_JAKK','Jakk','Jakk',99,10310,0,103,100,1,115,182,5,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000);
 REPLACE INTO `mob_db` VALUES (1722,'EVENT_JAKK','Jakk','Jakk',99,10310,0,103,100,1,115,182,5,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000);
 REPLACE INTO `mob_db` VALUES (1723,'A_SHECIL','Shecil Damon','Cecil Damon',82,30000,0,0,0,14,600,900,25,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db` VALUES (1723,'A_SHECIL','Shecil Damon','Cecil Damon',82,30000,0,0,0,14,600,900,25,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db` VALUES (1724,'A_POTON_CANON','Photon Cannon','Photon Cannon',66,8000,0,0,0,9,1000,1300,10,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db` VALUES (1724,'A_POTON_CANON','Photon Cannon','Photon Cannon',66,8000,0,0,0,9,1000,1300,10,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
@@ -1133,7 +1133,7 @@ REPLACE INTO `mob_db` VALUES (2010,'G_MAJORUROS','Ox','Ox',66,500000,0,10,10,1,1
 #REPLACE INTO `mob_db` VALUES (2012,'E_ZOMBIE','Zombie','Zombie',15,99999,0,50,33,1,335,395,100,10,1,8,7,0,60,0,10,12,1,1,29,0x120,150,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 #REPLACE INTO `mob_db` VALUES (2012,'E_ZOMBIE','Zombie','Zombie',15,99999,0,50,33,1,335,395,100,10,1,8,7,0,60,0,10,12,1,1,29,0x120,150,2612,912,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 # Another World (13.2)
 # Another World (13.2)
 REPLACE INTO `mob_db` VALUES (2013,'DRACO','Draco','Draco',82,18300,0,6100,4100,1,410,710,10,5,1,23,30,34,62,2,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,0,0,0,0,0,0,4444,1);
 REPLACE INTO `mob_db` VALUES (2013,'DRACO','Draco','Draco',82,18300,0,6100,4100,1,410,710,10,5,1,23,30,34,62,2,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,0,0,0,0,0,0,4444,1);
-REPLACE INTO `mob_db` VALUES (2014,'DRACO_EGG','Draco Egg','Draco Egg',67,9822,0,1200,1600,0,1,2,56,40,1,1,56,34,1,63,10,12,1,9,82,0x0,1000,24,0,0,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (2014,'DRACO_EGG','Draco Egg','Draco Egg',67,9822,0,1200,1600,0,1,2,56,40,1,1,56,34,1,63,10,12,1,9,82,0x0,1000,24,1,1,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db` VALUES (2015,'PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',83,8780,0,7740,5200,1,600,1450,15,5,1,23,22,12,89,2,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db` VALUES (2015,'PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',83,8780,0,7740,5200,1,600,1450,15,5,1,23,22,12,89,2,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db` VALUES (2016,'AQUA_ELEMENTAL','Aqua Elemental','Aqua Elemental',83,33220,0,5430,15300,1,400,1600,8,12,1,23,19,87,77,2,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,0,0,0,0,0,0,0,0,0,0,4443,1);
 REPLACE INTO `mob_db` VALUES (2016,'AQUA_ELEMENTAL','Aqua Elemental','Aqua Elemental',83,33220,0,5430,15300,1,400,1600,8,12,1,23,19,87,77,2,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,0,0,0,0,0,0,0,0,0,0,4443,1);
 REPLACE INTO `mob_db` VALUES (2017,'RATA','Rata','Rata',107,216600,0,70012,34000,1,8000,15000,32,52,1,51,22,132,99,15,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db` VALUES (2017,'RATA','Rata','Rata',107,216600,0,70012,34000,1,8000,15000,32,52,1,51,22,132,99,15,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,0,0,0,0,0,0,0,0,0,0,0,0);

+ 2 - 2
sql-files/mob_db_re.sql

@@ -840,7 +840,7 @@ REPLACE INTO `mob_db_re` VALUES (1717,'FERUS_','Ferus','Ferus',126,39054,1,4185,
 REPLACE INTO `mob_db_re` VALUES (1718,'NOVUS_','Novus','Novus',84,5028,1,1080,1215,1,266,314,88,28,53,43,43,55,90,58,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1);
 REPLACE INTO `mob_db_re` VALUES (1718,'NOVUS_','Novus','Novus',84,5028,1,1080,1215,1,266,314,88,28,53,43,43,55,90,58,10,12,0,9,20,0x3885,100,252,816,480,0,0,0,0,0,0,0,508,2000,7053,1035,0,0,1036,589,0,0,0,0,0,0,0,0,0,0,4382,1);
 REPLACE INTO `mob_db_re` VALUES (1719,'DETALE','Detale','Detardeurus',135,6005000,1,4320000,3420000,3,4072,6734,364,166,165,153,171,136,185,72,10,12,2,9,67,0x37B5,250,432,936,360,2160000,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1);
 REPLACE INTO `mob_db_re` VALUES (1719,'DETALE','Detale','Detardeurus',135,6005000,1,4320000,3420000,3,4072,6734,364,166,165,153,171,136,185,72,10,12,2,9,67,0x37B5,250,432,936,360,2160000,617,5500,603,5000,732,2000,2649,1000,2648,1000,7444,5000,7451,3589,12080,1000,1417,100,5002,500,0,0,0,0,4386,1);
 REPLACE INTO `mob_db_re` VALUES (1720,'HYDRO','Hydro','Hydrolancer',121,41500,0,6285,4463,3,760,910,92,58,120,72,67,66,88,58,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1);
 REPLACE INTO `mob_db_re` VALUES (1720,'HYDRO','Hydro','Hydrolancer',121,41500,0,6285,4463,3,760,910,92,58,120,72,67,66,88,58,10,12,2,9,47,0x37B5,160,140,672,432,0,0,0,0,0,0,0,7123,4000,1035,4000,7443,3880,5126,500,5127,500,12085,300,5124,500,0,0,0,0,4384,1);
-REPLACE INTO `mob_db_re` VALUES (1721,'DRAGON_EGG','Dragon Egg','Dragon Egg',119,20990,1,2862,2147,0,503,653,172,85,84,59,85,40,118,65,10,12,1,9,40,0x0,1000,24,0,0,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1);
+REPLACE INTO `mob_db_re` VALUES (1721,'DRAGON_EGG','Dragon Egg','Dragon Egg',119,20990,1,2862,2147,0,503,653,172,85,84,59,85,40,118,65,10,12,1,9,40,0x0,1000,24,1,1,0,0,0,0,0,0,0,985,5,7032,100,731,10,732,5,718,10,720,10,728,10,0,0,0,0,4385,1);
 REPLACE INTO `mob_db_re` VALUES (1722,'EVENT_JAKK','Jakk','Jakk',99,10310,0,93,90,1,115,182,8,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000);
 REPLACE INTO `mob_db_re` VALUES (1722,'EVENT_JAKK','Jakk','Jakk',99,10310,0,93,90,1,115,182,8,11,1,28,18,13,35,45,10,12,1,0,43,0x81,240,1180,480,648,0,0,0,0,0,0,0,7225,1000,1062,1000,535,1000,0,0,0,0,0,0,0,0,0,0,0,0,5134,10000);
 REPLACE INTO `mob_db_re` VALUES (1723,'A_SHECIL','Shecil Damon','Cecil Damon',82,30000,0,0,0,14,600,900,40,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (1723,'A_SHECIL','Shecil Damon','Cecil Damon',82,30000,0,0,0,14,600,900,40,15,1,145,27,32,134,80,10,12,1,7,64,0x3695,180,1008,384,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (1724,'A_POTON_CANON','Photon Cannon','Photon Cannon',66,8000,0,0,0,9,1000,1300,16,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
 REPLACE INTO `mob_db_re` VALUES (1724,'A_POTON_CANON','Photon Cannon','Photon Cannon',66,8000,0,0,0,9,1000,1300,16,30,1,40,25,20,80,80,10,12,1,0,40,0x84,300,1536,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
@@ -1178,7 +1178,7 @@ REPLACE INTO `mob_db_re` VALUES (2010,'G_MAJORUROS','Ox','Ox',66,500000,0,9,9,1,
 
 
 # Enter The Unknown (13.2)
 # Enter The Unknown (13.2)
 REPLACE INTO `mob_db_re` VALUES (2013,'DRACO','Draco','Draco',114,20099,1,1995,1205,1,556,666,56,3,21,58,47,34,71,66,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,2399,10,0,0,0,0,4444,1);
 REPLACE INTO `mob_db_re` VALUES (2013,'DRACO','Draco','Draco',114,20099,1,1995,1205,1,556,666,56,3,21,58,47,34,71,66,10,12,1,9,22,0x1089,250,576,960,504,0,0,0,0,0,0,0,6073,3000,7123,100,1035,100,1037,1000,1036,1000,518,500,2399,10,0,0,0,0,4444,1);
-REPLACE INTO `mob_db_re` VALUES (2014,'DRACO_EGG','Draco Egg','Draco Egg',101,100000,1,2000,1500,0,1,2,384,30,1,1,135,92,1,98,10,12,1,9,82,0x0,1000,24,0,0,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4471,1);
+REPLACE INTO `mob_db_re` VALUES (2014,'DRACO_EGG','Draco Egg','Draco Egg',101,100000,1,2000,1500,0,1,2,384,30,1,1,135,92,1,98,10,12,1,9,82,0x0,1000,24,1,1,0,0,0,0,0,0,0,7032,5000,5015,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4471,1);
 REPLACE INTO `mob_db_re` VALUES (2015,'PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',113,17002,1,2101,2419,1,251,640,59,35,89,55,55,95,66,12,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,7939,1500,2148,10,0,0,0,0,4468,1);
 REPLACE INTO `mob_db_re` VALUES (2015,'PINGUICULA_D','Dark Pinguicula','Dark Pinguicula',113,17002,1,2101,2419,1,251,640,59,35,89,55,55,95,66,12,10,12,1,3,45,0x308D,290,1426,600,360,0,0,0,0,0,0,0,7100,5000,7198,2000,7188,3000,972,10,6086,1000,7939,1500,2148,10,0,0,0,0,4468,1);
 REPLACE INTO `mob_db_re` VALUES (2016,'AQUA_ELEMENTAL','Aqua Elemental','Aqua Elemental',121,33209,1,4155,4155,1,616,1066,23,8,95,61,25,25,86,40,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,2787,10,0,0,0,0,0,0,0,0,4443,1);
 REPLACE INTO `mob_db_re` VALUES (2016,'AQUA_ELEMENTAL','Aqua Elemental','Aqua Elemental',121,33209,1,4155,4155,1,616,1066,23,8,95,61,25,25,86,40,10,12,2,0,81,0x3095,230,504,960,576,0,0,0,0,0,0,0,6075,1000,7326,5000,12353,100,0,0,2787,10,0,0,0,0,0,0,0,0,4443,1);
 REPLACE INTO `mob_db_re` VALUES (2017,'RATA','Rata','Rata',131,58299,1,7787,6119,1,720,931,81,46,101,74,71,51,98,56,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,6224,10,0,0,0,0,0,0,0,0,4459,1);
 REPLACE INTO `mob_db_re` VALUES (2017,'RATA','Rata','Rata',131,58299,1,7787,6119,1,720,931,81,46,101,74,71,51,98,56,10,12,1,7,62,0x3295,150,792,540,420,0,0,0,0,0,0,0,12346,5000,1026,5000,6089,500,1548,100,6224,10,0,0,0,0,0,0,0,0,4459,1);

+ 47 - 18
src/map/battle.c

@@ -5976,40 +5976,65 @@ void battle_drain(TBL_PC *sd, struct block_list *tbl, int64 rdamage, int64 ldama
 		if (i < 2) { wd = &sd->right_weapon; damage = &rdamage; }
 		if (i < 2) { wd = &sd->right_weapon; damage = &rdamage; }
 		else { wd = &sd->left_weapon; damage = &ldamage; }
 		else { wd = &sd->left_weapon; damage = &ldamage; }
 		if (*damage <= 0) continue;
 		if (*damage <= 0) continue;
-		//First and Third iterations: race, other two boss/normal state
-		if( i == 1 || i == 3 )
-		{
-			hp = wd->hp_drain_class[class_].value;
+		if( i == 1 || i == 3 ) {
+			hp = wd->hp_drain_class[class_].value + wd->hp_drain_class[CLASS_ALL].value;
 			if (wd->hp_drain_class[class_].rate)
 			if (wd->hp_drain_class[class_].rate)
 				hp += battle_calc_drain(*damage, wd->hp_drain_class[class_].rate, wd->hp_drain_class[class_].per);
 				hp += battle_calc_drain(*damage, wd->hp_drain_class[class_].rate, wd->hp_drain_class[class_].per);
+			if (wd->hp_drain_class[CLASS_ALL].rate)
+				hp += battle_calc_drain(*damage, wd->hp_drain_class[CLASS_ALL].rate, wd->hp_drain_class[CLASS_ALL].per);
 
 
-			sp = wd->sp_drain_class[class_].value;
+			sp = wd->sp_drain_class[class_].value + wd->sp_drain_class[CLASS_ALL].value;
 			if (wd->sp_drain_class[class_].rate)
 			if (wd->sp_drain_class[class_].rate)
 				sp += battle_calc_drain(*damage, wd->sp_drain_class[class_].rate, wd->sp_drain_class[class_].per);
 				sp += battle_calc_drain(*damage, wd->sp_drain_class[class_].rate, wd->sp_drain_class[class_].per);
+			if (wd->sp_drain_class[CLASS_ALL].rate)
+				sp += battle_calc_drain(*damage, wd->sp_drain_class[CLASS_ALL].rate, wd->sp_drain_class[CLASS_ALL].per);
+
+			if( hp ) {
+				if( wd->hp_drain_class[class_].type )
+					rhp += hp;
+				if( wd->hp_drain_class[CLASS_ALL].type )
+					rhp += hp;
+				thp += hp;
+			}
 
 
-			if( hp && wd->hp_drain_class[class_].type )
-				rhp += hp;
-			if( sp && wd->sp_drain_class[class_].type )
-				rsp += sp;
+			if( sp ) {
+				if( wd->sp_drain_class[class_].type )
+					rsp += sp;
+				if( wd->sp_drain_class[CLASS_ALL].type )
+					rsp += sp;
+				tsp += sp;
+			}
 		} else {
 		} else {
-			hp = wd->hp_drain_race[race].value;
+			hp = wd->hp_drain_race[race].value + wd->hp_drain_race[RC_ALL].value;
 			if (wd->hp_drain_race[race].rate)
 			if (wd->hp_drain_race[race].rate)
 				hp += battle_calc_drain(*damage, wd->hp_drain_race[race].rate, wd->hp_drain_race[race].per);
 				hp += battle_calc_drain(*damage, wd->hp_drain_race[race].rate, wd->hp_drain_race[race].per);
+			if (wd->hp_drain_race[RC_ALL].rate)
+				hp += battle_calc_drain(*damage, wd->hp_drain_race[RC_ALL].rate, wd->hp_drain_race[RC_ALL].per);
 
 
-			sp = wd->sp_drain_race[race].value;
+			sp = wd->sp_drain_race[race].value + wd->sp_drain_race[RC_ALL].value;
 			if (wd->sp_drain_race[race].rate)
 			if (wd->sp_drain_race[race].rate)
 				sp += battle_calc_drain(*damage, wd->sp_drain_race[race].rate, wd->sp_drain_race[race].per);
 				sp += battle_calc_drain(*damage, wd->sp_drain_race[race].rate, wd->sp_drain_race[race].per);
+			if (wd->sp_drain_race[RC_ALL].rate)
+				sp += battle_calc_drain(*damage, wd->sp_drain_race[RC_ALL].rate, wd->sp_drain_race[RC_ALL].per);
+
+			if( hp ) {
+				if( wd->hp_drain_race[race].type )
+					rhp += hp;
+				if( wd->hp_drain_race[RC_ALL].type )
+					rhp += hp;
+				thp += hp;
+			}
 
 
-			if( hp && wd->hp_drain_race[race].type )
-				rhp += hp;
-			if( sp && wd->sp_drain_race[race].type)
-				rsp += sp;
+			if( sp ) {
+				if( wd->sp_drain_race[race].type )
+					rsp += sp;
+				if( wd->sp_drain_race[RC_ALL].type )
+					rsp += sp;
+				tsp += sp;
+			}
 		}
 		}
 	}
 	}
 
 
-	thp += hp;
-	tsp += sp;
-
 	if (sd->bonus.sp_vanish_rate && rnd()%1000 < sd->bonus.sp_vanish_rate)
 	if (sd->bonus.sp_vanish_rate && rnd()%1000 < sd->bonus.sp_vanish_rate)
 		status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->bonus.sp_vanish_per, false);
 		status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->bonus.sp_vanish_per, false);
 
 
@@ -6019,8 +6044,12 @@ void battle_drain(TBL_PC *sd, struct block_list *tbl, int64 rdamage, int64 ldama
 
 
 	if( sd->sp_gain_race_attack[race] )
 	if( sd->sp_gain_race_attack[race] )
 		tsp += sd->sp_gain_race_attack[race];
 		tsp += sd->sp_gain_race_attack[race];
+	if( sd->sp_gain_race_attack[RC_ALL] )
+		tsp += sd->sp_gain_race_attack[RC_ALL];
 	if( sd->hp_gain_race_attack[race] )
 	if( sd->hp_gain_race_attack[race] )
 		thp += sd->hp_gain_race_attack[race];
 		thp += sd->hp_gain_race_attack[race];
+	if( sd->hp_gain_race_attack[RC_ALL] )
+		thp += sd->hp_gain_race_attack[RC_ALL];
 
 
 	if (!thp && !tsp) return;
 	if (!thp && !tsp) return;
 
 

+ 8 - 0
src/map/clif.c

@@ -1345,6 +1345,10 @@ int clif_spawn(struct block_list *bl)
 				if( sd->talisman[i] > 0 )
 				if( sd->talisman[i] > 0 )
 					clif_talisman(sd, i);
 					clif_talisman(sd, i);
 			}
 			}
+			for( i = SC_SPHERE_1; i <= SC_SPHERE_5; i++ ) {
+				if( sd->sc.data[i] )
+					clif_status_change(bl,StatusIconChangeTable[i],1,0,sd->sc.data[i]->val1,sd->sc.data[i]->val2,0);
+			}
 		#ifdef NEW_CARTS
 		#ifdef NEW_CARTS
 			if( sd->sc.data[SC_PUSH_CART] )
 			if( sd->sc.data[SC_PUSH_CART] )
 				clif_status_load_notick(&sd->bl, SI_ON_PUSH_CART, 2, sd->sc.data[SC_PUSH_CART]->val1, 0, 0);
 				clif_status_load_notick(&sd->bl, SI_ON_PUSH_CART, 2, sd->sc.data[SC_PUSH_CART]->val1, 0, 0);
@@ -4152,6 +4156,10 @@ static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_d
 		if( dstsd->talisman[i] > 0 )
 		if( dstsd->talisman[i] > 0 )
 			clif_talisman_single(sd->fd, dstsd, i);
 			clif_talisman_single(sd->fd, dstsd, i);
 	}
 	}
+	for( i = SC_SPHERE_1; i <= SC_SPHERE_5; i++ ) {
+		if( dstsd->sc.data[i] )
+			clif_status_load_single(sd->fd,dstsd->bl.id,StatusIconChangeTable[i],1,dstsd->sc.data[i]->val1,dstsd->sc.data[i]->val2,0);
+	}
 	if( dstsd->sc.option&OPTION_MOUNTING ) {
 	if( dstsd->sc.option&OPTION_MOUNTING ) {
 		//New Mounts are not complaint to the original method, so we gotta tell this guy that I'm mounting.
 		//New Mounts are not complaint to the original method, so we gotta tell this guy that I'm mounting.
 		clif_status_load_single(sd->fd,dstsd->bl.id,SI_ALL_RIDING,2,1,0,0);
 		clif_status_load_single(sd->fd,dstsd->bl.id,SI_ALL_RIDING,2,1,0,0);

+ 3 - 3
src/map/map.h

@@ -431,7 +431,7 @@ enum _sp {
 	SP_NO_KNOCKBACK,SP_CLASSCHANGE, // 1077-1078
 	SP_NO_KNOCKBACK,SP_CLASSCHANGE, // 1077-1078
 	SP_HP_DRAIN_VALUE,SP_SP_DRAIN_VALUE, // 1079-1080
 	SP_HP_DRAIN_VALUE,SP_SP_DRAIN_VALUE, // 1079-1080
 	SP_WEAPON_ATK,SP_WEAPON_ATK_RATE, // 1081-1082
 	SP_WEAPON_ATK,SP_WEAPON_ATK_RATE, // 1081-1082
-	SP_DELAYRATE,SP_HP_DRAIN_RATE_RACE,SP_SP_DRAIN_RATE_RACE, // 1083-1085
+	SP_DELAYRATE,SP_HP_DRAIN_VALUE_RACE, SP_SP_DRAIN_VALUE_RACE, // 1083-1085
 	SP_IGNORE_MDEF_RACE_RATE,SP_IGNORE_DEF_RACE_RATE,SP_SKILL_HEAL2,SP_ADDEFF_ONSKILL, //1086-1089
 	SP_IGNORE_MDEF_RACE_RATE,SP_IGNORE_DEF_RACE_RATE,SP_SKILL_HEAL2,SP_ADDEFF_ONSKILL, //1086-1089
 	SP_ADD_HEAL_RATE,SP_ADD_HEAL2_RATE, SP_EQUIP_ATK, //1090-1092
 	SP_ADD_HEAL_RATE,SP_ADD_HEAL2_RATE, SP_EQUIP_ATK, //1090-1092
 
 
@@ -442,7 +442,7 @@ enum _sp {
 	SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017
 	SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017
 	SP_SKILL_ATK, SP_UNSTRIPABLE, SP_AUTOSPELL_ONSKILL, // 2018-2020
 	SP_SKILL_ATK, SP_UNSTRIPABLE, SP_AUTOSPELL_ONSKILL, // 2018-2020
 	SP_SP_GAIN_VALUE, SP_HP_REGEN_RATE, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025
 	SP_SP_GAIN_VALUE, SP_HP_REGEN_RATE, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025
-	SP_SUBSIZE, SP_HP_DRAIN_VALUE_RACE, SP_ADD_ITEM_HEAL_RATE, SP_SP_DRAIN_VALUE_RACE, SP_EXP_ADDRACE,	// 2026-2030
+	SP_SUBSIZE, SP_HP_DRAIN_VALUE_CLASS, SP_ADD_ITEM_HEAL_RATE, SP_SP_DRAIN_VALUE_CLASS, SP_EXP_ADDRACE,	// 2026-2030
 	SP_SP_GAIN_RACE, SP_SUBRACE2, SP_UNBREAKABLE_SHOES,	// 2031-2033
 	SP_SP_GAIN_RACE, SP_SUBRACE2, SP_UNBREAKABLE_SHOES,	// 2031-2033
 	SP_UNSTRIPABLE_WEAPON,SP_UNSTRIPABLE_ARMOR,SP_UNSTRIPABLE_HELM,SP_UNSTRIPABLE_SHIELD,  // 2034-2037
 	SP_UNSTRIPABLE_WEAPON,SP_UNSTRIPABLE_ARMOR,SP_UNSTRIPABLE_HELM,SP_UNSTRIPABLE_SHIELD,  // 2034-2037
 	SP_INTRAVISION, SP_ADD_MONSTER_DROP_ITEMGROUP, SP_SP_LOSS_RATE, // 2038-2040
 	SP_INTRAVISION, SP_ADD_MONSTER_DROP_ITEMGROUP, SP_SP_LOSS_RATE, // 2038-2040
@@ -453,7 +453,7 @@ enum _sp {
 	SP_DEF_SET,SP_MDEF_SET,SP_HP_VANISH_RATE,  //2059-2061
 	SP_DEF_SET,SP_MDEF_SET,SP_HP_VANISH_RATE,  //2059-2061
 
 
 	SP_IGNORE_DEF_CLASS, SP_DEF_RATIO_ATK_CLASS, SP_ADDCLASS, SP_SUBCLASS, SP_MAGIC_ADDCLASS, //2062-2066
 	SP_IGNORE_DEF_CLASS, SP_DEF_RATIO_ATK_CLASS, SP_ADDCLASS, SP_SUBCLASS, SP_MAGIC_ADDCLASS, //2062-2066
-	SP_WEAPON_COMA_CLASS, SP_HP_DRAIN_VALUE_CLASS, SP_SP_DRAIN_VALUE_CLASS, SP_IGNORE_MDEF_CLASS_RATE //2067-2070
+	SP_WEAPON_COMA_CLASS, SP_IGNORE_MDEF_CLASS_RATE //2067-2068
 };
 };
 
 
 enum _look {
 enum _look {

+ 15 - 1
src/map/mob.c

@@ -1641,7 +1641,10 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
 
 
 		if(tbl->type == BL_PC)
 		if(tbl->type == BL_PC)
 			mob_log_damage(md, tbl, 0); //Log interaction (counts as 'attacker' for the exp bonus)
 			mob_log_damage(md, tbl, 0); //Log interaction (counts as 'attacker' for the exp bonus)
-		unit_attack(&md->bl,tbl->id,1);
+		if( !(md->sc.option&OPTION_HIDE) )
+			unit_attack(&md->bl,tbl->id,1);
+		else
+			mobskill_use(md, tick, -1);
 		return true;
 		return true;
 	}
 	}
 
 
@@ -2828,6 +2831,17 @@ void mob_heal(struct mob_data *md,unsigned int heal)
 {
 {
 	if (battle_config.show_mob_info&3)
 	if (battle_config.show_mob_info&3)
 		clif_charnameack (0, &md->bl);
 		clif_charnameack (0, &md->bl);
+#if PACKETVER >= 20120404
+	if( !(md->status.mode&MD_BOSS) ){
+		int i;
+		for(i = 0; i < DAMAGELOG_SIZE; i++)// must show hp bar to all char who already hit the mob.
+			if( md->dmglog[i].id ) {
+				struct map_session_data *sd = map_charid2sd(md->dmglog[i].id);
+				if( sd && check_distance_bl(&md->bl, &sd->bl, AREA_SIZE) ) // check if in range
+					clif_monster_hp_bar(md, sd->fd);
+			}
+	}
+#endif
 }
 }
 
 
 /*==========================================
 /*==========================================

+ 0 - 20
src/map/pc.c

@@ -3422,26 +3422,6 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
 			sd->left_weapon.sp_drain_class[CLASS_BOSS].type = val;
 			sd->left_weapon.sp_drain_class[CLASS_BOSS].type = val;
 		}
 		}
 		break;
 		break;
-	case SP_HP_DRAIN_RATE_RACE:
-		if(!sd->state.lr_flag) {
-			sd->right_weapon.hp_drain_race[type2].rate += type3;
-			sd->right_weapon.hp_drain_race[type2].per += val;
-		}
-		else if(sd->state.lr_flag == 1) {
-			sd->left_weapon.hp_drain_race[type2].rate += type3;
-			sd->left_weapon.hp_drain_race[type2].per += val;
-		}
-		break;
-	case SP_SP_DRAIN_RATE_RACE:
-		if(!sd->state.lr_flag) {
-			sd->right_weapon.sp_drain_race[type2].rate += type3;
-			sd->right_weapon.sp_drain_race[type2].per += val;
-		}
-		else if(sd->state.lr_flag == 1) {
-			sd->left_weapon.sp_drain_race[type2].rate += type3;
-			sd->left_weapon.sp_drain_race[type2].per += val;
-		}
-		break;
 	case SP_ADD_MONSTER_DROP_ITEMGROUP:
 	case SP_ADD_MONSTER_DROP_ITEMGROUP:
 		if (sd->state.lr_flag != 2)
 		if (sd->state.lr_flag != 2)
 			pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), 0, type2, -1, 1<<type3, val);
 			pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), 0, type2, -1, 1<<type3, val);

+ 1 - 1
src/map/pc.h

@@ -83,7 +83,7 @@ struct weapon_data {
 		short per;
 		short per;
 		short value;
 		short value;
 		unsigned type:1;
 		unsigned type:1;
-	} hp_drain_race[RC_ALL], sp_drain_race[RC_ALL], hp_drain_class[CLASS_ALL], sp_drain_class[CLASS_ALL];
+	} hp_drain_race[RC_MAX], sp_drain_race[RC_MAX], hp_drain_class[CLASS_MAX], sp_drain_class[CLASS_MAX];
 
 
 	struct {
 	struct {
 		short class_, rate;
 		short class_, rate;

+ 0 - 1
src/map/status.c

@@ -65,7 +65,6 @@ int current_equip_card_id; /// To prevent card-stacking (from jA) [Skotlex]
 // We need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only to avoid cards exploits
 // We need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only to avoid cards exploits
 
 
 static sc_type SkillStatusChangeTable[MAX_SKILL];  /// skill  -> status
 static sc_type SkillStatusChangeTable[MAX_SKILL];  /// skill  -> status
-static int StatusIconChangeTable[SC_MAX];          /// status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated)
 static unsigned int StatusChangeFlagTable[SC_MAX]; /// status -> flags
 static unsigned int StatusChangeFlagTable[SC_MAX]; /// status -> flags
 static int StatusSkillChangeTable[SC_MAX];         /// status -> skill
 static int StatusSkillChangeTable[SC_MAX];         /// status -> skill
 static int StatusRelevantBLTypes[SI_MAX];          /// "icon" -> enum bl_type (for clif_status_change to identify for which bl types to send packets)
 static int StatusRelevantBLTypes[SI_MAX];          /// "icon" -> enum bl_type (for clif_status_change to identify for which bl types to send packets)

+ 2 - 0
src/map/status.h

@@ -1826,6 +1826,8 @@ int status_sc2skill(sc_type sc);
 unsigned int status_sc2scb_flag(sc_type sc);
 unsigned int status_sc2scb_flag(sc_type sc);
 int status_type2relevant_bl_types(int type);
 int status_type2relevant_bl_types(int type);
 
 
+int StatusIconChangeTable[SC_MAX];          /// status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated)
+
 int status_damage(struct block_list *src,struct block_list *target,int64 dhp,int64 dsp, int walkdelay, int flag);
 int status_damage(struct block_list *src,struct block_list *target,int64 dhp,int64 dsp, int walkdelay, int flag);
 //Define for standard HP damage attacks.
 //Define for standard HP damage attacks.
 #define status_fix_damage(src, target, hp, walkdelay) status_damage(src, target, hp, 0, walkdelay, 0)
 #define status_fix_damage(src, target, hp, walkdelay) status_damage(src, target, hp, 0, walkdelay, 0)