[Bug Fix] SOF+ clients item click recast timer not met check (#1682)

* Update client_packet.cpp

* Update spells.cpp

* augs working too
This commit is contained in:
KayenEQ 2021-11-06 23:14:36 -04:00 committed by GitHub
parent bc82b897c5
commit 1cdb1816a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 2 deletions

View File

@ -8959,6 +8959,14 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
}
if (GetLevel() >= item->Click.Level2)
{
if (item->RecastDelay > 0)
{
if (!GetPTimers().Expired(&database, (pTimerItemStart + item->RecastType), false)) {
LogSpells("Casting of [{}] canceled: item spell reuse timer not expired", spell_id);
return;
}
}
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", slot_id);
inst = m_inv[slot_id];
if (!inst)
@ -8988,6 +8996,15 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
}
if (GetLevel() >= augitem->Click.Level2)
{
if (augitem->RecastDelay > 0)
{
if (!GetPTimers().Expired(&database, (pTimerItemStart + augitem->RecastType), false)) {
LogSpells("Casting of [{}] canceled: item spell reuse timer from augment not expired", spell_id);
MessageString(Chat::Red, SPELL_RECAST);
return;
}
}
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, clickaug, nullptr, "", slot_id);
inst = m_inv[slot_id];
if (!inst)

View File

@ -1020,7 +1020,10 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo
return;
}
}
/*
Titanium client will prevent item recast on its own. This is only used to enforce. Titanium items are cast from Handle_OP_CastSpell.
SOF+ client does not prevent item recast on its own. We enforce this in Handle_OP_ItemVerifyRequest where items are cast from.
*/
if(IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt))
{
IsFromItem = true;
@ -6287,4 +6290,4 @@ int Client::GetNextAvailableDisciplineSlot(int starting_slot) {
}
return -1; // Return -1 if No Slots open
}
}