vanilla-wow-addons – Rev 1
?pathlinks?
-- BGAssist
-- Copyright 2005 original author. Copyright is expressly not transferred to Blizzard.
--
-- Battleground helper functionality
--
-- Author: Marc aka Saien on Hyjal
-- WoWSaien@gmail.com
-- http://64.168.251.69/wow
--
-- Changes:
-- 2006.01.03
-- Updated to 1.9 TOC
-- Updated to supported multiple BG Queues.
-- Auto Join will not auto join if you're already in another BG.
-- AFK works like this: When you zone in to a BG, you lose your AFK but
-- are almost immediately reflagged. This zones you out, losing your space
-- in the queue. This is verified as of 1.9. Due to this, Autojoin will
-- once again not join when AFK.
-- 2005.10.10
-- Due to Blizzard changes, Autojoin will again join when you're AFK.
-- Autorez in BG option removed as it has been implemented by Blizzard
-- 2005.09.13
-- TOC change to 1700 and adjust to 1.7 changes
-- Arathi Basin timers work.
-- Timers have been changed to match the mainmap colors. Timer will show the color
-- of the attacking faction. This is opposite previous versions.
-- To avoid group-bug problems, Autoleave group leaves the group at the win/loss screen.
-- If you /afk out it will still leave the group after you zone.
-- WSG/AB: Config option to not autojoin instances that exist at the time you queue up.
-- 2005.09.03
-- Will no longer popup an error when more than 10 targets are to be displayed on target list
-- Target list will show/hide when checking/unchecking the config option immediately,
-- not just when you zone.
-- 2005.08.24
-- Alliance sites being captured now are cyan in the timer. Dark blue just too hard to see.
-- Timer countdowns will now only show the first word of the name.
-- Fixed bug causing error popup in AV.
-- Option to autoaccept group invites when in a BG
-- Option to autoleave your group when leaving BG
-- Will not auto enter BG when dead or ghost.
-- Fixed Slidore's quest name -again-. Hey, I'm horde and can't test it
-- 2005.08.13
-- Class breakdown on score window.
-- Targetting assistance window. See web.
-- Fixed typo in Sildore's quest name.
-- Warsong Gulch: Flag carrier named onscreen now. Needs translations for
-- filthy foreigners to work.
-- German updates, though quests need more work for autocomplete. Frogs are mostly done now, except for new stuff.
-- 2005.07.19
-- Will not autoenter if you're AFK
-- French localization partially in place. Still requires update, German is
-- completly undone. Note that quest turnins will not work unless setup for
-- your language properly. As I speak neither language (and proud of it) this
-- is all on your shoulders, not mine.
-- Rez timer in place. Might not be entirely accurate (based on your network lag)
-- and won't start counting down until you die once after zoning in.
-- Checkmark for not showing the window at zonein was being set backwards.
-- 2007.07.15-2
-- Unnecessary zone restriction on autorez removed (aka Should work in Gulch now)
-- 2005.07.15
-- Auto release in BG
-- Keybinding to toggle window on or off regardless of in BG or not
-- Config option to not turn window on when entering BG
-- Player per faction counts are unncessary now.
--
BGASSIST_VERSION = "2006.01.03";
BINDING_HEADER_BGASSIST_SEP = "BGAssist";
BINDING_NAME_BGASSIST_TOGGLE = "Toggle BGAssist Window";
local BGAssist_ItemTrack = {
[17422] = "INV_Shoulder_19", -- "Armor Scraps"
-- Horde
[17306] = "INV_Potion_50", -- "Stormpike Soldier's Blood"
[17642] = "INV_Misc_Pelt_Bear_02", -- "Alterac Ram Hide"
[18142] = "INV_Misc_Head_Elf_02", -- "Severed Night Elf Head"
[18143] = "INV_Misc_MonsterTail_02", -- "Tuft of Gnome Hair"
[18206] = "INV_Misc_Bone_03", -- "Dwarf Spine"
[18144] = "INV_Misc_Bone_07", -- "Human Bone Chip"
[17326] = "INV_Misc_Food_52", -- "Stormpike Soldier's Flesh",
[17327] = "INV_Misc_Food_72", -- "Stormpike Lieutenant's Flesh"
[17328] = "INV_Misc_Food_69", -- "Stormpike Commander's Flesh",
-- Alliance
[17423] = "INV_Misc_Gem_Pearl_06", -- "Storm Crystal"
[17643] = "INV_Misc_Pelt_Bear_02", -- "Frostwolf Hide"
[18145] = "INV_Misc_Foot_Centaur", -- "Tauren Hoof"
[18146] = "INV_Potion_82", -- "Darkspear Troll Mojo"
[18207] = "INV_Misc_Bone_08", -- "Orc Tooth"
[18147] = "INV_Misc_Organ_01", -- "Forsaken Heart"
[17502] = "INV_Jewelry_Talisman_06", -- "Frostwolf Soldier's Medal"
[17503] = "INV_Jewelry_Talisman_04", -- "Frostwolf Lieutenant's Medal"
[17504] = "INV_Jewelry_Talisman_12", -- "Frostwolf Commander's Medal"
};
local BGAssist_Alterac_Quests = {
["Irondeep Supplies"] = true,
["Coldtooth Supplies"] = true,
["Master Ryson's All Seeing Eye"] = true,
["Empty Stables"] = true, -- Wolf/Ram turnin
-- Horde
["More Booty!"] = { item = 17422, min=20 },
["Lokholar the Ice Lord"] = { item = 17306, max=4 },
["A Gallon of Blood"] = { item = 17306, min=5 },
["Ram Hide Harnesses"] = { item = 17642 },
["Darkspear Defense"] = { item = 18142 },
["Tuft it Out"] = { item = 18143 },
["Wanted: MORE DWARVES!"] = { item = 18206 },
["I've Got A Fever For More Bone Chips"]= { item = 18144 },
["Call of Air - Guse's Fleet"] = { item = 17326 },
["Call of Air - Jeztor's Fleet"] = { item = 17327 },
["Call of Air - Mulverick's Fleet"] = { item = 17328 },
-- Alliance
["More Armor Scraps"] = { item = 17422, min=20 },
["Ivus the Forest Lord"] = { item = 17423, max=4 },
["Crystal Cluster"] = { item = 17423, min=5 },
["Ram Riding Harnesses"] = { item = 17643 },
["What the Hoof?"] = { item = 18145 },
["Staghelm's Mojo Jamboree"] = { item = 18146 },
["Wanted: MORE ORCS!"] = { item = 18207 },
["One Man's Love"] = { item = 18147 },
["Call of Air - Slidore's Fleet"] = { item = 17502 },
["Call of Air - Vipore's Fleet"] = { item = 17503 },
["Call of Air - Ichman's Fleet"] = { item = 17504 },
};
local BGAssist_FlagRegexp = {
["RESET"] = { ["regexp"] = "The flags are now placed at their bases." },
["PICKED"] = { ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) [fF]lag was picked up by ([^!]*)!" },
["DROPPED"] = { ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) [fF]lag was dropped by ([^!]*)!" },
["RETURNED"] ={ ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) [fF]lag was returned to its base by ([^!]*)!" },
["CAPTURED"] ={ ["one"] = "PLAYER", ["two"] = "FACTION",
["regexp"] = "([^ ]*) captured the ([^ ]*) flag!" },
};
local ALTERACVALLEY = "Alterac Valley";
local WARSONGGULCH = "Warsong Gulch";
local ARATHIBASIN = "Arathi Basin";
local DISPLAY_MENU_LOCKWINDOW = "Lock Window Position";
local DISPLAY_MENU_AUTOSHOW = "Auto Show Window when Entering BG";
local DISPLAY_MENU_AUTORELEASE = "Auto Release in BG";
local DISPLAY_MENU_AUTOQUEST = "Auto Confirm Quests";
local DISPLAY_MENU_AUTOENTER = "Auto Enter BG";
local DISPLAY_MENU_AUTOSIGNUP = "Auto Signup for BG";
local DISPLAY_MENU_TIMERSHOW = "Show Capture Timers";
local DISPLAY_MENU_ITEMSHOW = "Show BG Item Counts";
local DISPLAY_MENU_GYCOUNTDOWN = "Show Timer for GY Rezzing";
local DISPLAY_MENU_FLAGTRACKING = "Track Flags";
local DISPLAY_MENU_TARGETTINGASSISTANCE = "Use Targetting Assistance Window";
local DISPLAY_MENU_AUTOACCEPTGROUP = "Auto accept group invites in BG";
local DISPLAY_MENU_AUTOLEAVEGROUP = "Auto leave group when leaving BG";
local DISPLAY_MENU_NOPREEXISTING = "No pre-existing instances";
local DISPLAY_MENU_SHOWCAPTUREDFLAGS = "Show flags already captured";
local DISPLAY_TITLEDISPLAY_CAPTURE = "Captures";
local DISPLAY_TITLEDISPLAY_ITEMS = "Items";
local DISPLAY_TITLEDISPLAY_TARGETS = "Targets";
local DISPLAY_TEXT_PREEXISTING = "Offered BG instance is pre-existing";
local DISPLAY_TEXT_ENTERINGBATTLEGROUNDS = "Entering Battlegrounds";
local DISPLAY_TEXT_LEFTBATTLEGROUNDS = "Left Battlegrounds";
local DISPLAY_TEXT_TIMEUNTILREZ = "Time Until Ressurection";
local DISPLAY_TEXT_TIMELEFT = "Time Left";
local DISPLAY_TEXT_SECONDS = "seconds";
local DISPLAY_TEXT_MINUTES = "minutes";
local DISPLAY_TEXT_NOTENTERINGAFK = "Not entering BG because you are AFK";
local DISPLAY_TEXT_FLAGHOLDERNOTCLOSEENOUGH = "Flag Holder not close enough to target.";
local BATTLEGROUND_GOSSIP_TEXT = "I would like to go to the battleground.";
local MATCHING_MARKED_AFK = "You are now AFK";
local MATCHING_CLEARED_AFK = "You are no longer AFK.";
local FACTION_ALLIANCE = "Alliance";
local FACTION_HORDE = "Horde";
local CLASS_WARRIOR = "Warrior";
local CLASS_MAGE = "Mage";
local CLASS_ROGUE = "Rogue";
local CLASS_DRUID = "Druid";
local CLASS_HUNTER = "Hunter";
local CLASS_SHAMAN = "Shaman";
local CLASS_PRIEST = "Priest";
local CLASS_WARLOCK = "Warlock";
local CLASS_PALADIN = "Paladin"
if ( GetLocale() == "frFR" ) then
-- Mail updates to WoWSaien@gmail.com
-- DISPLAY_xxx variables can be anything you want to display
-- EVERYTHING ELSE MUST MATCH THE GAME
BINDING_NAME_BGASSIST_TOGGLE = "Toggle BGAssist Window";
BGAssist_Alterac_Quests = {
["Fournitures d'Irondeep"] = true,
["Fournitures de Coldtooth"] = true,
["L'Oeil qui voit tout de maître Ryson"] = true,
["Ecuries vides"] = true,
-- Horde
["Plus de butin !"] = { item = 17422, min=20 },
["Lokholar le Seigneur des Glaces"] = { item = 17306, max=4 },
["Quelques litres de sang"] = { item = 17306, min=5 },
["Harnais en cuir de bélier"] = { item = 17642 },
["La défense des Darkspear"] = { item = 18142 },
["Pour une poignée de cheuveux"] = { item = 18143 },
["On recherche : PLUS DE NAINS !"] = { item = 18206 },
["I've Got A Fever For More Bone Chips"]= { item = 18144 },
["L'appel des airs - l'escadrille de Guse"] = { item = 17326 },
["L'appel des airs - l'escadrille de Jeztor"] = { item = 17327 },
["L'appel des airs - l'escadrille de Mulverick"]= { item = 17328 },
-- Alliance
["Plus de morceaux d'armure !"] = { item = 17422, min=20 },
["Ivus le Seigneur des for\195\170ts"] = { item = 17423, max=4 },
["Crystal Cluster"] = { item = 17423, min=5 },
["Harnais pour b\195\169liers"] = { item = 17643 },
["Chasse aux sabots !"] = { item = 18145 },
["La collection de mojos de Staghelm"] = { item = 18146 },
["On recherche : PLUS D'ORCS !"] = { item = 18207 },
["L'amour d'un homme"] = { item = 18147 },
["L'appel des airs - l'escadrille de Slidore"] = { item = 17502 },
["L'appel des airs - l'escadrille de Vipore"] = { item = 17503 },
["L'appel des airs - l'escadrille d'Ichman"] = { item = 17504 },
};
BGAssist_FlagRegexp = {
["RESET"] = { ["regexp"] = "The flags are now placed at their bases." },
["PICKED"] = { ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) flag was picked up by ([^!]*)!" },
["DROPPED"] = { ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) flag was dropped by ([^!]*)!" },
["RETURNED"] ={ ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) flag was returned to its base by ([^!]*)!" },
["CAPTURED"] ={ ["one"] = "PLAYER", ["two"] = "FACTION",
["regexp"] = "([^ ]*) captured the ([^ ]*) flag!" },
};
ALTERACVALLEY = "Vall\195\169e d'Alterac";
WARSONGGULCH = "Goulet des Warsong";
ARATHIBASIN = "Arathi Basin";
DISPLAY_MENU_LOCKWINDOW = "Verrouiller la position de la fen\195\170tre de BGAssist";
DISPLAY_MENU_AUTOSHOW = "Afficher automatiquement la fen\195\170tre de BGAssist dans le BG";
DISPLAY_MENU_AUTORELEASE = "R\195\169surrection automatique au cimeti\195\168re";
DISPLAY_MENU_AUTOQUEST = "Confirmer automatiquement les qu\195\170tes";
DISPLAY_MENU_AUTOENTER = "Entrer automatiquement dans le BG";
DISPLAY_MENU_TIMERSHOW = "Afficher le temps de capture des cimeti\195\168res et des tours";
DISPLAY_MENU_ITEMSHOW = "Afficher le nombre d'items de qu\195\170tes que vous poss\195\169dez";
DISPLAY_MENU_GYCOUNTDOWN = "Afficher le temps restant avant r\195\169surrection au cimeti\195\168re";
DISPLAY_MENU_FLAGTRACKING = "Track Flags";
DISPLAY_MENU_TARGETTINGASSISTANCE = "Targetting Assistance Window";
DISPLAY_MENU_AUTOACCEPTGROUP = "Auto accept group invites in BG";
DISPLAY_MENU_AUTOLEAVEGROUP = "Auto leave group when leaving BG";
DISPLAY_MENU_NOPREEXISTING = "No pre-existing instances";
DISPLAY_TITLETEXT_CAPTURE = "Capture";
DISPLAY_TITLETEXT_ITEMS = "Items";
DISPLAY_TITLEDISPLAY_TARGETS = "Targets";
DISPLAY_TEXT_ENTERINGBATTLEGROUNDS = "Vous entrez dans le BG";
DISPLAY_TEXT_LEFTBATTLEGROUNDS = "Vous quittez le BG";
DISPLAY_TEXT_TIMELEFT = "Temps restant";
DISPLAY_TEXT_SECONDS = "secondes";
DISPLAY_TEXT_MINUTES = "minutes";
DISPLAY_TEXT_NOTENTERINGAFK = "N'entre pas dans le BG pendant que vous \195\170tes ABS";
DISPLAY_TEXT_FLAGHOLDERNOTCLOSEENOUGH = "Flag Holder not close enough to target.";
DISPLAY_TEXT_PREEXISTING = "Offered BG instance is pre-existing";
BATTLEGROUND_GOSSIP_TEXT = "I would like to go to the battleground.";
MATCHING_MARKED_AFK = "You are now AFK";
MATCHING_CLEARED_AFK = "You are no longer AFK.";
FACTION_ALLIANCE = "Alliance";
FACTION_HORDE = "Horde";
CLASS_DRUID = "Druide";
CLASS_HUNTER = "Chasseur";
CLASS_MAGE = "Mage";
CLASS_PALADIN = "Paladin"
CLASS_PRIEST = "Prêtre";
CLASS_ROGUE = "Voleur";
CLASS_SHAMAN = "Chaman";
CLASS_WARRIOR = "Guerrier";
CLASS_WARLOCK = "Démoniste";
end
if ( GetLocale() == "deDE" ) then
-- Mail updates to WoWSaien@gmail.com
-- DISPLAY_xxx variables can be anything you want to display
-- EVERYTHING ELSE MUST MATCH THE GAME
BINDING_NAME_BGASSIST_TOGGLE = "BGAssist Fenster ein- oder ausblenden";
BGAssist_Alterac_Quests = {
["Irondeep-Vorr\195\164te"] = true,
["Coldtooth-Vorr\195\164te"] = true,
["Meister Rysons Allsehendes Auge"] = true,
["Verwaiste St\195\164lle"] = true, -- Wolf/Ram turnin
-- Horde
["Mehr Beute!"] = { item= 17422, min=20 },
["Lokholar der Eislord"] = { item= 17306, max=4 },
["Eine Gallone Blut"] = { item= 17306, min=5 },
["Widderledernes Zaumzeug"] = { item= 17642 },
["Verteidigung der Darkspear"] = { item= 18142 },
["Mehr Gnomhaar"] = { item= 18143 },
["Gesucht: MEHR ZWERGE"] = { item= 18206 },
["Knochensplitterjagd"] = { item= 18144 },
["Ruf der L\195\188fte - Guses Luftflotte"] = { item= 17326 },
["Ruf der L\195\188fte - Jeztors Luftflotte"] = { item= 17327 },
["Ruf der L\195\188fte - Mulvericks Luftflotte"]= { item= 17328 },
-- Alliance
["More Armor Scraps"] = { item = 17422, min=20 },
["Ivus der Waldf\195\188rst"] = { item = 17423, max=4 },
["Crystal Cluster"] = { item = 17423, min=5 },
["Ram Riding Harnesses"] = { item = 17643 },
["What the Hoof?"] = { item = 18145 },
["Staghelm's Mojo Jamboree"] = { item = 18146 },
["Gesucht: MEHR ORCS"] = { item = 18207 },
["One Man's Love"] = { item = 18147 },
["Ruf der L\195\188fte - Slidores Luftflotte"] = { item = 17502 },
["Ruf der L\195\188fte - Vipores Luftflotte"] = { item = 17503 },
["Ruf der L\195\188fte - Ichmans Luftflotte"] = { item = 17504 },
};
BGAssist_FlagRegexp = {
["RESET"] = { ["regexp"] = "The flags are now placed at their bases." },
["PICKED"] = { ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) flag was picked up by ([^!]*)!" },
["DROPPED"] = { ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) flag was dropped by ([^!]*)!" },
["RETURNED"] ={ ["one"] = "FACTION", ["two"] = "PLAYER",
["regexp"] = "The ([^ ]*) flag was returned to its base by ([^!]*)!" },
["CAPTURED"] ={ ["one"] = "PLAYER", ["two"] = "FACTION",
["regexp"] = "([^ ]*) captured the ([^ ]*) flag!" },
};
ALTERACVALLEY = "Alteractal";
WARSONGGULCH = "Warsongschlucht";
ARATHIBASIN = "Arathi Basin";
DISPLAY_MENU_LOCKWINDOW = "Fensterposition fixieren";
DISPLAY_MENU_AUTOSHOW = "Fenster automatisch anzeigen, wenn Schlachtfeld betreten wird";
DISPLAY_MENU_AUTORELEASE = "Automatisch Geist im Schlachtfeld freilassen";
DISPLAY_MENU_AUTOQUEST = "Automatisch Schlachtfeld-Quests best\195\164tigen";
DISPLAY_MENU_AUTOENTER = "Automatisch Schlachtfeld betreten";
DISPLAY_MENU_TIMERSHOW = "Eroberungs-Timer anzeigen";
DISPLAY_MENU_ITEMSHOW = "Anzahl der Schlachtfeld-Gegenst\195\164nde anzeigen";
DISPLAY_MENU_GYCOUNTDOWN = "Timer f\195\188r Wiederbelebung beim Friedhof anzeigen";
DISPLAY_MENU_FLAGTRACKING = "Track Flags";
DISPLAY_MENU_TARGETTINGASSISTANCE = "Targetting Assistance Window";
DISPLAY_MENU_AUTOACCEPTGROUP = "Auto accept group invites in BG";
DISPLAY_MENU_AUTOLEAVEGROUP = "Auto leave group when leaving BG";
DISPLAY_MENU_NOPREEXISTING = "No pre-existing instances";
DISPLAY_TITLEDISPLAY_CAPTURE = "Eroberungen";
DISPLAY_TITLEDISPLAY_ITEMS = "Gegenst\195\164nde";
DISPLAY_TITLEDISPLAY_TARGETS = "Targets";
DISPLAY_TEXT_CURRENTCOUNT = "Momentane Anzahl";
DISPLAY_TEXT_ENTERINGBATTLEGROUNDS = "Betrete Schlachtfeld";
DISPLAY_TEXT_LEFTBATTLEGROUNDS = "Verlasse Schlachtfeld";
DISPLAY_TEXT_TIMEUNTILREZ = "Zeit bis zur Wiederbelebung";
DISPLAY_TEXT_TIMELEFT = "Verbleibende Zeit";
DISPLAY_TEXT_SECONDS = "sekunden";
DISPLAY_TEXT_MINUTES = "minuten";
DISPLAY_TEXT_NOTENTERINGAFK = "Betrete das Schlachtfeld nicht, da Ihr AFK seid";
DISPLAY_TEXT_FLAGHOLDERNOTCLOSEENOUGH = "Flag Holder not close enough to target.";
DISPLAY_TEXT_PREEXISTING = "Offered BG instance is pre-existing";
BATTLEGROUND_GOSSIP_TEXT = "I would like to go to the battleground.";
MATCHING_MARKED_AFK = "You are now AFK";
MATCHING_CLEARED_AFK = "You are no longer AFK.";
FACTION_ALLIANCE = "Alliance";
FACTION_HORDE = "Horde";
CLASS_DRUID = "Druide";
CLASS_HUNTER = "J\195\164ger";
CLASS_MAGE = "Magier";
CLASS_PALADIN = "Paladin"
CLASS_PRIEST = "Priester";
CLASS_ROGUE = "Schurke";
CLASS_SHAMAN = "Schamane";
CLASS_WARRIOR = "Krieger";
CLASS_WARLOCK = "Hexenmeister";
end
-- Is stolen from Interface/GlueXML/CharacterCreate.lua
local CLASS_ICON_TCOORDS = {
[string.upper(CLASS_WARRIOR)] = {0, 0.25, 0, 0.25},
[string.upper(CLASS_MAGE)] = {0.25, 0.49609375, 0, 0.25},
[string.upper(CLASS_ROGUE)] = {0.49609375, 0.7421875, 0, 0.25},
[string.upper(CLASS_DRUID)] = {0.7421875, 0.98828125, 0, 0.25},
[string.upper(CLASS_HUNTER)] = {0, 0.25, 0.25, 0.5},
[string.upper(CLASS_PRIEST)] = {0.49609375, 0.7421875, 0.25, 0.5},
[string.upper(CLASS_WARLOCK)] = {0.7421875, 0.98828125, 0.25, 0.5},
[string.upper(CLASS_SHAMAN)] = {0.25, 0.49609375, 0.25, 0.5},
[string.upper(CLASS_PALADIN)] = {0, 0.25, 0.5, 0.75}
};
local BATTLEFIELD_INDEXES = {
[1] = ALTERACVALLEY;
[2] = WARSONGGULCH;
[3] = ARATHIBASIN;
};
local MAXTIMERS = 6;
local MAXICONS = 10;
local EVENTSINBATTLEGROUND = {
-- Bag item tracking
"BAG_UPDATE",
-- Track into quest windows for autocomplete
"QUEST_PROGRESS",
"QUEST_COMPLETE",
"QUEST_GREETING",
"QUEST_DETAIL",
-- "GOSSIP_SHOW",
-- Autorez
"AREA_SPIRIT_HEALER_IN_RANGE",
-- People counting
"UPDATE_BATTLEFIELD_SCORE",
-- Chat messages
"CHAT_MSG_MONSTER_YELL",
"CHAT_MSG_BG_SYSTEM_NEUTRAL",
"CHAT_MSG_BG_SYSTEM_ALLIANCE",
"CHAT_MSG_BG_SYSTEM_HORDE",
-- Warsaw flag tracking
"UPDATE_WORLD_STATES",
-- PARTAHHHH
"PARTY_INVITE_REQUEST",
"PARTY_MEMBERS_CHANGED",
"PARTY_LEADER_CHANGED",
-- Well duh
"PLAYER_DEAD",
};
BGAssist_Player = nil; -- global;
local BGAssist_Config_Loaded = nil;
local BGAssist_CountedPlayers = nil;
local BGAssist_Scheduled_MapCheck = nil;
local BGAssist_InBattleGround = nil;
local BGAssist_TimersActive = nil;
local BGAssist_LastTimersProc = 0;
local BGAssist_MapItems = {};
local BGAssist_TrackedItems = {};
local BGAssist_ItemInfo = {};
local BGAssist_RezSyncTime = nil;
local BGAssist_FlagLocs = { };
local BGAssist_LastUpdate = 0;
local BGAssist_MaintainingGroup = nil;
local BGAssist_PreExistingInstances = nil;
local BGAssist_InAFK = nil;
local function BGAssist_LinkDecode(link)
local id, name;
_, _, id, name = string.find(link,"|Hitem:(%d+):%d+:%d+:%d+|h%[([^]]+)%]|h|r$");
-- Only first number of itemid is significant in this.
if (id and name) then
id = id * 1;
return name, id;
end
end
local function BGAssist_BagCheck()
local bag, slot, size;
BGAssist_TrackedItems = {};
for bag = 0, 4, 1 do
if (bag == 0) then
size = 16;
else
size = GetContainerNumSlots(bag);
end
if (size and size > 0) then
for slot = 1, size, 1 do
local itemLink = GetContainerItemLink(bag,slot);
if (itemLink) then
local itemName, itemID = BGAssist_LinkDecode(itemLink);
local texture, itemCount = GetContainerItemInfo(bag,slot);
if (itemID and BGAssist_ItemTrack[itemID]) then
if (not BGAssist_TrackedItems[itemID]) then
BGAssist_TrackedItems[itemID] = 0;
end
BGAssist_ItemInfo[itemID] = {
["name"] = itemName,
["texture"] = texture;
};
BGAssist_TrackedItems[itemID] = BGAssist_TrackedItems[itemID] + itemCount;
end
end
end
end
end
if (BGAssist_Timers:IsVisible()) then
BGAssist_Timers_OnShow();
end
end
local function BGAssist_CheckMap()
local OUTOFZONEDATA = {
[1] = { "Dead Guys", "", 3 };
[2] = { "Bar", "Drink Here", 8};
[3] = { "Elves Head Point", "ELVES DIE", 11 };
[4] = { "Monkey", "Monkey", 13 };
};
local totallandmarks = GetNumMapLandmarks()
local name, description, typ, x, y;
local i;
for i = 1, totallandmarks, 1 do
name, description, typ, x, y = GetMapLandmarkInfo(i);
-- typ:
-- Alterac Valley
-- 0 = Mines, no icon
-- 1 = Horde controlled mine
-- 2 = Alliance controlled mine
-- 3 = Horde graveyard attacked by Alliance
-- 4 = Towns (Booty Bay, Stonard, etc)
-- 5 = Destroyed tower
-- 6 =
-- 7 = Uncontrolled Graveyard (Snowfall at start)
-- 8 = Horde tower attacked by Alliance
-- 9 = Horde controlled tower
-- 10 = Alliance controlled tower
-- 11 = Alliance tower attacked by Horde
-- 12 = Horde controlled graveyard
-- 13 = Alliance graveyard attacked by Horde
-- 14 = Alliance controlled graveyard
-- 15 = Garrisons/Caverns, no icon
-- Arathi Basin
-- 16 - Gold Mine - Uncontrolled
-- 17 - Gold Mine .. in conflict (Alliance capturing)
-- 18 - Gold Mine - Alliance controlled
-- 19 = Gold Mine .. in conflict (Horde capturing)
-- 20 = Gold Mine - Horde Controlled
-- 21 = Lumber Mill - Uncontrolled
-- 22 = Lumber Mill .. in conflict (Alliance capturing)
-- 23 = Lumber Mill - Alliance controlled
-- 24 = Lumber Mill .. in conflict (Horde capturing)
-- 25 = Lumber Mill - Horde Controlled
-- 26 = Blacksmith - Uncontrolled
-- 27 = Blacksmith .. in conflict (Alliance capturing)
-- 28 = Blacksmith - Alliance controlled
-- 29 = Blacksmith .. in conflict (Horde capturing)
-- 30 = Blacksmith - Horde controlled
-- 31 = Farm - Uncontrolled
-- 32 = Farm .. in conflict (Alliance capturing)
-- 33 = Farm - Alliance controlled
-- 34 = Farm .. in conflict (Horde capturing)
-- 35 = Farm - Horde controlled
-- 36 = Stables - Uncontrolled
-- 37 = Stables .. in conflict (Alliance capturing)
-- 38 = Stables - Alliance controlled
-- 39 = Stables .. in conflict (Horde capturing)
-- 40 = Stables - Horde controlled
if (not BGAssist_MapItems[name]) then BGAssist_MapItems[name] = {} end
if (typ == 11 or typ == 13 or typ == 9 or typ == 12 -- AV
or typ == 20 or typ == 25 or typ == 30 or typ == 35 or typ == 40 -- AB
or typ == 19 or typ == 24 or typ == 29 or typ == 34 or typ == 39 -- AB captures
) then
if (BGAssist_MapItems[name].owner ~= "HORDE") then
BGAssist_MapItems[name].owner = "HORDE";
BGAssist_MapItems[name].conflictstart = nil;
end
elseif (typ == 10 or typ == 3 or typ == 8 or typ == 14 -- AV
or typ == 18 or typ == 23 or typ == 28 or typ == 33 or typ == 38 -- AB
or typ == 17 or typ == 22 or typ == 27 or typ == 32 or typ == 37 -- AB captures
) then
if (BGAssist_MapItems[name].owner ~= "ALLIANCE") then
BGAssist_MapItems[name].owner = "ALLIANCE";
BGAssist_MapItems[name].conflictstart = nil;
end
elseif (typ == 0 or typ == 5 or typ == 15 -- AV
) then
BGAssist_MapItems[name].owner = nil;
end
--[[
if ( typ == 17 or typ == 22 or typ == 27 or typ == 32 or typ == 37 or -- AB
typ == 19 or typ == 24 or typ == 29 or typ == 34 or typ == 39 -- AB
) then
Debug ("UNKNOWN: ",name," = ",description," = ",typ,": ",BGAssist_MapItems[name].owner);
end
]]
if (typ == 3 or typ == 13 or typ == 8 or typ == 11) then -- AV
if (not BGAssist_MapItems[name].conflictstart) then
BGAssist_MapItems[name].conflictstart = GetTime();
BGAssist_MapItems[name].conflictduration = 300;
end
elseif (typ == 17 or typ == 22 or typ == 27 or typ == 32 or typ == 37 or
typ == 19 or typ == 24 or typ == 29 or typ == 34 or typ == 39) then
if (not BGAssist_MapItems[name].conflictstart) then
BGAssist_MapItems[name].conflictstart = GetTime();
BGAssist_MapItems[name].conflictduration = 60;
end
else
BGAssist_MapItems[name].conflictstart = nil
end
if (typ == 6 or typ > 40) then
if (Debug) then Debug ("UNKNOWN: "..name.." = "..description.." = "..typ); end
end
end
if (not BGAssist_Config.timerhide) then
BGAssist_Timers_OnShow();
end
end
function BGAssist_CountPlayers()
local players = GetNumBattlefieldScores();
if (players > 0) then
local i;
BGAssist_CountedPlayers = {
["Horde"] = {
["count"] = 0,
[CLASS_DRUID] = 0, [CLASS_HUNTER] = 0, [CLASS_MAGE] = 0,
[CLASS_PRIEST] = 0, [CLASS_ROGUE] = 0, [CLASS_SHAMAN] = 0,
[CLASS_WARRIOR] = 0, [CLASS_WARLOCK] = 0,
},
["Alliance"] = {
["count"] = 0,
[CLASS_DRUID] = 0, [CLASS_HUNTER] = 0, [CLASS_MAGE] = 0,
[CLASS_PALADIN] = 0, [CLASS_PRIEST] = 0, [CLASS_ROGUE] = 0,
[CLASS_WARRIOR] = 0, [CLASS_WARLOCK] = 0,
},
};
for i = 1, players, 1 do
_, _, _, _, _, faction, _, _, class = GetBattlefieldScore(i);
if (faction == 0) then faction = "Horde"; else faction = "Alliance"; end
BGAssist_CountedPlayers[faction].count = BGAssist_CountedPlayers[faction].count + 1;
BGAssist_CountedPlayers[faction][class] = BGAssist_CountedPlayers[faction][class] + 1;
end
local faction = { "Alliance", "Horde" };
local classes = { CLASS_WARRIOR, CLASS_MAGE, CLASS_ROGUE, CLASS_DRUID, CLASS_HUNTER,
CLASS_PRIEST, CLASS_WARLOCK, CLASS_SHAMAN };
local i, j
for i = 1, 2, 1 do
for j = 1, 8, 1 do
if (i == 1 and j == 8) then
getglobal("WorldStateScoreFrame_"..faction[i]..j.."Text"):SetText(CLASS_PALADIN..": "..BGAssist_CountedPlayers[faction[i]][CLASS_PALADIN]);
else
getglobal("WorldStateScoreFrame_"..faction[i]..j.."Text"):SetText(classes[j]..": "..BGAssist_CountedPlayers[faction[i]][classes[j]]);
end
end
end
end
end
local function BGAssist_Alterac_SelectQuest(...)
local i;
local idx = 0;
for i = 1, arg.n, 2 do
idx = idx + 1;
if (BGAssist_Alterac_Quests[arg[i]]) then
local item, min, max;
if (type(BGAssist_Alterac_Quests[arg[i]]) == "table") then
item = BGAssist_Alterac_Quests[arg[i]].item;
min = BGAssist_Alterac_Quests[arg[i]].min;
max = BGAssist_Alterac_Quests[arg[i]].max;
else
item = true;
end
if (not min or min < 1) then min = 1; end
if (not max) then max = 1000; end
local count = BGAssist_TrackedItems[item];
if (not count) then count = 0; end
if (item == true or (count >= min and count <= max)) then
if (not BGAssist_Config[BGAssist_Player].turnins[arg[i]]) then
BGAssist_Config[BGAssist_Player].turnins[arg[i]] = 0;
end
BGAssist_Config[BGAssist_Player].turnins[arg[i]] = BGAssist_Config[BGAssist_Player].turnins[arg[i]] + min;
SelectGossipAvailableQuest(idx);
end
end
end
end
local function BGAssist_SignUpForBG(...)
local i;
local idx = 0;
for i = 1, arg.n, 2 do
idx = idx + 1;
if (arg[i] == BATTLEGROUND_GOSSIP_TEXT) then
SelectGossipOption(idx);
end
end
end
local function BGAssist_Alterac_AutoProcess(method)
if (BGAssist_Alterac_Quests[GetTitleText()]) then
if (method == "QUEST_COMPLETE") then
QuestRewardCompleteButton_OnClick();
elseif (method == "QUEST_PROGRESS") then
QuestProgressCompleteButton_OnClick();
elseif (method == "QUEST_DETAIL") then
QuestDetailAcceptButton_OnClick();
elseif (Debug) then
Debug ("Unknown METHOD: "..method.." for "..GetTitleText());
end
end
end
local function BGAssist_ConfigInit()
if (not BGAssist_Config) then
BGAssist_Config = {};
end
if (not BGAssist_Config[BGAssist_Player]) then
BGAssist_Config[BGAssist_Player] = {};
end
if (not BGAssist_Config[BGAssist_Player].turnins) then
BGAssist_Config[BGAssist_Player].turnins = {};
end
if (BGAssist_InBattleGround == ALTERACVALLEY or BGAssist_InBattleGround == ARATHIBASIN) then
BGAssist_CheckMap();
end
BGAssist_ToggleAutoEntry("ON")
end
function BGAssist_OnLoad()
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
-- Autoenter
this:RegisterEvent("BATTLEFIELDS_SHOW");
this:RegisterEvent("UPDATE_BATTLEFIELD_STATUS");
this:RegisterEvent("CHAT_MSG_SYSTEM");
this:RegisterEvent("GOSSIP_SHOW");
local playerName = UnitName("player");
if (playerName ~= UKNOWNBEING and playerName ~= UNKNOWNOBJECT) then
BGAssist_Player = playerName;
end
end
function BGAssist_OnEvent(event)
if (event == "VARIABLES_LOADED") then
BGAssist_Config_Loaded = 1;
if (BGAssist_Player) then
BGAssist_ConfigInit();
end
elseif (event == "PLAYER_ENTERING_WORLD") then
BGAssist_InAFK = nil;
elseif (event == "CHAT_MSG_SYSTEM") then
if (string.find(arg1,MATCHING_MARKED_AFK)) then
BGAssist_InAFK = true;
elseif (string.find(arg1,MATCHING_CLEARED_AFK)) then
BGAssist_InAFK = nil;
end
elseif (event == "BATTLEFIELDS_SHOW") then
local mapName = GetBattlefieldInfo();
if (mapName == WARSONGGULCH or mapName == ARATHIBASIN) then
BGAssist_PreExistingInstances = {};
local numBattlefields = GetNumBattlefields();
local i;
for i = 1, numBattlefields, 1 do
BGAssist_PreExistingInstances[GetBattlefieldInstanceInfo(i)] = GetTime();
end
end
if (BGAssist_Config.autosignup) then
if (((GetNumPartyMembers() > 0) or (GetNumRaidMembers() > 0)) and IsPartyLeader()) then
JoinBattlefield(0,1);
else
JoinBattlefield(0);
end
HideUIPanel(BattlefieldFrame);
end
elseif (event == "UPDATE_BATTLEFIELD_STATUS") then
local i, status, mapName, instanceID;
for i = 1, MAX_BATTLEFIELD_QUEUES, 1 do
local tmpstatus, tmpmapName, tmpinstanceID = GetBattlefieldStatus(i)
if (tmpstatus == "active" or (tmpstatus == "confirm" and not status)) then
status = tmpstatus;
mapName = tmpmapName;
instanceID = tmpinstanceID;
end
end
if (status=="active") then
BGAssist_PreExistingInstances = nil;
if (not BGAssist_InBattleGround) then
DEFAULT_CHAT_FRAME:AddMessage("BGAssist: "..DISPLAY_TEXT_ENTERINGBATTLEGROUNDS..": "..mapName);
BGAssist_RezSyncTime = nil;
BGAssist_InBattleGround = mapName;
BGAssist_BagCheck();
local idx,event;
for idx,event in EVENTSINBATTLEGROUND do
BGAssist:RegisterEvent(event);
end
BGAssist_MaintainingGroup = nil;
if (not BGAssist_Config.noautoshow) then
BGAssist_Timers:Show();
end
if (not BGAssist_Config.notargetwindow) then
BGAssist_Targets:Show();
end
end
if (BGAssist_InBattleGround == WARSONGGULCH) then
BGAssist_FlagLocs = { };
BGAssist_Flags:Show();
end
if (BGAssist_InBattleGround == ALTERACVALLEY or BGAssist_InBattleGround == ARATHIBASIN) then
BGAssist_CheckMap();
end
elseif (status=="confirm") then
--[[
local goodtoenter = true;
if (((BGAssist_Config.avoidpreexistingwarsong and
mapName == WARSONGGULCH) or
(BGAssist_Config.avoidpreexistingarathi and
mapName == ARATHIBASIN )) and
BGAssist_PreExistingInstances and
BGAssist_PreExistingInstances[instanceID]) then
local timediff = GetTime() - BGAssist_PreExistingInstances[instanceID];
if (timediff < 300) then
goodtoenter = false;
DEFAULT_CHAT_FRAME:AddMessage("BGAssist: "..DISPLAY_TEXT_PREEXISTING);
end
end
if (goodtoenter and not BGAssist_Config.noautoenter) then
if (BGAssist_InAFK) then
DEFAULT_CHAT_FRAME:AddMessage("BGAssist: "..DISPLAY_TEXT_NOTENTERINGAFK);
elseif (not (UnitIsDead("player") or UnitIsGhost("player"))) then
local status, mapName, instanceID, idx;
for i = 1, MAX_BATTLEFIELD_QUEUES, 1 do
local tmpstatus, tmpmapName, tmpinstanceID = GetBattlefieldStatus(i);
if (tmpstatus == "confirm") then
status = tmpstatus;
mapName = tmpmapName;
instanceID = tmpinstanceID;
idx = i;
end
end
if (status) then
StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY", idx);
AcceptBattlefieldPort(idx, 1);
end
end
end
]]
elseif (BGAssist_InBattleGround) then
BGAssist_Timers:Hide();
BGAssist_Flags:Hide();
BGAssist_Targets:Hide();
BGAssist_MaintainingGroup = nil;
DEFAULT_CHAT_FRAME:AddMessage("BGAssist: "..DISPLAY_TEXT_LEFTBATTLEGROUNDS..": "..BGAssist_InBattleGround);
BGAssist_InBattleGround = nil;
BGAssist_RezSyncTime = nil;
if (not BGAssist_Config.noautoleavegroup) then
LeaveParty();
end
local idx, event;
for idx, event in EVENTSINBATTLEGROUND do
BGAssist:UnregisterEvent(event);
end
end
elseif (event == "CHAT_MSG_MONSTER_YELL" or event == "CHAT_MSG_BG_SYSTEM_NEUTRAL" or event == "CHAT_MSG_BG_SYSTEM_ALLIANCE" or event == "CHAT_MSG_BG_SYSTEM_HORDE") then
if (BGAssist_InBattleGround == ALTERACVALLEY or BGAssist_InBattleGround == ARATHIBASIN) then
BGAssist_Scheduled_MapCheck = GetTime()+0.1;
elseif (BGAssist_InBattleGround == WARSONGGULCH) then
BGAssist_LocateFlags(arg1);
end
elseif (event == "BAG_UPDATE") then
if (BGAssist_InBattleGround == ALTERACVALLEY) then
BGAssist_BagCheck();
end
elseif (event == "AREA_SPIRIT_HEALER_IN_RANGE") then
BGAssist_RezSyncTime = GetTime() + GetAreaSpiritHealerTime();
-- elseif (event == "QUEST_PROGRESS" or event == "QUEST_COMPLETE" or event == "QUEST_GREETING" or event == "QUEST_DETAIL") then
elseif (event == "QUEST_PROGRESS" or event == "QUEST_COMPLETE" or event == "QUEST_DETAIL") then
if (not BGAssist_Config.noautoquest and BGAssist_InBattleGround == ALTERACVALLEY) then
BGAssist_Alterac_AutoProcess(event);
end
elseif (event == "GOSSIP_SHOW") then
if (not BGAssist_InBattleGround and BGAssist_Config.autosignup) then
BGAssist_SignUpForBG(GetGossipOptions());
elseif (not BGAssist_Config.noautoquest and BGAssist_InBattleGround == ALTERACVALLEY) then
BGAssist_Alterac_SelectQuest(GetGossipAvailableQuests());
end
elseif (event == "PLAYER_DEAD") then
if (BGAssist_Config.autorelease) then
StaticPopup_Hide("DEATH");
RepopMe();
end
elseif (event == "UPDATE_BATTLEFIELD_SCORE") then
if (GetBattlefieldWinner() and not BGAssist_Config.noautoleavegroup) then
LeaveParty();
end
BGAssist_CountPlayers();
elseif (event == "UPDATE_WORLD_STATES") then
if (BGAssist_InBattleGround == WARSONGGULCH) then
BGAssist_WSGFlags_OnShow();
end
elseif (event == "PARTY_INVITE_REQUEST") then
if (not BGAssist_Config.noacceptgroups) then
AcceptGroup();
StaticPopupDialogs["PARTY_INVITE"].inviteAccepted = 1;
StaticPopup_Hide("PARTY_INVITE");
end
elseif (event == "PARTY_MEMBER_CHANGED" or event == "PARTY_LEADER_CHANGED") then
if (GetNumRaidMembers() == 0) then
if (Debug) then Debug ("BGAssist: Party: ",event," PARTY: ",GetNumPartyMembers()," RAID: ",GetNumRaidMembers(), " MAINTAINING: ",BGAssist_MaintainingGroup," LEADER: ",IsPartyLeader()); end
end
if ((GetNumPartyMembers() > 0 or GetNumRaidMembers() > 0) and BGAssist_MaintainingGroup) then
if (GetNumRaidMembers() > 0) then
if (IsRaidLeader()) then
else
BGAssist_MaintainingGroup = nil;
end
elseif (IsPartyLeader()) then
ConvertToRaid();
else
BGAssist_MaintainingGroup = nil;
end
else
BGAssist_MaintainingGroup = nil;
end
end
end
function BGAssist_OnUpdate()
local time = GetTime();
if (BGAssist_Scheduled_MapCheck and BGAssist_Scheduled_MapCheck <= time) then
BGAssist_Scheduled_MapCheck = nil;
BGAssist_CheckMap();
end
end
function BGAssist_Timers_OnUpdate(elapsed)
local time = GetTime();
local starttimer = 1;
if (BGAssist_Config.showgycountdown) then
local timerobj = getglobal("BGAssist_Timers1");
if (timerobj.name == "Graveyard") then
if (BGAssist_RezSyncTime) then
local timeleft = BGAssist_RezSyncTime-GetTime();
while (timeleft < 0) do
BGAssist_RezSyncTime = BGAssist_RezSyncTime + 30;
timeleft = math.floor(BGAssist_RezSyncTime-GetTime());
end
timerobj:SetValue(timeleft);
else
timerobj:SetValue(30);
end
starttimer = 2;
end
end
if (BGAssist_TimersActive) then
if (BGAssist_TimersActive <= time) then
BGAssist_UpdateTimers();
else
if (BGAssist_LastTimersProc+1 < time) then
local i;
for i = starttimer, MAXTIMERS, 1 do
local timer = getglobal("BGAssist_Timers"..i);
if (timer.endtime) then
local timeleft = timer.endtime - time;
timer:SetValue(timeleft);
end
end
BGAssist_LastTimersProc = time;
end
end
if (this.updateTooltip) then
this.updateTooltip = this.updateTooltip - elapsed;
if (this.updateTooltip < 0) then
BGAssist_Timer_SetTooltip(this.tooltipUpdate);
end
end
end
end
function BGAssist_DynamicResize()
local i;
local maxtimer = 0;
local maxicon = 0;
for i = 1, MAXICONS, 1 do
local icon = getglobal("BGAssist_Timers_Icon"..i);
if (icon:IsVisible()) then maxicon = i; end
end
for i = 1, MAXTIMERS, 1 do
local timerobj = getglobal("BGAssist_Timers"..i);
if (timerobj:IsVisible()) then maxtimer = i; end;
end
if (BGAssist_Config.timerhide) then maxtimer = 0; end
if (BGAssist_Config.itemhide or BGAssist_InBattleGround ~= ALTERACVALLEY) then maxicon = 0; end
-- Move Icons to under last timer
if (maxicon and maxicon > 0) then
BGAssist_Timers_Icon1:ClearAllPoints();
if (maxtimer == 0) then
BGAssist_Timers_Icon1:SetPoint("TOPLEFT","BGAssist_Timers","TOPLEFT",6,-8);
else
BGAssist_Timers_Icon1:SetPoint("TOPLEFT","BGAssist_Timers"..maxtimer,"BOTTOMLEFT",0,-6);
end
end
local iconwidth = 36;
local iconheight = 36;
if (maxicon and maxicon > 3) then
if (maxicon > 4) then
iconwidth = 24;
else
iconwidth = 30;
end
if (maxicon > 5) then
iconheight = 18;
end
end
for i = 1, MAXICONS, 1 do
local icon = getglobal("BGAssist_Timers_Icon"..i);
local texture = getglobal("BGAssist_Timers_Icon"..i.."NormalTexture");
icon:SetWidth(iconwidth);
icon:SetHeight(iconheight);
texture:SetWidth(iconwidth*2);
texture:SetHeight(iconheight*2);
end
local backdropheight = 16; -- Buffer at top and bottom and room for border
backdropheight = backdropheight + (maxtimer*12);
if (maxicon > 0 and maxtimer > 0) then backdropheight = backdropheight + 3; end
if (maxicon > 5) then
backdropheight = backdropheight + (iconheight*2) + 3;
elseif (maxicon > 0) then
backdropheight = backdropheight + iconheight;
end
BGAssist_Timers:SetHeight(backdropheight);
end
function BGAssist_Timers_OnShow()
UIDropDownMenu_Initialize(BGAssist_Timers_Menu, BGAssist_MenuDropDown_Initialize, "MENU");
BGAssist_UpdateTimers();
BGAssist_UpdateItems();
if (BGAssist_Timers2:IsVisible() or (BGAssist_Timers1:IsVisible() and BGAssist_Config.showgycountdown)) then
BGAssist_Timers_TitleText:SetText(DISPLAY_TITLEDISPLAY_CAPTURE);
else
if (BGAssist_Timers_Icon1:IsVisible()) then
BGAssist_Timers_TitleText:SetText(DISPLAY_TITLEDISPLAY_ITEMS);
else
BGAssist_Timers_TitleText:SetText("BGAssist");
end
end
BGAssist_DynamicResize();
end
function BGAssist_UpdateItems()
local function findicon (item)
local idx = 1;
local found = 0;
while (found == 0 and idx <= MAXICONS) do
local icon = getglobal("BGAssist_Timers_Icon"..idx);
if (icon and icon.item and icon.item == item) then
found = idx;
end
idx = idx + 1;
end
return found;
end
local function fillicon (item, num)
local icon = getglobal("BGAssist_Timers_Icon"..num);
if (icon) then
icon.item = item;
icon:Show();
getglobal("BGAssist_Timers_Icon"..num.."Icon"):SetTexture(BGAssist_ItemInfo[item].texture);
end
end
local showitems = {};
local maxicon = 0;
if (not BGAssist_Config.itemhide and BGAssist_InBattleGround == ALTERACVALLEY and BGAssist_TrackedItems and BGAssist_TrackedItems ~= {}) then
local item;
for item in BGAssist_TrackedItems do
if (BGAssist_TrackedItems[item] > 0) then
showitems[item] = findicon(item);
end
end
for item in showitems do
local idx = 1;
if (showitems[item] == 0) then
while (showitems[item] == 0 and idx <= MAXICONS) do
local icon = getglobal("BGAssist_Timers_Icon"..idx);
if (icon and not icon.item) then
showitems[item] = idx;
end
idx = idx + 1;
end
end
if (showitems[item] > maxicon) then maxicon = showitems[item]; end
fillicon (item, showitems[item])
end
local i;
for i = 1, MAXICONS, 1 do
local icon = getglobal("BGAssist_Timers_Icon"..i);
if (not icon.item or not BGAssist_TrackedItems[icon.item] or BGAssist_TrackedItems[icon.item] < 1) then
if (i < maxicon) then
local j = i+1;
local jicon = getglobal("BGAssist_Timers_Icon"..j);
while (j <= MAXICONS and not jicon.item) do
jicon = getglobal("BGAssist_Timers_Icon"..j);
j = j + 1;
end
if (jicon.item) then
fillicon (jicon.item, j-1);
jicon.item = nil;
end
else
icon.item = nil;
icon:Hide();
end
end
end
else
local i;
for i = 1, MAXICONS, 1 do
local icon = getglobal("BGAssist_Timers_Icon"..i);
icon:Hide();
icon.item = nil;
end
end
end
function BGAssist_UpdateTimers()
local function sort_function (a, b)
local endtime= BGAssist_MapItems[a].conflictstart + BGAssist_MapItems[a].conflictduration;
local atime = endtime - GetTime();
endtime= BGAssist_MapItems[b].conflictstart + BGAssist_MapItems[b].conflictduration;
local btime = endtime - GetTime();
if (atime < btime) then return true; else return false; end
end
local starttimer = 1;
local i, status, mapName, instanceID;
for i = 1, MAX_BATTLEFIELD_QUEUES, 1 do
local tmpstatus, tmpmapName, tmpinstanceID = GetBattlefieldStatus(i);
if (tmpstatus == "active") then
status = tmpstatus;
mapName = tmpmapName;
instanceID = tmpinstanceID;
end
end
if (BGAssist_Config.showgycountdown) then
local timerobj = getglobal("BGAssist_Timers1");
local text = getglobal("BGAssist_Timers1Text");
timerobj.name = "Graveyard";
timerobj:Show();
timerobj:SetStatusBarColor (0, 1, 0);
timerobj:SetMinMaxValues(0,30);
if (BGAssist_RezSyncTime) then
local timeleft = math.floor(BGAssist_RezSyncTime-GetTime());
while (timeleft < 0) do
BGAssist_RezSyncTime = BGAssist_RezSyncTime + 30;
timeleft = math.floor(BGAssist_RezSyncTime-GetTime());
end
timerobj:SetValue(timeleft);
else
timerobj:SetValue(30);
end
text:Show();
text:SetText("Graveyard");
starttimer = 2;
end
if (not BGAssist_Config.timerhide and status == "active") then
if (BGAssist_MapItems == nil or BGAssist_MapItems == {}) then
BGAssist_CheckMap();
if (BGAssist_MapItems == nil or BGAssist_MapItems == {}) then
return;
end
end
local conflicts = {};
local conflictcount = 0;
local red, green, blue;
local name;
for name in BGAssist_MapItems do
if (BGAssist_MapItems[name].conflictstart or (BGAssist_Config.showcapturedflags and BGAssist_InBattleGround == ARATHIBASIN)) then
local endtime = BGAssist_MapItems[name].conflictstart + BGAssist_MapItems[name].conflictduration;
local timeleft = endtime - GetTime();
if (timeleft > 0 or (BGAssist_Config.showcapturedflags and BGAssist_InBattleGround == ARATHIBASIN)) then
conflictcount = conflictcount + 1;
conflicts[conflictcount] = name;
end
end
end
table.sort(conflicts, sort_function);
local timer = starttimer;
local idx = 1;
while (timer <= MAXTIMERS and conflicts[idx]) do
local timerobj = getglobal("BGAssist_Timers"..timer);
local text = getglobal("BGAssist_Timers"..timer.."Text");
red = 0; green = 0; blue = 0;
if (BGAssist_MapItems[conflicts[idx]].owner == "HORDE") then
red = 1;
elseif (BGAssist_MapItems[conflicts[idx]].owner == "ALLIANCE") then
green = 1; blue = 1;
elseif (not BGAssist_MapItems[conflicts[idx]].owner) then
-- Should only be when capturing neutral in AB at start
red = 0.862; green = 0.862; blue = 0.862;
end
local endtime= BGAssist_MapItems[conflicts[idx]].conflictstart +
BGAssist_MapItems[conflicts[idx]].conflictduration;
local timeleft = endtime - GetTime();
if (timeleft < 1) then
BGAssist_Scheduled_MapCheck = GetTime()+1;
BGAssist_MapItems[conflicts[idx]].conflictstart = nil;
end
if (not BGAssist_TimersActive or endtime < BGAssist_TimersActive) then
BGAssist_TimersActive = endtime;
end
timerobj.name = conflicts[idx];
timerobj.endtime = endtime;
timerobj:Show();
timerobj:SetStatusBarColor (red, green, blue);
if (BGAssist_InBattleGround == ALTERACVALLEY) then
timerobj:SetMinMaxValues(0,300);
elseif (BGAssist_InBattleGround == ARATHIBASIN) then
timerobj:SetMinMaxValues(0,60);
elseif (Debug) then
Debug ("INVALID ZONE: ",BGAssist_InBattleGround);
end
timerobj:SetValue(timeleft);
text:Show();
-- local sidx = string.find(conflicts[idx]," ");
-- if (sidx) then
-- text:SetText(string.sub(conflicts[idx],1,sidx-1));
-- else
text:SetText(conflicts[idx]);
-- end
idx = idx + 1;
timer = timer + 1;
end
while (timer <= MAXTIMERS) do
local timerobj = getglobal("BGAssist_Timers"..timer);
local text = getglobal("BGAssist_Timers"..timer.."Text");
timerobj.name = nil;
timerobj.endtime = nil;
timerobj:Hide();
text:SetText("");
text:Hide();
timer = timer + 1;
end
else
for timer = starttimer, MAXTIMERS, 1 do
local timerobj = getglobal("BGAssist_Timers"..timer);
local text = getglobal("BGAssist_Timers"..timer.."Text");
timerobj:Hide();
text:Hide();
end
end
end
function BGAssist_TimersTitle_OnClick(button)
if (arg1 == "RightButton") then
ToggleDropDownMenu(1, nil, BGAssist_Timers_Menu, "BGAssist_Timers_Menu", 0, 50);
else
if (this:GetButtonState() == "PUSHED") then
this:GetParent():StopMovingOrSizing();
elseif (not BGAssist_Config.windowlocked) then
this:GetParent():StartMoving();
end
end
end
function BGAssist_Timer_SetTooltip(override)
if (not override) then
override = this;
end
local txt;
local timeleft;
if (override.name == "Graveyard") then
txt = DISPLAY_TEXT_TIMEUNTILREZ;
if (BGAssist_RezSyncTime) then
timeleft = math.floor(BGAssist_RezSyncTime-GetTime());
else
timeleft = 30;
end
elseif (override.name and override.endtime) then
txt = override.name;
timeleft = math.floor(override.endtime - GetTime());
end
if (txt and timeleft) then
txt = txt.."\n"..DISPLAY_TEXT_TIMELEFT..": "..timeleft.." "..DISPLAY_TEXT_SECONDS..".";
if (timeleft > 60) then
txt = txt.."\n("..(math.floor(timeleft/6)/10).." "..DISPLAY_TEXT_MINUTES..")";
end
BGAssist_Timers.updateTooltip = TOOLTIP_UPDATE_TIME;
BGAssist_Timers.tooltipUpdate = override;
local left = override:GetLeft();
if (left > 800) then
GameTooltip:SetOwner(override, "ANCHOR_LEFT");
else
GameTooltip:SetOwner(override, "ANCHOR_RIGHT");
end
GameTooltip:SetText(txt);
end
end
function BGAssist_Item_SetTooltip()
if (this.item and BGAssist_ItemInfo[this.item] and BGAssist_ItemInfo[this.item].name) then
local txt = BGAssist_ItemInfo[this.item].name.."\nCurrent Count: "..BGAssist_TrackedItems[this.item];
local left = this:GetLeft();
if (left > 800) then
GameTooltip:SetOwner(this, "ANCHOR_LEFT");
else
GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
end
GameTooltip:SetText(txt);
end
end
function BGAssist_MenuDropDown_CheckedToggle()
local mapping = {
[DISPLAY_MENU_LOCKWINDOW] = "windowlocked",
[DISPLAY_MENU_AUTOSHOW] = "noautoshow",
[DISPLAY_MENU_AUTORELEASE] = "autorelease",
[DISPLAY_MENU_AUTOQUEST] = "noautoquest",
[DISPLAY_MENU_AUTOENTER] = "noautoenter",
[DISPLAY_MENU_TIMERSHOW] = "timerhide",
[DISPLAY_MENU_ITEMSHOW] = "itemhide",
[DISPLAY_MENU_GYCOUNTDOWN] = "showgycountdown",
[DISPLAY_MENU_FLAGTRACKING] = "noflags",
[DISPLAY_MENU_TARGETTINGASSISTANCE] = "notargetwindow",
[DISPLAY_MENU_AUTOACCEPTGROUP] = "noacceptgroups",
[DISPLAY_MENU_AUTOLEAVEGROUP] = "noautoleavegroup",
[DISPLAY_MENU_NOPREEXISTING] = "avoidpreexistingwarsong";
[DISPLAY_MENU_SHOWCAPTUREDFLAGS] = "showcapturedflags";
[DISPLAY_MENU_AUTOSIGNUP] = "autosignup";
};
if (UIDROPDOWNMENU_MENU_VALUE == ALTERACVALLEY) then
elseif (UIDROPDOWNMENU_MENU_VALUE == ARATHIBASIN) then
mapping[DISPLAY_MENU_NOPREEXISTING] = "avoidpreexistingarathi";
end
local confoption = mapping[this.value];
if (confoption) then
if (BGAssist_Config[confoption]) then
BGAssist_Config[confoption] = nil;
else
BGAssist_Config[confoption] = true;
end
if (BGAssist_Config.notargetwindow) then
BGAssist_Targets:Hide();
elseif (BGAssist_InBattleGround) then
BGAssist_Targets:Show();
end
BGAssist_Timers_OnShow();
end
end
function BGAssist_MenuDropDown_Initialize()
local info = {};
if (UIDROPDOWNMENU_MENU_LEVEL == 2) then
info.func = BGAssist_MenuDropDown_CheckedToggle;
if (UIDROPDOWNMENU_MENU_VALUE == ALTERACVALLEY) then
info.text = DISPLAY_MENU_TIMERSHOW;
info.checked = nil;
if (not BGAssist_Config.timerhide) then info.checked = 1; end
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
info.text = DISPLAY_MENU_AUTOQUEST;
info.checked = nil;
if (not BGAssist_Config.noautoquest) then info.checked = 1; end
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
info.text = DISPLAY_MENU_ITEMSHOW;
info.checked = nil;
if (not BGAssist_Config.itemhide) then info.checked = 1; end
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
elseif (UIDROPDOWNMENU_MENU_VALUE == WARSONGGULCH) then
info.text = DISPLAY_MENU_FLAGTRACKING;
info.checked = nil;
if (not BGAssist_Config.noflags) then info.checked = 1; end
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
info.text = DISPLAY_MENU_NOPREEXISTING;
info.checked = nil;
if (BGAssist_Config.avoidpreexistingwarsong) then info.checked = 1; end
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
elseif (UIDROPDOWNMENU_MENU_VALUE == ARATHIBASIN) then
info.text = DISPLAY_MENU_NOPREEXISTING;
info.checked = nil;
if (BGAssist_Config.avoidpreexistingarathi) then info.checked = 1; end
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
info.text = DISPLAY_MENU_SHOWCAPTUREDFLAGS;
info.checked = nil;
if (BGAssist_Config.showcapturedflags) then info.checked = 1; end
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL);
end
else
info.isTitle = true;
info.text = "BGAssist "..BGASSIST_VERSION;
UIDropDownMenu_AddButton(info);
info = {};
info.hasArrow = 1;
info.notCheckable = 1;
info.text = ALTERACVALLEY;
UIDropDownMenu_AddButton(info);
info.text = WARSONGGULCH;
UIDropDownMenu_AddButton(info);
info.text = ARATHIBASIN;
UIDropDownMenu_AddButton(info);
info = {};
info.func = BGAssist_MenuDropDown_CheckedToggle;
info.text = DISPLAY_MENU_LOCKWINDOW;
info.checked = nil;
if (BGAssist_Config.windowlocked) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_AUTOSHOW;
info.checked = nil;
if (not BGAssist_Config.noautoshow) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_AUTORELEASE;
info.checked = nil;
if (BGAssist_Config.autorelease) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_AUTOENTER;
info.checked = nil;
if (not BGAssist_Config.noautoenter) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_AUTOSIGNUP;
info.checked = nil;
if (BGAssist_Config.autosignup) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_GYCOUNTDOWN;
info.checked = nil;
if (BGAssist_Config.showgycountdown) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_TARGETTINGASSISTANCE;
info.checked = nil;
if (not BGAssist_Config.notargetwindow) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_AUTOACCEPTGROUP;
info.checked = nil;
if (not BGAssist_Config.noacceptgroups) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
info.text = DISPLAY_MENU_AUTOLEAVEGROUP;
info.checked = nil;
if (not BGAssist_Config.noautoleavegroup) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
end
end
function BGAssist_LocateFlags(chatmsg)
local idx, event, faction, player;
for idx in BGAssist_FlagRegexp do
local start, _, one, two = string.find (chatmsg,BGAssist_FlagRegexp[idx].regexp);
if (start) then
event = idx;
player = nil;
faction = nil;
if (BGAssist_FlagRegexp[event].one == "PLAYER") then player = one; end
if (BGAssist_FlagRegexp[event].one == "FACTION") then faction = one; end
if (BGAssist_FlagRegexp[event].two == "PLAYER") then player = two; end
if (BGAssist_FlagRegexp[event].two == "FACTION") then faction = two; end
end
end
-- The text is reversed
if (faction == FACTION_HORDE) then
faction = "Alliance";
elseif (faction == FACTION_ALLIANCE) then
faction = "Horde";
end
--[[
if (event) then
if (player and faction) then
Debug ("EVENT: "..event.." for "..player.." at "..faction);
else
Debug ("EVENT: "..event);
end
else
Debug ("NO EVENT: "..chatmsg);
end
]]
if (event == "RESET") then
BGAssist_FlagLocs = { };
elseif (event == "PICKED") then
BGAssist_FlagLocs[faction] = player;
elseif (event == "DROPPED" or event == "RETURNED" or event == "CAPTURED") then
BGAssist_FlagLocs[faction] = nil;
end
BGAssist_WSGFlags_OnShow();
end
function BGAssist_ToggleWindow()
if (BGAssist_Timers:IsVisible()) then
BGAssist_Timers:Hide();
else
BGAssist_Timers:Show();
end
end
function BGAssist_WSGFlags_OnShow()
local stateidx = { "Alliance", "Horde" };
local i;
if (not BGAssist_Config.noflags) then
for i = 1, 2, 1 do
local text, icon, isFlashing = GetWorldStateUIInfo(i);
local displayobj = getglobal ("BGAssist_Flags_"..stateidx[i].."_Text");
if (not isFlashing) then
displayobj:SetText("");
elseif (BGAssist_FlagLocs[stateidx[i]]) then
displayobj:SetText(BGAssist_FlagLocs[stateidx[i]]);
else
displayobj:SetText("(Unknown)");
end
end
else
for i = 1, 2, 1 do
local displayobj = getglobal ("BGAssist_Flags_"..stateidx[i].."_Text");
displayobj:SetText("");
end
end
end
function BGAssist_Flags_OnClick(override)
if (not override) then override = this; end
local stateidx = { ["Alliance"] = 1, ["Horde"] = 2 };
local _, _, isFlashing = GetWorldStateUIInfo(stateidx[override.faction]);
if (isFlashing and BGAssist_FlagLocs[override.faction]) then
TargetByName(BGAssist_FlagLocs[override.faction]);
if (UnitName("target") ~= BGAssist_FlagLocs[override.faction]) then
ClearTarget();
DEFAULT_CHAT_FRAME:AddMessage("BGAssist: "..DISPLAY_TEXT_FLAGHOLDERNOTCLOSEENOUGH);
end
end
end
local function BGAssist_UpdateTargets()
local idx;
local unit;
local targets = {};
local targetcounts = {};
local targetidx = 0;
local function sort_function (a,b)
if (targetcounts[a.name] > targetcounts[b.name]) then
return true;
elseif (targetcounts[a.name] < targetcounts[b.name]) then
return false;
--[[
elseif (a.distance > b.distance) then
return true;
elseif (a.distance < b.distance) then
return false;
]]
elseif (a.name < b.name) then
return true;
else
return false;
end
end
local max = 40;
if (BGAssist_InBattleGround == WARSONGGULCH) then max = 10; end
for idx = 1, max, 1 do
unit = "raid"..idx.."target";
if (UnitName(unit) and UnitCanAttack("player",unit)) then
targetidx = targetidx + 1;
local px,py = GetPlayerMapPosition("player");
local tx,ty = GetPlayerMapPosition("raid"..idx);
local xdist = tx-px;
local ydist = ty-py;
local dist = sqrt(math.pow(xdist,2)+math.pow(ydist,2));
targets[targetidx] = {
["name"] = UnitName(unit);
["class"] = UnitClass(unit);
["unit"] = unit;
["distance"] = dist;
};
if (not targetcounts[UnitName(unit)]) then
targetcounts[UnitName(unit)] = 0;
end
targetcounts[UnitName(unit)] = targetcounts[UnitName(unit)] + 1;
end
end
if (UnitName("target") and UnitCanAttack("player","target")) then
targetidx = targetidx + 1;
targets[targetidx] = {
["name"] = UnitName("target");
["class"] = UnitClass(unit);
["unit"] = "target";
["distance"] = 0;
};
if (not targetcounts[UnitName("target")]) then
targetcounts[UnitName("target")] = 0;
end
targetcounts[UnitName("target")] = targetcounts[UnitName("target")] + 1;
end
table.sort (targets, sort_function);
local lasttarget = nil;
local targetidx = 1;
for idx = 1, table.getn(targets), 1 do
if (targetidx < 10 and not UnitIsDead(targets[idx].unit) and targets[idx].name ~= lasttarget) then
local targetobj = getglobal("BGAssist_Targets"..targetidx);
local targettxt = getglobal("BGAssist_Targets"..targetidx.."_Text");
local targethealth = getglobal("BGAssist_Targets"..targetidx.."_Bar_Health");
local iconobj = getglobal("BGAssist_Targets"..targetidx.."_Class");
lasttarget = targets[idx].name;
targetobj.name = targets[idx].name;
targetobj.unit = targets[idx].unit;
if (targets[idx].class) then
targetobj.class = string.upper(targets[idx].class);
local coords = CLASS_ICON_TCOORDS[targetobj.class];
iconobj:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
iconobj:Show();
else
targetobj.class = nil;
iconobj:Hide();
end
-- targettxt:SetText(targetcounts[targets[idx].name].." ("..targets[idx].distance..") = "..targets[idx].name);
targettxt:SetText(targets[idx].name);
local health = UnitHealth(targets[idx].unit);
local maxhealth = UnitHealthMax(targets[idx].unit);
if (maxhealth ~= 100) then
health = math.floor(health/maxhealth*100);
end
targethealth:SetValue(health);
targetobj:Show();
targetidx = targetidx + 1;
end
end
for idx = targetidx, 10, 1 do
local targetobj = getglobal("BGAssist_Targets"..idx);
targetobj:Hide();
targetobj.name = nil;
targetobj.unit = nil;
targetobj.class = nil;
--[[
targetobj:Show();
local targettxt = getglobal("BGAssist_Targets"..idx.."_Text");
targettxt:SetText("SpankingMonkeyAss");
local coords = CLASS_ICON_TCOORDS["SHAMAN"];
local iconobj = getglobal("BGAssist_Targets"..idx.."_Class");
iconobj:SetTexCoord(coords[1], coords[2], coords[3], coords[4]);
]]
end
end
function BGAssist_Targets_OnUpdate(elapsed)
BGAssist_LastUpdate = BGAssist_LastUpdate+elapsed;
if (BGAssist_LastUpdate > 0.1) then
BGAssist_LastUpdate = 0;
BGAssist_UpdateTargets();
end
end
function BGAssist_TargetMenuDropDown_Initialize()
local info = {};
if (UIDROPDOWNMENU_MENU_LEVEL == 2) then
else
info.isTitle = true;
info.text = "BGAssist "..BGASSIST_VERSION;
UIDropDownMenu_AddButton(info);
info = {};
info.func = BGAssist_MenuDropDown_CheckedToggle;
info.text = DISPLAY_MENU_LOCKWINDOW;
info.checked = nil;
if (BGAssist_Config.windowlocked) then info.checked = 1; end
UIDropDownMenu_AddButton(info);
end
end
function BGAssist_Targets_OnShow()
UIDropDownMenu_Initialize(BGAssist_Targets_Menu, BGAssist_TargetMenuDropDown_Initialize, "MENU");
getglobal(this:GetName().."_TitleText"):SetText(DISPLAY_TITLEDISPLAY_TARGETS);
BGAssist_UpdateTargets();
end
function BGAssist_TargetsTitle_OnClick()
if (arg1 == "RightButton") then
ToggleDropDownMenu(1, nil, BGAssist_Targets_Menu, "BGAssist_Targets_Menu", 0, 50);
else
if (this:GetButtonState() == "PUSHED") then
this:GetParent():StopMovingOrSizing();
elseif (not BGAssist_Config.windowlocked) then
this:GetParent():StartMoving();
end
end
end
function BGAssist_Target_OnClick()
local unit = this:GetParent().unit;
local name = this:GetParent().name;
if (unit and name and UnitName(unit) == name) then
if (SpellIsTargeting()) then
SpellTargetUnit(unit);
else
TargetUnit(unit);
end
elseif (name) then
TargetByName(name);
end
end
function BGAssist_ClassBreakdown_OnLoad()
WorldStateScoreFrame_Alliance1:ClearAllPoints();
WorldStateScoreFrame_Alliance1:SetPoint("TOPRIGHT","WorldStateScoreFrame_Alliance","TOPRIGHT",-4,-4);
WorldStateScoreFrame_Alliance8:SetTexCoord(0,0.25,0.5,0.75);
local i;
for i = 1, 8, 1 do
getglobal("WorldStateScoreFrame_Alliance"..i.."Text"):ClearAllPoints();
getglobal("WorldStateScoreFrame_Alliance"..i.."Text"):SetPoint("RIGHT","WorldStateScoreFrame_Alliance"..i,"LEFT",0,0);
end
end
function BGAssist_AutoInvite_OnClick()
BGAssist_MaintainingGroup = true;
if (GetNumPartyMembers() > 0 and IsPartyLeader()) then
ConvertToRaid();
end
local numNotInRaid = GetNumBattlefieldPositions;
if (numNotInRaid and numNotInRaid > 0) then
local i;
for i = 1, numNotInRaid, 1 do
local _,_,who = GetBattlefieldPosition(i);
InviteByName(who);
end
end
end
function BGAssist_AutomaticBGEntry(data)
local i;
local inbg = nil;
for i = 1, MAX_BATTLEFIELD_QUEUES, 1 do
local tmpstatus, tmpmapName, tmpinstanceID = GetBattlefieldStatus(i)
if (tmpstatus == "active") then
data = nil;
inbg = true;
elseif (not inbg and tmpstatus == "confirm") then
data = i;
end
end
if (not inbg and data) then
local status, mapName, instanceID = GetBattlefieldStatus(data)
local goodtoenter = data;
if (((BGAssist_Config.avoidpreexistingwarsong and
mapName == WARSONGGULCH) or
(BGAssist_Config.avoidpreexistingarathi and
mapName == ARATHIBASIN )) and
BGAssist_PreExistingInstances and
BGAssist_PreExistingInstances[instanceID]) then
local timediff = GetTime() - BGAssist_PreExistingInstances[instanceID];
if (timediff < 300) then
goodtoenter = false;
DEFAULT_CHAT_FRAME:AddMessage("BGAssist: "..DISPLAY_TEXT_PREEXISTING);
end
end
if (data and goodtoenter and not BGAssist_Config.noautoenter) then
if (BGAssist_InAFK) then
DEFAULT_CHAT_FRAME:AddMessage("BGAssist: "..DISPLAY_TEXT_NOTENTERINGAFK);
elseif (not (UnitIsDead("player") or UnitIsGhost("player"))) then
StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY");
AcceptBattlefieldPort(data, 1);
end
end
end
end
function BGAssist_ToggleAutoEntry(force)
local current;
if (StaticPopupDialogs["CONFIRM_BATTLEFIELD_ENTRY"].OnShow) then
current = true;
end
if (force == "ON" or (not current and force ~= "OFF")) then
StaticPopupDialogs["CONFIRM_BATTLEFIELD_ENTRY"].OnShow = function(data)
BGAssist_AutomaticBGEntry(data);
end
elseif (force == "OFF" or (current and force ~= "ON")) then
StaticPopupDialogs["CONFIRM_BATTLEFIELD_ENTRY"].OnShow = nil;
end
end