function questionnaire_getPresent($caveID, &$meineHoehlen, $presentID) { global $config, $db, $params, $defenseSystemTypeList, $resourceTypeList, $unitTypeList; $query = "SELECT * FROM `Questionnaire_presents` WHERE presentID = " . intval($presentID); if (!($result = $db->query($query))) { return "Datenbankfehler: " . mysql_error(); } $row = $result->nextRow(MYSQL_ASSOC); if (!questionnaire_timeIsRight($row)) { return ""Dieses Geschenk kann ich euch nicht anbieten, Häuptling!""; } // genügend Schnecken? $myaccount = questionnaire_getCredits($params->SESSION->user['questionCredits']); $price = questionnaire_getCredits($row['credits']); /* if ($myaccount['credits'] < $price['credits'] || $myaccount['COPPER']['copper'] < $price['COPPER']['copper'] || $myaccount['SILVER']['silver'] < $price['SILVER']['silver'] || $myaccount['GOLD']['gold'] < $price['GOLD']['gold']) return ""Ihr habt nicht die passenden Schnecken, Häuptling!""; */ if ($myaccount['credits'] < $price['credits']) { return ""Ihr habt nicht die passenden Schnecken, Häuptling!""; } // Preis abziehen if (!questionnaire_addCredits(-$row['credits'])) { return ""Ich bin mit dem Schnecken abzählen durcheinander " . "gekommen, Häuptling! Versucht es noch einmal!""; } // Geschenk überreichen $presents = array(); $caveData = $meineHoehlen[$caveID]; foreach ($defenseSystemTypeList as $external) { if ($row[$external->dbFieldName] > 0) { $dbField = $external->dbFieldName; $maxLevel = round(eval('return ' . formula_parseToPHP("{$external->maxLevel};", '$caveData'))); $presents[] = "{$dbField} = LEAST(GREATEST({$maxLevel}, {$dbField}), {$dbField} + " . $row[$external->dbFieldName] . ")"; } } foreach ($resourceTypeList as $resource) { if ($row[$resource->dbFieldName] > 0) { $dbField = $resource->dbFieldName; $maxLevel = round(eval('return ' . formula_parseToPHP("{$resource->maxLevel};", '$caveData'))); $presents[] = "{$dbField} = LEAST({$maxLevel}, {$dbField} + " . $row[$resource->dbFieldName] . ")"; } } foreach ($unitTypeList as $unit) { if ($row[$unit->dbFieldName] > 0) { $dbField = $unit->dbFieldName; $presents[] = "{$dbField} = {$dbField} + " . $row[$unit->dbFieldName]; } } if (sizeof($presents)) { // UPDATE Cave $query = "UPDATE Cave SET " . implode(", ", $presents) . " WHERE caveID = {$caveID} AND playerID = " . $params->SESSION->user['playerID']; $update_result = $db->query($query); if (!$update_result) { return "Datenbankfehler: " . mysql_error(); } // UPDATE Questionnaire_presents $query = "UPDATE Questionnaire_presents SET use_count = use_count + 1 " . "WHERE presentID = " . $presentID; $update_result = $db->query($query); if (!$update_result) { return "Datenbankfehler: " . mysql_error(); } if ($db->affected_rows() != 1) { return "Probleme beim UPDATE des Geschenks"; } // Höhle auffrischen $r = getCaveSecure($caveID, $params->SESSION->user['playerID']); if ($r->isEmpty()) { page_dberror(); } $meineHoehlen[$caveID] = $r->nextRow(); return "Eure Geschenke sind nun in eurer Siedlung!"; } return "Danke für die Schnecken!"; }
function questionnaire_giveAnswers($answers) { global $db; // filter given answers foreach ($answers as $questionID => $choiceID) { if ($choiceID < 0) { unset($answers[$questionID]); } } // get valid answers $sql = $db->prepare("SELECT * \n FROM " . QUESTIONNAIRE_CHOISES_TABLE . "\n WHERE questionID IN (" . implode(", ", array_map(array($db, 'quote'), array_keys($answers))) . ")"); if ($sql->rowCountSelect() == 0) { return -2; } if (!$sql->execute()) { return -3; } $choises = array(); while ($row = $sql->fetch(PDO::FETCH_ASSOC)) { if (!isset($choises[$row['questionID']])) { $choises[$row['questionID']] = array(); } $choises[$row['questionID']][$row['choiceID']] = $row; } $sql->closeCursor(); // validate given answers foreach ($answers as $questionID => $choiceID) { if (!isset($choises[$questionID][$choiceID])) { unset($answers[$questionID]); } } // answers now contains valid answers // get questions $questions = array(); $sql = $db->prepare("SELECT * \n FROM " . QUESTIONNAIRE_QUESTIONS_TABLE . "\n WHERE questionID IN (" . implode(",", array_keys($answers)) . ")"); if ($sql->rowCountSelect() == 0) { return -2; } if (!$sql->execute()) { return -3; } while ($row = $sql->fetch(PDO::FETCH_ASSOC)) { $questions[$row['questionID']] = $row; } $sql->closeCursor(); // insert into db and reward afterwards $rewards = 0; foreach ($answers as $questionID => $choiceID) { $sql = $db->prepare("INSERT INTO " . QUESTIONNAIRE_ANSWERS_TABLE . "\n (playerID, questionID, choiceID)\n VALUES\n (:playerID, :questionID, :choiceID)"); $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT); $sql->bindValue('questionID', $questionID, PDO::PARAM_INT); $sql->bindValue('choiceID', $choiceID, PDO::PARAM_INT); if (!$sql->execute()) { return -4; } if ($sql->rowCount() != 1) { continue; } $sql->closeCursor(); //$rewards += $questions[$questionID]['credits']; $rewards += $choises[$questionID][$choiceID]['credits']; } // now update playerstats if (!questionnaire_addCredits($rewards)) { return -5; } return 1; }