/** user wants to initiate artefact. thus he has first to pay the fee successfully * then the status of the artefact can be set to ARTEFACT_INITIATING. */ function artefact_beginInitiation($artefact) { global $db, $resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList; // Artefakt muss einweihbar sein if ($artefact['initiated'] != ARTEFACT_UNINITIATED) { return _('Dieses Artefakt kann nicht noch einmal eingeweiht werden.'); } // Hol das Einweihungsritual $ritual = artefact_getRitualByID($artefact['initiationID']); if ($ritual === FALSE) { return _('Fehler: Ritual nicht gefunden.'); } // get initiation costs $costs = array(); $temp = array_merge($resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList); foreach ($temp as $val) { if ($ritual[$val->dbFieldName]) { $costs[$val->dbFieldName] = $ritual[$val->dbFieldName]; } } $set = array(); $setBack = array(); $where = array("WHERE caveID = '{$artefact['caveID']}'"); // get all the costs foreach ($costs as $key => $value) { array_push($set, "{$key} = {$key} - ({$value})"); array_push($setBack, "{$key} = {$key} + ({$value})"); array_push($where, "{$key} >= ({$value})"); } // generate SQL if (sizeof($set)) { $set = implode(", ", $set); $set = "UPDATE Cave SET {$set} "; $setBack = implode(", ", $setBack); $setBack = "UPDATE Cave SET {$setBack} WHERE caveID = '{$artefact['caveID']}'"; } $where = implode(" AND ", $where); // substract costs //echo "try to substract costs:<br>" . $set.$where . "<br><br>"; if (!$db->query($set . $where) || !$db->affected_rows() == 1) { return _('Es fehlen die notwendigen Voraussetzungen.'); } // register event $now = time(); $sql = sprintf("INSERT INTO Event_artefact " . "(caveID, artefactID, event_typeID, `start`, `end`) " . "VALUES (%d, %d, 1, '%s', '%s')", $artefact['caveID'], $artefact['artefactID'], time_toDatetime($now), time_toDatetime($now + $ritual['duration'])); if (!$db->query($sql)) { $db->query($setBack); return _('Sie weihen bereits ein anderes Artefakt ein.'); } // finally set status to initiating $sql = "UPDATE Artefact SET initiated = " . ARTEFACT_INITIATING . " WHERE artefactID = {$artefact['artefactID']}"; $dbresult = $db->query($sql); if (!$dbresult) { return _('Fehler: Artefakt konnte nicht auf ARTEFACT_INITIATING gestellt werden.'); } return _('erfolgreich eingeweiht'); }
function artefact_getDetail($caveID, &$myCaves) { global $template; $messageText = array(-5 => array('type' => 'error', 'message' => _('Dieses Artefakt kann nicht noch einmal eingeweiht werden.')), -4 => array('type' => 'error', 'message' => _('Fehler: Artefakt konnte nicht auf ARTEFACT_INITIATING gestellt werden.')), -3 => array('type' => 'error', 'message' => _('Sie weihen bereits ein anderes Artefakt ein.')), -2 => array('type' => 'error', 'message' => _('Es fehlen die notwendigen Voraussetzungen.')), -1 => array('type' => 'error', 'message' => _('Fehler: Ritual nicht gefunden.')), 0 => array('type' => 'notice', 'message' => _('Über dieses Artefakt weiß man nichts!')), 1 => array('type' => 'success', 'message' => _('Die Einweihung des Artefakts wurde gestartet!'))); // open template $template->setFile('artefactDetail.tmpl'); $show_artefact = TRUE; $artefactID = Request::getVar('artefactID', 0); $artefact = artefact_getArtefactByID($artefactID); if (empty($artefact)) { $messageID = 0; } else { $description_initiated = $artefact['description_initiated']; unset($artefact['description_initiated']); // Gott oder nicht? if ($_SESSION['player']->tribe != GOD_ALLY) { // gibts nicht oder nicht in einer Höhle if (!$artefact['caveID']) { $show_artefact = FALSE; } else { $cave = getCaveByID($artefact['caveID']); // leere Höhle if (!$cave['playerID']) { $show_artefact = FALSE; } else { $owner = getPlayerByID($cave['playerID']); // Besitzer ist ein Gott if ($owner['tribe'] == GOD_ALLY) { $show_artefact = FALSE; } } } } $showRitual = 0; $showStatus = 0; $template->addVars(array('show_artefact' => $show_artefact)); if ($show_artefact) { $artefact['img'] = $artefact['uninitiationImg']; // Bild vom uninitalisierten Artefakt per default anzeigen! // eigene Höhle ... if (isset($myCaves[$artefact['caveID']])) { $showStatus = 1; // Ritual ausführen? if (Request::isPost('initiate')) { $messageID = artefact_beginInitiation($artefact); // reload $myCaves = getCaves($_SESSION['player']->playerID); // wenn noch uneingeweiht und in der "richtigen" Höhle, ritual zeigen } else { if ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_UNINITIATED) { // Check, ob bereits eingeweiht wird. if (sizeof(artefact_getArtefactInitiationsForCave($caveID)) == 0) { $showRitual = 1; // Hol das Einweihungsritual $ritual = artefact_getRitualByID($artefact['initiationID']); // Hol die Kosten und beurteile ob genug da ist $merged_game_rules = array_merge($GLOBALS['resourceTypeList'], $GLOBALS['buildingTypeList'], $GLOBALS['unitTypeList'], $GLOBALS['scienceTypeList'], $GLOBALS['defenseSystemTypeList']); $cost = array(); foreach ($merged_game_rules as $val) { if (isset($ritual[$val->dbFieldName])) { if ($ritual[$val->dbFieldName]) { $object_context = ceil($ritual[$val->dbFieldName]) > floor($myCaves[$artefact['caveID']][$val->dbFieldName]) ? 'less-' : 'enough '; array_push($cost, array('object' => $val->name, 'amount' => $ritual[$val->dbFieldName], 'class' => $object_context)); } } } $artefact['initiation'] = array('cost' => $cost, 'name' => $ritual['name'], 'description' => $ritual['description'], 'duration' => time_formatDuration($ritual['duration']), 'initiate' => 1); } else { $showRitual = -1; } } elseif ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_INITIATING) { // Arte wird gerade eingeweiht $showRitual = -1; } } // "geheime" Beschreibung nur zeigen, wenn eingeweiht if ($artefact['initiated'] == ARTEFACT_INITIATED) { $artefact['description_initiated'] = $description_initiated; // Besitzer des Artefaktes und initalisiert? Richtiges Artefakt Bild anzeigen if (isset($myCaves[$artefact['caveID']])) { $artefact['img'] = $artefact['initiationImg']; } } } $template->addVars(array('artefact' => $artefact)); $template->addVars(array('showRitual' => $showRitual)); $template->addVars(array('showStatus' => $showStatus)); } else { // über dieses Artefakt weiß man nichts! $messageID = 0; } } $template->addVar('status_msg', isset($messageID) ? $messageText[$messageID] : ''); }
/** user wants to initiate artefact. thus he has first to pay the fee successfully * then the status of the artefact can be set to ARTEFACT_INITIATING. */ function artefact_beginInitiation($artefact) { global $db; // Artefakt muss einweihbar sein if ($artefact['initiated'] != ARTEFACT_UNINITIATED) { return -5; } // Hol das Einweihungsritual $ritual = artefact_getRitualByID($artefact['initiationID']); if ($ritual === FALSE) { return -1; } // get initiation costs $costs = array(); $temp = array_merge($GLOBALS['resourceTypeList'], $GLOBALS['buildingTypeList'], $GLOBALS['unitTypeList'], $GLOBALS['scienceTypeList'], $GLOBALS['defenseSystemTypeList']); foreach ($temp as $val) { if (isset($ritual[$val->dbFieldName])) { if ($ritual[$val->dbFieldName]) { $costs[$val->dbFieldName] = $ritual[$val->dbFieldName]; } } } $set = array(); $setBack = array(); $where = array("WHERE caveID = '{$artefact['caveID']}'"); // get all the costs foreach ($costs as $key => $value) { array_push($set, "{$key} = {$key} - ({$value})"); array_push($setBack, "{$key} = {$key} + ({$value})"); array_push($where, "{$key} >= ({$value})"); } $where = implode(" AND ", $where); // generate SQL if (sizeof($set)) { $set = implode(", ", $set); if (!$db->exec("UPDATE " . CAVE_TABLE . " SET {$set} {$where}")) { return -2; } $setBack = implode(", ", $setBack); $setBack = "UPDATE " . CAVE_TABLE . " SET {$setBack} WHERE caveID = '{$artefact['caveID']}'"; } else { return -2; } // register event $now = time(); $sql = $db->prepare("INSERT INTO " . EVENT_ARTEFACT_TABLE . "\n (caveID, artefactID, event_typeID, start, end)\n VALUES\n (:caveID, :artefactID, 1, :start, :end)"); $sql->bindValue('caveID', $artefact['caveID'], PDO::PARAM_INT); $sql->bindValue('artefactID', $artefact['artefactID'], PDO::PARAM_INT); $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR); $sql->bindValue('end', time_toDatetime($now + $ritual['duration']), PDO::PARAM_STR); if (!$sql->execute()) { $db->query($setBack); return -3; } // finally set status to initiating $sql = $db->prepare("UPDATE " . ARTEFACT_TABLE . "\n SET initiated = " . ARTEFACT_INITIATING . " \n WHERE artefactID = :artefactID"); $sql->bindValue('artefactID', $artefact['artefactID'], PDO::PARAM_INT); if (!$sql->execute()) { $db->query($setBack); return -4; } return 1; }
function artefact_getDetail($caveID, &$myCaves, $artefactID) { global $params, $config, $resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList; $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'artefactdetail.ihtml'); $show_artefact = TRUE; $artefact = artefact_getArtefactByID($artefactID); $description_initiated = $artefact['description_initiated']; unset($artefact['description_initiated']); // Gott oder nicht? if ($params->SESSION->player->tribe != GOD_ALLY) { // gibts nicht oder nicht in einer Höhle if (!$artefact['caveID']) { $show_artefact = FALSE; } else { $cave = getCaveByID($artefact['caveID']); // leere Höhle if (!$cave['playerID']) { $show_artefact = FALSE; } else { $owner = getPlayerByID($cave['playerID']); // Besitzer ist ein Gott if ($owner['tribe'] == GOD_ALLY) { $show_artefact = FALSE; } } } } if ($show_artefact) { // eigene Höhle ... if (array_key_exists($artefact['caveID'], $myCaves)) { // Ritual ausführen? if (isset($params->POST->initiate)) { $message = artefact_beginInitiation($artefact); tmpl_set($template, 'message', $message); // reload $myCaves = getCaves($params->SESSION->player->playerID); } else { if ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_UNINITIATED) { // Check, ob bereits eingeweiht wird. if (sizeof(artefact_getArtefactInitiationsForCave($caveID)) == 0) { // Hol das Einweihungsritual $ritual = artefact_getRitualByID($artefact['initiationID']); // Hol die Kosten und beurteile ob genug da ist $merged_game_rules = array_merge($resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList); $cost = array(); foreach ($merged_game_rules as $val) { if ($ritual[$val->dbFieldName]) { $object_context = ceil($ritual[$val->dbFieldName]) > floor($myCaves[$artefact['caveID']][$val->dbFieldName]) ? 'LESS' : 'ENOUGH'; array_push($cost, array('object' => $val->name, $object_context . '/amount' => $ritual[$val->dbFieldName])); } } $artefact['INITIATION'] = array('COST' => $cost, 'name' => $ritual['name'], 'description' => $ritual['description'], 'duration' => time_formatDuration($ritual['duration']), 'HIDDEN' => array(array('name' => "artefactID", 'value' => $artefact['artefactID']), array('name' => "modus", 'value' => ARTEFACT_DETAIL), array('name' => "initiate", 'value' => 1))); } else { tmpl_iterate($template, 'ARTEFACT/NO_INITIATION'); } } } // "geheime" Beschreibung nur zeigen, wenn eingeweiht if ($artefact['initiated'] == ARTEFACT_INITIATED) { $artefact['description_initiated'] = $description_initiated; } } tmpl_set($template, 'ARTEFACT', $artefact); } else { tmpl_set($template, 'message', _('Über dieses Artefakt weiss man nichts.')); } return tmpl_parse($template); }