function HandleTechnologieBuild(&$CurrentPlanet, &$CurrentUser) { global $resource; if ($CurrentUser['b_tech_planet'] != 0) { // Y a une technologie en cours sur une de mes colonies if ($CurrentUser['b_tech_planet'] != $CurrentPlanet['id']) { // Et ce n'est pas sur celle ci !! $WorkingPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $CurrentUser['b_tech_planet'] . "';", 'planets', true); } if ($WorkingPlanet) { $ThePlanet = $WorkingPlanet; } else { $ThePlanet = $CurrentPlanet; } if ($ThePlanet['b_tech'] <= time() && $ThePlanet['b_tech_id'] != 0) { // La recherche en cours est terminée ... $CurrentUser[$resource[$ThePlanet['b_tech_id']]]++; // Mise a jour de la planete sur laquelle la technologie a été recherchée $QryUpdatePlanet = "UPDATE {{table}} SET "; $QryUpdatePlanet .= "`b_tech` = '0', "; $QryUpdatePlanet .= "`b_tech_id` = '0' "; $QryUpdatePlanet .= "WHERE "; $QryUpdatePlanet .= "`id` = '" . $ThePlanet['id'] . "';"; doquery($QryUpdatePlanet, 'planets'); // Mes a jour de la techno sur l'enregistrement Utilisateur // Et tant qu'a faire des stats points $QryUpdateUser = "******"; $QryUpdateUser .= "`" . $resource[$ThePlanet['b_tech_id']] . "` = '" . $CurrentUser[$resource[$ThePlanet['b_tech_id']]] . "', "; $QryUpdateUser .= "`b_tech_planet` = '0' "; $QryUpdateUser .= "WHERE "; $QryUpdateUser .= "`id` = '" . $CurrentUser['id'] . "';"; doquery($QryUpdateUser, 'users'); $costs = GetBuildingPrice($CurrentUser, $ThePlanet, $ThePlanet['b_tech_id']); AddPoints($costs['metal'] + $costs['crystal'] + $costs['deuterium'], true, $CurrentUser['id']); //MadnessRed - Update stats $ThePlanet["b_tech_id"] = 0; if (isset($WorkingPlanet)) { $WorkingPlanet = $ThePlanet; } else { $CurrentPlanet = $ThePlanet; } $Result['WorkOn'] = ""; $Result['OnWork'] = false; } elseif ($ThePlanet["b_tech_id"] == 0) { // Il n'y a rien a l'ouest ... // Pas de Technologie en cours devait y avoir un bug lors de la derniere connexion // On met l'enregistrement informant d'une techno en cours de recherche a jours doquery("UPDATE {{table}} SET `b_tech_planet` = '0' WHERE `id` = '" . $CurrentUser['id'] . "';", 'users'); $Result['WorkOn'] = ""; $Result['OnWork'] = false; } else { // Bin on bosse toujours ici ... Alors ne nous derangez pas !!! $Result['WorkOn'] = $ThePlanet; $Result['OnWork'] = true; } } else { $Result['WorkOn'] = ""; $Result['OnWork'] = false; } return $Result; }
function CheckPlanetBuildingQueue(&$CurrentPlanet, &$CurrentUser) { global $lang, $resource; // Table des batiments donnant droit de l'experience minier $XPBuildings = array(1, 2, 3, 22, 23, 24); $RetValue = false; if ($CurrentPlanet['b_building_id'] != 0) { $CurrentQueue = $CurrentPlanet['b_building_id']; if ($CurrentQueue != 0) { $QueueArray = explode(";", $CurrentQueue); $ActualCount = count($QueueArray); } $BuildArray = explode(",", $QueueArray[0]); $BuildEndTime = floor($BuildArray[3]); $BuildMode = $BuildArray[4]; $Element = $BuildArray[0]; array_shift($QueueArray); if ($BuildMode == 'destroy') { $ForDestroy = true; } else { $ForDestroy = false; } if ($BuildEndTime <= time()) { // Mise a jours des points $Needed = GetBuildingPrice($CurrentUser, $CurrentPlanet, $Element, true, $ForDestroy); $Units = $Needed['metal'] + $Needed['crystal'] + $Needed['deuterium']; if ($ForDestroy == false) { // Mise a jours de l'XP Minier if (in_array($Element, $XPBuildings)) { $AjoutXP = $Units / 1000; $CurrentUser['xpminier'] += $AjoutXP; AddPoints($Units, true); //MadnessRed - Update stats } } else { // Mise a jours de l'XP Minier if (in_array($Element, $XPBuildings)) { $AjoutXP = $Units * 3 / 1000; $CurrentUser['xpminier'] -= $AjoutXP; AddPoints(0 - $Units, true); //MadnessRed - Update stats } } $current = intval($CurrentPlanet['field_current']); $max = intval($CurrentPlanet['field_max']); // Pour une lune if ($CurrentPlanet['planet_type'] == 3) { if ($Element == 41) { // Base Lunaire $current += 1; $max += FIELDS_BY_MOONBASIS_LEVEL; $CurrentPlanet[$resource[$Element]]++; } elseif ($Element != 0) { if ($ForDestroy == false) { $current += 1; $CurrentPlanet[$resource[$Element]]++; } else { $current -= 1; $CurrentPlanet[$resource[$Element]]--; } } } elseif ($CurrentPlanet['planet_type'] == 1) { if ($ForDestroy == false) { $current += 1; $CurrentPlanet[$resource[$Element]]++; } else { $current -= 1; $CurrentPlanet[$resource[$Element]]--; } } if (count($QueueArray) == 0) { $NewQueue = 0; } else { $NewQueue = implode(";", $QueueArray); } $CurrentPlanet['b_building'] = 0; $CurrentPlanet['b_building_id'] = $NewQueue; $CurrentPlanet['field_current'] = $current; $CurrentPlanet['field_max'] = $max; $QryUpdatePlanet = "UPDATE {{table}} SET "; $QryUpdatePlanet .= "`" . $resource[$Element] . "` = '" . $CurrentPlanet[$resource[$Element]] . "', "; // Mise a 0 de l'heure de fin de construction ... // Ca va activer la mise en place du batiment suivant de la queue $QryUpdatePlanet .= "`b_building` = '" . $CurrentPlanet['b_building'] . "' , "; $QryUpdatePlanet .= "`b_building_id` = '" . $CurrentPlanet['b_building_id'] . "' , "; $QryUpdatePlanet .= "`field_current` = '" . $CurrentPlanet['field_current'] . "', "; $QryUpdatePlanet .= "`field_max` = '" . $CurrentPlanet['field_max'] . "' "; $QryUpdatePlanet .= "WHERE "; $QryUpdatePlanet .= "`id` = '" . $CurrentPlanet['id'] . "';"; doquery($QryUpdatePlanet, 'planets'); $QryUpdateUser = "******"; $QryUpdateUser .= "`xpminier` = '" . $CurrentUser['xpminier'] . "' "; $QryUpdateUser .= "WHERE "; $QryUpdateUser .= "`id` = '" . $CurrentUser['id'] . "';"; doquery($QryUpdateUser, 'users'); $RetValue = true; } else { $RetValue = false; } } else { $CurrentPlanet['b_building'] = 0; $CurrentPlanet['b_building_id'] = 0; $QryUpdatePlanet = "UPDATE {{table}} SET "; $QryUpdatePlanet .= "`b_building` = '" . $CurrentPlanet['b_building'] . "' , "; $QryUpdatePlanet .= "`b_building_id` = '" . $CurrentPlanet['b_building_id'] . "' "; $QryUpdatePlanet .= "WHERE "; $QryUpdatePlanet .= "`id` = '" . $CurrentPlanet['id'] . "';"; doquery($QryUpdatePlanet, 'planets'); $RetValue = false; } return $RetValue; }
/** * HandleElementBuildingQueue.php * * @version 2 * @copyright 2009 By MadnessRed for XNova Redesigned */ function HandleElementBuildingQueue($CurrentUser, &$CurrentPlanet) { global $resource; //Right, lets make a new shipyard queue management. //So some stuff in shipyard? //echo $CurrentPlanet['b_hangar_id']; //Lets stop it complaining, we should define $cost as an array here $cost = array(); if (strlen($CurrentPlanet['b_hangar_id']) > 0) { //Whats be built, so far nothing, $built = array(); $cost = 0; //Lets explode the queue into an array $queue = explode(';', $CurrentPlanet['b_hangar_id']); //Son't stop yet, we haven't started $stop = false; //Make an array $built = array(); //Clear the queue to add to it later. $CurrentPlanet['b_hangar_id'] = ''; //When was hanger last updated? $ProductionTime = $CurrentPlanet['b_hangar_lastupdate']; //Check a time was set if ($ProductionTime == 0) { $ProductionTime = time(); } //So how long since the update? $ProductionTime = time() - $ProductionTime; //echo "Last update: ".$CurrentPlanet['b_hangar_lastupdate']."<br />Time since then: ".$ProductionTime."<br />"; //Incase any script tries to check again before we get to write to database $CurrentPlanet['b_hangar_lastupdate'] = time(); //Add left overs from last attempt $ProductionTime += $CurrentPlanet['b_hangar']; //echo "Leftover time: ".$CurrentPlanet['b_hangar']."<br />"; //now, keeping the queue in that order. foreach ($queue as $todo) { //If its a blank entry, move on. if ($todo == '') { continue; } //Should we stop? if (!$stop) { //Explodew the queue $q = explode(',', $todo); //Add the build time to the temp array $q[2] = GetBuildingTime($CurrentUser, $CurrentPlanet, $q[0]); //echo "Build time: ".$q[2].'<br />Ammount: '.$q[1].'<br />Time to build in: '.$ProductionTime; //Now is there time to build all of these? if ($q[2] * $q[1] <= $ProductionTime) { $ProductionTime -= $q[2] * $q[1]; $built[$q[0]] += $q[1]; $CurrentPlanet[$resource[$q[0]]] += $q[1]; //$ncost = GetBuildingPrice(array(),$CurrentPlanet,$q[0],false,false,true); $ncost = GetBuildingPrice(array(), $CurrentPlanet, $q[0], false); if (!is_array($ncost)) { trigger_error("\$ncost returned from GetBuildingPrice was not the expected array. The following was returned.<br />" . nl2br(print_r($ncost, true)) . "<br />The arguments were:<br />GetBuildingPrice(array()," . $CurrentPlanet . "," . $q[0] . ",false,false,true);"); } //foreach($ncost as $key => $val){ $cost[$key] += ($val * $q[1]); } foreach ($ncost as $val) { $cost += $val * $q[1]; } } elseif ($q[2] <= $ProductionTime) { $canbuild = floor($ProductionTime / $q[2]); $ProductionTime -= $q[2] * $canbuild; $built[$q[0]] += $canbuild; $CurrentPlanet[$resource[$q[0]]] += $canbuild; //$ncost = GetBuildingPrice(array(),$CurrentPlanet,$q[0],false,false,true); $ncost = GetBuildingPrice(array(), $CurrentPlanet, $q[0], false); if (!is_array($ncost)) { trigger_error("\$ncost returned from GetBuildingPrice was not the expected array. The following was returned.<br />" . nl2br(print_r($ncost, true)) . "<br />The arguments were:<br />GetBuildingPrice(array()," . $CurrentPlanet . "," . $q[0] . ",false,false,true);"); } //foreach($ncost as $key => $val){ $cost[$key] += ($val * $canbuild); } foreach ($ncost as $val) { $cost += $val * $canbuild; } //And lets upt the rest back into the queue $CurrentPlanet['b_hangar_id'] .= $q[0] . "," . ($q[1] - $canbuild) . ";"; //And stop doing stuff. $stop = true; } else { $CurrentPlanet['b_hangar_id'] .= $todo . ";"; $stop = true; } } else { $CurrentPlanet['b_hangar_id'] .= $todo . ";"; } } //And how much time is left over? $CurrentPlanet['b_hangar'] = $ProductionTime; //Add what he build to the stats AddPoints($cost, false, $CurrentUser['id']); } else { $built = array(); $CurrentPlanet['b_hangar'] = 0; } //Update the database: if anything was built if (sizeof($built) > 0) { $qry = "UPDATE {{table}} SET "; foreach ($built as $i => $c) { $qry .= "`" . $resource[$i] . "` = '" . $CurrentPlanet[$resource[$i]] . "', "; } $qry .= "`b_hangar` = '" . $CurrentPlanet['b_hangar'] . "', "; $qry .= "`b_hangar_id` = '" . $CurrentPlanet['b_hangar_id'] . "', "; $qry .= "`b_hangar_lastupdate` = '" . time() . "' "; $qry .= "WHERE `id` = '" . $CurrentPlanet['id'] . "' LIMIT 1 ;"; doquery($qry, 'planets'); } else { $qry = "UPDATE {{table}} SET "; $qry .= "`b_hangar` = '" . $CurrentPlanet['b_hangar'] . "', "; $qry .= "`b_hangar_id` = '" . $CurrentPlanet['b_hangar_id'] . "', "; $qry .= "`b_hangar_lastupdate` = '" . time() . "' "; $qry .= "WHERE `id` = '" . $CurrentPlanet['id'] . "' LIMIT 1 ;"; doquery($qry, 'planets'); } return $built; }