# HG changeset patch # User alfadur # Date 1634344548 -10800 # Node ID 681db3039ad7c2a7f843972235dbb24f184b5983 # Parent 744f4d70896339e562a440553bbf4a834bad209d remove owner from wild sentries diff -r 744f4d708963 -r 681db3039ad7 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Sat Oct 16 02:52:06 2021 +0300 +++ b/hedgewars/uGears.pas Sat Oct 16 03:35:48 2021 +0300 @@ -814,7 +814,7 @@ end; for i := 0 to min(count, positionsCount) - 1 do - AddGear(positions[i].X, positions[i].Y - cHHRadius, gtSentry, 0, _0, _0, 0); + AddGear(positions[i].X, positions[i].Y - cHHRadius, gtSentry, 0, _0, _0, 0)^.Hedgehog := nil; end; function AddWaterSentries(count: Longword): Longword; @@ -842,7 +842,7 @@ for i := 0 to min(count, positionsCount) - 1 do begin - AddGear(positions[i].X, positions[i].Y - cHHRadius, gtSentry, 0, _0, _0, 0); + AddGear(positions[i].X, positions[i].Y - cHHRadius, gtSentry, 0, _0, _0, 0)^.Hedgehog := nil; inc(AddWaterSentries); end; end; diff -r 744f4d708963 -r 681db3039ad7 hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Sat Oct 16 02:52:06 2021 +0300 +++ b/hedgewars/uGearsUtils.pas Sat Oct 16 03:35:48 2021 +0300 @@ -321,25 +321,25 @@ uStats.HedgehogDamaged(Gear, AttackerHog, Damage, false); - if AprilOne and (Gear^.Hedgehog^.Hat = 'fr_tomato') and (Damage > 2) then - for i := 0 to random(min(Damage,20))+5 do - begin - vg:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot); - if vg <> nil then - with vg^ do + if AprilOne and (Gear^.Hedgehog^.Hat = 'fr_tomato') and (Damage > 2) then + for i := 0 to random(min(Damage,20))+5 do begin - dx:= 0.001 * (random(100)+10); - dy:= 0.001 * (random(100)+10); - tdy:= -cGravityf; - if random(2) = 0 then - dx := -dx; - FrameTicks:= random(500) + 1000; - State:= ord(sprBubbles); - Tint:= $ff0000ff + vg:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtStraightShot); + if vg <> nil then + with vg^ do + begin + dx:= 0.001 * (random(100)+10); + dy:= 0.001 * (random(100)+10); + tdy:= -cGravityf; + if random(2) = 0 then + dx := -dx; + FrameTicks:= random(500) + 1000; + State:= ord(sprBubbles); + Tint:= $ff0000ff + end end - end - end else - Gear^.Hedgehog:= AttackerHog; + end else if AttackerHog <> nil then + Gear^.Hedgehog:= AttackerHog; inc(Gear^.Damage, Damage); ScriptCall('onGearDamage', Gear^.UID, Damage); diff -r 744f4d708963 -r 681db3039ad7 hedgewars/uStats.pas --- a/hedgewars/uStats.pas Sat Oct 16 02:52:06 2021 +0300 +++ b/hedgewars/uStats.pas Sat Oct 16 03:35:48 2021 +0300 @@ -105,15 +105,20 @@ end; procedure HedgehogDamaged(Gear: PGear; Attacker: PHedgehog; Damage: Longword; killed: boolean); +var sameClan: Boolean; begin -if Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan then +sameClan := false; +if Attacker <> nil then + sameClan := Attacker^.Team^.Clan = Gear^.Hedgehog^.Team^.Clan; + +if sameClan then vpHurtSameClan:= Gear^.Hedgehog^.Team^.voicepack else begin if not FirstBlood then StepFirstBlood:= true; vpHurtEnemy:= Gear^.Hedgehog^.Team^.voicepack; - if (not killed) and (not bDuringWaterRise) then + if (Attacker <> nil) and (not killed) and (not bDuringWaterRise) then begin // Check if victim got attacked by RevengeHog again if (Gear^.Hedgehog^.RevengeHog <> nil) and (Gear^.Hedgehog^.RevengeHog = Attacker) and (Gear^.Hedgehog^.stats.StepRevenge = false) then @@ -141,7 +146,8 @@ if (not bDuringWaterRise) then begin - inc(Attacker^.stats.StepDamageGiven, Damage); + if Attacker <> nil then + inc(Attacker^.stats.StepDamageGiven, Damage); inc(Gear^.Hedgehog^.stats.StepDamageRecv, Damage); end; @@ -157,7 +163,7 @@ if bDuringWaterRise then inc(KillsSD) - else + else if Attacker <> nil then begin inc(Attacker^.stats.StepKills); inc(Attacker^.Team^.stats.Kills);