private static function GetBuildListBy($colony, $IDrangeFrom, $IDrangeTo, $readyToBeBuilt = false, $table = "production") { // Get building list $colonyID = $colony->ID(); $query = "SELECT * FROM {$table} WHERE colonyID = {$colonyID} AND resource_type_being_built BETWEEN {$IDrangeFrom} AND {$IDrangeTo}"; if ($readyToBeBuilt) { $time = time(); $query .= " AND {$time} > scheduled_time"; } $query .= " ORDER BY build_list_position ASC;"; $buildData = Database::Instance()->ExecuteQuery($query, "SELECT"); // BuildGroup always expects an array of arrays, so if we get NULL or a single array, we need to make an array of arrays if ($buildData === NULL) { $buildData = array(); } if (isset($buildData["colonyID"])) { $buildData = array($buildData); } if ($table === "production_building") { $buildGroup = BuildingBuildGroup::FromDatabase($buildData, $colony); } else { $buildGroup = BuildGroup::FromDatabase($buildData, $colony); } return new ResourceBuilder($buildGroup); }
public function CancelBuildings(array $resources, array $positions, $firstItem) { $c = $this->User()->CurrentColony(); $bg = BuildingBuildGroup::FromList($resources, $c, $positions, true); $rb = ResourceBuilder::GetBuildingListOfColony($c); foreach ($bg->Members() as $item) { if (!$rb->BuildList()->ContainsBuildItem($item)) { throw new Exception("This item has already been deleted!"); } } // Reimburse costs $reimbursedCosts = $bg->TotalCost(); $c->CurrentResources()->AddCost($reimbursedCosts); $c->UpdateResources(); // Deduct the units $rb->BuildList()->DeductUnits($bg); // Update Build times $rb->BuildList()->UpdateLevels(); $rb->BuildList()->UpdateBuildTimes(); if ($firstItem) { // Update Commissioned time $rb->BuildList()->UpdateCommissionedTime(); } // Update the database $rb->BuildList()->UpdateDatabase(); }
public static function FromDatabase(array $buildData, Colony $colony, $updateBuildTimes = true) { $members = array(); // Build a list of BuildItems foreach ($buildData as $row) { $itemName = ResourceParser::Instance()->GetItemNameByID($row['resource_type_being_built']); $itemObject = clone ResourceParser::Instance()->GetItemByName($itemName); $itemObject->Amount(1); $positionInList = $row['build_list_position']; $level = $row['level']; $members[$positionInList] =& BuildingBuildItem::FromIDResource($itemObject, $positionInList, $positionInList, 0, $level, NULL); } $bg = new BuildingBuildGroup($members, $colony); if ($updateBuildTimes) { $bg->UpdateBuildTimes(); } return $bg; }
include "root.inc"; require_once "{$ROOT}/common.php"; $_SESSION['NewNovaID'] = 1; $user = User::GetCurrentUser(); if ($user == NULL) { return; } if ($_GET) { if (isset($_GET['command'])) { switch ($_GET['command']) { case "insert": $id = $_GET['building']; $itemName = ResourceParser::Instance()->GetItemNameByID($id); $action = new UserAction($user); // Check if this is the first item to be inserted $count = BuildingBuildGroup::GetListCount($user->CurrentColony()); $firstItem = false; if ($count == 0) { $firstItem = true; } // Only calculate commissioned time on first insertion $action->PurchaseBuildings(array($itemName), $firstItem); break; case "cancel": $id = $_GET['building']; $itemName = ResourceParser::Instance()->GetItemNameByID($id); $pos = $_GET['build_position']; $action = new UserAction($user); // Check if we want to delete the first item $firstItem = false; $visualPos = $_GET['viewposition'];