Example #1
0
function MakeStats()
{
    global $resource, $pricelist, $reslist, $game_config, $xgp_root, $phpEx;
    $CheckUserQuery = false;
    $CheckAllyQuery = false;
    // Initial Time
    $mtime = microtime();
    $mtime = explode(" ", $mtime);
    $mtime = $mtime[1] + $mtime[0];
    $starttime = $mtime;
    //Initial Memory
    $result['initial_memory'] = array(round(memory_get_usage() / 1024, 1), round(memory_get_usage(1) / 1024, 1));
    //Change the last stats time
    $stats_time = time();
    //Delete old messages
    $del_before = time() - 24 * 60 * 60;
    // 1 DAY
    $del_inactive = time() - 60 * 60 * 24 * 30;
    // 1 MONTH
    $del_deleted = time() - 60 * 60 * 24 * 7;
    // 1 WEEK
    $ChooseToDelete = doquery("SELECT `id` FROM `{{table}}` WHERE (`db_deaktjava` < '" . $del_deleted . "' AND `db_deaktjava` <> 0) OR `onlinetime` < '" . $del_inactive . "'", 'users');
    if ($ChooseToDelete) {
        include_once $xgp_root . 'includes/functions/DeleteSelectedUser.' . $phpEx;
        while ($delete = mysql_fetch_array($ChooseToDelete)) {
            DeleteSelectedUser($delete[id]);
        }
    }
    doquery("DELETE FROM {{table}} WHERE `message_time` < '" . $del_before . "' ;", 'messages');
    doquery("DELETE FROM {{table}} WHERE `time` < '" . $del_before . "' ;", 'rw');
    //STATS FOR USERS....
    //Here we make the select query, with this all the custom stuff with be included
    $select_defenses = '';
    foreach ($reslist['defense'] as $n => $Defense) {
        if ($resource[$Defense] != 'small_protection_shield' && $resource[$Defense] != 'big_protection_shield') {
            $select_defenses .= " SUM(p." . $resource[$Defense] . ") AS " . $resource[$Defense] . ",";
        }
    }
    $select_buildings = '';
    foreach ($reslist['build'] as $n => $Building) {
        $select_buildings .= " p." . $resource[$Building] . ",";
    }
    $selected_tech = '';
    foreach ($reslist['tech'] as $n => $Techno) {
        $selected_tech .= " u." . $resource[$Techno] . ",";
    }
    $select_fleets = '';
    foreach ($reslist['fleet'] as $n => $Fleet) {
        $select_fleets .= " SUM(p." . $resource[$Fleet] . ") AS " . $resource[$Fleet] . ",";
    }
    //If you have some data type enmu is better if you put it here, because that data give a error in the SUM function.
    $selected_enum = "p.small_protection_shield, p.big_protection_shield";
    //For now...
    $select_planet = "p.id_owner,";
    //For Stats table..
    $select_old_ranks = "id_owner, stat_type,tech_rank AS old_tech_rank, build_rank AS old_build_rank, defs_rank AS old_defs_rank, fleet_rank AS old_fleet_rank, total_rank AS old_total_rank";
    //For users table
    $select_user = "******";
    //We check how many users are for not overload the server...
    $total_users = doquery("SELECT COUNT(*) AS `count` FROM {{table}} WHERE 1;", 'users', true);
    //We will make query every $game_config['stat_amount'] users
    //Min amount = 10, if it is less than 10, it is not a good system
    $game_config['stat_amount'] = $game_config['stat_amount'] >= 10 ? $game_config['stat_amount'] : 10;
    $amount_per_block = $game_config['stat_amount'] < $game_config['users_amount'] ? $game_config['users_amount'] : $game_config['stat_amount'];
    if ($total_users['count'] > $amount_per_block) {
        $LastQuery = roundUp($total_users['count'] / $amount_per_block);
    } else {
        $LastQuery = 1;
    }
    for ($Query = 1; $Query <= $LastQuery; $Query++) {
        if ($Query == 1) {
            //based on:http://www.desarrolloweb.com/articulos/1035.php
            $start = 0;
        } else {
            $start = ($Query - 1) * $amount_per_block;
        }
        $minmax_sql = 'SELECT Max(id) AS `max`, Min(id) AS `min` FROM
						(SELECT id FROM {{table}}users ORDER BY id ASC LIMIT
						' . $start . ',' . $amount_per_block . ') AS A';
        $minmax = doquery($minmax_sql, '', true);
        $sql_parcial = 'SELECT ' . $select_buildings . $select_planet . $selected_enum . ', p.id FROM {{table}}planets as p WHERE p.id_owner <=' . $minmax['max'] . ' AND p.id_owner >= ' . $minmax['min'] . ';';
        //We delete now the old stats of the users
        $sql_old_stats = 'SELECT ' . $select_old_ranks . ' FROM {{table}} WHERE stat_type = 1 AND stat_code = 1 AND id_owner <= ' . $minmax['max'] . ' AND id_owner >=  ' . $minmax['min'] . ';';
        //Here we make the array with the planets buildings array and the user id and planet id for use in the next step...
        //Here we excecute all the querys
        $parcial_data = doquery($sql_parcial, '');
        //Here we obtained the stuff that can not be SUM
        while ($CurPlanet = mysql_fetch_assoc($parcial_data)) {
            $Buildings_array[$CurPlanet['id_owner']][$CurPlanet['id']] = $CurPlanet;
            //We made a array with the content of the query
        }
        unset($CurPlanet, $parcial_data);
        $old_stats = doquery($sql_old_stats, 'statpoints');
        while ($CurStats = mysql_fetch_assoc($old_stats)) {
            $old_stats_array[$CurStats['id_owner']] = $CurStats;
        }
        unset($CurStats, $old_stats);
        //We take the data of flying fleets if stat_flying is =1 in game config
        //If you have trouble with the RAM and CPU usage, please set stat_flying = 0 and a low value of stat_amount (25, 15...)
        if ($game_config['stat_flying'] == 1) {
            $sql_flying_fleets = 'SELECT fleet_array, fleet_owner, fleet_id FROM {{table}} WHERE fleet_owner <= ' . $minmax['max'] . ' AND fleet_owner >= ' . $minmax['min'] . ';';
            $flying_fleets = doquery($sql_flying_fleets, 'fleets');
            while ($CurFleets = mysql_fetch_assoc($flying_fleets)) {
                $flying_fleets_array[$CurFleets['fleet_owner']][$CurFleets['fleet_id']] = $CurFleets['fleet_array'];
            }
            unset($CurFleets, $flying_fleets);
        }
        //This query will have a LOT of data...
        $sql = 'SELECT  ' . $select_planet . $select_defenses . $selected_tech . $select_fleets . $select_user . 'FROM {{table}}planets as p
					INNER JOIN {{table}}users as u ON u.id = p.id_owner
					WHERE p.id_owner <= ' . $minmax['max'] . ' AND p.id_owner >=  ' . $minmax['min'] . '
					GROUP BY p.id_owner, u.id, u.authlevel;';
        $total_data = doquery($sql, '');
        unset($sql, $sql_old_stats, $sql_parcial);
        doquery("DELETE FROM {{table}} WHERE stat_type = 1 AND stat_code = 1 AND id_owner <= " . $minmax['max'] . " AND id_owner >= " . $minmax['min'] . ";", 'statpoints');
        $insert_user_query = "INSERT INTO {{table}}\r\n\t\t\t\t\t\t\t\t(`id_owner`, `id_ally`, `stat_type`, `stat_code`,\r\n\t\t\t\t\t\t\t\t`tech_old_rank`, `tech_points`, `tech_count`,\r\n\t\t\t\t\t\t\t\t`build_old_rank`, `build_points`, `build_count`,\r\n\t\t\t\t\t\t\t\t`defs_old_rank`, `defs_points`, `defs_count`,\r\n\t\t\t\t\t\t\t\t`fleet_old_rank`, `fleet_points`, `fleet_count`,\r\n\t\t\t\t\t\t\t\t`total_old_rank`, `total_points`, `total_count`, `stat_date`) VALUES ";
        //Here we start the update...
        while ($CurUser = mysql_fetch_assoc($total_data)) {
            $u_OldTotalRank = $old_stats_array[$CurUser['id']]['old_total_rank'] ? $old_stats_array[$CurUser['id']]['old_total_rank'] : 0;
            $u_OldTechRank = $old_stats_array[$CurUser['id']]['old_tech_rank'] ? $old_stats_array[$CurUser['id']]['old_tech_rank'] : 0;
            $u_OldBuildRank = $old_stats_array[$CurUser['id']]['old_build_rank'] ? $old_stats_array[$CurUser['id']]['old_build_rank'] : 0;
            $u_OldDefsRank = $old_stats_array[$CurUser['id']]['old_defs_rank'] ? $old_stats_array[$CurUser['id']]['old_defs_rank'] : 0;
            $u_OldFleetRank = $old_stats_array[$CurUser['id']]['old_fleet_rank'] ? $old_stats_array[$CurUser['id']]['old_fleet_rank'] : 0;
            //We dont need this anymore...
            unset($old_stats_array[$CurUser['id']]);
            //1 point=  $game_config['stat_settings'] ressources
            //Make the tech points XD
            $u_points = GetTechnoPoints($CurUser);
            $u_TTechCount = $u_points['TechCount'];
            $u_TTechPoints = $u_points['TechPoint'] / $game_config['stat_settings'];
            //Make the defense points
            $u_points = GetDefensePoints($CurUser);
            $u_TDefsCount = $u_points['DefenseCount'];
            $u_TDefsPoints = $u_points['DefensePoint'] / $game_config['stat_settings'];
            //Make the fleets points (without the flying fleets...
            $u_points = GetFleetPoints($CurUser);
            $u_TFleetCount = $u_points['FleetCount'];
            $u_TFleetPoints = $u_points['FleetPoint'] / $game_config['stat_settings'];
            //Now we add the flying fleets points
            //This is used if($game_config['stat_flying'] == 1)
            if ($game_config['stat_flying'] == 1) {
                if ($flying_fleets_array[$CurUser['id']]) {
                    foreach ($flying_fleets_array[$CurUser['id']] as $fleet_id => $fleet_array) {
                        $u_points = GetFlyingFleetPoints($fleet_array);
                        $u_TFleetCount += $u_points['FleetCount'];
                        $u_TFleetPoints += $u_points['FleetPoint'] / $game_config['stat_settings'];
                    }
                }
                //We dont need this anymore...
                unset($flying_fleets_array[$CurUser['id']], $fleet_array, $fleet_id);
            } else {
                //We take one query per fleet in flying, with this we increase the time and the querys, but we decrease the cpu load...
                $OwnFleets = doquery("SELECT fleet_array, fleet_id FROM {{table}} WHERE `fleet_owner` = '" . $CurUser['id'] . "';", 'fleets');
                while ($FleetRow = mysql_fetch_array($OwnFleets)) {
                    $u_points = GetFlyingFleetPoints($FleetRow['fleet_array']);
                    $u_TFleetCount += $u_points['FleetCount'];
                    $u_TFleetPoints += $u_points['FleetPoint'] / $game_config['stat_settings'];
                }
                //We dont need this anymore...
                unset($OwnFleets, $FleetRow);
            }
            $u_TBuildCount = 0;
            $u_TBuildPoints = 0;
            if ($Buildings_array[$CurUser['id']]) {
                foreach ($Buildings_array[$CurUser['id']] as $planet_id => $building) {
                    $u_points = GetBuildPoints($building);
                    $u_TBuildCount += $u_points['BuildCount'];
                    $u_TBuildPoints += $u_points['BuildPoint'] / $game_config['stat_settings'];
                    //We add the shields points (this way is a temporary way...)
                    $u_points = GetDefensePoints($building);
                    $u_TDefsCount += $u_points['DefenseCount'];
                    $u_TDefsPoints += $u_points['DefensePoint'] / $game_config['stat_settings'];
                }
                //We dont need this anymore...
                unset($Buildings_array[$CurUser['id']], $planet_id, $building);
            } else {
                //Here we will send a error message....print_r("<br>usuario sin planeta: ". $CurUser['id']);
            }
            $u_GCount = $u_TDefsCount + $u_TTechCount + $u_TFleetCount + $u_TBuildCount;
            $u_GPoints = $u_TTechPoints + $u_TDefsPoints + $u_TFleetPoints + $u_TBuildPoints;
            if ($CurUser['authlevel'] >= $game_config['stat_level'] && $game_config['stat'] == 1 || $CurUser['bana'] == 1) {
                $insert_user_query .= '(' . $CurUser['id'] . ',' . $CurUser['ally_id'] . ',1,1,' . $u_OldTechRank . ',
										0,0,' . $u_OldBuildRank . ',0,0,' . $u_OldDefsRank . ',0,0,' . $u_OldFleetRank . ',
										0,0,' . $u_OldTotalRank . ',0,0,' . $stats_time . '),';
            } else {
                $insert_user_query .= '(' . $CurUser['id'] . ',' . $CurUser['ally_id'] . ',1,1,' . $u_OldTechRank . ',
										' . $u_TTechPoints . ',' . $u_TTechCount . ',' . $u_OldBuildRank . ',' . $u_TBuildPoints . ',
										' . $u_TBuildCount . ',' . $u_OldDefsRank . ',' . $u_TDefsPoints . ',' . $u_TDefsCount . ',
										' . $u_OldFleetRank . ',' . $u_TFleetPoints . ',' . $u_TFleetCount . ',' . $u_OldTotalRank . ',
										' . $u_GPoints . ',' . $u_GCount . ',' . $stats_time . '),';
            }
            unset_vars('u_');
            $CheckUserQuery = true;
        }
        //TODO, make a end string check in case that insert_user_query end in VALUE...
        //Here we change the end of the query for ;
        if ($CheckUserQuery == true) {
            $insert_user_query = substr_replace($insert_user_query, ';', -1);
            doquery($insert_user_query, 'statpoints');
        }
        unset($insert_user_query, $total_data, $CurUser, $old_stats_array, $Buildings_array, $flying_fleets_array);
    }
    //STATS FOR ALLYS
    //Delet invalid allys
    doquery("DELETE FROM {{table}} WHERE ally_members='0'", "alliance");
    //We create this just for make a check of the ally
    $ally_check = doquery("SELECT * FROM {{table}}", 'alliance');
    $total_ally = 0;
    while ($CurAlly = mysql_fetch_assoc($ally_check)) {
        ++$total_ally;
        $ally_check_value[$CurAlly['id']] = 1;
    }
    unset($ally_check);
    unset($start, $QueryValue, $Query, $LastQuery);
    if ($total_ally > 0) {
        //Min amount = 10, if it is less than 10, it is not a good system
        $game_config['stat_amount'] = $game_config['stat_amount'] >= 10 ? $game_config['stat_amount'] : 10;
        $amount_per_block = $game_config['stat_amount'] < $game_config['users_amount'] ? $game_config['users_amount'] : $game_config['stat_amount'];
        if ($total_ally > $amount_per_block) {
            $LastQuery = roundUp($total_ally / $amount_per_block);
        } else {
            $LastQuery = 1;
        }
        for ($Query = 1; $Query <= $LastQuery; $Query++) {
            if ($Query == 1) {
                //based on:http://www.desarrolloweb.com/articulos/1035.php
                $start = 0;
            } else {
                $start = ($Query - 1) * $amount_per_block;
            }
            $minmax_sql = 'SELECT Max(id) AS `max`, Min(id) AS `min` FROM
						(SELECT id FROM {{table}}alliance ORDER BY id ASC LIMIT
						' . $start . ',' . $amount_per_block . ') AS A';
            $minmax = doquery($minmax_sql, '', true);
            $select_old_a_ranks = "s.id_owner , s.stat_type,\ts.tech_rank AS old_tech_rank,\r\n\t\t\t\t\t\t\t\ts.build_rank AS old_build_rank, s.defs_rank AS old_defs_rank, s.fleet_rank AS old_fleet_rank,\r\n\t\t\t\t\t\t\t\ts.total_rank AS old_total_rank";
            $select_ally = " a.id ";
            $sql_ally = 'SELECT  ' . $select_ally . ', ' . $select_old_a_ranks . '
							FROM {{table}}alliance AS a
							INNER JOIN {{table}}statpoints AS s ON a.id = s.id_owner  AND s.stat_type = 2
							WHERE a.id <= ' . $minmax['max'] . ' AND a.id >=  ' . $minmax['min'] . '
							ORDER BY a.id;';
            $ally_data = doquery($sql_ally, '');
            $ally_sql_points = 'SELECT
							s.stat_type, s.id_ally, Sum(s.tech_points) AS TechPoint,
								Sum(s.tech_count) AS TechCount, Sum(s.build_points) AS BuildPoint,
								Sum(s.build_count) AS BuildCount, Sum(s.defs_points) AS DefsPoint,
								Sum(s.defs_count) AS DefsCount, Sum(s.fleet_points) AS FleetPoint,
								Sum(s.fleet_count) AS FleetCount, Sum(s.total_points) AS TotalPoint,
								Sum(s.total_count) AS TotalCount
								FROM
								{{table}}statpoints AS s
								WHERE	s.stat_type =  1 AND s.id_ally > 0
								AND s.id_ally <= ' . $minmax['max'] . ' AND s.id_ally >=  ' . $minmax['min'] . '
								GROUP BY	s.id_ally;';
            $ally_points = doquery($ally_sql_points, '');
            //We delete now the old stats of the allys
            doquery('DELETE FROM {{table}} WHERE `stat_type` = 2 AND id_owner <= ' . $minmax['max'] . ' AND id_owner >=  ' . $minmax['min'] . ';', 'statpoints');
            while ($CurAlly = mysql_fetch_assoc($ally_data)) {
                $ally_old_data[$CurAlly['id']] = $CurAlly;
            }
            unset($CurAlly, $ally_data);
            $insert_ally_query = "INSERT INTO {{table}}\r\n\t\t\t\t\t\t\t\t\t(`id_owner`, `id_ally`, `stat_type`, `stat_code`,\r\n\t\t\t\t\t\t\t\t\t`tech_old_rank`, `tech_points`, `tech_count`,\r\n\t\t\t\t\t\t\t\t\t`build_old_rank`, `build_points`, `build_count`,\r\n\t\t\t\t\t\t\t\t\t`defs_old_rank`, `defs_points`, `defs_count`,\r\n\t\t\t\t\t\t\t\t\t`fleet_old_rank`, `fleet_points`, `fleet_count`,\r\n\t\t\t\t\t\t\t\t\t`total_old_rank`, `total_points`, `total_count`, `stat_date`) VALUES ";
            while ($CurAlly = mysql_fetch_assoc($ally_points)) {
                if ($ally_check_value[$CurAlly['id_ally']] == 1) {
                    $u_OldTotalRank = $ally_old_data[$CurAlly['id_ally']]['old_total_rank'] ? $ally_old_data[$CurAlly['id_ally']]['old_total_rank'] : 0;
                    $u_OldTechRank = $ally_old_data[$CurAlly['id_ally']]['old_tech_rank'] ? $ally_old_data[$CurAlly['id_ally']]['old_tech_rank'] : 0;
                    $u_OldBuildRank = $ally_old_data[$CurAlly['id_ally']]['old_build_rank'] ? $ally_old_data[$CurAlly['id_ally']]['old_build_rank'] : 0;
                    $u_OldDefsRank = $ally_old_data[$CurAlly['id_ally']]['old_defs_rank'] ? $ally_old_data[$CurAlly['id_ally']]['old_defs_rank'] : 0;
                    $u_OldFleetRank = $ally_old_data[$CurAlly['id_ally']]['old_fleet_rank'] ? $ally_old_data[$CurAlly['id_ally']]['old_fleet_rank'] : 0;
                    $u_TTechCount = $CurAlly['TechCount'];
                    $u_TTechPoints = $CurAlly['TechPoint'];
                    $u_TBuildCount = $CurAlly['BuildCount'];
                    $u_TBuildPoints = $CurAlly['BuildPoint'];
                    $u_TDefsCount = $CurAlly['DefsCount'];
                    $u_TDefsPoints = $CurAlly['DefsPoint'];
                    $u_TFleetCount = $CurAlly['FleetCount'];
                    $u_TFleetPoints = $CurAlly['FleetPoint'];
                    $u_GCount = $CurAlly['TotalCount'];
                    $u_GPoints = $CurAlly['TotalPoint'];
                    $insert_ally_query .= '(' . $CurAlly['id_ally'] . ',0,2,1,' . $u_OldTechRank . ',
											' . $u_TTechPoints . ',' . $u_TTechCount . ',' . $u_OldBuildRank . ',' . $u_TBuildPoints . ',
											' . $u_TBuildCount . ',' . $u_OldDefsRank . ',' . $u_TDefsPoints . ',' . $u_TDefsCount . ',
											' . $u_OldFleetRank . ',' . $u_TFleetPoints . ',' . $u_TFleetCount . ',' . $u_OldTotalRank . ',
											' . $u_GPoints . ',' . $u_GCount . ',' . $stats_time . '),';
                    unset($CurAlly);
                    unset_vars('u_');
                } else {
                    doquery("UPDATE {{table}}\tSET `ally_id`=0, `ally_name` = '', \t`ally_register_time`= 0, `ally_rank_id`= 0 \tWHERE `ally_id`='{$CurAlly['id_ally']}'", "users");
                }
                $CheckAllyQuery = true;
            }
            //Here we change the end of the query for ;
            if ($CheckAllyQuery == true) {
                $insert_ally_query = substr_replace($insert_ally_query, ';', -1);
                doquery($insert_ally_query, 'statpoints');
            }
            unset($insert_ally_query, $ally_old_data, $CurAlly, $ally_points);
        }
        unset($ally_check_value);
        //We update the ranks of the allys
        MakeNewRanks(2);
    }
    //We update the ranks of the users
    MakeNewRanks(1);
    // Calcul de la duree de traitement (calcul)
    $mtime = microtime();
    $mtime = explode(" ", $mtime);
    $mtime = $mtime[1] + $mtime[0];
    $endtime = $mtime;
    $result['stats_time'] = $stats_time;
    $result['totaltime'] = $endtime - $starttime;
    $result['memory_peak'] = array(round(memory_get_peak_usage() / 1024, 1), round(memory_get_peak_usage(1) / 1024, 1));
    $result['end_memory'] = array(round(memory_get_usage() / 1024, 1), round(memory_get_usage(1) / 1024, 1));
    $result['amount_per_block'] = $amount_per_block;
    return $result;
}
Example #2
0
function ShowResourcesPage($CurrentUser, $CurrentPlanet)
{
    global $lang, $ProdGrid, $resource, $reslist, $game_config;
    $parse = $lang;
    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['darkmatter_basic_income'] = 0;
    }
    $ValidList['percent'] = array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
    $SubQry = "";
    if ($_POST) {
        foreach ($_POST as $Field => $Value) {
            $FieldName = $Field . "_porcent";
            if (isset($CurrentPlanet[$FieldName])) {
                if (!in_array($Value, $ValidList['percent'])) {
                    header("Location: game.php?page=ressources");
                    exit;
                }
                $Value = $Value / 10;
                $CurrentPlanet[$FieldName] = $Value;
                $SubQry .= ", `" . $FieldName . "` = '" . $Value . "'";
            }
        }
    }
    $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;
    }
    $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);
    $CurrentPlanet['darkmatter_max'] = (BASE_STORAGE_SIZE + 50000 * (roundUp(pow(1.6, $CurrentPlanet[$resource[25]])) - 1)) * (1 + $CurrentUser['rpg_stockeur'] * STOCKEUR);
    $parse['resource_row'] = "";
    $CurrentPlanet['metal_perhour'] = 0;
    $CurrentPlanet['crystal_perhour'] = 0;
    $CurrentPlanet['deuterium_perhour'] = 0;
    $CurrentPlanet['darkmatter_perhour'] = 0;
    $CurrentPlanet['energy_max'] = 0;
    $CurrentPlanet['energy_used'] = 0;
    $BuildTemp = $CurrentPlanet['temp_max'];
    foreach ($reslist['prod'] as $ProdID) {
        if ($CurrentPlanet[$resource[$ProdID]] > 0 && isset($ProdGrid[$ProdID])) {
            $BuildLevelFactor = $CurrentPlanet[$resource[$ProdID] . "_porcent"];
            $BuildLevel = $CurrentPlanet[$resource[$ProdID]];
            $metal = floor(eval($ProdGrid[$ProdID]['formule']['metal']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * GEOLOGUE));
            $crystal = floor(eval($ProdGrid[$ProdID]['formule']['crystal']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * GEOLOGUE));
            $deuterium = floor(eval($ProdGrid[$ProdID]['formule']['deuterium']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * GEOLOGUE));
            $darkmatter = floor(eval($ProdGrid[$ProdID]['formule']['darkmatter']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_geologue'] * GEOLOGUE));
            if ($ProdID >= 4) {
                $energy = floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $game_config['resource_multiplier'] * (1 + $CurrentUser['rpg_ingenieur'] * INGENIEUR));
            } else {
                $energy = floor(eval($ProdGrid[$ProdID]['formule']['energy']) * $game_config['resource_multiplier']);
            }
            if ($energy > 0) {
                $CurrentPlanet['energy_max'] += $energy;
            } else {
                $CurrentPlanet['energy_used'] += $energy;
            }
            $CurrentPlanet['metal_perhour'] += $metal;
            $CurrentPlanet['crystal_perhour'] += $crystal;
            $CurrentPlanet['deuterium_perhour'] += $deuterium;
            $CurrentPlanet['darkmatter_perhour'] += $darkmatter;
            $metal = $metal * 0.01 * $post_porcent;
            $crystal = $crystal * 0.01 * $post_porcent;
            $deuterium = $deuterium * 0.01 * $post_porcent;
            $darkmatter = $darkmatter * 0.01 * $post_porcent;
            $energy = $energy * 0.01 * $post_porcent;
            $Field = $resource[$ProdID] . "_porcent";
            $CurrRow = array();
            $CurrRow['name'] = $resource[$ProdID];
            $CurrRow['porcent'] = $CurrentPlanet[$Field];
            for ($Option = 10; $Option >= 0; $Option--) {
                $OptValue = $Option * 10;
                if ($Option == $CurrRow['porcent']) {
                    $OptSelected = " selected=selected";
                } else {
                    $OptSelected = "";
                }
                $CurrRow['option'] .= "<option value=\"" . $OptValue . "\"" . $OptSelected . ">" . $OptValue . "%</option>";
            }
            $CurrRow['type'] = $lang['tech'][$ProdID];
            $CurrRow['level'] = $ProdID > 200 ? $lang['rs_amount'] : $lang['rs_lvl'];
            $CurrRow['level_type'] = $CurrentPlanet[$resource[$ProdID]];
            $CurrRow['metal_type'] = pretty_number($metal);
            $CurrRow['crystal_type'] = pretty_number($crystal);
            $CurrRow['deuterium_type'] = pretty_number($deuterium);
            $CurrRow['darkmatter_type'] = pretty_number($darkmatter);
            $CurrRow['energy_type'] = pretty_number($energy);
            $CurrRow['metal_type'] = colorNumber($CurrRow['metal_type']);
            $CurrRow['crystal_type'] = colorNumber($CurrRow['crystal_type']);
            $CurrRow['deuterium_type'] = colorNumber($CurrRow['deuterium_type']);
            $CurrRow['darkmatter_type'] = colorNumber($CurrRow['darkmatter_type']);
            $CurrRow['energy_type'] = colorNumber($CurrRow['energy_type']);
            $parse['resource_row'] .= parsetemplate(gettemplate('resources/resources_row'), $CurrRow);
        }
    }
    $parse['Production_of_resources_in_the_planet'] = str_replace('%s', $CurrentPlanet['name'], $lang['rs_production_on_planet']);
    if ($CurrentPlanet['energy_max'] == 0 && $CurrentPlanet['energy_used'] > 0) {
        $parse['production_level'] = 0;
    } elseif ($CurrentPlanet['energy_max'] > 0 && abs($CurrentPlanet['energy_used']) > $CurrentPlanet['energy_max']) {
        $parse['production_level'] = floor($CurrentPlanet['energy_max'] / ($CurrentPlanet['energy_used'] * -1) * 100);
    } elseif ($CurrentPlanet['energy_max'] == 0 && abs($CurrentPlanet['energy_used']) > $CurrentPlanet['energy_max']) {
        $parse['production_level'] = 0;
    } else {
        $parse['production_level'] = 100;
    }
    if ($parse['production_level'] > 100) {
        $parse['production_level'] = 100;
    }
    $parse['metal_basic_income'] = $game_config['metal_basic_income'] * $game_config['resource_multiplier'];
    $parse['crystal_basic_income'] = $game_config['crystal_basic_income'] * $game_config['resource_multiplier'];
    $parse['deuterium_basic_income'] = $game_config['deuterium_basic_income'] * $game_config['resource_multiplier'];
    $parse['darkmatter_basic_income'] = $game_config['darkmatter_basic_income'] * $game_config['resource_multiplier'];
    $parse['energy_basic_income'] = $game_config['energy_basic_income'] * $game_config['resource_multiplier'];
    if ($CurrentPlanet['metal_max'] < $CurrentPlanet['metal']) {
        $parse['metal_max'] = "<font color=\"#ff0000\">";
    } else {
        $parse['metal_max'] = "<font color=\"#00ff00\">";
    }
    $parse['metal_max'] .= pretty_number($CurrentPlanet['metal_max'] / 1000) . "k</font>";
    if ($CurrentPlanet['crystal_max'] < $CurrentPlanet['crystal']) {
        $parse['crystal_max'] = "<font color=\"#ff0000\">";
    } else {
        $parse['crystal_max'] = "<font color=\"#00ff00\">";
    }
    $parse['crystal_max'] .= pretty_number($CurrentPlanet['crystal_max'] / 1000) . "k</font>";
    if ($CurrentPlanet['deuterium_max'] < $CurrentPlanet['deuterium']) {
        $parse['deuterium_max'] = "<font color=\"#ff0000\">";
    } else {
        $parse['deuterium_max'] = "<font color=\"#00ff00\">";
    }
    $parse['deuterium_max'] .= pretty_number($CurrentPlanet['deuterium_max'] / 1000) . "k</font>";
    if ($CurrentPlanet['darkmatter_max'] < $CurrentPlanet['darkmatter']) {
        $parse['darkmatter_max'] = "<font color=\"#ff0000\">";
    } else {
        $parse['darkmatter_max'] = "<font color=\"#00ff00\">";
    }
    $parse['darkmatter_max'] .= pretty_number($CurrentPlanet['darkmatter_max'] / 1000) . "k</font>";
    $parse['metal_total'] = colorNumber(pretty_number(floor(($CurrentPlanet['metal_perhour'] * 0.01 * $parse['production_level'] + $parse['metal_basic_income']) * $game_config['resource_multiplier'])));
    $parse['crystal_total'] = colorNumber(pretty_number(floor(($CurrentPlanet['crystal_perhour'] * 0.01 * $parse['production_level'] + $parse['crystal_basic_income']) * $game_config['resource_multiplier'])));
    $parse['deuterium_total'] = colorNumber(pretty_number(floor(($CurrentPlanet['deuterium_perhour'] * 0.01 * $parse['production_level'] + $parse['deuterium_basic_income']) * $game_config['resource_multiplier'])));
    $parse['darkmatter_total'] = colorNumber(pretty_number(floor(($CurrentPlanet['darkmatter_perhour'] * 0.01 * $parse['production_level'] + $parse['darkmatter_basic_income']) * $game_config['resource_multiplier'])));
    $parse['energy_total'] = colorNumber(pretty_number(floor($CurrentPlanet['energy_max'] + $parse['energy_basic_income'] + $CurrentPlanet['energy_used'])));
    $parse['daily_metal'] = floor($CurrentPlanet['metal_perhour'] * 24 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['metal_basic_income'] * $game_config['resource_multiplier'] * 24);
    $parse['weekly_metal'] = floor($CurrentPlanet['metal_perhour'] * 24 * 7 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['metal_basic_income'] * $game_config['resource_multiplier'] * 24 * 7);
    $parse['daily_crystal'] = floor($CurrentPlanet['crystal_perhour'] * 24 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['crystal_basic_income'] * $game_config['resource_multiplier'] * 24);
    $parse['weekly_crystal'] = floor($CurrentPlanet['crystal_perhour'] * 24 * 7 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['crystal_basic_income'] * $game_config['resource_multiplier'] * 24 * 7);
    $parse['daily_deuterium'] = floor($CurrentPlanet['deuterium_perhour'] * 24 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['deuterium_basic_income'] * $game_config['resource_multiplier'] * 24);
    $parse['weekly_deuterium'] = floor($CurrentPlanet['deuterium_perhour'] * 24 * 7 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['deuterium_basic_income'] * $game_config['resource_multiplier'] * 24 * 7);
    $parse['daily_darkmatter'] = floor($CurrentPlanet['darkmatter_perhour'] * 24 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['darkmatter_basic_income'] * $game_config['resource_multiplier'] * 24);
    $parse['weekly_darkmatter'] = floor($CurrentPlanet['darkmatter_perhour'] * 24 * 7 * 0.01 * $parse['production_level'] * $game_config['resource_multiplier'] + $parse['darkmatter_basic_income'] * $game_config['resource_multiplier'] * 24 * 7);
    $parse['daily_metal'] = colorNumber(pretty_number($parse['daily_metal']));
    $parse['weekly_metal'] = colorNumber(pretty_number($parse['weekly_metal']));
    $parse['daily_crystal'] = colorNumber(pretty_number($parse['daily_crystal']));
    $parse['weekly_crystal'] = colorNumber(pretty_number($parse['weekly_crystal']));
    $parse['daily_deuterium'] = colorNumber(pretty_number($parse['daily_deuterium']));
    $parse['weekly_deuterium'] = colorNumber(pretty_number($parse['weekly_deuterium']));
    $parse['daily_darkmatter'] = colorNumber(pretty_number($parse['daily_darkmatter']));
    $parse['weekly_darkmatter'] = colorNumber(pretty_number($parse['weekly_darkmatter']));
    $QryUpdatePlanet = "UPDATE {{table}} SET ";
    $QryUpdatePlanet .= "`id` = '" . $CurrentPlanet['id'] . "' ";
    $QryUpdatePlanet .= $SubQry;
    $QryUpdatePlanet .= "WHERE ";
    $QryUpdatePlanet .= "`id` = '" . $CurrentPlanet['id'] . "';";
    doquery($QryUpdatePlanet, 'planets');
    return display(parsetemplate(gettemplate('resources/resources'), $parse));
}
Example #3
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');
    }
}
Example #4
0
function ComputeInstallments($RequestID = "", $returnMode = false, $pdo2 = null)
{
    $RequestID = empty($RequestID) ? $_REQUEST["RequestID"] : $RequestID;
    PdoDataAccess::runquery("delete from LON_installments where RequestID=? ", array($RequestID));
    //-----------------------------------------------
    $obj2 = new LON_requests($RequestID);
    if ($obj2->ReqPersonID == SHEKOOFAI) {
        return ComputeInstallmentsShekoofa($RequestID, $returnMode);
    }
    //-----------------------------------------------
    $obj = LON_ReqParts::GetValidPartObj($RequestID);
    //-----------------------------------------------
    $YearMonths = 12;
    if ($obj->IntervalType == "DAY") {
        $YearMonths = floor(365 / $obj->PayInterval);
    }
    $TotalWage = round(ComputeWage($obj->PartAmount, $obj->CustomerWage / 100, $obj->InstallmentCount, $PartObj->IntervalType, $obj->PayInterval));
    if ($obj->WageReturn == "CUSTOMER") {
        $TotalWage = 0;
        $obj->CustomerWage = 0;
    }
    $startDate = DateModules::miladi_to_shamsi($obj->PartDate);
    $DelayDuration = DateModules::JDateMinusJDate(DateModules::AddToJDate($startDate, $obj->DelayDays, $obj->DelayMonths), $startDate) + 1;
    if ($obj->DelayDays * 1 > 0) {
        $TotalDelay = round($obj->PartAmount * $obj->DelayPercent * $DelayDuration / 36500);
    } else {
        $TotalDelay = round($obj->PartAmount * $obj->DelayPercent * $obj->DelayMonths / 1200);
    }
    //-------------------------- installments -----------------------------
    $MaxWage = max($obj->CustomerWage, $obj->FundWage);
    $CustomerFactor = $MaxWage == 0 ? 0 : $obj->CustomerWage / $MaxWage;
    $FundFactor = $MaxWage == 0 ? 0 : $obj->FundWage / $MaxWage;
    $AgentFactor = $MaxWage == 0 ? 0 : ($obj->CustomerWage - $obj->FundWage) / $MaxWage;
    $extraAmount = 0;
    if ($obj->WageReturn == "INSTALLMENT") {
        if ($obj->MaxFundWage * 1 > 0) {
            $extraAmount += $obj->MaxFundWage;
        } else {
            if ($obj->CustomerWage > $obj->FundWage) {
                $extraAmount += round($TotalWage * $FundFactor);
            } else {
                $extraAmount += round($TotalWage * $CustomerFactor);
            }
        }
    }
    if ($obj->AgentReturn == "INSTALLMENT" && $obj->CustomerWage > $obj->FundWage) {
        $extraAmount += round($TotalWage * $AgentFactor);
    }
    if ($obj->DelayReturn == "INSTALLMENT") {
        $extraAmount += $TotalDelay * ($obj->FundWage / $obj->DelayPercent);
    }
    if ($obj->AgentDelayReturn == "INSTALLMENT" && $obj->DelayPercent > $obj->FundWage) {
        $extraAmount += $TotalDelay * (($obj->DelayPercent - $obj->FundWage) / $obj->DelayPercent);
    }
    $TotalAmount = $obj->PartAmount * 1 + $extraAmount;
    $allPay = ComputeInstallmentAmount($TotalAmount, $obj->InstallmentCount, $obj->PayInterval);
    if ($obj->InstallmentCount > 1) {
        $allPay = roundUp($allPay, -3);
    } else {
        $allPay = round($allPay);
    }
    if ($obj->DelayReturn == "INSTALLMENT") {
        $allPay += $TotalDelay / $obj->InstallmentCount * 1;
    }
    $LastPay = $TotalAmount - $allPay * ($obj->InstallmentCount - 1);
    //---------------------------------------------------------------------
    $jdate = DateModules::miladi_to_shamsi($obj->PartDate);
    $jdate = DateModules::AddToJDate($jdate, $obj->DelayDays, $obj->DelayMonths);
    if ($pdo2 == null) {
        $pdo = PdoDataAccess::getPdoObject();
        $pdo->beginTransaction();
    } else {
        $pdo = $pdo2;
    }
    for ($i = 0; $i < $obj->InstallmentCount - 1; $i++) {
        $obj2 = new LON_installments();
        $obj2->RequestID = $RequestID;
        $obj2->InstallmentDate = DateModules::AddToJDate($jdate, $obj->IntervalType == "DAY" ? $obj->PayInterval * ($i + 1) : 0, $obj->IntervalType == "MONTH" ? $obj->PayInterval * ($i + 1) : 0);
        $obj2->InstallmentAmount = $allPay;
        if (!$obj2->AddInstallment($pdo)) {
            $pdo->rollBack();
            print_r(ExceptionHandler::PopAllExceptions());
            echo Response::createObjectiveResponse(false, "");
            die;
        }
    }
    $obj2 = new LON_installments();
    $obj2->RequestID = $RequestID;
    $obj2->InstallmentDate = DateModules::AddToJDate($jdate, $obj->IntervalType == "DAY" ? $obj->PayInterval * $obj->InstallmentCount : 0, $obj->IntervalType == "MONTH" ? $obj->PayInterval * $obj->InstallmentCount : 0);
    $obj2->InstallmentAmount = $LastPay;
    if (!$obj2->AddInstallment($pdo)) {
        $pdo->rollBack();
        print_r(ExceptionHandler::PopAllExceptions());
        echo Response::createObjectiveResponse(false, "");
        die;
    }
    if ($returnMode) {
        return true;
    }
    $pdo->commit();
    echo Response::createObjectiveResponse(true, "");
    die;
}