PageRenderTime 52ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/app/code/Bengine/Game/Controller/Galaxy.php

https://github.com/Basti-sama/Bengine
PHP | 322 lines | 233 code | 19 blank | 70 comment | 45 complexity | e3a62970a9e1d53ca3ece0ca9239833f MD5 | raw file
  1. <?php
  2. /**
  3. * Shows galaxy
  4. *
  5. * @package Bengine
  6. * @copyright Copyright protected by / Urheberrechtlich geschützt durch "Sebastian Noll" <snoll@4ym.org>
  7. * @version $Id: Galaxy.php 19 2011-05-27 10:30:33Z secretchampion $
  8. */
  9. class Bengine_Game_Controller_Galaxy extends Bengine_Game_Controller_Abstract
  10. {
  11. /**
  12. * Current viewing galaxy.
  13. *
  14. * @var integer
  15. */
  16. protected $galaxy = 0;
  17. /**
  18. * Current viewing system.
  19. *
  20. * @var integer
  21. */
  22. protected $system = 0;
  23. /**
  24. * Missile range.
  25. *
  26. * @var integer
  27. */
  28. protected $missileRange = 0;
  29. /**
  30. * @var integer
  31. */
  32. protected $viewConsumption = 0;
  33. /**
  34. * Main method to display a sun system.
  35. *
  36. * @return Bengine_Game_Controller_Galaxy
  37. */
  38. protected function init()
  39. {
  40. Core::getLanguage()->load(array("Galaxy", "Statistics"));
  41. $this->missileRange = Game::getRocketRange();
  42. $this->viewConsumption = (int) Core::getOptions()->get("GALAXY_VIEW_CONSUMPTION");
  43. if(Core::getRequest()->getGET("1") && Core::getRequest()->getGET("2"))
  44. {
  45. $this->setCoordinatesByGet(Core::getRequest()->getGET("1"), Core::getRequest()->getGET("2"));
  46. }
  47. return parent::init();
  48. }
  49. /**
  50. * Sets the coordinates by POST.
  51. *
  52. * @param integer $galaxy
  53. * @param integer $system
  54. * @param string $submitType
  55. *
  56. * @return Bengine_Game_Controller_Galaxy
  57. */
  58. protected function setCoordinatesByPost($galaxy, $system, $submitType)
  59. {
  60. $this->galaxy = $galaxy;
  61. $this->system = $system;
  62. switch($submitType)
  63. {
  64. case "prevgalaxy":
  65. $this->galaxy--;
  66. break;
  67. case "nextgalaxy":
  68. $this->galaxy++;
  69. break;
  70. case "prevsystem":
  71. $this->system--;
  72. break;
  73. case "nextsystem":
  74. $this->system++;
  75. break;
  76. }
  77. return $this;
  78. }
  79. /**
  80. * Validates the inputted galaxy and system.
  81. *
  82. * @return Bengine_Game_Controller_Galaxy
  83. */
  84. protected function validateInputs()
  85. {
  86. if(empty($this->galaxy))
  87. {
  88. $this->galaxy = Game::getPlanet()->getData("galaxy");
  89. }
  90. if(empty($this->system))
  91. {
  92. $this->system = Game::getPlanet()->getData("system");
  93. }
  94. if($this->galaxy < 1) { $this->galaxy = 1; }
  95. else if($this->galaxy > Core::getOptions()->get("GALAXYS")) { $this->galaxy = Core::getOptions()->get("GALAXYS"); }
  96. if($this->system < 1) { $this->system = 1; }
  97. else if($this->system > Core::getOptions()->get("SYSTEMS")) { $this->system = Core::getOptions()->get("SYSTEMS"); }
  98. return $this;
  99. }
  100. /**
  101. * Sets the coordinates by GET.
  102. *
  103. * @param integer $galaxy
  104. * @param integer $system
  105. *
  106. * @return Bengine_Game_Controller_Galaxy
  107. */
  108. protected function setCoordinatesByGet($galaxy, $system)
  109. {
  110. if($galaxy && $system)
  111. {
  112. $this->galaxy = $galaxy;
  113. $this->system = $system;
  114. }
  115. return $this;
  116. }
  117. /**
  118. * Substracts hydrogen for each galaxy view.
  119. *
  120. * @return Bengine_Game_Controller_Galaxy
  121. */
  122. protected function subtractHydrogen()
  123. {
  124. if($this->galaxy != Game::getPlanet()->getData("galaxy") || $this->system != Game::getPlanet()->getData("system"))
  125. {
  126. if(Game::getPlanet()->getData("hydrogen") - $this->viewConsumption < 0)
  127. {
  128. Logger::dieMessage("DEFICIENT_CONSUMPTION");
  129. }
  130. Game::getPlanet()->setData("hydrogen", Game::getPlanet()->getData("hydrogen") - $this->viewConsumption);
  131. Core::getDB()->query("UPDATE ".PREFIX."planet SET hydrogen = hydrogen - ? WHERE planetid = ?", array($this->viewConsumption, Core::getUser()->get("curplanet")));
  132. }
  133. return $this;
  134. }
  135. /**
  136. * Index action.
  137. *
  138. * @return Bengine_Game_Controller_Galaxy
  139. */
  140. protected function indexAction()
  141. {
  142. if($this->isPost())
  143. {
  144. $this->setCoordinatesByPost($this->getParam("galaxy"), $this->getParam("system"), $this->getParam("submittype"));
  145. }
  146. $this->validateInputs()->subtractHydrogen();
  147. // Star surveillance
  148. $canMonitorActivity = false;
  149. if(Game::getPlanet()->getBuilding("STAR_SURVEILLANCE") > 0)
  150. {
  151. $range = pow(Game::getPlanet()->getBuilding("STAR_SURVEILLANCE"), 2) - 1;
  152. $diff = abs(Game::getPlanet()->getData("system") - $this->system);
  153. if($this->galaxy == Game::getPlanet()->getData("galaxy") && $range >= $diff)
  154. {
  155. $canMonitorActivity = true;
  156. }
  157. }
  158. Core::getTPL()->assign("canMonitorActivity", $canMonitorActivity);
  159. // Images
  160. $rockimg = Image::getImage("rocket.gif", Core::getLanguage()->getItem("ROCKET_ATTACK"));
  161. // Get sunsystem data
  162. $select = array(
  163. "g.planetid", "g.position", "g.destroyed", "g.metal", "g.silicon", "g.moonid",
  164. "p.picture", "p.planetname", "p.last as planetactivity",
  165. "u.username", "u.usertitle", "u.userid", "u.points", "u.last as useractivity", "u.umode", "u.level",
  166. "m.planetid AS moon", "m.picture AS moonpic", "m.planetname AS moonname", "m.diameter AS moonsize", "m.temperature", "m.last as moonactivity",
  167. "a.tag", "a.name", "a.showmember", "a.homepage", "a.showhomepage",
  168. "u2a.aid", "b.to"
  169. );
  170. $joins = "LEFT JOIN ".PREFIX."planet p ON (p.planetid = g.planetid)";
  171. $joins .= "LEFT JOIN ".PREFIX."user u ON (u.userid = p.userid)";
  172. $joins .= "LEFT JOIN ".PREFIX."planet m ON (m.planetid = g.moonid)";
  173. $joins .= "LEFT JOIN ".PREFIX."user2ally u2a ON (u2a.userid = u.userid)";
  174. $joins .= "LEFT JOIN ".PREFIX."alliance a ON (a.aid = u2a.aid)";
  175. $joins .= "LEFT JOIN ".PREFIX."ban_u b ON (b.userid = u.userid AND b.to > '".TIME."')";
  176. $where = Core::getDB()->quoteInto("g.galaxy = ? AND g.system = ?", array($this->galaxy, $this->system));
  177. $result = Core::getQuery()->select("galaxy g", $select, $joins, $where);
  178. $UserList = new Bengine_Game_User_List();
  179. $UserList->setKey("position");
  180. $UserList->setNewbieProtection(true);
  181. $UserList->setFetchRank(true);
  182. $UserList->setTagAsLink(false);
  183. $UserList->load($result);
  184. $sys = $UserList->getArray();
  185. Hook::event("SolarSystemDataBefore", array($this, &$sys));
  186. for($i = 1; $i <= 15; $i++)
  187. {
  188. if(isset($sys[$i]) && !$sys[$i]["destroyed"])
  189. {
  190. $sys[$i]["systempos"] = $i;
  191. if($sys[$i]["tag"] != "")
  192. {
  193. $sys[$i]["allydesc"] = sprintf(Core::getLanguage()->getItem("GALAXY_ALLY_HEADLINE"), $sys[$i]["tag"], $sys[$i]["alliance_rank"]);
  194. }
  195. $sys[$i]["metal"] = fNumber($sys[$i]["metal"]);
  196. $sys[$i]["silicon"] = fNumber($sys[$i]["silicon"]);
  197. $sys[$i]["picture"] = Image::getImage("planets/small/s_".$sys[$i]["picture"].Core::getConfig()->get("PLANET_IMG_EXT"), $sys[$i]["planetname"], 30, 30);
  198. $sys[$i]["picture"] = Link::get("game/".SID."/Mission/Index/".$this->galaxy."/".$this->system."/".$i, $sys[$i]["picture"]);
  199. $sys[$i]["planetname"] = Link::get("game/".SID."/Mission/Index/".$this->galaxy."/".$this->system."/".$i, $sys[$i]["planetname"]);
  200. $sys[$i]["moonpicture"] = ($sys[$i]["moonpic"] != "") ? Image::getImage("planets/small/s_".$sys[$i]["moonpic"].Core::getConfig()->get("PLANET_IMG_EXT"), $sys[$i]["moonname"], 22, 22) : "";
  201. $sys[$i]["moon"] = sprintf(Core::getLanguage()->getItem("MOON_DESC"), $sys[$i]["moonname"]);
  202. $sys[$i]["moonsize"] = fNumber($sys[$i]["moonsize"]);
  203. $sys[$i]["moontemp"] = fNumber($sys[$i]["temperature"]);
  204. if($sys[$i]["moonactivity"] > $sys[$i]["planetactivity"])
  205. {
  206. $activity = $sys[$i]["moonactivity"];
  207. }
  208. else
  209. {
  210. $activity = $sys[$i]["planetactivity"];
  211. }
  212. if($activity > TIME - 900 && $sys[$i]["userid"] != Core::getUser()->get("userid")) { $sys[$i]["activity"] = "(*)"; }
  213. else if($activity > TIME - 3600 && $sys[$i]["userid"] != Core::getUser()->get("userid")) { $sys[$i]["activity"] = "(".floor((TIME - $activity) / 60)." min)"; }
  214. else { $sys[$i]["activity"] = ""; }
  215. if(Game::getPlanet()->getBuilding("ROCKET_STATION") > 3 && $sys[$i]["userid"] != Core::getUser()->get("userid") && $this->inMissileRange())
  216. {
  217. $sys[$i]["rocketattack"] = Link::get("game/".SID."/RocketAttack/Index/".$sys[$i]["planetid"], $rockimg);
  218. $sys[$i]["moonrocket"] = "<tr><td colspan=\"3\" class=\"center\">".Link::get("game/".SID."/RocketAttack/Index/".$sys[$i]["moonid"]."/1", Core::getLanguage()->getItem("ROCKET_ATTACK"))."</td></tr>";
  219. }
  220. else
  221. {
  222. $sys[$i]["rocketattack"] = "";
  223. $sys[$i]["moonrocket"] = "";
  224. }
  225. $sys[$i]["allypage"] = Str::replace("\"", "", Link::get("game/".SID."/Alliance/Page/".$sys[$i]["aid"], Core::getLanguage()->getItem("ALLIANCE_PAGE"), 1));
  226. if(($sys[$i]["showhomepage"] || $sys[$i]["aid"] == Core::getUser()->get("aid")) && $sys[$i]["homepage"] != "")
  227. {
  228. $sys[$i]["homepage"] = "<tr><td>".Str::replace("'", "\'", Link::get($sys[$i]["homepage"], Core::getLanguage()->getItem("HOMEPAGE"), 2))."</td></tr>";
  229. }
  230. else
  231. {
  232. $sys[$i]["homepage"] = "";
  233. }
  234. if($sys[$i]["showmember"])
  235. {
  236. $sys[$i]["memberlist"] = "<tr><td>".Str::replace("\"", "", Link::get("game/".SID."/Alliance/Memberlist/".$sys[$i]["aid"], Core::getLanguage()->getItem("SHOW_MEMBERLIST"), 3))."</td></tr>";
  237. }
  238. $sys[$i]["debris"] = Image::getImage("debris.jpg", "", 25, 25);
  239. }
  240. else
  241. {
  242. if(empty($sys[$i]["destroyed"]))
  243. {
  244. $sys[$i] = array();
  245. $sys[$i]["destroyed"] = false;
  246. $sys[$i]["metal"] = 0;
  247. $sys[$i]["silicon"] = 0;
  248. $sys[$i]["debris"] = "";
  249. $sys[$i]["picture"] = "";
  250. $sys[$i]["planetname"] = "";
  251. $sys[$i]["planetid"] = "";
  252. }
  253. else
  254. {
  255. $sys[$i]["metal"] = fNumber($sys[$i]["metal"]);
  256. $sys[$i]["silicon"] = fNumber($sys[$i]["silicon"]);
  257. $sys[$i]["debris"] = Image::getImage("debris.jpg", "", 25, 25);
  258. $sys[$i]["picture"] = Image::getImage("planets/small/s_".$sys[$i]["picture"].Core::getConfig()->get("PLANET_IMG_EXT"), $sys[$i]["planetname"], 30, 30);
  259. $sys[$i]["picture"] = Link::get("game/".SID."/Mission/Index/".$this->galaxy."/".$this->system."/".$i, $sys[$i]["picture"]);
  260. $sys[$i]["planetname"] = Core::getLanguage()->getItem("DESTROYED_PLANET");
  261. $sys[$i]["planetname"] = Link::get("game/".SID."/Mission/Index/".$this->galaxy."/".$this->system."/".$i, $sys[$i]["planetname"]);
  262. }
  263. $sys[$i]["systempos"] = $i;
  264. $sys[$i]["userid"] = null;
  265. $sys[$i]["moon"] = "";
  266. $sys[$i]["moonid"] = "";
  267. $sys[$i]["username"] = "";
  268. $sys[$i]["alliance"] = "";
  269. $sys[$i]["activity"] = "";
  270. $sys[$i]["moonpicture"] = "";
  271. $sys[$i]["user_status_long"] = "";
  272. }
  273. }
  274. ksort($sys);
  275. Hook::event("SolarSystemDataAfter", array($this, &$sys));
  276. Core::getTPL()->assign("sendesp", Image::getImage("esp.gif", Core::getLanguage()->getItem("SEND_ESPIONAGE_PROBE")));
  277. Core::getTPL()->assign("monitorfleet", Image::getImage("binocular.gif", Core::getLanguage()->getItem("MONITOR_FLEET_ACTIVITY")));
  278. Core::getTPL()->assign("moon", Str::replace("\"", "", Image::getImage("planets/mond".Core::getConfig()->get("PLANET_IMG_EXT"), Core::getLanguage()->getItem("MOON"), 75, 75)));
  279. Core::getTPL()->addLoop("sunsystem", $sys);
  280. Core::getTPL()->assign("debris", Str::replace("\"", "", Image::getImage("debris.jpg", Core::getLanguage()->getItem("DEBRIS"), 75, 75)));
  281. Core::getTPL()->assign("galaxy", $this->galaxy);
  282. Core::getTPL()->assign("system", $this->system);
  283. return $this;
  284. }
  285. /**
  286. * Checks if the current solar system is in missile range.
  287. *
  288. * @return boolean
  289. */
  290. protected function inMissileRange()
  291. {
  292. if($this->galaxy != Game::getPlanet()->getData("galaxy"))
  293. {
  294. return false;
  295. }
  296. if(abs(Game::getPlanet()->getData("system") - $this->system) <= $this->missileRange)
  297. {
  298. return true;
  299. }
  300. return false;
  301. }
  302. }
  303. ?>