Core/Misc: Fixed armor mitigation after 5675902485

* Also fixes gcc build with -Werror enabled
This commit is contained in:
joschiwald
2017-07-30 13:11:43 +02:00
parent 5675902485
commit 6f8b60101f
4 changed files with 94 additions and 88 deletions
@@ -16,6 +16,8 @@
*/
#include "CombatLogPacketsCommon.h"
#include "Creature.h"
#include "Player.h"
#include "Spell.h"
#include "SpellInfo.h"
#include "Unit.h"
@@ -46,6 +48,96 @@ void WorldPackets::Spells::SpellCastLogData::Initialize(Spell const* spell)
PowerData.insert(PowerData.begin(), SpellLogPowerData(int32(primaryPowerType), spell->GetCaster()->GetPower(primaryPowerType), 0));
}
namespace WorldPackets
{
namespace Spells
{
template<class T, class U>
bool SandboxScalingData::GenerateDataForUnits(T* /*attacker*/, U* /*target*/)
{
return false;
}
template<>
bool SandboxScalingData::GenerateDataForUnits<Creature, Player>(Creature* attacker, Player* target)
{
CreatureTemplate const* creatureTemplate = attacker->GetCreatureTemplate();
Type = TYPE_CREATURE_TO_PLAYER_DAMAGE;
PlayerLevelDelta = target->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = target->GetAverageItemLevel();
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
TargetScalingLevelDelta = int8(creatureTemplate->levelScaling->DeltaLevel);
return true;
}
template<>
bool SandboxScalingData::GenerateDataForUnits<Player, Creature>(Player* attacker, Creature* target)
{
CreatureTemplate const* creatureTemplate = target->GetCreatureTemplate();
Type = TYPE_PLAYER_TO_CREATURE_DAMAGE;
PlayerLevelDelta = attacker->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA);
PlayerItemLevel = attacker->GetAverageItemLevel();
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
TargetScalingLevelDelta = int8(creatureTemplate->levelScaling->DeltaLevel);
return true;
}
template<>
bool SandboxScalingData::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target)
{
CreatureTemplate const* creatureTemplate = target->HasScalableLevels() ? target->GetCreatureTemplate() : attacker->GetCreatureTemplate();
Type = TYPE_CREATURE_TO_CREATURE_DAMAGE;
PlayerLevelDelta = 0;
PlayerItemLevel = 0;
TargetLevel = target->getLevel();
Expansion = creatureTemplate->RequiredExpansion;
Class = creatureTemplate->unit_class;
TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel);
TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel);
TargetScalingLevelDelta = int8(creatureTemplate->levelScaling->DeltaLevel);
return true;
}
template<>
bool SandboxScalingData::GenerateDataForUnits<Unit, Unit>(Unit* attacker, Unit* target)
{
if (Player* playerAttacker = attacker->ToPlayer())
{
if (Player* playerTarget = target->ToPlayer())
return GenerateDataForUnits(playerAttacker, playerTarget);
else if (Creature* creatureTarget = target->ToCreature())
{
if (creatureTarget->HasScalableLevels())
return GenerateDataForUnits(playerAttacker, creatureTarget);
}
}
else if (Creature* creatureAttacker = attacker->ToCreature())
{
if (Player* playerTarget = target->ToPlayer())
return GenerateDataForUnits(creatureAttacker, playerTarget);
else if (Creature* creatureTarget = target->ToCreature())
{
if (creatureAttacker->HasScalableLevels() || creatureTarget->HasScalableLevels())
return GenerateDataForUnits(creatureAttacker, creatureTarget);
}
}
return false;
}
}
}
ByteBuffer& WorldPackets::CombatLog::CombatLogServerPacket::WriteLogData()
{
return _fullLogPacket << LogData;