DEADSOFTWARE

Player: Propagate valid SpawnerUID for corpse kills
authorStas'M <x86corez@gmail.com>
Sun, 15 Mar 2020 18:34:28 +0000 (21:34 +0300)
committerStas'M <x86corez@gmail.com>
Sun, 15 Mar 2020 18:34:28 +0000 (21:34 +0300)
Addendum to e24864c.

src/game/g_game.pas
src/game/g_monsters.pas
src/game/g_player.pas
src/game/g_weapons.pas

index 16dd284f92d7baf9d23f428d37c255c7b585cf17..7da95bf0499b2c8b41abe7759460351c2c931314 100644 (file)
@@ -7662,8 +7662,7 @@ begin
   case gAnnouncer of
     ANNOUNCE_NONE:
       Exit;
-    ANNOUNCE_ME,
-    ANNOUNCE_MEPLUS:
+    ANNOUNCE_ME:
       if not g_Game_IsWatchedPlayer(SpawnerUID) then
         Exit;
   end;
index 02e7ed589ae6fa4b69b7b686ebd50f69ee5752af..a6e39d1f07215ddf0ac526be15ad345df66bd787 100644 (file)
@@ -2938,9 +2938,9 @@ begin
                                    FObj.Rect.Width, 8, @co) and (Random(3) = 0) then
                     // Ïèíàåì òðóïû
                     if FObj.Vel.X < 0 then
-                      gCorpses[a].Damage(b*2, -b, Random(7)) // íàëåâî
+                      gCorpses[a].Damage(b*2, FUID, -b, Random(7)) // íàëåâî
                     else
-                      gCorpses[a].Damage(b*2, b, Random(7)); // íàïðàâî
+                      gCorpses[a].Damage(b*2, FUID, b, Random(7)); // íàïðàâî
                 end;
             end;
           // Åñëè öåëü âûñîêî, òî, âîçìîæíî, ïðûãàåì:
@@ -3788,9 +3788,9 @@ begin
                                    FObj.Rect.Width, 8, @co) and (Random(3) = 0) then
                     // Ïèíàåì òðóïû
                     if FObj.Vel.X < 0 then
-                      gCorpses[a].Damage(b*2, -b, Random(7)) // íàëåâî
+                      gCorpses[a].Damage(b*2, FUID, -b, Random(7)) // íàëåâî
                     else
-                      gCorpses[a].Damage(b*2, b, Random(7)); // íàïðàâî
+                      gCorpses[a].Damage(b*2, FUID, b, Random(7)); // íàïðàâî
                 end;
             end;
           end;
index dd5378b5162ce6e2fbbf3f67bf5eee90cda9efbb..a66b064efcdc0abbaaf7bd0f8b8be727d16bc40b 100644 (file)
@@ -533,7 +533,7 @@ type
   public
     constructor Create(X, Y: Integer; ModelName: String; aMess: Boolean);
     destructor  Destroy(); override;
-    procedure   Damage(Value: Word; vx, vy: Integer);
+    procedure   Damage(Value: Word; SpawnerUID: Word; vx, vy: Integer);
     procedure   Update();
     procedure   Draw();
     procedure   SaveState (st: TStream);
@@ -6617,7 +6617,7 @@ begin
 end;
 
 
-procedure TCorpse.Damage(Value: Word; vx, vy: Integer);
+procedure TCorpse.Damage(Value: Word; SpawnerUID: Word; vx, vy: Integer);
 var
   pm: TPlayerModel;
   Blood: TModelBlood;
@@ -6648,7 +6648,7 @@ begin
         if (gBodyKillEvent <> -1)
         and gDelayedEvents[gBodyKillEvent].Pending then
           gDelayedEvents[gBodyKillEvent].Pending := False;
-        gBodyKillEvent := g_Game_DelayEvent(DE_BODYKILL, 1050, 0);
+        gBodyKillEvent := g_Game_DelayEvent(DE_BODYKILL, 1050, SpawnerUID);
       end;
     end
   else
index bb17a4138972d82f07ac7674dc966e543cec69d3..79f6f2566ae93038ec519b1f4e2726f1c8036de3 100644 (file)
@@ -527,7 +527,7 @@ begin
               g_TraceVector(X, Y, Obj.X+Obj.Rect.X+(Obj.Rect.Width div 2),
                             Obj.Y+Obj.Rect.Y+(Obj.Rect.Height div 2)) then
           begin
-            Damage(50, 0, 0);
+            Damage(50, SpawnerUID, 0, 0);
             g_Weapon_BFGHit(Obj.X+Obj.Rect.X+(Obj.Rect.Width div 2),
                             Obj.Y+Obj.Rect.Y+(Obj.Rect.Height div 2));
           end;
@@ -876,8 +876,8 @@ begin
            g_Obj_Collide(obj, @gCorpses[i].Obj) then
         begin
           // Ðàñïèëèâàåì òðóï:
-          gCorpses[i].Damage(d, (obj^.Vel.X+obj^.Accel.X) div 4,
-                                (obj^.Vel.Y+obj^.Accel.Y) div 4);
+          gCorpses[i].Damage(d, SpawnerUID, (obj^.Vel.X+obj^.Accel.X) div 4,
+                                            (obj^.Vel.Y+obj^.Accel.Y) div 4);
           Result := 1;
         end;
   end;
@@ -1050,7 +1050,7 @@ begin
             mm := Max(abs(dx), abs(dy));
             if mm = 0 then mm := 1;
 
-            Damage(Round(100*(rad-m)/rad), (dx*10) div mm, (dy*10) div mm);
+            Damage(Round(100*(rad-m)/rad), SpawnerUID, (dx*10) div mm, (dy*10) div mm);
           end;
         end;