Fix to allow discipline reuse timers to be set on client correclty

and therefore have the client return the time remaining instead
of the server.

Hopefully may resolve some bugs reselated to discipline use.
This commit is contained in:
KayenEQ 2014-11-19 00:39:42 -05:00
parent 6a5b3ef4fe
commit 5b85aa6550
3 changed files with 22 additions and 10 deletions

View File

@ -875,6 +875,7 @@ void SetConsumption(int32 in_hunger, int32 in_thirst);
bool TrainDiscipline(uint32 itemid);
void SendDisciplineUpdate();
bool UseDiscipline(uint32 spell_id, uint32 target);
void SendDisciplineTimer(uint32 timer_id, uint32 duration, uint16 spell_id = SPELL_UNKNOWN);
bool CheckTitle(int titleset);
void EnableTitle(int titleset);

View File

@ -696,16 +696,7 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) {
return true;
}
CastSpell(spell_id, target, DISCIPLINE_SPELL_SLOT, -1, -1, 0, -1, (uint32)DiscTimer, reduced_recast);
if(spells[spell_id].EndurTimerIndex < MAX_DISCIPLINE_TIMERS)
{
EQApplicationPacket *outapp = new EQApplicationPacket(OP_DisciplineTimer, sizeof(DisciplineTimer_Struct));
DisciplineTimer_Struct *dts = (DisciplineTimer_Struct *)outapp->pBuffer;
dts->TimerID = spells[spell_id].EndurTimerIndex;
dts->Duration = reduced_recast;
QueuePacket(outapp);
safe_delete(outapp);
}
SendDisciplineTimer(spells[spell_id].EndurTimerIndex, reduced_recast);
}
else
{
@ -714,6 +705,22 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) {
return(true);
}
void Client::SendDisciplineTimer(uint32 timer_id, uint32 duration, uint16 spell_id)
{
if (!timer_id && IsValidSpell(spell_id))
timer_id = spells[spell_id].EndurTimerIndex;
if(duration > 0 && timer_id && (timer_id < MAX_DISCIPLINE_TIMERS))
{
EQApplicationPacket *outapp = new EQApplicationPacket(OP_DisciplineTimer, sizeof(DisciplineTimer_Struct));
DisciplineTimer_Struct *dts = (DisciplineTimer_Struct *)outapp->pBuffer;
dts->TimerID = timer_id;
dts->Duration = duration;
QueuePacket(outapp);
safe_delete(outapp);
}
}
void EntityList::AETaunt(Client* taunter, float range)
{
if (range == 0)

View File

@ -2256,6 +2256,10 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, uint16 slot, uint16
}
}
//Disc Timer needs to be sent before and after the spell packet.
if (IsClient() && spells[spell_id].IsDisciplineBuff && spells[spell_id].EndurTimerIndex)
CastToClient()->SendDisciplineTimer(casting_spell_timer, casting_spell_timer_duration);
if(IsNPC())
CastToNPC()->AI_Event_SpellCastFinished(true, slot);