/** * 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", ''); }
/** * 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>'; } }
/** * 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", ''); } }
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'); } }
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'); } }
/** * 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; }
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", ''); } }