From ea9d3781319577daaa9e43d0218b824e0464a94f Mon Sep 17 00:00:00 2001 From: Freddie Witherden Date: Mon, 24 Dec 2007 14:57:58 +0000 Subject: [PATCH] Commit part 3 of patch #897 (and there is still more to come!). git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@3158 4a71c877-e1ca-e34f-864e-861f7616d084 --- src/multiplay.c | 2 +- src/multiplay.h | 2 +- src/multirecv.h | 2 +- src/multistruct.c | 110 ++++++++++++++++++++++++---------------------- 4 files changed, 61 insertions(+), 55 deletions(-) diff --git a/src/multiplay.c b/src/multiplay.c index ea43c0f6d..05a9cb3da 100644 --- a/src/multiplay.c +++ b/src/multiplay.c @@ -673,7 +673,7 @@ BOOL recvMessage(void) recvBuildStarted(); break; case NET_BUILDFINISHED: // a building is complete - recvBuildFinished(&msg); + recvBuildFinished(); break; case NET_STRUCTDEST: // structure destroy recvDestroyStructure(&msg); diff --git a/src/multiplay.h b/src/multiplay.h index fdcc34b06..f6faf372a 100644 --- a/src/multiplay.h +++ b/src/multiplay.h @@ -236,7 +236,7 @@ extern BOOL multiplayerWinSequence(BOOL firstCall); // Buildings . multistruct extern BOOL sendBuildStarted (STRUCTURE *psStruct, DROID *psDroid); extern BOOL SendDestroyStructure(const STRUCTURE* s); -extern BOOL SendBuildFinished (const STRUCTURE* psStruct); +extern BOOL SendBuildFinished (STRUCTURE *psStruct); extern BOOL sendLasSat (UBYTE player, STRUCTURE *psStruct, BASE_OBJECT *psObj); diff --git a/src/multirecv.h b/src/multirecv.h index 6b3a28caa..51c5685e8 100644 --- a/src/multirecv.h +++ b/src/multirecv.h @@ -35,7 +35,7 @@ extern BOOL receiveWholeDroid (NETMSG *pMsg); extern BOOL recvDestroyStructure (NETMSG *pMsg); //extern BOOL RecvBuild (NETMSG *pMsg); extern BOOL recvBuildStarted (); -extern BOOL recvBuildFinished (NETMSG *pMsg); +extern BOOL recvBuildFinished (); //extern BOOL receiveWholeStructure (NETMSG *pMsg); extern BOOL recvTemplate (NETMSG *pMsg); extern BOOL recvDestroyFeature (NETMSG *pMsg); diff --git a/src/multistruct.c b/src/multistruct.c index aefec09c4..30a135238 100644 --- a/src/multistruct.c +++ b/src/multistruct.c @@ -175,94 +175,100 @@ BOOL recvBuildStarted() // //////////////////////////////////////////////////////////////////////////// // INFORM others that a building has been completed. -BOOL SendBuildFinished(const STRUCTURE* psStruct) +BOOL SendBuildFinished(STRUCTURE *psStruct) { - NETMSG m; - - NetAdd(m,0,psStruct->id); //id of finished struct - // also enough info to build it if we don't already know about it. - NetAdd(m,4,psStruct->pStructureType->ref); // kind of building. - NetAdd(m,8,psStruct->pos.x); // x pos - NetAdd(m,10,psStruct->pos.y); // y pos - NetAdd(m,12,psStruct->pos.z); // y pos - m.body[14] =(char) psStruct->player; // player - - m.size =15; - m.type =NET_BUILDFINISHED; - return (NETbcast(&m,FALSE)); + DBCONPRINTF(ConsoleString,(ConsoleString,"SendBuildFinished() called")); + + NETbeginEncode(NET_BUILDFINISHED, NET_ALL_PLAYERS); + // ID of building + NETuint32_t(&psStruct->id); + + // Along with enough info to build it (if needed) + NETuint32_t(&psStruct->pStructureType->ref); + NETuint16_t(&psStruct->pos.x); + NETuint16_t(&psStruct->pos.y); + NETuint16_t(&psStruct->pos.z); + NETuint8_t(&psStruct->player); + return NETend(); } // //////////////////////////////////////////////////////////////////////////// -BOOL recvBuildFinished(NETMSG *m) +BOOL recvBuildFinished() { - UDWORD strId;//,i; - STRUCTURE *psStr; + UDWORD structId; + STRUCTURE *psStruct; UWORD x,y,z; UDWORD type,typeindex; UBYTE player; - NetGet(m,0,strId); // get the struct id. - psStr = IdToStruct(strId,ANYPLAYER); - if(psStr) + DBCONPRINTF(ConsoleString,(ConsoleString,"recvBuildFinished() called")); + NETbeginDecode(); + NETuint32_t(&structId); // get the struct id. + psStruct = IdToStruct(structId,ANYPLAYER); + + if (psStruct) { // make it complete. - psStr->currentBuildPts = psStr->pStructureType->buildPoints+1; + psStruct->currentBuildPts = psStruct->pStructureType->buildPoints+1; - if(psStr->status != SS_BUILT) + if (psStruct->status != SS_BUILT) { - psStr->status = SS_BUILT; - buildingComplete(psStr); + psStruct->status = SS_BUILT; + buildingComplete(psStruct); } NETlogEntry("building finished ok." ,0,0); + NETend(); return TRUE; } - // the building wasn't started, so we'll have to just plonk it down in the map. - NetGet(m,4,type); // kind of building. - NetGet(m,8,x); // x pos - NetGet(m,10,y); // y pos - NetGet(m,12,z); // z pos + // The building wasn't started, so we'll have to just plonk it down in the map. + NETuint32_t(&type); // Kind of building. + NETuint16_t(&x); // x pos + NETuint16_t(&y); // y pos + NETuint16_t(&z); // z pos + NETuint8_t(&player); - player = m->body[14]; // player - - for(typeindex=0; // find structure target + // Find the structures stats + for (typeindex=0; // Find structure target (typeindexpStructureType->type) + // Get the current structure + psStruct = getTileStructure(map_coord(x), map_coord(y)); + if (asStructureStats[typeindex].type == psStruct->pStructureType->type) { - // correct type, correct location, just rename the id's to sync it.. (urgh) - psStr->id = strId; - psStr->status = SS_BUILT; - buildingComplete(psStr); - NETlogEntry("structure id modified" ,0,player); + // Correct type, correct location, just rename the id's to sync it.. (urgh) + psStruct->id = structId; + psStruct->status = SS_BUILT; + buildingComplete(psStruct); + NETlogEntry("structure id modified", 0, player); + NETend(); return TRUE; } } - - psStr = buildStructure(&(asStructureStats[typeindex]), // build the structure. - x,y, - player,TRUE); - if (psStr) + // Build the structure + psStruct = buildStructure(&(asStructureStats[typeindex]), // Build the structure. + x, y, player,TRUE); + + if (psStruct) { - psStr->id = strId; - psStr->status = SS_BUILT; - buildingComplete(psStr); + psStruct->id = structId; + psStruct->status = SS_BUILT; + buildingComplete(psStruct); - DBCONPRINTF(ConsoleString,(ConsoleString,"MultiPlayer: Struct not found on recvbuildcomplete :%d",strId )); + DBCONPRINTF(ConsoleString,(ConsoleString,"MultiPlayer: Struct not found on recvbuildcomplete :%d",structId )); NETlogEntry("had to plonk down a building" ,0,player); } else { - DBCONPRINTF(ConsoleString,(ConsoleString,"MultiPlayer: Struct not found on recvbuildcomplete BUILDIT FAILED TOO!:%d",strId )); + DBCONPRINTF(ConsoleString,(ConsoleString,"MultiPlayer: Struct not found on recvbuildcomplete BUILDIT FAILED TOO!:%d",structId )); NETlogEntry("had to plonk down a building, BUT FAILED OH S**T." ,0,player); } + + NETend(); return FALSE; }