27 FinishedTurnsTotal: LongInt; |
27 FinishedTurnsTotal: LongInt; |
28 SendGameResultOn : boolean = true; |
28 SendGameResultOn : boolean = true; |
29 SendRankingStatsOn : boolean = true; |
29 SendRankingStatsOn : boolean = true; |
30 SendAchievementsStatsOn : boolean = true; |
30 SendAchievementsStatsOn : boolean = true; |
31 SendHealthStatsOn : boolean = true; |
31 SendHealthStatsOn : boolean = true; |
|
32 ClanDeathLog : PClanDeathLogEntry; |
32 |
33 |
33 procedure initModule; |
34 procedure initModule; |
34 procedure freeModule; |
35 procedure freeModule; |
35 |
36 |
36 procedure AmmoUsed(am: TAmmoType); |
37 procedure AmmoUsed(am: TAmmoType); |
159 StepDamageGiven:= 0; |
162 StepDamageGiven:= 0; |
160 StepPoisoned:= false; |
163 StepPoisoned:= false; |
161 StepDied:= false; |
164 StepDied:= false; |
162 end; |
165 end; |
163 |
166 |
164 if SendHealthStatsOn then |
167 // Remember which clans died in this turn |
165 for t:= 0 to Pred(ClansCount) do |
168 c:= 0; |
166 with ClansArray[t]^ do |
169 newEntry:= nil; |
|
170 for t:= 0 to Pred(ClansCount) do |
|
171 with ClansArray[t]^ do |
|
172 begin |
|
173 if (ClanHealth = 0) and (ClansArray[t]^.DiedThisTurn = false) then |
167 begin |
174 begin |
|
175 ClansArray[t]^.DiedThisTurn:= true; |
|
176 if c = 0 then |
|
177 begin |
|
178 new(newEntry); |
|
179 newEntry^.Turn := FinishedTurnsTotal; |
|
180 newEntry^.NextEntry := nil; |
|
181 end; |
|
182 |
|
183 newEntry^.KilledClans[c]:= ClansArray[t]; |
|
184 inc(c); |
|
185 newEntry^.KilledClansCount := c; |
|
186 end; |
|
187 |
|
188 if SendHealthStatsOn then |
168 SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth)); |
189 SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth)); |
169 end; |
190 end; |
|
191 if newEntry <> nil then |
|
192 begin |
|
193 if ClanDeathLog <> nil then |
|
194 begin |
|
195 newEntry^.NextEntry:= ClanDeathLog; |
|
196 end; |
|
197 ClanDeathLog:= newEntry; |
|
198 end; |
170 |
199 |
171 Kills:= 0; |
200 Kills:= 0; |
172 KillsClan:= 0; |
201 KillsClan:= 0; |
173 DamageClan:= 0; |
202 DamageClan:= 0; |
174 DamageTurn:= 0; |
203 DamageTurn:= 0; |
270 WriteLnToConsole( ''); |
299 WriteLnToConsole( ''); |
271 end |
300 end |
272 end; |
301 end; |
273 |
302 |
274 procedure SendStats; |
303 procedure SendStats; |
275 var i, t: LongInt; |
304 var i, t, c: LongInt; |
276 msd, msk: Longword; msdhh, mskhh: PHedgehog; |
305 msd, msk: Longword; msdhh, mskhh: PHedgehog; |
277 mskcnt: Longword; |
306 mskcnt: Longword; |
278 maxTeamKills : Longword; |
307 maxTeamKills : Longword; |
279 maxTeamKillsName : shortstring; |
308 maxTeamKillsName : shortstring; |
280 maxTurnSkips : Longword; |
309 maxTurnSkips : Longword; |
281 maxTurnSkipsName : shortstring; |
310 maxTurnSkipsName : shortstring; |
282 maxTeamDamage : Longword; |
311 maxTeamDamage : Longword; |
283 maxTeamDamageName : shortstring; |
312 maxTeamDamageName : shortstring; |
284 winnersClan : PClan; |
313 winnersClan : PClan; |
|
314 deathEntry : PClanDeathLogEntry; |
285 begin |
315 begin |
286 if SendHealthStatsOn then |
316 if SendHealthStatsOn then |
287 msd:= 0; msdhh:= nil; |
317 msd:= 0; msdhh:= nil; |
288 msk:= 0; mskhh:= nil; |
318 msk:= 0; mskhh:= nil; |
289 mskcnt:= 0; |
319 mskcnt:= 0; |
313 mskhh:= @Hedgehogs[i]; |
343 mskhh:= @Hedgehogs[i]; |
314 msk:= Hedgehogs[i].stats.MaxStepKills |
344 msk:= Hedgehogs[i].stats.MaxStepKills |
315 end; |
345 end; |
316 end; |
346 end; |
317 |
347 |
318 { send player stats for winner teams } |
348 { Send player stats for winner clans/teams. |
|
349 The clan that survived is ranked 1st. } |
319 if Clan^.ClanHealth > 0 then |
350 if Clan^.ClanHealth > 0 then |
320 begin |
351 begin |
321 winnersClan:= Clan; |
352 winnersClan:= Clan; |
322 if SendRankingStatsOn then |
353 if SendRankingStatsOn then |
323 SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' + |
354 SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' + |
341 maxTeamDamageName := TeamName; |
372 maxTeamDamageName := TeamName; |
342 end; |
373 end; |
343 |
374 |
344 end; |
375 end; |
345 |
376 |
346 { now send player stats for loser teams } |
377 { Now send player stats for loser teams/clans. |
|
378 The losing clans are ranked in the reverse order they died. |
|
379 The clan that died last is ranked 2nd, |
|
380 the clan that died second to last is ranked 3rd, |
|
381 and so on. } |
|
382 deathEntry := ClanDeathLog; |
347 if SendRankingStatsOn then |
383 if SendRankingStatsOn then |
348 for t:= 0 to Pred(TeamsCount) do |
384 while (deathEntry <> nil) do |
349 begin |
385 begin |
350 with TeamsArray[t]^ do |
386 for c:= 0 to Pred(deathEntry^.KilledClansCount) do |
351 begin |
387 if ((deathEntry^.KilledClans[c]^.ClanHealth) = 0) and (not deathEntry^.KilledClans[c]^.StatsHandled) then |
352 if Clan^.ClanHealth = 0 then |
|
353 begin |
388 begin |
354 SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' + |
389 for t:= 0 to Pred(TeamsCount) do |
355 IntToStr(stats.Kills) + ' ' + TeamName); |
390 if TeamsArray[t]^.Clan^.ClanIndex = deathEntry^.KilledClans[c]^.ClanIndex then |
356 end; |
391 begin |
357 end; |
392 SendStat(siPlayerKills, IntToStr(deathEntry^.killedClans[c]^.Color) + ' ' + |
358 end; |
393 IntToStr(TeamsArray[t]^.stats.Kills) + ' ' + TeamsArray[t]^.TeamName); |
|
394 end; |
|
395 deathEntry^.KilledClans[c]^.StatsHandled:= true; |
|
396 end; |
|
397 deathEntry:= deathEntry^.NextEntry; |
|
398 end; |
359 |
399 |
360 // “Achievements” / Details part of stats screen |
400 // “Achievements” / Details part of stats screen |
361 if SendAchievementsStatsOn then |
401 if SendAchievementsStatsOn then |
362 begin |
402 begin |
363 if msdhh <> nil then |
403 if msdhh <> nil then |