mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 10:37:02 +00:00
[8084] Correctly show spell icon disabled state at relogin for spells with cooldown delayed until expire.
This commit is contained in:
parent
34d5620a91
commit
a656bc36fa
3 changed files with 18 additions and 13 deletions
|
|
@ -2537,7 +2537,7 @@ void Player::InitStatsForLevel(bool reapplyMods)
|
||||||
void Player::SendInitialSpells()
|
void Player::SendInitialSpells()
|
||||||
{
|
{
|
||||||
time_t curTime = time(NULL);
|
time_t curTime = time(NULL);
|
||||||
time_t infTime = curTime + MONTH/2;
|
time_t infTime = curTime + infinityCooldownDelayCheck;
|
||||||
|
|
||||||
uint16 spellCount = 0;
|
uint16 spellCount = 0;
|
||||||
|
|
||||||
|
|
@ -2571,18 +2571,21 @@ void Player::SendInitialSpells()
|
||||||
if(!sEntry)
|
if(!sEntry)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// not send infinity cooldown
|
|
||||||
if(itr->second.end > infTime)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
data << uint32(itr->first);
|
data << uint32(itr->first);
|
||||||
|
|
||||||
time_t cooldown = 0;
|
|
||||||
if(itr->second.end > curTime)
|
|
||||||
cooldown = (itr->second.end-curTime)*IN_MILISECONDS;
|
|
||||||
|
|
||||||
data << uint16(itr->second.itemid); // cast item id
|
data << uint16(itr->second.itemid); // cast item id
|
||||||
data << uint16(sEntry->Category); // spell category
|
data << uint16(sEntry->Category); // spell category
|
||||||
|
|
||||||
|
// send infinity cooldown in special format
|
||||||
|
if(itr->second.end >= infTime)
|
||||||
|
{
|
||||||
|
data << uint32(1); // cooldown
|
||||||
|
data << uint32(0x80000000); // category cooldown
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t cooldown = itr->second.end > curTime ? (itr->second.end-curTime)*IN_MILISECONDS : 0;
|
||||||
|
|
||||||
if(sEntry->Category) // may be wrong, but anyway better than nothing...
|
if(sEntry->Category) // may be wrong, but anyway better than nothing...
|
||||||
{
|
{
|
||||||
data << uint32(0); // cooldown
|
data << uint32(0); // cooldown
|
||||||
|
|
@ -3349,7 +3352,7 @@ void Player::_SaveSpellCooldowns()
|
||||||
CharacterDatabase.PExecute("DELETE FROM character_spell_cooldown WHERE guid = '%u'", GetGUIDLow());
|
CharacterDatabase.PExecute("DELETE FROM character_spell_cooldown WHERE guid = '%u'", GetGUIDLow());
|
||||||
|
|
||||||
time_t curTime = time(NULL);
|
time_t curTime = time(NULL);
|
||||||
time_t infTime = curTime + MONTH/2;
|
time_t infTime = curTime + infinityCooldownDelayCheck;
|
||||||
|
|
||||||
// remove outdated and save active
|
// remove outdated and save active
|
||||||
for(SpellCooldowns::iterator itr = m_spellCooldowns.begin();itr != m_spellCooldowns.end();)
|
for(SpellCooldowns::iterator itr = m_spellCooldowns.begin();itr != m_spellCooldowns.end();)
|
||||||
|
|
@ -17396,8 +17399,8 @@ void Player::AddSpellAndCategoryCooldowns(SpellEntry const* spellInfo, uint32 it
|
||||||
{
|
{
|
||||||
// use +MONTH as infinity mark for spell cooldown (will checked as MONTH/2 at save ans skipped)
|
// use +MONTH as infinity mark for spell cooldown (will checked as MONTH/2 at save ans skipped)
|
||||||
// but not allow ignore until reset or re-login
|
// but not allow ignore until reset or re-login
|
||||||
catrecTime = catrec > 0 ? curTime+MONTH : 0;
|
catrecTime = catrec > 0 ? curTime+infinityCooldownDelay : 0;
|
||||||
recTime = rec > 0 ? curTime+MONTH : catrecTime;
|
recTime = rec > 0 ? curTime+infinityCooldownDelay : catrecTime;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1462,6 +1462,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
template <class T> T ApplySpellMod(uint32 spellId, SpellModOp op, T &basevalue, Spell const* spell = NULL);
|
template <class T> T ApplySpellMod(uint32 spellId, SpellModOp op, T &basevalue, Spell const* spell = NULL);
|
||||||
void RemoveSpellMods(Spell const* spell);
|
void RemoveSpellMods(Spell const* spell);
|
||||||
|
|
||||||
|
static uint32 const infinityCooldownDelay = MONTH; // used for set "infinity cooldowns" for spells and check
|
||||||
|
static uint32 const infinityCooldownDelayCheck = MONTH/2;
|
||||||
bool HasSpellCooldown(uint32 spell_id) const
|
bool HasSpellCooldown(uint32 spell_id) const
|
||||||
{
|
{
|
||||||
SpellCooldowns::const_iterator itr = m_spellCooldowns.find(spell_id);
|
SpellCooldowns::const_iterator itr = m_spellCooldowns.find(spell_id);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8083"
|
#define REVISION_NR "8084"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue