* All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * --> NOTICE <-- * This file is part of the core development branch, changing its contents will * make you unable to use the automatic updates manager. Please refer to the * documentation for further information about customizing XNova. * */ /** * @deprecated * @param unknown_type $FleetRow */ function MissionCaseAttack($FleetRow) { global $lang; $pricelist = Legacies_Empire_Model_Game_Prices::getSingleton(); $resource = Legacies_Empire_Model_Game_FieldsAlias::getSingleton(); $CombatCaps = Legacies_Empire_Model_Game_Combat::getSingleton(); if ($FleetRow['fleet_start_time'] <= time()) { if ($FleetRow['fleet_mess'] == 0) { if (!isset($CombatCaps[Legacies_Empire::ID_SHIP_LIGHT_TRANSPORT]['sd'])) { message("" . $lang['sys_no_vars'] . "", $lang['sys_error'], "fleet.php", 2); } // refactored parts // {{{ $planetCollection = new Legacies_Core_Collection(array('planet' => 'planets'), 'Legacies_Empire_Model_Planet'); $planetCollection ->where('galaxy=:galaxy') ->where('system=:system') ->where('planet=:planet') ->where('type=:type') ->limit(1) ->load(array( 'galaxy' => $FleetRow['fleet_end_galaxy'], 'system' => $FleetRow['fleet_end_system'], 'planet' => $FleetRow['fleet_end_planet'], 'planet_type' => $FleetRow['fleet_end_type'] )) ; $TargetPlanet = $planetCollection->current(); /* * Update planet resources and constructions */ Legacies::dispatchEvent('planet.update', array( 'planet' => $TargetPlanet )); $TargetPlanet->save(); $TargetUser = $targetPlanet->getUser(); $CurrentUser = Legacies_Empire_Model_User::factory($FleetRow['fleet_owner']); $TargetUserID = $TargetUser->getId(); $CurrentUserID = $CurrentUser->getId(); $TargetTechno = array( 'military_tech' => $TargetUser->getData('military_tech'), 'defence_tech' => $TargetUser->getData('defence_tech'), 'shield_tech' => $TargetUser->getData('shield_tech') ); $CurrentTechno = array( 'military_tech' => $CurrentUser->getData('military_tech'), 'defence_tech' => $CurrentUser->getData('defence_tech'), 'shield_tech' => $CurrentUser->getData('shield_tech') ); // }}} for ($SetItem = 200; $SetItem < 500; $SetItem++) { if ($TargetPlanet[$resource[$SetItem]] > 0) { $TargetSet[$SetItem]['count'] = $TargetPlanet[$resource[$SetItem]]; } } $TheFleet = explode(";", $FleetRow['fleet_array']); foreach($TheFleet as $a => $b) { if ($b != '') { $a = explode(",", $b); $CurrentSet[$a[0]]['count'] = $a[1]; } } include_once($xnova_root_path . 'includes/ataki.' . PHPEXT); // Calcul de la duree de traitement (initialisation) $mtime = microtime(); $mtime = explode(" ", $mtime); $mtime = $mtime[1] + $mtime[0]; $starttime = $mtime; $walka = walka($CurrentSet, $TargetSet, $CurrentTechno, $TargetTechno); // Calcul de la duree de traitement (calcul) $mtime = microtime(); $mtime = explode(" ", $mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); // Ce qu'il reste de l'attaquant $CurrentSet = $walka["atakujacy"]; // Ce qu'il reste de l'attaqué $TargetSet = $walka["wrog"]; // Le resultat de la bataille $FleetResult = $walka["wygrana"]; // Rapport long (rapport de bataille detaillé) $dane_do_rw = $walka["dane_do_rw"]; // Rapport court (cdr + unitées perdues) $zlom = $walka["zlom"]; $FleetArray = ""; $FleetAmount = 0; $FleetStorage = 0; foreach ($CurrentSet as $Ship => $Count) { $FleetStorage += $pricelist[$Ship]["capacity"] * $Count['count']; $FleetArray .= $Ship . "," . $Count['count'] . ";"; $FleetAmount += $Count['count']; } // Au cas ou le p'tit rigolo qu'a envoyé la flotte y avait mis des ressources ... $FleetStorage -= $FleetRow["fleet_resource_metal"]; $FleetStorage -= $FleetRow["fleet_resource_crystal"]; $FleetStorage -= $FleetRow["fleet_resource_deuterium"]; $TargetPlanetUpd = ""; if (!is_null($TargetSet)) { foreach($TargetSet as $Ship => $Count) { $TargetPlanetUpd .= "`" . $resource[$Ship] . "` = '" . $Count['count'] . "', "; } } // Determination des ressources pillées $Mining['metal'] = 0; $Mining['crystal'] = 0; $Mining['deuter'] = 0; if ($FleetResult == "a") { if ($FleetStorage > 0) { $metal = $TargetPlanet['metal'] / 2; $crystal = $TargetPlanet['crystal'] / 2; $deuter = $TargetPlanet["deuterium"] / 2; if (($metal) > $FleetStorage / 3) { $Mining['metal'] = $FleetStorage / 3; $FleetStorage = $FleetStorage - $Mining['metal']; } else { $Mining['metal'] = $metal; $FleetStorage = $FleetStorage - $Mining['metal']; } if (($crystal) > $FleetStorage / 2) { $Mining['crystal'] = $FleetStorage / 2; $FleetStorage = $FleetStorage - $Mining['crystal']; } else { $Mining['crystal'] = $crystal; $FleetStorage = $FleetStorage - $Mining['crystal']; } if (($deuter) > $FleetStorage) { $Mining['deuter'] = $FleetStorage; $FleetStorage = $FleetStorage - $Mining['deuter']; } else { $Mining['deuter'] = $deuter; $FleetStorage = $FleetStorage - $Mining['deuter']; } } } $Mining['metal'] = round($Mining['metal']); $Mining['crystal'] = round($Mining['crystal']); $Mining['deuter'] = round($Mining['deuter']); // Mise a jour de l'enregistrement de la planete attaquée $QryUpdateTarget = "UPDATE {{table}} SET "; $QryUpdateTarget .= $TargetPlanetUpd; $QryUpdateTarget .= "`metal` = `metal` - '" . $Mining['metal'] . "', "; $QryUpdateTarget .= "`crystal` = `crystal` - '" . $Mining['crystal'] . "', "; $QryUpdateTarget .= "`deuterium` = `deuterium` - '" . $Mining['deuter'] . "' "; $QryUpdateTarget .= "WHERE "; $QryUpdateTarget .= "`galaxy` = '" . $FleetRow['fleet_end_galaxy'] . "' AND "; $QryUpdateTarget .= "`system` = '" . $FleetRow['fleet_end_system'] . "' AND "; $QryUpdateTarget .= "`planet` = '" . $FleetRow['fleet_end_planet'] . "' AND "; $QryUpdateTarget .= "`planet_type` = '" . $FleetRow['fleet_end_type'] . "' "; $QryUpdateTarget .= "LIMIT 1;"; doquery($QryUpdateTarget , 'planets'); // Mise a jour du champ de ruine devant la planete attaquée $QryUpdateGalaxy = "UPDATE {{table}} SET "; $QryUpdateGalaxy .= "`metal` = `metal` + '" . $zlom['metal'] . "', "; $QryUpdateGalaxy .= "`crystal` = `crystal` + '" . $zlom['crystal'] . "' "; $QryUpdateGalaxy .= "WHERE "; $QryUpdateGalaxy .= "`galaxy` = '" . $FleetRow['fleet_end_galaxy'] . "' AND "; $QryUpdateGalaxy .= "`system` = '" . $FleetRow['fleet_end_system'] . "' AND "; $QryUpdateGalaxy .= "`planet` = '" . $FleetRow['fleet_end_planet'] . "' "; $QryUpdateGalaxy .= "LIMIT 1;"; doquery($QryUpdateGalaxy , 'galaxy'); // Là on va discuter le bout de gras pour voir s'il y a moyen d'avoir une Lune ! $FleetDebris = $zlom['metal'] + $zlom['crystal']; $StrAttackerUnits = sprintf ($lang['sys_attacker_lostunits'], pretty_number ($zlom["atakujacy"])); $StrDefenderUnits = sprintf ($lang['sys_defender_lostunits'], pretty_number ($zlom["wrog"])); $StrRuins = sprintf ($lang['sys_gcdrunits'], pretty_number ($zlom["metal"]), $lang['Metal'], pretty_number ($zlom['crystal']), $lang['Crystal']); $DebrisField = $StrAttackerUnits . "
" . $StrDefenderUnits . "
" . $StrRuins; $MoonChance = $FleetDebris / 100000; if ($FleetDebris > 2000000) { $MoonChance = 20; } if ($FleetDebris < 100000) { $UserChance = 0; $ChanceMoon = ""; } elseif ($FleetDebris >= 100000) { $UserChance = mt_rand(1, 100); $ChanceMoon = sprintf ($lang['sys_moonproba'], $MoonChance); } if (($UserChance > 0) and ($UserChance <= $MoonChance) and $galenemyrow['id_luna'] == 0) { $TargetPlanetName = CreateOneMoonRecord ($FleetRow['fleet_end_galaxy'], $FleetRow['fleet_end_system'], $FleetRow['fleet_end_planet'], $TargetUserID, $FleetRow['fleet_start_time'], '', $MoonChance); $GottenMoon = sprintf ($lang['sys_moonbuilt'], $TargetPlanetName, $FleetRow['fleet_end_galaxy'], $FleetRow['fleet_end_system'], $FleetRow['fleet_end_planet']); } elseif ($UserChance = 0 or $UserChance > $MoonChance) { $GottenMoon = ""; } $AttackDate = date("r", $FleetRow["fleet_start_time"]); $title = sprintf ($lang['sys_attack_title'], $AttackDate); $raport = "
" . $title . "
"; $zniszczony = false; $a_zestrzelona = 0; $AttackTechon['A'] = $CurrentTechno["military_tech"] * 10; $AttackTechon['B'] = $CurrentTechno["defence_tech"] * 10; $AttackTechon['C'] = $CurrentTechno["shield_tech"] * 10; $AttackerData = sprintf ($lang['sys_attack_attacker_pos'], $CurrentUser["username"], $FleetRow['fleet_start_galaxy'], $FleetRow['fleet_start_system'], $FleetRow['fleet_start_planet']); $AttackerTech = sprintf ($lang['sys_attack_techologies'], $AttackTechon['A'], $AttackTechon['B'], $AttackTechon['C']); $DefendTechon['A'] = $TargetTechno["military_tech"] * 10; $DefendTechon['B'] = $TargetTechno["defence_tech"] * 10; $DefendTechon['C'] = $TargetTechno["shield_tech"] * 10; $DefenderData = sprintf ($lang['sys_attack_defender_pos'], $TargetUser["username"], $FleetRow['fleet_end_galaxy'], $FleetRow['fleet_end_system'], $FleetRow['fleet_end_planet']); $DefenderTech = sprintf ($lang['sys_attack_techologies'], $DefendTechon['A'], $DefendTechon['B'], $DefendTechon['C']); foreach ($dane_do_rw as $a => $b) { $raport .= "

" . $AttackerData . "
" . $AttackerTech . ""; if ($b["atakujacy"]['count'] > 0) { $raport1 = ""; $raport2 = ""; $raport3 = ""; $raport4 = ""; $raport5 = ""; foreach ($b["atakujacy"] as $Ship => $Data) { if (is_numeric($Ship)) { if ($Data['count'] > 0) { $raport1 .= ""; $raport2 .= ""; $raport3 .= ""; $raport4 .= ""; $raport5 .= ""; } } } $raport1 .= ""; $raport2 .= ""; $raport3 .= ""; $raport4 .= ""; $raport5 .= ""; $raport .= $raport1 . $raport2 . $raport3 . $raport4 . $raport5; } else { if ($a == 2) { $a_zestrzelona = 1; } $zniszczony = true; $raport .= "
" . $lang['sys_destroyed']; } $raport .= "
" . $lang['sys_ship_type'] . "
" . $lang['sys_ship_count'] . "
" . $lang['sys_ship_weapon'] . "
" . $lang['sys_ship_shield'] . "
" . $lang['sys_ship_armour'] . "" . $lang["tech_rc"][$Ship] . "" . pretty_number ($Data['count']) . "" . pretty_number (round($Data["atak"] / $Data['count'])) . "" . pretty_number (round($Data["tarcza"] / $Data['count'])) . "" . pretty_number (round($Data["obrona"] / $Data['count'])) . "
"; $raport .= "

" . $DefenderData . "
" . $DefenderTech . ""; if ($b["wrog"]['count'] > 0) { $raport1 = ""; $raport2 = ""; $raport3 = ""; $raport4 = ""; $raport5 = ""; foreach ($b["wrog"] as $Ship => $Data) { if (is_numeric($Ship)) { if ($Data['count'] > 0) { $raport1 .= ""; $raport2 .= ""; $raport3 .= ""; $raport4 .= ""; $raport5 .= ""; } } } $raport1 .= ""; $raport2 .= ""; $raport3 .= ""; $raport4 .= ""; $raport5 .= ""; $raport .= $raport1 . $raport2 . $raport3 . $raport4 . $raport5; } else { $zniszczony = true; $raport .= "
" . $lang['sys_destroyed']; } $raport .= "
" . $lang['sys_ship_type'] . "
" . $lang['sys_ship_count'] . "
" . $lang['sys_ship_weapon'] . "
" . $lang['sys_ship_shield'] . "
" . $lang['sys_ship_armour'] . "" . $lang["tech_rc"][$Ship] . "" . pretty_number ($Data['count']) . "" . pretty_number (round($Data["atak"] / $Data['count'])) . "" . pretty_number (round($Data["tarcza"] / $Data['count'])) . "" . pretty_number (round($Data["obrona"] / $Data['count'])) . "
"; if (($zniszczony == false) and !($a == 8)) { $AttackWaveStat = sprintf ($lang['sys_attack_attack_wave'], pretty_number (floor($b["atakujacy"]["atak"])), pretty_number (floor($b["wrog"]["tarcza"]))); $DefendWavaStat = sprintf ($lang['sys_attack_defend_wave'], pretty_number (floor($b["wrog"]["atak"])), pretty_number (floor($b["atakujacy"]["tarcza"]))); $raport .= "
" . $AttackWaveStat . "
" . $DefendWavaStat . "
"; } } switch ($FleetResult) { case "a": $Pillage = sprintf ($lang['sys_stealed_ressources'], pretty_number ($Mining['metal']), $lang['metal'], pretty_number ($Mining['crystal']), $lang['crystal'], pretty_number ($Mining['deuter']), $lang['Deuterium']); $raport .= $lang['sys_attacker_won'] . "
" . $Pillage . "
"; $raport .= $DebrisField . "
"; $raport .= $ChanceMoon . "
"; $raport .= $GottenMoon . "
"; break; case "r": $raport .= $lang['sys_both_won'] . "
"; $raport .= $DebrisField . "
"; $raport .= $ChanceMoon . "
"; $raport .= $GottenMoon . "
"; break; case "w": $raport .= $lang['sys_defender_won'] . "
"; $raport .= $DebrisField . "
"; $raport .= $ChanceMoon . "
"; $raport .= $GottenMoon . "
"; doquery("DELETE FROM {{table}} WHERE `fleet_id` = '" . $FleetRow["fleet_id"] . "';", 'fleets'); break; default: break; } $SimMessage = sprintf ($lang['sys_rapport_build_time'], $totaltime); $raport .= $SimMessage . "
"; $rid = md5($raport); $QryInsertRapport = "INSERT INTO {{table}} SET "; $QryInsertRapport .= "`time` = UNIX_TIMESTAMP(), "; $QryInsertRapport .= "`id_owner1` = '" . $FleetRow['fleet_owner'] . "', "; $QryInsertRapport .= "`id_owner2` = '" . $TargetUserID . "', "; $QryInsertRapport .= "`rid` = '" . $rid . "', "; $QryInsertRapport .= "`a_zestrzelona` = '" . $a_zestrzelona . "', "; $QryInsertRapport .= "`raport` = '" . addslashes ($raport) . "';"; doquery($QryInsertRapport , 'rw'); // Colorisation du résumé de rapport pour l'attaquant $raport = ""; $raport .= "
"; if ($FleetResult == "a") { $raport .= ""; } elseif ($FleetResult == "r") { $raport .= ""; } elseif ($FleetResult == "w") { $raport .= ""; } $raport .= $lang['sys_mess_attack_report'] . " [" . $FleetRow['fleet_end_galaxy'] . ":" . $FleetRow['fleet_end_system'] . ":" . $FleetRow['fleet_end_planet'] . "]

"; $raport .= "" . $lang['sys_perte_attaquant'] . ": " . pretty_number ($zlom["atakujacy"]) . ""; $raport .= " " . $lang['sys_perte_defenseur'] . ":" . pretty_number ($zlom["wrog"]) . "
" ; $raport .= $lang['sys_gain'] . " " . $lang['Metal'] . ":" . pretty_number ($Mining['metal']) . " " . $lang['Crystal'] . ":" . pretty_number ($Mining['crystal']) . " " . $lang['Deuterium'] . ":" . pretty_number ($Mining['deuter']) . "
"; $raport .= $lang['sys_debris'] . " " . $lang['Metal'] . ":" . pretty_number ($zlom['metal']) . " " . $lang['Crystal'] . ":" . pretty_number ($zlom['crystal']) . "
"; $Mining['metal'] = $Mining['metal'] + $FleetRow["fleet_resource_metal"]; $Mining['crystal'] = $Mining['crystal'] + $FleetRow["fleet_resource_crystal"]; $Mining['deuter'] = $Mining['deuter'] + $FleetRow["fleet_resource_deuterium"]; $QryUpdateFleet = "UPDATE {{table}} SET "; $QryUpdateFleet .= "`fleet_amount` = '" . $FleetAmount . "', "; $QryUpdateFleet .= "`fleet_array` = '" . $FleetArray . "', "; $QryUpdateFleet .= "`fleet_mess` = '1', "; $QryUpdateFleet .= "`fleet_resource_metal` = '" . $Mining['metal'] . "', "; $QryUpdateFleet .= "`fleet_resource_crystal` = '" . $Mining['crystal'] . "', "; $QryUpdateFleet .= "`fleet_resource_deuterium` = '" . $Mining['deuter'] . "' "; $QryUpdateFleet .= "WHERE fleet_id = '" . $FleetRow['fleet_id'] . "' "; $QryUpdateFleet .= "LIMIT 1 ;"; doquery($QryUpdateFleet , 'fleets'); SendSimpleMessage ($CurrentUserID, '', $FleetRow['fleet_start_time'], 3, $lang['sys_mess_tower'], $lang['sys_mess_attack_report'], $raport); // Ajout du petit point raideur $AddPoint = $CurrentUser['xpraid'] + 1; $QryUpdateOfficier = "UPDATE {{table}} SET "; $QryUpdateOfficier .= "`xpraid` = '" . $AddPoint . "' "; $QryUpdateOfficier .= "WHERE id = '" . $CurrentUserID . "' "; $QryUpdateOfficier .= "LIMIT 1 ;"; doquery($QryUpdateOfficier, 'users'); // Ajout d'un point au compteur de raids $RaidsTotal = $CurrentUser['raids'] + 1; if ($FleetResult == "a") { $RaidsWin = $CurrentUser['raidswin'] + 1; $QryUpdateRaidsCompteur = "UPDATE {{table}} SET "; $QryUpdateRaidsCompteur .= "`raidswin` ='" . $RaidsWin . "', "; $QryUpdateRaidsCompteur .= "`raids` ='" . $RaidsTotal . "' "; $QryUpdateRaidsCompteur .= "WHERE id = '" . $CurrentUserID . "' "; $QryUpdateRaidsCompteur .= "LIMIT 1 ;"; doquery($QryUpdateRaidsCompteur, 'users'); } elseif ($FleetResult == "r" || $FleetResult == "w") { $RaidsLoose = $CurrentUser['raidsloose'] + 1; $QryUpdateRaidsCompteur = "UPDATE {{table}} SET "; $QryUpdateRaidsCompteur .= "`raidswin` ='" . $RaidsLoose . "', "; $QryUpdateRaidsCompteur .= "`raids` ='" . $RaidsTotal . "' "; $QryUpdateRaidsCompteur .= "WHERE id = '" . $CurrentUserID . "' "; $QryUpdateRaidsCompteur .= "LIMIT 1 ;"; doquery($QryUpdateRaidsCompteur, 'users'); } // Colorisation du résumé de rapport pour l'attaquant $raport2 = ""; $raport2 .= "
"; if ($FleetResult == "a") { $raport2 .= ""; } elseif ($FleetResult == "r") { $raport2 .= ""; } elseif ($FleetResult == "w") { $raport2 .= ""; } $raport2 .= $lang['sys_mess_attack_report'] . " [" . $FleetRow['fleet_end_galaxy'] . ":" . $FleetRow['fleet_end_system'] . ":" . $FleetRow['fleet_end_planet'] . "]

"; SendSimpleMessage ($TargetUserID, '', $FleetRow['fleet_start_time'], 3, $lang['sys_mess_tower'], $lang['sys_mess_attack_report'], $raport2); } // Retour de flotte (s'il en reste) $fquery = ""; if ($FleetRow['fleet_end_time'] <= time()) { if (!is_null($CurrentSet)) { foreach($CurrentSet as $Ship => $Count) { $fquery .= "`" . $resource[$Ship] . "` = `" . $resource[$Ship] . "` + '" . $Count['count'] . "', "; } } else { $fleet = explode(";", $FleetRow['fleet_array']); foreach($fleet as $a => $b) { if ($b != '') { $a = explode(",", $b); $fquery .= "{$resource[$a[0]]}={$resource[$a[0]]} + {$a[1]}, \n"; } } } doquery ("DELETE FROM {{table}} WHERE `fleet_id` = " . $FleetRow["fleet_id"], 'fleets'); if (!($FleetResult == "w")) { $QryUpdatePlanet = "UPDATE {{table}} SET "; $QryUpdatePlanet .= $fquery; $QryUpdatePlanet .= "`metal` = `metal` + " . $FleetRow['fleet_resource_metal'] . ", "; $QryUpdatePlanet .= "`crystal` = `crystal` + " . $FleetRow['fleet_resource_crystal'] . ", "; $QryUpdatePlanet .= "`deuterium` = `deuterium` + " . $FleetRow['fleet_resource_deuterium'] . " "; $QryUpdatePlanet .= "WHERE "; $QryUpdatePlanet .= "`galaxy` = " . $FleetRow['fleet_start_galaxy'] . " AND "; $QryUpdatePlanet .= "`system` = " . $FleetRow['fleet_start_system'] . " AND "; $QryUpdatePlanet .= "`planet` = " . $FleetRow['fleet_start_planet'] . " AND "; $QryUpdatePlanet .= "`planet_type` = " . $FleetRow['fleet_start_type'] . " LIMIT 1 ;"; doquery($QryUpdatePlanet, 'planets'); } } } }