void InGameTopMenuLayer::shutdownFunction() { CCLOG("QUIT!================================================================================================="); std::string quitInfo = "QUITTING"; if (Model::getInstance()->getGameMode() == NETWORK) { ServerCommunication().sendGameInfo(quitInfo); } else if (Model::getInstance()->getStartedAs() == PVP || Model::getInstance()->getStartedAs() == PVA) { OfflineLogger::getInstance()->logInformationForCurrentGame(quitInfo); } GameStatistics().increaseSecondsPlayedBy(BW_Time::getMilliSecondsOverCached() / 1000 + 1); SceneControl::replaceScene(SceneControl::startMenuScene(), false); }
void Model::initializePlayer() { _startedAs = _gameMode; GameStatistics gs = GameStatistics(); if (_gameMode == PVP) { _leftArmy->addPlayer(new Player("Left Player", Race::createRaceWithId(_player1race), false, false)); _rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), false, false)); gs.increaseLocalMultiplayerGamesStarted(); } else if (_gameMode == PVA) { _thisPlayer = new Player("Left Player", Race::createRaceWithId(_player1race), false, false); _leftArmy->addPlayer(_thisPlayer); _rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), true, false)); gs.increaseLocalGamesStarted(); } else if (_gameMode == BALANCE_TEST) { _thisPlayer = new Player("Left Player", Race::createRaceWithId(_player1race), true, false); _leftArmy->addPlayer(_thisPlayer); _rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), true, false)); } else if (_gameMode == TUTORIAL) { _thisPlayer = new Player("Left Player", Race::createRaceWithId(_player1race), false, false); _leftArmy->addPlayer(_thisPlayer); _rightArmy->addPlayer(new Player("Right Player", Race::createRaceWithId(_player2race), false, false)); gs.increaseLocalGamesStarted(); } else if (_gameMode == NETWORK) { CCLOG("init player"); std::vector<GameStat> gameStats = NetworkSingleton::getInstance()->_gameStats; GameStat myGameStat = NetworkSingleton::getInstance()->_myGameStat; std::vector < std::string > names = NetworkSingleton::getInstance()->_names; int myId = myGameStat.getPlayerId(); std::string myName = NetworkSingleton::getInstance()->_myName; int numberOfPlayers = names.size() + 1; //+1 because of me ArmyType firstPlayersArmy = myId < (numberOfPlayers / 2) ? LEFT : RIGHT; ArmyType secondPlayersArmy = myId < (numberOfPlayers / 2) ? RIGHT : LEFT; _thisPlayer = NULL; //create the players, we have ids 1-$numberOfPlayers for (int playerId = 0; playerId < numberOfPlayers; playerId++) { ArmyType armyType = (playerId < (numberOfPlayers / 2)) ? firstPlayersArmy : secondPlayersArmy; std::string armyString = armyType == LEFT ? "left" : "right"; //search gamestat with the corresponding id if (playerId == myId) { Race* r = 0; if (myGameStat.getRace() == 0) { r = Race::buildRaceFromRandomizedRaceString(myGameStat.getRandomRaceString()); } else { r = Race::createRaceWithId(myGameStat.getRace()); } Player* player = new Player(myName, r, false, false); player->_networkPlayerId = playerId; _thisPlayer = player; getMyArmy(armyType)->addPlayer(_thisPlayer); CCLOG("Added me with id: %i to %s", playerId, armyString.c_str()); } else { bool addedAPlayer = false; for (unsigned int gi = 0; gi < gameStats.size(); gi++) { if (gameStats[gi].getPlayerId() == playerId) { addedAPlayer = true; std::string name = names[gi]; int raceId = gameStats[gi].getRace(); Race* r = 0; if (raceId == 0) { r = Race::buildRaceFromRandomizedRaceString(gameStats[gi].getRandomRaceString()); } else { r = Race::createRaceWithId(raceId); } if (r == 0) //invalid network message r = Race::createRaceWithId(1); Player* player = new Player(name, r, false, true); player->_networkPlayerId = playerId; // adding some gold to avoid too much async behavior // but do not give too much to minimize cheating possibilities player->applyNetworkPlayerGoldBuffers(); getMyArmy(armyType)->addPlayer(player); CCLOG("Added player with id: %i to %s", playerId, armyString.c_str()); } } if (!addedAPlayer) CCLOG("If you see this, there is a bug in Model.cpp. A player is missing..."); } if (_thisPlayer == NULL || getMyArmy(LEFT)->getPlayers().size() == 0 || getMyArmy(RIGHT)->getPlayers().size() == 0) { //this kills the game! CCLOG("KNOWN BUG! KILLED THE GAME. left: %i, right: %i, _thisPlayer: %s", (int) getMyArmy(LEFT)->getPlayers().size(), (int) getMyArmy(RIGHT)->getPlayers().size(), (_thisPlayer == NULL ? "NULL" : "NOT NULL")); SceneControl::replaceScene(SceneControl::queueScene(myGameStat.getRace(), myName), true); } } gs.increaseNetworkGamesStarted(); } }
bool AchievementPlayedHours::isAchievedInternCalculation() { return ((int) (GameStatistics().getSecondsPlayed() / 3600)) >= _hours; }