Example #1
0
int MultiPlayer::Play(const string &url)
{
	vector<string> urls;
	StringUtil::Split(url, ' ', urls);

	for (auto iter = urls.begin(); iter != urls.end(); iter++) {
		shared_ptr<OnePlayer> onePlayer(new OnePlayer());
		
		shared_ptr<Player> player = shared_ptr<Player>(new Player());
		player->SetPlayerProcdule(this, onePlayer.get());
		player->Open(*iter, "");

		onePlayer->mplayer = player;
		onePlayer->mid = mopenCount++;
		onePlayer->mindex = onePlayer->mid;
		this->mplayerList.push_back(onePlayer);
	}

	return 0;
}
Example #2
0
inline void KOTHEventHandler::process(bz_EventData * eventData)
{
  if (!koth.enabled)		// King of the Hill disabled - we can leave
    return;

  if (onePlayer())		// Not enough players - we can leave
    return;

  float pos[3] = { 0 };

  int playerID = -1;

  switch (eventData->eventType) {
  case bz_ePlayerUpdateEvent:
    pos[0] = ((bz_PlayerUpdateEventData_V1 *) eventData)->state.pos[0];
    pos[1] = ((bz_PlayerUpdateEventData_V1 *) eventData)->state.pos[1];
    pos[2] = ((bz_PlayerUpdateEventData_V1 *) eventData)->state.pos[2];
    playerID = ((bz_PlayerUpdateEventData_V1 *) eventData)->playerID;
    break;

  case bz_eShotFiredEvent:
    pos[0] = ((bz_ShotFiredEventData_V1 *) eventData)->pos[0];
    pos[1] = ((bz_ShotFiredEventData_V1 *) eventData)->pos[1];
    pos[2] = ((bz_ShotFiredEventData_V1 *) eventData)->pos[2];
    playerID = ((bz_ShotFiredEventData_V1 *) eventData)->playerID;
    break;

  default:
    return;
  }

  if (!koth.toldHillOpen && koth.id == -1)	// Hill is open - inform players
  {
    bz_sendTextMessage(BZ_SERVER, BZ_ALLUSERS, "Hill is not controlled - take it!");
    koth.toldHillOpen = true;
  }

  if (kothzone.pointIn(pos))	// player is on Hill
  {
    bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerID);

    if (player) {
      if (player->playerID != koth.playerJustWon && player->spawned) {
	if ((koth.id == -1 && player->team != koth.team) || (koth.id == -1 && teamClear(koth.team)))
	  initiatekoth(player->team, player->callsign, player->playerID);

	double timeStanding = bz_getCurrentTime() - koth.startTime;

	if (timeStanding >= koth.adjustedTime && koth.id != -1)	// time's up - kill 'em
	{
	  if (koth.teamPlay && koth.team != eRogueTeam)
	    killTeams(koth.team, koth.callsign);
	  else
	    killPlayers(koth.id, koth.callsign);

	  if (!koth.teamPlay || koth.team == eRogueTeam)
	    bz_sendTextMessage(BZ_SERVER, koth.id, "You are King of the Hill!  You must leave hill to retake it.");
	  else
	    bz_sendTextMessage(BZ_SERVER, koth.team, "Your team is King of the Hill!  Entire team must leave hill to retake it.");

	  koth.playerJustWon = koth.id;

	  koth.id = -1;

	  return;
	}
	if (koth.id != -1)
	  sendWarnings(getTeamColor(koth.team), koth.callsign, koth.startTime);
      }
    }

    bz_freePlayerRecord(player);
  } else {			// player is off Hill
    if (playerID == koth.playerJustWon)
      koth.playerJustWon = -1;

    if (playerID == koth.id) {
      koth.id = -1;
      koth.team = eNoTeam;
    }
  }
}