Exemplo n.º 1
0
function getHeroByPlayer($playerID)
{
    global $db;
    // set database query with playerID
    $sql = $db->prepare("SELECT *\n                       FROM " . HERO_TABLE . "\n                       WHERE playerID = :playerID");
    $sql->bindValue('playerID', $playerID);
    if (!$sql->execute()) {
        return null;
    }
    $hero = $sql->fetch(PDO::FETCH_ASSOC);
    $sql->closeCursor();
    if (empty($hero)) {
        return null;
    }
    if ($hero['heroTypeID'] == 1000) {
        return $hero;
    }
    $hero['id'] = $GLOBALS['heroTypesList'][$hero['heroTypeID']]['id'];
    $hero['typeName'] = $GLOBALS['heroTypesList'][$hero['heroTypeID']]['name'];
    $hero['path'] = _('hero_imperator.gif');
    $hero['location'] = _('tot');
    if ($hero['id'] == 'Defender') {
        $hero['path'] = _('hero_defender.gif');
    }
    if ($hero['id'] == 'Constructor') {
        $hero['path'] = _('hero_constructor.gif');
    }
    $hero['lvlUp'] = eval("return " . hero_parseFormulas($GLOBALS['heroTypesList'][$hero['heroTypeID']]['lvlUp_formula']) . ";");
    $hero['expLeft'] = $hero['lvlUp'] - $hero['exp'];
    if ($hero['healPoints'] == 0 || $hero['isAlive'] == false) {
        $hero['location'] = _('tot');
        $hero['path'] = _('hero_death.gif');
    } else {
        if ($hero['isMoving']) {
            $hero['location'] = _('in Bewegung');
        } else {
            $cave = getCaveByID($hero['caveID']);
            $hero['location'] = $cave['name'] . " in (" . $cave['xCoord'] . "|" . $cave['yCoord'] . ")";
        }
    }
    return $hero;
}
Exemplo n.º 2
0
/**
 * Adjusts deviating cave's effects
 *
 * @param dbgame
 *          the link to the game DB
 * @return  all caveIDs
 */
function adjust_adjustCave($db, $caveID)
{
    global $effectTypeList, $terrainList, $checkOnly;
    // get cave
    $cave = getCaveByID($caveID);
    // get artefact effects
    $artefactEffects = artefact_recalculateEffects($caveID);
    // get wonder effects
    $wonderEffects = wonder_recalc($caveID, $db);
    // check each effect
    $adjustments = array();
    foreach ($effectTypeList as $effectID => $effect) {
        // get actual value
        $actual = $cave[$effect->dbFieldName];
        // get nominal value
        $nominal = $artefactEffects[$effectID] + $wonderEffects[$effectID];
        $nominal += (double) $terrainList[$cave['terrain']]['effects'][$effectID];
        // check for deviation
        if ($actual != $nominal) {
            // log difference
            adjust_log('%4d:  %-30s  nominal:%f  actual:%f', $caveID, $effect->dbFieldName, $nominal, $actual);
            // collect adjustments
            $adjustments[] = sprintf('%s = %f', $effect->dbFieldName, $nominal);
        }
    }
    // prepare query
    $query = sprintf('UPDATE Cave SET %s WHERE caveID = %d', implode(", ", $adjustments), $caveID);
    // adjust cave
    if (0 != sizeof($adjustments) && !$checkOnly) {
        adjust_log('Adjusting cave %d (%s)', $caveID, $cave['name']);
        // send query
        if (!$db->query($query)) {
            adjust_log('Error! "%s": %s', $query, mysql_error());
        }
    }
}
Exemplo n.º 3
0
 public static function setDonations($value_array, $caveID, &$caveData)
 {
     global $db;
     if (!sizeof($value_array)) {
         return -8;
     }
     $fields_cave = $fields_storage = $fields_donations = $fields_resources = $where = array();
     foreach ($value_array as $resourceID => $value) {
         $value = floor(abs($value));
         // nur positive und ganze zahlen zulässig!
         if ($value) {
             if (isset($GLOBALS['resourceTypeList'][$resourceID])) {
                 $resource = $GLOBALS['resourceTypeList'][$resourceID];
                 // wartezeit einer Ressource nicht abgewartet? Abbruch!
                 if (isset($_SESSION['player']->donateLocked['tribe'][$resource->dbFieldName]) && $_SESSION['player']->donateLocked['tribe'][$resource->dbFieldName] > time()) {
                     return -9;
                 }
                 // check if resource is over maxDonation value
                 if ($resource->maxTribeDonation < $value) {
                     return -9;
                 }
                 // check for enough resources in cave
                 if ($caveData[$resource->dbFieldName] < $value) {
                     return -10;
                 }
                 $fields_cave[] = $resource->dbFieldName . " = " . $resource->dbFieldName . " - " . $value;
                 $fields_storage[] = $resource->dbFieldName . " = " . $resource->dbFieldName . " + " . $value;
                 $fields_resources[] = $resource->dbFieldName;
                 $fields_donations[] = $value;
                 $where[] = " AND " . $resource->dbFieldName . " >= " . $value;
             }
         }
     }
     $sql = $db->prepare("INSERT INTO " . TRIBE_STORAGE_DONATIONS_TABLE . "(playerID, tribeID, timestamp, " . implode(", ", $fields_resources) . ")\n                          VALUES (:playerID, :tribeID, :timestamp, " . implode(", ", $fields_donations) . ")");
     $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
     $sql->bindValue('tribeID', $_SESSION['player']->tribeID, PDO::PARAM_STR);
     $sql->bindValue('timestamp', time(), PDO::PARAM_INT);
     if (!$sql->execute()) {
         return -11;
     }
     $sql = $db->prepare("UPDATE " . TRIBE_TABLE . " SET\n                          " . implode(", ", $fields_storage) . "\n                         WHERE tag LIKE :tribe");
     $sql->bindValue('tribe', $_SESSION['player']->tribe, PDO::PARAM_STR);
     if (!$sql->execute()) {
         return -11;
     }
     $sql = $db->prepare("UPDATE " . CAVE_TABLE . " SET\n                          " . implode(", ", $fields_cave) . "\n                          WHERE caveID = :caveID\n                          " . implode(" ", $where));
     $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
     if (!$sql->execute()) {
         return -20;
     }
     // update caves
     $caveData = getCaveByID($caveID);
     // update Timeout
     foreach ($value_array as $resourceID => $value) {
         if ($value) {
             if (isset($GLOBALS['resourceTypeList'][$resourceID])) {
                 $newTime = time() + TRIBE_STORAGE_DONATION_INTERVAL * 60 * 60;
                 Player::setDonateLocked($_SESSION['player']->playerID, 'tribe', $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName, $newTime);
             }
         }
     }
     return 4;
 }
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
function takeover_transfer_cave_to($caveID, $playerID)
{
    global $db;
    // check parameters
    $caveID = (int) $caveID;
    $playerID = (int) $playerID;
    // get player
    $winner = Player::getPlayer($playerID, true);
    if (!sizeof($winner)) {
        echo "ERROR (takeover_transfer_cave_to): Could not transfer Cave {$caveID} to Player {$playerID}.\n";
        return FALSE;
    }
    // secureCaveCredits
    $hasCredits = $winner['secureCaveCredits'] > 0 ? 1 : 0;
    // transfer cave to player
    $sql = $db->prepare("UPDATE " . CAVE_TABLE . "\n                       SET playerID = :playerID,\n                         takeoverable = 0,\n                         secureCave = :secureCave\n                       WHERE caveID = :caveID");
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    $sql->bindValue('secureCave', $hasCredits, PDO::PARAM_INT);
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    if (!$sql->execute()) {
        return FALSE;
    }
    // update secureCaveCredits
    $sql = $db->prepare("UPDATE " . PLAYER_TABLE . "\n                       SET secureCaveCredits = GREATEST(0, secureCaveCredits - 1)\n                       WHERE playerID = :playerID");
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    if (!$sql->execute()) {
        echo "ERROR (takeover_transfer_cave_to): Could not update secureCaveCredits of Player {$playerID}.\n";
        return FALSE;
    }
    // copy sciences
    if (sizeof($GLOBALS['scienceTypeList'])) {
        $set = array();
        foreach ($GLOBALS['scienceTypeList'] as $science) {
            $temp = $science->dbFieldName;
            $set[] = "{$temp} = '{$winner[$temp]}'";
        }
        $set = implode(", ", $set);
        $sql = $db->prepare("UPDATE " . CAVE_TABLE . "\n                         SET " . $set . "\n                         WHERE playerID = :playerID");
        $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
        if (!$sql->execute()) {
            echo "ERROR (takeover_transfer_cave_to): Could not update sciences of Player {$playerID}.\n";
            return FALSE;
        }
    }
    // get the cave's data
    $cave = getCaveByID($caveID);
    takeover_send_transfer($playerID, $cave);
}
Exemplo n.º 6
0
/** This function computes the distance between two caves using their IDs.
 */
function getDistanceByID($srcID, $destID)
{
    $srcCave = getCaveByID($srcID);
    $destCave = getCaveByID($destID);
    return getDistanceByCoords($srcCave['xCoord'], $srcCave['yCoord'], $destCave['xCoord'], $destCave['yCoord']);
}
Exemplo n.º 7
0
function unit_Movement($caveID, &$ownCave)
{
    global $db, $template;
    $safeForm = true;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $ownCave[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        $moveArtefactID = Request::getVar('myartefacts', 0);
        // was an artefact chosen?
        if ($moveArtefactID > 0) {
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($moveArtefactID == $value['artefactID']) {
                    $moveArtefact = $moveArtefactID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    /**
     * HERO MOVEMENT
     */
    $moveHero = 0;
    if ($details['hero'] != 0) {
        $hero = getHeroByPlayer($_SESSION['player']->playerID);
        if ($hero['isAlive'] != 1) {
            $details['hero'] = 0;
        }
    }
    if ($details['hero'] != 0 && Request::getVar('moveHero', false) == true) {
        $moveHero = $details['hero'];
    }
    /**
     * END HERO MOVEMENTS
     */
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($_SESSION['player']->playerID);
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_COST . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_SPEED . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (Request::getVar('moveit', false) && sizeof(Request::getVar('unit', array('' => '')))) {
        $targetXCoord = Request::getVar('targetXCoord', 0);
        $targetYCoord = Request::getVar('targetYCoord', 0);
        $targetCaveName = Request::getVar('targetCaveName', '');
        $targetCaveID = Request::getVar('targetCaveID', 0);
        $movementID = Request::getVar('movementID', 0);
        // check for scripters
        check_timestamp(Request::getVar('tstamp', 0));
        $validCaveName = false;
        // targetCaveID >>> coords
        if ($targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = true;
            }
            // name >>> coords
        } else {
            if ($targetCaveName != "") {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = true;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter(Request::getVar('unit', array('' => '')), "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", Request::getVar('rohstoff', array('' => '')));
        // Test, ob Einheitentragekapazität ausgelastet
        $overloaded = 0;
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                if (isset($GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey])) {
                    $capacity += $aUnit * $GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey];
                }
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        $denymovement_nonenemy = false;
        $denymovement_targetwar = false;
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($_SESSION['player']->tribe)) {
                //may tade in own tribe
                $ownTribe = $_SESSION['player']->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe) || relation_areEnemys($ownTribe, $targetTribe) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        // check if army is small enough for hero
        $denymovement_hero = false;
        if ($moveHero && (Request::getVar('movementID', 0) == 3 || Request::getVar('movementID', 0) == 6)) {
            //calculate size of army
            $armySize = 0;
            foreach ($unit as $unitID => $value) {
                $armySize += $GLOBALS['unitTypeList'][$unitID]->hitPoints * $value;
            }
            if ($armySize > $hero['exp']) {
                $denymovement_hero = true;
            }
        }
        if (Request::getVar('movementID', 0) == 0) {
            $msg = array('type' => 'error', 'message' => _('Bitte Bewegungsart auswählen!'));
            $moveHero = 0;
        } else {
            if (!sizeof($unit)) {
                $msg = array('type' => 'error', 'message' => _('Es sind keine Einheiten ausgewählt!'));
                $moveHero = 0;
            } else {
                if (($targetXCoord == 0 || $targetYCoord == 0) && $targetCaveName == "") {
                    $msg = array('type' => 'error', 'message' => _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!'));
                    $moveHero = 0;
                } else {
                    if (($targetXCoord == 0 || $targetYCoord == 0) && !($targetCaveName == "") && $validCaveName === FALSE) {
                        $msg = array('type' => 'error', 'message' => sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName));
                        $moveHero = 0;
                    } else {
                        if ($overloaded) {
                            $msg = array('type' => 'error', 'message' => _('Deine Krieger können die Menge an Ressourcen nicht tragen!!'));
                            $moveHero = 0;
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord)) {
                                $msg = array('type' => 'error', 'message' => _('Die Zielhöhle steht unter Anfängerschutz.'));
                                $moveHero = 0;
                            } else {
                                if (beginner_isCaveProtectedByID($caveID)) {
                                    $msg = array('type' => 'error', 'message' => _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden'));
                                    $moveHero = 0;
                                } else {
                                    if (Request::getVar('movementID', 0) == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord)) {
                                        $msg = array('type' => 'error', 'message' => _('Sie können diese Höhle nicht übernehmen. Sie ist gegen übernahmen geschützt.'));
                                        $moveHero = 0;
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = array('type' => 'error', 'message' => _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!'));
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = array('type' => 'error', 'message' => _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.'));
                                                $moveHero = 0;
                                            } else {
                                                if ($denymovement_hero) {
                                                    $msg = array('type' => 'error', 'message' => _('Die Armee ist zu groß um vom Helden unterstützt zu werden!'));
                                                    $moveHero = 0;
                                                } else {
                                                    // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                    $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                    $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                    $tmpdist = 0;
                                                    $i = 0;
                                                    if ($distance > 15) {
                                                        $distance = $distance - 15;
                                                        $tmpdist = 15;
                                                        if (floor($distance / 5) < 11) {
                                                            $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                        }
                                                        for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                            $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                        }
                                                    } else {
                                                        $tmpdist = $distance;
                                                    }
                                                    // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                    $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                    if ($details[$GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->dbFieldName] < $reqFood) {
                                                        $msg = array('type' => 'error', 'message' => _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!'));
                                                    } else {
                                                        $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $moveHero, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                        switch ($msgID) {
                                                            case 0:
                                                                $msg = array('type' => 'success', 'message' => sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood));
                                                                $safeForm = false;
                                                                break;
                                                            case 1:
                                                                $msg = array('type' => 'error', 'message' => _('In diesen Koordinaten liegt keine Höhle!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 2:
                                                                $msg = array('type' => 'error', 'message' => _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 3:
                                                                $msg = array('type' => 'error', 'message' => _('Schwerer Fehler: Bitte Admin kontaktieren!'));
                                                                $moveHero = 0;
                                                                break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (Request::isPost('action') && Request::getVar('action', '') == 'cancel' && ($eventID = Request::getVar('eventID', 0))) {
            $msgID = reverseMovementEvent($caveID, $eventID);
            switch ($msgID) {
                case 0:
                    $msg = array('type' => 'success', 'message' => _('Die Einheiten kehren zurück!'));
                    break;
                case 1:
                    $msg = array('type' => 'error', 'message' => _('Fehler bei der Rückkehr!'));
                    break;
            }
        } else {
            if (Request::getVar('moveit', false) && !sizeof(Request::getVar('unit', array('' => '')))) {
                $msg = array('type' => 'error', 'message' => _('Einheiten mitnehmen?'));
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $_SESSION['player']->playerID);
    $ownCave[$caveID] = $details = $temp;
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // make sure that moved hero is not shown again
    if ($moveHero != 0) {
        $details['hero'] = 0;
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    // open template
    $template->setFile('unitMovement.tmpl');
    $template->addVars(array('currentX' => $details['xCoord'], 'currentY' => $details['yCoord'], 'dim_x' => $dim_x, 'dim_y' => $dim_y, 'speed' => $minutesPerCave, 'fuel_id' => GameConstants::FUEL_RESOURCE_ID, 'fuel_name' => $GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->name, 'movement_cost_constant' => $foodPerCave, 'resource_types' => GameConstants::MAX_RESOURCE, 'status_msg' => isset($msg) ? $msg : ''));
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    $template->addVar('selectable_movements', $selectable_movements);
    // resources
    $resources = array();
    foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
        if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
            $resources[] = array('resource_id' => $GLOBALS['resourceTypeList'][$resourceID]->resourceID, 'name' => $GLOBALS['resourceTypeList'][$resourceID]->name, 'current_amount' => "0" + $details[$GLOBALS['resourceTypeList'][$resourceID]->dbFieldName], 'dbFieldName' => $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName, 'value' => $safeForm && isset($resource[$resourceID]) && $resource[$resourceID] > 0 ? $resource[$resourceID] : '');
        }
    }
    $template->addVar('resource', $resources);
    // units table
    $unitprops = array();
    $units = array();
    foreach ($GLOBALS['unitTypeList'] as $unitID => $dummy) {
        // if no units of this type, next type
        if (!$details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
            if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
                $encumbrance[$resourceID] = array('resourceID' => $resourceID, 'load' => "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0));
                $temp[] = "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0);
            }
        }
        $units[] = array('name' => $GLOBALS['unitTypeList'][$unitID]->name, 'unit_id' => $unitID, 'food_cost' => $GLOBALS['unitTypeList'][$unitID]->foodCost, 'resource_load' => implode(",", $temp), 'speed_factor' => $GLOBALS['unitTypeList'][$unitID]->wayCost, 'max_unit_count' => $details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName], 'encumbrance' => $encumbrance, 'hitPoints' => $GLOBALS['unitTypeList'][$unitID]->hitPoints, 'value' => $safeForm && isset($unit[$unitID]) ? $unit[$unitID] : '');
    }
    $template->addVar('unit_list', $units);
    // weitergereichte Koordinaten
    if (!Request::getVar('movementID', 0) || $safeForm) {
        if (Request::getVar('targetCaveID', 0) > 0) {
            $caveData = getCaveByID(Request::getVar('targetCaveID', 0));
            $template->addVars(array('target_x_coord' => $caveData['xCoord'], 'target_y_coord' => $caveData['yCoord'], 'target_cave_name' => $caveData['name']));
        } else {
            $template->addVars(array('target_x_coord' => Request::getVar('targetXCoord', ''), 'target_y_coord' => Request::getVar('targetYCoord', ''), 'target_cave_name' => Request::getVar('targetCaveName', '')));
        }
    }
    // weitere Paramter
    $template->addVar('params', array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time())));
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    $ownMovement = $oppMovement = array();
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            $ownMovement[] = $move;
        } else {
            $oppMovement[] = $move;
        }
    }
    $template->addVars(array('ownMovement' => $ownMovement, 'oppMovement' => $oppMovement));
    // artefakte
    if (sizeof($myartefacts) != 0) {
        //tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
        $template->addVar('artefact', $myartefacts);
    }
    // hero
    if ($details['hero'] != 0) {
        $template->addVar('hero', $hero);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            $template->addVar('bookmarks_cave', $bookmarks);
        }
    }
}
Exemplo n.º 8
0
function effect_getEffectWonderDetailContent($caveID, $caveData)
{
    global $buildingTypeList, $defenseSystemTypeList, $resourceTypeList, $scienceTypeList, $unitTypeList, $wonderTypeList, $effectTypeList, $terrainList, $config, $params, $db;
    // don't show the resource bar
    $no_resource_flag = 1;
    // open the template
    $template = @tmpl_open('./templates/' . $config->template_paths[$params->SESSION->user['template']] . '/effectWonderDetail.ihtml');
    $wonders = wonder_getActiveWondersForCaveID($caveID, $db);
    $wondersData = array();
    if ($wonders) {
        foreach ($wonders as $key => $data) {
            $wonderData = array("name" => $wonderTypeList[$data['wonderID']]->name, "end" => $data['end_time']);
            $effectsData = array();
            // iterating through effectTypes
            foreach ($effectTypeList as $effect) {
                if ($value = $data[$effect->dbFieldName] + 0) {
                    $effectsData[] = array("name" => $effect->name, "value" => ($value > 0 ? "+" : "") . $value);
                }
            }
            // iterating through resourceTypes
            foreach ($resourceTypeList as $resource) {
                if ($value = $data[$resource->dbFieldName] + 0) {
                    $effectsData[] = array("name" => $resource->name, "value" => ($value > 0 ? "+" : "") . $value);
                }
            }
            // iterating through buildingTypes
            foreach ($buildingTypeList as $building) {
                if ($value = $data[$building->dbFieldName] + 0) {
                    $effectsData[] = array("name" => $building->name, "value" => ($value > 0 ? "+" : "") . $value);
                }
            }
            // iterating through scienceTypes
            foreach ($scienceTypeList as $science) {
                if ($value = $data[$science->dbFieldName] + 0) {
                    $effectsData[] = array("name" => $science->name, "value" => ($value > 0 ? "+" : "") . $value);
                }
            }
            // iterating through unitTypes
            foreach ($unitTypeList as $unit) {
                if ($value = $data[$unit->dbFieldName] + 0) {
                    $effectsData[] = array("name" => $unit->name, "value" => ($value > 0 ? "+" : "") . $value);
                }
            }
            // iterating through defenseSystemTypes
            foreach ($defenseSystemTypeList as $defenseSystem) {
                if ($value = $data[$defenseSystem->dbFieldName] + 0) {
                    $effectsData[] = array("name" => $defenseSystem->name, "value" => ($value > 0 ? "+" : "") . $value);
                }
            }
            $wonderData['EFFECT'] = $effectsData;
            $wondersData[] = $wonderData;
        }
        // end iterating through active wonders
    }
    // ADDED by chris--- for terrain effects ****************************
    global $effect, $effectname;
    $terraineffectData = array();
    $cave = getCaveByID($caveID);
    $terrainvalue = $cave['terrain'];
    $terraineffectsData[] = array("name" => $terrainList[$terrainvalue]['name'] . ":", "value" => "");
    for ($t = 0; $t < count($effect[$terrainvalue]); $t++) {
        $effectvalue = explode(" = ", $effect[$terrainvalue][$t]);
        $effectkey[$t] = $effectvalue[0];
        $effectv[$t] = substr($effectvalue[1], 1, -1);
        $terraineffectsData[] = array("name" => $effectname[$terrainvalue][$t], "value" => $effectv[$t]);
    }
    // *******************************************************************
    // ADDED by chris--- for leadership
    $leadermultiplier = 0;
    if ($caveData['science_faith'] > 0) {
        $leadermultiplier = $caveData['building_leader'] * 0.05 + 1 * ($caveData['building_betterleader'] * 0.1) + 1;
    }
    if ($caveData['science_darkness'] > 0) {
        $leadermultiplier = $caveData['building_orcleader'] * 0.05 + 1 * ($caveData['building_betterorcleader'] * 0.1) + 1;
    }
    if ($caveData['science_hex'] > 0) {
        $leadermultiplier = $caveData['building_soeldnerleader'] * 0.05 + 1 * ($caveData['building_bettersoeldnerleader'] * 0.1) + 1;
    }
    // -----------------------------------------
    $effectsData = array();
    foreach ($effectTypeList as $data) {
        $value = $caveData[$data->dbFieldName] + 0;
        // ADDED by chris--- for leadership
        if ($leadermultiplier > 0) {
            if ($data->dbFieldName == "effect_rangeattack_factor") {
                if ($value > 0) {
                    $value = $value * $leadermultiplier;
                } else {
                    $value = $leadermultiplier - 1;
                }
            }
            if ($data->dbFieldName == "effect_arealattack_factor") {
                if ($value > 0) {
                    $value = $value * $leadermultiplier;
                } else {
                    $value = $leadermultiplier - 1;
                }
            }
            if ($data->dbFieldName == "effect_attackrate_factor") {
                if ($value > 0) {
                    $value = $value * $leadermultiplier;
                } else {
                    $value = $leadermultiplier - 1;
                }
            }
            if ($data->dbFieldName == "effect_defenserate_factor") {
                if ($value > 0) {
                    $value = $value * $leadermultiplier;
                } else {
                    $value = $leadermultiplier - 1;
                }
            }
            if ($data->dbFieldName == "effect_ranged_damage_resistance_factor") {
                if ($value > 0) {
                    $value = $value * $leadermultiplier;
                } else {
                    $value = $leadermultiplier - 1;
                }
            }
        }
        // ---------------------------------------------
        for ($t = 0; $t < count($effect[$terrainvalue]); $t++) {
            if ($data->dbFieldName == $effectkey[$t]) {
                $value = $value - $effectv[$t];
            }
        }
        if ($value) {
            $effectsData[] = array("name" => $data->name, "value" => $value);
        }
    }
    // end iterating through effectTypes
    $data = array();
    if (!sizeof($wondersData)) {
        $data['NOWONDER'] = array('dummy' => "");
    } else {
        $data['WONDER'] = $wondersData;
    }
    if (!sizeof($effectsData)) {
        $data['NOEFFECT'] = array('dummy' => "");
    } else {
        $data['EFFECT'] = $effectsData;
    }
    if (sizeof($terraineffectsData) < 2) {
        $data['TERRAINNOEFFECT'] = array('dummy' => "");
    } else {
        $data['TERRAINEFFECT'] = $terraineffectsData;
    }
    tmpl_set($template, "/", $data);
    return tmpl_parse($template);
}
Exemplo n.º 9
0
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&ouml;hle mit dem Namen: "' . $params->POST->caveName . '" konnte nicht gefunden werden!';
            } else {
                $xCoord = $coords['xCoord'];
                $yCoord = $coords['yCoord'];
                $message = 'Die H&ouml;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&ouml;hle mit der ID: "' . $params->POST->targetCaveID . '" konnte nicht gefunden werden!';
                } else {
                    $xCoord = $coords['xCoord'];
                    $yCoord = $coords['yCoord'];
                    $message = 'Die H&ouml;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&ouml;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);
}
Exemplo n.º 10
0
function effect_getEffectWonderDetailContent($caveID, $caveData)
{
    global $buildingTypeList, $defenseSystemTypeList, $resourceTypeList, $scienceTypeList, $unitTypeList, $wonderTypeList, $effectTypeList, $terrainList, $config, $params, $db;
    // don't show the resource bar
    $no_resource_flag = 1;
    // open the template
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'effectWonderDetail.ihtml');
    $wonders = wonder_getActiveWondersForCaveID($caveID, $db);
    $wondersData = array();
    if ($wonders) {
        foreach ($wonders as $key => $data) {
            if ($wonderTypeList[$data['wonderID']]->groupID == 0 or $wonderTypeList[$data['wonderID']]->groupID == 3) {
                $wonderData = array("name" => $wonderTypeList[$data['wonderID']]->name, "end" => $data['end_time']);
                $effectsData = array();
                // iterating through effectTypes
                foreach ($effectTypeList as $effect) {
                    if ($value = $data[$effect->dbFieldName] + 0) {
                        $effectsData[] = array("name" => $effect->name, "value" => ($value > 0 ? "+" : "") . $value);
                    }
                }
                // iterating through resourceTypes
                foreach ($resourceTypeList as $resource) {
                    if ($value = $data[$resource->dbFieldName] + 0) {
                        $effectsData[] = array("name" => $resource->name, "value" => ($value > 0 ? "+" : "") . $value);
                    }
                }
                // iterating through buildingTypes
                foreach ($buildingTypeList as $building) {
                    if ($value = $data[$building->dbFieldName] + 0) {
                        $effectsData[] = array("name" => $building->name, "value" => ($value > 0 ? "+" : "") . $value);
                    }
                }
                // iterating through scienceTypes
                foreach ($scienceTypeList as $science) {
                    if ($value = $data[$science->dbFieldName] + 0) {
                        $effectsData[] = array("name" => $science->name, "value" => ($value > 0 ? "+" : "") . $value);
                    }
                }
                // iterating through unitTypes
                foreach ($unitTypeList as $unit) {
                    if ($value = $data[$unit->dbFieldName] + 0) {
                        $effectsData[] = array("name" => $unit->name, "value" => ($value > 0 ? "+" : "") . $value);
                    }
                }
                // iterating through defenseSystemTypes
                foreach ($defenseSystemTypeList as $defenseSystem) {
                    if ($value = $data[$defenseSystem->dbFieldName] + 0) {
                        $effectsData[] = array("name" => $defenseSystem->name, "value" => ($value > 0 ? "+" : "") . $value);
                    }
                }
                $wonderData['EFFECT'] = $effectsData;
                $wondersData[] = $wonderData;
            }
        }
        // end iterating through active wonders
    }
    // ADDED by chris--- for terrain effects ****************************
    global $effect, $effectname;
    $terraineffectData = array();
    $cave = getCaveByID($caveID);
    $terrainvalue = $cave['terrain'];
    $terraineffectsData[] = array("name" => $terrainList[$terrainvalue]['name'] . ":", "value" => "");
    for ($t = 0; $t < count($effect[$terrainvalue]); $t++) {
        $effectvalue = explode(" = ", $effect[$terrainvalue][$t]);
        $effectkey[$t] = $effectvalue[0];
        $effectv[$t] = substr($effectvalue[1], 1, -1);
        $terraineffectsData[] = array("name" => $effectname[$terrainvalue][$t], "value" => $effectv[$t]);
    }
    // *******************************************************************
    $effectsData = array();
    foreach ($effectTypeList as $data) {
        $value = $caveData[$data->dbFieldName] + 0;
        if ($value) {
            $effectsData[] = array("name" => $data->name, "value" => $value);
        }
    }
    // end iterating through effectTypes
    $data = array();
    if (!sizeof($wondersData)) {
        $data['NOWONDER'] = array('dummy' => "");
    } else {
        $data['WONDER'] = $wondersData;
    }
    if (!sizeof($effectsData)) {
        $data['NOEFFECT'] = array('dummy' => "");
    } else {
        $data['EFFECT'] = $effectsData;
    }
    if (sizeof($terraineffectsData) < 2) {
        $data['TERRAINNOEFFECT'] = array('dummy' => "");
    } else {
        $data['TERRAINEFFECT'] = $terraineffectsData;
    }
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($params->SESSION->player->playerID);
    $params->SESSION->player = $_SESSION['player'];
    $data['farmpoints'] = $params->SESSION->player->fame;
    $data['rules_path'] = RULES_PATH;
    tmpl_set($template, "/", $data);
    return tmpl_parse($template);
}
Exemplo n.º 11
0
function takeover_transfer_cave_to($caveID, $playerID)
{
    global $db, $scienceTypeList;
    // check parameters
    $caveID = intval($caveID);
    $playerID = intval($playerID);
    // get player
    $winner = getPlayerByID($playerID);
    if (!sizeof($winner)) {
        echo "ERROR (takeover_transfer_cave_to): Could not transfer Cave {$caveID} to Player {$playerID}.\n";
        return FALSE;
    }
    // secureCaveCredits
    $hasCredits = $winner['secureCaveCredits'] > 0 ? 1 : 0;
    // transfer cave to player
    $query = "UPDATE Cave SET playerID = {$playerID}, takeoverable = 0, " . "secureCave = '{$hasCredits}' WHERE caveID = {$caveID}";
    if (!DEBUG) {
        if (!$db->query($query)) {
            echo "ERROR (takeover_transfer_cave_to): Could not update Cave {$caveID}.\n";
            return FALSE;
        }
    } else {
        echo "DEBUG:  {$query} \n";
    }
    // update secureCaveCredits
    $query = "UPDATE Player SET secureCaveCredits = GREATEST(0, secureCaveCredits - 1) " . "WHERE playerID = {$playerID}";
    if (!DEBUG) {
        if (!$db->query($query)) {
            echo "ERROR (takeover_transfer_cave_to): Could not update secureCaveCredits of Player {$playerID}.\n";
            return FALSE;
        }
    } else {
        echo "DEBUG:  {$query} \n";
    }
    // copy sciences
    if (sizeof($scienceTypeList)) {
        $set = array();
        foreach ($scienceTypeList as $science) {
            $temp = $science->dbFieldName;
            $set[] = "{$temp} = '{$winner[$temp]}'";
        }
        $set = implode(", ", $set);
        $query = "UPDATE Cave SET {$set} WHERE playerID = {$playerID}";
        if (!DEBUG) {
            if (!$db->query($query)) {
                echo "ERROR (takeover_transfer_cave_to): Could not update sciences of Player {$playerID}.\n";
                return FALSE;
            }
        } else {
            echo "DEBUG:  {$query} \n";
        }
    }
    // get the cave's data
    $cave = getCaveByID($caveID);
    takeover_send_transfer($playerID, $cave);
}
Exemplo n.º 12
0
function getCaveReport($caveID, $ownCaves, $targetCaveID, $method)
{
    global $template;
    if (!$targetCaveID) {
        $template->throwError('Es wurde keine Höhle ausgewählt.');
        return;
    }
    if ($method == 'ajax') {
        $shortVersion = true;
        $template->setFile('mapDetailAjax.tmpl');
    } else {
        $shortVersion = false;
        $template->setFile('mapDetail.tmpl');
    }
    $cave = getCaveByID($targetCaveID);
    $caveDetails = array();
    $playerDetails = array();
    $showArtePossible = false;
    if ($cave['playerID'] != 0) {
        $caveDetails = getCaves($cave['playerID']);
        $playerDetails = getPlayerByID($cave['playerID']);
        $showArtePossible = $playerDetails['tribe'] != GOD_ALLY ? true : false;
    }
    $cave['terrain_name'] = $GLOBALS['terrainList'][$cave['terrain']]['name'];
    $cave['terrain_img'] = $GLOBALS['terrainList'][$cave['terrain']]['img'];
    $region = getRegionByID($cave['regionID']);
    if ($cave['artefacts'] != 0 && ($showArtePossible || $_SESSION['player']->tribe == GOD_ALLY)) {
        $cave['artefact'] = true;
    }
    $template->addVar('cave_details', $cave);
    if ($cave['playerID'] != 0) {
        $template->addVar('player_details', $playerDetails);
        /****************************************************************************************************
        *
        * Alle Höhlen des Spielers ausgeben
        *
        ****************************************************************************************************/
        $caves = array();
        foreach ($caveDetails as $key => $value) {
            $temp = array('caveName' => $value['name'], 'xCoord' => $value['xCoord'], 'yCoord' => $value['yCoord'], 'terrain' => $GLOBALS['terrainList'][$value['terrain']]['name'], 'caveSize' => floor($value[CAVE_SIZE_DB_FIELD] / 50) + 1, 'secureCave' => $value['secureCave']);
            if ($value['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $_SESSION['player']->tribe == GOD_ALLY)) {
                $temp['artefact'] = true;
            }
            $caves[] = $temp;
        }
        $template->addVar('player_caves', $caves);
    } else {
        if (sizeof($ownCaves) < $_SESSION['player']->takeover_max_caves && $cave['takeoverable'] == 1) {
            $template->addVar('takeoverable', true);
        }
    }
}
Exemplo n.º 13
0
function digest_getMovements($ownCave, $doNotShow, $showDetails)
{
    global $db;
    // get movements
    $ua_movements = Movement::getMovements();
    // caveIDs einsammeln
    $caveIDs = implode(', ', array_map(array($db, 'quote'), array_keys($ownCave)));
    // Bewegungen besorgen
    $query = "SELECT *\n            FROM " . EVENT_MOVEMENT_TABLE . "\n            WHERE source_caveID IN (" . $caveIDs . ")\n              OR target_caveID IN (" . $caveIDs . ")\n            ORDER BY end ASC, event_movementID ASC";
    if (!($sql = $db->query($query))) {
        return array();
    }
    $rows = $sql->fetchAll();
    $sql->closeCursor();
    // bewegungen durchgehen
    $result = array();
    foreach ($rows as $row) {
        // "do not show" movements should not be shown
        if (in_array($row['movementID'], $doNotShow)) {
            continue;
        }
        // is own movement?
        $row['isOwnMovement'] = in_array($row['caveID'], array_keys($ownCave));
        /////////////////////////////////
        // SICHTWEITE BESCHRÄNKEN
        /* We got some problems, as reverse movements should not ALWAYS be visible.
         * For example a transport reverse movement should be visible, but a
         * spy reverse movement should not...
         * As a work around we will fix it by not showing any adverse reverse movement.
         *
         * The original code is following...
        
            if (!$row['isOwnMovement']){
        
              if ($ua_movements[$row['movementID']]->returnID == -1){
                $sichtweite = getVisionRange($ownCave[$row['source_caveID']]) * $row['speedFactor'];
                $distance = time() - (time_fromDatetime($row['end']) - getDistanceByID($srcID, $destID) * $row['speedFactor']);
              } else {
                $sichtweite = getVisionRange($ownCave[$row['target_caveID']]) * $row['speedFactor'];
                $distance = ceil((time_fromDatetime($row['end']) - time())/60);
              }
        
              if ($sichtweite < $distance) continue;
            }
         */
        // compute visibility
        if (!$row['isOwnMovement']) {
            // don't show adverse reverse movements
            if ($ua_movements[$row['movementID']]->returnID == -1) {
                continue;
            }
            $sichtweite = getVisionRange($ownCave[$row['target_caveID']]) * $row['speedFactor'];
            $distance = ceil((time_fromDatetime($row['end']) - time()) / 60);
            if ($sichtweite < $distance) {
                continue;
            }
        }
        /////////////////////////////////
        // ***** fremde unsichtbare bewegung *****
        if ($row['isOwnMovement'] == 0) {
            if ($ua_movements[$row['movementID']]->mayBeInvisible) {
                $anzahl_sichtbarer_einheiten = 0;
                foreach ($GLOBALS['unitTypeList'] as $unitType) {
                    if ($unitType->visible) {
                        $anzahl_sichtbarer_einheiten += $row[$unitType->dbFieldName];
                    }
                }
                if ($anzahl_sichtbarer_einheiten == 0) {
                    continue;
                }
            }
        }
        $tmp = array('event_id' => $row['event_movementID'], 'cave_id' => $row['caveID'], 'source_cave_id' => $row['source_caveID'], 'target_cave_id' => $row['target_caveID'], 'movement_id' => $row['movementID'], 'event_start' => time_fromDatetime($row['start']), 'event_start_date' => time_formatDatetime($row['start']), 'event_end' => time_fromDatetime($row['end']), 'event_end_date' => time_formatDatetime($row['end']), 'isOwnMovement' => intval($row['isOwnMovement']), 'seconds_before_end' => time_fromDatetime($row['end']) - time(), 'movement_id_description' => $ua_movements[$row['movementID']]->description);
        // Quelldaten
        $source = getCaveNameAndOwnerByCaveID($row['source_caveID']);
        foreach ($source as $key => $value) {
            $tmp['source_' . $key] = $value;
        }
        // Zieldaten
        $target = getCaveNameAndOwnerByCaveID($row['target_caveID']);
        foreach ($target as $key => $value) {
            $tmp['target_' . $key] = $value;
        }
        // ***** Einheiten, Rohstoffe und Artefakte *****
        if ($showDetails) {
            // show artefact
            if ($row['artefactID']) {
                $tmp['artefact'] = artefact_getArtefactByID($row['artefactID']);
            }
            // show hero
            if ($row['heroID']) {
                $tmp['hero'] = "Held läuft mit!";
            }
            // eval(GameConstants::EXPOSE_INVISIBLE)
            // FIXME (mlunzena): oben holen wir schon bestimmte Höhlendaten,
            //                   das sollte man zusammenfassen..
            $target = getCaveByID($row['target_caveID']);
            $expose = eval('return ' . formula_parseToPHP(GameConstants::EXPOSE_INVISIBLE . ";", '$target'));
            // show units
            $units = array();
            foreach ($GLOBALS['unitTypeList'] as $unit) {
                // this movement does not contain units of that type
                if (!$row[$unit->dbFieldName]) {
                    continue;
                }
                // expose invisible units
                //   if it is your own move
                //   if unit is visible
                if (!$row['isOwnMovement'] && !$unit->visible) {
                    // if target cave's EXPOSEINVISIBLE is > than exposeChance
                    if ($expose <= $row['exposeChance']) {
                        // do not expose
                        continue;
                    } else {
                        // do something
                        // for example:
                        // $row[$unit->dbFieldName] *= 2.0 * (double)rand() / (double)getRandMax();
                    }
                }
                $units[] = array('unitID' => $unit->unitID, 'dbFieldName' => $unit->dbFieldName, 'name' => $unit->name, 'value' => $ua_movements[$row['movementID']]->fogUnit && !$row['isOwnMovement'] ? calcFogUnit($row[$unit->dbFieldName]) : $row[$unit->dbFieldName]);
            }
            if (sizeof($units)) {
                $tmp['units'] = $units;
            }
            $resources = array();
            foreach ($GLOBALS['resourceTypeList'] as $resource) {
                if (!$row[$resource->dbFieldName]) {
                    continue;
                }
                $resources[] = array('name' => $resource->name, 'dbFieldName' => $resource->dbFieldName, 'value' => $ua_movements[$row['movementID']]->fogResource && !$row['isOwnMovement'] ? calcFogResource($row[$resource->dbFieldName]) : $row[$resource->dbFieldName]);
            }
            if (sizeof($resources)) {
                $tmp['resources'] = $resources;
            }
            if ($row['isOwnMovement'] && $ua_movements[$row['movementID']]->returnID != -1 && !$row['artefactID'] && !$row['blocked']) {
                $tmp['cancel'] = array("modus" => UNIT_MOVEMENT, "eventID" => $row['event_movementID']);
            }
        }
        $result[] = $tmp;
    }
    return $result;
}
Exemplo n.º 14
0
function artefact_getDetail($caveID, &$myCaves, $artefactID)
{
    global $params, $config, $resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList;
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'artefactdetail.ihtml');
    $show_artefact = TRUE;
    $artefact = artefact_getArtefactByID($artefactID);
    $description_initiated = $artefact['description_initiated'];
    unset($artefact['description_initiated']);
    // Gott oder nicht?
    if ($params->SESSION->player->tribe != GOD_ALLY) {
        // gibts nicht oder nicht in einer Höhle
        if (!$artefact['caveID']) {
            $show_artefact = FALSE;
        } else {
            $cave = getCaveByID($artefact['caveID']);
            // leere Höhle
            if (!$cave['playerID']) {
                $show_artefact = FALSE;
            } else {
                $owner = getPlayerByID($cave['playerID']);
                // Besitzer ist ein Gott
                if ($owner['tribe'] == GOD_ALLY) {
                    $show_artefact = FALSE;
                }
            }
        }
    }
    if ($show_artefact) {
        // eigene Höhle ...
        if (array_key_exists($artefact['caveID'], $myCaves)) {
            // Ritual ausführen?
            if (isset($params->POST->initiate)) {
                $message = artefact_beginInitiation($artefact);
                tmpl_set($template, 'message', $message);
                // reload
                $myCaves = getCaves($params->SESSION->player->playerID);
            } else {
                if ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_UNINITIATED) {
                    // Check, ob bereits eingeweiht wird.
                    if (sizeof(artefact_getArtefactInitiationsForCave($caveID)) == 0) {
                        // Hol das Einweihungsritual
                        $ritual = artefact_getRitualByID($artefact['initiationID']);
                        // Hol die Kosten und beurteile ob genug da ist
                        $merged_game_rules = array_merge($resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList);
                        $cost = array();
                        foreach ($merged_game_rules as $val) {
                            if ($ritual[$val->dbFieldName]) {
                                $object_context = ceil($ritual[$val->dbFieldName]) > floor($myCaves[$artefact['caveID']][$val->dbFieldName]) ? 'LESS' : 'ENOUGH';
                                array_push($cost, array('object' => $val->name, $object_context . '/amount' => $ritual[$val->dbFieldName]));
                            }
                        }
                        $artefact['INITIATION'] = array('COST' => $cost, 'name' => $ritual['name'], 'description' => $ritual['description'], 'duration' => time_formatDuration($ritual['duration']), 'HIDDEN' => array(array('name' => "artefactID", 'value' => $artefact['artefactID']), array('name' => "modus", 'value' => ARTEFACT_DETAIL), array('name' => "initiate", 'value' => 1)));
                    } else {
                        tmpl_iterate($template, 'ARTEFACT/NO_INITIATION');
                    }
                }
            }
            // "geheime" Beschreibung nur zeigen, wenn eingeweiht
            if ($artefact['initiated'] == ARTEFACT_INITIATED) {
                $artefact['description_initiated'] = $description_initiated;
            }
        }
        tmpl_set($template, 'ARTEFACT', $artefact);
    } else {
        tmpl_set($template, 'message', _('Über dieses Artefakt weiss man nichts.'));
    }
    return tmpl_parse($template);
}
Exemplo n.º 15
0
require_once "include/config.inc.php";
require_once "include/params.inc.php";
require_once "include/db.inc.php";
require_once "include/basic.lib.php";
// init request class
$request = new Request();
$caveID = $request->getVar('cave_id', 0);
if ($caveID == 0) {
    exit(1);
}
$filename = "temp/{$caveID}.png";
if (!file_exists($filename)) {
    define("NAME_LENGTH", 21);
    $config = new Config();
    $db = DbConnect();
    $cave = getCaveByID($caveID);
    if ($cave === 0) {
        exit(1);
    }
    $name = unhtmlentities($cave['name']);
    if (strlen($cave['name']) > NAME_LENGTH) {
        $cave['name'] = substr($cave['name'], 0, NAME_LENGTH - 2) . "..";
    }
    /* Create imagickdraw object */
    $draw = new ImagickDraw();
    /* Annotate some text */
    $draw->setFontSize(13);
    $draw->annotation(5, 20, "{$cave['name']}");
    $draw->setFontSize(10);
    $draw->annotation(5, 33, "({$cave['xCoord']}|{$cave['yCoord']})");
    /* Create a new imagick object */
Exemplo n.º 16
0
function artefact_getDetail($caveID, &$myCaves)
{
    global $template;
    $messageText = array(-5 => array('type' => 'error', 'message' => _('Dieses Artefakt kann nicht noch einmal eingeweiht werden.')), -4 => array('type' => 'error', 'message' => _('Fehler: Artefakt konnte nicht auf ARTEFACT_INITIATING gestellt werden.')), -3 => array('type' => 'error', 'message' => _('Sie weihen bereits ein anderes Artefakt ein.')), -2 => array('type' => 'error', 'message' => _('Es fehlen die notwendigen Voraussetzungen.')), -1 => array('type' => 'error', 'message' => _('Fehler: Ritual nicht gefunden.')), 0 => array('type' => 'notice', 'message' => _('Über dieses Artefakt weiß man nichts!')), 1 => array('type' => 'success', 'message' => _('Die Einweihung des Artefakts wurde gestartet!')));
    // open template
    $template->setFile('artefactDetail.tmpl');
    $show_artefact = TRUE;
    $artefactID = Request::getVar('artefactID', 0);
    $artefact = artefact_getArtefactByID($artefactID);
    if (empty($artefact)) {
        $messageID = 0;
    } else {
        $description_initiated = $artefact['description_initiated'];
        unset($artefact['description_initiated']);
        // Gott oder nicht?
        if ($_SESSION['player']->tribe != GOD_ALLY) {
            // gibts nicht oder nicht in einer Höhle
            if (!$artefact['caveID']) {
                $show_artefact = FALSE;
            } else {
                $cave = getCaveByID($artefact['caveID']);
                // leere Höhle
                if (!$cave['playerID']) {
                    $show_artefact = FALSE;
                } else {
                    $owner = getPlayerByID($cave['playerID']);
                    // Besitzer ist ein Gott
                    if ($owner['tribe'] == GOD_ALLY) {
                        $show_artefact = FALSE;
                    }
                }
            }
        }
        $showRitual = 0;
        $showStatus = 0;
        $template->addVars(array('show_artefact' => $show_artefact));
        if ($show_artefact) {
            $artefact['img'] = $artefact['uninitiationImg'];
            // Bild vom uninitalisierten Artefakt per default anzeigen!
            // eigene Höhle ...
            if (isset($myCaves[$artefact['caveID']])) {
                $showStatus = 1;
                // Ritual ausführen?
                if (Request::isPost('initiate')) {
                    $messageID = artefact_beginInitiation($artefact);
                    // reload
                    $myCaves = getCaves($_SESSION['player']->playerID);
                    // wenn noch uneingeweiht und in der "richtigen" Höhle, ritual zeigen
                } else {
                    if ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_UNINITIATED) {
                        // Check, ob bereits eingeweiht wird.
                        if (sizeof(artefact_getArtefactInitiationsForCave($caveID)) == 0) {
                            $showRitual = 1;
                            // Hol das Einweihungsritual
                            $ritual = artefact_getRitualByID($artefact['initiationID']);
                            // Hol die Kosten und beurteile ob genug da ist
                            $merged_game_rules = array_merge($GLOBALS['resourceTypeList'], $GLOBALS['buildingTypeList'], $GLOBALS['unitTypeList'], $GLOBALS['scienceTypeList'], $GLOBALS['defenseSystemTypeList']);
                            $cost = array();
                            foreach ($merged_game_rules as $val) {
                                if (isset($ritual[$val->dbFieldName])) {
                                    if ($ritual[$val->dbFieldName]) {
                                        $object_context = ceil($ritual[$val->dbFieldName]) > floor($myCaves[$artefact['caveID']][$val->dbFieldName]) ? 'less-' : 'enough ';
                                        array_push($cost, array('object' => $val->name, 'amount' => $ritual[$val->dbFieldName], 'class' => $object_context));
                                    }
                                }
                            }
                            $artefact['initiation'] = array('cost' => $cost, 'name' => $ritual['name'], 'description' => $ritual['description'], 'duration' => time_formatDuration($ritual['duration']), 'initiate' => 1);
                        } else {
                            $showRitual = -1;
                        }
                    } elseif ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_INITIATING) {
                        // Arte wird gerade eingeweiht
                        $showRitual = -1;
                    }
                }
                // "geheime" Beschreibung nur zeigen, wenn eingeweiht
                if ($artefact['initiated'] == ARTEFACT_INITIATED) {
                    $artefact['description_initiated'] = $description_initiated;
                    // Besitzer des Artefaktes und initalisiert? Richtiges Artefakt Bild anzeigen
                    if (isset($myCaves[$artefact['caveID']])) {
                        $artefact['img'] = $artefact['initiationImg'];
                    }
                }
            }
            $template->addVars(array('artefact' => $artefact));
            $template->addVars(array('showRitual' => $showRitual));
            $template->addVars(array('showStatus' => $showStatus));
        } else {
            // über dieses Artefakt weiß man nichts!
            $messageID = 0;
        }
    }
    $template->addVar('status_msg', isset($messageID) ? $messageText[$messageID] : '');
}
Exemplo n.º 17
0
function unitAction($caveID, &$meineHoehlen)
{
    global $config, $db, $MAX_RESOURCE, $MOVEMENTCOSTCONSTANT, $MOVEMENTSPEEDCONSTANT, $params, $resourceTypeList, $unitTypeList, $FUELRESOURCEID;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $meineHoehlen[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        // was an artefact chosen?
        if ((int) $params->POST->myartefacts > 0) {
            $tempID = (int) $params->POST->myartefacts;
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($tempID == $value['artefactID']) {
                    $moveArtefact = $tempID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($params->SESSION->player->playerID);
    $params->SESSION->player = $_SESSION['player'];
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP($MOVEMENTCOSTCONSTANT . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP($MOVEMENTSPEEDCONSTANT . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (isset($params->POST->moveit) && sizeof($params->POST->unit)) {
        $targetXCoord = intval($params->POST->targetXCoord);
        $targetYCoord = intval($params->POST->targetYCoord);
        $targetCaveName = $params->POST->targetCaveName;
        $targetCaveID = intval($params->POST->targetCaveID);
        $movementID = intval($params->POST->movementID);
        // check for scripters
        check_timestamp($params->POST->tstamp);
        $validCaveName = FALSE;
        // targetCaveID >>> coords
        if (isset($targetCaveID) && $targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = TRUE;
            }
            // name >>> coords
        } else {
            if (isset($targetCaveName)) {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = TRUE;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter($params->POST->unit, "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", $params->POST->rohstoff);
        // Test, ob Einheitentragekapazität ausgelastet
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                $capacity += $aUnit * $unitTypeList[$unitKey]->encumbranceList[$resKey];
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($params->SESSION->player->tribe)) {
                //may tade in own tribe
                $ownTribe = $params->SESSION->player->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE, $db);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE, $db);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe, $db) || relation_areEnemys($ownTribe, $targetTribe, $db) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        if ($params->POST->movementID == 0) {
            $msg = _('Bitte Bewegungsart auswählen!');
        } else {
            if (!sizeof($unit)) {
                $msg = _('Es sind keine Einheiten ausgewählt!');
            } else {
                if (empty($targetXCoord) || empty($targetYCoord) and empty($targetCaveName)) {
                    $msg = _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!');
                } else {
                    if (empty($targetXCoord) || empty($targetYCoord) and !empty($targetCaveName) and $validCaveName === FALSE) {
                        $msg = sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName);
                    } else {
                        if ($overloaded) {
                            $msg = _('Deine Krieger können die Menge an Ressourcen nicht tragen!!');
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord, $db)) {
                                $msg = _('Die Zielhöhle steht unter Anfängerschutz.');
                            } else {
                                if (beginner_isCaveProtectedByID($caveID, $db)) {
                                    $msg = _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden');
                                } else {
                                    if ($params->POST->movementID == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord, $db)) {
                                        $msg = _('Sie können diese Höhle nicht übernehmen. Sie ist gegen Übernahmen geschützt.');
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!');
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.');
                                            } else {
                                                // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                $tmpdist = 0;
                                                $i = 0;
                                                if ($distance > 15) {
                                                    $distance = $distance - 15;
                                                    $tmpdist = 15;
                                                    if (floor($distance / 5) < 11) {
                                                        $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                    }
                                                    for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                        $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                    }
                                                } else {
                                                    $tmpdist = $distance;
                                                }
                                                // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                if ($details[$resourceTypeList[$FUELRESOURCEID]->dbFieldName] < $reqFood) {
                                                    $msg = _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!');
                                                } else {
                                                    $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                    switch ($msgID) {
                                                        case 0:
                                                            $msg = sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood);
                                                            break;
                                                        case 1:
                                                            $msg = _('In diesen Koordinaten liegt keine Höhle!');
                                                            break;
                                                        case 2:
                                                            $msg = _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!');
                                                            break;
                                                        case 3:
                                                            $msg = _('Schwerer Fehler: Bitte Admin kontaktieren!');
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (!empty($params->POST->eventID)) {
            $msgID = reverseMovementEvent($caveID, $params->POST->eventID);
            switch ($msgID) {
                case 0:
                    $msg = _('Die Einheiten kehren zurück!');
                    break;
                case 1:
                    $msg = _('Fehler bei der Rückkehr!');
                    break;
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $params->SESSION->player->playerID);
    $meineHoehlen[$caveID] = $details = $temp->nextRow(MYSQL_ASSOC);
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'unitaction.ihtml');
    // messages
    if (isset($msg)) {
        tmpl_set($template, '/MESSAGE/msg', $msg);
    }
    // javascript support
    tmpl_set($template, 'currentX', $details['xCoord']);
    tmpl_set($template, 'currentY', $details['yCoord']);
    tmpl_set($template, 'dim_x', $dim_x);
    tmpl_set($template, 'dim_y', $dim_y);
    tmpl_set($template, 'speed', $minutesPerCave);
    tmpl_set($template, 'fuel_id', $FUELRESOURCEID);
    tmpl_set($template, 'fuel_name', $resourceTypeList[$FUELRESOURCEID]->name);
    tmpl_set($template, 'movementcostconstant', $foodPerCave);
    tmpl_set($template, "resourceTypes", $MAX_RESOURCE);
    tmpl_set($template, "rules_path", RULES_PATH);
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    tmpl_set($template, 'SELECTACTION', $selectable_movements);
    // resources
    $resources = array();
    for ($res = 0; $res < sizeof($resourceTypeList); $res++) {
        if (!$resourceTypeList[$res]->nodocumentation) {
            $resources[] = array('resourceID' => $resourceTypeList[$res]->resourceID, 'name' => $resourceTypeList[$res]->name, 'currentAmount' => "0" + $details[$resourceTypeList[$res]->dbFieldName], 'dbFieldName' => $resourceTypeList[$res]->dbFieldName);
        }
    }
    tmpl_set($template, 'RESOURCE', $resources);
    tmpl_set($template, 'TOTAL', $resources);
    tmpl_set($template, 'RESOURCE_LUGGAGE', $resources);
    // units table
    $unitprops = array();
    $units = array();
    for ($i = 0; $i < sizeof($unitTypeList); $i++) {
        // if no units of this type, next type
        if (!$details[$unitTypeList[$i]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        for ($j = 0; $j < count($resourceTypeList); $j++) {
            if (!$resourceTypeList[$j]->nodocumentation) {
                $encumbrance[$j] = array('resourceID' => $j, 'load' => "0" + $unitTypeList[$i]->encumbranceList[$j]);
                $temp[] = "0" + $unitTypeList[$i]->encumbranceList[$j];
            }
        }
        $unitprops[] = array('unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'resourceLoad' => implode(",", $temp), 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName]);
        $units[] = array('name' => $unitTypeList[$i]->name, 'modus' => UNIT_PROPERTIES, 'unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName], 'warriorID' => $i, 'ENCUMBRANCE' => $encumbrance);
    }
    tmpl_set($template, 'UNITPROPS', $unitprops);
    tmpl_set($template, 'SELECTWARRIOR', $units);
    // weitergereichte Koordinaten
    if (empty($params->POST->movementID)) {
        tmpl_set($template, 'targetXCoord', $params->POST->targetXCoord);
        tmpl_set($template, 'targetYCoord', $params->POST->targetYCoord);
        tmpl_set($template, 'targetCaveName', $params->POST->targetCaveName);
    }
    // weitere Paramter
    $hidden = array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time()));
    tmpl_set($template, 'PARAMS', $hidden);
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    //$movements = digest_getMovements($meineHoehlen, array(), true);
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            tmpl_iterate($template, 'MOVEMENT/MOVE');
            tmpl_set($template, 'MOVEMENT/MOVE', $move);
        } else {
            tmpl_iterate($template, 'OPPMOVEMENT/MOVE');
            tmpl_set($template, 'OPPMOVEMENT/MOVE', $move);
        }
    }
    // artefakte
    if (sizeof($myartefacts) != 0) {
        tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // show CAVEBOOKMARKS context
        tmpl_set($template, '/CAVEBOOKMARKS/iterate', '');
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARK', $bookmarks);
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARKJS', $bookmarks);
        }
    }
    return tmpl_parse($template);
}
Exemplo n.º 18
0
function getCaveReport($meineHoehlen, $caveID, $targetCaveID, $playerID)
{
    global $params, $config, $terrainList;
    $cave = getCaveByID($targetCaveID);
    $caveDetails = array();
    $playerDetails = array();
    // ADDED by chris--- for Quests
    // ----------------------------------------------------------
    global $db;
    // 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 (isCaveQuestCave($targetCaveID, $db) && isCaveInvisibleToPlayer($targetCaveID, $playerID, $db)) {
        $cave['playerID'] = 0;
    }
    // ----------------------------------------------------------
    if ($cave['playerID'] != 0) {
        $caveDetails = getCaves($cave['playerID']);
        $playerDetails = getPlayerFromID($cave['playerID']);
        // ADDED by chris--- for farmschutz
        if (FARMSCHUTZ_ACTIVE == 1) {
            $farmschutz = getFarmschutz($cave['playerID']);
        } else {
            $farmschutz = "";
        }
    }
    $template = @tmpl_open('./templates/' . $config->template_paths[$params->SESSION->user['template']] . '/mapdetail.ihtml');
    if ($cave['protected']) {
        tmpl_set($template, 'PROPERTY', 'Anf&auml;ngerschutz aktiv');
    }
    if (!$cave['secureCave'] && $cave['playerID']) {
        tmpl_iterate($template, 'PROPERTY');
        tmpl_set($template, 'PROPERTY', '&uuml;bernehmbar!');
    }
    // ADDED by chris--- for Quests --------------------------------------------------------------------------------
    if ($cave['quest_cave'] && !isCaveInvisibleToPlayer($cave['caveID'], $playerID, $db) && $cave['invisible_name'] != "") {
        $cave['name'] = $cave['invisible_name'];
    }
    // -------------------------------------------------------------------------------------------------------
    $addCaveLink = "?modus=" . CAVE_BOOK_ADD . "&amp;id=" . $targetCaveID;
    // ADDED by chris--- for cavebook
    tmpl_set($template, '/', array('cavename' => $cave['name'], 'xcoord' => $cave['xCoord'], 'ycoord' => $cave['yCoord'], 'terrain' => $terrainList[$cave['terrain']]['name'], 'movementlink' => "?modus=" . MOVEMENT . "&targetXCoord=" . $cave['xCoord'] . "&targetYCoord=" . $cave['yCoord'] . "&targetCaveName=" . unhtmlentities($cave['name']), 'backlink' => "?modus=" . MAP . "&xCoord=" . $cave['xCoord'] . "&yCoord=" . $cave['yCoord']));
    if ($cave['playerID'] != 0) {
        tmpl_set($template, '/OCCUPIED', array('playerLink' => "?modus=" . PLAYER_DETAIL . "&detailID=" . $playerDetails['playerID'], 'caveOwner' => $playerDetails['name'], 'farmschutz' => $farmschutz, 'adressbook_add_modus' => MESSAGE_BOOK_ADD, 'addCaveLink' => $addCaveLink));
        if ($playerDetails['tribe']) {
            tmpl_set($template, '/OCCUPIED/TRIBE', array('tribeLink' => "?modus=" . TRIBE_DETAIL . "&tribe=" . urlencode(unhtmlentities($playerDetails['tribe'])), 'ownersTribe' => $playerDetails['tribe']));
        }
        if ($cave['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $params->SESSION->user['tribe'] == GOD_ALLY)) {
            tmpl_set($template, '/OCCUPIED/ARTEFACT/artefactLink', "?modus=" . ARTEFACT_LIST . "&caveID={$caveID}");
        }
        $caves = array();
        foreach ($caveDetails as $key => $value) {
            if (!(isCaveQuestCave($value['caveID'], $db) && isCaveInvisibleToPlayer($value['caveID'], $playerID, $db))) {
                $temp = array('caveName' => $value['name'], 'xCoord' => $value['xCoord'], 'ycoord' => $value['yCoord'], 'terrain' => $terrainList[$value['terrain']]['name'], 'caveSize' => floor($value[CAVE_SIZE_DB_FIELD] / 50) + 1, 'movementLink' => "?modus=" . MOVEMENT . "&targetXCoord=" . $value['xCoord'] . "&targetYCoord=" . $value['yCoord'] . "&targetCaveName=" . unhtmlentities($value['name']));
                if ($value['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $params->SESSION->user['tribe'] == GOD_ALLY)) {
                    $temp['ARTEFACT'] = array('artefactLink' => "?modus=" . ARTEFACT_LIST . "&caveID={$caveID}");
                }
                if ($value['protected'] && $value['playerID']) {
                    $temp['PROPERTY'] = array('text' => 'Schutz');
                } else {
                    if (!$value['secureCave']) {
                        $temp['PROPERTY'] = array('text' => '&uuml;bernehmbar');
                    }
                }
                $caves[] = $temp;
            }
        }
        tmpl_set($template, '/OCCUPIED/CAVES', $caves);
    } else {
        if (sizeof($meineHoehlen) < $params->SESSION->user['takeover_max_caves'] && $cave['takeoverable'] == 1) {
            tmpl_set($template, 'TAKEOVERABLE', array('modus' => TAKEOVER, 'caveID' => $caveID, 'targetXCoord' => $cave['xCoord'], 'targetYCoord' => $cave['yCoord']));
        }
    }
    return tmpl_parse($template);
}
Exemplo n.º 19
0
function getCaveReport($caveID, $ownCaves, $targetCaveID, $method)
{
    global $template;
    if (!$targetCaveID) {
        $template->throwError('Es wurde keine Höhle ausgewählt.');
        return;
    }
    if ($method == 'ajax') {
        $shortVersion = true;
        $template->setFile('mapDetailAjax.tmpl');
    } else {
        $shortVersion = false;
        $template->setFile('mapDetail.tmpl');
    }
    $cave = getCaveByID($targetCaveID);
    $caveDetails = array();
    $playerDetails = null;
    $showArtePossible = false;
    if ($cave['playerID'] != 0) {
        $caveDetails = getCaves($cave['playerID']);
        $playerDetails = Player::getPlayer($cave['playerID']);
        $showArtePossible = $playerDetails->tribe != GOD_ALLY ? true : false;
    }
    $cave['terrain_name'] = $GLOBALS['terrainList'][$cave['terrain']]['name'];
    $cave['terrain_img'] = $GLOBALS['terrainList'][$cave['terrain']]['img'];
    if ($GLOBALS['terrainList'][$cave['terrain']]['tribeRegion']) {
        $cave['terrain_description'] = $GLOBALS['terrainList'][$cave['terrain']]['description'];
        $cave['terrain_tribe_cave'] = $GLOBALS['terrainList'][$cave['terrain']]['tribeRegion'];
        $attackerTribe = Tribe::getByID($cave['lastAttackingTribeID']);
        $cave['tribe_cave_tag'] = $attackerTribe['tag'];
    }
    $region = getRegionByID($cave['regionID']);
    // Wenn die Höhle ein Artefakt enthält und man berechtigt ist -> anzeigen
    if ($cave['hasArtefact'] && ($showArtePossible || $_SESSION['player']->tribe == GOD_ALLY)) {
        $cave['hasArtefact'] = true;
    } else {
        $cave['hasArtefact'] = false;
    }
    if ($cave['hasPet'] && ($showArtePossible || $_SESSION['player']->tribe == GOD_ALLY)) {
        $cave['hasPet'] = true;
    } else {
        $cave['hasArtefact'] = false;
    }
    $template->addVar('cave_details', $cave);
    if ($cave['playerID'] != 0) {
        $template->addVar('player_details', $playerDetails);
        /****************************************************************************************************
        *
        * Alle Höhlen des Spielers ausgeben
        *
        ****************************************************************************************************/
        $caves = array();
        foreach ($caveDetails as $key => $value) {
            $temp = array('caveName' => $value['name'], 'xCoord' => $value['xCoord'], 'yCoord' => $value['yCoord'], 'terrain' => $GLOBALS['terrainList'][$value['terrain']]['name'], 'caveSize' => floor($value[CAVE_SIZE_DB_FIELD] / 50) + 1, 'secureCave' => $value['secureCave']);
            if ($value['hasArtefact'] && ($playerDetails->tribe != GOD_ALLY || $_SESSION['player']->tribe == GOD_ALLY)) {
                $temp['artefact'] = true;
            }
            if ($value['hasPet'] && ($playerDetails->tribe != GOD_ALLY || $_SESSION['player']->tribe == GOD_ALLY)) {
                $temp['pet'] = true;
            }
            $caves[] = $temp;
        }
        $template->addVar('player_caves', $caves);
    } else {
        if (sizeof($ownCaves) < $_SESSION['player']->takeover_max_caves) {
            if ($cave['starting_position'] == 0 && $cave['takeoverable'] == 0 && $cave['takeover_level'] > 0) {
                $template->addVar('maybe_takeoverable', true);
            } else {
                if ($cave['takeoverable'] == 1) {
                    $template->addVar('takeoverable', true);
                }
            }
        }
    }
}
Exemplo n.º 20
0
function getCaveReport($meineHoehlen, $caveID, $targetCaveID)
{
    global $params, $config, $terrainList;
    $cave = getCaveByID($targetCaveID);
    $caveDetails = array();
    $playerDetails = array();
    if ($cave['playerID'] != 0) {
        $caveDetails = getCaves($cave['playerID']);
        $playerDetails = getPlayerByID($cave['playerID']);
    }
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'mapdetail.ihtml');
    if ($cave['protected']) {
        tmpl_set($template, 'PROPERTY', _('Anfängerschutz aktiv'));
    }
    if (!$cave['secureCave'] && $cave['playerID']) {
        tmpl_iterate($template, 'PROPERTY');
        tmpl_set($template, 'PROPERTY', _('übernehmbar'));
    }
    $region = getRegionByID($cave['regionID']);
    tmpl_set($template, array('cavename' => $cave['name'], 'xcoord' => $cave['xCoord'], 'ycoord' => $cave['yCoord'], 'terrain' => $terrainList[$cave['terrain']]['name'], 'region' => $region['name'], 'movementlink' => sprintf("?modus=unit_movement&amp;targetXCoord=%d&amp;targetYCoord=%d&amp;targetCaveName=%s", $cave['xCoord'], $cave['yCoord'], unhtmlentities($cave['name'])), 'backlink' => sprintf("?modus=map&amp;xCoord=%d&amp;yCoord=%d", $cave['xCoord'], $cave['yCoord'])));
    if ($cave['playerID'] != 0) {
        tmpl_set($template, '/OCCUPIED', array('playerLink' => "?modus=player_detail&amp;detailID=" . $playerDetails['playerID'], 'caveOwner' => $playerDetails['name']));
        if ($playerDetails['tribe']) {
            tmpl_set($template, '/OCCUPIED/TRIBE', array('tribeLink' => "?modus=tribe_detail&amp;tribe=" . urlencode(unhtmlentities($playerDetails['tribe'])), 'ownersTribe' => $playerDetails['tribe']));
        }
        if ($cave['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $params->SESSION->player->tribe == GOD_ALLY)) {
            tmpl_set($template, '/OCCUPIED/ARTEFACT/artefactLink', "?modus=artefact_list&amp;caveID={$caveID}");
        }
        $caves = array();
        foreach ($caveDetails as $key => $value) {
            $temp = array('caveName' => $value['name'], 'xCoord' => $value['xCoord'], 'ycoord' => $value['yCoord'], 'terrain' => $terrainList[$value['terrain']]['name'], 'caveSize' => floor($value[CAVE_SIZE_DB_FIELD] / 50) + 1, 'movementLink' => "?modus=unit_movement&amp;targetXCoord=" . $value['xCoord'] . "&amp;targetYCoord=" . $value['yCoord'] . "&amp;targetCaveName=" . unhtmlentities($value['name']));
            if ($value['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $params->SESSION->player->tribe == GOD_ALLY)) {
                $temp['ARTEFACT'] = array('artefactLink' => "?modus=artefact_list&amp;caveID={$caveID}");
            }
            if ($value['protected'] && $value['playerID']) {
                $temp['PROPERTY'] = array('text' => _('Anfängerschutz aktiv'));
            } else {
                if (!$value['secureCave']) {
                    $temp['PROPERTY'] = array('text' => _('übernehmbar'));
                }
            }
            $caves[] = $temp;
        }
        tmpl_set($template, '/OCCUPIED/CAVES', $caves);
    } else {
        if (sizeof($meineHoehlen) < $params->SESSION->player->takeover_max_caves && $cave['takeoverable'] == 1) {
            tmpl_set($template, 'TAKEOVERABLE', array('modus' => TAKEOVER, 'caveID' => $caveID, 'targetXCoord' => $cave['xCoord'], 'targetYCoord' => $cave['yCoord']));
        }
    }
    return tmpl_parse($template);
}
Exemplo n.º 21
0
function cave_giveUpCave($caveID, $playerID, $tribeID)
{
    global $db;
    $sql = $db->prepare("UPDATE " . CAVE_TABLE . "\n                      SET playerID = 0,\n                        takeoverable = 0,\n                        protection_end = NOW()+0,\n                        secureCave = 0\n                      WHERE playerID = :playerID\n                        AND caveID = :caveID\n                        AND starting_position = 0");
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    if (!$sql->execute() || $sql->rowCount() == 0) {
        return false;
    }
    $sql = $db->prepare("UPDATE " . CAVE_TABLE . " c\n                       SET  name = (SELECT name FROM " . CAVE_ORGINAL_NAME_TABLE . " co WHERE co.caveID = :caveID)\n                       WHERE c.caveID = :caveID");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    $sql->execute();
    @unlink("/var/www/speed/images/temp/{$caveID}.png");
    // delete all scheduled Events
    //   Event_movement - will only be deleted, when a new player gets that cave
    //   Event_artefact - can't be deleted, as it would result in serious errors
    //   Event_wonder   - FIX ME: don't know
    $db->query("DELETE FROM " . EVENT_DEFENSE_SYSTEM_TABLE . " WHERE caveID = '{$caveID}'");
    $db->query("DELETE FROM " . EVENT_EXPANSION_TABLE . " WHERE caveID = '{$caveID}'");
    $db->query("DELETE FROM " . EVENT_SCIENCE_TABLE . " WHERE caveID = '{$caveID}'");
    $db->query("DELETE FROM " . EVENT_UNIT_TABLE . " WHERE caveID = '{$caveID}'");
    $db->query("DELETE FROM " . EVENT_HERO_TABLE . " WHERE caveID = '{$caveID}'");
    if ($tribeID != 0) {
        $ownRelations = TribeRelation::getRelations($tribeID);
        foreach ($ownRelations['own'] as $actRelation) {
            $ownType = $actRelation['relationType'];
            if ($GLOBALS['relationList'][$ownType]['isPrepareForWar'] || $GLOBALS['relationList'][$ownType]['isWar']) {
                $newfame = $actRelation['fame'] - NONSECURE_CAVE_VAlUE * NONSECURE_CAVE_GIVEUP_FAKTOR;
                $sql = $db->prepare("UPDATE " . RELATION_TABLE . "\n                             SET fame = :newfame\n                             WHERE tribeID = :actTribeRelation\n                               AND tribeID_target  = :actTargetRelation");
                $sql->bindValue('newfame', $newfame, PDO::PARAM_INT);
                $sql->bindValue('actTribeRelation', $actRelation['tribeID'], PDO::PARAM_INT);
                $sql->bindValue('actTargetRelation', $actRelation['tribeID_target'], PDO::PARAM_INT);
                $sql->execute();
            }
        }
    }
    // delete hero
    $caveData = getCaveByID($caveID);
    if ($caveData['hero'] != 0) {
        hero_killHero($playerID);
    }
    return 1;
}
Exemplo n.º 22
0
function wonder_getWonderContent($playerID, $caveID, &$details)
{
    global $buildingTypeList, $resourceTypeList, $wonderTypeList, $unitTypeList, $config, $params, $db;
    // messages
    $messageText = array(-4 => "Die Zielsiedlung steht unter Schutz. Der Zauber kann nicht erwirkt werden.", -3 => "Die angegebene Zielsiedlung wurde nicht gefunden.", -2 => "Der Zauber kann nicht auf die angegbene Zielsiedlung erwirkt " . "werden.", -1 => "Es ist ein Fehler bei der Verarbeitung Ihrer Anfrage aufgetreten. " . "Bitte wenden Sie sich an die Administratoren.", 0 => "Der Zauber kann nicht erwirkt werden. Es fehlen die " . "notwendigen Voraussetzungen.", 1 => "Das Erwirken des Zaubers scheint Erfolg zu haben.", 2 => "Die G&ouml;tter haben Ihr Flehen nicht erh&ouml;rt! Die " . "eingesetzten Opfergaben sind nat&uuml;rlich dennoch verloren. " . "Mehr Gl&uuml;ck beim n&auml;chsten Mal!");
    // ADDED by chris--- for cavebook -----------------------
    if ($params->POST->targetCaveID != -1) {
        $targetCave = getCaveByID($params->POST->targetCaveID);
        $x = $targetCave[xCoord];
        $y = $targetCave[yCoord];
    } else {
        $x = $params->POST->xCoord;
        $y = $params->POST->yCoord;
    }
    // ------------------------------------------------------
    // and changed $params->POST->xCoord to $x etc
    if (isset($params->POST->wonderID)) {
        $messageID = wonder_processOrder($playerID, $params->POST->wonderID, $caveID, $x, $y, $details, $db);
        $reload = 1;
    }
    if ($reload) {
        // this isn't that elegant...
        $r = getCaveSecure($caveID, $params->SESSION->user['playerID']);
        if ($r->isEmpty()) {
            page_dberror();
        }
        $details = $r->nextRow();
    }
    $template = @tmpl_open("./templates/" . $config->template_paths[$params->SESSION->user['template']] . "/wonder.ihtml");
    // Show a special message
    if (isset($messageID)) {
        tmpl_set($template, '/MESSAGE/message', $messageText[$messageID]);
    }
    // ADDED by chris--- for cavebook ---------------------------------
    // Getting entries
    $cavelist = cavebook_getEntries($params->SESSION->user['playerID']);
    // Show the cave table
    $cavebook = array();
    for ($ix = 0; $ix < sizeof($cavelist[id]); $ix++) {
        $cavebook[$ix][cavebook_entry] = $cavelist[name][$ix];
        $cavebook[$ix][cavebook_id] = $cavelist[id][$ix];
        $cavebook[$ix][cavebook_x] = $cavelist[x][$ix];
        $cavebook[$ix][cavebook_y] = $cavelist[y][$ix];
    }
    // --------------------------------------------------------------
    // Show the wonder table
    for ($i = 0; $i < sizeof($wonderTypeList); $i++) {
        $wonder = $wonderTypeList[$i];
        // the current building
        $result = rules_checkDependencies($wonder, $details);
        if ($result === TRUE) {
            tmpl_iterate($template, 'WONDER');
            tmpl_set($template, "WONDER/alternate", $count++ % 2 ? "alternate" : "");
            tmpl_set($template, 'WONDER', array('name' => $wonder->name, 'wonderID' => $i, 'modus' => WONDER_DETAIL, 'caveID' => $caveID));
            // iterate ressourcecosts
            foreach ($wonder->resourceProductionCost as $resourceID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "WONDER/RESSOURCECOST");
                    if ($details[$resourceTypeList[$resourceID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "WONDER/RESSOURCECOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "WONDER/RESSOURCECOST/LESS/value", $cost);
                    }
                    tmpl_set($template, "WONDER/RESSOURCECOST/dbFieldName", $resourceTypeList[$resourceID]->dbFieldName);
                    tmpl_set($template, "WONDER/RESSOURCECOST/name", $resourceTypeList[$resourceID]->name);
                }
            }
            // iterate unitcosts
            foreach ($wonder->unitProductionCost as $unitID => $function) {
                $cost = ceil(eval('return ' . formula_parseToPHP($function . ';', '$details')));
                if ($cost) {
                    tmpl_iterate($template, "WONDER/UNITCOST");
                    if ($details[$unitTypeList[$unitID]->dbFieldName] >= $cost) {
                        tmpl_set($template, "WONDER/UNITCOST/ENOUGH/value", $cost);
                    } else {
                        tmpl_set($template, "WONDER/UNITCOST/LESS/value", $cost);
                    }
                    tmpl_set($template, "WONDER/UNITCOST/name", $unitTypeList[$unitID]->name);
                }
            }
            // show the wonder link
            tmpl_set($template, 'WONDER/BUILD_LINK', array('action' => WONDER, 'wonderID' => $wonder->wonderID, 'cave_book_link' => CAVE_BOOK, 'BOOKENTRY' => $cavebook, 'caveID' => $caveID));
        } else {
            if ($params->SESSION->user['show_unqualified'] && $result !== FALSE && !$wonder->nodocumentation) {
                tmpl_iterate($template, '/UNQUALIFIEDWONDERS/WONDER');
                tmpl_set($template, '/UNQUALIFIEDWONDERS/WONDER', array('alternate' => $count_unqualified++ % 2 ? "" : "alternate", 'modus' => WONDER_DETAIL, 'wonderID' => $i, 'caveID' => $caveID, 'name' => $wonder->name, 'dependencies' => $result));
            }
        }
    }
    return tmpl_parse($template);
}
Exemplo n.º 23
0
/**
 * Adjusts deviating cave's effects
 *
 * @param dbgame
 *          the link to the game DB
 * @return  all caveIDs
 */
function adjust_adjustCave($db, $caveID)
{
    global $checkOnly;
    // get cave
    $cave = getCaveByID($caveID);
    // get artefact effects
    $artefactEffects = artefact_recalculateEffects($caveID);
    // get wonder effects
    $wonderEffects = wonder_recalc($caveID, $db);
    // check each effect
    $adjustments = array();
    foreach ($GLOBALS['effectTypeList'] as $effectID => $effect) {
        // get actual value
        $actual = $cave[$effect->dbFieldName];
        // get nominal value
        $nominal = $artefactEffects[$effectID] + $wonderEffects[$effectID];
        $nominal += (double) $GLOBALS['terrainList'][$cave['terrain']]['effects'][$effectID];
        // check for deviation
        if ($actual != $nominal) {
            // log difference
            adjust_log('%4d:  %-30s  nominal:%f  actual:%f', $caveID, $effect->dbFieldName, $nominal, $actual);
            // collect adjustments
            $adjustments[] = sprintf('%s = %f', $effect->dbFieldName, $nominal);
        }
    }
    // prepare query
    $set = implode(", ", $adjustments);
    $sql = $db->prepare("UPDATE " . CAVE_TABLE . " SET {$set} WHERE caveID = :caveID");
    $sql->bindValue('caveID', $caveID, pdo::PARAM_INT);
    // adjust cave
    if (0 != sizeof($adjustments) && !$checkOnly) {
        adjust_log('Adjusting cave %d (%s)', $caveID, $cave['name']);
        // send query
        if (!$sql->execute()) {
            adjust_log('Error! "%s": %s', $query, $sql->errorInfo());
        }
    }
}