Beispiel #1
0
function improvement_getImprovementDetail($caveID, &$details)
{
    global $template;
    // open template
    $template->setFile('improvementBuilder.tmpl');
    // messages
    $messageText = array(0 => array('type' => 'success', 'message' => _('Der Arbeitsauftrag wurde erfolgreich gestoppt.')), 1 => array('type' => 'error', 'message' => _('Es konnte kein Arbeitsauftrag gestoppt werden.')), 2 => array('type' => 'error', 'message' => _('Der Auftrag konnte nicht erteilt werden. Es fehlen die notwendigen Voraussetzungen.')), 3 => array('type' => 'success', 'message' => _('Der Arbeitsauftrag wurde erfolgreich erteilt.')), 5 => array('type' => 'success', 'message' => _('Das Gebäude wurde erfolgreich abgerissen.')), 6 => array('type' => 'error', 'message' => _('Das Gebäude konnte nicht abgerissen werden.')), 7 => array('type' => 'error', 'message' => _('Sie haben von der Sorte gar keine Gebäude.')), 8 => array('type' => 'error', 'message' => sprintf(_('Sie können derzeit kein Gebäude oder Verteidigungen abreißen, weil erst vor Kurzem etwas in dieser Höhle abgerissen wurde. Generell muss zwischen zwei Abrissen eine Zeitspanne von %d Minuten liegen.'), TORE_DOWN_TIMEOUT)), 9 => array('type' => 'error', 'message' => _('Der Arbeitsauftrag konnte nicht erteilt werden. Ein Arbeitsauftrag ist schon im Gange.')));
    // get this cave's queue
    $queue = improvement_getQueue($_SESSION['player']->playerID, $caveID);
    $action = Request::getVar('action', '');
    switch ($action) {
        /****************************************************************************************************
        *
        * Erweiterung bauen
        *
        ****************************************************************************************************/
        case 'build':
            $buildingID = Request::getVar('buildingID', -1);
            if ($buildingID == -1) {
                $messageID = 2;
                break;
            }
            // check queue exist
            if (sizeof($queue)) {
                $messageID = 9;
                break;
            }
            $messageID = improvement_processOrder($buildingID, $caveID, $details);
            $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            $queue = improvement_getQueue($_SESSION['player']->playerID, $caveID);
            break;
            /****************************************************************************************************
            *
            * Ausbau der Erweiterung abbrechen
            *
            ****************************************************************************************************/
        /****************************************************************************************************
        *
        * Ausbau der Erweiterung abbrechen
        *
        ****************************************************************************************************/
        case 'cancelOrder':
            $eventID = Request::getVar('id', 0);
            if ($eventID == 0) {
                $messageID = 1;
                break;
            }
            // check queue exist
            if (!sizeof($queue) || $queue['event_expansionID'] != $eventID) {
                $messageID = 1;
                break;
            }
            if (Request::isPost('cancelOrderConfirm')) {
                $messageID = improvement_cancelOrder($eventID, $caveID);
                if ($messageID == 0) {
                    $queue = null;
                }
            } else {
                $template->addVars(array('cancelOrder_box' => true, 'confirm_action' => 'cancelOrder', 'confirm_id' => $eventID, 'confirm_mode' => IMPROVEMENT_BUILDER, 'confirm_msg' => sprintf(_('Möchtest du den Arbeitsauftrag von <span class="bold">%s</span> abbrechen?'), $GLOBALS['buildingTypeList'][$queue['expansionID']]->name)));
            }
            break;
            /****************************************************************************************************
            *
            * Erweiterung abreißen
            *
            ****************************************************************************************************/
        /****************************************************************************************************
        *
        * Erweiterung abreißen
        *
        ****************************************************************************************************/
        case 'demolishing':
            $improvementID = Request::getVar('id', -1);
            if ($improvementID == -1) {
                $messageID = 4;
                break;
            }
            if (!isset($GLOBALS['buildingTypeList'][$improvementID])) {
                $messageID = 4;
                break;
            }
            if (Request::isPost('cancelOrderConfirm')) {
                $messageID = improvement_Demolishing($improvementID, $caveID, $details);
                $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            } else {
                $template->addVars(array('cancelOrder_box' => true, 'confirm_action' => 'demolishing', 'confirm_id' => $improvementID, 'confirm_mode' => IMPROVEMENT_BUILDER, 'confirm_msg' => sprintf(_('Möchtest du <span class="bold">%s</span> einmal abreißen?'), $GLOBALS['buildingTypeList'][$improvementID]->name)));
            }
            break;
    }
    $improvement = $improvementRelict = $improvementUnqualified = array();
    foreach ($GLOBALS['buildingTypeList'] as $id => $building) {
        $maxLevel = round(eval('return ' . formula_parseToPHP("{$building->maxLevel};", '$details')));
        $notenough = FALSE;
        $result = rules_checkDependencies($building, $details);
        /****************************************************************************************************
        *
        * Erweiterungen die gebaut werden können.
        *
        ****************************************************************************************************/
        if ($result === TRUE) {
            $improvement[$building->buildingID] = array('name' => $building->name, 'dbFieldName' => $building->dbFieldName, 'building_id' => $building->buildingID, 'cave_id' => $caveID, 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($building->productionTimeFunction . ";", '$details')) * BUILDING_TIME_BASE_FACTOR), 'maxlevel' => $maxLevel, 'currentlevel' => "0" + $details[$building->dbFieldName], 'breakdown_link' => $details[$building->dbFieldName] > 0 ? true : false);
            $improvement[$building->buildingID] = array_merge($improvement[$building->buildingID], parseCost($building, $details));
            // show the building link ?!
            if (sizeof($queue)) {
                $improvement[$building->buildingID]['no_build_msg'] = _('Ausbau im Gange');
            } else {
                if ($improvement[$building->buildingID]['notenough'] && $maxLevel > $details[$building->dbFieldName]) {
                    $improvement[$building->buildingID]['no_build_msg'] = _('Zu wenig Rohstoffe');
                } else {
                    if ($maxLevel > $details[$building->dbFieldName]) {
                        $improvement[$building->buildingID]['build_link'] = true;
                    } else {
                        $improvement[$building->buildingID]['no_build_msg'] = _('Max. Stufe');
                    }
                }
            }
            /****************************************************************************************************
            *
            * Erweiterungen die zwar nicht gebaut werden können aber schon in der Höhle sind (Relikt)
            *
            ****************************************************************************************************/
        } else {
            if ($details[$building->dbFieldName]) {
                $improvementRelict[$building->buildingID] = array('name' => $building->name, 'dbFieldName' => $building->dbFieldName, 'building_id' => $building->buildingID, 'cave_id' => $caveID, 'currentlevel' => "0" + $details[$building->dbFieldName], 'dependencies' => $result !== FALSE ? $result : false);
                /****************************************************************************************************
                *
                * Erweiterungen die nicht gebaut werden können.
                *
                ****************************************************************************************************/
            } else {
                if ($result !== FALSE && !$building->nodocumentation) {
                    $improvementUnqualified[$building->buildingID] = array('name' => $building->name, 'dbFieldName' => $building->dbFieldName, 'building_id' => $building->buildingID, 'cave_id' => $caveID, 'dependencies' => $result);
                }
            }
        }
    }
    /****************************************************************************************************
    *
    * Irgendwas im Ausbau?
    *
    ****************************************************************************************************/
    if (sizeof($queue)) {
        $template->addVars(array('quene_show' => true, 'quene_name' => $GLOBALS['buildingTypeList'][$queue['expansionID']]->name, 'quene_nextlevel' => $details[$GLOBALS['buildingTypeList'][$queue['expansionID']]->dbFieldName] + 1, 'quene_finish' => time_formatDatetime($queue['end']), 'quene_modus' => IMPROVEMENT_BUILDER, 'quene_event_id' => $queue['event_expansionID']));
    }
    /****************************************************************************************************
    *
    * Übergeben ans Template
    *
    ****************************************************************************************************/
    $template->addVars(array('cave_id' => $caveID, 'status_msg' => isset($messageID) ? $messageText[$messageID] : '', 'improvement' => $improvement, 'improvement_unqualified' => $improvementUnqualified, 'improvement_relict' => $improvementRelict));
}
Beispiel #2
0
function unitAction($caveID, &$meineHoehlen)
{
    global $config, $db, $MAX_RESOURCE, $MOVEMENTCOSTCONSTANT, $MOVEMENTSPEEDCONSTANT, $params, $ua_movements, $resourceTypeList, $unitTypeList, $effectTypeList, $FUELRESOURCEID;
    $details = $meineHoehlen[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        // was an artefact chosen?
        if ((int) $params->POST->myartefacts > 0) {
            $tempID = (int) $params->POST->myartefacts;
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($tempID == $value['artefactID']) {
                    $moveArtefact = $tempID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP($MOVEMENTCOSTCONSTANT . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP($MOVEMENTSPEEDCONSTANT . ';', '$details'));
    if (isset($params->POST->moveit)) {
        $targetXCoord = $params->POST->targetXCoord;
        $targetYCoord = $params->POST->targetYCoord;
        $targetCaveName = $params->POST->targetCaveName;
        $movementID = $params->POST->movementID;
        // check for scripters
        check_timestamp($params->POST->tstamp);
        // HöhlenName >>> Koordinate
        $validCaveName = FALSE;
        if (empty($targetXCoord) || empty($targetYCoord) and !empty($targetCaveName)) {
            $result = getCaveByName($targetCaveName);
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = TRUE;
            }
        }
        // Array von Nullwerten befreien
        $unit = array_filter($params->POST->unit, "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", $params->POST->rohstoff);
        // Test, ob Einheitentragekapazität ausgelastet
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                $capacity += $aUnit * $unitTypeList[$unitKey]->encumbranceList[$resKey];
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        // ADDED by chris--- for farmschutz
        if (FARMSCHUTZ_ACTIVE == 1) {
            if ($params->POST->movementID == 3 || $params->POST->movementID == 6) {
                $farmschutz = farmschutz($targetXCoord, $targetYCoord, $params->SESSION->user['playerID'], $db);
            }
        }
        // ------------------------------------
        if ($params->POST->movementID == 0) {
            $msg = "*#\$@*#\$%: Bitte Bewegungsart ausw&auml;hlen!";
        } else {
            if (!sizeof($unit)) {
                $msg = "*#\$@*#\$%: Es sind keine Einheiten ausgew&auml;hlt!";
            } else {
                if (empty($targetXCoord) || empty($targetYCoord) and empty($targetCaveName)) {
                    $msg = "*#\$@*#\$%: Es fehlt eine Zielkoordinate oder ein Zielsiedlungsname!";
                } else {
                    if (empty($targetXCoord) || empty($targetYCoord) and !empty($targetCaveName) and $validCaveName === FALSE) {
                        $msg = "*#\$@*#\$%: Es gibt keine Siedlung mit dem Namen '" . $targetCaveName . "'!";
                    } else {
                        if ($overloaded) {
                            $msg = "*#\$@*#\$%: Deine Krieger k&ouml;nnen die Menge an Ressourcen nicht tragen!!";
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord, $db)) {
                                $msg = "*#\$@*#\$%: Die Zielsiedlung steht unter Anf&auml;ngerschutz. ";
                            } else {
                                if (beginner_isCaveProtectedByID($caveID, $db)) {
                                    $msg = "*#\$@*#\$%: Ihre Siedlung steht unter Anf&auml;ngerschutz. " . "Sie k&ouml;nnen den Schutz sofort unter dem Punkt Bericht: Alle " . "meine Siedlungen beenden";
                                } else {
                                    if ($params->POST->movementID == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord, $db)) {
                                        $msg = "*#\$@*#\$%: Sie k&ouml;nnen diese Siedlung nicht &uuml;bernehmen. " . "Sie ist gegen &Uuml;bernahmen gesch&uuml;tzt.";
                                    } else {
                                        if (FARMSCHUTZ_ACTIVE == 1 && ($params->POST->movementID == 3 || $params->POST->movementID == 6) && $farmschutz == 1) {
                                            $msg = "*#\$@*#\$%: Der Spieler steht unter Farmschutz. Sie k&ouml;nnen ihn nicht angreifen.";
                                        } else {
                                            if (FARMSCHUTZ_ACTIVE == 1 && ($params->POST->movementID == 3 || $params->POST->movementID == 6) && $farmschutz == 2) {
                                                $msg = "*#\$@*#\$%: Sie stehen unter Farmschutz. Dieser Spieler ist zu gro&szlig; zum angreifen.";
                                            } else {
                                                // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * (1 + $details[$effectTypeList[25]->dbFieldName]));
                                                // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                $reqFood = ceil($duration * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                if ($details[$resourceTypeList[$FUELRESOURCEID]->dbFieldName] < $reqFood) {
                                                    $msg = "*#\$@*#\$%: Nicht genug Nahrung zum Ern&auml;hren der Krieger auf ihrem langen Marsch vorhanden!!";
                                                } else {
                                                    $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                    switch ($msgID) {
                                                        case 0:
                                                            $msg = "Die Krieger wurden losgeschickt und haben {$reqFood} Nahrung mitgenommen!";
                                                            break;
                                                        case 1:
                                                            $msg = "*#\$@*#\$%: In diesen Koordinaten liegt keine Siedlung!";
                                                            break;
                                                        case 2:
                                                            $msg = "*#\$@*#\$%: F&uuml;r diese Bewegung sind nicht gen&uuml;gend Einheiten/Rohstoffe verf&uuml;gbar!";
                                                            break;
                                                        case 3:
                                                            $msg = "Schwerer *#\$@*#\$%: Bitte Admin kontaktieren!";
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (!empty($params->POST->eventID)) {
            $msgID = reverseMovementEvent($caveID, $params->POST->eventID);
            switch ($msgID) {
                case 0:
                    $msg = "Die Einheiten kehren zurück!";
                    break;
                case 1:
                    $msg = "*#\$@*#\$%: Fehler bei der Rückkehr!";
                    break;
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $params->SESSION->user['playerID']);
    $meineHoehlen[$caveID] = $details = $temp->nextRow(MYSQL_ASSOC);
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    $template = @tmpl_open("./templates/" . $config->template_paths[$params->SESSION->user['template']] . "/unitaction.ihtml");
    // messages
    if (isset($msg)) {
        tmpl_set($template, '/MESSAGE/msg', $msg);
    }
    // javascript support
    tmpl_set($template, 'currentX', $details['xCoord']);
    tmpl_set($template, 'currentY', $details['yCoord']);
    tmpl_set($template, 'dim_x', $dim_x);
    tmpl_set($template, 'dim_y', $dim_y);
    tmpl_set($template, 'speed', $minutesPerCave);
    tmpl_set($template, 'movementcostconstant', $foodPerCave);
    tmpl_set($template, "resourceTypes", $MAX_RESOURCE);
    tmpl_set($template, "movement_speed_factor", $details[$effectTypeList[25]->dbFieldName]);
    // ADDED by chris--- for movement_speed_factor
    // ADDED by chris--- for cavebook:
    tmpl_set($template, 'show_book_modus', CAVE_BOOK);
    // Getting entries
    $cavelist = cavebook_getEntries($params->SESSION->user['playerID']);
    // Show the cave table
    for ($i = 0; $i < sizeof($cavelist[id]); $i++) {
        $cavename = $cavelist[name][$i];
        // the current cavename
        $cavebookID = $cavelist[id][$i];
        $cave_x = $cavelist[x][$i];
        $cave_y = $cavelist[y][$i];
        tmpl_iterate($template, '/BOOKENTRY');
        tmpl_set($template, 'BOOKENTRY/book_entry', $cavename);
        tmpl_set($template, 'BOOKENTRY/book_id', $cavebookID);
        tmpl_set($template, 'BOOKENTRY/book_x', $cave_x);
        tmpl_set($template, 'BOOKENTRY/book_y', $cave_y);
        tmpl_iterate($template, '/BOOKENTRYJS');
        tmpl_set($template, 'BOOKENTRYJS/book_entry', unhtmlentities($cavename));
        tmpl_set($template, 'BOOKENTRYJS/book_id', $cavebookID);
        tmpl_set($template, 'BOOKENTRYJS/book_x', $cave_x);
        tmpl_set($template, 'BOOKENTRYJS/book_y', $cave_y);
    }
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    tmpl_set($template, 'SELECTACTION', $selectable_movements);
    // resources
    $resources = array();
    for ($res = 0; $res < sizeof($resourceTypeList); $res++) {
        $resources[] = array('resourceID' => $resourceTypeList[$res]->resourceID, 'name' => $resourceTypeList[$res]->name, 'currentAmount' => "0" + $details[$resourceTypeList[$res]->dbFieldName], 'dbFieldName' => $resourceTypeList[$res]->dbFieldName);
    }
    tmpl_set($template, 'RESOURCE', $resources);
    tmpl_set($template, 'TOTAL', $resources);
    tmpl_set($template, 'RESOURCE_LUGGAGE', $resources);
    // units table
    $unitprops = array();
    $units = array();
    $unitsAll = array();
    // ADDED by chris---
    for ($i = 0; $i < sizeof($unitTypeList); $i++) {
        // if no units of this type, next type
        if (!$details[$unitTypeList[$i]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        for ($j = 0; $j < count($resourceTypeList); $j++) {
            $encumbrance[$j] = array('resourceID' => $j, 'load' => "0" + $unitTypeList[$i]->encumbranceList[$j]);
            $temp[] = "0" + $unitTypeList[$i]->encumbranceList[$j];
        }
        $unitprops[] = array('unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'resourceLoad' => implode(",", $temp));
        $units[] = array('name' => $unitTypeList[$i]->name, 'modus' => UNIT_PROPERTIES, 'unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName], 'warriorID' => $i, 'ENCUMBRANCE' => $encumbrance);
        $unitAnzahl = sizeof($units);
    }
    tmpl_set($template, 'UNITPROPS', $unitprops);
    tmpl_set($template, 'SELECTWARRIOR', $units);
    tmpl_set($template, '/unitAnzahl', $unitAnzahl);
    // weitergereichte Koordinateny
    if (empty($params->POST->movementID)) {
        tmpl_set($template, 'targetXCoord', $params->POST->targetXCoord);
        tmpl_set($template, 'targetYCoord', $params->POST->targetYCoord);
        tmpl_set($template, 'targetCaveName', $params->POST->targetCaveName);
    }
    // weitere Paramter
    $hidden = array(array('name' => 'modus', 'value' => MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time()));
    tmpl_set($template, 'PARAMS', $hidden);
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    //$movements = digest_getMovements($meineHoehlen, array(), true);
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            if (isCaveInvisibleToPlayer($move['target_caveID'], $params->SESSION->user['playerID'], $db)) {
                $move['target_player_tribe'] = "";
                $move['target_player_name'] = "";
            }
            tmpl_iterate($template, 'MOVEMENT/MOVE');
            tmpl_set($template, 'MOVEMENT/MOVE', $move);
        } else {
            tmpl_iterate($template, 'OPPMOVEMENT/MOVE');
            tmpl_set($template, 'OPPMOVEMENT/MOVE', $move);
        }
    }
    // artefakte
    if (sizeof($myartefacts) != 0) {
        tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
    }
    return tmpl_parse($template);
}
Beispiel #3
0
function science_getScienceDetail($caveID, &$details)
{
    global $buildingTypeList, $defenseSystemTypeList, $resourceTypeList, $unitTypeList, $scienceTypeList, $config, $params, $db;
    // messages
    $messageText = array(0 => _('Der Forschungsauftrag wurde erfolgreich gestoppt.'), 1 => _('Es konnte kein Forschungsauftrag gestoppt werden.'), 2 => _('Der Auftrag konnte nicht erteilt werden. Es fehlen die notwendigen Voraussetzungen.'), 3 => _('Der Auftrag wurde erteilt'), 4 => _('Dieses Wissen wird schon in einer anderen Höhle erforscht.'), 5 => _('Es wird gerade in einer anderen Höhle Wissen erforscht, dass dieses Wissen ausschließt.'));
    // proccess a cancel-order request
    if (isset($params->POST->eventID)) {
        $messageID = science_processOrderCancel($params->POST->eventID, $caveID, $db);
    }
    if (isset($params->POST->scienceID)) {
        $messageID = science_processOrder($params->POST->scienceID, $caveID, $params->SESSION->player->playerID, $details, $db);
        $r = getCaveSecure($caveID, $params->SESSION->player->playerID);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $details = $r->nextRow();
    }
    $queue = science_getScienceQueueForCave($params->SESSION->player->playerID, $caveID);
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'science.ihtml');
    // Show a special message
    if (isset($messageID)) {
        tmpl_set($template, '/MESSAGE/message', $messageText[$messageID]);
    }
    // Show the science table
    for ($i = 0; $i < sizeof($scienceTypeList); $i++) {
        $science = $scienceTypeList[$i];
        // the current science
        $maxLevel = round(eval('return ' . formula_parseToPHP("{$science->maxLevel};", '$details')));
        $notenough = FALSE;
        $result = rules_checkDependencies($science, $details);
        if ($result === TRUE) {
            tmpl_iterate($template, 'SCIENCE');
            tmpl_set($template, "SCIENCE/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'SCIENCE', array('dbFieldName' => $science->dbFieldName, 'name' => $science->name, 'scienceID' => $i, 'modus' => SCIENCE_DETAIL, 'caveID' => $caveID, 'size' => "0" + $details[$science->dbFieldName], 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($science->productionTimeFunction . ";", '$details')) * SCIENCE_TIME_BASE_FACTOR)));
            // iterate ressourcecosts
            foreach ($science->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "SCIENCE/RESSOURCECOST");
                    if ($details[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "SCIENCE/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "SCIENCE/RESSOURCECOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "SCIENCE/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "SCIENCE/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($science->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "SCIENCE/UNITCOST");
                    if ($details[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "SCIENCE/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "SCIENCE/UNITCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "SCIENCE/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            // iterate buildingcosts
            foreach ($science->buildingProductionCost as $buildingID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/BUILDINGCOST");
                    if ($details[$buildingTypeList[$buildingID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/name", $buildingTypeList[$buildingID]->name);
                }
            }
            // iterate externalcosts
            foreach ($science->externalProductionCost as $externalID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/EXTERNALCOST");
                    if ($details[$defenseSystemTypeList[$externalID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/name", $defenseSystemTypeList[$externalID]->name);
                }
            }
            // show the science link ?!
            if ($queue) {
                tmpl_set($template, 'SCIENCE/RESEARCH_LINK_NO/message', _('Erforschung im Gange'));
            } else {
                if ($notenough && $maxLevel > $details[$science->dbFieldName]) {
                    tmpl_set($template, 'SCIENCE/RESEARCH_LINK_NO/message', _('Zu wenig Rohstoffe'));
                } else {
                    if ($maxLevel > $details[$science->dbFieldName]) {
                        tmpl_set($template, 'SCIENCE/RESEARCH_LINK', array('action' => SCIENCE, 'scienceID' => $science->scienceID, 'caveID' => $caveID));
                    } else {
                        tmpl_set($template, '/SCIENCE/RESEARCH_LINK_NO/message', _('Max. Stufe'));
                    }
                }
            }
        } else {
            if ($result !== FALSE && !$science->nodocumentation) {
                tmpl_iterate($template, '/UNQUALIFIEDSCIENCES/SCIENCE');
                tmpl_set($template, '/UNQUALIFIEDSCIENCES/SCIENCE', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'modus' => SCIENCE_DETAIL, 'scienceID' => $science->scienceID, 'caveID' => $caveID, 'dbFieldName' => $science->dbFieldName, 'name' => $science->name, 'dependencies' => $result));
            }
        }
    }
    // Show the science queue
    if ($queue) {
        // display the science queue
        $row = $queue->nextRow();
        tmpl_set($template, 'SCIENCE_QUEUE', array('name' => $scienceTypeList[$row['scienceID']]->name, 'size' => $details[$scienceTypeList[$row['scienceID']]->dbFieldName] + 1, 'finish' => time_formatDatetime($row['end']), 'action' => SCIENCE, 'eventID' => $row['event_scienceID'], 'caveID' => $caveID));
    }
    tmpl_set($template, "rules_path", RULES_PATH);
    return tmpl_parse($template);
}
Beispiel #4
0
function wonder_getWonderContent($caveID, &$details)
{
    global $template;
    // open template
    $template->setFile('wonder.tmpl');
    // messages
    $messageText = array(-3 => array('type' => 'error', 'message' => _('Die angegebene Zielhöhle wurde nicht gefunden.')), -2 => array('type' => 'error', 'message' => _('Das Wunder kann nicht auf die angegbene Zielhöhle erwirkt werden.')), -1 => array('type' => 'error', 'message' => _('Es ist ein Fehler bei der Verarbeitung Ihrer Anfrage aufgetreten. Bitte wenden Sie sich an die Administratoren')), 0 => array('type' => 'error', 'message' => _('Das Wunder kann nicht erwirkt werden. Es fehlen die notwendigen Voraussetzungen')), 1 => array('type' => 'success', 'message' => _('Das Erflehen des Wunders scheint Erfolg zu haben.')), 2 => array('type' => 'info', 'message' => _('Die Götter haben Ihr Flehen nicht erhört! Die eingesetzten Opfergaben sind natürlich dennoch verloren. Mehr Glück beim nächsten Mal!')));
    $action = Request::getVar('action', '');
    switch ($action) {
        /****************************************************************************************************
        *
        * "wundern" xD
        *
        ****************************************************************************************************/
        case 'wonder':
            $wonderID = Request::getVar('wonderID', -1);
            $caveName = Request::getVar('CaveName', '');
            $xCoord = Request::getVar('xCoord', 0);
            $yCoord = Request::getVar('yCoord', 0);
            if ($wonderID != -1) {
                if (!empty($caveName)) {
                    $caveData = getCaveByName($caveName);
                    $xCoord = $caveData['xCoord'];
                    $yCoord = $caveData['yCoord'];
                } else {
                    if ($xCoord == 0 && $yCoord == 0) {
                        $messageID = -3;
                        break;
                    }
                }
            } else {
                $messageID = -1;
                break;
            }
            $messageID = wonder_processOrder($_SESSION['player']->playerID, $wonderID, $caveID, $xCoord, $yCoord, $details);
            $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            if ($messageID == 1 || $messageID == 2) {
                wonder_addStatistic($wonderID, $messageID);
            }
            break;
    }
    // Show the wonder table
    $wonders = $wondersUnqualified = array();
    foreach ($GLOBALS['wonderTypeList'] as $id => $wonder) {
        // exclude tribeWonders
        if ($wonder->isTribeWonder) {
            continue;
        }
        $result = rules_checkDependencies($wonder, $details);
        /****************************************************************************************************
        *
        * Wunder die gebetet werden können.
        *
        ****************************************************************************************************/
        if ($result === TRUE && !$wonder->nodocumentation) {
            $wonders[$wonder->wonderCategory]['items'][$wonder->wonderID] = array('dbFieldName' => $wonder->wonderID, 'name' => $wonder->name, 'wonder_id' => $wonder->wonderID, 'wonderCategory' => $wonder->wonderCategory, 'description' => $wonder->description, 'same' => $wonder->target == 'same' ? true : false);
            $wonders[$wonder->wonderCategory]['items'][$wonder->wonderID] = array_merge($wonders[$wonder->wonderCategory]['items'][$wonder->wonderID], parseCost($wonder, $details));
            // show the building link ?!
            if ($wonders[$wonder->wonderCategory]['items'][$wonder->wonderID]['notenough']) {
                $wonders[$wonder->wonderCategory]['items'][$wonder->wonderID]['no_build_msg'] = _('Zu wenig Rohstoffe');
            } else {
                $wonders[$wonder->wonderCategory]['items'][$wonder->wonderID]['build_link'] = true;
            }
            /****************************************************************************************************
            *
            * Wunder die nicht gewundert werden können.
            *
            ****************************************************************************************************/
        } else {
            if ($result !== FALSE && !$wonder->nodocumentation) {
                $wondersUnqualified[$wonder->wonderCategory]['items'][$wonder->wonderID] = array('name' => $wonder->name, 'wonder_id' => $wonder->wonderID, 'wonderCategory' => $wonder->wonderCategory, 'description' => $wonder->description, 'dependencies' => $result);
            }
        }
    }
    /****************************************************************************************************
    *
    * Namen zu den Kategorien hinzufügen & sortieren
    *
    ****************************************************************************************************/
    $tmpWonders = $tmpWondersUnqualified = array();
    foreach ($GLOBALS['wonderCategoryTypeList'] as $wonderCategory) {
        if (isset($wonders[$wonderCategory->id])) {
            $tmpWonders[$wonderCategory->sortID] = array('name' => $wonderCategory->name, 'items' => $wonders[$wonderCategory->id]['items']);
            unset($wonders[$wonderCategory->id]);
        }
        if (isset($wondersUnqualified[$wonderCategory->id])) {
            $tmpWondersUnqualified[$wonderCategory->sortID] = array('name' => $wonderCategory->name, 'items' => $wondersUnqualified[$wonderCategory->id]['items']);
            unset($wondersUnqualified[$wonderCategory->id]);
        }
    }
    $wonders = $tmpWonders;
    $wondersUnqualified = $tmpWondersUnqualified;
    unset($tmpWonders, $tmpWondersUnqualified);
    ksort($wonders);
    ksort($wondersUnqualified);
    /****************************************************************************************************
    *
    * Übergeben ans Template
    *
    ****************************************************************************************************/
    $template->addVars(array('cave_id' => $caveID, 'status_msg' => isset($messageID) ? $messageText[$messageID] : '', 'wonders' => $wonders, 'wonders_unqualified' => $wondersUnqualified));
}
Beispiel #5
0
function unit_getUnitDetail($caveID, &$details)
{
    global $buildingTypeList, $defenseSystemTypeList, $resourceTypeList, $unitTypeList, $config, $params, $db, $MAX_RESOURCE;
    // messages
    $messageText = array(0 => "Der Arbeitsauftrag wurde erfolgreich gestoppt.", 1 => "Es konnte kein Arbeitsauftrag gestoppt werden.", 2 => "Der Auftrag konnte nicht erteilt werden. Es fehlen die " . "notwendigen Voraussetzungen.", 3 => "Der Auftrag wurde erteilt", 4 => "Bitte korrekte Anzahl der Einheiten Angeben (1 ... " . MAX_SIMULTAN_BUILDED_UNITS . ")");
    // proccess a cancel-order request
    if (isset($params->POST->eventID)) {
        $messageID = unit_processOrderCancel($params->POST->eventID, $caveID, $db);
    }
    // proccess a new order request
    if (isset($params->POST->unitID)) {
        $messageID = unit_processOrder($params->POST->unitID, intval($params->POST->quantity), $caveID, $db, $details);
        $r = getCaveSecure($caveID, $params->SESSION->user['playerID']);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $details = $r->nextRow();
    }
    $queue = unit_getUnitQueueForCave($params->SESSION->user['playerID'], $caveID);
    $template = @tmpl_open("./templates/" . $config->template_paths[$params->SESSION->user['template']] . "/unitbuild.ihtml");
    // Show a special message
    if (isset($messageID)) {
        tmpl_set($template, '/MESSAGE/message', $messageText[$messageID]);
    }
    // Show the unit table
    for ($i = 0; $i < sizeof($unitTypeList); $i++) {
        $notenough = FALSE;
        $unit = $unitTypeList[$i];
        // the current unit
        $result = rules_checkDependencies($unit, $details);
        if ($result === TRUE) {
            tmpl_iterate($template, '/UNIT');
            tmpl_set($template, "UNIT/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'UNIT', array('name' => $unit->name, 'dbFieldName' => $unit->dbFieldName, 'unitID' => $i, 'modus' => UNIT_PROPERTIES, 'caveID' => $caveID, 'size' => "0" + $details[$unit->dbFieldName], 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($unit->productionTimeFunction . ";", '$details')) * BUILDING_TIME_BASE_FACTOR)));
            // iterate ressourcecosts
            foreach ($unit->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "UNIT/RESSOURCECOST");
                    if ($details[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "UNIT/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "UNIT/RESSOURCECOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "UNIT/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "UNIT/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($unit->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "UNIT/UNITCOST");
                    if ($details[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "UNIT/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "UNIT/UNITCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "UNIT/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            // iterate buildingcosts
            foreach ($unit->buildingProductionCost as $buildingID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/BUILDINGCOST");
                    if ($details[$buildingTypeList[$buildingID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/name", $buildingTypeList[$buildingID]->name);
                }
            }
            // iterate externalcosts
            foreach ($unit->externalProductionCost as $externalID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/EXTERNALCOST");
                    if ($details[$defenseSystemTypeList[$externalID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/name", $defenseSystemTypeList[$externalID]->name);
                }
            }
            // show the improvement link ?!
            if ($queue) {
                tmpl_set($template, "UNIT/UNIT_LINK_NO/message", "Ausbildung im Gange");
            } else {
                if ($notenough) {
                    tmpl_set($template, "UNIT/UNIT_LINK_NO/message", "");
                } else {
                    $formParams = array(array('name' => 'modus', 'value' => UNIT_BUILDER), array('name' => 'caveID', 'value' => $caveID), array('name' => 'unitID', 'value' => $unit->unitID));
                    tmpl_set($template, "UNIT/UNIT_LINK/PARAMS", $formParams);
                }
            }
        } else {
            if ($params->SESSION->user['show_unqualified'] && $result !== FALSE && !$unit->nodocumentation) {
                tmpl_iterate($template, '/UNQUALIFIEDUNITS/UNIT');
                tmpl_set($template, '/UNQUALIFIEDUNITS/UNIT', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'modus' => UNIT_PROPERTIES, 'unitID' => $i, 'caveID' => $caveID, 'dbFieldName' => $unit->dbFieldName, 'name' => $unit->name, 'dependencies' => $result));
            }
        }
    }
    // Show the building queue
    if ($queue) {
        // display the unit building queue
        $row = $queue->nextRow();
        tmpl_set($template, 'UNIT_QUEUE', array('name' => $unitTypeList[$row[unitID]]->name, 'quantity' => $row['quantity'], 'finish' => date("d.m.Y H:i:s", time_timestampToTime($row[event_end])), 'action' => UNIT_BUILDER, 'eventID' => $row['event_unitID'], 'caveID' => $caveID));
    }
    return tmpl_parse($template);
}
Beispiel #6
0
function wonder_getWonderContent($playerID, $caveID, &$details)
{
    global $buildingTypeList, $resourceTypeList, $wonderTypeList, $unitTypeList, $config, $params, $db;
    // messages
    $messageText = array(-4 => "Die Zielsiedlung steht unter Schutz. Der Zauber kann nicht erwirkt werden.", -3 => "Die angegebene Zielsiedlung wurde nicht gefunden.", -2 => "Der Zauber kann nicht auf die angegbene Zielsiedlung erwirkt " . "werden.", -1 => "Es ist ein Fehler bei der Verarbeitung Ihrer Anfrage aufgetreten. " . "Bitte wenden Sie sich an die Administratoren.", 0 => "Der Zauber kann nicht erwirkt werden. Es fehlen die " . "notwendigen Voraussetzungen.", 1 => "Das Erwirken des Zaubers scheint Erfolg zu haben.", 2 => "Die G&ouml;tter haben Ihr Flehen nicht erh&ouml;rt! Die " . "eingesetzten Opfergaben sind nat&uuml;rlich dennoch verloren. " . "Mehr Gl&uuml;ck beim n&auml;chsten Mal!");
    // ADDED by chris--- for cavebook -----------------------
    if ($params->POST->targetCaveID != -1) {
        $targetCave = getCaveByID($params->POST->targetCaveID);
        $x = $targetCave[xCoord];
        $y = $targetCave[yCoord];
    } else {
        $x = $params->POST->xCoord;
        $y = $params->POST->yCoord;
    }
    // ------------------------------------------------------
    // and changed $params->POST->xCoord to $x etc
    if (isset($params->POST->wonderID)) {
        $messageID = wonder_processOrder($playerID, $params->POST->wonderID, $caveID, $x, $y, $details, $db);
        $reload = 1;
    }
    if ($reload) {
        // this isn't that elegant...
        $r = getCaveSecure($caveID, $params->SESSION->user['playerID']);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $details = $r->nextRow();
    }
    $template = @tmpl_open("./templates/" . $config->template_paths[$params->SESSION->user['template']] . "/wonder.ihtml");
    // Show a special message
    if (isset($messageID)) {
        tmpl_set($template, '/MESSAGE/message', $messageText[$messageID]);
    }
    // ADDED by chris--- for cavebook ---------------------------------
    // Getting entries
    $cavelist = cavebook_getEntries($params->SESSION->user['playerID']);
    // Show the cave table
    $cavebook = array();
    for ($ix = 0; $ix < sizeof($cavelist[id]); $ix++) {
        $cavebook[$ix][cavebook_entry] = $cavelist[name][$ix];
        $cavebook[$ix][cavebook_id] = $cavelist[id][$ix];
        $cavebook[$ix][cavebook_x] = $cavelist[x][$ix];
        $cavebook[$ix][cavebook_y] = $cavelist[y][$ix];
    }
    // --------------------------------------------------------------
    // Show the wonder table
    for ($i = 0; $i < sizeof($wonderTypeList); $i++) {
        $wonder = $wonderTypeList[$i];
        // the current building
        $result = rules_checkDependencies($wonder, $details);
        if ($result === TRUE) {
            tmpl_iterate($template, 'WONDER');
            tmpl_set($template, "WONDER/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'WONDER', array('name' => $wonder->name, 'wonderID' => $i, 'modus' => WONDER_DETAIL, 'caveID' => $caveID));
            // iterate ressourcecosts
            foreach ($wonder->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "WONDER/RESSOURCECOST");
                    if ($details[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "WONDER/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "WONDER/RESSOURCECOST/LESS/value", $cost);
                    }
                    tmpl_set($template, "WONDER/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "WONDER/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($wonder->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "WONDER/UNITCOST");
                    if ($details[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "WONDER/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "WONDER/UNITCOST/LESS/value", $cost);
                    }
                    tmpl_set($template, "WONDER/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            // show the wonder link
            tmpl_set($template, 'WONDER/BUILD_LINK', array('action' => WONDER, 'wonderID' => $wonder->wonderID, 'cave_book_link' => CAVE_BOOK, 'BOOKENTRY' => $cavebook, 'caveID' => $caveID));
        } else {
            if ($params->SESSION->user['show_unqualified'] && $result !== FALSE && !$wonder->nodocumentation) {
                tmpl_iterate($template, '/UNQUALIFIEDWONDERS/WONDER');
                tmpl_set($template, '/UNQUALIFIEDWONDERS/WONDER', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'modus' => WONDER_DETAIL, 'wonderID' => $i, 'caveID' => $caveID, 'name' => $wonder->name, 'dependencies' => $result));
            }
        }
    }
    return tmpl_parse($template);
}
Beispiel #7
0
function science_getScienceDetail($caveID, &$details)
{
    global $template;
    // open template
    $template->setFile('scienceBuilder.tmpl');
    // messages
    $messageText = array(0 => array('type' => 'success', 'message' => _('Der Forschungsauftrag wurde erfolgreich gestoppt.')), 1 => array('type' => 'error', 'message' => _('Es konnte kein Forschungsauftrag gestoppt werden.')), 2 => array('type' => 'error', 'message' => _('Der Auftrag konnte nicht erteilt werden. Es fehlen die notwendigen Voraussetzungen.')), 3 => array('type' => 'success', 'message' => _('Der Auftrag wurde erteilt')), 4 => array('type' => 'info', 'message' => _('Dieses Wissen wird schon in einer anderen Höhle erforscht.')), 5 => array('type' => 'info', 'message' => _('Es wird gerade in einer anderen Höhle Wissen erforscht, das dieses Wissen ausschließt.')));
    // get this cave's queue
    $queue = science_getQueue($_SESSION['player']->playerID, $caveID);
    $action = Request::getVar('action', '');
    switch ($action) {
        /****************************************************************************************************
        *
        * Forschung starten
        *
        ****************************************************************************************************/
        case 'build':
            $scienceID = Request::getVar('scienceID', -1);
            if ($scienceID == -1) {
                $messageID = 2;
                break;
            }
            // check queue exist
            if (sizeof($queue)) {
                $messageID = 2;
                break;
            }
            $messageID = science_processOrder($scienceID, $caveID, $details);
            $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            $queue = science_getQueue($_SESSION['player']->playerID, $caveID);
            break;
            /****************************************************************************************************
            *
            * Forschung abbrechen
            *
            ****************************************************************************************************/
        /****************************************************************************************************
        *
        * Forschung abbrechen
        *
        ****************************************************************************************************/
        case 'cancelOrder':
            $eventID = Request::getVar('id', 0);
            if ($eventID == 0) {
                $messageID = 2;
                break;
            }
            // check queue exist
            if (!sizeof($queue) || $queue['event_scienceID'] != $eventID) {
                $messageID = 2;
                break;
            }
            if (Request::isPost('cancelOrderConfirm')) {
                $messageID = science_cancelOrder($eventID, $caveID);
                if ($messageID == 0) {
                    $queue = null;
                }
            } else {
                $template->addVars(array('cancelOrder_box' => true, 'confirm_action' => 'cancelOrder', 'confirm_id' => $eventID, 'confirm_mode' => SCIENCE_BUILDER, 'confirm_msg' => sprintf(_('Möchtest die Forschung von <span class="bold">%s</span> abbrechen?'), $GLOBALS['scienceTypeList'][$queue['scienceID']]->name)));
            }
            break;
    }
    $sciences = $sciencesUnqualified = array();
    foreach ($GLOBALS['scienceTypeList'] as $id => $science) {
        $maxLevel = round(eval('return ' . formula_parseToPHP("{$science->maxLevel};", '$details')));
        $notenough = FALSE;
        $result = rules_checkDependencies($science, $details);
        /****************************************************************************************************
        *
        *  Forschungen die man forschen kann.
        *
        ****************************************************************************************************/
        if ($result === TRUE) {
            $sciences[$science->scienceID] = array('name' => $science->name, 'dbFieldName' => $science->dbFieldName, 'science_id' => $science->scienceID, 'modus' => SCIENCE_BUILDER, 'cave_id' => $caveID, 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($science->productionTimeFunction . ";", '$details')) * SCIENCE_TIME_BASE_FACTOR), 'maxlevel' => $maxLevel, 'currentlevel' => "0" + $details[$science->dbFieldName], 'description' => $science->description, 'duration_formula' => formula_parseToReadable($science->productionTimeFunction));
            $sciences[$science->scienceID] = array_merge($sciences[$science->scienceID], parseCost($science, $details));
            // show the building link ?!
            if (sizeof($queue)) {
                $sciences[$science->scienceID]['no_build_msg'] = _('Erforschung im Gange');
            } else {
                if ($sciences[$science->scienceID]['notenough'] && $maxLevel > $details[$science->dbFieldName]) {
                    $sciences[$science->scienceID]['no_build_msg'] = _('Zu wenig Rohstoffe');
                } else {
                    if ($maxLevel > $details[$science->dbFieldName]) {
                        $sciences[$science->scienceID]['build_link'] = true;
                    } else {
                        $sciences[$science->scienceID]['no_build_msg'] = _('Max. Stufe');
                    }
                }
            }
            /****************************************************************************************************
            *
            * Forschungen die noch nicht geforscht werden können.
            *
            ****************************************************************************************************/
        } else {
            if ($result !== FALSE && !$science->nodocumentation) {
                $sciencesUnqualified[$science->scienceID] = array('name' => $science->name, 'dbFieldName' => $science->dbFieldName, 'science_id' => $science->scienceID, 'modus' => SCIENCE_DETAIL, 'caveID' => $caveID, 'dependencies' => $result, 'description' => $science->description, 'duration_formula' => formula_parseToReadable($science->productionTimeFunction));
            }
        }
    }
    /****************************************************************************************************
    *
    * Irgendwas im Ausbau?
    *
    ****************************************************************************************************/
    if (sizeof($queue)) {
        $template->addVars(array('quene_show' => true, 'quene_name' => $GLOBALS['scienceTypeList'][$queue['scienceID']]->name, 'quene_nextlevel' => $details[$GLOBALS['scienceTypeList'][$queue['scienceID']]->dbFieldName] + 1, 'quene_finish' => time_formatDatetime($queue['end']), 'quene_modus' => SCIENCE_BUILDER, 'quene_event_id' => $queue['event_scienceID']));
    }
    /****************************************************************************************************
    *
    * Übergeben ans Template
    *
    ****************************************************************************************************/
    $template->addVars(array('cave_id' => $caveID, 'status_msg' => isset($messageID) ? $messageText[$messageID] : '', 'science' => $sciences, 'science_unqualified' => $sciencesUnqualified));
}
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 "&quot;Dieses Geschenk kann ich euch nicht anbieten, H&auml;uptling!&quot;";
    }
    // 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 "&quot;Ihr habt nicht die passenden Schnecken, H&auml;uptling!&quot;";
    */
    if ($myaccount['credits'] < $price['credits']) {
        return "&quot;Ihr habt nicht die passenden Schnecken, H&auml;uptling!&quot;";
    }
    // Preis abziehen
    if (!questionnaire_addCredits(-$row['credits'])) {
        return "&quot;Ich bin mit dem Schnecken abz&auml;hlen durcheinander " . "gekommen, H&auml;uptling! Versucht es noch einmal!&quot;";
    }
    // 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&uuml;r die Schnecken!";
}
Beispiel #9
0
/**
 *
 */
function defense_builder($caveID, &$details)
{
    global $template;
    // open template
    $template->setFile('defenseBuilder.tmpl');
    //messages
    $messageText = array(0 => array('type' => 'error', 'message' => _('Es konnte kein Arbeitsauftrag gestoppt werden.')), 1 => array('type' => 'success', 'message' => _('Der Arbeitsauftrag wurde erfolgreich gestoppt.')), 2 => array('type' => 'info', 'message' => sprintf(_('Du kannst derzeit kein Gebäude oder Verteidigungen abreissen, weil erst vor Kurzem etwas in dieser Höhle abgerissen wurde. Generell muss zwischen zwei Abrissen eine Zeitspanne von %d Minuten liegen.'), TORE_DOWN_TIMEOUT)), 3 => array('type' => 'error', 'message' => _('Du hast von der Sorte gar keine Gebäude')), 4 => array('type' => 'error', 'message' => _('Das Gebäude konnte nicht abgerissen werden.')), 5 => array('type' => 'success', 'message' => _('Das Gebäude wurde erfolgreich abgerissen.')), 6 => array('type' => 'error', 'message' => _('Der Auftrag konnte nicht erteilt werden. Es fehlen die notwendigen Voraussetzungen.')), 7 => array('type' => 'success', 'message' => _('Der Arbeitsauftrag wurde erteilt.')), 8 => array('type' => 'error', 'message' => _('Der Arbeitsauftrag konnte nicht erteilt werden. Ein Arbeitsauftrag ist schon im Gange.')));
    // get this cave's queue
    $queue = defense_getQueue($_SESSION['player']->playerID, $caveID);
    $action = Request::getVar('action', '');
    switch ($action) {
        /****************************************************************************************************
        *
        * Verteidigungsanlage bauen
        *
        ****************************************************************************************************/
        case 'build':
            $defenseID = Request::getVar('defenseID', -1);
            if ($defenseID == -1 || !isset($GLOBALS['defenseSystemTypeList'][$defenseID])) {
                $messageID = 6;
                break;
            }
            // check queue exist
            if (sizeof($queue)) {
                $messageID = 8;
                break;
            }
            $messageID = defense_processOrder($defenseID, $caveID, $details);
            $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            $queue = defense_getQueue($_SESSION['player']->playerID, $caveID);
            break;
            /****************************************************************************************************
            *
            * Ausbau der Verteidigungsanlage abbrechen
            *
            ****************************************************************************************************/
        /****************************************************************************************************
        *
        * Ausbau der Verteidigungsanlage abbrechen
        *
        ****************************************************************************************************/
        case 'cancelOrder':
            $eventID = Request::getVar('id', 0);
            if ($eventID == 0) {
                $messageID = 0;
                break;
            }
            // check queue exist
            if (!sizeof($queue) || $queue['event_defenseSystemID'] != $eventID) {
                $messageID = 0;
                break;
            }
            if (Request::isPost('postConfirm')) {
                $messageID = defense_cancelOrder($eventID, $caveID);
                if ($messageID == 1) {
                    $queue = null;
                }
            } else {
                $template->addVars(array('cancelOrder_box' => true, 'confirm_action' => 'cancelOrder', 'confirm_id' => $eventID, 'confirm_mode' => DEFENSE_BUILDER, 'confirm_msg' => sprintf(_('Möchtest du den Arbeitsauftrag von <span class="bold">%s</span> abbrechen?'), $GLOBALS['defenseSystemTypeList'][$queue['defenseSystemID']]->name)));
            }
            break;
            /****************************************************************************************************
            *
            * Verteidigungsanlage abreißen
            *
            ****************************************************************************************************/
        /****************************************************************************************************
        *
        * Verteidigungsanlage abreißen
        *
        ****************************************************************************************************/
        case 'demolishing':
            $defenseID = Request::getVar('id', -1);
            if ($defenseID == -1) {
                $messageID = 4;
                break;
            }
            if (!isset($GLOBALS['defenseSystemTypeList'][$defenseID])) {
                $messageID = 4;
                break;
            }
            if (Request::isPost('postConfirm')) {
                $messageID = defense_Demolishing($defenseID, $caveID, $details);
                $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            } else {
                $template->addVars(array('cancelOrder_box' => true, 'confirm_action' => 'demolishing', 'confirm_id' => $defenseID, 'confirm_mode' => DEFENSE_BUILDER, 'confirm_msg' => sprintf(_('Möchtest du <span class="bold">%s</span> einmal abreißen?'), $GLOBALS['defenseSystemTypeList'][$defenseID]->name)));
            }
            break;
    }
    $defenseSystem = $defenseSystemRelict = $defenseSystemUnqualified = array();
    foreach ($GLOBALS['defenseSystemTypeList'] as $id => $defense) {
        $maxLevel = round(eval('return ' . formula_parseToPHP("{$defense->maxLevel};", '$details')));
        $result = rules_checkDependencies($defense, $details);
        // if all requirements are met, but the maxLevel is 0, treat it like a non-buildable
        if ($maxLevel <= 0 && $result === TRUE) {
            $result = !$details[$defense->dbFieldName] ? _('Max. Stufe: 0') : false;
        }
        /****************************************************************************************************
        *
        * Verteidigungsanlage die gebaut werden können.
        *
        ****************************************************************************************************/
        if ($result === TRUE) {
            $defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID] = array('name' => $defense->name, 'dbFieldName' => $defense->dbFieldName, 'defense_id' => $defense->defenseSystemID, 'cave_id' => $caveID, 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($defense->productionTimeFunction . ";", '$details')) * DEFENSESYSTEM_TIME_BASE_FACTOR), 'maxlevel' => $maxLevel, 'currentlevel' => "0" + $details[$defense->dbFieldName], 'antiSpyChance' => $defense->antiSpyChance, 'breakdown_link' => $details[$defense->dbFieldName] > 0 ? true : false);
            $defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID] = array_merge($defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID], parseCost($defense, $details));
            // show the building link ?!
            if (sizeof($queue)) {
                $defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID]['no_build_msg'] = _('Ausbau im Gange');
            } else {
                if ($defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID]['notenough'] && $maxLevel > $details[$defense->dbFieldName]) {
                    $defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID]['no_build_msg'] = _('Zu wenig Rohstoffe');
                } else {
                    if ($maxLevel > $details[$defense->dbFieldName]) {
                        $defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID]['build_link'] = true;
                    } else {
                        $defenseSystem[$defense->defenseCategory]['items'][$defense->defenseSystemID]['no_build_msg'] = _('Max. Stufe');
                    }
                }
            }
            /****************************************************************************************************
            *
            * Verteidigungsanlage die zwar nicht gebaut werden können aber schon in der Höhle sind (Relikt)
            *
            ****************************************************************************************************/
        } else {
            if ($details[$defense->dbFieldName]) {
                $defenseSystemRelict[$defense->defenseCategory]['items'][$defense->defenseSystemID] = array('name' => $defense->name, 'dbFieldName' => $defense->dbFieldName, 'defense_id' => $defense->defenseSystemID, 'cave_id' => $caveID, 'currentlevel' => "0" + $details[$defense->dbFieldName], 'dependencies' => $result !== false ? $result : false);
                /****************************************************************************************************
                *
                * Verteidigungsanlage die nicht gebaut werden können.
                *
                ****************************************************************************************************/
            } else {
                if ($result !== false && !$defense->nodocumentation) {
                    $defenseSystemUnqualified[$defense->defenseCategory]['items'][$defense->defenseSystemID] = array('name' => $defense->name, 'dbFieldName' => $defense->dbFieldName, 'defense_id' => $defense->defenseSystemID, 'cave_id' => $caveID, 'dependencies' => $result, 'antiSpyChance' => $defense->antiSpyChance);
                }
            }
        }
    }
    /****************************************************************************************************
    *
    * Namen zu den Kategorien hinzufügen & sortieren
    *
    ****************************************************************************************************/
    $tmpDefenseSystem = $tmpDefenseSystemRelict = $tmpDefenseSystemUnqualified = array();
    foreach ($GLOBALS['defenseCategoryTypeList'] as $defenseCategory) {
        if (isset($defenseSystem[$defenseCategory->id])) {
            $tmpDefenseSystem[$defenseCategory->sortID] = array('id' => $defenseCategory->id, 'name' => $defenseCategory->name, 'items' => $defenseSystem[$defenseCategory->id]['items']);
            unset($defenseSystem[$defenseCategory->id]);
        }
        if (isset($defenseSystemRelict[$defenseCategory->id])) {
            $tmpDefenseSystemRelict[$defenseCategory->sortID] = array('id' => $defenseCategory->id, 'name' => $defenseCategory->name, 'items' => $defenseSystemRelict[$defenseCategory->id]['items']);
            unset($defenseSystemRelict[$defenseCategory->id]);
        }
        if (isset($defenseSystemUnqualified[$defenseCategory->id])) {
            $tmpDefenseSystemUnqualified[$defenseCategory->sortID] = array('id' => $defenseCategory->id, 'name' => $defenseCategory->name, 'items' => $defenseSystemUnqualified[$defenseCategory->id]['items']);
            unset($defenseSystemUnqualified[$defenseCategory->id]);
        }
    }
    $defenseSystem = $tmpDefenseSystem;
    $defenseSystemRelict = $tmpDefenseSystemRelict;
    $defenseSystemUnqualified = $tmpDefenseSystemUnqualified;
    unset($tmpDefenseSystem, $tmpDefenseSystemRelict, $tmpDefenseSystemUnqualified);
    ksort($defenseSystem);
    ksort($defenseSystemRelict);
    ksort($defenseSystemUnqualified);
    /****************************************************************************************************
    *
    * Irgendwas im Ausbau?
    *
    ****************************************************************************************************/
    if (sizeof($queue)) {
        $template->addVars(array('quene_show' => true, 'quene_name' => $GLOBALS['defenseSystemTypeList'][$queue['defenseSystemID']]->name, 'quene_nextlevel' => $details[$GLOBALS['defenseSystemTypeList'][$queue['defenseSystemID']]->dbFieldName] + 1, 'quene_finish' => time_formatDatetime($queue['end']), 'quene_modus' => DEFENSE_BUILDER, 'quene_event_id' => $queue['event_defenseSystemID']));
    }
    /****************************************************************************************************
    *
    * Übergeben ans Template
    *
    ****************************************************************************************************/
    $template->addVars(array('cave_id' => $caveID, 'status_msg' => isset($messageID) ? $messageText[$messageID] : '', 'defense_system' => $defenseSystem, 'defense_system_unqualified' => $defenseSystemUnqualified, 'defense_system_relict' => $defenseSystemRelict));
}
Beispiel #10
0
function unit_Movement($caveID, &$ownCave)
{
    global $db, $template;
    $safeForm = true;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $ownCave[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        $moveArtefactID = Request::getVar('myartefacts', 0);
        // was an artefact chosen?
        if ($moveArtefactID > 0) {
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($moveArtefactID == $value['artefactID']) {
                    $moveArtefact = $moveArtefactID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    /**
     * HERO MOVEMENT
     */
    $moveHero = 0;
    if ($details['hero'] != 0) {
        $hero = getHeroByPlayer($_SESSION['player']->playerID);
        if ($hero['isAlive'] != 1) {
            $details['hero'] = 0;
        }
    }
    if ($details['hero'] != 0 && Request::getVar('moveHero', false) == true) {
        $moveHero = $details['hero'];
    }
    /**
     * END HERO MOVEMENTS
     */
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($_SESSION['player']->playerID);
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_COST . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_SPEED . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (Request::getVar('moveit', false) && sizeof(Request::getVar('unit', array('' => '')))) {
        $targetXCoord = Request::getVar('targetXCoord', 0);
        $targetYCoord = Request::getVar('targetYCoord', 0);
        $targetCaveName = Request::getVar('targetCaveName', '');
        $targetCaveID = Request::getVar('targetCaveID', 0);
        $movementID = Request::getVar('movementID', 0);
        // check for scripters
        check_timestamp(Request::getVar('tstamp', 0));
        $validCaveName = false;
        // targetCaveID >>> coords
        if ($targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = true;
            }
            // name >>> coords
        } else {
            if ($targetCaveName != "") {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = true;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter(Request::getVar('unit', array('' => '')), "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", Request::getVar('rohstoff', array('' => '')));
        // Test, ob Einheitentragekapazität ausgelastet
        $overloaded = 0;
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                if (isset($GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey])) {
                    $capacity += $aUnit * $GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey];
                }
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        $denymovement_nonenemy = false;
        $denymovement_targetwar = false;
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($_SESSION['player']->tribe)) {
                //may tade in own tribe
                $ownTribe = $_SESSION['player']->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe) || relation_areEnemys($ownTribe, $targetTribe) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        // check if army is small enough for hero
        $denymovement_hero = false;
        if ($moveHero && (Request::getVar('movementID', 0) == 3 || Request::getVar('movementID', 0) == 6)) {
            //calculate size of army
            $armySize = 0;
            foreach ($unit as $unitID => $value) {
                $armySize += $GLOBALS['unitTypeList'][$unitID]->hitPoints * $value;
            }
            if ($armySize > $hero['exp']) {
                $denymovement_hero = true;
            }
        }
        if (Request::getVar('movementID', 0) == 0) {
            $msg = array('type' => 'error', 'message' => _('Bitte Bewegungsart auswählen!'));
            $moveHero = 0;
        } else {
            if (!sizeof($unit)) {
                $msg = array('type' => 'error', 'message' => _('Es sind keine Einheiten ausgewählt!'));
                $moveHero = 0;
            } else {
                if (($targetXCoord == 0 || $targetYCoord == 0) && $targetCaveName == "") {
                    $msg = array('type' => 'error', 'message' => _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!'));
                    $moveHero = 0;
                } else {
                    if (($targetXCoord == 0 || $targetYCoord == 0) && !($targetCaveName == "") && $validCaveName === FALSE) {
                        $msg = array('type' => 'error', 'message' => sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName));
                        $moveHero = 0;
                    } else {
                        if ($overloaded) {
                            $msg = array('type' => 'error', 'message' => _('Deine Krieger können die Menge an Ressourcen nicht tragen!!'));
                            $moveHero = 0;
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord)) {
                                $msg = array('type' => 'error', 'message' => _('Die Zielhöhle steht unter Anfängerschutz.'));
                                $moveHero = 0;
                            } else {
                                if (beginner_isCaveProtectedByID($caveID)) {
                                    $msg = array('type' => 'error', 'message' => _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden'));
                                    $moveHero = 0;
                                } else {
                                    if (Request::getVar('movementID', 0) == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord)) {
                                        $msg = array('type' => 'error', 'message' => _('Sie können diese Höhle nicht übernehmen. Sie ist gegen übernahmen geschützt.'));
                                        $moveHero = 0;
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = array('type' => 'error', 'message' => _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!'));
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = array('type' => 'error', 'message' => _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.'));
                                                $moveHero = 0;
                                            } else {
                                                if ($denymovement_hero) {
                                                    $msg = array('type' => 'error', 'message' => _('Die Armee ist zu groß um vom Helden unterstützt zu werden!'));
                                                    $moveHero = 0;
                                                } else {
                                                    // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                    $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                    $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                    $tmpdist = 0;
                                                    $i = 0;
                                                    if ($distance > 15) {
                                                        $distance = $distance - 15;
                                                        $tmpdist = 15;
                                                        if (floor($distance / 5) < 11) {
                                                            $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                        }
                                                        for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                            $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                        }
                                                    } else {
                                                        $tmpdist = $distance;
                                                    }
                                                    // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                    $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                    if ($details[$GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->dbFieldName] < $reqFood) {
                                                        $msg = array('type' => 'error', 'message' => _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!'));
                                                    } else {
                                                        $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $moveHero, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                        switch ($msgID) {
                                                            case 0:
                                                                $msg = array('type' => 'success', 'message' => sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood));
                                                                $safeForm = false;
                                                                break;
                                                            case 1:
                                                                $msg = array('type' => 'error', 'message' => _('In diesen Koordinaten liegt keine Höhle!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 2:
                                                                $msg = array('type' => 'error', 'message' => _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 3:
                                                                $msg = array('type' => 'error', 'message' => _('Schwerer Fehler: Bitte Admin kontaktieren!'));
                                                                $moveHero = 0;
                                                                break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (Request::isPost('action') && Request::getVar('action', '') == 'cancel' && ($eventID = Request::getVar('eventID', 0))) {
            $msgID = reverseMovementEvent($caveID, $eventID);
            switch ($msgID) {
                case 0:
                    $msg = array('type' => 'success', 'message' => _('Die Einheiten kehren zurück!'));
                    break;
                case 1:
                    $msg = array('type' => 'error', 'message' => _('Fehler bei der Rückkehr!'));
                    break;
            }
        } else {
            if (Request::getVar('moveit', false) && !sizeof(Request::getVar('unit', array('' => '')))) {
                $msg = array('type' => 'error', 'message' => _('Einheiten mitnehmen?'));
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $_SESSION['player']->playerID);
    $ownCave[$caveID] = $details = $temp;
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // make sure that moved hero is not shown again
    if ($moveHero != 0) {
        $details['hero'] = 0;
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    // open template
    $template->setFile('unitMovement.tmpl');
    $template->addVars(array('currentX' => $details['xCoord'], 'currentY' => $details['yCoord'], 'dim_x' => $dim_x, 'dim_y' => $dim_y, 'speed' => $minutesPerCave, 'fuel_id' => GameConstants::FUEL_RESOURCE_ID, 'fuel_name' => $GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->name, 'movement_cost_constant' => $foodPerCave, 'resource_types' => GameConstants::MAX_RESOURCE, 'status_msg' => isset($msg) ? $msg : ''));
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    $template->addVar('selectable_movements', $selectable_movements);
    // resources
    $resources = array();
    foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
        if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
            $resources[] = array('resource_id' => $GLOBALS['resourceTypeList'][$resourceID]->resourceID, 'name' => $GLOBALS['resourceTypeList'][$resourceID]->name, 'current_amount' => "0" + $details[$GLOBALS['resourceTypeList'][$resourceID]->dbFieldName], 'dbFieldName' => $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName, 'value' => $safeForm && isset($resource[$resourceID]) && $resource[$resourceID] > 0 ? $resource[$resourceID] : '');
        }
    }
    $template->addVar('resource', $resources);
    // units table
    $unitprops = array();
    $units = array();
    foreach ($GLOBALS['unitTypeList'] as $unitID => $dummy) {
        // if no units of this type, next type
        if (!$details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
            if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
                $encumbrance[$resourceID] = array('resourceID' => $resourceID, 'load' => "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0));
                $temp[] = "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0);
            }
        }
        $units[] = array('name' => $GLOBALS['unitTypeList'][$unitID]->name, 'unit_id' => $unitID, 'food_cost' => $GLOBALS['unitTypeList'][$unitID]->foodCost, 'resource_load' => implode(",", $temp), 'speed_factor' => $GLOBALS['unitTypeList'][$unitID]->wayCost, 'max_unit_count' => $details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName], 'encumbrance' => $encumbrance, 'hitPoints' => $GLOBALS['unitTypeList'][$unitID]->hitPoints, 'value' => $safeForm && isset($unit[$unitID]) ? $unit[$unitID] : '');
    }
    $template->addVar('unit_list', $units);
    // weitergereichte Koordinaten
    if (!Request::getVar('movementID', 0) || $safeForm) {
        if (Request::getVar('targetCaveID', 0) > 0) {
            $caveData = getCaveByID(Request::getVar('targetCaveID', 0));
            $template->addVars(array('target_x_coord' => $caveData['xCoord'], 'target_y_coord' => $caveData['yCoord'], 'target_cave_name' => $caveData['name']));
        } else {
            $template->addVars(array('target_x_coord' => Request::getVar('targetXCoord', ''), 'target_y_coord' => Request::getVar('targetYCoord', ''), 'target_cave_name' => Request::getVar('targetCaveName', '')));
        }
    }
    // weitere Paramter
    $template->addVar('params', array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time())));
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    $ownMovement = $oppMovement = array();
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            $ownMovement[] = $move;
        } else {
            $oppMovement[] = $move;
        }
    }
    $template->addVars(array('ownMovement' => $ownMovement, 'oppMovement' => $oppMovement));
    // artefakte
    if (sizeof($myartefacts) != 0) {
        //tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
        $template->addVar('artefact', $myartefacts);
    }
    // hero
    if ($details['hero'] != 0) {
        $template->addVar('hero', $hero);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            $template->addVar('bookmarks_cave', $bookmarks);
        }
    }
}
Beispiel #11
0
function unitAction($caveID, &$meineHoehlen)
{
    global $config, $db, $MAX_RESOURCE, $MOVEMENTCOSTCONSTANT, $MOVEMENTSPEEDCONSTANT, $params, $resourceTypeList, $unitTypeList, $FUELRESOURCEID;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $meineHoehlen[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        // was an artefact chosen?
        if ((int) $params->POST->myartefacts > 0) {
            $tempID = (int) $params->POST->myartefacts;
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($tempID == $value['artefactID']) {
                    $moveArtefact = $tempID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($params->SESSION->player->playerID);
    $params->SESSION->player = $_SESSION['player'];
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP($MOVEMENTCOSTCONSTANT . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP($MOVEMENTSPEEDCONSTANT . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (isset($params->POST->moveit) && sizeof($params->POST->unit)) {
        $targetXCoord = intval($params->POST->targetXCoord);
        $targetYCoord = intval($params->POST->targetYCoord);
        $targetCaveName = $params->POST->targetCaveName;
        $targetCaveID = intval($params->POST->targetCaveID);
        $movementID = intval($params->POST->movementID);
        // check for scripters
        check_timestamp($params->POST->tstamp);
        $validCaveName = FALSE;
        // targetCaveID >>> coords
        if (isset($targetCaveID) && $targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = TRUE;
            }
            // name >>> coords
        } else {
            if (isset($targetCaveName)) {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = TRUE;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter($params->POST->unit, "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", $params->POST->rohstoff);
        // Test, ob Einheitentragekapazität ausgelastet
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                $capacity += $aUnit * $unitTypeList[$unitKey]->encumbranceList[$resKey];
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($params->SESSION->player->tribe)) {
                //may tade in own tribe
                $ownTribe = $params->SESSION->player->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE, $db);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE, $db);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe, $db) || relation_areEnemys($ownTribe, $targetTribe, $db) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        if ($params->POST->movementID == 0) {
            $msg = _('Bitte Bewegungsart auswählen!');
        } else {
            if (!sizeof($unit)) {
                $msg = _('Es sind keine Einheiten ausgewählt!');
            } else {
                if (empty($targetXCoord) || empty($targetYCoord) and empty($targetCaveName)) {
                    $msg = _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!');
                } else {
                    if (empty($targetXCoord) || empty($targetYCoord) and !empty($targetCaveName) and $validCaveName === FALSE) {
                        $msg = sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName);
                    } else {
                        if ($overloaded) {
                            $msg = _('Deine Krieger können die Menge an Ressourcen nicht tragen!!');
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord, $db)) {
                                $msg = _('Die Zielhöhle steht unter Anfängerschutz.');
                            } else {
                                if (beginner_isCaveProtectedByID($caveID, $db)) {
                                    $msg = _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden');
                                } else {
                                    if ($params->POST->movementID == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord, $db)) {
                                        $msg = _('Sie können diese Höhle nicht übernehmen. Sie ist gegen Übernahmen geschützt.');
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!');
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.');
                                            } else {
                                                // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                $tmpdist = 0;
                                                $i = 0;
                                                if ($distance > 15) {
                                                    $distance = $distance - 15;
                                                    $tmpdist = 15;
                                                    if (floor($distance / 5) < 11) {
                                                        $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                    }
                                                    for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                        $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                    }
                                                } else {
                                                    $tmpdist = $distance;
                                                }
                                                // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                if ($details[$resourceTypeList[$FUELRESOURCEID]->dbFieldName] < $reqFood) {
                                                    $msg = _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!');
                                                } else {
                                                    $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                    switch ($msgID) {
                                                        case 0:
                                                            $msg = sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood);
                                                            break;
                                                        case 1:
                                                            $msg = _('In diesen Koordinaten liegt keine Höhle!');
                                                            break;
                                                        case 2:
                                                            $msg = _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!');
                                                            break;
                                                        case 3:
                                                            $msg = _('Schwerer Fehler: Bitte Admin kontaktieren!');
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (!empty($params->POST->eventID)) {
            $msgID = reverseMovementEvent($caveID, $params->POST->eventID);
            switch ($msgID) {
                case 0:
                    $msg = _('Die Einheiten kehren zurück!');
                    break;
                case 1:
                    $msg = _('Fehler bei der Rückkehr!');
                    break;
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $params->SESSION->player->playerID);
    $meineHoehlen[$caveID] = $details = $temp->nextRow(MYSQL_ASSOC);
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'unitaction.ihtml');
    // messages
    if (isset($msg)) {
        tmpl_set($template, '/MESSAGE/msg', $msg);
    }
    // javascript support
    tmpl_set($template, 'currentX', $details['xCoord']);
    tmpl_set($template, 'currentY', $details['yCoord']);
    tmpl_set($template, 'dim_x', $dim_x);
    tmpl_set($template, 'dim_y', $dim_y);
    tmpl_set($template, 'speed', $minutesPerCave);
    tmpl_set($template, 'fuel_id', $FUELRESOURCEID);
    tmpl_set($template, 'fuel_name', $resourceTypeList[$FUELRESOURCEID]->name);
    tmpl_set($template, 'movementcostconstant', $foodPerCave);
    tmpl_set($template, "resourceTypes", $MAX_RESOURCE);
    tmpl_set($template, "rules_path", RULES_PATH);
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    tmpl_set($template, 'SELECTACTION', $selectable_movements);
    // resources
    $resources = array();
    for ($res = 0; $res < sizeof($resourceTypeList); $res++) {
        if (!$resourceTypeList[$res]->nodocumentation) {
            $resources[] = array('resourceID' => $resourceTypeList[$res]->resourceID, 'name' => $resourceTypeList[$res]->name, 'currentAmount' => "0" + $details[$resourceTypeList[$res]->dbFieldName], 'dbFieldName' => $resourceTypeList[$res]->dbFieldName);
        }
    }
    tmpl_set($template, 'RESOURCE', $resources);
    tmpl_set($template, 'TOTAL', $resources);
    tmpl_set($template, 'RESOURCE_LUGGAGE', $resources);
    // units table
    $unitprops = array();
    $units = array();
    for ($i = 0; $i < sizeof($unitTypeList); $i++) {
        // if no units of this type, next type
        if (!$details[$unitTypeList[$i]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        for ($j = 0; $j < count($resourceTypeList); $j++) {
            if (!$resourceTypeList[$j]->nodocumentation) {
                $encumbrance[$j] = array('resourceID' => $j, 'load' => "0" + $unitTypeList[$i]->encumbranceList[$j]);
                $temp[] = "0" + $unitTypeList[$i]->encumbranceList[$j];
            }
        }
        $unitprops[] = array('unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'resourceLoad' => implode(",", $temp), 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName]);
        $units[] = array('name' => $unitTypeList[$i]->name, 'modus' => UNIT_PROPERTIES, 'unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName], 'warriorID' => $i, 'ENCUMBRANCE' => $encumbrance);
    }
    tmpl_set($template, 'UNITPROPS', $unitprops);
    tmpl_set($template, 'SELECTWARRIOR', $units);
    // weitergereichte Koordinaten
    if (empty($params->POST->movementID)) {
        tmpl_set($template, 'targetXCoord', $params->POST->targetXCoord);
        tmpl_set($template, 'targetYCoord', $params->POST->targetYCoord);
        tmpl_set($template, 'targetCaveName', $params->POST->targetCaveName);
    }
    // weitere Paramter
    $hidden = array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time()));
    tmpl_set($template, 'PARAMS', $hidden);
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    //$movements = digest_getMovements($meineHoehlen, array(), true);
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            tmpl_iterate($template, 'MOVEMENT/MOVE');
            tmpl_set($template, 'MOVEMENT/MOVE', $move);
        } else {
            tmpl_iterate($template, 'OPPMOVEMENT/MOVE');
            tmpl_set($template, 'OPPMOVEMENT/MOVE', $move);
        }
    }
    // artefakte
    if (sizeof($myartefacts) != 0) {
        tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // show CAVEBOOKMARKS context
        tmpl_set($template, '/CAVEBOOKMARKS/iterate', '');
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARK', $bookmarks);
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARKJS', $bookmarks);
        }
    }
    return tmpl_parse($template);
}
Beispiel #12
0
function questionnaire_getPresent($caveID, &$ownCaves, $presentID)
{
    global $db;
    if (empty($presentID)) {
        return -1;
    }
    $sql = $db->prepare("SELECT * FROM " . QUESTIONNAIRE_PRESENTS_TABLE . " WHERE presentID = :presentID");
    $sql->bindValue('presentID', $presentID, PDO::PARAM_INT);
    if (!$sql->execute()) {
        return -2;
    }
    $row = $sql->fetch(PDO::FETCH_ASSOC);
    $sql->closeCursor();
    if (!questionnaire_timeIsRight($row)) {
        return -3;
    }
    // genügend Schnecken?
    $myaccount = questionnaire_getCredits($_SESSION['player']->questionCredits);
    $price = questionnaire_getCredits($row['credits']);
    if ($myaccount['credits'] < $price['credits']) {
        return -4;
    }
    // Preis abziehen
    if (!questionnaire_addCredits(-$row['credits'])) {
        return -5;
    }
    // Geschenk überreichen
    $presents = array();
    $caveData = $ownCaves[$caveID];
    foreach ($GLOBALS['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 ($GLOBALS['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 ($GLOBALS['unitTypeList'] as $unit) {
        if ($row[$unit->dbFieldName] > 0) {
            $dbField = $unit->dbFieldName;
            $presents[] = "{$dbField} = {$dbField} + " . $row[$unit->dbFieldName];
        }
    }
    if (sizeof($presents)) {
        // UPDATE Cave
        $sql = $db->prepare("UPDATE " . CAVE_TABLE . "\n                         SET " . implode(", ", $presents) . "\n                         WHERE caveID = :caveID\n                           AND playerID = :playerID");
        $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
        $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
        if (!$sql->execute()) {
            return -2;
        }
        // UPDATE Questionnaire_presents
        $sql = $db->prepare("UPDATE " . QUESTIONNAIRE_PRESENTS_TABLE . "\n                         SET use_count = use_count + 1\n                         WHERE presentID = :presentID");
        $sql->bindValue('presentID', $presentID, PDO::PARAM_INT);
        if (!$sql->execute() || $sql->rowCount() == 0) {
            return -2;
        }
        // Höhle auffrischen
        $ownCaves[$caveID] = getCaveSecure($caveID, $_SESSION['player']->playerID);
        return 1;
    }
    return 2;
}
Beispiel #13
0
function wonder_getWonderContent($playerID, $caveID, &$details)
{
    global $buildingTypeList, $resourceTypeList, $wonderTypeList, $unitTypeList, $config, $params, $db;
    // messages
    $messageText = array(-3 => "Die angegebene Zielh&ouml;hle wurde nicht gefunden.", -2 => "Das Wunder kann nicht auf die angegbene Zielh&ouml;hle erwirkt " . "werden.", -1 => "Es ist ein Fehler bei der Verarbeitung Ihrer Anfrage aufgetreten. " . "Bitte wenden Sie sich an die Administratoren.", 0 => "Das Wunder kann nicht erwirkt werden. Es fehlen die " . "notwendigen Voraussetzungen.", 1 => "Das Erflehen des Wunders scheint Erfolg zu haben.", 2 => "Die G&ouml;tter haben Ihr Flehen nicht erh&ouml;rt! Die " . "eingesetzten Opfergaben sind nat&uuml;rlich dennoch verloren. " . "Mehr Gl&uuml;ck beim n&auml;chsten Mal!");
    if (isset($params->POST->wonderID)) {
        $messageID = wonder_processOrder($playerID, $params->POST->wonderID, $caveID, $params->POST->xCoord, $params->POST->yCoord, $details, $db);
        $reload = 1;
    }
    if ($reload) {
        // this isn't that elegant...
        $r = getCaveSecure($caveID, $params->SESSION->player->playerID);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $details = $r->nextRow();
    }
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'wonder.ihtml');
    // Show a special message
    if (isset($messageID)) {
        tmpl_set($template, '/MESSAGE/message', $messageText[$messageID]);
    }
    // Show the wonder table
    for ($i = 0; $i < sizeof($wonderTypeList); $i++) {
        $wonder = $wonderTypeList[$i];
        // the current wonder
        $result = rules_checkDependencies($wonder, $details);
        if ($result === TRUE && !$wonder->nodocumentation) {
            tmpl_iterate($template, 'WONDER');
            tmpl_set($template, "WONDER/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'WONDER', array('name' => $wonder->name, 'wonderID' => $i, 'modus' => WONDER_DETAIL, 'caveID' => $caveID));
            // iterate ressourcecosts
            foreach ($wonder->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "WONDER/RESSOURCECOST");
                    if ($details[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "WONDER/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "WONDER/RESSOURCECOST/LESS/value", $cost);
                    }
                    tmpl_set($template, "WONDER/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "WONDER/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($wonder->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "WONDER/UNITCOST");
                    if ($details[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "WONDER/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "WONDER/UNITCOST/LESS/value", $cost);
                    }
                    tmpl_set($template, "WONDER/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            foreach ($wonder->buildingProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "WONDER/UNITCOST");
                    if ($details[$buildingTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "WONDER/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "WONDER/UNITCOST/LESS/value", $cost);
                    }
                    tmpl_set($template, "WONDER/UNITCOST/name", $buildingTypeList[$unitID]->name);
                }
            }
            // show the wonder link
            tmpl_set($template, 'WONDER/BUILD_LINK', array('action' => WONDER, 'wonderID' => $wonder->wonderID, 'caveID' => $caveID));
            if ($wonder->target != "same") {
                // show input field of target cave iff wonder may be cast on another cave
                tmpl_iterate($template, 'WONDER/BUILD_LINK/TARGET');
            }
        } else {
            if ($result !== FALSE && !$wonder->nodocumentation) {
                tmpl_iterate($template, '/UNQUALIFIEDWONDERS/WONDER');
                tmpl_set($template, '/UNQUALIFIEDWONDERS/WONDER', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'modus' => WONDER_DETAIL, 'wonderID' => $i, 'caveID' => $caveID, 'name' => $wonder->name, 'dependencies' => $result));
            }
        }
    }
    tmpl_set($template, "rules_path", RULES_PATH);
    return tmpl_parse($template);
}
Beispiel #14
0
function unit_getUnitDetail($caveID, &$details)
{
    global $template;
    // open template
    $template->setFile('unitBuilder.tmpl');
    // messages
    $messageText = array(0 => array('type' => 'success', 'message' => _('Der Arbeitsauftrag wurde erfolgreich gestoppt.')), 1 => array('type' => 'error', 'message' => _('Es konnte kein Arbeitsauftrag gestoppt werden.')), 2 => array('type' => 'error', 'message' => _('Der Auftrag konnte nicht erteilt werden. Es fehlen die notwendigen Voraussetzungen.')), 3 => array('type' => 'success', 'message' => _('Der Auftrag wurde erteilt')), 4 => array('type' => 'info', 'message' => sprintf(_('Bitte korrekte Anzahl der Einheiten Angeben (1 ... %d)'), MAX_SIMULTAN_BUILDED_UNITS)), 5 => array('type' => 'error', 'message' => _('Der Arbeitsauftrag konnte nicht erteilt werden. Ein Arbeitsauftrag ist schon im Gange.')));
    // get this cave's queue
    $queue = unit_getQueue($_SESSION['player']->playerID, $caveID);
    $action = Request::getVar('action', '');
    switch ($action) {
        /****************************************************************************************************
        *
        * Einheiten bauen
        *
        ****************************************************************************************************/
        case 'build':
            $unitID = Request::getVar('unitID', -1);
            $quantity = Request::getVar('quantity', 0);
            if ($unitID == -1) {
                $messageID = 2;
                break;
            }
            // check queue exist
            if (sizeof($queue)) {
                $messageID = 5;
                break;
            }
            $messageID = unit_processOrder($unitID, $quantity, $caveID, $details);
            $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            $queue = unit_getQueue($_SESSION['player']->playerID, $caveID);
            break;
            /****************************************************************************************************
            *
            * Ausbau der Einheiten abbrechen
            *
            ****************************************************************************************************/
        /****************************************************************************************************
        *
        * Ausbau der Einheiten abbrechen
        *
        ****************************************************************************************************/
        case 'cancelOrder':
            $eventID = Request::getVar('id', 0);
            if ($eventID == 0) {
                $messageID = 1;
                break;
            }
            // check queue exist
            if (!sizeof($queue) || $queue['event_unitID'] != $eventID) {
                $messageID = 1;
                break;
            }
            if (Request::isPost('postConfirm')) {
                $messageID = unit_cancelOrder($eventID, $caveID);
                if ($messageID == 0) {
                    $queue = null;
                }
            } else {
                $template->addVars(array('cancelOrder_box' => true, 'confirm_action' => 'cancelOrder', 'confirm_id' => $eventID, 'confirm_mode' => UNIT_BUILDER, 'confirm_msg' => sprintf(_('Möchtest du den Arbeitsauftrag von <span class="bold">%s</span> abbrechen?'), $GLOBALS['unitTypeList'][$queue['unitID']]->name)));
            }
            break;
    }
    $units = $unitsUnqualified = array();
    foreach ($GLOBALS['unitTypeList'] as $id => $unit) {
        $result = rules_checkDependencies($unit, $details);
        /****************************************************************************************************
        *
        * Einheiten die gebaut werden können.
        *
        ****************************************************************************************************/
        if ($result === TRUE) {
            $units[$unit->unitCategory]['items'][$unit->unitID] = array('name' => $unit->name, 'dbFieldName' => $unit->dbFieldName, 'unit_id' => $unit->unitID, 'unitCategory' => $unit->unitCategory, 'cave_id' => $caveID, 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($unit->productionTimeFunction . ";", '$details')) * BUILDING_TIME_BASE_FACTOR), 'stock' => "0" + $details[$unit->dbFieldName], 'description' => $unit->description, 'duration_formula' => formula_parseToReadable($unit->productionTimeFunction), 'visible' => $unit->visible, 'range_attack' => $unit->attackRange, 'areal_attack' => $unit->attackAreal, 'attack_rate' => $unit->attackRate, 'rd_Resist' => $unit->rangedDamageResistance, 'defense_rate' => $unit->defenseRate, 'size' => $unit->hitPoints, 'spy_value' => $unit->spyValue, 'spy_chance' => $unit->spyChance, 'spy_quality' => $unit->spyQuality, 'anti_spy_chance' => $unit->antiSpyChance, 'fuel_name' => $GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->dbFieldName, 'fuel_factor' => $unit->foodCost, 'way_cost' => $unit->wayCost, 'normal_damage_probabilit' => 100 * (1 - ($unit->heavyDamageProbability + $unit->criticalDamageProbability)), 'heavy_damage_probability' => 100 * $unit->heavyDamageProbability, 'critical_damage_probability' => 100 * $unit->criticalDamageProbability);
            $units[$unit->unitCategory]['items'][$unit->unitID] = array_merge($units[$unit->unitCategory]['items'][$unit->unitID], parseCost($unit, $details));
            // show the building link ?!
            if (sizeof($queue)) {
                $units[$unit->unitCategory]['items'][$unit->unitID]['no_build_msg'] = _('Ausbau im Gange');
            } else {
                if ($units[$unit->unitCategory]['items'][$unit->unitID]['notenough']) {
                    $units[$unit->unitCategory]['items'][$unit->unitID]['no_build_msg'] = _('Zu wenig Rohstoffe');
                } else {
                    $units[$unit->unitCategory]['items'][$unit->unitID]['build_link'] = true;
                }
            }
            /****************************************************************************************************
            *
            * Einheiten die nicht gebaut werden können.
            *
            ****************************************************************************************************/
        } else {
            if ($result !== FALSE && !$unit->nodocumentation) {
                $unitsUnqualified[$unit->unitCategory]['items'][$unit->unitID] = array('name' => $unit->name, 'dbFieldName' => $unit->dbFieldName, 'unit_id' => $unit->unitID, 'unitCategory' => $unit->unitCategory, 'cave_id' => $caveID, 'dependencies' => $result, 'description' => $unit->description, 'duration_formula' => formula_parseToReadable($unit->productionTimeFunction), 'visible' => $unit->visible, 'range_attack' => $unit->attackRange, 'areal_attack' => $unit->attackAreal, 'attack_rate' => $unit->attackRate, 'rd_Resist' => $unit->rangedDamageResistance, 'defense_rate' => $unit->defenseRate, 'size' => $unit->hitPoints, 'spy_value' => $unit->spyValue, 'spy_chance' => $unit->spyChance, 'spy_quality' => $unit->spyQuality, 'anti_spy_chance' => $unit->antiSpyChance, 'fuel_name' => $GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->dbFieldName, 'fuel_factor' => $unit->foodCost, 'way_cost' => $unit->wayCost, 'normal_damage_probabilit' => 100 * (1 - ($unit->heavyDamageProbability + $unit->criticalDamageProbability)), 'heavy_damage_probability' => 100 * $unit->heavyDamageProbability, 'critical_damage_probability' => 100 * $unit->criticalDamageProbability);
                $unitsUnqualified[$unit->unitCategory]['items'][$unit->unitID] = array_merge($unitsUnqualified[$unit->unitCategory]['items'][$unit->unitID], parseCost($unit, $details));
            }
        }
    }
    /****************************************************************************************************
    *
    * Namen zu den Kategorien hinzufügen & sortieren
    *
    ****************************************************************************************************/
    $tmpUnits = $tmpUnitsUnqualified = array();
    foreach ($GLOBALS['unitCategoryTypeList'] as $unitsCategory) {
        if (isset($units[$unitsCategory->id])) {
            $tmpUnits[$unitsCategory->sortID] = array('id' => $unitsCategory->id, 'name' => $unitsCategory->name, 'items' => $units[$unitsCategory->id]['items']);
            unset($units[$unitsCategory->id]);
        }
        if (isset($unitsUnqualified[$unitsCategory->id])) {
            $tmpUnitsUnqualified[$unitsCategory->sortID] = array('id' => $unitsCategory->id, 'name' => $unitsCategory->name, 'items' => $unitsUnqualified[$unitsCategory->id]['items']);
            unset($unitsUnqualified[$unitsCategory->id]);
        }
    }
    $units = $tmpUnits;
    $unitsUnqualified = $tmpUnitsUnqualified;
    unset($tmpUnits, $tmpUnitsUnqualified);
    ksort($units);
    ksort($unitsUnqualified);
    /****************************************************************************************************
    *
    * Irgendwas im Ausbau?
    *
    ****************************************************************************************************/
    if (sizeof($queue)) {
        $template->addVars(array('quene_show' => true, 'quene_name' => $GLOBALS['unitTypeList'][$queue['unitID']]->name, 'quene_quantity' => $queue['quantity'], 'quene_finish' => time_formatDatetime($queue['end']), 'quene_modus' => UNIT_BUILDER, 'quene_event_id' => $queue['event_unitID']));
    }
    /****************************************************************************************************
    *
    * Übergeben ans Template
    *
    ****************************************************************************************************/
    $template->addVars(array('cave_id' => $caveID, 'status_msg' => isset($messageID) ? $messageText[$messageID] : '', 'units' => $units, 'units_unqualified' => $unitsUnqualified, 'max_build_units' => MAX_SIMULTAN_BUILDED_UNITS));
}
Beispiel #15
0
function merchant_getMechantDetail($playerID, $caveID, &$details)
{
    global $db, $template;
    // open template
    $template->setFile('merchant.tmpl');
    @(include_once 'rules/rndMessages.php');
    // messages
    $messageText = array(-3 => array('type' => 'info', 'message' => "Der Händler schaut dich entgeistert an. \"Was willst du von mir?\""), -2 => array('type' => 'info', 'message' => "Der Händler schaut dich entgeistert an. \"Du warst doch gerade erst hier. Komm später nochmal wieder\""), -1 => array('type' => 'error', 'message' => "Es ist ein Fehler bei der Verarbeitung Ihrer Anfrage aufgetreten. Bitte wenden Sie sich an die Administratoren."), 0 => array('type' => 'info', 'message' => "Der Händler schüttelt mit dem Kopf. \"Meine Ware hat ihren Preis und sie ist jeden Rohstoff wert! Der nächste Häuptling ist bestimmt bereit meinen Preis zu zahlen!\""), 1 => array('type' => 'success', 'message' => "Erfreut nimmt der Händler deine Bezahlung entgegen. \"Ich hoffe dir gefällt meine Ware. Empfehle mich bitte weiter!\""));
    $action = Request::getVar('action', '');
    switch ($action) {
        /****************************************************************************************************
        *
        * Holen wir mal das zeugs
        *
        ****************************************************************************************************/
        case 'order':
            $tradeID = Request::getVar('tradeID', -1);
            if (!isset($GLOBALS['tradeTypeList'][$tradeID])) {
                $messageID = -3;
                break;
            }
            $messageID = merchant_processOrder($tradeID, $caveID, $details);
            $details = getCaveSecure($caveID, $_SESSION['player']->playerID);
            break;
    }
    /****************************************************************************************************
    *
    * Anzeigen der kaufbaren Sachen
    *
    ****************************************************************************************************/
    foreach ($GLOBALS['tradeCategoriesTypeList'] as $j => $cat) {
        $trades[$j] = array('id' => $j, 'name' => $GLOBALS['tradeCategoriesTypeList'][$j]->name);
        $lockedCat = array();
        $sql = $db->prepare("SELECT LockTill < :LockTill as allowed, LockTill, cat\n                         FROM " . TRADELOCK_TABLE . "\n                         WHERE PlayerID = :playerID");
        $sql->bindValue('LockTill', date("Y-m-d H:i:s", time()), PDO::PARAM_STR);
        $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
        if (!$sql->execute()) {
            $locktill = array();
        }
        while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
            if ($row['allowed'] == 0) {
                $lockedCat[$row['cat']] = time_fromDatetime($row['LockTill']);
            }
        }
        $sql->closeCursor();
        $count = 0;
        foreach ($GLOBALS['tradeTypeList'] as $id => $trade) {
            if ($trade->nodocumentation) {
                continue;
            }
            if ($trade->category != $GLOBALS['tradeCategoriesTypeList'][$j]->id) {
                continue;
            }
            $less = false;
            $canbuy = true;
            $locktill = '';
            if (isset($lockedCat[$cat->id])) {
                $canbuy = false;
                $locktill = $lockedCat[$cat->id];
            }
            $trades[$j]['data'][$id] = array('bgID' => $count++ % 2 + 1, 'name' => $trade->name, 'trade_id' => $id, 'description' => $trade->description, 'dbFieldName' => $trade->tradeID, 'locktill' => !$canbuy ? sprintf(_('Wieder im Angebot ab %s'), gmdate("d.m.Y H:i:s", $locktill)) : '');
            $trades[$j]['data'][$id] = array_merge($trades[$j]['data'][$id], parseCost($trade, $details));
            // show the building link ?!
            if (!$canbuy) {
                $trades[$j]['data'][$id]['no_build_msg'] = sprintf(_('Wieder im Angebot ab %s'), gmdate("d.m.Y H:i:s", $locktill));
            } else {
                if ($trades[$j]['data'][$id]['notenough']) {
                    $trades[$j]['data'][$id]['no_build_msg'] = _('Zu wenig Rohstoffe');
                } else {
                    $trades[$j]['data'][$id]['build_link'] = true;
                }
            }
        }
    }
    if (isset($GLOBALS['rndMerchantMessageText'])) {
        if (!isset($_SESSION['merchant_text_id']) || !isset($_SESSION['merchant_text_time']) || $_SESSION['merchant_text_time'] < time()) {
            $_SESSION['merchant_text_id'] = array_rand($GLOBALS['rndMerchantMessageText'], 1);
            $_SESSION['merchant_text_time'] = time() + 900;
        }
        $template->addVar('rndMessage', $GLOBALS['rndMerchantMessageText'][$_SESSION['merchant_text_id']]);
    }
    /****************************************************************************************************
    *
    * Übergeben ans Template
    *
    ****************************************************************************************************/
    $template->addVars(array('cave_id' => $caveID, 'status_msg' => isset($messageID) ? $messageText[$messageID] : '', 'trades' => $trades));
}
Beispiel #16
0
function improvement_getImprovementDetail($caveID, &$details)
{
    global $buildingTypeList, $defenseSystemTypeList, $resourceTypeList, $unitTypeList, $config, $params, $db;
    // messages
    $messageText = array(0 => "Der Arbeitsauftrag wurde erfolgreich gestoppt.", 1 => "Es konnte kein Arbeitsauftrag gestoppt werden.", 2 => "Der Auftrag konnte nicht erteilt werden. Es fehlen die " . "notwendigen Voraussetzungen.", 3 => "Der Auftrag wurde erteilt", 5 => "Das Geb&auml;ude wurde erfolgreich abgerissen", 6 => "Das Geb&auml;ude konnte nicht abgerissen werden", 7 => "Sie haben von der Sorte gar keine Geb&auml;ude", 8 => "Sie k&ouml;nnen derzeit kein Geb&auml;ude abreissen, weil erst vor Kurzem etwas in dieser Siedlung abgerissen wurde. Generell muss zwischen zwei Abrissen eine Zeitspanne von " . TORE_DOWN_TIMEOUT . " Minuten liegen.");
    // proccess a cancel-order request
    if (isset($params->POST->eventID)) {
        $messageID = improvement_processOrderCancel($params->POST->eventID, $caveID, $db);
    }
    // proccess a tore down or new order request
    if (isset($params->POST->breakDownConfirm)) {
        $messageID = improvement_breakDown($params->POST->buildingID, $caveID, $details, $db);
        $reload = 1;
    } else {
        if (isset($params->POST->buildingID)) {
            $messageID = improvement_processOrder($params->POST->buildingID, $caveID, $details, $db);
            $reload = 1;
        }
    }
    if ($reload) {
        // this isn't that elegant...
        $r = getCaveSecure($caveID, $params->SESSION->user['playerID']);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $details = $r->nextRow();
    }
    $queue = improvement_getImprovementQueueForCave($params->SESSION->user['playerID'], $caveID);
    $template = @tmpl_open("./templates/" . $config->template_paths[$params->SESSION->user['template']] . "/improvement.ihtml");
    // Show a special message
    if (isset($messageID)) {
        tmpl_set($template, '/MESSAGE/message', $messageText[$messageID]);
    }
    // Show the improvement table
    for ($i = 0; $i < sizeof($buildingTypeList); $i++) {
        $notenough = FALSE;
        $building = $buildingTypeList[$i];
        // the current building
        $maxLevel = round(eval('return ' . formula_parseToPHP("{$building->maxLevel};", '$details')));
        $result = rules_checkDependencies($building, $details);
        if ($result === TRUE) {
            tmpl_iterate($template, 'IMPROVEMENT');
            tmpl_set($template, "IMPROVEMENT/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'IMPROVEMENT', array('name' => $building->name, 'dbFieldName' => $building->dbFieldName, 'buildingID' => $i, 'modus' => IMPROVEMENT_BUILDING_DETAIL, 'caveID' => $caveID, 'maxlevel' => $maxLevel, 'size' => "0" + $details[$building->dbFieldName], 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($building->productionTimeFunction . ";", '$details')) * BUILDING_TIME_BASE_FACTOR)));
            // iterate ressourcecosts
            foreach ($building->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "IMPROVEMENT/RESSOURCECOST");
                    if ($details[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "IMPROVEMENT/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "IMPROVEMENT/RESSOURCECOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "IMPROVEMENT/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "IMPROVEMENT/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($building->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "IMPROVEMENT/UNITCOST");
                    if ($details[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "IMPROVEMENT/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "IMPROVEMENT/UNITCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "IMPROVEMENT/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            // iterate buildingcosts
            /*
                  foreach ($building->buildingProductionCost as $buildingID => $function){
            
                    $cost = ceil(eval('return '. formula_parseToPHP($function . ';', '$details')));
            
                    if ($cost){
                      tmpl_iterate($template, "DEFENSESYSTEM/BUILDINGCOST");
            
                      if ($details[$buildingTypeList[$buildingID]->dbFieldName] >= $cost){
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/ENOUGH/value", $cost);
            
                      } else {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/LESS/value", $cost);
            $notenough = TRUE;
                      }
                      tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/name", $buildingTypeList[$buildingID]->name);
                    }
                  }
            */
            // iterate buildingcosts
            foreach ($building->buildingProductionCost as $buildingID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "IMPROVEMENT/BUILDINGCOST");
                    if ($details[$buildingTypeList[$buildingID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "IMPROVEMENT/BUILDINGCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "IMPROVEMENT/BUILDINGCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "IMPROVEMENT/BUILDINGCOST/name", $buildingTypeList[$buildingID]->name);
                }
            }
            // iterate externalcosts
            foreach ($building->externalProductionCost as $externalID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/EXTERNALCOST");
                    if ($details[$defenseSystemTypeList[$externalID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/name", $defenseSystemTypeList[$externalID]->name);
                }
            }
            // show the break down link
            tmpl_set($template, 'IMPROVEMENT/BREAK_DOWN_LINK', array('action' => IMPROVEMENT_BREAK_DOWN, 'buildingID' => $building->buildingID, 'caveID' => $caveID));
            // show the building link ?!
            if ($queue) {
                tmpl_set($template, 'IMPROVEMENT/BUILD_LINK_NO/message', "Ausbau im Gange");
            } else {
                if ($notenough && $maxLevel > $details[$building->dbFieldName]) {
                    tmpl_set($template, 'IMPROVEMENT/BUILD_LINK_NO/message', "");
                } else {
                    if ($maxLevel > $details[$building->dbFieldName]) {
                        tmpl_set($template, 'IMPROVEMENT/BUILD_LINK', array('action' => IMPROVEMENT_DETAIL, 'buildingID' => $building->buildingID, 'caveID' => $caveID));
                    } else {
                        tmpl_set($template, '/IMPROVEMENT/BUILD_LINK_NO/message', "Max. Stufe");
                    }
                }
            }
        } else {
            if ($details[$building->dbFieldName]) {
                tmpl_iterate($template, '/UNWANTEDIMPROVEMENTS/IMPROVEMENT');
                tmpl_set($template, '/UNWANTEDIMPROVEMENTS/IMPROVEMENT', array('alternate' => $count_unwanted++ % 2 ? "" : "alternate", 'modus' => IMPROVEMENT_BUILDING_DETAIL, 'buildingID' => $i, 'caveID' => $caveID, 'size' => $details[$building->dbFieldName], 'dbFieldName' => $building->dbFieldName, 'name' => $building->name, 'action' => IMPROVEMENT_BREAK_DOWN));
                if ($result !== FALSE) {
                    tmpl_set($template, '/UNWANTEDIMPROVEMENTS/IMPROVEMENT/dependencies', $result);
                }
            } else {
                if ($params->SESSION->user['show_unqualified'] && $result !== FALSE && !$building->nodocumentation) {
                    tmpl_iterate($template, '/UNQUALIFIEDIMPROVEMENTS/IMPROVEMENT');
                    tmpl_set($template, '/UNQUALIFIEDIMPROVEMENTS/IMPROVEMENT', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'modus' => IMPROVEMENT_BUILDING_DETAIL, 'buildingID' => $i, 'caveID' => $caveID, 'dbFieldName' => $building->dbFieldName, 'name' => $building->name, 'dependencies' => $result));
                }
            }
        }
    }
    // Show the building queue
    if ($queue) {
        // display the building queue
        $row = $queue->nextRow();
        tmpl_set($template, 'IMPROVEMENT_QUEUE', array('name' => $buildingTypeList[$row['expansionID']]->name, 'size' => $details[$buildingTypeList[$row['expansionID']]->dbFieldName] + 1, 'finish' => date("d.m.Y H:i:s", time_timestampToTime($row['event_end'])), 'action' => IMPROVEMENT_DETAIL, 'eventID' => $row['event_expansionID'], 'caveID' => $caveID));
    }
    return tmpl_parse($template);
}
Beispiel #17
0
function createRitual($caveID, $playerID, $ritual, $hero, &$ownCaves)
{
    global $db;
    $cave = getCaveSecure($caveID, $playerID);
    $duration = $ritual['duration'];
    unset($ritual['duration']);
    // get ritual costs
    $costs = array();
    $temp = array_merge($GLOBALS['resourceTypeList'], $GLOBALS['buildingTypeList'], $GLOBALS['unitTypeList'], $GLOBALS['scienceTypeList'], $GLOBALS['defenseSystemTypeList']);
    foreach ($temp as $val) {
        if (array_key_exists($val->dbFieldName, $ritual)) {
            if ($ritual[$val->dbFieldName]['value']) {
                $costs[$val->dbFieldName] = $ritual[$val->dbFieldName]['value'];
            }
        }
    }
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$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 -3;
        }
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE " . CAVE_TABLE . " SET {$setBack} WHERE caveID = '{$caveID}'";
    } else {
        return -7;
    }
    $now = time();
    $sql = $db->prepare("INSERT INTO " . EVENT_HERO_TABLE . "\n                         (caveID, playerID, heroID, start, end, blocked) \n                       VALUES\n                         (:caveID, :playerID, :heroID, :start, :end, :blocked)");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    $sql->bindValue('heroID', $hero['heroID'], PDO::PARAM_INT);
    $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('end', time_toDatetime($now + $duration), PDO::PARAM_STR);
    $sql->bindValue('blocked', 0, PDO::PARAM_INT);
    if ($sql->execute()) {
        $sql->closeCursor();
        $sql = $db->prepare("UPDATE " . HERO_TABLE . "\n                          SET isAlive = -1,\n                            caveID = :caveID\n                          WHERE heroID = :heroID");
        $sql->bindValue('heroID', $hero['heroID'], PDO::PARAM_INT);
        $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
        if (!$sql->execute()) {
            $db->query($setBack);
            return -7;
        }
        // update cave
        $ownCaves[$caveID] = getCaveSecure($caveID, $_SESSION['player']->playerID);
        return 2;
    }
}
Beispiel #18
0
/** This function returns basic hero details
 *
 *  @param caveID       the current caveID
 *  @param ownCaves  all the data of all your caves
 */
function hero_getHeroDetail($caveID, &$ownCaves)
{
    global $db, $template;
    // open template
    $template->setFile('hero.tmpl');
    // get current playerID by user
    $playerID = $_SESSION['player']->playerID;
    $player = getPlayerByID($playerID);
    $newhero = false;
    $messageText = array(-24 => array('type' => 'error', 'message' => _('Es können nur Rohstoffe aus der aktuellen Höhle geopfert werden!')), -23 => array('type' => 'error', 'message' => _('Die Fähigkeit wurde schon erlernt!')), -22 => array('type' => 'error', 'message' => _('Dein Held hat den falschen Typ, um die Fähigkeit zu erlernen!')), -21 => array('type' => 'error', 'message' => _('Fehler beim Erlernen der Fähigkeit!')), -20 => array('type' => 'error', 'message' => _('Dein Held hat nicht das erforderliche Level!')), -19 => array('type' => 'error', 'message' => _('Fehler beim Eintragen des neuen Heldentyps!')), -18 => array('type' => 'error', 'message' => _('Euer Held ist tot!')), -17 => array('type' => 'error', 'message' => _('Euer Held ist gar nicht tot!')), -16 => array('type' => 'error', 'message' => _('Fehler beim Eintragen der Erfahrungspunkte nach der Opferung!')), -15 => array('type' => 'error', 'message' => _('Fehler beim Abziehen der geopferten Rohstoffe!')), -14 => array('type' => 'error', 'message' => _('Nicht genug Rohstoffe zum Opfern vorhanden!')), -13 => array('type' => 'error', 'message' => _('Fehler beim Holen der Opferwerte!')), -12 => array('type' => 'error', 'message' => _('Fehler beim Erhöhen des Levels!')), -11 => array('type' => 'error', 'message' => _('Nicht genug Talentpunkte vorhanden!')), -10 => array('type' => 'error', 'message' => _('Ihr Held ist noch nicht erfahren genug, diesen Trank zu nutzen!')), -9 => array('type' => 'error', 'message' => _('Nicht genug Tränke vorhanden!')), -8 => array('type' => 'error', 'message' => _('Fehler beim Anwenden des Trankes!')), -7 => array('type' => 'error', 'message' => _('Fehler beim Schreiben in die Datenbank.')), -6 => array('type' => 'error', 'message' => _('Der Held existiert bereits.')), -5 => array('type' => 'error', 'message' => _('Maximallevel des Skills erreicht.')), -4 => array('type' => 'notice', 'message' => _('Fehler beim Abbrechen der Wiederbelebung.')), -3 => array('type' => 'error', 'message' => _('Nicht genug Rohstoffe zum Wiederbeleben.')), -2 => array('type' => 'error', 'message' => _('Der Held wird bereits wiederbelebt.')), -1 => array('type' => 'error', 'message' => _('Dafür sind nicht genug Talentpunkte vorhanden.')), 0 => array('type' => 'error', 'message' => _('Euch steht noch kein Held zur Verfügung.')), 1 => array('type' => 'success', 'message' => _('Euer Held hat eine neue Fähigkeit erlernt.')), 2 => array('type' => 'notice', 'message' => _('Die Wiederbelebung eures Helden hat begonnen.')), 3 => array('type' => 'success', 'message' => _('Euer Held wurde erstellt.')), 4 => array('type' => 'notice', 'message' => _('Wählt mit Bedacht, dies lässt sich womöglich nicht mehr rückgängig machen.')), 5 => array('type' => 'success', 'message' => _('Der Trank hat seine Wirkung entfaltet. Die Lebenspunkte wurden erhöht.')), 6 => array('type' => 'success', 'message' => _('Der Trank des Vergessens hat Wirkung gezeigt. Der Held ist nun wieder unerfahren.')), 7 => array('type' => 'success', 'message' => _('Euer Held hat das nächste Level erreicht!')), 8 => array('type' => 'success', 'message' => _('Eurem Helden wurden expValue Erfahrungspunkte gutgeschrieben.')), 9 => array('type' => 'success', 'message' => _('Die Wiederbelebung wurde erfolgreich abgebrochen.')), 10 => array('type' => 'success', 'message' => _('Heldentyp erfolgreich gewechselt!')), 11 => array('type' => 'success', 'message' => _('Dein Held hat eine neue Fähigkeit erlernt!')));
    // create new hero
    $action = Request::getVar('action', '');
    $newHeroID = Request::getVar('id', '');
    if ($action == "createHero") {
        if (isset($GLOBALS['heroTypesList'][$newHeroID])) {
            $messageID = createNewHero($GLOBALS['heroTypesList'][$newHeroID]['heroTypeID'], $playerID, $caveID);
        }
    }
    $hero = getHeroByPlayer($playerID);
    $showTypesList = false;
    $changeType = false;
    if ($hero['heroTypeID'] == 1000) {
        $hero = null;
        $changeType = true;
        $showTypesList = true;
    }
    if ($hero != null) {
        $showLevelUp = false;
        $ritual = getRitual($hero);
        $resource['duration'] = $ritual['duration'];
        $cave = getCaveSecure($caveID, $playerID);
        foreach ($GLOBALS['resourceTypeList'] as $key) {
            $dbFieldName = $key->dbFieldName;
            if (!isset($ritual[$dbFieldName])) {
                continue;
            }
            $enough = $ritual[$dbFieldName] <= $cave[$dbFieldName];
            $tmp = array('enough' => $enough, 'value' => $ritual[$dbFieldName], 'missing' => $ritual[$dbFieldName] - $cave[$dbFieldName], 'dbFieldName' => $dbFieldName, 'name' => $key->name);
            $resource[$key->dbFieldName] = $tmp;
        }
        $action = Request::getVar('action', '');
        switch ($action) {
            case 'reincarnate':
                if ($hero['isAlive'] == 1) {
                    $messageID = -17;
                    break;
                }
                if (checkEventHeroExists($playerID)) {
                    $messageID = -2;
                } else {
                    $messageID = createRitual($caveID, $playerID, $resource, $hero, $ownCaves);
                }
                break;
            case 'cancelOrder':
                if (checkEventHeroExists($playerID)) {
                    $messageID = hero_cancelOrder();
                }
                break;
            case 'skill':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                if ($hero['tpFree'] >= 1) {
                    $skill = Request::getVar('skill', '');
                    switch ($skill) {
                        case 'force':
                            //typ='force';
                            if ($hero['forceLvl'] < 10) {
                                if (skillForce($playerID, $hero)) {
                                    $messageID = 1;
                                }
                                break;
                            }
                            $messageID = -5;
                            break;
                        case 'maxHP':
                            //typ='maxHP';
                            if ($hero['maxHpLvl'] < 10) {
                                if (skillMaxHp($playerID, $hero)) {
                                    $messageID = 1;
                                } else {
                                    $messageID = -5;
                                }
                                break;
                            }
                            $messageID = -5;
                            break;
                        case 'regHP':
                            //typ='regHP';
                            if ($hero['regHpLvl'] < 10) {
                                if (skillRegHp($playerID, $hero)) {
                                    $messageID = 1;
                                } else {
                                    $messageID = -5;
                                }
                                break;
                            }
                            $messageID = -5;
                            break;
                    }
                }
                break;
            case 'skill_ability':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                if ($hero['tpFree'] >= 1) {
                    if ($skillID = Request::getVar('skillID', '')) {
                        $messageID = hero_skillAbility($skillID, $hero);
                    }
                }
                break;
            case 'lvlUp':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                $messageID = hero_levelUp($hero);
                break;
            case 'immolateResources':
                $value = Request::getVar('value', array('' => ''));
                $resultArray = hero_immolateResources($value, $caveID, $ownCaves);
                $messageID = $resultArray['messageID'];
                // set exp value in message
                if ($resultArray['value'] > 0) {
                    $messageText[$messageID]['message'] = str_replace('expValue', $resultArray['value'], $messageText[$messageID]['message']);
                }
                break;
            case 'usePotion':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                $potionID = Request::getVar('potionID', -1);
                $value = Request::getVar('value', 0);
                if ($potionID == -1) {
                    $messageID = -8;
                    break;
                }
                if ($value < 0) {
                    $messageID = -8;
                    break;
                }
                $messageID = hero_usePotion($potionID, $value);
                if ($messageID == 6) {
                    $hero = null;
                    $showTypesList = true;
                    $changeType = true;
                }
                break;
        }
        $queue = getHeroQueue($playerID);
        $player = getPlayerByID($playerID);
        $potions = array();
        foreach ($GLOBALS['potionTypeList'] as $potionID => $potion) {
            if ($player[$potion->dbFieldName] > 0) {
                $potion->value = $player[$potion->dbFieldName];
                $potions[] = $potion;
            }
        }
    } elseif ($changeType) {
        if (Request::getVar('action', '') == 'changeType') {
            $messageID = hero_changeType(Request::getVar('typeID', -1));
            $showTypesList = false;
            $hero = getHeroByPlayer($playerID);
        }
    } else {
        $player = getPlayerByID($playerID);
        if ($player['heroism'] >= 1) {
            $messageID = 4;
            $newhero = true;
        } else {
            $messageID = 0;
        }
    }
    /****************************************************************************************************
     *
     * Übergeben ans Template
     *
     ****************************************************************************************************/
    $template->addVars(array('status_msg' => isset($messageID) ? $messageText[$messageID] : ''));
    if (isset($queue) && $queue) {
        $template->addVars(array('quene_show' => true, 'quene_finish' => time_formatDatetime($queue['end'])));
    }
    if ($hero != null) {
        $hero = getHeroByPlayer($playerID);
        if ($hero['expLeft'] <= 0) {
            $showLevelUp = true;
        }
        if ($hero['healPoints'] <= 0.2 * $hero['maxHealPoints']) {
            $hero['HPbar'] = 'error';
        } else {
            $hero['HPbar'] = 'success';
        }
        $template->addVars(array('hero' => $hero, 'showLevelUp' => isset($showLevelUp) ? $showLevelUp : '', 'delay' => time_formatDuration($ritual['duration']), 'ritual' => $ritual, 'resource' => $resource, 'resourceTypeList' => $GLOBALS['resourceTypeList']));
    }
    if ($newhero) {
        $template->addVars(array('newhero' => $newhero, 'heroTypesList' => $GLOBALS['heroTypesList']));
    }
    if ($showTypesList) {
        $template->addVars(array('changeType' => $changeType, 'heroTypesList' => $GLOBALS['heroTypesList']));
    }
    $showImmolation = false;
    if ($ownCaves[$caveID]['hero']) {
        $showImmolation = true;
    }
    $template->addVar('showImmolation', $showImmolation);
    if (isset($potions) && $potions) {
        $template->addVar('potions', $potions);
    }
    if ($GLOBALS['heroSkillTypeList']) {
        $skills = array();
        foreach ($GLOBALS['heroSkillTypeList'] as $skillID => $skill) {
            // calculate skill effect
            foreach ($skill['effects'] as $effect_dbFieldName => $effect) {
                foreach ($GLOBALS['effectTypeList'] as $eff) {
                    if ($eff->dbFieldName == $effect_dbFieldName) {
                        $name = $eff->name;
                        break;
                    }
                }
                $skill['effect_values'][] = $name . ": " . $skill['skillFactor'] * $hero['forceLvl'];
            }
            // filter skills by hero type
            foreach ($skill['requiredType'] as $rt) {
                if ($rt == $hero['id']) {
                    $skills[] = $skill;
                }
            }
        }
        // check if send button is disabled
        foreach ($skills as $skillID => $skill) {
            if ($hero[$skill['dbFieldName']] || $skill['costTP'] > $hero['tpFree'] || $skill['requiredLevel'] > $hero['lvl']) {
                $skills[$skillID]['disableButton'] = true;
            }
            if ($hero[$skill['dbFieldName']]) {
                $skills[$skillID]['showEffects'] = true;
            }
        }
        $template->addVar('skills', $skills);
    }
}
Beispiel #19
0
/**
 *
 */
function externals_builder($caveID, &$cave)
{
    global $config, $db, $params, $buildingTypeList, $defenseSystemTypeList, $resourceTypeList, $unitTypeList;
    // process a cancel-order request
    if (isset($params->POST->eventID)) {
        $message = externals_cancelOrder($params->POST->eventID, $caveID, $db);
        // process a demolish request
    } else {
        if (isset($params->POST->breakDownConfirm)) {
            $message = externals_performDemolishing($params->POST->externalID, $caveID, $cave, $db);
            $reload = 1;
            // process an order request
        } else {
            if (isset($params->POST->externalID)) {
                check_timestamp($params->POST->tstamp);
                $message = externals_performOrder($params->POST->externalID, $caveID, $cave, $db);
                $reload = 1;
            }
        }
    }
    // refresh cave data
    if ($reload) {
        $r = getCaveSecure($caveID, $params->SESSION->player->playerID);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $cave = $r->nextRow();
    }
    // get this cave's queue
    $queue = externals_getQueue($params->SESSION->player->playerID, $caveID);
    // open template
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'externalBuilder.ihtml');
    // show special messages
    if (isset($message)) {
        tmpl_set($template, '/MESSAGE/message', $message);
    }
    // show the external table
    for ($i = 0; $i < sizeof($defenseSystemTypeList); $i++) {
        $external = $defenseSystemTypeList[$i];
        $maxLevel = round(eval('return ' . formula_parseToPHP("{$external->maxLevel};", '$cave')));
        $notenough = FALSE;
        $result = rules_checkDependencies($external, $cave);
        // if all requirements are met, but the maxLevel is 0, treat it like a non-buildable
        if ($maxLevel <= 0 && $result === TRUE) {
            $result = $cave[$external->dbFieldName] ? _('Max. Stufe: 0') : FALSE;
        }
        if ($result === TRUE) {
            tmpl_iterate($template, 'DEFENSESYSTEM');
            tmpl_set($template, "DEFENSESYSTEM/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'DEFENSESYSTEM', array('name' => $external->name, 'dbFieldName' => $external->dbFieldName, 'externalID' => $i, 'size' => "0" + $cave[$external->dbFieldName], 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($external->productionTimeFunction . ";", '$cave')) * DEFENSESYSTEM_TIME_BASE_FACTOR)));
            // iterate ressourcecosts
            foreach ($external->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$cave')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/RESSOURCECOST");
                    if ($cave[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($external->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$cave')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/UNITCOST");
                    if ($cave[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/UNITCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            // iterate buildingcosts
            foreach ($external->buildingProductionCost as $buildingID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$cave')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/BUILDINGCOST");
                    if ($cave[$buildingTypeList[$buildingID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/name", $buildingTypeList[$buildingID]->name);
                }
            }
            // iterate externalcosts
            foreach ($external->externalProductionCost as $externalID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$cave')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/EXTERNALCOST");
                    if ($cave[$defenseSystemTypeList[$externalID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/name", $defenseSystemTypeList[$externalID]->name);
                }
            }
            // show the break down link
            if ($cave[$external->dbFieldName]) {
                tmpl_set($template, 'DEFENSESYSTEM/BREAK_DOWN_LINK', array('externalID' => $external->defenseSystemID));
            }
            // do not show order link
            if ($queue) {
                tmpl_set($template, 'DEFENSESYSTEM/BUILD_LINK_NO/message', _('Ausbau im Gange'));
            } else {
                if ($notenough && $maxLevel > $cave[$external->dbFieldName]) {
                    tmpl_set($template, 'DEFENSESYSTEM/BUILD_LINK_NO/message', _('Zu wenig Rohstoffe'));
                    // show order link
                } else {
                    if ($maxLevel > $cave[$external->dbFieldName]) {
                        tmpl_set($template, 'DEFENSESYSTEM/BUILD_LINK', array('externalID' => $external->defenseSystemID, 'tstamp' => time()));
                        // maxlvl reached
                    } else {
                        tmpl_set($template, '/DEFENSESYSTEM/BUILD_LINK_NO/message', _('Max. Stufe'));
                    }
                }
            }
            // can't build but already in cave
        } else {
            if ($cave[$external->dbFieldName]) {
                tmpl_iterate($template, '/UNWANTEDDEFENSESYSTEMS/DEFENSESYSTEM');
                tmpl_set($template, '/UNWANTEDDEFENSESYSTEMS/DEFENSESYSTEM', array('alternate' => $count_unwanted++ % 2 ? "" : "alternate", 'externalID' => $i, 'size' => $cave[$external->dbFieldName], 'dbFieldName' => $external->dbFieldName, 'name' => $external->name));
                // if building not impossible, show dependencies
                if ($result !== FALSE) {
                    tmpl_set($template, '/UNWANTEDDEFENSESYSTEMS/DEFENSESYSTEM/dependencies', $result);
                }
                // building not impossible, but DONT show dependencies
            } else {
                if ($result !== FALSE && !$external->nodocumentation) {
                    tmpl_iterate($template, '/UNQUALIFIEDDEFENSESYSTEMS/DEFENSESYSTEM');
                    tmpl_set($template, '/UNQUALIFIEDDEFENSESYSTEMS/DEFENSESYSTEM', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'externalID' => $i, 'name' => $external->name, 'dbFieldName' => $external->dbFieldName, 'dependencies' => $result));
                }
            }
        }
    }
    // queue
    if ($queue) {
        $row = $queue->nextRow();
        tmpl_set($template, 'DEFENSESYSTEM_QUEUE', array('name' => $defenseSystemTypeList[$row['defenseSystemID']]->name, 'size' => $cave[$defenseSystemTypeList[$row['defenseSystemID']]->dbFieldName] + 1, 'finish' => time_formatDatetime($row['end']), 'eventID' => $row['event_defenseSystemID']));
    }
    tmpl_set($template, array('rules_path' => RULES_PATH));
    return tmpl_parse($template);
}
function defenseSystem_getDefenseSystemDetail($caveID, &$details)
{
    global $buildingTypeList, $defenseSystemTypeList, $resourceTypeList, $unitTypeList, $config, $params, $db;
    // messages
    $messageText = array(0 => "Der Arbeitsauftrag wurde erfolgreich gestoppt.", 1 => "Es konnte kein Arbeitsauftrag gestoppt werden.", 2 => "Der Auftrag konnte nicht erteilt werden. Es fehlen die " . "notwendigen Voraussetzungen.", 3 => "Der Auftrag wurde erteilt", 5 => "Das Geb&auml;ude wurde erfolgreich abgerissen", 6 => "Das Geb&auml;ude konnte nicht abgerissen werden", 7 => "Sie haben von der Sorte gar keine Geb&auml;ude");
    // proccess a cancel-order request
    if (isset($params->POST->eventID)) {
        $messageID = defenseSystem_processOrderCancel($params->POST->eventID, $caveID, $db);
    }
    // proccess a tore down or new order request
    if (isset($params->POST->breakDownConfirm)) {
        $messageID = defenseSystem_breakDown($params->POST->defenseSystemID, $caveID, $details, $db);
        $reload = 1;
    } else {
        if (isset($params->POST->defenseSystemID)) {
            check_timestamp($params->POST->tstamp);
            $messageID = defenseSystem_processOrder($params->POST->defenseSystemID, $caveID, $details, $db);
            $reload = 1;
        }
    }
    if ($reload) {
        // this isn't that elegant...
        $r = getCaveSecure($caveID, $params->SESSION->user['playerID']);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $details = $r->nextRow();
    }
    $queue = defenseSystem_getDefenseSystemQueueForCave($params->SESSION->user['playerID'], $caveID);
    $template = @tmpl_open("./templates/" . $config->template_paths[$params->SESSION->user['template']] . "/fortification.ihtml");
    // Show a special message
    if (isset($messageID)) {
        tmpl_set($template, '/MESSAGE/message', $messageText[$messageID]);
    }
    // Show the defenseSystem table
    for ($i = 0; $i < sizeof($defenseSystemTypeList); $i++) {
        $notenough = FALSE;
        $defenseSystem = $defenseSystemTypeList[$i];
        // the current building
        $maxLevel = round(eval('return ' . formula_parseToPHP("{$defenseSystem->maxLevel};", '$details')));
        $result = rules_checkDependencies($defenseSystem, $details);
        // if all requirements are met but the maxLevel is 0,
        // treat it like a non-buildable
        if ($maxLevel <= 0 && $result === TRUE) {
            $result = $details[$defenseSystem->dbFieldName] ? 'Max. Stufe: 0' : FALSE;
        }
        if ($result === TRUE) {
            tmpl_iterate($template, 'DEFENSESYSTEM');
            tmpl_set($template, "DEFENSESYSTEM/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'DEFENSESYSTEM', array('name' => $defenseSystem->name, 'dbFieldName' => $defenseSystem->dbFieldName, 'defenseSystemID' => $i, 'modus' => DEFENSESYSTEM_DETAIL, 'caveID' => $caveID, 'maxlevel' => $maxLevel, 'size' => "0" + $details[$defenseSystem->dbFieldName], 'time' => time_formatDuration(eval('return ' . formula_parseToPHP($defenseSystem->productionTimeFunction . ";", '$details')) * DEFENSESYSTEM_TIME_BASE_FACTOR)));
            // iterate ressourcecosts
            foreach ($defenseSystem->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/RESSOURCECOST");
                    if ($details[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "DEFENSESYSTEM/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($defenseSystem->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/UNITCOST");
                    if ($details[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/UNITCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            // iterate buildingcosts
            foreach ($defenseSystem->buildingProductionCost as $buildingID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/BUILDINGCOST");
                    if ($details[$buildingTypeList[$buildingID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/BUILDINGCOST/name", $buildingTypeList[$buildingID]->name);
                }
            }
            // iterate externalcosts
            foreach ($defenseSystem->externalProductionCost as $externalID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "DEFENSESYSTEM/EXTERNALCOST");
                    if ($details[$defenseSystemTypeList[$externalID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/LESS/value", $cost);
                        $notenough = TRUE;
                    }
                    tmpl_set($template, "DEFENSESYSTEM/EXTERNALCOST/name", $defenseSystemTypeList[$externalID]->name);
                }
            }
            // show the break down link
            if ($details[$defenseSystem->dbFieldName]) {
                tmpl_set($template, 'DEFENSESYSTEM/BREAK_DOWN_LINK', array('action' => DEFENSESYSTEM_BREAK_DOWN, 'defenseSystemID' => $defenseSystem->defenseSystemID, 'caveID' => $caveID));
            }
            // show the improvement link ?!
            if ($queue) {
                tmpl_set($template, 'DEFENSESYSTEM/BUILD_LINK_NO/message', "Ausbau im Gange");
            } else {
                if ($notenough && $maxLevel > $details[$defenseSystem->dbFieldName]) {
                    tmpl_set($template, 'DEFENSESYSTEM/BUILD_LINK_NO/message', "");
                } else {
                    if ($maxLevel > $details[$defenseSystem->dbFieldName]) {
                        tmpl_set($template, 'DEFENSESYSTEM/BUILD_LINK', array('action' => DEFENSESYSTEM, 'defenseSystemID' => $defenseSystem->defenseSystemID, 'caveID' => $caveID, 'tstamp' => "" . time()));
                    } else {
                        tmpl_set($template, '/DEFENSESYSTEM/BUILD_LINK_NO/message', "Max. Stufe");
                    }
                }
            }
        } else {
            if ($details[$defenseSystem->dbFieldName]) {
                tmpl_iterate($template, '/UNWANTEDDEFENSESYSTEMS/DEFENSESYSTEM');
                tmpl_set($template, '/UNWANTEDDEFENSESYSTEMS/DEFENSESYSTEM', array('alternate' => $count_unwanted++ % 2 ? "" : "alternate", 'modus' => DEFENSESYSTEM_DETAIL, 'defenseSystemID' => $i, 'size' => $details[$defenseSystem->dbFieldName], 'dbFieldName' => $defenseSystem->dbFieldName, 'name' => $defenseSystem->name, 'action' => DEFENSESYSTEM_BREAK_DOWN));
                if ($result !== FALSE) {
                    tmpl_set($template, '/UNWANTEDDEFENSESYSTEMS/DEFENSESYSTEM/dependencies', $result);
                }
            } else {
                if ($params->SESSION->user['show_unqualified'] && $result !== FALSE && !$defenseSystem->nodocumentation) {
                    tmpl_iterate($template, '/UNQUALIFIEDDEFENSESYSTEMS/DEFENSESYSTEM');
                    tmpl_set($template, '/UNQUALIFIEDDEFENSESYSTEMS/DEFENSESYSTEM', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'modus' => DEFENSESYSTEM_DETAIL, 'defenseSystemID' => $i, 'name' => $defenseSystem->name, 'dbFieldName' => $defenseSystem->dbFieldName, 'dependencies' => $result));
                }
            }
        }
    }
    // Show the building queue
    if ($queue) {
        $row = $queue->nextRow();
        tmpl_set($template, 'DEFENSESYSTEM_QUEUE', array('name' => $defenseSystemTypeList[$row['defenseSystemID']]->name, 'size' => $details[$defenseSystemTypeList[$row['defenseSystemID']]->dbFieldName] + 1, 'finish' => date("d.m.Y H:i:s", time_timestampToTime($row['event_end'])), 'action' => DEFENSESYSTEM, 'eventID' => $row['event_defenseSystemID'], 'caveID' => $caveID));
    }
    return tmpl_parse($template);
}