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)); }
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äude wurde erfolgreich abgerissen", 6 => "Das Gebäude konnte nicht abgerissen werden", 7 => "Sie haben von der Sorte gar keine Gebäude", 8 => "Sie können derzeit kein Gebä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); }