diff options
| author | Rat <gmstreetrat@gmail.com> | 2011-11-27 19:08:42 +0100 |
|---|---|---|
| committer | Rat <gmstreetrat@gmail.com> | 2011-11-27 19:09:47 +0100 |
| commit | d977ed01e785ef765011464163e53074552ffd4a (patch) | |
| tree | 4d4093d0ae52c24fb3653e8889b2544580655440 /src/server/game/Entities/Unit | |
| parent | a28b5c3a954733bd029aa6020039adf5c5ef136f (diff) | |
Core/Units: fixed power update
(yes you are now alive ingame)
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 39 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 4 |
2 files changed, 34 insertions, 9 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index df8ee5be2ec..f912fd92cea 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13608,22 +13608,45 @@ void Unit::SetMaxHealth(uint32 val) SetHealth(val); } -void Unit::SetPower(Powers power, int32 val) +uint32 Unit::GetPowerIndexByClass(uint32 powerId, uint32 classId) const { - if (GetPower(power) == val) - return; + ChrClassesEntry const* m_class = sChrClassesStore.LookupEntry(classId); - int32 maxPower = (int32)GetMaxPower(power); + ASSERT(m_class && "Class not found"); + + uint32 index = 0; + + for (uint32 i = 0; i <= sChrPowerTypesStore.GetNumRows(); i++) + { + ChrPowerTypesEntry const* cEntry = sChrPowerTypesStore.LookupEntry(i); + + if (!cEntry) + continue; + + if (classId != cEntry->classId) + continue; + + if (powerId == cEntry->power) + return index; + + index++; + } + return 0; +}; + +void Unit::SetPower(Powers power, uint32 val) +{ + uint32 maxPower = GetMaxPower(power); if (maxPower < val) val = maxPower; - SetStatInt32Value(UNIT_FIELD_POWER1 + power, val); + SetStatInt32Value(UNIT_FIELD_POWER1 + GetPowerIndexByClass(power, getClass()), val); WorldPacket data(SMSG_POWER_UPDATE); data.append(GetPackGUID()); - data << int32(1); // Unk - data << uint8(power); - data << int32(val); + data << uint32(1);//unk + data << uint8(GetPowerIndexByClass(power, getClass())); + data << uint32(val); SendMessageToSet(&data, GetTypeId() == TYPEID_PLAYER ? true : false); // group update diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index a86361e8d21..2f85248648f 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1371,12 +1371,14 @@ class Unit : public WorldObject void setPowerType(Powers power); int32 GetPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_POWER1+power); } uint32 GetMaxPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_MAXPOWER1+power); } - void SetPower(Powers power, int32 val); + void SetPower(Powers power, uint32 val); void SetMaxPower(Powers power, int32 val); // returns the change in power int32 ModifyPower(Powers power, int32 val); int32 ModifyPowerPct(Powers power, float pct, bool apply = true); + uint32 GetPowerIndexByClass(uint32 powerId, uint32 classId) const; + uint32 GetAttackTime(WeaponAttackType att) const { float f_BaseAttackTime = GetFloatValue(UNIT_FIELD_BASEATTACKTIME+att) / m_modAttackSpeedPct[att]; |
