PageRenderTime 34ms CodeModel.GetById 19ms 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
  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(($target_empire->planets->data["antipollu_planets"] / 100) * $percent);
  820. if (INVASION_DEBUG) print "Defender anti-pollution planets lost: " . $lost_antipollu_planets."\r\n";
  821. // distribute equally
  822. if (INVASION_DEBUG) print "Distribute equally\r\n";
  823. if (INVASION_DEBUG) print "<hr/>";
  824. for ($i = 0; $i < count($army_attack); $i++) {
  825. $temp_empire = new Empire($this->DB, $GAME["template"], $GAME["gameplay_costs"]);
  826. $temp_empire->Load($army_attack[$i]["empire_from"]);
  827. if (INVASION_DEBUG) print "Empire: ".$army_attack[$i]["empire_from"]."\r\n";
  828. $reclaimed_food_planets = floor($lost_food_planets / count($army_attack));
  829. $temp_empire->planets->data["food_planets"] += $reclaimed_food_planets;
  830. if (INVASION_DEBUG) print "Food planets: " . $reclaimed_food_planets ."\r\n";
  831. $reclaimed_ore_planets = floor($lost_ore_planets / count($army_attack));
  832. $temp_empire->planets->data["ore_planets"] += $reclaimed_ore_planets;
  833. if (INVASION_DEBUG) print "Ore planets: " . $reclaimed_ore_planets ."\r\n";
  834. $reclaimed_tourism_planets = floor($lost_tourism_planets / count($army_attack));
  835. $temp_empire->planets->data["tourism_planets"] += $reclaimed_tourism_planets;
  836. if (INVASION_DEBUG) print "Tourism planets: " . $reclaimed_tourism_planets ."\r\n";
  837. $reclaimed_supply_planets = floor($lost_supply_planets / count($army_attack));
  838. $temp_empire->planets->data["supply_planets"] += $reclaimed_supply_planets;
  839. if (INVASION_DEBUG) print "Supply planets: " . $reclaimed_supply_planets ."\r\n";
  840. $reclaimed_gov_planets = floor($lost_gov_planets / count($army_attack));
  841. $temp_empire->planets->data["gov_planets"] += $reclaimed_gov_planets;
  842. if (INVASION_DEBUG) print "Government planets: " . $reclaimed_gov_planets ."\r\n";
  843. $reclaimed_edu_planets = floor($lost_edu_planets / count($army_attack));
  844. $temp_empire->planets->data["edu_planets"] += $reclaimed_edu_planets;
  845. if (INVASION_DEBUG) print "Education planets: " . $reclaimed_edu_planets ."\r\n";
  846. $reclaimed_research_planets = floor($lost_research_planets / count($army_attack));
  847. $temp_empire->planets->data["research_planets"] += $reclaimed_research_planets;
  848. if (INVASION_DEBUG) print "Research planets: " . $reclaimed_research_planets ."\r\n";
  849. $reclaimed_urban_planets = floor($lost_urban_planets / count($army_attack));
  850. $temp_empire->planets->data["urban_planets"] += $reclaimed_urban_planets;
  851. if (INVASION_DEBUG) print "Urban planets: " . $reclaimed_urban_planets ."\r\n";
  852. $reclaimed_petro_planets = floor($lost_petro_planets / count($army_attack));
  853. $temp_empire->planets->data["petro_planets"] += $reclaimed_petro_planets;
  854. if (INVASION_DEBUG) print "Petroleum planets: " . $reclaimed_petro_planets ."\r\n";
  855. $reclaimed_antipollu_planets = floor($lost_antipollu_planets / count($army_attack));
  856. $temp_empire->planets->data["antipollu_planets"] += $reclaimed_antipollu_planets;
  857. if (INVASION_DEBUG) print "Anti-pollution planets: " . $reclaimed_antipollu_planets ."\r\n";
  858. $reclaimed_credits = floor($lost_credits / count($army_attack));
  859. if (INVASION_DEBUG) print "Credits: " . $reclaimed_credits ."\r\n";
  860. $temp_empire->data["credits"] += $reclaimed_credits;
  861. if (INVASION_DEBUG) print "Supposed to save.\r\n";
  862. if (!INVASION_DEBUG) $temp_empire->Save();
  863. unset ($temp_empire);
  864. }
  865. if (INVASION_DEBUG) print "<hr/>";
  866. $target_empire->planets->data["food_planets"] -= $lost_food_planets;
  867. $target_empire->planets->data["ore_planets"] -= $lost_ore_planets;
  868. $target_empire->planets->data["tourism_planets"] -= $lost_tourism_planets;
  869. $target_empire->planets->data["supply_planets"] -= $lost_supply_planets;
  870. $target_empire->planets->data["gov_planets"] -= $lost_gov_planets;
  871. $target_empire->planets->data["edu_planets"] -= $lost_edu_planets;
  872. $target_empire->planets->data["research_planets"] -= $lost_research_planets;
  873. $target_empire->planets->data["urban_planets"] -= $lost_urban_planets;
  874. $target_empire->planets->data["petro_planets"] -= $lost_petro_planets;
  875. $target_empire->planets->data["antipollu_planets"] -= $lost_antipollu_planets;
  876. $target_empire->planets->data["max_ore"] = $target_empire->planets->data["ore_planets"];
  877. $target_empire->planets->data["max_food"] = $target_empire->planets->data["food_planets"];
  878. $target_empire->planets->data["max_tourism"] = $target_empire->planets->data["tourism_planets"];
  879. $target_empire->planets->data["max_supply"] = $target_empire->planets->data["supply_planets"];
  880. $target_empire->planets->data["max_gov"] = $target_empire->planets->data["gov_planets"];
  881. $target_empire->planets->data["max_edu"] = $target_empire->planets->data["edu_planets"];
  882. $target_empire->planets->data["max_research"] = $target_empire->planets->data["research_planets"];
  883. $target_empire->planets->data["max_urban"] = $target_empire->planets->data["urban_planets"];
  884. $target_empire->planets->data["max_petro"] = $target_empire->planets->data["petro_planets"];
  885. $target_empire->planets->data["max_antipollu"] = $target_empire->planets->data["antipollu_planets"];
  886. $target_empire->data["civil_status"]++;
  887. if ($target_empire->data["civil_status"] >= 7) {
  888. $target_empire->data["civil_status"] = 7;
  889. $evt = new EventCreator($this->DB);
  890. $evt->type = CONF_EVENT_ELIMINATED;
  891. $evt->from = -1;
  892. for ($i=0;$i<count($army_attack);$i++) {
  893. $rs = $this->DB->Execute("SELECT score FROM system_tb_players WHERE id='".$army_attack[$i]["player_id"]."'");
  894. if ($rs) {
  895. if (!$this->DB->Execute("UPDATE system_tb_players SET score='".($rs->fields["score"]+10)."' WHERE id='".$army_attack[$i]["player_id"]."'")) trigger_error($this->DB->ErrorMsg());
  896. }
  897. if (isset($_SESSION["player"])) {
  898. if ($_SESSION["player"] == $army_attack[$i]["player_id"]) {
  899. $_SESSION["player"] = $rs->fields["score"]+5;
  900. }
  901. }
  902. }
  903. $rs_from = $this->DB->Execute("SELECT id,emperor,name,networth FROM game".$this->game_id."_tb_empire WHERE id='" . $army_attack[0]["empire_from"]."'");
  904. if (!$rs_from)
  905. trigger_error($this->DB->ErrorMsg());
  906. $rs_to = $this->DB->Execute("SELECT id,emperor,name,networth FROM game".$this->game_id."_tb_empire WHERE id='" . $army_defense[0]["empire"]."'");
  907. if (!$rs_to)
  908. trigger_error($this->DB->ErrorMsg());
  909. $empire_from = $GAME["template"]->DisplayEmpireHTML($rs_from->fields["id"], $rs_from->fields["emperor"], $rs_from->fields["name"], "");
  910. $empire_to = $GAME["template"]->DisplayEmpireHTML($rs_to->fields["id"], $rs_to->fields["emperor"], $rs_to->fields["name"], "");
  911. $evt->params = array (
  912. "empire_from" => $empire_from,
  913. "empire_to" => $empire_to
  914. );
  915. if (!INVASION_DEBUG) $evt->Broadcast();
  916. if (!INVASION_DEBUG) $target_empire->UpdateNetworth();
  917. if (!INVASION_DEBUG) $target_empire->Collapse();
  918. if (!INVASION_DEBUG) $target_empire->Save();
  919. } else {
  920. if (INVASION_DEBUG) print "Save defender empire\r\n";
  921. if (!INVASION_DEBUG) $target_empire->UpdateNetworth();
  922. if (!INVASION_DEBUG) $target_empire->Save();
  923. }
  924. // UPDATING EFFECTIVENESS
  925. for ($i = 0; $i < count($army_attack); $i++) {
  926. $army_attack[$i]["effectiveness"] += CONF_INVASION_EFFECTIVENESS_WON;
  927. if ($army_attack[$i]["effectiveness"] > 150)
  928. $army_attack[$i]["effectiveness"] = 150;
  929. if (!INVASION_DEBUG) {
  930. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_army SET effectiveness='" . $army_attack[$i]["effectiveness"] . "' WHERE empire='" . $army_attack[$i]["empire_from"]."'"))
  931. trigger_error($this->DB->ErrorMsg());
  932. }
  933. }
  934. $army_defense[0]["effectiveness"] -= CONF_INVASION_EFFECTIVENESS_LOST;
  935. if ($army_attack[0]["effectiveness"] < 10)
  936. $army_attack[0]["effectiveness"] = 10;
  937. if (!INVASION_DEBUG) {
  938. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_army SET effectiveness='" . $army_defense[0]["effectiveness"] . "' WHERE empire='" . $army_defense[0]["empire"]."'"))
  939. trigger_error($this->DB->ErrorMsg());
  940. }
  941. if (count($army_defense) != 1)
  942. for ($i = 1; $i < count($army_defense); $i++) {
  943. $army_defense[$i]["effectiveness"] -= CONF_INVASION_EFFECTIVENESS_LOST;
  944. if ($army_defense[$i]["effectiveness"] < 10)
  945. $army_defense[$i]["effectiveness"] = 10;
  946. if (!INVASION_DEBUG) {
  947. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_army SET effectiveness='" . $army_defense[$i]["effectiveness"] . "' WHERE empire='" . $army_defense[$i]["empire_from"]."'"))
  948. trigger_error($this->DB->ErrorMsg());
  949. }
  950. }
  951. $evt = new EventCreator($this->DB);
  952. $evt->type = CONF_EVENT_INVADED;
  953. $evt->from = -1;
  954. $rs_from = $this->DB->Execute("SELECT id,emperor,name,networth FROM game".$this->game_id."_tb_empire WHERE id='" . $army_attack[0]["empire_from"]."'");
  955. if (!$rs_from)
  956. trigger_error($this->DB->ErrorMsg());
  957. $rs_to = $this->DB->Execute("SELECT id,emperor,name,networth FROM game".$this->game_id."_tb_empire WHERE id='" . $army_defense[0]["empire"]."'");
  958. if (!$rs_to)
  959. trigger_error($this->DB->ErrorMsg());
  960. $empire_from = $GAME["template"]->DisplayEmpireHTML($rs_from->fields["id"], $rs_from->fields["emperor"], $rs_from->fields["name"], "");
  961. $empire_to = $GAME["template"]->DisplayEmpireHTML($rs_to->fields["id"], $rs_to->fields["emperor"], $rs_to->fields["name"], "");
  962. $evt->params = array (
  963. "won" => true,
  964. "empire_from" => $empire_from,
  965. "empire_to" => $empire_to
  966. );
  967. if (!INVASION_DEBUG) $evt->broadcast();
  968. // Sending INVASION REPORT
  969. $evt = new EventCreator($this->DB);
  970. $evt->type = CONF_EVENT_INVASION_REPORT;
  971. $evt->from = -1;
  972. $evt->params = array (
  973. "space_won" => $space,
  974. "orbital_won" => $orbital,
  975. "ground_won" => $ground,
  976. "lost_population" => $lost_population,
  977. "lost_credits" => $lost_credits,
  978. "lost_food_planets" => $lost_food_planets,
  979. "lost_ore_planets" => $lost_ore_planets,
  980. "lost_supply_planets" => $lost_supply_planets,
  981. "lost_tourism_planets" => $lost_tourism_planets,
  982. "lost_gov_planets" => $lost_gov_planets,
  983. "lost_edu_planets" => $lost_edu_planets,
  984. "lost_research_planets" => $lost_research_planets,
  985. "lost_urban_planets" => $lost_urban_planets,
  986. "lost_petro_planets" => $lost_petro_planets,
  987. "lost_antipollu_planets" => $lost_antipollu_planets,
  988. "army_attack" => $army_attack,
  989. "army_defense" => $army_defense,
  990. "strength" => $strength
  991. );
  992. $invasion_info = serialize(array("params"=>$evt->params,"total_strength"=>$this->total_strength,"total_casualties"=>$this->total_casualties));
  993. for ($i=0;$i<count($army_attack);$i++) {
  994. if (!INVASION_DEBUG) $this->DB->Execute("INSERT INTO game".$this->game_id."_tb_invasion (empire_id,date,data) VALUES(".$army_attack[$i]["empire_from"].",".time().",'".base64_encode($invasion_info)."')");
  995. }
  996. for ($i=0;$i<count($army_defense);$i++) {
  997. if (!INVASION_DEBUG) {
  998. if ($i == 0)
  999. $this->DB->Execute("INSERT INTO game".$this->game_id."_tb_invasion (empire_id,date,data) VALUES(".$army_defense[$i]["empire"].",".time().",'".base64_encode($invasion_info)."')");
  1000. else
  1001. $this->DB->Execute("INSERT INTO game".$this->game_id."_tb_invasion (empire_id,date,data) VALUES(".$army_defense[$i]["empire_from"].",".time().",'".base64_encode($invasion_info)."')");
  1002. }
  1003. }
  1004. for ($i = 0; $i < count($army_attack); $i++) {
  1005. $evt->to = $army_attack[$i]["empire_from"];
  1006. if (!INVASION_DEBUG) $evt->Send();
  1007. }
  1008. $evt->to = $army_defense[0]["empire"];
  1009. if (!INVASION_DEBUG) $evt->Send();
  1010. if (count($army_defense) != 1)
  1011. for ($i = 0; $i < count($army_defense); $i++) {
  1012. if ($i == 0)
  1013. $evt->to = $army_defense[$i]["empire"];
  1014. else
  1015. $evt->to = $army_defense[$i]["empire_from"];
  1016. if (!INVASION_DEBUG) $evt->Send();
  1017. }
  1018. } else {
  1019. // invasion not worked
  1020. for ($i=0;$i<count($army_attack);$i++) {
  1021. $rs = $this->DB->Execute("SELECT score FROM system_tb_players WHERE id='".$army_attack[$i]["player_id"]."'");
  1022. 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());
  1023. if (isset($_SESSION["player"])) {
  1024. if ($_SESSION["player"] == $army_attack[$i]["player_id"]) {
  1025. $_SESSION["player"]["score"] = $rs->fields["score"]+5;
  1026. }
  1027. }
  1028. }
  1029. // UPDATING EFFECTIVENESS
  1030. for ($i = 0; $i < count($army_attack); $i++) {
  1031. $army_attack[$i]["effectiveness"] -= CONF_INVASION_EFFECTIVENESS_LOST;
  1032. if ($army_attack[$i]["effectiveness"] < 10)
  1033. $army_attack[$i]["effectiveness"] = 10;
  1034. if (!INVASION_DEBUG) {
  1035. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_army SET effectiveness='" . $army_attack[$i]["effectiveness"] . "' WHERE empire='" . $army_attack[$i]["empire_from"]."'"))
  1036. trigger_error($this->DB->ErrorMsg());
  1037. }
  1038. }
  1039. $army_defense[0]["effectiveness"] += CONF_INVASION_EFFECTIVENESS_WON;
  1040. if ($army_defense[0]["effectiveness"] > 150)
  1041. $army_defense[0]["effectiveness"] = 150;
  1042. if (!INVASION_DEBUG) {
  1043. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_army SET effectiveness='" . $army_defense[0]["effectiveness"] . "' WHERE empire='" . $army_defense[0]["empire"]."'"))
  1044. trigger_error($this->DB->ErrorMsg());
  1045. }
  1046. if (count($army_defense) != 1)
  1047. for ($i = 1; $i < count($army_defense); $i++) {
  1048. $army_defense[$i]["effectiveness"] += CONF_INVASION_EFFECTIVENESS_WON;
  1049. if ($army_defense[$i]["effectiveness"] > 150)
  1050. $army_defense[$i]["effectiveness"] = 150;
  1051. if (!INVASION_DEBUG) {
  1052. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_army SET effectiveness='" . $army_defense[$i]["effectiveness"] . "' WHERE empire='" . $army_defense[$i]["empire_from"]."'"))
  1053. trigger_error($this->DB->ErrorMsg());
  1054. }
  1055. }
  1056. $evt = new EventCreator($this->DB);
  1057. $evt->type = CONF_EVENT_INVADED;
  1058. $evt->from = -1;
  1059. $rs_from = $this->DB->Execute("SELECT id,emperor,name,networth FROM game".$this->game_id."_tb_empire WHERE id='" . $army_attack[0]["empire_from"]."'");
  1060. if (!$rs_from)
  1061. trigger_error($this->DB->ErrorMsg());
  1062. $rs_to = $this->DB->Execute("SELECT id,emperor,name,networth FROM game".$this->game_id."_tb_empire WHERE id='" . $army_defense[0]["empire"]."'");
  1063. if (!$rs_to)
  1064. trigger_error($this->DB->ErrorMsg());
  1065. $empire_from = $GAME["template"]->DisplayEmpireHTML($rs_from->fields["id"], $rs_from->fields["emperor"], $rs_from->fields["name"], "");
  1066. $empire_to = $GAME["template"]->DisplayEmpireHTML($rs_to->fields["id"], $rs_to->fields["emperor"], $rs_to->fields["name"], "");
  1067. $evt->params = array (
  1068. "won" => false,
  1069. "empire_from" => $empire_from,
  1070. "empire_to" => $empire_to
  1071. );
  1072. if (!INVASION_DEBUG) $evt->broadcast();
  1073. // Sending INVASION REPORT
  1074. $evt = new EventCreator($this->DB);
  1075. $evt->type = CONF_EVENT_INVASION_REPORT;
  1076. $evt->from = -1;
  1077. $evt->params = array (
  1078. "space_won" => $space,
  1079. "orbital_won" => $orbital,
  1080. "ground_won" => $ground,
  1081. "army_attack" => $army_attack,
  1082. "army_defense" => $army_defense,
  1083. "strength" => $strength
  1084. );
  1085. $invasion_info = serialize(array("params"=>$evt->params,"total_strength"=>$this->total_strength,"total_casualties"=>$this->total_casualties));
  1086. for ($i=0;$i<count($army_attack);$i++) {
  1087. if (!INVASION_DEBUG) {
  1088. if (!$this->DB->Execute("INSERT INTO game".$this->game_id."_tb_invasion (empire_id,date,data) VALUES(".$army_attack[$i]["empire_from"].",".time().",'".base64_encode($invasion_info)."')")) trigger_error($this->DB->ErrorMsg());
  1089. }
  1090. }
  1091. for ($i=0;$i<count($army_defense);$i++) {
  1092. if (!INVASION_DEBUG) {
  1093. if (isset($army_defense[$i]["empire_from"]))
  1094. if (!$this->DB->Execute("INSERT INTO game".$this->game_id."_tb_invasion (empire_id,date,data) VALUES(".$army_defense[$i]["empire"].",".time().",'".base64_encode($invasion_info)."')")) trigger_error($this->DB->ErrorMsg());
  1095. else
  1096. if (!$this->DB->Execute("INSERT INTO game".$this->game_id."_tb_invasion (empire_id,date,data) VALUES(".$army_defense[$i]["empire_from"].",".time().",'".base64_encode($invasion_info)."')")) trigger_error($this->DB->ErrorMsg());
  1097. }
  1098. }
  1099. for ($i = 0; $i < count($army_attack); $i++) {
  1100. $evt->to = $army_attack[$i]["empire_from"];
  1101. if (!INVASION_DEBUG) $evt->Send();
  1102. }
  1103. $evt->to = $army_defense[0]["empire"];
  1104. if (!INVASION_DEBUG) $evt->Send();
  1105. if (count($army_defense) != 1)
  1106. for ($i = 0; $i < count($army_defense); $i++) {
  1107. if (!INVASION_DEBUG) {
  1108. if ($i == 0)
  1109. $evt->to = $army_defense[$i]["empire"];
  1110. else
  1111. $evt->to = $army_defense[$i]["empire_from"];
  1112. }
  1113. if (!INVASION_DEBUG) $evt->Send();
  1114. }
  1115. }
  1116. for ($i = 0; $i < count($army_attack); $i++) {
  1117. $convoy_soldiers = ($army_attack[$i]["convoy_soldiers"] - $army_attack[$i]["casualties_soldiers"]);
  1118. if ($convoy_soldiers < 0) $convoy_soldiers = 0;
  1119. $convoy_fighters = ($army_attack[$i]["convoy_fighters"] - $army_attack[$i]["casualties_fighters"]);
  1120. if ($convoy_fighters < 0) $convoy_fighters = 0;
  1121. $convoy_lightcruisers = ($army_attack[$i]["convoy_lightcruisers"] - $army_attack[$i]["casualties_lightcruisers"]);
  1122. if ($convoy_lightcruisers < 0) $convoy_lightcruisers = 0;
  1123. $convoy_heavycruisers = ($army_attack[$i]["convoy_heavycruisers"] - $army_attack[$i]["casualties_heavycruisers"]);
  1124. if ($convoy_heavycruisers < 0) $convoy_heavycruisers = 0;
  1125. $convoy_carriers = ($army_attack[$i]["carriers"] - $army_attack[$i]["casualties_carriers"]);
  1126. if ($convoy_carriers < 0) $convoy_carriers = 0;
  1127. $time_start = $army_attack[$i]["time_start"];
  1128. $time_end = $army_attack[$i]["time_end"];
  1129. $time_elapsed = $time_end - $time_start;
  1130. $time_start = $time_now;
  1131. $time_end = $time_now + $time_elapsed;
  1132. $query = "UPDATE game".$this->game_id."_tb_armyconvoy SET " .
  1133. "convoy_type='" .CONF_CONVOY_INVASION_RETREAT . "'," .
  1134. "convoy_soldiers='" . intval($convoy_soldiers) . "'," .
  1135. "convoy_fighters='" . intval($convoy_fighters) . "'," .
  1136. "convoy_lightcruisers='" . intval($convoy_lightcruisers) . "'," .
  1137. "convoy_heavycruisers='" . intval($convoy_heavycruisers) . "'," .
  1138. "carriers='" . intval($convoy_carriers) . "'," .
  1139. "time_start='$time_start',time_end='$time_end' WHERE id='" . $army_attack[$i]["id"]."'";
  1140. if (INVASION_DEBUG) print "Convoy retreat script: " .$query."\r\n";
  1141. if (!INVASION_DEBUG) {
  1142. if (!$this->DB->Execute($query))
  1143. trigger_error($this->DB->ErrorMsg());
  1144. }
  1145. $evt = new EventCreator($this->DB);
  1146. $evt->from = -1;
  1147. $evt->to = $army_attack[$i]["empire_to"];
  1148. $evt->type = CONF_EVENT_CONVOY_RETREAT;
  1149. $evt->params = $army_attack[$i]["empire_from"];
  1150. if (!INVASION_DEBUG) $evt->send();
  1151. }
  1152. $soldiers = ($army_defense[0]["soldiers"] - $army_defense[0]["casualties_soldiers"]);
  1153. if ($soldiers < 0) $soldiers = 0;
  1154. $fighters = ($army_defense[0]["fighters"] - $army_defense[0]["casualties_fighters"]);
  1155. if ($fighters < 0) $fighters = 0;
  1156. $stations = ($army_defense[0]["stations"] - $army_defense[0]["casualties_stations"]);
  1157. if ($stations < 0) $stations = 0;
  1158. $lightcruisers = ($army_defense[0]["lightcruisers"] - $army_defense[0]["casualties_lightcruisers"]);
  1159. if ($lightcruisers < 0) $lightcruisers = 0;
  1160. $heavycruisers = ($army_defense[0]["heavycruisers"] - $army_defense[0]["casualties_heavycruisers"]);
  1161. if ($heavycruisers < 0) $heavycruisers = 0;
  1162. // updating target army
  1163. $query = "UPDATE game".$this->game_id."_tb_army SET " .
  1164. "soldiers='" . intval($soldiers) . "'," .
  1165. "fighters='" . intval($fighters) . "'," .
  1166. "stations='" . intval($stations) . "'," .
  1167. "lightcruisers='" . intval($lightcruisers) . "'," .
  1168. "heavycruisers='" . intval($heavycruisers) ."' ".
  1169. " WHERE id='" . $army_defense[0]["empire"]."'";
  1170. if (!INVASION_DEBUG) {
  1171. if (!$this->DB->Execute($query))
  1172. trigger_error($this->DB->ErrorMsg());
  1173. }
  1174. if (count($army_defense) != 1) {
  1175. for ($i = 1; $i < count($army_defense); $i++) {
  1176. // verify the values
  1177. $convoy_soldiers = ($army_defense[$i]["convoy_soldiers"] - $army_defense[$i]["casualties_soldiers"]);
  1178. if ($convoy_soldiers < 0) $convoy_soldiers = 0;
  1179. $convoy_fighters = ($army_defense[$i]["convoy_fighters"] - $army_defense[$i]["casualties_fighters"]);
  1180. if ($convoy_fighters < 0) $convoy_fighters = 0;
  1181. $convoy_lightcruisers = ($army_defense[$i]["convoy_lightcruisers"] - $army_defense[$i]["casualties_lightcruisers"]);
  1182. if ($convoy_lightcruisers < 0) $convoy_lightcruisers = 0;
  1183. $convoy_highcruisers = ($army_defense[$i]["convoy_heavycruisers"] - $army_defense[$i]["casualties_heavycruisers"]);
  1184. if ($convoy_heavycruisers < 0) $convoy_heavycruisers = 0;
  1185. $time_start = $army_defense[$i]["time_start"];
  1186. $time_end = $army_defense[$i]["time_end"];
  1187. $time_elapsed = $time_end - $time_start;
  1188. $time_start = $time_now;
  1189. $time_end = $time_now + $time_elapsed;
  1190. $query = "UPDATE game".$this->game_id."_tb_armyconvoy SET " .
  1191. "convoy_type='" .CONF_CONVOY_DEFENSE_RETREAT . "'," .
  1192. "convoy_soldiers='" . intval($convoy_soldiers) . "'," .
  1193. "convoy_fighters='" . intval($convoy_fighters) . "'," .
  1194. "convoy_lightcruisers='" . intval($convoy_lightcruisers) . "'," .
  1195. "convoy_heavycruisers='" . intval($convoy_heavycruisers) . "'," .
  1196. "time_start='$time_start',time_end='$time_end' WHERE id='" . $army_defense[$i]["id"]."'";
  1197. if (!INVASION_DEBUG) {
  1198. if (!$this->DB->Execute($query))
  1199. trigger_error($this->DB->ErrorMsg());
  1200. }
  1201. $evt = new EventCreator($this->DB);
  1202. $evt->from = -1;
  1203. $evt->to = $army_defense[$i]["empire_to"];
  1204. $evt->type = CONF_EVENT_CONVOY_RETREAT;
  1205. $evt->params = $army_defense[$i]["empire_from"];
  1206. if (!INVASION_DEBUG) $evt->send();
  1207. }
  1208. }
  1209. if (INVASION_DEBUG) die("Invasion done");
  1210. }
  1211. }
  1212. ?>