Esempio n. 1
0
void resetTeamFlag (bz_ApiString flagSent)
{
	for ( unsigned int i = 0; i < bz_getNumFlags(); i++ )
	{
		if (flagSent == bz_getFlagName(i))
			bz_resetFlag (i);
	}
}
Esempio n. 2
0
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;
  }
}
Esempio n. 4
0
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);
}