Exemple #1
0
function unit_processOrder($unitID, $quantity, $caveID, $details)
{
    global $db;
    if ($quantity == -1) {
        $quantity = MAX_SIMULTAN_BUILDED_UNITS;
        while (!processProductionCost($GLOBALS['unitTypeList'][$unitID], $caveID, $details, $quantity) && $quantity != 0) {
            $quantity--;
        }
        if ($quantity <= 0) {
            return 4;
        }
    } else {
        if ($quantity > MAX_SIMULTAN_BUILDED_UNITS || $quantity <= 0) {
            return 4;
        }
        // take the production costs from cave
        if (!processProductionCost($GLOBALS['unitTypeList'][$unitID], $caveID, $details, $quantity)) {
            return 2;
        }
    }
    $prodTime = 0;
    // calculate the production time;
    if ($time_formula = $GLOBALS['unitTypeList'][$unitID]->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$details');
        eval('$prodTime=' . $time_eval_formula . ';');
    }
    $prodTime *= BUILDING_TIME_BASE_FACTOR * $quantity;
    $now = time();
    $sql = $db->prepare("INSERT INTO " . EVENT_UNIT_TABLE . " (caveID, unitID, quantity, " . "start, end) VALUES (:caveID, :unitID, :quantity, :start, :end)");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    $sql->bindValue('unitID', $unitID, PDO::PARAM_INT);
    $sql->bindValue('quantity', $quantity, PDO::PARAM_INT);
    $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('end', time_toDatetime($now + $prodTime), PDO::PARAM_STR);
    if (!$sql->execute() || $sql->rowCount() == 0) {
        processProductionCostSetBack($GLOBALS['unitTypeList'][$unitID], $caveID, $details, $quantity);
        return 2;
    }
    return 3;
}
Exemple #2
0
function unit_processOrder($unitID, $quantity, $caveID, $db, $details)
{
    global $defenseSystemTypeList, $unitTypeList, $buildingTypeList, $scienceTypeList, $resourceTypeList;
    if ($quantity > MAX_SIMULTAN_BUILDED_UNITS || $quantity <= 0) {
        return 4;
    }
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$caveID}'");
    // get all the resource costs
    foreach ($unitTypeList[$unitID]->resourceProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $formula *= $quantity;
            $dbField = $resourceTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // get all the unit costs
    foreach ($unitTypeList[$unitID]->unitProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $formula *= $quantity;
            $dbField = $unitTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // get all the building costs
    foreach ($unitTypeList[$unitID]->buildingProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $formula *= $quantity;
            $dbField = $buildingTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // get all the external costs
    foreach ($unitTypeList[$unitID]->externalProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $formula *= $quantity;
            $dbField = $defenseSystemTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        $set = "UPDATE Cave SET {$set} ";
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE Cave SET {$setBack} WHERE caveID = '{$caveID}'";
    }
    // generate dependecies
    foreach ($unitTypeList[$unitID]->buildingDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$buildingTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->maxBuildingDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$buildingTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->defenseSystemDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->maxDefenseSystemDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->resourceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->maxResourceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->scienceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->maxScienceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->unitDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($unitTypeList[$unitID]->maxUnitDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    $where = implode(" AND ", $where);
    if (!$db->query($set . $where) || !$db->affected_rows() == 1) {
        return 2;
    }
    $prodTime = 0;
    // calculate the production time;
    if ($time_formula = $unitTypeList[$unitID]->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$details');
        eval('$prodTime=' . $time_eval_formula . ';');
    }
    $prodTime *= BUILDING_TIME_BASE_FACTOR * $quantity;
    $now = time();
    $query = sprintf("INSERT INTO Event_unit (caveID, unitID, quantity, " . "`start`, `end`) VALUES (%d, %d, %d, '%s', '%s')", $caveID, $unitID, $quantity, time_toDatetime($now), time_toDatetime($now + $prodTime));
    if (!$db->query($query)) {
        $db->query($setBack);
        return 2;
    }
    return 3;
}
function improvement_processOrder($buildingID, $caveID, $caveData, $db)
{
    global $defenseSystemTypeList, $unitTypeList, $buildingTypeList, $scienceTypeList, $resourceTypeList;
    $building = $buildingTypeList[$buildingID];
    $maxLevel = round(eval('return ' . formula_parseToPHP("{$building->maxLevel};", '$caveData')));
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$caveID}'", "{$building->dbFieldName} < {$maxLevel}");
    // get all the resource costs
    foreach ($building->resourceProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $resourceTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - ({$formula})");
            array_push($setBack, "{$dbField} = {$dbField} + ({$formula})");
            array_push($where, "{$dbField} >= ({$formula})");
        }
    }
    // get all the unit costs
    foreach ($building->unitProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $unitTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // get all the building costs
    foreach ($building->buildingProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $buildingTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // get all the external costs
    foreach ($building->externalProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $defenseSystemTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        $set = "UPDATE Cave SET {$set} ";
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE Cave SET {$setBack} WHERE caveID = '{$caveID}'";
    }
    // generate dependecies
    foreach ($building->buildingDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$buildingTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($building->maxBuildingDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$buildingTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($building->defenseSystemDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($building->maxDefenseSystemDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($building->resourceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($building->maxResourceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($building->scienceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($building->maxScienceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($building->unitDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($building->maxUnitDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    $where = implode(" AND ", $where);
    if (!$db->query($set . $where) || !$db->affected_rows() == 1) {
        return 2;
    }
    $prodTime = 0;
    // calculate the production time;
    if ($time_formula = $building->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$caveData');
        $time_eval_formula = "\$prodTime={$time_eval_formula};";
        eval($time_eval_formula);
    }
    $prodTime *= BUILDING_TIME_BASE_FACTOR;
    $now = time();
    $query = sprintf("INSERT INTO Event_expansion (caveID, expansionID, " . "`start`, `end`) VALUES (%d, %d, '%s', '%s')", $caveID, $buildingID, time_toDatetime($now), time_toDatetime($now + $prodTime));
    if (!$db->query($query)) {
        $db->query($setBack);
        return 2;
    }
    return 3;
}
Exemple #4
0
function wonder_processTribeWonder($caveID, $wonderID, $casterTribe, $targetTribe)
{
    global $db;
    // check if wonder exists and is TribeWonder
    if (isset($GLOBALS['wonderTypeList'][$wonderID]) || !$wonder->isTribeWonder) {
        $wonder = $GLOBALS['wonderTypeList'][$wonderID];
    } else {
        return -33;
    }
    // check if tribes exist
    $targetTribeData = tribe_getTribeByTag($targetTribe);
    $casterTribeData = tribe_getTribeByTag($casterTribe);
    if (!$targetTribeData || !$casterTribeData) {
        return -15;
    }
    // check if tribe is valid
    if (!$targetTribeData['valid']) {
        return -34;
    }
    // check if caster tribe ist valid
    if (!$casterTribeData['valid']) {
        return -35;
    }
    $targetTribeRelations = relation_getRelationsForTribe($targetTribe);
    $casterTribeRelations = relation_getRelationsForTribe($casterTribe);
    $wonderPossible = false;
    foreach ($wonder->targetsPossible as $targetsPossible) {
        // check target
        if ($targetsPossible['target'] == 'own' && strtoupper($casterTribe) != strtoupper($targetTribe)) {
            continue;
        }
        if ($targetsPossible['target'] == 'other' && strtoupper($casterTribe) == strtoupper($targetTribe)) {
            continue;
        }
        // check relation
        $check = wonder_checkRelations($targetsPossible['relation'], $targetTribe, $casterTribe, $casterTribeRelations, $targetTribeRelations);
        if ($check == true) {
            $wonderPossible = true;
            break;
        }
    }
    if ($wonderPossible == false) {
        return -37;
    }
    // take wonder Costs from TribeStorage
    $memberNumber = tribe_getNumberOfMembers($casterTribe);
    if (!processProductionCost($wonder, 0, NULL, $memberNumber, true)) {
        return -33;
    }
    // does the wonder fail?
    if ((double) rand() / (double) getRandMax() > $wonder->chance) {
        return 11;
        // wonder did fail
    }
    // schedule the wonder's impacts
    // create a random factor between -0.3 and +0.3
    $delayRandFactor = rand(0, getrandmax()) / getrandmax() * 0.6 - 0.3;
    // now calculate the delayDelta depending on the first impact's delay
    $delayDelta = $wonder->impactList[0]['delay'] * $delayRandFactor;
    // get targets
    $targets = tribe_getTribeWonderTargets($targetTribe);
    if (!$targets || sizeof($targets) == 0) {
        return -33;
    }
    $now = time();
    // loop over targets
    foreach ($targets as $target) {
        // loop over impacts
        foreach ($wonder->impactList as $impactID => $impact) {
            $delay = (int) (($delayDelta + $impact['delay']) * WONDER_TIME_BASE_FACTOR);
            $sql = $db->prepare("INSERT INTO " . EVENT_WONDER_TABLE . " (casterID, sourceID, targetID, \n                       wonderID, impactID, start, end) \n                       VALUES (:playerID, :caveID, :targetID, :wonderID, :impactID, :start, :end)");
            $sql->bindValue('playerID', 0, PDO::PARAM_INT);
            // playerID 0, for not receiving lots of wonder-end-messages
            $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
            $sql->bindValue('targetID', $target['caveID'], PDO::PARAM_INT);
            $sql->bindValue('wonderID', $wonderID, PDO::PARAM_INT);
            $sql->bindValue('impactID', $impactID, PDO::PARAM_INT);
            $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
            $sql->bindValue('end', time_toDatetime($now + $delay), PDO::PARAM_STR);
            $sql->execute();
        }
        // end foreach impactList
    }
    // end foreach target
    // send caster messages
    $messageClass = new Messages();
    $sourceMessage = 'Sie haben auf den Stamm "' . $targetTribe . '" ein Stammeswunder ' . $wonder->name . ' erwirkt.';
    $messageClass->sendSystemMessage($_SESSION['player']->playerID, 9, 'Stammeswunder erwirkt auf "' . $targetTribe . '"', $sourceMessage);
    // send target messages
    $targetPlayersArray = array();
    foreach ($targets as $target) {
        if (!isset($targetPlayersArray[$target['playerID']])) {
            $targetPlayersArray[$target['playerID']] = $target;
        }
    }
    foreach ($targetPlayersArray as $target) {
        $targetMessage = 'Der Stamm "' . $casterTribe . '" hat ein Stammeswunder auf deine Höhlen gewirkt';
        $messageClass->sendSystemMessage($target['playerID'], 9, 'Stammeswunder!', $targetMessage);
    }
    return 12;
}
Exemple #5
0
function weather_generate($db)
{
    global $db;
    // get regions
    $regions = getRegions();
    // get weather
    $weather = weather_getWeatherWonders($db);
    foreach ($regions as $region) {
        if (!$region['startRegion']) {
            weather_log('Skipping unused region %s.', $region['name']);
            continue;
        }
        weather_log('Processing region %s.', $region['name']);
        // pick a random weather
        $regionweather = $weather[array_rand($weather)];
        weather_log('Selected Weather: %s', $regionweather->name);
        // save weather information in DB
        $query = "UPDATE `Regions` " . "SET `weather` = {$regionweather->weatherID} " . "WHERE `regionID` = {$region['regionID']}";
        if (!$db->query($query)) {
            weather_log('Failed to execute query: %s', $query);
            return -1;
        }
        foreach ($regionweather->impactList as $impactID => $impact) {
            $delay = (int) (($delayDelta + $impact['delay']) * WEATHER_TIME_BASE_FACTOR);
            $now = time();
            $query = sprintf("INSERT INTO Event_weather " . "(`regionID`, `weatherID`, `impactID`, `start`, `end`) " . "VALUES (%d, %d, %d, '%s', '%s')", $region['regionID'], $regionweather->weatherID, $impactID, time_toDatetime($now), time_toDatetime($now + $delay));
            if (!$db->query($query)) {
                weather_log('Failed to execute query: %s', $query);
                return -1;
            }
        }
    }
}
Exemple #6
0
 public static function addHistoryEntry($playerID, $entry, $timestamp = -1)
 {
     global $db;
     if ($timestamp == -1) {
         $timestamp = time();
     }
     // prepare query
     $sql = $db->prepare("INSERT INTO " . PLAYER_HISTORY_TABLE . " \n                           (playerID, timestamp, entry) \n                         VALUES\n                           (:playerID, :timestamp, :entry)");
     $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
     $sql->bindValue('timestamp', time_toDatetime($timestamp), PDO::PARAM_STR);
     $sql->bindValue('entry', $entry, PDO::PARAM_STR);
     return $sql->execute();
 }
Exemple #7
0
/** user wants to initiate artefact. thus he has first to pay the fee successfully
 *  then the status of the artefact can be set to ARTEFACT_INITIATING.
 */
function artefact_beginInitiation($artefact)
{
    global $db, $resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList;
    // Artefakt muss einweihbar sein
    if ($artefact['initiated'] != ARTEFACT_UNINITIATED) {
        return _('Dieses Artefakt kann nicht noch einmal eingeweiht werden.');
    }
    // Hol das Einweihungsritual
    $ritual = artefact_getRitualByID($artefact['initiationID']);
    if ($ritual === FALSE) {
        return _('Fehler: Ritual nicht gefunden.');
    }
    // get initiation costs
    $costs = array();
    $temp = array_merge($resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList);
    foreach ($temp as $val) {
        if ($ritual[$val->dbFieldName]) {
            $costs[$val->dbFieldName] = $ritual[$val->dbFieldName];
        }
    }
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$artefact['caveID']}'");
    // get all the costs
    foreach ($costs as $key => $value) {
        array_push($set, "{$key} = {$key} - ({$value})");
        array_push($setBack, "{$key} = {$key} + ({$value})");
        array_push($where, "{$key} >= ({$value})");
    }
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        $set = "UPDATE Cave SET {$set} ";
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE Cave SET {$setBack} WHERE caveID = '{$artefact['caveID']}'";
    }
    $where = implode(" AND ", $where);
    // substract costs
    //echo "try to substract costs:<br>" . $set.$where . "<br><br>";
    if (!$db->query($set . $where) || !$db->affected_rows() == 1) {
        return _('Es fehlen die notwendigen Voraussetzungen.');
    }
    // register event
    $now = time();
    $sql = sprintf("INSERT INTO Event_artefact " . "(caveID, artefactID, event_typeID, `start`, `end`) " . "VALUES (%d, %d, 1, '%s', '%s')", $artefact['caveID'], $artefact['artefactID'], time_toDatetime($now), time_toDatetime($now + $ritual['duration']));
    if (!$db->query($sql)) {
        $db->query($setBack);
        return _('Sie weihen bereits ein anderes Artefakt ein.');
    }
    // finally set status to initiating
    $sql = "UPDATE Artefact SET initiated = " . ARTEFACT_INITIATING . " WHERE artefactID = {$artefact['artefactID']}";
    $dbresult = $db->query($sql);
    if (!$dbresult) {
        return _('Fehler: Artefakt konnte nicht auf ARTEFACT_INITIATING gestellt werden.');
    }
    return _('erfolgreich eingeweiht');
}
Exemple #8
0
function science_processOrder($scienceID, $caveID, $cave)
{
    global $defenseSystemTypeList, $buildingTypeList, $scienceTypeList, $resourceTypeList, $unitTypeList;
    global $config, $db;
    $science = $scienceTypeList[$scienceID];
    $maxLevel = round(eval('return ' . formula_parseToPHP("{$science->maxLevel};", '$cave')));
    // check, that this science isn't researched in an other cave at the
    // same time
    $sql = $db->prepare("SELECT event_scienceID\n                       FROM " . EVENT_SCIENCE_TABLE . "\n                       WHERE playerID = :playerID \n                         AND scienceID = :scienceID");
    $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
    $sql->bindValue('scienceID', $scienceID, PDO::PARAM_INT);
    if ($sql->rowCountSelect() != 0) {
        return 4;
    }
    // check for scienceMaxDeps in Event_Handler
    $dep_count = 0;
    $deps = '';
    foreach ($science->maxScienceDepList as $key => $value) {
        if ($value != -1 && $cave[$scienceTypeList[$key]->dbFieldName] > $value - 1) {
            if ($dep_count) {
                $deps .= ", ";
            }
            $deps .= $key;
            $dep_count++;
        }
    }
    if ($dep_count) {
        $sql = $db->prepare("SELECT event_scienceID\n                         FROM " . EVENT_SCIENCE_TABLE . "\n                         WHERE playerID = :playerID\n                           AND scienceID IN ({$deps})");
        $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
        if ($sql->rowCountSelect() != 0) {
            return 5;
        }
    }
    // take production costs from cave
    if (!processProductionCost($science, $caveID, $cave)) {
        return 2;
    }
    $prodTime = 0;
    // calculate the production time;
    if ($time_formula = $science->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$cave');
        $time_eval_formula = "\$prodTime={$time_eval_formula};";
        eval($time_eval_formula);
    }
    $prodTime *= SCIENCE_TIME_BASE_FACTOR;
    $now = time();
    $sql = $db->prepare("INSERT INTO " . EVENT_SCIENCE_TABLE . " (caveID, playerID, scienceID, " . "start, end) VALUES (:caveID, :playerID, :scienceID, :start, :end)");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
    $sql->bindValue('scienceID', $scienceID, PDO::PARAM_INT);
    $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('end', time_toDatetime($now + $prodTime), PDO::PARAM_STR);
    if (!$sql->execute() || !$sql->rowCount() == 1) {
        processProductionCostSetBack($science, $caveID, $cave);
        return 2;
    }
    return 3;
}
Exemple #9
0
function wonder_processOrder($playerID, $wonderID, $caveID, $coordX, $coordY, $caveData, $db)
{
    global $defenseSystemTypeList, $unitTypeList, $buildingTypeList, $scienceTypeList, $resourceTypeList, $wonderTypeList, $WONDERRESISTANCE;
    if ($wonderTypeList[$wonderID]->target == "same") {
        $targetID = $caveID;
        $query = "SELECT * FROM Cave " . "WHERE caveID = '{$targetID}' ";
        if (!($result = $db->query($query)) || !($targetData = $result->nextRow())) {
            return -3;
        }
        $coordX = $targetData['xCoord'];
        $coordY = $targetData['yCoord'];
    } else {
        // check the target cave
        $query = "SELECT * FROM Cave " . "WHERE xCoord = '{$coordX}' " . "AND yCoord = '{$coordY}'";
        if (!($result = $db->query($query)) || !($targetData = $result->nextRow())) {
            return -3;
        }
        $targetID = $targetData['caveID'];
    }
    // check, if cave allowed
    if ($wonderTypeList[$wonderID]->target == "own") {
        $allowed = $playerID == $targetData['playerID'];
    } else {
        if ($wonderTypeList[$wonderID]->target == "other") {
            $allowed = $playerID != $targetData['playerID'];
        } else {
            // $wonderTypeList[$wonderID]->target == "all"  or == "same"
            $allowed = 1;
        }
    }
    if (!$allowed) {
        return -2;
    }
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$caveID}' ");
    // get all the resource costs
    foreach ($wonderTypeList[$wonderID]->resourceProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $resourceTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - ({$formula})");
            array_push($setBack, "{$dbField} = {$dbField} + ({$formula})");
            array_push($where, "{$dbField} >= ({$formula})");
        }
    }
    // get all the unit costs
    foreach ($wonderTypeList[$wonderID]->unitProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $unitTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->buildingProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $buildingTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        $set = "UPDATE Cave SET {$set} ";
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE Cave SET {$setBack} WHERE caveID = '{$caveID}'";
    }
    // generate dependecies
    foreach ($wonderTypeList[$wonderID]->buildingDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$buildingTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->maxBuildingDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$wonderTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->defenseSystemDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->maxDefenseSystemDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->resourceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->maxResourceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->scienceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->maxScienceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->unitDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($wonderTypeList[$wonderID]->maxUnitDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    $where = implode(" AND ", $where);
    if (!$db->query($set . $where) || $db->affected_rows() != 1) {
        return 0;
    }
    // calculate the chance and evaluate into $chance
    if ($chance_formula = $wonderTypeList[$wonderID]->chance) {
        $chance_eval_formula = formula_parseToPHP($chance_formula, '$caveData');
        $chance_eval_formula = "\$chance={$chance_eval_formula};";
        eval($chance_eval_formula);
    }
    // if this wonder is offensive
    // calculate the wonder resistance and evaluate into $resistance
    // TODO: Wertebereich der Resistenz ist derzeit 0 - 1, also je höher desto resistenter
    if ($wonderTypeList[$wonderID]->offensiveness == "offensive") {
        $resistance_eval_formula = formula_parseToPHP($WONDERRESISTANCE, '$targetData');
        $resistance_eval_formula = "\$resistance={$resistance_eval_formula};";
        eval($resistance_eval_formula);
    } else {
        $resistance = 0.0;
    }
    // does the wonder fail?
    if ((double) rand() / (double) getRandMax() > $chance - $resistance) {
        return 2;
        // wonder did fail
    }
    // schedule the wonder's impacts
    // create a random factor between -0.3 and +0.3
    $delayRandFactor = rand(0, getrandmax()) / getrandmax() * 0.6 - 0.3;
    // now calculate the delayDelta depending on the first impact's delay
    $delayDelta = $wonderTypeList[$wonderID]->impactList[0]['delay'] * $delayRandFactor;
    foreach ($wonderTypeList[$wonderID]->impactList as $impactID => $impact) {
        $delay = (int) (($delayDelta + $impact['delay']) * WONDER_TIME_BASE_FACTOR);
        $now = time();
        $query = sprintf("INSERT INTO Event_wonder (casterID, sourceID, targetID, " . "wonderID, impactID, `start`, `end`) " . "VALUES (%d, %d, %d, %d, %d, '%s', '%s')", $playerID, $caveID, $targetID, $wonderID, $impactID, time_toDatetime($now), time_toDatetime($now + $delay));
        if (!$db->query($query)) {
            $db->query($setBack);
            return -1;
        }
    }
    // create messages
    $sourceMessage = "Sie haben auf die H&ouml;hle in {$coordX}/{$coordY} ein Wunder " . $wonderTypeList[$wonderID]->name . " erwirkt.";
    $targetMessage = "Der Besitzer der H&ouml;hle in {$caveData['xCoord']}/{$caveData['yCoord']} " . "hat auf Ihre H&ouml;hle in {$coordX}/{$coordY} ein Wunder gewirkt.";
    messages_sendSystemMessage($playerID, 9, "Wunder erwirkt auf {$coordX}/{$coordY}", $sourceMessage, $db);
    messages_sendSystemMessage($targetData['playerID'], 9, "Wunder!", $targetMessage, $db);
    return 1;
}
Exemple #10
0
function wonder_processOrder($playerID, $wonderID, $caveID, $coordX, $coordY, $caveData)
{
    global $db;
    if ($GLOBALS['wonderTypeList'][$wonderID]->target == "same") {
        $targetID = $caveID;
        $sql = $db->prepare("SELECT * FROM " . CAVE_TABLE . " \n                         WHERE caveID = :targetID");
        $sql->bindValue('targetID', $targetID);
        if (!$sql->execute() || !($targetData = $sql->fetch(PDO::FETCH_ASSOC))) {
            return -3;
        }
        $sql->closeCursor();
        $coordX = $targetData['xCoord'];
        $coordY = $targetData['yCoord'];
    } else {
        // check the target cave
        $sql = $db->prepare("SELECT * FROM " . CAVE_TABLE . " \n                        WHERE xCoord = :coordX\n                        AND yCoord = :coordY");
        $sql->bindValue('coordX', $coordX, PDO::PARAM_INT);
        $sql->bindValue('coordY', $coordY, PDO::PARAM_INT);
        if (!$sql->execute() || !($targetData = $sql->fetch(PDO::FETCH_ASSOC))) {
            return -3;
        }
        $sql->closeCursor();
        $targetID = $targetData['caveID'];
    }
    // check, if cave allowed
    if ($GLOBALS['wonderTypeList'][$wonderID]->target == "own") {
        $allowed = $playerID == $targetData['playerID'];
    } else {
        if ($GLOBALS['wonderTypeList'][$wonderID]->target == "other") {
            $allowed = $playerID != $targetData['playerID'];
        } else {
            // $wonderTypeList[$wonderID]->target == "all"  or == "same"
            $allowed = 1;
        }
    }
    if (!$allowed) {
        return -2;
    }
    // take production costs from cave
    if (!processProductionCost($GLOBALS['wonderTypeList'][$wonderID], $caveID, $caveData)) {
        return 0;
    }
    // calculate the chance and evaluate into $chance
    if ($chance_formula = $GLOBALS['wonderTypeList'][$wonderID]->chance) {
        $chance_eval_formula = formula_parseToPHP($chance_formula, '$caveData');
        $chance_eval_formula = "\$chance={$chance_eval_formula};";
        eval($chance_eval_formula);
    }
    // if this wonder is offensive
    // calculate the wonder resistance and evaluate into $resistance
    // TODO: Wertebereich der Resistenz ist derzeit 0 - 1, also je höher desto resistenter
    if ($GLOBALS['wonderTypeList'][$wonderID]->offensiveness == "offensive") {
        $resistance_eval_formula = formula_parseToPHP(GameConstants::WONDER_RESISTANCE, '$targetData');
        $resistance_eval_formula = "\$resistance={$resistance_eval_formula};";
        eval($resistance_eval_formula);
    } else {
        $resistance = 0.0;
    }
    // does the wonder fail?
    if ((double) rand() / (double) getRandMax() > $chance - $resistance) {
        return 2;
        // wonder did fail
    }
    // schedule the wonder's impacts
    // create a random factor between -0.3 and +0.3
    $delayRandFactor = rand(0, getrandmax()) / getrandmax() * 0.6 - 0.3;
    // now calculate the delayDelta depending on the first impact's delay
    $delayDelta = $GLOBALS['wonderTypeList'][$wonderID]->impactList[0]['delay'] * $delayRandFactor;
    foreach ($GLOBALS['wonderTypeList'][$wonderID]->impactList as $impactID => $impact) {
        $delay = (int) (($delayDelta + $impact['delay']) * WONDER_TIME_BASE_FACTOR);
        $now = time();
        $sql = $db->prepare("INSERT INTO " . EVENT_WONDER_TABLE . " (casterID, sourceID, targetID, \n                     wonderID, impactID, start, end) \n                     VALUES (:playerID, :caveID, :targetID, :wonderID, :impactID, :start, :end)");
        $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
        $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
        $sql->bindValue('targetID', $targetID, PDO::PARAM_INT);
        $sql->bindValue('wonderID', $wonderID, PDO::PARAM_INT);
        $sql->bindValue('impactID', $impactID, PDO::PARAM_INT);
        $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
        $sql->bindValue('end', time_toDatetime($now + $delay), PDO::PARAM_STR);
        if (!$sql->execute()) {
            //give production costs back
            processProductionCostSetBack($GLOBALS['wonderTypeList'][$wonderID], $caveID, $caveData);
            return -1;
        }
    }
    // create messages
    $messageClass = new Messages();
    $sourceMessage = 'Sie haben auf die Höhle in ' . $coordX . '/' . $coordY . ' ein Wunder ' . $GLOBALS['wonderTypeList'][$wonderID]->name . ' erwirkt.';
    $targetMessage = 'Der Besitzer der Höhle in ' . $caveData['xCoord'] . '/' . $caveData['yCoord'] . ' hat auf Ihre Höhle in ' . $coordX . '/' . $coordY . ' ein Wunder gewirkt.';
    // create xml message
    $casterxml = new SimpleXMLElement('<?xml version=\'1.0\' encoding=\'utf-8\'?><wonderMessageCaster></wonderMessageCaster>');
    $casterxml->addChild('timestamp', time());
    $casterxml->addChild('wonderType', 'caster');
    $casterxml->addChild('source');
    $casterxml->source->addChild('xCoord', $caveData['xCoord']);
    $casterxml->source->addChild('yCoord', $caveData['yCoord']);
    $casterxml->source->addChild('caveName', $caveData['name']);
    $casterxml->addChild('target');
    $casterxml->target->addChild('xCoord', $targetData['xCoord']);
    $casterxml->target->addChild('yCoord', $targetData['yCoord']);
    $casterxml->target->addChild('caveName', $targetData['name']);
    $casterxml->addChild('wonderName', $GLOBALS['wonderTypeList'][$wonderID]->name);
    $targetxml = new SimpleXMLElement('<?xml version=\'1.0\' encoding=\'utf-8\'?><wonderMessageTarget></wonderMessageTarget>');
    $targetxml->addChild('timestamp', time());
    $targetxml->addChild('wonderType', 'target');
    $targetxml->addChild('source');
    $targetxml->source->addChild('xCoord', $caveData['xCoord']);
    $targetxml->source->addChild('yCoord', $caveData['yCoord']);
    $targetxml->source->addChild('caveName', $caveData['name']);
    $targetxml->addChild('target');
    $targetxml->target->addChild('xCoord', $targetData['xCoord']);
    $targetxml->target->addChild('yCoord', $targetData['yCoord']);
    $targetxml->target->addChild('caveName', $targetData['name']);
    $messageClass->sendSystemMessage($playerID, 9, 'Wunder erwirkt auf ' . $coordX . '/' . $coordY, $sourceMessage, $casterxml->asXML());
    $messageClass->sendSystemMessage($targetData['playerID'], 9, 'Wunder!', $targetMessage, $targetxml->asXML());
    return 1;
}
Exemple #11
0
function page_ore()
{
    //TODO
    return;
    global $db;
    $now = time();
    // increment time diff count
    if (isset($_SESSION['ore_time'])) {
        $diff = $now - $_SESSION['ore_time'];
        if (!isset($_SESSION['ore_time_diff'][$diff])) {
            $_SESSION['ore_time_diff'][$diff] = 1;
        } else {
            $_SESSION['ore_time_diff'][$diff]++;
        }
        // increment counter and log if required
        if (++$_SESSION['ore_counter'] == 50) {
            $sql = $db->prepare("INSERT INTO ore_log\n                            (playerID, time_diff, stamp, sid)\n                          VALUES (:playerID, :time_diff, :stamp, :sid)");
            $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
            $sql->bindValue('time_diff', addslashes(var_export($_SESSION['ore_time_diff'], TRUE)), PDO::PARAM_INT);
            $sql->bindValue('stamp', addslashes(time_toDatetime($now)), PDO::PARAM_STR);
            $sql->bindValue('sid', session_id(), PDO::PARAM_STR);
            $sql->execute();
            $_SESSION['ore_counter'] = 0;
        }
    }
    // set new timestamp
    $_SESSION['ore_time'] = $now;
}
Exemple #12
0
 function addHistoryEntry($db, $playerID, $entry, $timestamp = -1)
 {
     if ($timestamp == -1) {
         $timestamp = time();
     }
     // prepare query
     $query = sprintf("INSERT INTO `player_history` (`playerID`, `timestamp`, " . "`entry`) VALUES (%d, '%s', '%s')", (int) $playerID, time_toDatetime($timestamp), addslashes($entry));
     return $db->query($query);
 }
Exemple #13
0
function setMovementEvent($caveID, $caveData, $targetX, $targetY, $unit, $resource, $movementID, $reqFood, $absDuration, $artefactID, $heroID, $caveSpeedFactor)
{
    global $db;
    // ziel-hoehlenID holen
    $sql = $db->prepare("SELECT caveID FROM " . CAVE_TABLE . " \n                       WHERE xCoord = :targetX AND yCoord = :targetY");
    $sql->bindValue('targetX', $targetX, PDO::PARAM_INT);
    $sql->bindVAlue('targetY', $targetY, PDO::PARAM_INT);
    if ($sql->rowCountSelect() != 1) {
        return 1;
    }
    if (!$sql->execute()) {
        return 1;
    }
    $row = $sql->fetch();
    $sql->closeCursor();
    $targetCaveID = $row['caveID'];
    // updates fuer cave basteln
    $update = "UPDATE " . CAVE_TABLE . " ";
    $updateRollback = "UPDATE " . CAVE_TABLE . " ";
    $where = "WHERE caveID = {$caveID} ";
    $whereRollback = "WHERE caveID = {$caveID} ";
    $set = $setRollback = array();
    foreach ($unit as $unitID => $value) {
        if (!empty($value)) {
            $set[] = $GLOBALS['unitTypeList'][$unitID]->dbFieldName . " = " . $GLOBALS['unitTypeList'][$unitID]->dbFieldName . " - {$value} ";
            $setRollback[] = $GLOBALS['unitTypeList'][$unitID]->dbFieldName . " = " . $GLOBALS['unitTypeList'][$unitID]->dbFieldName . " + {$value} ";
            $where .= "AND " . $GLOBALS['unitTypeList'][$unitID]->dbFieldName . " >= {$value} ";
            $where .= "AND {$value} >= 0 ";
            // check for values bigger 0!
        }
    }
    foreach ($resource as $resourceID => $value) {
        $value_to_check = $value;
        if ($resourceID == GameConstants::FUEL_RESOURCE_ID) {
            $value += $reqFood;
        }
        if (!empty($value) || !empty($value_to_check)) {
            $set[] = $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName . " = " . $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName . " - {$value} ";
            $setRollback[] = $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName . " = " . $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName . " + {$value} ";
            $where .= "AND " . $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName . " >= {$value} ";
            if (!empty($value_to_check)) {
                $where .= "AND {$value_to_check} >= 0 ";
            }
        }
    }
    $update = $update . "SET " . implode(", ", $set) . $where;
    $updateRollback = $updateRollback . "SET " . implode(", ", $setRollback) . $whereRollback;
    if (!$db->exec($update)) {
        return 2;
    }
    // remove the artefact if any
    if ($artefactID > 0) {
        // TODO: what should happen, if the first succedes but one of the other fails afterwards
        if (!artefact_removeEffectsFromCave($artefactID)) {
            $db->query($updateRollback);
            return 3;
        }
        if (!artefact_uninitiateArtefact($artefactID)) {
            $db->query($updateRollback);
            return 3;
        }
        if (!artefact_removeArtefactFromCave($artefactID)) {
            $db->query($updateRollback);
            return 3;
        }
    }
    // remove hero if any
    if ($heroID > 0) {
        if (!hero_removeHeroFromCave($heroID)) {
            return 3;
        }
    }
    // insert fuer movement_event basteln
    $now = time();
    $insert = "INSERT INTO " . EVENT_MOVEMENT_TABLE . " (caveID, source_caveID, target_caveID, movementID, `start`, `end`, artefactID, heroID, speedFactor, exposeChance, ";
    $i = 0;
    foreach ($unit as $uID => $val) {
        if (!empty($val)) {
            if ($i++ != 0) {
                $insert .= " , ";
            }
            $insert .= $GLOBALS['unitTypeList'][$uID]->dbFieldName;
        }
    }
    foreach ($resource as $rID => $val) {
        if (!empty($val)) {
            $insert .= " , " . $GLOBALS['resourceTypeList'][$rID]->dbFieldName;
        }
    }
    $speedFactor = getMaxSpeedFactor($unit) * $caveSpeedFactor;
    // determine expose chance
    $exposeChance = (double) rand() / (double) getRandMax();
    $insert .= sprintf(" ) VALUES (%d, %d, %d, %d, " . "'%s', '%s', %d, %d, %f, %f, ", $caveID, $caveID, $targetCaveID, $movementID, time_toDatetime($now), time_toDatetime($now + $absDuration * 60), $artefactID, $heroID, $speedFactor, $exposeChance);
    $i = 0;
    foreach ($unit as $val) {
        if (!empty($val)) {
            if ($i++ != 0) {
                $insert .= " , ";
            }
            $insert .= $val;
        }
    }
    foreach ($resource as $val) {
        if (!empty($val)) {
            $insert .= " , " . $val;
        }
    }
    $insert .= " )";
    if (!$db->exec($insert)) {
        // update rueckgaengig machen
        $db->query($updateRollback);
        return 3;
    }
    return 0;
}
Exemple #14
0
function weather_generate()
{
    global $db;
    // get regions
    $regions = getRegions();
    // get weather
    $weather = weather_getWeatherWonders();
    foreach ($regions as $region) {
        if (!$region['startRegion']) {
            weather_log('Skipping unused region %s.', $region['name']);
            continue;
        }
        weather_log('Processing region %s.', $region['name']);
        // pick a random weather
        $regionweather = $weather[array_rand($weather)];
        weather_log('Selected Weather: %s', $regionweather->name);
        // save weather information in DB
        $sql = $db->prepare("UPDATE " . REGIONS_TABLE . "\n                         SET weather = :weather\n                         WHERE regionID = :regionID");
        $sql->bindValue('weather', $regionweather->weatherID, PDO::PARAM_INT);
        $sql->bindValue('regionID', $region['regionID'], PDO::PARAM_INT);
        if (!$sql->execute()) {
            weather_log('Failed to execute query: %s', $query);
            return -1;
        }
        $sql = $db->prepare("INSERT INTO " . EVENT_WEATHER_TABLE . "\n                         (regionID, weatherID, impactID, start, end)\n                         VALUES (:regionID, :weatherID, :impactID, :start, :end)");
        foreach ($regionweather->impactList as $impactID => $impact) {
            $delay = (int) ($impact['delay'] * WEATHER_TIME_BASE_FACTOR);
            $now = time();
            $sql->bindValue('regionID', $region['regionID'], PDO::PARAM_INT);
            $sql->bindValue('weatherID', $regionweather->weatherID, PDO::PARAM_INT);
            $sql->bindValue('impactID', $impactID, PDO::PARAM_INT);
            $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
            $sql->bindValue('end', time_toDatetime($now + $delay), PDO::PARAM_STR);
            if (!$sql->execute()) {
                weather_log('Failed to execute query');
                return -1;
            }
        }
    }
}
Exemple #15
0
function improvement_processOrder($buildingID, $caveID, $caveData)
{
    global $db;
    $sql = $db->prepare("SELECT count(*) as count\n                       FROM " . EVENT_EXPANSION_TABLE . " \n                       WHERE caveID = :caveID");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    if (!$sql->execute()) {
        return 2;
    }
    $return = $sql->fetch();
    $sql->closeCursor();
    if ($return['count'] != 0) {
        return 2;
    }
    $building = $GLOBALS['buildingTypeList'][$buildingID];
    // take production costs from cave
    if (!processProductionCost($building, $caveID, $caveData)) {
        return 2;
    }
    $prodTime = 0;
    // calculate the production time;
    if ($time_formula = $building->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$caveData');
        $time_eval_formula = "\$prodTime={$time_eval_formula};";
        eval($time_eval_formula);
    }
    $prodTime *= BUILDING_TIME_BASE_FACTOR;
    $now = time();
    $sql = $db->prepare("INSERT INTO " . EVENT_EXPANSION_TABLE . " \n                      (caveID, expansionID, start, end) \n                      VALUES (:caveID, :expansionID, :start, :end)");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    $sql->bindValue('expansionID', $buildingID, PDO::PARAM_INT);
    $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('end', time_toDatetime($now + $prodTime), PDO::PARAM_STR);
    if (!$sql->execute() || !$sql->rowCount() == 1) {
        processProductionCostSetBack($building, $caveID, $caveData);
        return 2;
    }
    return 3;
}
Exemple #16
0
/** user wants to initiate artefact. thus he has first to pay the fee successfully
 *  then the status of the artefact can be set to ARTEFACT_INITIATING.
 */
function artefact_beginInitiation($artefact)
{
    global $db;
    // Artefakt muss einweihbar sein
    if ($artefact['initiated'] != ARTEFACT_UNINITIATED) {
        return -5;
    }
    // Hol das Einweihungsritual
    $ritual = artefact_getRitualByID($artefact['initiationID']);
    if ($ritual === FALSE) {
        return -1;
    }
    // get initiation costs
    $costs = array();
    $temp = array_merge($GLOBALS['resourceTypeList'], $GLOBALS['buildingTypeList'], $GLOBALS['unitTypeList'], $GLOBALS['scienceTypeList'], $GLOBALS['defenseSystemTypeList']);
    foreach ($temp as $val) {
        if (isset($ritual[$val->dbFieldName])) {
            if ($ritual[$val->dbFieldName]) {
                $costs[$val->dbFieldName] = $ritual[$val->dbFieldName];
            }
        }
    }
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$artefact['caveID']}'");
    // get all the costs
    foreach ($costs as $key => $value) {
        array_push($set, "{$key} = {$key} - ({$value})");
        array_push($setBack, "{$key} = {$key} + ({$value})");
        array_push($where, "{$key} >= ({$value})");
    }
    $where = implode(" AND ", $where);
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        if (!$db->exec("UPDATE " . CAVE_TABLE . " SET {$set} {$where}")) {
            return -2;
        }
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE " . CAVE_TABLE . " SET {$setBack} WHERE caveID = '{$artefact['caveID']}'";
    } else {
        return -2;
    }
    // register event
    $now = time();
    $sql = $db->prepare("INSERT INTO " . EVENT_ARTEFACT_TABLE . "\n                         (caveID, artefactID, event_typeID, start, end)\n                       VALUES\n                         (:caveID, :artefactID, 1, :start, :end)");
    $sql->bindValue('caveID', $artefact['caveID'], PDO::PARAM_INT);
    $sql->bindValue('artefactID', $artefact['artefactID'], PDO::PARAM_INT);
    $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('end', time_toDatetime($now + $ritual['duration']), PDO::PARAM_STR);
    if (!$sql->execute()) {
        $db->query($setBack);
        return -3;
    }
    // finally set status to initiating
    $sql = $db->prepare("UPDATE " . ARTEFACT_TABLE . "\n                       SET initiated = " . ARTEFACT_INITIATING . " \n                       WHERE artefactID = :artefactID");
    $sql->bindValue('artefactID', $artefact['artefactID'], PDO::PARAM_INT);
    if (!$sql->execute()) {
        $db->query($setBack);
        return -4;
    }
    return 1;
}
Exemple #17
0
function science_processOrder($scienceID, $caveID, $playerID, $caveData, $db)
{
    global $defenseSystemTypeList, $buildingTypeList, $scienceTypeList, $resourceTypeList, $unitTypeList, $config;
    $science = $scienceTypeList[$scienceID];
    $maxLevel = round(eval('return ' . formula_parseToPHP("{$science->maxLevel};", '$caveData')));
    // check, that this science isn't researched in an other cave at the
    // same time
    $sql = "SELECT event_scienceID FROM Event_science " . "WHERE playerID='{$playerID}' AND scienceID = '{$scienceID}'";
    $r = $db->query($sql);
    if (!$r) {
        page_dberror();
    }
    if (!$r->isEmpty()) {
        return 4;
    }
    // check for scienceMaxDeps in Event_Handler
    $dep_count = 0;
    foreach ($science->maxScienceDepList as $key => $value) {
        if ($value != -1 && $caveData[$scienceTypeList[$key]->dbFieldName] > $value - 1) {
            if ($dep_count) {
                $deps .= ",";
            }
            $deps .= $key;
            $dep_count++;
        }
    }
    if ($dep_count) {
        $query = "SELECT event_scienceID FROM Event_science " . "WHERE playerID = '{$playerID}' AND scienceID IN ({$deps})";
        if (!($r = $db->query($query))) {
            page_dberror();
        }
        if (!$r->isEmpty()) {
            return 5;
        }
    }
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$caveID}'", "{$science->dbFieldName} < {$maxLevel}");
    // get all the resource costs
    foreach ($science->resourceProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $resourceTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - ({$formula})");
            array_push($setBack, "{$dbField} = {$dbField} + ({$formula})");
            array_push($where, "{$dbField} >= ({$formula})");
        }
    }
    // get all the unit costs
    foreach ($science->unitProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $unitTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // get all the building costs
    foreach ($science->buildingProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $buildingTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // get all the external costs
    foreach ($science->externalProductionCost as $key => $value) {
        if ($value != "" && $value != "0") {
            $formula = formula_parseToSQL($value);
            $dbField = $defenseSystemTypeList[$key]->dbFieldName;
            array_push($set, "{$dbField} = {$dbField} - {$formula}");
            array_push($setBack, "{$dbField} = {$dbField} + {$formula}");
            array_push($where, "{$dbField} >= {$formula}");
        }
    }
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        $set = "UPDATE Cave SET {$set} ";
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE Cave SET {$setBack} WHERE caveID = '{$caveID}'";
    }
    // generate dependecies
    foreach ($science->buildingDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$buildingTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($science->maxBuildingDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$buildingTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($science->defenseSystemDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($science->maxDefenseSystemDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$defenseSystemTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($science->resourceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($science->maxResourceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$resourceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($science->scienceDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($science->maxScienceDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$scienceTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    foreach ($science->unitDepList as $key => $value) {
        if ($value != "" && $value != "0") {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} >= {$value}");
        }
    }
    foreach ($science->maxUnitDepList as $key => $value) {
        if ($value != -1) {
            array_push($where, "{$unitTypeList[$key]->dbFieldName} <= {$value}");
        }
    }
    $where = implode(" AND ", $where);
    if (!$db->query($set . $where) || !$db->affected_rows() == 1) {
        return 2;
    }
    $prodTime = 0;
    // calculate the production time;
    if ($time_formula = $science->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$caveData');
        $time_eval_formula = "\$prodTime={$time_eval_formula};";
        eval($time_eval_formula);
    }
    $prodTime *= SCIENCE_TIME_BASE_FACTOR;
    $now = time();
    $query = sprintf("INSERT INTO Event_science (caveID, playerID, scienceID, " . "`start`, `end`) VALUES (%d, %d, %d, '%s', '%s')", $caveID, $playerID, $scienceID, time_toDatetime($now), time_toDatetime($now + $prodTime));
    if (!$db->query($query)) {
        $db->query($setBack);
        return 2;
    }
    return 3;
}
Exemple #18
0
function merchant_processOrder($tradeID, $caveID, $caveData)
{
    global $db;
    $sql = $db->prepare("SELECT LockTill < :LockTill as allowed\n                       FROM " . TRADELOCK_TABLE . "\n                       WHERE PlayerID= :playerID \n                        AND cat = :cat");
    $sql->bindValue('LockTill', date("Y-m-d H:i:s", time()), PDO::PARAM_STR);
    $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
    $sql->bindValue('cat', $GLOBALS['tradeTypeList'][$tradeID]->category, PDO::PARAM_STR);
    if ($sql->execute()) {
        $row = $sql->fetch(PDO::FETCH_ASSOC);
        if ($row["allowed"] == 0 && $row) {
            return -2;
        }
    }
    $sql = $db->prepare("DELETE FROM " . TRADELOCK_TABLE . "\n                       WHERE  PlayerID= :playerID\n                        AND cat = :cat");
    $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
    $sql->bindValue('cat', $GLOBALS['tradeTypeList'][$tradeID]->category, PDO::PARAM_STR);
    if (!$sql->execute()) {
        return -1;
    }
    // take production costs from cave
    if (!processProductionCost($GLOBALS['tradeTypeList'][$tradeID], $caveID, $caveData)) {
        return 0;
    }
    $now = time();
    if ($GLOBALS['tradeTypeList'][$tradeID]->category == "potion") {
        foreach ($GLOBALS['tradeTypeList'][$tradeID]->impactList[0]['potions'] as $potionID => $potion) {
            if (!$GLOBALS['potionTypeList'][$potionID]) {
                processProductionCostSetBack($GLOBALS['tradeTypeList'][$tradeID], $caveID, $caveData);
                return -1;
            }
            $sql = $db->prepare("UPDATE " . PLAYER_TABLE . "\n                           SET " . $GLOBALS['potionTypeList'][$potionID]->dbFieldName . " =  " . $GLOBALS['potionTypeList'][$potionID]->dbFieldName . " + :absolute \n                           WHERE playerID = :playerID");
            $sql->bindValue('absolute', $potion['absolute'], PDO::PARAM_INT);
            $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
            if (!$sql->execute() || $sql->rowCount() == 0) {
                processProductionCostSetBack($GLOBALS['tradeTypeList'][$tradeID], $caveID, $caveData);
                return -1;
            }
        }
    } else {
        // create a random factor between -0.3 and +0.3
        $delayRandFactor = rand(0, getrandmax()) / getrandmax() * 0.6 - 0.3;
        // now calculate the delayDelta depending on the first impact's delay
        $delayDelta = $GLOBALS['tradeTypeList'][$tradeID]->impactList[0]['delay'] * $delayRandFactor;
        foreach ($GLOBALS['tradeTypeList'][$tradeID]->impactList as $impactID => $impact) {
            $delay = (int) (($delayDelta + $impact['delay']) * WONDER_TIME_BASE_FACTOR);
            $sql = $db->prepare("INSERT INTO " . EVENT_TRADE_TABLE . " \n                           (targetID, tradeID, impactID, start, end)\n                            VALUES (:targetID, :tradeID, :impactID, :start, :end)");
            $sql->bindValue('targetID', $caveID, PDO::PARAM_INT);
            $sql->bindValue('tradeID', $tradeID - 1, PDO::PARAM_INT);
            $sql->bindValue('impactID', $impactID, PDO::PARAM_INT);
            $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
            $sql->bindValue('end', time_toDatetime($now + $delay), PDO::PARAM_STR);
            if (!$sql->execute() || $sql->rowCount() == 0) {
                processProductionCostSetBack($GLOBALS['tradeTypeList'][$tradeID], $caveID, $caveData);
                return -1;
            }
        }
    }
    $lock = $now + $GLOBALS['tradeCategoriesTypeList'][$GLOBALS['tradeTypeList'][$tradeID]->category]->secondsbetween;
    $sql = $db->prepare("INSERT INTO " . TRADELOCK_TABLE . " \n                       (PlayerID, cat, LockTill)\n                        VALUES (:playerID, :cat, :LockTill)");
    $sql->bindValue('playerID', $_SESSION['player']->playerID, PDO::PARAM_INT);
    $sql->bindValue('cat', $GLOBALS['tradeTypeList'][$tradeID]->category, PDO::PARAM_STR);
    $sql->bindValue('LockTill', time_toDatetime($lock), PDO::PARAM_STR);
    if (!$sql->execute() || $sql->rowCount() == 0) {
        return -1;
    }
    return 1;
}
Exemple #19
0
 public static function processWonder($wonderID, $casterTribeData, $targetTribeName)
 {
     global $db;
     if ($wonderID < 0 || empty($casterTribeData) || empty($targetTribeName)) {
         return -30;
     }
     // check if wonder exists and is TribeWonder
     if (isset($GLOBALS['wonderTypeList'][$wonderID]) || !$wonder->isTribeWonder) {
         $wonder = $GLOBALS['wonderTypeList'][$wonderID];
     } else {
         return -33;
     }
     // check if tribes exist
     $targetTribeData = Tribe::getID($targetTribeName, true);
     if (empty($targetTribeData)) {
         return -15;
     }
     $casterTribeID = $casterTribeData['tribeID'];
     $targetTribeID = $targetTribeData['tribeID'];
     // check if tribe is valid
     if (!$targetTribeData['valid']) {
         return -34;
     }
     // check if caster tribe ist valid
     if (!$casterTribeData['valid']) {
         return -35;
     }
     $casterTribeRelations = TribeRelation::getRelations($casterTribeID);
     $targetTribeRelations = TribeRelation::getRelations($targetTribeID);
     $wonderPossible = false;
     foreach ($wonder->targetsPossible as $targetsPossible) {
         // check target
         if ($targetsPossible['target'] == 'own' && $casterTribeID !== $targetTribeID) {
             continue;
         }
         if ($targetsPossible['target'] == 'other' && $casterTribeID === $targetTribeID) {
             continue;
         }
         // check relation
         $check = self::checkRelations($targetsPossible['relation'], $targetTribeID, $casterTribeID, $casterTribeRelations, $targetTribeRelations);
         if ($check == true) {
             $wonderPossible = true;
             break;
         }
     }
     if ($wonderPossible == false) {
         return -37;
     }
     // take wonder Costs from TribeStorage
     $memberNumber = Tribe::getMemberCount($casterTribeID);
     if (!processProductionCost($wonder, 0, NULL, $memberNumber, true)) {
         return -33;
     }
     // does the wonder fail?
     if ((double) rand() / (double) getRandMax() > $wonder->chance) {
         return 11;
         // wonder did fail
     }
     // schedule the wonder's impacts
     // create a random factor between -0.3 and +0.3
     $delayRandFactor = rand(0, getrandmax()) / getrandmax() * 0.6 - 0.3;
     // now calculate the delayDelta depending on the first impact's delay
     $delayDelta = $wonder->impactList[0]['delay'] * $delayRandFactor;
     // get targets
     $targets = Tribe::getPlayerList($targetTribeID, false, true);
     if (sizeof($targets) == 0) {
         return -33;
     }
     $now = time();
     // loop over targets
     foreach ($targets as $playerID => $playerData) {
         foreach ($playerData['caves'] as $caveID => $caveData) {
             // loop over impacts
             foreach ($wonder->impactList as $impactID => $impact) {
                 $delay = (int) (($delayDelta + $impact['delay']) * WONDER_TIME_BASE_FACTOR);
                 $sql = $db->prepare("INSERT INTO " . EVENT_WONDER_TABLE . "\n                                (casterID, sourceID, targetID, wonderID, impactID, start, end)\n                               VALUES\n                                 (:playerID, :caveID, :targetID, :wonderID, :impactID, :start, :end)");
                 $sql->bindValue('playerID', 0, PDO::PARAM_INT);
                 // playerID 0, for not receiving lots of wonder-end-messages
                 $sql->bindValue('caveID', $casterTribeID, PDO::PARAM_INT);
                 $sql->bindValue('targetID', $caveID, PDO::PARAM_INT);
                 $sql->bindValue('wonderID', $wonderID, PDO::PARAM_INT);
                 $sql->bindValue('impactID', $impactID, PDO::PARAM_INT);
                 $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
                 $sql->bindValue('end', time_toDatetime($now + $delay), PDO::PARAM_STR);
                 $sql->execute();
             }
             // end foreach impactList
         }
     }
     // end foreach target
     // send caster messages
     $messageClass = new Messages();
     $messageClass->sendSystemMessage($_SESSION['player']->playerID, 9, sprintf(_("Stammeswunder erwirkt auf %s"), $targetTribeData['tag']), sprintf(_("Sie haben auf den Stamm %s ein Stammeswunder %s erwirkt."), $targetTribeData['tag'], $wonder->name));
     // send target messages
     $targetPlayersArray = array();
     foreach ($targets as $target) {
         if (!isset($targetPlayersArray[$target['playerID']])) {
             $targetPlayersArray[$target['playerID']] = $target;
         }
     }
     foreach ($targetPlayersArray as $target) {
         $messageClass->sendSystemMessage($target['playerID'], 9, 'Stammeswunder!', sprintf(_("Der Stamm %s hat ein Stammeswunder auf deine Höhlen gewirkt."), $casterTribeData['tag']));
     }
     return 12;
 }
Exemple #20
0
function createRitual($caveID, $playerID, $ritual, $hero, &$ownCaves)
{
    global $db;
    $cave = getCaveSecure($caveID, $playerID);
    $duration = $ritual['duration'];
    unset($ritual['duration']);
    // get ritual costs
    $costs = array();
    $temp = array_merge($GLOBALS['resourceTypeList'], $GLOBALS['buildingTypeList'], $GLOBALS['unitTypeList'], $GLOBALS['scienceTypeList'], $GLOBALS['defenseSystemTypeList']);
    foreach ($temp as $val) {
        if (array_key_exists($val->dbFieldName, $ritual)) {
            if ($ritual[$val->dbFieldName]['value']) {
                $costs[$val->dbFieldName] = $ritual[$val->dbFieldName]['value'];
            }
        }
    }
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$caveID}'");
    // get all the costs
    foreach ($costs as $key => $value) {
        array_push($set, "{$key} = {$key} - ({$value})");
        array_push($setBack, "{$key} = {$key} + ({$value})");
        array_push($where, "{$key} >= ({$value})");
    }
    $where = implode(" AND ", $where);
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        if (!$db->exec("UPDATE " . CAVE_TABLE . " SET {$set} {$where}")) {
            return -3;
        }
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE " . CAVE_TABLE . " SET {$setBack} WHERE caveID = '{$caveID}'";
    } else {
        return -7;
    }
    $now = time();
    $sql = $db->prepare("INSERT INTO " . EVENT_HERO_TABLE . "\n                         (caveID, playerID, heroID, start, end, blocked) \n                       VALUES\n                         (:caveID, :playerID, :heroID, :start, :end, :blocked)");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    $sql->bindValue('heroID', $hero['heroID'], PDO::PARAM_INT);
    $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('end', time_toDatetime($now + $duration), PDO::PARAM_STR);
    $sql->bindValue('blocked', 0, PDO::PARAM_INT);
    if ($sql->execute()) {
        $sql->closeCursor();
        $sql = $db->prepare("UPDATE " . HERO_TABLE . "\n                          SET isAlive = -1,\n                            caveID = :caveID\n                          WHERE heroID = :heroID");
        $sql->bindValue('heroID', $hero['heroID'], PDO::PARAM_INT);
        $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
        if (!$sql->execute()) {
            $db->query($setBack);
            return -7;
        }
        // update cave
        $ownCaves[$caveID] = getCaveSecure($caveID, $_SESSION['player']->playerID);
        return 2;
    }
}
Exemple #21
0
/**
 *
 */
function defense_processOrder($defenseID, $caveID, $cave)
{
    global $db;
    // take production costs from cave
    if (!processProductionCost($GLOBALS['defenseSystemTypeList'][$defenseID], $caveID, $cave)) {
        return 6;
    }
    // calculate the production time;
    $prodTime = 0;
    if ($time_formula = $GLOBALS['defenseSystemTypeList'][$defenseID]->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$cave');
        $time_eval_formula = "\$prodTime = {$time_eval_formula};";
        eval($time_eval_formula);
    }
    $prodTime *= DEFENSESYSTEM_TIME_BASE_FACTOR;
    $now = time();
    $sql = $db->prepare("INSERT INTO " . EVENT_DEFENSE_SYSTEM_TABLE . " \n                         (caveID, defenseSystemID, start, end)\n                       VALUES\n                         (:caveID, :defenseID, :start, :end)");
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    $sql->bindValue('defenseID', $defenseID, PDO::PARAM_INT);
    $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('end', time_toDatetime($now + $prodTime), PDO::PARAM_STR);
    if (!$sql->execute() || $sql->rowCount() == 0) {
        //give production costs back
        processProductionCostSetBack($GLOBALS['defenseSystemTypeList'][$defenseID], $caveID, $cave);
        return 6;
    }
    return 7;
}
Exemple #22
0
/**
 *
 */
function externals_performOrder($externalID, $caveID, $cave, $db)
{
    global $defenseSystemTypeList, $unitTypeList, $buildingTypeList, $scienceTypeList, $resourceTypeList;
    $external = $defenseSystemTypeList[$externalID];
    $maxLevel = round(eval('return ' . formula_parseToPHP("{$external->maxLevel};", '$cave')));
    $set = array();
    $setBack = array();
    $where = array("WHERE caveID = '{$caveID}'", "{$external->dbFieldName} < {$maxLevel}");
    // get all the resource costs
    foreach ($external->resourceProductionCost as $key => $value) {
        if ($value) {
            $formula = formula_parseToSQL($value);
            $dbField = $resourceTypeList[$key]->dbFieldName;
            $set[] = "{$dbField} = {$dbField} - ({$formula})";
            $setBack[] = "{$dbField} = {$dbField} + ({$formula})";
            $where[] = "{$dbField} >= ({$formula})";
        }
    }
    // get all the unit costs
    foreach ($external->unitProductionCost as $key => $value) {
        if ($value) {
            $formula = formula_parseToSQL($value);
            $dbField = $unitTypeList[$key]->dbFieldName;
            $set[] = "{$dbField} = {$dbField} - ({$formula})";
            $setBack[] = "{$dbField} = {$dbField} + ({$formula})";
            $where[] = "{$dbField} >= ({$formula})";
        }
    }
    // get all the building costs
    foreach ($external->buildingProductionCost as $key => $value) {
        if ($value) {
            $formula = formula_parseToSQL($value);
            $dbField = $buildingTypeList[$key]->dbFieldName;
            $set[] = "{$dbField} = {$dbField} - ({$formula})";
            $setBack[] = "{$dbField} = {$dbField} + ({$formula})";
            $where[] = "{$dbField} >= ({$formula})";
        }
    }
    // get all the external costs
    foreach ($external->externalProductionCost as $key => $value) {
        if ($value) {
            $formula = formula_parseToSQL($value);
            $dbField = $defenseSystemTypeList[$key]->dbFieldName;
            $set[] = "{$dbField} = {$dbField} - ({$formula})";
            $setBack[] = "{$dbField} = {$dbField} + ({$formula})";
            $where[] = "{$dbField} >= ({$formula})";
        }
    }
    // generate SQL
    if (sizeof($set)) {
        $set = implode(", ", $set);
        $set = "UPDATE Cave SET {$set} ";
        $setBack = implode(", ", $setBack);
        $setBack = "UPDATE Cave SET {$setBack} WHERE caveID = '{$caveID}'";
    }
    // generate dependencies
    foreach ($external->buildingDepList as $key => $value) {
        if ($value) {
            $where[] = "{$buildingTypeList[$key]->dbFieldName} >= {$value}";
        }
    }
    foreach ($external->maxBuildingDepList as $key => $value) {
        if ($value != -1) {
            $where[] = "{$buildingTypeList[$key]->dbFieldName} <= {$value}";
        }
    }
    foreach ($external->defenseSystemDepList as $key => $value) {
        if ($value) {
            $where[] = "{$defenseSystemTypeList[$key]->dbFieldName} >= {$value}";
        }
    }
    foreach ($external->maxDefenseSystemDepList as $key => $value) {
        if ($value != -1) {
            $where[] = "{$defenseSystemTypeList[$key]->dbFieldName} <= {$value}";
        }
    }
    foreach ($external->resourceDepList as $key => $value) {
        if ($value) {
            $where[] = "{$resourceTypeList[$key]->dbFieldName} >= {$value}";
        }
    }
    foreach ($external->maxResourceDepList as $key => $value) {
        if ($value != -1) {
            $where[] = "{$resourceTypeList[$key]->dbFieldName} <= {$value}";
        }
    }
    foreach ($external->scienceDepList as $key => $value) {
        if ($value) {
            $where[] = "{$scienceTypeList[$key]->dbFieldName} >= {$value}";
        }
    }
    foreach ($external->maxScienceDepList as $key => $value) {
        if ($value != -1) {
            $where[] = "{$scienceTypeList[$key]->dbFieldName} <= {$value}";
        }
    }
    foreach ($external->unitDepList as $key => $value) {
        if ($value) {
            $where[] = "{$unitTypeList[$key]->dbFieldName} >= {$value}";
        }
    }
    foreach ($external->maxUnitDepList as $key => $value) {
        if ($value != -1) {
            $where[] = "{$unitTypeList[$key]->dbFieldName} <= {$value}";
        }
    }
    $where = implode(" AND ", $where);
    if (!$db->query($set . $where) || !$db->affected_rows() == 1) {
        return _('Der Auftrag konnte nicht erteilt werden. Es fehlen die notwendigen Voraussetzungen.');
    }
    // calculate the production time;
    $prodTime = 0;
    if ($time_formula = $external->productionTimeFunction) {
        $time_eval_formula = formula_parseToPHP($time_formula, '$cave');
        $time_eval_formula = "\$prodTime={$time_eval_formula};";
        eval($time_eval_formula);
    }
    $prodTime *= DEFENSESYSTEM_TIME_BASE_FACTOR;
    $now = time();
    $query = sprintf("INSERT INTO Event_defenseSystem (caveID, defenseSystemID, " . "`start`, `end`) VALUES (%d, %d, '%s', '%s')", $caveID, $externalID, time_toDatetime($now), time_toDatetime($now + $prodTime));
    if (!$db->query($query)) {
        $db->query($setBack);
        return _('Der Auftrag konnte nicht erteilt werden. Es fehlen die notwendigen Voraussetzungen.');
    }
    return _('Der Auftrag wurde erteilt.');
}
Exemple #23
0
function page_ore()
{
    global $params, $db;
    $now = time();
    // increment time diff count
    $_SESSION['ore_time_diff'][$now - $_SESSION['ore_time']]++;
    // increment counter and log if required
    if (++$_SESSION['ore_counter'] == 50) {
        $query = sprintf("INSERT INTO ore_log (playerID, time_diff, stamp, sid) " . "VALUES (%d, '%s', '%s', '%s')", $params->SESSION->player->playerID, addslashes(var_export($_SESSION['ore_time_diff'], TRUE)), addslashes(time_toDatetime($now)), session_id());
        $db->query($query);
        $_SESSION['ore_counter'] = 0;
    }
    // set new timestamp
    $_SESSION['ore_time'] = $now;
}