PageRenderTime 53ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/solar27/include/game/classes/invasion.php

https://bitbucket.org/sebs/mosolar
PHP | 1520 lines | 1100 code | 308 blank | 112 comment | 334 complexity | ad486ae421201409a0f6a4f0996fa1ae MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-3.0, BSD-3-Clause, LGPL-2.0, MIT, GPL-2.0

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. // Solar Imperium is licensed under GPL2, Check LICENSE.TXT for mode details //
  3. define("INVASION_DEBUG",false);
  4. class Invasion {
  5. var $DB;
  6. var $convoy;
  7. var $target;
  8. var $total_strength;
  9. var $total_casualties;
  10. var $time_start;
  11. var $time_end;
  12. var $game_id;
  13. ///////////////////////////////////////////////////////////////////////
  14. //
  15. ///////////////////////////////////////////////////////////////////////
  16. function Invasion($DB, $convoy) {
  17. $this->DB = $DB;
  18. $time_now = time(NULL);
  19. $this->game_id = round($_SESSION["game"]);
  20. $this->convoy = $convoy;
  21. $query = "SELECT * FROM game".$this->game_id."_tb_army WHERE empire='" . $this->convoy["empire_to"]."'";
  22. $rs = $this->DB->Execute($query);
  23. if (!$rs)
  24. trigger_error($this->DB->ErrorMsg());
  25. $this->target = $rs->fields;
  26. if ($rs->EOF) {
  27. $time_start = $convoy["time_start"];
  28. $time_end = $convoy["time_end"];
  29. $time_elapsed = $time_now - $time_start;
  30. $time_start = $time_now;
  31. $time_end = $time_now + $time_elapsed;
  32. $query = "UPDATE game".$this->game_id."_tb_armyconvoy SET " .
  33. "convoy_type='" .CONF_CONVOY_INVASION_RETREAT . "'," .
  34. "time_start='$time_start',time_end='$time_end' WHERE id=" . $convoy["id"];
  35. if (!$DB->Execute($query)) trigger_error($DB->ErrorMsg());
  36. $convoy = NULL;
  37. }
  38. srand(time(NULL));
  39. }
  40. ///////////////////////////////////////////////////////////////////////
  41. //
  42. ///////////////////////////////////////////////////////////////////////
  43. function Attack() {
  44. global $units_info;
  45. if ($this->target == NULL) return;
  46. if ($this->convoy == NULL) return;
  47. $time_now = time(NULL);
  48. /////////////////////////////////////////////////////////////
  49. // Step 1: Build invasion force
  50. /////////////////////////////////////////////////////////////
  51. $army_attack = array ();
  52. $this->convoy["casualties_soldiers"] = 0;
  53. $this->convoy["casualties_fighters"] = 0;
  54. $this->convoy["casualties_lightcruisers"] = 0;
  55. $this->convoy["casualties_heavycruisers"] = 0;
  56. $this->convoy["casualties_carriers"] = 0;
  57. $rs2 = $this->DB->Execute("SELECT effectiveness FROM game".$this->game_id."_tb_army WHERE empire='" . $this->convoy["empire_from"]."'");
  58. if (!$rs2) trigger_error($this->DB->ErrorMsg());
  59. $rs3 = $this->DB->Execute("SELECT id,emperor,name,player_id FROM game".$this->game_id."_tb_empire WHERE id='" . $this->convoy["empire_from"]."'");
  60. if (!$rs3) trigger_error($this->DB->ErrorMsg());
  61. $this->convoy["empire"] = $rs3->fields["id"];
  62. $this->convoy["emperor"] = $rs3->fields["emperor"];
  63. $this->convoy["player_id"] = $rs3->fields["player_id"];
  64. $this->convoy["name"] = $rs3->fields["name"];
  65. $this->convoy["effectiveness"] = $rs2->fields["effectiveness"];
  66. if ($this->convoy["effectiveness"]< 10) $this->convoy["effectiveness"] = 10;
  67. if ($this->convoy["effectiveness"] > 150) $this->convoy["effectiveness"] = 150;
  68. $army_attack[] = $this->convoy;
  69. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_armyconvoy WHERE " .
  70. "convoy_type='" . CONF_CONVOY_INVASION . "' AND " .
  71. "empire_to='" . $this->convoy["empire_to"] . "' AND " .
  72. "NOT empire_from='" . $this->convoy["empire_from"] . "' AND " .
  73. "time_end <= ".($time_now-60));
  74. if (!$rs)
  75. trigger_error($this->DB->ErrorMsg());
  76. while (!$rs->EOF) {
  77. $convoy_data = $rs->fields;
  78. $rs2 = $this->DB->Execute("SELECT effectiveness FROM game".$this->game_id."_tb_army WHERE empire='" . $rs->fields["empire_from"]."'");
  79. if (!$rs2)
  80. trigger_error($this->DB->ErrorMsg());
  81. $rs3 = $this->DB->Execute("SELECT id,emperor,name,player_id FROM game".$this->game_id."_tb_empire WHERE id='" . $rs->fields["empire_from"]."'");
  82. if (!$rs3)
  83. trigger_error($this->DB->ErrorMsg());
  84. $convoy_data["id"] = $rs3->fields["id"];
  85. $convoy_data["emperor"] = $rs3->fields["emperor"];
  86. $convoy_data["player_id"] = $rs3->fields["player_id"];
  87. $convoy_data["name"] = $rs3->fields["name"];
  88. $convoy_data["effectiveness"] = $rs2->fields["effectiveness"];
  89. if ($convoy_data["effectiveness"]< 10) $convoy_data["effectiveness"] = 10;
  90. if ($convoy_data["effectiveness"] > 150) $convoy_data["effectiveness"] = 150;
  91. $convoy_data["casualties_soldiers"] = 0;
  92. $convoy_data["casualties_fighters"] = 0;
  93. $convoy_data["casualties_lightcruisers"] = 0;
  94. $convoy_data["casualties_heavycruisers"] = 0;
  95. $convoy_data["casualties_carriers"] = 0;
  96. $army_attack[] = $convoy_data;
  97. $rs->MoveNext();
  98. }
  99. /////////////////////////////////////////////////////////////
  100. // Step 2: Build defense force
  101. /////////////////////////////////////////////////////////////
  102. $army_defense = array ();
  103. if (!isset($this->target["soldiers"])) $this->target["soldiers"] = 0;
  104. if (!isset($this->target["fighters"])) $this->target["fighters"] = 0;
  105. if (!isset($this->target["lightcruisers"])) $this->target["lightcruisers"] = 0;
  106. if (!isset($this->target["heavycruisers"])) $this->target["heavycruisers"] = 0;
  107. if (!isset($this->target["stations"])) $this->target["stations"] = 0;
  108. $this->target["casualties_soldiers"] = 0;
  109. $this->target["casualties_fighters"] = 0;
  110. $this->target["casualties_stations"] = 0;
  111. $this->target["casualties_lightcruisers"] = 0;
  112. $this->target["casualties_heavycruisers"] = 0;
  113. $army_defense[] = $this->target;
  114. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_armyconvoy WHERE " .
  115. "convoy_type='" . CONF_CONVOY_DEFENSE . "' AND " .
  116. "empire_to='" . $this->convoy["empire_to"] . "' AND " .
  117. "time_end >= ".($time_now-(60*3)));
  118. if (!$rs)
  119. trigger_error($this->DB->ErrorMsg());
  120. while (!$rs->EOF) {
  121. $convoy_data = $rs->fields;
  122. $rs2 = $this->DB->Execute("SELECT effectiveness FROM game".$this->game_id."_tb_army WHERE empire='" . $rs->fields["empire_from"]."'");
  123. $rs3 = $this->DB->Execute("SELECT id,emperor,name FROM game".$this->game_id."_tb_empire WHERE id='" . $rs->fields["empire_from"]."'");
  124. if (!$rs2)
  125. trigger_error($this->DB->ErrorMsg());
  126. $convoy_data["empire"] = $rs3->fields["id"];
  127. $convoy_data["emperor"] = $rs3->fields["emperor"];
  128. $convoy_data["name"] = $rs3->fields["name"];
  129. $convoy_data["effectiveness"] = $rs2->fields["effectiveness"];
  130. if ($convoy_data["effectiveness"]< 10) $convoy_data["effectiveness"] = 10;
  131. if ($convoy_data["effectiveness"] > 150) $convoy_data["effectiveness"] = 150;
  132. $convoy_data["soldiers"] = $rs->fields["convoy_soldiers"];
  133. $convoy_data["fighters"] = $rs->fields["convoy_fighters"];
  134. $convoy_data["lightcruisers"] = $rs->fields["convoy_lightcruisers"];
  135. $convoy_data["heavycruisers"] = $rs->fields["convoy_heavycruisers"];
  136. $convoy_data["soldiers_level"] = $rs->fields["convoy_soldiers_level"];
  137. $convoy_data["fighters_level"] = $rs->fields["convoy_fighters_level"];
  138. $convoy_data["lightcruisers_level"] = $rs->fields["convoy_lightcruisers_level"];
  139. $convoy_data["heavycruisers_level"] = $rs->fields["convoy_heavycruisers_level"];
  140. $convoy_data["casualties_soldiers"] = 0;
  141. $convoy_data["casualties_fighters"] = 0;
  142. $convoy_data["casualties_stations"] = 0;
  143. $convoy_data["casualties_lightcruisers"] = 0;
  144. $convoy_data["casualties_heavycruisers"] = 0;
  145. $army_defense[] = $convoy_data;
  146. $rs->MoveNext();
  147. }
  148. $this->total_strength = array (
  149. "SPACE" => array (),
  150. "ORBITAL" => array (),
  151. "GROUND" => array ()
  152. );
  153. $this->total_casualties = array (
  154. "SPACE" => array (),
  155. "ORBITAL" => array (),
  156. "GROUND" => array ()
  157. );
  158. /////////////////////////////////////////////////////////////
  159. // Step 3: Do attacks
  160. /////////////////////////////////////////////////////////////
  161. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  162. // Space Attack!
  163. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  164. $space_won_attack = 0;
  165. $space_won_defense = 0;
  166. for ($round = 0; $round < 5; $round++) {
  167. // print "ROUND ".($round+1)."<br/>";
  168. $attack_strength = 1;
  169. $total_attack_strength = array ();
  170. $total_attack_strength["soldiers"] = 0;
  171. $total_attack_strength["fighters"] = 0;
  172. $total_attack_strength["lightcruisers"] = 0;
  173. $total_attack_strength["heavycruisers"] = 0;
  174. for ($i = 0; $i < count($army_attack); $i++) {
  175. $soldiers_strength = (($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) * $units_info["soldiers_" . $army_attack[$i]["convoy_soldiers_level"]]["invasion_space"]);
  176. $soldiers_strength = floor(($soldiers_strength / 100) * $army_attack[$i]["effectiveness"]);
  177. $attack_strength += $soldiers_strength;
  178. $fighters_strength = (($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) * $units_info["fighters_" . $army_attack[$i]["convoy_fighters_level"]]["invasion_space"]);
  179. $fighters_strength = floor(($fighters_strength / 100) * $army_attack[$i]["effectiveness"]);
  180. $attack_strength += $fighters_strength;
  181. $lightcruisers_strength = (($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) * $units_info["lightcruisers_" . $army_attack[$i]["convoy_lightcruisers_level"]]["invasion_space"]);
  182. $lightcruisers_strength = floor(($lightcruisers_strength / 100) * $army_attack[$i]["effectiveness"]);
  183. $attack_strength += $lightcruisers_strength;
  184. $heavycruisers_strength = (($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) * $units_info["heavycruisers_" . $army_attack[$i]["convoy_heavycruisers_level"]]["invasion_space"]);
  185. $heavycruisers_strength = floor(($heavycruisers_strength / 100) * $army_attack[$i]["effectiveness"]);
  186. $attack_strength += $heavycruisers_strength;
  187. $total_attack_strength["soldiers"] += $soldiers_strength;
  188. $total_attack_strength["fighters"] += $fighters_strength;
  189. $total_attack_strength["lightcruisers"] += $lightcruisers_strength;
  190. $total_attack_strength["heavycruisers"] += $heavycruisers_strength;
  191. }
  192. $defense_strength = 1;
  193. $total_defense_strength = array ();
  194. $total_defense_strength["soldiers"] = 0;
  195. $total_defense_strength["stations"] = 0;
  196. $total_defense_strength["fighters"] = 0;
  197. $total_defense_strength["lightcruisers"] = 0;
  198. $total_defense_strength["heavycruisers"] = 0;
  199. for ($i = 0; $i < count($army_defense); $i++) {
  200. $soldiers_strength = (($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) * $units_info["soldiers_" . $army_defense[$i]["soldiers_level"]]["invasion_space"]);
  201. $soldiers_strength = floor(($soldiers_strength / 100) * $army_defense[$i]["effectiveness"]);
  202. $defense_strength += $soldiers_strength;
  203. $fighters_strength = (($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) * $units_info["fighters_" . $army_defense[$i]["fighters_level"]]["invasion_space"]);
  204. $fighters_strength = floor(($fighters_strength / 100) * $army_defense[$i]["effectiveness"]);
  205. //$defense_strength += $fighters_strength;
  206. if (isset ($army_defense[$i]["stations"])) {
  207. $stations_strength = (($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) * $units_info["fighters_" . $army_defense[$i]["stations_level"]]["invasion_space"]);
  208. $stations_strength = floor(($stations_strength / 100) * $army_defense[$i]["effectiveness"]);
  209. $defense_strength += $stations_strength;
  210. }
  211. $lightcruisers_strength = (($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) * $units_info["lightcruisers_" . $army_defense[$i]["lightcruisers_level"]]["invasion_space"]);
  212. $lightcruisers_strength = floor(($lightcruisers_strength / 100) * $army_defense[$i]["effectiveness"]);
  213. $defense_strength += $lightcruisers_strength;
  214. $heavycruisers_strength = (($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) * $units_info["heavycruisers_" . $army_defense[$i]["heavycruisers_level"]]["invasion_space"]);
  215. $heavycruisers_strength = floor(($heavycruisers_strength / 100) * $army_defense[$i]["effectiveness"]);
  216. $defense_strength += $heavycruisers_strength;
  217. $total_defense_strength["soldiers"] += $soldiers_strength;
  218. $total_defense_strength["fighters"] += $fighters_strength;
  219. $total_defense_strength["stations"] += $stations_strength;
  220. $total_defense_strength["lightcruisers"] += $lightcruisers_strength;
  221. $total_defense_strength["heavycruisers"] += $heavycruisers_strength;
  222. }
  223. $defense_strength *= CONF_INVASION_DEFENSE_BONUS;
  224. $this->total_strength["SPACE"][$round] = array (
  225. "attack" => $total_attack_strength,
  226. "defense" => $total_defense_strength
  227. );
  228. // add randomness
  229. $attack_strength += floor(rand(0, CONF_INVASION_RANDOMNESS) * ($attack_strength / 100));
  230. $defense_strength += floor(rand(0, CONF_INVASION_RANDOMNESS) * ($defense_strength / 100));
  231. if ($attack_strength == 0)
  232. $attack_strength = 1;
  233. if ($defense_strength == 0)
  234. $defense_strength = 1;
  235. // print "ATTACK STRENGTH: ".$attack_strength."<br/>";
  236. // print "DEFENSE STRENGTH: ".$defense_strength."<br/>";
  237. $casualties = $attack_strength - $defense_strength;
  238. if ($casualties == 0)
  239. $casualties = 1;
  240. // print "RAW DAMAGE: ".$casualties."<br/>";
  241. $casualties_attack = 0;
  242. $casualties_defense = 0;
  243. if ($casualties <= 1) {
  244. // print "ATTACKERS LOOSE<br/>";
  245. $casualties_attack = (($defense_strength / $attack_strength) * 100);
  246. $casualties_defense = (($attack_strength / $defense_strength) * 100);
  247. $casualties_attack = ($casualties_attack) / CONF_INVASION_CASUALTIES_WON;
  248. $casualties_defense = ($casualties_defense) / CONF_INVASION_CASUALTIES_LOOSE;
  249. $space_won_defense++;
  250. } else {
  251. // print "DEFENDERS LOOSE<br/>";
  252. $casualties_attack = (($defense_strength / $attack_strength) * 100);
  253. $casualties_defense = (($attack_strength / $defense_strength) * 100);
  254. $casualties_attack = ($casualties_attack) / CONF_INVASION_CASUALTIES_LOOSE;
  255. $casualties_defense = ($casualties_defense) / CONF_INVASION_CASUALTIES_WON;
  256. $space_won_attack++;
  257. }
  258. if ($casualties_attack > 100)
  259. $casualties_attack = 100;
  260. if ($casualties_defense > 100)
  261. $casualties_defense = 100;
  262. $this->total_casualties["SPACE"][$round] = array (
  263. "attack" => $casualties_attack,
  264. "defense" => $casualties_defense
  265. );
  266. // calculating casualties
  267. for ($i = 0; $i < count($army_attack); $i++) {
  268. // print "ATTACK CONVOY: $i<br/>";
  269. if ($total_attack_strength["soldiers"] != 0) {
  270. $percent = (((($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) / $total_attack_strength["soldiers"]) * 100) / 100) * $casualties_attack;
  271. if ($percent > 100)
  272. $percent = 100;
  273. $casualties = floor((($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) / 100) * $percent);
  274. $army_attack[$i]["casualties_soldiers"] += $casualties;
  275. // print "SOLDIERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  276. }
  277. if ($total_attack_strength["fighters"] != 0) {
  278. $percent = (((($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) / $total_attack_strength["fighters"]) * 100) / 100) * $casualties_attack;
  279. if ($percent > 100)
  280. $percent = 100;
  281. $casualties = floor((($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) / 100) * $percent);
  282. $army_attack[$i]["casualties_fighters"] += $casualties;
  283. // print "FIGHTERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  284. }
  285. if ($round >= CONF_INVASION_LIGHTCRUISER_PROTECTION_ROUNDS)
  286. if ($total_attack_strength["lightcruisers"] != 0) {
  287. $percent = (((($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) / $total_attack_strength["lightcruisers"]) * 100) / 100) * $casualties_attack;
  288. if ($percent > 100)
  289. $percent = 100;
  290. $casualties = floor((($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) / 100) * $percent);
  291. $army_attack[$i]["casualties_lightcruisers"] += $casualties;
  292. // print "LIGHTCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  293. }
  294. if ($total_attack_strength["heavycruisers"] != 0) {
  295. $percent = (((($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) / $total_attack_strength["heavycruisers"]) * 100) / 100) * $casualties_attack;
  296. if ($percent > 100)
  297. $percent = 100;
  298. $casualties = floor((($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) / 100) * $percent);
  299. $army_attack[$i]["casualties_heavycruisers"] += $casualties;
  300. // print "HEAVYCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  301. }
  302. // Calculate carriers lost
  303. $percent = (($casualties_attack / 100) * CONF_INVASION_CARRIERS_DAMAGE) * $units_info["carriers_" . $army_attack[$i]["carriers_level"]]["toughness"];
  304. $casualties = floor((($army_attack[$i]["carriers"] - $army_attack[$i]["casualties_carriers"]) / 100) * $percent);
  305. // we need to calculate the casualties related to the carriers itself (soldiers, fighters)
  306. $army_attack[$i]["casualties_soldiers"] += ($casualties * (1 / CONF_CARRIER_SOLDIER));
  307. if ($army_attack[$i]["casualties_soldiers"] > $army_attack[$i]["convoy_soldiers"])
  308. $army_attack[$i]["casualties_soldiers"] = $army_attack[$i]["convoy_soldiers"];
  309. $army_attack[$i]["casualties_fighters"] += ($casualties * (1 / CONF_CARRIER_FIGHTER));
  310. if ($army_attack[$i]["casualties_fighters"] > $army_attack[$i]["convoy_fighters"])
  311. $army_attack[$i]["casualties_fighters"] = $army_attack[$i]["convoy_fighters"];
  312. $army_attack[$i]["casualties_carriers"] += $casualties;
  313. // print "CARRIERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  314. }
  315. for ($i = 0; $i < count($army_defense); $i++) {
  316. // print "DEFENSE CONVOY: $i<br/>";
  317. if ($total_defense_strength["soldiers"] != 0) {
  318. $percent = (((($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) / $total_defense_strength["soldiers"]) * 100) / 100) * $casualties_defense;
  319. if ($percent > 100)
  320. $percent = 100;
  321. $casualties = floor((($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) / 100) * $percent);
  322. $army_defense[$i]["casualties_soldiers"] += $casualties;
  323. // print "SOLDIERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  324. }
  325. if ($total_defense_strength["fighters"] != 0) {
  326. $percent = (((($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) / $total_defense_strength["fighters"]) * 100) / 100) * $casualties_defense;
  327. if ($percent > 100)
  328. $percent = 100;
  329. $casualties = floor((($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) / 100) * $percent);
  330. $army_defense[$i]["casualties_fighters"] += $casualties;
  331. // print "FIGHTERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  332. }
  333. if (isset ($army_defense[$i]["stations"]))
  334. if ($total_defense_strength["stations"] != 0) {
  335. $percent = (((($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) / $total_defense_strength["stations"]) * 100) / 100) * $casualties_defense;
  336. if ($percent > 100)
  337. $percent = 100;
  338. $casualties = floor((($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) / 100) * $percent);
  339. $army_defense[$i]["casualties_stations"] += $casualties;
  340. // print "STATIONS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  341. }
  342. if ($round >= CONF_INVASION_LIGHTCRUISER_PROTECTION_ROUNDS)
  343. if ($total_defense_strength["lightcruisers"] != 0) {
  344. $percent = (((($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) / $total_defense_strength["lightcruisers"]) * 100) / 100) * $casualties_defense;
  345. if ($percent > 100)
  346. $percent = 100;
  347. $casualties = floor((($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) / 100) * $percent);
  348. $army_defense[$i]["casualties_lightcruisers"] += $casualties;
  349. // print "LIGHTCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  350. }
  351. if ($total_defense_strength["heavycruisers"] != 0) {
  352. $percent = (((($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) / $total_defense_strength["heavycruisers"]) * 100) / 100) * $casualties_defense;
  353. if ($percent > 100)
  354. $percent = 100;
  355. $casualties = floor((($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) / 100) * $percent);
  356. $army_defense[$i]["casualties_heavycruisers"] += $casualties;
  357. // print "HEAVYCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  358. }
  359. }
  360. // print "<HR>";
  361. }
  362. // print "Space attack result: (ATTACK: ".$space_won_attack." / DEFENSE: ".$space_won_defense.")<br/>";
  363. if ($space_won_attack < 3)
  364. return $this->Finish(false, false, false, $army_attack, $army_defense);
  365. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  366. // Orbital attack!
  367. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  368. // print "<B>ORBITAL</B><br/>";
  369. $orbital_won_attack = 0;
  370. $orbital_won_defense = 0;
  371. for ($round = 0; $round < 5; $round++) {
  372. // print "ROUND ".($round+1)."<br/>";
  373. $attack_strength = 1;
  374. $total_attack_strength = array ();
  375. $total_attack_strength["soldiers"] = 0;
  376. $total_attack_strength["fighters"] = 0;
  377. $total_attack_strength["lightcruisers"] = 0;
  378. $total_attack_strength["heavycruisers"] = 0;
  379. for ($i = 0; $i < count($army_attack); $i++) {
  380. $soldiers_strength = (($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) * $units_info["soldiers_" . $army_attack[$i]["convoy_soldiers_level"]]["invasion_orbital"]);
  381. $soldiers_strength = floor(($soldiers_strength / 100) * $army_attack[$i]["effectiveness"]);
  382. $attack_strength += $soldiers_strength;
  383. $fighters_strength = (($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) * $units_info["fighters_" . $army_attack[$i]["convoy_fighters_level"]]["invasion_orbital"]);
  384. $fighters_strength = floor(($fighters_strength / 100) * $army_attack[$i]["effectiveness"]);
  385. $attack_strength += $fighters_strength;
  386. $lightcruisers_strength = (($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) * $units_info["lightcruisers_" . $army_attack[$i]["convoy_lightcruisers_level"]]["invasion_orbital"]);
  387. $lightcruisers_strength = floor(($lightcruisers_strength / 100) * $army_attack[$i]["effectiveness"]);
  388. $attack_strength += $lightcruisers_strength;
  389. $heavycruisers_strength = (($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) * $units_info["heavycruisers_" . $army_attack[$i]["convoy_heavycruisers_level"]]["invasion_orbital"]);
  390. $heavycruisers_strength = floor(($heavycruisers_strength / 100) * $army_attack[$i]["effectiveness"]);
  391. $attack_strength += $heavycruisers_strength;
  392. $total_attack_strength["soldiers"] += $soldiers_strength;
  393. $total_attack_strength["fighters"] += $fighters_strength;
  394. $total_attack_strength["lightcruisers"] += $lightcruisers_strength;
  395. $total_attack_strength["heavycruisers"] += $heavycruisers_strength;
  396. }
  397. $defense_strength = 1;
  398. $total_defense_strength = array ();
  399. $total_defense_strength["soldiers"] = 0;
  400. $total_defense_strength["stations"] = 0;
  401. $total_defense_strength["fighters"] = 0;
  402. $total_defense_strength["lightcruisers"] = 0;
  403. $total_defense_strength["heavycruisers"] = 0;
  404. for ($i = 0; $i < count($army_defense); $i++) {
  405. $soldiers_strength = (($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) * $units_info["soldiers_" . $army_defense[$i]["soldiers_level"]]["invasion_orbital"]);
  406. $soldiers_strength = floor(($soldiers_strength / 100) * $army_defense[$i]["effectiveness"]);
  407. $defense_strength += $soldiers_strength;
  408. $fighters_strength = (($army_defense[$i]["fighters"]-$army_defense[$i]["casualties_fighters"]) * $units_info["fighters_".$army_defense[$i]["fighters_level"]]["invasion_orbital"]);
  409. $fighters_strength = floor(($fighters_strength/100)*$army_defense[$i]["effectiveness"]);
  410. if (isset($army_defense[$i]["stations"])) {
  411. $stations_strength = (($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) * $units_info["fighters_" . $army_defense[$i]["stations_level"]]["invasion_orbital"]);
  412. $stations_strength = floor(($stations_strength / 100) * $army_defense[$i]["effectiveness"]);
  413. $defense_strength += $stations_strength;
  414. }
  415. $lightcruisers_strength = (($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) * $units_info["lightcruisers_" . $army_defense[$i]["lightcruisers_level"]]["invasion_orbital"]);
  416. $soldiers_strength = floor(($soldiers_strength / 100) * $army_defense[$i]["effectiveness"]);
  417. $defense_strength += $lightcruisers_strength;
  418. $heavycruisers_strength = (($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) * $units_info["heavycruisers_" . $army_defense[$i]["heavycruisers_level"]]["invasion_orbital"]);
  419. $heavycruisers_strength = floor(($heavycruisers_strength / 100) * $army_defense[$i]["effectiveness"]);
  420. $defense_strength += $heavycruisers_strength;
  421. $total_defense_strength["soldiers"] += $soldiers_strength;
  422. $total_defense_strength["fighters"] += $fighters_strength;
  423. $total_defense_strength["stations"] += $stations_strength;
  424. $total_defense_strength["lightcruisers"] += $lightcruisers_strength;
  425. $total_defense_strength["heavycruisers"] += $heavycruisers_strength;
  426. }
  427. $defense_strength *= CONF_INVASION_DEFENSE_BONUS;
  428. $this->total_strength["ORBITAL"][$round] = array (
  429. "attack" => $total_attack_strength,
  430. "defense" => $total_defense_strength
  431. );
  432. // $attack_strength = 8000;
  433. // $defense_strength = 5000;
  434. // $attack_strength = 4000;
  435. // $defense_strength = 5000;
  436. // add randomness
  437. $attack_strength += floor(rand(0, CONF_INVASION_RANDOMNESS) * ($attack_strength / 100));
  438. $defense_strength += floor(rand(0, CONF_INVASION_RANDOMNESS) * ($defense_strength / 100));
  439. if ($attack_strength == 0)
  440. $attack_strength = 1;
  441. if ($defense_strength == 0)
  442. $defense_strength = 1;
  443. // print "ATTACK STRENGTH: ".$attack_strength."<br/>";
  444. // print "DEFENSE STRENGTH: ".$defense_strength."<br/>";
  445. $casualties = $attack_strength - $defense_strength;
  446. if ($casualties == 0)
  447. $casualties = 1;
  448. // print "RAW DAMAGE: ".$casualties."<br/>";
  449. $casualties_attack = 0;
  450. $casualties_defense = 0;
  451. if ($casualties <= 1) {
  452. // print "ATTACKERS LOOSE<br/>";
  453. $casualties_attack = (($defense_strength / $attack_strength) * 100);
  454. $casualties_defense = (($attack_strength / $defense_strength) * 100);
  455. $casualties_attack = ($casualties_attack) / CONF_INVASION_CASUALTIES_WON;
  456. $casualties_defense = ($casualties_defense) / CONF_INVASION_CASUALTIES_LOOSE;
  457. $orbital_won_defense++;
  458. } else {
  459. // print "DEFENDERS LOOSE<br/>";
  460. $casualties_attack = (($defense_strength / $attack_strength) * 100);
  461. $casualties_defense = (($attack_strength / $defense_strength) * 100);
  462. $casualties_attack = ($casualties_attack) / CONF_INVASION_CASUALTIES_LOOSE;
  463. $casualties_defense = ($casualties_defense) / CONF_INVASION_CASUALTIES_WON;
  464. $orbital_won_attack++;
  465. }
  466. if ($casualties_attack > 100)
  467. $casualties_attack = 100;
  468. if ($casualties_defense > 100)
  469. $casualties_defense = 100;
  470. $this->total_casualties["ORBITAL"][$round] = array (
  471. "attack" => $casualties_attack,
  472. "defense" => $casualties_defense
  473. );
  474. // print "CASUALTIES ATTACK: $casualties_attack<br/>";
  475. // print "CASUALTIES DEFENSE: $casualties_defense<br/>";
  476. // print "<br/>";
  477. // calculating casualties
  478. for ($i = 0; $i < count($army_attack); $i++) {
  479. // print "ATTACK CONVOY: $i<br/>";
  480. if ($total_attack_strength["soldiers"] != 0) {
  481. $percent = (((($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) / $total_attack_strength["soldiers"]) * 100) / 100) * $casualties_attack;
  482. if ($percent > 100)
  483. $percent = 100;
  484. $casualties = floor((($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) / 100) * $percent);
  485. $army_attack[$i]["casualties_soldiers"] += $casualties;
  486. // print "SOLDIERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  487. }
  488. if ($total_attack_strength["fighters"] != 0) {
  489. $percent = (((($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) / $total_attack_strength["fighters"]) * 100) / 100) * $casualties_attack;
  490. if ($percent > 100)
  491. $percent = 100;
  492. $casualties = floor((($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) / 100) * $percent);
  493. $army_attack[$i]["casualties_fighters"] += $casualties;
  494. // print "FIGHTERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  495. }
  496. if ($round >= CONF_INVASION_LIGHTCRUISER_PROTECTION_ROUNDS)
  497. if ($total_attack_strength["lightcruisers"] != 0) {
  498. $percent = (((($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) / $total_attack_strength["lightcruisers"]) * 100) / 100) * $casualties_attack;
  499. if ($percent > 100)
  500. $percent = 100;
  501. $casualties = floor((($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) / 100) * $percent);
  502. $army_attack[$i]["casualties_lightcruisers"] += $casualties;
  503. // print "LIGHTCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  504. }
  505. if ($total_attack_strength["heavycruisers"] != 0) {
  506. $percent = (((($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) / $total_attack_strength["heavycruisers"]) * 100) / 100) * $casualties_attack;
  507. if ($percent > 100)
  508. $percent = 100;
  509. $casualties = floor((($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) / 100) * $percent);
  510. $army_attack[$i]["casualties_heavycruisers"] += $casualties;
  511. // print "HEAVYCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  512. }
  513. }
  514. for ($i = 0; $i < count($army_defense); $i++) {
  515. // print "DEFENSE CONVOY: $i<br/>";
  516. if ($total_defense_strength["soldiers"] != 0) {
  517. $percent = (((($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) / $total_defense_strength["soldiers"]) * 100) / 100) * $casualties_defense;
  518. if ($percent > 100)
  519. $percent = 100;
  520. $casualties = floor((($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) / 100) * $percent);
  521. $army_defense[$i]["casualties_soldiers"] += $casualties;
  522. // print "SOLDIERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  523. }
  524. if ($total_defense_strength["fighters"] != 0) {
  525. $percent = (((($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) / $total_defense_strength["fighters"]) * 100) / 100) * $casualties_defense;
  526. if ($percent > 100)
  527. $percent = 100;
  528. $casualties = floor((($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) / 100) * $percent);
  529. $army_defense[$i]["casualties_fighters"] += $casualties;
  530. // print "FIGHTERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  531. }
  532. if (isset ($army_defense[$i]["stations"]))
  533. if ($total_defense_strength["stations"] != 0) {
  534. $percent = (((($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) / $total_defense_strength["stations"]) * 100) / 100) * $casualties_defense;
  535. if ($percent > 100)
  536. $percent = 100;
  537. $casualties = floor((($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) / 100) * $percent);
  538. $army_defense[$i]["casualties_stations"] += $casualties;
  539. // print "STATIONS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  540. }
  541. if ($round >= CONF_INVASION_LIGHTCRUISER_PROTECTION_ROUNDS)
  542. if ($total_defense_strength["lightcruisers"] != 0) {
  543. $percent = (((($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) / $total_defense_strength["lightcruisers"]) * 100) / 100) * $casualties_defense;
  544. if ($percent > 100)
  545. $percent = 100;
  546. $casualties = floor((($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) / 100) * $percent);
  547. $army_defense[$i]["casualties_lightcruisers"] += $casualties;
  548. // print "LIGHTCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  549. }
  550. if ($total_defense_strength["heavycruisers"] != 0) {
  551. $percent = (((($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) / $total_defense_strength["heavycruisers"]) * 100) / 100) * $casualties_defense;
  552. if ($percent > 100)
  553. $percent = 100;
  554. $casualties = floor((($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) / 100) * $percent);
  555. $army_defense[$i]["casualties_heavycruisers"] += $casualties;
  556. // print "HEAVYCRUISERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  557. }
  558. }
  559. // print "<HR>";
  560. }
  561. // print "Space attack result: (ATTACK: ".$orbital_won_attack." / DEFENSE: ".$orbital_won_defense.")<br/>";
  562. if ($orbital_won_attack < 3)
  563. return $this->Finish(true, false, false, $army_attack, $army_defense);
  564. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  565. // Ground attack!
  566. ///////////////////////////////////////////////////////////////////////////////////////////////////////
  567. // print "<B>GROUND</B><br/>";
  568. $ground_won_attack = 0;
  569. $ground_won_defense = 0;
  570. for ($round = 0; $round < 5; $round++) {
  571. // print "ROUND ".($round+1)."<br/>";
  572. $attack_strength = 1;
  573. $total_attack_strength = array ();
  574. $total_attack_strength["soldiers"] = 0;
  575. $total_attack_strength["fighters"] = 0;
  576. $total_attack_strength["lightcruisers"] = 0;
  577. $total_attack_strength["heavycruisers"] = 0;
  578. for ($i = 0; $i < count($army_attack); $i++) {
  579. $soldiers_strength = (($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) * $units_info["soldiers_" . $army_attack[$i]["convoy_soldiers_level"]]["invasion_ground"]);
  580. $soldiers_strength = floor(($soldiers_strength / 100) * $army_attack[$i]["effectiveness"]);
  581. $attack_strength += $soldiers_strength;
  582. $fighters_strength = (($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) * $units_info["fighters_" . $army_attack[$i]["convoy_fighters_level"]]["invasion_ground"]);
  583. $fighters_strength = floor(($fighters_strength / 100) * $army_attack[$i]["effectiveness"]);
  584. $attack_strength += $fighters_strength;
  585. $lightcruisers_strength = (($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) * $units_info["lightcruisers_" . $army_attack[$i]["convoy_lightcruisers_level"]]["invasion_ground"]);
  586. $lightcruisers_strength = floor(($lightcruisers_strength / 100) * $army_attack[$i]["effectiveness"]);
  587. $attack_strength += $lightcruisers_strength;
  588. $heavycruisers_strength = (($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) * $units_info["heavycruisers_" . $army_attack[$i]["convoy_heavycruisers_level"]]["invasion_ground"]);
  589. $heavycruisers_strength = floor(($heavycruisers_strength / 100) * $army_attack[$i]["effectiveness"]);
  590. $attack_strength += $heavycruisers_strength;
  591. $total_attack_strength["soldiers"] += $soldiers_strength;
  592. $total_attack_strength["fighters"] += $fighters_strength;
  593. $total_attack_strength["lightcruisers"] += $lightcruisers_strength;
  594. $total_attack_strength["heavycruisers"] += $heavycruisers_strength;
  595. }
  596. // print "<HR>";
  597. // print_r($total_attack_strength);
  598. // print "<BR/>";
  599. $defense_strength = 1;
  600. $total_defense_strength = array ();
  601. $total_defense_strength["soldiers"] = 0;
  602. $total_defense_strength["stations"] = 0;
  603. $total_defense_strength["fighters"] = 0;
  604. $total_defense_strength["lightcruisers"] = 0;
  605. $total_defense_strength["heavycruisers"] = 0;
  606. for ($i = 0; $i < count($army_defense); $i++) {
  607. $soldiers_strength = (($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) * $units_info["soldiers_" . $army_defense[$i]["soldiers_level"]]["invasion_ground"]);
  608. $soldiers_strength = floor(($soldiers_strength / 100) * $army_defense[$i]["effectiveness"]);
  609. $defense_strength += $soldiers_strength;
  610. $fighters_strength = (($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) * $units_info["fighters_" . $army_defense[$i]["fighters_level"]]["invasion_ground"]);
  611. $fighters_strength = floor(($fighters_strength / 100) * $army_defense[$i]["effectiveness"]);
  612. // $defense_strength += $fighters_strength;
  613. if (isset($army_defense[$i]["stations"])) {
  614. $stations_strength = (($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) * $units_info["fighters_" . $army_defense[$i]["stations_level"]]["invasion_ground"]);
  615. $stations_strength = floor(($stations_strength / 100) * $army_defense[$i]["effectiveness"]);
  616. $defense_strength += $stations_strength;
  617. }
  618. $lightcruisers_strength = (($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) * $units_info["lightcruisers_" . $army_defense[$i]["lightcruisers_level"]]["invasion_ground"]);
  619. $lightcruisers_strength = floor(($lightcruisers_strength / 100) * $army_defense[$i]["effectiveness"]);
  620. $defense_strength += $lightcruisers_strength;
  621. $heavycruisers_strength = (($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) * $units_info["heavycruisers_" . $army_defense[$i]["heavycruisers_level"]]["invasion_ground"]);
  622. $heavycruisers_strength = floor(($heavycruisers_strength / 100) * $army_defense[$i]["effectiveness"]);
  623. $defense_strength += $heavycruisers_strength;
  624. $total_defense_strength["soldiers"] += $soldiers_strength;
  625. $total_defense_strength["fighters"] += $fighters_strength;
  626. $total_defense_strength["stations"] += $stations_strength;
  627. $total_defense_strength["lightcruisers"] += $lightcruisers_strength;
  628. $total_defense_strength["heavycruisers"] += $heavycruisers_strength;
  629. }
  630. // print_r($total_defense_strength);
  631. $defense_strength *= CONF_INVASION_DEFENSE_BONUS;
  632. $this->total_strength["GROUND"][$round] = array (
  633. "attack" => $total_attack_strength,
  634. "defense" => $total_defense_strength
  635. );
  636. // add randomness
  637. $attack_strength += floor(rand(0, CONF_INVASION_RANDOMNESS) * ($attack_strength / 100));
  638. $defense_strength += floor(rand(0, CONF_INVASION_RANDOMNESS) * ($defense_strength / 100));
  639. // print "<HR>";
  640. // print "ATTACK STRENGTH: ".$attack_strength."<br/>";
  641. // print "DEFENSE STRENGTH: ".$defense_strength."<br/>";
  642. $casualties = $attack_strength - $defense_strength;
  643. if ($casualties == 0)
  644. $casualties = 1;
  645. // print "RAW DAMAGE: ".$casualties."<br/>";
  646. $casualties_attack = 0;
  647. $casualties_defense = 0;
  648. if ($attack_strength == 0)
  649. $attack_strength = 1;
  650. if ($defense_strength == 0)
  651. $defense_strength = 1;
  652. if ($casualties <= 1) {
  653. // print "ATTACKERS LOOSE<br/>";
  654. $casualties_attack = (($defense_strength / $attack_strength) * 100);
  655. $casualties_defense = (($attack_strength / $defense_strength) * 100);
  656. $casualties_attack = ($casualties_attack) / CONF_INVASION_CASUALTIES_WON;
  657. $casualties_defense = ($casualties_defense) / CONF_INVASION_CASUALTIES_LOOSE;
  658. $ground_won_defense++;
  659. } else {
  660. // print "DEFENDERS LOOSE<br/>";
  661. $casualties_attack = (($defense_strength / $attack_strength) * 100);
  662. $casualties_defense = (($attack_strength / $defense_strength) * 100);
  663. $casualties_attack = ($casualties_attack) / CONF_INVASION_CASUALTIES_LOOSE;
  664. $casualties_defense = ($casualties_defense) / CONF_INVASION_CASUALTIES_WON;
  665. $ground_won_attack++;
  666. }
  667. if ($casualties_attack > 100)
  668. $casualties_attack = 100;
  669. if ($casualties_defense > 100)
  670. $casualties_defense = 100;
  671. if ($casualties_attack < 0)
  672. $casualties_attack = 0;
  673. if ($casualties_defense < 0)
  674. $casualties_defense = 0;
  675. $this->total_casualties["GROUND"][$round] = array (
  676. "attack" => $casualties_attack,
  677. "defense" => $casualties_defense
  678. );
  679. // calculating casualties
  680. for ($i = 0; $i < count($army_attack); $i++) {
  681. // print "ATTACK CONVOY: $i<br/>";
  682. if ($total_attack_strength["soldiers"] != 0) {
  683. $percent = (((($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) / $total_attack_strength["soldiers"]) * 100) / 100) * $casualties_attack;
  684. if ($percent > 100)
  685. $percent = 100;
  686. $casualties = floor((($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]) / 100) * $percent);
  687. $army_attack[$i]["casualties_soldiers"] += $casualties;
  688. }
  689. if ($total_attack_strength["fighters"] != 0) {
  690. $percent = (((($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) / $total_attack_strength["fighters"]) * 100) / 100) * $casualties_attack;
  691. if ($percent > 100)
  692. $percent = 100;
  693. $casualties = floor((($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]) / 100) * $percent);
  694. $army_attack[$i]["casualties_fighters"] += $casualties;
  695. }
  696. if ($round >= CONF_INVASION_LIGHTCRUISER_PROTECTION_ROUNDS)
  697. if ($total_attack_strength["lightcruisers"] != 0) {
  698. $percent = (((($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) / $total_attack_strength["lightcruisers"]) * 100) / 100) * $casualties_attack;
  699. if ($percent > 100)
  700. $percent = 100;
  701. $casualties = floor((($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]) / 100) * $percent);
  702. $army_attack[$i]["casualties_lightcruisers"] += $casualties;
  703. }
  704. if ($total_attack_strength["heavycruisers"] != 0) {
  705. $percent = (((($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) / $total_attack_strength["heavycruisers"]) * 100) / 100) * $casualties_attack;
  706. if ($percent > 100)
  707. $percent = 100;
  708. $casualties = floor((($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]) / 100) * $percent);
  709. $army_attack[$i]["casualties_heavycruisers"] += $casualties;
  710. }
  711. }
  712. for ($i = 0; $i < count($army_defense); $i++) {
  713. if ($total_defense_strength["soldiers"] != 0) {
  714. $percent = (((($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) / $total_defense_strength["soldiers"]) * 100) / 100) * $casualties_defense;
  715. if ($percent > 100)
  716. $percent = 100;
  717. $casualties = floor((($army_defense[$i]["soldiers"] - $army_defense[$i]["casualties_soldiers"]) / 100) * $percent);
  718. $army_defense[$i]["casualties_soldiers"] += $casualties;
  719. // print "SOLDIERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  720. }
  721. if ($total_defense_strength["fighters"] != 0) {
  722. $percent = (((($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) / $total_defense_strength["fighters"]) * 100) / 100) * $casualties_defense;
  723. if ($percent > 100)
  724. $percent = 100;
  725. $casualties = floor((($army_defense[$i]["fighters"] - $army_defense[$i]["casualties_fighters"]) / 100) * $percent);
  726. $army_defense[$i]["casualties_fighters"] += $casualties;
  727. // print "FIGHTERS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  728. }
  729. if ($total_defense_strength["stations"] != 0) {
  730. if (isset($army_defense[$i]["stations"])) {
  731. $percent = (((($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) / $total_defense_strength["stations"]) * 100) / 100) * $casualties_defense;
  732. if ($percent > 100)
  733. $percent = 100;
  734. $casualties = floor((($army_defense[$i]["stations"] - $army_defense[$i]["casualties_stations"]) / 100) * $percent);
  735. $army_defense[$i]["casualties_stations"] += $casualties;
  736. // print "STATIONS CASUALTIES: " .$percent." % (".$casualties.")<br/>";
  737. }
  738. }
  739. if ($round >= CONF_INVASION_LIGHTCRUISER_PROTECTION_ROUNDS)
  740. if ($total_defense_strength["lightcruisers"] != 0) {
  741. $percent = (((($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) / $total_defense_strength["lightcruisers"]) * 100) / 100) * $casualties_defense;
  742. if ($percent > 100)
  743. $percent = 100;
  744. $casualties = floor((($army_defense[$i]["lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]) / 100) * $percent);
  745. $army_defense[$i]["casualties_lightcruisers"] += $casualties;
  746. }
  747. if ($total_defense_strength["heavycruisers"] != 0) {
  748. $percent = (((($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) / $total_defense_strength["heavycruisers"]) * 100) / 100) * $casualties_defense;
  749. if ($percent > 100)
  750. $percent = 100;
  751. $casualties = floor((($army_defense[$i]["heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]) / 100) * $percent);
  752. $army_defense[$i]["casualties_heavycruisers"] += $casualties;
  753. }
  754. }
  755. }
  756. if ($ground_won_attack < 3)
  757. return $this->Finish(true, false, false, $army_attack, $army_defense);
  758. $this->Finish(true, true, true, $army_attack, $army_defense);
  759. }
  760. //////////////////////////////////////////////////////////////////////////////////////
  761. //
  762. //////////////////////////////////////////////////////////////////////////////////////
  763. function Finish($space, $orbital, $ground, $army_attack, $army_defense) {
  764. global $GAME;
  765. if (INVASION_DEBUG) print "<PRE>";
  766. if (INVASION_DEBUG) print_r($_SESSION);
  767. //if ($this->game_id == 4) die("This is our game!");
  768. $strength = $this->total_strength["SPACE"][0];
  769. $time_now = time(NULL);
  770. if ($ground == true) {
  771. // invasion worked
  772. for ($i=0;$i<count($army_attack);$i++) {
  773. $rs = $this->DB->Execute("SELECT score FROM system_tb_players WHERE id='".$army_attack[$i]["player_id"]."'");
  774. if (!$rs) trigger_error($this->DB->ErrorMsg());
  775. if (!INVASION_DEBUG) if (!$this->DB->Execute("UPDATE system_tb_players SET score='".($rs->fields["score"]+5)."' WHERE id='".$army_attack[$i]["player_id"]."'")) trigger_error($this->DB->ErrorMsg());
  776. if (isset($_SESSION["player"])) {
  777. if ($_SESSION["player"] == $army_attack[$i]["player_id"]) {
  778. $_SESSION["player"]["score"] = $rs->fields["score"]+5;
  779. }
  780. }
  781. }
  782. $target_empire = new Empire($this->DB, $GAME["template"], $GAME["gameplay_costs"]);
  783. $target_empire->Load($army_defense[0]["empire"]);
  784. if (INVASION_DEBUG) print "Defender empire: ".$army_defense[0]["empire"]."\r\n";
  785. // Calculating losts for the target
  786. $percent = 0;
  787. for ($i = 0; $i < count($this->total_casualties["GROUND"]); $i++) {
  788. $percent = ($percent + $this->total_casualties["GROUND"][$i]["defense"]) / 2;
  789. }
  790. $percent += CONF_INVASION_PLANETS_MINIMUM;
  791. if ($percent > CONF_INVASION_PLANETS_MAXIMUM)
  792. $percent = CONF_INVASION_PLANETS_MAXIMUM;
  793. $percent = floor($percent);
  794. if (INVASION_DEBUG) print "Defender casualties percent: " .$percent."%\r\n";
  795. $lost_population = floor(($target_empire->data["population"] / 100) * $percent);
  796. if (INVASION_DEBUG) print "Defender population lost: " .$lost_population."\r\n";
  797. $target_empire->data["population"] -= $lost_population;
  798. $lost_credits = floor(($target_empire->data["credits"] / 100) * $percent);
  799. if (INVASION_DEBUG) print "Defender credits lost: " .$lost_credits."\r\n";
  800. $target_empire->data["credits"] -= $lost_credits;
  801. $lost_food_planets = floor(($target_empire->planets->data["food_planets"] / 100) * $percent);
  802. if (INVASION_DEBUG) print "Defender food planets lost: " . $lost_food_planets."\r\n";
  803. $lost_ore_planets = floor(($target_empire->planets->data["ore_planets"] / 100) * $percent);
  804. if (INVASION_DEBUG) print "Defender ore planets lost: " . $lost_ore_planets."\r\n";
  805. $lost_tourism_planets = floor(($target_empire->planets->data["tourism_planets"] / 100) * $percent);
  806. if (INVASION_DEBUG) print "Defender tourism planets lost: " . $lost_tourism_planets."\r\n";
  807. $lost_supply_planets = floor(($target_empire->planets->data["supply_planets"] / 100) * $percent);
  808. if (INVASION_DEBUG) print "Defender supply planets lost: " . $lost_supply_planets."\r\n";
  809. $lost_gov_planets = floor(($target_empire->planets->data["gov_planets"] / 100) * $percent);
  810. if (INVASION_DEBUG) print "Defender governement planets lost: " . $lost_gov_planets."\r\n";
  811. $lost_edu_planets = floor(($target_empire->planets->data["edu_planets"] / 100) * $percent);
  812. if (INVASION_DEBUG) print "Defender education planets lost: " . $lost_edu_planets."\r\n";
  813. $lost_research_planets = floor(($target_empire->planets->data["research_planets"] / 100) * $percent);
  814. if (INVASION_DEBUG) print "Defender research planets lost: " . $lost_research_planets."\r\n";
  815. $lost_urban_planets = floor(($target_empire->planets->data["urban_planets"] / 100) * $percent);
  816. if (INVASION_DEBUG) print "Defender urban planets lost: " . $lost_urban_planets."\r\n";
  817. $lost_petro_planets = floor(($target_empire->planets->data["petro_planets"] / 100) * $percent);
  818. if (INVASION_DEBUG) print "Defender petroleum planets lost: " . $lost_petro_planets."\r\n";
  819. $lost_antipollu_planets = floor(($t

Large files files are truncated, but you can click here to view the full file