X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=e9cc68c2ee55ac7fcb0067073ed725ecdedd6e9e;hb=249437fb26187bc1db9b35f59ad597e169ec9c01;hp=6d1f430e5509196b9212f1535b1baedf3658e8af;hpb=85f0d06ec81bc2e66f235f87cf5c6844487b26c6;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 6d1f430..e9cc68c 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -16,6 +16,8 @@ {$INCLUDE ../shared/a_modes.inc} unit g_netmsg; +{.$DEFINE K8_XXX_WEAPON_DEBUG} + interface uses e_msg, g_net, g_triggers, Classes, SysUtils, md5; @@ -436,6 +438,7 @@ var kByte: Word; Pl: TPlayer; GT: LongWord; + newweapon: Byte; begin Result := 0; if not gGameOn then Exit; @@ -454,7 +457,15 @@ begin kByte := M.ReadWord(); Dir := M.ReadByte(); //WeaponSelect := M.ReadWord(); - SetWeapon(M.ReadByte()); + newweapon := M.ReadByte(); + if (newweapon <> CurrWeap) then + begin +{$IFDEF K8_XXX_WEAPON_DEBUG} + writeln('HOST PLRPOS: got: currweap=', CurrWeap, '; curfrm=', gTime, '; netweap=', newweapon, '; oldweap=', CurrWeap); +{$ENDIF} + //NetForceWeap := newweapon; + SetWeaponHost(newweapon); + end; //e_WriteLog(Format('R:ws=%d', [WeaponSelect]), MSG_WARNING); if Direction <> TDirection(Dir) then JustTeleported := False; @@ -1071,7 +1082,8 @@ begin NetOut.Write(Frags); NetOut.Write(Death); - NetOut.Write(CurrWeap); + //NetOut.Write(CurrWeap); + NetOut.Write(Byte(CurrWeap)); // other flags ww := 0; @@ -2031,6 +2043,8 @@ begin Exit; end; gTime := GT; + if g_Game_IsClient and (gPlayer1 <> nil) and (gPlayer1.NetForceWeapFIdx >= gTime+15) then gPlayer1.NetForceWeapFIdx := 0; + if g_Game_IsClient and (gPlayer2 <> nil) and (gPlayer2.NetForceWeapFIdx >= gTime+15) then gPlayer2.NetForceWeapFIdx := 0; PID := M.ReadWord(); Pl := g_Player_Get(PID); @@ -2082,6 +2096,7 @@ var OldJet: Boolean; NewTeam: Byte; ww: Word; + newweapon: Byte; begin PID := M.ReadWord(); Pl := g_Player_Get(PID); @@ -2128,7 +2143,16 @@ begin Frags := M.ReadLongInt(); Death := M.ReadLongInt(); - SetWeapon(M.ReadByte()); + newweapon := M.ReadByte(); +{$IFDEF K8_XXX_WEAPON_DEBUG} + writeln('CLIENT PLRSTATS: got: currweap=', CurrWeap, '; curfrm=', gTime, '; netweap=', newweapon, '; lastnwfrm=', NetForceWeapFIdx); +{$ENDIF} + if (gTime >= NetForceWeapFIdx) then + begin + //NetForceWeap := newweapon; + SetWeaponHost(newweapon); + end; + //SetWeapon(M.ReadByte()); // other flags ww := M.ReadByte(); @@ -2815,9 +2839,11 @@ begin begin if isKeyPressed(KeyWeapon[I], KeyWeapon2[I]) then begin + //writeln('keyweapon #', i, ' is pressed; released=', Integer(gPlayer1.isWeaponSwitchKeyReleased(i)), '; frm=', gPlayer1.NetForceWeapFIdx, '; gTime=', gTime); gPlayer1.weaponSwitchKeysStateChange(i, true); if gPlayer1.isWeaponSwitchKeyReleased(i) then begin + //writeln('keyweapon #', i, ' is pressed; released=', Integer(gPlayer1.isWeaponSwitchKeyReleased(i)), '; frm=', gPlayer1.NetForceWeapFIdx, '; gTime=', gTime); gPlayer1.QueueWeaponSwitch(i); // all choices are passed there, and god will take the best //WeaponSelect := WeaponSelect or Word(1 shl I); end; @@ -2841,10 +2867,17 @@ begin NetOut.Write(kByte); NetOut.Write(Byte(gPlayer1.Direction)); NetOut.Write(Byte(gPlayer1.CurrWeap)); +{$IFDEF K8_XXX_WEAPON_DEBUG} + if (kByte and NET_KEY_FIRE) <> 0 then writeln('FIRE: CurrWeap=', gPlayer1.CurrWeap); +{$ENDIF} + //e_WriteLog(Format('S:nwp=%d; nwfidx=%d', [Integer(gPlayer1.NetForceWeap), Integer(gPlayer1.NetForceWeapFIdx)]), TMsgType.Warning); //NetOut.Write(WeaponSelect); //e_WriteLog(Format('S:ws=%d', [WeaponSelect]), MSG_WARNING); g_Net_Client_Send(True, NET_CHAN_PLAYERPOS); + // force player weapon + //{if (gPlayer1.NetForceWeapFIdx < gTime) then} gPlayer1.SetWeapon(gPlayer1.NetForceWeap); + //kBytePrev := kByte; //kDirPrev := gPlayer1.Direction; end;