|
1 -- Library for keeping track of gears in the game |
|
2 -- and running functions on them |
|
3 -- also keeps track of clans and teams |
|
4 |
|
5 local trackingTeams = false |
|
6 local resurrecting = false |
|
7 local gears = {} |
|
8 local teams = {} |
|
9 local clans = {} |
|
10 local resurrectedHogs = {} |
|
11 local gearValues = {} |
|
12 local teamValues = {} |
|
13 local clanValues = {} |
|
14 |
|
15 -- Registers when a gear is added |
|
16 function trackGear(gear) |
|
17 table.insert(gears, gear) |
|
18 if trackingTeams and GetGearType(gear) == gtResurrector then |
|
19 resurrecting = true |
|
20 elseif resurrecting and GetGearType(gear) == gtHedgehog then |
|
21 table.insert(resurrectedHogs, gear) |
|
22 end |
|
23 end |
|
24 |
|
25 -- Registers when a gear is deleted |
|
26 function trackDeletion(gear) |
|
27 gearValues[gear] = nil |
|
28 for k, g in ipairs(gears) do |
|
29 if g == gear then |
|
30 table.remove(gears, k) |
|
31 break |
|
32 end |
|
33 end |
|
34 if trackingTeams and GetGearType(gear) == gtHedgehog then |
|
35 hogs = teams[GetHogTeamName(gear)] |
|
36 if hogs ~= nil then |
|
37 if table.maxn(hogs) == 1 then |
|
38 hogs = nil |
|
39 else |
|
40 for k, hog in ipairs(hogs) do |
|
41 if hog == gear then |
|
42 table.remove(hogs, k) |
|
43 break |
|
44 end |
|
45 end |
|
46 end |
|
47 end |
|
48 elseif resurrecting and GetGearType(gear) == gtResurrector then |
|
49 for k, gear in ipairs(resurrectedHogs) do |
|
50 team = GetHogTeamName(gear) |
|
51 if teams[team] == nil then |
|
52 teams[team] = {} |
|
53 end |
|
54 table.insert(teams[team], gear) |
|
55 end |
|
56 resurrecting = false |
|
57 resurrectedHogs = {} |
|
58 end |
|
59 end |
|
60 |
|
61 -- Start to keep track of teams |
|
62 function trackTeams() |
|
63 if not trackingTeams then |
|
64 trackingTeams = true |
|
65 for k, gear in ipairs(gears) do |
|
66 if GetGearType(gear) == gtHedgehog then |
|
67 team = GetHogTeamName(gear) |
|
68 if teams[team] == nil then |
|
69 teams[team] = { gear } |
|
70 clans[team] = GetHogClan(gear) |
|
71 else |
|
72 table.insert(teams[team], gear) |
|
73 end |
|
74 end |
|
75 end |
|
76 end |
|
77 end |
|
78 |
|
79 -- Registers when a hog is hidden |
|
80 function trackHiding(gear) |
|
81 for k, g in ipairs(gears) do |
|
82 if g == gear then |
|
83 table.remove(gears, k) |
|
84 break |
|
85 end |
|
86 end |
|
87 |
|
88 if trackingTeams then |
|
89 hogs = teams[GetHogTeamName(gear)] |
|
90 |
|
91 if hogs ~= nil then |
|
92 if table.maxn(hogs) == 1 then |
|
93 hogs = nil |
|
94 else |
|
95 for k, hog in ipairs(hogs) do |
|
96 if hog == gear then |
|
97 table.remove(hogs, k) |
|
98 break |
|
99 end |
|
100 end |
|
101 end |
|
102 end |
|
103 end |
|
104 end |
|
105 |
|
106 -- Registers when a hog is restored |
|
107 function trackRestoring(gear) |
|
108 table.insert(gears, gear) |
|
109 |
|
110 if trackingTeams then |
|
111 team = GetHogTeamName(gear) |
|
112 if teams[team] == nil then |
|
113 teams[team] = {} |
|
114 end |
|
115 table.insert(teams[team], gear) |
|
116 end |
|
117 end |
|
118 |
|
119 -- Get a value for a specific gear |
|
120 function getGearValue(gear, key) |
|
121 if gearValues[gear] ~= nil then |
|
122 return gearValues[gear][key] |
|
123 end |
|
124 return nil |
|
125 end |
|
126 |
|
127 -- Set a value for a specific gear |
|
128 function setGearValue(gear, key, value) |
|
129 found = false |
|
130 for id, values in pairs(gearValues) do |
|
131 if id == gear then |
|
132 values[key] = value |
|
133 found = true |
|
134 end |
|
135 end |
|
136 if not found then |
|
137 gearValues[gear] = { [key] = value } |
|
138 end |
|
139 end |
|
140 |
|
141 -- Increase a value for a specific gear |
|
142 function increaseGearValue(gear, key) |
|
143 for id, values in pairs(gearValues) do |
|
144 if id == gear then |
|
145 values[key] = values[key] + 1 |
|
146 end |
|
147 end |
|
148 end |
|
149 |
|
150 -- Decrease a value for a specific gear |
|
151 function decreaseGearValue(gear, key) |
|
152 for id, values in pairs(gearValues) do |
|
153 if id == gear then |
|
154 values[key] = values[key] - 1 |
|
155 end |
|
156 end |
|
157 end |
|
158 |
|
159 -- Get a value for a specific team |
|
160 function getTeamValue(team, key) |
|
161 if teamValues[team] ~= nil then |
|
162 return teamValues[team][key] |
|
163 end |
|
164 return nil |
|
165 end |
|
166 |
|
167 -- Set a value for a specific team |
|
168 function setTeamValue(team, key, value) |
|
169 found = false |
|
170 for name, values in pairs(teamValues) do |
|
171 if name == team then |
|
172 values[key] = value |
|
173 found = true |
|
174 end |
|
175 end |
|
176 if not found then |
|
177 teamValues[team] = { [key] = value } |
|
178 end |
|
179 end |
|
180 |
|
181 -- Increase a value for a specific team |
|
182 function increaseTeamValue(team, key) |
|
183 for name, values in pairs(teamValues) do |
|
184 if name == team then |
|
185 values[key] = values[key] + 1 |
|
186 end |
|
187 end |
|
188 end |
|
189 |
|
190 -- Decrease a value for a specific team |
|
191 function decreaseTeamValue(team, key) |
|
192 for name, values in pairs(teamValues) do |
|
193 if name == team then |
|
194 values[key] = values[key] - 1 |
|
195 end |
|
196 end |
|
197 end |
|
198 |
|
199 -- Get a value for a specific clan |
|
200 function getClanValue(clan, key) |
|
201 if clanValues[clan] ~= nil then |
|
202 return clanValues[clan][key] |
|
203 end |
|
204 return nil |
|
205 end |
|
206 |
|
207 -- Set a value for a specific clan |
|
208 function setClanValue(clan, key, value) |
|
209 found = false |
|
210 for num, values in ipairs(clanValues) do |
|
211 if num == clan then |
|
212 values[key] = value |
|
213 found = true |
|
214 end |
|
215 end |
|
216 if not found then |
|
217 clanValues[clan] = { [key] = value } |
|
218 end |
|
219 end |
|
220 |
|
221 -- Increase a value for a specific clan |
|
222 function increaseClanValue(clan, key) |
|
223 for num, values in ipairs(clanValues) do |
|
224 if num == clan then |
|
225 values[key] = values[key] + 1 |
|
226 end |
|
227 end |
|
228 end |
|
229 |
|
230 -- Decrease a value for a specific clan |
|
231 function decreaseClanValue(clan, key) |
|
232 for num, values in ipairs(clanValues) do |
|
233 if num == clan then |
|
234 values[key] = values[key] - 1 |
|
235 end |
|
236 end |
|
237 end |
|
238 |
|
239 -- Run a function on all tracked gears |
|
240 function runOnGears(func) |
|
241 for k, gear in ipairs(gears) do |
|
242 func(gear) |
|
243 end |
|
244 end |
|
245 |
|
246 -- Run a function on all tracked hogs |
|
247 function runOnHogs(func) |
|
248 for k, hogs in pairs(teams) do |
|
249 for m, hog in ipairs(hogs) do |
|
250 func(hog) |
|
251 end |
|
252 end |
|
253 end |
|
254 |
|
255 -- Run a function on hogs in a team |
|
256 function runOnHogsInTeam(func, team) |
|
257 if teams[team] ~= nil then |
|
258 for k, hog in ipairs(teams[team]) do |
|
259 func(hog) |
|
260 end |
|
261 end |
|
262 end |
|
263 |
|
264 -- Run a function on hogs in other teams |
|
265 function runOnHogsInOtherTeams(func, team) |
|
266 for k, hogs in pairs(teams) do |
|
267 if k ~= team then |
|
268 for m, hog in ipairs(hogs) do |
|
269 func(hog) |
|
270 end |
|
271 end |
|
272 end |
|
273 end |
|
274 |
|
275 -- Run a function on hogs in a clan |
|
276 function runOnHogsInClan(func, clan) |
|
277 for i = 1, table.maxn(clans) do |
|
278 if clans[i] == clan then |
|
279 for k, hog in ipairs(teams[i]) do |
|
280 func(hog) |
|
281 end |
|
282 end |
|
283 end |
|
284 end |
|
285 |
|
286 -- Run a function on hogs in other clans |
|
287 function runOnHogsInOtherClans(func, clan) |
|
288 for i = 1, table.maxn(clans) do |
|
289 if clans[i] ~= clan then |
|
290 for k, hog in ipairs(teams[i]) do |
|
291 func(hog) |
|
292 end |
|
293 end |
|
294 end |
|
295 end |