aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.cpp25
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp1
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp23
3 files changed, 43 insertions, 6 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index c9d298c769f..9fd48bfc320 100755
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -381,6 +381,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
SetAttackTime(RANGED_ATTACK, cInfo->rangeattacktime);
SetUInt32Value(UNIT_FIELD_FLAGS, unit_flags);
+ SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);
SetUInt32Value(UNIT_DYNAMIC_FLAGS, dynamicflags);
@@ -440,7 +441,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
*/
// TODO: Shouldn't we check whether or not the creature is in water first?
- if (cInfo->InhabitType & INHABIT_WATER)
+ if (cInfo->InhabitType & INHABIT_WATER && IsInWater())
AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
return true;
@@ -1160,12 +1161,26 @@ void Creature::SelectLevel(const CreatureTemplate* cinfo)
// mana
uint32 mana = stats->GenerateMana(cinfo);
-
SetCreateMana(mana);
- SetMaxPower(POWER_MANA, mana); //MAX Mana
- SetPower(POWER_MANA, mana);
- // TODO: set UNIT_FIELD_POWER*, for some creature class case (energy, etc)
+ switch (getClass())
+ {
+ case CLASS_WARRIOR:
+ setPowerType(POWER_RAGE);
+ SetMaxPower(POWER_RAGE, GetCreatePowers(POWER_RAGE));
+ SetPower(POWER_RAGE, GetCreatePowers(POWER_RAGE));
+ break;
+ case CLASS_ROGUE:
+ setPowerType(POWER_ENERGY);
+ SetMaxPower(POWER_ENERGY, GetCreatePowers(POWER_ENERGY));
+ SetPower(POWER_ENERGY, GetCreatePowers(POWER_ENERGY));
+ break;
+ default:
+ setPowerType(POWER_MANA);
+ SetMaxPower(POWER_MANA, mana);
+ SetPower(POWER_MANA, mana);
+ break;
+ }
SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, (float)health);
SetModifierValue(UNIT_MOD_MANA, BASE_VALUE, (float)mana);
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index d20102e3081..cb35533484f 100755
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -230,6 +230,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa
m_goValue->Building.Health = goinfo->building.intactNumHits + goinfo->building.damagedNumHits;
m_goValue->Building.MaxHealth = m_goValue->Building.Health;
SetGoAnimProgress(255);
+ SetUInt32Value(GAMEOBJECT_PARENTROTATION, m_goInfo->building.destructibleData);
break;
case GAMEOBJECT_TYPE_TRANSPORT:
SetUInt32Value(GAMEOBJECT_LEVEL, goinfo->transport.pause);
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 8b22a48522d..492afc39dc6 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -299,7 +299,7 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
data->WriteBit(0);
data->WriteBit(flags & UPDATEFLAG_GO_TRANSPORT_POSITION);
data->WriteBit(flags & UPDATEFLAG_STATIONARY_POSITION);
- data->WriteBit(0);
+ data->WriteBit(flags & UPDATEFLAG_UNK5);
data->WriteBit(0);
data->WriteBit(flags & UPDATEFLAG_TRANSPORT);
@@ -525,6 +525,27 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
if (flags & UPDATEFLAG_ROTATION)
*data << uint64(ToGameObject()->GetRotation());
+ if (flags & UPDATEFLAG_UNK5)
+ {
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << uint8(0);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ *data << float(0.0f);
+ }
+
if (flags & UPDATEFLAG_STATIONARY_POSITION)
{
WorldObject const* self = static_cast<WorldObject const*>(this);