diff --git a/src/multibot.c b/src/multibot.c index ad9e361f7..215d99d08 100644 --- a/src/multibot.c +++ b/src/multibot.c @@ -118,38 +118,46 @@ BOOL recvHappyVtol(NETMSG *pMsg) // Secondary Orders. // Send -BOOL sendDroidSecondary(DROID *psDroid, SECONDARY_ORDER sec, SECONDARY_STATE state) +BOOL sendDroidSecondary(const DROID* psDroid, SECONDARY_ORDER sec, SECONDARY_STATE state) { - NETMSG m; + NETbeginEncode(NET_SECONDARY, NET_ALL_PLAYERS); + { + uint8_t player = psDroid->player; + uint32_t droid = psDroid->id; - NetAdd(m,0,psDroid->id); - NetAdd(m,4,sec); - NetAdd(m,8,state); - m.body[12] = (char) psDroid->player; - - m.size = 13; - m.type = NET_SECONDARY; - return NETbcast(&m,FALSE); + NETuint8_t(&player); + NETuint32_t(&droid); + NETenum(&sec); + NETenum(&state); + } + return NETend(); } // recv -BOOL recvDroidSecondary(NETMSG *pMsg) +BOOL recvDroidSecondary() { - DROID *psDroid; + DROID* psDroid; SECONDARY_ORDER sec; SECONDARY_STATE state; - UDWORD id,player; - NetGet(pMsg,0,id); - NetGet(pMsg,4,sec); - NetGet(pMsg,8,state); - player = pMsg->body[12]; - - // If we can not find the droid should we not ask for it? - if(!IdToDroid(id,player,&psDroid)) //find droid. + NETbeginDecode(); { - return FALSE; + uint8_t player; + uint32_t droid; + + NETuint8_t(&player); + NETuint32_t(&droid); + NETenum(&sec); + NETenum(&state); + + // If we can not find the droid should we not ask for it? + if (!IdToDroid(droid, player, &psDroid)) + { + NETend(); + return FALSE; + } } + NETend(); // Set the droids secondary order turnOffMultiMsg(TRUE); @@ -159,7 +167,6 @@ BOOL recvDroidSecondary(NETMSG *pMsg) return TRUE; } - BOOL sendDroidSecondaryAll(DROID *psDroid) { NETMSG m; diff --git a/src/multiplay.c b/src/multiplay.c index 05c7c46f8..c3d461cec 100644 --- a/src/multiplay.c +++ b/src/multiplay.c @@ -679,7 +679,7 @@ BOOL recvMessage(void) recvDestroyStructure(); break; case NET_SECONDARY: // set a droids secondary order level. - recvDroidSecondary(&msg); + recvDroidSecondary(); break; case NET_SECONDARY_ALL: // set a droids secondary order level. recvDroidSecondaryAll(&msg); diff --git a/src/multiplay.h b/src/multiplay.h index b274935f2..05948ae89 100644 --- a/src/multiplay.h +++ b/src/multiplay.h @@ -252,7 +252,7 @@ extern BOOL SendCmdGroup (DROID_GROUP *psGroup, UWORD x, UWORD y, BASE_OBJECT * extern BOOL SendGroupOrderGroup(DROID_GROUP *psGroup, DROID_ORDER order,UDWORD x,UDWORD y,BASE_OBJECT *psObj); -extern BOOL sendDroidSecondary (DROID *psDroid, SECONDARY_ORDER sec, SECONDARY_STATE state); +extern BOOL sendDroidSecondary (const DROID* psDroid, SECONDARY_ORDER sec, SECONDARY_STATE state); extern BOOL sendDroidSecondaryAll(DROID *psDroid); extern BOOL sendDroidEmbark (const DROID* psDroid); extern BOOL sendDroidDisEmbark (const DROID* psDroid); diff --git a/src/multirecv.h b/src/multirecv.h index 3272c62d2..4f08686ad 100644 --- a/src/multirecv.h +++ b/src/multirecv.h @@ -43,7 +43,7 @@ extern BOOL recvDemolishFinished (); extern BOOL recvPing (); extern BOOL recvRequestDroid (NETMSG *pMsg); extern BOOL recvTextMessage (NETMSG *pMsg); -extern BOOL recvDroidSecondary (NETMSG *pMsg); +extern BOOL recvDroidSecondary (void); extern BOOL recvDroidSecondaryAll (NETMSG *pMsg); extern BOOL recvDroidEmbark (void); extern BOOL recvDroidDisEmbark (void);