hedgewars/uStats.pas
changeset 14038 1ac129df8e5b
parent 14037 bf8b7c166b3c
child 14042 006f97a6f6a7
equal deleted inserted replaced
14037:bf8b7c166b3c 14038:1ac129df8e5b
    51 
    51 
    52 implementation
    52 implementation
    53 uses uSound, uLocale, uVariables, uUtils, uIO, uCaptions, uMisc, uConsole, uScript;
    53 uses uSound, uLocale, uVariables, uUtils, uIO, uCaptions, uMisc, uConsole, uScript;
    54 
    54 
    55 var DamageClan  : Longword = 0;
    55 var DamageClan  : Longword = 0;
       
    56     DamageTeam  : Longword = 0;
    56     DamageTotal : Longword = 0;
    57     DamageTotal : Longword = 0;
    57     DamageTurn  : Longword = 0;
    58     DamageTurn  : Longword = 0;
    58     PoisonTurn  : Longword = 0; // Poisoned enemies per turn
    59     PoisonTurn  : Longword = 0; // Poisoned enemies per turn
    59     PoisonClan  : Longword = 0; // Poisoned own clan members in turn
    60     PoisonClan  : Longword = 0; // Poisoned own clan members in turn
       
    61     PoisonTeam  : Longword = 0; // Poisoned own team members in turn
    60     PoisonTotal : Longword = 0; // Poisoned hogs in whole round
    62     PoisonTotal : Longword = 0; // Poisoned hogs in whole round
    61     KillsClan   : LongWord = 0;
    63     KillsClan   : LongWord = 0;
       
    64     KillsTeam   : LongWord = 0;
    62     Kills       : LongWord = 0;
    65     Kills       : LongWord = 0;
    63     KillsTotal  : LongWord = 0;
    66     KillsTotal  : LongWord = 0;
    64     HitTargets  : LongWord = 0; // Target (gtTarget) hits per turn
    67     HitTargets  : LongWord = 0; // Target (gtTarget) hits per turn
    65     AmmoUsedCount : Longword = 0;
    68     AmmoUsedCount : Longword = 0;
    66     AmmoDamagingUsed : boolean = false;
    69     AmmoDamagingUsed : boolean = false;
    70     vpHurtSameClan: PVoicepack = nil;
    73     vpHurtSameClan: PVoicepack = nil;
    71     vpHurtEnemy: PVoicepack = nil;
    74     vpHurtEnemy: PVoicepack = nil;
    72 
    75 
    73 procedure HedgehogPoisoned(Gear: PGear; Attacker: PHedgehog);
    76 procedure HedgehogPoisoned(Gear: PGear; Attacker: PHedgehog);
    74 begin
    77 begin
    75     if Attacker^.Team^.Clan = Gear^.HEdgehog^.Team^.Clan then
    78     if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
    76         begin
    79         begin
    77         vpHurtSameClan:= CurrentHedgehog^.Team^.voicepack;
    80         vpHurtSameClan:= Gear^.Hedgehog^.Team^.voicepack;
    78         inc(PoisonClan)
    81         inc(PoisonClan);
       
    82         if Attacker^.Team = Gear^.Hedgehog^.Team then
       
    83             inc(PoisonTeam);
    79         end
    84         end
    80     else
    85     else
    81         begin
    86         begin
    82         vpHurtEnemy:= Gear^.Hedgehog^.Team^.voicepack;
    87         vpHurtEnemy:= Gear^.Hedgehog^.Team^.voicepack;
    83         inc(PoisonTurn)
    88         inc(PoisonTurn)
    92 end;
    97 end;
    93 
    98 
    94 procedure HedgehogDamaged(Gear: PGear; Attacker: PHedgehog; Damage: Longword; killed: boolean);
    99 procedure HedgehogDamaged(Gear: PGear; Attacker: PHedgehog; Damage: Longword; killed: boolean);
    95 begin
   100 begin
    96 if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
   101 if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
    97     vpHurtSameClan:= CurrentHedgehog^.Team^.voicepack
   102     vpHurtSameClan:= Gear^.Hedgehog^.Team^.voicepack
    98 else
   103 else
    99     begin
   104     begin
   100     vpHurtEnemy:= Gear^.Hedgehog^.Team^.voicepack;
   105     vpHurtEnemy:= Gear^.Hedgehog^.Team^.voicepack;
   101     if (not killed) then
   106     if (not killed) then
   102         begin
   107         begin
   121 
   126 
   122 inc(Attacker^.stats.StepDamageGiven, Damage);
   127 inc(Attacker^.stats.StepDamageGiven, Damage);
   123 inc(Gear^.Hedgehog^.stats.StepDamageRecv, Damage);
   128 inc(Gear^.Hedgehog^.stats.StepDamageRecv, Damage);
   124 
   129 
   125 if CurrentHedgehog^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then inc(DamageClan, Damage);
   130 if CurrentHedgehog^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then inc(DamageClan, Damage);
       
   131 if CurrentHedgehog^.Team = Gear^.Hedgehog^.Team then inc(DamageTeam, Damage);
   126 
   132 
   127 if killed then
   133 if killed then
   128     begin
   134     begin
   129     Gear^.Hedgehog^.stats.StepDied:= true;
   135     Gear^.Hedgehog^.stats.StepDied:= true;
   130     inc(Attacker^.stats.StepKills);
   136     inc(Attacker^.stats.StepKills);
   137         inc(Attacker^.Team^.stats.TeamDamage, Gear^.Damage);
   143         inc(Attacker^.Team^.stats.TeamDamage, Gear^.Damage);
   138     end;
   144     end;
   139     if Gear = Attacker^.Gear then
   145     if Gear = Attacker^.Gear then
   140         inc(Attacker^.Team^.stats.Suicides);
   146         inc(Attacker^.Team^.stats.Suicides);
   141     if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
   147     if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then
       
   148         begin
   142         inc(KillsClan);
   149         inc(KillsClan);
       
   150         if Attacker^.Team = Gear^.Hedgehog^.Team then
       
   151             inc(KillsTeam);
       
   152         end;
   143     end;
   153     end;
   144 
   154 
   145 inc(DamageTotal, Damage);
   155 inc(DamageTotal, Damage);
   146 inc(DamageTurn, Damage)
   156 inc(DamageTurn, Damage)
   147 end;
   157 end;
   271             if random(2) = 0 then
   281             if random(2) = 0 then
   272                 AddVoice(sndNutter, CurrentTeam^.voicepack)
   282                 AddVoice(sndNutter, CurrentTeam^.voicepack)
   273             else
   283             else
   274                 AddVoice(sndWatchIt, vpHurtSameClan)
   284                 AddVoice(sndWatchIt, vpHurtSameClan)
   275         else
   285         else
   276             if random(2) = 0 then
   286             // Attacked same team
       
   287             if (random(2) = 0) and ((DamageTeam <> 0) or (KillsTeam > killsCheck) or (PoisonTeam <> 0)) then
   277                 AddVoice(sndSameTeam, vpHurtSameClan)
   288                 AddVoice(sndSameTeam, vpHurtSameClan)
       
   289             // Attacked same team or a clan member
   278             else
   290             else
   279                 AddVoice(sndTraitor, vpHurtSameClan)
   291                 AddVoice(sndTraitor, vpHurtSameClan)
   280 
   292 
   281     // Hog hurts, kills or poisons enemy
   293     // Hog hurts, kills or poisons enemy
   282     else if (CurrentHedgehog^.stats.StepDamageGiven <> 0) or (CurrentHedgehog^.stats.StepKills > killsCheck) or (PoisonTurn <> 0) then
   294     else if (CurrentHedgehog^.stats.StepDamageGiven <> 0) or (CurrentHedgehog^.stats.StepKills > killsCheck) or (PoisonTurn <> 0) then
   362                 GotRevenge:= false;
   374                 GotRevenge:= false;
   363                 end;
   375                 end;
   364 
   376 
   365 Kills:= 0;
   377 Kills:= 0;
   366 KillsClan:= 0;
   378 KillsClan:= 0;
       
   379 KillsTeam:= 0;
   367 DamageClan:= 0;
   380 DamageClan:= 0;
       
   381 DamageTeam:= 0;
   368 DamageTurn:= 0;
   382 DamageTurn:= 0;
   369 HitTargets:= 0;
   383 HitTargets:= 0;
   370 PoisonClan:= 0;
   384 PoisonClan:= 0;
       
   385 PoisonTeam:= 0;
   371 PoisonTurn:= 0;
   386 PoisonTurn:= 0;
   372 AmmoUsedCount:= 0;
   387 AmmoUsedCount:= 0;
   373 LeaveMeAlone:= false;
   388 LeaveMeAlone:= false;
   374 AmmoDamagingUsed:= false;
   389 AmmoDamagingUsed:= false;
   375 isTurnSkipped:= false;
   390 isTurnSkipped:= false;
   564 end;
   579 end;
   565 
   580 
   566 procedure initModule;
   581 procedure initModule;
   567 begin
   582 begin
   568     DamageClan  := 0;
   583     DamageClan  := 0;
       
   584     DamageTeam  := 0;
   569     DamageTotal := 0;
   585     DamageTotal := 0;
   570     DamageTurn  := 0;
   586     DamageTurn  := 0;
   571     PoisonClan  := 0;
   587     PoisonClan  := 0;
       
   588     PoisonTeam  := 0;
   572     PoisonTurn  := 0;
   589     PoisonTurn  := 0;
   573     KillsClan   := 0;
   590     KillsClan   := 0;
       
   591     KillsTeam   := 0;
   574     Kills       := 0;
   592     Kills       := 0;
   575     KillsTotal  := 0;
   593     KillsTotal  := 0;
   576     HitTargets  := 0;
   594     HitTargets  := 0;
   577     AmmoUsedCount := 0;
   595     AmmoUsedCount := 0;
   578     AmmoDamagingUsed := false;
   596     AmmoDamagingUsed := false;