diff --git a/Source/player.cpp b/Source/player.cpp index 430b5f045..c10df6bcf 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -3154,8 +3154,18 @@ void CheckPlrSpell(bool isShiftHeld, SpellID spellID, SpellType spellType) LastMouseButtonAction = MouseActionType::SpellPlayerTarget; NetSendCmdParam5(true, CMD_SPELLPID, PlayerUnderCursor->getId(), static_cast(spellID), static_cast(spellType), spellLevel, spellFrom); } else { + Point targetedTile = cursPosition; + if (spellID == SpellID::Teleport && myPlayer.executedSpell.spellId == SpellID::Teleport) { + // Check if the player is attempting to queue Teleport onto a tile that is currently being targeted with Teleport, or a nearby tile + if (cursPosition.WalkingDistance(myPlayer.position.temp) <= 1) { + // Get the relative displacement from the player's current position to the cursor position + WorldTileDisplacement relativeMove = cursPosition - static_cast(myPlayer.position.tile); + // Target the tile the relative distance away from the player's targeted Teleport tile + targetedTile = myPlayer.position.temp + relativeMove; + } + } LastMouseButtonAction = MouseActionType::Spell; - NetSendCmdLocParam4(true, CMD_SPELLXY, cursPosition, static_cast(spellID), static_cast(spellType), spellLevel, spellFrom); + NetSendCmdLocParam4(true, CMD_SPELLXY, targetedTile, static_cast(spellID), static_cast(spellType), spellLevel, spellFrom); } }