hedgewars/uStats.pas
changeset 13757 f0cb47f0bfaf
parent 13756 a0d6404a80a2
child 13758 b1177e9c9ee9
equal deleted inserted replaced
13756:a0d6404a80a2 13757:f0cb47f0bfaf
   310     maxTurnSkipsName : shortstring;
   310     maxTurnSkipsName : shortstring;
   311     maxTeamDamage : Longword;
   311     maxTeamDamage : Longword;
   312     maxTeamDamageName : shortstring;
   312     maxTeamDamageName : shortstring;
   313     winnersClan : PClan;
   313     winnersClan : PClan;
   314     deathEntry : PClanDeathLogEntry;
   314     deathEntry : PClanDeathLogEntry;
       
   315     currentRank: Longword;
   315 begin
   316 begin
   316 if SendHealthStatsOn then
   317 if SendHealthStatsOn then
   317     msd:= 0; msdhh:= nil;
   318     msd:= 0; msdhh:= nil;
   318     msk:= 0; mskhh:= nil;
   319     msk:= 0; mskhh:= nil;
   319     mskcnt:= 0;
   320     mskcnt:= 0;
   320     maxTeamKills := 0;
   321     maxTeamKills := 0;
   321     maxTurnSkips := 0;
   322     maxTurnSkips := 0;
   322     maxTeamDamage := 0;
   323     maxTeamDamage := 0;
   323     winnersClan:= nil;
   324     winnersClan:= nil;
       
   325     currentRank:= 0;
   324 
   326 
   325     for t:= 0 to Pred(TeamsCount) do
   327     for t:= 0 to Pred(TeamsCount) do
   326         with TeamsArray[t]^ do
   328         with TeamsArray[t]^ do
   327         begin
   329         begin
   328             if (not ExtDriven) and SendRankingStatsOn then
   330             if (not ExtDriven) and SendRankingStatsOn then
   349             The clan that survived is ranked 1st. }
   351             The clan that survived is ranked 1st. }
   350             if Clan^.ClanHealth > 0 then
   352             if Clan^.ClanHealth > 0 then
   351                 begin
   353                 begin
   352                 winnersClan:= Clan;
   354                 winnersClan:= Clan;
   353                 if SendRankingStatsOn then
   355                 if SendRankingStatsOn then
       
   356                     begin
       
   357                     currentRank:= 1;
       
   358                     SendStat(siTeamRank, '1');
   354                     SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   359                     SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   355                         IntToStr(stats.Kills) + ' ' + TeamName);
   360                         IntToStr(stats.Kills) + ' ' + TeamName);
       
   361                     end;
   356             end;
   362             end;
   357 
   363 
   358             { determine maximum values of TeamKills, TurnSkips, TeamDamage }
   364             { determine maximum values of TeamKills, TurnSkips, TeamDamage }
   359             if stats.TeamKills > maxTeamKills then
   365             if stats.TeamKills > maxTeamKills then
   360                 begin
   366                 begin
   371                 maxTeamDamage := stats.TeamDamage;
   377                 maxTeamDamage := stats.TeamDamage;
   372                 maxTeamDamageName := TeamName;
   378                 maxTeamDamageName := TeamName;
   373             end;
   379             end;
   374 
   380 
   375         end;
   381         end;
       
   382 
       
   383     inc(currentRank);
   376 
   384 
   377     { Now send player stats for loser teams/clans.
   385     { Now send player stats for loser teams/clans.
   378     The losing clans are ranked in the reverse order they died.
   386     The losing clans are ranked in the reverse order they died.
   379     The clan that died last is ranked 2nd,
   387     The clan that died last is ranked 2nd,
   380     the clan that died second to last is ranked 3rd,
   388     the clan that died second to last is ranked 3rd,
   381     and so on. }
   389     and so on. }
   382     deathEntry := ClanDeathLog;
   390     deathEntry := ClanDeathLog;
       
   391     i:= 0;
   383     if SendRankingStatsOn then
   392     if SendRankingStatsOn then
   384         while (deathEntry <> nil) do
   393         while (deathEntry <> nil) do
   385             begin
   394             begin
   386             for c:= 0 to Pred(deathEntry^.KilledClansCount) do
   395             for c:= 0 to Pred(deathEntry^.KilledClansCount) do
   387                 if ((deathEntry^.KilledClans[c]^.ClanHealth) = 0) and (not deathEntry^.KilledClans[c]^.StatsHandled) then
   396                 if ((deathEntry^.KilledClans[c]^.ClanHealth) = 0) and (not deathEntry^.KilledClans[c]^.StatsHandled) then
   388                     begin
   397                     begin
   389                     for t:= 0 to Pred(TeamsCount) do
   398                     for t:= 0 to Pred(TeamsCount) do
   390                         if TeamsArray[t]^.Clan^.ClanIndex = deathEntry^.KilledClans[c]^.ClanIndex then
   399                         if TeamsArray[t]^.Clan^.ClanIndex = deathEntry^.KilledClans[c]^.ClanIndex then
   391                             begin
   400                             begin
       
   401                             inc(i);
       
   402                             SendStat(siTeamRank, IntToStr(currentRank));
   392                             SendStat(siPlayerKills, IntToStr(deathEntry^.killedClans[c]^.Color) + ' ' +
   403                             SendStat(siPlayerKills, IntToStr(deathEntry^.killedClans[c]^.Color) + ' ' +
   393                                 IntToStr(TeamsArray[t]^.stats.Kills) + ' ' + TeamsArray[t]^.TeamName);
   404                                 IntToStr(TeamsArray[t]^.stats.Kills) + ' ' + TeamsArray[t]^.TeamName);
   394                             end;
   405                             end;
   395                     deathEntry^.KilledClans[c]^.StatsHandled:= true;
   406                     deathEntry^.KilledClans[c]^.StatsHandled:= true;
   396                     end;
   407                     end;
       
   408             if i > 0 then
       
   409                 inc(currentRank, i);
       
   410             i:= 0;
   397             deathEntry:= deathEntry^.NextEntry;
   411             deathEntry:= deathEntry^.NextEntry;
   398             end;
   412             end;
   399 
   413 
   400     // “Achievements” / Details part of stats screen
   414     // “Achievements” / Details part of stats screen
   401     if SendAchievementsStatsOn then
   415     if SendAchievementsStatsOn then