vanilla-wow-addons – Rev 1
?pathlinks?
GuildRaidSnapShot_SnapShots = {};
GuildRaidSnapShot_Loot = {};
GuildRaidSnapShot_Notes = {};
GuildRaidSnapShot_Adj = {};
GRSS_Calendar = {};
GRSS_Alts = {};
GRSS_MainOnly = {};
GRSS_Divide = {};
GRSS_Systems = {};
GRSS_Full_DKP = {};
GRSS_Bosses = {"Lucifron","Magmadar","Gehennas","Garr","Baron Geddon","Shazzrah","Sulfuron Harbinger","Golemagg the Incinerator","Ragnaros","Doom Lord Kazzak","Azuregos","Lethon","Emeriss","Onyxia","Taerar","Ysondre","Razorgore the Untamed","Vaelastrasz the Corrupt","Flamegor","Ebonroc","Firemaw","Chromaggus","Broodlord Lashlayer","Nefarian","Prophet Skeram","Lord Kri","Battleguard Sartura","Princess Huhuran","Fankriss the Unyielding","Viscidus","Ouro","C'Thun","Emperor Vek'nilash","Emperor Vek'lor","Anub'Rekhan","Grand Widow Faerlina","Maexxna","Feugen","Gluth","Gothik the Harvester","Grobbulus","Hei
gan the Unclean","Highlord Mograine","Instructor Razuvious","Lady Blaumeux","Loatheb","Noth the Plaguebringer","Patchwerk","Sapphiron","Sir Zeliek","Stalagg","Thaddius","Thane Korth'azz","Ossirian the Unscarred","Moam","Kurinnaxx","General Rajaxx","Buru the Gorger","Ayamiss the Hunter","Bloodlord Mandokir","Gahz'ranka","Gri'lek","Hakkar","Hazza'rah","High Priest Thekal","High Priest Venoxis","High Priestess Arlokk","High Priestess Jeklik","High Priestess Mar'li","Jin'do the Hexxer","Renataki","Wushoolay","The Crone","Hyakiss the Lurker","Julianne","Maiden of Virtue","Moroes","Netherspite","Nightbane","Prince Malchezaar","Roka
d the Ravager","Romulo","Shade of Aran","Shadikith the Glider","Terestian Illhoof","The Big Bad Wolf","The Curator","Gruul the Dragonkiller","Magtheridon","High King Maulgar","Fathom-Lord Karathress","Hydross the Unstable","Lady Vashj","Leotheras the Blind","Morogrim Tidewalker","The Lurker Below","Al'ar","High Astromancer Solarian","Kael'thas Sunstrider","Void Reaver","Doomwalker","Attumen the Huntsman","Illidan Stormrage","Gathios the Shatterer","High Nethermancer Zerevor","Lady Malande","Veras Darkshadow","Essence of Anger","Gurtogg Bloodboil","Illidari Council","Teron Gorefiend","High Warlord Naj'entus","Mother Shahraz","Shade of Akama","Supremus","Anetheron&qu
ot;,"Archimonde","Azgalor","Kaz'rogal","Rage Winterchill","Nalorakk","Akil'zon","Jan'alai","Halazzi","Hex Lord Malacrass","Zul'jin","Kalecgos","Sathrovarr the Corruptor","Brutallus","Felmyst","Lady Sacrolash","Grand Warlock Alythess","M'uru","Entropius","Kil'jaeden","Kel'Thuzad","Sartharion","Archavon the Stone Watcher","Malygos","Flame Leviathan","Razorscale","XT-002 Deconstructor","Ignis the Furnace Master","Assembly of Iron","Kologarn","Auriaya","Mimiron","Hodir","Thorim","Freva","General Vezax","Yogg-Saron","Algalon the Observer"
--[[uncomment for testing the mobs outside shattrath
,"Dreadfang Lurker","Timber Worg","Ironspine Petrifier"
--]]
};
GRSS_FastBossLookup = {}; --This gets initialized with the mod
GRSS_Ignore = {"Onyxian","Onyxia's Elite Guard","Maexxna Spiderling","Patchwerk Golem","Hakkari","Son of Hakkar"," slain by ","Nightbane .+",".+the Crone","Netherspite Infernal","Ember of Al'ar","Sartharion Twilight Whelp","Sartharion Twilight Egg"};
GRSS_Yells = {};
GRSS_LootIgnore = {"Hakkari Bijou","Alabaster Idol","Amber Idol","Azure Idol","Jasper Idol","Lambent Idol","Obsidian Idol","Onyx Idol","Vermillion Idol","Lava Core","Fiery Core","Large .+ Shard","Small .+ Shard","Nexus Crystal","Wartorn .+ Scrap","Badge of Justice","Cosmic Infuser","^Devastation$","Infinity Blade","Phaseshift Bulwark","Warp Slicer","Staff of Disintegration","Netherstrand Longbow","Nether Spike","Bundle of Nether Spikes","Emblem of Heroism","Emblem of Valor","Abyss Crystal","Emblem of Conquest"};
GRSS_Yells["Majordomo Executus"] = "Impossible!.+I submit!";
GRSS_Yells["Attumen the Huntsman"] = "Always knew.+the hunted";
GRSS_Yells["Freya"] = "His hold on me dissipates";
GRSS_Yells["Thorim"] = "Stay your arms!";
GRSS_Yells["Hodir"] = "I am released from his grasp";
GRSS_Yells["Mimiron"] = "I allowed my mind to be corrupted";
GRSS_BossEmote = {};
GRSS_BossEmote["Chess"] = "doors of the Gamesman's Hall";
GRSS_ZoneIgnore = {"Arathi Basin","Alterac Valley","Eye of the Storm","Warsong Gulch"};
GRSS_Auto = 1;
GRSS_LootCap = 1;
GRSS_Bidding = 0;
GRSS_Rolling = 0;
GRSS_BidRolls = nil;
GRSS_HighBid = 0;
GRSS_HighBidder = "";
GRSS_CurrentSort = "total";
GRSS_BidStyle = "Silent Auction";
GRSS_CurrentItem = "";
GRSS_ItemHistory = {};
GRSS_TakeScreenshots = 0;
GRSS_CurrentLootDate = "";
GRSS_CurrentLootIndex = 0;
GRSS_LastCommand = {};
GRSS_ItemPrices = {};
GRSS_RaidFilter = "All";
GRSS_ClassFilter = "All";
GRSS_ItemQueue = {};
GRSS_ItemBoxOpen = 0;
GRSS_WipeCauser = "Unknown";
GRSS_LastWipeTime = 0;
GRSS_LastSnapshot = 0;
GRSSNewVersionPrinted = nil;
GRSS_PopupPoints = 0;
GRSS_PopupLootDate = "";
GRSS_PopupLootIndex = "";
GRSS_WaitListRequest = {}; --This is functioning as a Queue of WaitingList requests
GRSS_WaitListRequestBoxOpen = 0;
GRSS_NumberedSystems = {};
GRSS_Loot = {};
GRSS_WaitingList = {};
GRSS_RaidSignups = {};
GRSS_InviteType = "Waiting List";
GRSS_RollNumber = 1000;
GRSS_RaidPointsPopup = 1;
GRSS_AutoWipe = 1;
GRSS_PendingSnapShotName = ""
GRSS_CurrentCalendarIndex = 1;
GRSS_LootPromptInCombat = 0;
GRSS_LastSnapShotName = "";
GRSS_Redistribute_SnapShot = "";
GRSS_Redistribute_SnapShot_ExpireTime = 0;
GRSS_NextTime = nil;
GRSS_Period = 60;
GRSS_ReadyForTimer = false;
GRSS_Prefix = "GRSS: ";
GRSS_Guild = {};
GRSS_DKP = {};
GRSS_Bids = {};
GRSSCurrentSystem = "";
GRSSCurrentAction = "DKP Standings";
GRSSHelpMsg = {
"!help = This help menu",
"!dkp = Your current DKP",
"!dkp name [name2 name3...] = the DKP for the player 'name' (and name2 and name3) (i.e. !dkp Joe Fred)",
"!items = Your item history",
"!items name = Item history for player 'name' (i.e. !items Joe)",
"!bid X = Bid X points on the current item",
"!request = Put in a request for the item",
"!dkpclass class [class2 class3...] = the current standings for the 'class' (and 'class2' and 'class3') (i.e. !dkpclass mage warlock)",
"!dkpraid X = the current standings for DKP System X for current raid members (to get the list of appropriate Systems, just type !dkpraid)",
"!dkpall X = the current standings for DKP System X (to get the list of appropriate Systems, just type !dkpall)",
"!price itemname = the price of the item 'itemname' (parts of names work too, i.e. '!price felheart' will retrieve the prices of all items with 'felheart' in the name)",
"!waitlist = Add me to the Waiting List",
"!waitlistwho = Show a list of who's on the waiting list",
};
local GRSSVersion = "2.012";
local GRSSUsage = {
"Type |c00ffff00/grss <snapshotname>|r to take a snapshot (ex: |c00ffff00/grss Kel'Thuzad|r)",
"|c00ffff00/grss loot|r to open a loot prompt to manually record an item being received",
"|c00ffff00/grss adj|r to record an adjustment",
"|c00ffff00/grss reset|r to delete all your snapshots",
"|c00ffff00/grss show|r to bring up the DKP standings/bidding/rolling screen",
"|c00ffff00/grss invite|r to bring up the Waiting List/Auto-Invite screen",
"|c00ffff00/grss starttimer|r start Periodic Snapshots",
"|c00ffff00/grss stoptimer|r to disable Periodic Snapshots",
"|c00ffff00/grss noauto|r to disable auto-snapshot",
"|c00ffff00/grss yesauto|r to enable auto-snapshot",
"|c00ffff00/grss nosnapshotpopup|r to disable snapshot points popup asking how many points a snapshot is worth",
"|c00ffff00/grss yessnapshotpopup|r to enable snapshots points popup asking how many points a snapshot is worth",
"|c00ffff00/grss yesscreenshot|r to make snapshots also take a screenshot",
"|c00ffff00/grss noscreenshot|r to make snapshots NOT take a screenshot",
"|c00ffff00/grss yesloot|r to make Loot received (Blue and better) prompt for points spent",
"|c00ffff00/grss noloot|r to disable the loot prompt when items are received",
"|c00ffff00/grss yeswipe|r to enable the snapshot prompt when a wipe occurs",
"|c00ffff00/grss nowipe|r to disable the snapshot prompt when a wipe occurs",
"|c00ffff00/grss yeslootcombat|r allows the loot prompt to pop up in combat",
"|c00ffff00/grss nolootcombat|r forces the loot prompt to wait until out of combat (recommended unless you're having problems)",
"==========================================",
"Members can also send you tells like the following for information (you can even send yourself a tell for this info, too)",
};
local GRSS_Colors={
--[[
["ff9d9d9d"] = "grey",
["ffffffff"] = "white",
["ff00ff00"] = "green",
["ff0070dd"] = "rare",--]]
["ffa335ee"] = "epic",
["ffff8000"] = "legendary"
};
local GRSS_ChatFrame_OnEvent_Original = nil;
function GRSS_IsWhisperGRSSWhisper(e,t,w)
if string.find(w,"^!dkp") or string.find(w,"^!items") or string.find(w,"^!info") or string.find(w,"^!commands") or string.find(w,"^!price") or string.find(w,"^!waitlist") then
return true;
else
return false;
end
end
function GRSS_IsOutgoingWhisperGRSSWhisper(e,t,w)
if string.find(w,"^"..GRSS_Prefix) then
return true;
else
return false;
end
end
function GRSS_SetItemRef(link,text,button)
if GRSSCurrentAction ~= "DKP Standings" and GRSS_Bidding~=1 and GRSS_Rolling~=1 then
GRSSItemName:SetText(text);
end
end
function GuildRaidSnapShot_OnLoad()
--GRSSChangeSystem(0);
SlashCmdList["GuildRaidSnapShot"] = GuildRaidSnapShot_SlashHandler;
SLASH_GuildRaidSnapShot1 = "/grss";
SLASH_GuildRaidSnapShot1 = "/GRSS";
for i,v in pairs(GRSS_Bosses) do
GRSS_FastBossLookup[v] = v;
end
this:RegisterEvent("PLAYER_REGEN_ENABLED");
this:RegisterEvent("PLAYER_REGEN_DISABLED");
this:RegisterEvent("PLAYER_DEAD");
this:RegisterEvent("CHAT_MSG_COMBAT_FRIENDLY_DEATH");
this:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("CHAT_MSG_LOOT");
this:RegisterEvent("CHAT_MSG_MONSTER_YELL");
this:RegisterEvent("CHAT_MSG_RAID_BOSS_EMOTE");
this:RegisterEvent("PLAYER_GUILD_UPDATE");
this:RegisterEvent("GUILD_ROSTER_UPDATE");
this:RegisterEvent("CHAT_MSG_WHISPER");
this:RegisterEvent("CHAT_MSG_SYSTEM");
this:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
this:RegisterEvent("LOOT_OPENED");
this:RegisterEvent("RAID_ROSTER_UPDATE");
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("CALENDAR_OPEN_EVENT");
this:RegisterEvent("CALENDAR_UPDATE_EVENT");
this:RegisterEvent("CALENDAR_UPDATE_EVENT_LIST");
this:RegisterEvent("CALENDAR_NEW_EVENT");
this:RegisterEvent("ADDON_LOADED");
DEFAULT_CHAT_FRAME:AddMessage("GuildRaidSnapShot (By DKPSystem.com) Version "..GRSSVersion.." loaded. ");
DEFAULT_CHAT_FRAME:AddMessage("Type |c00ffff00/grss|r to get a list of options for GuildRaidSnapShot");
--GRSS_ChatFrame_OnEvent_Original = ChatFrame_OnEvent;
--ChatFrame_OnEvent = GRSS_ChatFrame_OnEvent_Hook;
ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER",GRSS_IsWhisperGRSSWhisper); -- incoming whispers
ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER_INFORM",GRSS_IsOutgoingWhisperGRSSWhisper); --outgoing whispers
hooksecurefunc("SetItemRef",GRSS_SetItemRef);
StaticPopupDialogs["GRSS_ITEMPOINTS"] = {
text = "How many points did |c00ffff00%s|r spend on %s",
button1 = "OK",
button2 = "Cancel",
OnAccept = function()
points = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSSRecordItemPointsOnly(points);
end,
EditBoxOnEnterPressed = function()
points = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSSRecordItemPointsOnly(points);
this:GetParent():Hide();
end,
OnShow = function()
GRSS_ItemBoxOpen = 1;
getglobal(this:GetName().."EditBox"):SetText(GRSS_PopupPoints);
end,
OnHide = function()
if table.getn(GRSS_ItemQueue) > 0 then
GRSS_NextItemPopup();
else
GRSS_ItemBoxOpen = 0;
end
end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1,
hasEditBox = 1,
};
StaticPopupDialogs["GRSS_RAIDPOINTS"] = {
text = "How many points should be awarded for the attendees in the snapshot called |c00ffff00%s|r?. Enter |c00ff0000zs|r if you want to award points based on the following loot (items awarded for the next 10 minutes)",
button1 = "OK",
button2 = "Cancel",
OnAccept = function()
points = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSSSetSnapshotPoints(points);
end,
EditBoxOnEnterPressed = function()
points = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSSSetSnapshotPoints(points);
this:GetParent():Hide();
end,
OnShow = function()
GRSS_SnapshotBoxOpen = 1;
getglobal(this:GetName().."EditBox"):SetText(GRSS_LastSnapShotPoints);
end,
OnHide = function()
end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1,
hasEditBox = 1,
};
StaticPopupDialogs["GRSS_WAITINGLIST"] = {
text = "Name of person(s) to add to waiting list? If adding more than one, seperate by a space",
button1 = "OK",
button2 = "Cancel",
OnAccept = function()
name = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSS_AddNameToWaitingList(name);
end,
EditBoxOnEnterPressed = function()
name = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSS_AddNameToWaitingList(name);
this:GetParent():Hide();
end,
OnShow = function()
getglobal(this:GetName().."EditBox"):SetText("");
end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1,
hasEditBox = 1,
};
StaticPopupDialogs["GRSS_RAIDCHECK"] = {
text = "There are %s recorded right now. Would you like to keep this data (and apply any expenditures to the current standings) or would you like to purge all the data. You should ONLY purge if you've already uploaded your snapshots.",
button1 = "Purge",
button2 = "Keep",
OnAccept = function()
GuildRaidSnapShot_SnapShots = {};
GuildRaidSnapShot_Loot = {};
GuildRaidSnapShot_Adj = {};
GRSSPrint("Snapshots Purged");
end,
OnCancel = function()
GRSS_RecalcSpentLoot();
end,
timeout = 0,
whileDead = 1,
};
StaticPopupDialogs["GRSS_TIMERCHECK"] = {
text = "The timer is currently running to take snapshots. The next snapshot is set to be taken in |c00ffff00%s minutes|r. Continue the periodic snapshots, or Stop the Timer?",
button1 = "Continue",
button2 = "Stop Timer",
OnAccept = function()
GRSS_ReadyForTimer = true;
local mins = GRSS_NextTime - GetTime();
if mins > 0 then
mins = math.floor(mins / 60);
GRSSPrint("The next snapshot wlll be in "..mins.." minutes");
end
end,
OnCancel = function()
GRSS_NextTime = nil;
GRSS_ReadyForTimer = true;
GRSSPrint("Snapshot Timer Stopped");
end,
timeout};
StaticPopupDialogs["GRSS_STARTTIMER"] = {
text = "How many minutes between snapshots?",
button1 = "OK",
button2 = "Cancel",
OnAccept = function()
mins = getglobal(this:GetParent():GetName().."EditBox"):GetText();
if tonumber(mins) == nil then
GRSSPrint(mins.." isn't exactly a number, is it?");
else
GRSS_StartTimer(mins);
end
end,
EditBoxOnEnterPressed = function()
mins = getglobal(this:GetParent():GetName().."EditBox"):GetText();
if tonumber(mins) == nil then
GRSSPrint(mins.." isn't exactly a number, is it?");
else
GRSS_StartTimer(mins);
end
this:GetParent():Hide();
end,
OnShow = function()
getglobal(this:GetName().."EditBox"):SetText(GRSS_Period);
end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1,
hasEditBox = 1,
};
StaticPopupDialogs["GRSS_WIPE"] = {
text = "Was this a wipe? If so, and if you want to take a snapshot, enter the name of the snapshot and click 'Record Wipe', otherwise, click Cancel",
button1 = "Record Wipe",
button2 = "Cancel",
OnAccept = function()
name = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSS_TakeSnapShot(name);
end,
EditBoxOnEnterPressed = function()
name = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GRSS_TakeSnapShot(name);
this:GetParent():Hide();
end,
OnShow = function()
getglobal(this:GetName().."EditBox"):SetText("Wipe on "..GRSS_WipeCauser);
end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1,
hasEditBox = 1,
};
StaticPopupDialogs["GRSS_AUTOWAITLIST"] = {
text = "|c00ffff00%s|r is requesting to be added to the Wait List. Accept or Deny?",
button1 = "Accept",
button2 = "Deny",
OnAccept = function()
local last = table.getn(GRSS_WaitListRequest);
local name = GRSS_WaitListRequest[last];
GRSS_AddNameToWaitingList(name);
GRSS_SendWhisper("You've been added to the waiting list","WHISPER",nil,name);
end,
OnCancel = function()
local last = table.getn(GRSS_WaitListRequest);
local name = GRSS_WaitListRequest[last];
GRSS_SendWhisper("Your request to be added to the waiting list has been denied","WHISPER",nil,name);
end,
OnHide = function()
table.remove(GRSS_WaitListRequest);
if table.getn(GRSS_WaitListRequest) > 0 then
GRSS_NextWaitListRequest();
else
GRSS_WaitListRequestBoxOpen = 0;
end
end,
onShow = function()
GRSS_WaitListRequestBoxOpen = 1;
end,
timeout = 0,
whileDead = 1,
};
end
function GRSS_GetCalendar()
local curmonth,curyear;
_,curmonth,_,curyear = CalendarGetDate();
if(GRSS_Calendar == nil) then
GRSS_Calendar = {};
end
local keepers = {}
for m = -1,1 do
for d=1,31 do
local numevents = CalendarGetNumDayEvents(0,d);
--GRSSPrint("Num Events:"..numevents);
if numevents > 0 then
for e=1,numevents do
local title, hour, minute, caltype,_,eventtype = CalendarGetDayEvent(m,d,e);
if eventtype > 0 then
if caltype=="GUILD" or caltype=="PLAYER" then
month = curmonth + m;
year = curyear;
if(month < 0) then
year = year - 1;
month = 12;
elseif(month > 12) then
year = year + 1;
month = 1;
end
local found = GRSS_FindEvent(title,year,month,d,hour,minute);
if found == nil then
local event = {
title = title,
monthoffset = m,
month = month,
year = year,
day = d,
eventindex = e,
hour = hour,
minute = minute,
eventtype = eventtype
}
table.insert(GRSS_Calendar,event);
found = table.getn(GRSS_Calendar);
end
keepers[found] = found;
end
end
end
end
end
end
for i,v in pairs(GRSS_Calendar) do
if keepers[i]==nil then
GRSS_Calendar[i] = nil;
end
end
end
function GRSS_FindEvent(title,year,month,day,hour,minute)
for i,e in pairs(GRSS_Calendar) do
if(e.title == title and e.month==month and e.day==day and e.hour==hour and e.minute==minute and e.year==year) then
return i;
end
end
return nil;
end
function GRSS_StoreEventDetails()
local title, desc, creator,eventtype,_,maxsize,_,_,month,day,year,hour,minute = CalendarGetEventInfo();
local i = GRSS_FindEvent(title,year,month,day,hour,minute);
if i ~= nil then
GRSS_Calendar[i].description = desc;
GRSS_Calendar[i].creator = creator;
GRSS_Calendar[i].maxsize = maxsize;
local numinvites = CalendarEventGetNumInvites();
local invites = {}
for ii = 1,numinvites do
local name,level,className,_,inviteStatus,modStatus = CalendarEventGetInvite(ii);
local inv = {
name = name,
level = level,
class = className,
status = inviteStatus
};
table.insert(invites,inv);
end
GRSS_Calendar[i].invites = invites;
end
end
function GRSS_StartTimer(mins)
GRSS_Period = mins;
GRSS_NextTime = GetTime() + (GRSS_Period*60);
GRSS_TakeSnapShot("Periodic Snapshot");
GRSSPrint("Periodic Snapshots Started. Next Snapshot will be in "..mins.." minutes");
end
function GRSS_StopTimer()
GRSS_Period = nil;
GRSS_NextTime = nil;
GRSSPrint("Periodic Snapshots Halted");
end
function GRSS_Timer_OnUpdate()
if GRSS_ReadyForTimer and GRSS_Period and GRSS_NextTime then
local now = GetTime();
if now > GRSS_NextTime then
GRSS_TakeSnapShot("Periodic Snapshot");
GRSSPrint("Next snapshot will be in "..GRSS_Period.." minutes");
GRSS_NextTime = GetTime() + (GRSS_Period*60);
--GRSS_TimerNotify = {};
end
end
--GRSSPrint("update");
if type(GRSS_GeneralTimer)=="function" then
local now = GetTime();
if now > GRSS_GeneralTimeout then
GRSSPrint("Timeout");
GRSS_GeneralTimer();
GRSS_GeneralTimer = nil;
GRSS_GeneralTimeout = nil;
end
end
end
function GRSS_StartGeneralTimer(seconds,fun)
GRSS_GeneralTimer = fun;
GRSS_GeneralTimeout = GetTime() + seconds;
end
function GRSS_NextItemPopup()
if table.getn(GRSS_ItemQueue) > 0 then
local i = table.getn(GRSS_ItemQueue);
local item, name, points;
GRSS_PopupLootDate = GRSS_ItemQueue[i].date;
GRSS_PopupLootIndex = GRSS_ItemQueue[i].index;
item = GRSS_ItemQueue[i].item;
name = GRSS_ItemQueue[i].name;
GRSS_PopupPoints = GRSS_ItemQueue[i].points;
table.remove(GRSS_ItemQueue,i);
StaticPopup_Show("GRSS_ITEMPOINTS",name,item);
end
end
function GRSS_EnqueueItem(date,index,name,item,points)
local temp = {};
temp.date = date;
temp.index = index;
temp.name = name;
temp.item = item;
temp.points = points;
table.insert(GRSS_ItemQueue,1,temp);
end
function GRSSLootSave()
local system = UIDropDownMenu_GetText(GRSSLootSystemDropDown);
local player = GRSSLootPlayer:GetText();
local points = GRSSLootPoints:GetText();
local item = GRSSLootItem:GetText();
GRSSLootClear();
GRSSRecordItem(system,player,item,points);
end
function GRSSRecordItemPointsOnly(points)
local lootrec = GuildRaidSnapShot_Loot[GRSS_PopupLootDate][GRSS_PopupLootIndex];
local playername = lootrec.player;
local sys = lootrec.system;
local hardpoints = GRSSPlayerPointCost(playername,sys,points);
GuildRaidSnapShot_Loot[GRSS_PopupLootDate][GRSS_PopupLootIndex].points = points;
GuildRaidSnapShot_Loot[GRSS_PopupLootDate][GRSS_PopupLootIndex].hardpoints = hardpoints;
GRSS_RecordCurrentPlayerReceivedItem(points);
if GRSS_Redistributing() then
GRSSObamaPoints(hardpoints)
end
end
function GRSSAdjSave()
local system = UIDropDownMenu_GetText(GRSSAdjSystemDropDown);
local player = GRSSAdjPlayer:GetText();
local points = GRSSAdjPoints:GetText();
local desc = GRSSAdjDesc:GetText();
local adjtype = "";
if GRSS_Divide[system] then
adjtype = GRSS_GetAdjType();
end
GRSSAdjClear();
GRSSRecordAdj(system,player,item,points,adjtype,desc);
end
function GRSSRecordItem(system,player,item,points)
local lootdate = date("%Y-%m-%d");
if(GuildRaidSnapShot_Loot[lootdate] == nil) then
GuildRaidSnapShot_Loot[lootdate] = {};
end
local iteminfo = {};
iteminfo.player = player;
iteminfo.item = item;
iteminfo.RealmName = GetRealmName();
iteminfo.date = date("%Y-%m-%d %H:%M:%S");
iteminfo.system = system;
iteminfo.points = points;
iteminfo.hardpoints = GRSSPlayerPointCost(player,system,points);
if GRSS_Redistributing() then
GRSSObamaPoints(iteminfo.hardpoints);
end
table.insert(GuildRaidSnapShot_Loot[lootdate],iteminfo);
if points ~= nil then
GRSSAddPoints(player,system,"spent",iteminfo.hardpoints);
end
return lootdate;
end
function GRSSRecordAdj(system,player,item,points,adjtype,desc)
local lootdate = date("%Y-%m-%d");
if(GuildRaidSnapShot_Adj[lootdate] == nil) then
GuildRaidSnapShot_Adj[lootdate] = {};
end
local adjinfo = {};
adjinfo.player = player;
adjinfo.item = item;
adjinfo.RealmName = GetRealmName();
adjinfo.date = date("%Y-%m-%d %H:%M:%S");
adjinfo.system = system;
adjinfo.points = points;
adjinfo.adjtype = adjtype;
adjinfo.description = desc;
table.insert(GuildRaidSnapShot_Adj[lootdate],adjinfo);
if points ~= nil then
if GRSS_Divide[system] then
GRSSAddPoints(player,system,adjtype,points);
else
GRSSAddPoints(player,system,"adj",points);
end
end
return lootdate;
end
function GRSSLootClear()
getglobal("GRSSLootPlayer"):SetText("");
getglobal("GRSSLootPoints"):SetText("");
getglobal("GRSSLootItem"):SetText("");
end
function GRSSAdjClear()
getglobal("GRSSAdjPlayer"):SetText("");
getglobal("GRSSAdjPoints"):SetText("");
getglobal("GRSSAdjDesc"):SetText("");
end
function GRSS_RecalcSpentLoot()
if GuildRaidSnapShot_Loot then
for ld,daytable in pairs(GuildRaidSnapShot_Loot) do
for lootindex,loottable in pairs(daytable) do
if loottable.system == nil or GRSS_Systems[loottable.system]==nil then
loottable.system = GRSSCurrentSystem
end
--points = GRSSPlayerPointCost(loottable.player,loottable.system,loottable.points);
points = loottable.hardpoints;
if tonumber(points) == nil then
points = loottable.points;
end
if tonumber(points) ~= nil then
GRSSAddPoints(loottable.player,loottable.system,"spent",points);
end
end
end
end
if GuildRaidSnapShot_Adj then
for ld,daytable in pairs(GuildRaidSnapShot_Adj) do
if daytable then
for adjindex,adjtable in pairs(daytable) do
if adjtable.system == nil or GRSS_Systems[adjtable.system]==nil then
adjtable.system = GRSSCurrentSystem
end
points = adjtable.points;
if tonumber(points) ~= nil then
if GRSS_Divide[adjtable.system] then
adjtype = adjtable.adjtype;
else
adjtype = "adj";
end
GRSSAddPoints(adjtable.player,adjtable.system,adjtype,points);
end
end
end
end
end
if GuildRaidSnapShot_SnapShots then
for snapshot in pairs(GuildRaidSnapShot_SnapShots) do
GRSSAddSnapshotPoints(snapshot);
end
GRSSChangeSystem(GRSSCurrentSystem);
end
end
function GRSSSetSnapshotPoints(points)
if string.lower(points)=="zs" or string.lower(points)=="sz" then
GRSSPrint("All Items received for the next 15 minutes will get redistributed and associated with this snapshot");
GRSS_Redistribute_SnapShot = GRSS_LastSnapShotName;
GRSS_Redistribute_SnapShot_ExpireTime = GetTime() + 15*60; -- Expire in 15 minutes
GuildRaidSnapShot_SnapShots[GRSS_LastSnapShotName].redistribute = 1;
GuildRaidSnapShot_SnapShots[GRSS_LastSnapShotName].points = 0;
else
GuildRaidSnapShot_SnapShots[GRSS_LastSnapShotName].points = points;
end
GRSSAddSnapshotPoints(GRSS_LastSnapShotName);
end
-- This works for the whole snapshot
function GRSSAddSnapshotPoints(snapshotname)
local points = GRSSNumNilZero(GuildRaidSnapShot_SnapShots[snapshotname].points);
local sys = GuildRaidSnapShot_SnapShots[snapshotname].system;
local players = GRSS_ParsePlayers(GuildRaidSnapShot_SnapShots[snapshotname].Raid);
if GuildRaidSnapShot_SnapShots[snapshotname].redistribute then
points = points/table.getn(players);
end
for _,mem in pairs(players) do
GRSSAddPoints(mem,sys,"earned",points);
end
end
-- Obama = Redistribution, get it? OLZOLZOLZ
-- This works only for newly added items, to adjust the previous value of a snapshot when an item is received and redistributed
function GRSSObamaPoints(totalpoints)
local snapshotname = GRSS_Redistribute_SnapShot;
local curpoints = GuildRaidSnapShot_SnapShots[snapshotname].points;
local sys = GuildRaidSnapShot_SnapShots[snapshotname].system;
local players = GRSS_ParsePlayers(GuildRaidSnapShot_SnapShots[snapshotname].Raid);
local newpoints = curpoints + totalpoints;
GuildRaidSnapShot_SnapShots[snapshotname].points = newpoints;
local toadd = totalpoints / table.getn(players);
for _,mem in pairs(players) do
GRSSAddPoints(mem,sys,"earned",toadd);
end
end
-- Returns the snapshot name if we are redistributing, else, returns nil
function GRSS_Redistributing()
if GRSS_Redistribute_SnapShot_ExpireTime > 0 and GetTime() < GRSS_Redistribute_SnapShot_ExpireTime then
return GRSS_Redistribute_SnapShot;
else
return nil;
end
end
function GRSSTrim (s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
function GRSS_ParsePlayers(str)
local retarr = {};
local pzarr = { strsplit(",",str) }; -- Players with Zones
for _,pz in pairs(pzarr) do
local p,z = strsplit(":",pz);
if(z~="Offline") then
table.insert(retarr,GRSSTrim(p));
end
end
return retarr;
end
function GRSS_PendingSnapshotCheck()
local items = 0;
local snapshots = 0;
local adjustments = 0;
for _ in pairs(GuildRaidSnapShot_SnapShots) do
snapshots = snapshots + 1;
end
for i,v in pairs(GuildRaidSnapShot_Adj) do
adjustments = adjustments + table.getn(v);
end
for i,v in pairs(GuildRaidSnapShot_Loot) do
items = items + table.getn(v);
end
if snapshots > 0 or items > 0 or adjustments > 0 then
local msg = items.." items, "..snapshots.." snapshots, and "..adjustments.." adjustments";
StaticPopup_Show("GRSS_RAIDCHECK",msg);
end
end
function GRSS_TimerRunningCheck()
if GRSS_NextTime then
local mins = math.floor((GRSS_NextTime - GetTime())/60);
if mins < 0 then
mins = 0
end
StaticPopup_Show("GRSS_TIMERCHECK",mins);
else
GRSS_ReadyForTimer = true;
end
end
--
function GRSS_RecordCurrentPlayerReceivedItem(pointstr)
playername = string.lower(GuildRaidSnapShot_Loot[GRSS_PopupLootDate][GRSS_PopupLootIndex].player);
normalplayername = GuildRaidSnapShot_Loot[GRSS_PopupLootDate][GRSS_PopupLootIndex].player;
points = GRSSPlayerPointCost(playername,GRSSCurrentSystem,pointstr);
if tonumber(points) ~= nil and tonumber(points) ~= 0 then
points = tonumber(points);
GRSSAddPoints(normalplayername,GRSSCurrentSystem,"spent",points);
temp = "Today: "..normalplayername.." <-- "..GuildRaidSnapShot_Loot[GRSS_PopupLootDate][GRSS_PopupLootIndex].item.." for "..points;
if GRSS_ItemHistory[string.upper(playername)] ~= nil then
table.insert(GRSS_ItemHistory[string.upper(playername)],temp);
else
GRSS_ItemHistory[string.upper(playername)] = {};
GRSS_ItemHistory[string.upper(playername)][0] = temp;
end
GRSSScrollBar_Update();
end
end
function GRSS_GetItemPoints(item)
for i,v in pairs(GRSS_ItemPrices[GRSSCurrentSystem]) do
if string.lower(item)==string.lower(v.name) then
return v.points;
end
end
return "";
end
--Sorts the Temp table GRSS_DKP
function GRSSSortBy(sort)
GRSS_CurrentSort = sort;
table.sort(GRSS_DKP,
function(a,b)
if sort=="spent" then
if GRSSCurrentAction == "DKP Standings" then
return GRSSNum(a.spent) > GRSSNum(b.spent);
elseif GRSSCurrentAction == "Rolls" or GRSSCurrentAction=="DKP+Roll" then
return GRSSNum(a.roll) > GRSSNum(b.roll);
elseif GRSSCurrentAction == "Bids" or GRSSCurrentAction == "Bid+Roll" then
return GRSSNum(a.bid) > GRSSNum(b.bid);
end
elseif sort=="bidroll" or (GRSSCurrentAction=="Bid+Roll" and sort=="adj") then
return GRSSNumNilZero(a.roll) + GRSSNumNilZero(a.bid) > GRSSNumNilZero(b.roll) + GRSSNumNilZero(b.bid);
elseif sort=="rankid" then
return GRSSNum(a.rankid) < GRSSNum(b.rankid);
elseif a[sort]==b[sort] then
return GRSSNum(a.total) > GRSSNum(b.total);
elseif sort=="name" or sort=="class" then
return (string.lower(a[sort]) < string.lower(b[sort]))
else
return (GRSSNum(a[sort]) > GRSSNum(b[sort]))
end
end
);
GRSSScrollBar_Update();
end
--Sorts the Full table generated by the downloader: GRSS_Full_DKP
function GRSSSortByFull(sort,sys)
table.sort(GRSS_Full_DKP[sys],
function(a,b)
if sort=="spent" then
if GRSSCurrentAction == "DKP Standings" then
return GRSSNum(a.spent) > GRSSNum(b.spent);
elseif GRSSCurrentAction == "Rolls" then
return GRSSNum(a.roll) > GRSSNum(b.roll);
elseif GRSSCurrentAction == "Bids" then
return GRSSNum(a.bid) > GRSSNum(b.bid);
end
elseif a[sort]==b[sort] then
return GRSSNum(a.earned) + GRSSNum(a.adj) - GRSSNum(a.spent) > GRSSNum(b.earned) + GRSSNum(b.adj) - GRSSNum(b.spent);
elseif sort=="name" or sort=="class" then
return (string.lower(a[sort]) < string.lower(b[sort]))
else
return (GRSSNum(a[sort]) > GRSSNum(b[sort]))
end
end
);
end
function GRSSChangeSystem(sys)
if sys ~= nil then
local inc = 1;
local i,v;
local top = table.getn(GRSS_Full_DKP[sys]);
GRSS_DKP = {};
local RaidTable = GRSS_RaidTable();
if GRSS_RaidFilter == "Raid Only" and GRSS_MainOnly[sys] then
for name,v in pairs(RaidTable) do
if GRSS_Alts[string.lower(name)] then
RaidTable[string.upper(GRSS_Alts[string.lower(name)])] = 1;
end
end
end
if(GRSS_RaidFilter == "" or GRSS_RaidFilter == nil) then
GRSS_RaidFilter = "All";
end
for i=1,top do
if GRSS_RaidFilter == "All" or RaidTable[string.upper(GRSS_Full_DKP[sys][i].name)]==1 then
if GRSS_ClassFilter == "All" or string.upper(GRSS_Full_DKP[sys][i].class) == string.upper(GRSS_ClassFilter) then
GRSS_DKP[inc] = {};
GRSS_DKP[inc].name = GRSS_Full_DKP[sys][i].name;
GRSS_DKP[inc].class = GRSS_Full_DKP[sys][i].class;
GRSS_DKP[inc].earned = GRSS_Full_DKP[sys][i].earned;
GRSS_DKP[inc].spent = GRSS_Full_DKP[sys][i].spent;
GRSS_DKP[inc].adj = GRSS_Full_DKP[sys][i].adj;
if GRSS_Divide and GRSS_Divide[sys] then
GRSS_DKP[inc].total = GRSS_DKP[inc].earned/GRSSNumNilOne(GRSS_DKP[inc].spent);
else
GRSS_DKP[inc].total = GRSS_DKP[inc].earned + GRSS_DKP[inc].adj - GRSS_DKP[inc].spent
end
GRSS_DKP[inc].bid = ""
GRSS_DKP[inc].roll = ""
GRSS_DKP[inc].rank = GRSS_Full_DKP[sys][i].rank;
GRSS_DKP[inc].rankid = GRSS_Full_DKP[sys][i].rankid;
inc = inc + 1;
end
end
end
GRSSScrollBar_Update();
GRSSSortBy("total");
GRSSScrollBar:Show();
if table.getn(GRSS_NumberedSystems)==0 then
for mysys in pairs(GRSS_Systems) do
table.insert(GRSS_NumberedSystems,mysys);
end
end
end
end
function GRSSGenerateBids()
GRSS_Bids = {};
local temp = {};
local n = 24;
local m = table.getn(GRSS_DKP);
for i=1,n do
temp = {};
temp.name = GRSS_DKP[math.random(m)].name;
temp.bid = math.random(1000);
table.insert(GRSS_Bids,temp);
end
GRSSBidsScrollBar_Update();
end
function GRSSNum(v)
v = tonumber(v);
if v == nil then
v = -9999999
end
return v;
end
function GRSSNumNilOne(v)
v = tonumber(v);
if v==nil or v==0 then
v = 1;
end
return v;
end
function GRSSNumNilZero(v)
v = tonumber(v);
if v == nil then
v = 0
end
return v;
end
function GRSSScrollBar_Update()
local line; -- 1 through 10 of our window to scroll
local lineplusoffset; -- an index into our data calculated from the scroll offset
local earned,sent,adj;
FauxScrollFrame_Update(GRSSScrollBar,table.getn(GRSS_DKP),10,16);
for line=1,10 do
lineplusoffset = line + FauxScrollFrame_GetOffset(GRSSScrollBar);
if lineplusoffset <= table.getn(GRSS_DKP) then
earned = "";
spent = "";
adj = "";
total = GRSS_DKP[lineplusoffset].total; -- Default Val for that
if GRSSCurrentAction == "DKP Standings" then
spent = GRSS_DKP[lineplusoffset].spent;
earned = GRSS_DKP[lineplusoffset].earned;
adj = GRSS_DKP[lineplusoffset].adj;
elseif GRSSCurrentAction == "Rolls" then
spent = GRSS_DKP[lineplusoffset].roll;
elseif GRSSCurrentAction == "Bids" then
spent = GRSS_DKP[lineplusoffset].bid;
elseif GRSSCurrentAction == "Bid+Roll" then
earned = GRSS_DKP[lineplusoffset].roll;
spent = GRSS_DKP[lineplusoffset].bid;
adj = GRSSNumNilZero(earned) + GRSSNumNilZero(spent);
if adj==0 then
adj = "";
end
elseif GRSSCurrentAction == "DKP+Roll" then
earned = GRSS_DKP[lineplusoffset].roll;
if GRSSNumNilZero(earned) > 0 then
adj = GRSSNumNilZero(earned) + total;
end
end
getglobal("GRSSRow"..line.."FieldPlayer"):SetText(GRSS_DKP[lineplusoffset].name);
getglobal("GRSSRow"..line.."FieldClass"):SetText(GRSS_DKP[lineplusoffset].class);
getglobal("GRSSRow"..line.."FieldRank"):SetText(GRSS_DKP[lineplusoffset].rank);
getglobal("GRSSRow"..line.."FieldEarned"):SetText(earned);
getglobal("GRSSRow"..line.."FieldSpent"):SetText(spent);
getglobal("GRSSRow"..line.."FieldAdj"):SetText(adj);
if tonumber(GRSS_DKP[lineplusoffset].total) ~= nil then
getglobal("GRSSRow"..line.."FieldDKP"):SetText(string.format("%.2f",GRSS_DKP[lineplusoffset].total));
else
getglobal("GRSSRow"..line.."FieldDKP"):SetText(GRSS_DKP[lineplusoffset].total);
end
getglobal("GRSSRow"..line.."FieldPlayer"):Show();
getglobal("GRSSRow"..line.."FieldClass"):Show();
getglobal("GRSSRow"..line.."FieldRank"):Show();
getglobal("GRSSRow"..line.."FieldEarned"):Show();
getglobal("GRSSRow"..line.."FieldSpent"):Show();
getglobal("GRSSRow"..line.."FieldAdj"):Show();
getglobal("GRSSRow"..line.."FieldDKP"):Show();
getglobal("GRSSRow"..line.."FieldHighlight"):Show();
else
getglobal("GRSSRow"..line.."FieldPlayer"):Hide();
getglobal("GRSSRow"..line.."FieldClass"):Hide();
getglobal("GRSSRow"..line.."FieldRank"):Hide();
getglobal("GRSSRow"..line.."FieldEarned"):Hide();
getglobal("GRSSRow"..line.."FieldSpent"):Hide();
getglobal("GRSSRow"..line.."FieldAdj"):Hide();
getglobal("GRSSRow"..line.."FieldDKP"):Hide();
getglobal("GRSSRow"..line.."FieldHighlight"):Hide();
end
end
end
function GRSSBidsScrollBar_Update()
local line; -- 1 through 10 of our window to scroll
local lineplusoffset; -- an index into our data calculated from the scroll offset
local earned,sent,adj;
FauxScrollFrame_Update(GRSSBidsScrollBar,table.getn(GRSS_Bids),23,16);
for line=1,23 do
lineplusoffset = line + FauxScrollFrame_GetOffset(GRSSBidsScrollBar);
if lineplusoffset <= table.getn(GRSS_Bids) then
getglobal("GRSSBidsRow"..line.."FieldPlayer"):SetText(GRSS_Bids[lineplusoffset].name);
getglobal("GRSSBidsRow"..line.."FieldBid"):SetText(GRSS_Bids[lineplusoffset].bid);
getglobal("GRSSBidsRow"..line.."FieldBidType"):SetText(GRSS_Bids[lineplusoffset].bidtype);
getglobal("GRSSBidsRow"..line.."FieldPlayer"):Show();
getglobal("GRSSBidsRow"..line.."FieldBid"):Show();
getglobal("GRSSBidsRow"..line.."FieldBidType"):Show();
getglobal("GRSSBidsRow"..line.."Delete"):Show();
getglobal("GRSSBidsRow"..line.."FieldHighlight"):Show();
else
getglobal("GRSSBidsRow"..line.."FieldPlayer"):Hide();
getglobal("GRSSBidsRow"..line.."FieldBid"):Hide();
getglobal("GRSSBidsRow"..line.."FieldBidType"):Hide();
getglobal("GRSSBidsRow"..line.."FieldHighlight"):Hide();
getglobal("GRSSBidsRow"..line.."Delete"):Hide();
end
end
end
function nn(v)
if v == nil then
return "nil"
else
return v;
end
end
function GuildRaidSnapShot_OnEvent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)
if(event == "CHAT_MSG_MONSTER_YELL") then
if GRSS_Auto==1 and GRSS_Yells[arg2] ~= nil then
if string.find(arg1,GRSS_Yells[arg2]) ~= nil then
if InCombatLockdown() then
GRSS_PendingSnapShotName = arg2;
else
GRSS_TakeSnapShot(arg2);
end
end
end
elseif(event == "CHAT_MSG_RAID_BOSS_EMOTE") then
if GRSS_Auto == 1 then
for i,v in ipairs(GRSS_BossEmote) do
if string.find(arg1,v) then
if InCombatLockdown() then
GRSS_PendingSnapShotName = i;
else
GRSS_TakeSnapShot(i);
end
end
end
end
elseif(event == "PLAYER_REGEN_ENABLED") then
if GRSS_PendingSnapShotName ~= "" then
GRSS_TakeSnapShot(GRSS_PendingSnapShotName);
GRSS_PendingSnapShotName = "";
end
if table.getn(GRSS_ItemQueue) > 0 then
GRSS_NextItemPopup();
end
if table.getn(GRSS_WaitListRequest)>0 then
GRSS_NextWaitListRequest()
end
elseif(event=="PLAYER_DEAD" or event=="CHAT_MSG_COMBAT_FRIENDLY_DEATH") then
GRSS_WipeCheck();
elseif(event=="COMBAT_LOG_EVENT_UNFILTERED") then
if(arg2=="PARTY_KILL" or arg2=="UNIT_DIED") then
if not IsActiveBattlefieldArena() then
if GRSS_FastBossLookup[arg7] ~= nil and GRSS_Auto == 1 then
if InCombatLockdown() then
GRSS_PendingSnapShotName = arg7;
else
GRSS_TakeSnapShot(arg7);
end
end
end
end
elseif(event=="PLAYER_TARGET_CHANGED") then
local name = UnitName("target");
if name ~= nil and GRSS_FastBossLookup[name]~= nil then
GRSS_WipeCauser = name;
end
elseif(event == "PLAYER_GUILD_UPDATE") then
GuildRoster();
elseif(event == "VARIABLES_LOADED") then
GRSSInviteScrollBar_Update();
GRSS_PendingSnapshotCheck();
GRSS_TimerRunningCheck();
elseif(event == "CALENDAR_OPEN_EVENT" or event=="CALENDAR_UPDATE_EVENT" or event=="CALENDAR_UPDATE_EVENT_LIST" or event=="CALENDAR_NEW_EVENT") then
GRSS_GetCalendar();
GRSS_StoreEventDetails();
elseif(event == "GUILD_ROSTER_UPDATE") then
GRSS_TakeGuildOnly();
elseif(event == "CHAT_MSG_LOOT") then
GRSS_CaptureLoot(arg1);
elseif(event == "RAID_ROSTER_UPDATE") then
GRSS_RaidChange(arg1,arg2);
elseif(event == "LOOT_OPENED") then
GRSS_GetLoot();
elseif(event == "CHAT_MSG_WHISPER") then
GRSS_ProcessWhisper(arg2,arg1,this.language);
elseif(event == "CHAT_MSG_SYSTEM") then
if GRSS_Rolling==1 or GRSS_BidRolls then
local name, roll;
for name, roll in string.gmatch(arg1, "(.+) rolls (%d+) %(1%-"..GRSS_RollNumber.."%)") do
GRSS_RecordRoll(name, roll);
if GRSS_BidRolls==1 then
GRSSSortBy("bidroll");
else
GRSSSortBy("roll");
end
end
end
elseif(event == "ADDON_LOADED") then
UIDropDownMenu_SetText(GRSSRollNumberDropDown,"1-"..GRSSNumNilZero(GRSS_RollNumber));
end
end
function GRSS_IsZoneIgnored()
local zone = GetRealZoneText();
for i,v in pairs(GRSS_ZoneIgnore) do
if v == zone then
return 1;
end
end
return nil;
end
function GRSS_WipeCheck()
if GRSS_Auto and GRSS_AutoWipe==1 and not IsActiveBattlefieldArena() and not GRSS_IsZoneIgnored() then
local num = GetNumRaidMembers();
local is_dead,online,dead,alive,name;
dead = 0;
if num>1 then
for i = 1, num do
name,_,_,_,_,_,_,online,is_dead = GetRaidRosterInfo(i);
if is_dead or not online then
dead = dead + 1
end
end
end
if (dead/num) >= 0.7 then
if(GetTime() > GRSS_LastWipeTime+120) then
GRSS_LastWipeTime = GetTime();
StaticPopup_Show("GRSS_WIPE");
end
end
end
end
function GRSS_RecordRoll(name,roll)
local itemname = GRSSItemName:GetText()
for i,v in pairs(GRSS_DKP) do
if string.lower(v.name)==string.lower(name) or (GRSS_MainOnly[GRSSCurrentSystem] and GRSS_Alts[string.lower(name)]==string.lower(v.name)) then
if GRSS_DKP[i].roll == "" or GRSS_DKP[i].roll == nil then
GRSS_DKP[i].roll = roll;
GRSS_SendWhisper("Your roll of "..roll.." for "..itemname.." has been recorded","WHISPER",nil,name);
end
return;
end
end
temp = {};
temp.name = name;
temp.class = "?";
temp.spent = "";
temp.earned = "";
temp.adj = "";
temp.roll = roll;
temp.total = "?";
GRSS_SendWhisper("Your roll of "..roll.." for "..itemname.." has been recorded","WHISPER",nil,name);
table.insert(GRSS_DKP,1,temp);
--GRSSScrollBar_Update();
end
function GRSS_SendWhisper(msg,msgtype,lang,to)
SendChatMessage(GRSS_Prefix..msg,msgtype,lang,to);
end
-- Will search S for the regular expressions and return the result of the first successful search, or nil if none is found
-- Allows for a briefer way rather than doing if string.find, then return, elseif string.find....
function GRSS_MultiRegex(s,...)
for i,v in ipairs({...}) do
if(string.find(s,v)) then
return string.find(s,v);
end
end
return nil;
end
function GRSS_ProcessWhisper(from,msg,lang)
temp = {};
if(string.find(msg,"^!waitlistwho") or string.find(msg,"^!whowaitlist")) then
local _,waitlist = GRSS_WaitCommaList();
GRSS_SendWhisper("Waiting List: "..waitlist,"WHISPER",lang,from);
elseif(string.find(msg,"^!waitlist")) then
if not GRSS_IsNameQueuedOnWaitList(from) then
GRSS_QueueWaitListRequest(from)
end
if GRSS_IsNameOnWaitingList(from) then
GRSS_SendWhisper("You're already on the waiting list","WHISPER",lang,from);
elseif InCombatLockdown() then
GRSS_SendWhisper("Your request to be added to the waiting list has been received, but I am currently in combat. When I am out of combat, I will be able to respond to your request","WHISPER",lang,from);
elseif GRSS_WaitListRequestBoxOpen==0 then
GRSS_NextWaitListRequest()
end
elseif(string.find(msg,"^!bid") or string.find(msg,"^!req")) then
if GRSS_Bidding == 1 or GRSS_BidRolls==1 then
local bidtype;
local amtsrch = "%s+(%d*)";
s,e,bidtype,amt = GRSS_MultiRegex(msg,
"^!bid(main)"..amtsrch,
"^!bid(off)"..amtsrch,
"^!bid(alt)"..amtsrch,
"^!(bid)"..amtsrch
);
if bidtype=="main" then
bidtype = "Main";
elseif bidtype=="off" then
bidtype = "Offspec";
elseif bidtype=="alt" then
bidtype = "Alt";
else
bidtype = "";
end
temp.name = from;
if GRSS_BidStyle=="Requests" and GRSS_BidRolls==nil then
amt = "R";
else
if amt=="" then
amt = "blank";
else
amt = GRSSNumNilZero(amt);
end
end
temp.bid = amt;
temp.bidtype = bidtype;
table.insert(GRSS_Bids,temp);
GRSSBidsScrollBar_Update();
if GRSS_BidRolls==1 then
GRSS_SendWhisper("Your bid of "..amt.." has been recorded. Remember to also /roll "..GRSS_RollNumber.." if you haven't yet","WHISPER",lang,from);
elseif GRSS_BidStyle=="Silent Non-Auction" then
GRSS_SendWhisper("Your bid of "..amt.." has been recorded","WHISPER",lang,from);
elseif GRSS_BidStyle=="Requests" then
GRSS_SendWhisper("Your request has been recorded","WHISPER",lang,from);
elseif GRSS_BidStyle=="Silent Auction" or GRSS_BidStyle=="Open Auction" then
if tonumber(amt)~=nil and tonumber(amt) > GRSS_HighBid then
GRSS_SendWhisper("You are now the high bidder with "..amt,"WHISPER",lang,from);
GRSS_HighBid = tonumber(amt);
if GRSS_HighBidder ~= from and GRSS_HighBidder ~= "" then
GRSS_SendWhisper("You are no longer the high bidder. The high bid is now "..GRSS_HighBid..".","WHISPER",nil,GRSS_HighBidder);
end
GRSS_HighBidder = from;
if GRSS_BidStyle=="Silent Auction" then
SendChatMessage("The high bid is now "..amt,"RAID");
else
SendChatMessage(GRSS_HighBidder.." is now the high bidder with "..amt,"RAID");
end
elseif tonumber(amt)~=nil and tonumber(amt) < GRSS_HighBid then
GRSS_SendWhisper(amt.." is too low","WHISPER",lang,from);
elseif tonumber(amt)~=nil and tonumber(amt) == GRSS_HighBid then
GRSS_SendWhisper("Your bid of "..amt.." ties you with the high bidder", "WHISPER", lang, from);
else
GRSS_SendWhisper("Your bid was not understood. Please specify a number. (ie: !bid 365)","WHISPER",lang,from);
end
end
local found=false;
for i,v in pairs(GRSS_DKP) do
if string.lower(v.name)==string.lower(from) or (GRSS_MainOnly[GRSSCurrentSystem] and GRSS_Alts[string.lower(from)]==string.lower(v.name)) then
if tonumber(GRSS_DKP[i].bid)==nil or (tonumber(amt) ~= nil and tonumber(GRSS_DKP[i].bid) < tonumber(amt)) then
GRSS_DKP[i].bid = amt;
end
found=true
end
end
if found==false then
temp = {};
temp.name = from;
temp.class = "?";
temp.spent = "";
temp.earned = "";
temp.adj = "";
temp.bid = amt;
temp.total = "?";
table.insert(GRSS_DKP,1,temp);
end
if GRSS_BidRolls==1 then
GRSSSortBy("bidroll");
else
GRSSSortBy("bid");
end
GRSSScrollBar_Update();
else
GRSS_SendWhisper("Sorry, bids are not being received right now", "WHISPER", lang, from);
end
elseif(string.find(msg,"^!dkpclass")) then
s,e,class = string.find(msg,"^!dkpclass%s+(.+)");
if class==nil or class == "" then
GRSS_SendWhisper("You need to specify a class (i.e. !dkpclass mage)", "WHISPER", lang, from);
else
found = false;
local classes = {};
for w in string.gmatch(string.upper(class),"(%a+)") do
classes[w]=w;
end
if string.find(string.lower(class),"death%s*knight") then
classes["DEATH KNIGHT"]="DEATH KNIGHT";
end
for sys in pairs(GRSS_Systems) do
GRSSSortByFull("total",sys);
for i,v in pairs(GRSS_Full_DKP[sys]) do
if classes[string.upper(v.class)] then
local total;
if GRSS_Divide[sys] == nil then
total = tonumber(v.earned) + tonumber(v.adj) - tonumber(v.spent)
else
total = GRSSNumNilZero(v.earned) / GRSSNumNilOne(v.spent);
end
GRSS_SendWhisper("("..sys..") "..v.name.."("..v.class.."): "..total,"WHISPER",lang,from);
found=true;
end
end
end
if found==false then
GRSS_SendWhisper("Sorry, no players were found with the class "..class,"WHISPER",lang,from);
end
end
elseif(string.find(msg,"^!dkpraid")) then
s,e,sysid = string.find(msg,"^!dkpraid%s+(.+)%s*");
if sysid==nil or sys=="" or GRSS_NumberedSystems[GRSSNumNilZero(sysid)]==nil then
GRSS_SendWhisper("You'll need to specify one of the following DKP Systems in the following form...","WHISPER",lang,from);
for sysid,sys in pairs(GRSS_NumberedSystems) do
GRSS_SendWhisper("For "..sys..": !dkpraid "..sysid,"WHISPER",lang,from);
end
else
sys = GRSS_NumberedSystems[GRSSNumNilZero(sysid)];
GRSSSortByFull("total",sys);
RaidTable = GRSS_RaidTable();
GRSS_SendWhisper("Sending DKP for "..sys.." (only showing Raid Members)","WHISPER",lang,from);
for i,v in pairs(GRSS_Full_DKP[sys]) do
if RaidTable[string.upper(v.name)]==1 then
local total = GRSSNumNilZero(v.earned) + GRSSNumNilZero(v.adj) - GRSSNumNilZero(v.spent)
GRSS_SendWhisper(v.name.."("..v.class.."): "..total,"WHISPER",lang,from);
found=true;
end
end
end
elseif(string.find(msg,"^!dkpall")) then
s,e,sysid = string.find(msg,"^!dkpall%s+(.+)%s*");
if sysid==nil or sys=="" or GRSS_NumberedSystems[GRSSNumNilZero(sysid)]==nil then
GRSS_SendWhisper("You'll need to specify one of the following DKP Systems in the following form...","WHISPER",lang,from);
for sysid,sys in pairs(GRSS_NumberedSystems) do
GRSS_SendWhisper("For "..sys..": !dkpall "..sysid,"WHISPER",lang,from);
end
else
local count = 0;
sys = GRSS_NumberedSystems[GRSSNumNilZero(sysid)];
GRSSSortByFull("total",sys);
GRSS_SendWhisper("Sending DKP for "..sys.." (Only showing top 40)","WHISPER",lang,from);
for i,v in pairs(GRSS_Full_DKP[sys]) do
if count < 40 then
local total;
if GRSS_Divide[sys] == nil then
total = GRSSNumNilZero(v.earned) + GRSSNumNilZero(v.adj) - GRSSNumNilZero(v.spent)
else
total = GRSSNumNilZero(v.earned) / GRSSNumNilOne(v.spent);
end
--local total = GRSSNumNilZero(v.earned) + GRSSNumNilZero(v.adj) - GRSSNumNilZero(v.spent)
GRSS_SendWhisper(v.name.."("..v.class.."): "..total,"WHISPER",lang,from);
found=true;
count = count + 1
end
end
end
elseif(string.find(msg,"^!dkp")) then
s,e,name = string.find(msg,"^!dkp%s*(.*)");
if name == "" then
name = from;
end
tosend = GRSSGetPlayerDKP(name);
for i,v in pairs(tosend) do
GRSS_SendWhisper(v, "WHISPER", lang, from);
end
if table.getn(tosend)==0 then
GRSS_SendWhisper("No player named "..name.." found", "WHISPER", lang, from);
end
elseif(string.find(msg,"^!items")) then
s,e,name = string.find(msg,"^!items%s*(.*)%s*");
if name == "" then
playername = string.upper(from);
else
playername = string.upper(name);
end
if GRSS_ItemHistory[playername] ~= nil then
for i,v in pairs(GRSS_ItemHistory[playername]) do
GRSS_SendWhisper(v,"WHISPER",lang,from);
end
else
GRSS_SendWhisper("There is no item history for "..playername,"WHISPER",lang,from);
end
elseif(string.find(msg,"^!price%s")) then
s,e,itemraw = string.find(msg,"^!price%s+(.*)%s*");
s,e,color,item = string.find(itemraw, "|c(%x+)|Hitem:%d+:%d+:%d+:%d+|h%[(.-)%]|h|r");
if not s then
item = itemraw
end
found = false;
for sys in pairs(GRSS_Systems) do
for i,v in pairs(GRSS_ItemPrices[sys]) do
if string.find(string.lower(v.name),string.lower(item)) then
if GRSSNumNilZero(v.points) > 0 then
GRSS_SendWhisper("("..sys..") "..v.name..": "..v.points.." points","WHISPER",lang,from);
found = true;
end
end
end
end
if found == false then
GRSS_SendWhisper("Sorry no item by the name of '"..item.." was found","WHISPER",lang,from);
end
elseif(string.find(msg,"^!help") or string.find(msg,"^!%?") or string.find(msg,"^!info") or string.find(msg,"^!commands")) then
if string.upper(from) == string.upper(UnitName("player")) then
for i,v in pairs(GRSSHelpMsg) do
GRSSPrint(v);
end
else
for i,v in pairs(GRSSHelpMsg) do
GRSS_SendWhisper(v,"WHISPER",lang,from);
end
end
end
end
function GRSSFindPlayerSystemIndex(playername,sys)
playername = string.lower(playername);
if GRSS_MainOnly[sys]==1 and GRSS_Alts[playername] then
playername = GRSS_Alts[playername];
end
if GRSS_Full_DKP[sys]==nil then
GRSS_Full_DKP[sys] = {};
end
for i,v in pairs(GRSS_Full_DKP[sys]) do
if(string.lower(v.name)==playername) then
return i;
end
end
return -1;
end
function GRSSLookupPlayerDKP(playername,sys)
local i = GRSSFindPlayerSystemIndex(playername,sys);
if i == -1 then
return 0;
else
local v = GRSS_Full_DKP[sys][i];
if(string.lower(v.name)==playername) then
local total;
if(GRSS_Divide[sys] == nil) then
total = GRSSNumNilZero(v.earned) + GRSSNumNilZero(v.adj) - GRSSNumNilZero(v.spent);
else
if(v.spent == 0) then
v.spent = 1;
end
total = GRSSNumNilZero(v.earned) / GRSSNumNilZero(v.spent);
end
return total;
end
end
end
function GRSSAddPoints(playername,sys,pointtype,points)
if sys==nil then
sys = GRSSCurrentSystem
end
if sys==nil then
return;
end
local i = GRSSFindPlayerSystemIndex(playername,sys);
if i == -1 then
local temp = {};
temp.name = playername;
temp.class = "?";
temp.spent = 0;
temp.earned = 0;
temp.adj = 0;
temp.rank = "?";
temp.rankid = 0;
table.insert(GRSS_Full_DKP[sys],temp);
i = GRSSFindPlayerSystemIndex(playername,sys);
end
GRSS_Full_DKP[sys][i][pointtype] = GRSSNumNilZero(GRSS_Full_DKP[sys][i][pointtype]) + GRSSNumNilZero(points);
if GRSSCurrentSystem == sys then
GRSSChangeSystem(sys);
end
end
function GRSSPlayerPointCost(playername,sys,pointstr)
playername = string.lower(playername);
if pointstr==nil then
return 0;
elseif tonumber(pointstr) then --if the points entered are a number, just return that number
return tonumber(pointstr);
else --if it's entered as a percentage, fetch the current DKP, and return the corresponding percentage
local matches = {string.match(pointstr,"^([%d%.]+)%%$")};
if matches then
local percent = GRSSNumNilZero(matches[1])/100;
local current = GRSSLookupPlayerDKP(playername,sys);
return current * percent;
else
return 0;
end
end
end
function GRSSGetPlayerDKP(players)
local dkp = {};
for sys in pairs(GRSS_Systems) do
for i,v in pairs(GRSS_Full_DKP[sys]) do
for name in string.gmatch(players,"([%S,]+)") do
if string.lower(v.name)==string.lower(name) then
local total;
if GRSS_Divide[sys] == nil then
total = GRSSNumNilZero(v.earned) + GRSSNumNilZero(v.adj) - GRSSNumNilZero(v.spent)
else
total = GRSSNumNilZero(v.earned) / GRSSNumNilOne(v.spent);
end
--total = GRSSNumNilZero(v.earned) + GRSSNumNilZero(v.adj) - GRSSNumNilZero(v.spent);
table.insert(dkp,"("..sys..") "..name.."("..v.class.."): "..total);
end
end
end
end
return dkp;
end
function GRSS_CompareVersions()
if not GRSSNewVersionPrinted then
if GRSSNewestVersion then
if GRSSNewestVersion~=GRSSVersion then
GRSSNewVersionPrinted = true;
GRSSPrint("|c00ff0000There is a newer version of the GuildRaidSnapShot mod ("..GRSSNewestVersion..") available. Please download the newest version from www.dkpsystem.com|r");
end
end
end
end
function GuildRaidSnapShot_SlashHandler(msg)
local newboss;
msglower = string.lower(msg);
if msglower=="" or msglower=="help" or msglower=="?" then
for i,v in pairs(GRSSUsage) do
DEFAULT_CHAT_FRAME:AddMessage(v);
end
for i,v in pairs(GRSSHelpMsg) do
local tellcolor = "|c00ffff00";
local endcolor = "|r";
v = string.gsub(v,"^(.+) = (.+)",tellcolor.."%1"..endcolor.." = %2");
DEFAULT_CHAT_FRAME:AddMessage(v);
end
elseif msglower=="reset" or msglower=="purge" then
GuildRaidSnapShot_SnapShots = {};
GuildRaidSnapShot_Loot = {};
GuildRaidSnapShot_Adj = {};
GRSSPrint("Snapshots Purged");
elseif msglower == "noauto" then
GRSS_Auto = 0;
GRSSPrint("Auto Snapshots Disabled");
elseif msglower == "yesauto" then
GRSS_Auto = 1;
GRSSPrint("Auto Snapshots Enabled");
elseif msglower == "yesloot" then
GRSS_LootCap = 1;
GRSSPrint("Looting will now result in popups prompting for points");
elseif msglower == "noloot" then
GRSS_LootCap = 0;
GRSSPrint("Looting will no longer result in popups prompting for points");
elseif msglower == "yessnapshotpopup" or msglower == "yessnapshotpopups" or msglower == "yessnapshotpoints" then
GRSS_RaidPointsPopup = 1;
GRSSPrint("Raid snapshots will now now prompt for points");
elseif msglower == "nosnapshotpopup" or msglower == "nosnapshotpopups" or msglower == "nosnapshotpoints" then
GRSSPrint("Raid snapshots will no longer result in popups prompting for points");
GRSS_RaidPointsPopup = 0;
elseif msglower == "yeslootcombat" then
GRSS_LootPromptInCombat = 1;
GRSSPrint("Loot prompts will now pop up immediately");
elseif msglower == "nolootcombat" then
GRSS_LootPromptInCombat = 0;
GRSSPrint("Loot prompts will now wait to pop once you're out of combat");
elseif msglower == "show" then
GRSS:Show();
GRSS_CompareVersions();
elseif msglower == "loot" or msglower == "item" then
GRSSLoot:Show();
elseif msglower=="adj" or msglower=="adjustment" then
GRSSAdjShowHideType()
GRSSAdj:Show();
elseif msglower == "invite" or msglower=="waitlist" or msglower=="wait" then
GRSSInvite:Show();
elseif msglower == "starttimer" then
StaticPopup_Show("GRSS_STARTTIMER");
elseif msglower == "stoptimer" then
GRSS_StopTimer();
elseif msglower == "yesscreenshot" then
GRSSPrint("Screenshots of the raid will be taken when snapshots are initiated");
GRSS_TakeScreenshots = 1
elseif msglower == "noscreenshot" then
GRSS_TakeScreenshots = nil
GRSSPrint("Screenshots of the raid will no longer be taken when snapshots are initiated");
elseif msglower == "yeswipe" then
GRSS_AutoWipe = 1;
GRSSPrint("Wipe Detection enabled");
elseif msglower == "nowipe" then
GRSS_AutoWipe = 0;
GRSSPrint("Wipe Detection disabled");
elseif GetNumRaidMembers() > 0 or GetNumPartyMembers() > 0 then
GRSS_TakeSnapShot(msg);
else
GRSSPrint("You're not in a raid");
end
end
function GRSS_CaptureLoot(msg)
if GetNumRaidMembers()>0 or GetNumPartyMembers()>0 then
local s, e, player, link = string.find(msg, "([^%s]+) receives loot: (.+)%.");
if(player == nil) then
s, e, link = string.find(msg, "You receive loot: (.+)%.");
if(link ~= nil) then
player = UnitName("player");
end
end
--GRSS_Auto = link;
if(link and player) then
local s, e, color, item = string.find(link, "|c(%x+)|Hitem[:%d%-]+|h%[(.-)%]|h|r");
if(color and item and GRSS_Colors[color]) then
-- Checking to see if the item listed is one we should ignore
for i,v in pairs(GRSS_LootIgnore) do
if string.find(item,v) then
return;
end
end
local lootdate = GRSSRecordItem(GRSSCurrentSystem,player,item,nil);
--loot search
if GRSS_LootCap == 1 then
GRSS_CurrentLootDate = lootdate;
lootindex = table.getn(GuildRaidSnapShot_Loot[lootdate]);
if GRSS_HighBid==0 or GRSS_Highbid == nil then
points = GRSS_GetItemPoints(GuildRaidSnapShot_Loot[lootdate][lootindex].item);
else
points = GRSS_HighBid;
end
GRSS_EnqueueItem(lootdate,lootindex,player,link,points);
if GRSS_ItemBoxOpen==0 and (not(InCombatLockdown()) or GRSS_LootPromptInCombat==1) then
GRSS_NextItemPopup();
end
end
end
end
end
end
function GRSS_TakeSnapShot(name)
local SnapShotName = name.." "..date("%Y-%m-%d %H:%M:%S");
GRSS_LastSnapShotName = SnapShotName;
if GRSS_LastSnapshot == nil then
GRSS_LastSnapshot = 0
end
if GuildRaidSnapShot_SnapShots[SnapShotName]==nil and GetTime() > GRSS_LastSnapshot+4 then
GRSS_LastSnapshot = GetTime();
GuildRaidSnapShot_SnapShots[SnapShotName] = {};
GuildRaidSnapShot_SnapShots[SnapShotName].RealmName = GetRealmName();
GuildRaidSnapShot_SnapShots[SnapShotName].system = GRSSCurrentSystem;
GuildRaidSnapShot_SnapShots[SnapShotName].points = 0;
local OnlineRaid,RaidList = GRSS_RaidCommaList();
GuildRaidSnapShot_SnapShots[SnapShotName]["Raid"] = RaidList;
local OnlineGuild,GuildList = GRSS_GuildCommaList();
GuildRaidSnapShot_SnapShots[SnapShotName]["Guild"] = GuildList;
local OnlineWaitingList,WaitingList = GRSS_WaitCommaList();
GuildRaidSnapShot_SnapShots[SnapShotName]["WaitList"] = WaitingList;
GRSSPrint("SnapShot Taken: "..SnapShotName.." (Guild: "..OnlineGuild.." | Raid: "..OnlineRaid.." | Waiting List: "..OnlineWaitingList..")");
if GRSS_TakeScreenshots==1 then
Screenshot();
end
GRSS_LastSnapShotPoints = GRSS_BossPoints(name,GRSSCurrentSystem);
if(GRSS_RaidPointsPopup==1) then
StaticPopup_Show("GRSS_RAIDPOINTS",name);
end
end
end
function GRSS_BossPoints(bossname,sys)
if GRSS_Dests then
for i,b in pairs(GRSS_Dests) do
if string.lower(b.boss)==string.lower(bossname) then
return b.points;
end
end
end
return "";
end
function GRSS_PlayerRank(player)
end
function GRSS_BossRatio(bossname,sys,player)
local rank = GRSS_PlayerRank(player);
for i,b in pairs(GRSS_Dests) do
if string.lower(b.boss)==string.lower(bossname) then
if b.ratios[sys] then
if b.ratios[sys][rank] then
return b.ratios[sys][rank];
end
end
end
end
return 1;
end
function GRSS_TakeGuildOnly()
local members="", level,class,online,rank,notes;
GRSS_Guild = {};
local n = GetNumGuildMembers(true);
local NumOnline = 0;
for i = 1, n do
MemName,rank,_,level,class,_,notes,_,_,online = GetGuildRosterInfo(i);
if notes == nil then
notes = "";
end
GRSS_Guild[MemName] = level .. ";" .. class..";"..rank..";;;"..notes;
end
end
function GRSS_TakeGuildNotes()
local members="", notes,num;
num =0;
GuildRoster();
GRSS_Guild = {};
local n = GetNumGuildMembers(true);
local NumOnline = 0;
GuildRaidSnapShot_Notes = {};
for i = 1, n do
MemName,_,_,_,_,_,notes = GetGuildRosterInfo(i);
if notes ~= "" then
num = num + 1;
GuildRaidSnapShot_Notes[MemName] = notes;
end
end
GRSSPrint("Guild notes Snapshot Taken: "..num.." Guild Notes Captured");
end
function GRSS_RaidCommaList()
local members="";
local NumOnline=0;
local zone="";
local con;
local n = GetNumRaidMembers();
if GetNumRaidMembers()>1 then
for i = 1, n do
MemName,_,_,_,_,_,zone,Online = GetRaidRosterInfo(i);
if Online==1 then
if zone==nil then
zone = ""
end
else
zone = "Offline";
end
members = members..MemName..":"..zone;
if i ~= n then
members = members .. ", "
end
NumOnline=NumOnline+1;
end
if GRSS_TakeScreenshots==1 then
if InCombatLockdown() then
GRSSPrint("You're currently in combat, so I can't open the raid window for this snapshot");
else
ToggleFriendsFrame(1);
ToggleFriendsFrame(5);
end
end
else
n = GetNumPartyMembers();
zone = "";
for i = 1, n do
MemName = UnitName("party"..i);
if UnitIsConnected("party"..i) then
con=1
else
con=0
end
if MemName ~= nil and con==1 then
members = members..MemName..":"..zone..", ";
NumOnline = NumOnline + 1
end
end
members = members..UnitName("player")..":"..zone;
NumOnline = NumOnline + 1;
end
return NumOnline,members
end
function GRSS_GuildCommaList()
local members="";
local online;
local zone="";
GuildRoster();
local n = GetNumGuildMembers(false);
local NumOnline = 0;
for i = 1, n do
MemName,_,_,_,_,zone,_,_,online = GetGuildRosterInfo(i);
if zone==nil then
zone = ""
end
if online==1 then
members = members..MemName .. ":" .. zone;
if i ~= n then
members = members .. ", "
end
NumOnline = NumOnline + 1;
end
end
return NumOnline,members;
end
function GRSS_WaitCommaList()
local num = table.getn(GRSS_WaitingList);
local waitlist = "";
for i = 1, num do
waitlist = waitlist..GRSS_WaitingList[i]
if i<num then
waitlist = waitlist..", ";
end
end
return num,waitlist;
end
function GRSS_RaidTable()
local members={};
local NumOnline=0;
local con;
local n = GetNumRaidMembers();
if GetNumRaidMembers()>1 then
for i = 1, n do
MemName,_,_,_,_,_,_,Online = GetRaidRosterInfo(i);
if Online==1 then
members[string.upper(MemName)]=1;
end
end
else
n = GetNumPartyMembers();
zone = "";
for i = 1, n do
MemName = UnitName("party"..i);
if UnitIsConnected("party"..i) then
con=1
else
con=0
end
if MemName ~= nil and con==1 then
members[string.upper(MemName)]=1;
end
end
members[string.upper(UnitName("player"))]=1;
end
return members;
end
function GRSS_GuildTable()
local members={};
local online;
GuildRoster();
local n = GetNumGuildMembers(false);
local NumOnline = 0;
for i = 1, n do
MemName,_,_,_,_,_,_,_,online = GetGuildRosterInfo(i);
if online==1 then
members[string.upper(MemName)]=1;
end
end
return members;
end
function GRSSSystemDropDown_OnLoad()
GRSS_Initialize_Data();
GRSSChangeSystem(GRSSCurrentSystem);
UIDropDownMenu_Initialize(this, GRSSSystemDropDown_Initialize);
if GRSS_Systems[GRSSCurrentSystem]~=nil then
UIDropDownMenu_SetText(GRSSSystemDropDown,GRSSCurrentSystem);
else
UIDropDownMenu_SetText(GRSSSystemDropDown,"Select System");
end
UIDropDownMenu_SetWidth(GRSSSystemDropDown,130);
end
function GRSSLootSystemDropDown_OnLoad()
--GRSS_Initialize_Data();
UIDropDownMenu_Initialize(this, GRSSLootSystemDropDown_Initialize);
if GRSS_Systems[GRSSCurrentSystem]~=nil then
UIDropDownMenu_SetText(GRSSLootSystemDropDown,GRSSCurrentSystem);
else
UIDropDownMenu_SetText(GRSSLootSystemDropDown,"Select System");
end
UIDropDownMenu_SetWidth(GRSSLootSystemDropDown,130);
end
function GRSSAdjSystemDropDown_OnLoad()
--GRSS_Initialize_Data();
UIDropDownMenu_Initialize(this, GRSSAdjSystemDropDown_Initialize);
if GRSS_Systems[GRSSCurrentSystem]~=nil then
UIDropDownMenu_SetText(GRSSAdjSystemDropDown,GRSSCurrentSystem);
else
UIDropDownMenu_SetText(GRSSAdjSystemDropDown,"Select System");
end
UIDropDownMenu_SetWidth(GRSSAdjSystemDropDown,130);
end
function GRSSActionDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSActionDropDown_Initialize);
UIDropDownMenu_SetText(GRSSActionDropDown,"DKP Standings");
UIDropDownMenu_SetWidth(GRSSActionDropDown,110);
end
function GRSSBidStyleDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSBidStyleDropDown_Initialize);
if GRSS_BidStyle == "" then
UIDropDownMenu_SetText(GRSSBidStyleDropDown,"Bidding Style");
else
UIDropDownMenu_SetText(GRSSBidStyleDropDown,GRSS_BidStyle);
end
UIDropDownMenu_SetWidth(GRSSBidStyleDropDown,110);
end
function GRSSBidStyleDropDown_Initialize()
local Actions = {"Silent Auction","Silent Non-Auction","Open Auction","Requests"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_ChangeBidStyle;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSS_ChangeBidStyle()
UIDropDownMenu_SetText(GRSSBidStyleDropDown,this.value);
GRSS_BidStyle = this.value;
end
function GRSSSpamDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSSpamDropDown_Initialize);
UIDropDownMenu_SetText(GRSSSpamDropDown,"Spam Chat");
UIDropDownMenu_SetWidth(GRSSSpamDropDown,110);
end
function GRSSAdjTypeDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSAdjTypeDropDown_Initialize);
UIDropDownMenu_SetText(GRSSAdjTypeDropDown,"EP(Earned)");
UIDropDownMenu_SetWidth(GRSSAdjTypeDropDown,90);
end
function GRSSSpamDropDown_Initialize()
local Actions = {"RAID","PARTY","GUILD","SAY","OFFICER"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_ChangeSpam;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSSAdjTypeDropDown_Initialize()
local Actions = {"EP(Earned)","GP(Spent)"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_SetAdjType;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSS_GetAdjType()
local adjtype = UIDropDownMenu_GetText(GRSSAdjTypeDropDown);
if string.find(adjtype,"EP") then
adjtype = "earned";
elseif string.find(adjtype,"GP") then
adjtype = "spent";
else
adjtype = "adj";
end
return adjtype;
end
function GRSS_SetAdjType()
UIDropDownMenu_SetText(GRSSAdjTypeDropDown,this.value);
local s,e,adjtype = string.find(this.value,"^(%w+)%(");
end
function GRSS_ChangeSpam()
local place = this.value;
SendChatMessage("The following are for the DKP System: "..GRSSCurrentSystem,place);
if table.getn(GRSS_DKP) > 40 then
SendChatMessage("Only showing the top 40",place);
end
local count=0;
for i,v in pairs(GRSS_DKP) do
if count < 40 then
GRSS_SendWhisper(v.name..": "..v.total,place);
count = count + 1;
end
end
end
function GRSSRaidFilterDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSRaidFilterDropDown_Initialize);
if GRSS_Spam == "" then
UIDropDownMenu_SetText(GRSSRaidFilterDropDown,"All");
else
UIDropDownMenu_SetText(GRSSRaidFilterDropDown,GRSS_RaidFilter);
end
UIDropDownMenu_SetWidth(GRSSRaidFilterDropDown,90);
end
function GRSSRaidFilterDropDown_Initialize()
local Actions = {"All","Raid Only"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_ChangeRaidFilter;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSS_ChangeRaidFilter()
UIDropDownMenu_SetText(GRSSRaidFilterDropDown,this.value);
GRSS_RaidFilter = this.value;
GRSSChangeSystem(GRSSCurrentSystem);
end
function GRSSClassFilterDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSClassFilterDropDown_Initialize);
if GRSS_BidStyle == "" then
UIDropDownMenu_SetText(GRSSClassFilterDropDown,"All");
else
UIDropDownMenu_SetText(GRSSClassFilterDropDown,GRSS_ClassFilter);
end
UIDropDownMenu_SetWidth(GRSSClassFilterDropDown,90);
end
function GRSSClassFilterDropDown_Initialize()
local Actions = {"All","Druid","Hunter","Mage","Paladin","Priest","Rogue","Shaman","Warlock","Warrior","Death Knight"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_ChangeClassFilter;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSS_ChangeClassFilter()
UIDropDownMenu_SetText(GRSSClassFilterDropDown,this.value);
GRSS_ClassFilter = this.value;
GRSSChangeSystem(GRSSCurrentSystem);
end
function GRSSRollNumberDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSRollNumberDropDown_Initialize);
UIDropDownMenu_SetText(GRSSRollNumberDropDown,"1-"..GRSSNumNilZero(GRSS_RollNumber));
UIDropDownMenu_SetWidth(GRSSRollNumberDropDown,110);
end
function GRSSRollNumberDropDown_Initialize()
local Actions = {"1-100","1-1000","1-1337"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_ChangeRollNumber;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSS_ChangeRollNumber()
UIDropDownMenu_SetText(GRSSRollNumberDropDown,this.value);
local s,e,num = string.find(this.value,"1%-(%d+)")
GRSS_RollNumber = num;
end
function GRSSSystemDropDown_OnClick()
GRSSCurrentSystem = this.value;
UIDropDownMenu_SetText(GRSSSystemDropDown,this.value);
this.isChecked=true;
GRSSChangeSystem(GRSSCurrentSystem);
end
function GRSSLootSystemDropDown_OnClick()
GRSSLootCurrentSystem = this.value;
UIDropDownMenu_SetText(GRSSLootSystemDropDown,this.value);
this.isChecked=true;
end
function GRSSAdjSystemDropDown_OnClick()
UIDropDownMenu_SetText(GRSSAdjSystemDropDown,this.value);
GRSSAdjShowHideType()
this.isChecked=true;
end
function GRSSAdjShowHideType()
local system = UIDropDownMenu_GetText(GRSSAdjSystemDropDown);
if GRSS_Divide[system] then
GRSSAdjTypeDropDown:Show();
else
GRSSAdjTypeDropDown:Hide();
end
end
function GRSS_DeleteBid(line)
lineplusoffset = line + FauxScrollFrame_GetOffset(GRSSBidsScrollBar);
amount = GRSS_Bids[lineplusoffset].bid;
name = GRSS_Bids[lineplusoffset].name;
table.remove(GRSS_Bids,lineplusoffset);
playerhigh = 0;
totalhigh = 0;
highbidder = "";
for i,v in pairs(GRSS_Bids) do
if string.lower(v.name)==string.lower(name) then
if tonumber(v.bid)~=nil and tonumber(v.bid) > playerhigh then
playerhigh = tonumber(v.bid);
end
end
if tonumber(v.bid)~=nil and tonumber(v.bid) > totalhigh then
totalhigh = tonumber(v.bid);
highbidder = v.name;
end
end
if GRSS_HighBid ~= totalhigh and GRSS_Bidding==1 then
GRSS_HighBid = totalhigh;
GRSS_HighBidder = highbidder;
if GRSS_BidStyle=="Silent Auction" then
SendChatMessage("The high bid has been changed to "..GRSS_HighBid,"RAID");
elseif GRSS_BidStyle=="Open Auction" then
SendChatMessage(highbidder.." is now the high bidder with "..totalhigh,"RAID");
end
end
for i,v in pairs(GRSS_DKP) do
if string.lower(v.name)==string.lower(name) then
GRSS_DKP[i].bid = playerhigh;
end
end
GRSSBidsScrollBar_Update();
GRSSScrollBar_Update();
end
function GRSSActionDropDown_Initialize()
local Actions = {"DKP Standings","Rolls","Bids","Bid+Roll","DKP+Roll"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_DoAction;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSSSetHeaders(earned,spent,adj,total)
GRSSHeaderEarnedText:SetText(earned);
GRSSHeaderSpentText:SetText(spent);
GRSSHeaderAdjText:SetText(adj);
GRSSHeaderDKPText:SetText(total);
end
function GRSSShowHeaders(t)
if t=="DKP Standings" then
GRSSSetHeaders("Earned","Spent","Adj","Total");
elseif t=="Bids" then
GRSSSetHeaders("","Bid","","DKP");
elseif t=="Rolls" then
GRSSSetHeaders("","Roll","","DKP");
elseif t=="Bid+Roll" then
GRSSSetHeaders("Roll","Bid","Bid+Roll","DKP");
elseif t=="DKP+Roll" then
GRSSSetHeaders("Roll","","DKP+Roll","DKP");
end
end
function GRSS_ActionShow(...)
local hide = {"GRSSBids","GRSSToggleBids","GRSSClearBids","GRSSBidStyleDropDown","GRSSToggleRolls","GRSSClearRolls","GRSSRollNumberDropDown","GRSSRaidFilterDropDown","GRSSClassFilterDropDown","GRSSSpamDropDown","GRSSLootDropDown","GRSSItemName"};
for i,v in pairs(hide) do
getglobal(v):Hide();
end
for i,v in pairs({...}) do
getglobal(v):Show();
end
end
function GRSS_ToggleRolls()
local itemname = GRSSItemName:GetText()
if GRSS_Rolling == 1 then
GRSSToggleRolls:SetText("Start Rolls");
GRSSRollNumberDropDown:Show();
GRSS_Rolling = 0;
GRSS_EnableFunctionalButtons(1);
SendChatMessage("Rolling Ended on "..itemname..". No more rolls will be recorded", "RAID");
SendChatMessage("Rolling Ended on "..itemname..". No more rolls will be recorded", "RAID_WARNING");
else
GRSSToggleRolls:SetText("Stop Rolls");
GRSSRollNumberDropDown:Hide();
GRSS_Rolling = 1;
GRSS_EnableFunctionalButtons(0);
SendChatMessage("Rolling Started on "..itemname..". If you are interested /random "..GRSS_RollNumber..". Rolls with anything but "..GRSS_RollNumber.." will be ignored.", "RAID");
SendChatMessage("Rolling Started on "..itemname..". If you are interested /random "..GRSS_RollNumber..".", "RAID_WARNING");
end
end
function GRSS_EnableFunctionalButtons(tf)
if tf == 1 then
GRSSClearBids:Enable();
GRSSClearRolls:Enable();
GRSSSystemDropDown:Show();
GRSSActionDropDown:Show();
GRSSItemName:Show();
GRSSLootDropDown:Show();
else
GRSSClearBids:Disable();
GRSSClearRolls:Disable();
GRSSBidStyleDropDown:Hide();
GRSSSystemDropDown:Hide();
GRSSActionDropDown:Hide();
GRSSItemName:Hide();
GRSSLootDropDown:Hide();
end
end
function GRSS_ToggleBids()
local player = UnitName("player");
local itemname = GRSSItemName:GetText()
if GRSS_Bidding == 1 then
GRSSToggleBids:SetText("Start Bids");
GRSS_Bidding = nil;
GRSS_BidRolls = nil;
GRSS_EnableFunctionalButtons(1);
if GRSSCurrentAction == "Bid+Roll" then
GRSSRollNumberDropDown:Show();
else
GRSSBidStyleDropDown:Show();
end
msg = "Bidding Ended for "..itemname..". No more bids will be recorded"
else
GRSSToggleBids:SetText("Stop Bids");
GRSS_Bidding = 1;
GRSS_EnableFunctionalButtons(0);
GRSS_HighBid = 0;
if GRSSCurrentAction == "Bid+Roll" then
GRSS_BidRolls = 1;
msg = "Bidding and Rolling started for "..itemname.."! Type /random "..GRSS_RollNumber.." to register your roll. Then to bid: '/w "..player.." !bid X' where X is the amount to bid.";
GRSSRollNumberDropDown:Hide();
else
if GRSS_BidStyle=="Requests" then
msg = "Taking requests for "..itemname..". To request item: /w "..player.." !req";
else
msg = "Bidding Started for "..itemname.."! To bid: '/w "..player.." !bid X' where X is the amount you wish to bid";
end
GRSSBidStyleDropDown:Hide();
end
end
SendChatMessage(msg, "RAID");
SendChatMessage(msg, "RAID_WARNING");
end
function GRSS_ClearBids()
GRSS_Bids = {};
for i,v in pairs(GRSS_DKP) do
GRSS_DKP[i].bid = ""
GRSS_DKP[i].roll = ""
end
GRSSBidsScrollBar_Update();
GRSSScrollBar_Update();
end
function GRSS_ClearRolls()
GRSS_ClearBids();
end
function GRSS_DoAction()
GRSSCurrentAction = this.value;
UIDropDownMenu_SetText(GRSSActionDropDown,this.value);
if this.value == "DKP Standings" then
GRSS_ActionShow("GRSSRaidFilterDropDown","GRSSClassFilterDropDown","GRSSSpamDropDown");
elseif this.value == "Rolls" then
GRSS_ActionShow("GRSSToggleRolls","GRSSClearRolls","GRSSRollNumberDropDown","GRSSItemName","GRSSLootDropDown");
elseif this.value == "DKP+Roll" then
GRSS_ActionShow("GRSSToggleRolls","GRSSClearRolls","GRSSRollNumberDropDown","GRSSItemName","GRSSLootDropDown");
elseif this.value == "Bids" or this.value=="Requests" then
GRSS_ActionShow("GRSSBids","GRSSToggleBids","GRSSClearBids","GRSSBidStyleDropDown","GRSSItemName","GRSSLootDropDown");
elseif this.value == "Bid+Roll" then
GRSS_ActionShow("GRSSBids","GRSSToggleBids","GRSSClearBids","GRSSRollNumberDropDown","GRSSItemName","GRSSLootDropDown");
end
GRSSShowHeaders(this.value);
--[[
if this.value == "DKP Standings" then
DKP = true;
elseif this.value == "Rolls" or this.value == "DKP+Roll" then
Rolls = true;
elseif this.value == "Bids" or this.value == "Bid+Roll" then
Bids = true;
end
if Rolls or Bids then
GRSSItemName:Show();
else
GRSSItemName:Hide();
end
GRSSShowHeaders(this.value);
GRSSShowDKP(DKP);
GRSSShowRolls(Rolls);
GRSSShowBids(Bids);
if this.value=="Bid+Roll" then
GRSSRollNumberDropDown:Show();
GRSSBidStyleDropDown:Hide();
end
--]]
GRSSScrollBar_Update();
end
function GRSSSystemDropDown_Initialize()
local info = {};
if (not GRSS_Systems) then GRSS_Systems = {}; end;
for index, sys in pairs(GRSS_Systems) do
info.text = sys;
info.value = sys;
info.func = GRSSSystemDropDown_OnClick;
info.notCheckable = nil;
info.keepShownOnClick = nil;
UIDropDownMenu_AddButton(info);
end
end
function GRSSLootSystemDropDown_Initialize()
local info = {};
if (not GRSS_Systems) then GRSS_Systems = {}; end;
for index, sys in pairs(GRSS_Systems) do
info.text = sys;
info.value = sys;
info.func = GRSSLootSystemDropDown_OnClick;
info.notCheckable = nil;
info.keepShownOnClick = nil;
UIDropDownMenu_AddButton(info);
end
end
function GRSSAdjSystemDropDown_Initialize()
local info = {};
if (not GRSS_Systems) then GRSS_Systems = {}; end;
for index, sys in pairs(GRSS_Systems) do
info.text = sys;
info.value = sys;
info.func = GRSSAdjSystemDropDown_OnClick;
info.notCheckable = nil;
info.keepShownOnClick = nil;
UIDropDownMenu_AddButton(info);
end
end
function GRSSLootDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSLootDropDown_Initialize);
end
function GRSSLootDropDown_Initialize()
local info = {};
if (not GRSS_Loot) then GRSS_Loot = {}; end;
for link in pairs(GRSS_Loot) do
info.text = link;
info.value = link;
info.func = GRSSLootDropDownSelect;
info.notCheckable = nil;
info.keepShownOnClick = nil;
UIDropDownMenu_AddButton(info);
end
end
function GRSSLootDropDown_OnClick()
ToggleDropDownMenu(1, nil, GRSSLootDropDown, "GRSSItemName", 0, 0);
end
function GRSSLootDropDownSelect()
GRSSItemName:SetText(this.value);
end
function GRSS_GetLoot()
GRSS_Loot = {};
for i = 1, GetNumLootItems() do
if LootSlotIsItem(i) then
local link = GetLootSlotLink(i);
local s, e, color, item = string.find(link, "|c(%x+)|Hitem[:%d%-]+|h%[(.-)%]|h|r");
if(color and item and GRSS_Colors[color]) then
GRSS_Loot[link]=link;
end
end
end
UIDropDownMenu_Initialize(GRSSLootDropDown, GRSSLootDropDown_Initialize);
end
-- Begin the Waiting List/Invite Code
function GRSSInviteDropDown_OnLoad()
UIDropDownMenu_Initialize(this, GRSSInviteDropDown_Initialize);
UIDropDownMenu_SetText(GRSSInviteDropDown,"Waiting List");
UIDropDownMenu_SetWidth(GRSSInviteDropDown,110);
end
function GRSSInviteDropDown_Initialize()
local Actions = {"Waiting List","Signup Invites"};
local info = {};
info.notCheckable = nil;
info.keepShownOnClick = nil;
info.func = GRSS_ChangeInvite;
for i,v in pairs(Actions) do
info.text = v;
info.value = v;
UIDropDownMenu_AddButton(info);
end
end
function GRSS_ChangeInvite()
UIDropDownMenu_SetText(GRSSInviteDropDown,this.value);
GRSS_InviteType = this.value;
if GRSS_InviteType == "Waiting List" then
GRSSInviteWaitingList:Show();
else
GRSSInviteWaitingList:Hide();
end
GRSSInviteScrollBar_Update();
end
function GRSSInviteScrollBar_Update()
local line; -- 1 through 10 of our window to scroll
local lineplusoffset; -- an index into our data calculated from the scroll offset
if GRSS_InviteType == "Waiting List" then
FauxScrollFrame_Update(GRSSInviteScrollBar,table.getn(GRSS_WaitingList),10,16);
for line=1,10 do
lineplusoffset = line + FauxScrollFrame_GetOffset(GRSSInviteScrollBar);
if lineplusoffset <= table.getn(GRSS_WaitingList) then
getglobal("GRSSInviteRow"..line.."FieldItem"):SetText(GRSS_WaitingList[lineplusoffset]);
getglobal("GRSSInviteRow"..line.."FieldItem"):Show();
getglobal("GRSSInviteRow"..line.."Invite"):Show();
getglobal("GRSSInviteRow"..line.."FieldHighlight"):Show();
getglobal("GRSSInviteRow"..line.."Delete"):Show();
else
getglobal("GRSSInviteRow"..line.."FieldItem"):Hide();
getglobal("GRSSInviteRow"..line.."FieldHighlight"):Hide();
getglobal("GRSSInviteRow"..line.."Invite"):Hide();
getglobal("GRSSInviteRow"..line.."Delete"):Hide();
end
end
else
FauxScrollFrame_Update(GRSSInviteScrollBar,table.getn(GRSS_RaidSignups),10,16);
for line=1,10 do
lineplusoffset = line + FauxScrollFrame_GetOffset(GRSSInviteScrollBar);
if lineplusoffset <= table.getn(GRSS_RaidSignups) then
getglobal("GRSSInviteRow"..line.."FieldItem"):SetText(GRSS_RaidSignups[lineplusoffset].name);
getglobal("GRSSInviteRow"..line.."FieldItem"):Show();
getglobal("GRSSInviteRow"..line.."Invite"):Show();
getglobal("GRSSInviteRow"..line.."FieldHighlight"):Show();
getglobal("GRSSInviteRow"..line.."Delete"):Hide();
else
getglobal("GRSSInviteRow"..line.."FieldItem"):Hide();
getglobal("GRSSInviteRow"..line.."FieldHighlight"):Hide();
getglobal("GRSSInviteRow"..line.."Invite"):Hide();
getglobal("GRSSInviteRow"..line.."Delete"):Hide();
end
end
end
end
function GRSS_InviteLine(n)
if GRSS_InviteType == "Waiting List" then
local lineplusoffset = n + FauxScrollFrame_GetOffset(GRSSInviteScrollBar);
local name = GRSS_WaitingList[lineplusoffset];
InviteUnit(name);
else
local RaidTable = GRSS_RaidTable();
local lineplusoffset = n + FauxScrollFrame_GetOffset(GRSSInviteScrollBar);
for i,v in pairs(GRSS_RaidSignups[lineplusoffset].waiting) do
GRSS_AddNameToWaitingList(v);
end
for i,v in pairs(GRSS_RaidSignups[lineplusoffset].pending) do
GRSS_AddNameToWaitingList(v);
end
for i,v in pairs(GRSS_RaidSignups[lineplusoffset].approved) do
InviteUnit(v);
end
end
end
function GRSS_DeleteInviteLine(n)
if GRSS_InviteType == "Waiting List" then
local lineplusoffset = n + FauxScrollFrame_GetOffset(GRSSInviteScrollBar);
local name = GRSS_WaitingList[lineplusoffset];
GRSS_RemoveFromWaitingList(name);
end
end
function GRSS_RaidChange(arg1,arg2)
local i=1;
local RaidTable = GRSS_RaidTable();
while i <= table.getn(GRSS_WaitingList) do
if RaidTable[string.upper(GRSS_WaitingList[i])]==1 then
table.remove(GRSS_WaitingList,i)
else
i = i + 1
end
end
GRSSInviteScrollBar_Update();
end
function GRSS_RemoveFromWaitingList(name)
local i = 1;
while i <= table.getn(GRSS_WaitingList) do
v = GRSS_WaitingList[i];
if string.upper(v)==string.upper(name) then
table.remove(GRSS_WaitingList,i);
else
i = i + 1
end
end
GRSSInviteScrollBar_Update();
end
function GRSS_IsNameOnWaitingList(name)
for i,v in pairs(GRSS_WaitingList) do
if string.upper(name)==string.upper(v) then
return true;
end
end
return false;
end
function GRSS_AddToWaitingList()
StaticPopup_Show("GRSS_WAITINGLIST");
end
function GRSS_AddNameToWaitingList(name)
for n in string.gmatch(name,"([^;,%s]+)") do
if not GRSS_IsNameOnWaitingList(n) then
table.insert(GRSS_WaitingList,n);
end
end
GRSSInviteScrollBar_Update();
end
function GRSS_IsNameQueuedOnWaitList(name)
for i,v in pairs(GRSS_WaitListRequest) do
if string.upper(name)==string.upper(v) then
return true;
end
end
return false;
end
function GRSS_QueueWaitListRequest(name)
table.insert(GRSS_WaitListRequest,1,name);
end
function GRSS_NextWaitListRequest()
local n = table.getn(GRSS_WaitListRequest);
if n > 0 then
local name = GRSS_WaitListRequest[n];
StaticPopup_Show("GRSS_AUTOWAITLIST",name);
end
end
function GRSSPrint(msg)
DEFAULT_CHAT_FRAME:AddMessage("GRSS: "..msg);
end