public function getGametypeAttribute($value) { return Gametype::getGametype($value); }
/** * @param $entry * @param $game * @param $pvp * @param $regular */ private function gamePlayerSetup($data, $entry, &$game, $pvp, $regular = true) { $player = new GamePlayer(); $player->game_id = $game->instanceId; $player->membershipId = $entry['player']['destinyUserInfo']['membershipId']; $player->account_id = Account::getAccountIdViaDestiny($player->membershipId); // check if we have player if ($this->checkCacheForGamertag($entry['player']['destinyUserInfo']['displayName']) == false && $regular) { Bus::dispatch(new UpdateGamertag($entry['player']['destinyUserInfo']['displayName'], $entry['player']['destinyUserInfo']['membershipType'])); if ($player->account_id == null) { // we are re-running this, because an Account doesnt exist yet so the previous check is NULL // this is technically a bug-fix for a RACE condition, where we cant create a Player // without an AccountId which doesn't exist till after the Event is dispatched. $player->account_id = Account::getAccountIdViaDestiny($player->membershipId); } } $player->characterId = $entry['characterId']; $player->level = $entry['player']['characterLevel']; $player->class = $entry['player']['characterClass']; $player->emblem = $entry['player']['destinyUserInfo']['iconPath']; $player->assists = $entry['values']['assists']['basic']['value']; $player->deaths = $entry['values']['deaths']['basic']['value']; $player->kills = $entry['values']['kills']['basic']['value']; $player->completed = boolval($entry['values']['completed']['basic']['value']); // PVP games don't seem to have secondsPlayed or averageLifespan if (isset($entry['values']['secondsPlayed']['basic']['value'])) { $player->secondsPlayed = $entry['values']['secondsPlayed']['basic']['value']; } if (isset($entry['extended']['values']['averageLifespan']['basic']['value'])) { $player->averageLifespan = $entry['extended']['values']['averageLifespan']['basic']['value']; } if (isset($entry['values']['score']['basic']['value'])) { $player->score = $entry['values']['score']['basic']['value']; } if (isset($entry['values']['standing']['basic']['values'])) { $player->standing = $entry['values']['standing']['basic']['value']; } // Check for team or rumble if (isset($entry['values']['team']['basic']['value'])) { $player->team = $entry['values']['team']['basic']['value']; } // Check for revives given/received if (isset($entry['extended']['values']['resurrectionsPerformed']['basic']['value'])) { $player->revives_given = $entry['extended']['values']['resurrectionsPerformed']['basic']['value']; } if (isset($entry['extended']['values']['resurrectionsReceived']['basic']['value'])) { $player->revives_taken = $entry['extended']['values']['resurrectionsReceived']['basic']['value']; } if (isset($entry['extended']['values']['medalsActivityCompleteVictoryMercy']['basic']['value'])) { $game->mercy = true; $game->save(); } // Don't save if 0/0 if ($player->score == 0 && $player->deaths == 0 && $player->kills == 0) { return; } else { $player->save(); $duration = $entry['values']['activityDurationSeconds']['basic']['value']; if (isset($data['Response']['data']['activityDetails']['mode']) && Gametype::isPVP($data['Response']['data']['activityDetails']['mode'])) { // We need to figure out which "team" is PandaLove via checking the players if ($player->account->isPandaLove()) { if ($entry['standing'] == 0) { $pvp->pandaId = $pvp->winnerId; } else { $pvp->pandaId = $pvp->loserId; } $pvp->save(); } } } return isset($duration) ? $duration : null; }