This is a warp NPC that i found.

Don't know who has correct credits.

Code:
#include "StdAfx.h"
#include "Setup.h"

#ifdef WIN32
#pragma warning(disable:4305)// warning C4305: 'argument' : truncation from 'double' to 'float'
#endif


class SCRIPT_DECL Warper : public GossipScript
{
public:
    void GossipHello(Object * pObject, Player* Plr, bool AutoSend);
    void GossipSelectOption(Object * pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code);
    void GossipEnd(Object * pObject, Player* Plr);
    void Destroy()
    {
        delete this;
    }
};
void Warper::GossipHello(Object * pObject, Player* Plr, bool AutoSend)
    {
        GossipMenu *Menu;
        objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
        if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
        {Menu->AddItem(0, "Horde Cities", 1);}else{Menu->AddItem(0, "Alliance Cities", 2);}
        Menu->AddItem(1, "|cffC11218Shopping Mall |r", 998);
        Menu->AddItem(2, "Global Locations", 80);                
        Menu->AddItem(3, "Azeroth Instances", 30);
        Menu->AddItem(4, "Outland Instances", 50);
        Menu->AddItem(2, "|cff681EA2Shattrath|r", 20);
        Menu->AddItem(6, "Gurubashi Arena", 21);
        Menu->AddItem(8, "Buff me up, baby!", 96);
        Menu->AddItem(9, "Remove Resurrection Sickness", 97);
        if(AutoSend)
            Menu->SendTo(Plr);
    }

void Warper::GossipSelectOption(Object * pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
    {
    Creature * pCreature = (pObject->GetTypeId()==TYPEID_UNIT)?((Creature*)pObject):NULL;
    if(pCreature==NULL)
        return;

        GossipMenu * Menu;
        switch(IntId)
        {
        case 0:
        GossipHello(pObject, Plr, true);
        break;
                    
        case 1:     // Hord Cities
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                Menu->AddItem(5, "Silvermoon", 4);
                Menu->AddItem(5, "Orgrimmar", 5);
                Menu->AddItem(5, "Thunder Bluff", 6);
                Menu->AddItem(5, "Undercity", 7);

                Menu->SendTo(Plr);
                }
        break;


        case 2:     // Alliance Cities
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                Menu->AddItem(5, "The Exodar", 8);
                Menu->AddItem(5, "Stormwind", 9);
                Menu->AddItem(5, "Ironforge", 10);
                Menu->AddItem(5, "Darnassus", 11);

                Menu->SendTo(Plr);
                }
            break;

        case 3:     // Outland Locations
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                Menu->AddItem(5, "Hellfire Peninsula", 12);
                Menu->AddItem(5, "Zangermarsh", 13);
                Menu->AddItem(5, "Nagrand", 14);
                Menu->AddItem(5, "Blades Edge Mountains", 15);
                Menu->AddItem(5, "Netherstorm", 16);
                Menu->AddItem(5, "Terokkar Forest", 17);
                Menu->AddItem(5, "Shadowmoon Valley", 18);

                Menu->SendTo(Plr);
                }
            break;

        case 4://Silvermoon
        {
        Plr->EventTeleport(530, 9400.486328, -7278.376953, 14.206780);
        }break;

        case 5://Orgrimmar
        {
        Plr->EventTeleport(1, 1371.068970, -4370.801758, 26.052483);
        }break;

        case 6://ThunderBluff
            {
                Plr->EventTeleport(1, -1304.569946, 205.285004, 68.681396);
            }
            break;

        case 7://Undercity
            {
                Plr->EventTeleport(0, 2050.203125, 285.650604, 56.994549);
            }
            break;

        case 8: //Exodar
            {
                Plr->EventTeleport(530, -4072.202393, -12014.337891, -1.277277);
            }
            break;

        case 9: //Stormwind
            {
                Plr->EventTeleport(0, -9100.480469, 406.950745, 92.594185);
            }
            break;

        case 10: //Ironforge
            {
                Plr->EventTeleport(0, -5028.265137, -825.976563, 495.301575);
            }
            break;

        case 11: //Darnassus
            {
                Plr->EventTeleport(1, 9985.907227, 1971.155640, 1326.815674);
            }
            break;

        case 12: //Hellfire Peninsula
            {
                Plr->EventTeleport(530, -248.160004, 922.348999, 84.379799);
            }
            break;

        case 13: //Zangermarsh
            {
                Plr->EventTeleport(530, -225.863632, 5405.927246, 22.346397);
            }
            break;

        case 14: //Nagrand
            {
                Plr->EventTeleport(530, -468.232330, 8418.666016, 28.031298);

            }
            break;

        case 15: //Blades Edge Mountains
            {
                Plr->EventTeleport(530, 1471.672852, 6828.047852, 107.759239);

            }
            break;

        case 16: //Netherstorm
            {
                Plr->EventTeleport(530, 3396.123779, 4182.208008, 137.097992);

            }
            break;

        case 17: //Terokkar Forest
            {
                Plr->EventTeleport(530, -1202.426636, 5313.692871, 33.774723);

            }
            break;

        case 18: //Shadowmoon Valley
            {
                Plr->EventTeleport(530, -2859.522461, 3182.34773, 10.008426);

            }
            break;

        case 20: //Shattrath
             {
                Plr->EventTeleport(530, -1887.510010, 5359.379883, -12.427300);

             }
             break;
        case 21: // Gurubsahi Arena
             {
                Plr->EventTeleport(0, -13271.959961, 149.105515, 34.464458);

             }
             break;
           
        case 30: // Azeroth Instances 
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                Menu->AddItem(5, "Shadowfang Keep", 31);
                Menu->AddItem(5, "Scarlet Monastery", 32);
                Menu->AddItem(5, "Zul'Farrak", 33);
                Menu->AddItem(5, "Stratholme", 41);
                Menu->AddItem(5, "Scholomance", 40);
                Menu->AddItem(5, "Blackrock Spire", 42);
                Menu->AddItem(5, "Onyxia's Lair", 38);
                Menu->AddItem(5, "Molten Core", 37);
                Menu->AddItem(5, "Zul'Gurub", 34);
                Menu->AddItem(5, "Karazhan", 43);
                Menu->AddItem(5, "Ahn'Qirai 20", 35);
                Menu->AddItem(5, "Ahn'Qirai 40", 36);
                Menu->AddItem(5, "Naxxramas", 39);
                Menu->AddItem(5, "Caverns of Time", 44);
                
                Menu->SendTo(Plr);
                }
                break;

        case 31: // Shadowfang Keep
             {
                             Plr->EventTeleport(0, -234.495087, 1561.946411, 76.892143);
             }
             break;
        case 32: // Scarlet Monastery
             {
                             Plr->EventTeleport(0, 2870.442627, -819.985229, 160.331085);
             }
             break;
        case 33: // Zul'Farrak
             {
                             Plr->EventTeleport(1, -6797.278809, -2903.917969, 9.953360);
             }
             break;
        case 34: // Zul'Gurub
             {
                             Plr->EventTeleport(0, -11919.073242, -1202.459374, 92.298744);
             }
             break;
        case 35: // Ahn'Qirai 20
             {
                             Plr->EventTeleport(1, -8394.730469, 1485.658447, 21.038563);
             }
             break;
        case 36: // Ahn'Qirai 40
             {
                             Plr->EventTeleport(1, -8247.316406, 1970.156860, 129.071472);
            }
             break;
        case 37: // Molten Core
             {
              // Plr->EventTeleport(0, -7515.409668, -1045.369629, 182.301208);
              Plr->EventTeleport(409, 1089.6, -470.19, -106.41);
             }
             break;
        case 38: // Onyxia
                 {
                     // Plr->EventTeleport(1, -4708.491699, -3727.672363, 54.535076);
                     Plr->EventTeleport(249, 30.0, -64.0, -5.0);
                 }
                 break;
        case 39: // Naxxramas
                 {
                     // Plr->EventTeleport(0, 3132.915283, -3731.012939, 138.658371);
                     Plr->EventTeleport(533, 3006.06, -3436.72, 293.891);
                 }
                 break;
        case 40: //Scholomance
                { 
                    Plr->EventTeleport(0, 1267.468628, -2556.651367, 94.127983);
                }
                break;
        case 41: //Stratholme
                { 
                    Plr->EventTeleport(0, 3359.111572, -3380.8444238, 144.781860);
                }break;
                        case 42: // Black Rock Spire
                { 
                    Plr->EventTeleport(0, -7527.129883, -1224.997437, 285.733002);
                }break;
            case 43: // Kharazan
                { 
                    // Plr->EventTeleport(0, -11122.913086, -2014.498779, 47.079350);
                    Plr->EventTeleport(532, -11087.3, -1977.47, 49.6135);

                }break;
            case 44: // Caverns of Times
                { 
                    Plr->EventTeleport(1, -8519.718750, -4297.542480, -208.441376);
                }break;


        case 50: // Outland Instances
            {
            objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
            Menu->AddItem(0, "Outland Raids", 64);
            Menu->AddItem(5, "Hellfire Ramparts", 51);
            Menu->AddItem(5, "The Blood Furnace", 52);
            Menu->AddItem(5, "The Shattered Halls", 53);
            Menu->AddItem(5, "The Underbog", 54);
            Menu->AddItem(5, "The Slave Pens", 55);
            Menu->AddItem(5, "The Steamvault", 56);
            Menu->AddItem(5, "Mana-Tombs", 57);
            Menu->AddItem(5, "Auchenai Crypts", 58);
            Menu->AddItem(5, "Sethekk Halls", 59);
            Menu->AddItem(5, "Shadow Labyrinth", 60);
            Menu->AddItem(5, "The Mechanar", 61);
            Menu->AddItem(5, "The Botanica", 62);
            Menu->AddItem(5, "The Arcatraz", 63);
            
                Menu->SendTo(Plr);
            }
            break;
                
        case 51: // Hellfire Ramparts
                { 
                    Plr->EventTeleport(530, -360.670990, 3071.899902, -15.097700);
                }break;
        case 52: // The Blood Furnace
                { 
                    Plr->EventTeleport(530, -303.506012, 3164.820068, 31.742500);
                }break;
        case 53: // The Shattered Halls
                { 
                    Plr->EventTeleport(530, -311.083527, 3083.291748, -3.745923);
                }break;
        case 54: // The Underbog
                { 
                    Plr->EventTeleport(530, 777.088989, 6763.450195, -72.062561);
                }break;
        case 55: // The Slave Pens
                { 
                    Plr->EventTeleport(530, 719.507996, 6999.339844, -73.074303);
                }break;
        case 56: // The Steamvault
                { 
                    Plr->EventTeleport(530, 816.590027, 6934.669922, -80.544601);
                }break;
        case 57: // Mana-Tombs
                { 
                    Plr->EventTeleport(530, -3079.810059, 4943.040039, -101.046997);
                }break;
        case 58: // Auchenai Crypts
                { 
                    Plr->EventTeleport(530, -3361.959961, 5225.770020, -101.047997);
                }break;
        case 59: // Sethekk Halls
                { 
                    Plr->EventTeleport(530, -3362.219971, 4660.410156, -101.049004 );
                }break;
        case 60: // Shadow Labyrinth
                { 
                    Plr->EventTeleport(530, -3645.060059, 4943.620117, -101.047997);
                }break;
        case 61: // The Mechanar
                { 
                    Plr->EventTeleport(530, 2862.409912, 1546.089966, 252.158691);
                }break;
        case 62: // The Botanica
                { 
                    Plr->EventTeleport(530, 3413.649902, 1483.319946, 182.837997);
                }break;
        case 63: // The Arcatraz
                { 
                    Plr->EventTeleport(530, 3311.598145, 1332.745117, 505.557251);
                }break;


        case 64: // Outland Raids
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                Menu->AddItem(5, "Magtheridon's Lair", 65);
                Menu->AddItem(5, "Serpentshrine Cavern", 66);
                Menu->AddItem(5, "Gruul's Lair", 67);
                Menu->AddItem(5, "The Eye", 68);
                Menu->AddItem(5, "Black Temple", 69);

                Menu->SendTo(Plr);
                }
                break;

        case 65: // Magtheridon's Lair
                {
                    Plr->EventTeleport(530, -313.678986, 3088.350098, -116.501999);
                }break;
        case 66: // Serpentshrine Cavern
                { 
                    Plr->EventTeleport(530, 830.542908, 6865.445801, -63.785503);
                }break;
        case 67: // Gruul's Lair
                { 
                    Plr->EventTeleport(530, 3549.424072, 5179.854004, -4.430779);
                }break;
        case 68: // The Eye
                { 
                    Plr->EventTeleport(530, 3087.310059, 1373.790039, 184.643005);
                }break;
        case 69: // Black Temple
                {
                    // Plr->EventTeleport(530, -3609.739990, 328.252014, 37.307701 );
                    Plr->EventTeleport(564, 97.0894, 1001.96, -86.8798 );
                }break;
                
        
                
                case 80: //SUB MENU
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                        Menu->AddItem(5, "Eastern Kingdoms", 81);
                        Menu->AddItem(5, "Kalimdor", 82);
                        Menu->AddItem(5, "Outland", 3);
                        
                           Menu->SendTo(Plr);
                }
                break;

                case 81: // EASTERN KINGDOM
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                        Menu->AddItem(5, "Eastern Plaguelands", 70);
                        Menu->AddItem(5, "Western Plaguelands", 71);
                        Menu->AddItem(5, "Tristfal Glades", 72);
                        Menu->AddItem(5, "Alterac Mountains", 73);
                        Menu->AddItem(5, "Silverpine Forest", 74);
                        Menu->AddItem(5, "Hillsbrad Foothills", 75);
                        Menu->AddItem(5, "The Hinterlands", 76);
                        Menu->AddItem(5, "Arathi Highlands", 77);
                        Menu->AddItem(5, "Wetlands", 78);
                        Menu->AddItem(5, "Dun Morogh", 79);
                        Menu->AddItem(5, "Loch Modan", 100);
                        Menu->AddItem(5, "--> Second Page -->", 151);
                           Menu->SendTo(Plr);
                }
                break;

                case 151:
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                        Menu->AddItem(5, "Badlands", 101);
                        Menu->AddItem(5, "Blackrock Mountain", 102);
                        Menu->AddItem(5, "Redridge Mountain", 103);
                        Menu->AddItem(5, "Elwynn Forest", 104);
                        Menu->AddItem(5, "Duskwood", 105);
                        Menu->AddItem(5, "Westfall", 106);
                        Menu->AddItem(5, "Swamp of Sorrows", 107);
                        Menu->AddItem(5, "The Blasted Lands", 108);
                        Menu->AddItem(5, "Deadwind Pass", 109);
                        Menu->AddItem(5, "Stranglethorn Vale", 110);
                        
                           Menu->SendTo(Plr);
                }
                break;

                case 82: // KALIMDOR
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                        Menu->AddItem(5, "Moonglade", 111);
                        Menu->AddItem(5, "Winterspring", 112);
                        Menu->AddItem(5, "Felwood", 113);
                        Menu->AddItem(5, "Darkshore", 114);
                        Menu->AddItem(5, "Azshara", 115);
                        Menu->AddItem(5, "Ashenvale", 116);
                        Menu->AddItem(5, "Stonetalon Mountains", 117);
                        Menu->AddItem(5, "The Barrens", 118);
                        Menu->AddItem(5, "Durotar", 119);
                        Menu->AddItem(5, "--> Second Page -->", 152);
                           Menu->SendTo(Plr);
                }
                break;

                case 152:
                {
                objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
                        Menu->AddItem(5, "Mulgore", 120);
                        Menu->AddItem(5, "Desolace", 121);
                        Menu->AddItem(5, "Dustwallow Marsh", 122);
                        Menu->AddItem(5, "Feralas", 123);
                        Menu->AddItem(5, "Thousand Needles", 124);
                        Menu->AddItem(5, "Tanaris Desert", 125);
                        Menu->AddItem(5, "Un'Goro Crater", 126);
                        Menu->AddItem(5, "Silithus", 127);
                        
                           Menu->SendTo(Plr);
                }
                break;

// EASTERN KINGDOMS [case] //
                case 70: // WesternPlaguelands
                {
                    Plr->EventTeleport( 0, 1855, -1569, 61);
                }break;

                case 71: // EasternPlaguelands 
                {
                    Plr->EventTeleport( 0, 2278, -5311, 89);
                }break;

                case 72: // TristfallGlades
                {
                    Plr->EventTeleport( 0, 2032, -432, 37);
                }break;

                case 73: // AlteracMountains
                {
                    Plr->EventTeleport( 0, 552, -275, 152);
                }break;

                case 74: // Silverpine Forest
                {
                    Plr->EventTeleport( 0, -126, 815, 68);
                }break;

                case 75: // Hillsbrad
                {
                    Plr->EventTeleport( 0, -502, 91, 61);
                }break;

                case 76: // TheHinterlands
                {
                    Plr->EventTeleport( 0, -678, -4018, 240);
                }break;

                case 77: // ArathiHighlands
                {
                    Plr->EventTeleport( 0, -797, -2068, 35);
                }break;

                case 78: // Wetlands
                {
                    Plr->EventTeleport( 0, -3256, -2718, 11);
                }break;

                case 79: // Dunmorogh
                {
                    Plr->EventTeleport( 0, -5826, -1586, 366);
                }break;

                case 100: // Lochmodan
                {
                    Plr->EventTeleport( 0, -4771, -3329, 347);
                }break;

                case 101: // Badlands
                {
                    Plr->EventTeleport( 0, -7027, -3330, 243);
                }break;

                case 102: // Blackrockmountain
                {
                    Plr->EventTeleport( 0, -7317, -1072, 279);
                }break;

                case 103: // Redridgemountain
                {
                    Plr->EventTeleport( 0, -9168, -2726, 92);
                }break;

                case 104: // ElwynnForest
                {
                    Plr->EventTeleport( 0, -9325, -1038, 67);
                }break;

                case 105: // Duskwood
                {
                    Plr->EventTeleport( 0, -10694, -884, 80);
                }break;

                case 106: // Westfall
                {
                    Plr->EventTeleport( 0, -11018, 1513, 45);
                }break;

                case 107: // SwampofSorrows
                {
                    Plr->EventTeleport( 0, -10429, -3828, -29);
                }break;

                case 108: // BlastedLands
                {
                    Plr->EventTeleport( 0, -11853, -3197, -25);
                }break;

                case 109: // DeadwindPass
                {
                    Plr->EventTeleport( 0, -10435, -1809, 101);
                }break;

                case 110: // Stranglethornvale
                {
                    Plr->EventTeleport( 0, -13382, 2, 23);
                }break;



// KALIMDOR [case] //

                case 111: // Moonglade
                {
                    Plr->EventTeleport( 1, 7978, -2501, 490);
                }break;

                case 112: // winterspring
                {
                    Plr->EventTeleport( 1, 6721, -4659, 722);
                }break;

                case 113: // felwood
                {
                    Plr->EventTeleport( 1, 4878, -614, 362);
                }break;

                case 114: // darkshore
                {
                    Plr->EventTeleport( 1, 4565, 438, 34);
                }break;

                case 115: // azshara
                {
                    Plr->EventTeleport( 1, 2717, -5968, 108);
                }break;

                case 116: // ashenvale
                {
                    Plr->EventTeleport( 1, 3469, 847, 7);
                }break;

                case 117: // Stonetalon
                {
                    Plr->EventTeleport( 1, 898, 922, 128);
                }break;

                case 118: // TheBarrens
                {
                    Plr->EventTeleport( 1, -1330, -3120, 93);
                }break;

                case 119: // Durotar
                {
                    Plr->EventTeleport( 1, 242, -5151, 3);
                }break;

                case 120: // Mulgore
                {
                    Plr->EventTeleport( 1, -2326, -367, -6);
                }break;

                case 121: // Desolace
                {
                    Plr->EventTeleport( 1, -939, 1091, 95);
                }break;

                case 122: // Dustwallow
                {
                    Plr->EventTeleport( 1, -3719, -2530, 71);
                }break;

                case 123: // Feralas
                {
                    Plr->EventTeleport( 1, -4508, 2041, 53);
                }break;

                case 124: // ThousandNeedles
                {
                    Plr->EventTeleport( 1, -4619, -1850, 88);
                }break;

                case 125: // Tanaris
                {
                    Plr->EventTeleport( 1, -7373, -2950, 12);
                }break;

                case 126: // Ungoro
                {
                    Plr->EventTeleport( 1, -6186, -1106, -215);
                }break;

                case 127: // Silithus
                {
                    Plr->EventTeleport( 1, -6824, 821, 51);
                }break;

                case 146:
                {
                    Plr->EventTeleport(1, 4314, -4069, 937);
                }break;

                case 148:
                {
                    Plr->EventTeleport(1, 6039, -1198, 374);
                }break;
                
    
        case 96:
        {
        if(Plr->getLevel() >= 60)
        {
        pCreature->CastSpell(Plr, 15366, 0);
        pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "By all that is wrong in this world, I bless you." );
        Plr->Gossip_Complete();
        }else{
        pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "You need to be at least level 60 in order to recieve my buff." );
        Plr->Gossip_Complete();}
        }break;    

        case 97: // REMOVE RESSURECTION SICKNESS
        {
        Plr->addSpell(15007);
        Plr->removeSpell(15007,0,0,0);
        pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "You have been cured of that dreaded sickness." );
        Plr->Gossip_Complete();
        }break;

        case 998: // Mall
        {
            Plr->EventTeleport(0, 3552.310059, -3334.409912, 129.309998);
        }break;

 }
 }

void Warper::GossipEnd(Object * pObject, Player* Plr)
{
    GossipScript::GossipEnd(pObject, Plr);
}

void SetupWarper(ScriptMgr * mgr)
{
    GossipScript * gs = (GossipScript*) new Warper();
    mgr->register_gossip_script(112230, gs);
}