View Single Post
  #1  
Old 06-07-2013, 05:32 PM
Hateborne
Hill Giant
 
Join Date: May 2010
Posts: 125
Default MaxHPChange Tweak

We were having issues on EZ server due to the MaxHPChange being both int16 and due to some of the math involved. Thanks to Paldail and lerxst2112, we've produced a slightly more usable form that should resolve our problems while maintaining original functionality.

Code:
diff --git "a/.\\Server\\zone\\/bot.cpp" "b/.\\Server-Original\\zone\\/bot.cpp"
index b54fe70..c88ad72 100644
--- "a/.\\Server\\zone\\/bot.cpp"
+++ "b/.\\Server-Original\\zone\\/bot.cpp"
@@ -11043,7 +11043,7 @@ int32 Bot::CalcMaxHP() {
 
 	bot_hp += GroupLeadershipAAHealthEnhancement();
 
-	bot_hp += bot_hp * (spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000;
+	bot_hp += bot_hp * ((spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000.0f);
 	max_hp = bot_hp;
 
 	if (cur_hp > max_hp)
diff --git "a/.\\Server\\zone\\/client_mods.cpp" "b/.\\Server-Original\\zone\\/client_mods.cpp"
index 1e27185..eaab0ba 100644
--- "a/.\\Server\\zone\\/client_mods.cpp"
+++ "b/.\\Server-Original\\zone\\/client_mods.cpp"
@@ -250,7 +250,7 @@ int32 Client::CalcMaxHP() {
 
 	max_hp += GroupLeadershipAAHealthEnhancement();

-	max_hp += max_hp * (spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000;	
+	max_hp += max_hp * ((spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000.0f);
 
 	if (cur_hp > max_hp)
 		cur_hp = max_hp;
diff --git "a/.\\Server\\zone\\/common.h" "b/.\\Server-Original\\zone\\/common.h"
index f7716c9..ddc1711 100644
--- "a/.\\Server\\zone\\/common.h"
+++ "b/.\\Server-Original\\zone\\/common.h"
@@ -283,7 +283,7 @@ struct StatBonuses {
 	int16	HundredHands;						//extra haste, stacks with all other haste	i
 	int8	MeleeLifetap;						//i
 	int16	HealRate;							// Spell effect that influences effectiveness of heals
-	int16	MaxHPChange;						// Spell Effect
+	int32	MaxHPChange;						// Spell Effect
 	int16	SkillDmgTaken[HIGHEST_SKILL+2];		// All Skills + -1
 	int32	HealAmt;							// Item Effect
 	int32	SpellDmg;							// Item Effect
diff --git "a/.\\Server\\zone\\/merc.cpp" "b/.\\Server-Original\\zone\\/merc.cpp"
index 3709524..0e652ff 100644
--- "a/.\\Server\\zone\\/merc.cpp"
+++ "b/.\\Server-Original\\zone\\/merc.cpp"
@@ -918,7 +918,7 @@ int32 Merc::CalcMaxHP() {
 
 	max_hp += GroupLeadershipAAHealthEnhancement();
 
-	max_hp += max_hp * (spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000;
+	max_hp += max_hp * ((spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000.0f);
 
 	if (cur_hp > max_hp)
 		cur_hp = max_hp;
diff --git "a/.\\Server\\zone\\/mob.cpp" "b/.\\Server-Original\\zone\\/mob.cpp"
index bce504a..33560ed 100644
--- "a/.\\Server\\zone\\/mob.cpp"
+++ "b/.\\Server-Original\\zone\\/mob.cpp"
@@ -615,8 +615,7 @@ int32 Mob::CalcMaxMana() {
 
 int32 Mob::CalcMaxHP() {
 	max_hp = (base_hp + itembonuses.HP + spellbonuses.HP);
-	max_hp += max_hp * (aabonuses.MaxHPChange + spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000;
+	max_hp += max_hp * ((aabonuses.MaxHPChange + spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000.0f);
 	return max_hp;
 }
I've never created a git diff, so please don't crucify me too hard if it's wrong. (I've got medium-low resists to it!)


-Hate
Reply With Quote