Exemplo n.º 1
0
/**
 * MissionCaseRecycling.php
 *
 * @version 2.0
 * @copyright 2009 by MadnessRed for XNova
 */
function MissionCaseRecycling($FleetRow)
{
    global $pricelist, $lang;
    //Firstly we need to planet info.
    $CurrentPlanet = doquery("SELECT `debris_m`,`debris_c` FROM {{table}} WHERE `id` = '" . $FleetRow['target_id'] . "' LIMIT 1 ;", 'planets', true);
    //If there actually is a debris field here.
    if ($CurrentPlanet['debris_m'] + $CurrentPlanet['debris_c'] > 0) {
        //How much res is currently with the fleet
        $onboard = $FleetRow["metal"] + $FleetRow["crystal"] + $FleetRow["deuterium"];
        //What is the cargo capacity of the fleet?
        //XNova code will work fine with a small tweak
        $FleetRecord = explode(";", $FleetRow['array']);
        $RecyclerCapacity = 0;
        $OtherFleetCapacity = 0;
        foreach ($FleetRecord as $Item => $Group) {
            if ($Group != '') {
                $Class = explode(",", $Group);
                if ($Class[0] == 209) {
                    $RecyclerCapacity += $pricelist[$Class[0]]["capacity"] * $Class[1];
                } else {
                    $OtherFleetCapacity += $pricelist[$Class[0]]["capacity"] * $Class[1];
                }
            }
        }
        //</XNova Code>
        //How how much space is avaialble for debris?
        $onboard -= $OtherFleetCapacity;
        if ($onboard > 0) {
            $RecyclerCapacity -= $onboard;
        }
        if ($RecyclerCapacity < 0) {
            $RecyclerCapacity = 0;
        }
        //So do we have enough space for it all?
        $added = array(0, 0);
        if ($RecyclerCapacity >= $CurrentPlanet['debris_m'] + $CurrentPlanet['debris_c']) {
            //Add the resources to the fleetrow
            $FleetRow["metal"] += $CurrentPlanet['debris_m'];
            $added[0] = $CurrentPlanet['debris_m'];
            $FleetRow["crystal"] += $CurrentPlanet['debris_c'];
            $added[1] = $CurrentPlanet['debris_c'];
        } else {
            //How much can we take as a percent?
            $pc = $RecyclerCapacity / ($CurrentPlanet['debris_m'] + $CurrentPlanet['debris_c']);
            //Add the resources to the fleetrow
            $FleetRow["metal"] += $CurrentPlanet['debris_m'] * $pc;
            $added[0] = $CurrentPlanet['debris_m'] * $pc;
            $FleetRow["crystal"] += $CurrentPlanet['debris_c'] * $pc;
            $added[1] = $CurrentPlanet['debris_c'] * $pc;
        }
        //Now add those resources to the return fleet.
        doquery("UPDATE {{table}} SET `metal` = '" . $FleetRow["metal"] . "', `crystal` = '" . $FleetRow["crystal"] . "' WHERE `partner_fleet` = '" . $FleetRow["fleet_id"] . "' LIMIT 1 ;", 'fleets');
        //Now change the amount of debris:
        doquery("UPDATE {{table}} SET `debris_m` = `debris_m` - '" . $added[0] . "',`debris_c` = `debris_c` - '" . $added[1] . "' WHERE `id` = '" . $FleetRow['target_id'] . "' LIMIT 1 ;", 'planets');
        //And message the yser
        $Message = sprintf($lang['fleet_8_mess'], pretty_number($added[0]), $lang['Metal'], pretty_number($added[1]), $lang['Crystal']);
        PM($FleetRow['owner_userid'], 0, $Message, $lang['fleet_8_tit'], $lang['fleet_control'], 2);
    }
}
Exemplo n.º 2
0
function SendSimpleMessage($Owner, $Sender, $Time, $Type, $From, $Subject, $Message)
{
    global $messfields;
    if ($Time == '') {
        $Time = time();
    }
    //explode(",",$user['messages']) = array(0 => PM,1 => ALLY, 2 => EXP, 3 => BATTLE,4 => ESP,5 => GENERAL);
    $newtype = array('t1' => 0, 't2' => 1, 't15' => 2, 't3' => 3, 't0' => 4, 't99' => 5);
    if ($newtype['t' . $Type]) {
        $messtype = $newtype['t' . $Type];
    } else {
        $messtype = 5;
    }
    PM($Owner, $Sender, $Message, $Subject, $Sender, $messtype);
    //now report this rogue function
    $error = 'The function SendSimpleMessage has been called. This function is no longer in use, please ammend the file to use the new PM function instead.';
    ReportError($error, 'Deprecated Function', 1);
}
Exemplo n.º 3
0
function MissionCaseSpy($FleetRow)
{
    global $lang, $resource;
    //Get the users
    $TargetUser = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $FleetRow['target_userid'] . "';", 'users', true);
    $CurrentUser = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $FleetRow['owner_userid'] . "';", 'users', true);
    //Get the planets
    $TargetPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $FleetRow['target_id'] . "' ;", 'planets', true);
    $CurrentPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $FleetRow['owner_id'] . "' ;", 'planets', true);
    //Get the espionage levels
    $TargetSpyLvl = $TargetUser[$resource[106]];
    $CurrentSpyLvl = $CurrentUser[$resource[106]];
    //Get the number of probes
    $probes = 0;
    foreach (explode(";", $FleetRow['array']) as $b) {
        if ($b) {
            $a = explode(",", $b);
            if ($a[0] == 210) {
                $probes += $a[1];
            }
        }
    }
    //Get the effective number of probes, baring in mind tech difference.
    $spy = pow($CurrentUser[$resource[106]] - $TargetUser[$resource[106]], 2);
    if ($CurrentUser[$resource[106]] - $TargetUser[$resource[106]] < 0) {
        $spy = 0 - $spy;
    }
    $spy += $probes;
    $report = '';
    if ($spy > 7) {
        $spy = 7;
    }
    switch ($spy) {
        case 7:
            $section = SpyTarget($TargetUser, 4, $lang['tech'][100]);
            $report = $section['String'] . $report;
        case 6:
        case 5:
            $section = SpyTarget($TargetPlanet, 3, $lang['tech'][0]);
            $report = $section['String'] . $report;
        case 4:
        case 3:
            $section = SpyTarget($TargetPlanet, 2, $lang['tech'][400]);
            $report = $section['String'] . $report;
        case 2:
            $section = SpyTarget($TargetPlanet, 1, $lang['tech'][200]);
            $report = $section['String'] . $report;
        default:
            $section = SpyTarget($TargetPlanet, 0, $lang['Resources']);
            $report = $section['String'] . $report . "</table>";
            break;
    }
    PM($CurrentPlanet['id_owner'], 0, $report, $lang['fleet_6_tit'], $lang['fleet_control'], 4);
    /*
    						$QryTargetGalaxy  = "SELECT * FROM {{table}} WHERE ";
    						$QryTargetGalaxy .= "`galaxy` = '". $FleetRow['fleet_end_galaxy'] ."' AND ";
    						$QryTargetGalaxy .= "`system` = '". $FleetRow['fleet_end_system'] ."' AND ";
    						$QryTargetGalaxy .= "`planet` = '". $FleetRow['fleet_end_planet'] ."';";
    						$TargetGalaxy     = doquery( $QryTargetGalaxy, 'galaxy', true);
    						$CristalDebris    = $TargetGalaxy['crystal'];
    						$SpyToolDebris    = $LS * 300;
    
    						$MaterialsInfo    = SpyTarget ( $TargetPlanet, 0, $lang['sys_spy_maretials'] );
    						$Materials        = $MaterialsInfo['String'];
    
    						$PlanetFleetInfo  = SpyTarget ( $TargetPlanet, 1, $lang['sys_spy_fleet'] );
    						$PlanetFleet      = $Materials;
    						$PlanetFleet     .= $PlanetFleetInfo['String'];
    
    						$PlanetDefenInfo  = SpyTarget ( $TargetPlanet, 2, $lang['sys_spy_defenses'] );
    						$PlanetDefense    = $PlanetFleet;
    						$PlanetDefense   .= $PlanetDefenInfo['String'];
    
    						$PlanetBuildInfo  = SpyTarget ( $TargetPlanet, 3, $lang['tech'][0] );
    						$PlanetBuildings  = $PlanetDefense;
    						$PlanetBuildings .= $PlanetBuildInfo['String'];
    
    						$TargetTechnInfo  = SpyTarget ( $TargetUser, 4, $lang['tech'][100] );
    						$TargetTechnos    = $PlanetBuildings;
    						$TargetTechnos   .= $TargetTechnInfo['String'];
    
    						$TargetForce      = ($PlanetFleetInfo['Count'] * $LS) / 4;
    
    						if ($TargetForce > 100) {
    							$TargetForce = 100;
    						}
    						$TargetChances = rand(0, $TargetForce);
    						$SpyerChances  = rand(0, 100);
    						if ($TargetChances >= $SpyerChances) {
    							$DestProba = sprintf( $lang['sys_mess_spy_lostproba'], $TargetChances);
    						} elseif ($TargetChances < $SpyerChances) {
    							$DestProba = "<font color=\"red\">".$lang['sys_mess_spy_destroyed']."</font>";
    						}
    						$AttackLink = "<center>";
    						$AttackLink .= "<a href=\"fleet.php?galaxy=". $FleetRow['fleet_end_galaxy'] ."&system=". $FleetRow['fleet_end_system'] ."";
    						$AttackLink .= "&planet=".$FleetRow['fleet_end_planet']."";
    						$AttackLink .= "&target_mission=1";
    						$AttackLink .= " \">". $lang['type_mission'][1] ."";
    						$AttackLink .= "</a></center>";
    
    
    						$MessageEnd = "<center>".$DestProba."</center>";
    
    						$pT = ($TargetSpyLvl - $CurrentSpyLvl);
    						$pW = ($CurrentSpyLvl - $TargetSpyLvl);
    						if ($TargetSpyLvl > $CurrentSpyLvl) {
    							$ST = ($LS - pow($pT, 2));
    						}
    						if ($CurrentSpyLvl > $TargetSpyLvl) {
    							$ST = ($LS + pow($pW, 2));
    						}
    						if ($TargetSpyLvl == $CurrentSpyLvl) {
    							$ST = $CurrentSpyLvl;
    						}
    						if ($ST <= "1") {
    							$SpyMessage = $Materials."<br />".$AttackLink.$MessageEnd;
    						}
    						if ($ST == "2") {
    							$SpyMessage = $PlanetFleet."<br />".$AttackLink.$MessageEnd;
    						}
    						if ($ST == "4" or $ST == "3") {
    							$SpyMessage = $PlanetDefense."<br />".$AttackLink.$MessageEnd;
    						}
    						if ($ST == "5" or $ST == "6") {
    							$SpyMessage = $PlanetBuildings."<br />".$AttackLink.$MessageEnd;
    						}
    						if ($ST >= "7") {
    							$SpyMessage = $TargetTechnos."<br />".$AttackLink.$MessageEnd;
    						}
    
    						SendSimpleMessage ( $FleetRow['owner_userid'], '', $FleetRow['fleet_start_time'], 0, $lang['sys_mess_qg'], $lang['sys_mess_spy_report'], $SpyMessage);
    
    						$TargetMessage  = $lang['sys_mess_spy_ennemyfleet'] ." ". $CurrentPlanet['name'];
    						$TargetMessage .= "<a href=\"galaxy.php?mode=3&galaxy=". $CurrentPlanet["galaxy"] ."&system=". $CurrentPlanet["system"] ."\">";
    						$TargetMessage .= "[". $CurrentPlanet["galaxy"] .":". $CurrentPlanet["system"] .":". $CurrentPlanet["planet"] ."]</a> ";
    						$TargetMessage .= $lang['sys_mess_spy_seen_at'] ." ". $TargetPlanet['name'];
    						$TargetMessage .= " [". $TargetPlanet["galaxy"] .":". $TargetPlanet["system"] .":". $TargetPlanet["planet"] ."].";
    
    						SendSimpleMessage ( $FleetRow['target_userid'], '', $FleetRow['fleet_start_time'], 0, $lang['sys_mess_spy_control'], $lang['sys_mess_spy_activity'], $TargetMessage);
    
    					}
    					if ($TargetChances >= $SpyerChances) {
    						$QryUpdateGalaxy  = "UPDATE {{table}} SET ";
    						$QryUpdateGalaxy .= "`crystal` = `crystal` + '". (0 + $SpyToolDebris) ."' ";
    						$QryUpdateGalaxy .= "WHERE `id_planet` = '". $TargetPlanet['id'] ."';";
    						doquery( $QryUpdateGalaxy, 'galaxy');
    
    						doquery("DELETE FROM {{table}} WHERE `fleet_id` = '". $FleetRow["fleet_id"] ."';", 'fleets');
    					} else {
    						doquery("UPDATE {{table}} SET `fleet_mess` = '1' WHERE `fleet_id` = '". $FleetRow["fleet_id"] ."';", 'fleets');
    					}
    				}
    			} else {
    				// Retour de sondes
    				if ($FleetRow['fleet_end_time'] <= time()) {
    					RestoreFleetToPlanet ( $FleetRow, true );
    					doquery("DELETE FROM {{table}} WHERE `fleet_id` = ". $FleetRow["fleet_id"], 'fleets');
    				}
    			}
    		}
    	}*/
}
Exemplo n.º 4
0
/**
* This file manages the output from the battle, it formats the cr, it makes the debris field, and then sends the fleets home.
* Here is the expected imput
	$results = array(
		[debrcry] => num
		[debrmet] => num
		[attlost] => num
		[deflost] => num
		[won]	 => char //(d)raw, (a)ttacker ,(v)defender
		[data] => array(
			[$roundno] => array(
				[attfires] => num
				[attpower] => num
				[attblock] => num
				[deffires] => num
				[defpower] => num
				[defblock] => num
				[attack_fleets] => array(
					[$fleetid] => array(
	either:				[$shiptype] => array('count' => num)
	or:					[$shiptype] => num
					)
				)
				[defend_fleets] => array(
					[$fleetid] => array(
	either:				[$shiptype] => array('count' => num)
	or:					[$shiptype] => num
					)
				)
			)
		)
	)
*/
function ManageCR($results, $CurrentPlanet)
{
    global $resource, $lang, $CombatCaps, $pricelist, $reslist;
    //The usual...
    $parse = $lang;
    //This will be poulated with planet and user data later.
    $fleets = array();
    $permafleets = array();
    //Loop through the rounds:
    $parse['rounds'] = '';
    foreach ($results['data'] as $roundno => $round) {
        $rparse = array();
        //List attackers and defenders fleets.
        $rparse['attackers'] = '';
        foreach ($round['attack_fleets'] as $id => $attacker) {
            //Lets get some info about this guy
            if ($roundno == 0) {
                $fleets[$id] = array();
                $fleets[$id]['side'] = 'a';
                if ($id > 0) {
                    $fleets[$id]['user'] = doquery("SELECT * FROM {{table}} WHERE `id` = (SELECT `owner_userid` FROM {{prefix}}fleets WHERE `fleet_id` = '" . idstring($id) . "') LIMIT 1 ;", 'users', true);
                } else {
                    $fleets[$id]['user'] = doquery("SELECT * FROM {{table}} WHERE `{{table}}`.`id` = '" . idstring($CurrentPlanet['id_owner']) . "' LIMIT 1 ;", 'users', true);
                }
            }
            $aparse = $lang;
            $aparse['td_types'] = '';
            $aparse['td_count'] = '';
            $aparse['td_weapons'] = '';
            $aparse['td_shields'] = '';
            $aparse['td_armour'] = '';
            $aparse['weap_pc'] = $fleets[$id]['user'][$resource[109]] * 10;
            $aparse['shield_pc'] = $fleets[$id]['user'][$resource[111]] * 10;
            $aparse['hull_pc'] = $fleets[$id]['user'][$resource[110]] * 10;
            $aparse['mode'] = 'attacker';
            $aparse['name'] = $lang['Attacker'] . " " . $fleets[$id]['user']['username'] . " <a>[" . $fleets[$id]['user']['galaxy'] . ":" . $fleets[$id]['user']['system'] . ":" . $fleets[$id]['user']['planet'] . "]</a>";
            foreach ($attacker as $id => $count) {
                if (is_array($count)) {
                    $count = $count['count'];
                }
                $aparse['td_types'] .= "\t\t\t\t\t\t\t\t\t\t<th class=\"textGrow\">" . $lang['cr_names'][$id] . "</th>\n";
                $aparse['td_count'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($count) . "</td>\n";
                $aparse['td_weapons'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($CombatCaps[$id]['attack']) . "</td>\n";
                $aparse['td_shields'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($CombatCaps[$id]['shield']) . "</td>\n";
                $aparse['td_armour'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($pricelist[$id]['metal'] + $pricelist[$id]['crystal']) . "</td>\n";
            }
            $rparse['attackers'] .= parsetemplate(gettemplate('fleet/combatattacker'), $aparse);
        }
        $rparse['defenders'] = '';
        foreach ($round['defend_fleets'] as $id => $defender) {
            //Lets get some info about this guy
            if ($roundno == 0) {
                $fleets[$id] = array();
                $fleets[$id]['side'] = 'd';
                if ($id > 0) {
                    $fleets[$id]['user'] = doquery("SELECT * FROM {{table}} WHERE `id` = (SELECT `owner_userid` FROM {{prefix}}fleets WHERE `fleet_id` = '" . idstring($id) . "') LIMIT 1 ;", 'users', true);
                } else {
                    $fleets[$id]['user'] = doquery("SELECT * FROM {{table}} WHERE `{{table}}`.`id` = '" . idstring($CurrentPlanet['id_owner']) . "' LIMIT 1 ;", 'users', true);
                }
            }
            $aparse = $lang;
            $aparse['td_types'] = '';
            $aparse['td_count'] = '';
            $aparse['td_weapons'] = '';
            $aparse['td_shields'] = '';
            $aparse['td_armour'] = '';
            $aparse['weap_pc'] = $fleets[$id]['user'][$resource[109]] * 10;
            $aparse['shield_pc'] = $fleets[$id]['user'][$resource[111]] * 10;
            $aparse['hull_pc'] = $fleets[$id]['user'][$resource[110]] * 10;
            $aparse['mode'] = 'defender';
            $aparse['name'] = $lang['Defender'] . " " . $fleets[$id]['user']['username'] . " <a>[" . $fleets[$id]['user']['galaxy'] . ":" . $fleets[$id]['user']['system'] . ":" . $fleets[$id]['user']['planet'] . "]</a>";
            foreach ($defender as $id => $count) {
                if (is_array($count)) {
                    $count = $count['count'];
                }
                $aparse['td_types'] .= "\t\t\t\t\t\t\t\t\t\t<th class=\"textGrow\">" . $lang['cr_names'][$id] . "</th>\n";
                $aparse['td_count'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($count) . "</td>\n";
                $aparse['td_weapons'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($CombatCaps[$id]['attack']) . "</td>\n";
                $aparse['td_shields'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($CombatCaps[$id]['shield']) . "</td>\n";
                $aparse['td_armour'] .= "\t\t\t\t\t\t\t\t\t\t<td>" . pretty_number($pricelist[$id]['metal'] + $pricelist[$id]['crystal']) . "</td>\n";
            }
            $rparse['defenders'] .= parsetemplate(gettemplate('fleet/combatattacker'), $aparse);
        }
        //We need to keep a note on who is in the battle, as well as showing any destroyed fleets.
        $peeps = array(array(), array());
        foreach ($fleets as $id => $array) {
            //We need a list of members for the title
            if ($roundno == 0) {
                if ($array['side'] == 'a') {
                    $peeps[0][] = $array['user']['username'];
                } else {
                    $peeps[1][] = $array['user']['username'];
                }
                $permafleets = $fleets;
            }
            //Look for fleets which are no more and list them as destroyed.
            if (!(in_array($id, array_keys($round['defend_fleets'])) || in_array($id, array_keys($round['attack_fleets'])))) {
                if ($array['side'] == 'a') {
                    $rparse['attackers'] .= '
		<td class="round_attacker textCenter"> 
			<table cellpadding="0" cellspacing="0"> 
				<tr>
					<td class="newBack"> 
						<center> 
							<span class="destroyed textBeefy">' . $lang['Attacker'] . ' ' . $array['user']['username'] . ' ' . $lang['destroyed'] . '.</span> 
						</center> 
					</td> 
				</tr> 
			</table> 
		</td>';
                } else {
                    $rparse['defenders'] .= '
		<td class="round_defender textCenter"> 
			<table cellpadding="0" cellspacing="0"> 
				<tr>
					<td class="newBack"> 
						<center> 
							<span class="destroyed textBeefy">' . $lang['Defender'] . ' ' . $array['user']['username'] . ' ' . $lang['destroyed'] . '.</span> 
						</center> 
					</td> 
				</tr> 
			</table> 
		</td>';
                }
                //If its been destroyed, we only want to show the destroyed message once, so remove the destroyed fleets.
                unset($fleets[$id]);
            }
        }
        //The round info, if its rounf one then we introduce the battle, otherwise its shots fired.
        if ($roundno == 0) {
            $rparse['roundinfo'] = "\t\t<p class=\"start\">" . sprintf($lang['report_start'], date("j.n.Y H:i:s")) . "</p>\n\t\t<p class=\"start opponents\">" . implode(', ', $peeps[0]) . ' ' . $lang['report_vs'] . ' ' . implode(', ', $peeps[1]) . "</p>\n";
        } else {
            $rparse['roundinfo'] = sprintf($lang['report_rinfo'], pretty_number($round['attfires']), pretty_number($round['attpower']), pretty_number($round['defblock']), pretty_number($round['deffires']), pretty_number($round['defpower']), pretty_number($round['attblock']));
        }
        $parse['rounds'] .= parsetemplate(gettemplate('fleet/combatround'), $rparse);
    }
    //Phew, lets deal with all the fleets:
    $end = $results['data'][sizeof($results['data']) - 1];
    $owners = array();
    foreach ($permafleets as $id => $array) {
        if ($id == 0) {
            //This is the planet...
            $set = array();
            foreach (array_merge($reslist['dbattle'], $reslist['fleet']) as $e) {
                $count = $end['defend_fleets'][0][$e];
                if (is_array($count)) {
                    $count = $count['count'];
                }
                if ($count > 0) {
                    $set[] = '`' . $resource[$e] . '` = \'' . idstring($count) . '\'';
                } else {
                    $set[] = '`' . $resource[$e] . '` = 0';
                }
            }
            doquery("UPDATE {{table}} SET " . implode(', ', $set) . " WHERE `id` = '" . $CurrentPlanet['id'] . "' LIMIT 1 ;", 'planets', true);
            //Note the user
            $owners[] = idstring($CurrentPlanet['id_owner']);
        } else {
            if ($array['side'] == 'a') {
                $mode = 'attack';
            } else {
                $mode = 'defend';
            }
            $fleetarray = array();
            $fleetcount = 0;
            foreach ($end[$mode . '_fleets'][$id] as $ship => $count) {
                if (is_array($count)) {
                    $count = $count['count'];
                }
                $fleetarray[] = idstring($ship) . ',' . idstring($count);
                $fleetcount += idstring($count);
            }
            $fleetarray = implode(';', $fleetarray);
            $fleetrow = doquery("SELECT * FROM {{table}} WHERE `fleet_id` = '" . idstring($id) . "' ;", 'fleets', true);
            $permafleets[$id]['row'] = $fleetrow;
            doquery("UPDATE {{table}} SET `array` = '" . $fleetarray . "', `shipcount` = '" . $fleetcount . "' WHERE `partner_fleet` = '" . idstring($id) . "' LIMIT 1 ;", 'fleets', false);
            DeleteFleet($id);
            $owners[] = idstring($fleetrow['owner_userid']);
        }
    }
    //Who won?
    if ($results['won'] == 'a') {
        //Need to deal with raiding.
        $stealmax = array($CurrentPlanet['metal'] * MAX_ATTACK_RAID, $CurrentPlanet['crystal'] * MAX_ATTACK_RAID, $CurrentPlanet['deuterium'] * MAX_ATTACK_RAID);
        //How much cargo space do we have?
        $cargo = array('total' => 0);
        foreach ($end['attack_fleets'] as $id => $attacker) {
            $cargo[$id] = 0;
            foreach ($attacker as $ship => $count) {
                if (is_array($count)) {
                    $count = $count['count'];
                }
                $space = $pricelist[$ship]['capacity'] * $count;
                $space -= $permafleets[$id]['row']['metal'];
                $space -= $permafleets[$id]['row']['crystal'];
                $space -= $permafleets[$id]['row']['deuterium'];
                if ($space > 0) {
                    $cargo[$id] += $space;
                    $cargo['total'] += $pricelist[$ship]['capacity'] * $count;
                }
            }
        }
        //So how much can we take?
        $totaltake = $stealmax[0] + $stealmax[1] + $stealmax[2];
        //Is there enough res to go around?
        if ($totaltake > $cargo['total']) {
            //We can fill all the cargo holds in the ratios:
            $ratio_m = $stealmax[0] / $totaltake;
            $ratio_c = $stealmax[1] / $totaltake;
            $ratio_d = $stealmax[2] / $totaltake;
        } else {
            //We can take the following ratios of resources: (nb its a bit late, so I haven't worked out why the below works but basically the $totaltake cancels so I just removed it)
            $ratio_m = $stealmax[0] / $cargo;
            $ratio_c = $stealmax[1] / $cargo;
            $ratio_d = $stealmax[2] / $cargo;
        }
        //Right lets start filling up the fleets:
        $stolen = array(0, 0, 0);
        foreach ($cargo as $id => $space) {
            if ($id != 'total') {
                $take_m = floor($ratio_m * $space);
                $take_c = floor($ratio_c * $space);
                $take_d = floor($ratio_d * $space);
                $stolen[0] += $take_m;
                $stolen[1] += $take_c;
                $stolen[2] += $take_d;
                doquery("UPDATE {{table}} SET `metal` = `metal` + '" . $take_m . "', `crystal` = `crystal` + '" . $take_c . "', `deuterium` = `deuterium` + '" . $take_d . "' WHERE `partner_fleet` = '" . idstring($id) . "' LIMIT 1 ;", 'fleets', false);
            }
        }
        $parse['result'] = sprintf($lang['A_won'], pretty_number($stolen[0]), $lang['Metal'], pretty_number($stolen[1]), $lang['Crystal'], pretty_number($stolen[2]), $lang['Deuterium']);
    } elseif ($results['won'] == 'v') {
        $parse['result'] = $lang['D_won'];
    } else {
        $results['won'] = 'd';
        $parse['result'] = $lang['Draw'];
    }
    //Results, attlost, defost debris ect.
    $parse['alost'] = sprintf($lang['AttLost'], pretty_number($results['attlost']));
    $parse['dlost'] = sprintf($lang['DefLost'], pretty_number($results['deflost']));
    $parse['debris'] = sprintf($lang['DebrisF'], pretty_number($results['debrmet']), $lang['Metal'], pretty_number($results['debrcry']), $lang['Crystal']);
    //Now the exiting bit!!! Moons stuff
    $debris_pc = floor(($results['debrmet'] + $results['debrcry']) / DEBRIS_PER_PERCENT);
    if ($debris_pc > MIN_MOON_PERCENT) {
        if ($debris_pc > MAX_MOON_PERCENT) {
            $debris_pc = MAX_MOON_PERCENT;
        }
        $parse['moon'] = sprintf($lang['MoonChance'], $debris_pc . '%');
        //So does he get a moon?
        $need = rand(0, 100);
        if ($debris_pc > $nees) {
            //Got a moon
            $pl_name = $CurrentPlanet['name'] . ' [' . $CurrentPlanet['galaxy'] . ':' . $CurrentPlanet['system'] . ':' . $CurrentPlanet['planet'] . ']';
            $parse['moon_got'] = sprintf($lang['GotMoon'], $pl_name);
            AddMoon($CurrentPlanet['galaxy'], $CurrentPlanet['system'], $CurrentPlanet['planet']);
        }
    }
    //Now we need to generate the report:
    $report = parsetemplate(gettemplate('fleet/combatreport'), $parse);
    //Add the report to the database
    doquery("INSERT INTO {{table}} (`report`, `owners`, `wonby`, `damage`, `time`) VALUES ('" . mysql_real_escape_string($report) . "', '" . implode(",", $owners) . "', '" . $results['won'] . "', '" . ($results['attlost'] + $results['deflost']) . "', '" . time() . "');", 'cr', false);
    //Now we need to message the user...
    $message = "<a href=\"./?page=report&raport=" . $rid . "\" target=\"_new\"><center>";
    $message2 = "<a href=\"./?page=report&raport=" . $rid . "\" target=\"_new\"><center>";
    if ($results['won'] == 'a') {
        $message .= "<font color=\"green\">";
        $message2 .= "<font color=\"red\">";
    } elseif ($results['won'] == 'v') {
        $message .= "<font color=\"red\">";
        $message2 .= "<font color=\"green\">";
    } else {
        $message .= "<font color=\"orange\">";
        $message2 .= "<font color=\"orange\">";
    }
    $message .= $lang['fleet_1_tit'] . " [" . $CurrentPlanet['galaxy'] . ":" . $CurrentPlanet['system'] . ":" . $CurrentPlanet['planet'] . "] </font></a>";
    $message2 .= $lang['fleet_1_tit'] . " [" . $CurrentPlanet['galaxy'] . ":" . $CurrentPlanet['system'] . ":" . $CurrentPlanet['planet'] . "] </font></a>";
    PM($FleetRow['owner_userid'], 0, $message, $lang['fleet_1_tit'], $lang['fleet_control'], 2);
    PM($FleetRow['target_userid'], 0, $message2, $lang['fleet_1_tit'], $lang['fleet_control'], 2);
}
Exemplo n.º 5
0
     //Does this person actually want to join the alliance?
     if ($CurrentUser['ally_request'] == $user['ally_id']) {
         //Are we accepting or rejecting
         if ($_GET['action'] == 'acc') {
             doquery("UPDATE {{table}} SET `ally_id` = '" . $user['ally_id'] . "' , `ally_name` = '" . $user['ally_name'] . "' , `ally_rank` = '0' , `ally_rank_name` = 'Newbie' , `ally_register_time` = '" . time() . "' , `ally_request` = '0' WHERE `id` = '" . $appid . "' AND `ally_request` = '" . $allyrow['id'] . "' LIMIT 1 ;", 'users');
             //If it worked
             if (mysql_affected_rows() == 1) {
                 doquery("UPDATE {{table}} SET `ally_members` = `ally_members` + 1 WHERE `id` = '" . $user['ally_id'] . "' LIMIT 1 ;", 'alliance');
             }
         } else {
             doquery("UPDATE {{table}} SET `ally_request` = 0 WHERE `id` = '" . $appid . "' LIMIT 1 ;", 'users');
         }
         //Do we have a message to send to the user?
         if (strlen($_GET['message']) > 0) {
             $subject = $lang['YourApp'] . $allyrow['ally_name'];
             PM($appid, $user['id'], mysql_real_escape_string(htmlentities($_GET['message'])), $subject, $allyrow['ally_name'], 1);
         }
     }
 }
 //And display other apps as normal
 $apps = doquery("SELECT `id`,`username`,`ally_request_text` FROM {{table}} WHERE `ally_request` = '" . $user['ally_id'] . "' ;", 'users');
 if (mysql_num_rows($apps) > 0) {
     $parse['table'] = "\t\t\t<table class=\"members\">\n";
     $parse['table'] .= "\t\t\t\t<tr class=\"alt\">\n";
     $parse['table'] .= "\t\t\t\t\t<th class=\"nr\">#</td>\n";
     $parse['table'] .= "\t\t\t\t\t<th class=\"desc\">Name:</td>\n";
     $parse['table'] .= "\t\t\t\t\t<th class=\"desc\">Application date:</td>\n";
     $parse['table'] .= "\t\t\t\t\t<th class=\"action\">Action</td>\n";
     $parse['table'] .= "\t\t\t\t</tr>\n\n";
     $n = 0;
     while ($row = FetchArray($apps)) {
Exemplo n.º 6
0
function MissionCaseColonisation($FleetRow)
{
    global $lang, $resource, $formulas;
    //Get the current user (note it must be $currentUser for the $formulas eval'd code to work, see includes/formulas.php
    $CurrentUser = doquery("SELECT * FROM {{table}} WHERE `id` = '" . idstring($FleetRow['owner_userid']) . "' LIMIT 1 ;", 'users', true);
    //How many planets do we have?
    $userplanets = mysql_num_rows(doquery("SELECT `id` FROM {{table}} WHERE `id_owner` = '" . $CurrentUser['id'] . "' AND `planet_type` = '1'", 'planets'));
    //How many planets are allowed?
    $maxplanets = eval($formulas['max_planets_c']);
    //If we have less than (but not equal to) the max planets count.
    if ($userplanets < $maxplanets) {
        //Now the slightly trickbit, as we were not messing around with gal sys and planet in the database we now had to have a numeric id for the gsp.
        $g = strlen(MAX_GALAXY_IN_WORLD);
        $s = strlen(MAX_SYSTEM_IN_GALAXY);
        $p = strlen(MAX_PLANET_IN_SYSTEM);
        $galaxy = substr($FleetRow['target_id'], 0, $g) * 1;
        $system = substr($FleetRow['target_id'], $g, $s) * 1;
        $planet = substr($FleetRow['target_id'], $g + $s, $p) * 1;
        unset($g, $s, $p);
        //Check that these planets are within the allowed range
        if ($CurrentUser[$resource[124]] < 4) {
            $minpos = 4;
        } elseif ($CurrentUser[$resource[124]] < 6) {
            $minpos = 3;
        } elseif ($CurrentUser[$resource[124]] < 8) {
            $minpos = 2;
        } else {
            $minpos = 1;
        }
        $maxpos = MAX_PLANET_IN_SYSTEM + 1 - $minpos;
        if ($planet >= $minpos && $planet <= $maxpos) {
            //Now get the target position
            $TargetAdress = sprintf($lang['sys_adress_planet'], $galaxy, $system, $planet);
            //See if we have a planet here already?
            $cur = doquery("SELECT `id` FROM {{table}} WHERE `galaxy` = '" . $galaxy . "' AND `system` = '" . $system . "' AND `planet` = '" . $planet . "';", 'planets', true);
            if ($cur['id'] > 0) {
                $message = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_notfree'];
                PM($CurrentUser['id'], 0, $message, $lang['sys_colo_mess_report'], $lang['sys_colo_mess_from'], 2);
            } else {
                //No planet lets carry on.
                if (CreateOnePlanetRecord($galaxy, $system, $planet, $CurrentUser['id'], $lang['sys_colo_defaultname'], false)) {
                    //Message them that the planet has been made.
                    $message = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_allisok'];
                    PM($CurrentUser['id'], 0, $message, $lang['sys_colo_mess_report'], $lang['sys_colo_mess_from'], 2);
                    //If there is more than just a colony ship then we should put that fleet on the planet.
                    if ($FleetRow['shipcount'] > 0) {
                        $fleet = explode(";", $FleetRow['array']);
                        $sql = "";
                        $upd = 0;
                        foreach ($fleet as $info) {
                            if (strlen($info) > 0) {
                                $ship = explode(",", $info);
                                if ($ship[0] == 208) {
                                    $ship[1]--;
                                }
                                if ($ship[1] > 0) {
                                    $sql .= "`" . $resource[$ship[0]] . "` = '" . idstring($ship[1]) . "' , ";
                                    $upd += $ship[1];
                                }
                            }
                        }
                        if ($upd > 0 && strlen(substr_replace($sql, '', -2)) > 3) {
                            doquery("UPDATE {{table}} SET " . substr_replace($sql, '', -2) . " WHERE `galaxy` = '" . $galaxy . "' AND `system` = '" . $system . "' AND `planet` = '" . $planet . "' ;", 'planets');
                        }
                    }
                    //And put resources on the planet.
                    doquery("UPDATE {{table}} SET `metal` = '" . $FleetRow['metal'] . "' , `crystal` = '" . $FleetRow['crystal'] . "' , `deuterium` = '" . $FleetRow['deuterium'] . "'  WHERE `galaxy` = '" . $galaxy . "' AND `system` = '" . $system . "' AND `planet` = '" . $planet . "' LIMIT 1 ;", 'planets');
                } else {
                    //We could not make the colony
                    $message = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_badpos'];
                    PM($CurrentUser['id'], 0, $message, $lang['sys_colo_mess_report'], $lang['sys_colo_mess_from'], 2);
                }
            }
        } else {
            //We don't have astro-physics high enough
            $message = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_outside_range'] . $lang['sys_colo_slots'] . "[" . $minpos . "-" . $maxpos . "]!";
            PM($CurrentUser['id'], 0, $message, $lang['sys_colo_mess_report'], $lang['sys_colo_mess_from'], 2);
        }
    } else {
        //We don't have astro-physics high enough
        $message = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_maxcolo'] . $maxplanets . $lang['sys_colo_planet'];
        PM($CurrentUser['id'], 0, $message, $lang['sys_colo_mess_report'], $lang['sys_colo_mess_from'], 2);
    }
}
Exemplo n.º 7
0
        $QryUpdateUser .= "WHERE ";
        $QryUpdateUser .= "`id` = '" . $NewUser['id'] . "' ";
        $QryUpdateUser .= "LIMIT 1;";
        doquery($QryUpdateUser, 'users');
        // Mise a jour du nombre de joueurs inscripts
        doquery("UPDATE {{table}} SET `config_value` = `config_value` + '1' WHERE `config_name` = 'users_amount' LIMIT 1;", 'config');
        //PM users
        $Message = $lang['thanksforregistry'];
        if (sendpassemail($_POST['email'], $newpass, $UserName, $validation_code)) {
            $Message .= " (" . htmlentities($_POST["email"]) . ")";
        } else {
            $Message .= " (" . htmlentities($_POST["email"]) . ")";
            $Message .= "<br><br>" . $lang['error_mailsend'] . " <b>" . $newpass . "</b>";
        }
        $Message = str_replace("{game}", $game_config['game_name'], $lang['WelcomePM']);
        PM($NewUser['id'], 0, $Message, $lang['Welcome'], $game_config['game_name'], 0);
        //message( $Message, $lang['reg_welldone']);
        echo "<center><font color=\"white\">";
        echo "<u>" . $lang['reg_welldone'] . "</u><br /><br />";
        echo $Message . "</font></center>";
        die;
    }
} else {
    // Afficher le formulaire d'enregistrement
    header("Location: ../");
    die;
}
// -----------------------------------------------------------------------------------------------------------
// History version
// 1.0 - Version originelle
// 1.1 - Menage + rangement + utilisation fonction de creation planete nouvelle generation
Exemplo n.º 8
0
/**
 * SetNextQueueElementOnTop.php
 *
 *
 * @version 1.0
 * @copyright 2008 by Chlorel for XNova
 */
function SetNextQueueElementOnTop(&$CurrentPlanet, $CurrentUser)
{
    global $lang, $resource;
    // Garde fou ... Si le temps de construction n'est pas 0 on ne fait rien !!!
    if ($CurrentPlanet['b_building'] == 0) {
        $CurrentQueue = $CurrentPlanet['b_building_id'];
        if ($CurrentQueue != 0) {
            $QueueArray = explode(";", $CurrentQueue);
            $Loop = true;
            while ($Loop == true) {
                $ListIDArray = explode(",", $QueueArray[0]);
                $Element = $ListIDArray[0];
                $Level = $ListIDArray[1];
                $BuildTime = $ListIDArray[2];
                $BuildEndTime = $ListIDArray[3];
                $BuildMode = $ListIDArray[4];
                // pour savoir si on construit ou detruit
                $HaveNoMoreLevel = false;
                if ($BuildMode == 'destroy') {
                    $ForDestroy = true;
                } else {
                    $ForDestroy = false;
                }
                $HaveRessources = IsElementBuyable($CurrentUser, $CurrentPlanet, $Element, true, $ForDestroy);
                if ($ForDestroy) {
                    if ($CurrentPlanet[$resource[$Element]] == 0) {
                        $HaveRessources = false;
                        $HaveNoMoreLevel = true;
                    }
                }
                if ($HaveRessources == true) {
                    $Needed = GetBuildingPrice($CurrentUser, $CurrentPlanet, $Element, true, $ForDestroy);
                    $CurrentPlanet['metal'] -= $Needed['metal'];
                    $CurrentPlanet['crystal'] -= $Needed['crystal'];
                    $CurrentPlanet['deuterium'] -= $Needed['deuterium'];
                    $CurrentTime = time();
                    $BuildEndTime = $BuildEndTime;
                    $NewQueue = implode(";", $QueueArray);
                    if ($NewQueue == "") {
                        $NewQueue = '0';
                    }
                    $Loop = false;
                } else {
                    $ElementName = $lang['tech'][$Element];
                    if ($HaveNoMoreLevel == true) {
                        $Message = sprintf($lang['sys_nomore_level'], $ElementName);
                    } else {
                        $Needed = GetBuildingPrice($CurrentUser, $CurrentPlanet, $Element, true, $ForDestroy);
                        $Message = sprintf($lang['sys_notenough_money'], $ElementName, pretty_number($CurrentPlanet['metal']), $lang['Metal'], pretty_number($CurrentPlanet['crystal']), $lang['Crystal'], pretty_number($CurrentPlanet['deuterium']), $lang['Deuterium'], pretty_number($Needed['metal']), $lang['Metal'], pretty_number($Needed['crystal']), $lang['Crystal'], pretty_number($Needed['deuterium']), $lang['Deuterium']);
                    }
                    PM($CurrentUser['id'], '', $Message, $lang['sys_buildlist_fail'], $lang['sys_buildlist'], 5);
                    array_shift($QueueArray);
                    $ActualCount = count($QueueArray);
                    if ($ActualCount == 0) {
                        $BuildEndTime = '0';
                        $NewQueue = '0';
                        $Loop = false;
                    }
                }
            }
            // while
        } else {
            $BuildEndTime = '0';
            $NewQueue = '0';
        }
        // Ecriture de la mise a jour dans la BDD
        $CurrentPlanet['b_building'] = $BuildEndTime;
        $CurrentPlanet['b_building_id'] = $NewQueue;
        $QryUpdatePlanet = "UPDATE {{table}} SET ";
        $QryUpdatePlanet .= "`metal` = '" . $CurrentPlanet['metal'] . "' , ";
        $QryUpdatePlanet .= "`crystal` = '" . $CurrentPlanet['crystal'] . "' , ";
        $QryUpdatePlanet .= "`deuterium` = '" . $CurrentPlanet['deuterium'] . "' , ";
        $QryUpdatePlanet .= "`b_building` = '" . $CurrentPlanet['b_building'] . "' , ";
        $QryUpdatePlanet .= "`b_building_id` = '" . $CurrentPlanet['b_building_id'] . "' ";
        $QryUpdatePlanet .= "WHERE ";
        $QryUpdatePlanet .= "`id` = '" . $CurrentPlanet['id'] . "';";
        doquery($QryUpdatePlanet, 'planets');
    }
    return;
}
Exemplo n.º 9
0
/**
 * MissionCaseDestroy.php
 *
 * @version 1.0
 * @copyright 2009 By MadnessRed for XNova Redesigned
 */
function MissionCaseDestroy($FleetRow, $CurrentPlanet)
{
    global $resource, $lang, $CombatCaps, $pricelist;
    //Get the fleet
    $fleet = array();
    foreach (explode(';', $FleetRow['array']) as $r) {
        $r = explode(',', $r);
        $fleet[$r[0]] = $r[1];
    }
    //Check we still have Deathstarts
    if ($fleet[214] > 0) {
        $destroyed = array(false, false);
        //Firstly is the moon destroyed:
        $chance_m = (100 - pow($moonsize, 0.5)) * pow($fleet[214], 0.5);
        if ($chance_m > mt_rand(0, 100)) {
            //Any fleet going to the moon should be recalled
            $tomoon = doquery("SELECT `fleet_id` FROM {{table}} WHERE `target_id` = '" . $CurrentPlanet['id'] . "' AND `fleet_mess` = '0' ;", 'fleets', false);
            while ($row = FetchArray($tomoon)) {
                $fleetrow = doquery("SELECT *, COUNT('fleet_id') AS `count` FROM {{table}} WHERE `fleet_id` = '" . idstring($row['fleet_id']) . "' AND `fleet_mess` = '0' AND `mission` <> '0' ;", 'fleets', true);
                //Check we found the fleet:
                if ($fleetrow['count'] == 1) {
                    //Incase script takes over a second, lets keep now constant.
                    $now = time();
                    //Duration in flight
                    $duration = $now - $fleetrow['departure'];
                    //ok, lets update the fleet
                    doquery("UPDATE {{table}} SET `departure` = '" . $now . "', `arrival` = '" . ($now + $duration) . "', `target_id` = '" . $fleetrow['owner_id'] . "', `target_userid` = '" . $fleetrow['owner_userid'] . "', `owner_id` = '" . $fleetrow['target_id'] . "', `owner_userid` = '" . $fleetrow['target_userid'] . "', `fleet_mess` = '1', `mission` = '0' WHERE `fleet_id` = '" . $fleetrow['fleet_id'] . "' ;", 'fleets', false);
                    //Remove any partner fleets
                    doquery("DELETE FROM {{table}} WHERE `partner_fleet` = '" . $fleetrow['fleet_id'] . "' ;", 'fleets', false);
                    //Update menus
                    doquery("UPDATE {{table}} SET `menus_update` = '" . time() . "' WHERE `id` = '" . $fleetrow['owner_userid'] . "' LIMIT 1 ;", 'users', false);
                }
            }
            //And fleets returning to the moon should go the planet
            $planet = doquery("SELECT `id` FROM {{table}} WHERE `galaxy` = '" . $CurrentPlanet['galaxy'] . "' AND `system` = '" . $CurrentPlanet['system'] . "' AND `planet` = '" . $CurrentPlanet['planet'] . "' AND `planet_type` = '1' LIMIT 1 ;", 'planets', true);
            doquery("UPDATE {{table}} SET `target_id` = '" . $planet['id'] . "' WHERE `target_id` = '" . $CurrentPlanet['id'] . "' ;", 'fleets', false);
            doquery("UPDATE {{table}} SET `owner_id` = '" . $planet['id'] . "' WHERE `owner_id` = '" . $CurrentPlanet['id'] . "' ;", 'fleets', false);
            //Delete the moon
            doquery("DELETE FROM {{table}} WHERE `id` = '" . $CurrentPlanet['id'] . "' LIMIT 1 ;", 'planets', false);
            //Mark it as destroyed for the message
            $destroyed[0] = true;
        }
        //Secondly are the Deathstars destroyed.
        $chance_k = 0.5 * pow($moonsize, 0.5);
        if ($chance_k > mt_rand(0, 100)) {
            //Are there any other ships in the fleet?
            if (array_sum($fleet) > $fleet[214]) {
                //Remove rips from the fleet
                unset($fleet[214]);
                //Compile fleet array
                $array = array();
                foreach ($fleet as $id => $c) {
                    $array[] = $id . "," . $c;
                }
                $array = implode(";", $array);
                //Update row
                doquery("UPDATE {{table}} SET `array` = '" . $array . "', `count` = `count` - '" . array_sum($fleet) . "' WHERE `fleet_id` = '" . $FleetRow['fleet_id'] . "' LIMIT 1 ;", 'fleets', false);
            } else {
                //Just remove the fleet
                DeleteFleet($FleetRow['fleet_id']);
            }
            //Mark it as destroyed for the message
            $destroyed[1] = true;
        }
        //Start the message
        $HomePlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $row['target_id'] . "' LIMIT 1 ;", 'planets', true);
        $message = '';
        $message .= sprintf($lang['fleet_9_mess1'], $HomePlanet['name'] . " [" . $HomePlanet['galaxy'] . ":" . $HomePlanet['system'] . ":" . $HomePlanet['planet'] . "]", "[" . $CurrentPlanet['galaxy'] . ":" . $CurrentPlanet['system'] . ":" . $CurrentPlanet['planet'] . "]");
        $message .= sprintf($lang['fleet_9_moon'], $chance_m . '%') . "<br />";
        $message .= sprintf($lang['fleet_9_rips'], $chance_k . '%') . "<br />";
        $message .= $lang['fleet_9_mess2'];
        //So what happen (for the message?)
        if ($destroyed[0] && $destroyed[1]) {
            //Both moon and RIPs destroyed
            $message .= $lang['fleet_9_messD'];
            $message .= $lang['fleet_9_messK'];
        } elseif ($destroyed[0]) {
            //Moon Destroyed
            $message .= $lang['fleet_9_messD'];
        } elseif ($destroyed[1]) {
            //RIPs destroyed
            $message .= $lang['fleet_9_messK'];
        } else {
            //Nothing destroyed
            $message .= $lang['fleet_9_messN'];
        }
        PM($FleetRow['owner_userid'], 0, $message, sprintf($lang['fleet_9_tit'], $CurrentPlanet['name']), $lang['fleet_control'], 2);
        PM($FleetRow['target_userid'], 0, $message, sprintf($lang['fleet_9_tit'], $CurrentPlanet['name']), $lang['fleet_control'], 2);
    }
}
Exemplo n.º 10
0
function ManageFleets($limit = 5)
{
    global $lang;
    getLang('fleet_management');
    //Lock the tables
    $tables = array('aks', 'cr', 'errors', 'messages', 'fleets', 'planets', 'users');
    foreach ($tables as $k => $v) {
        $tables[$k] = "``{{prefix}}" . $v . "`` WRITE";
    }
    doquery("LOCK TABLE " . implode(", ", $tables), "");
    //Get the fleets - ordered by their returning time
    $fleets = doquery("SELECT * FROM {{table}} WHERE (`arrival` + `hold_time`) < " . time() . " ORDER BY (`arrival` + `hold_time`) ASC LIMIT " . idstring($limit) . " ;", 'fleets');
    //If there are any fleets.
    if (mysql_num_rows($fleets) > 0) {
        include_once ROOT_PATH . 'includes/functions/MissionCaseStay.php';
        include_once ROOT_PATH . 'includes/functions/MissionCaseStayAlly.php';
        include_once ROOT_PATH . 'includes/functions/MissionCaseSpy.php';
        include_once ROOT_PATH . 'includes/functions/MissionCaseRecycling.php';
        include_once ROOT_PATH . 'includes/functions/MissionCaseDestroy.php';
        include_once ROOT_PATH . 'includes/functions/MissionCaseExpedition.php';
        include_once ROOT_PATH . 'includes/functions/MissionCaseColonisation.php';
        //Now loop through the fleets.
        while ($row = mysql_fetch_array($fleets)) {
            //Update the users menus if he is online:
            doquery("UPDATE {{table}} SET `menus_update` = '" . time() . "' WHERE `id` = '" . $row['owner_userid'] . "' LIMIT 1 ;", 'users', false);
            doquery("UPDATE {{table}} SET `menus_update` = '" . time() . "' WHERE `id` = '" . $row['target_userid'] . "' LIMIT 1 ;", 'users', false);
            //Now deal with the fleet
            if ($row["mission"] == 0 || $row["mission"] == 4) {
                //Fleet is returning home, just restore the fleet to the planet and delete it.
                DeleteFleet($row['fleet_id']);
                RestoreFleet($row);
                $StartPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $row['owner_id'] . "' LIMIT 1 ;", 'planets', true);
                $TargetPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $row['target_id'] . "' LIMIT 1 ;", 'planets', true);
                //Send the user a message
                $Message = sprintf($lang['fleet_return_m'], $StartPlanet['name'], "[" . $StartPlanet['galaxy'] . ":" . $StartPlanet['system'] . ":" . $StartPlanet['planet'] . "]", pretty_number($row['metal']), $lang['Metal'], pretty_number($row['crystal']), $lang['Crystal'], pretty_number($row['deuterium']), $lang['Deuterium']);
                PM($row['target_userid'], 0, $Message, $lang['fleet_return'], $lang['fleet_control'], 2);
            } else {
                switch ($row["mission"]) {
                    case 1:
                        if ($row["fleet_mess"] == 0) {
                            // Attack
                            doquery("UPDATE {{table}} SET `fleet_mess` = '3' WHERE `fleet_id` = '" . $row["fleet_id"] . "' LIMIT 1 ;", 'fleets', false);
                            require_once ROOT_PATH . 'includes/battle_engines/MissionCaseAttack_' . BATTLE_ENGINE . '.php';
                            include_once ROOT_PATH . 'includes/battle_engines/ManageCR.php';
                            $results = MissionCaseAttack($row);
                            $CurrentPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $row['target_id'] . "' LIMIT 1 ;", 'planets', true);
                            ManageCR($results, $CurrentPlanet);
                        }
                        break;
                    case 2:
                        // ACS Attack
                        // Wait, this fleet will be dealt with when the attack fleet arrives.
                        // Note that the return fleet won't exist until after the attack.
                        break;
                    case 3:
                        // Transport
                        DeleteFleet($row['fleet_id']);
                        //Send the res
                        RestoreRes($row);
                        //Now send messages to the players
                        $StartPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $row['owner_id'] . "' LIMIT 1 ;", 'planets', true);
                        $TargetPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $row['target_id'] . "' LIMIT 1 ;", 'planets', true);
                        $Message = sprintf($lang['fleet_3_yours'], $TargetPlanet['name'], "[" . $TargetPlanet['galaxy'] . ":" . $TargetPlanet['system'] . ":" . $TargetPlanet['planet'] . "]", pretty_number($row['metal']), $lang['Metal'], pretty_number($row['crystal']), $lang['Crystal'], pretty_number($row['deuterium']), $lang['Deuterium']);
                        PM($StartPlanet['id_owner'], 0, $Message, $lang['sys_mess_transport'], $lang['fleet_control'], 2);
                        if ($TargetPlanet['id_owner'] != $StartPlanet['id_owner']) {
                            $Message = sprintf($lang['fleet_3_allied'], $StartPlanet['name'], "[" . $StartPlanet['galaxy'] . ":" . $StartPlanet['system'] . ":" . $StartPlanet['planet'] . "]", $TargetPlanet['name'], "[" . $TargetPlanet['galaxy'] . ":" . $TargetPlanet['system'] . ":" . $TargetPlanet['planet'] . "]", pretty_number($row['metal']), $lang['Metal'], pretty_number($row['crystal']), $lang['Crystal'], pretty_number($row['deuterium']), $lang['Deuterium']);
                            PM($TargetPlanet['id_owner'], 0, $Message, $lang['sys_mess_transport'], $lang['fleet_control'], 2);
                        }
                        break;
                    case 4:
                        // Deploy (note that this is imposible so is really only here to avoid confusion)
                        DeleteFleet($row['fleet_id']);
                        break;
                    case 5:
                        // ACS Defend
                        // Wait, this fleet will be dealt with when the attack fleet arrives.
                        // Note that the return fleet won't exist until after the attack.
                        //DeleteFleet($row['fleet_id']);
                        break;
                    case 6:
                        // Espionage
                        DeleteFleet($row['fleet_id']);
                        MissionCaseSpy($row);
                        break;
                    case 7:
                        // Colonise
                        DeleteFleet($row['fleet_id']);
                        MissionCaseColonisation($row);
                        break;
                    case 8:
                        // Recycle
                        DeleteFleet($row['fleet_id']);
                        MissionCaseRecycling($row);
                        break;
                    case 9:
                        // Moon Destroy
                        $CurrentPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $row['target_id'] . "' LIMIT 1 ;", 'planets', true);
                        if ($row["fleet_mess"] == 0 && $CurrentPlanet['planet_type'] == 3) {
                            // Attack
                            doquery("UPDATE {{table}} SET `fleet_mess` = '3' WHERE `fleet_id` = '" . $row["fleet_id"] . "' LIMIT 1 ;", 'fleets', false);
                            require_once ROOT_PATH . 'includes/battle_engines/MissionCaseAttack_' . BATTLE_ENGINE . '.php';
                            include_once ROOT_PATH . 'includes/battle_engines/ManageCR.php';
                            $results = MissionCaseAttack($row);
                            ManageCR($results, $CurrentPlanet);
                            //And then destroy, if the fleet survived
                            if ($results['won'] == 'a') {
                                $nowfleet = doquery("SELECT * FROM {{table}} WHERE `partner_fleet` = '" . $row['fleet_id'] . "' LIMIT 1 ;", 'fleets', true);
                                MissionCaseDestruction($nowfleet, $CurrentPlanet);
                            }
                        }
                        DeleteFleet($row['fleet_id']);
                        break;
                    case 10:
                        // Missiles !!
                        DeleteFleet($row['fleet_id']);
                        MissileAttack($row);
                        break;
                    case 15:
                        // Expedition
                        DeleteFleet($row['fleet_id']);
                        MissionCaseExpedition($row);
                        break;
                    default:
                        DeleteFleet($row['fleet_id']);
                }
            }
        }
    }
    //Unlock tables
    doquery("UNLOCK TABLES", "");
}
Exemplo n.º 11
0
     $targetid = idstring($_GET['id']);
     //Get the recipient.
     $targetuser = doquery("SELECT `id`,`username`,`galaxy`,`system`,`planet` FROM {{table}} WHERE `id` = '" . $targetid . "' LIMIT 1;", 'users', true);
     //Check he exists
     if (!is_array($targetuser)) {
         message($lang['mess_no_owner'], $lang['mess_error']);
     }
     //Did they forget something?
     if ($_GET["subject"] && $_GET["text"]) {
         //Remove anything suspect.
         $message = trim(nl2br(strip_tags(addslashes($_GET['text']), '<br><a><i><p><u><table><td><tr><em><h1><h2><h3><h4><li>ul><ol><blockquote><img><span><font><tbody><sub><sup><flash><windowsmedia><object>')));
         $subject = trim(nl2br(strip_tags(addslashes($_GET['subject']), '<br><a><i><p><u><table><td><tr><em><h1><h2><h3><h4><li>ul><ol><blockquote><img><span><font><tbody><sub><sup><flash><windowsmedia><object>')));
         //Who should it says its from?
         $from = $user['username'] . " [" . $user['galaxy'] . ":" . $user['system'] . ":" . $user['planet'] . "]";
         //Now send the message
         PM($targetid, $user['id'], $message, $subject, $from);
         //Let them know it sent
         die("Message Sent");
     } else {
         //Tell then they forgot something
         //info($lang['mess_no_text_or_subject'],$lang['mess_error'],"./?page=write&to=".$targetid,"<<");
         die($lang['mess_error'] . ":<br />" . $lang['mess_no_text_or_subject']);
     }
     break;
 case 'delete':
     //messcat
     $messcat = intval(idstring($_GET['messcat']));
     if ($messcat == 666) {
         $status = '0';
     } else {
         $status = '1';
Exemplo n.º 12
0
/**
 * MissionCaseExpedition.php
 *
 * @version 1.0
 * @copyright 2008 By Chlorel for XNova
 */
function MissionCaseExpedition($FleetRow)
{
    global $lang, $resource, $pricelist;
    /*
    Outcomes:
    
    Find nothing.
    Find an Alien Virus, though nothing comes of this.
    Find some small "Pets", though nothing comes of this.
    Find Dark Matter.
    Have problems with the fleet, be fixed and come back.
    Find resources, but only as much as your fleet has cargo space for.
    Find a merchant from an alien world to trade with.
    Gain ships.
    Find an alien/pirate fleet and be attacked. A combat report is made.
    Find Solar Wind or a wormhole. Your fleet returns sooner.
    An unexpected back coupling in the energy spools of the engines hastened the expeditions return. The fleet returns home earlier than expected.
    Get lost. It will take your fleet longer to return.
    Get lost, your whole fleet will never return.
    */
    //Relative potential outcomes, these do not have to total anything, simple increase the value, if a value = 0, it wont ever happen, if nothing is twice as bit as virus its twice as likely to happen.
    $outcomes = array('nothing' => 3, 'find_dm' => 1, 'problems' => 1, 'resources' => 0, 'merchant' => 0, 'ships' => 0, 'aliens' => 0, 'wormhole' => 1, 'get_lost' => 1);
    $outcomes_total = array_sum($outcomes);
    $result = false;
    foreach ($outcomes as $event => $likelyhood) {
        $chance = $likelyhood / $outcomes_total * 100;
        if ($chance > mt_rand(0, 100)) {
            $result = $event;
            break;
        } else {
            $outcomes_total -= $likelyhood;
        }
    }
    //Theoretically if it got to the last event there should have been a 1 in 1 chance of getting it, but there is always a chance of rounding errors so to play it safe, if there was no event selected choose the default, nothing:
    if (!$result) {
        $result = 'nothing';
    }
    //OK, now we have to deal with whatever we gave him.
    switch ($result) {
        case 'find_dm':
            //Find Dark Matter.
            $amount = floor(pow(mt_rand(1000, 1000 * pow(MAX_DARKMATTER, 0.25)) / 1000, 4));
            $message = sprintf(rand_in_array($lang['fleet_15_dark']), $lang['Matter'], pretty_number($amount), $lang['Matter']);
            PM($FleetRow['owner_userid'], 0, $message, $lang['fleet_15_tit'], $lang['fleet_control'], 2);
            doquery("UPDATE {{table}} SET `matter` = `matter` + '" . $amount . "' WHERE `id` = '" . $FleetRow['owner_userid'] . "' LIMIT 1 ;", 'users', false);
            break;
        case 'problems':
            //Have problems with the fleet, be fixed and come back (delayed)
            //Add time to the fleet return time, and send a message.
            $delay = mt_rand(MIN_DELAY, MAX_DELAY);
            PM($FleetRow['owner_userid'], 0, rand_in_array($lang['fleet_15_problems']), $lang['fleet_15_tit'], $lang['fleet_control'], 2);
            doquery("UPDATE {{table}} SET `arrival` = `arrival` + '" . $delay . "' WHERE `partner_fleet` = '" . $FleetRow['fleet_id'] . "' LIMIT 1 ;", 'fleets', false);
            break;
        case 'resources':
            //Find resources, but only as much as your fleet has cargo space for.
            break;
        case 'merchant':
            //Find a merchant from an alien world to trade with.
            break;
        case 'ships':
            //Gain ships.
            break;
        case 'aliens':
            //Find an alien/pirate fleet and be attacked. A combat report is made.
            break;
        case 'wormhole':
            //Find Solar Wind or a wormhole. Your fleet returns sooner.
            //An unexpected back coupling in the energy spools of the engines hastened the expeditions return. The fleet returns home earlier than expected.
            //Add time to the fleet return time, and send a message.
            $gained = mt_rand(MIN_DELAY, MAX_DELAY);
            if ($FleetRow['arrival'] - $gained < time() + 2) {
                $gained = $FleetRow['arrival'] - time() - 2;
            }
            PM($FleetRow['owner_userid'], 0, rand_in_array($lang['fleet_15_wormhole']), $lang['fleet_15_tit'], $lang['fleet_control'], 2);
            doquery("UPDATE {{table}} SET `arrival` = `arrival` - '" . $gained . "' WHERE `partner_fleet` = '" . $FleetRow['fleet_id'] . "' LIMIT 1 ;", 'fleets', false);
            break;
        case 'get_lost':
            //Get lost, your whole fleet will never return.
            //This one is fairly simple, we just delete the return fleet and send a message
            DeletePartnerFleet($FleetRow['fleet_id']);
            PM($FleetRow['owner_userid'], 0, rand_in_array($lang['fleet_15_lost']), $lang['fleet_15_tit'], $lang['fleet_control'], 2);
            break;
        default:
            //Find nothing.
            //Find an Alien Virus, though nothing comes of this.
            //Find some small "Pets", though nothing comes of this.
            //Just send back a message, anyone one of the found nothing messages will do.
            PM($FleetRow['owner_userid'], 0, rand_in_array($lang['fleet_15_nothing']), $lang['fleet_15_tit'], $lang['fleet_control'], 2);
            break;
    }
}
Exemplo n.º 13
0
function GroupPM($recipricants, $from, $message, $subject = '', $sender = '', $type = 1)
{
    foreach ($recipricants as $to) {
        PM($to, $from, $message, $subject, $sender, $type);
    }
}
Exemplo n.º 14
0
function MissileAttack($FleetRow, $CurrentPlanet = false, $db = true)
{
    global $resource, $reslist, $pricelist, $CombatCaps, $lang;
    getLang('galaxy');
    //Star with a blank array
    $return = array();
    //Get the missiles, as there is on 1 type of ship...
    $missiles = explode(",", $FleetRow['fleet_array']);
    $missile_count = idstring($missiles[1]);
    //Get the planet
    if (!$CurrentPlanet) {
        $CurrentPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $FleetRow['target_id'] . "' LIMIT 1 ;", 'planets', true);
    }
    //Backup current planet, it will be needed
    $OriginalCurrentPlanet = $CurrentPlanet;
    //Get the armour
    foreach ($reslist['defense'] as $element) {
        $hull[$element] = ($pricelist[$element]['metal'] + $pricelist[$element]['crystal']) / 10;
    }
    //Now ipms will destroy some of the missiles
    //First get the defending power.
    if ($db) {
        $weapons = doquery("SELECT `username`,`" . $resource[109] . "` FROM {{table}} WHERE `id` = '" . $FleetRow['owner_userid'] . "' LIMIT 1 ;", 'users', true);
        $attackername = $weapons['username'];
        $weapons = $weapons[$resource[109]] / 10;
        $armour = doquery("SELECT `username`,`" . $resource[110] . "` FROM {{table}} WHERE `id` = '" . $FleetRow['target_userid'] . "' LIMIT 1 ;", 'users', true);
        $defendername = $armour['username'];
        $armour = $armour[0] / 10;
    } else {
        $weapons = $FleetRow['weap'];
        $armour = $FleetRow['arm'];
    }
    //Are the IPMs completely destroyed byt the ABMs?
    if ($missile_count >= $CurrentPlanet[$resource[502]]) {
        $missile_count -= $CurrentPlanet[$resource[502]];
        $return['abm_cost'] = $CurrentPlanet[$resource[502]];
    } else {
        $return['abm_cost'] = $missile_count;
        $missile_count = 0;
    }
    $CurrentPlanet[$resource[502]] -= $return['abm_cost'];
    //If there are no missiles left, battle over, lets go home
    if ($missile_count <= 0) {
        //there was no battle
        $return['battle'] = 'X';
    } else {
        //Get Attack strength
        $attack = $missile_count * $weapons * $CombatCaps[idstring($missiles[0])]['attack'];
        //Do we have a target
        if (idstring($FleetRow['target']) < 500 && in_array($FleetRow['target'], $reslist['defense'])) {
            //Get target
            $target = idstring($FleetRow['target']);
            $return['battle'][1]['target'] = $target;
            $return['battle'][1]['target_count'] = $CurrentPlanet[$resource[$target]];
            //Get defense from target
            $curdefense = $CurrentPlanet[$resource[$target]] * $armour * $hull[$target];
            $return['battle'][1]['target_defense'] = $curdefense;
            $return['battle'][1]['current_ipm_strength'] = $CombatCaps[idstring($missiles[0])]['attack'];
            $return['battle'][1]['current_attack'] = $attack;
            //Do we destroy is and take damage, or is it only partially destroyed?
            if ($attack >= $curdefense) {
                $attack -= $curdefense;
                $CurrentPlanet[$resource[$target]] = 0;
                $curdefense = 0;
            } else {
                $CurrentPlanet[$resource[$target]] = ceil(($curdefense - $attack) / $armour);
                $attack = 0;
            }
            //Return the results for this part.
            $return['battle'][1]['target_new_count'] = $CurrentPlanet[$resource[$target]];
        }
        //Do we still have missiles?
        if ($attack > 0) {
            //Attack left
            $return['battle'][2]['remaining_attack'] = $attack;
            //Get total defense
            $defence = array();
            foreach ($reslist['defense'] as $item) {
                if ($item < 500 && $CurrentPlanet[$resource[$item]]) {
                    $defence[$item] = $CurrentPlanet[$resource[$item]] * $armour * $hull[$item];
                }
            }
            //Work out current defense
            $curdefense = array_sum($defence);
            //Some return values
            $return['battle'][2]['defense'] = $defence;
            $return['battle'][2]['defense_total'] = $curdefense;
            //Are defences totall destroyed?
            if ($curdefense <= $attack) {
                //yes, lets just kill everything
                foreach (array_keys($defence) as $element) {
                    $CurrentPlanet[$resource[$element]] = 0;
                    $defence[$element] = 0;
                }
                //Now remove $element from memory
                unset($element);
                //Some info for the return
                $return['battle'][2]['short'] = true;
                $return['battle'][2]['final_defense'] = $defence;
            } else {
                //now we need to work out how much is destroyed.
                $percent = $attack / $curdefense;
                $return['battle'][2]['damage'] = round($percent * 100, 2) . "%";
                $percent = 1 - $percent;
                //Pick random defenses (or shuffle the array)
                $defence = shuffle_array($defence);
                $spare = 0;
                //Get all the defence elements
                foreach (array_keys($defence) as $element) {
                    // Do the damage
                    $defence[$element] *= $percent;
                    //And also any fire power left from the last target.
                    if ($defence[$element] <= $spare) {
                        $spare -= $defence[$element];
                        $defence[$element] = 0;
                    } else {
                        $defence[$element] -= $spare;
                        $spare = 0;
                    }
                    // Work out the spare after all the whole destroyed ones are removes
                    $spare += $defence[$element] % ($armour * $hull[$element]);
                    //Now put back the rest... not finished
                    $CurrentPlanet[$resource[$element]] = ceil($defence[$element] / ($armour * $hull[$element]));
                }
                //Now remove $element from memory
                unset($element);
                //Some info for the return
                $return['battle'][2]['short'] = false;
                $return['battle'][2]['new_defense'] = $defence;
                $return['battle'][2]['remaining'] = $spare;
                //Great now we have fired in a random order but we may still have a small bit of firepower left which can be used.
                //We should sort the defense by armour, with the highest elvel first,t hat way all the remaining firepower will be used.
                arsort($hull);
                foreach ($hull as $id => $val) {
                    $remain = $defence[$id] % $val;
                    if ($remain < $spare) {
                        $spare -= $remain;
                        $defence[$id] -= $remain;
                        $CurrentPlanet[$resource[$id]]--;
                    }
                }
                //Now remove $id and $val from memory
                unset($id, $val);
                //Some info for the return
                $return['battle'][2]['cleaned_defense'] = $defence;
                $return['battle'][2]['still_remaining'] = $spare;
                //Loop through ships and get the hull VALue for each ID
                foreach ($hull as $id => $val) {
                    $candestroy = floor($spare / ($armour * $val));
                    if ($CurrentPlanet[$resource[$id]] < $candestroy) {
                        $candestroy = $CurrentPlanet[$resource[$id]];
                    }
                    $CurrentPlanet[$resource[$id]] -= $candestroy;
                    $spare -= $armour * $val * $candestroy;
                    //now set $defence to the remaining defenses
                    if ($CurrentPlanet[$resource[$id]]) {
                        $defence[$id] = $CurrentPlanet[$resource[$id]];
                    } else {
                        unset($defence[$id]);
                    }
                }
                //Now remove $id and $val from memory
                unset($id, $val);
                //Some info for the return
                $return['battle'][2]['final_defense'] = $defence;
                $return['battle'][2]['wasted_power'] = $spare;
            }
        }
    }
    //If we are doing this for real, effecting the database, not just doing a sim.
    if ($db) {
        //Add all the remaining defences into a query to update the planet.
        $qry = "UPDATE {{table}} SET ";
        foreach ($reslist['defense'] as $element) {
            if ($resource[$element]) {
                $qry .= "`" . $resource[$element] . "` = '" . $CurrentPlanet[$resource[$element]] . "', ";
            }
        }
        $qry = substr_replace($qry, '', -2, -1) . "WHERE `id` = '" . $CurrentPlanet['id'] . "' LIMIT 1 ;";
        //Update the planet
        doquery($qry, 'planets');
        //Write the combat report
        //Template
        $lost = array();
        $report = '';
        $report .= $lang['ipm_header'];
        $report .= '<br /><br />';
        $report .= $lang['ipm_attacker'];
        $report .= '<br />';
        $report .= $lang['names'][503] . ' {ipms}';
        $report .= '<br /><br />';
        $report .= $lang['ipm_defender'];
        $report .= '<br />';
        foreach ($reslist['defense'] as $element) {
            $report .= $lang['names'][$element] . ' ' . pretty_number($OriginalCurrentPlanet[$resource[$element]]) . ' => ' . pretty_number($CurrentPlanet[$resource[$element]]) . '(' . $lang['ipm_lost'] . ' ' . pretty_number($OriginalCurrentPlanet[$resource[$element]] - $CurrentPlanet[$resource[$element]]) . ' ' . $lang['ipm_units'] . ')';
            $lost[$element] = $OriginalCurrentPlanet[$resource[$element]] - $CurrentPlanet[$resource[$element]];
            $report .= '<br />';
        }
        $report .= '<br />';
        $report .= $lang['ipm_result_a'];
        $report .= '<br />';
        $report .= $lang['ipm_result_d'];
        $report .= '<br />';
        //How many missiles were there?
        $missiles = explode(",", $FleetRow['fleet_array']);
        $missiles_count = idstring($missiles[1]);
        //Get details
        $parse = array('date' => date('jS F Y H:i'), 'attacker' => $attackername, 'defender' => $defendername, 'meta' => pretty_number($pricelist[503]['metal'] * $missiles_count), 'crysa' => pretty_number($pricelist[503]['crystal'] * $missiles_count), 'deuta' => pretty_number($pricelist[503]['deuterium'] * $missiles_count), 'metd' => 0, 'crysd' => 0, 'deutd' => 0, 'ipms' => pretty_number($missiles_count));
        //Now how much did the defender loose?
        foreach ($lost as $element => $count) {
            $parse['metd'] += $pricelist[$element]['metal'] * $count;
            $parse['crysd'] += $pricelist[$element]['crystal'] * $count;
            $parse['deutd'] += $pricelist[$element]['deuterium'] * $count;
        }
        //Pretty up those numbers
        $parse['metd'] = pretty_number($parse['metd']);
        $parse['crysd'] = pretty_number($parse['crysd']);
        $parse['deutd'] = pretty_number($parse['deutd']);
        //Now parse the report
        $report = parsetemplate($report, $parse);
        //Now send out the report
        PM($FleetRow['owner_userid'], 0, $report, $lang['ipm_pm_subject'], $lang['sys_mess_tower'], 3);
        PM($FleetRow['target_userid'], 0, $report, $lang['ipm_pm_subject'], $lang['sys_mess_tower'], 3);
        //PM(send to user id,comes from user id, message, title, name of sender, message type);
        return $return;
    } else {
        //Return planet state for the sim.
        return $CurrentPlanet;
    }
}