예제 #1
0
	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;
	}
예제 #2
0
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);
}