hedgewars/uStats.pas
changeset 9174 d328fe17b195
parent 9080 9b42757d7e71
child 9180 d19c09670ec8
equal deleted inserted replaced
9173:575dd8fe4a55 9174:d328fe17b195
    22 interface
    22 interface
    23 uses uConsts, uTypes;
    23 uses uConsts, uTypes;
    24 
    24 
    25 var TotalRounds: LongInt;
    25 var TotalRounds: LongInt;
    26     FinishedTurnsTotal: LongInt;
    26     FinishedTurnsTotal: LongInt;
    27 
    27     SendStatsOn : boolean = true;
       
    28     
    28 procedure initModule;
    29 procedure initModule;
    29 procedure freeModule;
    30 procedure freeModule;
    30 
    31 
    31 procedure AmmoUsed(am: TAmmoType);
    32 procedure AmmoUsed(am: TAmmoType);
    32 procedure HedgehogDamaged(Gear: PGear; Attacker: PHedgehog; Damage: Longword; killed: boolean);
    33 procedure HedgehogDamaged(Gear: PGear; Attacker: PHedgehog; Damage: Longword; killed: boolean);
   160                     MaxStepKills:= StepKills;
   161                     MaxStepKills:= StepKills;
   161                 StepKills:= 0;
   162                 StepKills:= 0;
   162                 StepDamageRecv:= 0;
   163                 StepDamageRecv:= 0;
   163                 StepDamageGiven:= 0
   164                 StepDamageGiven:= 0
   164                 end;
   165                 end;
   165 
   166                 
   166 for t:= 0 to Pred(ClansCount) do
   167 if SendStatsOn then
   167     with ClansArray[t]^ do
   168 	for t:= 0 to Pred(ClansCount) do
   168         begin
   169 		with ClansArray[t]^ do
   169         SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
   170 			begin
   170         end;
   171 			SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
       
   172 			end;
   171 
   173 
   172 Kills:= 0;
   174 Kills:= 0;
   173 KillsClan:= 0;
   175 KillsClan:= 0;
   174 DamageClan:= 0;
   176 DamageClan:= 0;
   175 DamageTurn:= 0;
   177 DamageTurn:= 0;
   205     maxTurnSkipsName : shortstring;
   207     maxTurnSkipsName : shortstring;
   206     maxTeamDamage : Longword;
   208     maxTeamDamage : Longword;
   207     maxTeamDamageName : shortstring;
   209     maxTeamDamageName : shortstring;
   208     winnersClan : PClan;
   210     winnersClan : PClan;
   209 begin
   211 begin
   210 msd:= 0; msdhh:= nil;
   212 if SendStatsOn then
   211 msk:= 0; mskhh:= nil;
   213 	msd:= 0; msdhh:= nil;
   212 mskcnt:= 0;
   214 	msk:= 0; mskhh:= nil;
   213 maxTeamKills := 0;
   215 	mskcnt:= 0;
   214 maxTurnSkips := 0;
   216 	maxTeamKills := 0;
   215 maxTeamDamage := 0;
   217 	maxTurnSkips := 0;
   216 winnersClan:= nil;
   218 	maxTeamDamage := 0;
   217 
   219 	winnersClan:= nil;
   218 for t:= 0 to Pred(TeamsCount) do
   220 
   219     with TeamsArray[t]^ do
   221 	for t:= 0 to Pred(TeamsCount) do
   220     begin
   222 		with TeamsArray[t]^ do
   221         if not ExtDriven then
   223 		begin
   222             SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
   224 			if not ExtDriven then
   223         for i:= 0 to cMaxHHIndex do
   225 				SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
   224             begin
   226 			for i:= 0 to cMaxHHIndex do
   225             if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
   227 				begin
   226                 begin
   228 				if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
   227                 msdhh:= @Hedgehogs[i];
   229 					begin
   228                 msd:= Hedgehogs[i].stats.MaxStepDamageGiven
   230 					msdhh:= @Hedgehogs[i];
   229                 end;
   231 					msd:= Hedgehogs[i].stats.MaxStepDamageGiven
   230             if Hedgehogs[i].stats.MaxStepKills >= msk then
   232 					end;
   231                 if Hedgehogs[i].stats.MaxStepKills = msk then
   233 				if Hedgehogs[i].stats.MaxStepKills >= msk then
   232                     inc(mskcnt)
   234 					if Hedgehogs[i].stats.MaxStepKills = msk then
   233                 else
   235 						inc(mskcnt)
   234                     begin
   236 					else
   235                     mskcnt:= 1;
   237 						begin
   236                     mskhh:= @Hedgehogs[i];
   238 						mskcnt:= 1;
   237                     msk:= Hedgehogs[i].stats.MaxStepKills
   239 						mskhh:= @Hedgehogs[i];
   238                     end;
   240 						msk:= Hedgehogs[i].stats.MaxStepKills
   239         end;
   241 						end;
   240 
   242 			end;
   241         { send player stats for winner teams }
   243 
   242         if Clan^.ClanHealth > 0 then
   244 			{ send player stats for winner teams }
   243             begin
   245 			if Clan^.ClanHealth > 0 then
   244             winnersClan:= Clan;
   246 				begin
   245             SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   247 				winnersClan:= Clan;
   246                 IntToStr(stats.Kills) + ' ' + TeamName);
   248 				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   247         end;
   249 					IntToStr(stats.Kills) + ' ' + TeamName);
   248 
   250 			end;
   249         { determine maximum values of TeamKills, TurnSkips, TeamDamage }
   251 
   250         if stats.TeamKills > maxTeamKills then
   252 			{ determine maximum values of TeamKills, TurnSkips, TeamDamage }
   251             begin
   253 			if stats.TeamKills > maxTeamKills then
   252             maxTeamKills := stats.TeamKills;
   254 				begin
   253             maxTeamKillsName := TeamName;
   255 				maxTeamKills := stats.TeamKills;
   254         end;
   256 				maxTeamKillsName := TeamName;
   255         if stats.TurnSkips > maxTurnSkips then
   257 			end;
   256             begin
   258 			if stats.TurnSkips > maxTurnSkips then
   257             maxTurnSkips := stats.TurnSkips;
   259 				begin
   258             maxTurnSkipsName := TeamName;
   260 				maxTurnSkips := stats.TurnSkips;
   259         end;
   261 				maxTurnSkipsName := TeamName;
   260         if stats.TeamDamage > maxTeamDamage then
   262 			end;
   261             begin
   263 			if stats.TeamDamage > maxTeamDamage then
   262             maxTeamDamage := stats.TeamDamage;
   264 				begin
   263             maxTeamDamageName := TeamName;
   265 				maxTeamDamage := stats.TeamDamage;
   264         end;
   266 				maxTeamDamageName := TeamName;
   265 
   267 			end;
   266     end;
   268 
   267 
   269 		end;
   268 { now send player stats for loser teams }
   270 
   269 for t:= 0 to Pred(TeamsCount) do
   271 	{ now send player stats for loser teams }
   270     begin
   272 	for t:= 0 to Pred(TeamsCount) do
   271     with TeamsArray[t]^ do
   273 		begin
   272         begin
   274 		with TeamsArray[t]^ do
   273         if Clan^.ClanHealth = 0 then
   275 			begin
   274             begin
   276 			if Clan^.ClanHealth = 0 then
   275             SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   277 				begin
   276                 IntToStr(stats.Kills) + ' ' + TeamName);
   278 				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   277         end;
   279 					IntToStr(stats.Kills) + ' ' + TeamName);
   278     end;
   280 			end;
   279 end;
   281 		end;
   280 
   282 	end;
   281 if msdhh <> nil then
   283 
   282     SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
   284 	if msdhh <> nil then
   283 if mskcnt = 1 then
   285 		SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
   284     SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
   286 	if mskcnt = 1 then
   285 
   287 		SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
   286 if maxTeamKills > 1 then
   288 
   287     SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
   289 	if maxTeamKills > 1 then
   288 if maxTurnSkips > 2 then
   290 		SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
   289     SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
   291 	if maxTurnSkips > 2 then
   290 if maxTeamDamage > 30 then
   292 		SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
   291     SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
   293 	if maxTeamDamage > 30 then
   292 
   294 		SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
   293 if KilledHHs > 0 then
   295 
   294     SendStat(siKilledHHs, IntToStr(KilledHHs));
   296 	if KilledHHs > 0 then
   295 
   297 		SendStat(siKilledHHs, IntToStr(KilledHHs));
   296 // now to console
   298 
   297 if winnersClan <> nil then 
   299 	// now to console
   298     begin
   300 	if winnersClan <> nil then 
   299     WriteLnToConsole('WINNERS');
   301 		begin
   300     for t:= 0 to winnersClan^.TeamsNumber - 1 do
   302 		WriteLnToConsole('WINNERS');
   301         WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
   303 		for t:= 0 to winnersClan^.TeamsNumber - 1 do
   302     end
   304 			WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
   303 else
   305 		end
   304     WriteLnToConsole('DRAW');
   306 	else
   305 
   307 		WriteLnToConsole('DRAW');
   306 WriteLnToConsole('');
   308 
       
   309 	WriteLnToConsole('');
   307 end;
   310 end;
   308 
   311 
   309 procedure initModule;
   312 procedure initModule;
   310 begin
   313 begin
   311     TotalRounds:= -1;
   314     TotalRounds:= -1;