DEADSOFTWARE

fixed bug with weapon updating in network mode (moved it to common player update...
authorKetmar Dark <ketmar@ketmar.no-ip.org>
Sun, 6 Aug 2017 12:31:51 +0000 (15:31 +0300)
committerKetmar Dark <ketmar@ketmar.no-ip.org>
Sun, 6 Aug 2017 12:32:34 +0000 (15:32 +0300)
src/game/g_game.pas
src/game/g_netmsg.pas

index aa04366d8bed39e698bf7e6d816e26710c685859..075fe6b54891997704ceba1a74ad5df6ab6457e7 100644 (file)
@@ -1534,8 +1534,8 @@ begin
         if g_Game_IsNet and (gPlayer1 <> nil) then gPlayer1.PressKey(KEY_CHAT, 10000);
       end;
       // process weapon switch queue
-      if gPlayer1 <> nil then gPlayer1.RealizeCurrentWeapon();
-      if gPlayer2 <> nil then gPlayer2.RealizeCurrentWeapon();
+      //if gPlayer1 <> nil then gPlayer1.RealizeCurrentWeapon();
+      //if gPlayer2 <> nil then gPlayer2.RealizeCurrentWeapon();
     end; // if server
 
   // Íàáëþäàòåëü
index 839e6429bd16d83d15c2636337d3b7e6ee97f1d3..bc54015ae519443c100ec950b635f3b7412bb7b3 100644 (file)
@@ -454,6 +454,7 @@ begin
     kByte := e_Raw_Read_Word(P);
     Dir := e_Raw_Read_Byte(P);
     WeaponSelect := e_Raw_Read_Word(P);
+    //e_WriteLog(Format('R:ws=%d', [WeaponSelect]), MSG_WARNING);
     if Direction <> TDirection(Dir) then
       JustTeleported := False;
 
@@ -476,7 +477,14 @@ begin
     if LongBool(kByte and NET_KEY_NW) then PressKey(KEY_NEXTWEAPON, 10000);
     if LongBool(kByte and NET_KEY_PW) then PressKey(KEY_PREVWEAPON, 10000);
 
-    for i := 0 to 15 do if (WeaponSelect and (1 shl i)) <> 0 then QueueWeaponSwitch(i);
+    for i := 0 to 15 do
+    begin
+      if (WeaponSelect and Word(1 shl i)) <> 0 then
+      begin
+        //e_WriteLog(Format(' R:wn=%d', [i]), MSG_WARNING);
+        QueueWeaponSwitch(i);
+      end;
+    end;
   end;
 
   // MH_SEND_PlayerPos(False, PID, C^.ID);
@@ -2868,6 +2876,7 @@ begin
   e_Buffer_Write(@NetOut, kByte);
   e_Buffer_Write(@NetOut, Byte(gPlayer1.Direction));
   e_Buffer_Write(@NetOut, WeaponSelect);
+  //e_WriteLog(Format('S:ws=%d', [WeaponSelect]), MSG_WARNING);
   g_Net_Client_Send(True, NET_CHAN_PLAYERPOS);
 
   //kBytePrev := kByte;