vanilla-wow-addons – Rev 1
?pathlinks?
IMBA_SetRaidMarker=false;
IMBA_UseRaidMarker=1;
IMBA_Minimap_Pings={};
IMBA_Minimap_BossMarkerNum=1;
IMBA_Minimap_PingWaiting=false;
--{PingType, dX, dY, Num, Icon}
IMBA_Minimap_PingQueue={}
IMBA_Minimap_PingWait=0;
IMBA_Minimap_OldSetPing=nil;
IMBA_Minimap_OldPingFunction=nil;
function IMBA_Minimap_PrintList()
for k,v in IMBA_Minimap_Pings do
DEFAULT_CHAT_FRAME:AddMessage(k.." pinged at "..v.dx..", "..v.dy);
end
end
--Removed the Ping Sound
function IMBA_Minimap_SetPing(x, y, playSound)
IMBA_Minimap_OldSetPing(x,y,false);
end
--
function IMBA_Minimap_PingLocation(unknown, x, y)
if IMBA_Minimap_PingWaiting then
local zoom = IMBA_Minimap_Zoom[IMBA_isMinimapInsideWMO()][Minimap:GetZoom()];
local pX,pY = Minimap:GetPingPosition();
local dX,dY;
dX=x-pX;
dY=y-pY;
getglobal("IMBA_Minimap_RaidMarker"..IMBA_UseRaidMarker):Show();
getglobal("IMBA_Minimap_RaidMarker"..IMBA_UseRaidMarker):SetRaidMarker(dX,dY,tonumber(IMBA_UseRaidMarker));
dX=dX*zoom;
dY=dY*zoom;
if IMBA_SetRaidMarker then
tinsert(IMBA_Minimap_PingQueue,{1,dX,dY,IMBA_UseRaidMarker,nil});
else
tinsert(IMBA_Minimap_PingQueue,{0,dX,dY,nil,nil});
end
else
IMBA_Minimap_OldPingFunction(unknown,x,y)
if IMBA_SetRaidMarker then
IMBA_SetRaidMarker=false;
if GetNumRaidMembers()>0 and (IsRaidLeader() or IsRaidOfficer()) then
SendAddonMessage("IMBA_MINIMAP", "RAIDMARKER "..IMBA_UseRaidMarker,"RAID");
IMBA_Minimap_PingWaiting=true;
elseif GetNumPartyMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "RAIDMARKER "..IMBA_UseRaidMarker,"PARTY");
IMBA_Minimap_PingWaiting=true;
end
getglobal("IMBA_Minimap_RaidMarker"..IMBA_UseRaidMarker):Show();
getglobal("IMBA_Minimap_RaidMarker"..IMBA_UseRaidMarker):SetRaidMarker(0,0,tonumber(IMBA_UseRaidMarker));
end
end
end
function IMBA_Minimap_ProcessPingQueue()
local numEntries = getn(IMBA_Minimap_PingQueue);
if (numEntries>0) and (IMBA_Minimap_PingWaiting==false) then
local zoom = IMBA_Minimap_Zoom[IMBA_isMinimapInsideWMO()][Minimap:GetZoom()];
local pX,pY = Minimap:GetPingPosition();
if IMBA_Minimap_PingQueue[1][1]==0 then
IMBA_Minimap_OldPingFunction((IMBA_Minimap_PingQueue[1][2]+pX)/zoom, (IMBA_Minimap_PingQueue[1][3]+pY)/zoom);
tremove(IMBA_Minimap_PingQueue,1);
IMBA_Minimap_ProcessPingQueue();
elseif IMBA_Minimap_PingQueue[1][1]==1 then
IMBA_Minimap_OldPingFunction((IMBA_Minimap_PingQueue[1][2]+pX)/zoom, (IMBA_Minimap_PingQueue[1][3]+pY)/zoom);
if GetNumRaidMembers()>0 and (IsRaidLeader() or IsRaidOfficer()) then
SendAddonMessage("IMBA_MINIMAP", "RAIDMARKER "..IMBA_Minimap_PingQueue[1][4],"RAID");
IMBA_Minimap_PingWaiting=true;
elseif GetNumPartyMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "RAIDMARKER "..IMBA_Minimap_PingQueue[1][4],"PARTY");
IMBA_Minimap_PingWaiting=true;
end
tremove(IMBA_Minimap_PingQueue,1);
elseif IMBA_Minimap_PingQueue[1][1]==2 then
IMBA_Minimap_OldPingFunction((IMBA_Minimap_PingQueue[1][2]+pX)/zoom, (IMBA_Minimap_PingQueue[1][3]+pY)/zoom);
if GetNumRaidMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "BOSSMARKER","RAID");
IMBA_Minimap_PingWaiting=true;
elseif GetNumPartyMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "BOSSMARKER","PARTY");
IMBA_Minimap_PingWaiting=true;
end
tremove(IMBA_Minimap_PingQueue,1);
end
end
end
function IMBA_Minimap_ClearMarkers()
IMBA_SetRaidMarker=false;
if GetNumRaidMembers()>0 and (IsRaidLeader() or IsRaidOfficer()) then
SendAddonMessage("IMBA_MINIMAP", "CLEARRAIDMARKERS","RAID");
elseif GetNumPartyMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "CLEARRAIDMARKERS","PARTY");
end
arg1="IMBA_MINIMAP";
arg2="CLEARRAIDMARKERS";
IMBA_Minimap_OnEvent("CHAT_MSG_ADDON");
end
function IMBA_Minimap_SetBossMarker()
if IMBA_Minimap_PingWaiting then
local zoom = IMBA_Minimap_Zoom[IMBA_isMinimapInsideWMO()][Minimap:GetZoom()];
local pX,pY = Minimap:GetPingPosition();
local dX,dY;
dX=CURSOR_OFFSET_X-pX;
dY=CURSOR_OFFSET_Y-pY;
getglobal("IMBA_Minimap_BossMarker"..IMBA_Minimap_BossMarkerNum):Show();
getglobal("IMBA_Minimap_BossMarker"..IMBA_Minimap_BossMarkerNum):SetMarker(dX,dY);
dX=dX*zoom;
dY=dY*zoom;
tinsert(IMBA_Minimap_PingQueue,{2,dX,dY,nil,nil});
else
Minimap:PingLocation(CURSOR_OFFSET_X, CURSOR_OFFSET_Y);
getglobal("IMBA_Minimap_BossMarker"..IMBA_Minimap_BossMarkerNum):Show();
getglobal("IMBA_Minimap_BossMarker"..IMBA_Minimap_BossMarkerNum):SetMarker(0,0);
if GetNumRaidMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "BOSSMARKER","RAID");
IMBA_Minimap_PingWaiting=true;
elseif GetNumPartyMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "BOSSMARKER","PARTY");
IMBA_Minimap_PingWaiting=true;
else
IMBA_Minimap_BossMarkerNum=IMBA_Minimap_BossMarkerNum+1;
if IMBA_Minimap_BossMarkerNum==9 then
IMBA_Minimap_BossMarkerNum=1;
end
end
end
end
function IMBA_Minimap_ClearBossMarkers()
if GetNumRaidMembers()>0 and (IsRaidLeader() or IsRaidOfficer()) then
SendAddonMessage("IMBA_MINIMAP", "CLEARBOSSMARKERS","RAID");
elseif GetNumPartyMembers()>0 then
SendAddonMessage("IMBA_MINIMAP", "CLEARBOSSMARKERS","PARTY");
end
arg1="IMBA_MINIMAP";
arg2="CLEARBOSSMARKERS";
IMBA_Minimap_OnEvent("CHAT_MSG_ADDON");
end
function IMBA_Minimap_OnLoad()
this:RegisterEvent("CHAT_MSG_ADDON");
this:RegisterEvent("MINIMAP_PING");
this:RegisterEvent("PLAYER_LOGIN");
IMBA_MC_Locations=false;
end
function IMBA_Minimap_OnEvent(event)
if event=="CHAT_MSG_ADDON" then
if arg1=="IMBA_MINIMAP" then
local commandName, params = IMBA_ExtractNextParam(arg2);
if commandName=="RAIDMARKER" then
local number;
number, params = IMBA_ExtractNextParam(params);
if IMBA_Minimap_Pings[arg4] then
local zoom = IMBA_Minimap_Zoom[IMBA_isMinimapInsideWMO()][Minimap:GetZoom()];
getglobal("IMBA_Minimap_RaidMarker"..number):Show();
getglobal("IMBA_Minimap_RaidMarker"..number):SetRaidMarker(IMBA_Minimap_Pings[arg4].dx/zoom,IMBA_Minimap_Pings[arg4].dy/zoom,tonumber(number));
else
getglobal("IMBA_Minimap_RaidMarker"..number):Show();
getglobal("IMBA_Minimap_RaidMarker"..number):SetRaidMarker(0,0,tonumber(number));
end
if arg4 == UnitName("player") then
IMBA_Minimap_PingWaiting=false;
IMBA_Minimap_ProcessPingQueue();
end
elseif commandName=="CLEARRAIDMARKERS" then
for i=1,8,1 do
getglobal("IMBA_Minimap_RaidMarker"..i):HideMarker();
getglobal("IMBA_Minimap_RaidMarker"..i):Hide();
end
elseif commandName=="BOSSMARKER" then
local number;
number = IMBA_Minimap_BossMarkerNum;
if IMBA_Minimap_Pings[arg4] then
local zoom = IMBA_Minimap_Zoom[IMBA_isMinimapInsideWMO()][Minimap:GetZoom()];
getglobal("IMBA_Minimap_BossMarker"..number):Show();
getglobal("IMBA_Minimap_BossMarker"..number):SetMarker(IMBA_Minimap_Pings[arg4].dx/zoom,IMBA_Minimap_Pings[arg4].dy/zoom);
else
getglobal("IMBA_Minimap_BossMarker"..number):Show();
getglobal("IMBA_Minimap_BossMarker"..number):SetMarker(0,0);
end
IMBA_Minimap_BossMarkerNum=IMBA_Minimap_BossMarkerNum+1;
if IMBA_Minimap_BossMarkerNum==9 then
IMBA_Minimap_BossMarkerNum=1;
end
if arg4 == UnitName("player") then
IMBA_Minimap_PingWaiting=false;
IMBA_Minimap_ProcessPingQueue();
end
elseif commandName=="CLEARBOSSMARKERS" then
for i=1,8,1 do
getglobal("IMBA_Minimap_BossMarker"..i):HideMarker();
getglobal("IMBA_Minimap_BossMarker"..i):Hide();
end
end
end
elseif event=="MINIMAP_PING" then
local zoom = IMBA_Minimap_Zoom[IMBA_isMinimapInsideWMO()][Minimap:GetZoom()];
local PlayerName=UnitName(arg1);
for k, v in IMBA_Minimap_Pings do
v.dx=v.dx-arg2*zoom;
v.dy=v.dy-arg3*zoom;
end
if IMBA_Minimap_Pings[PlayerName]==nil then
IMBA_Minimap_Pings[PlayerName]={};
end
IMBA_Minimap_Pings[PlayerName].dx=0;
IMBA_Minimap_Pings[PlayerName].dy=0;
elseif event=="PLAYER_LOGIN" then
IMBA_Minimap_OldSetPing=Minimap_SetPing;
Minimap_SetPing=IMBA_Minimap_SetPing;
IMBA_Minimap_OldPingFunction=Minimap.PingLocation
Minimap.PingLocation=IMBA_Minimap_PingLocation;
end
end
Generated by GNU Enscript 1.6.5.90.