Fix a crash caused by spell with CAST_FLAG_RUNE_LIST casted by a creature mover. Thanks to Vasago.
This commit is contained in:
@@ -3834,19 +3834,23 @@ void Spell::SendSpellGo()
|
||||
|
||||
if (castFlags & CAST_FLAG_RUNE_LIST) // rune cooldowns list
|
||||
{
|
||||
Player* player = m_caster->ToPlayer();
|
||||
uint8 runeMaskInitial = m_runesState;
|
||||
uint8 runeMaskAfterCast = player->GetRunesState();
|
||||
data << uint8(runeMaskInitial); // runes state before
|
||||
data << uint8(runeMaskAfterCast); // runes state after
|
||||
for (uint8 i = 0; i < MAX_RUNES; ++i)
|
||||
//TODO: There is a crash caused by a spell with CAST_FLAG_RUNE_LIST casted by a creature
|
||||
//The creature is the mover of a player, so HandleCastSpellOpcode uses it as the caster
|
||||
if (Player* player = m_caster->ToPlayer())
|
||||
{
|
||||
uint8 mask = (1 << i);
|
||||
if (mask & runeMaskInitial && !(mask & runeMaskAfterCast)) // usable before andon cooldown now...
|
||||
uint8 runeMaskInitial = m_runesState;
|
||||
uint8 runeMaskAfterCast = player->GetRunesState();
|
||||
data << uint8(runeMaskInitial); // runes state before
|
||||
data << uint8(runeMaskAfterCast); // runes state after
|
||||
for (uint8 i = 0; i < MAX_RUNES; ++i)
|
||||
{
|
||||
// float casts ensure the division is performed on floats as we need float result
|
||||
float baseCd = float(player->GetRuneBaseCooldown(i));
|
||||
data << uint8((baseCd - float(player->GetRuneCooldown(i))) / baseCd * 255); // rune cooldown passed
|
||||
uint8 mask = (1 << i);
|
||||
if (mask & runeMaskInitial && !(mask & runeMaskAfterCast)) // usable before andon cooldown now...
|
||||
{
|
||||
// float casts ensure the division is performed on floats as we need float result
|
||||
float baseCd = float(player->GetRuneBaseCooldown(i));
|
||||
data << uint8((baseCd - float(player->GetRuneCooldown(i))) / baseCd * 255); // rune cooldown passed
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user