hedgewars/uStats.pas
changeset 9405 efc5409a141d
parent 9397 7b7ee65f82ad
child 9409 6564baf7dedf
equal deleted inserted replaced
9403:9f6ca48d8e9c 9405:efc5409a141d
   164                 StepDamageRecv:= 0;
   164                 StepDamageRecv:= 0;
   165                 StepDamageGiven:= 0
   165                 StepDamageGiven:= 0
   166                 end;
   166                 end;
   167                 
   167                 
   168 if SendHealthStatsOn then
   168 if SendHealthStatsOn then
   169 	for t:= 0 to Pred(ClansCount) do
   169     for t:= 0 to Pred(ClansCount) do
   170 		with ClansArray[t]^ do
   170         with ClansArray[t]^ do
   171 			begin
   171             begin
   172 			SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
   172             SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth));
   173 			end;
   173             end;
   174 
   174 
   175 Kills:= 0;
   175 Kills:= 0;
   176 KillsClan:= 0;
   176 KillsClan:= 0;
   177 DamageClan:= 0;
   177 DamageClan:= 0;
   178 DamageTurn:= 0;
   178 DamageTurn:= 0;
   209     maxTeamDamage : Longword;
   209     maxTeamDamage : Longword;
   210     maxTeamDamageName : shortstring;
   210     maxTeamDamageName : shortstring;
   211     winnersClan : PClan;
   211     winnersClan : PClan;
   212 begin
   212 begin
   213 if SendHealthStatsOn then
   213 if SendHealthStatsOn then
   214 	msd:= 0; msdhh:= nil;
   214     msd:= 0; msdhh:= nil;
   215 	msk:= 0; mskhh:= nil;
   215     msk:= 0; mskhh:= nil;
   216 	mskcnt:= 0;
   216     mskcnt:= 0;
   217 	maxTeamKills := 0;
   217     maxTeamKills := 0;
   218 	maxTurnSkips := 0;
   218     maxTurnSkips := 0;
   219 	maxTeamDamage := 0;
   219     maxTeamDamage := 0;
   220 	winnersClan:= nil;
   220     winnersClan:= nil;
   221 
   221 
   222 	for t:= 0 to Pred(TeamsCount) do
   222     for t:= 0 to Pred(TeamsCount) do
   223 		with TeamsArray[t]^ do
   223         with TeamsArray[t]^ do
   224 		begin
   224         begin
   225 			if not ExtDriven then
   225             if not ExtDriven then
   226 				SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
   226                 SendStat(siTeamStats, GetTeamStatString(TeamsArray[t]));
   227 			for i:= 0 to cMaxHHIndex do
   227             for i:= 0 to cMaxHHIndex do
   228 				begin
   228                 begin
   229 				if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
   229                 if Hedgehogs[i].stats.MaxStepDamageGiven > msd then
   230 					begin
   230                     begin
   231 					msdhh:= @Hedgehogs[i];
   231                     msdhh:= @Hedgehogs[i];
   232 					msd:= Hedgehogs[i].stats.MaxStepDamageGiven
   232                     msd:= Hedgehogs[i].stats.MaxStepDamageGiven
   233 					end;
   233                     end;
   234 				if Hedgehogs[i].stats.MaxStepKills >= msk then
   234                 if Hedgehogs[i].stats.MaxStepKills >= msk then
   235 					if Hedgehogs[i].stats.MaxStepKills = msk then
   235                     if Hedgehogs[i].stats.MaxStepKills = msk then
   236 						inc(mskcnt)
   236                         inc(mskcnt)
   237 					else
   237                     else
   238 						begin
   238                         begin
   239 						mskcnt:= 1;
   239                         mskcnt:= 1;
   240 						mskhh:= @Hedgehogs[i];
   240                         mskhh:= @Hedgehogs[i];
   241 						msk:= Hedgehogs[i].stats.MaxStepKills
   241                         msk:= Hedgehogs[i].stats.MaxStepKills
   242 						end;
   242                         end;
   243 			end;
   243             end;
   244 
   244 
   245 			{ send player stats for winner teams }
   245             { send player stats for winner teams }
   246 			if Clan^.ClanHealth > 0 then
   246             if Clan^.ClanHealth > 0 then
   247 				begin
   247                 begin
   248 				winnersClan:= Clan;
   248                 winnersClan:= Clan;
   249 				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   249                 SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   250 					IntToStr(stats.Kills) + ' ' + TeamName);
   250                     IntToStr(stats.Kills) + ' ' + TeamName);
   251 			end;
   251             end;
   252 
   252 
   253 			{ determine maximum values of TeamKills, TurnSkips, TeamDamage }
   253             { determine maximum values of TeamKills, TurnSkips, TeamDamage }
   254 			if stats.TeamKills > maxTeamKills then
   254             if stats.TeamKills > maxTeamKills then
   255 				begin
   255                 begin
   256 				maxTeamKills := stats.TeamKills;
   256                 maxTeamKills := stats.TeamKills;
   257 				maxTeamKillsName := TeamName;
   257                 maxTeamKillsName := TeamName;
   258 			end;
   258             end;
   259 			if stats.TurnSkips > maxTurnSkips then
   259             if stats.TurnSkips > maxTurnSkips then
   260 				begin
   260                 begin
   261 				maxTurnSkips := stats.TurnSkips;
   261                 maxTurnSkips := stats.TurnSkips;
   262 				maxTurnSkipsName := TeamName;
   262                 maxTurnSkipsName := TeamName;
   263 			end;
   263             end;
   264 			if stats.TeamDamage > maxTeamDamage then
   264             if stats.TeamDamage > maxTeamDamage then
   265 				begin
   265                 begin
   266 				maxTeamDamage := stats.TeamDamage;
   266                 maxTeamDamage := stats.TeamDamage;
   267 				maxTeamDamageName := TeamName;
   267                 maxTeamDamageName := TeamName;
   268 			end;
   268             end;
   269 
   269 
   270 		end;
   270         end;
   271 
   271 
   272 	{ now send player stats for loser teams }
   272     { now send player stats for loser teams }
   273 	for t:= 0 to Pred(TeamsCount) do
   273     for t:= 0 to Pred(TeamsCount) do
   274 		begin
   274         begin
   275 		with TeamsArray[t]^ do
   275         with TeamsArray[t]^ do
   276 			begin
   276             begin
   277 			if Clan^.ClanHealth = 0 then
   277             if Clan^.ClanHealth = 0 then
   278 				begin
   278                 begin
   279 				SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   279                 SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' +
   280 					IntToStr(stats.Kills) + ' ' + TeamName);
   280                     IntToStr(stats.Kills) + ' ' + TeamName);
   281 			end;
   281             end;
   282 		end;
   282         end;
   283 	end;
   283     end;
   284 
   284 
   285 	if msdhh <> nil then
   285     if msdhh <> nil then
   286 		SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
   286         SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')');
   287 	if mskcnt = 1 then
   287     if mskcnt = 1 then
   288 		SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
   288         SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')');
   289 
   289 
   290 	if maxTeamKills > 1 then
   290     if maxTeamKills > 1 then
   291 		SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
   291         SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName);
   292 	if maxTurnSkips > 2 then
   292     if maxTurnSkips > 2 then
   293 		SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
   293         SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName);
   294 	if maxTeamDamage > 30 then
   294     if maxTeamDamage > 30 then
   295 		SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
   295         SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName);
   296 
   296 
   297 	if KilledHHs > 0 then
   297     if KilledHHs > 0 then
   298 		SendStat(siKilledHHs, IntToStr(KilledHHs));
   298         SendStat(siKilledHHs, IntToStr(KilledHHs));
   299 
   299 
   300 	// now to console
   300     // now to console
   301 	if winnersClan <> nil then 
   301     if winnersClan <> nil then 
   302 		begin
   302         begin
   303 		WriteLnToConsole('WINNERS');
   303         WriteLnToConsole('WINNERS');
   304         WriteLnToConsole(inttostr(winnersClan^.TeamsNumber));
   304         WriteLnToConsole(inttostr(winnersClan^.TeamsNumber));
   305 		for t:= 0 to winnersClan^.TeamsNumber - 1 do
   305         for t:= 0 to winnersClan^.TeamsNumber - 1 do
   306 			WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
   306             WriteLnToConsole(winnersClan^.Teams[t]^.TeamName);
   307 		end
   307         end
   308 	else
   308     else
   309 		WriteLnToConsole('DRAW');
   309         WriteLnToConsole('DRAW');
   310 		
   310         
   311     ScriptCall('onAchievementsDeclaration');
   311     ScriptCall('onAchievementsDeclaration');
   312 end;
   312 end;
   313 
   313 
   314 procedure declareAchievement(id, teamname: shortstring; value: LongInt);
   314 procedure declareAchievement(id, teamname: shortstring; value: LongInt);
   315 begin
   315 begin