void GameInfo::keyCallback (std::string &data, const std::string &key) { double now = bz_getCurrentTime(); if (key == "mapfile") data += mapFile; else if ( key == "redteamscore") data += format("%d",bz_getTeamScore(eRedTeam)); else if ( key == "redteamwins") data += format("%d",bz_getTeamWins(eRedTeam)); else if ( key == "redteamlosses") data += format("%d",bz_getTeamLosses(eRedTeam)); else if ( key == "greenteamscore") data += format("%d",bz_getTeamScore(eGreenTeam)); else if ( key == "greenteamwins") data += format("%d",bz_getTeamWins(eGreenTeam)); else if ( key == "greenteamlosses") data += format("%d",bz_getTeamLosses(eGreenTeam)); else if ( key == "blueteamscore") data += format("%d",bz_getTeamScore(eBlueTeam)); else if ( key == "blueteamwins") data += format("%d",bz_getTeamWins(eBlueTeam)); else if ( key == "blueteamlosses") data += format("%d",bz_getTeamLosses(eBlueTeam)); else if ( key == "purpleteamscore") data += format("%d",bz_getTeamScore(ePurpleTeam)); else if ( key == "purpleteamwins") data += format("%d",bz_getTeamWins(ePurpleTeam)); else if ( key == "purpleteamlosses") data += format("%d",bz_getTeamLosses(ePurpleTeam)); else if ( key == "kbin") data += format("%f",(double)bytesIn/1024.0); else if ( key == "kbout") data += format("%f",(double)bytesOut/1024.0); }
void buildStateHash(std::string ¶ms) { int hash = sumString(mapFile); int i = 0; i += bz_getTeamScore(eRedTeam); i += bz_getTeamScore(eGreenTeam); i += bz_getTeamScore(eBlueTeam); i += bz_getTeamScore(ePurpleTeam); i += bz_getTeamWins(eRedTeam); i += bz_getTeamWins(eGreenTeam); i += bz_getTeamWins(eBlueTeam); i += bz_getTeamWins(ePurpleTeam); i += bz_getTeamLosses(eRedTeam); i += bz_getTeamLosses(eGreenTeam); i += bz_getTeamLosses(eBlueTeam); i += bz_getTeamLosses(ePurpleTeam); hash += (i * 1000); i = 0; bz_APIIntList *players = bz_newIntList(); bz_getPlayerIndexList(players);; if (players && players->size()) { for (unsigned int p = 0; p < players->size(); p++ ) { bz_BasePlayerRecord *player = bz_getPlayerByIndex(players->get(p)); //int playerID = players->get(p); if (player) { std::string BZID = player->bzID.c_str(); if (BZID.size()) i += sumString(BZID); else i += sumString(std::string(player->callsign.c_str())); i += sumString("NONE"); i += player->wins; i += player->losses; i += player->teamKills; bz_freePlayerRecord(player); } } } bz_deleteIntList(players); hash += (i * 100000); params += format("&hash=%d",hash); }
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 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 MapChangeEventHandler::process ( bz_EventData *eventData ) { if (!eventData) return; switch(eventData->eventType) { case bz_ePlayerJoinEvent: case bz_ePlayerPartEvent: { bz_PlayerJoinPartEventData_V1 *joinPart = (bz_PlayerJoinPartEventData_V1*)eventData; if ( joinPart->eventType == bz_ePlayerJoinEvent ) { if (startTime < 0) startTime = joinPart->eventTime; } else if (endCond == eNoPlayers) { if (!anyPlayers()) nextMap(); } } break; case bz_ePlayerDieEvent: { if (endCond != eMaxKillScore) break; bz_PlayerDieEventData_V1 *die = (bz_PlayerDieEventData_V1*)eventData; if ( bz_getPlayerWins(die->killerID) >= scoreCapLimit ) nextMap(); } break; case bz_eCaptureEvent: { if (endCond != eMaxCapScore) break; bz_CTFCaptureEventData_V1 *cap = (bz_CTFCaptureEventData_V1*)eventData; if ( bz_getTeamWins(cap->teamCapping) >= scoreCapLimit ) nextMap(); } break; case bz_eTickEvent: { if (endCond != eTimedGame && startTime >= 0) break; bz_TickEventData_V1 *tick = (bz_TickEventData_V1*)eventData; double timeDelta = tick->eventTime - startTime; if ( timeDelta >= timeLimit ) nextMap(); } break; case bz_eGetWorldEvent: { if (currentIndex < 0 ) break; bz_GetWorldEventData_V1 *world =(bz_GetWorldEventData_V1*)eventData; world->generated = false; world->worldFile = gameList[currentIndex].mapFile.c_str(); gameList[currentIndex].hasBeenPlayed = true; } break; case bz_eListServerUpdateEvent: { if (currentIndex < 0 ) break; bz_ListServerUpdateEvent_V1 *update =(bz_ListServerUpdateEvent_V1*)eventData; std::string desc = update->description.c_str(); desc = replace_all(desc,std::string("%M"),gameList[currentIndex].publicText); update->description = desc.c_str(); update->handled = true; } break; } }