コード例 #1
0
ファイル: Module_Artefacts.php プロジェクト: microlefes/Game
 function put()
 {
     global $db_game, $params;
     // get artefact
     $artefactID = intval($params->artefactID);
     $artefact = artefact_getArtefactByID($artefactID);
     if (!sizeof($artefact)) {
         $this->msgs[] = 'No such cave: (' . $params->xCoord . '|' . $params->yCoord . ')';
         return $this->getList();
     }
     // artefact has to be in limbo
     if ($artefact['initiated'] || $artefact['caveID'] || $artefact['event_movementID']) {
         $this->msgs[] = 'Artefact is not in limbo';
         return $this->getList();
     }
     // put form submitted
     if ($params->artefacts_put_submit) {
         // get cave
         $cave = getCaveByCoords($db_game, $params->xCoord, $params->yCoord);
         // no such cave
         if (!sizeof($cave)) {
             $this->msgs[] = 'No such cave: (' . $params->xCoord . '|' . $params->yCoord . ')';
         } else {
             $this->msgs[] = artefact_putArtefactIntoCave($db_game, $artefactID, $cave['caveID']) ? "Artefact put into cave." : "Error puttin artefact into cave.";
         }
         return $this->getList();
     }
     $template = tmpl_open("modules/Module_Artefacts/templates/put.ihtml");
     // insert artefact data
     tmpl_set($template, '/', $artefact);
     return tmpl_parse($template);
 }
コード例 #2
0
ファイル: artefact.inc.php プロジェクト: agatho/uaenhanced
/** user wants to remove the artefact from cave or another user just robbed that user.
 *  remove the artefact from its cave
 */
function artefact_removeArtefactFromCave($artefactID)
{
    global $db;
    $artefact = artefact_getArtefactByID($artefactID);
    if (sizeof($artefact) == 0) {
        return FALSE;
    }
    $sql = "UPDATE Artefact SET caveID = 0 WHERE artefactID = {$artefact['artefactID']}";
    $dbresult = $db->query($sql);
    if (!$dbresult) {
        return FALSE;
    }
    $sql = "UPDATE Cave SET artefacts = artefacts - 1 WHERE caveID = {$artefact['caveID']}";
    $dbresult = $db->query($sql);
    if (!$dbresult) {
        return FALSE;
    }
    return TRUE;
}
コード例 #3
0
ファイル: artefact.html.php プロジェクト: norter/Game
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] : '');
}
コード例 #4
0
ファイル: artefact.inc.php プロジェクト: norter/Game
/** user wants to remove the artefact from cave or another user just robbed that user.
 *  remove the artefact from its cave
 */
function artefact_removeArtefactFromCave($artefactID)
{
    global $db;
    $artefact = artefact_getArtefactByID($artefactID);
    if (sizeof($artefact) == 0) {
        return false;
    }
    $sql = $db->prepare("UPDATE " . ARTEFACT_TABLE . "\n                       SET caveID = 0\n                       WHERE artefactID = :artefactID");
    $sql->bindValue('artefactID', $artefact['artefactID'], PDO::PARAM_INT);
    if (!$sql->execute() || $sql->rowCount() == 0) {
        return false;
    }
    $sql = $db->prepare("UPDATE " . CAVE_TABLE . "\n                       SET artefacts = artefacts - 1\n                       WHERE caveID = :caveID");
    $sql->bindValue('caveID', $artefact['caveID'], PDO::PARAM_INT);
    if (!$sql->execute() || $sql->rowCount() == 0) {
        return false;
    }
    return true;
}
コード例 #5
0
ファイル: artefact.html.php プロジェクト: agatho/uaenhanced
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);
}
コード例 #6
0
ファイル: digest.inc.php プロジェクト: agatho/uaenhanced
function digest_getMovements($meineHoehlen, $doNotShow, $showDetails)
{
    global $resourceTypeList, $unitTypeList, $params, $db, $ua_movements;
    // caveIDs einsammeln
    $caveIDs = array();
    foreach ($meineHoehlen as $caveID => $value) {
        $caveIDs[] = $caveID;
    }
    $str_caveIDs = implode(",", $caveIDs);
    // Bewegungen besorgen
    $query = "SELECT * " . "FROM Event_movement " . "WHERE (source_caveID IN ({$str_caveIDs}) OR (target_caveID IN ({$str_caveIDs}))) " . "ORDER BY event_end ASC";
    $dbresult = $db->query($query);
    if (!$dbresult) {
        return array();
    }
    // bewegungen durchgehen
    $result = array();
    while ($row = $dbresult->nextrow(MYSQL_ASSOC)) {
        // "do not show" movements should not be shown
        // ADDED by chris--- for returns
        if (!$params->SESSION->user['show_returns']) {
            if (in_array($row['movementID'], $doNotShow)) {
                continue;
            }
        }
        // is own movement?
        $row['isOwnMovement'] = in_array($row['caveID'], $caveIDs);
        /////////////////////////////////
        // 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($meineHoehlen[$row['source_caveID']]) * $row['speedFactor'];
                $distance = time() - (time_timestampToTime($row['event_end']) - getDistanceByID($srcID, $destID) * $row['speedFactor']);
              } else {
                $sichtweite = getVisionRange($meineHoehlen[$row['target_caveID']]) * $row['speedFactor'];
                $distance = ceil((time_timestampToTime($row['event_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($meineHoehlen[$row['target_caveID']]) * $row['speedFactor'];
            $distance = ceil((time_timestampToTime($row['event_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 ($unitTypeList as $unitType) {
                    if ($unitType->visible) {
                        $anzahl_sichtbarer_einheiten += $row[$unitType->dbFieldName];
                    }
                }
                if ($anzahl_sichtbarer_einheiten == 0) {
                    continue;
                }
            }
        }
        $tmp = array('eventID' => $row['event_movementID'], 'caveID' => $row['caveID'], 'source_caveID' => $row['source_caveID'], 'target_caveID' => $row['target_caveID'], 'movementID' => $row['movementID'], 'event_start' => date("d.m.Y H:i:s", time_timestampToTime($row['event_start'])), 'event_end' => date("d.m.Y H:i:s", time_timestampToTime($row['event_end'])), 'isOwnMovement' => intval($row['isOwnMovement']), 'seconds_before_end' => time_timestampToTime($row['event_end']) - time(), 'movementID_description' => $ua_movements[$row['movementID']]->description);
        // Quelldaten
        $source = digest_getCaveNameAndOwnerByCaveID($row['source_caveID']);
        foreach ($source as $key => $value) {
            $tmp['source_' . $key] = $value;
        }
        // Zieldaten
        $target = digest_getCaveNameAndOwnerByCaveID($row['target_caveID']);
        foreach ($target as $key => $value) {
            $tmp['target_' . $key] = $value;
        }
        // ***** Einheiten, Rohstoffe und Artefakte *****
        if ($showDetails) {
            if ($row['artefactID']) {
                $tmp['ARTEFACT'] = artefact_getArtefactByID($row['artefactID']);
            }
            $units = array();
            foreach ($unitTypeList as $value) {
                if (!$row[$value->dbFieldName]) {
                    continue;
                }
                if (!$row['isOwnMovement'] && !$value->visible) {
                    continue;
                }
                $units[] = array('name' => $value->name, 'value' => $row[$value->dbFieldName]);
            }
            if (sizeof($units)) {
                $tmp['UNITS'] = $units;
            }
            $resources = array();
            foreach ($resourceTypeList as $value) {
                if (!$row[$value->dbFieldName]) {
                    continue;
                }
                $resources[] = array('name' => $value->name, 'value' => $row[$value->dbFieldName]);
            }
            if (sizeof($resources)) {
                $tmp['RESOURCES'] = $resources;
            }
            if ($row['isOwnMovement'] && $ua_movements[$row['movementID']]->returnID != -1 && !$row['artefactID'] && !$row['blocked']) {
                $tmp['CANCEL'] = array("modus" => MOVEMENT, "eventID" => $row['event_movementID']);
            }
        }
        $result[] = $tmp;
    }
    return $result;
}
コード例 #7
0
ファイル: export.inc.php プロジェクト: microlefes/Game
function export_movement_irc($movementID)
{
    global $db;
    require_once 'lib/Movement.php';
    require_once 'include/digest.inc.php';
    // gather data
    $ua_movements = Movement::getMovements();
    $move = export_getSingleMovement($movementID);
    if (!sizeof($move)) {
        return 'Es wurde keine Bewegung gefunden!';
    }
    // get Cave data
    $sourceCaveData = getCaveNameAndOwnerByCaveID($move['source_caveID']);
    $targetCaveData = getCaveNameAndOwnerByCaveID($move['target_caveID']);
    // check if it's a player related movement
    if ($sourceCaveData['player_name'] !== $_SESSION['player']->name && $targetCaveData['player_name'] !== $_SESSION['player']->name) {
        return 'Nur eigene Bewegungen erlaubt!';
    }
    // artefact data
    $artefactData = array();
    if ($move['artefactID'] != 0) {
        $artefactData = artefact_getArtefactByID($move['artefactID']);
    }
    // header
    $header = "Bewegungsart: 4" . $ua_movements[$move['movementID']]->description . "\n";
    $header .= "Startzeitpunkt:4 " . time_formatDatetime($move['start']) . "\n";
    $header .= "Endzeitpunkt:4 " . time_formatDatetime($move['end']) . "\n";
    // movement source
    $source = "Starthöhle: 4" . $sourceCaveData['cave_name'] . " ";
    $source .= " (" . $sourceCaveData['xCoord'] . "|" . $sourceCaveData['yCoord'] . ") ";
    if ($sourceCaveData['player_name']) {
        $source .= "des Spielers  4" . $sourceCaveData['player_name'] . " ";
        $source .= "aus dem Stamme 4" . $sourceCaveData['player_tribe'] . " ";
    }
    $source .= "\n";
    // movement target
    $target = "Zielhöhle: 4" . $targetCaveData['cave_name'];
    $target .= " (" . $targetCaveData['xCoord'] . "|" . $targetCaveData['yCoord'] . ") ";
    if ($targetCaveData['player_name']) {
        $target .= "des Spielers 4 " . $targetCaveData['player_name'] . " ";
        $target .= "aus dem Stamme 4" . $targetCaveData['player_tribe'] . " ";
    }
    $target .= "\n";
    // units
    $units = "Einheiten: ";
    foreach ($GLOBALS['unitTypeList'] as $unitsID => $unitDetail) {
        if ($move[$unitDetail->dbFieldName] > 0) {
            if ($move['isOwnMovement'] || $unitDetail->visible) {
                $units .= $unitDetail->name . ": " . ($ua_movements[$move['movementID']]->fogUnit && !$move['isOwnMovement'] ? calcFogUnit($move[$unitDetail->dbFieldName]) : $move[$unitDetail->dbFieldName]) . ", ";
            }
        }
    }
    $units = substr($units, 0, -2);
    // resources
    $resources = "";
    foreach ($GLOBALS['resourceTypeList'] as $resourceID => $resourceDetail) {
        if ($move[$resourceDetail->dbFieldName] > 0) {
            $resources .= $resourceDetail->name . ": " . ($ua_movements[$move['movementID']]->fogResource && !$move['isOwnMovement'] ? calcFogResource($move[$resourceDetail->dbFieldName]) : $move[$resourceDetail->dbFieldName]) . ", ";
        }
    }
    if ($resources !== "") {
        $resources = "transportierte Rohstoffe: " . $resources;
        $resources = substr($resources, 0, -2);
    }
    // Artefacts
    $artefact = '';
    if ($move['artefactID'] != 0) {
        $artefact = "transportierte Artefakte: " . $artefactData['name'];
    }
    // Hero
    $hero = '';
    if ($move['heroID'] != 0 && $move['isOwnMovement']) {
        $hero = "Held läuft mit!";
    }
    $irc = "";
    $irc .= $header;
    $irc .= $source;
    $irc .= $target . "\n";
    $irc .= $units . "\n";
    $irc .= $resources . "\n";
    $irc .= $artefact . "\n";
    $irc .= $hero . "\n";
    return $irc;
}
コード例 #8
0
ファイル: digest.inc.php プロジェクト: norter/Game
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;
}
コード例 #9
0
ファイル: digest.inc.php プロジェクト: microlefes/Game
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)));
    $targetExtraFilds = formula_parseToSelectSQL(GameConstants::EXPOSE_INVISIBLE);
    $sqlExtra = array();
    foreach ($targetExtraFilds as $field) {
        $sqlTargetExtra[] = 'tc.' . $field . ' AS target_' . $field;
    }
    $sql = $db->prepare("SELECT em.*, sc.name AS source_cave_name, sp.name AS source_player_name, st.tag AS source_player_tribe, sc.xCoord AS source_xCoord, sc.yCoord AS source_yCoord, tc.name AS target_cave_name, tp.name AS target_player_name, tt.tag AS target_player_tribe, tc.xCoord AS target_xCoord, tc.yCoord AS target_yCoord " . (!empty($sqlTargetExtra) ? ', ' . implode(', ', $sqlTargetExtra) : '') . "\n                       FROM " . EVENT_MOVEMENT_TABLE . " em\n                         LEFT JOIN " . CAVE_TABLE . " sc ON sc.caveID = em.source_caveID\n                         LEFT JOIN " . PLAYER_TABLE . " sp ON sp.playerID = sc.playerID\n                         LEFT JOIN " . TRIBE_TABLE . " st ON st.tribeID = sp.tribeID\n                         LEFT JOIN " . CAVE_TABLE . " tc ON tc.caveID = em.target_caveID\n                         LEFT JOIN " . PLAYER_TABLE . " tp ON tp.playerID = tc.playerID\n                         LEFT JOIN " . TRIBE_TABLE . " tt ON tt.tribeID = tp.tribeID\n                       WHERE em.source_caveID IN (" . $caveIDs . ")\n                         OR em.target_caveID IN (" . $caveIDs . ")\n                       ORDER BY em.end ASC, em.event_movementID ASC");
    if (!$sql->execute()) {
        return array();
    }
    $rows = $sql->fetchAll(PDO::FETCH_ASSOC);
    $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, 'source_cave_name' => $row['source_cave_name'], 'source_player_name' => $row['source_player_name'], 'source_player_tribe' => $row['source_player_tribe'], 'source_xCoord' => $row['source_xCoord'], 'source_yCoord' => $row['source_yCoord'], 'target_cave_name' => $row['target_cave_name'], 'target_player_name' => $row['target_player_name'], 'target_player_tribe' => $row['target_player_tribe'], 'target_xCoord' => $row['target_xCoord'], 'target_yCoord' => $row['target_yCoord']);
        // ***** 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..
            foreach ($targetExtraFilds as $field) {
                $target[$field] = $row['target_' . $field];
            }
            $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;
}