// sendGiftDroids() // We give selected droid(s) as a gift to another player. // // \param from :player that sent us the droid // \param to :player that should be getting the droid static void sendGiftDroids(uint8_t from, uint8_t to) { DROID *next, *psD; uint8_t giftType = DROID_GIFT; uint8_t totalToSend; if (apsDroidLists[from] == NULL) { return; } /* * Work out the number of droids to send. As well as making sure they are * selected we also need to make sure they will NOT put the receiving player * over their droid limit. */ for (totalToSend = 0, psD = apsDroidLists[from]; psD && getNumDroids(to) + totalToSend < getMaxDroids(to) && totalToSend != UINT8_MAX; psD = psD->psNext) { if (psD->selected) ++totalToSend; } /* * We must send one droid at a time, due to the fact that giftSingleDroid() * does its own net calls. */ for (psD = apsDroidLists[from]; psD && totalToSend != 0; psD = next) { // Store the next droid in the list as the list may change next = psD->psNext; if (psD->droidType == DROID_TRANSPORTER && !transporterIsEmpty(psD)) { CONPRINTF(ConsoleString, (ConsoleString, _("Tried to give away a non-empty %s - but this is not allowed."), psD->aName)); continue; } if (psD->selected) { NETbeginEncode(NET_GIFT, NET_ALL_PLAYERS); NETuint8_t(&giftType); NETuint8_t(&from); NETuint8_t(&to); // Add the droid to the packet NETuint32_t(&psD->id); NETend(); // Hand over the droid on our sidde giftSingleDroid(psD, to); // Decrement the number of droids left to send --totalToSend; } } }
// sendGiftDroids() // We give selected droid(s) as a gift to another player. // // \param from :player that sent us the droid // \param to :player that should be getting the droid static void sendGiftDroids(uint8_t from, uint8_t to) { DROID *psD; uint8_t giftType = DROID_GIFT; uint8_t totalToSend; if (apsDroidLists[from] == nullptr) { return; } /* * Work out the number of droids to send. As well as making sure they are * selected we also need to make sure they will NOT put the receiving player * over their droid limit. */ for (totalToSend = 0, psD = apsDroidLists[from]; psD && getNumDroids(to) + totalToSend < getMaxDroids(to) && totalToSend != UINT8_MAX; psD = psD->psNext) { if (psD->selected) { ++totalToSend; } } /* * We must send one droid at a time, due to the fact that giftSingleDroid() * does its own net calls. */ for (psD = apsDroidLists[from]; psD && totalToSend != 0; psD = psD->psNext) { if (isTransporter(psD) && !transporterIsEmpty(psD)) { CONPRINTF(ConsoleString, (ConsoleString, _("Tried to give away a non-empty %s - but this is not allowed."), psD->aName)); continue; } if (psD->selected) { NETbeginEncode(NETgameQueue(selectedPlayer), GAME_GIFT); NETuint8_t(&giftType); NETuint8_t(&from); NETuint8_t(&to); // Add the droid to the packet NETuint32_t(&psD->id); NETend(); // Decrement the number of droids left to send --totalToSend; } } }