コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
/**
 * 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;
}