bool getPushHeader(std::string &header) { bz_ApiString host = bz_getPublicAddr(); bz_ApiString desc = bz_getPublicDescription(); header += "&isgameserver=1"; header+= "&host="; if (host.size()) header += host.c_str(); else return false; header += format("&port=%s",port.c_str()); if (desc.size()) header += "&desc=" + std::string(desc.c_str()); if (mapFile.size()) header += "&map=" + mapFile; // game mode header += "&game="; switch(bz_getGameType()) { default: header +="TeamFFA"; break; case eCTFGame: header +="CTF"; break; case eRabbitGame: header +="Rabbit"; break; } // team scores header += format("&redteamscore=%d",bz_getTeamScore(eRedTeam)); header += format("&redteamwins=%d",bz_getTeamWins(eRedTeam)); header += format("&redteamlosses=%d",bz_getTeamLosses(eRedTeam)); header += format("&greenteamscore=%d",bz_getTeamScore(eGreenTeam)); header += format("&greenteamwins=%d",bz_getTeamWins(eGreenTeam)); header += format("&greenteamlosses=%d",bz_getTeamLosses(eGreenTeam)); header += format("&blueteamscore=%d",bz_getTeamScore(eBlueTeam)); header += format("&blueteamwins=%d",bz_getTeamWins(eBlueTeam)); header += format("&blueteamlosses=%d",bz_getTeamLosses(eBlueTeam)); header += format("&purpleteamscore=%d",bz_getTeamScore(ePurpleTeam)); header += format("&purpleteamwins=%d",bz_getTeamWins(ePurpleTeam)); header += format("&purpleteamlosses=%d",bz_getTeamLosses(ePurpleTeam)); return true; }
void ThiefControl::Event (bz_EventData * eventData) { bz_FlagTransferredEventData_V1 *data = (bz_FlagTransferredEventData_V1 *) eventData; const std::string noStealMsg = "Flag dropped. Don't steal from teammates!"; if (!data) return; if (data->eventType != bz_eFlagTransferredEvent) return; bz_BasePlayerRecord *playerFrom = bz_getPlayerByIndex(data->fromPlayerID); if (!playerFrom) return; bz_BasePlayerRecord *playerTo = bz_getPlayerByIndex(data->toPlayerID); if (!playerTo) { bz_freePlayerRecord(playerFrom); return; } switch (bz_getGameType()) { case eFFAGame: if (playerTo->team == playerFrom->team && playerTo->team != eRogueTeam) { data->action = data->DropThief; bz_sendTextMessage(BZ_SERVER, data->toPlayerID, noStealMsg.c_str()); } break; case eCTFGame: { // Allow teammates to steal team flags // This will allow someone to steal a team flag in order // to possibly capture it faster. bool allowTransfer = false; if (playerTo->team == playerFrom->team && playerTo->team != eRogueTeam) { bz_ApiString flagT = bz_ApiString(data->flagType); // Allow theft of team flags only allowTransfer = (flagT == "R*" || flagT == "G*" || flagT == "B*" || flagT == "P*"); if (!allowTransfer) { data->action = data->DropThief; bz_sendTextMessage(BZ_SERVER, data->toPlayerID, noStealMsg.c_str()); } } } break; case eRabbitGame: if (playerTo->team == playerFrom->team) { data->action = data->DropThief; bz_sendTextMessage(BZ_SERVER, data->toPlayerID, noStealMsg.c_str()); } break; default: break; } bz_freePlayerRecord(playerTo); bz_freePlayerRecord(playerFrom); }