function determineCoordsFromParameters($caveData, $mapSize) { // default Werte: Koordinaten of the given caveData (that is the data of the presently selected own cave) $xCoord = $caveData['xCoord']; $yCoord = $caveData['yCoord']; $message = ''; // wenn in die Minimap geklickt wurde, zoome hinein if (($minimap_x = Request::getVar('minimap_x', 0)) && ($minimap_y = Request::getVar('minimap_y', 0)) && ($scaling = Request::getVar('scaling', 0)) !== 0) { $xCoord = Floor($minimap_x * 100 / $scaling) + $mapSize['minX']; $yCoord = Floor($minimap_y * 100 / $scaling) + $mapSize['minY']; } else { if ($caveName = Request::getVar('caveName', '')) { $coords = getCaveByName($caveName); if (!$coords['xCoord']) { $message = sprintf(_('Die Höhle mit dem Namen: "%s" konnte nicht gefunden werden!'), $caveName); } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = sprintf(_('Die Höhle mit dem Namen: "%s" befindet sich in (%d|%d).'), $caveName, $xCoord, $yCoord); } } else { if (($targetCaveID = Request::getVar('targetCaveID', 0)) !== 0) { $coords = getCaveByID($targetCaveID); if ($coords === null) { $message = sprintf(_('Die Höhle mit der ID: "%d" konnte nicht gefunden werden!'), $targetCaveID); } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = sprintf(_('Die Höhle mit der ID: "%d" befindet sich in (%d|%d).'), $targetCaveID, $xCoord, $yCoord); } } else { if (Request::getVar('xCoord', 0) && Request::getVar('yCoord', 0)) { $xCoord = Request::getVar('xCoord', 0); $yCoord = Request::getVar('yCoord', 0); } } } } // Koordinaten begrenzen if ($xCoord < $mapSize['minX']) { $xCoord = $mapSize['minX']; } if ($yCoord < $mapSize['minY']) { $yCoord = $mapSize['minY']; } if ($xCoord > $mapSize['maxX']) { $xCoord = $mapSize['maxX']; } if ($yCoord > $mapSize['maxY']) { $yCoord = $mapSize['maxY']; } return array('xCoord' => $xCoord, 'yCoord' => $yCoord, 'message' => $message); }
function getCaveMapContent($caves, $caveID) { global $params, $config, $terrainList; $caveData = $caves[$caveID]; $message = ''; // template öffnen $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'map.ihtml'); // Grundparameter setzen tmpl_set($template, 'modus', MAP); // default Werte: Koordinaten dieser Höhle $xCoord = $caveData['xCoord']; $yCoord = $caveData['yCoord']; // Größe der Karte wird benötigt $mapSize = getMapSize(); // wenn in die Minimap geklickt wurde, zoome hinein if (isset($params->POST->minimap_x) && isset($params->POST->minimap_y) && $params->POST->scaling != 0) { $xCoord = Floor($params->POST->minimap_x * 100 / $params->POST->scaling) + $mapSize['minX']; $yCoord = Floor($params->POST->minimap_y * 100 / $params->POST->scaling) + $mapSize['minY']; } else { if (isset($params->POST->caveName)) { $coords = getCaveByName($params->POST->caveName); if (sizeof($coords) == 0) { $message = sprintf(_('Die Höhle mit dem Namen: "%s" konnte nicht gefunden werden!'), $params->POST->caveName); } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = sprintf(_('Die Höhle mit dem Namen: "%s" befindet sich in (%d|%d).'), $params->POST->caveName, $xCoord, $yCoord); } } else { if (isset($params->POST->targetCaveID)) { $coords = getCaveByID($params->POST->targetCaveID); if ($coords === null) { $message = sprintf(_('Die Höhle mit der ID: "%d" konnte nicht gefunden werden!'), $params->POST->targetCaveID); } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = sprintf(_('Die Höhle mit der ID: "%d" befindet sich in (%d|%d).'), $params->POST->targetCaveID, $xCoord, $yCoord); } } else { if (isset($params->POST->xCoord) && isset($params->POST->yCoord)) { $xCoord = $params->POST->xCoord; $yCoord = $params->POST->yCoord; } } } } if (isset($messageID)) { tmpl_set($template, '/MESSAGE/message', $message); } // Koordinaten begrenzen if ($xCoord < $mapSize['minX']) { $xCoord = $mapSize['minX']; } if ($yCoord < $mapSize['minY']) { $yCoord = $mapSize['minY']; } if ($xCoord > $mapSize['maxX']) { $xCoord = $mapSize['maxX']; } if ($yCoord > $mapSize['maxY']) { $yCoord = $mapSize['maxY']; } // width und height anpassen $MAP_WIDTH = min(MAP_WIDTH, $mapSize['maxX'] - $mapSize['minX'] + 1); $MAP_HEIGHT = min(MAP_HEIGHT, $mapSize['maxY'] - $mapSize['minY'] + 1); // Nun befinden sich in $xCoord und $yCoord die gesuchten Koordinaten. // ermittele nun die linke obere Ecke des Bildausschnittes $minX = min(max($xCoord - intval($MAP_WIDTH / 2), $mapSize['minX']), $mapSize['maxX'] - $MAP_WIDTH + 1); $minY = min(max($yCoord - intval($MAP_HEIGHT / 2), $mapSize['minY']), $mapSize['maxY'] - $MAP_HEIGHT + 1); // ermittele nun die rechte untere Ecke des Bildausschnittes $maxX = $minX + $MAP_WIDTH - 1; $maxY = $minY + $MAP_HEIGHT - 1; // get the map details $caveDetails = getCaveDetailsByCoords($minX, $minY, $maxX, $maxY); $map = array(); foreach ($caveDetails as $cave) { $cell = array('terrain' => 'terrain' . $cave['terrain'], 'alt' => "{$cave['cavename']} - ({$cave['xCoord']}|{$cave['yCoord']}) - {$cave['region']}", 'link' => "modus=map_detail&targetCaveID={$cave['caveID']}"); // unbewohnte Höhle if ($cave['playerID'] == 0) { // als Frei! zeigen if ($cave['takeoverable'] == 1) { $text = _('Frei!'); $file = "icon_cave_empty"; // als Einöde zeigen } else { $text = _('Einöde'); $file = "icon_waste"; } // bewohnte Höhle } else { // eigene Höhle if ($cave['playerID'] == $params->SESSION->player->playerID) { $file = "icon_cave_own"; } else { $file = "icon_cave_other"; } // mit Artefakt if ($cave['artefacts'] != 0 && ($cave['tribe'] != GOD_ALLY || $params->SESSION->player->tribe == GOD_ALLY)) { $file .= "_artefact"; } // link zum Tribe einfügen $cell['link_tribe'] = "modus=tribe_detail&tribe=" . urlencode(unhtmlentities($cave['tribe'])); // Stamm abkürzen $decodedTribe = unhtmlentities($cave['tribe']); if (strlen($decodedTribe) > 10) { $cell['text_tribe'] = htmlentities(substr($decodedTribe, 0, 8)) . ".."; } else { $cell['text_tribe'] = $cave['tribe']; } // Besitzer $decodedOwner = unhtmlentities($cave['name']); if (strlen($decodedOwner) > 10) { $text = htmlentities(substr($decodedOwner, 0, 8)) . ".."; } else { $text = $cave['name']; } // übernehmbare Höhlen können gekennzeichnet werden if ($cave['secureCave'] != 1) { $cell['unsecure'] = array('dummy' => ''); } } $cell['file'] = $file; $cell['text'] = $text; // Wenn die Höhle ein Artefakt enthält und man berechtigt ist -> anzeigen if ($cave['artefacts'] != 0 && ($cave['tribe'] != GOD_ALLY || $params->SESSION->player->tribe == GOD_ALLY)) { $cell['artefacts'] = $cave['artefacts']; $cell['artefacts_text'] = sprintf(_('Artefakte: %d'), $cave['artefacts']); } $map[$cave['xCoord']][$cave['yCoord']] = $cell; } // Karte mit Beschriftungen ausgeben // über alle Zeilen for ($j = $minY - 1; $j <= $maxY + 1; ++$j) { tmpl_iterate($template, '/ROWS'); // über alle Spalten for ($i = $minX - 1; $i <= $maxX + 1; ++$i) { tmpl_iterate($template, '/ROWS/CELLS'); // leere Zellen if (($j == $minY - 1 || $j == $maxY + 1) && ($i == $minX - 1 || $i == $maxX + 1)) { tmpl_set($template, "/ROWS/CELLS", getCornerCell()); // x-Beschriftung } else { if ($j == $minY - 1 || $j == $maxY + 1) { tmpl_set($template, "/ROWS/CELLS", getLegendCell('x', $i)); // y-Beschriftung } else { if ($i == $minX - 1 || $i == $maxX + 1) { tmpl_set($template, "/ROWS/CELLS", getLegendCell('y', $j)); // Kartenzelle } else { tmpl_set($template, "/ROWS/CELLS", getMapCell($map, $i, $j)); } } } } } // Minimap $width = $mapSize['maxX'] - $mapSize['minX'] + 1; $height = $mapSize['maxY'] - $mapSize['minY'] + 1; // compute mapcenter coords $mcX = $minX + intval($MAP_WIDTH / 2); $mcY = $minY + intval($MAP_HEIGHT / 2); tmpl_set($template, "/MINIMAP", array('file' => "images/minimap.png.php?x=" . $xCoord . "&y=" . $yCoord, 'modus' => MAP, 'width' => intval($width * MINIMAP_SCALING / 100), 'height' => intval($height * MINIMAP_SCALING / 100), 'scaling' => MINIMAP_SCALING)); tmpl_set($template, '/O', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY)); tmpl_set($template, '/SO', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/S', array('modus' => MAP, 'x' => $mcX, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/SW', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/W', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY)); tmpl_set($template, '/NW', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY - $MAP_HEIGHT)); tmpl_set($template, '/N', array('modus' => MAP, 'x' => $mcX, 'y' => $mcY - $MAP_HEIGHT)); tmpl_set($template, '/NO', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY - $MAP_HEIGHT)); // 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); } } return tmpl_parse($template); }
function getCaveMapContent($caves, $caveID, $playerID) { global $params, $config, $terrainList; $caveData = $caves[$caveID]; $message = ''; // template öffnen $template = @tmpl_open('./templates/' . $config->template_paths[$params->SESSION->user['template']] . '/map.ihtml'); // Grundparameter setzen tmpl_set($template, 'modus', MAP); tmpl_set($template, 'cave_book_link', CAVE_BOOK); // ADDED by chris--- for cavebook // default Werte: Koordinaten dieser Höhle $xCoord = $caveData['xCoord']; $yCoord = $caveData['yCoord']; // Größe der Karte wird benötigt $mapSize = getMapSize(); // wenn in die Minimap geklickt wurde, zoome hinein if (!empty($params->POST->minimap_x) && !empty($params->POST->minimap_y) && $params->POST->scaling != 0) { $xCoord = Floor($params->POST->minimap_x * 100 / $params->POST->scaling) + $mapSize['minX']; $yCoord = Floor($params->POST->minimap_y * 100 / $params->POST->scaling) + $mapSize['minY']; } else { if (!empty($params->POST->caveName)) { $coords = getCaveByName($params->POST->caveName); if (sizeof($coords) == 0) { $message = 'Die Siedlung mit dem Namen: "' . $params->POST->caveName . '" konnte nicht gefunden werden!'; } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = 'Die Siedlung mit dem Namen: "' . $params->POST->caveName . '" befindet sich in (' . $xCoord . ' | ' . $yCoord . ').'; } } else { if (!empty($params->POST->targetCaveID)) { $coords = getCaveByID($params->POST->targetCaveID); if ($coords === null) { $message = 'Die Siedlung mit der ID: "' . $params->POST->targetCaveID . '" konnte nicht gefunden werden!'; } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = 'Die Siedlung mit der ID: "' . $params->POST->targetCaveID . '" befindet sich in (' . $xCoord . ' | ' . $yCoord . ').'; } } else { if (!empty($params->POST->xCoord) && !empty($params->POST->yCoord)) { $xCoord = $params->POST->xCoord; $yCoord = $params->POST->yCoord; } } } } if (isset($messageID)) { tmpl_set($template, '/MESSAGE/message', $message); } // Koordinaten begrenzen if ($xCoord < $mapSize['minX']) { $xCoord = $mapSize['minX']; } if ($yCoord < $mapSize['minY']) { $yCoord = $mapSize['minY']; } if ($xCoord > $mapSize['maxX']) { $xCoord = $mapSize['maxX']; } if ($yCoord > $mapSize['maxY']) { $yCoord = $mapSize['maxY']; } // width und height anpassen $MAP_WIDTH = min(MAP_WIDTH, $mapSize['maxX'] - $mapSize['minX'] + 1); $MAP_HEIGHT = min(MAP_HEIGHT, $mapSize['maxY'] - $mapSize['minY'] + 1); // Nun befinden sich in $xCoord und $yCoord die gesuchten Koordinaten. // ermittele nun die linke obere Ecke des Bildausschnittes $minX = min(max($xCoord - intval($MAP_WIDTH / 2), $mapSize['minX']), $mapSize['maxX'] - $MAP_WIDTH + 1); $minY = min(max($yCoord - intval($MAP_HEIGHT / 2), $mapSize['minY']), $mapSize['maxY'] - $MAP_HEIGHT + 1); // ermittele nun die rechte untere Ecke des Bildausschnittes $maxX = $minX + $MAP_WIDTH - 1; $maxY = $minY + $MAP_HEIGHT - 1; // get the map details $caveDetails = getCaveDetailsByCoords($minX, $minY, $maxX, $maxY); $map = array(); foreach ($caveDetails as $cave) { // ADDED by chris--- for Quests -------------------------------------------------------------------------------- global $db; if ($cave['quest_cave'] && !isCaveInvisibleToPlayer($cave['caveID'], $playerID, $db) && $cave['invisible_name'] != "") { $cave['cavename'] = $cave['invisible_name']; } // ------------------------------------------------------------------------------------------------------- $cell = array('terrain' => strtolower($terrainList[$cave['terrain']]['name']), 'alt' => "{$cave['cavename']} - ({$cave['xCoord']}|{$cave['yCoord']})", 'link' => "modus=" . MAP_DETAIL . "&targetCaveID={$cave['caveID']}"); // unbewohnte Höhle // ADDED by chris--- for Quests // ---------------------------------------------------------- // checking if this cave is a quest cave and if its visible to the player (than he knows the quest) // if he does not know the quest the cave is invisible if ($cave['quest_cave'] && isCaveInvisibleToPlayer($cave['caveID'], $playerID, $db)) { $cave['playerID'] = 0; } // ---------------------------------------------------------- if ($cave['playerID'] == 0) { // als Frei! zeigen, wenn man missionieren kann if (sizeof($caves) < $params->SESSION->user['takeover_max_caves'] && $cave['takeoverable'] == 1) { $text = "Frei!"; $file = "icon_cave_empty"; // als Einöde zeigen, wenn man nicht mehr missionieren kann } else { $text = "Einöde"; $file = "icon_waste"; } // oder Dunkelheit zeigen? if ($cave['terrain'] == 4 && $text != "Frei!") { $text = "verdorrtes Land"; $file = "icon_waste"; } // bewohnte Höhle } else { // eigene Höhle if ($cave['playerID'] == $params->SESSION->user['playerID']) { $file = "icon_cave_own"; } else { $file = "icon_cave_other"; if ($cave['quest_cave']) { $file = "icon_cave_quest"; } } // mit Artefakt if ($cave['artefacts'] != 0 && ($cave['tribe'] != GOD_ALLY || $params->SESSION->user['tribe'] == GOD_ALLY)) { $file .= "_artefact"; } // link zum Tribe einfügen $cell['link_tribe'] = "modus=" . TRIBE_DETAIL . "&tribe=" . urlencode(unhtmlentities($cave['tribe'])); // Clan abkürzen $decodedTribe = unhtmlentities($cave['tribe']); if (strlen($decodedTribe) > 10) { $cell['text_tribe'] = htmlentities(substr($decodedTribe, 0, 8)) . ".."; } else { $cell['text_tribe'] = $cave['tribe']; } // Besitzer $decodedOwner = unhtmlentities($cave['name']); if (strlen($decodedOwner) > 10) { $text = htmlentities(substr($decodedOwner, 0, 8)) . ".."; } else { $text = $cave['name']; } // übernehmbare Höhlen können gekennzeichnet werden if ($cave['secureCave'] != 1) { $cell['unsecure'] = array('dummy' => ''); } } $cell['file'] = $file; $cell['text'] = $text; // Wenn die Höhle ein Artefakt enthält und man berechtigt ist -> anzeigen if ($cave['artefacts'] != 0 && ($cave['tribe'] != GOD_ALLY || $params->SESSION->user['tribe'] == GOD_ALLY)) { $cell['artefacts'] = $cave['artefacts']; $cell['artefacts_text'] = "Artefakte: {$cave['artefacts']}"; } $map[$cave['xCoord']][$cave['yCoord']] = $cell; } // Karte mit Beschriftungen ausgeben // über alle Zeilen for ($j = $minY - 1; $j <= $maxY + 1; ++$j) { tmpl_iterate($template, '/ROWS'); // über alle Spalten for ($i = $minX - 1; $i <= $maxX + 1; ++$i) { tmpl_iterate($template, '/ROWS/CELLS'); // leere Zellen if (($j == $minY - 1 || $j == $maxY + 1) && ($i == $minX - 1 || $i == $maxX + 1)) { tmpl_set($template, "/ROWS/CELLS", getEmptyCell()); // x-Beschriftung } else { if ($j == $minY - 1 || $j == $maxY + 1) { tmpl_set($template, "/ROWS/CELLS", getLegendCell('x', $i)); // y-Beschriftung } else { if ($i == $minX - 1 || $i == $maxX + 1) { tmpl_set($template, "/ROWS/CELLS", getLegendCell('y', $j)); // Kartenzelle } else { tmpl_set($template, "/ROWS/CELLS", getMapCell($map, $i, $j)); } } } } } // ADDED by chris--- for cavebook: // 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); } // Minimap $width = $mapSize['maxX'] - $mapSize['minX'] + 1; $height = $mapSize['maxY'] - $mapSize['minY'] + 1; // compute mapcenter coords $mcX = $minX + intval($MAP_WIDTH / 2); $mcY = $minY + intval($MAP_HEIGHT / 2); tmpl_set($template, "/MINIMAP", array('file' => "images/minimap.png.php?x=" . $xCoord . "&y=" . $yCoord, 'modus' => MAP, 'width' => intval($width * MINIMAP_SCALING / 100), 'height' => intval($height * MINIMAP_SCALING / 100), 'scaling' => MINIMAP_SCALING)); tmpl_set($template, '/O', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY)); tmpl_set($template, '/SO', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/S', array('modus' => MAP, 'x' => $mcX, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/SW', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/W', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY)); tmpl_set($template, '/NW', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY - $MAP_HEIGHT)); tmpl_set($template, '/N', array('modus' => MAP, 'x' => $mcX, 'y' => $mcY - $MAP_HEIGHT)); tmpl_set($template, '/NO', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY - $MAP_HEIGHT)); return tmpl_parse($template); }
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ä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 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önnen die Menge an Ressourcen nicht tragen!!"; } else { if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord, $db)) { $msg = "*#\$@*#\$%: Die Zielsiedlung steht unter Anfängerschutz. "; } else { if (beginner_isCaveProtectedByID($caveID, $db)) { $msg = "*#\$@*#\$%: Ihre Siedlung steht unter Anfängerschutz. " . "Sie kö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önnen diese Siedlung nicht übernehmen. " . "Sie ist gegen Übernahmen geschützt."; } else { if (FARMSCHUTZ_ACTIVE == 1 && ($params->POST->movementID == 3 || $params->POST->movementID == 6) && $farmschutz == 1) { $msg = "*#\$@*#\$%: Der Spieler steht unter Farmschutz. Sie kö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ß 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ä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ür diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfü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); }
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)); }
function addCaveBookmarkByName($name) { // check cave name $cave = getCaveByName($name); // no such cave if (!sizeof($cave)) { return CAVEBOOKMARKS_ERROR_NOSUCHCAVE; } return $this->addCaveBookmark($cave['caveID']); }
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); }
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); } } }
function getCaveMapContent() { global $params, $config, $terrainList; // template öffnen $template = tmpl_open('./templates/map.ihtml'); // Grundparameter setzen tmpl_set($template, 'modus', MAP); // Koordinaten eingegeben ? if (isset($params->xCoord) && isset($params->yCoord)) { $xCoord = $params->xCoord; $yCoord = $params->yCoord; } else { $xCoord = 1; $yCoord = 1; } // Größe der Karte wird benötigt $mapSize = getMapSize(); // wenn in die Minimap geklickt wurde, zoome hinein if (!empty($params->POST->minimap_x) && !empty($params->POST->minimap_y) && $params->POST->scaling != 0) { $xCoord = Floor($params->POST->minimap_x * 100 / $params->POST->scaling) + $mapSize['minX']; $yCoord = Floor($params->POST->minimap_y * 100 / $params->POST->scaling) + $mapSize['minY']; } else { if (!empty($params->POST->caveName)) { $coords = getCaveByName($params->POST->caveName); if (sizeof($coords) == 0) { $message = 'Die Höhle mit dem Namen: "' . $params->POST->caveName . '" konnte nicht gefunden werden!'; } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = 'Die Höhle mit dem Namen: "' . $params->POST->caveName . '" befindet sich in (' . $xCoord . ' | ' . $yCoord . ').'; } } else { if (!empty($params->POST->targetCaveID)) { $coords = getCaveByID($params->POST->targetCaveID); if ($coords === null) { $message = 'Die Höhle mit der ID: "' . $params->POST->targetCaveID . '" konnte nicht gefunden werden!'; } else { $xCoord = $coords['xCoord']; $yCoord = $coords['yCoord']; $message = 'Die Höhle mit der ID: "' . $params->POST->targetCaveID . '" befindet sich in (' . $xCoord . ' | ' . $yCoord . ').'; } } else { if (!empty($params->POST->xCoord) && !empty($params->POST->yCoord)) { $xCoord = $params->POST->xCoord; $yCoord = $params->POST->yCoord; } } } } if (isset($messageID)) { tmpl_set($template, '/MESSAGE/message', $message); } // Koordinaten begrenzen if ($xCoord < $mapSize['minX']) { $xCoord = $mapSize['minX']; } if ($yCoord < $mapSize['minY']) { $yCoord = $mapSize['minY']; } if ($xCoord > $mapSize['maxX']) { $xCoord = $mapSize['maxX']; } if ($yCoord > $mapSize['maxY']) { $yCoord = $mapSize['maxY']; } // width und height anpassen $mapwidth = isset($params->width) ? intval($params->width) : MAPWIDTH; $mapheight = isset($params->height) ? intval($params->height) : MAPHEIGHT; $MAP_WIDTH = min($mapwidth, $mapSize['maxX'] - $mapSize['minX'] + 1); $MAP_HEIGHT = min($mapheight, $mapSize['maxY'] - $mapSize['minY'] + 1); // Nun befinden sich in $xCoord und $yCoord die gesuchten Koordinaten. // ermittele nun die linke obere Ecke des Bildausschnittes $minX = min(max($xCoord - intval($MAP_WIDTH / 2), $mapSize['minX']), $mapSize['maxX'] - $MAP_WIDTH + 1); $minY = min(max($yCoord - intval($MAP_HEIGHT / 2), $mapSize['minY']), $mapSize['maxY'] - $MAP_HEIGHT + 1); // ermittele nun die rechte untere Ecke des Bildausschnittes $maxX = $minX + $MAP_WIDTH - 1; $maxY = $minY + $MAP_HEIGHT - 1; // get the map details $caveDetails = getCaveDetailsByCoords($minX, $minY, $maxX, $maxY); $map = array(); foreach ($caveDetails as $cave) { $cell = array('terrain' => strtolower($terrainList[$cave['terrain']]['name']), 'alt' => "{$cave['cavename']} - ({$cave['xCoord']}|{$cave['yCoord']})", 'link' => "modus=" . MAP_DETAIL . "&targetCaveID={$cave['caveID']}"); // unbewohnte Höhle if ($cave['playerID'] == 0) { // als Frei! zeigen, wenn man missionieren kann if (sizeof($caves) < $params->SESSION->user['takeover_max_caves'] && $cave['takeoverable'] == 1) { $text = "Frei!"; $file = "icon_cave_empty"; // als Einöde zeigen, wenn man nicht mehr missionieren kann } else { $text = "Einöde"; $file = "icon_waste"; } // bewohnte Höhle } else { // eigene Höhle if ($cave['playerID'] == $params->SESSION->user['playerID']) { $file = "icon_cave_own"; } else { $file = "icon_cave_other"; } // mit Artefakt if ($cave['artefacts'] != 0 && ($cave['tribe'] != GOD_ALLY || $params->SESSION->user['tribe'] == GOD_ALLY)) { $file .= "_artefact"; } // link zum Tribe einfügen $cell['link_tribe'] = "modus=" . TRIBE_DETAIL . "&tribe=" . urlencode(unhtmlentities($cave['tribe'])); // Stamm abkürzen $decodedTribe = unhtmlentities($cave['tribe']); if (strlen($decodedTribe) > 10) { $cell['text_tribe'] = htmlentities(substr($decodedTribe, 0, 8)) . ".."; } else { $cell['text_tribe'] = $cave['tribe']; } // Besitzer $decodedOwner = unhtmlentities($cave['name']); if (strlen($decodedOwner) > 10) { $text = htmlentities(substr($decodedOwner, 0, 8)) . ".."; } else { $text = $cave['name']; } // übernehmbare Höhlen können gekennzeichnet werden if ($cave['secureCave'] != 1) { $cell['unsecure'] = array('dummy' => ''); } } $cell['file'] = $file; $cell['text'] = $text; // Wenn die Höhle ein Artefakt enthält und man berechtigt ist -> anzeigen if ($cave['artefacts'] != 0 && ($cave['tribe'] != GOD_ALLY || $params->SESSION->user['tribe'] == GOD_ALLY)) { $cell['artefacts'] = $cave['artefacts']; $cell['artefacts_text'] = "Artefakte: {$cave['artefacts']}"; } $map[$cave['xCoord']][$cave['yCoord']] = $cave; } // Karte mit Beschriftungen ausgeben // über alle Zeilen for ($j = $minY - 1; $j <= $maxY + 1; ++$j) { tmpl_iterate($template, '/ROWS'); // über alle Spalten for ($i = $minX - 1; $i <= $maxX + 1; ++$i) { tmpl_iterate($template, '/ROWS/CELLS'); // leere Zellen if (($j == $minY - 1 || $j == $maxY + 1) && ($i == $minX - 1 || $i == $maxX + 1)) { tmpl_set($template, "/ROWS/CELLS", getEmptyCell()); // x-Beschriftung } else { if ($j == $minY - 1 || $j == $maxY + 1) { tmpl_set($template, "/ROWS/CELLS", getLegendCell('x', $i)); // y-Beschriftung } else { if ($i == $minX - 1 || $i == $maxX + 1) { tmpl_set($template, "/ROWS/CELLS", getLegendCell('y', $j)); // Kartenzelle } else { tmpl_set($template, "/ROWS/CELLS", getMapCell($map, $i, $j)); } } } } } $width = $mapSize['maxX'] - $mapSize['minX'] + 1; $height = $mapSize['maxY'] - $mapSize['minY'] + 1; // compute mapcenter coords $mcX = $minX + intval($MAP_WIDTH / 2); $mcY = $minY + intval($MAP_HEIGHT / 2); tmpl_set($template, "/MINIMAP", array('file' => "images/minimap.png.php?x=" . $xCoord . "&y=" . $yCoord, 'modus' => MAP, 'width' => intval($width * MINIMAP_SCALING / 100), 'height' => intval($height * MINIMAP_SCALING / 100), 'scaling' => MINIMAP_SCALING)); tmpl_set($template, '/O', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY)); tmpl_set($template, '/SO', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/S', array('modus' => MAP, 'x' => $mcX, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/SW', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY + $MAP_HEIGHT)); tmpl_set($template, '/W', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY)); tmpl_set($template, '/NW', array('modus' => MAP, 'x' => $mcX - $MAP_WIDTH, 'y' => $mcY - $MAP_HEIGHT)); tmpl_set($template, '/N', array('modus' => MAP, 'x' => $mcX, 'y' => $mcY - $MAP_HEIGHT)); tmpl_set($template, '/NO', array('modus' => MAP, 'x' => $mcX + $MAP_WIDTH, 'y' => $mcY - $MAP_HEIGHT)); return tmpl_parse($template); }
/** This function returns basic hero details * * @param caveID the current caveID * @param meineHöhlen all the data of all your caves */ function hero_getHeroDetail($caveID, $meineHoehlen) { // get configuration settings global $config; // get parameters from the page request global $params; // get db link global $db; global $resourceTypeList; // hide the top resource bar global $no_resource_flag; $no_resource_flag = true; // get current playerID by user $playerID = $params->SESSION->player->playerID; // get data from Helden-table by current user-playerID $result = getHeroByPlayer($playerID); // variables for bonuspoints $bonuspoints = $result['bonusPunkte']; // for bodypower $bodypower = $result['koerperKraft']; // and if hero is in tournament $hero_in_turnier = isHeroInTurnier($playerID); $hero_by_monster = isHeroInDuell($playerID); // set messages $boni_message = "Sie können " . $bonuspoints . " Bonuspunkte verteilen."; $flucht_message = "Setze die Fluchtgrenze"; $turnier_msng = "Schicke Helden zu einem der zur Zeit angebotenen Turniere"; $monster_msng = "Schicke Helden zu einem Monsterduell ..."; // Fluchtgrenze-parameter abfangen if (isset($params->POST->set_grenze)) { $flucht = $params->POST->flucht; if ($flucht < 0) { $flucht_message = "Fluchtgrenze kann nicht negativ sein, versuchen Sie sie neu zu setzen"; } else { if ($flucht > $bodypower) { $flucht_message = "Für die Fluchtgrenze sind nur Werte 0..K erlaubt. " . "Für Ihren Helden gilt K == " . $bodypower; } else { if (setRunAwayPoint($playerID, $flucht) == 1) { $result['fluchtGrenze'] = $flucht; } } } } // Held zum Monsterduell parameter abfangen if (isset($params->POST->monster)) { $xCoord = $params->POST->xCoord; $yCoord = $params->POST->yCoord; $cName = $params->POST->cName; $cNameExists = false; if (empty($xCoord) || empty($yCoord) and !empty($cName)) { $cave = getCaveByName($cName); if (sizeof($cave) != 0) { $xCoord = $cave['xCoord']; $yCoord = $cave['yCoord']; $cNameExists = true; } } if (empty($xCoord) || empty($yCoord) and empty($cName)) { $monster_msng = "Sie sollten die Koordinaten oder Name der Zielhöhle setzen," . " denn erst dann geht Held zum Monsterkampf ..."; } else { if (empty($xCoord) || empty($yCoord) and !empty($cName) and !$cNameExists) { $monster_msng = "Es existiert keine Höhle mit dem Namen '" . $cName . "' ! <br>" . "Gebe richtigen Namen der Höhle oder Koordinaten an und schicke " . "den Helden zum Monsterduell ..."; } else { if ($xCoord <= 0 || $yCoord <= 0) { $monster_msng = "Die Koordinaten der Höhlen in UGA-AGGA-Land können nicht negativ " . "und Null sein :-)<br>Setze richtige (positive :) Koordinaten " . "und schicke Helden zum Monsterduell ..."; } else { $monster_cave = letHeroFight($playerID, $xCoord, $yCoord); if ($monster_cave == -2) { $monster_msng = "Held konnet nicht (wieso auch immer) zu einem Monsterduell geschickt werden" . "<br>Versuche erneut die Zielkoordinaten einzugeben und" . "schicke den Helden zum Monsterduell ..."; } else { if ($monster_cave == -1) { $monster_msng = "Es existiert keine Höhle mit Koordinaten " . $xCoord . "/" . $yCoord . "<br>Setze existierende Koordinaten und schicke Helden zum Monsterduell ..."; } else { if ($monster_cave == 0) { $monster_msng = "Held ist bei einem Monsterduell"; $hero_by_monster = true; } } } } } } $choose_turnier = true; } // Held zum Turnier parameter abfangen if (isset($params->POST->turnier)) { $turnierID = $params->POST->turniere; $meingebot = 0; if (isset($params->POST->meinGebot)) { $meingebot = $params->POST->meinGebot; } if ($turnierID < 0) { $turnier_msng = "Wähle zuerst <b>einen Turnier</b> und gebe danach noch das Gebot ein"; } else { if ($meingebot < 0) { $turnier_msng = "Das Gebot kann nicht negativ sein. Wähle ein Turnier und gebe " . "das richtige Gebot ein"; } else { if ($meingebot == 0) { $turnier_msng = "Sie sollten schon was für die Teilnahme bieten"; } else { $play = letHeroPlay($caveID, $playerID, $turnierID, $meingebot); if ($play == -1) { $turnier_msng = "Held konnte nicht zu dem Turnier geschickt werden"; } else { if ($play == -2) { $turnier_msng = "Sie haben nicht genügend Rohstoffe um für diesen Turnier zu bieten"; } else { if ($play == 1) { $turnier_msng = "Held ist beim Turnier"; $hero_in_turnier = true; } } } } } } $choose_turnier = true; } // Held zurueck vom Turnier if (isset($params->POST->abmelden)) { $hero_in_turnier = letHeroGoHome($playerID); if (!$hero_in_turnier) { $turnier_msng = "<b>Ihr Held ist wieder da</b><br>Schicke Helden zu einem der zur Zeit angebotenen Turniere"; } $choose_turnier = true; } // Held zurueck vom Monsterduell if (isset($params->POST->umkehren)) { $hero_by_monster = letHeroTurnBack($playerID); if (!$hero_in_turnier) { $monster_msng = "<b>Ihr Held ist wieder da</b><br>Schicke Helden zu einem Monsterduell"; } $choose_turnier = true; } // bonus-parameter abfangen, boni vergeben if (isset($params->POST->set_boni)) { $a_bonus = 0 + $params->POST->A_bonus; $v_bonus = 0 + $params->POST->V_bonus; $m_bonus = 0 + $params->POST->M_bonus; $allSetPoints = $a_bonus + $v_bonus + $m_bonus; if ($a_bonus < 0 || $v_bonus < 0 || $m_bonus < 0) { $boni_message = "Negative Werte sind nicht erlaubt. Sie können immer noch " . $bonuspoints . " Bonuspunkte verteilen"; } else { if ($bonuspoints - $allSetPoints < 0) { $boni_message = "Zuviele Bonuspunkte verteilt. Sie können nur " . $bonuspoints . " Bonuspunkte verteilen"; } else { $boni = array('angriffsWert' => intval($a_bonus), 'verteidigungsWert' => intval($v_bonus), 'mentalKraft' => intval($m_bonus)); if (setBonusPoints($playerID, $boni, $allSetPoints) == 1) { $result['bonusPunkte'] = $bonuspoints = $bonuspoints - $allSetPoints; $result['angriffsWert'] = $result['angriffsWert'] + $a_bonus; $result['verteidigungsWert'] = $result['verteidigungsWert'] + $v_bonus; $result['mentalKraft'] = $result['mentalKraft'] + $m_bonus; $boni_message = "Sie können " . $bonuspoints . " Bonuspunkte verteilen."; } } } } /* **** CREATE HERO PAGE ***** *********************************************/ // get the template $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'hero_detail.ihtml'); // user has a hero if ($result) { // and hero wants to go to tournament if (isset($params->POST->choose_turnier)) { $choose_turnier = true; } // turnier if ($choose_turnier) { $no_resource_flag = false; if ($hero_in_turnier) { if (isset($params->POST->abmelden)) { $turnier_msng = "Zurückholen hat nicht geklappt (wieso auch immer)<br><b>Held ist beim Turnier</b>"; } else { $turnier_msng = "<b>Held ist beim Turnier</b>"; } tmpl_set($template, 'HERO/MESSAGE/message', $turnier_msng); tmpl_set($template, "HERO/ZUMTURNIER/BUTTON/button_value", "Held vom Turnier abmelden " . "(Ihr Gebot wird dabei verlorengehen)"); $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'abmelden', 'value' => 'true')); tmpl_set($template, 'HERO/ZUMTURNIER/BUTTON/PARAMS', $hidden); } else { if ($hero_by_monster) { if (isset($params->POST->umkehren)) { $turnier_msng = "Held umkehren hat nicht geklappt (wieso auch immer)<br><b>Held ist im Monsterduell</b>"; } else { $turnier_msng = "<b>Held ist in einem Monsterduell</b>"; } tmpl_set($template, 'HERO/MESSAGE/message', $turnier_msng); tmpl_set($template, "HERO/ZUMTURNIER/BUTTON/button_value", "Held vom Monsterduell zurückholen"); $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'umkehren', 'value' => 'true')); tmpl_set($template, 'HERO/ZUMTURNIER/BUTTON/PARAMS', $hidden); } else { $turniere = array(); $turniere = getAllTurniers(); if ($turniere) { tmpl_set($template, "HERO/ZUMTURNIER/message", $turnier_msng); tmpl_set($template, "HERO/ZUMTURNIER/SELECTION/SELECT/id", "-1"); tmpl_set($template, "HERO/ZUMTURNIER/SELECTION/SELECT/selected", "selected"); tmpl_set($template, "HERO/ZUMTURNIER/SELECTION/SELECT/turnier_name", "- - - Wähle einen Turnier - - -"); foreach ($turniere as $value) { tmpl_iterate($template, "HERO/ZUMTURNIER/SELECTION/SELECT"); tmpl_set($template, "HERO/ZUMTURNIER/SELECTION/SELECT/id", $value['turnierID']); tmpl_set($template, "HERO/ZUMTURNIER/SELECTION/SELECT/turnier_name", "Turnier \"" . $value['turnierName'] . "\" ( mit Gebot in " . $resourceTypeList[$value['art']]->name . getStartPointForTournament($value['turnierID']) . " )"); } tmpl_set($template, "HERO/ZUMTURNIER/SELECTION/value", 0); tmpl_set($template, "HERO/ZUMTURNIER/BUTTON/button_value", "Held zum Turnier"); $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'turnier', 'value' => 'true')); tmpl_set($template, 'HERO/ZUMTURNIER/BUTTON/PARAMS', $hidden); } else { tmpl_set($template, "HERO/ZUMTURNIER/message", "Es werden zur Zeit keine Turniere angeboten ..."); } // Monstern tmpl_set($template, "HERO/MONSTER/message", $monster_msng); tmpl_set($template, "HERO/MONSTER/MONSTERFIELD/button_value", "Los geht's"); $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'monster', 'value' => 'true')); tmpl_set($template, 'HERO/MONSTER/MONSTERFIELD/PARAMS', $hidden); } } } else { // set names for columns $detail_for_hero = array('level' => "Lvl : ", 'erfahrungsWert' => "Exp : ", 'angriffsWert' => "<b>A :</b> ", 'verteidigungsWert' => "<b>V :</b> ", 'mentalKraft' => "<b>M :</b> ", 'koerperKraft' => "<b>K :</b> "); // set hero detail tmpl_set($template, "HERO/HERO_DETAIL/name", "<u><b>" . $result['name'] . " :</b></u>"); foreach ($detail_for_hero as $key => $value) { tmpl_iterate($template, "HERO/HERO_DETAIL/DETAIL"); tmpl_set($template, "HERO/HERO_DETAIL/DETAIL/name", $detail_for_hero[$key]); tmpl_set($template, "HERO/HERO_DETAIL/DETAIL/value", $result[$key] . ","); } // if hero was lazy if ($result['leichteSiege'] > 9) { tmpl_set($template, "HERO/MESSAGE/message", "<i>Ihr Held gewinnt keine Erfahrung.</i>"); } else { if ($result['leichteSiege'] >= 3) { tmpl_set($template, "HERO/MESSAGE/message", "<i>Ihr Held gewinnt nur die Hälfte der Erfahrung.</i>"); } } // wenn bonuspunkte vorhanden if ($bonuspoints > 0) { tmpl_set($template, "HERO/BONUSPOINTS/message", $boni_message); $cols_for_bonus = array('angriffsWert' => "A", 'verteidigungsWert' => "V", 'mentalKraft' => "M"); foreach ($cols_for_bonus as $key => $value) { tmpl_iterate($template, "HERO/BONUSPOINTS/VERTEILE"); tmpl_set($template, "HERO/BONUSPOINTS/VERTEILE/vor_input", "<b>" . $cols_for_bonus[$key] . "</b> : "); tmpl_set($template, "HERO/BONUSPOINTS/VERTEILE/name", $cols_for_bonus[$key] . "_bonus"); } $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'set_boni', 'value' => 'true')); tmpl_set($template, 'HERO/BONUSPOINTS/PARAMS', $hidden); } // fluchtgrenze tmpl_set($template, "HERO/FLUCHT/message", $flucht_message); tmpl_set($template, 'HERO/FLUCHT/value', $result['fluchtGrenze']); $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'set_grenze', 'value' => 'true')); tmpl_set($template, 'HERO/FLUCHT/PARAMS', $hidden); // set names for rows for treasure $body_array = array('schatzKopf' => "Kopf", 'schatzHals' => "Hals", 'schatzRing' => "Finger", 'schatzRuestung' => "Rüstung", 'schatzSchild' => "Schild", 'schatzWaffe' => "Waffe"); $schaetze_attribute = array(); // Set all artifacts foreach ($body_array as $key => $value) { tmpl_iterate($template, "HERO/SCHAETZE/SCHATZ"); tmpl_set($template, "HERO/SCHAETZE/SCHATZ/body_part", $body_array[$key]); // if user has this type of artifact if ($result[$key]) { // get artifact detail $schaetze = getSchatzBySchatzID($result[$key]); // set it into template tmpl_set($template, "HERO/SCHAETZE/SCHATZ/artefact", $schaetze['name']); tmpl_set($template, "HERO/SCHAETZE/SCHATZ/artefact_value", " (" . $schaetze['eigenschaften'] . ")"); // get all artifact attributes one by one $schaetze_attribute = array_merge($schaetze_attribute, explode(" ", $schaetze['eigenschaften'])); } else { tmpl_set($template, "HERO/SCHAETZE/SCHATZ/artefact", "kein Schatz angelegt"); } } // turnierbutton if ($hero_in_turnier) { tmpl_set($template, 'HERO/TURNIERBUTTON/MESSAGE/message', "<b>Held ist in einem Turnier</b>"); } if ($hero_by_monster) { tmpl_set($template, 'HERO/TURNIERBUTTON/MESSAGE/message', "<b>Held ist in einem Monsterduell</b>"); } $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'choose_turnier', 'value' => 'true')); tmpl_set($template, 'HERO/TURNIERBUTTON/PARAMS', $hidden); } } else { tmpl_set($template, "HERO/MESSAGE/message", "Sie haben keinen Helden."); // buy new hero hier (function is not exist at moment, only view) $hidden = array(array('name' => 'modus', 'value' => HERO_DETAIL), array('name' => 'new_hero', 'value' => 'true')); tmpl_set($template, 'HERO/BUY/PARAMS', $hidden); } // return the parsed template return tmpl_parse($template); }