mirror of
https://github.com/EQEmu/Server.git
synced 2026-01-05 04:13:52 +00:00
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:
parent
6a5b3ef4fe
commit
5b85aa6550
@ -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);
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user