DEADSOFTWARE

net: cancel interpolation of teleported players
[d2df-sdl.git] / src / game / g_player.pas
index dd5378b5162ce6e2fbbf3f67bf5eee90cda9efbb..0b72fc96c52ba322d5cfeacd165ab34da82e7895 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);
@@ -5779,10 +5779,15 @@ var
 begin
   FXTo := XTo;
   FYTo := YTo;
-  if NetInterpLevel < 1 then
+  if FJustTeleported or (NetInterpLevel < 1) then
   begin
     FObj.X := XTo;
     FObj.Y := YTo;
+    if FJustTeleported then
+    begin
+      FObj.oldX := FObj.X;
+      FObj.oldY := FObj.Y;
+    end;
   end
   else
   begin
@@ -6617,7 +6622,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 +6653,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