-- Global Channel Variable CT_CHAT_CHANNEL = "CTGlobalChat"; CT_UserMap_Notes = { }; CT_UserMap_Zone = { }; CT_UserMap_Zone["Blackrock Spire"] = 4; CT_UserMap_Zone["Alterac Mountains"] = 1; CT_UserMap_Zone["Arathi Highlands"] = 2; CT_UserMap_Zone["Badlands"] = 3; CT_UserMap_Zone["Blasted Lands"] = 5; CT_UserMap_Zone["Tirisfal Glades"] = 6; CT_UserMap_Zone["Silverpine Forest"] = 7; CT_UserMap_Zone["Western Plaguelands"] = 8; CT_UserMap_Zone["Eastern Plaguelands"] = 9; CT_UserMap_Zone["Hillsbrad Foothills"] = 10; CT_UserMap_Zone["The Hinterlands"] = 11; CT_UserMap_Zone["Dun Morogh"] = 12; CT_UserMap_Zone["Searing Gorge"] = 13; CT_UserMap_Zone["Burning Steppes"] = 14; CT_UserMap_Zone["Elwynn Forest"] = 15; CT_UserMap_Zone["Darrowmere Lake"] = 16; CT_UserMap_Zone["Deadwind Pass"] = 17; CT_UserMap_Zone["Duskwood"] = 18; CT_UserMap_Zone["Loch Modan"] = 19; CT_UserMap_Zone["Redridge Mountains"] = 20; CT_UserMap_Zone["Stranglethorn Vale"] = 21; CT_UserMap_Zone["Swamp of Sorrows"] = 22; CT_UserMap_Zone["Westfall"] = 23; CT_UserMap_Zone["Wetlands"] = 24; CT_UserMap_Zone["Stonetalon Mountains"] = 25; CT_UserMap_Zone["Dustwallow Marsh"] = 26; CT_UserMap_Zone["Feralas"] = 27; CT_UserMap_Zone["Tanaris"] = 28; CT_UserMap_Zone["Durotar"] = 29; CT_UserMap_Zone["Mulgore"] = 30; CT_UserMap_Zone["The Barrens"] = 31; CT_UserMap_Zone["Teldrassil"] = 32; CT_UserMap_Zone["Darkshore"] = 33; CT_UserMap_Zone["Ashenvale"] = 34; CT_UserMap_Zone["Desolace"] = 35; CT_UserMap_Zone["Thousand Needles"] = 36; CT_UserMap_Zone["Azshara"] = 37; CT_UserMap_Zone["Felwood"] = 38; CT_UserMap_Zone["Un'Goro Crater"] = 39; CT_UserMap_Zone["Moonglade"] = 40; CT_UserMap_Zone["Stormwind City"] = 41; CT_UserMap_Zone["Ironforge"] = 42; CT_UserMap_Zone["Undercity"] = 43; CT_UserMap_Zone["Darnassus"] = 44; CT_UserMap_Zone["Durotar"] = 45; CT_UserMap_Zone["Orgrimmar"] = 46; CT_UserMap_Zone["Silithus"] = 47; CT_UserMap_Zone["Thunder Bluff"] = 48; CT_UserMap_Zone["Winterspring"] = 49; CT_MapMod_Options = { }; CT_UserMap_Icons = { "GreyNote", "BlueShield", "RedDot", "WhiteCircle", "GreenSquare", "RedCross", "Herb", "Ore" }; CT_UserMap_HerbIcons = { "Herb_Bruiseweed", "Herb_ArthasTears", "Herb_BlackLotus", "Herb_Blindweed", "Herb_Briarthorn", "Herb_Dreamfoil", "Herb_Earthroot", "Herb_Fadeleaf", "Herb_Firebloom", "Herb_GhostMushroom", "Herb_GoldenSansam", "Herb_Goldthorn", "Herb_GraveMoss", "Herb_Gromsblood", "Herb_Icecap", "Herb_KhadgarsWhisker", "Herb_Kingsblood", "Herb_Liferoot", "Herb_Mageroyal", "Herb_MountainSilversage", "Herb_Peacebloom", "Herb_Plaguebloom", "Herb_PurpleLotus", "Herb_Silverleaf", "Herb_Stranglekelp", "Herb_Sungrass", "Herb_Swiftthistle", "Herb_WildSteelbloom", "Herb_Wintersbite", "Ore_CopperVein", "Ore_GoldVein", "Ore_IronVein", "Ore_MithrilVein", "Ore_SilverVein", "Ore_ThoriumVein", "Ore_TinVein", "Ore_TruesilverVein" }; CT_NUM_USERMAP_NOTES = 250; CT_UserMap_CreateNote = 1; CT_LastMessage = {}; CT_Hooked_WorldMapButton_OnClick = WorldMapButton_OnClick; function CT_WorldMapButton_OnClickHook(mouseButton, button) if ( mouseButton == "LeftButton" ) then if ( not button ) then button = this; end local zone = WorldMapZoneDropDownText:GetText(); local cX, cY = GetCursorPosition(); local ceX, ceY = WorldMapFrame:GetCenter(); local wmfw, wmfh = WorldMapButton:GetWidth(), WorldMapButton:GetHeight(); cX = ( ( ( cX / WorldMapFrame:GetScale() ) - ( ceX - wmfw / 2 ) ) / wmfw + 22/10000 ); cY = ( ( ( ( ceY + wmfh / 2 ) - ( cY / WorldMapFrame:GetScale() ) ) / wmfh ) - 262/10000 ); local zone = WorldMapZoneDropDownText:GetText(); if ( IsControlKeyDown() ) then local id = CT_MapMod_AddNote(cX, cY, zone, "New note", "", 1, 1); CT_UserMap_OptionsMenu.note = id; CT_UserMap_OptionsMenu.zone = zone; CT_UserMap_OptionsMenu:Show(); else CT_Hooked_WorldMapButton_OnClick(mouseButton, button); end else CT_Hooked_WorldMapButton_OnClick(mouseButton, button); end end function CT_MapMod_CreateNoteOnPlayer() local x, y = GetPlayerMapPosition("player"); if ( x ~= 0 and y ~= 0 ) then local id = CT_MapMod_AddNote(x, y, WorldMapZoneDropDownText:GetText(), "New note", "", 1, 1); CT_UserMap_OptionsMenu.note = id; CT_UserMap_OptionsMenu.zone = WorldMapZoneDropDownText:GetText(); CT_UserMap_OptionsMenu:Show(); end end WorldMapButton_OnClick = CT_WorldMapButton_OnClickHook; CT_Hooked_WorldMapButton_OnUpdate = WorldMapButton_OnUpdate; function CT_WorldMapButton_OnUpdateHook(arg) CT_Hooked_WorldMapButton_OnUpdate(arg); local i, y = 0; if ( not CT_UserMap_Notes[WorldMapZoneDropDownText:GetText()] ) then for i = 1, CT_NUM_USERMAP_NOTES, 1 do getglobal("CT_UserMap_Note" .. i):Hide(); end CT_NumNotes:SetText("Map Notes: |c00FFFFFF0|r/|c00FFFFFF250|r"); return; end -- Calculate what notes to show local y = 1; for i, var in CT_UserMap_Notes[WorldMapZoneDropDownText:GetText()] do if ( y > CT_NUM_USERMAP_NOTES ) then break; end if ( not CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].hideGroups[CT_MAPMOD_SETS[(var.set or 1)]] and ( not CT_MapMod_Filter or string.find(strlower(var.name), strlower(CT_MapMod_Filter)) or string.find(strlower(var.descript), strlower(CT_MapMod_Filter)) ) ) then local note = getglobal("CT_UserMap_Note" .. y); local IconTexture = getglobal("CT_UserMap_Note" .. y .."Icon"); if ( var.set == 7 or var.set == 8 ) then local offset = 0; if ( var.set == 8 ) then offset = 29; end if ( CT_UserMap_HerbIcons[var.icon+offset] ) then IconTexture:SetTexture("Interface\\AddOns\\CT_MapMod\\Resource\\" .. CT_UserMap_HerbIcons[var.icon+offset]); else IconTexture:SetTexture("Interface\\AddOns\\CT_MapMod\\Resource\\Herb_Bruiseweed"); end else IconTexture:SetTexture("Interface\\AddOns\\CT_MapMod\\Skin\\" .. CT_UserMap_Icons[var.set]); end note:SetPoint("CENTER", "WorldMapDetailFrame", "TOPLEFT", var.x*WorldMapButton:GetWidth(), -var.y*WorldMapButton:GetHeight()); note:Show(); if ( not var.name ) then var.name = ""; end if ( not var.set or not CT_MAPMOD_SETS[var.set] ) then var.set = 1; end if ( not var.descript ) then var.descript = ""; end note.name = var.name; note.set = CT_MAPMOD_SETS[var.set]; note.descript = var.descript; note.id = i; note.x = var.x; note.y = var.y; y = y + 1; end end CT_NumNotes:SetText("Map Notes: |c00FFFFFF" .. y-1 .. "|r/|c00FFFFFF250|r"); for i = y, CT_NUM_USERMAP_NOTES, 1 do getglobal("CT_UserMap_Note" .. i):Hide(); end end WorldMapButton_OnUpdate = CT_WorldMapButton_OnUpdateHook; function CT_MapMod_AddNote(x, y, zone, text, descript, icon, set) local group; if ( tonumber(set) ) then group = tonumber(set); else group = set; end if ( not CT_UserMap_Notes[zone] ) then CT_UserMap_Notes[zone] = { }; end local temp = { ["x"] = x, ["y"] = y, ["name"] = text, ["descript"] = descript, ["icon"] = icon, ["set"] = group }; tinsert(CT_UserMap_Notes[zone], temp); return getn(CT_UserMap_Notes[zone]); end function CT_MapMod_OnNoteOver() local x, y = this:GetCenter(); local parentX, parentY = WorldMapButton:GetCenter(); if ( x > parentX ) then WorldMapTooltip:SetOwner(this, "ANCHOR_LEFT"); else WorldMapTooltip:SetOwner(this, "ANCHOR_RIGHT"); end WorldMapTooltip:ClearLines(); WorldMapTooltip:AddDoubleLine(this.name, this.set, 0, 1, 0, 0.6, 0.6, 0.6); if ( this.descript ) then WorldMapTooltip:AddLine(this.descript, nil, nil, nil, 1); end WorldMapTooltip:Show(); end function CT_MapMod_OnClick(btn) if ( btn == "LeftButton" ) then return; end CT_UserMap_OptionsMenu.note = this.id; CT_UserMap_OptionsMenu.zone = WorldMapZoneDropDownText:GetText(); CT_UserMap_OptionsMenu:Show(); end function CT_MapMod_OptionsMenu_OnShow() CT_UserMapFrame:Hide(); if ( not UIDROPDOWNMENU_OPEN_MENU ) then UIDROPDOWNMENU_OPEN_MENU = "CT_UserMap_OptionsMenuGroupDropDown"; end local note = CT_UserMap_Notes[this.zone][this.note]; CT_UserMap_OptionsMenuNameEB:SetText(note["name"]); CT_UserMap_OptionsMenuNameEB:HighlightText(); CT_UserMap_OptionsMenuDescriptEB:SetText(note["descript"]); CT_UserMap_OptionsMenuSendButton:Disable(); CT_UserMap_OptionsMenuSendEB.lastsend = ""; CT_UserMap_OptionsMenuSendEB:SetText(""); PlaySound("UChatScrollButton"); end function CT_MapMod_UpdateNote() local name, descript, set, icon; name = CT_UserMap_OptionsMenuNameEB:GetText(); descript = CT_UserMap_OptionsMenuDescriptEB:GetText(); icon = CT_UserMap_Notes[this:GetParent().zone][this:GetParent().note]["icon"]; if ( UIDropDownMenu_GetSelectedName(CT_UserMap_OptionsMenuGroupDropDown) ) then set = CT_UserMap_Notes[this:GetParent().zone][this:GetParent().note]["set"]; else set = UIDropDownMenu_GetSelectedID(CT_UserMap_OptionsMenuGroupDropDown); end CT_UserMap_Notes[this:GetParent().zone][this:GetParent().note]["name"] = name; CT_UserMap_Notes[this:GetParent().zone][this:GetParent().note]["descript"] = descript; CT_UserMap_Notes[this:GetParent().zone][this:GetParent().note]["set"] = set; CT_UserMap_Notes[this:GetParent().zone][this:GetParent().note]["icon"] = icon; end function CT_MapModDropDown_OnClick() UIDropDownMenu_SetSelectedID(CT_UserMap_OptionsMenuGroupDropDown, this:GetID(), 1); end function CT_MapModDropDown_OnShow() local set = CT_UserMap_Notes[this.zone][this.note]["set"]; if ( this.zone and this.note ) then if ( tonumber(set) and tonumber(set) == set ) then UIDropDownMenu_SetSelectedName(CT_UserMap_OptionsMenuGroupDropDown, CT_MAPMOD_SETS[set], nil); else UIDropDownMenu_SetSelectedName(CT_UserMap_OptionsMenuGroupDropDown, set, nil); end end UIDropDownMenu_SetText(CT_MAPMOD_SETS[set], CT_UserMap_OptionsMenuGroupDropDown); end function CT_MapModDropDown_OnInit() UIDROPDOWNMENU_INIT_MENU = "CT_UserMap_OptionsMenuGroupDropDown"; for key, val in CT_MAPMOD_SETS do local info = { }; info.text = val; info.value = val; info.owner = this; info.func = CT_MapModDropDown_OnClick; UIDropDownMenu_AddButton(info); end end function CT_MapModDropDown_Initialize() CT_MapModDropDown_OnInit(); end function CT_MapModDropDown_OnLoad() UIDropDownMenu_Initialize(this, CT_MapModDropDown_Initialize); UIDropDownMenu_SetWidth(130); end function CT_MapModSelectDropDown_OnLoad() UIDropDownMenu_Initialize(this, CT_MapModSelectDropDown_Initialize); UIDropDownMenu_SetWidth(130); end function CT_MapModSelectDropDown_OnClick() CT_GroupSelectDropDownText:SetText("Display Groups"); if ( not CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].hideGroups ) then CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].hideGroups = { }; end CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].hideGroups[this.value] = not CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].hideGroups[this.value]; end function CT_MapModSelectDropDown_Initialize() UIDROPDOWNMENU_INIT_MENU = "CT_GroupSelectDropDown"; for key, val in CT_MAPMOD_SETS do local info = { }; info.text = val; info.value = val; if ( CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")] and ( not CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].hideGroups or not CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].hideGroups[val] ) ) then info.checked = 1; end info.owner = this; info.func = CT_MapModSelectDropDown_OnClick; UIDropDownMenu_AddButton(info); end end function CT_MapMod_DeleteNote() tremove(CT_UserMap_Notes[this:GetParent().zone], this:GetParent().note); end function CT_MapMod_ProcessMessage(msg, user) if (msg == CT_LastMessage.msg and CT_LastMessage.user == user) then return nil; end CT_LastMessage.msg = msg; CT_LastMessage.user = user; if ( not msg ) then return nil; end local Useless, Useless, xpos, ypos, zone, name, descript, group, icon = string.find(msg, "^ New map note received: x=(.+) y=(.+) z=(.+) n=(.*) d=(.*) g=(.+) i=(.+)$"); if ( strsub(msg, 1, 9) ~= "" ) then return nil; end if ( not zone or Useless == msg ) then Useless, Useless, name, xpos, ypos, zone = string.find(msg, "^ New map note: (.*) x=(.+) y=(.+) z=(.+) v=.+$"); descript = "Received from " .. user; icon = 1; group = 1; if ( not zone or Useless == msg ) then return nil; end end local zonename = CT_MapMod_GetZone(zone); CT_Print(" User Note received in zone '" .. zonename .. "' from '" .. user .. "'!", 1.0, 0.5, 0.0); ChatEdit_SetLastTellTarget(DEFAULT_CHAT_FRAME.editBox, user); CT_MapMod_AddNote(xpos, ypos, zonename, name, descript, tonumber(icon), group); return 1; end function CT_MapMod_GetZone(zoneid) if ( not tonumber(zoneid) ) then return "Error, please report zoneid " .. zoneid; end local zone = tonumber(zoneid); for key, val in CT_UserMap_Zone do if ( val == zone ) then return key; end end return "Error, please report zone " .. zoneid; end CT_MapMod_OldChatFrameHook = ChatFrame_OnEvent; function CT_MapMod_ChatFrameHook(event) if ( event == "CHAT_MSG_WHISPER" and CT_MapMod_ProcessMessage(arg1, arg2) ) then return; end CT_MapMod_OldChatFrameHook(event); end ChatFrame_OnEvent = CT_MapMod_ChatFrameHook; function CT_MapMod_SendNote() if ( not CT_UserMap_OptionsMenu:IsVisible() or strlen(CT_UserMap_OptionsMenuSendEB:GetText()) == 0 ) then return; end local name, descript, zone, group, x, y, icon; name = CT_UserMap_OptionsMenuNameEB:GetText(); descript = CT_UserMap_OptionsMenuDescriptEB:GetText(); zone = CT_UserMap_OptionsMenu.zone; if ( UIDropDownMenu_GetSelectedName(CT_UserMap_OptionsMenuGroupDropDown) ) then group = CT_UserMap_Notes[zone][CT_UserMap_OptionsMenu.note]["set"]; else group = UIDropDownMenu_GetSelectedID(CT_UserMap_OptionsMenuGroupDropDown); end x = CT_UserMap_Notes[zone][CT_UserMap_OptionsMenu.note]["x"]; y = CT_UserMap_Notes[zone][CT_UserMap_OptionsMenu.note]["y"]; icon = CT_UserMap_Notes[zone][CT_UserMap_OptionsMenu.note]["icon"]; SendChatMessage(" New map note received: x="..x.." y="..y.." z="..CT_UserMap_Zone[zone].." n="..name.." d="..descript.." g="..group .. " i=" .. icon, "WHISPER", nil, CT_UserMap_OptionsMenuSendEB:GetText()); CT_UserMap_OptionsMenuSendEB.lastsend = CT_UserMap_OptionsMenuSendEB:GetText(); CT_UserMap_OptionsMenuSendEB:SetText(""); CT_UserMap_OptionsMenuSendButton:Disable(); end function CT_MapMod_ShowEditGroups() CT_UserMap_OptionsMenuEditGroups:Show(); end function CT_MapMod_EditGroups_Update() local numGroups = getn(CT_MAPMOD_SETS); FauxScrollFrame_Update(CT_UserMap_OptionsMenuEditGroupsScrollFrame, numGroups, 6, 16, CT_UserMap_OptionsMenuEditGroupsgHighlightFrame, 293, 316 ); local i; for i = 1, 6, 1 do local btn = getglobal("CT_UserMap_OptionsMenuEditGroupsTitle" .. i); if ( i <= numGroups ) then btn:Show(); btn:SetText(" " .. CT_MAPMOD_SETS[FauxScrollFrame_GetOffset(CT_UserMap_OptionsMenuEditGroupsScrollFrame)+i]); else btn:Hide(); end end end function CT_UserMapEditGroup_SetSelection(id) local i; for i = 1, 6, 1 do getglobal("CT_UserMap_OptionsMenuEditGroupsTitle"..i):UnlockHighlight(); end -- Get xml id local xmlid = id - FauxScrollFrame_GetOffset(CT_UserMap_OptionsMenuEditGroupsScrollFrame); local titleButton = getglobal("CT_UserMap_OptionsMenuEditGroupsTitle"..xmlid); -- Set newly selected quest and highlight it CT_UserMap_OptionsMenuEditGroups.selectedButtonID = xmlid; local scrollFrameOffset = FauxScrollFrame_GetOffset(CT_UserMap_OptionsMenuEditGroupsScrollFrame); if ( id > scrollFrameOffset and id <= (scrollFrameOffset + 6) and id <= getn(CT_MAPMOD_SETS) ) then titleButton:LockHighlight(); end end function CT_MapMod_TitleButton_OnClick(button) if ( button == "LeftButton" ) then CT_UserMapEditGroup_SetSelection(this:GetID() + FauxScrollFrame_GetOffset(CT_UserMap_OptionsMenuEditGroupsScrollFrame)) CT_MapMod_EditGroups_Update(); end end -- Get old notes function CT_MapMod_UpdateOldNotes() local temp = { }; local update = false; for key, val in CT_UserMap_Notes do if ( type(key) == "number" and type(val) == "table" ) then update = true; -- Old notes local tempvar = { ["name"] = val["desc"], ["x"] = val["x"], ["y"] = val["y"], ["icon"] = 1, ["set"] = 1, }; if ( val["zone"] ) then if ( not temp[val["zone"]]) then temp[val["zone"]] = { }; end temp[val["zone"]][getn(temp[val["zone"]])+1] = tempvar; end CT_UserMap_Notes[key] = nil; end end if ( update ) then for key, val in temp do if ( not CT_UserMap_Notes[key] ) then CT_UserMap_Notes[key] = { }; end for k, v in val do tinsert(CT_UserMap_Notes[key], v); end end CT_Print(" Updated old notes to new format.", 1, 0.5, 0); end end function CT_MapMod_OnLoad() WorldMapMagnifyingGlassButton:SetText(ZOOM_OUT_BUTTON_TEXT .. "\nControl+click to add note"); -- Set names CT_UserMap_OptionsMenuTitle:SetText(CT_MAPMOD_TEXT_TITLE); CT_UserMap_OptionsMenuNameText:SetText(CT_MAPMOD_TEXT_NAME); CT_UserMap_OptionsMenuDescriptText:SetText(CT_MAPMOD_TEXT_DESC); CT_UserMap_OptionsMenuGroupText:SetText(CT_MAPMOD_TEXT_GROUP); CT_UserMap_OptionsMenuSendText:SetText(CT_MAPMOD_TEXT_SEND); CT_UserMap_OptionsMenuOkayButton:SetText(CT_MAPMOD_BUTTON_OKAY); CT_UserMap_OptionsMenuCancelButton:SetText(CT_MAPMOD_BUTTON_CANCEL); CT_UserMap_OptionsMenuDeleteButton:SetText(CT_MAPMOD_BUTTON_DELETE); CT_UserMap_OptionsMenuEditButton:SetText(CT_MAPMOD_BUTTON_EDITGROUPS); CT_UserMap_OptionsMenuSendButton:SetText(CT_MAPMOD_BUTTON_SEND); end function CT_MapMod_OnEvent(event) if ( event == "CHAT_MSG_SPELL_SELF_BUFF" ) then CT_MapMod_ParseResource(event); elseif ( event == "UI_ERROR_MESSAGE" ) then if ( arg1 and ( string.find(arg1, "Requires Herbalism") or string.find(arg1, "Requires Mining") ) ) then CT_MapMod_ParseResource(event); end elseif ( event == "PLAYER_ENTERING_WORLD" ) then if ( not CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")] ) then CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")] = { ["autoGather"] = 1, ["hideGroups"] = { } }; else CT_GatherNotesButton:SetChecked(CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].autoGather); end end end function CT_MapMod_FindResourceIcon(oldName, prefix) local _, _, endPoint = string.find(oldName, "([^%s]+%sVein)$"); if ( endPoint ) then oldName = endPoint; else local _, _, endPoint = string.find(oldName, "([^%s]+)%sDeposit$"); if ( endPoint ) then oldName = endPoint .. "Vein"; end end local name = ""; for i = 1, strlen(oldName), 1 do local l = strsub(oldName, i, i); if ( string.find(l, "%w") ) then name = name .. l; end end for k, v in CT_UserMap_HerbIcons do if ( v == prefix .. name ) then if ( prefix == "Herb_" ) then return k; else return k-29; end end end return 1; end function CT_MapMod_ExecuteFilter(filter) CT_MapMod_Filter = filter; end function CT_MapMod_ParseResource(event) if ( not CT_MapMod_Options[UnitName("player") .. "@" .. GetCVar("realmName")].autoGather ) then return; end local x, y = GetPlayerMapPosition("player"); if ( x == 0 and y == 0 ) then return; end local zone = CT_MapMod_GetCurrentZone(); if ( not zone or not CT_UserMap_Zone[zone] ) then return; end if ( not CT_UserMap_Notes[zone] ) then CT_UserMap_Notes[zone] = { }; end for k, v in CT_UserMap_Notes[zone] do if ( k > CT_NUM_USERMAP_NOTES ) then break; end if ( abs(v.x-x) <= 0.01 and abs(v.y-y) <= 0.01 ) then -- Two very close herbs, most likely the same herb, we don't want to add another note then return; end end if ( string.find(event, "^CHAT_MSG" ) ) then if ( string.find(arg1, "^You perform Herb Gathering on") ) then local _,_, name = string.find(arg1, "^You perform Herb Gathering on (.+)%.$"); if ( name ) then CT_MapMod_AddNote(x, y, zone, name, "", CT_MapMod_FindResourceIcon(name, "Herb_"), 7); end elseif ( string.find(arg1, "^You perform Mining on") ) then local _,_, name = string.find(arg1, "^You perform Mining on (.+)%.$"); if ( name ) then CT_MapMod_AddNote(x, y, zone, name, "", CT_MapMod_FindResourceIcon(name, "Ore_"), 8); end end elseif ( string.find(event, "UI_ERROR_MESSAGE") ) then local name = GameTooltipTextLeft1:GetText(); if ( name and strlen(name) > 0 ) then if ( string.find(arg1, "Herbalism" ) ) then CT_MapMod_AddNote(x, y, zone, name, "", CT_MapMod_FindResourceIcon(name, "Herb_"), 7); else CT_MapMod_AddNote(x, y, zone, name, "", CT_MapMod_FindResourceIcon(name, "Ore_"), 8); end end end end function CT_MapMod_GetZoneName(id, ...) return arg[id]; end function CT_MapMod_GetCurrentZone() local x, y = GetPlayerMapPosition("player"); local currC, currZ = GetCurrentMapContinent(), GetCurrentMapZone(); SetMapToCurrentZone(); local name = CT_MapMod_GetZoneName(GetCurrentMapZone(), GetMapZones(GetCurrentMapContinent())); if ( x == 0 and y == 0 ) then SetMapZoom(currC, currZ); end return name; end