Exemplo n.º 1
0
 public static function checkForCascadingLogs($pack)
 {
     $quests = dbconnection::queryArray("SELECT * FROM quests WHERE game_id = '{$pack->game_id}'");
     $completedRecords = dbconnection::queryArray("SELECT * FROM user_log WHERE game_id = '{$pack->game_id}' AND user_id = '{$pack->auth->user_id}' AND event_type = 'COMPLETE_QUEST' AND deleted = 0 GROUP BY content_id");
     $incompleteQuests = array();
     for ($i = 0; $i < count($quests); $i++) {
         $completed = false;
         for ($j = 0; $j < count($completedRecords); $j++) {
             if ($quests[$i]->quest_id == $completedRecords[$j]->content_id) {
                 $completed = true;
             }
         }
         if (!$completed) {
             $incompleteQuests[] = $quests[$i];
         }
     }
     $reqQueryPack = new stdClass();
     $reqQueryPack->game_id = $pack->game_id;
     $reqQueryPack->user_id = $pack->auth->user_id;
     $questQueryPack = new stdClass();
     $questQueryPack->game_id = $pack->game_id;
     $questQueryPack->auth = $pack->auth;
     $questQueryPack->silent = true;
     //logPlayerCompletedQuest would otherwise recursively call this function. Might as well save it for the end.
     $dirty = false;
     for ($i = 0; $i < count($incompleteQuests); $i++) {
         $reqQueryPack->requirement_root_package_id = $incompleteQuests[$i]->complete_requirement_root_package_id;
         $questQueryPack->quest_id = $incompleteQuests[$i]->quest_id;
         if (requirements::evaluateRequirementPackage($reqQueryPack)) {
             client::logPlayerCompletedQuest($questQueryPack);
             $dirty = true;
         }
     }
     if ($dirty) {
         client::checkForCascadingLogs($pack);
     }
     //log changed, potentially requiring more logs
 }