hedgewars/uStats.pas
changeset 869 daddcd31ef34
parent 867 dc7901b1120e
child 870 dd418d9c18c5
--- a/hedgewars/uStats.pas	Thu Apr 24 19:55:10 2008 +0000
+++ b/hedgewars/uStats.pas	Thu Apr 24 20:53:35 2008 +0000
@@ -24,9 +24,11 @@
                    DamageRecv,
                    DamageGiven: Longword;
                    StepDamageRecv,
-                   StepDamageGiven: Longword;
+                   StepDamageGiven,
+                   StepKills: Longword;
                    MaxStepDamageRecv,
-                   MaxStepDamageGiven: Longword;
+                   MaxStepDamageGiven,
+                   MaxStepKills: Longword;
                    FinishedTurns: Longword;
                    end;
 
@@ -55,6 +57,7 @@
 
 if Gear^.Health <= Gear^.Damage then
 	begin
+	inc(CurrentHedgehog^.stats.StepKills);
 	inc(Kills);
 	inc(KillsTotal);
 	if CurrentHedgehog^.Team^.Clan = PHedgehog(Gear^.Hedgehog)^.Team^.Clan then inc(KillsClan);
@@ -67,6 +70,7 @@
 
 procedure TurnReaction;
 var Gear: PGear;
+    i, t: LongInt;
 begin
 inc(CurrentHedgehog^.stats.FinishedTurns);
 
@@ -94,21 +98,19 @@
 else if AmmoDamagingUsed then
 	PlaySound(sndMissed, false);
 
-Gear:= GearsList;
-while Gear <> nil do
-  begin
-  if Gear^.Kind = gtHedgehog then
-    with PHedgehog(Gear^.Hedgehog)^.stats do
-      begin
-      inc(DamageRecv, StepDamageRecv);
-      inc(DamageGiven, StepDamageGiven);
-      if StepDamageRecv > MaxStepDamageRecv then MaxStepDamageRecv:= StepDamageRecv;
-      if StepDamageGiven > MaxStepDamageGiven then MaxStepDamageGiven:= StepDamageGiven;
-      StepDamageRecv:= 0;
-      StepDamageGiven:= 0
-      end;
-  Gear:= Gear^.NextGear
-  end;
+for t:= 0 to Pred(TeamsCount) do
+	with TeamsArray[t]^ do
+		for i:= 0 to cMaxHHIndex do
+			with Hedgehogs[i].stats do
+				begin
+				inc(DamageRecv, StepDamageRecv);
+				inc(DamageGiven, StepDamageGiven);
+				if StepDamageRecv > MaxStepDamageRecv then MaxStepDamageRecv:= StepDamageRecv;
+				if StepDamageGiven > MaxStepDamageGiven then MaxStepDamageGiven:= StepDamageGiven;
+				if StepKills > MaxStepKills then MaxStepKills:= StepKills;
+				StepDamageRecv:= 0;
+				StepDamageGiven:= 0
+				end;
 
 Kills:= 0;
 KillsClan:= 0;
@@ -126,21 +128,39 @@
 
 procedure SendStats;
 var i, t: LongInt;
-    msd: Longword; msdhh: PHedgehog;
+    msd, msk: Longword; msdhh, mskhh: PHedgehog;
+    mskcnt: Longword;
 begin
 msd:= 0; msdhh:= nil;
+msk:= 0; mskhh:= nil;
+mskcnt:= 0;
+
 for t:= 0 to Pred(TeamsCount) do
-   with TeamsArray[t]^ do
-      begin
-      for i:= 0 to cMaxHHIndex do
-          if Hedgehogs[i].stats.StepDamageGiven > msd then
-             begin
-             msdhh:= @Hedgehogs[i];
-             msd:= Hedgehogs[i].stats.StepDamageGiven
-             end;
-      end;
-if msdhh <> nil then SendStat(siMaxStepDamage, inttostr(msd) + ' ' +
-                                               msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
+	with TeamsArray[t]^ do
+		begin
+		for i:= 0 to cMaxHHIndex do
+			begin
+			if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
+				begin
+				msdhh:= @Hedgehogs[i];
+				msd:= Hedgehogs[i].stats.MaxStepDamageGiven
+				end;
+			if Hedgehogs[i].stats.MaxStepKills >= msk then
+				if Hedgehogs[i].stats.MaxStepKills = msk then
+					inc(mskcnt)
+				else
+					begin
+					mskcnt:= 1;
+					mskhh:= @Hedgehogs[i];
+					msk:= Hedgehogs[i].stats.MaxStepKills
+					end;
+			end
+		end;
+if msdhh <> nil then
+	SendStat(siMaxStepDamage, inttostr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
+if mskcnt = 1 then
+	SendStat(siMaxStepKills, inttostr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
+
 if KilledHHs > 0 then SendStat(siKilledHHs, inttostr(KilledHHs));
 end;