-- Saved Data NuNData = {}; NuNSettings = {}; -- Arrays local dfltHeadings = NUN_DFLTHEADINGS; local HRaces = NUN_HRACES; local ARaces = NUN_ARACES; local AllClasses = NUN_ALLCLASSES; local HClasses = NUN_HCLASSES; local AClasses = NUN_ACLASSES; local HRanks = NUN_HRANKS; local ARanks = NUN_ARANKS; local Professions = NUN_PROFESSIONS; local Sexes = NUN_SEXES; local searchFor = NUN_SEARCHFOR; local transmitTo = NUN_TRANSMITTO; local invSlotList = NUN_INVENTORY_SLOT_LIST; local noteTypes = NUN_NOTETYPES; local Races = {}; local Ranks = {}; local Classes = {}; local foundNuN = {}; local c_continents = {}; local foundHNuN = {}; local foundANuN = {}; local foundNNuN = {}; local NuNQuestLog = {}; local NuN_Filtered = {}; local NuN_MapNotesValidVersions = { "1800.7", }; local NuN_MapNotesPlayedVersions = {}; local NuN_LastOpen = {}; -- Local Variables local bttnChanges = {}; local uBttns = getn(dfltHeadings); local detlOffset = uBttns; local hdngOffset = (uBttns * 2); local pHead = "~Hdng"; local pDetl = "~Detl"; local discard; local c_name; local prevName; local c_class; local c_race; local c_guild; local c_route; local c_text; local c_text_len; local g_text; local g_text_len; local txtTxt = "txt"; local pName; local pKey; local pFaction; local hdNbr; local nameHdNbr; local nameDtNbr; local oriTxt; local isTitle; local bttnNumb; local lastDD; local switch; local parm1; local Notes = "notes~"; local itmIndex = "ItmIndex~"; local mrgIndex = "merged~"; local c_note; local c_type; local prevNote; local tryI; local lastBttn; local lastBttnIndex; local deletedE; local visibles; local lastVisible; local lastBttnDetl; local NuN_importing; local updateInterval = 10; local popUpUpdateInterval = 1; local timeSinceLastUpdate = 0; local popUpTimeSinceLastUpdate = 0; local NuNRaceDropDown; local NuNClassDropDown; local NuNCRankDropDown; local NuNHRankDropDown; local unitTest; local NuN_rType; local ttName; local gtName; local NuN_Fade = "False"; local NuN_TT_Y_Offset = 0; local NUN_TT_LEN = 80; local NuN_GNote_OriTitle = nil; local prevLink; local NuN_PinUpHeader = false; local lastPinned; local pinnedTTMoved = true; local typeIndex; local NuN_Fingers; local NuN_Trinkets; local NuN_Hand; local sendTo; local msgSeq = 0; local NuNSearchTitle = NUN_SEARCH; local NuN_Parties = "parties~"; local NuN_MouseOver = false; local NuN_QuestsUpdating = "False"; local oneDone = false; local NuN_AtStartup = "True"; local popUpHide = true; local NuN_IgnoreNextQUpdate = nil; local qTriggs = 0; local noTipAnchor = nil; local inBG = false; local NuN_FirstTime = true; local NuN_QuestAccepted = nil; -- Local Function Hooks local NuNOri_FriendsFrameFriendButton_OnClick; local NuNOri_FriendsFrameIgnoreButton_OnClick; local NuNOri_FriendsFrameGuildPlayerStatusButton_OnClick; local NuNOri_FriendsFrameGuildStatusButton_OnClick; local NuNOri_FriendsFrameWhoButton_OnClick; local NuNOri_FriendsList_Update; local NuNOri_IgnoreList_Update; local NuNOri_GuildStatus_Update; local NuNOri_WhoList_Update; local NuNOri_ContainerFrameItemButton_OnClick; local NuNOri_SetItemRef; local NuNOri_PaperDollItemSlotButton_OnClick; local NuNOri_QuestLog_Update; local NuNOri_QuestLogRewardItem_OnClick; local NuNOri_QuestItem_OnClick; local NuNOri_QuestRewardItem_OnClick; local NuNOri_AbandonQuest; local NuNOri_QuestDetailAcceptButton_OnClick; local NuNOri_QuestRewardCompleteButton_OnClick; -- Hook the MapNotes Function local NuNOri_MapNotes_OnEnter; local NuNOri_MapNotes_OnLeave; local NuNOri_MapNotes_DeleteNote; local NuNOri_MetaMapNotes_OnEnter; local NuNOri_MetaMapNotes_OnLeave; local NuNOri_MetaMapNotes_DeleteNote; local NuN_GetZoneTableSize; -- Constants NUN_VERSION = "3.21"; NUN_MAX_PARTY_MEMBERS = 4; NUN_AUTO_C = "A"; NUN_SELF_C = "S"; NUN_MANU_C = "M"; NUN_HORD_C = "H"; NUN_ALLI_C = "A"; NUN_NOTE_C = "N"; NUN_QUEST_C = "Q"; NUN_PARTY_C = "P"; NUN_MAX_ADD_TXT = 4; NUN_MAX_TXT_CHR = 1012; NUN_MAX_TXT_LIM = (NUN_MAX_ADD_TXT + 1) * NUN_MAX_TXT_CHR; NUN_MAX_TXT_C = tostring(NUN_MAX_TXT_LIM); NUN_MAX_TXT_BUF = NUN_MAX_TXT_LIM - 225; NUN_SEP = " "; NUN_OFF = "Offline"; NUN_TT_HDNG = "tooltip"; NUN_TT_MAX = 1012; NUN_TT_KEYPHRASE = "TT::"; NUN_TT_END = "::"; NUN_TT_LINES_TRIGGER = 6; NUN_TT_Y_SHIFT = 12; NUN_TT_KEYPHRASE_LEN = string.len(NUN_TT_KEYPHRASE); NUN_TT_ETC = " ....."; NUN_TXT_LABEL = "0 / "..NUN_MAX_TXT_LIM; NUN_SPEED = "Speed"; NUN_GOLD = "|cffffB300|h"; NUN_GREEN = "|cff00ee00|h"; NUN_WHITE = "|cffffffff|h"; NUN_C_END = "|h|r"; NUN_PINNED_TT_PADDING = " "; NUN_PLACE_HOLDER = ""; NUN_CHAT_LIMIT = 180; NUN_FRAMESCALE_MIN = 0.75; NUN_FRAMESCALE_MAX = 1.75; NUN_FRAMESCALE_STEP = 0.01; NUN_TT_FONTSCALE_MIN = 0.90; NUN_TT_FONTSCALE_MAX = 2.00; NUN_FONTSCALE_STEP = 0.01; NUN_TT_MAPFONTSCALE_MIN = 0.25; NUN_TT_MAPFONTSCALE_MAX = 1.75; NUN_MAPFONTSCALE_STEP = 0.01; NUN_FRAMESCALE_MIN_TXT = tostring( NUN_FRAMESCALE_MIN * 100 ) .. "%"; NUN_FRAMESCALE_MAX_TXT = tostring( NUN_FRAMESCALE_MAX * 100 ) .. "%"; NUN_TT_FONTSCALE_MIN_TXT = tostring ( NUN_TT_FONTSCALE_MIN * 100 ) .. "%"; NUN_TT_FONTSCALE_MAX_TXT = tostring ( NUN_TT_FONTSCALE_MAX * 100 ) .. "%"; NUN_TT_MAPFONTSCALE_MIN_TXT = tostring ( NUN_TT_MAPFONTSCALE_MIN * 100 ) .. "%"; NUN_TT_MAPFONTSCALE_MAX_TXT = tostring ( NUN_TT_MAPFONTSCALE_MAX * 100 ) .. "%"; NUN_REPLACEQNAME_TXT = "$N"; NUN_REPLACEQCLASS_TXT = "$C"; -- MapNotes Version Warning StaticPopupDialogs["NUN_MAPNOTES_VERSION_ALERT"] = { text = TEXT(NUN_MAPNOTESVERSION_WARNING), button1 = TEXT(OKAY), showAlert = 1, timeout = 0, }; -- NotesUNeed Note Limit Exceeded StaticPopupDialogs["NUN_NOTELIMIT_EXCEEDED"] = { text = TEXT(NUN_TEXTLIM1..NUN_MAX_TXT_LIM..NUN_TEXTLIM2), button1 = TEXT(OKAY), showAlert = 1, timeout = 0, }; -- Mod Functions function NuN_OnLoad() local continentID, zoneID, continent, zone; local c_zones = {}; NuNOri_FriendsFrameFriendButton_OnClick = FriendsFrameFriendButton_OnClick; FriendsFrameFriendButton_OnClick = NuNNew_FriendsFrameFriendButton_OnClick; NuNOri_FriendsFrameIgnoreButton_OnClick = FriendsFrameIgnoreButton_OnClick; FriendsFrameIgnoreButton_OnClick = NuNNew_FriendsFrameIgnoreButton_OnClick; NuNOri_FriendsFrameGuildPlayerStatusButton_OnClick = FriendsFrameGuildPlayerStatusButton_OnClick; FriendsFrameGuildPlayerStatusButton_OnClick = NuNNew_FriendsFrameGuildPlayerStatusButton_OnClick; NuNOri_FriendsFrameGuildStatusButton_OnClick = FriendsFrameGuildStatusButton_OnClick; FriendsFrameGuildStatusButton_OnClick = NuNNew_FriendsFrameGuildStatusButton_OnClick; NuNOri_FriendsFrameWhoButton_OnClick = FriendsFrameWhoButton_OnClick; FriendsFrameWhoButton_OnClick = NuNNew_FriendsFrameWhoButton_OnClick; NuNOri_FriendsList_Update = FriendsList_Update; FriendsList_Update = NuNNew_FriendsList_Update; NuNOri_IgnoreList_Update = IgnoreList_Update; IgnoreList_Update = NuNNew_IgnoreList_Update; NuNOri_GuildStatus_Update = GuildStatus_Update; GuildStatus_Update = NuNNew_GuildStatus_Update; NuNOri_WhoList_Update = WhoList_Update; WhoList_Update = NuNNew_WhoList_Update; NuNOri_ContainerFrameItemButton_OnClick = ContainerFrameItemButton_OnClick; ContainerFrameItemButton_OnClick = NuNNew_ContainerFrameItemButton_OnClick; NuNOri_SetItemRef = SetItemRef; SetItemRef = NuNNew_SetItemRef; NuNOri_PaperDollItemSlotButton_OnClick = PaperDollItemSlotButton_OnClick; PaperDollItemSlotButton_OnClick = NuNNew_PaperDollItemSlotButton_OnClick; NuNOri_QuestLog_Update = QuestLog_Update; QuestLog_Update = NuNNew_QuestLog_Update; NuNOri_QuestLogRewardItem_OnClick = QuestLogRewardItem_OnClick; QuestLogRewardItem_OnClick = NuNNew_QuestLogRewardItem_OnClick; NuNOri_QuestItem_OnClick = QuestItem_OnClick; QuestItem_OnClick = NuNNew_QuestItem_OnClick; NuNOri_QuestRewardItem_OnClick = QuestRewardItem_OnClick; QuestRewardItem_OnClick = NuNNew_QuestRewardItem_OnClick; NuNOri_AbandonQuest = AbandonQuest; AbandonQuest = NuNNew_AbandonQuest; NuNOri_QuestDetailAcceptButton_OnClick = QuestDetailAcceptButton_OnClick; QuestDetailAcceptButton_OnClick = NuNNew_QuestDetailAcceptButton_OnClick; NuNOri_QuestRewardCompleteButton_OnClick = QuestRewardCompleteButton_OnClick; QuestRewardCompleteButton_OnClick = NuNNew_QuestRewardCompleteButton_OnClick; this:RegisterEvent("IGNORELIST_UPDATE"); this:RegisterEvent("FRIENDLIST_UPDATE"); this:RegisterEvent("PLAYER_ENTERING_WORLD"); this:RegisterEvent("PLAYER_LEVEL_UP"); this:RegisterEvent("QUEST_LOG_UPDATE"); this:RegisterEvent("UPDATE_FACTION"); this:RegisterEvent("UNIT_QUEST_LOG_CHANGED"); this:RegisterEvent("QUEST_PROGRESS"); this:RegisterEvent("QUEST_COMPLETE"); this:RegisterEvent("QUEST_FINISHED"); this:RegisterEvent("QUEST_ITEM_UPDATE"); this:RegisterEvent("CHAT_MSG_SYSTEM"); this:RegisterEvent("PARTY_MEMBERS_CHANGED"); this:RegisterEvent("RAID_ROSTER_UPDATE"); this:RegisterEvent("VARIABLES_LOADED"); SlashCmdList["NOTEUN"] = function(pList) local gap = string.find(pList, NUN_SEP); if ( gap ) then switch = string.sub(pList, 1, (gap - 1)); parm1 = string.sub(pList, (gap + 1)); else switch = pList; parm1 = nil; end NuN_CmdLine(switch, parm1, pList); end SLASH_NOTEUN1 = "/nun"; tryI = true; pName = UnitName("player"); NuN_InitialiseSavedVariables(); ClearButtonChanges(); c_continents[1] = {}; c_continents[2] = {}; for continentID, continent in ipairs{GetMapContinents()} do c_zones = {}; c_continents[continentID].name = continent; for zoneID, zone in ipairs{GetMapZones(continentID)} do c_zones[zoneID] = zone; end c_continents[continentID].zones = c_zones; end end function NuN_CmdLine(option, parm1, pList) local index; local value; local initial; local remainder; local contactName; local switch; local theUnitID = "target"; if ( ( option == "" ) or ( option == nil ) ) then NuN_Options(); else switch = string.lower(option); if ( switch == "-h" ) then DEFAULT_CHAT_FRAME:AddMessage(NUN_HELP_TEXT); index = 0; value = getglobal("NUN_HELP_TEXT"..index); while( value ) do DEFAULT_CHAT_FRAME:AddMessage(value); index = index + 1; value = getglobal("NUN_HELP_TEXT"..index); end DEFAULT_CHAT_FRAME:AddMessage(NUN_HELP_TEXT); elseif ( switch == NUN_HTT ) then NuN_ToggleToolTips(); elseif ( ( switch == "-ca" ) or ( switch == "-ch" ) ) then initial = string.upper( string.sub(parm1, 1, 1) ); remainder = string.lower( string.sub(parm1,2) ); contactName = initial..remainder; if ( NuNData[pKey][contactName] ) then if ( NuNFrame:IsVisible() ) then NuN_HideFrame(); end NuN_ShowSavedNote(contactName); else NuN_CreateContact(contactName, switch); end elseif ( switch == "-a" ) then NuN_DisplayAll(); elseif ( switch == "-micro" ) then NuN_ToggleMicroButtons(); elseif ( switch == "-g" ) then if ( ( parm1 ~= nil ) and ( parm1 ~= "") ) then NuN_GNoteExists(parm1); NuNGNoteFrame.fromQuest = nil; if ( c_note ) then NuN_ShowSavedGNote(); else c_note = parm1; c_type = NuNGet_CommandID(noteTypes, " "); NuN_ShowTitledGNote(""); end else NuN_ShowNewGNote(); end elseif ( switch == "-t" ) then NuN_FromTarget(false); elseif ( ( switch == "->de" ) or ( switch == "->en" ) ) then NuN_LangPatch(switch); else initial = string.upper( string.sub(switch, 1, 1) ); remainder = string.lower( string.sub(switch,2) ); contactName = initial..remainder; if ( NuNData[pKey][contactName] ) then if ( NuNFrame:IsVisible() ) then NuN_HideFrame(); end NuN_ShowSavedNote(contactName); elseif ( NuN_GNoteExists(pList) ) then NuNGNoteFrame.fromQuest = nil; NuN_ShowSavedGNote(); else c_name = contactName; unitTest = true; theUnitID = NuN_Target(); if ( theUnitID ~= nil ) then NuN_NewContact(theUnitID); else NuN_Options(); end end end end end function NuN_FromTarget(autoHide) local tstValue = NuN_CheckTarget(); local theUnitID = "target"; local npcText; if ( IsAltKeyDown() ) then NuN_LastOpen.type = "Contact"; NuN_ReOpen(); return; end if ( IsShiftKeyDown() ) then autoHide = true; end if ( tstValue == "N" ) then NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][c_note] ) or ( NuNData[Notes][c_note] ) ) then if ( autoHide ~= true ) then NuN_ShowSavedGNote(); end else npcText = NuN_NPCInfo(); c_type = NuNGet_CommandID(noteTypes, "NPC"); NuN_ShowTitledGNote(npcText); if ( autoHide == true ) then NuNGNote_WriteNote(); if ( not NuN_ConfirmFrame:IsVisible() ) then HideUIPanel(NuNGNoteFrame); NuN_Message(c_note..NUN_AUTONOTED); end end end else if ( NuNData[pKey][c_name] ) then if ( autoHide ~= true ) then NuN_ShowSavedNote(c_name); end else NuN_NewContact(theUnitID); if ( autoHide == true ) then NuN_WriteNote(); HideUIPanel(NuNFrame); NuN_Message(c_name..NUN_AUTONOTED); end end end end function NuN_CheckTarget() local chkName = UnitName("target"); if ( ( ( UnitPlayerControlled("target") ) and (not UnitIsUnit("player", "target") ) ) or ( UnitInParty("target") ) or ( UnitInRaid("target") ) )then c_name = chkName; return "F"; elseif ( ( not UnitPlayerControlled("target") ) and ( chkName ) ) then c_note = chkName; return "N"; else c_name = pName; return "S"; end end function NuN_DisplayAll() if ( NuNSearchFrame:IsVisible() ) then NuNSearchFrame:Hide(); else NuNSearchFrameBackButton:Disable(); NuNSearchFrame.backEnabled = nil; ddSearch = NuNGet_CommandID(searchFor, "All"); searchType = searchFor[ddSearch].Command; NuNOptions_Search(); end end function NuN_Options() if ( NuNOptionsFrame:IsVisible() ) then HideUIPanel(NuNOptionsFrame); else if ( ( MapNotes_OnLoad ) or ( MetaMapNotes_OnLoad ) ) then NuN_AutoMapCheckBox:Enable(); if ( NuNSettings[pKey].autoMapNotes ) then NuN_AutoMapCheckBox:SetChecked(1); else NuN_AutoMapCheckBox:SetChecked(0); end else NuN_AutoMapCheckBox:SetChecked(0); NuN_AutoMapCheckBoxLabel:SetText(NUN_NOMAPNOTES); NuN_AutoMapCheckBox:Disable(); end if ( NuNFrame:IsVisible() ) then NuN_HideFrame(); end if ( NuNSearchFrame:IsVisible() ) then HideUIPanel(NuNSearchFrame); end if ( NuNGNoteFrame:IsVisible() ) then HideUIPanel(NuNGNoteFrame); end UIDropDownMenu_SetSelectedID(NuNOptionsSearchDropDown, 1); UIDropDownMenu_SetText(searchFor[1].Display, NuNOptionsSearchDropDown); ddSearch = NuNGet_CommandID(searchFor, "All"); if ( NuNSettings[pKey].autoG ) then NuNOptionsGuildCheckButton:SetChecked(1); else NuNOptionsGuildCheckButton:SetChecked(0); end if ( NuNSettings[pKey].autoA ) then NuNOptionsAddCheckButton:SetChecked(1); else NuNOptionsAddCheckButton:SetChecked(0); end if ( NuNSettings[pKey].autoD ) then NuNOptionsDeleteCheckButton:SetChecked(1); else NuNOptionsDeleteCheckButton:SetChecked(0); end if ( NuNSettings[pKey].autoQ ) then NuN_AutoQuestCheckBox:SetChecked(1); else NuN_AutoQuestCheckBox:SetChecked(0); end if ( NuNSettings[pKey].autoN ) then NuN_AutoNoteCheckBox:SetChecked(1); else NuN_AutoNoteCheckBox:SetChecked(0); end if ( NuNSettings[pKey].dLevel ) then NuN_DefaultLevelCheckBox:SetChecked(1); else NuN_DefaultLevelCheckBox:SetChecked(0); end if ( NuNSettings[pKey].toolTips ) then NuN_HelpTTCheckBox:SetChecked(1); else NuN_HelpTTCheckBox:SetChecked(0); end if ( NuNSettings[pKey].autoP ) then NuN_AutoPartyCheckBox:SetChecked(1); else NuN_AutoPartyCheckBox:SetChecked(0); end if ( NuNSettings[pKey].minOver ) then NuN_OverTTCheckBox:SetChecked(1); else NuN_OverTTCheckBox:SetChecked(0); end if ( NuNSettings[pKey].bHave ) then NuN_BehaveCheckBox:SetChecked(1); else NuN_BehaveCheckBox:SetChecked(0); end NuNOptionsTTLengthTextBox:SetText( NuNSettings[pKey].ttLen ); NuNOptionsTTLineLengthTextBox:SetText( NuNSettings[pKey].ttLLen ); NuNSearchFrameBackButton:Enable(); NuNSearchFrame.backEnabled = true; NuNOptionsFrame:SetScale(NuNSettings[pKey].pScale); ShowUIPanel(NuNOptionsFrame); end end function ClearButtonChanges() for i = 1, (uBttns * 2), 1 do bttnChanges[i] = ""; end end function NuN_ShowSavedNote(cName) c_name = cName; c_class = nil; c_race = nil; c_guild = nil; gRank = nil; gRankIndex = nil; gNote = nil; gOfficerNote = nil; c_route = "Saved"; if ( NuNData[pKey][c_name].faction == "Horde" ) then NuN_HordeSetup(); else NuN_AllianceSetup(); end NuN_ShowNote(); end function NuN_ShowWhoNote(cName) c_name = cName; c_class = nil; c_race = nil; c_guild = nil; gRank = nil; gRankIndex = nil; gNote = nil; gOfficerNote = nil; c_route = "Who"; if ( horde ) then NuN_HordeSetup(); else NuN_AllianceSetup(); end NuN_ShowNote(); end function NuN_ShowNote() local hText; local theText; if ( ( NuNFrame:IsVisible() ) and ( prevName == c_name ) ) then NuNFrame:Hide(); else prevName = c_name; if ( NuNOptionsFrame:IsVisible() ) then HideUIPanel(NuNOptionsFrame); end lastDD = nil; NuNButtonClrDD:Disable(); ClearButtonChanges(); NuNHeader:SetText(c_name); if ( NuNData[pKey][c_name] ) then c_text = NuN_GetCText(c_name); if ( ( c_text == nil ) or ( c_text == "" ) ) then c_text = "\n"; end NuNText:SetText( c_text ); NuNButtonDelete:Enable(); NuNCOpenChatButton:Enable(); NuNCTTCheckBoxLabel:Show(); NuN_CTTCheckBox:Show(); NuN_CTTCheckBox:SetChecked(0); if ( NuN_PinnedTooltip.type == "Contact" ) then NuN_CTTCheckBox:SetChecked( NuN_CheckPinnedBox(c_name) ); end if ( c_name == pName ) then NuNHeader:SetText(NUN_PLAYER.." : "..c_name); elseif ( NuNData[pKey][c_name].type == NUN_AUTO_C ) then NuNHeader:SetText(NUN_AUTO.." : "..c_name); elseif ( NuNData[pKey][c_name].type == NUN_MANU_C ) then NuNHeader:SetText(NUN_MANU.." : "..c_name); elseif ( NuNData[pKey][c_name].type == NUN_PARTY_C ) then NuNHeader:SetText(NUN_PARTY.." : "..c_name ); elseif ( NuNData[pKey][c_name].type == NUN_SELF_C ) then NuNHeader:SetText(NUN_SELF.." : "..c_name); else NuNHeader:SetText(c_name); end else theText = ""; NuNHeader:SetText(NUN_NEW.." : "..c_name); if ( gNote ~= nil ) then theText = "\n"..gNote; end if ( gOfficerNote ~= nil ) then theText = theText.."\n"..gOfficerNote; end if ( theText == "" ) then theText = "\n"; end NuNText:SetText(theText); NuNButtonDelete:Disable(); NuNCOpenChatButton:Disable(); NuNCTTCheckBoxLabel:Hide(); NuN_CTTCheckBox:Hide(); end UserButtons_Initialise(); DropDowns_Initialise(); ddRace = nil; ddClass = nil; ddSex = nil; ddProf1 = nil; ddProf2 = nil; ddCRank = nil; ddHRank = nil; if ( NuNEditDetailsFrame:IsVisible() ) then HideUIPanel(NuNEditDetailsFrame); end if ( NuNcDeleteFrame:IsVisible() ) then HideUIPanel(NuNcDeleteFrame); end if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name][pName] ) and ( NuNData[pKey][c_name][pName].partied ) ) then NuNPartiedLabel:Show(); NuNPartiedNumberLabel:SetText("(x"..tostring(NuNData[pKey][c_name][pName].partied)..")"); NuNPartiedNumberLabel:Show(); NuNFramePartyDownButton:Show(); else NuNPartiedLabel:Hide(); NuNPartiedNumberLabel:SetText("(0)"); NuNPartiedNumberLabel:Hide(); NuNFramePartyDownButton:Hide(); end NuNFrame:SetScale(NuNSettings[pKey].pScale); ShowUIPanel(NuNFrame); if ( not NuNSettings[pKey].bHave ) then NuNText:SetFocus(); else NuNText:ClearFocus(); end end end function NuN_Update_Ignored() local index; local value; local x; local iName; if ( pFaction ~= nil ) then -- Check every Ignored player to make sure we have a Saved note if ( NuNSettings[pKey].autoA ) then for i = 1, GetNumIgnores(), 1 do iName = GetIgnoreName(i); if ( ( iName ~= nil ) and ( not NuNData[pKey][iName] ) ) then NuNData[pKey][iName] = {}; NuNData[pKey][iName].type = NUN_AUTO_C; NuNData[pKey][iName].faction = pFaction; NuNData[pKey][iName][txtTxt] = NUN_AUTO_IGNORE..NuN_GetDateStamp(); NuNData[pKey][iName].ignoreLst = {}; NuNData[pKey][iName].ignoreLst[1] = pName; end end end -- Check every Saved entry to see if it is ignored, and upated Saved inofrmation on that basis for index, value in NuNData[pKey] do if ( ( NuNData[pKey][index].faction) and ( NuNData[pKey][index].faction == pFaction ) and ( index ~= pName ) ) then if ( NuN_Is_Ignored(index) ) then if ( not NuNData[pKey][index].ignoreLst ) then -- Ignored but no ignore list currently x = 1; NuNData[pKey][index].ignoreLst = {}; NuNData[pKey][index].ignoreLst[x] = pName; else -- Ignored but not on ignore list yet if (not NuNGet_TableID(NuNData[pKey][index].ignoreLst, pName) ) then x = getn( NuNData[pKey][index].ignoreLst ) + 1; NuNData[pKey][index].ignoreLst[x] = pName; end end else if ( NuNData[pKey][index].ignoreLst ) then x = NuNGet_TableID(NuNData[pKey][index].ignoreLst, pName); if ( x ~= nil ) then -- Not ignored, but on ignore list > come off list local tmpTable = Remove_Entry(NuNData[pKey][index].ignoreLst, x); NuNData[pKey][index].ignoreLst = tmpTable; if ( getn(NuNData[pKey][index].ignoreLst) == 0 ) then -- If no more ignore list, and auto-deleting, and Auto-note, then delete note entirely if ((NuNData[pKey][index].type == NUN_AUTO_C) and (NuNSettings[pKey].autoD) and (not NuNData[pKey][index].friendLst)) then NuNData[pKey][index] = nil; else NuNData[pKey][index].ignoreLst = nil; end end elseif ( getn(NuNData[pKey][index].ignoreLst) > 0 ) then -- If (Not Ignored) & (There is an Ignore List we are NOT On) & (Settings say we should try to Ignore) -- & (Only 1 attempt per 'log on' OR Manual refresh ) then.... if ( ( tryI == true ) and ( NuN_NotInfiniteIgored(index) ) ) then if ( AddIgnore(index) ) then x = getn(NuNData[pKey][index].ignoreLst) + 1; NuNData[pKey][index].ignoreLst[x] = pName; end end end end end end end tryI = false; end end function NuN_Update_Friends() local index; local value; local x; local iName; if ( pFaction ~= nil ) then if ( NuNSettings[pKey].autoA ) then for i = 1, GetNumFriends(), 1 do iName = GetFriendInfo(i); if ( ( iName ~= nil ) and ( not NuNData[pKey][iName] ) ) then NuNData[pKey][iName] = {}; NuNData[pKey][iName].type = NUN_AUTO_C; NuNData[pKey][iName].faction = pFaction; NuNData[pKey][iName][txtTxt] = NUN_AUTO_FRIEND..NuN_GetDateStamp(); NuNData[pKey][iName].friendLst = {}; NuNData[pKey][iName].friendLst[1] = pName; end end end -- Check every Saved entry to see if it is friendly, and upated Saved information on that basis for index, value in NuNData[pKey] do if ( index == pName ) then NuNData[pKey][index].type = NUN_SELF_C; elseif ( ( NuNData[pKey][index].faction ) and ( NuNData[pKey][index].faction == pFaction ) ) then if ( NuN_Is_Friendly(index) ) then if ( not NuNData[pKey][index].friendLst ) then x = 1; NuNData[pKey][index].friendLst = {}; NuNData[pKey][index].friendLst[x] = pName; else if (not NuNGet_TableID(NuNData[pKey][index].friendLst, pName) ) then x = getn( NuNData[pKey][index].friendLst ) + 1; NuNData[pKey][index].friendLst[x] = pName; end end else if ( NuNData[pKey][index].friendLst ) then x = NuNGet_TableID(NuNData[pKey][index].friendLst, pName); if ( x ~= nil ) then local tmpTable = Remove_Entry(NuNData[pKey][index].friendLst, x); NuNData[pKey][index].friendLst = tmpTable; if ( getn(NuNData[pKey][index].friendLst) == 0 ) then if ((NuNData[pKey][index].type == NUN_AUTO_C) and (NuNSettings[pKey].autoD) and (not NuNData[pKey][index].ignoreLst)) then NuNData[pKey][index] = nil; else NuNData[pKey][index].friendLst = nil; end end end end end end end end end function Remove_Entry(table, entry) local sorted = {}; local innerI = 0; for i = 1, getn(table), 1 do if ( i ~= entry ) then innerI = innerI + 1; sorted[innerI] = table[i]; end end return sorted; end function NuN_Is_Ignored(aName) for i = 1, GetNumIgnores(), 1 do iName = GetIgnoreName(i); if ( aName == GetIgnoreName(i) ) then return true; end end return false; end function NuN_Is_Friendly(aName) local iName; for i = 1, GetNumFriends(), 1 do iName = GetFriendInfo(i); if ( iName == aName ) then return true; end end return false; end function UserButtons_Initialise() for n = 1, uBttns, 1 do bttnHeadingText = getglobal("NuNTitleButton"..n.."ButtonTextHeading"); bttnDetailText = getglobal("NuNInforButton"..n.."ButtonTextDetail"); bttnDetail = getglobal("NuNInforButton"..n); hdNbr = pHead..n; nameHdNbr = c_name..hdNbr; nameDtNbr = c_name..pDetl..n; if ( NuNData[pKey][nameHdNbr] ) then bttnHeadingText:SetText(NuNData[pKey][nameHdNbr].txt); elseif (NuNSettings[pKey][hdNbr]) then bttnHeadingText:SetText(NuNSettings[pKey][hdNbr].txt); else bttnHeadingText:SetText(dfltHeadings[n]); end if ( bttnHeadingText:GetText() == nil ) then bttnDetailText:SetText(""); bttnDetail:Disable(); else bttnDetail:Enable(); if ( NuNData[pKey][nameDtNbr] ) then bttnDetailText:SetText(NuNData[pKey][nameDtNbr].txt); else bttnDetailText:SetText(""); end end if ( n == 1 ) and ( c_guild ~= nil ) then if ( bttnHeadingText:GetText() == dfltHeadings[n] ) and ( (bttnDetailText:GetText() == "") or (bttnDetailText:GetText() == nil) ) then bttnDetailText:SetText(c_guild); bttnChanges[n+detlOffset] = c_guild; end end if ( n == 2 ) and ( gRank ~= nil ) then if ( bttnHeadingText:GetText() == dfltHeadings[n] ) and ( (bttnDetailText:GetText() == "") or (bttnDetailText:GetText() == nil) ) then if ( gRankIndex == 0 ) then GuildRank = ("GM : "..gRank); else GuildRank = (gRankIndex.." : "..gRank); end bttnDetailText:SetText(GuildRank); bttnChanges[n+detlOffset] = GuildRank; end end end end function DropDowns_Initialise() if ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].race ~= nil ) then UIDropDownMenu_SetSelectedID(NuNRaceDropDown, NuNData[pKey][c_name].race); UIDropDownMenu_SetText(Races[ (NuNData[pKey][c_name].race) ], NuNRaceDropDown); elseif ( c_race ~= nil ) then ddRace = NuNGet_TableID(Races, c_race); UIDropDownMenu_SetSelectedID(NuNRaceDropDown, ddRace); UIDropDownMenu_SetText(c_race, NuNRaceDropDown); else UIDropDownMenu_ClearAll(NuNRaceDropDown); end if ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].cls ~= nil ) then UIDropDownMenu_SetSelectedID(NuNClassDropDown, NuNData[pKey][c_name].cls); UIDropDownMenu_SetText(Classes[ (NuNData[pKey][c_name].cls) ], NuNClassDropDown); elseif ( c_class ~= nil ) then ddClass = NuNGet_TableID(Classes, c_class); UIDropDownMenu_SetSelectedID(NuNClassDropDown, ddClass); UIDropDownMenu_SetText(c_class, NuNClassDropDown); else UIDropDownMenu_ClearAll(NuNClassDropDown); end if ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].sex ~= nil ) then UIDropDownMenu_SetSelectedID(NuNSexDropDown, NuNData[pKey][c_name].sex); UIDropDownMenu_SetText(Sexes[ (NuNData[pKey][c_name].sex) ], NuNSexDropDown); else UIDropDownMenu_ClearAll(NuNSexDropDown); end if ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].prof1 ~= nil ) then UIDropDownMenu_SetSelectedID(NuNProf1DropDown, NuNData[pKey][c_name].prof1); UIDropDownMenu_SetText(Professions[ (NuNData[pKey][c_name].prof1) ], NuNProf1DropDown); else UIDropDownMenu_ClearAll(NuNProf1DropDown); end if ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].prof2 ~= nil ) then UIDropDownMenu_SetSelectedID(NuNProf2DropDown, NuNData[pKey][c_name].prof2); UIDropDownMenu_SetText(Professions[ (NuNData[pKey][c_name].prof2) ], NuNProf2DropDown); else UIDropDownMenu_ClearAll(NuNProf2DropDown); end if ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].crank ~= nil ) then UIDropDownMenu_SetSelectedID(NuNCRankDropDown, NuNData[pKey][c_name].crank); UIDropDownMenu_SetText(Ranks[ (NuNData[pKey][c_name].crank) ], NuNCRankDropDown); else UIDropDownMenu_ClearAll(NuNCRankDropDown); end if ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].hrank ~= nil ) then UIDropDownMenu_SetSelectedID(NuNHRankDropDown, NuNData[pKey][c_name].hrank); UIDropDownMenu_SetText(Ranks[ (NuNData[pKey][c_name].hrank) ], NuNHRankDropDown); else UIDropDownMenu_ClearAll(NuNHRankDropDown); end end function NuNGet_TableID(tab, txt) for i = 1, getn(tab), 1 do if ( tab[i] == txt ) then return i; end end return nil; end function NuNGet_CommandID(tab, txt) for i = 1, getn(tab), 1 do if ( tab[i].Command == txt ) then return i; end end return nil; end function NuN_WriteNote() if (not NuNData[pKey][c_name]) then NuNData[pKey][c_name] = {}; end if ( c_name == pName ) then NuNData[pKey][c_name].type = NUN_SELF_C; NuNHeader:SetText(NUN_PLAYER.." : "..c_name); elseif ( ( not NuNData[pKey][c_name].type ) or ( NuNData[pKey][c_name].type == NUN_AUTO_C ) ) then NuNData[pKey][c_name].type = NUN_MANU_C; NuNHeader:SetText(NUN_MANU.." : "..c_name); end if ( not NuNData[pKey][c_name].faction ) then if ( ( c_route == "Target" ) or ( c_route == "Create" ) ) then NuNData[pKey][c_name].faction = c_faction; else NuNData[pKey][c_name].faction = pFaction; end end if ( FriendsListFrame:IsVisible() ) then NuNNew_FriendsList_Update(); elseif ( IgnoreListFrame:IsVisible() ) then NuNNew_IgnoreList_Update(); elseif ( GuildPlayerStatusFrame:IsVisible() ) then NuNNew_GuildStatus_Update(); elseif ( GuildStatusFrame:IsVisible() ) then NuNNew_GuildStatus_Update(); elseif ( WhoFrame:IsVisible() ) then NuNNew_WhoList_Update(); end if ( c_guild ~= nil ) then NuNData[pKey][c_name].guild = c_guild; end if ( not NuNData[pKey][c_name].guild ) then NuNData[pKey][c_name].guild = ""; end if ( NuN_Is_Ignored(c_name) ) then if ( not NuNData[pKey][c_name].ignoreLst ) then NuNData[pKey][c_name].ignoreLst = {}; end if (not NuNGet_TableID(NuNData[pKey][c_name].ignoreLst, pName) ) then local x = getn(NuNData[pKey][c_name].ignoreLst) + 1; NuNData[pKey][c_name].ignoreLst[x] = pName; end end if ( NuN_Is_Friendly(c_name) ) then if ( not NuNData[pKey][c_name].friendLst ) then NuNData[pKey][c_name].friendLst = {}; end if ( not NuNGet_TableID(NuNData[pKey][c_name].friendLst, pName) ) then local x = getn(NuNData[pKey][c_name].friendLst) + 1; NuNData[pKey][c_name].friendLst[x] = pName; end end if (ddRace) then if ( ddRace == -1 ) then NuNData[pKey][c_name].race = nil; else NuNData[pKey][c_name].race = ddRace; end ddRace = nil; elseif ( c_race ~= nil ) then NuNData[pKey][c_name].race = NuNGet_TableID(Races, c_race); end if (ddClass) then if ( ddClass == -1 ) then NuNData[pKey][c_name].cls = nil; else NuNData[pKey][c_name].cls = ddClass; end ddClass = nil; elseif ( c_class ~= nil ) then NuNData[pKey][c_name].cls = NuNGet_TableID(Classes, c_class); end if (ddSex) then if ( ddSex == -1 ) then NuNData[pKey][c_name].sex = nil; else NuNData[pKey][c_name].sex = ddSex; end ddSex = nil; end if (ddProf1) then if ( ddProf1 == -1 ) then NuNData[pKey][c_name].prof1 = nil; else NuNData[pKey][c_name].prof1 = ddProf1; end ddProf1 = nil; end if (ddProf2) then if ( ddProf2 == -1 ) then NuNData[pKey][c_name].prof2 = nil; else NuNData[pKey][c_name].prof2 = ddProf2; end ddProf2 = nil; end if (ddCRank) then if ( ddCRank == -1 ) then NuNData[pKey][c_name].crank = nil; else NuNData[pKey][c_name].crank = ddCRank; end ddCRank = nil; end if (ddHRank) then if ( ddHRank == -1 ) then NuNData[pKey][c_name].hrank = nil; else NuNData[pKey][c_name].hrank = ddHRank; end ddHRank = nil; end c_text = NuNText:GetText(); NuN_SetCText(c_name); for n = 1, uBttns, 1 do if (bttnChanges[n] ~= "") and (bttnChanges[n] ~= nil) then hdNbr = pHead..n; nameHdNbr = c_name..hdNbr; if (not NuNData[pKey][nameHdNbr]) then NuNData[pKey][nameHdNbr] = {}; end if (bttnChanges[n] == 1) then NuNData[pKey][nameHdNbr].txt = ""; else NuNData[pKey][nameHdNbr].txt = bttnChanges[n]; end end end for n = 1, uBttns, 1 do b = n + detlOffset; if (bttnChanges[b] ~= "") and (bttnChanges[b] ~= nil) then nameDtNbr = c_name..pDetl..n; if (not NuNData[pKey][nameDtNbr]) then NuNData[pKey][nameDtNbr] = {}; end if (bttnChanges[b] == 1) then NuNData[pKey][nameDtNbr].txt = nil; else NuNData[pKey][nameDtNbr].txt = bttnChanges[b]; end end end if ( ( NuNSearchFrame:IsVisible() ) and ( not string.find(NuNSearchTitleText:GetText(), NUN_QUESTS_TEXT) ) ) then NuNSearch_Search(); end ClearButtonChanges(); NuNButtonDelete:Enable(); NuNCOpenChatButton:Enable(); NuNCTTCheckBoxLabel:Show(); NuN_CTTCheckBox:Show(); end function NuNGNote_WriteNote() local conflict = false; local value, index, pad; local conflicts = 0; local saveLvl; local NuN_Creating = nil; if ( NuNGNoteTitleButton:IsVisible() ) then c_note = NuNGNoteTitleButtonText:GetText(); else c_note = NuNGNoteTextBox:GetText(); end NuNConflictedRealmsLabel:SetText(" "); if ( ( NuN_GLevel_CheckBox:GetChecked() ) and ( not NuNGNoteFrame.confirmed ) ) then for index, value in NuNData do if ( ( index ~= pKey ) and ( NuNData[index][Notes] ) ) then if ( NuNData[index][Notes][c_note] ) then conflicts = conflicts + 1; if ( conflicts == 1 ) then pad = ""; else pad = ", "; end if ( conflicts < 5 ) then NuNConflictedRealmsLabel:SetText( NuNConflictedRealmsLabel:GetText()..pad..index ); end conflict = true; end end end end if ( ( conflict ) and ( not NuNGNoteFrame.confirmed ) ) then if ( conflicts > 4 ) then NuNConflictedRealmsLabel:SetText( NuNConflictedRealmsLabel:GetText().."..." ); end ShowUIPanel(NuN_ConfirmFrame); else if ( NuN_ConfirmFrame:IsVisible() ) then HideUIPanel(NuN_ConfirmFrame); end if ( not NuN_GNote_OriTitle ) then NuN_Creating = true; end if ( ( ( NuN_GNote_OriTitle ) and ( NuN_GNote_OriTitle ~= c_note ) ) or ( not NuN_GNote_OriTitle ) ) then if ( ( NuNData[pKey][Notes][c_note] ) or ( NuNData[Notes][c_note] ) ) then message(NUN_DUPLICATE); return; else if ( NuNData[pKey][Notes][NuN_GNote_OriTitle] ) then NuNData[pKey][Notes][NuN_GNote_OriTitle] = nil; elseif ( NuNData[Notes][NuN_GNote_OriTitle] ) then NuNData[Notes][NuN_GNote_OriTitle] = nil; end end end NuN_GNote_OriTitle = c_note; g_text = NuNGNoteTextScroll:GetText(); if ( g_text == nil ) then g_text = ""; end if ( NuN_GLevel_CheckBox:GetChecked() ) then saveLvl = "Account"; NuNData[Notes][c_note] = {}; for index, value in NuNData do if ( NuNData[index][Notes] ) then if ( NuNData[index][Notes][c_note] ) then NuNData[index][Notes][c_note] = nil; end end end else saveLvl = "Realm"; NuNData[pKey][Notes][c_note] = {}; if ( NuNData[Notes][c_note] ) then NuNData[Notes][c_note] = nil; end end NuN_SetGText(saveLvl); if ( string.find(c_note, "|Hitem:") ) then simpleName = NuN_GetSimpleName(c_note); if ( simpleName ~= nil ) then NuNData[itmIndex][simpleName] = c_note; end end if ( NuNGNoteFrame.type ) then if ( NuN_GLevel_CheckBox:GetChecked() ) then NuNData[Notes][c_note].type = NuNGNoteFrame.type; else NuNData[pKey][Notes][c_note].type = NuNGNoteFrame.type; end if ( noteTypes[NuNGNoteFrame.type].Command == "QST" ) then if ( not NuNData[pKey].QuestHistory[pName][c_note] ) then NuNData[pKey].QuestHistory[pName][c_note] = {}; NuNData[pKey].QuestHistory[pName][c_note].sortDate = tostring(date("%Y%m%d%H%M%S")); NuNData[pKey].QuestHistory[pName][c_note].pLevel = UnitLevel("player"); NuNData[pKey].QuestHistory[pName][c_note].txt = NUN_CREATED.."\n "..NuN_GetDateStamp().."\n "..NuN_GetLoc().."\n"; NuN_UpdateQuestNotes("Write"); end elseif ( ( noteTypes[NuNGNoteFrame.type].Command == "NPC" ) and ( NuN_Creating ) and ( NuNSettings[pKey].autoMapNotes ) ) then NuN_MapNote("Target", "", "", nil); end end if ( QuestLogFrame:IsVisible() ) then NuNNew_QuestLog_Update(); end if ( ( NuNSearchFrame:IsVisible() ) and ( NuNGNoteFrame.fromQuest ) ) then NuN_FetchQuestHistory(); elseif ( ( NuNSearchFrame:IsVisible() ) and ( not string.find(NuNSearchTitleText:GetText(), NUN_QUESTS_TEXT) ) ) then NuNSearch_Search(); end NuNGNoteButtonDelete:Enable(); if ( ( MapNotes_OnLoad ) or ( MetaMapNotes_OnLoad ) ) then NuNMapNoteButton:Enable(); end NuNGOpenChatButton:Enable(); NuN_GTTCheckBox:Show(); NuN_GTTCheckBox:SetChecked(0); if ( NuN_PinnedTooltip.type == "General" ) then NuN_GTTCheckBox:SetChecked( NuN_CheckPinnedBox(c_note) ); end NuNGTTCheckBoxLabel:Show(); NuNGNoteTitleButtonText:SetText(c_note); NuNGNoteTextBox:Hide(); NuNGNoteTitleButton:Show(); NuNGNoteHeader:SetText(NUN_SAVED_NOTE); end end function NuN_HideFrame() HideUIPanel(NuNEditDetailsFrame); HideUIPanel(NuNFrame); end function NuNGNote_HideFrame() HideUIPanel(NuNGNoteFrame); end function NuN_OnEvent() if ( event == "VARIABLES_LOADED" ) then --NuN_Message("NotesUNeed "..NUN_VERSION.." "..NUN_LOADED); elseif ( ( event == "IGNORELIST_UPDATE" ) and ( not NuN_importing ) )then NuN_Update_Ignored(); elseif ( event == "PLAYER_ENTERING_WORLD" ) then pFaction = UnitFactionGroup("player"); if ( pFaction == "Horde" ) then horde = true; else horde = false; end tryI = true; pName = UnitName("player"); NuN_InitialiseSavedVariables(); if ( not NuNData[pKey][pName] ) then NuN_AutoNote(); end NuN_Update_Friends(); NuN_Update_Ignored(); if ( not NuNSettings[pKey].hideMicro ) then ShowUIPanel(NuNMicroFrame); else HideUIPanel(NuNMicroFrame); end NuN_PinnedTooltip:SetScale(NuNSettings[pKey].tScale); NuN_Tooltip:SetScale(NuNSettings[pKey].tScale); WorldMapTooltip:SetScale(NuNSettings[pKey].mScale); NuN_MapTooltip:SetScale(NuNSettings[pKey].mScale); NuNPopup:SetScale(NuNSettings[pKey].mScale); if ( ( MapNotes_OnLoad ) or ( MetaMapNotes_OnLoad ) ) then NuN_MapIndexHouseKeeping(); end NuN_AtStartup = "True"; if ( NuN_FirstTime ) then NuN_FirstTime = nil; if ( MetaMapNotes_OnLoad ) then NuNOri_MetaMapNotes_OnEnter = MetaMapNotes_OnEnter; MetaMapNotes_OnEnter = NuNNew_MetaMapNotes_OnEnter; NuNOri_MetaMapNotes_OnLeave = MetaMapNotes_OnLeave; MetaMapNotes_OnLeave = NuNNew_MetaMapNotes_OnLeave; NuNOri_MetaMapNotes_DeleteNote = MetaMapNotes_DeleteNote; MetaMapNotes_DeleteNote = NuNNew_MetaMapNotes_DeleteNote; NuN_GetZoneTableSize = MetaMapNotes_GetZoneTableSize; elseif ( MapNotes_OnLoad ) then NuNOri_MapNotes_OnEnter = MapNotes_OnEnter; MapNotes_OnEnter = NuNNew_MapNotes_OnEnter; NuNOri_MapNotes_OnLeave = MapNotes_OnLeave; MapNotes_OnLeave = NuNNew_MapNotes_OnLeave; NuNOri_MapNotes_DeleteNote = MapNotes_DeleteNote; MapNotes_DeleteNote = NuNNew_MapNotes_DeleteNote; NuN_GetZoneTableSize = MapNotes_GetZoneTableSize; end end elseif ( ( event == "FRIENDLIST_UPDATE" ) and ( not NuN_importing ) ) then NuN_Update_Friends(); elseif( event == "PLAYER_LEVEL_UP" ) then if ( NuNData[pKey][pName] ) then local lvl = UnitLevel("player"); local cxp = UnitXP("player"); local nxp = UnitXPMax("player"); if ( cxp ) and ( nxp ) then local diff = nxp - cxp; if ( cxp > diff ) then lvl = lvl + 1; end end c_text = NuN_GetCText(pName); local len = string.len(c_text); if ( len < NUN_MAX_TXT_BUF ) then c_text = c_text..NUN_LVL_REACHED..lvl.." : "; c_text = c_text.."\n "..NuN_GetDateStamp(); c_text = c_text.."\n "..NuN_GetLoc(); NuN_SetCText(pName); end end -- elseif ( event == "CHAT_MSG_SYSTEM" ) then -- if ( arg1 ) then -- local p = string.find(arg1, NUN_COMPLETED); -- if ( p ) then -- local q = string.sub(arg1, 1, (p-1)); -- NuN_QuestHandIn(q); -- timeSinceLastUpdate = 0; -- NuN_IgnoreNextQUpdate = true; -- end -- end elseif ( ( event == "PARTY_MEMBERS_CHANGED" ) or ( event == "RAID_ROSTER_UPDATE" ) ) then if ( NuNSettings[pKey].autoP ) then NuN_ProcessParty(); end elseif ( ( NuN_QuestsUpdating == "False" ) and ( NuN_AtStartup == "False" ) and ( event == "QUEST_LOG_UPDATE" ) ) then if ( ( NuNGNoteFrame:IsVisible() ) and ( noteTypes[NuNGNoteFrame.type].Command == "QST" ) ) then HideUIPanel(NuNGNoteFrame); end if ( NuN_QuestAccepted ) then local qHeader = nil; local qCollapsed = nil; local qIndex, qLevel, qTag, qComplete = NuN_CheckQuestList(NuN_QuestAccepted); if ( qIndex > 0 ) then NuN_ProcessQuest(NuN_QuestAccepted, qLevel, qTag, qHeader, qCollapsed, qComplete, qIndex); end NuN_QuestAccepted = nil; return; end if ( NuN_IgnoreNextQUpdate ) then NuN_IgnoreNextQUpdate = nil; else NuN_UpdateQuestNotes(event); end end end function NuNHRaceDropDown_OnLoad() UIDropDownMenu_Initialize(NuNHRaceDropDown, NuNHRaceDropDown_Initialise); UIDropDownMenu_SetWidth(75); end function NuNHRaceDropDown_Initialise() local info; for i=1, getn(HRaces), 1 do info = {}; info.text = HRaces[i]; info.func = NuNHRaceButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNHRaceButton_OnClick() UIDropDownMenu_SetSelectedID(NuNHRaceDropDown, this:GetID()); ddRace = this:GetID(); lastDD = "Race"; NuNButtonClrDD:Enable(); end function NuNARaceDropDown_OnLoad() UIDropDownMenu_Initialize(NuNARaceDropDown, NuNARaceDropDown_Initialise); UIDropDownMenu_SetWidth(75); end function NuNARaceDropDown_Initialise() local info; for i=1, getn(ARaces), 1 do info = {}; info.text = ARaces[i]; info.func = NuNARaceButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNARaceButton_OnClick() UIDropDownMenu_SetSelectedID(NuNARaceDropDown, this:GetID()); ddRace = this:GetID(); lastDD = "Race"; NuNButtonClrDD:Enable(); end function NuNHClassDropDown_OnLoad() UIDropDownMenu_Initialize(NuNHClassDropDown, NuNHClassDropDown_Initialise); UIDropDownMenu_SetWidth(75); end function NuNHClassDropDown_Initialise() local info; for i=1, getn(HClasses), 1 do info = {}; info.text = HClasses[i]; info.func = NuNHClassButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNHClassButton_OnClick() UIDropDownMenu_SetSelectedID(NuNHClassDropDown, this:GetID()); ddClass = this:GetID(); lastDD = "Class"; NuNButtonClrDD:Enable(); end function NuNAClassDropDown_OnLoad() UIDropDownMenu_Initialize(NuNAClassDropDown, NuNAClassDropDown_Initialise); UIDropDownMenu_SetWidth(75); end function NuNAClassDropDown_Initialise() local info; for i=1, getn(AClasses), 1 do info = {}; info.text = AClasses[i]; info.func = NuNAClassButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNAClassButton_OnClick() UIDropDownMenu_SetSelectedID(NuNAClassDropDown, this:GetID()); ddClass = this:GetID(); lastDD = "Class"; NuNButtonClrDD:Enable(); end function NuNSexDropDown_OnLoad() UIDropDownMenu_Initialize(NuNSexDropDown, NuNSexDropDown_Initialise); UIDropDownMenu_SetWidth(75); end function NuNSexDropDown_Initialise() local info; for i=1, getn(Sexes), 1 do info = {}; info.text = Sexes[i]; info.func = NuNSexButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNSexButton_OnClick() UIDropDownMenu_SetSelectedID(NuNSexDropDown, this:GetID()); ddSex = this:GetID(); lastDD = "Sex"; NuNButtonClrDD:Enable(); end function NuNProf1DropDown_OnLoad() UIDropDownMenu_Initialize(NuNProf1DropDown, NuNProf1DropDown_Initialise); UIDropDownMenu_SetWidth(210); end function NuNProf1DropDown_Initialise() local info; for i=1, getn(Professions), 1 do info = {}; info.text = Professions[i]; info.func = NuNProf1Button_OnClick; UIDropDownMenu_AddButton(info); end end function NuNProf1Button_OnClick() UIDropDownMenu_SetSelectedID(NuNProf1DropDown, this:GetID()); ddProf1 = this:GetID(); lastDD = "Prof1"; NuNButtonClrDD:Enable(); end function NuNProf2DropDown_OnLoad() UIDropDownMenu_Initialize(NuNProf2DropDown, NuNProf2DropDown_Initialise); UIDropDownMenu_SetWidth(210); end function NuNProf2DropDown_Initialise() local info; for i=1, getn(Professions), 1 do info = {}; info.text = Professions[i]; info.func = NuNProf2Button_OnClick; UIDropDownMenu_AddButton(info); end end function NuNProf2Button_OnClick() UIDropDownMenu_SetSelectedID(NuNProf2DropDown, this:GetID()); ddProf2 = this:GetID(); lastDD = "Prof2"; NuNButtonClrDD:Enable(); end function NuNHCRankDropDown_OnLoad() UIDropDownMenu_Initialize(NuNHCRankDropDown, NuNHCRankDropDown_Initialise); UIDropDownMenu_SetWidth(125); end function NuNHCRankDropDown_Initialise() local info; for i=1, getn(HRanks), 1 do info = {}; info.text = HRanks[i]; info.func = NuNHCRankButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNHCRankButton_OnClick() UIDropDownMenu_SetSelectedID(NuNHCRankDropDown, this:GetID()); ddCRank = this:GetID(); lastDD = "CRank"; NuNButtonClrDD:Enable(); end function NuNACRankDropDown_OnLoad() UIDropDownMenu_Initialize(NuNACRankDropDown, NuNACRankDropDown_Initialise); UIDropDownMenu_SetWidth(125); end function NuNACRankDropDown_Initialise() local info; for i=1, getn(ARanks), 1 do info = {}; info.text = ARanks[i]; info.func = NuNACRankButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNACRankButton_OnClick() UIDropDownMenu_SetSelectedID(NuNACRankDropDown, this:GetID()); ddCRank = this:GetID(); lastDD = "CRank"; NuNButtonClrDD:Enable(); end function NuNHHRankDropDown_OnLoad() UIDropDownMenu_Initialize(NuNHHRankDropDown, NuNHHRankDropDown_Initialise); UIDropDownMenu_SetWidth(125); end function NuNHHRankDropDown_Initialise() local info; for i=1, getn(HRanks), 1 do info = {}; info.text = HRanks[i]; info.func = NuNHHRankButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNHHRankButton_OnClick() UIDropDownMenu_SetSelectedID(NuNHHRankDropDown, this:GetID()); ddHRank = this:GetID(); lastDD = "HRank"; NuNButtonClrDD:Enable(); end function NuNAHRankDropDown_OnLoad() UIDropDownMenu_Initialize(NuNAHRankDropDown, NuNAHRankDropDown_Initialise); UIDropDownMenu_SetWidth(125); end function NuNAHRankDropDown_Initialise() local info; for i=1, getn(ARanks), 1 do info = {}; info.text = ARanks[i]; info.func = NuNAHRankButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNAHRankButton_OnClick() UIDropDownMenu_SetSelectedID(NuNAHRankDropDown, this:GetID()); ddHRank = this:GetID(); lastDD = "HRank"; NuNButtonClrDD:Enable(); end function NuNOptionsSearchDropDown_OnLoad() UIDropDownMenu_Initialize(NuNOptionsSearchDropDown, NuNOptionsSearchDropDown_Initialise); UIDropDownMenu_SetWidth(165); end function NuNOptionsSearchDropDown_Initialise() local info; for i=1, getn(searchFor), 1 do info = {}; info.text = searchFor[i].Display; info.func = NuNOptionsSearchDropDown_OnClick; UIDropDownMenu_AddButton(info); end end function NuNOptionsSearchDropDown_OnClick() UIDropDownMenu_SetSelectedID(NuNOptionsSearchDropDown, this:GetID()); ddSearch = this:GetID(); end function NuNSearchClassDropDown_OnLoad() UIDropDownMenu_Initialize(NuNSearchClassDropDown, NuNSearchClassDropDown_Initialise); UIDropDownMenu_SetWidth(204); end function NuNSearchClassDropDown_Initialise() local info; for i=1, getn(AllClasses), 1 do info = {}; info.text = AllClasses[i]; info.func = NuNSearchClassButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNSearchClassButton_OnClick() UIDropDownMenu_SetSelectedID(NuNSearchClassDropDown, this:GetID()); ddClassSearch = this:GetID(); end function NuNSearchProfDropDown_OnLoad() UIDropDownMenu_Initialize(NuNSearchProfDropDown, NuNSearchProfDropDown_Initialise); UIDropDownMenu_SetWidth(204); end function NuNSearchProfDropDown_Initialise() local info; for i=1, getn(Professions), 1 do info = {}; info.text = Professions[i]; info.func = NuNSearchProfButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNSearchProfButton_OnClick() UIDropDownMenu_SetSelectedID(NuNSearchProfDropDown, this:GetID()); ddProfSearch = this:GetID(); end function NuNChatDropDown_OnLoad() UIDropDownMenu_Initialize(NuNChatDropDown, NuNChatDropDown_Initialise); UIDropDownMenu_SetWidth(110); end function NuNChatDropDown_Initialise() local info; for i=1, getn(transmitTo), 1 do info = {}; info.text = transmitTo[i].Display; info.func = NuNChatButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNChatButton_OnClick() UIDropDownMenu_SetSelectedID(NuNChatDropDown, this:GetID()); sendTo = transmitTo[this:GetID()].Command; if ( sendTo == "WHISPER" ) or ( sendTo == "NuN" ) then NuNChatTextBox:SetText(""); NuNChatTextBox:Show(); NuNTransmit:Disable(); else if ( NuNChatTextBox:IsVisible() ) then NuNChatTextBox:Hide(); end NuNTransmit:Enable(); end end function NuNGTypeDropDown_OnLoad() UIDropDownMenu_Initialize(NuNGTypeDropDown, NuNGTypeDropDown_Initialise); UIDropDownMenu_SetWidth(70); end function NuNGTypeDropDown_Initialise() local info; for i=1, getn(noteTypes), 1 do info = {}; info.text = noteTypes[i].Display; info.func = NuNGTypeButton_OnClick; UIDropDownMenu_AddButton(info); end end function NuNGTypeButton_OnClick() UIDropDownMenu_SetSelectedID(NuNGTypeDropDown, this:GetID()); NuNGNoteFrame.type = this:GetID(); if ( noteTypes[NuNGNoteFrame.type].Command == "NPC" ) then NuNNPCTargetButton:Show(); else NuNNPCTargetButton:Hide(); end end function NuNEditDetails() local prntObj; local prntTxtObj; newTxt = (NuNEditDetailsBox:GetText()); if (newTxt ~= oriTxt) then chldObj = getglobal("NuNInforButton"..bttnNumb); if ((newTxt == "") and (isTitle)) or ((newTxt == nil) and (isTitle)) then chldTxtObj = getglobal("NuNInforButton"..bttnNumb.."ButtonTextDetail"); chldTxt = chldTxtObj:SetText(""); chldObj:Disable(); else chldObj:Enable(); end bttnTxtObj:SetText(newTxt); if (isTitle) then if ( NuNEditDetail_CheckButton:GetChecked() ) then hdNbr = pHead..bttnNumb; nameHdNbr = c_name..hdNbr; if (not NuNSettings[pKey][hdNbr]) then NuNSettings[pKey][hdNbr] = {}; end NuNSettings[pKey][hdNbr].txt = newTxt; if ( NuNData[pKey][nameHdNbr] ) then NuNData[pKey][nameHdNbr] = nil; end else index = tonumber(bttnNumb); if ( ( newTxt == "" ) or ( newTxt == nil ) )then bttnChanges[index] = 1; else bttnChanges[index] = newTxt; end end else index = bttnNumb + detlOffset; if ( newTxt == "" ) then bttnChanges[index] = 1; else bttnChanges[index] = newTxt; end if ( index == (detlOffset + 1) ) then prntTxtObj = getglobal("NuNTitleButton"..bttnNumb.."ButtonTextHeading"); if ( prntTxtObj:GetText() == dfltHeadings[1] ) then c_guild = newTxt; end end end NuNEditDetails_HideFrame(); else NuNEditDetails_HideFrame(); end end function NuNEditDetails_HideFrame() NuNButtonSaveNote:Enable(); HideUIPanel(NuNEditDetailsFrame); end function NuNUserButton_OnClick(bttn) local bttnName = bttn:GetName(); local prfx = (string.sub(bttnName, 1, 8)); bttnNumb = (string.sub(bttnName, 15, 15)); if (prfx == "NuNTitle") then isTitle = true; bttnTxtObj = getglobal(bttnName.."ButtonTextHeading"); else isTitle = false; bttnTxtObj = getglobal(bttnName.."ButtonTextDetail"); end oriTxt = bttnTxtObj:GetText(); NuNEditDetails_ShowFrame(isTitle); end function NuNEditDetails_ShowFrame(isTitle) NuNButtonSaveNote:Disable(); NuNText:ClearFocus(); if (oriTxt == nil) then NuNEditDetailsBox:SetText(""); else NuNEditDetailsBox:SetText(oriTxt); end if (isTitle) then NuNCheckBoxLabel:SetText("Save as Default"); NuNEditDetail_CheckButton:SetChecked(0); NuNEditDetailsRestoreButton:Enable(); NuNEditDetail_CheckButton:Show(); NuNEditDetailsRestoreButton:Show(); else NuNCheckBoxLabel:SetText(""); NuNEditDetail_CheckButton:Hide(); NuNEditDetailsRestoreButton:Hide(); end ShowUIPanel(NuNEditDetailsFrame); NuNEditDetailsBox:SetFocus(); end function NuN_EditDetailCheckButtonOnClick() if ( NuNEditDetail_CheckButton:GetChecked() ) then NuNEditDetailsRestoreButton:Disable(); else NuNEditDetailsRestoreButton:Enable(); end end function NuNEditDetailsRestore() nameHdNbr = c_name..pHead..bttnNumb; if ( NuNData[pKey][nameHdNbr] ) then NuNData[pKey][nameHdNbr] = nil; end NuNEditDetails_HideFrame(); NuN_HideFrame(); NuN_ShowNote(); end ------------------------------------------------------------------------------------------- -- Succesful Function Hooks function NuNNew_FriendsFrameFriendButton_OnClick(button) NuNOri_FriendsFrameFriendButton_OnClick(button); if ( ( button == "LeftButton" ) and ( NuNFrame:IsVisible() ) ) then NuN_HideFrame(); NuN_ShowFriendNote(); end end function NuNNew_FriendsFrameIgnoreButton_OnClick() NuNOri_FriendsFrameIgnoreButton_OnClick(); if ( ( button == "LeftButton" ) and ( NuNFrame:IsVisible() ) ) then NuN_HideFrame(); NuN_ShowIgnoreNote(); end end function NuNNew_FriendsFrameGuildPlayerStatusButton_OnClick(button) NuNOri_FriendsFrameGuildPlayerStatusButton_OnClick(button); if ( ( button == "LeftButton" ) and ( NuNFrame:IsVisible() ) ) then NuN_HideFrame(); NuN_ShowGuildNote(); end end function NuNNew_FriendsFrameGuildStatusButton_OnClick(button) NuNOri_FriendsFrameGuildStatusButton_OnClick(button); if ( ( button == "LeftButton" ) and ( NuNFrame:IsVisible() ) ) then NuN_HideFrame(); NuN_ShowGuildNote(); end end function NuNNew_FriendsFrameWhoButton_OnClick(button) NuNOri_FriendsFrameWhoButton_OnClick(button); if ( ( button == "LeftButton" ) and ( NuNFrame:IsVisible() ) ) then NuN_HideFrame(); NuN_ShowWhoNote(WhoFrame.selectedName); end end function NuNNew_FriendsList_Update() local bttnIndx; NuNOri_FriendsList_Update(); for i = 1, 10, 1 do bttnIndx = getglobal("NuN_FriendNotesButton"..i); NuN_UpdateNoteButton(bttnIndx, i, "F"); end end function NuNNew_IgnoreList_Update() local bttnIndx; NuNOri_IgnoreList_Update(); for i = 1, 20, 1 do bttnIndx = getglobal("NuN_IgnoreNotesButton"..i); NuN_UpdateNoteButton(bttnIndx, i, "I"); end end function NuNNew_GuildStatus_Update() local bttnIndx; NuNOri_GuildStatus_Update(); for i = 1, 13, 1 do bttnIndx = getglobal("NuN_GuildSNotesButton"..i); NuN_UpdateNoteButton(bttnIndx, i, "GS"); bttnIndx = getglobal("NuN_GuildNotesButton"..i); NuN_UpdateNoteButton(bttnIndx, i, "G"); end end function NuNNew_WhoList_Update() local bttnIndx; NuNOri_WhoList_Update(); for i = 1, 17, 1 do bttnIndx = getglobal("NuN_WhoNotesButton"..i); NuN_UpdateNoteButton(bttnIndx, i, "W"); end end function NuNNew_QuestLog_Update() local bttnIndx; NuNOri_QuestLog_Update(); for i = 1, 6, 1 do bttnIndx = getglobal("NuN_QuestNotesButton"..i); NuN_UpdateNoteButton(bttnIndx, i, NUN_QUEST_C); end end function NuNNew_ContainerFrameItemButton_OnClick(button, ignoreShift) if ( ( IsAltKeyDown() ) and ( IsShiftKeyDown() ) ) then local itmLink = GetContainerItemLink( this:GetParent():GetID(), this:GetID() ); if ( ( itmLink ~= nil ) and ( itmLink ~= "" ) ) then if ( button == "LeftButton" ) then if ( ( NuNGNoteFrame:IsVisible() ) or ( NuNFrame:IsVisible() ) ) then if ( NuNGNoteFrame:IsVisible() ) then local cText = NuNGNoteTextScroll:GetText().."\n"..itmLink; NuNGNoteTextScroll:SetText(cText); return; elseif ( NuNFrame:IsVisible() ) then local cText = NuNText:GetText().."\n"..itmLink; NuNText:SetText(cText); return; end else NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][itmLink] ) or ( NuNData[Notes][itmLink] ) ) then c_note = itmLink; NuN_ShowSavedGNote(); else NuN_GNoteFromItem(itmLink, "GameTooltip"); end return; end end end end NuNOri_ContainerFrameItemButton_OnClick(button, ignoreShift); end function NuNNew_SetItemRef(link, text, button) if ( strsub(link, 1, 6) == "player" ) then local name = string.sub(link, 8); if ( name and (string.len(name) > 0) ) then name = string.gsub(name, "([^%s]*)%s+([^%s]*)%s+([^%s]*)", "%3"); name = string.gsub(name, "([^%s]*)%s+([^%s]*)", "%2"); if ( IsShiftKeyDown() ) then local NuN_staticPopup = StaticPopup_Visible("ADD_IGNORE"); if ( not NuN_staticPopup ) then if ( IsAltKeyDown() ) then if ( NuNData[pKey][name] ) then NuN_ShowSavedNote(name); else NuN_CreateContact(name, pFaction); end else ttName = name; NuN_ClearPinnedTT(); NuN_PinnedTooltip:SetOwner(this, "ANCHOR_RIGHT"); NuN_PinUpHeader = true; NuN_PinnedTooltip.type = "Contact"; NuN_BuildTT(NuN_PinnedTooltip); NuN_PinUpHeader = false; NuN_PinnedTooltip:Show(); end end end end elseif ( IsShiftKeyDown() ) and ( IsAltKeyDown() ) then if ( button == "LeftButton" ) then if ( ( NuNGNoteFrame:IsVisible() ) or ( NuNFrame:IsVisible() ) ) then if ( NuNGNoteFrame:IsVisible() ) then local cText = NuNGNoteTextScroll:GetText().."\n"..text; NuNGNoteTextScroll:SetText(cText); return; elseif ( NuNFrame:IsVisible() ) then local cText = NuNText:GetText().."\n"..text; NuNText:SetText(cText); return; end else NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][text] ) or ( NuNData[Notes][text] ) ) then c_note = text; NuN_ShowSavedGNote(); else ItemRefTooltip:SetHyperlink(link); NuN_GNoteFromItem(text, "ItemRefTooltip"); end return; end end end NuNOri_SetItemRef(link, text, button); if ( ItemRefTooltip:IsVisible() ) then NuN_ItemRefTooltip_OnShow(); end end function NuNNew_PaperDollItemSlotButton_OnClick(button) local itmLink; if ( ( IsShiftKeyDown() ) and ( IsAltKeyDown() ) ) then if ( ( InspectFrame ) and ( InspectFrame:IsVisible() ) ) then itmLink = GetInventoryItemLink("target", this:GetID()); else itmLink = GetInventoryItemLink("player", this:GetID()); end if ( ( itmLink ~= nil ) and ( itmLink ~= "" ) ) then if ( button == "LeftButton" ) then if ( ( NuNGNoteFrame:IsVisible() ) or ( NuNFrame:IsVisible() ) ) then if ( NuNGNoteFrame:IsVisible() ) then local cText = NuNGNoteTextScroll:GetText().."\n"..itmLink; NuNGNoteTextScroll:SetText(cText); return; elseif ( NuNFrame:IsVisible() ) then local cText = NuNText:GetText().."\n"..itmLink; NuNText:SetText(cText); return; end else NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][itmLink] ) or ( NuNData[Notes][itmLink] ) ) then c_note = itmLink; NuN_ShowSavedGNote(); else NuN_GNoteFromItem(itmLink, "GameTooltip"); end return; end end end end NuNOri_PaperDollItemSlotButton_OnClick(button); end function NuNNew_QuestLogRewardItem_OnClick() if ( ( IsShiftKeyDown() ) and ( IsAltKeyDown() ) and ( this.rewardType ~= "spell" ) ) then local itmLink = GetQuestLogItemLink(this.type, this:GetID()); if ( ( itmLink ~= nil ) and ( itmLink ~= "" ) ) then local sLink = NuN_GetSimpleName(itmLink); if ( ( NuNGNoteFrame:IsVisible() ) and ( sLink == prevLink ) ) then HideUIPanel(NuNGNoteFrame); else prevLink = sLink; NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][itmLink] ) or ( NuNData[Notes][itmLink] ) ) then c_note = itmLink; NuN_ShowSavedGNote(); else NuN_GNoteFromItem(itmLink, "GameTooltip"); local q = GetQuestLogSelection(); if ( q ) then q = GetQuestLogTitle(q); if ( q ) then if ( NuNGNoteFrame:IsVisible() ) then NuNGNoteTextScroll:SetText( NuNGNoteTextScroll:GetText().."\n"..NUN_QUEST..q ); end end end end end return; end end NuNOri_QuestLogRewardItem_OnClick(); end function NuNNew_QuestItem_OnClick() if ( ( IsShiftKeyDown() ) and ( IsAltKeyDown() ) and ( this.rewardType ~= "spell" ) ) then local itmLink = GetQuestItemLink(this.type, this:GetID()); if ( ( itmLink ~= nil ) and ( itmLink ~= "" ) ) then local sLink = NuN_GetSimpleName(itmLink); if ( ( NuNGNoteFrame:IsVisible() ) and ( sLink == prevLink ) ) then HideUIPanel(NuNGNoteFrame); else prevLink = sLink; NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][itmLink] ) or ( NuNData[Notes][itmLink] ) ) then c_note = itmLink; NuN_ShowSavedGNote(); else NuN_GNoteFromItem(itmLink, "GameTooltip"); local giver = QuestFrameNpcNameText:GetText(); local quest = QuestTitleText:GetText(); if ( giver ) then giver = "\n"..giver.."\n"..NuN_GetLoc(); end if ( quest ) then giver = giver.."\n"..NUN_QUEST..quest; end if ( giver ) then NuNGNoteTextScroll:SetText( NuNGNoteTextScroll:GetText()..giver ); end end end return; end end NuNOri_QuestItem_OnClick(); end function NuNNew_QuestRewardItem_OnClick() if ( ( IsShiftKeyDown() ) and ( IsAltKeyDown() ) and ( this.rewardType ~= "spell" ) ) then local itmLink = GetQuestItemLink(this.type, this:GetID()); if ( ( itmLink ~= nil ) and ( itmLink ~= "" ) ) then local sLink = NuN_GetSimpleName(itmLink); if ( ( NuNGNoteFrame:IsVisible() ) and ( sLink == prevLink ) ) then HideUIPanel(NuNGNoteFrame); else prevLink = sLink; NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][itmLink] ) or ( NuNData[Notes][itmLink] ) ) then c_note = itmLink; NuN_ShowSavedGNote(); else NuN_GNoteFromItem(itmLink, "GameTooltip"); end end return; end end NuNOri_QuestRewardItem_OnClick(); end function NuNNew_AbandonQuest() local qN = GetAbandonQuestName(); timeSinceLastUpdate = 0; NuN_IgnoreNextQUpdate = true; NuN_AbandonQuest(qN); NuNOri_AbandonQuest(); end function NuNNew_QuestDetailAcceptButton_OnClick() NuNOri_QuestDetailAcceptButton_OnClick(); NuN_QuestAccepted = GetTitleText(); end function NuNNew_QuestRewardCompleteButton_OnClick() local qN = GetTitleText(); NuN_QuestHandIn(qN); NuNOri_QuestRewardCompleteButton_OnClick(); end ------------------------------------------------------------------------------------------- -- Attempt to Hook MapNotes functions function NuNNew_MapNotes_OnEnter(id) if ( NuNPopup:IsVisible() ) then return; end NuNOri_MapNotes_OnEnter(id); NuN_WorldMapTooltip_OnShow(id); end function NuNNew_MapNotes_OnLeave(id) if ( NuNPopup:IsVisible() ) then popUpHide = true; return; end NuNOri_MapNotes_OnLeave(id); end function NuNNew_MapNotes_DeleteNote(id, cont, zone) local lId = id; local lCont, lZone, lLst; if ( id > 0 ) then lCont, lZone, lLst = NuN_PreDeleteMapIndex(id, cont, zone); end NuNOri_MapNotes_DeleteNote(id, cont, zone); if ( ( lId > 0 ) and ( cont ~= 0 ) ) then NuN_DeleteMapIndex(lId, lCont, lZone, lLst); end end ------------------------------------------------------------------------------------------- -- Attempt to Hook MetaMapNotes functions function NuNNew_MetaMapNotes_OnEnter(id) if ( NuNPopup:IsVisible() ) then return; end NuNOri_MetaMapNotes_OnEnter(id); WorldMapTooltip:SetScale(NuNSettings[pKey].mScale); WorldMapTooltip:Show(); NuN_WorldMapTooltip_OnShow(id); end function NuNNew_MetaMapNotes_OnLeave(id) if ( NuNPopup:IsVisible() ) then popUpHide = true; return; end NuNOri_MetaMapNotes_OnLeave(id); end function NuNNew_MetaMapNotes_DeleteNote(id, cont, zone) local lId = id; local lCont, lZone, lLst; if ( id > 0 ) then lCont, lZone, lLst = NuN_PreDeleteMapIndex(id, cont, zone); end NuNOri_MetaMapNotes_DeleteNote(id, cont, zone); if ( ( lId > 0 ) and ( cont ~= 0 ) ) then NuN_DeleteMapIndex(lId, lCont, lZone, lLst); end end ------------------------------------------------------------------------------------------- function NuN_GNoteFromItem(link, theTT) local catTxt = ""; catTxt = NuN_ExtractTooltipInfo(catTxt, theTT); c_note = link; c_type = NuNGet_CommandID(noteTypes, "ITM"); NuN_ShowTitledGNote(catTxt); end function NuN_ExtractTooltipInfo(xTTText, theTT) local lftTxt, rgtTxt, needRight; local endLine = "\n"; local tmpTxt; local foundTTInfo = false; local ttLLen = NUN_TT_LEN; if ( NuNSettings[pKey].ttLLen ) then if ( NuNSettings[pKey].ttLLen == "" ) then ttLLen = 0; else ttLLen = tonumber( NuNSettings[pKey].ttLLen ); end end for i=2, 23, 1 do lftTxt = getglobal(theTT.."TextLeft"..i):GetText(); rgtTxt = getglobal(theTT.."TextRight"..i):GetText(); needRight = false; tmpTxt = ""; if ( lftTxt ~= nil ) then if ( ( string.find(lftTxt, "\"" ) ) or ( ( string.find(lftTxt, "/") ) and ( string.find(lftTxt, "\)") ) ) ) then tmpTxt = NUN_GOLD..lftTxt; elseif ( string.find(lftTxt, ":") ) then tmpTxt = NUN_GREEN..lftTxt; else tmpTxt = NUN_WHITE..lftTxt; end if ( rgtTxt ~= nil ) then needRight = NuN_TestLeftTT(lftTxt); if ( needRight ) then local lLen = string.len(lftTxt); local rLen = string.len(rgtTxt); local spaces = ttLLen - (lLen + rLen) - 10; local pad = string.rep(" ", spaces); tmpTxt = tmpTxt..pad..rgtTxt; end end xTTText = xTTText..tmpTxt..NUN_C_END..endLine; foundTTInfo = true; end end return xTTText; end function NuN_TestLeftTT(lftTxt) if ( string.find(lftTxt, NUN_HAND ) ) or ( string.find(lftTxt, NUN_HAND2) ) or ( string.find(lftTxt, NUN_FEET ) ) or ( string.find(lftTxt, NUN_LEGS ) ) or ( string.find(lftTxt, NUN_HEAD ) ) or ( string.find(lftTxt, NUN_WAIST ) ) or ( string.find(lftTxt, NUN_SHOULDER ) ) or ( string.find(lftTxt, NUN_CHEST ) ) or ( string.find(lftTxt, NUN_WRIST ) ) or ( string.find(lftTxt, NUN_DAMAGE ) ) then return true; else return false; end end function NuN_Who() local wName = nil; local wGuildName = nil; local wRace = nil; local wClass = nil; local bttnHeadingText1; local bttnDetailText1; SendWho(c_name); local n = GetNumWhoResults(); for i = 1, n, 1 do wName = GetWhoInfo(i); if ( wName == c_name ) then wName, wGuildName, wLvl, wRace, wClass, wZone = GetWhoInfo(i); if ( wGuildName ~= nil ) then c_guild = wGuildName; end bttnHeadingText1 = getglobal("NuNTitleButton1ButtonTextHeading"); bttnDetailText1 = getglobal("NuNInforButton1ButtonTextDetail"); if ( bttnHeadingText1:GetText() == dfltHeadings[1] ) and ( wGuildName ~= nil) then bttnDetailText1:SetText(wGuildName); c_guild = wGuildName; if ( wGuildName == "" ) then bttnChanges[6] = 1; else bttnChanges[6] = wGuildName; end end if ( wClass ~= nil ) then c_class = wClass; ddClass = NuNGet_TableID(Classes, c_class); UIDropDownMenu_SetSelectedID(NuNClassDropDown, ddClass); UIDropDownMenu_SetText(c_class, NuNClassDropDown); end if ( wRace ~= nil ) then c_race = wRace; ddRace = NuNGet_TableID(Races, c_race); UIDropDownMenu_SetSelectedID(NuNRaceDropDown, ddRace); UIDropDownMenu_SetText(c_race, NuNRaceDropDown); end end end end function NuN_Target() local lName; local lRace; local lClass; local lSex; local lPvPRank; local lPvPRankID; local lgName; local lgRank; local lgRankIndex; local theUnitID = nil; if ( ( UnitInParty("target") ) or ( UnitInRaid("target") ) ) then theUnitID = "target"; end if ( theUnitID == nil ) then theUnitID = NuN_CheckPartyByName(c_name); end if ( theUnitID == nil ) then theUnitID = NuN_CheckRaidByName(c_name); end if ( theUnitID == nil ) then TargetByName(c_name); lName = UnitName("target"); if ( lName == c_name ) then theUnitID = "target"; else ClearTarget(); end end if ( unitTest == true ) then unitTest = false; else if ( theUnitID ~= nil ) then lRace = UnitRace(theUnitID); if ( lRace ~= nil ) then c_race = lRace; ddRace = NuNGet_TableID(Races, c_race); UIDropDownMenu_SetSelectedID(NuNRaceDropDown, ddRace); UIDropDownMenu_SetText(c_race, NuNRaceDropDown); end lClass = UnitClass(theUnitID); if ( lClass ~= nil ) then c_class = lClass; ddClass = NuNGet_TableID(Classes, c_class); UIDropDownMenu_SetSelectedID(NuNClassDropDown, ddClass); UIDropDownMenu_SetText(c_class, NuNClassDropDown); end lSex = UnitSex(theUnitID); if ( lSex ~= nil ) then if ( lSex == 0 ) then lsex = NUN_MALE; else lsex = NUN_FEMALE; end ddSex = NuNGet_TableID(Sexes, lsex); UIDropDownMenu_SetSelectedID(NuNSexDropDown, ddSex); UIDropDownMenu_SetText(lsex, NuNSexDropDown); end lPvPRankID = UnitPVPRank(theUnitID); if ( lPvPRankID ~= nil ) and ( lPvPRankID > 0 ) then lPvPRank = GetPVPRankInfo(lPvPRankID); ddCRank = NuNGet_TableID(Ranks, lPvPRank); UIDropDownMenu_SetSelectedID(NuNCRankDropDown, ddCRank); UIDropDownMenu_SetText(lPvPRank, NuNCRankDropDown); end lgName, lgRank, lgRankIndex = GetGuildInfo(theUnitID); if ( lgName ~= nil ) then c_guild = lgName; end bttnHeadingText1 = getglobal("NuNTitleButton1ButtonTextHeading"); bttnDetailText1 = getglobal("NuNInforButton1ButtonTextDetail"); bttnHeadingText2 = getglobal("NuNTitleButton2ButtonTextHeading"); bttnDetailText2 = getglobal("NuNInforButton2ButtonTextDetail"); if ( lgName ~= "" ) and ( lgName ~= nil ) then if ( bttnHeadingText1:GetText() == dfltHeadings[1] ) then bttnDetailText1:SetText(lgName); bttnChanges[6] = lgName; end if ( bttnHeadingText2:GetText() == dfltHeadings[2] ) then if ( lgRankIndex == 0 ) then lgRankTxt = ( "GM : "..lgRank ); else lgRankTxt = ( lgRankIndex.." : "..lgRank ); end bttnDetailText2:SetText(lgRankTxt); bttnChanges[7] = lgRankTxt; end end if ( theUnitID == "target" ) then for index = 1, getn(invSlotList), 1 do local text = GetInventoryItemLink(theUnitID, index); if ( text ) then local link = NuN_GetLink(text); if ( link ) then ItemRefTooltip:SetHyperlink(link); NuN_CheckSlot(); if ( typeIndex ) then NuNText:SetText( NuNText:GetText() .. "\n" .. invSlotList[typeIndex].name .. text ); else NuNText:SetText( NuNText:GetText() .. "\n" .. text ); end end end end end end end return theUnitID; end function NuN_CheckSlot() local lftTxt; typeIndex = nil; NuN_Fingers = 0; NuN_Trinkets = 0; NuN_Hand = 0; for i=2, 5, 1 do lftTxt = getglobal("ItemRefTooltipTextLeft"..i):GetText(); if ( lftTxt ) then typeIndex = NuN_Wearable(lftTxt); if ( typeIndex ~= nil ) then break; end end end end function NuN_Wearable(txt) if ( string.find(txt, NUN_HEAD) ) then return 1; elseif ( string.find(txt, NUN_NECK) ) then return 2; elseif ( string.find(txt, NUN_SHOULDER) ) then return 3; elseif ( string.find(txt, NUN_SHIRT) ) then return 4; elseif ( string.find(txt, NUN_CHEST) ) then return 5; elseif ( string.find(txt, NUN_WAIST) ) then return 6; elseif ( string.find(txt, NUN_LEGS) ) then return 7; elseif ( string.find(txt, NUN_FEET) ) then return 8; elseif ( string.find(txt, NUN_WRIST) ) then return 9; elseif ( string.find(txt, NUN_HANDS) ) then return 10; elseif ( string.find(txt, NUN_FINGER) ) then NuN_Fingers = NuN_Fingers + 1; return 11 + NuN_Fingers; elseif ( string.find(txt, NUN_TRINKET) ) then NuN_Trinkets = NuN_Trinkets + 1; return 13 + NuN_Trinkets; elseif ( string.find(txt, NUN_BACK) ) then return 15; elseif ( string.find(txt, NUN_HAND) ) then NuN_Hand = NuN_Hand + 1; return 16 + NuN_Hand; elseif ( string.find(txt, NUN_HAND2) ) then return 16; elseif ( string.find(txt, NUN_GUN) ) or ( string.find(txt, NUN_RANGED) ) or ( string.find(txt, NUN_BOW_U) ) or ( string.find(txt, NUN_BOW_L) ) or ( string.find(txt, NUN_WAND) or ( string.find(txt, NUN_THROWN) ) ) then return 18; elseif ( string.find(txt, NUN_TABARD) ) then return 19; else return nil; end end function NuN_Delete() if ( NuNData[pKey][c_name] ) then NuNData[pKey][c_name] = nil; end for n = 1, uBttns, 1 do nameHdNbr = c_name..pHead..n; nameDtNbr = c_name..pDetl..n; if ( NuNData[pKey][nameHdNbr] ) then NuNData[pKey][nameHdNbr] = nil; end if ( NuNData[pKey][nameDtNbr] ) then NuNData[pKey][nameDtNbr] = nil; end end if ( NuN_CTTCheckBox:GetChecked() ) then NuN_ClearPinnedTT(); end NuN_HideFrame(); if ( ( NuNSearchFrame:IsVisible() ) and ( not string.find(NuNSearchTitleText:GetText(), NUN_QUESTS_TEXT) ) ) then deletedE = true; NuNSearch_Search(); end if ( FriendsListFrame:IsVisible() ) then NuNNew_FriendsList_Update(); elseif ( IgnoreListFrame:IsVisible() ) then NuNNew_IgnoreList_Update(); elseif ( GuildPlayerStatusFrame:IsVisible() ) then NuNNew_GuildStatus_Update(); elseif ( GuildStatusFrame:IsVisible() ) then NuNNew_GuildStatus_Update(); elseif ( WhoFrame:IsVisible() ) then NuNNew_WhoList_Update(); end end function NuNGNote_Delete() local c_note = NuNGNoteTitleButtonText:GetText(); if ( NuNGNoteFrame.fromQuest ) then NuNData[pKey].QuestHistory[pName][c_note] = nil; HideUIPanel(NuNGNoteFrame); if ( NuNSearchFrame:IsVisible() ) then deletedE = true; NuN_FetchQuestHistory(); end else if ( string.find(c_note, "|Hitem:") ) then NuN_DeleteItem(c_note); end if ( NuNData[pKey][Notes][c_note] ) then NuNData[pKey][Notes][c_note] = nil; elseif ( NuNData[Notes][c_note] ) then NuNData[Notes][c_note] = nil; end if ( NuN_GTTCheckBox:GetChecked() ) then NuN_ClearPinnedTT(); end HideUIPanel(NuNGNoteFrame); if ( NuNSearchFrame:IsVisible() ) then deletedE = true; NuNSearch_Search(); end if ( ( QuestLogFrame:IsVisible() ) and ( not NuNGNoteFrame.fromQuest ) ) then NuNNew_QuestLog_Update(); end NuN_UpdateMapNotesIndex(c_note); end end function NuNOptions_ResetDefaults() NuNSettings[pKey] = {}; NuNSettings[pKey].autoG = nil; NuNSettings[pKey].autoA = nil; NuNSettings[pKey].autoD = nil; NuNSettings[pKey].toolTips = "1"; NuNSettings[pKey].pScale = 1.00; NuNSettings[pKey].tScale = 1.00; NuNSettings[pKey].mScale = 1.00; NuN_PinnedTooltip:SetScale(1); NuN_Tooltip:SetScale(1); WorldMapTooltip:SetScale(1); NuN_MapTooltip:SetScale(1); NuNPopup:SetScale(1); NuNSettings[pKey].dLevel = "1"; NuNSettings[pKey].autoQ = nil; NuNSettings[pKey].autoN = nil; NuNSettings[pKey].autoP = nil; NuNSettings[pKey].minOver = "1"; NuNSettings[pKey].ttLen = NUN_TT_MAX; NuNSettings[pKey].ttLLen = NUN_TT_LEN; NuNSettings[pKey].hideMicro = nil; HideUIPanel(NuNOptionsFrame); NuNFrame:SetUserPlaced(0); NuNFrame:ClearAllPoints(); NuNFrame:SetPoint("CENTER", UIParent, "CENTER", 220, 15); NuNGNoteFrame:SetUserPlaced(0); NuNGNoteFrame:ClearAllPoints(); NuNGNoteFrame:SetPoint("CENTER", UIParent, "CENTER", 250, -15); NuNSearchFrame:SetUserPlaced(0); NuNSearchFrame:ClearAllPoints(); NuNSearchFrame:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 60, -144); if ( NuNMicroFrame:IsVisible() ) then HideUIPanel(NuNMicroFrame); end NuNMicroFrame:SetUserPlaced(0); NuNMicroFrame:ClearAllPoints(); NuNMicroFrame:SetPoint("TOP", UIParent, "TOP", 0, -30); ShowUIPanel(NuNMicroFrame); NuN_Options(); end function NuNOptions_Import() local x; local index; local value; local isInGuild = false; local lGuild = GetGuildInfo("player"); if ( lGuild ~= nil ) then isInGuild = true; end NuN_importing = true; for index, value in NuNData[pKey] do if ( ( NuNData[pKey][index].faction ) and ( index == pName ) ) then NuNData[pKey][index].type = NUN_SELF_C; elseif ( ( NuNData[pKey][index].faction == pFaction ) and ( index ~= pName ) ) then if ( NuNData[pKey][index].ignoreLst ) then if ( not NuN_Is_Ignored(index) ) then if ( NuN_NotInfiniteIgored(index) ) then if ( AddIgnore(index) ) then x = getn(NuNData[pKey][index].ignoreLst) + 1; NuNData[pKey][index].ignoreLst[x] = pName; end end end elseif ( ( isInGuild ) and ( NuNData[pKey][index].guild == lGuild ) and ( not NuNSettings[pKey].autoG ) ) then -- Forget this entry as they are guild mates with current player and settings say not to add as friend elseif ( NuNData[pKey][index].friendLst ) then if ( not NuN_Is_Friendly(index) ) then AddFriend(index); if ( not NuNData[pKey][index].friendLst ) then NuNData[pKey][index].friendLst = {}; end if ( not NuNGet_TableID(NuNData[pKey][index].friendLst, pName) ) then x = getn( NuNData[pKey][index].friendLst) + 1; NuNData[pKey][index].friendLst[x] = pName; end end end end end NuN_importing = false; end function NuNOptions_Export() local iName; for i = 1, GetNumFriends(), 1 do iName = GetFriendInfo(i); if ( not NuNData[pKey][iName] ) then NuNData[pKey][iName] = {}; NuNData[pKey][iName].type = NUN_AUTO_C; NuNData[pKey][iName].faction = pFaction; NuNData[pKey][iName][txtTxt] = NUN_AUTO_FRIEND..NuN_GetDateStamp(); NuNData[pKey][iName].friendLst = {}; NuNData[pKey][iName].friendLst[1] = pName; end end for i = 1, GetNumIgnores(), 1 do iName = GetIgnoreName(i); if ( not NuNData[pKey][iName] ) then NuNData[pKey][iName] = {}; NuNData[pKey][iName].type = NUN_AUTO_C; NuNData[pKey][iName].faction = pFaction; NuNData[pKey][iName][txtTxt] = NUN_AUTO_IGNORE..NuN_GetDateStamp(); NuNData[pKey][iName].ignoreLst = {}; NuNData[pKey][iName].ignoreLst[1] = pName; end end end function NuNOptions_Search() local lDisplay = searchFor[ddSearch].Display; local lCommand = searchFor[ddSearch].Command; ddClassSearch = nil; ddProfSearch = nil; ddText = nil; lastBttnIndex = 0; lastBttn = nil; lastBttnDetl = nil; NuN_Filtered = nil; foundNuN = {}; NuNSearchFrame:SetScale(NuNSettings[pKey].pScale); ShowUIPanel(NuNSearchFrame); HideUIPanel(NuNOptionsFrame); NuNSearchFrame.searchType = lDisplay; NuNSearchTitleText:SetText(lDisplay); NuNSearchFrameSearchButton:Enable(); if ( ( lCommand == "All" ) or ( string.find(lCommand, "Notes") ) ) then NuNSearchClassDropDown:Hide(); NuNSearchProfDropDown:Hide(); NuNSearchTextBox:Hide(); NuNSearch_Search(); elseif ( lCommand == "Class" ) then UIDropDownMenu_ClearAll(NuNSearchClassDropDown); NuNSearchClassDropDown:Show(); NuNSearchProfDropDown:Hide(); NuNSearchTextBox:Hide(); NuNSearch_Update(); elseif ( lCommand == "Profession" ) then NuNSearchClassDropDown:Hide(); UIDropDownMenu_ClearAll(NuNSearchProfDropDown); NuNSearchProfDropDown:Show(); NuNSearchTextBox:Hide(); NuNSearch_Update(); elseif ( lCommand == "Quest History" ) then NuNSearchFrameSearchButton:Disable(); NuNSearchClassDropDown:Hide(); NuNSearchProfDropDown:Hide(); NuNSearchTextBox:Hide(); NuNSearchTitleText:SetText(NUN_QUESTS_TEXT.." : "..pName); NuN_FetchQuestHistory(); else NuNSearchClassDropDown:Hide(); NuNSearchProfDropDown:Hide(); -- NuNSearchTextBox:SetText(""); NuNSearchTextBox:Show(); NuNSearchTextBox:SetFocus(); -- NuNSearch_Update(); NuNSearch_Search(); end end function NuNSearch_Search() local index; local value; local tstTxt; local srchText; local countH = 0; local countA = 0; local countN = 0; local classType; local searchType = searchFor[ddSearch].Command; local subType = ""; local noteType = 0; local results = 0; if ( searchType == "Class" ) then classType = AllClasses[ddClassSearch]; end if ( string.find(searchType, "Notes:") ) then subType = string.sub(searchType, 7); searchType = string.sub(searchType, 1, 5); end foundNuN = {}; foundHNuN = {}; foundANuN = {}; foundNNuN = {}; for index, value in NuNData[pKey] do if ( searchType == "All" ) then if ( NuNData[pKey][index].faction == "Horde" ) then countH = countH + 1; foundHNuN[countH] = index; elseif ( NuNData[pKey][index].faction == "Alliance" ) then countA = countA + 1; foundANuN[countA] = index; end elseif ( searchType == "Class" ) then if ( NuNData[pKey][index].faction == "Horde" ) then if ( HClasses[NuNData[pKey][index].cls] == classType ) then countH = countH + 1; foundHNuN[countH] = index; end elseif ( NuNData[pKey][index].faction == "Alliance" ) then if ( AClasses[NuNData[pKey][index].cls] == classType ) then countA = countA + 1; foundANuN[countA] = index; end end elseif ( searchType == "Profession" ) then if ( NuNData[pKey][index].faction == "Horde" ) then if ( ( NuNData[pKey][index].prof1 == ddProfSearch ) or ( NuNData[pKey][index].prof2 == ddProfSearch ) ) then countH = countH + 1; foundHNuN[countH] = index; end elseif ( NuNData[pKey][index].faction == "Alliance" ) then if ( ( NuNData[pKey][index].prof1 == ddProfSearch ) or ( NuNData[pKey][index].prof2 == ddProfSearch ) ) then countA = countA + 1; foundANuN[countA] = index; end end elseif ( searchType == "Text" ) then tstTxt = NuNSearchTextBox:GetText(); if ( NuNData[pKey][index].txt ) then srchText = NuN_GetCText(index); if ( srchText == nil ) then srchText = ""; end if ( ( string.find(srchText, tstTxt) ) or ( string.find(NuNData[pKey][index].txt, tstTxt) ) or ( string.find(index, tstTxt) ) ) then local tName = index; if ( not NuNData[pKey][index].faction ) then tName = nil; local pos = string.find(index, pDetl); if ( pos == nil ) then pos = string.find(index, pHead); if ( pos ~= nil ) then tName = string.sub(index, 1, (pos - 1)); end else tName = string.sub(index, 1, (pos - 1)); end end if ( tName ~= nil ) then if ( NuNData[pKey][tName].faction == "Horde" ) then if ( NuNGet_TableID(foundHNuN, tName) == nil ) then countH = countH + 1; foundHNuN[countH] = tName; end else if ( NuNGet_TableID(foundANuN, tName) == nil ) then countA = countA + 1; foundANuN[countA] = tName; end end end end end end end for index, value in NuNData[pKey][Notes] do if ( ( NuNData[pKey][Notes][index] ) and ( NuNData[pKey][Notes][index].type ) ) then noteType = NuNData[pKey][Notes][index].type; else noteType = 1; end if ( ( searchType == "All" ) or ( searchType == "Notes" ) ) then if ( ( subType == "" ) or ( ( subType == "Generic" ) and ( noteType == 1 ) ) or ( ( subType == "Items" ) and ( noteType == 2 ) ) or ( ( subType == "Logs" ) and ( noteType == 3 ) ) or ( ( subType == "NPCs" ) and ( noteType == 4 ) ) or ( ( subType == "Quests" ) and ( noteType == 5 ) ) ) then countN = countN + 1; foundNNuN[countN] = index; end elseif ( searchType == "Text" ) then tstTxt = NuNSearchTextBox:GetText(); srchText = NuN_GetGText(index); if ( srchText == nil ) then srchText = ""; end if ( ( string.find(srchText, tstTxt)) or ( string.find(index, tstTxt ) ) ) then countN = countN + 1; foundNNuN[countN] = index; end end end for index, value in NuNData[Notes] do if ( ( NuNData[Notes][index] ) and ( NuNData[Notes][index].type ) ) then noteType = NuNData[Notes][index].type; else noteType = 1; end if ( ( searchType == "All" ) or ( searchType == "Notes" ) ) then if ( ( subType == "" ) or ( ( subType == "Generic" ) and ( noteType == 1 ) ) or ( ( subType == "Items" ) and ( noteType == 2 ) ) or ( ( subType == "Logs" ) and ( noteType == 3 ) ) or ( ( subType == "NPCs" ) and ( noteType == 4 ) ) or ( ( subType == "Quests" ) and ( noteType == 5 ) ) ) then countN = countN + 1; foundNNuN[countN] = index; end elseif ( searchType == "Text" ) then tstTxt = NuNSearchTextBox:GetText(); srchText = NuN_GetGText(index); if ( srchText == nil ) then srchText = ""; end if ( ( string.find(srchText, tstTxt)) or ( string.find(index, tstTxt ) ) ) then countN = countN + 1; foundNNuN[countN] = index; end end end table.sort(foundANuN); table.sort(foundHNuN); table.sort(foundNNuN); NuN_DefaultSort(); if ( ( searchType ~= "Class" ) and ( searchType ~= "Profession" ) ) then NuNSearchTextBox:Show(); ddSearch = NuNGet_CommandID(searchFor, "Text"); if ( NuN_Filtered ) then local tmpNuN = {}; local c = 0; for i=1, getn(foundNuN), 1 do if ( NuNGet_TableID(NuN_Filtered, foundNuN[i]) ) then c = c + 1; tmpNuN[c] = foundNuN[i]; end end foundNuN = tmpNuN; else NuN_Filtered = foundNuN; end end results = getn(foundNuN); NuNSearchTitleText:SetText(NuNSearchFrame.searchType.." ("..results..")"); NuNSearch_Update(); if ( ( deletedE ) and ( visibles > 0 ) and ( lastBttn ~= nil ) ) then deletedE = false; if ( lastBttnIndex > visibles ) then NuNSearch_HighlightRefresh(lastVisible); NuNSearchNote_OnClick(lastVisible); else NuNSearch_HighlightRefresh(lastBttn); NuNSearchNote_OnClick(lastBttn); end else NuNSearch_HighlightRefresh(nil); end end function NuN_DefaultSort() if ( horde ) then NuN_copyT(foundNuN, foundHNuN, NUN_HORD_C); NuN_copyT(foundNuN, foundANuN, NUN_ALLI_C); NuN_copyT(foundNuN, foundNNuN, NUN_NOTE_C); else NuN_copyT(foundNuN, foundANuN, NUN_ALLI_C); NuN_copyT(foundNuN, foundHNuN, NUN_HORD_C); NuN_copyT(foundNuN, foundNNuN, NUN_NOTE_C); end end function NuN_copyT(t1, t2, c_prefix) local i1 = getn(t1); for i2=1, getn(t2), 1 do i1 = i1 + 1; t1[i1] = c_prefix..t2[i2]; end end function NuNSearch_Back() if ( NuNFrame:IsVisible() ) then NuN_HideFrame(); end if ( NuNGNoteFrame:IsVisible() ) then HideUIPanel(NuNGNoteFrame); end HideUIPanel(NuNSearchFrame); NuNOptionsFrame:SetScale(NuNSettings[pKey].pScale); NuN_Options(); end function NuNSearch_Update() local theNoteIndex; local theOffsetNoteIndex; local theNote; local theNoteHFlag; local theNoteAFlag; local theNoteNFlag; local numNuNFound = getn(foundNuN); NuN_CheckQuestList(); visibles = 0; FauxScrollFrame_Update(NuNSearchListScrollFrame, numNuNFound, NUN_SHOWN, NUN_NOTE_HEIGHT); for theNoteIndex=1, NUN_SHOWN, 1 do theOffsetNoteIndex = theNoteIndex + FauxScrollFrame_GetOffset(NuNSearchListScrollFrame); theNote = getglobal( "NuNSearchNote"..theNoteIndex ); if ( theOffsetNoteIndex > numNuNFound ) then theNote:Hide(); else theNote:SetTextColor(1, 0.82, 0, 1); theNoteHFlag = getglobal( "NuNSearchNote"..theNoteIndex.."FrameHFlag" ); theNoteAFlag = getglobal( "NuNSearchNote"..theNoteIndex.."FrameAFlag" ); theNoteNFlag = getglobal( "NuNSearchNote"..theNoteIndex.."FrameNFlag" ); theNoteLFlag = getglobal( "NuNSearchNote"..theNoteIndex.."FrameLFlag" ); theNoteType = getglobal( "NuNSearchNote"..theNoteIndex.."FrameType" ); theNoteLFlag:Hide(); local typ = string.sub(foundNuN[theOffsetNoteIndex], 1, 1); local noteName = string.sub(foundNuN[theOffsetNoteIndex], 2); theNote:SetText( noteName ); if ( typ == NUN_HORD_C ) then theNoteAFlag:Hide(); theNoteNFlag:Hide(); theNoteHFlag:Show(); elseif ( typ == NUN_ALLI_C ) then theNoteHFlag:Hide(); theNoteNFlag:Hide(); theNoteAFlag:Show(); elseif ( typ == NUN_QUEST_C ) then theNoteHFlag:Hide(); theNoteAFlag:Hide(); if ( ( NuNData[Notes][noteName] ) or ( NuNData[pKey][Notes][noteName] ) ) then theNoteNFlag:Show(); else theNoteNFlag:Hide(); end else theNoteHFlag:Hide(); theNoteAFlag:Hide(); theNoteNFlag:Show(); end theNote.type = typ; if ( typ == NUN_HORD_C ) or ( typ == NUN_ALLI_C ) then if ( NuNData[pKey][noteName].type ) then typ = NuNData[pKey][noteName].type; if ( typ == NUN_AUTO_C ) then theNoteType:SetText(NUN_AUTO); elseif ( noteName == pName ) then theNoteType:SetText(NUN_PLAYER); elseif ( typ == NUN_SELF_C ) then theNoteType:SetText(NUN_SELF); elseif ( typ == NUN_MANU_C ) then theNoteType:SetText(NUN_MANU); elseif ( typ == NUN_PARTY_C ) then theNoteType:SetText(NUN_PARTY); else theNoteType:SetText(" "); end else theNoteType:SetText(" "); end elseif ( typ == NUN_QUEST_C ) then theNoteLFlag:Hide(); if ( ( not NuNQuestLog[noteName] ) and ( ( NuNData[pKey].QuestHistory[pName][noteName].handedIn ) or ( NuNData[pKey].QuestHistory[pName][noteName].complete ) ) ) then theNoteLFlag:Show(); elseif ( ( NuNData[pKey].QuestHistory[pName][noteName] ) and ( NuNData[pKey].QuestHistory[pName][noteName].abandoned ) ) then theNote:SetTextColor(0.9, 0, 0, 0.9); elseif ( NuNQuestLog[noteName] ) then theNote:SetTextColor(0, 0.9, 0, 0.9); end theNoteType:SetText(NuNData[pKey].QuestHistory[pName][noteName].pLevel); else if ( ( NuNData[pKey][Notes][noteName] ) and ( NuNData[pKey][Notes][noteName].type ) ) then typ = NuNData[pKey][Notes][noteName].type; elseif ( NuNData[Notes][noteName] ) then theNoteLFlag:Show(); if ( NuNData[Notes][noteName].type ) then typ = NuNData[Notes][noteName].type; end else typ = 1; end theNoteType:SetText(noteTypes[typ].Display); if ( noteTypes[typ].Command == "QST" ) then if ( NuNQuestLog[noteName] ) then theNote:SetTextColor(0, 0.9, 0, 0.9); elseif ( ( NuNData[pKey].QuestHistory[pName][noteName] ) and ( NuNData[pKey].QuestHistory[pName][noteName].abandoned ) ) then theNote:SetTextColor(0.9, 0, 0, 0.9); end end end theNote:Show(); visibles = visibles + 1; lastVisible = theNote; if ( theOffsetNoteIndex == lastBttnDetl ) then theNote:LockHighlight(); else theNote:UnlockHighlight(); end end end end function NuNSearchNote_OnEnter(bttnNote) local bttnName = bttnNote:GetName(); local storePinned = NuN_PinnedTooltip.type; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_LEFT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_RIGHT"); end ttName = bttnNote:GetText(); NuN_Tooltip:ClearLines(); if ( bttnNote.type == "N" ) then NuN_PinnedTooltip.type = "General"; elseif ( bttnNote.type == "A" ) or ( bttnNote.type == "H" ) then NuN_PinnedTooltip.type = "Contact"; elseif ( bttnNote.type == NUN_QUEST_C ) then NuN_PinnedTooltip.type = "QuestHistory"; end NuN_BuildTT(NuN_Tooltip); NuN_PinnedTooltip.type = storePinned; NuN_Fade = "False"; NuN_Tooltip:Show(); end function NuNSearchNote_OnClick(bttnNote) local noteName = bttnNote:GetText(); local lclNote; local lclNoteHFlag; local lclNoteAFlag; local lclNoteNFlag; local lastBttnDetlN; local nType; if ( IsShiftKeyDown() ) then if ( ChatFrameEditBox:IsVisible() ) then ChatFrameEditBox:Insert(noteName); elseif ( NuNGNoteFrame:IsVisible() ) then local cText = NuNGNoteTextScroll:GetText().."\n"..noteName; NuNGNoteTextScroll:SetText(cText); elseif ( NuNFrame:IsVisible() ) then local cText = NuNText:GetText().."\n"..noteName; NuNText:SetText(cText); end else lastBttn = bttnNote; lastBttnIndex = bttnNote:GetID(); lastBttnDetlN = bttnNote.type..noteName; lastBttnDetl = NuNGet_TableID(foundNuN, lastBttnDetlN); NuNSearch_HighlightRefresh(bttnNote); if ( ( bttnNote.type == NUN_HORD_C ) or ( bttnNote.type == NUN_ALLI_C ) ) then c_name = noteName; NuN_ShowSavedNote( c_name ); else if ( bttnNote.type == NUN_QUEST_C ) then NuNGNoteFrame.fromQuest = "1"; c_type = NuNGet_CommandID(noteTypes, "QST"); else NuNGNoteFrame.fromQuest = nil; end c_note = noteName; if ( ( NuNData[Notes][c_note] ) or ( NuNData[pKey][Notes][c_note] ) ) then NuN_ShowSavedGNote(); else NuN_ShowTitledGNote(""); end end end end function NuNSearch_HighlightRefresh(tstNote) local theNote; for i=1, NUN_SHOWN, 1 do theNote = getglobal("NuNSearchNote"..i); if ( ( theNote == tstNote ) and ( theNote:IsVisible() ) ) then theNote:LockHighlight(); else theNote:UnlockHighlight(); end end end function NuN_DateStamp() NuNText:SetText(NuNText:GetText().."\n"..NuN_GetDateStamp()); end function NuNGNote_DateStamp() NuNGNoteTextScroll:SetText(NuNGNoteTextScroll:GetText().."\n"..NuN_GetDateStamp()); end function NuN_GetDateStamp() local dateStamp = date("%A, %d %B %Y %H:%M:%S"); dateStamp = NuN_LocaliseDateStamp(dateStamp); return dateStamp; end function NuN_Loc() NuNText:SetText(NuNText:GetText().."\n"..NuN_GetLoc()); end function NuNGNote_Loc() NuNGNoteTextScroll:SetText(NuNGNoteTextScroll:GetText().."\n"..NuN_GetLoc()); end function NuN_GetLoc() local locData = pName.."'s "..NUN_LOC.." : "; local myCID, myC, mySubZ, myZID, myZ, px, py, coords; local loc = false; myCID = GetCurrentMapContinent(); if ( ( myCID ~= nil) and ( myCID > 0 ) ) then myC = c_continents[myCID].name; end if ( myC ~= nil ) then locData = locData..myC..", "; loc = true; end myZ = GetZoneText(); if ( ( myZ == nil ) or ( myZ == "" ) ) then myZID = GetCurrentMapZone(); if ( ( myZID ~= nil ) and ( myCID ~= nil ) and ( myCID > 0 ) ) then myZ = c_continents[myCID].zones[myZID]; end end if ( ( myZ ~= nil ) and ( myZ ~= "" ) ) then locData = locData..myZ..", "; end mySubZ = GetSubZoneText(); if ( ( mySubZ == nil ) or ( mySubZ == "" ) ) then mySubZ = GetMinimapZoneText(); end if ( mySubZ ~= nil ) then locData = locData..mySubZ..", "; loc = true; end px, py = GetPlayerMapPosition("player"); if ( ( px ~= nil ) and ( py ~= nil ) ) then coords = format("(%d, %d)", px * 100.0, py * 100.0); locData = locData..coords; loc = true; end if ( loc == true ) then return locData; else return ""; end end function NuN_AutoNote() if ( NuNSettings[pKey].autoN ) then local lName; local lRace; local lClass; local lSex; local lPvPRank; local lPvPRankID; local lgName; local lgRank; local lgRankIndex; local bttnKey; if ( pFaction ~= nil ) then NuNData[pKey][pName] = {}; NuNData[pKey][pName].type = NUN_SELF_C; NuNData[pKey][pName].faction = pFaction; NuNData[pKey][pName][txtTxt] = ""; lRace = UnitRace("player"); if ( lRace ~= nil ) then ddRace = NuNGet_TableID(Races, lRace); NuNData[pKey][pName].race = ddRace; end lClass = UnitClass("player"); if ( lClass ~= nil ) then ddClass = NuNGet_TableID(Classes, lClass); NuNData[pKey][pName].cls = ddClass; end lSex = UnitSex("player"); if ( lSex ~= nil ) then NuNData[pKey][pName].sex = lSex + 1; end lPvPRankID = UnitPVPRank("player"); if ( lPvPRankID ~= nil ) and ( lPvPRankID > 0 ) then lPvPRank = GetPVPRankInfo(lPvPRankID); ddCRank = NuNGet_TableID(Ranks, lPvPRank); NuNData[pKey][pName].crank = ddCRank; end lgName, lgRank, lgRankIndex = GetGuildInfo("player"); if ( lgName ~= "" ) and ( lgName ~= nil ) then bttnKey = pName..pDetl.."1"; NuNData[pKey][bttnKey] = {}; NuNData[pKey][bttnKey].txt = lgName; bttnKey = pName..pDetl.."2"; NuNData[pKey][bttnKey] = {}; if ( lgRankIndex == 0 ) then NuNData[pKey][bttnKey].txt = ( "GM : "..lgRank ); else NuNData[pKey][bttnKey].txt = ( lgRankIndex.." : "..lgRank ); end end end end end function NuN_ClrDD() if ( lastDD == "Race" ) then UIDropDownMenu_ClearAll(NuNRaceDropDown); if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].race ) ) then ddRace = -1; else ddRace = nil; end elseif ( lastDD == "Class" ) then UIDropDownMenu_ClearAll(NuNClassDropDown); if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].cls ) ) then ddClass = -1; else ddClass = nil; end elseif ( lastDD == "Sex" ) then UIDropDownMenu_ClearAll(NuNSexDropDown); if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].sex ) ) then ddSex = -1; else ddSex = nil; end elseif ( lastDD == "Prof1" ) then UIDropDownMenu_ClearAll(NuNProf1DropDown); if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].prof1 ) ) then ddProf1 = -1; else ddProf1 = nil; end elseif ( lastDD == "Prof2" ) then UIDropDownMenu_ClearAll(NuNProf2DropDown); if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].prof2 ) ) then ddProf2 = -1; else ddProf2 = nil; end elseif ( lastDD == "CRank" ) then UIDropDownMenu_ClearAll(NuNCRankDropDown); if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].crank ) ) then ddCRank = -1; else ddCRank = nil; end elseif ( lastDD == "HRank" ) then UIDropDownMenu_ClearAll(NuNHRankDropDown); if ( ( NuNData[pKey][c_name] ) and ( NuNData[pKey][c_name].hrank ) ) then ddHRank = -1; else ddHRank = nil; end end lastDD = nil; NuNButtonClrDD:Disable(); end function NuN_GTypeDependant_Setup() UIDropDownMenu_SetSelectedID(NuNGTypeDropDown, c_type); UIDropDownMenu_SetText(noteTypes[c_type].Display, NuNGTypeDropDown); if ( noteTypes[c_type].Command == "NPC" ) then NuNNPCTargetButton:Show(); else NuNNPCTargetButton:Hide(); end end function NuN_ShowSavedGNote() if ( ( NuNGNoteFrame:IsVisible() ) and ( prevNote == c_note ) ) then NuNGNoteFrame:Hide(); else if ( ( NuNData[pKey][Notes][c_note] ) and ( NuNData[pKey][Notes][c_note].type ) ) then c_type = NuNData[pKey][Notes][c_note].type; NuNGNoteFrame.type = c_type; NuN_GTypeDependant_Setup(); elseif ( ( NuNData[Notes][c_note] ) and ( NuNData[Notes][c_note].type ) ) then c_type = NuNData[Notes][c_note].type; NuNGNoteFrame.type = c_type; NuN_GTypeDependant_Setup(); else c_type = NuNGet_CommandID(noteTypes, " "); NuNGNoteFrame.type = c_type; NuN_GTypeDependant_Setup(); end if ( NuNData[pKey][Notes][c_note] ) then NuN_GLevel_CheckBox:SetChecked(0); elseif ( NuNData[Notes][c_note] ) then NuN_GLevel_CheckBox:SetChecked(1); end NuN_GNote_OriTitle = c_note; prevNote = c_note; if ( NuNOptionsFrame:IsVisible() ) then HideUIPanel(NuNOptionsFrame); end if ( NuNcDeleteFrame:IsVisible() ) then HideUIPanel(NuNcDeleteFrame); end NuNGNoteFrame:SetScale(NuNSettings[pKey].pScale); ShowUIPanel(NuNGNoteFrame); NuNGNoteTextBox:Hide(); g_text = NuN_GetGText(c_note); if ( g_text == "" ) then g_text = "\n"; end NuNGNoteTextScroll:SetText(g_text); NuNGNoteTitleButtonText:SetText(c_note); NuNGNoteTitleButton:Show(); if ( not NuNSettings[pKey].bHave ) then NuNGNoteTextScroll:SetFocus(); end if ( NuNGNoteFrame.fromQuest ) then NuNGNoteHeader:SetText(NUN_QUEST_NOTE); NuNGNoteButtonDelete:Enable(); NuNGNoteTitleButton:Disable(); NuNGNoteButtonSaveNote:Disable(); else NuNGNoteHeader:SetText(NUN_SAVED_NOTE); NuNGNoteButtonDelete:Disable(); NuNGNoteTitleButton:Enable(); NuNGNoteButtonSaveNote:Enable(); end NuNGNoteButtonDateStamp:Enable(); NuNGNoteButtonLoc:Enable(); NuNGNoteButtonDelete:Enable(); if ( ( MapNotes_OnLoad ) or ( MetaMapNotes_OnLoad ) ) then NuNMapNoteButton:Enable(); end NuNGOpenChatButton:Enable(); NuNGTTCheckBoxLabel:Show(); NuN_GTTCheckBox:Show(); NuN_GTTCheckBox:SetChecked(0); if ( NuN_PinnedTooltip.type == "General" ) then NuN_GTTCheckBox:SetChecked( NuN_CheckPinnedBox(c_note) ); end end end function NuN_ShowTitledGNote(GNoteText) if ( ( NuNGNoteFrame:IsVisible() ) and ( prevNote == c_note ) ) then NuNGNoteFrame:Hide(); else if ( NuNSettings[pKey].dLevel ) then NuN_GLevel_CheckBox:SetChecked(1); else NuN_GLevel_CheckBox:SetChecked(0); end prevNote = c_note; NuNGNoteFrame.type = c_type; NuN_GTypeDependant_Setup(); NuN_GNote_OriTitle = nil; if ( NuNOptionsFrame:IsVisible() ) then HideUIPanel(NuNOptionsFrame); end if ( NuNcDeleteFrame:IsVisible() ) then HideUIPanel(NuNcDeleteFrame); end NuNGNoteFrame:SetScale(NuNSettings[pKey].pScale); ShowUIPanel(NuNGNoteFrame); NuNGNoteTextScroll:SetText(GNoteText); NuNGNoteTextBox:Hide(); NuNGNoteTitleButtonText:SetText(c_note); NuNGNoteTitleButton:Show(); if ( not NuNSettings[pKey].bHave ) then NuNGNoteTextScroll:SetFocus(); end NuNGNoteButtonDateStamp:Enable(); NuNGNoteButtonLoc:Enable(); if ( NuNGNoteFrame.fromQuest ) then NuNGNoteHeader:SetText(NUN_QUEST_NOTE); NuNGNoteButtonDelete:Enable(); if ( ( MapNotes_OnLoad ) or ( MetaMapNotes_OnLoad ) ) then NuNMapNoteButton:Enable(); end NuNGNoteTitleButton:Disable(); NuNGNoteButtonSaveNote:Disable(); else NuNGNoteHeader:SetText(NUN_NEW_NOTE); NuNGNoteButtonDelete:Disable(); NuNMapNoteButton:Disable(); NuNGNoteTitleButton:Enable(); NuNGNoteButtonSaveNote:Enable(); end NuNGOpenChatButton:Disable(); NuNGTTCheckBoxLabel:Hide(); NuN_GTTCheckBox:Hide(); end end function NuN_ShowNewGNote() local tstTxt = NuNGNoteTextBox:GetText(); if ( ( NuNGNoteFrame:IsVisible() ) and ( NuNGNoteTextBox:IsVisible() ) and ( tstTxt == "" ) ) then NuNGNoteFrame:Hide(); else if ( IsAltKeyDown() ) then NuN_LastOpen.type = "General"; NuN_ReOpen(); return; end if ( NuNSettings[pKey].dLevel ) then NuN_GLevel_CheckBox:SetChecked(1); else NuN_GLevel_CheckBox:SetChecked(0); end c_type = NuNGet_CommandID(noteTypes, " "); NuNGNoteFrame.type = c_type; NuNGNoteFrame.fromQuest = nil; NuN_GTypeDependant_Setup(); NuN_GNote_OriTitle = nil; if ( NuNOptionsFrame:IsVisible() ) then HideUIPanel(NuNOptionsFrame); end if ( NuNcDeleteFrame:IsVisible() ) then HideUIPanel(NuNcDeleteFrame); end if ( NuNGNoteFrame.fromQuest ) then NuNGNoteHeader:SetText(NUN_QUEST_NOTE); else NuNGNoteHeader:SetText(NUN_NEW_NOTE); end NuNGNoteButtonSaveNote:Disable(); NuNGNoteFrame:SetScale(NuNSettings[pKey].pScale); ShowUIPanel(NuNGNoteFrame); NuNGNoteTextScroll:SetText(""); NuNGNoteTitleButton:Hide(); NuNGNoteTextBox:SetText(""); NuNGNoteTextBox:Show(); NuNGNoteTextBox:SetFocus(); NuNGNoteButtonDelete:Disable(); NuNMapNoteButton:Disable(); NuNGOpenChatButton:Disable(); NuNGTTCheckBoxLabel:Hide(); NuN_GTTCheckBox:Hide(); end end function NuN_OptionsGuildCheckBox_OnClick() if ( NuNOptionsGuildCheckButton:GetChecked() ) then NuNSettings[pKey].autoG = "1"; else NuNSettings[pKey].autoG = nil; end end function NuN_OptionsAddCheckBox_OnClick() if ( NuNOptionsAddCheckButton:GetChecked() ) then NuNSettings[pKey].autoA = "1"; NuN_Update_Friends(); NuN_Update_Ignored(); else NuNSettings[pKey].autoA = nil; end end function NuN_OptionsDeleteCheckBox_OnClick() if ( NuNOptionsDeleteCheckButton:GetChecked() ) then NuNSettings[pKey].autoD = "1"; NuN_Update_Friends(); NuN_Update_Ignored(); else NuNSettings[pKey].autoD = nil; end end function NuN_DefaultLevelCheckBox_OnClick() if ( NuN_DefaultLevelCheckBox:GetChecked() ) then NuNSettings[pKey].dLevel = "1"; else NuNSettings[pKey].dLevel = nil; end end function NuN_HelpTTCheckBox_OnClick() if ( NuN_HelpTTCheckBox:GetChecked() ) then NuNSettings[pKey].toolTips = "1"; else NuNSettings[pKey].toolTips = nil; end end function NuN_AutoQuestCheckBox_OnClick() if ( NuN_AutoQuestCheckBox:GetChecked() ) then NuNSettings[pKey].autoQ = "1"; NuN_UpdateQuestNotes("SwitchedOn"); else NuNSettings[pKey].autoQ = nil; end end function NuN_AutoNoteCheckBox_OnClick() if ( NuN_AutoNoteCheckBox:GetChecked() ) then NuNSettings[pKey].autoN = "1"; if ( not NuNData[pKey][pName] ) then NuN_AutoNote(); end else NuNSettings[pKey].autoN = nil; end end function NuN_OnUpdate(arg1) if ( ( NuNMicroFrame:IsVisible() ) and ( MouseIsOver(NuNMicroFrame) ) ) then NuNMicroBorder:Show(); else NuNMicroBorder:Hide(); end if ( noTipAnchor ) then NuN_GameTooltip_OnShow(); end timeSinceLastUpdate = timeSinceLastUpdate + arg1; if ( ( timeSinceLastUpdate > updateInterval ) and ( not UnitAffectingCombat("player") ) ) then if ( not NuNData[pKey][pName] ) then NuN_AutoNote(); end if ( oneDone == true ) then oneDone = false; NuN_AtStartup = "False"; NuN_QuestsUpdating = "False"; if ( InfinateIgnore_Config ) then NuN_Update_Ignored(); end else oneDone = true; if ( not QuestLogFrame:IsVisible() ) then NuN_CheckQuestList(); if ( not NuN_IgnoreNextQUpdate ) then NuN_UpdateQuestNotes("Timed"); end end end timeSinceLastUpdate = 0; end end function NuN_NewContact(unitType) local Friendly; if ( ( unitType == "target" ) and ( c_name ~= pName ) ) then if ( UnitIsFriend("player", "target") ) then Friendly = true; else Friendly = false; end else Friendly = true; end if ( ((horde) and (Friendly)) or ((not horde) and (not Friendly)) ) then c_faction = "Horde"; NuN_HordeSetup(); else c_faction = "Alliance"; NuN_AllianceSetup(); end c_route = "Target"; c_race = nil; c_class = nil; c_guild = nil; gRank = nil; gRankIndex = nil; gNote = nil; gOfficerNote = nil; NuN_ShowNote(); NuN_Target(); if ( c_name == pName ) then ClearTarget(); end end function NuN_CreateContact(contactName, tFaction) c_name = contactName; c_route = "Create"; if ( ( tFaction == "-ch" ) or ( tFaction == "Horde" ) ) then c_faction = "Horde"; NuN_HordeSetup(); else c_faction = "Alliance"; NuN_AllianceSetup(); end c_race = nil; c_class = nil; c_guild = nil; gRank = nil; gRankIndex = nil; gNote = nil; gOfficerNote = nil; NuN_ShowNote(); end function NuN_HordeSetup() NuNRaceDropDown = NuNHRaceDropDown; NuNClassDropDown = NuNHClassDropDown; NuNCRankDropDown = NuNHCRankDropDown; NuNHRankDropDown = NuNHHRankDropDown; NuNARaceDropDown:Hide(); NuNHRaceDropDown:Show(); NuNAClassDropDown:Hide(); NuNHClassDropDown:Show(); NuNACRankDropDown:Hide(); NuNHCRankDropDown:Show(); NuNAHRankDropDown:Hide(); NuNHHRankDropDown:Show(); Classes = HClasses; Races = HRaces; Ranks = HRanks; NuNAFlag:Hide(); NuNHFlag:Show(); end function NuN_AllianceSetup() NuNRaceDropDown = NuNARaceDropDown; NuNClassDropDown = NuNAClassDropDown; NuNCRankDropDown = NuNACRankDropDown; NuNHRankDropDown = NuNAHRankDropDown; NuNHRaceDropDown:Hide(); NuNARaceDropDown:Show(); NuNHClassDropDown:Hide(); NuNAClassDropDown:Show(); NuNHCRankDropDown:Hide(); NuNACRankDropDown:Show(); NuNHHRankDropDown:Hide(); NuNAHRankDropDown:Show(); Classes = AClasses; Races = ARaces; Ranks = ARanks; NuNHFlag:Hide(); NuNAFlag:Show(); end function NuN_CheckPartyByName(parmN) local partym; for groupIndex = 1, NUN_MAX_PARTY_MEMBERS, 1 do if (GetPartyMember(groupIndex)) then partym = "party"..groupIndex; lName = UnitName(partym); if ( lName == parmN) then return partym; end end end return nil; end function NuN_CheckRaidByName(parmN) local raidm; local lclName; local numRaid = GetNumRaidMembers(); for raidIndex = 1, numRaid, 1 do lclName = GetRaidRosterInfo(raidIndex); if ( lclName == parmN ) then raidm = "raid"..raidIndex; return raidm; end end return nil; end function NuN_GetCText(gLclName) local txtIndex; local catText; catText = ""; if ( NuNData[pKey][gLclName][txtTxt] ) then catText = NuNData[pKey][gLclName][txtTxt]; end for i = 1, NUN_MAX_ADD_TXT, 1 do txtIndex = txtTxt..i; if ( NuNData[pKey][gLclName][txtIndex] ) then catText = catText..NuNData[pKey][gLclName][txtIndex]; end end return catText; end function NuN_GetGText(gLclNote) local txtIndex; local catText; catText = ""; if ( ( NuNData[pKey][Notes][gLclNote] ) and ( NuNData[pKey][Notes][gLclNote][txtTxt] ) ) then catText = NuNData[pKey][Notes][gLclNote][txtTxt]; elseif ( ( NuNData[Notes][gLclNote] ) and ( NuNData[Notes][gLclNote][txtTxt] ) ) then catText = NuNData[Notes][gLclNote][txtTxt]; end for i = 1, NUN_MAX_ADD_TXT, 1 do txtIndex = txtTxt..i; if ( ( NuNData[pKey][Notes][gLclNote] ) and ( NuNData[pKey][Notes][gLclNote][txtIndex] ) ) then catText = catText..NuNData[pKey][Notes][gLclNote][txtIndex]; elseif ( ( NuNData[Notes][gLclNote] ) and ( NuNData[Notes][gLclNote][txtIndex] ) ) then catText = catText..NuNData[Notes][gLclNote][txtIndex]; end end return catText; end function NuN_SetCText(sLclName) local cLower; local cUpper; local txtIndex; c_text_len = string.len(c_text); if ( c_text_len < NUN_MAX_TXT_CHR ) then cUpper = c_text_len; else cUpper = NUN_MAX_TXT_CHR; end NuNData[pKey][sLclName][txtTxt] = string.sub(c_text, 1, cUpper); for i = 1, NUN_MAX_ADD_TXT, 1 do cLower = NUN_MAX_TXT_CHR * i; txtIndex = txtTxt..i; if ( c_text_len > cLower ) then cLower = cLower + 1; cUpper = NUN_MAX_TXT_CHR * ( i + 1 ); if ( c_text_len < cUpper ) then cUpper = c_text_len; end NuNData[pKey][sLclName][txtIndex] = string.sub(c_text, cLower, cUpper); else NuNData[pKey][sLclName][txtIndex] = ""; end end end function NuN_SetGText(saveLvl) local cLower; local cUpper; local txtIndex; g_text_len = string.len(g_text); if ( g_text_len < NUN_MAX_TXT_CHR ) then cUpper = g_text_len; else cUpper = NUN_MAX_TXT_CHR; end if ( saveLvl == "Realm" ) then NuNData[pKey][Notes][c_note][txtTxt] = string.sub(g_text, 1, NUN_MAX_TXT_CHR); for i = 1, NUN_MAX_ADD_TXT, 1 do cLower = NUN_MAX_TXT_CHR * i; txtIndex = txtTxt..i; if ( g_text_len > cLower ) then cLower = cLower + 1; cUpper = NUN_MAX_TXT_CHR * ( i + 1 ); if ( g_text_len < cUpper ) then cUpper = g_text_len; end NuNData[pKey][Notes][c_note][txtIndex] = string.sub(g_text, cLower, cUpper); else NuNData[pKey][Notes][c_note][txtIndex] = ""; end end else NuNData[Notes][c_note][txtTxt] = string.sub(g_text, 1, NUN_MAX_TXT_CHR); for i = 1, NUN_MAX_ADD_TXT, 1 do cLower = NUN_MAX_TXT_CHR * i; txtIndex = txtTxt..i; if ( g_text_len > cLower ) then cLower = cLower + 1; cUpper = NUN_MAX_TXT_CHR * ( i + 1 ); if ( g_text_len < cUpper ) then cUpper = g_text_len; end NuNData[Notes][c_note][txtIndex] = string.sub(g_text, cLower, cUpper); else NuNData[Notes][c_note][txtIndex] = ""; end end end end function NuN_TextWarning(box, tLabel) local lenTxt, lenTxtL, oLabel; lenTxt = box:GetText(); lenTxtL = string.len(lenTxt); oLabel = getglobal(tLabel); if ( ( lenTxtL == nil ) or ( lenTxtL == 0 ) ) then oLabel:SetText("0 / "..NUN_MAX_TXT_LIM); else oLabel:SetText(lenTxtL.." / "..NUN_MAX_TXT_LIM); end if ( lenTxtL > NUN_MAX_TXT_LIM ) then StaticPopup_Show("NUN_NOTELIMIT_EXCEEDED"); end end function NuN_OptionsButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_MICROOPTIONS_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_MICROOPTIONS_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_BrowseButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_MICROBROWSEA_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_MICROBROWSEA_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_ContactButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_MICROCONTACT_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_MICROCONTACT_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_MICROCONTACT_TOOLTIP_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_GNoteButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_MICROGENNOTE_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_MICROGENNOTE_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_ResetButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_RESETBUTTON_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_RESETBUTTON_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_LocButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_LOCBUTTON_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_LOCBUTTON_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_GNoteTitle_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_GNOTETITLE_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_GNOTETITLE_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_SaveDefCheck_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_SAVEDEF_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_SAVEDEF_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_RestoreDefButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_RESTOREDEF_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_RESTOREDEF_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_RESTOREDEF_TOOLTIP_TXT3, 0, 1, 0); NuN_Tooltip:AddLine(NUN_RESTOREDEF_TOOLTIP_TXT4, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_TargetButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TARGETBUTTON_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TARGETBUTTON_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TARGETBUTTON_TOOLTIP_TXT3, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TARGETBUTTON_TOOLTIP_TXT4, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_NPCTargetButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_NPCTARGETBUTTON_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_NPCTARGETBUTTON_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_WhoButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_WHOBUTTON_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_WHOBUTTON_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_WHOBUTTON_TOOLTIP_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_UserButtons_OnEnter(owner) if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_USERBUTTON_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_USERBUTTON_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_USERBUTTON_TOOLTIP_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_ClearDD_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_CLEARDD_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_CLEARDD_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_FFButton_OnEnter() NuN_FFButton_StateLit:Show(); if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; NuN_Tooltip:SetOwner(this, "ANCHOR_RIGHT"); NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_FFBUTTON_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_FFBUTTON_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuNMapNoteButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_MAPNOTES_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_MAPNOTES_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_MAPNOTES_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_PinnedTT_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_PIN_EDIT_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_PIN_EDIT_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_PIN_EDIT_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_OpenChat_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_OPENCHAT_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_OPENCHAT_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_OPENCHAT_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_GNoteButtonDelete_OnEnter() if ( ( NuNSettings[pKey].toolTips ) and ( NuNGNoteFrame.fromQuest ) ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_GDELETE_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_GDELETE_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_GDELETE_TXT3, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_GDELETE_TXT4, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_FFButton_OnLeave() NuN_FFButton_StateLit:Hide(); NuN_Tooltip:Hide(); end function NuN_TTButton_OnLeave() NuN_Tooltip:Hide(); end function NuN_ToggleToolTips() if ( NuNSettings[pKey].toolTips ) then NuNSettings[pKey].toolTips = nil; else NuNSettings[pKey].toolTips = "1"; end end function NuN_NPCInfo() local NPCInfo = ""; local NPCloc; local NPCtimed; local someInfo = false; local listText = nil; NPClvl = UnitLevel("target"); NPCcls = UnitClass("target"); NPCclsXtra = UnitClassification("target"); NPCtype = UnitCreatureType("target"); NPCsex = UnitSex("target"); if ( NPClvl ~= nil ) then if ( NPClvl == -1 ) then NPCInfo = NUN_LEVEL.." : ?? "; else NPCInfo = NUN_LEVEL.." : "..NPClvl.." "; end end if ( NPCcls ~= nil ) then NPCInfo = NPCInfo..NUN_CLASS.." : "..NPCcls..", "; end if ( NPCsex ~= nil ) then local sex = Sexes[NPCsex + 1]; if ( sex ) then NPCInfo = NPCInfo..sex..", "; end end if ( NPCtype ~= nil ) then NPCInfo = NPCInfo..NPCtype.." "; end if ( NPCclsXtra ~= "normal" ) then NPCInfo = NPCInfo..( string.upper(NPCclsXtra) ); end GameTooltip:SetUnit("target"); NPCprof = GameTooltipTextLeft2:GetText(); if ( ( string.find(NPCprof, NUN_LEVEL) or ( NPCprof == nil ) ) ) then -- skip else NPCInfo = NPCInfo.."\n"..NUN_PROF.." : "..NPCprof.." "; end NPCtimed = NuN_GetDateStamp(); NPCloc = NuN_GetLoc(); NPCInfo = NPCInfo.."\n\n"..NPCtimed.."\n"..NPCloc; if ( MerchantFrame:IsVisible() ) then listText = NuN_BuildShoppingList(); end if ( listText ) then NPCInfo = NPCInfo.."\n\n"..listText; end return NPCInfo; end function NuN_ShowFriendNote() local numFriends = GetNumFriends(); if (numFriends ~= nil) and (numFriends > 0) then if ( FriendsFrame.selectedFriend ) then FriendsFrame.selectedFriend = GetSelectedFriend(); c_name, discard, c_class, discard, connected = GetFriendInfo(FriendsFrame.selectedFriend); if ( c_class == "Unknown" ) then c_class = nil; end; c_race = nil; c_guild = nil; gRank = nil; gRankIndex = nil; gNote = nil; gOfficerNote = nil; c_route = "Friend"; if ( horde ) then NuN_HordeSetup(); else NuN_AllianceSetup(); end NuN_ShowNote(); end end end function NuN_ShowIgnoreNote() local numIgnores = GetNumIgnores(); if (numIgnores ~= nil) and (numIgnores > 0) then if ( FriendsFrame.selectedIgnore ) then FriendsFrame.selectedIgnore = GetSelectedIgnore(); c_name = GetIgnoreName(FriendsFrame.selectedIgnore); c_class = nil; c_race = nil; c_guild = nil; gRank = nil; gRankIndex = nil; gNote = nil; gOfficerNote = nil; c_route = "Ignore"; if ( horde ) then NuN_HordeSetup(); else NuN_AllianceSetup(); end NuN_ShowNote(); end end end function NuN_ShowGuildNote() local numGuildMembers = GetNumGuildMembers(); if (numGuildMembers ~= nil) and (numGuildMembers > 0) then c_class = nil; c_race = nil; c_name, gRank, gRankIndex, discard, c_class, discard, discard, gNote, gOfficerNote, discard = GetGuildRosterInfo( GetGuildRosterSelection() ); if ( c_name ~= nil ) then c_guild = GetGuildInfo("player"); c_route = "Guild"; if ( horde ) then NuN_HordeSetup(); else NuN_AllianceSetup(); end NuN_ShowNote(); end end end function NuN_UpdateNoteButton(nBttn, nBttnID, NuN_rType) local bName = nBttn:GetName(); local pBttnTxt, discard, qHeader; local bttnNoteHFlag = getglobal(bName.."FrameHFlag"); local bttnNoteAFlag = getglobal(bName.."FrameAFlag"); local bttnNoteNFlag = getglobal(bName.."FrameNFlag"); local bttnNoteQFlag = getglobal(bName.."FrameQFlag"); if ( NuN_rType == "A" ) then if ( FriendsListFrame:IsVisible() ) then NuN_rType = "F"; elseif ( IgnoreListFrame:IsVisible() ) then NuN_rType = "I"; elseif ( GuildPlayerStatusFrame:IsVisible() ) then NuN_rType = "G"; elseif ( GuildStatusFrame:IsVisible() ) then NuN_rType = "GS"; elseif ( WhoFrame:IsVisible() ) then NuN_rType = "W"; elseif ( QuestFrame:IsVisible() ) then NuN_rType = NUN_QUEST_C; end end if ( ( FriendsFrame:IsVisible() ) and ( bttnNoteAFlag ) and ( bttnNoteHFlag ) and ( bttnNoteNFlag ) ) then pBttnTxt = NuN_GetName_FrameButton(nBttnID, NuN_rType); if ( NuNData[pKey][pBttnTxt] ) then if ( NuNData[pKey][pBttnTxt].faction == "Horde" ) then bttnNoteAFlag:Hide(); bttnNoteNFlag:Hide(); bttnNoteHFlag:Show(); else bttnNoteHFlag:Hide(); bttnNoteNFlag:Hide(); bttnNoteAFlag:Show(); end else bttnNoteAFlag:Hide(); bttnNoteHFlag:Hide(); bttnNoteNFlag:Show(); end elseif ( ( QuestLogFrame:IsVisible() ) and ( bttnNoteQFlag ) and ( bttnNoteNFlag ) ) then local lOffset = nBttnID + FauxScrollFrame_GetOffset(QuestLogListScrollFrame); pBttnTxt, discard, discard, qHeader = GetQuestLogTitle(lOffset); if ( qHeader ) then nBttn:Hide(); elseif ( pBttnTxt ) then nBttn:Show(); if ( ( NuNData[pKey][Notes][pBttnTxt] ) or ( NuNData[Notes][pBttnTxt] ) ) then bttnNoteNFlag:Hide(); bttnNoteQFlag:Show(); else bttnNoteQFlag:Hide(); bttnNoteNFlag:Show(); end end end end function NuN_NoteButton_OnInteract(nBttnID, uAction) local pBttnTxt; local lOffset; local qLevel, qTag, qHeader, qCollapsed, qComplete; local qText = ""; if ( FriendsListFrame:IsVisible() ) then pBttnTxt = NuN_GetName_FrameButton(nBttnID, "F"); if ( uAction == "Click" ) then lOffset = FauxScrollFrame_GetOffset(FriendsFrameFriendsScrollFrame); SetSelectedFriend( (tonumber(nBttnID)+lOffset) ); NuNOri_FriendsList_Update(); if ( NuNData[pKey][pBttnTxt] ) then NuN_ShowSavedNote(pBttnTxt); else NuN_ShowFriendNote(); end elseif ( uAction == "MouseOver" ) then ttName = pBttnTxt; NuN_StaticTT(); end elseif ( IgnoreListFrame:IsVisible() ) then pBttnTxt = NuN_GetName_FrameButton(nBttnID, "I"); if ( uAction == "Click" ) then lOffset = FauxScrollFrame_GetOffset(FriendsFrameIgnoreScrollFrame); SetSelectedIgnore( (tonumber(nBttnID)+lOffset) ); NuNOri_IgnoreList_Update(); if ( NuNData[pKey][pBttnTxt] ) then NuN_ShowSavedNote(pBttnTxt); else NuN_ShowIgnoreNote(); end elseif ( uAction == "MouseOver" ) then ttName = pBttnTxt; NuN_StaticTT(); end elseif ( GuildPlayerStatusFrame:IsVisible() ) then pBttnTxt = NuN_GetName_FrameButton(nBttnID, "G"); if ( uAction == "Click" ) then GuildFrame.selectedGuildMember = getglobal("GuildFrameButton"..nBttnID).guildIndex; GuildFrame.selectedName = getglobal("GuildFrameButton"..nBttnID.."Name"):GetText(); SetGuildRosterSelection(GuildFrame.selectedGuildMember); NuNNew_GuildStatus_Update(); if ( NuNData[pKey][pBttnTxt] ) then NuN_ShowSavedNote(pBttnTxt); else NuN_ShowGuildNote(); end elseif ( uAction == "MouseOver" ) then ttName = pBttnTxt; NuN_StaticTT(); end elseif ( GuildStatusFrame:IsVisible() ) then pBttnTxt = NuN_GetName_FrameButton(nBttnID, "GS"); if ( uAction == "Click" ) then GuildFrame.selectedGuildMember = getglobal("GuildFrameGuildStatusButton"..nBttnID).guildIndex; GuildFrame.selectedName = getglobal("GuildFrameGuildStatusButton"..nBttnID.."Name"):GetText(); SetGuildRosterSelection(GuildFrame.selectedGuildMember); NuNOri_GuildStatus_Update(); if ( NuNData[pKey][pBttnTxt] ) then NuN_ShowSavedNote(pBttnTxt); else NuN_ShowGuildNote(); end elseif ( uAction == "MouseOver" ) then ttName = pBttnTxt; NuN_StaticTT(); end elseif ( WhoFrame:IsVisible() ) then pBttnTxt = NuN_GetName_FrameButton(nBttnID, "W"); if ( uAction == "Click" ) then WhoFrame.selectedWho = getglobal("WhoFrameButton"..nBttnID).whoIndex; WhoFrame.selectedName = getglobal("WhoFrameButton"..nBttnID.."Name"):GetText(); NuNOri_WhoList_Update(); if ( NuNData[pKey][pBttnTxt] ) then NuN_ShowSavedNote(pBttnTxt); else NuN_ShowWhoNote(pBttnTxt); end elseif ( uAction == "MouseOver" ) then ttName = pBttnTxt; NuN_StaticTT(); end elseif ( QuestLogFrame:IsVisible() ) then lOffset = nBttnID + FauxScrollFrame_GetOffset(QuestLogListScrollFrame); pBttnTxt, qLevel, qTag, qHeader, qCollapsed, qComplete = GetQuestLogTitle(lOffset); c_note = pBttnTxt; if ( uAction == "Click" ) then QuestLog_SetSelection(lOffset); NuNOri_QuestLog_Update(); if ( qHeader ) then qText = ""; else NuNGNoteFrame.fromQuest = nil; if ( ( NuNData[pKey][Notes][c_note] ) or ( NuNData[Notes][c_note] ) ) then NuN_ShowSavedGNote(); else if ( qLevel == nil ) then qLevel = "--"; end if ( qTag == nil ) then qTag = ""; end qText = "\n"..c_note.." "..NUN_QLVL..qLevel.." "..qTag.." ".."\n\n"..NuN_BuildQuestText().."\n"; if ( qHeader ) then c_type = NuNGet_CommandID(noteTypes, " "); else c_type = NuNGet_CommandID(noteTypes, "QST"); end NuN_ShowTitledGNote( qText ); end end elseif ( uAction == "MouseOver" ) then ttName = c_note; NuN_StaticTT(); end end end function NuN_GetName_FrameButton(lBttnID, NuN_rType) local lBttn, lBttnTxt; if ( NuN_rType == "F" ) then lBttn = getglobal("FriendsFrameFriendButton"..lBttnID.."ButtonTextNameLocation"); lBttnTxt = lBttn:GetText(); local pos = string.find(lBttnTxt, NUN_SEP); if ( string.find(lBttnTxt, NUN_OFF) ) then lBttnTxt = string.sub(lBttnTxt, 11, (pos - 1)); else lBttnTxt = string.sub(lBttnTxt, 1, (pos - 1)); end elseif ( NuN_rType == "I" ) then lBttn = getglobal("FriendsFrameIgnoreButton"..lBttnID.."ButtonTextName"); lBttnTxt = lBttn:GetText(); elseif ( NuN_rType == "G" ) then lBttn = getglobal("GuildFrameButton"..lBttnID.."Name"); lBttnTxt = lBttn:GetText(); elseif ( NuN_rType == "GS" ) then lBttn = getglobal("GuildFrameGuildStatusButton"..lBttnID.."Name"); lBttnTxt = lBttn:GetText(); elseif ( NuN_rType == "W" ) then lBttn = getglobal("WhoFrameButton"..lBttnID.."Name"); lBttnTxt = lBttn:GetText(); elseif ( NuN_rType == NUN_QUEST_C ) then lBttn = getglobal("QuestLogTitle"..lBttnID.."NormalText"); lBttnTxt = lBttn:GetText(); end return lBttnTxt; end function NuN_StaticTT() local storePinned = NuN_PinnedTooltip.type; NuN_Tooltip:ClearLines(); NuN_PinnedTooltip.type = "Nil"; NuN_BuildTT(NuN_Tooltip); NuN_PinnedTooltip.type = storePinned; NuN_Fade = "False"; NuN_Tooltip:Show(); end function NuN_BuildTT(nunTT) local lGuild = nil; local lGuildR = nil; local lprof = ""; local tt = {}; local tti = 0; local srchText, sStart, sStop, tipText; local lineCount = 0; local finalTipText; local txtLines; local NuN_trunc = false; local gttLines = 0; local ttLinesDiff = 0; local ttLen = NUN_TT_MAX; local ttLLen = NUN_TT_LEN; if ( ( NuNSettings[pKey].toolTips ) or ( nunTT == NuN_PinnedTooltip ) ) then if ( NuN_PinnedTooltip.type ~= "General" ) and ( NuN_PinnedTooltip.type ~= "QuestHistory" ) and ( NuNData[pKey][ttName] ) then nunTT:AddLine(NUN_NOTESUNEED_INFO..NUN_PINNED_TT_PADDING, 1, 0.7, 0); lineCount = lineCount + 1; if ( NuN_PinUpHeader == true ) then nunTT:AddLine(ttName); lastPinned = ttName; lineCount = lineCount + 1; end for n = 1, uBttns, 1 do hdNbr = pHead..n nameHdNbr = ttName..hdNbr; nameDtNbr = ttName..pDetl..n; if ( ( (n == 1) and (not NuNData[pKey][nameHdNbr]) ) or ( (n==1) and ( NuNData[pKey][nameHdNbr].txt == dfltHeadings[n] ) ) ) then if ( NuNData[pKey][nameDtNbr] ) then lGuild = NuNData[pKey][nameDtNbr].txt; end elseif ( ( (n == 2) and (not NuNData[pKey][nameHdNbr]) ) or ( (n==2) and ( NuNData[pKey][nameHdNbr].txt == dfltHeadings[n] ) ) ) then if ( NuNData[pKey][nameDtNbr] ) then lGuildR = NuNData[pKey][nameDtNbr].txt; end elseif ( NuNData[pKey][nameHdNbr] ) then local ttDetl = (string.lower(NuNData[pKey][nameHdNbr].txt)); if ( string.find(ttDetl, NUN_TT_HDNG) ) then if ( NuNData[pKey][nameDtNbr] ) then tti = tti + 1; tt[tti] = NuNData[pKey][nameDtNbr].txt; end end elseif ( NuNSettings[pKey][hdNbr] ) then local ttDetl = (string.lower(NuNSettings[pKey][hdNbr].txt)); if ( string.find(ttDetl, NUN_TT_HDNG) ) then if ( NuNData[pKey][nameDtNbr] ) then tti = tti + 1; tt[tti] = NuNData[pKey][nameDtNbr].txt; end end end end for i = 1, getn(tt), 1 do nunTT:AddLine(tt[i], 0.9, 0.2, 0.2); lineCount = lineCount + 1; end if ( ( lGuild ~= nil) and ( lGuild ~= "" ) ) then if ( ( lGuildR ~= nil ) and ( lGuildR ~= "" ) ) then lGuild = lGuild.." : "..lGuildR; end nunTT:AddLine(lGuild, 0.9, 0.9, 0); lineCount = lineCount + 1; end if ( NuNData[pKey][ttName].prof1 ) then lprof = Professions[NuNData[pKey][ttName].prof1]; end if ( NuNData[pKey][ttName].prof2 ) then if (lprof == "") then lprof = Professions[NuNData[pKey][ttName].prof2]; else lprof = lprof.." - "..Professions[NuNData[pKey][ttName].prof2]; end end if ( lprof ~= "" ) then nunTT:AddLine(lprof, 0.8, 0.2, 0.8); lineCount = lineCount + 1; end srchText = NuN_GetCText(ttName); elseif ( ( NuN_PinnedTooltip.type ~= "Contact" ) and ( NuN_PinnedTooltip.type ~= "QuestHistory" ) and ( ( NuNData[pKey][Notes][ttName] ) or ( NuNData[Notes][ttName] ) ) ) then nunTT:AddLine(NUN_NOTESUNEED_INFO..NUN_PINNED_TT_PADDING, 1, 0.7, 0); lineCount = lineCount + 1; if ( NuN_PinUpHeader == true ) then nunTT:AddLine(ttName); lastPinned = ttName; lineCount = lineCount + 1; end srchText = NuN_GetGText(ttName); elseif ( ( NuN_PinnedTooltip.type == "QuestHistory" ) and ( NuNData[pKey].QuestHistory[pName][ttName] ) ) then nunTT:AddLine(NUN_NOTESUNEED_INFO..NUN_PINNED_TT_PADDING, 1, 0.7, 0); lineCount = lineCount + 1; if ( NuN_PinUpHeader == true ) then nunTT:AddLine(ttName); lastPinned = ttName; lineCount = lineCount + 1; end srchText = NuNData[pKey].QuestHistory[pName][ttName].txt; end if ( NuN_PinnedTooltip.type ~= "QuestHistory" ) then if ( NuNSettings[pKey].ttLen ) then if ( NuNSettings[pKey].ttLen == "" ) then ttLen = 0; else ttLen = tonumber( NuNSettings[pKey].ttLen ); end end if ( NuNSettings[pKey].ttLLen ) then if ( NuNSettings[pKey].ttLLen == "" ) then ttLLen = 0; else ttLLen = tonumber( NuNSettings[pKey].ttLLen ); end end end if ( ( NuN_MouseOver == true ) and ( NuNSettings[pKey].minOver ) ) then srchText = ""; end if ( ( srchText ~= nil ) and ( srchText ~= "" ) ) then sStart = string.find(srchText, NUN_TT_KEYPHRASE); if ( sStart ~= nil ) then sStart = sStart + NUN_TT_KEYPHRASE_LEN; sStop = string.find(srchText, NUN_TT_END, sStart); if ( sStop == nil ) then sStop = sStart + ttLen - 1; else sStop = sStop - 1; local sDiff = sStop - sStart; if ( ( sDiff > ttLen ) or ( sDiff < 0 ) ) then sStop = sStart + ttLen - 1; NuN_trunc = true; end end tipText = string.sub(srchText, sStart, sStop); else if ( string.len(srchText) > ttLen ) then NuN_trunc = true; end tipText = string.sub(srchText, 1, ttLen); end if ( string.len(tipText) > ttLLen ) then finalTipText, txtLines = NuN_ParseTT(tipText, ttLLen); else finalTipText = tipText; txtLines = 1; end if ( NuN_trunc == true ) then finalTipText = finalTipText..NUN_TT_ETC; end nunTT:AddLine(finalTipText, 0, 1, 0); lineCount = lineCount + txtLines; end local gttLines = GameTooltip:NumLines(); local ttLinesDiff = lineCount - gttLines; if ( ttLinesDiff > NUN_TT_LINES_TRIGGER ) then local scaleUp = math.floor( 4 * (NuNSettings[pKey].tScale - 1) ); NuN_TT_Y_Offset = ( ( ttLinesDiff - NUN_TT_LINES_TRIGGER ) * ( NUN_TT_Y_SHIFT + scaleUp ) ); NuN_TT_Y_Offset = math.floor( NuN_TT_Y_Offset ); end end end function NuN_ParseTT(txtIn, fragLen) local p1 = 0; local p2 = 0; local txtOut = ""; local txtTmp = ""; local xtraLines = ""; local parsedLines = 1; while ( true ) do p2 = string.find(txtIn, "\n", ( p1 + 1 ) ); if ( p2 == nil ) then break; end txtTmp = string.sub(txtIn, ( p1 + 1 ), p2); txtTmpL = string.len(txtTmp); if ( txtTmpL > ( fragLen + 10 ) ) then txtTmp, xtraLines = NuN_Fragment(txtTmp, fragLen); else xtraLines = 1; end p1 = p2; parsedLines = parsedLines + xtraLines; txtOut = txtOut..txtTmp; end txtTmp = string.sub(txtIn, ( p1 + 1 ) ); txtTmpL = string.len(txtTmp); if ( txtTmpL > fragLen ) then txtTmp, xtraLines = NuN_Fragment(txtTmp, fragLen); else xtraLines = 1; end parsedLines = parsedLines + xtraLines; txtOut = txtOut..txtTmp; return txtOut, parsedLines; end function NuN_Fragment(txtWhole, fragLen) local p1 = 0; local p2 = 0; local lst = 0; local txtFrags = ""; local count = 1; while ( true ) do p2 = string.find(txtWhole, " ", ( p1 + 1 ) ) if ( p2 == nil ) then break end if ( p2 > ( lst + fragLen ) ) then lst = p1; txtFrags = txtFrags.."\n"; count = count + 1; end txtFrags = txtFrags..string.sub(txtWhole, ( p1 + 1 ), p2); p1 = p2; end txtFrags = txtFrags..string.sub(txtWhole, ( p1 + 1 ) ); return txtFrags, count; end function NuN_Tooltip_OnUpdate() if ( ( NuN_Fade == "True" ) and ( not UnitExists("mouseover") ) ) then local gt = GameTooltipTextLeft1:GetText(); if ( gt ~= gtName ) then this:Hide(); return; end if ( this.fadeStartTime == 0 ) then this.fadeStartTime = GetTime(); end local elapsed = GetTime() - this.fadeStartTime; local fadeHoldTime = this.fadeHoldTime; local fadeOutTime = this.fadeOutTime; if ( elapsed >= ( fadeHoldTime + fadeOutTime ) ) then this:ClearLines(); this:Hide(); elseif ( elapsed > fadeHoldTime ) then local alpha = 1 - ( ( elapsed - fadeHoldTime ) / fadeOutTime ); this:SetAlpha(alpha); end end end function NuN_FFButton_OnShow() NuN_FFButton_Up(); end function NuN_FFButton_Down() if ( pFaction == "Horde" ) then NuN_FFButton_StateADown:Hide(); NuN_FFButton_StateAUp:Hide(); NuN_FFButton_StateHUp:Hide(); NuN_FFButton_StateHDown:Show(); else NuN_FFButton_StateHDown:Hide(); NuN_FFButton_StateHUp:Hide(); NuN_FFButton_StateAUp:Hide(); NuN_FFButton_StateADown:Show(); end if ( FriendsListFrame:IsVisible() ) then NuN_ShowFriendNote(); elseif ( IgnoreListFrame:IsVisible() ) then NuN_ShowIgnoreNote(); elseif ( GuildPlayerStatusFrame:IsVisible() ) then NuN_ShowGuildNote(); elseif ( GuildStatusFrame:IsVisible() ) then NuN_ShowGuildNote(); elseif ( WhoFrame:IsVisible() ) then if ( WhoFrame.selectedName ) then NuN_ShowWhoNote(WhoFrame.selectedName); end elseif ( RaidFrame:IsVisible() ) then local tstValue = NuN_CheckTarget(); if ( UnitInRaid("target") ) then c_name = UnitName("target"); if ( NuNData[pKey][c_name] ) then NuN_ShowSavedNote(c_name); else NuN_NewContact("target"); end end end end function NuN_FFButton_Up() if ( pFaction == "Horde" ) then NuN_FFButton_StateADown:Hide(); NuN_FFButton_StateAUp:Hide(); NuN_FFButton_StateHDown:Hide(); NuN_FFButton_StateHUp:Show(); else NuN_FFButton_StateHDown:Hide(); NuN_FFButton_StateHUp:Hide(); NuN_FFButton_StateADown:Hide(); NuN_FFButton_StateAUp:Show(); end end function NuN_GNoteTitle_OnClick() NuN_ClearPinnedTT(); NuNGTTCheckBoxLabel:Hide(); NuN_GTTCheckBox:Hide(); NuNGNoteTextBox:SetText( NuNGNoteTitleButtonText:GetText() ); NuNGNoteTitleButton:Hide(); NuNGNoteTextBox:Show(); NuNGNoteTextBox:SetFocus(); end function NuN_GNoteTitleSet() NuNGNoteTitleButtonText:SetText( NuNGNoteTextBox:GetText() ); NuNGNoteTextBox:Hide(); NuNGNoteTitleButton:Show(); end function NuN_GetSimpleName(cmplxName) local smplName, posB, posE; posB = string.find(cmplxName, "|h"); posE = string.find(cmplxName, "]|h"); if ( posB ~= nil ) and ( posE ~= nil ) and ( posB < posE ) then smplName = string.sub(cmplxName, (posB + 3), (posE - 1)); return smplName else return nil; end end function NuN_GetLink(cmplxName) local link, posB, posE; posB = string.find(cmplxName, "|Hitem:"); posE = string.find(cmplxName, "|h"); if ( posB ~= nil ) and ( posE ~= nil ) and ( posB < posE ) then link = string.sub(cmplxName, (posB + 2), (posE - 1)); return link; else return nil; end end function NuN_GNoteExists(tstNote) local cmplxName; if ( ( NuNData[pKey][Notes][tstNote] ) or ( NuNData[Notes][tstNote] ) ) then c_note = tstNote; return true; elseif ( NuNData[itmIndex][tstNote] ) then cmplxName = NuNData[itmIndex][tstNote]; if ( ( NuNData[pKey][Notes][cmplxName] ) or ( NuNData[Notes][cmplxName] ) ) then c_note = cmplxName; return true; end end c_note = nil; return false; end function NuN_DeleteItem(toDelete) local index; local value; for index, value in NuNData[itmIndex] do if ( NuNData[itmIndex][index] == toDelete ) then NuNData[itmIndex][index] = nil; return; end end end function NuN_GameTooltip_OnShow() local storePinned = NuN_PinnedTooltip.type; local p1 = 1; local strippedName = ""; local sNLen = 0; local anchorBy, anchorTo; local tx, ty; tx, ty = GameTooltip:GetCenter(); if ( ( not tx ) or ( not ty ) ) then noTipAnchor = true; return; end gtName = GameTooltipTextLeft1:GetText(); if ( not UnitExists("mouseover") ) then sNLen = string.len(gtName); for i=sNLen, 1, -1 do local tstChar = string.sub(gtName, i, i); if ( tstChar == " " ) then p1 = i + 1; break; end end strippedName = string.sub(gtName, p1); if ( NuNData[pKey][strippedName] ) then gtName = strippedName; end end if ( ( UnitExists("mouseover") ) or ( ( RaidFrame:IsVisible() ) and ( MouseIsOver(RaidFrame) ) ) or ( ( TargetFrame:IsVisible() ) and ( MouseIsOver(TargetFrame) ) ) ) then if ( UnitExists("mouseover") ) then ttName = UnitName("mouseover"); NuN_Fade = "True"; else ttName = gtName; NuN_Fade = "False"; end if ( ( ttName ~= nil ) and ( ( NuNData[pKey][ttName] ) or ( NuNData[pKey][Notes][ttName] ) or ( NuNData[Notes][ttName] ) ) ) then anchorBy, anchorTo = NuN_GetTipAnchor(GameTooltip); NuN_Tooltip:Hide(); NuN_Tooltip:SetOwner(this, "ANCHOR_NONE"); NuN_TT_Y_Offset = 0; NuN_PinnedTooltip.type = "Nil"; NuN_MouseOver = true; NuN_BuildTT(NuN_Tooltip); NuN_MouseOver = false; NuN_PinnedTooltip.type = storePinned; NuN_Tooltip:SetPoint(anchorBy, "GameTooltip", anchorTo, -1, 0); NuN_Tooltip:Show(); else NuN_Tooltip:ClearLines(); NuN_Tooltip:Hide(); end else ttName = gtName; if ( NuNData[itmIndex][ttName] ) then ttName = ( NuNData[itmIndex][ttName] ); end if ( ( ttName ~= nil ) and ( ( NuNData[pKey][ttName] ) or ( NuNData[pKey][Notes][ttName] ) or ( NuNData[Notes][ttName] ) ) ) then NuN_Fade = "False"; NuN_Tooltip:ClearLines(); NuN_Tooltip:Hide(); NuN_Tooltip:SetOwner(this, "ANCHOR_NONE"); NuN_TT_Y_Offset = 0; NuN_PinnedTooltip.type = "Nil"; NuN_BuildTT(NuN_Tooltip); NuN_PinnedTooltip.type = storePinned; local num1 = ShoppingTooltip1:NumLines(); local num2 = ShoppingTooltip2:NumLines(); if ( num2 and ( num2 > 0 ) and ShoppingTooltip2 and MerchantFrame and ( MerchantFrame:IsVisible() ) and ( MouseIsOver(MerchantFrame) ) ) or ( num2 and ( num2 > 0 ) and ShoppingTooltip2 and AuctionFrame and ( AuctionFrame:IsVisible() ) and ( MouseIsOver(AuctionFrame) ) ) then anchorBy, anchorTo = NuN_GetTipAnchor(ShoppingTooltip2); NuN_Tooltip:SetPoint(anchorBy, "ShoppingTooltip2", anchorTo, 0, 0); elseif ( num1 and ( num1 > 0 ) ) and ( ShoppingTooltip1 and MerchantFrame and ( MerchantFrame:IsVisible() ) and ( MouseIsOver(MerchantFrame) ) ) or ( num1 and ( num1 > 0 ) ) and ( ShoppingTooltip1 and AuctionFrame and ( AuctionFrame:IsVisible() ) and ( MouseIsOver(AuctionFrame) ) ) then anchorBy, anchorTo = NuN_GetTipAnchor(ShoppingTooltip1); NuN_Tooltip:SetPoint(anchorBy, "ShoppingTooltip1", anchorTo, 0, 0); else anchorBy, anchorTo = NuN_GetTipAnchor(GameTooltip); NuN_Tooltip:SetPoint(anchorBy, "GameTooltip", anchorTo, 1, 0); end NuN_Tooltip:Show(); else NuN_Tooltip:ClearLines(); NuN_Tooltip:Hide(); end end end function NuN_WorldMapTooltip_OnShow(id) local noPopup = true; local MapNoting = true; local nName = WorldMapTooltipTextLeft1:GetText(); NuNPopup:Hide(); if ( NuNData[itmIndex][nName] ) then nName = ( NuNData[itmIndex][nName] ); end local MNCont = nil; local MNZone = nil; local NuN_Key = nil; MNCont = GetCurrentMapContinent(); if ( MNCont == -1 ) then MNCont = GetRealZoneText(); MNZone = 0; else if ( MetaMapNotes_OnLoad ) then MNZone = MetaMapNotes_ZoneShift[MNCont][GetCurrentMapZone()]; elseif ( MapNotes_OnLoad ) then MNZone = MapNotes_ZoneShift[MNCont][GetCurrentMapZone()]; else MapNoting = nil; end if ( ( MapNoting ) and ( ( not MNZone ) or ( MNZone < 1 ) ) ) then return; end end if ( id ) then NuN_Key = MNCont.."-"..MNZone.."-"..id; end if ( NuN_Key ) then if ( ( NuNData[mrgIndex] ) and ( NuNData[mrgIndex][NuN_Key] ) ) then local index, value, lBttn, lHeight; local lWidth = NuNPopupTitle:GetWidth(); local lCount = 0; NuNPopupButton1:SetText(""); NuNPopupButton1:Hide(); NuNPopupButton2:SetText(""); NuNPopupButton2:Hide(); NuNPopupButton3:SetText(""); NuNPopupButton3:Hide(); NuNPopupButton4:SetText(""); NuNPopupButton4:Hide(); NuNPopupButton5:SetText(""); NuNPopupButton5:Hide(); for index, value in NuNData[mrgIndex][NuN_Key] do if ( index ~= "noteCounter" ) then if ( ( NuNData[Notes][index] ) or ( NuNData[pKey][Notes][index] ) ) then lCount = lCount + 1; lBttn = getglobal("NuNPopupButton"..lCount); lBttn.note = index; lBttn:SetText(index); lBttn:Show(); local tWidth = lBttn:GetTextWidth(); if ( ( tWidth ) and ( tWidth > lWidth ) ) then lWidth = tWidth; end end end end if ( lCount > 0 ) then local lHeight = math.ceil( ((20*(lCount + 1)) + 10) ); lWidth = math.ceil( (lWidth) * 1.15 ); if ( lCount > 2 ) then lHeight = lHeight - (lCount * lCount); end NuNPopup:SetHeight(lHeight); NuNPopup:SetWidth(lWidth); NuNPopupButton1:SetWidth(lWidth - 4); NuNPopupButton2:SetWidth(lWidth - 4); NuNPopupButton3:SetWidth(lWidth - 4); NuNPopupButton4:SetWidth(lWidth - 4); NuNPopupButton5:SetWidth(lWidth - 4); NuNPopup:ClearAllPoints(); NuNPopup.id = id; local x, y = GetCursorPosition(); if ( y > 300 ) then if ( x > 500 ) then NuNPopup:SetPoint("TOPRIGHT", "WorldMapTooltip", "BOTTOMRIGHT", 0, 0); NuNPopup.point = "TOPRIGHT"; NuNPopup.relativePoint = "BOTTOMRIGHT"; else NuNPopup:SetPoint("TOPLEFT", "WorldMapTooltip", "BOTTOMLEFT", 0, 0); NuNPopup.point = "TOPLEFT"; NuNPopup.relativePoint = "BOTTOMLEFT"; end else if ( x > 500 ) then NuNPopup:SetPoint("BOTTOMRIGHT", "WorldMapTooltip", "TOPRIGHT", 0, 0); NuNPopup.point = "BOTTOMRIGHT"; NuNPopup.relativePoint = "TOPRIGHT"; else NuNPopup:SetPoint("BOTTOMLEFT", "WorldMapTooltip", "TOPLEFT", 0, 0); NuNPopup.point = "BOTTOMLEFT"; NuNPopup.relativePoint = "TOPLEFT"; end end NuNPopupTitle:SetTextColor(0.1, 0.9, 0.1, 0.9); popUpHide = nil; NuNPopup:SetAlpha(1); NuNPopup:Show(); NuN_MapTooltipShow(NuNPopupButton1.note, "NuNPopup", NuNPopup.point, NuNPopup.relativePoint); NuNPopupButton1:LockHighlight(); noPopup = nil; end end end if ( noPopup ) then if ( ( NuNData[pKey][nName] ) or ( NuNData[pKey][Notes][nName] ) or ( NuNData[Notes][nName] ) ) then NuN_MapTooltipShow(nName, "WorldMapTooltip", nil, nil); end end end function NuN_MapTooltipShow(nName, relativeTo, point, relativePoint) local storePinned = NuN_PinnedTooltip.type; NuNPopupButton1:UnlockHighlight(); if ( not nName ) then return; end gtName = nName; ttName = gtName; if ( ( ttName ~= nil ) and ( ( NuNData[pKey][ttName] ) or ( NuNData[pKey][Notes][ttName] ) or ( NuNData[Notes][ttName] ) ) ) then NuN_Fade = "False"; NuN_MapTooltip:ClearLines(); NuN_MapTooltip:Hide(); NuN_MapTooltip:SetOwner(this, "ANCHOR_NONE"); NuN_PinnedTooltip.type = "Nil"; NuN_BuildTT(NuN_MapTooltip); NuN_PinnedTooltip.type = storePinned; if ( ( point ) and ( relativePoint ) ) then NuN_MapTooltip:SetPoint(point, relativeTo, relativePoint, 0, 0); else local x, y = GetCursorPosition(); if ( y > 300 ) then if ( x > 500 ) then NuN_MapTooltip:SetPoint("TOPRIGHT", "WorldMapTooltip", "BOTTOMRIGHT", 0, 0); else NuN_MapTooltip:SetPoint("TOPLEFT", "WorldMapTooltip", "BOTTOMLEFT", 0, 0); end else if ( x > 500 ) then NuN_MapTooltip:SetPoint("BOTTOMRIGHT", "WorldMapTooltip", "TOPRIGHT", 0, 0); else NuN_MapTooltip:SetPoint("BOTTOMLEFT", "WorldMapTooltip", "TOPLEFT", 0, 0); end end end NuN_MapTooltip:SetFrameLevel( WorldMapTooltip:GetFrameLevel() ); NuN_MapTooltip:Show(); else NuN_MapTooltip:ClearLines(); NuN_MapTooltip:Hide(); end end function NuN_WorldMapTooltip_OnHide() NuNPopup:Hide(); NuN_MapTooltip:ClearLines(); NuN_MapTooltip:Hide(); end function NuN_ItemRefTooltip_OnShow() gtName = ItemRefTooltipTextLeft1:GetText(); ttName = gtName; if ( NuNData[itmIndex][ttName] ) then ttName = ( NuNData[itmIndex][ttName] ); end if ( ( ttName ~= nil ) and ( ( NuNData[pKey][Notes][ttName] ) or ( NuNData[Notes][ttName] ) ) ) then NuN_Fade = "False"; NuN_ClearPinnedTT(); NuN_PinnedTooltip:SetOwner(ItemRefTooltip, "ANCHOR_TOPLEFT"); NuN_PinUpHeader = true; NuN_PinnedTooltip.type = "General"; NuN_BuildTT(NuN_PinnedTooltip); NuN_PinUpHeader = false; NuN_PinnedTooltip:Show(); pinnedTTMoved = false; elseif ( not pinnedTTMoved ) then NuN_ClearPinnedTT(); end end function NuN_ItemRefTooltip_OnHide() if ( not pinnedTTMoved ) then NuN_ClearPinnedTT(); pinnedTTMoved = true; end end function NuN_FlagMoved() pinnedTTMoved = true; end function NuN_GameTooltip_OnHide() noTipAnchor = nil; if ( NuN_Fade == "False" ) then NuN_Tooltip:ClearLines(); NuN_Tooltip:Hide(); end end function NuN_TTCheckBox_OnClick(frameType) if ( frameType == "Contact" ) then if ( NuN_CTTCheckBox:GetChecked() ) then ttName = c_name; NuN_ClearPinnedTT(); NuN_PinnedTooltip:SetOwner(this, ANCHOR_BOTTOMRIGHT); NuN_PinUpHeader = true; NuN_PinnedTooltip.type = frameType; NuN_BuildTT(NuN_PinnedTooltip); NuN_PinUpHeader = false; NuN_PinnedTooltip:Show(); else NuN_ClearPinnedTT(); end elseif ( frameType == "General" ) then if ( NuN_GTTCheckBox:GetChecked() ) then ttName = c_note; NuN_ClearPinnedTT(); NuN_PinnedTooltip:SetOwner(this, ANCHOR_BOTTOMRIGHT); NuN_PinUpHeader = true; NuN_PinnedTooltip.type = frameType; NuN_BuildTT(NuN_PinnedTooltip); NuN_PinUpHeader = false; NuN_PinnedTooltip:Show(); else NuN_ClearPinnedTT(); end end end function NuN_TTCheckBox_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_PIN_TOOLTIP_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_PIN_TOOLTIP_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_PIN_TOOLTIP_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_ClearPinnedTT() if ( NuN_PinnedTooltip:IsVisible() ) then NuN_PinnedTooltip:ClearLines(); NuN_PinnedTooltip:Hide(); end end function NuN_CheckPinnedBox(tst) if ( NuN_PinnedTooltip:IsVisible() ) then if ( tst == lastPinned ) then return 1; else return 0; end else return 0; end end function NuN_PinnedTT_OnClick() local ttTitle = NuN_PinnedTooltipTextLeft2:GetText(); if ( NuN_PinnedTooltip.type == "Contact" ) then if ( NuNData[pKey][ttTitle] ) then NuN_ShowSavedNote(ttTitle); end elseif ( NuN_PinnedTooltip.type == "General" ) then if ( NuNData[itmIndex][ttTitle] ) then ttTitle = NuNData[itmIndex][ttTitle]; end if ( ( NuNData[pKey][Notes][ttTitle] ) or ( NuNData[Notes][ttTitle] ) ) then c_note = ttTitle; NuNGNoteFrame.fromQuest = nil; NuN_ShowSavedGNote(); end end end function NuN_PinnedTT_OnHide() if ( NuN_PinnedTooltip.type == "Contact" ) then if ( ( NuNFrame:IsVisible() ) and ( NuN_CTTCheckBox:GetChecked() ) ) then NuN_CTTCheckBox:SetChecked(0); end elseif ( NuN_PinnedTooltip.type == "General" ) then if ( ( NuNGNoteFrame:IsVisible() ) and ( NuN_GTTCheckBox:GetChecked() ) ) then NuN_GTTCheckBox:SetChecked(0); end end end function NuN_OpenChat(noteType) local dspText, dspTextL; local hdrMax = 29; UIDropDownMenu_ClearAll(NuNChatDropDown); NuNTransmit:Disable(); NuNChatTextBox:Hide(); NuN_ChatFrame.type = noteType; if ( noteType == "Contact" ) then dspText = c_name; NuN_ChatCheckBox:Show(); elseif ( noteType == "General" ) then dspText = c_note; NuN_ChatCheckBox:Hide(); end if ( string.find(dspText, "|Hitem:") ) then hdrMax = hdrMax + 50; end dspTextL = string.len(dspText); if ( dspTextL > hdrMax ) then dspText = string.sub(dspText, 1, hdrMax).."..."; end NuNChatNoteTitle:SetText(dspText); ShowUIPanel(NuN_ChatFrame); end function NuN_Transmit() local dfltLang; local user = nil; local error = nil; local singleLine; local parsedArray = {}; local contents = nil; local linesInError = {}; local nonCriticalError = false; local e = 0; local tLog = "Transmit Log "; local chatTarget; local prfx; local logText = ""; local saveLvl; NuNTransmit:Disable(); msgSeq = msgSeq + 1; if ( msgSeq > 9 ) then msgSeq = 1; end msgKey = pName..msgSeq..":"; tLog = tLog..msgKey; if ( NuNSettings[pKey].dLevel ) then NuNData[Notes][tLog] = {}; logText = NuN_GetDateStamp().."\n"; NuNData[Notes][tLog].type = 3; saveLvl = "Account"; else NuNData[pKey][Notes][tLog] = {}; logText = NuN_GetDateStamp().."\n"; NuNData[pKey][Notes][tLog].type = 3; saveLvl = "Realm"; end if ( NuNChatTextBox:IsVisible() ) then user = NuNChatTextBox:GetText(); end if ( sendTo == "WHISPER" ) or ( sendTo == "NuN" ) then chatTarget = user; else chatTarget = sendTo; end if ( horde ) then dfltLang = "Orcish"; else dfltLang = "Common"; end prfx = msgKey..NUN_TRANSMISSION_PREFIX1..pName.." ---> "..chatTarget; logText = logText.."\n"..prfx; if ( NuN_ChatFrame.type == "Contact" ) then parsedArray, error = NuN_TransmitContact(dfltLang, user); else parsedArray, error = NuN_TransmitGeneral(dfltLang, user); end if ( parsedArray ) then local tmp_c_note = c_note; local tmp_g_text = g_text; contents = getn(parsedArray); local lineCount = 0; local flagged = nil; for i=1, contents, 1 do singleLine = parsedArray[i]; singleLine = string.gsub(singleLine, "\n", " "); singleLine = string.gsub(singleLine, "\\n", " "); if ( string.len(singleLine) > 255 ) then error = "Err02"; break; end local beginnings = NuN_Validate(singleLine, "|c"); local endings = NuN_Validate(singleLine, "|h|r"); if ( beginnings == endings ) then parsedArray[i] = singleLine; lineCount = lineCount + 1; if ( ( string.len(logText) < (NUN_MAX_TXT_LIM - 360) ) and ( lineCount < 109 ) ) then logText = logText.."\n"..singleLine; elseif ( not flagged ) then flagged = true; logText = logText.."\n"..NUN_NOROOM; end else parsedArray[i] = ""; nonCriticalError = true; e = e + 1; linesInError[e] = NUN_LINEERROR_TEXT.."----->"..i.." : \n"; e = e + 1; linesInError[e] = singleLine.."\n"; end end c_note = tLog; g_text = logText; NuN_SetGText(saveLvl); c_note = tmp_c_note; g_text = tmp_g_text; end if ( contents ) and ( not error ) then if ( sendTo == "SELF" ) then DEFAULT_CHAT_FRAME:AddMessage(prfx); else SendChatMessage(prfx, sendTo, dfltLang, user); end for i=1, contents, 1 do if ( sendTo == "SELF" ) then DEFAULT_CHAT_FRAME:AddMessage(msgKey..parsedArray[i]); else SendChatMessage(msgKey..parsedArray[i], sendTo, dfltLang, user); end end elseif ( error ) then NuN_Message(NUN_TRANSMISSION_ERROR..error); else NuN_Message(NUN_TRANSMISSION_MISSING); end if ( nonCriticalError ) then if ( NuNSettings[pKey].dLevel ) then NuNData[Notes][msgKey] = {}; NuNData[Notes][msgKey].txt = ""; else NuNData[pKey][Notes][msgKey] = {}; NuNData[pKey][Notes][msgKey].txt = ""; end for i=1, getn(linesInError), 1 do if ( NuNSettings[pKey].dLevel ) then NuNData[Notes][msgKey].txt = NuNData[Notes][msgKey].txt..linesInError[i].."\n"; else NuNData[pKey][Notes][msgKey].txt = NuNData[pKey][Notes][msgKey].txt..linesInError[i].."\n"; end end NuN_Message(NUN_NONCRITICAL_ERROR..msgKey); end NuNTransmit:Enable(); end function NuN_TransmitContact(dfltLang, user) local parsedArray = {}; local singleLine = ""; if ( NuNData[pKey][c_name] ) then local parsedArray = {}; local singleLine = ""; local arrayCounter = 1; local parseText = ""; local txtArray = {}; parsedArray[arrayCounter] = NUN_TRANSMISSION_PREFIX2.."Contact : "..c_name; if ( not NuN_ChatCheckBox:GetChecked() ) then singleLine = NuNData[pKey][c_name].faction.." "; if ( NuNData[pKey][c_name].race ) then if ( horde ) then singleLine = singleLine..HRaces[NuNData[pKey][c_name].race].." "; else singleLine = singleLine..ARaces[NuNData[pKey][c_name].race].." "; end end if ( NuNData[pKey][c_name].cls ) then if ( horde ) then singleLine = singleLine..HClasses[NuNData[pKey][c_name].cls].." "; else singleLine = singleLine..AClasses[NuNData[pKey][c_name].cls].." "; end end if ( NuNData[pKey][c_name].sex ) then singleLine = singleLine..Sexes[NuNData[pKey][c_name].sex].." "; end if ( NuNData[pKey][c_name].prof1 ) then singleLine = singleLine..Professions[NuNData[pKey][c_name].prof1].." "; end if ( NuNData[pKey][c_name].prof2 ) then singleLine = singleLine..Professions[NuNData[pKey][c_name].prof2].." "; end if ( NuNData[pKey][c_name].crank ) then if ( horde ) then singleLine = singleLine..HRanks[NuNData[pKey][c_name].crank].." "; else singleLine = singleLine..ARanks[NuNData[pKey][c_name].crank].." "; end end if ( NuNData[pKey][c_name].hrank ) then if ( horde ) then singleLine = singleLine..HRanks[NuNData[pKey][c_name].hrank].." "; else singleLine = singleLine..ARanks[NuNData[pKey][c_name].hrank].." "; end end if ( singleLine ~= "" ) then singleLine = "G:"..singleLine; arrayCounter = arrayCounter + 1; parsedArray[arrayCounter] = singleLine; end for n = 1, uBttns, 1 do singleLine = ""; hdNbr = pHead..n; nameHdNbr = c_name..hdNbr; nameDtNbr = c_name..pDetl..n; if ( NuNData[pKey][nameHdNbr] ) then singleLine = NuNData[pKey][nameHdNbr].txt.."~ "; elseif ( NuNSettings[pKey][hdNbr] ) then singleLine = NuNSettings[pKey][hdNbr].txt.."~ "; else singleLine = dfltHeadings[n].."~ "; end if ( NuNData[pKey][nameDtNbr] ) then singleLine = singleLine.."~"..NuNData[pKey][nameDtNbr].txt; end if ( singleLine ~= "" ) then arrayCounter = arrayCounter + 1; singleLine = "U"..n..":"..singleLine; parsedArray[arrayCounter] = singleLine; end end end -- parseText = NuN_GetCText(c_name); parseText = NuNText:GetText(); txtArray = NuN_ParseNote(parseText); if ( txtArray ) then for i=1, getn(txtArray), 1 do arrayCounter = arrayCounter + 1; parsedArray[arrayCounter] = "T:"..txtArray[i]; end end arrayCounter = arrayCounter + 1; parsedArray[arrayCounter] = NUN_TRANSMISSION_POSTFIX.."Contact : "..c_name; return parsedArray, nil; else return nil, "Err01"; end end function NuN_TransmitGeneral(dfltLang, user) local ref = c_note; if ( NuNData[itmIndex][ref] ) then ref = NuNData[itmIndex][ref]; end if ( ( NuNData[pKey][Notes][ref] ) or ( NuNData[Notes][ref] ) ) then local parsedArray = {}; local singleLine = ""; local arrayCounter = 1; local parseText = ""; local txtArray = {}; parsedArray[arrayCounter] = NUN_TRANSMISSION_PREFIX2.."General : "..c_note; -- parseText = NuN_GetGText(c_note); parseText = NuNGNoteTextScroll:GetText(); txtArray = NuN_ParseNote(parseText); if ( txtArray ) then for i=1, getn(txtArray), 1 do arrayCounter = arrayCounter + 1; parsedArray[arrayCounter] = "T:"..txtArray[i]; end end arrayCounter = arrayCounter + 1; parsedArray[arrayCounter] = NUN_TRANSMISSION_POSTFIX.."General : "..c_note; return parsedArray, nil; else return nil, "Err01"; end end function NuN_ParseNote(parseText) local parsedArray = {}; local arrayCounter = 0; local p1 = 0; local p2 = 0; local txtTmp = ""; parseText = NuN_RemoveColours(parseText); parseText = NuN_CheckHyperlinkPositions(parseText); local parseTextLen = string.len(parseText); local negOffset = -1 * (parseTextLen); while ( negOffset < 0 ) do p2 = string.find(parseText, "\n", (p1+1) ); if ( ( p2 == nil ) or ( p2 > ( NUN_CHAT_LIMIT + p1 ) ) ) then negOffset = p1 + NUN_CHAT_LIMIT - parseTextLen; if ( negOffset < 0 ) then p2 = string.find(parseText, " ", negOffset); if ( ( p2 == nil ) or ( p2 <= p1 ) ) then txtTmp = string.sub(parseText, (p1+1), (p1+NUN_CHAT_LIMIT)); else txtTmp = string.sub(parseText, (p1+1), p2); end else txtTmp = string.sub(parseText, (p1+1)); end else txtTmp = string.sub(parseText, (p1+1), p2); end if ( p2 ) then p1 = p2; else p1 = parseTextLen; end if ( txtTmp ~= "" ) and ( txtTmp ~= " " ) then arrayCounter = arrayCounter + 1; parsedArray[arrayCounter] = txtTmp; end end return parsedArray; end function NuN_RemoveColours(colouredText) local gp1 = 0; local gp2a = 0; local gp2b = 0; local gp3 = 0; local plainText=""; local malformed = false; local postfix = ""; while ( true ) do gp2a = string.find(colouredText, "|c", (gp1+1)); if ( gp2a == nil ) then break; else if ( gp2a ~= (gp1+1) ) then plainText = plainText..string.sub(colouredText, (gp1+1), (gp2a-1)); end gp2b = string.find(colouredText, "|Hitem:", (gp1+1)); gp3 = string.find(colouredText, "|h|r", gp2a); if ( gp3 == nil ) then malformed = true; break; end if ( gp2b == nil ) or ( gp2b > gp3 ) then plainText = plainText..string.sub(colouredText, (gp2a+12), (gp3-1)); elseif ( (gp2b-gp2a) == 10 ) then plainText = plainText..string.sub(colouredText, gp2a, (gp3+3)); else malformed = true; break; end gp1 = gp3 + 3; end end if ( not malformed ) then postfix = string.sub(colouredText, (gp1+1)); if ( postfix ) then plainText = plainText..postfix; end else plainText = ""; NuN_Message(NUN_COLOUR_ERROR_REPORT); end return plainText; end function NuN_Validate(txt, tst) local p1 = 0; local p2 = 0; local count = 0; while ( true ) do p2 = string.find(txt, tst, (p1+1)); if ( p2 == nil ) then break; else count = count + 1; p1 = p2; end end return count; end function NuN_ChatCheckBox_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_CHATCHECK_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_CHATCHECK_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_CHATCHECK_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_CheckHyperlinkPositions(theText) local hypBegs = {}; local p1 = 0; local p2 = 0; local counter = 0; local Begs = 0; local rtrnText = ""; while ( true ) do p2 = string.find(theText, "|Hitem:", (p1+1) ); if ( p2 == nil ) then break; else counter = counter + 1; hypBegs[counter] = p2 - 10; p1 = p2; end end if ( hypBegs ) then local base = 1; local preText = ""; local len = 0; for i=1, getn(hypBegs), 1 do preText = string.sub(theText, base, (hypBegs[i] - 1)); len = string.len(preText); local p3 = 0; local p4 = 0; p2 = nil; while ( true ) do p4 = string.find(preText, "\n", (p3+1)); if ( p4 == nil ) then break; else p2 = p4; p3 = p4; end end if ( p2 == nil ) and ( len > 120 ) then rtrnText = rtrnText..preText.."\n"; base = base + len; elseif ( p2 ) and ( (len - p2) > 120 ) then rtrnText = rtrnText..preText.."\n"; base = base + len; elseif ( p2 ) then rtrnText = rtrnText..string.sub(theText, base, (base + p2)); base = base + p2 + 1; end end rtrnText = rtrnText..string.sub(theText, base); end return rtrnText; end function NuN_Level_CheckBox_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_LEVEL_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_LEVEL_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_LEVEL_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuNGTypeDropDown_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_GTYPE_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_GTYPE_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_GTYPE_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuNScaleFrameButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_SCALE_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_SCALE_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_SCALE_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_NPCTarget() local chkName = UnitName("target"); local npcText = ""; if ( ( chkName ) and ( not UnitPlayerControlled("target") ) ) then npcText = NuN_NPCInfo(); NuNGNoteTextScroll:SetText( NuNGNoteTextScroll:GetText().."\n"..npcText ); end end function NuNScaleFrameShow() if ( NuN_ScaleFrame:IsVisible() ) then HideUIPanel(NuN_ScaleFrame); else ShowUIPanel(NuN_ScaleFrame); end end function NuNFrameScaleSlider_OnShow() local pScale = NuNSettings[pKey].pScale; NuNFrameScaleSliderCurrent:SetText( string.format("%d", (pScale * 100)) .. "%"); this:SetMinMaxValues(NUN_FRAMESCALE_MIN, NUN_FRAMESCALE_MAX); this:SetValueStep(NUN_FRAMESCALE_STEP); this:SetValue(NUN_FRAMESCALE_MIN + NUN_FRAMESCALE_MAX - pScale); this.previousValue = this:GetValue(); end function NuNFrameScaleSlider_OnValueChanged() local pScale; if (this:GetValue() ~= this.previousValue) then this.previousValue = this:GetValue(); pScale = (NUN_FRAMESCALE_MIN + NUN_FRAMESCALE_MAX - this:GetValue()); NuNSettings[pKey].pScale = pScale; NuNFrameScaleSliderCurrent:SetText( string.format("%d", (pScale * 100)) .. "%"); if ( NuNOptionsFrame:IsVisible() ) then NuNOptionsFrame:SetScale(NuNSettings[pKey].pScale); end if ( NuNFrame:IsVisible() ) then NuNFrame:SetScale(NuNSettings[pKey].pScale); end if ( NuNGNoteFrame:IsVisible() ) then NuNGNoteFrame:SetScale(NuNSettings[pKey].pScale); end if ( NuNSearchFrame:IsVisible() ) then NuNSearchFrame:SetScale(NuNSettings[pKey].pScale); end end end function NuNFontScaleSlider_OnShow() local tScale = NuNSettings[pKey].tScale; NuNFontScaleSliderCurrent:SetText( string.format("%d", (tScale * 100)) .. "%"); this:SetMinMaxValues(NUN_TT_FONTSCALE_MIN, NUN_TT_FONTSCALE_MAX); this:SetValueStep(NUN_FONTSCALE_STEP); this:SetValue(NUN_TT_FONTSCALE_MIN + NUN_TT_FONTSCALE_MAX - tScale); this.previousValue = this:GetValue(); end function NuNFontScaleSlider_OnValueChanged() local tScale; if (this:GetValue() ~= this.previousValue) then this.previousValue = this:GetValue(); tScale = (NUN_TT_FONTSCALE_MIN + NUN_TT_FONTSCALE_MAX - this:GetValue()); NuNSettings[pKey].tScale = tScale; NuNFontScaleSliderCurrent:SetText( string.format("%d", (tScale * 100)) .. "%"); NuN_PinnedTooltip:SetScale(NuNSettings[pKey].tScale); NuN_Tooltip:SetScale(NuNSettings[pKey].tScale); end end function NuNMapFontScaleSlider_OnShow() local mScale = NuNSettings[pKey].mScale; NuNMapFontScaleSliderCurrent:SetText( string.format("%d", (mScale * 100)) .. "%"); this:SetMinMaxValues(NUN_TT_MAPFONTSCALE_MIN, NUN_TT_MAPFONTSCALE_MAX); this:SetValueStep(NUN_MAPFONTSCALE_STEP); this:SetValue(NUN_TT_MAPFONTSCALE_MIN + NUN_TT_MAPFONTSCALE_MAX - mScale); this.previousValue = this:GetValue(); end function NuNMapFontScaleSlider_OnValueChanged() local mScale; if (this:GetValue() ~= this.previousValue) then this.previousValue = this:GetValue(); mScale = (NUN_TT_MAPFONTSCALE_MIN + NUN_TT_MAPFONTSCALE_MAX - this:GetValue()); NuNSettings[pKey].mScale = mScale; NuNMapFontScaleSliderCurrent:SetText( string.format("%d", (mScale * 100)) .. "%"); mScale = UIParent:GetScale() * NuNSettings[pKey].mScale; WorldMapTooltip:SetScale(NuNSettings[pKey].mScale); NuN_MapTooltip:SetScale(NuNSettings[pKey].mScale); NuNPopup:SetScale(NuNSettings[pKey].mScale); end end function NuN_BuildQuestText() local numQuestRewards, numQuestChoices, numQuestSpellRewards; local QuestRewardMoney, QuestRequiredMoney; local qText = "\n"; local obj, objTxt, objType, itm, itmTxt; local gold, silver, copper, moneyTxt; local tmpQText1 = ""; local tmpQText2 = ""; local questItem = "QuestLogItem"; local error = false; numQuestRewards = GetNumQuestLogRewards(); numQuestChoices = GetNumQuestLogChoices(); if ( GetQuestLogRewardSpell() ) then numQuestSpellRewards = 1; end QuestRewardMoney = GetQuestLogRewardMoney(); QuestRequiredMoney = GetQuestLogRequiredMoney(); tmpQText1, tmpQText2 = GetQuestLogQuestText(); qText = tmpQText2.."\n\n"; if ( GetQuestLogTimeLeft() ) then qText = qText.."\nTimed Quest\n"; end if ( QuestRequiredMoney ) and ( QuestRequiredMoney > 0 ) then if ( QuestRequiredMoney > 9999 ) then gold = ( QuestRequiredMoney / 10000 ); gold = string.format("%d", gold); QuestRequiredMoney = QuestRequiredMoney - ( gold * 10000 ); else gold = 0; end if ( QuestRequiredMoney > 99 ) then silver = ( QuestRequiredMoney / 100 ); silver = string.format("%d", silver); QuestRequiredMoney = QuestRequiredMoney - ( silver * 100 ); else silver = 0; end copper = QuestRequiredMoney; QuestRequiredMoneyTxt = string.format("\n%dg %ds %dc", gold, silver, copper); qText = qText..QuestRequiredMoneyTxt.."\n\n"; end qText = qText.."\n\n"..tmpQText1.."\n"; if ( ( QuestRewardMoney ) and ( QuestRewardMoney > 0 ) ) or ( numQuestRewards > 0 ) then qText = qText.."\n"..NUN_REWARDS.."\n"; end if ( QuestRewardMoney ) and ( QuestRewardMoney > 0 ) then QuestRewardMoneyTxt = NuN_BuildMoneyString(QuestRewardMoney); qText = qText..QuestRewardMoneyTxt.."\n"; end for i=1, numQuestRewards, 1 do bttn = getglobal("QuestLogItem"..i + numQuestChoices); if ( bttn.type ) then local link = GetQuestLogItemLink(bttn.type, bttn:GetID()); if ( link ) then qText = qText..link.."\n"; else link = GetQuestLogItemLink(bttn.type, ( i + numQuestChoices ) ); if ( link ) then qText = qText..link.."\n"; else error = true; qText = NUN_SLOWSERVER.." : NuN Err03"; return qText, error; end end end end if ( numQuestChoices > 1 ) then qText = qText.."\n"..NUN_CHOICES.."\n"; end for i=1, numQuestChoices, 1 do bttn = getglobal("QuestLogItem"..i); if ( bttn.type ) then local link = GetQuestLogItemLink(bttn.type, bttn:GetID()); if ( link ) then if ( i > 1 ) then qText = qText.." / "..link; else qText = qText..link; end else link = GetQuestLogItemLink(bttn.type, i); if ( link ) then if ( i > 1 ) then qText = qText.." / "..link; else qText = qText..link; end else error = true; qText = NUN_SLOWSERVER.." : NuN Err03"; return qText, error; end end end end if ( qText ) then qText = NuN_CleanQuestText(qText); end return qText, error; end function NuN_CheckQuestList(findName) local qTitle, qLevel, qTag, qHeader, qCollapsed, qComplete; local foundIndex = -1; local rLevel, rTag, rComplete; NuNQuestLog = {}; for i = 1, GetNumQuestLogEntries(), 1 do qTitle, qLevel, qTag, qHeader, qCollapsed, qComplete = GetQuestLogTitle(i); if ( ( qTitle ) and ( not qHeader ) ) then NuNQuestLog[qTitle] = 1; if ( ( findName ) and ( findName == qTitle ) ) then foundIndex = i; rLevel = qLevel; rTag = qTag; rComplete = qComplete; end end end return foundIndex, rLevel, rTag, rComplete; end function NuN_UpdateQuestNotes(qEvent) local quest, qLevel, qTag, qHeader, qCollapsed, qComplete; qTriggs = 0; if ( pFaction ) then for qI=1, GetNumQuestLogEntries(), 1 do quest, qLevel, qTag, qHeader, qCollapsed, qComplete = GetQuestLogTitle(qI); if ( ( quest ) and ( not qHeader ) ) then NuN_ProcessQuest(quest, qLevel, qTag, qHeader, qCollapsed, qComplete, qI); end end end if ( qTriggs > 2 ) then timeSinceLastUpdate = 0; NuN_QuestsUpdating = "True"; end end function NuN_ProcessQuest(quest, qLevel, qTag, qHeader, qCollapsed, qComplete, qI) local saveLvl = nil; local qText; local location = NuN_GetLoc(); local l_c_note = c_note; local l_g_text = g_text; local l_c_name = c_name; if ( ( NuNData[pKey].QuestHistory[pName][quest] ) and ( NuNData[pKey].QuestHistory[pName][quest].abandoned ) ) then NuNData[pKey].QuestHistory[pName][quest].abandoned = nil; return; end QuestLog_SetSelection(qI); local qChar = NuN_CheckTarget(); if ( qChar == "N" ) then qChar = c_note; else qChar = ""; end if ( ( not NuNData[pKey].QuestHistory[pName][quest] ) and ( NuNSettings[pKey].autoQ ) ) then NuNData[pKey].QuestHistory[pName][quest] = {}; NuNData[pKey].QuestHistory[pName][quest].sortDate = tostring(date("%Y%m%d%H%M%S"))..":"..qI; NuNData[pKey].QuestHistory[pName][quest].pLevel = UnitLevel("player"); NuNData[pKey].QuestHistory[pName][quest].txt = NUN_CREATED.." "..qChar.."\n "..NuN_GetDateStamp().."\n "..location.."\n"; qTriggs = qTriggs + 1; end local chk = NuN_CleanQuestText( GetQuestLogQuestText() ); if ( qLevel == nil ) then qLevel = "--"; end if ( qTag == nil ) then qTag = ""; end if ( qChar ~= "" ) then qChar = qChar.." "..NuN_LocStrip(location); end qText = "\n"..quest.." "..NUN_QLVL..qLevel.." "..qTag.."\n"..qChar.."\n\n"..NuN_BuildQuestText().."\n"; if ( not string.find(chk, "Unknown Entity") ) then if ( ( qComplete ) and ( NuNData[pKey].QuestHistory[pName][quest] ) and ( ( not NuNData[pKey].QuestHistory[pName][quest].complete ) or ( ( NuNData[pKey].QuestHistory[pName][quest].complete ~= chk ) and ( string.find(qText, chk) ) ) ) ) then NuNData[pKey].QuestHistory[pName][quest].complete = chk; NuNData[pKey].QuestHistory[pName][quest].txt = NuNData[pKey].QuestHistory[pName][quest].txt.."\n\n"..NUN_COMPLETE.."\n "..NuN_GetDateStamp().."\n "..location.."\n"; end if ( NuNData[Notes][quest] ) then c_note = quest; g_text = NuN_GetGText(c_note); if ( ( not string.find( g_text, chk) ) and ( string.find(qText, chk) ) ) then if ( ( NuNGNoteFrame:IsVisible() ) and ( noteTypes[NuNGNoteFrame.type].Command == "QST" ) ) then HideUIPanel(NuNGNoteFrame); end g_text = g_text.."\n\n".."--------------".."\n\n"..qText; NuN_SetGText("Account"); end elseif ( NuNData[pKey][Notes][quest] ) then c_note = quest; g_text = NuN_GetGText(c_note); if ( ( not string.find( g_text, chk ) ) and ( string.find(qText, chk) ) ) then if ( ( NuNGNoteFrame:IsVisible() ) and ( noteTypes[NuNGNoteFrame.type].Command == "QST" ) ) then HideUIPanel(NuNGNoteFrame); end g_text = g_text.."\n\n".."--------------".."\n\n"..qText; NuN_SetGText("Realm"); end elseif ( ( not NuNData[Notes][quest] ) and ( not NuNData[pKey][Notes][quest] ) and ( NuNSettings[pKey].autoQ ) ) then if ( NuNSettings[pKey].dLevel ) then NuNData[Notes][quest] = {}; NuNData[Notes][quest].type = 5; saveLvl = "Account"; else NuNData[pKey][Notes][quest] = {}; NuNData[pKey][Notes][quest].type = 5; saveLvl = "Realm"; end c_note = quest; g_text = qText; NuN_SetGText(saveLvl); if ( ( qChar ~= "" ) and ( NuNSettings[pKey].autoMapNotes ) ) then NuN_MapNote("Target", NUN_QUEST_GIVER, "", 9); end end end c_note = l_c_note; g_text = l_g_text; c_name = l_c_name; end function NuN_AbandonQuest(qTitle) if ( NuNData[pKey].QuestHistory[pName][qTitle] ) then NuNData[pKey].QuestHistory[pName][qTitle].abandoned = true; if ( NuNQuestLog[qTitle] ) then NuNQuestLog[qTitle] = nil; end end end function NuN_QuestHandIn(q) if ( NuNData[pKey].QuestHistory[pName][q] ) then local l_c_note = c_note; local l_c_name = c_name; local qChar = NuN_CheckTarget(); if ( qChar == "N" ) then qChar = c_note; else qChar = ""; end NuNData[pKey].QuestHistory[pName][q].handedIn = 1; NuNData[pKey].QuestHistory[pName][q].txt = NuNData[pKey].QuestHistory[pName][q].txt.."\n\n"..NUN_FINISHED.." "..qChar.."\n "..NuN_GetDateStamp().."\n "..NuN_GetLoc().."\n"; c_note = l_c_note; c_name = l_c_name; end end function NuN_InitialiseSavedVariables() local index, value; pKey = GetCVar("realmName"); if (not NuNData[pKey]) then NuNData[pKey] = {}; NuNSettings[pKey] = {}; NuNSettings[pKey].toolTips = "1"; NuNSettings[pKey].pScale = 1.00; NuNSettings[pKey].tScale = 1.00; NuNSettings[pKey].mScale = 1.00; NuNSettings[pKey].ttLen = NUN_TT_MAX; NuNSettings[pKey].ttLLen = NUN_TT_LEN; NuNData[pKey][Notes] = {}; NuNSettings[pKey].minOver = "1"; NuNSettings[pKey].dLevel = "1"; end if ( not NuNSettings.Version ) then for index, value in NuNSettings do if ( index ~= "Version" ) then NuNSettings[index].toolTips = "1"; NuNSettings[index].pScale = 1.00; NuNSettings[index].tScale = 1.00; NuNSettings[index].mScale = 1.00; NuNSettings[index].ttLen = NUN_TT_MAX; NuNSettings[index].ttLLen = NUN_TT_LEN; NuNSettings[index].minOver = "1"; NuNSettings[pKey].dLevel = "1"; end end NuNSettings.Version = NUN_VERSION; end if ( NuNSettings.Version < "2.51" ) then for index, value in NuNSettings do if ( index ~= "Version" ) then NuNSettings[index].mScale = 1.00; NuNSettings[index].minOver = "1"; end end NuNSettings.Version = NUN_VERSION; end if ( NuNSettings.Version < "3.00" ) then for index, value in NuNSettings do if ( index ~= "Version" ) then NuNSettings[index].mScale = 1.00; end end NuNSettings.Version = NUN_VERSION; end if ( NuNSettings.Version < NUN_VERSION ) then NuNSettings.Version = NUN_VERSION; end if ( not NuNData[itmIndex] ) then NuNData[itmIndex] = {}; end if ( not NuNData[Notes] ) then NuNData[Notes] = {}; end if ( not NuNData[pKey].QuestHistory ) then NuNData[pKey].QuestHistory = {}; end if ( not NuNData[pKey].QuestHistory[pName] ) then NuNData[pKey].QuestHistory[pName] = {}; end if ( not NuNData[mrgIndex] ) then NuNData[mrgIndex] = {}; end end function NuN_OptionsTextLengthSet() local len = this:GetText(); if ( len ) then NuNSettings[pKey].ttLen = len; else NuNSettings[pKey].ttLen = "0"; end end function NuN_OptionsTextLineLengthSet() local len = this:GetText(); if ( len ) then NuNSettings[pKey].ttLLen = len; else NuNSettings[pKey].ttLLen = "0"; end end function NuN_FetchQuestHistory() local index, value; local counter = 0; local results = 0; foundNuN = {}; for index, value in NuNData[pKey].QuestHistory[pName] do counter = counter + 1; foundNuN[counter] = NUN_QUEST_C..index; end table.sort(foundNuN, NuN_SortQuestHistory); results = getn(foundNuN); NuNSearchTitleText:SetText(pName.."'s "..NUN_QUESTS_TEXT.." ("..results..")"); NuNSearch_Update(); if ( ( deletedE ) and ( visibles > 0 ) and ( lastBttn ~= nil ) ) then deletedE = false; if ( lastBttnIndex > visibles ) then NuNSearch_HighlightRefresh(lastVisible); NuNSearchNote_OnClick(lastVisible); else NuNSearch_HighlightRefresh(lastBttn); NuNSearchNote_OnClick(lastBttn); end else NuNSearch_HighlightRefresh(nil); end end function NuN_SortQuestHistory(ele1, ele2) ele1 = string.sub(ele1, 2); ele2 = string.sub(ele2, 2); if ( NuNData[pKey].QuestHistory[pName][ele1].sortDate > NuNData[pKey].QuestHistory[pName][ele2].sortDate ) then return true; end return false; end function NuN_CleanQuestText(dirtyText) local cleanText = string.gsub(dirtyText, pName, NUN_REPLACEQNAME_TXT); cleanText = string.gsub(cleanText, "$N", NUN_REPLACEQNAME_TXT); local class = UnitClass("player"); cleanText = string.gsub(cleanText, class, NUN_REPLACEQCLASS_TXT); cleanText = string.gsub(cleanText, strlower(class), NUN_REPLACEQCLASS_TXT); return cleanText; end function NuN_ToggleMicroButtons() if ( NuNMicroFrame:IsVisible() ) then HideUIPanel(NuNMicroFrame); NuNSettings[pKey].hideMicro = "1"; else ShowUIPanel(NuNMicroFrame); NuNSettings[pKey].hideMicro = nil; end end function NuN_ProcessParty() local pChanged = nil; local lMember, index, value; local partyA = {}; local lMembers = GetNumPartyMembers(); if ( not NuNData[pKey][NuN_Parties] ) then NuNData[pKey][NuN_Parties] = {}; end if ( ( not NuNData[pKey][NuN_Parties][pName] ) or ( ( not UnitInRaid("player") ) and ( lMembers == 0 ) ) ) then NuNData[pKey][NuN_Parties][pName] = {}; end for i = 1, lMembers, 1 do lMember = UnitName("party"..i); if ( lMember == "Unknown Entity" ) then return; end if ( lMember ) then partyA[lMember] = {}; partyA[lMember].pos = i; if ( not NuNData[pKey][NuN_Parties][pName][lMember] ) then NuNData[pKey][NuN_Parties][pName][lMember] = {}; NuNData[pKey][NuN_Parties][pName][lMember].pos = i; if ( not NuNData[pKey][lMember] ) then NuNData[pKey][lMember] = {}; NuNData[pKey][lMember].type = NUN_PARTY_C; NuNData[pKey][lMember].faction = pFaction; NuNData[pKey][lMember][txtTxt] = NUN_AUTO_PARTIED..NuN_GetDateStamp(); NuNData[pKey][lMember][pName] = {}; NuNData[pKey][lMember][pName].partied = 1; else if ( not NuNData[pKey][lMember][pName] ) then NuNData[pKey][lMember][pName] = {}; NuNData[pKey][lMember][pName].partied = 1; elseif ( not NuNData[pKey][lMember][pName].partied ) then NuNData[pKey][lMember][pName].partied = 1; else NuNData[pKey][lMember][pName].partied = NuNData[pKey][lMember][pName].partied + 1; end end end end end for index, value in NuNData[pKey][NuN_Parties][pName] do if ( not partyA[index] ) then if ( UnitInRaid("player") ) then local rID = NuN_CheckRaidByName(index); if ( not rID ) then NuNData[pKey][NuN_Parties][pName][index] = nil; end else NuNData[pKey][NuN_Parties][pName][index] = nil; end end end end function NuN_PartyDownButton_OnClick() local lParties = NuNData[pKey][c_name][pName].partied; lParties = lParties - 1; if ( lParties < 1 ) then NuNData[pKey][c_name][pName].partied = nil; NuNPartiedLabel:Hide(); NuNPartiedNumberLabel:SetText("(0)"); NuNPartiedNumberLabel:Hide(); NuNFramePartyDownButton:Hide(); else NuNData[pKey][c_name][pName].partied = lParties; NuNPartiedNumberLabel:SetText("(x"..tostring(lParties)..")"); end end function NuN_PartyDownButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_PDOWN_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_PDOWN_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_PDOWN_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_bHaveTTCheckBox_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; NuN_Tooltip:SetOwner(this); NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_BHAVE_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_BHAVE_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_BHAVE_TXT3, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_BHAVE_TXT4, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_BHAVE_TXT5, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_BuildShoppingList() local listText = ""; local mName = MerchantNameText:GetText(); if ( mName == c_note ) then local iPrice, iPriceTxt, iQuant, iNumAvail, iLink, iDiscard; local numMerchantItems = GetMerchantNumItems(); for i=1, numMerchantItems, 1 do iLink = GetMerchantItemLink(i); if ( iLink ) then listText = listText.."\n"..iLink; end iDiscard, iDiscard, iPrice, iQuant, iNumAvail = GetMerchantItemInfo(i); if ( ( iQuant ) and ( iQuant > 1 ) ) then listText = listText.." ("..iQuant..") "; end if ( ( iPrice ) and ( iPrice > 0 ) ) then iPriceTxt = NuN_BuildMoneyString(iPrice); listText = listText.." "..iPriceTxt; end if ( ( iNumAvail ) and ( iNumAvail > 0 ) ) then listText = listText.." "..NUN_LIMITED; end end end if ( listText == "" ) then return nil; else return listText; end end function NuN_BuildMoneyString(moneyVal) local moneyTxt = nil; local gold, silver, copper; if ( ( moneyVal ) and ( moneyVal > 0 ) ) then if ( moneyVal > 9999 ) then gold = ( moneyVal / 10000 ); gold = string.format("%d", gold); moneyVal = moneyVal - ( gold * 10000 ); else gold = 0; end if ( moneyVal > 99 ) then silver = ( moneyVal / 100 ); silver = string.format("%d", silver); moneyVal = moneyVal - ( silver * 100 ); else silver = 0; end copper = moneyVal; moneyTxt = string.format("%dg %ds %dc", gold, silver, copper); end return moneyTxt; end function NuN_SaveOpen() if ( NuNFrame:IsVisible() ) then NuN_WriteNote(); end if ( NuNGNoteFrame:IsVisible() ) then NuNGNote_WriteNote(); end end function NuN_TextEscape(lFrame, lText) if ( NuNSettings[pKey].bHave ) then lText:ClearFocus(); if ( ( lText:GetText() == nil ) or ( lText:GetText() == "" ) ) then lText:SetText("\n"); end else HideUIPanel(lFrame); end end function NuN_OverTTCheckBox_OnClick() if ( NuN_OverTTCheckBox:GetChecked() ) then NuNSettings[pKey].minOver = "1"; else NuNSettings[pKey].minOver = nil; end end function NuN_AutoPartyCheckBox_OnClick() if ( NuN_AutoPartyCheckBox:GetChecked() ) then NuNSettings[pKey].autoP = "1"; NuN_ProcessParty(); else NuNSettings[pKey].autoP = nil; end end function NuN_BehaveCheckBox_OnClick() if ( NuN_BehaveCheckBox:GetChecked() ) then NuNSettings[pKey].bHave = "1"; else NuNSettings[pKey].bHave = nil; end end function NuN_DeleteNote(dType) if ( NuNcDeleteFrame:IsVisible() ) then NuNcDeleteFrame:Hide(); end NuNcDeleteFrame.type = dType; if ( dType == "Contact" ) then NuNcDeleteLabel:SetText(NUN_CONTACT_TXT.." :\n"..c_name); ShowUIPanel(NuNcDeleteFrame); NuNText:ClearFocus(); NuNcDeleteGhostTextBox:SetFocus(); else if ( NuNGNoteFrame.fromQuest ) then NuNcDeleteLabel:SetText(NUN_QUEST_NOTE.." :\n"..c_note); else NuNcDeleteLabel:SetText(NUN_GENERAL_TXT.." :\n"..c_note); end ShowUIPanel(NuNcDeleteFrame); NuNGNoteTextScroll:ClearFocus(); NuNcDeleteGhostTextBox:SetFocus(); end end function NuNcDeleteButton_OnClick() if ( NuNcDeleteFrame.type == "Contact" ) then HideUIPanel(NuNcDeleteFrame); NuN_Delete(); elseif ( NuNcDeleteFrame.type == "General" ) then HideUIPanel(NuNcDeleteFrame); NuNGNote_Delete(); end end function NuN_LocStrip(locData) if ( locData ) then local p = string.find(locData, " : "); if ( p ) then locData = string.sub(locData, (p+3)); end end return locData; end function NuN_MapNote(MNType, MNxtra1, MNxtra2, MNColour) local MNCont, MNZone, x, y; local checknote = nil; local nKey = nil; if ( ( MetaMapNotes_OnLoad ) or ( MapNotes_OnLoad ) ) then else return; end MNCont, MNZone, x, y, checknote, nKey = NuN_GetMapNotesKey(); if ( ( not MNCont ) or ( ( x == 0 ) and ( y == 0 ) ) ) then if ( MetaMapNotes_OnLoad ) then MetaMap_StatusPrint(METAMAPNOTES_QUICKNOTE_NOPOSITION); elseif ( MapNotes_OnLoad ) then MapNotes_StatusPrint(MAPNOTES_QUICKNOTE_NOPOSITION); end return; end local MNLine1, MNLine2, MNAuthor, NuN_Reaction; local MNName; local tName = UnitName("target"); if ( ( MNType == "Target" ) and ( tName ) and ( not UnitPlayerControlled("target") ) ) then NuN_Reaction = UnitReaction("player", "target"); if ( not MNColour ) then if ( NuN_Reaction < 4 ) then MNColour = 1; elseif ( NuN_Reaction == 4 ) then MNColour = 0; end end MNName = UnitName("target"); else MNName = c_note; end if ( not MNColour ) then MNColour = 3; end local theData; if ( MetaMapNotes_OnLoad ) then theData = MetaMapNotes_Data[MNCont]; elseif ( MapNotes_OnLoad ) then theData = MapNotes_Data[MNCont]; end if (checknote) then if ( ( inBG ) and ( MNName == theData[checknote].name ) ) then NuN_ReLinkMapNote(MNName, MNCont, MNZone, checknote); return; elseif ( ( not inBG ) and ( MNName == theData[MNZone][checknote].name ) ) then NuN_ReLinkMapNote(MNName, MNCont, MNZone, checknote); return; end local mergeFailed = NuN_MergeMapNote(MNCont, MNZone, checknote, MNName, nKey, MNxtra1, MNxtra2); if ( mergeFailed ) then local repName; if ( inBG ) then repName = theData[checknote].name; else repName = theData[zone][checknote].name; end if ( MetaMapNotes_OnLoad ) then MetaMap_StatusPrint( format(METAMAPNOTES_QUICKNOTE_NOTETONEAR, repName)); elseif ( MapNotes_OnLoad ) then MapNotes_StatusPrint( format(MAPNOTES_QUICKNOTE_NOTETONEAR, repName)); end NuN_Message( NUN_MAX_MERGED ); end else MNLine1 = MNxtra1; MNLine2 = MNxtra2; MNAuthor = "NotesUNeed - "..pName; NuN_WriteMapNote(MNCont, MNZone, x, y, MNColour, MNName, MNLine1, MNLine2, MNAuthor); end end function NuN_ReLinkMapNote(MNName, MNCont, MNZone, tmpID) local NuN_Key = MNCont.."-"..MNZone.."-"..tmpID; if ( not NuNData[mrgIndex] ) then NuNData[mrgIndex] = {}; end if ( not NuNData[mrgIndex][NuN_Key] ) then NuNData[mrgIndex][NuN_Key] = {}; NuNData[mrgIndex][NuN_Key].noteCounter = 0; end if ( NuNData[mrgIndex][NuN_Key][MNName] ) then NuN_Message(NUN_NOTESUNEED_INFO); return; end if ( not NuNData[mrgIndex][NuN_Key].noteCounter ) then NuNData[mrgIndex][NuN_Key].noteCounter = 0; end NuNData[mrgIndex][NuN_Key].noteCounter = NuNData[mrgIndex][NuN_Key].noteCounter + 1; NuNData[mrgIndex][NuN_Key][MNName] = "1"; if ( MetaMapNotes_OnLoad ) then NuN_Message("NotesUNeed <> MetaMapNote"); elseif ( MapNotes_OnLoad ) then NuN_Message("NotesUNeed <> MapNote"); end end function NuN_MergeMapNote(MNCont, MNZone, id, MNName, NuN_Key, MNxtra1, MNxtra2) local Merged = nil; local MNLine1, MNLine2, MNAuthor; local mrgEntry = nil; local oriNote; local mapNoted = true; local theData; if ( MetaMapNotes_OnLoad ) then if ( inBG ) then theData = MetaMapNotes_Data[MNCont]; else theData = MetaMapNotes_Data[MNCont][MNZone]; end elseif ( MapNotes_OnLoad ) then if ( inBG ) then theData = MapNotes_Data[MNCont]; else theData = MapNotes_Data[MNCont][MNZone]; end else return; end oriNote = theData[id].name; if ( not string.find(oriNote, MNName) ) then mapNoted = nil; end if ( not NuNData[mrgIndex] ) then NuNData[mrgIndex] = {}; end if ( not NuNData[mrgIndex][NuN_Key] ) then NuNData[mrgIndex][NuN_Key] = {}; else mrgEntry = true; end if ( mrgEntry ) then if ( not NuNData[mrgIndex][NuN_Key].noteCounter ) then local counter = 0; local index, value; for index, value in NuNData[mrgIndex][NuN_Key] do counter = counter + 1; end NuNData[mrgIndex][NuN_Key].noteCounter = counter; end if ( NuNData[mrgIndex][NuN_Key].noteCounter > 4 ) then return "Failed"; end if ( NuNData[mrgIndex][NuN_Key][MNName] ) then return nil; else NuNData[mrgIndex][NuN_Key].noteCounter = NuNData[mrgIndex][NuN_Key].noteCounter + 1; NuNData[mrgIndex][NuN_Key][MNName] = "1"; end elseif ( mapNoted ) then NuN_ReLinkMapNote(MNName, MNCont, MNZone, id); else if ( ( not NuNData[Notes][oriNote] ) and ( not NuNData[pKey][Notes][oriNote] ) ) then NuNData[mrgIndex][NuN_Key].noteCounter = 1; NuNData[mrgIndex][NuN_Key][MNName] = "1"; else NuNData[mrgIndex][NuN_Key].noteCounter = 2; NuNData[mrgIndex][NuN_Key][MNName] = "1"; NuNData[mrgIndex][NuN_Key][oriNote] = "1"; end end if ( not mapNoted ) then theData[id].name = theData[id].name.." | "..MNName; theData[id].inf1 = theData[id].inf1.." | "..MNxtra1; theData[id].inf2 = theData[id].inf2.." | "..MNxtra2; theData[id].creator = NUN_POPUP_TITLE.." - "..pName; end if ( MetaMapNotes_OnLoad ) then MetaMap_StatusPrint( format(NUN_MERGING.." "..theData[id].name) ); elseif ( MapNotes_OnLoad ) then MapNotes_StatusPrint( format(NUN_MERGING.." "..theData[id].name) ); end return nil; end function NuN_WriteMapNote(MNCont, MNZone, x, y, MNColour, MNName, MNLine1, MNLine2, MNAuthor) local id = 0; local NuN_Key; local theData, theMiniData; local NuN_SetNextAsMiniNote; local numNotes, i, j, tmpID; if ( MetaMapNotes_OnLoad ) then if ( inBG ) then theData = MetaMapNotes_Data[MNCont]; else theData = MetaMapNotes_Data[MNCont][MNZone]; end theMiniData = MetaMapNotes_MiniNote_Data; NuN_SetNextAsMiniNote = MetaMapNotes_SetNextAsMiniNote; numNotes = MetaMapNotes_NotesPerZone; i = MetaMapNotes_GetZoneTableSize(theData); elseif ( MapNotes_OnLoad ) then if ( inBG ) then theData = MapNotes_Data[MNCont]; else theData = MapNotes_Data[MNCont][MNZone]; end theMiniData = MapNotes_MiniNote_Data; NuN_SetNextAsMiniNote = MapNotes_SetNextAsMiniNote; numNotes = MapNotes_NotesPerZone; i = 0; for j, value in MapNotes_Data[MNCont][MNZone] do i = i + 1; end else return; end if (NuN_SetNextAsMiniNote ~= 2) then if (i < numNotes) then tmpID = i + 1; theData[tmpID] = {}; theData[tmpID].name = MNName; theData[tmpID].ncol = 0; theData[tmpID].inf1 = MNLine1; theData[tmpID].in1c = 0; theData[tmpID].inf2 = MNLine2; theData[tmpID].in2c = 0; theData[tmpID].creator = MNAuthor; theData[tmpID].icon = MNColour; theData[tmpID].xPos = x; theData[tmpID].yPos = y; if ( MetaMapNotes_OnLoad ) then MetaMap_StatusPrint(format(METAMAPNOTES_QUICKNOTE_OK, GetRealZoneText())); else MapNotes_StatusPrint(format(MAPNOTES_QUICKNOTE_OK, GetRealZoneText())); end NuN_Key = MNCont.."-"..MNZone.."-"..tmpID; if ( not NuNData[mrgIndex] ) then NuNData[mrgIndex] = {}; end if ( not NuNData[mrgIndex][NuN_Key] ) then NuNData[mrgIndex][NuN_Key] = {}; end NuNData[mrgIndex][NuN_Key].noteCounter = 1; NuNData[mrgIndex][NuN_Key][MNName] = "1"; else if ( MetaMapNotes_OnLoad ) then MetaMap_StatusPrint(format(METAMAPNOTES_QUICKNOTE_TOOMANY, GetRealZoneText())); elseif ( MapNotes_OnLoad ) then MapNotes_StatusPrint(format(MAPNOTES_QUICKNOTE_TOOMANY, GetRealZoneText())); end end end if (NuN_SetNextAsMiniNote ~= 0) then theMiniData.xPos = x; theMiniData.yPos = y; theMiniData.MNCont = MNCont; theMiniData.MNZone = MNZone; theMiniData.id = id; theMiniData.name = MNName; theMiniData.color = 0; theMiniData.icon = MNColour; MiniNotePOITexture:SetTexture("Interface\\AddOns\\MapNotes\\POIIcons\\Icon"..MNColour); MiniNotePOI:Show(); if ( MetaMapNotes_OnLoad ) then MetaMapNotes_SetNextAsMiniNote = 0; MetaMap_StatusPrint(METAMAPNOTES_SETMININOTE.." - "..MNName); elseif ( MapNotes_OnLoad ) then MapNotes_SetNextAsMiniNote = 0; MapNotes_StatusPrint(MAPNOTES_SETMININOTE.." - "..MNName); end end end function NuN_GetMapNotesKey() local id = nil; local nKey = nil; local x, y; local MNCont = nil; local MNZone = nil; inBG = false; SetMapToCurrentZone(); MNCont = GetCurrentMapContinent(); if ( MetaMapNotes_OnLoad ) then if ( MNCont == -1 ) then if ( not MetaMapNotes_Data[GetRealZoneText()] ) then MetaMapNotes_Data[GetRealZoneText()] = {}; end MNCont = GetRealZoneText(); MNZone = 0; inBG = true; else MNZone = MetaMapNotes_ZoneShift[MNCont][GetCurrentMapZone()]; if ( not MetaMapNotes_Data[MNCont][MNZone] ) then MetaMapNotes_Data[MNCont][MNZone] = {}; end end elseif ( MapNotes_OnLoad ) then if ( MNCont == -1 ) then if ( not MapNotes_Data[GetRealZoneText()] ) then MapNotes_Data[GetRealZoneText()] = {}; end MNCont = GetRealZoneText(); MNZone = 0; inBG = true; else MNZone = MapNotes_ZoneShift[MNCont][GetCurrentMapZone()]; if ( not MapNotes_Data[MNCont][MNZone] ) then MapNotes_Data[MNCont][MNZone] = {}; end end end x, y = GetPlayerMapPosition("player"); if ( ( ( x == 0 ) and ( y == 0 ) ) or ( MNCont == 0 ) ) then return nil; end if ( inBG ) then id = NuN_ProximityCheck(MNCont, x, y); elseif ( MetaMapNotes_OnLoad ) then id = MetaMapNotes_CheckNearNotes(MNCont, MNZone, x, y); elseif ( MapNotes_OnLoad ) then id = MapNotes_CheckNearNotes(MNCont, MNZone, x, y); end if ( id ) then nKey = MNCont.."-"..MNZone.."-"..id; end return MNCont, MNZone, x, y, id, nKey; end function NuN_ProximityCheck(theBG, xPos, yPos) local chkData = {}; local minDiff; local chkData = {}; if ( MetaMapNotes_OnLoad ) then chkData = MetaMapNotes_Data[theBG]; minDiff = MetaMapNotes_MinDiff; elseif ( MapNotes_OnLoad ) then chkData = MapNotes_Data[theBG]; minDiff = MapNotes_MinDiff; end if ( ( not minDiff ) or ( minDiff == 0 ) ) then minDiff = 7; end if ( not chkData ) then return; end local i = 1; for j, value in chkData do local deltax = abs(chkData[i].xPos - xPos); local deltay = abs(chkData[i].yPos - yPos); if(deltax <= 0.0009765625 * minDiff and deltay <= 0.0013020833 * minDiff) then return i; end i = i + 1; end return nil; end function NuN_AutoMapCheckBox_OnClick() if ( NuN_AutoMapCheckBox:GetChecked() ) then NuNSettings[pKey].autoMapNotes = "1"; else NuNSettings[pKey].autoMapNotes = nil; end end function NuN_AutoMapCheckBox_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_MAPCHECK_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_MAPCHECK_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_MAPCHECK_TXT3, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_MAPCHECK_TXT4, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_MAPCHECK_TXT5, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_HyperButton_OnClick(nType) local p1, p2; local linkA = {}; local aCounter = 0; local lText, lTextLen; if ( nType == "Contact" ) then lText = NuNText:GetText(); elseif ( nType == "General" ) then lText = NuNGNoteTextScroll:GetText(); else NuN_Message(NUN_LINKFAILURE); return; end lTextLen = string.len(lText); p1 = string.find(lText, "|Hitem"); while ( ( p1 ) and ( p1 > 10 ) ) do p2 = string.find(lText, "|h|r", p1); if ( ( not p2 ) or ( (p2+3) > lTextLen ) ) then break; end p1 = p1 - 10; p2 = p2 + 3; local link = string.sub(lText, p1, p2); aCounter = aCounter + 1; linkA[aCounter] = link; p1 = string.find(lText, "|Hitem", (p2+1)); end local loops = getn(linkA); if ( loops ) and ( loops > 0 ) then for i=1, loops, 1 do DEFAULT_CHAT_FRAME:AddMessage(linkA[i]); end else NuN_Message(NUN_NOLINKS); end end function NuN_HyperButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_TOPRIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_TOPLEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_HYPERLINKS_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_HYPERLINKS_TXT2, 0, 1, 0); NuN_Tooltip:AddLine(NUN_TT_HYPERLINKS_TXT3, 0, 1, 0); NuN_Tooltip:Show(); end end function NuNPopup_OnClick(bttn, noteN) if ( IsAltKeyDown() ) then if ( bttn == "LeftButton" ) then HideUIPanel(WorldMapFrame); if ( NuNGNoteFrame:IsVisible() ) then if ( c_note == noteN ) then return; end NuNGNoteFrame:Hide(); end NuNGNoteFrame.fromQuest = nil; c_note = noteN; NuN_ShowSavedGNote(); elseif ( bttn == "RightButton" ) then NuN_DeleteMapIndexNote(NuNPopup.id, noteN); end end end function NuNPopup_OnShow() popUpHide = nil; end function NuNPopup_OnUpdate(arg1) popUpTimeSinceLastUpdate = popUpTimeSinceLastUpdate + arg1; if ( popUpTimeSinceLastUpdate > popUpUpdateInterval ) then if ( ( popUpHide ) and ( not MouseIsOver(NuNPopup) ) ) then NuNPopup:Hide(); end popUpTimeSinceLastUpdate = 0; end end function NuN_Message(msg) msg = "NotesUNeed : "..msg; if DEFAULT_CHAT_FRAME then DEFAULT_CHAT_FRAME:AddMessage(msg, 0.64, 0.21, 0.93); end end function NuN_UpdateMapNotesIndex(deletedNote) local MNindex, MNvalue, nIndex, nValue; for MNindex, MNvalue in NuNData[mrgIndex] do for nIndex, nValue in NuNData[mrgIndex][MNindex] do if ( nIndex == deletedNote ) then NuNData[mrgIndex][MNindex][nIndex] = nil; NuNData[mrgIndex][MNindex].noteCounter = NuNData[mrgIndex][MNindex].noteCounter - 1; break; end if ( NuNData[mrgIndex][MNindex].noteCounter < 1 ) then NuNData[mrgIndex][MNindex] = nil; end end end end function NuN_PreDeleteMapIndex(id, cont, zone) local nKey, lstKey, curZ, lstEntry; if ( MetaMapNotes_OnLoad ) then curZ = MetaMapNotes_Data; elseif ( MapNotes_OnLoad ) then curZ = MapNotes_Data; end if ( ( not cont ) or ( cont < 1 ) or ( not zone ) or ( zone < 1 ) ) then cont = GetCurrentMapContinent(); if ( cont == -1 ) then cont = GetRealZoneText(); zone = 0; curZ = curZ[cont]; elseif ( cont == 0 ) then return 0, 0, 0; else if ( MetaMapNotes_OnLoad ) then zone = MetaMapNotes_ZoneShift[cont][GetCurrentMapZone()]; elseif ( MapNotes_OnLoad ) then zone = MapNotes_ZoneShift[cont][GetCurrentMapZone()]; end if ( ( not zone ) or ( zone < 1 ) ) then return 0, 0, 0; end curZ = curZ[cont][zone]; end end lstEntry = NuN_GetZoneTableSize(curZ); return cont, zone, lstEntry; end -- Called when a MapNote is deleted function NuN_DeleteMapIndex(id, cont, zone, lstEntry) local nKey = cont.."-"..zone.."-"..id; local lstKey = cont.."-"..zone.."-"..lstEntry; if ( NuNData[mrgIndex][nKey] ) then NuNData[mrgIndex][nKey] = nil; end if ( ( lstEntry ~= 0 ) and ( nKey ~= lstKey ) and ( NuNData[mrgIndex][lstKey] ) ) then local index, value; NuNData[mrgIndex][nKey] = {}; for index, value in NuNData[mrgIndex][lstKey] do NuNData[mrgIndex][nKey][index] = NuNData[mrgIndex][lstKey][index]; end NuNData[mrgIndex][lstKey] = nil; end end -- Called when Alt-Right Clicking on a button in the Popup to remove a single NuN - MapNote link function NuN_DeleteMapIndexNote(id, noteN) local cont = GetCurrentMapContinent(); if ( cont == -1 ) then cont = GetRealZoneText(); zone = 0; elseif ( cont == 0 ) then return; else if ( MetaMapNotes_OnLoad ) then zone = MetaMapNotes_ZoneShift[cont][GetCurrentMapZone()]; elseif ( MapNotes_OnLoad ) then zone = MapNotes_ZoneShift[cont][GetCurrentMapZone()]; end if ( ( not zone ) or ( zone < 1 ) ) then return; end end local nKey = cont.."-"..zone.."-"..id; if ( ( NuNData[mrgIndex][nKey] ) and ( NuNData[mrgIndex][nKey][noteN] ) ) then NuNData[mrgIndex][nKey][noteN] = nil; NuNData[mrgIndex][nKey].noteCounter = NuNData[mrgIndex][nKey].noteCounter - 1; if ( NuNData[mrgIndex][nKey].noteCounter < 1 ) then NuNData[mrgIndex][nKey] = nil; end end WorldMapTooltip:Hide(); NuNPopup:Hide(); NuN_MapTooltip:Hide(); end function NuN_MapIndexHouseKeeping() local MNindex, MNvalue; if ( ( MetaMapNotes_OnLoad ) and ( MapNotes_OnLoad ) ) then return; end for MNindex, MNvalue in NuNData[mrgIndex] do local valid = NuN_ExtractMapNotesInfo(MNindex); if ( not valid ) then NuNData[mrgIndex][MNindex] = nil; end end end function NuN_ExtractMapNotesInfo(nKey) local cont, zone, id; local sep = "-"; local p, q; p = string.find(nKey, sep); if ( not p ) then return nil; end q = string.find(nKey, sep, (p+1)); if ( not q ) then return nil; end cont = tonumber( string.sub(nKey, 1, (p-1)) ); zone = tonumber( string.sub(nKey, (p+1), (q-1)) ); id = tonumber( string.sub(nKey, (q+1)) ); if ( MetaMapNotes_OnLoad ) then theData = MetaMapNotes_Data; elseif ( MapNotes_OnLoad ) then theData = MapNotes_Data; end if ( ( zone == 0 ) and ( theData[cont] ) and ( theData[cont][id] ) ) then return true; elseif ( ( theData[cont] ) and ( theData[cont][zone] ) and ( theData[cont][zone][id] ) ) then return true; else return nil; end end function NuN_ValidateMapNotesVersion() if ( MAPNOTES_VERSION ) then local MNVersion = MAPNOTES_VERSION; for i = 1, getn(NuN_MapNotesValidVersions), 1 do if ( NuN_MapNotesValidVersions[1] == MNVersion ) then return true; end end if ( NuNSettings[pKey].mapNotesPlayedVersions ) then local vs = getn(NuNSettings[pKey].mapNotesPlayedVersions); for i = 1, vs, 1 do if ( NuNSettings[pKey].mapNotesPlayedVersions[i] == MNVersion ) then return true; end end vs = vs + 1; NuNSettings[pKey].mapNotesPlayedVersions[vs] = MNVersion; else NuNSettings[pKey].mapNotesPlayedVersions = {}; NuNSettings[pKey].mapNotesPlayedVersions[1] = MNVersion; end end return nil; end function NuN_NotInfiniteIgored(ctact) ctact = string.lower(ctact); if ( ( InfinateIgnore_Config ) and ( InfinateIgnore_Config[pKey] ) and ( InfinateIgnore_Config[pKey].Ignoring ) and ( InfinateIgnore_Config[pKey].Ignoring[ctact] ) ) then return nil; end return true; end function NuN_SaveLast(saveType) NuN_LastOpen.type = saveType; if ( saveType == "Contact" ) then NuN_LastOpen.name = c_name; elseif ( saveType == "General" ) then NuN_LastOpen.note = c_note; end end function NuN_ReOpen() if ( NuN_LastOpen.type ) then if ( NuN_LastOpen.type == "Contact" ) then if ( NuNData[pKey][NuN_LastOpen.name] ) then NuN_ShowSavedNote(NuN_LastOpen.name); end elseif ( NuN_LastOpen.type == "General" ) then if ( ( NuNData[pKey][Notes][NuN_LastOpen.note] ) or ( NuNData[Notes][NuN_LastOpen.note] ) ) then c_note = NuN_LastOpen.note; NuN_ShowSavedGNote(); end end end end function NuN_RunButton_OnClick() local script = NuNGNoteTextScroll:GetText(); RunScript(script); end function NuN_RunButton_OnEnter() if ( NuNSettings[pKey].toolTips ) then NuN_Fade = "False"; local x, y = GetCursorPosition(); if ( x > 500 ) then NuN_Tooltip:SetOwner(this, "ANCHOR_RIGHT"); else NuN_Tooltip:SetOwner(this, "ANCHOR_LEFT"); end NuN_Tooltip:ClearLines(); NuN_Tooltip:AddLine(NUN_TT_RUN_TXT1, 1, 0.7, 0); NuN_Tooltip:AddLine(NUN_TT_RUN_TXT2, 0, 1, 0); NuN_Tooltip:Show(); end end function NuN_GetTipAnchor(theTT) local anchorBy, anchorTo; local x1, y1 = theTT:GetCenter(); local x2, y2 = UIParent:GetCenter(); if ( theTT == ShoppingTooltip1 ) then anchorBy = "TOPLEFT"; anchorTo = "TOPRIGHT"; return anchorBy, anchorTo; elseif ( theTT == ShoppingTooltip2 ) then anchorBy = "TOPLEFT"; anchorTo = "BOTTOMLEFT"; return anchorBy, anchorTo; end if ( ( not x1 ) or ( not y1 ) ) then anchorBy = "BOTTOMRIGHT"; anchorTo = "BOTTOMLEFT"; else if ( y1 > y2 ) then if ( x1 > x2 ) then anchorBy = "TOPRIGHT"; anchorTo = "TOPLEFT"; else anchorBy = "TOPLEFT"; anchorTo = "TOPRIGHT"; end else if ( x1 > x2 ) then anchorBy = "BOTTOMRIGHT"; anchorTo = "BOTTOMLEFT"; else anchorBy = "BOTTOMLEFT"; anchorTo = "BOTTOMRIGHT"; end end end return anchorBy, anchorTo; end -------------------------------------------------------------------------------- function NuN_LocaliseDateStamp(dateStamp) if ( ( GetLocale() ~= "enUS" ) and ( NUN_DAY_LIST ) and ( NUN_MONTH_LIST ) ) then dateStamp = string.gsub(dateStamp, "Monday", NUN_DAY_LIST[1]); dateStamp = string.gsub(dateStamp, "Tuesday", NUN_DAY_LIST[2]); dateStamp = string.gsub(dateStamp, "Wednesday", NUN_DAY_LIST[3]); dateStamp = string.gsub(dateStamp, "Thursday", NUN_DAY_LIST[4]); dateStamp = string.gsub(dateStamp, "Friday", NUN_DAY_LIST[5]); dateStamp = string.gsub(dateStamp, "Saturday", NUN_DAY_LIST[6]); dateStamp = string.gsub(dateStamp, "Sunday", NUN_DAY_LIST[7]); dateStamp = string.gsub(dateStamp, "January", NUN_MONTH_LIST[1]); dateStamp = string.gsub(dateStamp, "February", NUN_MONTH_LIST[2]); dateStamp = string.gsub(dateStamp, "March", NUN_MONTH_LIST[3]); dateStamp = string.gsub(dateStamp, "April", NUN_MONTH_LIST[4]); dateStamp = string.gsub(dateStamp, "May", NUN_MONTH_LIST[5]); dateStamp = string.gsub(dateStamp, "June", NUN_MONTH_LIST[6]); dateStamp = string.gsub(dateStamp, "July", NUN_MONTH_LIST[7]); dateStamp = string.gsub(dateStamp, "August", NUN_MONTH_LIST[8]); dateStamp = string.gsub(dateStamp, "September", NUN_MONTH_LIST[9]); dateStamp = string.gsub(dateStamp, "October", NUN_MONTH_LIST[10]); dateStamp = string.gsub(dateStamp, "November", NUN_MONTH_LIST[11]); dateStamp = string.gsub(dateStamp, "December", NUN_MONTH_LIST[12]); end return dateStamp; end -------------------------------------------------------------------------------- function NuN_LangPatch(langDirection) local toDeutschAR = { 4, 1, 2, 3 } local toDeutschHC = { 1, 3, 5, 6, 8, 7, 2, 4 } local toDeutschAC = { 1, 3, 5, 6, 7, 8, 2, 4 } local toDeutschP = { 1, 12, 13, 14, 15, 16, 18, 3, 4, 5, 6, 8, 9, 10, 11, 2, 7, 17 } local index, value; if ( NuNData[pKey] ) then if ( langDirection == "->de" ) then for index, value in NuNData[pKey] do if ( NuNData[pKey][index].faction ) then if ( NuNData[pKey][index].faction == "Horde" ) then if ( NuNData[pKey][index].cls ) then NuNData[pKey][index].cls = toDeutschHC[NuNData[pKey][index].cls]; end else if ( NuNData[pKey][index].race ) then NuNData[pKey][index].race = toDeutschAR[NuNData[pKey][index].race]; end if ( NuNData[pKey][index].cls ) then NuNData[pKey][index].cls = toDeutschAC[NuNData[pKey][index].cls]; end end if ( NuNData[pKey][index].prof1 ) then NuNData[pKey][index].prof1 = toDeutschP[NuNData[pKey][index].prof1]; end if ( NuNData[pKey][index].prof2 ) then NuNData[pKey][index].prof2 = toDeutschP[NuNData[pKey][index].prof2]; end end end elseif ( langDirection == "->en" ) then for index, value in NuNData[pKey] do if ( NuNData[pKey][index].faction ) then if ( NuNData[pKey][index].faction == "Horde" ) then if ( NuNData[pKey][index].cls ) then NuNData[pKey][index].cls = NuNGet_TableID(toDeutschHC, NuNData[pKey][index].cls); end else if ( NuNData[pKey][index].race ) then NuNData[pKey][index].race = NuNGet_TableID(toDeutschAR, NuNData[pKey][index].race); end if ( NuNData[pKey][index].cls ) then NuNData[pKey][index].cls = NuNGet_TableID(toDeutschAC, NuNData[pKey][index].cls); end end if ( NuNData[pKey][index].prof1 ) then NuNData[pKey][index].prof1 = NuNGet_TableID(toDeutschP, NuNData[pKey][index].prof1); end if ( NuNData[pKey][index].prof2 ) then NuNData[pKey][index].prof2 = NuNGet_TableID(toDeutschP, NuNData[pKey][index].prof2); end end end end end end