/**
 * 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 RemoveBuildingFromQueue(&$CurrentPlanet, $CurrentUser, $QueueID)
{
    if ($QueueID > 1) {
        $CurrentQueue = $CurrentPlanet['b_building_id'];
        if ($CurrentQueue != 0) {
            $QueueArray = explode(";", $CurrentQueue);
            $ActualCount = count($QueueArray);
            $ListIDArray = explode(",", $QueueArray[$QueueID - 2]);
            $BuildEndTime = $ListIDArray[3];
            $ListIDArray = explode(",", $QueueArray[$QueueID - 1]);
            $Element = $ListIDArray[0];
            for ($ID = $QueueID; $ID < $ActualCount; $ID++) {
                $ListIDArray = explode(",", $QueueArray[$ID]);
                if ($Element == $ListIDArray[0]) {
                    $ListIDArray[1] -= 1;
                    $ListIDArray[2] = GetBuildingTimeLevel($CurrentUser, $CurrentPlanet, $ListIDArray[0], $ListIDArray[1]);
                }
                $BuildEndTime += $ListIDArray[2];
                $ListIDArray[3] = $BuildEndTime;
                $QueueArray[$ID - 1] = implode(",", $ListIDArray);
            }
            unset($QueueArray[$ActualCount - 1]);
            $NewQueue = implode(";", $QueueArray);
        }
        $CurrentPlanet['b_building_id'] = $NewQueue;
    }
    return $QueueID;
}
/**
 * Cancel a building from the queue and give the resource to the player
 *
 * @param array $currentPlanet @see $planetrow
 * @param array $currentUser @see $user
 * @return bool True if the cancel the cancel is correct
 */
function CancelBuildingFromQueue(&$currentPlanet, &$currentUser)
{
    if ($currentPlanet['b_building_id'] == 0) {
        return false;
    }
    $currentQueue = explode(';', $currentPlanet['b_building_id']);
    $firstElement = explode(',', $currentQueue[0]);
    array_shift($currentQueue);
    $queueSize = count($currentQueue);
    $forDestroy = $firstElement[4] == 'destroy' ? true : false;
    $elementPrice = GetBuildingPrice($currentUser, $currentPlanet, $firstElement[0], true, $forDestroy);
    $currentPlanet['metal'] += $elementPrice['metal'];
    $currentPlanet['crystal'] += $elementPrice['crystal'];
    $currentPlanet['deuterium'] += $elementPrice['deuterium'];
    if ($queueSize > 0) {
        $buildEndTime = time();
        $newQueue = array();
        for ($i = 0; $i < $queueSize; $i++) {
            $elementArray = explode(',', $currentQueue[$i]);
            if ($firstElement[0] == $elementArray[0]) {
                $elementArray[1]--;
                $elementArray[2] = GetBuildingTimeLevel($currentUser, $currentPlanet, $elementArray[0], $elementArray[1]);
            }
            $buildEndTime += $elementArray[2];
            $elementArray[3] = $buildEndTime;
            $newQueue[$i] = implode(',', $elementArray);
        }
    }
    $currentPlanet['b_building_id'] = $queueSize > 0 ? implode(';', $newQueue) : 0;
    $currentPlanet['b_building'] = $queueSize > 0 ? $buildEndTime : 0;
    return true;
}
/**
 * Tis file is part of XNova:Legacies
 *
 * @license http://www.gnu.org/licenses/gpl-3.0.txt
 * @see http://www.xnova-ng.org/
 *
 * Copyright (c) 2009-Present, XNova Support Team <http://www.xnova-ng.org>
 * All rights reserved.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *                                --> NOTICE <--
 *  This file is part of the core development branch, changing its contents will
 * make you unable to use the automatic updates manager. Please refer to the
 * documentation for further information about customizing XNova.
 *
 */
function CancelBuildingFromQueue(&$CurrentPlanet, &$CurrentUser)
{
    $CurrentQueue = $CurrentPlanet['b_building_id'];
    if ($CurrentQueue != 0) {
        // Creation du tableau de la liste de construction
        $QueueArray = explode(";", $CurrentQueue);
        // Comptage du nombre d'elements dans la liste
        $ActualCount = count($QueueArray);
        // Stockage de l'element a 'interrompre'
        $CanceledIDArray = explode(",", $QueueArray[0]);
        $Element = $CanceledIDArray[0];
        $BuildMode = $CanceledIDArray[4];
        // pour savoir si on construit ou detruit
        $nb_item = $Element;
        if ($ActualCount > 1) {
            array_shift($QueueArray);
            $NewCount = count($QueueArray);
            // Mise a jour de l'heure de fin de construction theorique du batiment
            $BuildEndTime = time();
            for ($ID = 0; $ID < $NewCount; $ID++) {
                $ListIDArray = explode(",", $QueueArray[$ID]);
                // Pour diminuer le niveau et le temps de construction
                // si le bâtiment qui est annulé se trouve plusieurs fois dans la queue
                // Exemple de queue de construction :
                // Mine de métal (Niveau 40) | Silo de missile (Niveau 30) | Silo de missiles (Niveau 31) | Mine de métal (Niveau 41)
                // Si on supprime le premier bâtiment, on aura dans la queue de construction :
                // Silo de missile (Niveau 30) | Silo de missiles (Niveau 31) | Mine de métal (Niveau 40)
                if ($nb_item == $ListIDArray[0]) {
                    $ListIDArray[1] -= 1;
                    $ListIDArray[2] = GetBuildingTimeLevel($CurrentUser, $CurrentPlanet, $ListIDArray[0], $ListIDArray[1]);
                }
                $BuildEndTime += $ListIDArray[2];
                $ListIDArray[3] = $BuildEndTime;
                $QueueArray[$ID] = implode(",", $ListIDArray);
            }
            $NewQueue = implode(";", $QueueArray);
            $ReturnValue = true;
            $BuildEndTime = '0';
        } else {
            $NewQueue = '0';
            $ReturnValue = false;
            $BuildEndTime = '0';
        }
        // Ici on va rembourser les ressources engagées ...
        // Deja le mode (car quand on detruit ca ne coute que la moitié du prix de construction classique
        if ($BuildMode == 'destroy') {
            $ForDestroy = true;
        } else {
            $ForDestroy = false;
        }
        if ($Element != false) {
            $Needed = GetBuildingPrice($CurrentUser, $CurrentPlanet, $Element, true, $ForDestroy);
            $CurrentPlanet['metal'] += $Needed['metal'];
            $CurrentPlanet['crystal'] += $Needed['crystal'];
            $CurrentPlanet['deuterium'] += $Needed['deuterium'];
        }
    } else {
        $NewQueue = '0';
        $BuildEndTime = '0';
        $ReturnValue = false;
    }
    $CurrentPlanet['b_building_id'] = $NewQueue;
    $CurrentPlanet['b_building'] = $BuildEndTime;
    return $ReturnValue;
}