hedgewars/uStats.pas
changeset 869 daddcd31ef34
parent 867 dc7901b1120e
child 870 dd418d9c18c5
equal deleted inserted replaced
868:4884bce5e5eb 869:daddcd31ef34
    22 
    22 
    23 type TStatistics = record
    23 type TStatistics = record
    24                    DamageRecv,
    24                    DamageRecv,
    25                    DamageGiven: Longword;
    25                    DamageGiven: Longword;
    26                    StepDamageRecv,
    26                    StepDamageRecv,
    27                    StepDamageGiven: Longword;
    27                    StepDamageGiven,
       
    28                    StepKills: Longword;
    28                    MaxStepDamageRecv,
    29                    MaxStepDamageRecv,
    29                    MaxStepDamageGiven: Longword;
    30                    MaxStepDamageGiven,
       
    31                    MaxStepKills: Longword;
    30                    FinishedTurns: Longword;
    32                    FinishedTurns: Longword;
    31                    end;
    33                    end;
    32 
    34 
    33 procedure AmmoUsed(am: TAmmoType);
    35 procedure AmmoUsed(am: TAmmoType);
    34 procedure HedgehogDamaged(Gear: PGear);
    36 procedure HedgehogDamaged(Gear: PGear);
    53 
    55 
    54 if CurrentHedgehog^.Team^.Clan = PHedgehog(Gear^.Hedgehog)^.Team^.Clan then inc(DamageClan, Gear^.Damage);
    56 if CurrentHedgehog^.Team^.Clan = PHedgehog(Gear^.Hedgehog)^.Team^.Clan then inc(DamageClan, Gear^.Damage);
    55 
    57 
    56 if Gear^.Health <= Gear^.Damage then
    58 if Gear^.Health <= Gear^.Damage then
    57 	begin
    59 	begin
       
    60 	inc(CurrentHedgehog^.stats.StepKills);
    58 	inc(Kills);
    61 	inc(Kills);
    59 	inc(KillsTotal);
    62 	inc(KillsTotal);
    60 	if CurrentHedgehog^.Team^.Clan = PHedgehog(Gear^.Hedgehog)^.Team^.Clan then inc(KillsClan);
    63 	if CurrentHedgehog^.Team^.Clan = PHedgehog(Gear^.Hedgehog)^.Team^.Clan then inc(KillsClan);
    61 	end;
    64 	end;
    62 
    65 
    65 inc(DamageTotal, Gear^.Damage)
    68 inc(DamageTotal, Gear^.Damage)
    66 end;
    69 end;
    67 
    70 
    68 procedure TurnReaction;
    71 procedure TurnReaction;
    69 var Gear: PGear;
    72 var Gear: PGear;
       
    73     i, t: LongInt;
    70 begin
    74 begin
    71 inc(CurrentHedgehog^.stats.FinishedTurns);
    75 inc(CurrentHedgehog^.stats.FinishedTurns);
    72 
    76 
    73 if (DamageGiven = DamageTotal) and (DamageTotal > 0) then
    77 if (DamageGiven = DamageTotal) and (DamageTotal > 0) then
    74 	PlaySound(sndFirstBlood, false)
    78 	PlaySound(sndFirstBlood, false)
    92 		PlaySound(sndRegret, false)
    96 		PlaySound(sndRegret, false)
    93 
    97 
    94 else if AmmoDamagingUsed then
    98 else if AmmoDamagingUsed then
    95 	PlaySound(sndMissed, false);
    99 	PlaySound(sndMissed, false);
    96 
   100 
    97 Gear:= GearsList;
   101 for t:= 0 to Pred(TeamsCount) do
    98 while Gear <> nil do
   102 	with TeamsArray[t]^ do
    99   begin
   103 		for i:= 0 to cMaxHHIndex do
   100   if Gear^.Kind = gtHedgehog then
   104 			with Hedgehogs[i].stats do
   101     with PHedgehog(Gear^.Hedgehog)^.stats do
   105 				begin
   102       begin
   106 				inc(DamageRecv, StepDamageRecv);
   103       inc(DamageRecv, StepDamageRecv);
   107 				inc(DamageGiven, StepDamageGiven);
   104       inc(DamageGiven, StepDamageGiven);
   108 				if StepDamageRecv > MaxStepDamageRecv then MaxStepDamageRecv:= StepDamageRecv;
   105       if StepDamageRecv > MaxStepDamageRecv then MaxStepDamageRecv:= StepDamageRecv;
   109 				if StepDamageGiven > MaxStepDamageGiven then MaxStepDamageGiven:= StepDamageGiven;
   106       if StepDamageGiven > MaxStepDamageGiven then MaxStepDamageGiven:= StepDamageGiven;
   110 				if StepKills > MaxStepKills then MaxStepKills:= StepKills;
   107       StepDamageRecv:= 0;
   111 				StepDamageRecv:= 0;
   108       StepDamageGiven:= 0
   112 				StepDamageGiven:= 0
   109       end;
   113 				end;
   110   Gear:= Gear^.NextGear
       
   111   end;
       
   112 
   114 
   113 Kills:= 0;
   115 Kills:= 0;
   114 KillsClan:= 0;
   116 KillsClan:= 0;
   115 DamageGiven:= 0;
   117 DamageGiven:= 0;
   116 DamageClan:= 0;
   118 DamageClan:= 0;
   124 AmmoDamagingUsed:= AmmoDamagingUsed or Ammoz[am].isDamaging
   126 AmmoDamagingUsed:= AmmoDamagingUsed or Ammoz[am].isDamaging
   125 end;
   127 end;
   126 
   128 
   127 procedure SendStats;
   129 procedure SendStats;
   128 var i, t: LongInt;
   130 var i, t: LongInt;
   129     msd: Longword; msdhh: PHedgehog;
   131     msd, msk: Longword; msdhh, mskhh: PHedgehog;
       
   132     mskcnt: Longword;
   130 begin
   133 begin
   131 msd:= 0; msdhh:= nil;
   134 msd:= 0; msdhh:= nil;
       
   135 msk:= 0; mskhh:= nil;
       
   136 mskcnt:= 0;
       
   137 
   132 for t:= 0 to Pred(TeamsCount) do
   138 for t:= 0 to Pred(TeamsCount) do
   133    with TeamsArray[t]^ do
   139 	with TeamsArray[t]^ do
   134       begin
   140 		begin
   135       for i:= 0 to cMaxHHIndex do
   141 		for i:= 0 to cMaxHHIndex do
   136           if Hedgehogs[i].stats.StepDamageGiven > msd then
   142 			begin
   137              begin
   143 			if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
   138              msdhh:= @Hedgehogs[i];
   144 				begin
   139              msd:= Hedgehogs[i].stats.StepDamageGiven
   145 				msdhh:= @Hedgehogs[i];
   140              end;
   146 				msd:= Hedgehogs[i].stats.MaxStepDamageGiven
   141       end;
   147 				end;
   142 if msdhh <> nil then SendStat(siMaxStepDamage, inttostr(msd) + ' ' +
   148 			if Hedgehogs[i].stats.MaxStepKills >= msk then
   143                                                msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
   149 				if Hedgehogs[i].stats.MaxStepKills = msk then
       
   150 					inc(mskcnt)
       
   151 				else
       
   152 					begin
       
   153 					mskcnt:= 1;
       
   154 					mskhh:= @Hedgehogs[i];
       
   155 					msk:= Hedgehogs[i].stats.MaxStepKills
       
   156 					end;
       
   157 			end
       
   158 		end;
       
   159 if msdhh <> nil then
       
   160 	SendStat(siMaxStepDamage, inttostr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
       
   161 if mskcnt = 1 then
       
   162 	SendStat(siMaxStepKills, inttostr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
       
   163 
   144 if KilledHHs > 0 then SendStat(siKilledHHs, inttostr(KilledHHs));
   164 if KilledHHs > 0 then SendStat(siKilledHHs, inttostr(KilledHHs));
   145 end;
   165 end;
   146 
   166 
   147 end.
   167 end.