static void genoOtherTeam(bz_eTeamType team = eNoTeam, bool spawnOnBase = false, int killerID = -1, int bait = -1, const char* flagAbbr = NULL) { // Create a list of players std::shared_ptr<bz_APIIntList> playerList(bz_getPlayerIndexList()); // If the playerlist is valid if (playerList) { //if no team, kill everyone if (team == eNoTeam && bait != -1 && bait == killerID) { for (unsigned int i = 0; i < playerList->size(); i++) { int playerID = playerList->get(i); bz_killPlayer(playerID, spawnOnBase, killerID, flagAbbr); } } else if (bait != -1 && bait == killerID) { for (unsigned int i = 0; i < playerList->size(); i++) { int playerID = playerList->get(i); if (bz_getPlayerTeam(playerID) == team) bz_killPlayer(playerID, spawnOnBase, killerID, flagAbbr); } } } }
void KillTeam(bz_eTeamType TeamToKill) { bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList(playerList); for (unsigned int i = 0; i < playerList->size(); i++) { bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerList->operator[](i)); if (player) { if (player->team == TeamToKill) { bz_killPlayer(player->playerID, true, BZ_SERVER); if (tctf.soundEnabled) bz_sendPlayCustomLocalSound(player->playerID, "flag_lost"); } else if (tctf.soundEnabled) { bz_sendPlayCustomLocalSound(player->playerID, "flag_won"); } bz_freePlayerRecord(player); } } bz_deleteIntList(playerList); return; }
void killPlayers(int safeid, std::string kothcallsign) { bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList(playerList); for (unsigned int i = 0; i < playerList->size(); i++) { bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerList->operator[](i)); if (player) { if (player->playerID != safeid) { bz_killPlayer(player->playerID, true, koth.id); if (koth.soundEnabled) bz_sendPlayCustomLocalSound(player->playerID, "flag_lost"); } else if (koth.soundEnabled) { bz_sendPlayCustomLocalSound(player->playerID, "flag_won"); } } bz_freePlayerRecord(player); } bz_deleteIntList(playerList); bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "%s IS KING OF THE HILL!", kothcallsign.c_str()); return; }
void killTeams(bz_eTeamType safeteam, std::string keepawaycallsign) { bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList ( playerList ); for ( unsigned int i = 0; i < playerList->size(); i++ ){ bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerList->operator[](i)); if (player){ if (player->team != safeteam) { bz_killPlayer(player->playerID, true, BZ_SERVER); if (keepaway.soundEnabled) bz_sendPlayCustomLocalSound(player->playerID,"flag_lost"); } else if (keepaway.soundEnabled) bz_sendPlayCustomLocalSound(player->playerID,"flag_won"); } bz_freePlayerRecord(player); } bz_deleteIntList(playerList); bz_sendTextMessagef (BZ_SERVER, BZ_ALLUSERS, "%s (%s) Kept the Flag Away!", getTeamColor(safeteam), keepawaycallsign.c_str()); if (keepaway.flagResetEnabled) bz_resetFlags(true); return; }
void killAllHunters(std::string messagepass) { bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList(playerList); for (unsigned int i = 0; i < playerList->size(); i++){ bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerList->operator[](i)); if (player) { if (player->team != eRabbitTeam) { bz_killPlayer(player->playerID, true, BZ_SERVER); bz_sendTextMessage(BZ_SERVER, player->playerID, messagepass.c_str()); if (rrzoneinfo.soundEnabled) bz_sendPlayCustomLocalSound(player->playerID,"flag_lost"); } if (player->team == eRabbitTeam && rrzoneinfo.soundEnabled && bz_getTeamCount(eHunterTeam) > 0) bz_sendPlayCustomLocalSound(player->playerID,"flag_won"); bz_freePlayerRecord(player); } } bz_deleteIntList(playerList); return; }
virtual bool SlashCommand ( int playerID, bz_ApiString /*command*/, bz_ApiString /*message*/, bz_APIStringList* /*params*/ ) { bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerID); if (!player) return true; if ( !player->admin ) { bz_sendTextMessage(BZ_SERVER,playerID,"You do not have permission to run /killall"); bz_freePlayerRecord(player); return true; } std::string msg = player->callsign.c_str(); msg += " has killed everyone"; bz_sendTextMessage(BZ_SERVER,BZ_ALLUSERS,msg.c_str()); bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList ( playerList ); for ( unsigned int i = 0; i < playerList->size(); i++ ) bz_killPlayer(playerList->get(i),false); bz_freePlayerRecord(player); bz_deleteIntList(playerList); return true; }
void RogueGenoHandler::Event (bz_EventData *eventData) { switch (eventData->eventType) { default: // no clue break; // wait for a tank death and start checking for genocide and rogues case bz_ePlayerDieEvent: { bz_PlayerDieEventData_V1 *dieData = (bz_PlayerDieEventData_V1*)eventData; //if its not a genocide kill, dont care if (dieData->flagKilledWith != "G") break; // if the tank killed was not a rogue, let the server/client do the normal killing if (dieData->team != eRogueTeam) break; // option to disallow rogues getting points for shooting themselves if (!allowSuicide && dieData->killerID == dieData->playerID) break; // if the tank killed was a rogue, kill all rogues. bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList(playerList); for (unsigned int i = 0; i < playerList->size(); i++) { int targetID = (*playerList)[i]; bz_BasePlayerRecord *playRec = bz_getPlayerByIndex (targetID); if (!playRec) continue; // the sucker is a spawned rogue, kill him. This generates another death event, // so if you kill another rogue with geno while you are a rogue you end up dead too. // and you get both messages (victim and be careful) if (playRec->spawned && playRec->team == eRogueTeam) { bz_killPlayer(targetID, false, dieData->killerID, "G"); bz_sendTextMessage(BZ_SERVER, targetID, "You were a victim of Rogue Genocide"); // oops, I ended up killing myself (directly or indirectly) with Genocide! if (targetID == dieData->killerID) bz_sendTextMessage(BZ_SERVER, targetID, "You should be more careful with Genocide!"); } bz_freePlayerRecord(playRec); } bz_deleteIntList(playerList); } break; } }
void KOTHPlayerPaused::process(bz_EventData * eventData) { if (eventData->eventType != bz_ePlayerPausedEvent || !koth.enabled) return; bz_PlayerPausedEventData_V1 *PauseData = (bz_PlayerPausedEventData_V1 *) eventData; bz_BasePlayerRecord *player = bz_getPlayerByIndex(PauseData->playerID); if (player) { if (kothzone.pointIn(player->currentState.pos)) { bz_killPlayer(PauseData->playerID, true, BZ_SERVER); bz_sendTextMessage(BZ_SERVER, PauseData->playerID, "Cannot pause while on the Hill."); } } bz_freePlayerRecord(player); return; }
void killAllTeam(int winner, bz_eTeamType teamToKill, bz_eTeamType teamToAward) { bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList(playerList); for ( unsigned int i = 0; i < playerList->size(); i++ ){ int player = (*playerList)[i]; bz_BasePlayerRecord *PlayerRecord = bz_getPlayerByIndex(player); if (PlayerRecord->team == teamToKill) bz_killPlayer(player,0,winner); else if(PlayerRecord->team == teamToAward) bz_setPlayerWins(player, (bz_getPlayerWins(player)+2)); bz_freePlayerRecord(PlayerRecord); } bz_setTeamWins (teamToAward, (bz_getTeamWins(teamToAward)+1)); bz_setTeamLosses (teamToKill, (bz_getTeamLosses (teamToKill)+1)); }
void rabbitTimer::Event(bz_EventData *eventData) { if (eventData->eventType == bz_eTickEvent) { bz_TickEventData_V1* tickdata = (bz_TickEventData_V1*)eventData; if (currentRabbit != -1 && tickdata->eventTime >= rabbitDeathTime) { //kill the wabbit! bz_killPlayer(currentRabbit, false, BZ_SERVER); //stopgap. the kill event should do this, really... currentRabbit = -1; rabbitDeathTime = (float)tickdata->eventTime + rabbitKillTimeLimit; bz_sendTextMessage (BZ_SERVER, BZ_ALLUSERS, "Time's up! Selecting new rabbit."); } else if (currentRabbit == -1 && bz_getTeamCount(eHunterTeam) >= 3) //make sure we've got enough people before reactivating the timer { //find the new rabbit bz_APIIntList pl; bz_getPlayerIndexList(&pl); for (unsigned int i = 0; i < pl.size() && currentRabbit == -1; i++) { bz_BasePlayerRecord* pr = bz_getPlayerByIndex(pl.get(i)); if (pr != NULL) { if (pr->team == eRabbitTeam) { currentRabbit = pr->playerID; int limit = (int)rabbitKillTimeLimit; bz_sendTextMessage(BZ_SERVER, currentRabbit, bz_format("You have %d seconds to make a kill!", limit)); } bz_freePlayerRecord(pr); } } } } else if (eventData->eventType == bz_ePlayerDieEvent) { bz_PlayerDieEventData_V1* killdata = (bz_PlayerDieEventData_V1*)eventData; if (killdata->team == eRabbitTeam) { currentRabbit = -1; //we will sort this out on the next tick rabbitDeathTime = (float)killdata->eventTime + rabbitKillTimeLimit; } else if (killdata->killerTeam == eRabbitTeam && currentRabbit != -1) { if (rollOver) { rabbitDeathTime += rabbitKillTimeLimit; int limit = (int)rabbitKillTimeLimit; int timeremaining = (int)(rabbitDeathTime - killdata->eventTime); bz_sendTextMessage(BZ_SERVER, currentRabbit, bz_format("+%d seconds: %d seconds remaining.", limit, timeremaining)); } else { rabbitDeathTime = (float)killdata->eventTime + rabbitKillTimeLimit; int limit = (int)rabbitKillTimeLimit; bz_sendTextMessage(BZ_SERVER, currentRabbit, bz_format("%d seconds remaining.", limit)); } } } else if (eventData->eventType == bz_ePlayerDieEvent) { bz_PlayerJoinPartEventData_V1* partdata = (bz_PlayerJoinPartEventData_V1*)eventData; if (partdata->record->team == eRabbitTeam) //we need to select a new rabbit if the rabbit leaves. { currentRabbit = -1; //we will sort this out on the next tick rabbitDeathTime = (float)partdata->eventTime + rabbitKillTimeLimit; } } }
void ReverseGeno::Event (bz_EventData *eventData) { switch (eventData->eventType) { case bz_eFlagGrabbedEvent: // This event is called each time a flag is grabbed by a player { bz_FlagGrabbedEventData_V1* flagGrabData = (bz_FlagGrabbedEventData_V1*)eventData; if (strcmp(flagGrabData->flagType, "RG") == 0) { bait = flagGrabData->playerID; grabTime = flagGrabData->eventTime; messageNumber = 5; bz_sendTextMessagef(BZ_SERVER, bait, "FIVE SECONDS TO DIE! Get killed before you DIE!"); } // Data // --- // (int) playerID - The player that grabbed the flag // (int) flagID - The flag ID that was grabbed // (bz_ApiString) flagType - The flag abbreviation of the flag that was grabbed // (float[3]) pos - The position at which the flag was grabbed // (double) eventTime - This value is the local server time of the event. } break; case bz_ePlayerDieEvent: // This event is called each time a tank is killed. { bz_PlayerDieEventData_V1* dieData = (bz_PlayerDieEventData_V1*)eventData; if (bait != -1 && bait != dieData->killerID && bait == dieData->playerID) { //bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "Bait: %s, Player: %s (%d,%d)", bz_getPlayerCallsign(bait), bz_getPlayerCallsign(dieData->playerID), bait, dieData->playerID); if (bz_getPlayerTeam(bait) == bz_getPlayerTeam(dieData->killerID)) { bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "Fail! %s just committed genocide on their own team!", bz_getPlayerCallsign(bait)); //bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "Bait: %s, other: %s ", bz_getPlayerTeam(bait), bz_getPlayerTeam(dieData->playerID)); } else { bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "Score! %s just baited %s into committing genocide on their own team!", bz_getPlayerCallsign(bait), bz_getPlayerCallsign(dieData->killerID)); } genoOtherTeam(dieData->killerTeam, false, dieData->playerID, bait, "RG"); grabTime = -1; bait = -1; //bz_sendTextMessagef(BZ_SERVER, BZ_ALLUSERS, "Bait: %0d, Player: %s (%d,%d)", bait, bz_getPlayerCallsign(dieData->playerID), bait, dieData->playerID); } else if (bait != -1 && bait == dieData->killerID && bait == dieData->playerID) { grabTime = -1; bait = -1; } // Data // --- // (int) playerID - ID of the player who was killed. // (bz_eTeamType) team - The team the killed player was on. // (int) killerID - The owner of the shot that killed the player, or BZ_SERVER for server side kills // (bz_eTeamType) killerTeam - The team the owner of the shot was on. // (bz_ApiString) flagKilledWith - The flag name the owner of the shot had when the shot was fired. // (int) shotID - The shot ID that killed the player, if the player was not killed by a shot, the id will be -1. // (bz_PlayerUpdateState) state - The state record for the killed player at the time of the event // (double) eventTime - Time of the event on the server. } break; case bz_eTickEvent: // This event is called once for each BZFS main loop { bz_TickEventData_V1* tickData = (bz_TickEventData_V1*)eventData; if (grabTime != -1) { double timeSinceGrab = tickData->eventTime - grabTime; if (timeSinceGrab >= 5) { int player = bait; bait = -1; grabTime = -1; messageNumber = 5; bz_sendTextMessagef(BZ_SERVER, player, "YOU FAILED TO GET KILLED, SO YOU DIE."); bz_killPlayer(player, 0, BZ_SERVER, "RG"); } else if (timeSinceGrab >= 4 && messageNumber > 1) { bz_sendTextMessagef(BZ_SERVER, bait, "ONE"); messageNumber = 1; } else if (timeSinceGrab >= 3 && messageNumber > 2) { bz_sendTextMessagef(BZ_SERVER, bait, "TWO"); messageNumber = 2; } else if (timeSinceGrab >= 2 && messageNumber > 3) { bz_sendTextMessagef(BZ_SERVER, bait, "THREE"); messageNumber = 3; } else if (timeSinceGrab >= 1 && messageNumber > 4) { bz_sendTextMessagef(BZ_SERVER, bait, "FOUR"); messageNumber = 4; } } // Data // --- // (double) eventTime - Local Server time of the event (in seconds) } break; default: break; } }
void RabidRabbitEventHandler::Event(bz_EventData *eventData) { if (eventData->eventType == bz_ePlayerDieEvent) { bz_PlayerDieEventData_V1 *DieData = (bz_PlayerDieEventData_V1*)eventData; if (rrzoneinfo.cycleOnDie && DieData->team == eRabbitTeam) { unsigned int i = rrzoneinfo.currentKillZone; if (i == (zoneList.size() - 1)) rrzoneinfo.currentKillZone = 0; else rrzoneinfo.currentKillZone++; } return; } if ((eventData->eventType != bz_eTickEvent) || (zoneList.size() < 2)) return; for (unsigned int i = 0; i < zoneList.size(); i++) { if (!zoneList[i].WWFired && rrzoneinfo.currentKillZone == i) { bz_fireWorldWep(zoneList[i].WW.c_str(), zoneList[i].WWLifetime, BZ_SERVER,zoneList[i].WWPosition, zoneList[i].WWTilt, zoneList[i].WWDirection, zoneList[i].WWShotID, zoneList[i].WWDT); zoneList[i].WWFired = true; zoneList[i].WWLastFired = bz_getCurrentTime(); } else { if ((bz_getCurrentTime() - zoneList[i].WWLastFired) > zoneList[i].WWRepeat) zoneList[i].WWFired = false; } } bz_APIIntList *playerList = bz_newIntList(); bz_getPlayerIndexList(playerList); for (unsigned int h = 0; h < playerList->size(); h++) { bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerList->operator[](h)); if (player) { for (unsigned int i = 0; i < zoneList.size(); i++) { if (zoneList[i].pointIn(player->lastKnownState.pos) && player->spawned && player->team == eRabbitTeam && rrzoneinfo.currentKillZone != i && !rrzoneinfo.rabbitNotifiedWrongZone) { bz_sendTextMessage(BZ_SERVER,player->playerID, "You are not in the current Rabid Rabbit zone - try another."); rrzoneinfo.rabbitNotifiedWrongZone = true; rrzoneinfo.rabbitNotifiedWrongZoneNum = i; } if (!zoneList[i].pointIn(player->lastKnownState.pos) && player->spawned && player->team == eRabbitTeam && rrzoneinfo.rabbitNotifiedWrongZone && rrzoneinfo.rabbitNotifiedWrongZoneNum == i) rrzoneinfo.rabbitNotifiedWrongZone = false; if (zoneList[i].pointIn(player->lastKnownState.pos) && player->spawned && player->team == eRabbitTeam && rrzoneinfo.currentKillZone == i && bz_getTeamCount(eHunterTeam) > 0) { killAllHunters(zoneList[i].servermessage); rrzoneinfo.rabbitNotifiedWrongZone = true; rrzoneinfo.rabbitNotifiedWrongZoneNum = i; if (i == (zoneList.size() - 1)) rrzoneinfo.currentKillZone = 0; else rrzoneinfo.currentKillZone++; rrzoneinfo.rabbitNotifiedWrongZone = true; rrzoneinfo.rabbitNotifiedWrongZoneNum = i; } if (zoneList[i].pointIn(player->lastKnownState.pos) && player->spawned && player->team != eRabbitTeam && zoneList[i].zonekillhunter) { bz_killPlayer(player->playerID, true, BZ_SERVER); bz_sendTextMessage (BZ_SERVER, player->playerID, zoneList[i].playermessage.c_str()); } } bz_freePlayerRecord(player); } } bz_deleteIntList(playerList); return; }