diff -r 4884bce5e5eb -r daddcd31ef34 hedgewars/uStats.pas --- 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;