| 628 | } |
| 629 | |
| 630 | std::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 | |
| 683 | void initiatekeepaway(bz_eTeamType plyrteam, bz_ApiString plyrcallsign, int plyrID) { |
| 684 | keepaway.team = plyrteam; |
no test coverage detected