aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_09_10_00_world_creature_template_434.sql1
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp33
-rw-r--r--src/server/shared/Database/Implementation/WorldDatabase.cpp2
4 files changed, 21 insertions, 18 deletions
diff --git a/sql/updates/world/2014_09_10_00_world_creature_template_434.sql b/sql/updates/world/2014_09_10_00_world_creature_template_434.sql
new file mode 100644
index 00000000000..05600243180
--- /dev/null
+++ b/sql/updates/world/2014_09_10_00_world_creature_template_434.sql
@@ -0,0 +1 @@
+ALTER TABLE `creature_template` ADD COLUMN `HealthModifierExtra` FLOAT DEFAULT 1 NOT NULL AFTER `HealthModifier`;
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 0f4dda4c319..5ead323314c 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -127,6 +127,7 @@ struct CreatureTemplate
uint32 InhabitType;
float HoverHeight;
float ModHealth;
+ float ModHealthExtra;
float ModMana;
float ModManaExtra; // Added in 4.x, this value is usually 2 for a small group of creatures with double mana
float ModArmor;
@@ -194,7 +195,7 @@ struct CreatureBaseStats
uint32 GenerateHealth(CreatureTemplate const* info) const
{
- return uint32(ceil(BaseHealth[info->expansion] * info->ModHealth));
+ return uint32(ceil(BaseHealth[info->expansion] * info->ModHealth * info->ModHealthExtra));
}
uint32 GenerateMana(CreatureTemplate const* info) const
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index bbbecd1d474..66aad228da3 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -439,11 +439,11 @@ void ObjectMgr::LoadCreatureTemplates()
"type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, "
// 50 51 52 53 54 55 56 57 58 59 60 61 62 63
"spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, "
- // 64 65 66 67 68 69 70 71
- "InhabitType, HoverHeight, HealthModifier, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, "
- // 72 73 74 75 76 77 78
+ // 64 65 66 67 68 69 70 71 72
+ "InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, "
+ // 73 74 75 76 77 78 79
"RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, "
- // 79 80 81 82 83
+ // 80 81 82 83 84
"movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName "
"FROM creature_template");
@@ -538,21 +538,22 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.InhabitType = uint32(fields[64].GetUInt8());
creatureTemplate.HoverHeight = fields[65].GetFloat();
creatureTemplate.ModHealth = fields[66].GetFloat();
- creatureTemplate.ModMana = fields[67].GetFloat();
- creatureTemplate.ModManaExtra = fields[68].GetFloat();
- creatureTemplate.ModArmor = fields[69].GetFloat();
- creatureTemplate.ModDamage = fields[70].GetFloat();
- creatureTemplate.ModExperience = fields[71].GetFloat();
- creatureTemplate.RacialLeader = fields[72].GetBool();
+ creatureTemplate.ModHealthExtra = fields[67].GetFloat();
+ creatureTemplate.ModMana = fields[68].GetFloat();
+ creatureTemplate.ModManaExtra = fields[69].GetFloat();
+ creatureTemplate.ModArmor = fields[70].GetFloat();
+ creatureTemplate.ModDamage = fields[71].GetFloat();
+ creatureTemplate.ModExperience = fields[72].GetFloat();
+ creatureTemplate.RacialLeader = fields[73].GetBool();
for (uint8 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i)
- creatureTemplate.questItems[i] = fields[73 + i].GetUInt32();
+ creatureTemplate.questItems[i] = fields[74 + i].GetUInt32();
- creatureTemplate.movementId = fields[79].GetUInt32();
- creatureTemplate.RegenHealth = fields[80].GetBool();
- creatureTemplate.MechanicImmuneMask = fields[81].GetUInt32();
- creatureTemplate.flags_extra = fields[82].GetUInt32();
- creatureTemplate.ScriptID = GetScriptId(fields[83].GetCString());
+ creatureTemplate.movementId = fields[80].GetUInt32();
+ creatureTemplate.RegenHealth = fields[81].GetBool();
+ creatureTemplate.MechanicImmuneMask = fields[82].GetUInt32();
+ creatureTemplate.flags_extra = fields[83].GetUInt32();
+ creatureTemplate.ScriptID = GetScriptId(fields[84].GetCString());
}
void ObjectMgr::LoadCreatureTemplateAddons()
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
index e5aeaf46c15..1245187e7c2 100644
--- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
+++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
@@ -76,7 +76,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, permission, help FROM command", CONNECTION_SYNCH);
- PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, femaleName, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, scale, rank, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_class, trainer_race, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
+ PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, femaleName, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, scale, rank, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_class, trainer_race, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_ITEM_TEMPLATE_BY_NAME, "SELECT entry FROM item_template WHERE name = ?", CONNECTION_SYNCH);
PrepareStatement(WORLD_SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?", CONNECTION_SYNCH);