From 249437fb26187bc1db9b35f59ad597e169ec9c01 Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Tue, 2 Oct 2018 06:17:54 +0300 Subject: [PATCH] network: server is weapon authority! --- src/game/g_netmsg.pas | 4 ++-- src/game/g_player.pas | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index f235035..e9cc68c 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -464,7 +464,7 @@ begin writeln('HOST PLRPOS: got: currweap=', CurrWeap, '; curfrm=', gTime, '; netweap=', newweapon, '; oldweap=', CurrWeap); {$ENDIF} //NetForceWeap := newweapon; - SetWeapon(newweapon); + SetWeaponHost(newweapon); end; //e_WriteLog(Format('R:ws=%d', [WeaponSelect]), MSG_WARNING); if Direction <> TDirection(Dir) then @@ -2150,7 +2150,7 @@ begin if (gTime >= NetForceWeapFIdx) then begin //NetForceWeap := newweapon; - SetWeapon(newweapon); + SetWeaponHost(newweapon); end; //SetWeapon(M.ReadByte()); diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 0565c75..66f0099 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -280,7 +280,7 @@ type procedure ReleaseKeysNoWeapon(); procedure SetModel(ModelName: String); procedure SetColor(Color: TRGB); - procedure SetWeapon(W: Byte); + procedure SetWeaponHost(W: Byte); function IsKeyPressed(K: Byte): Boolean; function GetKeys(): Byte; function PickItem(ItemType: Byte; arespawn: Boolean; var remove: Boolean): Boolean; virtual; @@ -3887,9 +3887,12 @@ begin FNextWeap := $4000; end; -// used by network layer -procedure TPlayer.SetWeapon(W: Byte); +// used exclusively by network layer +procedure TPlayer.SetWeaponHost(W: Byte); begin + if (W > High(FWeapon)) then exit; + if (not FWeapon[W]) then exit; // server is authority! + if FCurrWeap <> W then if (W = WEAPON_SAW) then FSawSoundSelect.PlayAt(FObj.X, FObj.Y); -- 2.11.4.GIT