X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=a5bd880c0e817a6c91756c18377b6d94699c26f7;hb=5d418dab48047a9d00fc901b1c632cd83d5182ff;hp=abc65a04102c45ca288b87fd6a2caeeac914fa00;hpb=7cd1c130359bef86087eaefe317526775e8ad4f8;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index abc65a0..a5bd880 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -430,7 +430,8 @@ end; function MH_RECV_PlayerPos(C: pTNetClient; P: Pointer): Word; var - Dir, WeaponSelect: Byte; + Dir, i: Byte; + WeaponSelect: Word; PID: Word; kByte: Word; Pl: TPlayer; @@ -452,7 +453,8 @@ begin NetTime := GT; kByte := e_Raw_Read_Word(P); Dir := e_Raw_Read_Byte(P); - WeaponSelect := 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; @@ -475,8 +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); - if WeaponSelect <> 255 then - ForceWeapon(WeaponSelect); + 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); @@ -1066,13 +1074,13 @@ begin e_Buffer_Write(@NetOut, Lives); e_Buffer_Write(@NetOut, Team); - for I := WEAPON_KASTET to WEAPON_SUPERPULEMET do + for I := WP_FIRST to WP_LAST do e_Buffer_Write(@NetOut, Byte(FWeapon[I])); - for I := A_BULLETS to A_CELLS do + for I := A_BULLETS to A_HIGH do e_Buffer_Write(@NetOut, FAmmo[I]); - for I := A_BULLETS to A_CELLS do + for I := A_BULLETS to A_HIGH do e_Buffer_Write(@NetOut, FMaxAmmo[I]); for I := MR_SUIT to MR_MAX do @@ -1094,6 +1102,7 @@ begin e_Buffer_Write(@NetOut, Byte(FPhysics)); e_Buffer_Write(@NetOut, Byte(FNoRespawn)); e_Buffer_Write(@NetOut, Byte(FJetpack)); + e_Buffer_Write(@NetOut, FFireTime); end; g_Net_Host_Send(ID, True, NET_CHAN_PLAYER); @@ -1370,6 +1379,7 @@ begin e_Buffer_Write(@NetOut, MonsterAmmo); e_Buffer_Write(@NetOut, MonsterPain); e_Buffer_Write(@NetOut, Byte(AnimIsReverse)); + e_Buffer_Write(@NetOut, FFireTime); end; g_Net_Host_Send(ID, True, NET_CHAN_MONSTER); @@ -2119,13 +2129,13 @@ begin Lives := e_Raw_Read_Byte(P); NewTeam := e_Raw_Read_Byte(P); - for I := WEAPON_KASTET to WEAPON_SUPERPULEMET do + for I := WP_FIRST to WP_LAST do FWeapon[I] := (e_Raw_Read_Byte(P) <> 0); - for I := A_BULLETS to A_CELLS do + for I := A_BULLETS to A_HIGH do FAmmo[I] := e_Raw_Read_Word(P); - for I := A_BULLETS to A_CELLS do + for I := A_BULLETS to A_HIGH do FMaxAmmo[I] := e_Raw_Read_Word(P); for I := MR_SUIT to MR_MAX do @@ -2174,6 +2184,7 @@ begin FNoRespawn := e_Raw_Read_Byte(P) <> 0; OldJet := FJetpack; FJetpack := e_Raw_Read_Byte(P) <> 0; + FFireTime := e_Raw_Read_LongInt(P); if OldJet and not FJetpack then JetpackOff else if not OldJet and FJetpack then @@ -2377,7 +2388,8 @@ begin else if gItems[ID].ItemType in [ITEM_WEAPON_SAW, ITEM_WEAPON_PISTOL, ITEM_WEAPON_SHOTGUN1, ITEM_WEAPON_SHOTGUN2, ITEM_WEAPON_CHAINGUN, ITEM_WEAPON_ROCKETLAUNCHER, ITEM_WEAPON_PLASMA, - ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET, ITEM_AMMO_BACKPACK] then + ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET, ITEM_WEAPON_FLAMETHROWER, + ITEM_AMMO_BACKPACK] then g_Sound_PlayExAt('SOUND_ITEM_GETWEAPON', gItems[ID].Obj.X, gItems[ID].Obj.Y) else @@ -2393,7 +2405,7 @@ begin else if gItems[ID].ItemType in [ITEM_WEAPON_SAW, ITEM_WEAPON_PISTOL, ITEM_WEAPON_SHOTGUN1, ITEM_WEAPON_SHOTGUN2, ITEM_WEAPON_CHAINGUN, ITEM_WEAPON_ROCKETLAUNCHER, ITEM_WEAPON_PLASMA, - ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET] then + ITEM_WEAPON_BFG, ITEM_WEAPON_SUPERPULEMET, ITEM_WEAPON_FLAMETHROWER] then g_Sound_PlayExAt('SOUND_ITEM_GETWEAPON', gItems[ID].Obj.X, gItems[ID].Obj.Y) else @@ -2659,6 +2671,7 @@ begin MonsterAmmo := e_Raw_Read_LongInt(P); MonsterPain := e_Raw_Read_LongInt(P); AnimRevert := e_Raw_Read_Byte(P) <> 0; + FFireTime := e_Raw_Read_LongInt(P); RevertAnim(AnimRevert); if MonsterState <> MState then @@ -2787,7 +2800,7 @@ var kByte: Word; Predict: Boolean; strafeDir: Byte; - WeaponSelect: Byte = 255; + WeaponSelect: Word = 0; I: Integer; begin if not gGameOn then Exit; @@ -2855,7 +2868,7 @@ begin if isKeyPressed(KeyPrevWeapon, KeyPrevWeapon2) then kByte := kByte or NET_KEY_PW; for I := 0 to High(KeyWeapon) do if isKeyPressed(KeyWeapon[I], KeyWeapon2[I]) then - WeaponSelect := I; + WeaponSelect := WeaponSelect or Word(1 shl I); end; // fix movebutton state P1MoveButton := P1MoveButton or (strafeDir shl 4); @@ -2868,6 +2881,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;