Файл: includes/pages/class.ShowBuildingsPage.php
Строк: 621
<?php
##############################################################################
# * #
# * XG PROYECT #
# * #
# * @copyright Copyright (C) 2008 - 2009 By lucky from xgproyect.net #
# * #
# * #
# * This program is free software: you can redistribute it and/or modify #
# * it under the terms of the GNU General Public License as published by #
# * the Free Software Foundation, either version 3 of the License, or #
# * (at your option) any later version. #
# * #
# * This program is distributed in the hope that it will be useful, #
# * but WITHOUT ANY WARRANTY; without even the implied warranty of #
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# * GNU General Public License for more details. #
# * #
##############################################################################
if(!defined('INSIDE')){ die(header("location:../../"));}
class ShowBuildingsPage
{
private function BuildingSavePlanetRecord ($CurrentPlanet)
{
$QryUpdatePlanet = "UPDATE {{table}} SET ";
$QryUpdatePlanet .= "`b_building_id` = '". $CurrentPlanet['b_building_id'] ."', ";
$QryUpdatePlanet .= "`b_building` = '". $CurrentPlanet['b_building'] ."' ";
$QryUpdatePlanet .= "WHERE ";
$QryUpdatePlanet .= "`id` = '". $CurrentPlanet['id'] ."';";
doquery( $QryUpdatePlanet, 'planets');
return;
}
private function CancelBuildingFromQueue (&$CurrentPlanet, &$CurrentUser)
{
$CurrentQueue = $CurrentPlanet['b_building_id'];
if ($CurrentQueue != 0)
{
$QueueArray = explode ( ";", $CurrentQueue );
$ActualCount = count ( $QueueArray );
$CanceledIDArray = explode ( ",", $QueueArray[0] );
$Element = $CanceledIDArray[0];
$BuildMode = $CanceledIDArray[4];
if ($ActualCount > 1)
{
array_shift( $QueueArray );
$NewCount = count( $QueueArray );
$BuildEndTime = time();
for ($ID = 0; $ID < $NewCount ; $ID++ )
{
$ListIDArray = explode ( ",", $QueueArray[$ID] );
$BuildEndTime += $ListIDArray[2];
$ListIDArray[3] = $BuildEndTime;
$QueueArray[$ID] = implode ( ",", $ListIDArray );
}
$NewQueue = implode(";", $QueueArray );
$ReturnValue = true;
$BuildEndTime = '0';
}
else
{
$NewQueue = '0';
$ReturnValue = false;
$BuildEndTime = '0';
}
if ($BuildMode == 'destroy')
{
$ForDestroy = true;
}
else
{
$ForDestroy = false;
}
if ( $Element != false ) {
$Needed = GetBuildingPrice ($CurrentUser, $CurrentPlanet, $Element, true, $ForDestroy);
$CurrentPlanet['metal'] += $Needed['metal'];
$CurrentPlanet['crystal'] += $Needed['crystal'];
$CurrentPlanet['deuterium'] += $Needed['deuterium'];
}
}
else
{
$NewQueue = '0';
$BuildEndTime = '0';
$ReturnValue = false;
}
$CurrentPlanet['b_building_id'] = $NewQueue;
$CurrentPlanet['b_building'] = $BuildEndTime;
return $ReturnValue;
}
private function RemoveBuildingFromQueue ( &$CurrentPlanet, $CurrentUser, $QueueID )
{
if ($QueueID > 1)
{
$CurrentQueue = $CurrentPlanet['b_building_id'];
if ($CurrentQueue != 0)
{
$QueueArray = explode ( ";", $CurrentQueue );
$ActualCount = count ( $QueueArray );
$ListIDArray = explode ( ",", $QueueArray[$QueueID - 2] );
$BuildEndTime = $ListIDArray[3];
for ($ID = $QueueID; $ID < $ActualCount; $ID++ )
{
$ListIDArray = explode ( ",", $QueueArray[$ID] );
$BuildEndTime += $ListIDArray[2];
$ListIDArray[3] = $BuildEndTime;
$QueueArray[$ID - 1] = implode ( ",", $ListIDArray );
}
unset ($QueueArray[$ActualCount - 1]);
$NewQueue = implode ( ";", $QueueArray );
}
$CurrentPlanet['b_building_id'] = $NewQueue;
}
return $QueueID;
}
private function AddBuildingToQueue (&$CurrentPlanet, $CurrentUser, $Element, $AddMode = true)
{
global $resource;
$CurrentQueue = $CurrentPlanet['b_building_id'];
$Queue = $this->ShowBuildingQueue($CurrentPlanet, $CurrentUser);
$CurrentMaxFields = CalculateMaxPlanetFields($CurrentPlanet);
if ($CurrentPlanet["field_current"] >= ($CurrentMaxFields - $Queue['lenght']) && $_GET['cmd'] != 'destroy')
die(header("location:game.php?page=buildings"));
if ($CurrentQueue != 0)
{
$QueueArray = explode ( ";", $CurrentQueue );
$ActualCount = count ( $QueueArray );
}
else
{
$QueueArray = "";
$ActualCount = 0;
}
if ($AddMode == true)
{
$BuildMode = 'build';
}
else
{
$BuildMode = 'destroy';
}
if ( $ActualCount < MAX_BUILDING_QUEUE_SIZE)
{
$QueueID = $ActualCount + 1;
}
else
{
$QueueID = false;
}
if ( $QueueID != false && IsElementBuyable ($CurrentUser, $CurrentPlanet, $Element, true, false) && IsTechnologieAccessible($CurrentUser, $CurrentPlanet, $Element) )
{
if ($QueueID > 1)
{
$InArray = 0;
for ( $QueueElement = 0; $QueueElement < $ActualCount; $QueueElement++ )
{
$QueueSubArray = explode ( ",", $QueueArray[$QueueElement] );
if ($QueueSubArray[0] == $Element)
{
$InArray++;
}
}
}
else
{
$InArray = 0;
}
if ($InArray != 0)
{
$ActualLevel = $CurrentPlanet[$resource[$Element]];
if ($AddMode == true)
{
$BuildLevel = $ActualLevel + 1 + $InArray;
$CurrentPlanet[$resource[$Element]] += $InArray;
$BuildTime = GetBuildingTime($CurrentUser, $CurrentPlanet, $Element);
$CurrentPlanet[$resource[$Element]] -= $InArray;
}
else
{
$BuildLevel = $ActualLevel - 1 - $InArray;
$CurrentPlanet[$resource[$Element]] -= $InArray;
$BuildTime = GetBuildingTime($CurrentUser, $CurrentPlanet, $Element) / 2;
$CurrentPlanet[$resource[$Element]] += $InArray;
}
}
else
{
$ActualLevel = $CurrentPlanet[$resource[$Element]];
if ($AddMode == true)
{
$BuildLevel = $ActualLevel + 1;
$BuildTime = GetBuildingTime($CurrentUser, $CurrentPlanet, $Element);
}
else
{
$BuildLevel = $ActualLevel - 1;
$BuildTime = GetBuildingTime($CurrentUser, $CurrentPlanet, $Element) / 2;
}
}
if ($QueueID == 1)
{
$BuildEndTime = time() + $BuildTime;
}
else
{
$PrevBuild = explode (",", $QueueArray[$ActualCount - 1]);
$BuildEndTime = $PrevBuild[3] + $BuildTime;
}
$QueueArray[$ActualCount] = $Element .",". $BuildLevel .",". $BuildTime .",". $BuildEndTime .",". $BuildMode;
$NewQueue = implode ( ";", $QueueArray );
$CurrentPlanet['b_building_id'] = $NewQueue;
}
return $QueueID;
}
private function ShowBuildingQueue ( $CurrentPlanet, $CurrentUser )
{
global $lang;
$CurrentQueue = $CurrentPlanet['b_building_id'];
$QueueID = 0;
if ($CurrentQueue != 0)
{
$QueueArray = explode ( ";", $CurrentQueue );
$ActualCount = count ( $QueueArray );
}
else
{
$QueueArray = "0";
$ActualCount = 0;
}
$ListIDRow = "";
if ($ActualCount != 0)
{
$PlanetID = $CurrentPlanet['id'];
for ($QueueID = 0; $QueueID < $ActualCount; $QueueID++)
{
$BuildArray = explode (",", $QueueArray[$QueueID]);
$BuildEndTime = floor($BuildArray[3]);
$CurrentTime = floor(time());
if ($BuildEndTime >= $CurrentTime)
{
$ListID = $QueueID + 1;
$Element = $BuildArray[0];
$BuildLevel = $BuildArray[1];
$BuildMode = $BuildArray[4];
$BuildTime = $BuildEndTime - time();
$ElementTitle = $lang['tech'][$Element];
if ($ListID > 0)
{
$ListIDRow .= "<tr>";
if ($BuildMode == 'build')
{
$ListIDRow .= " <td class="l" colspan="2">". $ListID .".: ". $ElementTitle ." ". $BuildLevel ."</td>";
}
else
{
$ListIDRow .= " <td class="l" colspan="2">". $ListID .".: ". $ElementTitle ." ". $BuildLevel . " " . $lang['bd_dismantle']."</td>";
}
$ListIDRow .= " <td class="k">";
if ($ListID == 1)
{
$ListIDRow .= " <div id="blc" class="z">". $BuildTime ."<br>";
$ListIDRow .= " <a href="game.php?page=buildings&listid=". $ListID ."&cmd=cancel&planet=". $PlanetID ."">".$lang['bd_interrupt']."</a></div>";
$ListIDRow .= " <script language="JavaScript">";
$ListIDRow .= " pp = "". $BuildTime ."";n";
$ListIDRow .= " pk = "". $ListID ."";n";
$ListIDRow .= " pm = "cancel";n";
$ListIDRow .= " pl = "". $PlanetID ."";n";
$ListIDRow .= " t();n";
$ListIDRow .= " </script>";
$ListIDRow .= " <strong color="lime"><br><font color="lime">". date("j/m H:i:s" ,$BuildEndTime) ."</font></strong>";
}
else
{
$ListIDRow .= " <font color="red">";
$ListIDRow .= " <a href="game.php?page=buildings&listid=". $ListID ."&cmd=remove&planet=". $PlanetID ."">".$lang['bd_cancel']."</a></font>";
}
$ListIDRow .= " </td>";
$ListIDRow .= "</tr>";
}
}
}
}
$RetValue['lenght'] = $ActualCount;
$RetValue['buildlist'] = $ListIDRow;
return $RetValue;
}
public function __construct (&$CurrentPlanet, $CurrentUser)
{
global $ProdGrid, $lang, $resource, $reslist, $phpEx, $dpath, $game_config, $_GET, $xgp_root;
include_once($xgp_root . 'includes/functions/IsTechnologieAccessible.' . $phpEx);
include_once($xgp_root . 'includes/functions/GetElementPrice.' . $phpEx);
include_once($xgp_root . 'includes/functions/GetRestPrice.' . $phpEx);
CheckPlanetUsedFields ( $CurrentPlanet );
$parse = $lang;
$Allowed['1'] = array( 1, 2, 3, 4, 12, 14, 15, 21, 22, 23, 24, 31, 33, 34, 35, 44, 45);
$Allowed['3'] = array( 12, 14, 21, 22, 23, 24, 34, 41, 42, 43);
if (isset($_GET['cmd']))
{
$bDoItNow = false;
$TheCommand = $_GET['cmd'];
$Element = $_GET['building'];
$ListID = $_GET['listid'];
if (!in_array( trim($Element), $Allowed[$CurrentPlanet['planet_type']]))
{
unset($Element);
}
if( isset ( $Element ))
{
if ( !strchr ( $Element, ",") && !strchr ( $Element, " ") &&
!strchr ( $Element, "+") && !strchr ( $Element, "*") &&
!strchr ( $Element, "~") && !strchr ( $Element, "=") &&
!strchr ( $Element, ";") && !strchr ( $Element, "'") &&
!strchr ( $Element, "#") && !strchr ( $Element, "-") &&
!strchr ( $Element, "_") && !strchr ( $Element, "[") &&
!strchr ( $Element, "]") && !strchr ( $Element, ".") &&
!strchr ( $Element, ":"))
{
if (in_array( trim($Element), $Allowed[$CurrentPlanet['planet_type']]))
{
$bDoItNow = true;
}
}
else
{
header("location:game.php?page=buildings");
}
}
elseif ( isset ( $ListID ))
{
$bDoItNow = true;
}
if ($Element == 31 && $CurrentUser["b_tech_planet"] != 0)
{
$bDoItNow = false;
}
if ( ( $Element == 21 or $Element == 14 or $Element == 15 ) && $CurrentPlanet["b_hangar"] != 0)
{
$bDoItNow = false;
}
if ($bDoItNow == true)
{
switch($TheCommand)
{
case 'cancel':
$this->CancelBuildingFromQueue ($CurrentPlanet, $CurrentUser);
break;
case 'remove':
$this->RemoveBuildingFromQueue ($CurrentPlanet, $CurrentUser, $ListID);
break;
case 'insert':
$this->AddBuildingToQueue ($CurrentPlanet, $CurrentUser, $Element, true);
break;
case 'destroy':
$this->AddBuildingToQueue ($CurrentPlanet, $CurrentUser, $Element, false);
break;
}
}
if ( $_GET['r'] == 'overview' )
{
header('location:game.php?page=overview');
}
else
{
header ("Location: game.php?page=buildings&mode=buildings");
}
}
SetNextQueueElementOnTop($CurrentPlanet, $CurrentUser);
$Queue = $this->ShowBuildingQueue($CurrentPlanet, $CurrentUser);
$this->BuildingSavePlanetRecord($CurrentPlanet);
if ($Queue['lenght'] < (MAX_BUILDING_QUEUE_SIZE))
{
$CanBuildElement = true;
}
else
{
$CanBuildElement = false;
}
$BuildingPage = "";
$zaehler = 1;
foreach($lang['tech'] as $Element => $ElementName)
{
if (in_array($Element, $Allowed[$CurrentPlanet['planet_type']]))
{
$CurrentMaxFields = CalculateMaxPlanetFields($CurrentPlanet);
if ($CurrentPlanet["field_current"] < ($CurrentMaxFields - $Queue['lenght']))
{
$RoomIsOk = true;
}
else
{
$RoomIsOk = false;
}
if (IsTechnologieAccessible($CurrentUser, $CurrentPlanet, $Element))
{
$HaveRessources = IsElementBuyable ($CurrentUser, $CurrentPlanet, $Element, true, false);
$parse = array();
$parse = $lang;
$parse['dpath'] = $dpath;
$parse['i'] = $Element;
$BuildingLevel = $CurrentPlanet[$resource[$Element]];
$parse['nivel'] = ($BuildingLevel == 0) ? "" : " (". $lang['bd_lvl'] . " " . $BuildingLevel .")";
$parse['n'] = $ElementName;
$parse['descriptions'] = $lang['res']['descriptions'][$Element];
$ElementBuildTime = GetBuildingTime($CurrentUser, $CurrentPlanet, $Element);
$parse['time'] = ShowBuildTime($ElementBuildTime);
$parse['price'] = GetElementPrice($CurrentUser, $CurrentPlanet, $Element);
$parse['rest_price'] = GetRestPrice($CurrentUser, $CurrentPlanet, $Element);
$parse['click'] = '';
$NextBuildLevel = $CurrentPlanet[$resource[$Element]] + 1;
// Показ кол-ва потраченой/добоавляемой энергии START
$parse['nivel'] = ($BuildingLevel == 0) ? "" : " (". $lang['bd_lvl'] . " " . $BuildingLevel .")";
$BuildLevelFactor = 10;
$BuildTemp = $CurrentPlanet[ 'temp_max' ];
$CurrentBuildtLvl = $BuildingLevel;
$BuildLevel = ($CurrentBuildtLvl > 0) ? $CurrentBuildtLvl : 1;
$EnergyTechLevel = $CurrentUser["energy_tech"];
$Prod[4] = (floor(eval($ProdGrid[$Element]['formule']['energy'])
* $game_config['resource_multiplier']) * (1 + ($CurrentUser['rpg_ingenieur'] * 0.05)));
$ActualNeed = floor($Prod[4]);
$BuildLevel++;
$Prod[4] = (floor(eval($ProdGrid[$Element]['formule']['energy'])
* $game_config['resource_multiplier']) * (1 + ($CurrentUser['rpg_ingenieur'] * 0.05)));
$EnergyNeed = colorNumber( pretty_number(floor($Prod[4] - $ActualNeed)) );
if ($Element >= 1 && $Element <= 3) {
$parse['energia'] = "("."<font color=#FF0000>". $EnergyNeed." ".$lang['Energy']."</font>".")";
$BuildLevel = 0;
}elseif ($Element == 4 || $Element == 12) {
$parse['energia'] = "("."<font color=#00FF00>+". $EnergyNeed." ".$lang['Energy']."</font>".")";
$BuildLevel = 0;
}
// Показ кол-ва потраченой/добоавляемой энергии END
// Количество полей: Остаток полей/Общее Количество полей START
$parse['planet_field_current'] = $CurrentPlanet['field_current'];
$parse['planet_field_max'] = CalculateMaxPlanetFields($CurrentPlanet);
$parse['field_libre'] = $parse['planet_field_max'] - $CurrentPlanet['field_current'];
// Количество полей: Остаток полей/Общее Количество полей END
if ($RoomIsOk && $CanBuildElement)
{
if ($Queue['lenght'] == 0)
{
if ($NextBuildLevel == 1)
{
if ( $HaveRessources == true )
$parse['click'] = "<form action='game.php?page=buildings&cmd=insert&building=". $Element ."' method='post'><input type='submit' style='width:100px;color:lime;font-weight:bold;' value=' ".$lang['bd_build']."'></form>";
else
$parse['click'] = "<form action='' method='post'><input type='submit' style='width:100px;color:red;font-weight:bold;' value=' ".$lang['bd_build']."'></form>";
}
else
{
if ( $HaveRessources == true )
$parse['click'] = "<form action='game.php?page=buildings&cmd=insert&building=". $Element ."' method='post'><input type='submit' style='width:100px;color:lime;font-weight:bold;' value=' ". $lang['bd_build_next_level'] ."'></form>";
else
$parse['click'] = "<form action='' method='post'><input type='submit' style='width:100px;color:red;font-weight:bold;' value=' ". $lang['bd_build_next_level'] ."'></form>";
}
}
else
{
$parse['click'] = "<form action='game.php?page=buildings&cmd=insert&building=". $Element ."' method='post'><input type='submit' style='width:100px;color:lime;font-weight:bold;' value=' ".$lang['bd_add_to_list']."'></form>";
}
}
elseif ($RoomIsOk && !$CanBuildElement)
{
if ($NextBuildLevel == 1)
$parse['click'] = "<form action='' method='post'><input type='submit' style='width:100px;color:red;font-weight:bold;' value=' ".$lang['bd_build'] ."'></form>";
else
$parse['click'] = "<form action='' method='post'><input type='submit' style='width:100px;color:red;font-weight:bold;' value=' ". $lang['bd_build_next_level'] ."'></form>";
}
else
$parse['click'] = "<form action='' method='post'><input type='submit' style='width:100px;color:red;font-weight:bold;' value=' ".$lang['bd_no_more_fields'] ."'></form>";
if ($Element == 31 && $CurrentUser["b_tech_planet"] != 0)
{
$parse['click'] = "<form action='' method='post'><input type='submit' style='width:100px;color:red;font-weight:bold;' value=' ".$lang['bd_working'] ."'></form>";
}
if ( ( $Element == 21 or $Element == 14 or $Element == 15 ) && $CurrentPlanet["b_hangar"] != 0)
{
$parse['click'] = "<form action='' method='post'><input type='submit' style='width:100px;color:red;font-weight:bold;' value=' ".$lang['bd_working'] ."'></form>";
}
$BuildingPage .= parsetemplate(gettemplate('buildings/buildings_builds_row'), $parse);
}
}
}
if ($Queue['lenght'] > 0)
{
include($xgp_root . 'includes/functions/InsertBuildListScript.' . $phpEx);
$parse['BuildListScript'] = InsertBuildListScript ("buildings");
$parse['BuildList'] = $Queue['buildlist'];
}
else
{
$parse['BuildListScript'] = "";
$parse['BuildList'] = "<th colspan='3'><font color=gold><blink>Очередь построек пуста!</blink></font></th>";
}
$parse['BuildingsList'] = $BuildingPage;
display(parsetemplate(gettemplate('buildings/buildings_builds'), $parse));
}
}
?>