コード例 #1
0
ファイル: artefact.inc.php プロジェクト: agatho/uaenhanced
/** 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');
}
コード例 #2
0
ファイル: artefact.html.php プロジェクト: norter/Game
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] : '');
}
コード例 #3
0
ファイル: artefact.inc.php プロジェクト: norter/Game
/** 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;
}
コード例 #4
0
ファイル: artefact.html.php プロジェクト: agatho/uaenhanced
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);
}