Файл: includes/functions/PlanetResourceUpdate.php
Строк: 312
<?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:../../"));}
    function PlanetResourceUpdate ( $CurrentUser, &$CurrentPlanet, $UpdateTime, $Simul = false )
    {
        global $ProdGrid, $resource, $reslist, $game_config;
        $CurrentPlanet['metal_max']        =    (BASE_STORAGE_SIZE + 50000 * (roundUp(pow(1.6,$CurrentPlanet[ $resource[22] ])) -1)) * (1 + ($CurrentUser['rpg_stockeur'] * STOCKEUR));
        $CurrentPlanet['crystal_max']    =    (BASE_STORAGE_SIZE + 50000 * (roundUp(pow(1.6,$CurrentPlanet[ $resource[23] ])) -1)) * (1 + ($CurrentUser['rpg_stockeur'] * STOCKEUR));
        $CurrentPlanet['deuterium_max']    =    (BASE_STORAGE_SIZE + 50000 * (roundUp(pow(1.6,$CurrentPlanet[ $resource[24] ])) -1)) * (1 + ($CurrentUser['rpg_stockeur'] * STOCKEUR));
        $MaxMetalStorage                = $CurrentPlanet['metal_max']     * MAX_OVERFLOW;
        $MaxCristalStorage              = $CurrentPlanet['crystal_max']   * MAX_OVERFLOW;
        $MaxDeuteriumStorage            = $CurrentPlanet['deuterium_max'] * MAX_OVERFLOW;
        $Caps             = array();
        $BuildTemp        = $CurrentPlanet[ 'temp_max' ];
        $parse['production_level'] = 100;
        if ($CurrentPlanet['energy_max'] == 0 && $CurrentPlanet['energy_used'] > 0)
        {
            $post_porcent = 0;
        }
        elseif ($CurrentPlanet['energy_max'] > 0 && ($CurrentPlanet['energy_used'] + $CurrentPlanet['energy_max']) < 0 )
        {
            $post_porcent = floor(($CurrentPlanet['energy_max']) / ($CurrentPlanet['energy_used']*-1) * 100);
        }
        else
        {
            $post_porcent = 100;
        }
        if ($post_porcent > 100)
        {
            $post_porcent = 100;
        }
        for ( $ProdID = 0; $ProdID < 300; $ProdID++ )
        {
            if ( in_array( $ProdID, $reslist['prod']) )
            {
                $BuildLevelFactor = $CurrentPlanet[ $resource[$ProdID]."_porcent" ];
                $BuildLevel = $CurrentPlanet[ $resource[$ProdID] ];
                $Caps['metal_perhour']     += floor( eval ( $ProdGrid[$ProdID]['formule']['metal'] )     * (0.01 * $post_porcent) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_geologue'] * GEOLOGUE ) ) );
                $Caps['crystal_perhour']   += floor( eval ( $ProdGrid[$ProdID]['formule']['crystal'] )   * (0.01 * $post_porcent) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_geologue'] * GEOLOGUE ) ) );
                if ($ProdID < 4)
                {
                    $Caps['deuterium_perhour'] += floor( eval ( $ProdGrid[$ProdID]['formule']['deuterium'] ) * (0.01 * $post_porcent) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_geologue'] * GEOLOGUE ) ) );
                    $Caps['energy_used']   +=  floor( eval  ( $ProdGrid[$ProdID]['formule']['energy']    ) * ( $game_config['resource_multiplier'] ) );
                }
                elseif ($ProdID >= 4 )
                {
                    if($ProdID == 12 && $CurrentPlanet['deuterium'] == 0)
                        continue;
                    $Caps['deuterium_perhour'] += floor( eval ( $ProdGrid[$ProdID]['formule']['deuterium'] ) * (0.01 * $post_porcent) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_geologue'] * GEOLOGUE ) ) );
                    $Caps['energy_max']    +=  floor( eval  ( $ProdGrid[$ProdID]['formule']['energy']    ) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_ingenieur'] * INGENIEUR ) ) );
                }
            }
        }
        if ($CurrentPlanet['planet_type'] == 3)
        {
            $game_config['metal_basic_income']     = 0;
            $game_config['crystal_basic_income']   = 0;
            $game_config['deuterium_basic_income'] = 0;
            $CurrentPlanet['metal_perhour']        = 0;
            $CurrentPlanet['crystal_perhour']      = 0;
            $CurrentPlanet['deuterium_perhour']    = 0;
            $CurrentPlanet['energy_used']          = 0;
            $CurrentPlanet['energy_max']           = 0;
        }
        else
        {
            $CurrentPlanet['metal_perhour']        = $Caps['metal_perhour'];
            $CurrentPlanet['crystal_perhour']      = $Caps['crystal_perhour'];
            $CurrentPlanet['deuterium_perhour']    = $Caps['deuterium_perhour'];
            $CurrentPlanet['energy_used']          = $Caps['energy_used'];
            $CurrentPlanet['energy_max']           = $Caps['energy_max'];
        }
        $ProductionTime               = ($UpdateTime - $CurrentPlanet['last_update']);
        $CurrentPlanet['last_update'] = $UpdateTime;
        if ($CurrentPlanet['energy_max'] == 0)
        {
            $CurrentPlanet['metal_perhour']     = $game_config['metal_basic_income'];
            $CurrentPlanet['crystal_perhour']   = $game_config['crystal_basic_income'];
            $CurrentPlanet['deuterium_perhour'] = $game_config['deuterium_basic_income'];
            $production_level            = 100;
        }
        elseif ($CurrentPlanet["energy_max"] >= $CurrentPlanet["energy_used"])
        {
            $production_level = 100;
        }
        else
        {
            $production_level = floor(($CurrentPlanet['energy_max'] / $CurrentPlanet['energy_used']) * 100);
        }
        if($production_level > 100)
        {
            $production_level = 100;
        }
        elseif ($production_level < 0)
        {
            $production_level = 0;
        }
        if ( $CurrentPlanet['metal'] <= $MaxMetalStorage )
        {
            $MetalProduction = (($ProductionTime * ($CurrentPlanet['metal_perhour'] / 3600))) * (0.01 * $production_level);
            $MetalBaseProduc = (($ProductionTime * ($game_config['metal_basic_income'] / 3600 )));
            $MetalTheorical  = $CurrentPlanet['metal'] + $MetalProduction  +  $MetalBaseProduc;
            if ( $MetalTheorical <= $MaxMetalStorage )
            {
                $CurrentPlanet['metal']  = $MetalTheorical;
            }
            else
            {
                $CurrentPlanet['metal']  = $MaxMetalStorage;
            }
        }
        if ( $CurrentPlanet['crystal'] <= $MaxCristalStorage )
        {
            $CristalProduction = (($ProductionTime * ($CurrentPlanet['crystal_perhour'] / 3600))) * (0.01 * $production_level);
            $CristalBaseProduc = (($ProductionTime * ($game_config['crystal_basic_income'] / 3600 )));
            $CristalTheorical  = $CurrentPlanet['crystal'] + $CristalProduction  +  $CristalBaseProduc;
            if ( $CristalTheorical <= $MaxCristalStorage )
            {
                $CurrentPlanet['crystal']  = $CristalTheorical;
            }
            else
            {
                $CurrentPlanet['crystal']  = $MaxCristalStorage;
            }
        }
        if ( $CurrentPlanet['deuterium'] <= $MaxDeuteriumStorage )
        {
            $DeuteriumProduction = (($ProductionTime * ($CurrentPlanet['deuterium_perhour'] / 3600))) * (0.01 * $production_level);
            $DeuteriumBaseProduc = (($ProductionTime * ($game_config['deuterium_basic_income'] / 3600 )));
            $DeuteriumTheorical  = $CurrentPlanet['deuterium'] + $DeuteriumProduction  +  $DeuteriumBaseProduc;
            if ( $DeuteriumTheorical <= $MaxDeuteriumStorage )
            {
                $CurrentPlanet['deuterium']  = $DeuteriumTheorical;
            }
            else
            {
                $CurrentPlanet['deuterium']  = $MaxDeuteriumStorage;
            }
        }
        if( $CurrentPlanet['metal'] < 0 )
        {
            $CurrentPlanet['metal']  = 0;
        }
        if( $CurrentPlanet['crystal'] < 0 )
        {
            $CurrentPlanet['crystal']  = 0;
        }
        if( $CurrentPlanet['deuterium'] < 0 )
        {
            $CurrentPlanet['deuterium']  = 0;
        }
        if ($Simul == false)
        {
            $Builded          = HandleElementBuildingQueue ( $CurrentUser, $CurrentPlanet, $ProductionTime );
            $QryUpdatePlanet  = "UPDATE {{table}} SET ";
            $QryUpdatePlanet .= "`metal` = '"            . $CurrentPlanet['metal']             ."', ";
            $QryUpdatePlanet .= "`crystal` = '"          . $CurrentPlanet['crystal']           ."', ";
            $QryUpdatePlanet .= "`deuterium` = '"        . $CurrentPlanet['deuterium']         ."', ";
            $QryUpdatePlanet .= "`last_update` = '"      . $CurrentPlanet['last_update']       ."', ";
            $QryUpdatePlanet .= "`b_hangar_id` = '"      . $CurrentPlanet['b_hangar_id']       ."', ";
            $QryUpdatePlanet .= "`metal_perhour` = '"    . $CurrentPlanet['metal_perhour']     ."', ";
            $QryUpdatePlanet .= "`crystal_perhour` = '"  . $CurrentPlanet['crystal_perhour']   ."', ";
            $QryUpdatePlanet .= "`deuterium_perhour` = '". $CurrentPlanet['deuterium_perhour'] ."', ";
            $QryUpdatePlanet .= "`energy_used` = '"      . $CurrentPlanet['energy_used']       ."', ";
            $QryUpdatePlanet .= "`energy_max` = '"       . $CurrentPlanet['energy_max']        ."', ";
            if ( $Builded != '' )
            {
                foreach ( $Builded as $Element => $Count )
                {
                    if ($Element <> '')
                        $QryUpdatePlanet .= "`". $resource[$Element] ."` = '". $CurrentPlanet[$resource[$Element]] ."', ";
                }
            }
            $QryUpdatePlanet .= "`b_hangar` = '". $CurrentPlanet['b_hangar'] ."' ";
            $QryUpdatePlanet .= "WHERE ";
            $QryUpdatePlanet .= "`id` = '". $CurrentPlanet['id'] ."';";
            doquery($QryUpdatePlanet, 'planets');
        }
    }
?>