void formAlliance(uint8_t p1, uint8_t p2, bool prop, bool allowAudio, bool allowNotification) { DROID *psDroid; char tm1[128]; if (bMultiMessages && prop) { sendAlliance(p1, p2, ALLIANCE_FORMED, false); return; // Wait for our message. } // Don't add message if already allied if (bMultiPlayer && alliances[p1][p2] != ALLIANCE_FORMED && allowNotification) { sstrcpy(tm1, getPlayerName(p1)); CONPRINTF(ConsoleString, (ConsoleString, _("%s Forms An Alliance With %s"), tm1, getPlayerName(p2))); } syncDebug("Form alliance %d %d", p1, p2); triggerEventAllianceAccepted(p1, p2); alliances[p1][p2] = ALLIANCE_FORMED; alliances[p2][p1] = ALLIANCE_FORMED; if (bMultiPlayer && alliancesSharedVision(game.alliance)) // this is for shared vision only { alliancebits[p1] |= 1 << p2; alliancebits[p2] |= 1 << p1; } if (allowAudio && (p1 == selectedPlayer || p2 == selectedPlayer)) { audio_QueueTrack(ID_ALLIANCE_ACC); } // Not campaign and alliances are transitive if (bMultiPlayer && alliancesSharedVision(game.alliance)) { giftRadar(p1, p2, false); giftRadar(p2, p1, false); } // Clear out any attacking orders for (psDroid = apsDroidLists[p1]; psDroid; psDroid = psDroid->psNext) // from -> to { if (psDroid->order.type == DORDER_ATTACK && psDroid->order.psObj && psDroid->order.psObj->player == p2) { orderDroid(psDroid, DORDER_STOP, ModeImmediate); } } for (psDroid = apsDroidLists[p2]; psDroid; psDroid = psDroid->psNext) // to -> from { if (psDroid->order.type == DORDER_ATTACK && psDroid->order.psObj && psDroid->order.psObj->player == p1) { orderDroid(psDroid, DORDER_STOP, ModeImmediate); } } }
bool recvGift(NETQUEUE queue) { uint8_t type, from, to; int audioTrack; uint32_t droidID; NETbeginDecode(queue, GAME_GIFT); NETuint8_t(&type); NETuint8_t(&from); NETuint8_t(&to); NETuint32_t(&droidID); NETend(); if (!canGiveOrdersFor(queue.index, from)) { debug(LOG_WARNING, "Gift (%d) from %d, to %d, queue.index %d", (int)type, (int)from, (int)to, (int)queue.index); syncDebug("Wrong player."); return false; } // Handle the gift depending on what it is switch (type) { case RADAR_GIFT: audioTrack = ID_SENSOR_DOWNLOAD; giftRadar(from, to, false); break; case DROID_GIFT: audioTrack = ID_UNITS_TRANSFER; recvGiftDroids(from, to, droidID); break; case STRUCTURE_GIFT: audioTrack = ID_GIFT; recvGiftStruct(from, to, droidID); break; case RESEARCH_GIFT: audioTrack = ID_TECHNOLOGY_TRANSFER; giftResearch(from, to, false); break; case POWER_GIFT: audioTrack = ID_POWER_TRANSMIT; giftPower(from, to, droidID, false); break; case AUTOGAME_GIFT: audioTrack = ID_SOUND_NEXUS_SYNAPTIC_LINK; giftAutoGame(from, to, false); break; default: debug(LOG_ERROR, "recvGift: Unknown Gift recvd"); return false; break; } // If we are on the receiving end play an audio alert. if (bMultiPlayer && to == selectedPlayer) { audio_QueueTrack(audioTrack); } return true; }
bool sendGift(uint8_t type, uint8_t to) { int audioTrack; switch (type) { case RADAR_GIFT: audioTrack = ID_SENSOR_DOWNLOAD; giftRadar(selectedPlayer, to, true); break; case DROID_GIFT: audioTrack = ID_UNITS_TRANSFER; sendGiftDroids(selectedPlayer, to); break; case RESEARCH_GIFT: audioTrack = ID_TECHNOLOGY_TRANSFER; giftResearch(selectedPlayer, to, true); break; case POWER_GIFT: audioTrack = ID_POWER_TRANSMIT; giftPower(selectedPlayer, to, 0, true); break; default: debug( LOG_ERROR, "Unknown Gift sent" ); return false; break; } // Play the appropriate audio track audio_QueueTrack(audioTrack); return true; }
bool recvGift(NETQUEUE queue) { uint8_t type, from, to; int audioTrack; uint32_t droidID; NETbeginDecode(queue, GAME_GIFT); NETuint8_t(&type); NETuint8_t(&from); NETuint8_t(&to); NETuint32_t(&droidID); NETend(); // Handle the gift depending on what it is switch (type) { case RADAR_GIFT: audioTrack = ID_SENSOR_DOWNLOAD; giftRadar(from, to, false); break; case DROID_GIFT: audioTrack = ID_UNITS_TRANSFER; recvGiftDroids(from, to, droidID); break; case RESEARCH_GIFT: audioTrack = ID_TECHNOLOGY_TRANSFER; giftResearch(from, to, false); break; case POWER_GIFT: audioTrack = ID_POWER_TRANSMIT; giftPower(from, to, droidID, false); break; default: debug(LOG_ERROR, "recvGift: Unknown Gift recvd"); return false; break; } // If we are on the recieving end play an audio alert if (to == selectedPlayer) { audio_QueueTrack(audioTrack); } return true; }
void formAlliance(uint8_t p1, uint8_t p2, BOOL prop, BOOL allowAudio, BOOL allowNotification) { DROID *psDroid; char tm1[128]; // Don't add message if already allied if (bMultiPlayer && alliances[p1][p2] != ALLIANCE_FORMED && allowNotification) { sstrcpy(tm1, getPlayerName(p1)); CONPRINTF(ConsoleString,(ConsoleString,_("%s Forms An Alliance With %s"),tm1,getPlayerName(p2))); } alliances[p1][p2] = ALLIANCE_FORMED; alliances[p2][p1] = ALLIANCE_FORMED; if (game.alliance == ALLIANCES_TEAMS) // this is for shared vision only { alliancebits[p1] |= 1 << p2; alliancebits[p2] |= 1 << p1; } if (allowAudio && (p1 == selectedPlayer || p2== selectedPlayer)) { audio_QueueTrack(ID_ALLIANCE_ACC); } if (bMultiMessages && prop) { sendAlliance(p1, p2, ALLIANCE_FORMED, false); } // Not campaign and alliances are transitive if (game.alliance == ALLIANCES_TEAMS) { giftRadar(p1, p2, false); giftRadar(p2, p1, false); } // Clear out any attacking orders turnOffMultiMsg(true); for (psDroid = apsDroidLists[p1]; psDroid; psDroid = psDroid->psNext) // from -> to { if (psDroid->order == DORDER_ATTACK && psDroid->psTarget && psDroid->psTarget->player == p2) { orderDroid(psDroid, DORDER_STOP); } } for (psDroid = apsDroidLists[p2]; psDroid; psDroid = psDroid->psNext) // to -> from { if (psDroid->order == DORDER_ATTACK && psDroid->psTarget && psDroid->psTarget->player == p1) { orderDroid(psDroid,DORDER_STOP); } } turnOffMultiMsg(false); }