X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_netmsg.pas;h=44135d789b46439e6216fdd08c879d2d2b66298e;hb=ac9c2149eb3d0ac7b8ae15c8c6e8a54a6c3c61b6;hp=27b8081f4733b7aa68efc041860a2e40ba38772f;hpb=88ce644db1b40111bdb380f4357fa59bdb5173be;p=d2df-sdl.git diff --git a/src/game/g_netmsg.pas b/src/game/g_netmsg.pas index 27b8081..44135d7 100644 --- a/src/game/g_netmsg.pas +++ b/src/game/g_netmsg.pas @@ -5,6 +5,8 @@ interface uses g_net, g_triggers, Classes, SysUtils, md5; const + NET_PROTO_VERSION = 1; + NET_MSG_INFO = 100; NET_MSG_CHAT = 101; @@ -254,8 +256,8 @@ uses Math, ENet, e_input, e_fixedbuffer, e_graphics, e_log, g_textures, g_gfx, g_sound, g_console, g_basic, g_options, g_main, g_game, g_player, g_map, g_panel, g_items, g_weapons, g_phys, g_gui, - g_language, g_monsters, g_netmaster, - WADEDITOR, MAPDEF; + g_language, g_monsters, g_netmaster, sfs, + wadreader, MAPDEF; const NET_KEY_LEFT = 1; @@ -310,7 +312,10 @@ var PID: Word; Color: TRGB; I: Integer; + ProtoVer, Zero: Byte; begin + Zero := e_Raw_Read_Byte(P); + ProtoVer := e_Raw_Read_Byte(P); Ver := e_Raw_Read_String(P); Pw := e_Raw_Read_String(P); PName := e_Raw_Read_String(P); @@ -320,7 +325,7 @@ begin B := e_Raw_Read_Byte(P); T := e_Raw_Read_Byte(P); - if Ver <> GAME_VERSION then + if (Ver <> GAME_VERSION) or (ProtoVer <> NET_PROTO_VERSION) or (Zero <> 0) then begin g_Console_Add(_lc[I_NET_MSG] + _lc[I_NET_MSG_HOST_REJECT] + _lc[I_NET_DISC_VERSION]); @@ -423,7 +428,7 @@ var begin Result := 0; if not gGameOn then Exit; - + GT := e_Raw_Read_LongWord(P); PID := C^.Player; Pl := g_Player_Get(PID); @@ -566,7 +571,7 @@ begin Pl := g_Player_Get(C^.Player); if Pl = nil then Exit; Name := Pl.Name; - + if Start then begin if not g_Console_CommandBlacklisted(Command) then @@ -1624,6 +1629,7 @@ var pln: String; cnt: Byte; begin + FillChar(EvHash, Sizeof(EvHash), 0); EvType := e_Raw_Read_Byte(P); EvNum := e_Raw_Read_LongInt(P); EvStr := e_Raw_Read_String(P); @@ -2685,6 +2691,8 @@ begin e_Buffer_Clear(@NetOut); e_Buffer_Write(@NetOut, Byte(NET_MSG_INFO)); + e_Buffer_Write(@NetOut, Byte(0)); // to kill old clients + e_Buffer_Write(@NetOut, Byte(NET_PROTO_VERSION)); e_Buffer_Write(@NetOut, GAME_VERSION); e_Buffer_Write(@NetOut, Password); e_Buffer_Write(@NetOut, gPlayer1Settings.Name); @@ -2838,11 +2846,21 @@ end; function ReadFile(const FileName: TFileName): AByte; var FileStream : TFileStream; + fname: string; begin + e_WriteLog(Format('NETWORK: looking for file "%s"', [FileName]), MSG_NOTIFY); + fname := findDiskWad(FileName); + if length(fname) = 0 then + begin + e_WriteLog(Format('NETWORK: file "%s" not found!', [FileName]), MSG_FATALERROR); + SetLength(Result, 0); + exit; + end; + e_WriteLog(Format('NETWORK: found file "%s"', [fname]), MSG_NOTIFY); Result := nil; - FileStream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); + FileStream:= TFileStream.Create(fname, fmOpenRead or {fmShareDenyWrite}fmShareDenyNone); try - if FileStream.Size>0 then + if FileStream.Size > 0 then begin SetLength(Result, FileStream.Size); FileStream.Read(Result[0], FileStream.Size);