void resetTeamFlag (bz_ApiString flagSent) { for ( unsigned int i = 0; i < bz_getNumFlags(); i++ ) { if (flagSent == bz_getFlagName(i)) bz_resetFlag (i); } }
void fairCTF::Event(bz_EventData *eventData) { if (eventData->eventType == bz_eAllowFlagGrab) { bz_AllowFlagGrabData_V1* grabData = (bz_AllowFlagGrabData_V1*)eventData; if (!allowCTF) { // Don't allow a team flag grab std::string flagtype = bz_getFlagName(grabData->flagID).c_str(); if (flagtype == "R*" || flagtype == "G*" || flagtype == "B*" || flagtype == "P*") { grabData->allow = false; bz_sendTextMessage (BZ_SERVER, grabData->playerID, "CTF play is currently disabled."); } } } else if (eventData->eventType == bz_ePlayerJoinEvent) { UpdateState(eNoTeam); } else if (eventData->eventType == bz_ePlayerPartEvent) { bz_PlayerJoinPartEventData_V1* partData = (bz_PlayerJoinPartEventData_V1*)eventData; // Need to compensate for that leaving player. UpdateState(partData->record->team); } else if (eventData->eventType == bz_eTickEvent) { if (droptime != 0.0 && bz_getCurrentTime() >= droptime) { // Time to drop any team flags. bz_APIIntList* pl = bz_getPlayerIndexList(); for (unsigned int x = 0; x < pl->size(); x++) { DropTeamFlag(pl->get(x)); } droptime = 0.0; } } else { // Huh? return; } }
void NoRogueGenocide::Event ( bz_EventData * eventData ) { std::string geno = "G"; switch (eventData->eventType) { case bz_eFlagGrabbedEvent: { bz_FlagGrabbedEventData_V1 *grabData = (bz_FlagGrabbedEventData_V1*)eventData; std::string flagType = bz_getFlagName(grabData->flagID).c_str(); // Do nothing if we are on seamless mode if (seamlessMode) return; // Do nothing if the flag isn't Genocide if (flagType != geno) return; // Do nothing if the player is not a rogue if (bz_getPlayerTeam(grabData->playerID) != eRogueTeam) return; if (!silentMode) bz_sendTextMessage(BZ_SERVER, grabData->playerID, "You can't pick up Genocide if you are a rogue!"); bz_removePlayerFlag(grabData->playerID); } break; case bz_eShotFiredEvent: { bz_ShotFiredEventData_V1 *shotData = (bz_ShotFiredEventData_V1*)eventData; std::string shotType = shotData->type.c_str(); // Do nothing if the shot doesn't originate from a geno flag if (shotType != geno) return; // Do nothing if the player is not a rogue if (bz_getPlayerTeam(shotData->playerID) != eRogueTeam) return; // Convert the shot to a regular one shotData->type = ""; shotData->changed = true; } break; default: return; } }
bool autoFlagReset::ResetUnusedSuperflag(unsigned int flagID) { // Sanity check. if (flagID >= bz_getNumFlags()) return false; // Make sure the flag isn't held. if (bz_flagPlayer(flagID) != -1) return false; // Make sure it's not a teamflag. bz_ApiString flagType = bz_getFlagName(flagID); if (flagType == "R*" || flagType == "G*" || flagType == "B*" || flagType == "P*" || flagType == "") return false; // Looks ok, reset it. return bz_resetFlag(flagID); }