From ccf8504decc2f934879c172bba36410d1b810335 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Tue, 14 Feb 2023 04:36:10 -0600 Subject: [PATCH] [Hotfix] Fix EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE regression caused by #2897 (#2928) * [Hotfix] Fix EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE regression caused by #2897 * Update client_packet.cpp --- zone/client_packet.cpp | 53 ++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 71555e9b6..391e64b55 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -15239,34 +15239,37 @@ void Client::Handle_OP_Translocate(const EQApplicationPacket *app) zone->GetInstanceID() == PendingTranslocateData.instance_id ); + int quest_return = 0; if (parse->SpellHasQuestSub(spell_id, EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE)) { - if (parse->EventSpell(EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE, nullptr, this, spell_id, "", 0) == 0) { - // If the spell has a translocate to bind effect, AND we are already in the zone the client - // is bound in, use the GoToBind method. If we send OP_Translocate in this case, the client moves itself - // to the bind coords it has from the PlayerProfile, but with the X and Y reversed. I suspect they are - // reversed in the pp, and since spells like Gate are handled serverside, this has not mattered before. - if ( - IsTranslocateSpell(spell_id) && - in_translocate_zone - ) { - PendingTranslocate = false; - GoToBind(); - return; - } + quest_return = parse->EventSpell(EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE, nullptr, this, spell_id, "", 0); + } - ////Was sending the packet back to initiate client zone... - ////but that could be abusable, so lets go through proper channels - MovePC( - PendingTranslocateData.zone_id, - PendingTranslocateData.instance_id, - PendingTranslocateData.x, - PendingTranslocateData.y, - PendingTranslocateData.z, - PendingTranslocateData.heading, - 0, - ZoneSolicited - ); + if (quest_return == 0) { + // If the spell has a translocate to bind effect, AND we are already in the zone the client + // is bound in, use the GoToBind method. If we send OP_Translocate in this case, the client moves itself + // to the bind coords it has from the PlayerProfile, but with the X and Y reversed. I suspect they are + // reversed in the pp, and since spells like Gate are handled serverside, this has not mattered before. + if ( + IsTranslocateSpell(spell_id) && + in_translocate_zone + ) { + PendingTranslocate = false; + GoToBind(); + return; } + + ////Was sending the packet back to initiate client zone... + ////but that could be abusable, so lets go through proper channels + MovePC( + PendingTranslocateData.zone_id, + PendingTranslocateData.instance_id, + PendingTranslocateData.x, + PendingTranslocateData.y, + PendingTranslocateData.z, + PendingTranslocateData.heading, + 0, + ZoneSolicited + ); } }