vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        Magellan

        By Torgo <jimmcq@concentric.net>

        This mod will populate the the main map with MetaMap for local landmarks.
        It requires the either MetaMap or CT_MapMod AddOn to be installed.

        Feel free to use any of this code in other mods, or to modify this AddOn itself.  My only request is that you send me your modifications.

        URL: http://curse-gaming.com/mod.php?addid=994
        
        Modified for MetaMap by Devla
   ]]


Magellan_Version = "002";
Magellan_ZoneNames = {};

function Magellan_Init(...)
        if (CT_MapMod_AddNote or MiniNotePOI) then
                this:RegisterEvent("WORLD_MAP_UPDATE");
        else
                DEFAULT_CHAT_FRAME:AddMessage("Magellan could not find either MetaMap nor CT_MapMod to update");
        end
        for i=1, arg.n, 1 do
                Magellan_LoadZones(i, GetMapZones(i));
        end
        SlashCmdList["MAGELLANSYSTEMSLASHMAIN"] = Magellan_Main_ChatCommandHandler;
        SLASH_MAGELLANSYSTEMSLASHMAIN1 = "/magellan";
end

function Magellan_LoadZones(...)
        j = arg[1];
        Magellan_ZoneNames[j] = {};
        for i=1, arg.n-1, 1 do
                Magellan_ZoneNames[j][i] = arg[i+1];
        end
end

function Magellan_OnEvent()
        NumMapLandmarks = GetNumMapLandmarks();
        mapZoneName = nil;
        if( GetCurrentMapContinent() == -1 ) then
        return
        end
        for landmarkIndex = 1, NumMapLandmarks, 1 do
                name, unknown, textureIndex, x, y = GetMapLandmarkInfo(landmarkIndex);
                name = Magellan_AddNote(name, textureIndex, x, y);
                if (name) then
                        mapZoneName = name;
                end
        end
        if (mapZoneName and DEFAULT_CHAT_FRAME) then
                DEFAULT_CHAT_FRAME:AddMessage("Magellan updated Map Notes for "..mapZoneName, 1.0, 0.5, 0.25);
                PlaySound("MapPing");
        end
end

function Magellan_AddNote(name, textureIndex, x, y)
                local continent = GetCurrentMapContinent();
                        if( continent == 0 ) then
                                return;
                        end
                local currentZone;
                local zone;
        if( continent == -1 ) then
                if( not MetaMapNotes_Data[GetZoneText()] ) then
                        MetaMapNotes_Data[GetZoneText()] = { };
                end
                currentZone = MetaMapNotes_Data[GetZoneText()];
                        zone = -1;
        else
                        zone = MetaMapNotes_ZoneShift[continent][GetCurrentMapZone()];
                if( not MetaMapNotes_Data[continent][zone] ) then
                        MetaMapNotes_Data[continent][zone] = { };
        end

        currentZone = MetaMapNotes_Data[continent][zone];
        end

        if (zone == 0) then
                return;
        end

        if (MiniNotePOI ~= nil) then
        -- MetaMap AddOn found
                local id = 0;
                local icon = 9;

                if (textureIndex == 15) then
                        icon = 5;
                elseif (textureIndex == 6) then
                        icon = 6;
                end

        if (x == 0 and y == 0) then
                return;
        end

        local checknote = false;
                if( continent > 0 ) then
                        checknote = MetaMapNotes_CheckNearNotes(continent, zone, x, y);
                end

        if (checknote == false) then
                local i = 0;
                for j, value in currentZone do
                i = i + 1;
        end
        if (i < MetaMapNotes_NotesPerZone) then
                MetaMapNotes_TempData_Id = i + 1;
                currentZone[MetaMapNotes_TempData_Id] = {};
                currentZone[MetaMapNotes_TempData_Id].name = name;
                currentZone[MetaMapNotes_TempData_Id].ncol = 6;
                currentZone[MetaMapNotes_TempData_Id].inf1 = "";
                currentZone[MetaMapNotes_TempData_Id].in1c = 0;
                currentZone[MetaMapNotes_TempData_Id].inf2 = "";
                currentZone[MetaMapNotes_TempData_Id].in2c = 0;
                currentZone[MetaMapNotes_TempData_Id].creator = "Magellan AddOn";
                currentZone[MetaMapNotes_TempData_Id].icon = icon;
                currentZone[MetaMapNotes_TempData_Id].xPos = x;
                currentZone[MetaMapNotes_TempData_Id].yPos = y;

        if( continent > 0 ) then
                return Magellan_ZoneNames[continent][zone];
        else
                return GetZoneText();
        end
        end
        end

        elseif (CT_MapMod_AddNote) then
        -- CT_MapMod AddOn found
                zonename = Magellan_ZoneNames[continent][zone];
                update = true;
        local icon = 4;

        if (textureIndex == 15) then
                icon = 1;
                elseif (textureIndex == 6) then
                icon = 3;
        end

        if (CT_UserMap_Notes[zonename] ) then
                for j, value in CT_UserMap_Notes[zonename] do
        noteName = CT_UserMap_Notes[zonename][j]["name"];
                if (noteName == name) then
        update = false;
        end
        end
        end

        if (update == true) then
                CT_MapMod_AddNote(x, y, zonename, name, "Created by Magellan AddOn", icon, 4);
                return zonename;
        end
        end
        end

function Magellan_Extract_NextParameter(msg)
        local params = msg;
        local command = params;
        local index = strfind(command, " ");
        if ( index ) then
                command = strsub(command, 1, index-1);
                params = strsub(params, index+1);
        else
                params = "";
        end
        return command, params;
end

function Magellan_Main_ChatCommandHandler(msg)
        local commandName, params = Magellan_Extract_NextParameter(msg);
        if ( strfind( commandName, "reset" ) ) then
                Magellan_DeleteNotes();
        end
end

function Magellan_DeleteNotes()
        local i;
        local j;
        local k;
        for i, value in MetaMapNotes_Data do
                for j, value in MetaMapNotes_Data[i] do
                        for k, value in MetaMapNotes_Data[i][j] do
                                if (MetaMapNotes_Data[i][j][k].creator == "Magellan AddOn") then
                                        Magellan_DeleteNote(i, j, k);
                                end
                        end
                end
        end
        DEFAULT_CHAT_FRAME:AddMessage("All Magellan Map Notes have been deleted.");
end

function Magellan_DeleteNote(continent, zone, id)
        if (id == 0) then
                MetaMapNotes_tloc_xPos = nil;
                MetaMapNotes_tloc_yPos = nil;
                return;
        elseif (id == -1) then
                MetaMapNotes_PartyNoteData.xPos = nil;
                MetaMapNotes_PartyNoteData.yPos = nil;
                MetaMapNotes_PartyNoteData.continent = nil;
                MetaMapNotes_PartyNoteData.zone = nil;
                return;
        end
        local lastEntry = Magellan_LastNote(continent, zone) - 1;
        MetaMapNotes_DeleteLines(continent, zone, MetaMapNotes_Data[continent][zone][id].xPos, MetaMapNotes_Data[continent][zone][id].yPos);
        if ((lastEntry ~= 0) and (id <= lastEntry)) then
                MetaMapNotes_Data[continent][zone][id].name = MetaMapNotes_Data[continent][zone][lastEntry].name;
                MetaMapNotes_Data[continent][zone][lastEntry].name = nil;
                MetaMapNotes_Data[continent][zone][id].ncol = MetaMapNotes_Data[continent][zone][lastEntry].ncol;
                MetaMapNotes_Data[continent][zone][lastEntry].ncol = nil;
                MetaMapNotes_Data[continent][zone][id].inf1 = MetaMapNotes_Data[continent][zone][lastEntry].inf1;
                MetaMapNotes_Data[continent][zone][lastEntry].inf1 = nil;
                MetaMapNotes_Data[continent][zone][id].in1c = MetaMapNotes_Data[continent][zone][lastEntry].in1c;
                MetaMapNotes_Data[continent][zone][lastEntry].in1c = nil;
                MetaMapNotes_Data[continent][zone][id].inf2 = MetaMapNotes_Data[continent][zone][lastEntry].inf2;
                MetaMapNotes_Data[continent][zone][lastEntry].inf2 = nil;
                MetaMapNotes_Data[continent][zone][id].in2c = MetaMapNotes_Data[continent][zone][lastEntry].in2c;
                MetaMapNotes_Data[continent][zone][lastEntry].in2c = nil;
                MetaMapNotes_Data[continent][zone][id].creator = MetaMapNotes_Data[continent][zone][lastEntry].creator;
                MetaMapNotes_Data[continent][zone][lastEntry].creator = nil;
                MetaMapNotes_Data[continent][zone][id].icon = MetaMapNotes_Data[continent][zone][lastEntry].icon;
                MetaMapNotes_Data[continent][zone][lastEntry].icon = nil;
                MetaMapNotes_Data[continent][zone][id].xPos = MetaMapNotes_Data[continent][zone][lastEntry].xPos;
                MetaMapNotes_Data[continent][zone][lastEntry].xPos = nil;
                MetaMapNotes_Data[continent][zone][id].yPos = MetaMapNotes_Data[continent][zone][lastEntry].yPos;
                MetaMapNotes_Data[continent][zone][lastEntry].yPos = nil;
                MetaMapNotes_Data[continent][zone][lastEntry] = nil;
        end
        if (continent == MetaMapNotes_MiniNote_Data.continent and zone == MetaMapNotes_MiniNote_Data.zone) then
                if (MetaMapNotes_MiniNote_Data.id > id) then
                        MetaMapNotes_MiniNote_Data.id = id - 1;
                elseif (MetaMapNotes_MiniNote_Data.id == id) then
                        MetaMapNotes_MiniNote_Data.id = 0;
                end
        end
end

function Magellan_LastNote(continent, zone)
        local i = 0;
        for j, value in MetaMapNotes_Data[continent][zone] do
                i = i + 1;
        end
        return (i + 1);
end

Generated by GNU Enscript 1.6.5.90.