MCPcopy Create free account
hub / github.com/BZFlag-Dev/bzflag / getFlag

Function getFlag

plugins/keepaway/keepaway.cpp:630–681  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

628}
629
630std::string getFlag() {
631 if (keepaway.flagToKeepIndex < -1) { // this should never happen, but save a crash if something goes nuts
632 return "";
633 }
634
635 // get next flag; if not free take it from player (if forced flags)
636
637 for (unsigned int h = 0; h < keepaway.flagsList.size(); h++) { // check all specified flags
638 keepaway.flagToKeepIndex++; // get next one in line
639
640 if (keepaway.flagToKeepIndex > ((int) keepaway.flagsList.size() - 1)) { // go back to start if at end
641 keepaway.flagToKeepIndex = 0;
642 }
643
644 std::string flagCandidate = keepaway.flagsList[keepaway.flagToKeepIndex];
645 bool flagNotHeld = true;
646
647 bz_APIIntList* playerList = bz_newIntList();
648 bz_getPlayerIndexList(playerList);
649
650 for (unsigned int i = 0; i < playerList->size(); i++) {
651 bz_BasePlayerRecord* player = bz_getPlayerByIndex(playerList->operator[](i));
652
653 if (player) {
654 const char* playerFlag = bz_getPlayerFlag(player->playerID);
655 if (playerFlag) {
656 if (playerFlag == flagCandidate && keepaway.forcedFlags) { // take it, if forced flags
657 bz_removePlayerFlag(player->playerID);
658 bz_sendTextMessage(BZ_SERVER, player->playerID, "Sorry, server needs your flag for Keep Away :/");
659 }
660 if (playerFlag == flagCandidate && !keepaway.forcedFlags) { // look for next free flag in list
661 flagNotHeld = false;
662 }
663 }
664 }
665 bz_freePlayerRecord(player);
666 }
667
668 bz_deleteIntList(playerList);
669
670 if (flagNotHeld) {
671 return flagCandidate;
672 }
673 }
674
675 if (keepaway.flagsList.size() > 0) { // we should never get here, but if we do keep going
676 return keepaway.flagsList[0];
677 }
678 else {
679 return "";
680 }
681}
682
683void initiatekeepaway(bz_eTeamType plyrteam, bz_ApiString plyrcallsign, int plyrID) {
684 keepaway.team = plyrteam;

Callers 2

processMethod · 0.85
handleMethod · 0.85

Calls 8

bz_getPlayerIndexListFunction · 0.85
bz_getPlayerFlagFunction · 0.85
bz_removePlayerFlagFunction · 0.85
bz_sendTextMessageFunction · 0.85
bz_freePlayerRecordFunction · 0.85
bz_deleteIntListFunction · 0.85
sizeMethod · 0.45
operator[]Method · 0.45

Tested by

no test coverage detected