-- Library for keeping track of gears in the game-- and running functions on them-- also keeps track of clans and teamslocal trackingTeams = falselocal resurrecting = falselocal gears = {}local teams = {}local clans = {}local resurrectedHogs = {}local gearValues = {}local teamValues = {}local clanValues = {}-- Registers when a gear is addedfunction trackGear(gear) table.insert(gears, gear) if trackingTeams and GetGearType(gear) == gtResurrector then resurrecting = true elseif resurrecting and GetGearType(gear) == gtHedgehog then table.insert(resurrectedHogs, gear) endend-- Registers when a gear is deletedfunction trackDeletion(gear) gearValues[gear] = nil for k, g in ipairs(gears) do if g == gear then table.remove(gears, k) break end end if trackingTeams and GetGearType(gear) == gtHedgehog then hogs = teams[GetHogTeamName(gear)] if hogs ~= nil then if table.maxn(hogs) == 1 then hogs = nil else for k, hog in ipairs(hogs) do if hog == gear then table.remove(hogs, k) break end end end end elseif resurrecting and GetGearType(gear) == gtResurrector then for k, gear in ipairs(resurrectedHogs) do team = GetHogTeamName(gear) if teams[team] == nil then teams[team] = {} end table.insert(teams[team], gear) end resurrecting = false resurrectedHogs = {} endend-- Start to keep track of teamsfunction trackTeams() if not trackingTeams then trackingTeams = true for k, gear in ipairs(gears) do if GetGearType(gear) == gtHedgehog then team = GetHogTeamName(gear) if teams[team] == nil then teams[team] = { gear } clans[team] = GetHogClan(gear) else table.insert(teams[team], gear) end end end endend-- Registers when a hog is hiddenfunction trackHiding(gear) for k, g in ipairs(gears) do if g == gear then table.remove(gears, k) break end end if trackingTeams then hogs = teams[GetHogTeamName(gear)] if hogs ~= nil then if table.maxn(hogs) == 1 then hogs = nil else for k, hog in ipairs(hogs) do if hog == gear then table.remove(hogs, k) break end end end end endend-- Registers when a hog is restoredfunction trackRestoring(gear) table.insert(gears, gear) if trackingTeams then team = GetHogTeamName(gear) if teams[team] == nil then teams[team] = {} end table.insert(teams[team], gear) endend-- Get a value for a specific gearfunction getGearValue(gear, key) if gearValues[gear] ~= nil then return gearValues[gear][key] end return nilend-- Set a value for a specific gearfunction setGearValue(gear, key, value) found = false for id, values in pairs(gearValues) do if id == gear then values[key] = value found = true end end if not found then gearValues[gear] = { [key] = value } endend-- Increase a value for a specific gearfunction increaseGearValue(gear, key) for id, values in pairs(gearValues) do if id == gear then values[key] = values[key] + 1 end endend-- Decrease a value for a specific gearfunction decreaseGearValue(gear, key) for id, values in pairs(gearValues) do if id == gear then values[key] = values[key] - 1 end endend-- Get a value for a specific teamfunction getTeamValue(team, key) if teamValues[team] ~= nil then return teamValues[team][key] end return nilend-- Set a value for a specific teamfunction setTeamValue(team, key, value) found = false for name, values in pairs(teamValues) do if name == team then values[key] = value found = true end end if not found then teamValues[team] = { [key] = value } endend-- Increase a value for a specific teamfunction increaseTeamValue(team, key) for name, values in pairs(teamValues) do if name == team then values[key] = values[key] + 1 end endend-- Decrease a value for a specific teamfunction decreaseTeamValue(team, key) for name, values in pairs(teamValues) do if name == team then values[key] = values[key] - 1 end endend-- Get a value for a specific clanfunction getClanValue(clan, key) if clanValues[clan] ~= nil then return clanValues[clan][key] end return nilend-- Set a value for a specific clanfunction setClanValue(clan, key, value) found = false for num, values in ipairs(clanValues) do if num == clan then values[key] = value found = true end end if not found then clanValues[clan] = { [key] = value } endend-- Increase a value for a specific clanfunction increaseClanValue(clan, key) for num, values in ipairs(clanValues) do if num == clan then values[key] = values[key] + 1 end endend-- Decrease a value for a specific clanfunction decreaseClanValue(clan, key) for num, values in ipairs(clanValues) do if num == clan then values[key] = values[key] - 1 end endend-- Run a function on all tracked gearsfunction runOnGears(func) for k, gear in ipairs(gears) do func(gear) endend-- Run a function on all tracked hogsfunction runOnHogs(func) for k, hogs in pairs(teams) do for m, hog in ipairs(hogs) do func(hog) end endend-- Run a function on hogs in a teamfunction runOnHogsInTeam(func, team) if teams[team] ~= nil then for k, hog in ipairs(teams[team]) do func(hog) end endend-- Run a function on hogs in other teamsfunction runOnHogsInOtherTeams(func, team) for k, hogs in pairs(teams) do if k ~= team then for m, hog in ipairs(hogs) do func(hog) end end endend-- Run a function on hogs in a clanfunction runOnHogsInClan(func, clan) for i = 1, table.maxn(clans) do if clans[i] == clan then for k, hog in ipairs(teams[i]) do func(hog) end end endend-- Run a function on hogs in other clansfunction runOnHogsInOtherClans(func, clan) for i = 1, table.maxn(clans) do if clans[i] ~= clan then for k, hog in ipairs(teams[i]) do func(hog) end end endend