Exemplo n.º 1
0
 public function __construct($code, $concept, $imp, $units)
 {
     parent::__construct($code, $concept, $imp, $units);
     $this->code = $code;
     $this->date = getdate();
     $this->concept = $concept;
     $this->imp = $imp;
     $this->units = $units;
 }
Exemplo n.º 2
0
 public function loadEarnables($issue_id)
 {
     $issue = Issue::find($issue_id);
     $receivable = Receivable::with('installments_not_paid')->where('issue_id', '=', $issue_id)->first();
     $registrations = Registration::where('student_id', '=', $issue->student_id)->where('cost_is_paid', '=', 0)->get();
     $movements = Movement::where('issue_id', '=', $issue_id)->get();
     $punishments = Punishment::where('issue_id', '=', $issue_id)->where('paid', '=', 0)->get();
     $resigns = Resign::where('issue_id', '=', $issue_id)->where('is_earned', '=', 0)->get();
     $responses = array('receivable' => $receivable, 'registrations' => $registrations, 'movements' => $movements, 'punishments' => $punishments, 'resigns' => $resigns);
     return $responses;
 }
Exemplo n.º 3
0
function reverseMovementEvent($caveID, $eventID)
{
    global $db;
    // get movements
    $ua_movements = Movement::getMovements();
    // get current time
    $now = time();
    // get movement
    $sql = $db->prepare("SELECT * FROM " . EVENT_MOVEMENT_TABLE . " \n                      WHERE event_movementID = :eventID");
    $sql->bindValue('eventID', $eventID, PDO::PARAM_INT);
    if ($sql->rowCountSelect() == 0) {
        return 1;
    }
    if (!$sql->execute()) {
        return 1;
    }
    $move = $sql->fetch(PDO::FETCH_ASSOC);
    // check movement
    // blocked
    if ($move['blocked']) {
        return 1;
    }
    // not reversable
    if ($ua_movements[$move['movementID']]->returnID == -1) {
        return 1;
    }
    // not own movement
    if ($caveID != $move['caveID']) {
        return 1;
    }
    // expired
    if (time_fromDatetime($move['end']) < $now) {
        return 1;
    }
    // build query
    $start = time_fromDatetime($move['start']);
    $end = time_fromDatetime($move['end']);
    $diff = $now - $start;
    $sql = $db->prepare("UPDATE " . EVENT_MOVEMENT_TABLE . " SET source_caveID = target_caveID, " . "target_caveID = caveID, " . "movementID = :returnID, end = :endTime, start = :startTime " . "WHERE blocked = 0 AND caveID = source_caveID AND " . "caveID = :caveID AND event_movementID = :movementID");
    $sql->bindValue('returnID', $ua_movements[$move['movementID']]->returnID, PDO::PARAM_INT);
    $sql->bindValue('endTime', time_toDatetime($now + $diff), PDO::PARAM_STR);
    $sql->bindValue('startTime', time_toDatetime($now), PDO::PARAM_STR);
    $sql->bindValue('caveID', $caveID, PDO::PARAM_STR);
    $sql->bindValue('movementID', $eventID, PDO::PARAM_STR);
    $sql->execute();
    return intval($sql->rowCount() != 1);
}
Exemplo n.º 4
0
 function execute($caveID, $caves)
 {
     global $unitTypeList;
     // get model
     $model = new EventReports_Movements_Model($caveID, $caves);
     // get movements
     $movements = $model->getGroupedMovements();
     // get movement categories
     $ua_movements = Movement::getMovements();
     // prepare data for the view
     $categories = array();
     // foreach movement category..
     foreach ($movements as $category => $moves) {
         // set name and caves-header
         $category = array('name' => $ua_movements[$category]->description, 'cave' => $caves);
         // foreach unittype..
         foreach ($unitTypeList as $unitType) {
             // get sum
             $sum = isset($moves[$unitType->dbFieldName]) ? array_sum($moves[$unitType->dbFieldName]) : 0;
             if (!$sum) {
                 continue;
             }
             // set name and sum
             $unit = array('name' => $unitType->name, 'dbFieldName' => $unitType->dbFieldName, 'sum' => $sum);
             // foreach cave..
             foreach ($caves as $caveID => $cave) {
                 if (!isset($moves[$unitType->dbFieldName][$caveID])) {
                     $unit['cave'][] = array('amount' => 0);
                     continue;
                 }
                 $unit['cave'][] = array('amount' => intval($moves[$unitType->dbFieldName][$caveID]));
             }
             $category['unit'][] = $unit;
         }
         $categories[] = $category;
     }
     // create View
     $view = new EventReports_Movements_View($_SESSION['player']->language, $_SESSION['player']->template);
     // set tmpl data
     if (sizeof($categories)) {
         $view->setCategories($categories);
     }
     // return view
     //return $view->toString();
     // FIXME
     return array($view->getTitle(), $view->getContent());
 }
Exemplo n.º 5
0
 /**
  * @param Movement $move
  * @return Position
  * return Posizione di Move.
  */
 public function calculateNewPoint(Movement $move)
 {
     $destination = new Position($this->x, $this->y);
     switch ($move->getDirection()) {
         case Movement::NORTH:
             $destination->setY($destination->getY() + $move->getSpeed());
             break;
         case Movement::SOUTH:
             $destination->setY($destination->getY() - $move->getSpeed());
             break;
         case Movement::WEST:
             $destination->setX($destination->getX() - $move->getSpeed());
             break;
         case Movement::EAST:
             $destination->setX($destination->getX() + $move->getSpeed());
             break;
         default:
             throw new \RuntimeException('errore direzione');
     }
     return $destination;
 }
Exemplo n.º 6
0
                    }
                }
            }
        }
        // post to a new Movement
    } else {
        if ($method === "POST") {
            // convert POSTed JSON to an object
            verifyXsrf();
            $requestContent = file_get_contents("php://input");
            $requestObject = json_decode($requestContent);
            $movementDate = new DateTime();
            if (empty($requestObject->movementDate) === false) {
                $movementDate->setTimestamp($requestObject->movementDate / 1000);
            }
            $movement = new Movement(null, $requestObject->fromLocationId, $requestObject->toLocationId, $requestObject->productId, $requestObject->unitId, $requestObject->userId, $requestObject->cost, $movementDate, $requestObject->movementType, $requestObject->price);
            $movement->insert($pdo);
            $reply->data = "Movement created OK";
            if ($requestObject->quantity !== null) {
                $productLocation = new ProductLocation($requestObject->toLocationId, $requestObject->productId, $requestObject->unitId, $requestObject->quantity);
                $productLocation->insert($pdo);
                $reply->data = "ProductLocation created OK";
            }
        }
    }
    // create an exception to pass back to the RESTful caller
} catch (Exception $exception) {
    $reply->status = $exception->getCode();
    $reply->message = $exception->getMessage();
    unset($reply->data);
}
Exemplo n.º 7
0
 public function destroy($code)
 {
     $earnings = Earning::where('code', '=', $code)->get();
     foreach ($earnings as $earning) {
         switch ($earning->earnable_type) {
             case 'Receivable':
                 $receivable = Receivable::find($earning->earnable_id);
                 $receivable->balance += $receivable->balance + $earning->payment;
                 $receivable->save();
                 $earning->delete();
                 break;
             case 'Installment':
                 $installment = Installment::find($earning->earnable_id);
                 $installment->balance += $installment->balance + $earning->payment;
                 $installment->paid = 0;
                 $installment->save();
                 $earning->delete();
                 break;
             case 'Registration':
                 $registration = Registration::find($earning->earnable_id);
                 $registration->cost_is_paid = 0;
                 $registration->save();
                 $earning->delete();
                 break;
             case 'Movement':
                 $movement = Movement::find($earning->earnable_id);
                 $movement->paid = 0;
                 $movement->save();
                 $earning->delete();
                 break;
             case 'Punishment':
                 $punishment = Punishment::find($earning->earnable_id);
                 $punishment->paid = 0;
                 $punishment->save();
                 $earning->delete();
                 break;
             case 'Resign':
                 $resign = Resign::find($earning->earnable_id);
                 $resign->is_earned = 0;
                 $resign->save();
                 $earning->delete();
                 break;
             default:
                 $earning->delete();
                 break;
         }
     }
 }
Exemplo n.º 8
0
            } else {
                if ($method === "DELETE") {
                    verifyXsrf();
                    $productAlerts = ProductAlert::getProductAlertByProductId($pdo, $productId);
                    foreach ($productAlerts as $productAlert) {
                        $productAlert->delete($pdo);
                    }
                    $finishedProducts = FinishedProduct::getFinishedProductByRawMaterialId($pdo, $productId);
                    foreach ($finishedProducts as $finishedProduct) {
                        $finishedProduct->delete($pdo);
                    }
                    $productLocations = ProductLocation::getProductLocationByProductId($pdo, $productId);
                    foreach ($productLocations as $productLocation) {
                        $productLocation->delete($pdo);
                    }
                    $movements = Movement::getMovementByProductId($pdo, $productId);
                    foreach ($movements as $movement) {
                        $movement->delete($pdo);
                    }
                    $product = Product::getProductByProductId($pdo, $productId);
                    $product->delete($pdo);
                    $reply->data = "Product deleted OK";
                }
            }
        }
    }
    // create an exception to pass back to the RESTful caller
} catch (Exception $exception) {
    $reply->status = $exception->getCode();
    $reply->message = $exception->getMessage();
    unset($reply->data);
Exemplo n.º 9
0
function unitAction($caveID, &$meineHoehlen)
{
    global $config, $db, $MAX_RESOURCE, $MOVEMENTCOSTCONSTANT, $MOVEMENTSPEEDCONSTANT, $params, $resourceTypeList, $unitTypeList, $FUELRESOURCEID;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $meineHoehlen[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        // was an artefact chosen?
        if ((int) $params->POST->myartefacts > 0) {
            $tempID = (int) $params->POST->myartefacts;
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($tempID == $value['artefactID']) {
                    $moveArtefact = $tempID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($params->SESSION->player->playerID);
    $params->SESSION->player = $_SESSION['player'];
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP($MOVEMENTCOSTCONSTANT . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP($MOVEMENTSPEEDCONSTANT . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (isset($params->POST->moveit) && sizeof($params->POST->unit)) {
        $targetXCoord = intval($params->POST->targetXCoord);
        $targetYCoord = intval($params->POST->targetYCoord);
        $targetCaveName = $params->POST->targetCaveName;
        $targetCaveID = intval($params->POST->targetCaveID);
        $movementID = intval($params->POST->movementID);
        // check for scripters
        check_timestamp($params->POST->tstamp);
        $validCaveName = FALSE;
        // targetCaveID >>> coords
        if (isset($targetCaveID) && $targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = TRUE;
            }
            // name >>> coords
        } else {
            if (isset($targetCaveName)) {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = TRUE;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter($params->POST->unit, "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", $params->POST->rohstoff);
        // Test, ob Einheitentragekapazität ausgelastet
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                $capacity += $aUnit * $unitTypeList[$unitKey]->encumbranceList[$resKey];
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($params->SESSION->player->tribe)) {
                //may tade in own tribe
                $ownTribe = $params->SESSION->player->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE, $db);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE, $db);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe, $db) || relation_areEnemys($ownTribe, $targetTribe, $db) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        if ($params->POST->movementID == 0) {
            $msg = _('Bitte Bewegungsart auswählen!');
        } else {
            if (!sizeof($unit)) {
                $msg = _('Es sind keine Einheiten ausgewählt!');
            } else {
                if (empty($targetXCoord) || empty($targetYCoord) and empty($targetCaveName)) {
                    $msg = _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!');
                } else {
                    if (empty($targetXCoord) || empty($targetYCoord) and !empty($targetCaveName) and $validCaveName === FALSE) {
                        $msg = sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName);
                    } else {
                        if ($overloaded) {
                            $msg = _('Deine Krieger können die Menge an Ressourcen nicht tragen!!');
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord, $db)) {
                                $msg = _('Die Zielhöhle steht unter Anfängerschutz.');
                            } else {
                                if (beginner_isCaveProtectedByID($caveID, $db)) {
                                    $msg = _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden');
                                } else {
                                    if ($params->POST->movementID == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord, $db)) {
                                        $msg = _('Sie können diese Höhle nicht übernehmen. Sie ist gegen Übernahmen geschützt.');
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!');
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.');
                                            } else {
                                                // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                $tmpdist = 0;
                                                $i = 0;
                                                if ($distance > 15) {
                                                    $distance = $distance - 15;
                                                    $tmpdist = 15;
                                                    if (floor($distance / 5) < 11) {
                                                        $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                    }
                                                    for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                        $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                    }
                                                } else {
                                                    $tmpdist = $distance;
                                                }
                                                // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                if ($details[$resourceTypeList[$FUELRESOURCEID]->dbFieldName] < $reqFood) {
                                                    $msg = _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!');
                                                } else {
                                                    $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                    switch ($msgID) {
                                                        case 0:
                                                            $msg = sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood);
                                                            break;
                                                        case 1:
                                                            $msg = _('In diesen Koordinaten liegt keine Höhle!');
                                                            break;
                                                        case 2:
                                                            $msg = _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!');
                                                            break;
                                                        case 3:
                                                            $msg = _('Schwerer Fehler: Bitte Admin kontaktieren!');
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (!empty($params->POST->eventID)) {
            $msgID = reverseMovementEvent($caveID, $params->POST->eventID);
            switch ($msgID) {
                case 0:
                    $msg = _('Die Einheiten kehren zurück!');
                    break;
                case 1:
                    $msg = _('Fehler bei der Rückkehr!');
                    break;
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $params->SESSION->player->playerID);
    $meineHoehlen[$caveID] = $details = $temp->nextRow(MYSQL_ASSOC);
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'unitaction.ihtml');
    // messages
    if (isset($msg)) {
        tmpl_set($template, '/MESSAGE/msg', $msg);
    }
    // javascript support
    tmpl_set($template, 'currentX', $details['xCoord']);
    tmpl_set($template, 'currentY', $details['yCoord']);
    tmpl_set($template, 'dim_x', $dim_x);
    tmpl_set($template, 'dim_y', $dim_y);
    tmpl_set($template, 'speed', $minutesPerCave);
    tmpl_set($template, 'fuel_id', $FUELRESOURCEID);
    tmpl_set($template, 'fuel_name', $resourceTypeList[$FUELRESOURCEID]->name);
    tmpl_set($template, 'movementcostconstant', $foodPerCave);
    tmpl_set($template, "resourceTypes", $MAX_RESOURCE);
    tmpl_set($template, "rules_path", RULES_PATH);
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    tmpl_set($template, 'SELECTACTION', $selectable_movements);
    // resources
    $resources = array();
    for ($res = 0; $res < sizeof($resourceTypeList); $res++) {
        if (!$resourceTypeList[$res]->nodocumentation) {
            $resources[] = array('resourceID' => $resourceTypeList[$res]->resourceID, 'name' => $resourceTypeList[$res]->name, 'currentAmount' => "0" + $details[$resourceTypeList[$res]->dbFieldName], 'dbFieldName' => $resourceTypeList[$res]->dbFieldName);
        }
    }
    tmpl_set($template, 'RESOURCE', $resources);
    tmpl_set($template, 'TOTAL', $resources);
    tmpl_set($template, 'RESOURCE_LUGGAGE', $resources);
    // units table
    $unitprops = array();
    $units = array();
    for ($i = 0; $i < sizeof($unitTypeList); $i++) {
        // if no units of this type, next type
        if (!$details[$unitTypeList[$i]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        for ($j = 0; $j < count($resourceTypeList); $j++) {
            if (!$resourceTypeList[$j]->nodocumentation) {
                $encumbrance[$j] = array('resourceID' => $j, 'load' => "0" + $unitTypeList[$i]->encumbranceList[$j]);
                $temp[] = "0" + $unitTypeList[$i]->encumbranceList[$j];
            }
        }
        $unitprops[] = array('unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'resourceLoad' => implode(",", $temp), 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName]);
        $units[] = array('name' => $unitTypeList[$i]->name, 'modus' => UNIT_PROPERTIES, 'unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName], 'warriorID' => $i, 'ENCUMBRANCE' => $encumbrance);
    }
    tmpl_set($template, 'UNITPROPS', $unitprops);
    tmpl_set($template, 'SELECTWARRIOR', $units);
    // weitergereichte Koordinaten
    if (empty($params->POST->movementID)) {
        tmpl_set($template, 'targetXCoord', $params->POST->targetXCoord);
        tmpl_set($template, 'targetYCoord', $params->POST->targetYCoord);
        tmpl_set($template, 'targetCaveName', $params->POST->targetCaveName);
    }
    // weitere Paramter
    $hidden = array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time()));
    tmpl_set($template, 'PARAMS', $hidden);
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    //$movements = digest_getMovements($meineHoehlen, array(), true);
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            tmpl_iterate($template, 'MOVEMENT/MOVE');
            tmpl_set($template, 'MOVEMENT/MOVE', $move);
        } else {
            tmpl_iterate($template, 'OPPMOVEMENT/MOVE');
            tmpl_set($template, 'OPPMOVEMENT/MOVE', $move);
        }
    }
    // artefakte
    if (sizeof($myartefacts) != 0) {
        tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // show CAVEBOOKMARKS context
        tmpl_set($template, '/CAVEBOOKMARKS/iterate', '');
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARK', $bookmarks);
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARKJS', $bookmarks);
        }
    }
    return tmpl_parse($template);
}
Exemplo n.º 10
0
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;
}
Exemplo n.º 11
0
function unit_Movement($caveID, &$ownCave)
{
    global $db, $template;
    $safeForm = true;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $ownCave[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        $moveArtefactID = Request::getVar('myartefacts', 0);
        // was an artefact chosen?
        if ($moveArtefactID > 0) {
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($moveArtefactID == $value['artefactID']) {
                    $moveArtefact = $moveArtefactID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    /**
     * HERO MOVEMENT
     */
    $moveHero = 0;
    if ($details['hero'] != 0) {
        $hero = getHeroByPlayer($_SESSION['player']->playerID);
        if ($hero['isAlive'] != 1) {
            $details['hero'] = 0;
        }
    }
    if ($details['hero'] != 0 && Request::getVar('moveHero', false) == true) {
        $moveHero = $details['hero'];
    }
    /**
     * END HERO MOVEMENTS
     */
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($_SESSION['player']->playerID);
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_COST . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_SPEED . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (Request::getVar('moveit', false) && sizeof(Request::getVar('unit', array('' => '')))) {
        $targetXCoord = Request::getVar('targetXCoord', 0);
        $targetYCoord = Request::getVar('targetYCoord', 0);
        $targetCaveName = Request::getVar('targetCaveName', '');
        $targetCaveID = Request::getVar('targetCaveID', 0);
        $movementID = Request::getVar('movementID', 0);
        // check for scripters
        check_timestamp(Request::getVar('tstamp', 0));
        $validCaveName = false;
        // targetCaveID >>> coords
        if ($targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = true;
            }
            // name >>> coords
        } else {
            if ($targetCaveName != "") {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = true;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter(Request::getVar('unit', array('' => '')), "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", Request::getVar('rohstoff', array('' => '')));
        // Test, ob Einheitentragekapazität ausgelastet
        $overloaded = 0;
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                if (isset($GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey])) {
                    $capacity += $aUnit * $GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey];
                }
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        $denymovement_nonenemy = false;
        $denymovement_targetwar = false;
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($_SESSION['player']->tribe)) {
                //may tade in own tribe
                $ownTribe = $_SESSION['player']->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe) || relation_areEnemys($ownTribe, $targetTribe) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        // check if army is small enough for hero
        $denymovement_hero = false;
        if ($moveHero && (Request::getVar('movementID', 0) == 3 || Request::getVar('movementID', 0) == 6)) {
            //calculate size of army
            $armySize = 0;
            foreach ($unit as $unitID => $value) {
                $armySize += $GLOBALS['unitTypeList'][$unitID]->hitPoints * $value;
            }
            if ($armySize > $hero['exp']) {
                $denymovement_hero = true;
            }
        }
        if (Request::getVar('movementID', 0) == 0) {
            $msg = array('type' => 'error', 'message' => _('Bitte Bewegungsart auswählen!'));
            $moveHero = 0;
        } else {
            if (!sizeof($unit)) {
                $msg = array('type' => 'error', 'message' => _('Es sind keine Einheiten ausgewählt!'));
                $moveHero = 0;
            } else {
                if (($targetXCoord == 0 || $targetYCoord == 0) && $targetCaveName == "") {
                    $msg = array('type' => 'error', 'message' => _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!'));
                    $moveHero = 0;
                } else {
                    if (($targetXCoord == 0 || $targetYCoord == 0) && !($targetCaveName == "") && $validCaveName === FALSE) {
                        $msg = array('type' => 'error', 'message' => sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName));
                        $moveHero = 0;
                    } else {
                        if ($overloaded) {
                            $msg = array('type' => 'error', 'message' => _('Deine Krieger können die Menge an Ressourcen nicht tragen!!'));
                            $moveHero = 0;
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord)) {
                                $msg = array('type' => 'error', 'message' => _('Die Zielhöhle steht unter Anfängerschutz.'));
                                $moveHero = 0;
                            } else {
                                if (beginner_isCaveProtectedByID($caveID)) {
                                    $msg = array('type' => 'error', 'message' => _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden'));
                                    $moveHero = 0;
                                } else {
                                    if (Request::getVar('movementID', 0) == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord)) {
                                        $msg = array('type' => 'error', 'message' => _('Sie können diese Höhle nicht übernehmen. Sie ist gegen übernahmen geschützt.'));
                                        $moveHero = 0;
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = array('type' => 'error', 'message' => _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!'));
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = array('type' => 'error', 'message' => _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.'));
                                                $moveHero = 0;
                                            } else {
                                                if ($denymovement_hero) {
                                                    $msg = array('type' => 'error', 'message' => _('Die Armee ist zu groß um vom Helden unterstützt zu werden!'));
                                                    $moveHero = 0;
                                                } else {
                                                    // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                    $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                    $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                    $tmpdist = 0;
                                                    $i = 0;
                                                    if ($distance > 15) {
                                                        $distance = $distance - 15;
                                                        $tmpdist = 15;
                                                        if (floor($distance / 5) < 11) {
                                                            $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                        }
                                                        for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                            $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                        }
                                                    } else {
                                                        $tmpdist = $distance;
                                                    }
                                                    // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                    $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                    if ($details[$GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->dbFieldName] < $reqFood) {
                                                        $msg = array('type' => 'error', 'message' => _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!'));
                                                    } else {
                                                        $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $moveHero, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                        switch ($msgID) {
                                                            case 0:
                                                                $msg = array('type' => 'success', 'message' => sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood));
                                                                $safeForm = false;
                                                                break;
                                                            case 1:
                                                                $msg = array('type' => 'error', 'message' => _('In diesen Koordinaten liegt keine Höhle!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 2:
                                                                $msg = array('type' => 'error', 'message' => _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 3:
                                                                $msg = array('type' => 'error', 'message' => _('Schwerer Fehler: Bitte Admin kontaktieren!'));
                                                                $moveHero = 0;
                                                                break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (Request::isPost('action') && Request::getVar('action', '') == 'cancel' && ($eventID = Request::getVar('eventID', 0))) {
            $msgID = reverseMovementEvent($caveID, $eventID);
            switch ($msgID) {
                case 0:
                    $msg = array('type' => 'success', 'message' => _('Die Einheiten kehren zurück!'));
                    break;
                case 1:
                    $msg = array('type' => 'error', 'message' => _('Fehler bei der Rückkehr!'));
                    break;
            }
        } else {
            if (Request::getVar('moveit', false) && !sizeof(Request::getVar('unit', array('' => '')))) {
                $msg = array('type' => 'error', 'message' => _('Einheiten mitnehmen?'));
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $_SESSION['player']->playerID);
    $ownCave[$caveID] = $details = $temp;
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // make sure that moved hero is not shown again
    if ($moveHero != 0) {
        $details['hero'] = 0;
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    // open template
    $template->setFile('unitMovement.tmpl');
    $template->addVars(array('currentX' => $details['xCoord'], 'currentY' => $details['yCoord'], 'dim_x' => $dim_x, 'dim_y' => $dim_y, 'speed' => $minutesPerCave, 'fuel_id' => GameConstants::FUEL_RESOURCE_ID, 'fuel_name' => $GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->name, 'movement_cost_constant' => $foodPerCave, 'resource_types' => GameConstants::MAX_RESOURCE, 'status_msg' => isset($msg) ? $msg : ''));
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    $template->addVar('selectable_movements', $selectable_movements);
    // resources
    $resources = array();
    foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
        if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
            $resources[] = array('resource_id' => $GLOBALS['resourceTypeList'][$resourceID]->resourceID, 'name' => $GLOBALS['resourceTypeList'][$resourceID]->name, 'current_amount' => "0" + $details[$GLOBALS['resourceTypeList'][$resourceID]->dbFieldName], 'dbFieldName' => $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName, 'value' => $safeForm && isset($resource[$resourceID]) && $resource[$resourceID] > 0 ? $resource[$resourceID] : '');
        }
    }
    $template->addVar('resource', $resources);
    // units table
    $unitprops = array();
    $units = array();
    foreach ($GLOBALS['unitTypeList'] as $unitID => $dummy) {
        // if no units of this type, next type
        if (!$details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
            if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
                $encumbrance[$resourceID] = array('resourceID' => $resourceID, 'load' => "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0));
                $temp[] = "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0);
            }
        }
        $units[] = array('name' => $GLOBALS['unitTypeList'][$unitID]->name, 'unit_id' => $unitID, 'food_cost' => $GLOBALS['unitTypeList'][$unitID]->foodCost, 'resource_load' => implode(",", $temp), 'speed_factor' => $GLOBALS['unitTypeList'][$unitID]->wayCost, 'max_unit_count' => $details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName], 'encumbrance' => $encumbrance, 'hitPoints' => $GLOBALS['unitTypeList'][$unitID]->hitPoints, 'value' => $safeForm && isset($unit[$unitID]) ? $unit[$unitID] : '');
    }
    $template->addVar('unit_list', $units);
    // weitergereichte Koordinaten
    if (!Request::getVar('movementID', 0) || $safeForm) {
        if (Request::getVar('targetCaveID', 0) > 0) {
            $caveData = getCaveByID(Request::getVar('targetCaveID', 0));
            $template->addVars(array('target_x_coord' => $caveData['xCoord'], 'target_y_coord' => $caveData['yCoord'], 'target_cave_name' => $caveData['name']));
        } else {
            $template->addVars(array('target_x_coord' => Request::getVar('targetXCoord', ''), 'target_y_coord' => Request::getVar('targetYCoord', ''), 'target_cave_name' => Request::getVar('targetCaveName', '')));
        }
    }
    // weitere Paramter
    $template->addVar('params', array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time())));
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    $ownMovement = $oppMovement = array();
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            $ownMovement[] = $move;
        } else {
            $oppMovement[] = $move;
        }
    }
    $template->addVars(array('ownMovement' => $ownMovement, 'oppMovement' => $oppMovement));
    // artefakte
    if (sizeof($myartefacts) != 0) {
        //tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
        $template->addVar('artefact', $myartefacts);
    }
    // hero
    if ($details['hero'] != 0) {
        $template->addVar('hero', $hero);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            $template->addVar('bookmarks_cave', $bookmarks);
        }
    }
}
Exemplo n.º 12
0
 public function payment($id)
 {
     $movement = Movement::find($id);
     $movement->paid = 1;
     $movement->save();
     $earning = new Earning();
     $earning->project_id = Auth::user()->curr_project_id;
     $earning->location_id = Auth::user()->location_id;
     $earning->issue_id = $movement->issue_id;
     $earning->employee_id = $movement->employee_id;
     $earning->earning_date = date('Y-m-d');
     $earning->earnable_type = 'Movement';
     $earning->earnable_id = $movement->id;
     $earning->code = $this->generateEarningCode();
     $earning->signature = $this->generateSignature();
     $earning->payment = $movement->movement_costs + $movement->upgrade_costs;
     $earning->save();
 }
Exemplo n.º 13
0
 /**
  * Test Getting Valid Movement By MovementType
  **/
 public function testGetValidMovementByMovementType()
 {
     // create a new Movement
     $newMovement = new Movement(null, $this->fromLocation->getLocationId(), $this->toLocation->getLocationId(), $this->product->getProductId(), $this->unitOfMeasure->getUnitId(), $this->user->getUserId(), $this->VALID_cost, $this->VALID_movementDate, $this->VALID_movementType, $this->VALID_price);
     $newMovement->insert($this->getPDO());
     // grab the data from guzzle and enforce the status' match our expectations
     $response = $this->guzzle->get('https://bootcamp-coders.cnm.edu/~invtext/backend/php/api/movement/?movementType=' . $newMovement->getMovementType());
     $this->assertSame($response->getStatusCode(), 200);
     $body = $response->getBody();
     $movement = json_decode($body);
     $this->assertSame(200, $movement->status);
 }
Exemplo n.º 14
0
function digest_getMovements($ownCave, $doNotShow, $showDetails)
{
    global $db;
    // get movements
    $ua_movements = Movement::getMovements();
    // caveIDs einsammeln
    $caveIDs = implode(', ', array_map(array($db, 'quote'), array_keys($ownCave)));
    // Bewegungen besorgen
    $query = "SELECT *\n            FROM " . EVENT_MOVEMENT_TABLE . "\n            WHERE source_caveID IN (" . $caveIDs . ")\n              OR target_caveID IN (" . $caveIDs . ")\n            ORDER BY end ASC, event_movementID ASC";
    if (!($sql = $db->query($query))) {
        return array();
    }
    $rows = $sql->fetchAll();
    $sql->closeCursor();
    // bewegungen durchgehen
    $result = array();
    foreach ($rows as $row) {
        // "do not show" movements should not be shown
        if (in_array($row['movementID'], $doNotShow)) {
            continue;
        }
        // is own movement?
        $row['isOwnMovement'] = in_array($row['caveID'], array_keys($ownCave));
        /////////////////////////////////
        // SICHTWEITE BESCHRÄNKEN
        /* We got some problems, as reverse movements should not ALWAYS be visible.
         * For example a transport reverse movement should be visible, but a
         * spy reverse movement should not...
         * As a work around we will fix it by not showing any adverse reverse movement.
         *
         * The original code is following...
        
            if (!$row['isOwnMovement']){
        
              if ($ua_movements[$row['movementID']]->returnID == -1){
                $sichtweite = getVisionRange($ownCave[$row['source_caveID']]) * $row['speedFactor'];
                $distance = time() - (time_fromDatetime($row['end']) - getDistanceByID($srcID, $destID) * $row['speedFactor']);
              } else {
                $sichtweite = getVisionRange($ownCave[$row['target_caveID']]) * $row['speedFactor'];
                $distance = ceil((time_fromDatetime($row['end']) - time())/60);
              }
        
              if ($sichtweite < $distance) continue;
            }
         */
        // compute visibility
        if (!$row['isOwnMovement']) {
            // don't show adverse reverse movements
            if ($ua_movements[$row['movementID']]->returnID == -1) {
                continue;
            }
            $sichtweite = getVisionRange($ownCave[$row['target_caveID']]) * $row['speedFactor'];
            $distance = ceil((time_fromDatetime($row['end']) - time()) / 60);
            if ($sichtweite < $distance) {
                continue;
            }
        }
        /////////////////////////////////
        // ***** fremde unsichtbare bewegung *****
        if ($row['isOwnMovement'] == 0) {
            if ($ua_movements[$row['movementID']]->mayBeInvisible) {
                $anzahl_sichtbarer_einheiten = 0;
                foreach ($GLOBALS['unitTypeList'] as $unitType) {
                    if ($unitType->visible) {
                        $anzahl_sichtbarer_einheiten += $row[$unitType->dbFieldName];
                    }
                }
                if ($anzahl_sichtbarer_einheiten == 0) {
                    continue;
                }
            }
        }
        $tmp = array('event_id' => $row['event_movementID'], 'cave_id' => $row['caveID'], 'source_cave_id' => $row['source_caveID'], 'target_cave_id' => $row['target_caveID'], 'movement_id' => $row['movementID'], 'event_start' => time_fromDatetime($row['start']), 'event_start_date' => time_formatDatetime($row['start']), 'event_end' => time_fromDatetime($row['end']), 'event_end_date' => time_formatDatetime($row['end']), 'isOwnMovement' => intval($row['isOwnMovement']), 'seconds_before_end' => time_fromDatetime($row['end']) - time(), 'movement_id_description' => $ua_movements[$row['movementID']]->description);
        // Quelldaten
        $source = getCaveNameAndOwnerByCaveID($row['source_caveID']);
        foreach ($source as $key => $value) {
            $tmp['source_' . $key] = $value;
        }
        // Zieldaten
        $target = getCaveNameAndOwnerByCaveID($row['target_caveID']);
        foreach ($target as $key => $value) {
            $tmp['target_' . $key] = $value;
        }
        // ***** Einheiten, Rohstoffe und Artefakte *****
        if ($showDetails) {
            // show artefact
            if ($row['artefactID']) {
                $tmp['artefact'] = artefact_getArtefactByID($row['artefactID']);
            }
            // show hero
            if ($row['heroID']) {
                $tmp['hero'] = "Held läuft mit!";
            }
            // eval(GameConstants::EXPOSE_INVISIBLE)
            // FIXME (mlunzena): oben holen wir schon bestimmte Höhlendaten,
            //                   das sollte man zusammenfassen..
            $target = getCaveByID($row['target_caveID']);
            $expose = eval('return ' . formula_parseToPHP(GameConstants::EXPOSE_INVISIBLE . ";", '$target'));
            // show units
            $units = array();
            foreach ($GLOBALS['unitTypeList'] as $unit) {
                // this movement does not contain units of that type
                if (!$row[$unit->dbFieldName]) {
                    continue;
                }
                // expose invisible units
                //   if it is your own move
                //   if unit is visible
                if (!$row['isOwnMovement'] && !$unit->visible) {
                    // if target cave's EXPOSEINVISIBLE is > than exposeChance
                    if ($expose <= $row['exposeChance']) {
                        // do not expose
                        continue;
                    } else {
                        // do something
                        // for example:
                        // $row[$unit->dbFieldName] *= 2.0 * (double)rand() / (double)getRandMax();
                    }
                }
                $units[] = array('unitID' => $unit->unitID, 'dbFieldName' => $unit->dbFieldName, 'name' => $unit->name, 'value' => $ua_movements[$row['movementID']]->fogUnit && !$row['isOwnMovement'] ? calcFogUnit($row[$unit->dbFieldName]) : $row[$unit->dbFieldName]);
            }
            if (sizeof($units)) {
                $tmp['units'] = $units;
            }
            $resources = array();
            foreach ($GLOBALS['resourceTypeList'] as $resource) {
                if (!$row[$resource->dbFieldName]) {
                    continue;
                }
                $resources[] = array('name' => $resource->name, 'dbFieldName' => $resource->dbFieldName, 'value' => $ua_movements[$row['movementID']]->fogResource && !$row['isOwnMovement'] ? calcFogResource($row[$resource->dbFieldName]) : $row[$resource->dbFieldName]);
            }
            if (sizeof($resources)) {
                $tmp['resources'] = $resources;
            }
            if ($row['isOwnMovement'] && $ua_movements[$row['movementID']]->returnID != -1 && !$row['artefactID'] && !$row['blocked']) {
                $tmp['cancel'] = array("modus" => UNIT_MOVEMENT, "eventID" => $row['event_movementID']);
            }
        }
        $result[] = $tmp;
    }
    return $result;
}
Exemplo n.º 15
0
function digest_getMovements($ownCave, $doNotShow, $showDetails)
{
    global $db;
    // get movements
    $ua_movements = Movement::getMovements();
    // caveIDs einsammeln
    $caveIDs = implode(', ', array_map(array($db, 'quote'), array_keys($ownCave)));
    $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;
}
Exemplo n.º 16
0
 /**
  * test grabbing a all Movements that do not exist
  *
  * @expectedException
  **/
 public function testGetInvalidAllMovements()
 {
     // grab all movements with a page number that does not exist
     $page = 2;
     $pdoMovement = Movement::getAllMovements($this->getPDO(), $page);
     foreach ($pdoMovement as $pdoM) {
         $this->assertNull($pdoM);
     }
 }