Updated this code like AndMetal suggested, so it uses the bonuses code and can stack, etc.
Code:
Index: bonuses.cpp
===================================================================
--- bonuses.cpp (revision 1713)
+++ bonuses.cpp (working copy)
@@ -1206,8 +1206,11 @@
newbon->Accuracy = effect_value;
break;
}
-
-
+ case SE_MaxHPChange:
+ {
+ newbon->MaxHPChange += effect_value;
+ break;
+ }
}
}
}
Index: client_mods.cpp
===================================================================
--- client_mods.cpp (revision 1713)
+++ client_mods.cpp (working copy)
@@ -240,17 +240,7 @@
max_hp += GroupLeadershipAAHealthEnhancement();
- int slot = GetBuffSlotFromType(SE_MaxHPChange);
- if(slot >= 0)
- {
- for(int i = 0; i < EFFECT_COUNT; i++)
- {
- if (spells[buffs[slot].spellid].effectid[i] == SE_MaxHPChange)
- {
- max_hp += max_hp * spells[buffs[slot].spellid].base[i] / 10000;
- }
- }
- }
+ max_hp += max_hp * (spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000;
if (cur_hp > max_hp)
cur_hp = max_hp;
Index: mob.cpp
===================================================================
--- mob.cpp (revision 1713)
+++ mob.cpp (working copy)
@@ -605,19 +605,10 @@
sint32 Mob::CalcMaxHP()
{
- max_hp = (base_hp + itembonuses.HP + spellbonuses.HP);
+ max_hp = (base_hp + itembonuses.HP + spellbonuses.HP);
- int slot = GetBuffSlotFromType(SE_MaxHPChange);
- if(slot >= 0)
- {
- for(int i = 0; i < EFFECT_COUNT; i++)
- {
- if (spells[buffs[slot].spellid].effectid[i] == SE_MaxHPChange)
- {
- max_hp += max_hp * spells[buffs[slot].spellid].base[i] / 10000;
- }
- }
- }
+ max_hp += max_hp * (spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000;
+
return max_hp;
}
Index: mob.h
===================================================================
--- mob.h (revision 1713)
+++ mob.h (working copy)
@@ -275,6 +275,7 @@
sint8 HundredHands; //extra haste, stacks with all other haste i
sint8 MeleeLifetap;
+ sint16 MaxHPChange;
int XPRateMod;
sint8 Packrat; //weight reduction for items, 1 point = 10%