Fix I_Error when queuing multiple Lua files
This commit is contained in:
parent
f620b52672
commit
c8948909d3
|
@ -321,6 +321,12 @@ void Got_LuaFile(UINT8 **cp, INT32 playernum)
|
||||||
|
|
||||||
RemoveLuaFileTransfer();
|
RemoveLuaFileTransfer();
|
||||||
|
|
||||||
|
if (waitingforluafilecommand)
|
||||||
|
{
|
||||||
|
waitingforluafilecommand = false;
|
||||||
|
CL_PrepareDownloadLuaFile();
|
||||||
|
}
|
||||||
|
|
||||||
if (server && luafiletransfers)
|
if (server && luafiletransfers)
|
||||||
SV_PrepareSendLuaFile();
|
SV_PrepareSendLuaFile();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3256,6 +3256,7 @@ void D_QuitNetGame(void)
|
||||||
CloseNetFile();
|
CloseNetFile();
|
||||||
RemoveAllLuaFileTransfers();
|
RemoveAllLuaFileTransfers();
|
||||||
waitingforluafiletransfer = false;
|
waitingforluafiletransfer = false;
|
||||||
|
waitingforluafilecommand = false;
|
||||||
|
|
||||||
if (server)
|
if (server)
|
||||||
{
|
{
|
||||||
|
|
|
@ -110,6 +110,7 @@ INT32 lastfilenum = -1;
|
||||||
|
|
||||||
luafiletransfer_t *luafiletransfers = NULL;
|
luafiletransfer_t *luafiletransfers = NULL;
|
||||||
boolean waitingforluafiletransfer = false;
|
boolean waitingforluafiletransfer = false;
|
||||||
|
boolean waitingforluafilecommand = false;
|
||||||
char luafiledir[256 + 16] = "luafiles";
|
char luafiledir[256 + 16] = "luafiles";
|
||||||
|
|
||||||
|
|
||||||
|
@ -536,6 +537,8 @@ void AddLuaFileTransfer(const char *filename, const char *mode)
|
||||||
// Only if there is no transfer already going on
|
// Only if there is no transfer already going on
|
||||||
if (server && filetransfer == luafiletransfers)
|
if (server && filetransfer == luafiletransfers)
|
||||||
SV_PrepareSendLuaFile();
|
SV_PrepareSendLuaFile();
|
||||||
|
else
|
||||||
|
filetransfer->ongoing = false;
|
||||||
|
|
||||||
// Store the callback so it can be called once everyone has the file
|
// Store the callback so it can be called once everyone has the file
|
||||||
filetransfer->id = id;
|
filetransfer->id = id;
|
||||||
|
@ -578,6 +581,8 @@ void SV_PrepareSendLuaFile(void)
|
||||||
char *binfilename;
|
char *binfilename;
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
|
||||||
|
luafiletransfers->ongoing = true;
|
||||||
|
|
||||||
// Set status to "waiting" for everyone
|
// Set status to "waiting" for everyone
|
||||||
for (i = 0; i < MAXNETNODES; i++)
|
for (i = 0; i < MAXNETNODES; i++)
|
||||||
luafiletransfers->nodestatus[i] = LFTNS_WAITING;
|
luafiletransfers->nodestatus[i] = LFTNS_WAITING;
|
||||||
|
@ -660,6 +665,12 @@ void CL_PrepareDownloadLuaFile(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (luafiletransfers->ongoing)
|
||||||
|
{
|
||||||
|
waitingforluafilecommand = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Tell the server we are ready to receive the file
|
// Tell the server we are ready to receive the file
|
||||||
netbuffer->packettype = PT_ASKLUAFILE;
|
netbuffer->packettype = PT_ASKLUAFILE;
|
||||||
HSendPacket(servernode, true, 0, 0);
|
HSendPacket(servernode, true, 0, 0);
|
||||||
|
@ -674,6 +685,8 @@ void CL_PrepareDownloadLuaFile(void)
|
||||||
|
|
||||||
// Make sure all directories in the file path exist
|
// Make sure all directories in the file path exist
|
||||||
MakePathDirs(fileneeded[0].filename);
|
MakePathDirs(fileneeded[0].filename);
|
||||||
|
|
||||||
|
luafiletransfers->ongoing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Number of files to send
|
// Number of files to send
|
||||||
|
|
|
@ -95,12 +95,14 @@ typedef struct luafiletransfer_s
|
||||||
char *realfilename;
|
char *realfilename;
|
||||||
char mode[4]; // rb+/wb+/ab+ + null character
|
char mode[4]; // rb+/wb+/ab+ + null character
|
||||||
INT32 id; // Callback ID
|
INT32 id; // Callback ID
|
||||||
|
boolean ongoing;
|
||||||
luafiletransfernodestatus_t nodestatus[MAXNETNODES];
|
luafiletransfernodestatus_t nodestatus[MAXNETNODES];
|
||||||
struct luafiletransfer_s *next;
|
struct luafiletransfer_s *next;
|
||||||
} luafiletransfer_t;
|
} luafiletransfer_t;
|
||||||
|
|
||||||
extern luafiletransfer_t *luafiletransfers;
|
extern luafiletransfer_t *luafiletransfers;
|
||||||
extern boolean waitingforluafiletransfer;
|
extern boolean waitingforluafiletransfer;
|
||||||
|
extern boolean waitingforluafilecommand;
|
||||||
extern char luafiledir[256 + 16];
|
extern char luafiledir[256 + 16];
|
||||||
|
|
||||||
void AddLuaFileTransfer(const char *filename, const char *mode);
|
void AddLuaFileTransfer(const char *filename, const char *mode);
|
||||||
|
|
Loading…
Reference in a new issue