diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Creature/Creature.cpp | 25 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.cpp | 1 | ||||
-rwxr-xr-x | src/server/game/Entities/Object/Object.cpp | 23 |
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); |