foreach ($short_matches as $short_match) { echo "\n* Match {$short_match['match_id']} is less than 8 minutes, deducting points from players.\n"; $players = $short_match['stage_3']->players; /** * Perform the point deductions. */ foreach ($players as $player) { $payload_steamid = $player['steamID32']; $match_id = $short_match['match_id']; $player_profile = $app['mongo.db']->selectCollection('player_profiles')->findOne(['payload_steamid' => $payload_steamid]); if (empty($player_profile)) { continue; } /** * Match has already been deducted for user. */ if (in_array($match_id, @$player_profile['short_matches'] ?: [])) { "\n* Deductions for {$match_id} have already occurred, skipping.\n"; continue; } /** * Careful, as this actually modifies the player's points. Doing this wrong could make people upset. */ $deduct_result = PlayerProfile::deductShortGame($payload_steamid, $player['isWinner'], sizeof($players)); echo "\n* Deducting points from player payload_steamid = {$payload_steamid} for match_id = {$match_id}\n"; $app['mongo.db']->selectCollection('player_profiles')->update(['_id' => $player_profile['_id']], ['$push' => ['short_matches' => $match_id ?: 'empty']]); print_r($deduct_result); } } return 'ok'; });
* Remove match results with no winners, as results are provided for both stage 2 and stage 3. */ $match_results = array_filter($match_results, function ($match_result) { if (empty($match_result['winners']) && empty($match_result['losers'])) { return false; } else { return true; } }); print_r($match_results); /** * Winners and losers have been determined. Perform major procedures here. * There are lots of queries being performed here; the script execution time may be 30s+. */ foreach ($match_results as $match_result) { $player_profile = new \BarracksMaster\PlayerProfile(); $num_players_total = sizeof($match_result['winners']) + sizeof($match_result['losers']); foreach ($match_result['winners'] as $payload_steamid) { if (!$player_profile->getByPayloadSteamId($payload_steamid)) { echo "\nCreating new profile for player: {$payload_steamid}\n"; $player_profile->create(['payload_steamid' => $payload_steamid]); } $player_profile->addMatch($match_result['match_id'], 'win', $num_players_total); } foreach ($match_result['losers'] as $payload_steamid) { if (!$player_profile->getByPayloadSteamId($payload_steamid)) { echo "\nCreating new profile for player: {$payload_steamid}\n"; $player_profile->create(['payload_steamid' => $payload_steamid]); } $player_profile->addMatch($match_result['match_id'], 'loss', $num_players_total); }