Anda di halaman 1dari 4

-- Author : WWeber

-- Create Date : 4/25/2009 2:18:24 PM


Scanner = {};
Scanner.list = {backpack={},inventory={},reputation={}};
Scanner.masked = true;
Scanner.version = GetAddOnMetadata("Scanner","Version");
Scanner.scantime = 0;
Scanner.offset = 0;
function Scanner.log(msg)
DEFAULT_CHAT_FRAME:AddMessage("Scanner: "..msg,1,1,1,0,2);
end
function Scanner.mask(text)
if Scanner.masked ~= true then
return text;
end
local mask = mod(string.reverse(Scanner.scantime)+Scanner.offset,59)..Sc
anner.list["player"];
local masked = "";
local textlen = string.len(text);
local masklen = string.len(mask);
Scanner.offset = Scanner.offset+3;
for i=1,textlen do
local j = mod(i,masklen);
local k = bit.bxor(string.byte(text,i,i),string.byte(mask,j,j));
masked = masked..string.char(k);
end
return masked;
end
function Scanner.addItem(category,id,info,count)
local item = {id=Scanner.mask(id),id2=Scanner.mask(id),info=Scanner.mask(inf
o),count=Scanner.mask(count),count2=Scanner.mask(count)};
table.insert(Scanner.list[category],item);
end
function Scanner.scanMeta()
Scanner.log("Scanning player.");
local level = UnitLevel("player");
Scanner.list["server"] = GetRealmName()
Scanner.list["player"] = UnitName("player");
Scanner.list["total"] = Scanner.mask(UnitName("player")..UnitName("player").
.UnitName("player"));
Scanner.list["level"] = Scanner.mask(level);
Scanner.list["level2"] = Scanner.mask(level);
Scanner.list["guid"] = Scanner.mask(UnitGUID("player"));
Scanner.list["guid2"] = Scanner.mask(UnitGUID("player"));
Scanner.log("Found: Player \""..UnitName("player").."\", Level "..level.."\"
, Server " ..server..".");
end
--[[function Scanner.scanGold()
Scanner.log("Scanning gold.");
local gold = GetMoney();
Scanner.list["gold"] = Scanner.mask(gold);
Scanner.list["gold2"] = Scanner.mask(gold);
Scanner.log("Found "..gold.." in copper.");
end]]
function Scanner.scanBackpack()
Scanner.log("Scanning backpack.");
for bagId=0,4 do
local slotCount = GetContainerNumSlots(bagId);
for slotId=1,slotCount do
local info = {GetContainerItemInfo(bagId,slotId)};
local link = GetContainerItemLink(bagId,slotId);
local fields = {};
if link ~= nil then
Scanner.log("Found "..link..".");
fields = {strsplit(":",link)};
Scanner.addItem("backpack",fields[2],link,info[2]);
end
end
end
end
function Scanner.scanInventory()
Scanner.log("--------------------------");
Scanner.log("Scanning inventory.");
Scanner.log("--------------------------");
for slotId=1,23 do
local link = GetInventoryItemLink("player",slotId);
local fields;
if link ~= nil then
fields = {strsplit(":",link)};
Scanner.log("Found "..link..".");
Scanner.addItem("inventory",fields[2],link,1);
end
end
end
function Scanner.scanReputation()
Scanner.log("Scanning reputation.");
for id=1,GetNumFactions() do
local info = {GetFactionInfo(id)};
local value = {name=info[1],value=info[6],value2=info[6]};
if info[6] ~= 0 and info[9] ~= 1 then
Scanner.log("Found: "..info[6].." points with "..info[1]..".");
value.name = Scanner.mask(value.name);
value.value = Scanner.mask(value.value);
value.value2 = Scanner.mask(value.value2);
table.insert(Scanner.list["reputation"],value);
end
end
end
--[[function Scanner.scanSkills()
Scanner.log("Scanning skills.");
for id=1,GetNumSkillLines() do
local info = {GetSkillLineInfo(id)};
local value = {name=info[1],value=info[4],value2=info[4]};
if info[2] ~= 1 then
Scanner.log("Found: "..info[1].." at "..info[4]..".");
value.name = Scanner.mask(value.name);
value.value = Scanner.mask(value.value);
value.value2 = Scanner.mask(value.value2);
table.insert(Scanner.list["skills"],value);
end
end
end]]
--[[function Scanner.scanTradeSkill()
Scanner.log("Scanning open tradeskill.");
local name,level = GetTradeSkillLine();
local value = {name=name,level=level};
if level ~= 0 then
Scanner.log("Found: "..name.." at "..level..".");
table.insert(Scanner.list["professions"],value);
end
end]]
function Scanner.checkIntegrity()
Scanner.offset = 0;
local total = Scanner.mask(Scanner.list["total"]);
local level = Scanner.mask(Scanner.list["level"]);
local level2 = Scanner.mask(Scanner.list["level2"]);
local guid = Scanner.mask(Scanner.list["guid"]);
local guid2 = Scanner.mask(Scanner.list["guid2"]);
if total ~= UnitName("player")..UnitName("player")..UnitName("player") then
return 1;
elseif level ~= level2 then
return 2;
elseif guid ~= guid2 then
return 3;
else
return true;
end
end
function Scanner.save()
scanner = Scanner.list;
scanner["version"] = Scanner.version;
scanner["masked"] = Scanner.masked;
scanner["scantime"] = Scanner.scantime;
Scanner.list = {backpack={},inventory={},reputation={},};
end
function Scanner.scan()
Scanner.log("Beginning scan...");
Scanner.offset = 0;
Scanner.scantime = date("%S");
Scanner.scanMeta();
--Scanner.scanGold();
Scanner.scanInventory();
Scanner.scanBackpack();
Scanner.scanReputation();
--Scanner.scanSkills();
Scanner.log("Checking integrity...");
local integral = Scanner.checkIntegrity();
if integral == true then
Scanner.save();
Scanner.log("Scan completed!");
else
Scanner.log("|cffff0000WARNING: Integrity check failed at check
"..integral..". Please try to scan again.|r");
end
end
SLASH_SCANNER1 = "/scan";
SlashCmdList["SCANNER"] = Scanner.scan;

Anda mungkin juga menyukai