Quick and dirty teleport Combo Hearthstone. Used current Hearthstone for teleport or use Hearthstone as original hearthstone.

Based on the dynamic teleporter

Scripts/Dynamic teleporter.lua at master * ElunaLuaEngine/Scripts * GitHub

save as .lua and place in \Core\lua_scripts\ folder.

Code:
--[==[
    = How to add new locations =
    Example:
    The first line will be the main menu ID (Here [1], 
    increment this for each main menu option!),
    the main menu gossip title (Here "Horde Cities"),
    as well as which faction can use the said menu (Here 1 (Horde)). 
    0 = Alliance, 1 = Horde, 2 = Both
    The second line is the name of the main menu's sub menus, 
    separated by name (Here "Orgrimmar") and teleport coordinates
    using Map, X, Y, Z, O (Here 1, 1503, -4415.5, 22, 0)
    [1] = { "Horde Cities", 1,    --  This will be the main menu title, as well as which faction can use the said menu. 0 = Alliance, 1 = Horde, 2 = Both
        {"Orgrimmar", 1, 1503, -4415.5, 22, 0},
    },
    You can copy paste the above into the script and change the values as informed.
]==]

local ItemEntry = 6948

local T = {
    [1] = { "Horde Cities", 1,
        {"Orgrimmar", 1, 1503, -4415.5, 22, 0},
        {"Undercity", 0, 1831, 238.5, 61.6, 0},
        {"Thunderbluff", 1, -1278, 122, 132, 0},
        {"Silvermoon", 530, 9484, -7294, 15, 0},
    },
    [2] = { "Alliance Cities", 0,
        {"Stormwind", 0, -8905, 560, 94, 0.62},
        {"Ironforge", 0, -4795, -1117, 499, 0},
        {"Darnassus", 1, 9952, 2280.5, 1342, 1.6},
        {"The Exodar", 530, -3863, -11736, -106, 2},
    },
    [3] = { "Outlands Locations", 2,
        {"Blade's Edge Mountains", 530, 1481, 6829, 107, 6},
        {"Hellfire Peninsula", 530, -249, 947, 85, 2},
        {"Nagrand", 530, -1769, 7150, -9, 2},
        {"Netherstorm", 530, 3043, 3645, 143, 2},
        {"Shadowmoon Valley", 530, -3034, 2937, 87, 5},
        {"Terokkar Forest", 530, -1942, 4689, -2, 5},
        {"Zangarmarsh", 530, -217, 5488, 23, 2},
        {"Shattrath", 530, -1822, 5417, 1, 3},
    },
    [4] = { "Northrend Locations", 2,
        {"Borean Tundra", 571, 3230, 5279, 47, 3},
        {"Crystalsong Forest", 571, 5732, 1016, 175, 3.6},
        {"Dragonblight", 571, 3547, 274, 46, 1.6},
        {"Grizzly Hills", 571, 3759, -2672, 177, 3},
        {"Howling Fjord", 571, 772, -2905, 7, 5},
        {"Icecrown Glaicer", 571, 8517, 676, 559, 4.7},
        {"Sholazar Basin", 571, 5571, 5739, -75, 2},
        {"Storm Peaks", 571, 6121, -1025, 409, 4.7},
        {"Wintergrasp", 571, 5135, 2840, 408, 3},
        {"Zul'Drak", 571, 5761, -3547, 387, 5},
        {"Dalaran", 571, 5826, 470, 659, 1.4},
    },
    [5] = { "PvP Locations", 2,
        {"Gurubashi Arena", 0, -13229, 226, 33, 1},
        {"Dire Maul Arena", 1, -3669, 1094, 160, 3},
        {"Nagrand Arena", 530, -1983, 6562, 12, 2},
        {"Blade's Edge Arena", 530, 2910, 5976, 2, 4},
    },
}

-- CODE STUFFS! DO NOT EDIT BELOW
-- UNLESS YOU KNOW WHAT YOU'RE DOING!

local function OnGossipHello(event, player, item)
    -- Show main menu
    for i, v in ipairs(T) do
        if (v[2] == 2 or v[2] == player:GetTeam()) then
            player:GossipMenuAddItem(0, v[1], i, 0)
        end
    end
    player:GossipSendMenu(1, item)
end    

local function OnGossipSelect(event, player, item, sender, intid, code)
    if (sender == 0) then
        -- return to main menu
        OnGossipHello(event, player, item)
        return
    end

    if (intid == 0) then
        -- Show teleport menu
        for i, v in ipairs(T[sender]) do
            if (i > 2) then
                player:GossipMenuAddItem(0, v[1], sender, i)
            end
        end
        player:GossipMenuAddItem(0, "Back", 0, 0)
        player:GossipSendMenu(1, item)
        return
    else
        -- teleport
        local name, map, x, y, z, o = table.unpack(T[sender][intid])
        player:Teleport(map, x, y, z, o)
    end
    
    player:GossipComplete()
end

RegisterItemGossipEvent(ItemEntry, 1, OnGossipHello)
RegisterItemGossipEvent(ItemEntry, 2, OnGossipSelect)
To edit the existing Hearthstone sql entry.

Code:
DELETE FROM `item_template` WHERE `entry`=6948;
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES (6948, 15, 0, -1, 'Combo Hearthstone', 6418, 1, 64, 0, 1, 0, 0, 0, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8690, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, 'Combo Stone, use as hearthstone or cancel and use teleport.', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 12340);
Delete Cache folder in WoW client to see new functionality.




Enjoy.


› See More: Lazy teleport .lua script for TrinityCore repack servers with Eluna.