Ejemplo n.º 1
0
/**
 * PlanetResourceUpdate.php
 *
 * @version 2.0
 * @copyright 2009 By MadnessRed for XNova Redesigned
 */
function PlanetResourceUpdate($CurrentUser, &$CurrentPlanet)
{
    global $resources, $resource;
    //We need to know the production rates
    $Caps = ProductionRates($CurrentUser, $CurrentPlanet);
    //How long since last update?
    $time = time();
    $production = $time - $CurrentPlanet['last_update'];
    //Some how many resources where mined in that time?
    foreach ($resources as $res) {
        //How much should we expect to produce?
        $produce = $Caps[$res . '_perhour'] / 3600 * $production;
        //Do we go over limit?
        if ($CurrentPlanet[$res] > $Caps[$res . '_max']) {
            //We started over the limit - so base production only
            $CurrentPlanet[$res] += $game_config[$res . '_basic_income'] * $production;
        } elseif ($CurrentPlanet[$res] + $produce > $Caps[$res . '_max']) {
            //We have exceded storage limit - resources were produced up to that limit normall, then base production only
            $space = $Caps[$res . '_max'] - $CurrentPlanet[$res];
            //What percentage of that time was at base income?
            $pc_base = 1 - $space / $produce;
            //So we got to full...
            $CurrentPlanet[$res] = $Caps[$res . '_max'];
            //Then carried on at base comsumption for $pc_base% of the time
            $CurrentPlanet[$res] += $game_config[$res . '_basic_income'] * $production * $pc_base;
        } else {
            //We have not exceded storage limit - add the total produce
            $CurrentPlanet[$res] += $produce;
        }
    }
    //See what was built
    $built = HandleElementBuildingQueue($CurrentUser, $CurrentPlanet, $production);
    //Now update the planet
    $qry = "UPDATE {{table}} SET";
    foreach ($resources as $res) {
        $qry .= "`" . $res . "` = '" . $CurrentPlanet[$res] . "', ";
        $qry .= "`" . $res . "_perhour` = '" . $Caps[$res . '_perhour'] . "', ";
        $CurrentPlanet[$res . '_perhour'] = $Caps[$res . '_perhour'];
        $qry .= "`" . $res . "_max` = '" . $Caps[$res . '_max'] . "', ";
        $CurrentPlanet[$res . '_max'] = $Caps[$res . '_max'];
    }
    $qry .= "`energy_used` = '" . $Caps['energy_used'] . "', ";
    $CurrentPlanet['energy_used'] = $Caps['energy_used'];
    $qry .= "`energy_max` = '" . $Caps['energy_max'] . "', ";
    $CurrentPlanet['energy_max'] = $Caps['energy_max'];
    $qry .= "`last_update` = '" . $time . "', ";
    foreach ($built as $element => $count) {
        if ($element > 0) {
            $qry .= "`" . $resource[$element] . "` = `" . $resource[$element] . "` + '" . $count . "', ";
        }
    }
    $qry .= "`b_hangar` = '" . $CurrentPlanet['b_hangar'] . "', ";
    $qry .= "`b_hangar_id` = '" . $CurrentPlanet['b_hangar_id'] . "' ";
    $qry .= "WHERE `id` = '" . $CurrentPlanet['id'] . "' LIMIT 1 ;";
    doquery("LOCK TABLE {{table}} WRITE", 'planets');
    doquery($qry, 'planets');
    doquery("UNLOCK TABLES", '');
}
Ejemplo n.º 2
0
/**
 * PlanetResourceUpdate.php
 *
 * @version 1.1
 * @copyright 2008 By Chlorel for XNova
 * Edit and fixed 2009 by Mori for Xnova 
 */
function PlanetResourceUpdate($CurrentUser, &$CurrentPlanet, $UpdateTime, $Simul = false)
{
    global $ProdGrid, $resource, $reslist, $game_config;
    $atom_energy = 0;
    // 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'] += eval($ProdGrid[$ProdID]['formule']['metal']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05);
            $Caps['crystal_perhour'] += eval($ProdGrid[$ProdID]['formule']['crystal']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05);
            $deutval = eval($ProdGrid[$ProdID]['formule']['deuterium']) * $game_config['resource_multiplier'];
            if ($deutval < 0) {
                $Caps['deuterium_used'] += $deutval;
            } else {
                $Caps['deuterium_perhour'] += $deutval * (1 + $CurrentUser['rpg_geologue'] * 0.05);
            }
            $Energy = eval($ProdGrid[$ProdID]['formule']['energy']);
            if ($ProdID < 4) {
                $Caps['energy_used'] += $Energy;
            } elseif ($ProdID >= 4) {
                $Caps['energy_max'] += $Energy * (1 + ($CurrentUser['rpg_ingenieur'] * 0.05 + $CurrentUser['energy_tech'] * 0.01));
            }
            if ($ProdID == 12) {
                $atom_energy = $Energy * (1 + ($CurrentUser['rpg_ingenieur'] * 0.05 + $CurrentUser['energy_tech'] * 0.01));
            }
        }
    }
    // 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;
        $CurrentPlanet['deuterium_used'] = 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'];
        $CurrentPlanet['deuterium_used'] = $Caps['deuterium_used'];
    }
    // 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 = 0;
    } elseif ($CurrentPlanet["energy_max"] >= abs($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 = $CurrentPlanet['energy_max'] / abs($CurrentPlanet['energy_used']) * 100;
    }
    // Mise a l'echele des valeurs
    if ($production_level > 100) {
        $production_level = 100;
    } elseif ($production_level < 0) {
        $production_level = 0;
    }
    // checks fusion work or goes offline
    // script writen by Mori for Xnova 2009
    if ($CurrentPlanet['deuterium_used'] < 0) {
        $DeuteriumProduction = $ProductionTime * ($CurrentPlanet['deuterium_perhour'] / 3600) * (0.01 * $production_level);
        $DeuteriumBaseProduc = $ProductionTime * ($game_config['deuterium_basic_income'] / 3600) * $game_config['resource_multiplier'];
        $DeuteriumUsedAtom = $ProductionTime * ($CurrentPlanet['deuterium_used'] / 3600);
        $DeuteriumTheorical = $CurrentPlanet['deuterium'] + $DeuteriumProduction + $DeuteriumBaseProduc + $DeuteriumUsedAtom;
        // calculate fusion-worktime to off time and resource production
        if ($DeuteriumTheorical < 0) {
            $DeuteriumTheorical = 0;
            $dh = $CurrentPlanet['deuterium'];
            $dps = $CurrentPlanet['deuterium_perhour'] * (0.01 * $production_level) / 3600;
            $dups = abs($CurrentPlanet['deuterium_used']) / 3600;
            $gtime = floor(($dh - $dps) / ($dups - $dps));
            $CurrentPlanet['fusion_plant_porcent'] = 0;
            $EngineOff = true;
            $at_DeutProd = $gtime * ($CurrentPlanet['deuterium_perhour'] / 3600) * (0.01 * $production_level);
            $at_DeutBaseProd = $gtime * ($game_config['deuterium_basic_income'] / 3600) * $game_config['resource_multiplier'];
            $DeutUsedAtom = $gtime * ($CurrentPlanet['deuterium_used'] / 3600);
            $at_DeutProd += $at_DeutBaseProd + $DeutUsedAtom;
            $at_MetalProd = $gtime * ($CurrentPlanet['metal_perhour'] / 3600) * (0.01 * $production_level);
            $at_MetalBaseProd = $gtime * ($game_config['metal_basic_income'] / 3600) * $game_config['resource_multiplier'];
            $at_MetalProd += $at_MetalBaseProd;
            $at_CrystalProd = $gtime * ($CurrentPlanet['crystal_perhour'] / 3600) * (0.01 * $production_level);
            $at_CrystalBaseProd = $gtime * ($game_config['crystal_basic_income'] / 3600) * $game_config['resource_multiplier'];
            $at_CrystalProd += $at_CrystalBaseProd;
            $ProductionTime -= $gtime;
            $CurrentPlanet['deuterium_used'] = 0;
            // new production level
            $CurrentPlanet['energy_max'] -= $atom_energy;
            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 = 0;
            } elseif ($CurrentPlanet["energy_max"] >= abs($CurrentPlanet["energy_used"])) {
                $production_level = 100;
            } else {
                $production_level = $CurrentPlanet['energy_max'] / abs($CurrentPlanet['energy_used']) * 100;
            }
            if ($production_level > 100) {
                $production_level = 100;
            } elseif ($production_level < 0) {
                $production_level = 0;
            }
        }
    }
    // fusionscript end
    if ($CurrentPlanet['metal'] <= $MaxMetalStorage) {
        $MetalProduction = $ProductionTime * ($CurrentPlanet['metal_perhour'] / 3600) * (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 + $at_MetalProd;
        } 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) * $game_config['resource_multiplier'];
        $CristalTheorical = $CurrentPlanet['crystal'] + $CristalProduction + $CristalBaseProduc;
        if ($CristalTheorical <= $MaxCristalStorage) {
            $CurrentPlanet['crystal'] = $CristalTheorical + $at_CrystalProd;
        } 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) * $game_config['resource_multiplier'];
        $DeuteriumUsedAtom = $ProductionTime * ($CurrentPlanet['deuterium_used'] / 3600);
        $DeuteriumTheorical = $CurrentPlanet['deuterium'] + $DeuteriumProduction + $DeuteriumBaseProduc + $DeuteriumUsedAtom;
        if ($DeuteriumTheorical <= $MaxDeuteriumStorage) {
            $CurrentPlanet['deuterium'] = $DeuteriumTheorical + $at_DeutProd;
        } else {
            $CurrentPlanet['deuterium'] = $MaxDeuteriumStorage;
        }
    }
    if ($Simul == false) {
        // Gestion de l'eventuelle queue de fabrication d'elements
        $Builded = HandleElementBuildingQueue($CurrentUser, $CurrentPlanet, $ProductionTime);
        // On enregistre la planete !
        $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'] . "', ";
        $QryUpdatePlanet .= "`deuterium_used` = '" . $CurrentPlanet['deuterium_used'] . "', ";
        if ($EngineOff == true) {
            $QryUpdatePlanet .= "`fusion_plant_porcent` = '" . $CurrentPlanet['fusion_plant_porcent'] . "', ";
            $EngineOff = false;
        }
        // Par hasard des elements etaient finis ....
        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("LOCK TABLE {{table}} WRITE", 'planets');
        doquery($QryUpdatePlanet, 'planets');
        doquery("UNLOCK TABLES", '');
    }
    if ($Simul == true) {
        echo '
		Current User-ID: 		' . $CurrentUser['id'] . '<br>
		Current User-Name:		' . $CurrentUser['username'] . '<br>
		======================================================================<br>
		Metall:           ' . intval($CurrentPlanet['metal']) . '<br>
		Kristall: 				' . intval($CurrentPlanet['crystal']) . '<br>         
		Deuterium: 				' . intval($CurrentPlanet['deuterium']) . '<br>        
		Last_Update: 			' . intval($CurrentPlanet['last_update']) . '<br>       
		B_Hangar_ID: 			' . intval($CurrentPlanet['b_hangar_id']) . '<br>       
		Metall theo pro Stunde: 		' . intval($CurrentPlanet['metal_perhour']) . '<br>     
		Kristall theo pro Stunde: 	' . intval($CurrentPlanet['crystal_perhour']) . '<br>   
		Deuterium theo pro Stunde: 	' . intval($CurrentPlanet['deuterium_perhour']) . '<br>
    Metall pro Stunde           ' . $CurrentPlanet['metal_perhour'] * (0.01 * $production_level) . '<br>
    Kristall pro Stunde         ' . $CurrentPlanet['crystal_perhour'] * (0.01 * $production_level) . '<br>
    Deuterium pro Stunde        ' . ($CurrentPlanet['deuterium_perhour'] * (0.01 * $production_level) + $CurrentPlanet['deuterium_used']) . '<br>
    Energy Max                  ' . $CurrentPlanet['energy_max'] . '<br>
    Energy used                 ' . $CurrentPlanet['energy_used'] . '<br>
    Energy percent              ' . 0.01 * $production_level * 100 . '<br>
    Energy used                 ' . $CurrentPlanet['energy_used'] . '<br>
    Deuterium used              ' . $CurrentPlanet['deuterium_used'] . '<br>
    Deuterium used time now up  ' . $DeuteriumUsedAtom . '<br>
    Fusion percent =            ' . $CurrentPlanet['fusion_plant_porcent'] . '<br>
    Energie: 			   ' . intval($CurrentPlanet['energy_used'] + $CurrentPlanet['energy_max']) . '/' . intval($CurrentPlanet['energy_max']) . '<br>
		<br><br><br><br>';
    }
}
Ejemplo n.º 3
0
/**
 * PlanetResourceUpdate.php
 *
 * @version 1.1
 * @copyright 2008 By Chlorel for XNova
 */
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.05));
            $Caps['crystal_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['crystal']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
            $Caps['deuterium_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['deuterium']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
            if ($ProdID < 4) {
                $Caps['energy_used'] += floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_ingenieur'] * 0.05));
            } elseif ($ProdID >= 4) {
                $Caps['energy_max'] += floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_ingenieur'] * 0.05));
            }
        }
    }
    // 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) {
        // Gestion de l'eventuelle queue de fabrication d'elements
        $Builded = HandleElementBuildingQueue($CurrentUser, $CurrentPlanet, $ProductionTime);
        // On enregistre la planete !
        $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'] . "', ";
        // Par hasard des elements etaient finis ....
        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("LOCK TABLE {{table}} WRITE", 'planets');
        doquery($QryUpdatePlanet, 'planets');
        doquery("UNLOCK TABLES", '');
    }
}
Ejemplo n.º 4
0
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);
    // Gouvernement Aristocratique
    // +30% (Augmentation de la capacité de stokage)
    if ($user['staatsform'] == 6 && $user['rpg_stockeur '] >= 0) {
        $Caps['metal_max'] *= 1.3;
        $Caps['crystal_max'] *= 1.3;
        $Caps['deuterium_max'] *= 1.3;
    }
    $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));
            // Gouvernement Impérialiste
            // +3% (Augmentation de la production de mines)
            if ($user['staatsform'] == 5 && $user['rpg_empereur'] >= 0 && $ProdID >= 1 && $ProdID <= 3) {
                $Caps['metal_perhour'] *= 1.03;
                $Caps['crystal_perhour'] *= 1.03;
                $Caps['deuterium_perhour'] *= 1.03;
            }
            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');
    }
}
Ejemplo n.º 5
0
function PlanetResourceUpdate($CurrentUser, &$CurrentPlanet, $UpdateTime, $Simul = false)
{
    global $ProdGrid, $resource, $reslist, $db;
    $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);
    $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;
    }
    foreach ($reslist['prod'] as $ProdID) {
        $BuildLevelFactor = $CurrentPlanet[$resource[$ProdID] . "_porcent"];
        $BuildLevel = $CurrentPlanet[$resource[$ProdID]];
        $Caps['metal_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['metal']) * $db->game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
        $Caps['crystal_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['crystal']) * $db->game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
        $Caps['deuterium_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['deuterium']) * $db->game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
        if ($ProdID < 4) {
            $Caps['energy_used'] += floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $db->game_config['resource_multiplier']);
        } elseif ($ProdID >= 4) {
            $Caps['energy_max'] += floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $db->game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_ingenieur'] * 0.05));
        }
    }
    if ($CurrentPlanet['planet_type'] == 3) {
        $db->game_config['metal_basic_income'] = 0;
        $db->game_config['crystal_basic_income'] = 0;
        $db->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'] = $db->game_config['metal_basic_income'];
        $CurrentPlanet['crystal_perhour'] = $db->game_config['crystal_basic_income'];
        $CurrentPlanet['deuterium_perhour'] = $db->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) * $db->game_config['resource_multiplier'] * (0.01 * $production_level);
        $MetalBaseProduc = $ProductionTime * ($db->game_config['metal_basic_income'] / 3600) * $db->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) * $db->game_config['resource_multiplier'] * (0.01 * $production_level);
        $CristalBaseProduc = $ProductionTime * ($db->game_config['crystal_basic_income'] / 3600) * $db->game_config['resource_multiplier'];
        $CristalTheorical = $CurrentPlanet['crystal'] + $CristalProduction + $CristalBaseProduc;
        if ($CristalTheorical <= $MaxCristalStorage) {
            $CurrentPlanet['crystal'] = $CristalTheorical;
        } else {
            $CurrentPlanet['crystal'] = $MaxCristalStorage;
        }
    }
    if ($CurrentPlanet['deuterium'] <= $MaxDeuteriumStorage || $CurrentPlanet['deuterium_perhour'] < 0) {
        $DeuteriumProduction = $ProductionTime * ($CurrentPlanet['deuterium_perhour'] / 3600) * $db->game_config['resource_multiplier'] * (0.01 * $production_level);
        $DeuteriumBaseProduc = $ProductionTime * ($db->game_config['deuterium_basic_income'] / 3600) * $db->game_config['resource_multiplier'];
        $DeuteriumTheorical = $CurrentPlanet['deuterium'] + $DeuteriumProduction + $DeuteriumBaseProduc;
        if ($DeuteriumTheorical <= $MaxDeuteriumStorage || $CurrentPlanet['deuterium_perhour'] < 0) {
            $CurrentPlanet['deuterium'] = $DeuteriumTheorical;
        } else {
            $CurrentPlanet['deuterium'] = $MaxDeuteriumStorage;
        }
    }
    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]] . "', ";
                }
            }
        }
        if ($CurrentPlanet['fleet']) {
            foreach ($CurrentPlanet['fleet'] as $Element => $Count) {
                $QryUpdatePlanet .= "`" . $resource[$Element] . "` = '" . $CurrentPlanet[$resource[$Element]] . "', ";
            }
        }
        $QryUpdatePlanet .= "`b_hangar` = '" . $CurrentPlanet['b_hangar'] . "' ";
        $QryUpdatePlanet .= "WHERE ";
        $QryUpdatePlanet .= "`id` = '" . $CurrentPlanet['id'] . "';";
        $db->query($QryUpdatePlanet, 'planets');
    }
}
Ejemplo n.º 6
0
/**
 * 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-2010, 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.
 *
 */
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;
    $userInVacation = $CurrentUser['urlaubs_modus'] == 1 ? true : false;
    if ($CurrentPlanet['planet_type'] == 3 || $userInVacation == true) {
        $CurrentPlanet['metal_perhour'] = 0;
        $CurrentPlanet['crystal_perhour'] = 0;
        $CurrentPlanet['deuterium_perhour'] = 0;
        $CurrentPlanet['energy_used'] = 0;
        $CurrentPlanet['energy_max'] = 0;
    } else {
        $Caps = array('metal_perhour' => 0, 'crystal_perhour' => 0, 'deuterium_perhour' => 0, 'energy_used' => 0, 'energy_max' => 0);
        $BuildTemp = $CurrentPlanet['temp_max'];
        foreach ($reslist['prod'] as $ProdId) {
            $BuildLevelFactor = $CurrentPlanet[$resource[$ProdId] . '_porcent'];
            $BuildLevel = $CurrentPlanet[$resource[$ProdId]];
            $Caps['metal_perhour'] += floor(eval($ProdGrid[$ProdId][Legacies_Empire::RESOURCE_FORMULA][Legacies_Empire::RESOURCE_METAL]) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
            $Caps['crystal_perhour'] += floor(eval($ProdGrid[$ProdId][Legacies_Empire::RESOURCE_FORMULA][Legacies_Empire::RESOURCE_CRISTAL]) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
            $Caps['deuterium_perhour'] += floor(eval($ProdGrid[$ProdId][Legacies_Empire::RESOURCE_FORMULA][Legacies_Empire::RESOURCE_DEUTERIUM]) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.05));
            if ($ProdId < 4) {
                $Caps['energy_used'] += floor(eval($ProdGrid[$ProdId][Legacies_Empire::RESOURCE_FORMULA][Legacies_Empire::RESOURCE_ENERGY]) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_ingenieur'] * 0.05));
            } else {
                $Caps['energy_max'] += floor(eval($ProdGrid[$ProdId][Legacies_Empire::RESOURCE_FORMULA][Legacies_Empire::RESOURCE_ENERGY]) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_ingenieur'] * 0.05));
            }
        }
        $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) {
            // Si l'nergie = 0 : mode vacances ou pas de production
            $CurrentPlanet['metal_perhour'] = $game_config['metal_basic_income'];
            $CurrentPlanet['crystal_perhour'] = $game_config['crystal_basic_income'];
            $CurrentPlanet['deuterium_perhour'] = $game_config['deuterium_basic_income'];
            $CurrentPlanet['energy_used'] = 0;
            $production_level = 100;
        } elseif ($CurrentPlanet['energy_max'] >= abs($CurrentPlanet['energy_used'])) {
            $production_level = 100;
        } else {
            $production_level = floor($CurrentPlanet['energy_max'] / abs($CurrentPlanet['energy_used']) * 100);
        }
        $CurrentPlanet['porcent'] = $production_level;
        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) {
            // Ce n'est pas une simulation, on construit
            $Builded = HandleElementBuildingQueue($CurrentUser, $CurrentPlanet, $ProductionTime);
            $BuildsEnd = '';
            if ($Builded != '') {
                foreach ($Builded as $Element => $Count) {
                    if ($Element !== '') {
                        $BuildsEnd .= "`" . $resource[$Element] . "` = '" . $CurrentPlanet[$resource[$Element]] . "', ";
                    }
                }
            }
            $sql = <<<SQL
\t\t\t\tUPDATE {{table}}
\t\t\t\tSET
\t\t\t\t\t`metal` = '{$CurrentPlanet['metal']}',
\t\t\t\t\t`crystal` = '{$CurrentPlanet['crystal']}',
\t\t\t\t\t`deuterium` = '{$CurrentPlanet['deuterium']}',
\t\t\t\t\t`last_update` = '{$CurrentPlanet['last_update']}',
\t\t\t\t\t`b_hangar_id` = '{$CurrentPlanet['b_hangar_id']}',
\t\t\t\t\t`metal_perhour` = '{$CurrentPlanet['metal_perhour']}',
\t\t\t\t\t`crystal_perhour` = '{$CurrentPlanet['crystal_perhour']}',
\t\t\t\t\t`deuterium_perhour` = '{$CurrentPlanet['deuterium_perhour']}',
\t\t\t\t\t`energy_used` = '{$CurrentPlanet['energy_used']}',
\t\t\t\t\t`energy_max` = '{$CurrentPlanet['energy_max']}',
\t\t\t\t\t{$BuildsEnd}
\t\t\t\t\t`b_hangar` = '{$CurrentPlanet['b_hangar']}'
\t\t\t\tWHERE
\t\t\t\t\t`id` = '{$CurrentPlanet['id']}'
SQL;
            doquery($sql, 'planets');
        }
    }
    return $CurrentPlanet;
}
Ejemplo n.º 7
0
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);
    $CurrentPlanet['tachyon_max'] = floor(BASE_STORAGE_SIZE * pow(1.5, $CurrentPlanet[$resource[25]])) * (1 + $CurrentUser['tach_compress_tech'] * 0.1);
    $MaxMetalStorage = $CurrentPlanet['metal_max'] * MAX_OVERFLOW;
    $MaxCristalStorage = $CurrentPlanet['crystal_max'] * MAX_OVERFLOW;
    $MaxDeuteriumStorage = $CurrentPlanet['deuterium_max'] * MAX_OVERFLOW;
    $MaxTachyonStorage = $CurrentPlanet['tachyon_max'] * MAX_OVERFLOW;
    $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.1) * (1 + $CurrentUser['rpg_indy'] * 0.25));
            $Caps['crystal_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['crystal']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.1) * (1 + $CurrentUser['rpg_indy'] * 0.25));
            $Caps['deuterium_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['deuterium']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * 0.1) * (1 + $CurrentUser['rpg_indy'] * 0.25));
            $Caps['tachyon_perhour'] += floor(eval($ProdGrid[$ProdID]['formule']['tachyon']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['tach_extract_tech'] * 0.1));
            if ($ProdID < 5) {
                $Caps['energy_used'] += floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $game_config['resource_multiplier']);
            } elseif ($ProdID >= 5) {
                $Caps['energy_max'] += floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_ingenieur'] * 0.05) * (1 + $CurrentUser['rpg_acad'] * 0.25));
            }
        }
    }
    if ($CurrentPlanet['planet_type'] == 3) {
        $game_config['metal_basic_income'] = 0;
        $game_config['crystal_basic_income'] = 0;
        $game_config['deuterium_basic_income'] = 0;
        $game_config['tachyon_basic_income'] = 0;
        $CurrentPlanet['metal_perhour'] = 0;
        $CurrentPlanet['crystal_perhour'] = 0;
        $CurrentPlanet['deuterium_perhour'] = 0;
        $CurrentPlanet['tachyon_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['tachyon_perhour'] = $Caps['tachyon_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'];
        $CurrentPlanet['tachyon_perhour'] = $game_config['tachyon_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) * $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 ($CurrentPlanet['tachyon'] <= $MaxTachyonStorage) {
        $TachyonProduction = $ProductionTime * ($CurrentPlanet['tachyon_perhour'] / 3600) * $game_config['resource_multiplier'] * (0.01 * $production_level);
        $TachyonBaseProduc = $ProductionTime * ($game_config['tachyon_basic_income'] / 3600) * $game_config['resource_multiplier'];
        $TachyonTheorical = $CurrentPlanet['tachyon'] + $TachyonProduction + $TachyonBaseProduc;
        if ($TachyonTheorical <= $MaxTachyonStorage) {
            $CurrentPlanet['tachyon'] = $TachyonTheorical;
        } else {
            $CurrentPlanet['tachyon'] = $MaxTachyonStorage;
        }
    }
    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 .= "`tachyon` = '" . $CurrentPlanet['tachyon'] . "', ";
        $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 .= "`tachyon_perhour` = '" . $CurrentPlanet['tachyon_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("LOCK TABLE {{table}} WRITE", 'planets');
        doquery($QryUpdatePlanet, 'planets');
        doquery("UNLOCK TABLES", '');
    }
}