You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.3 KiB
174 lines
5.3 KiB
--Not Loaded
|
|
local After = C_Timer.After;
|
|
|
|
local DistanceCalculator;
|
|
local MovementListener;
|
|
|
|
function NarciAPI_ActivateDistanceCalculator(calibrateDistance)
|
|
if not DistanceCalculator then
|
|
--Timer frame
|
|
DistanceCalculator = CreateFrame("Frame");
|
|
DistanceCalculator:Hide();
|
|
DistanceCalculator.basicSpeed = 0;
|
|
|
|
local function OnUpdate(self, elapsed)
|
|
self.t = self.t + elapsed;
|
|
end
|
|
|
|
DistanceCalculator:SetScript("OnShow", function(self)
|
|
self.t = 0;
|
|
end);
|
|
|
|
DistanceCalculator:SetScript("OnHide", function(self)
|
|
print(self.t);
|
|
if self.basicSpeed > 0 then
|
|
local d = self.basicSpeed * self.t;
|
|
d = math.floor(d * 100 + 0.5) / 100;
|
|
print("|cffFFF569"..d.." yd|r");
|
|
elseif self.t > 0.2 then
|
|
if self.calibrateDistance then
|
|
self.basicSpeed = self.calibrateDistance / self.t;
|
|
self.calibrateDistance = nil;
|
|
print("Speed: ".. math.floor(self.basicSpeed * 100 + 0.5) / 100 .. " yd/s" );
|
|
else
|
|
print("Speed Not Calibrated");
|
|
end
|
|
end
|
|
self.t = 0;
|
|
end);
|
|
|
|
DistanceCalculator:SetScript("OnUpdate", OnUpdate);
|
|
|
|
--Event listener
|
|
MovementListener = CreateFrame("Frame");
|
|
MovementListener:Hide();
|
|
|
|
MovementListener:SetScript("OnShow", function(self)
|
|
self:RegisterEvent("PLAYER_STARTED_MOVING");
|
|
self:RegisterEvent("PLAYER_STOPPED_MOVING");
|
|
end);
|
|
|
|
local function OnEvent(self, event)
|
|
if event == "PLAYER_STARTED_MOVING" then
|
|
DistanceCalculator:Show();
|
|
else
|
|
DistanceCalculator:Hide();
|
|
end
|
|
end
|
|
|
|
MovementListener:SetScript("OnEvent", OnEvent);
|
|
|
|
--Global
|
|
function NarciAPI_DeactivateDistanceCalculator()
|
|
MovementListener:Hide();
|
|
DistanceCalculator:Hide();
|
|
end
|
|
end
|
|
|
|
MovementListener:Show();
|
|
|
|
if calibrateDistance and type(calibrateDistance) == "number" and calibrateDistance >= 5 then
|
|
DistanceCalculator.basicSpeed = 0;
|
|
DistanceCalculator.calibrateDistance = calibrateDistance;
|
|
end
|
|
end
|
|
|
|
local _G = _G;
|
|
local Globals;
|
|
local totalGlobals;
|
|
|
|
local SEARCH_PER_FRAME = 240;
|
|
local numLoop = 0;
|
|
local numMatch = 0;
|
|
local function SearchLoop(b, key, value)
|
|
local find = string.find;
|
|
local index;
|
|
|
|
if key then
|
|
local globalName
|
|
for i = b, b + SEARCH_PER_FRAME do
|
|
if Globals[i] then
|
|
index = i;
|
|
globalName = Globals[i];
|
|
if find(globalName, key) then
|
|
numMatch = numMatch + 1;
|
|
|
|
local t = type(_G[ globalName ]);
|
|
if t == "number" or t == "string" then
|
|
print("|cffffd200".. globalName.."|r = ".. (_G[ globalName ] or "nil") );
|
|
else
|
|
print("|cff808080"..t.." |cffffd200".. globalName);
|
|
end
|
|
end
|
|
else
|
|
print("Search Completes ---------------")
|
|
print("Found ".. "|cffffd200".. numMatch .. "|r matches.")
|
|
numLoop = 0;
|
|
return
|
|
end
|
|
end
|
|
else
|
|
local globalValue;
|
|
value = tostring(value);
|
|
for i = b, b + SEARCH_PER_FRAME do
|
|
if Globals[i] then
|
|
index = i;
|
|
globalValue = _G[ Globals[i] ];
|
|
if (type(globalValue) == "string" or type(globalValue) == "number") and find(globalValue, value) then
|
|
numMatch = numMatch + 1;
|
|
print("|cffffd200".. Globals[i].."|r = ".. (globalValue or "nil") );
|
|
end
|
|
else
|
|
print("Search Completes ---------------")
|
|
print("Found ".. "|cffffd200".. numMatch .. "|r matches.")
|
|
numLoop = 0;
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
After(0, function()
|
|
SearchLoop(b + SEARCH_PER_FRAME + 1, key)
|
|
end)
|
|
|
|
|
|
numLoop = numLoop + 1;
|
|
if numLoop == 100 then
|
|
numLoop = 0;
|
|
print(math.floor(index / totalGlobals * 10000 + 0.5)/100 .. "% ----------------------------")
|
|
end
|
|
end
|
|
|
|
function Narci_SearchGlobalString(key, value)
|
|
if key then
|
|
if type(key) ~= "string" then
|
|
print("The key must be a string!");
|
|
return
|
|
end
|
|
elseif value then
|
|
if type(value) ~= "number" and type(value) ~= "string" then
|
|
print("The value must be a string or number!");
|
|
return
|
|
end
|
|
else
|
|
return
|
|
end
|
|
|
|
if not Globals then
|
|
Globals = {};
|
|
totalGlobals = 0;
|
|
for k, v in pairs(_G) do
|
|
Globals[totalGlobals] = k;
|
|
totalGlobals = totalGlobals + 1;
|
|
end
|
|
end
|
|
|
|
numLoop = 0;
|
|
numMatch = 0;
|
|
local beginning = 1;
|
|
if value then
|
|
SearchLoop(beginning, nil, value)
|
|
else
|
|
SearchLoop(beginning, key)
|
|
end
|
|
end
|