vue Bug de production
Kommunauty
Connexion
Inscription

Bug de production


Hunterkiller Messages : 6

Bonjour a tous,

J'ai encore un probleme vis a vis de la production des ressources.

Enfait j'ai faits trop de mines, et mon niveau d'energie utilisée et superieur au niveau d'energie maximum.

Quand je vais dans le menu montrant la production, on m'indique que ma production est bien censé etre negative, mais pourtant mon income n'a pas dutout changé par rapport a si mon energie max etait superieur.

Pourtant, si je coupes toutes l'energie dans la vue montrant la production , alors mon income redevient l'income de base ( sans prendre en compte la production des mines) que j'avais definit dans la configuration.

Je me suis dit que le probleme devait provenir de mon fichier PlanetResourceUpdate.php

Je vous montre le code ici:

<?php
/**
 * This file is part of XNova:Legacies
 *
 * @license http://www.gnu.org/licenses/gpl-3.0.txt
 * @see http://www.xnova-ng.org/
 *
 * Copyright (c) 2009-Present, XNova Support Team <http://www.xnova-ng.org>
 * All rights reserved.
 *
 * 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *                                --> NOTICE <--
 *  This file is part of the core development branch, changing its contents will
 * make you unable to use the automatic updates manager. Please refer to the
 * documentation for further information about customizing XNova.
 *
 */

require_once ROOT_PATH . 'includes/classes/Legacies/Empire/Shipyard.php';

function PlanetResourceUpdate ( $CurrentUser, &$CurrentPlanet, $UpdateTime, $Simul = false ) {
    global $ProdGrid, $resource, $reslist, $game_config;

    // Mise a jour de l'espace de stockage
    $CurrentPlanet['metal_max']     = (floor (BASE_STORAGE_SIZE * pow (1.5, $CurrentPlanet[ $resource[22] ] ))) * (1 + ($CurrentUser['rpg_stockeur'] * 0.5));
    $CurrentPlanet['crystal_max']   = (floor (BASE_STORAGE_SIZE * pow (1.5, $CurrentPlanet[ $resource[23] ] ))) * (1 + ($CurrentUser['rpg_stockeur'] * 0.5));
    $CurrentPlanet['deuterium_max'] = (floor (BASE_STORAGE_SIZE * pow (1.5, $CurrentPlanet[ $resource[24] ] ))) * (1 + ($CurrentUser['rpg_stockeur'] * 0.5));

    // Calcul de l'espace de stockage (avec les debordements possibles)
    $MaxMetalStorage                = $CurrentPlanet['metal_max']     * MAX_OVERFLOW;
    $MaxCristalStorage              = $CurrentPlanet['crystal_max']   * MAX_OVERFLOW;
    $MaxDeuteriumStorage            = $CurrentPlanet['deuterium_max'] * MAX_OVERFLOW;

    // Calcul de production lin�aire des divers types
    $Caps             = array();
    $BuildTemp        = $CurrentPlanet[ 'temp_max' ];

    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']     ) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_geologue']  * 0.01 ) ) );
            $Caps['crystal_perhour']   +=  floor( eval  ( $ProdGrid[$ProdID]['formule']['crystal']   ) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_geologue']  * 0.01 ) ) );
            $Caps['deuterium_perhour'] +=  floor( eval  ( $ProdGrid[$ProdID]['formule']['deuterium'] ) * ( $game_config['resource_multiplier'] ) );
            if ($ProdID < 4) {
                $Caps['energy_used']   +=  floor( eval  ( $ProdGrid[$ProdID]['formule']['energy']    ) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_ingenieur'] * 0.02 ) ) );
            } elseif ($ProdID >= 4 ) {
                $Caps['energy_max']    +=  floor( eval  ( $ProdGrid[$ProdID]['formule']['energy']    ) * ( $game_config['resource_multiplier'] ) * ( 1 + ( $CurrentUser['rpg_ingenieur'] * 0.02 ) ) );
            }
        }
    }

    // Il n'y a pas de production de base sur une lune (ni de production tout court d'ailleurs
    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'];
    }

    // Depuis quand n'avons nous pas les infos ressources a jours ?
    $ProductionTime               = ($UpdateTime - $CurrentPlanet['last_update']);
    $CurrentPlanet['last_update'] = $UpdateTime;

    if ($CurrentPlanet['energy_max'] == 0) {
        // Ah ha ... l'energie max est 0 ...
        // Soit pas de production d'energie ... Soit mode vacance
        $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"]) {
        // Cas normal (Y a assez d'energie toutes les mines tournent a plein rendement)
        $production_level            = 100;
    } else {
        // Cas ou il manque de l'energie ... On calcule un pourcentage de production
        $production_level            = floor(($CurrentPlanet['energy_max'] / $CurrentPlanet['energy_used']) * 100);
    }
    // Mise a l'echele des valeurs
    if       ($production_level > 100) {
        $production_level = 100;
    } elseif ($production_level <= 0) {
        $production_level = 0;
    }

    if ( $CurrentPlanet['metal'] <= $MaxMetalStorage ) {
        $MetalProduction = (($ProductionTime * ($CurrentPlanet['metal_perhour'] / 3600)) * $game_config['resource_multiplier']) * (0.01 * $production_level);
        $MetalBaseProduc = (($ProductionTime * ($game_config['metal_basic_income'] / 3600 )) * $game_config['resource_multiplier']);
        $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)) * $game_config['resource_multiplier']) * (0.01 * $production_level);
        $CristalBaseProduc = (($ProductionTime * ($game_config['crystal_basic_income'] / 3600 )) * $game_config['resource_multiplier']);
        $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)) * $game_config['resource_multiplier']) * (0.01 * $production_level);
        $DeuteriumBaseProduc = (($ProductionTime * ($game_config['deuterium_basic_income'] / 3600 )) * $game_config['resource_multiplier']);
        $DeuteriumTheorical  = $CurrentPlanet['deuterium'] + $DeuteriumProduction  +  $DeuteriumBaseProduc;
        if ( $DeuteriumTheorical <= $MaxDeuteriumStorage ) {
            $CurrentPlanet['deuterium']  = $DeuteriumTheorical;
        } else {
            $CurrentPlanet['deuterium']  = $MaxDeuteriumStorage;
        }
    }

    if ($Simul == false) {
        $shipyard = Legacies_Empire_Shipyard::factory($CurrentPlanet, $CurrentUser);
        $shipyard->updateQueue();
        $CurrentPlanet = $shipyard->save();
    }
        $sql =<<<SQL_EOF
UPDATE {{table}} SET
    `metal` = '{$CurrentPlanet['metal']}',
    `crystal` = '{$CurrentPlanet['crystal']}',
    `deuterium` = '{$CurrentPlanet['deuterium']}',
    `last_update` = '{$CurrentPlanet['last_update']}',
SQL_EOF;
        // Par hasard des elements etaient finis ....
        if (!empty($itemsBuilt)) {
            foreach ($itemsBuilt as $element => $count ) {
                $sql .= "`{$resource[$element]}` = '{$CurrentPlanet[$resource[$element]]}' + '{$count}', ";
            }
        }
        $sql .=<<<SQL_EOF
    `metal_perhour` = '{$CurrentPlanet['metal_perhour']}',
    `crystal_perhour` = '{$CurrentPlanet['crystal_perhour']}',
    `deuterium_perhour` = '{$CurrentPlanet['deuterium_perhour']}',
    `energy_used` = '{$CurrentPlanet['energy_used']}',
    `energy_max` = '{$CurrentPlanet['energy_max']}'
  WHERE`id` = {$CurrentPlanet['id']}
SQL_EOF;

        doquery("LOCK TABLE {{table}} WRITE", 'planets');
        doquery($sql, 'planets');
        doquery("UNLOCK TABLES", '');

}

J'espere que vous pourrez m'aider.

dimanche 23 octobre 2011 (Dernière édition dimanche 23 octobre 2011)

NoCrew Messages : 29

Si je résume bien le problème:

  • Ton énergie actuelle est trop élevée par rapport à l'énergie maximum que tu devrais avoir.
  • Normalement dans un cas ou tu utilises trop d'énergie, celle-ci devrait être négative et le rendement des différentes ressources devrait être diminué.
  • Tu ne sais pas ce qu'il cloche.

Hum... ca devrait être un if mal codé alors.

du genre "

if energieconsommée>energiemax

{

energie=energiemax-energieconsommée

metal=facteur de réduction*production, ...

EDIT: Je ne suis pas du tout doué dans ce langage, mais c'est possbiel que ce soit une erreur de "}"?

Si oui, voila ce que je crois être correct. Sinon ben... faut qu'je m'mette au php!

 else 
{
        // Cas ou il manque de l'energie ... On calcule un pourcentage de production
        $production_level            = floor(($CurrentPlanet['energy_max'] / $CurrentPlanet['energy_used']) * 100);
    // Mise a l'echele des valeurs
    if       ($production_level > 100)
{
        $production_level = 100;
    } elseif ($production_level <= 0)
{
        $production_level = 0;
    }

   }
vendredi 25 novembre 2011 (Dernière édition vendredi 25 novembre 2011)

Répondre Pour répondre, tu dois d'abord t'inscrire rapidement sur Kommunauty. Rejoins-nous vite !