Area.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. <?php
  2. /**
  3. * Area entity file.
  4. *
  5. * Creates the entity and makes it available.
  6. *
  7. * @author Iñigo Valentin <i@inigovalentin.com>
  8. * @license https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License V3
  9. * @package SWDB
  10. */
  11. require_once(PATH::ENTITY . "Entity.php");
  12. /**
  13. * An area.
  14. *
  15. * Represents a playable area of the game.
  16. *
  17. * @category Entity
  18. */
  19. class Area extends Entity{
  20. /**
  21. * @var int Area identifier (it may not be unique!).
  22. */
  23. private $id;
  24. /**
  25. * @var int Area type ID ({@see AREA_TYPE_ID}).
  26. */
  27. private $type;
  28. /**
  29. * @var string Area name.
  30. */
  31. private $name;
  32. /**
  33. * Constructor.
  34. *
  35. * Retrieves the area information from the database.
  36. *
  37. * @param int $id Area identifier.
  38. * @param int $type Area type.
  39. */
  40. public function __construct($id, $type){
  41. $this->id = $id;
  42. $this->type = $type;
  43. $statement = get_context()->get_db()->prepare("
  44. SELECT
  45. id,
  46. type,
  47. name
  48. FROM area
  49. WHERE
  50. id = :id AND
  51. type = :type
  52. ORDER BY type DESC;
  53. ");
  54. $statement->bindValue(':id', $id, SQLITE3_TEXT);
  55. $statement->bindValue(':type', $type, SQLITE3_TEXT);
  56. $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
  57. if ($r){
  58. $this->name = HTML::e($r["name"]);
  59. }
  60. elseif($this->id > 1000){
  61. $this->type = AREA_TYPE_ID::CAIROS_DUNGEON;
  62. $this->name = "Hall of Heroes";
  63. }
  64. else{
  65. $statement = get_context()->get_db()->prepare("
  66. SELECT name
  67. FROM area_type
  68. WHERE id = :type;
  69. ");
  70. $statement->bindValue(':type', $type, SQLITE3_TEXT);
  71. if ($r){
  72. $this->name = HTML::e($r["name"]);
  73. }
  74. }
  75. }
  76. /**
  77. * Retrieves the area identifier.
  78. *
  79. * @return int Area ID.
  80. */
  81. public function get_id(){
  82. return $this->id;
  83. }
  84. /**
  85. * Retrieves the area type identifier.
  86. *
  87. * @see AREA_TYPE_ID.
  88. * @return int Area type ID
  89. */
  90. public function get_type(){
  91. return $this->type;
  92. }
  93. /**
  94. * Retrieves the area name.
  95. *
  96. * @return string The area name.
  97. */
  98. public function get_name(){
  99. return $this->name;
  100. }
  101. /**
  102. * Gets the URL to the area image.
  103. *
  104. * @param string $stage Stage number, for a more accurate image in Dimension Hole.
  105. * @return string Image URL, or a fixed unknown image.
  106. */
  107. public function get_image($stage = null){
  108. if ($this->id > 10000){
  109. // Hall of Heroes
  110. return APPLICATION::img("AREA", "HOH");
  111. }
  112. elseif ($this->type == AREA_TYPE_ID::RIFT_RAID){
  113. return APPLICATION::img("UNIT", 44007);
  114. }
  115. elseif ($this->type == AREA_TYPE_ID::ARENA){
  116. return APPLICATION::img("AREA", "ARENA");
  117. }
  118. elseif ($this->type == AREA_TYPE_ID::DIMENSIONAL_RIFT){
  119. return APPLICATION::img("CURRENCY", "darkportalenergy");
  120. }
  121. elseif (
  122. $this->type == AREA_TYPE_ID::SCENARIO ||
  123. $this->type == AREA_TYPE_ID::GUILD_WAR ||
  124. $this->type == AREA_TYPE_ID::GUILD_SIEGE ||
  125. $this->type == AREA_TYPE_ID::WORLD_BOSS ||
  126. $this->type == AREA_TYPE_ID::DIMENSIONAL_RIFT
  127. ){
  128. return APPLICATION::img("AREA", $this->id);
  129. }
  130. elseif ($this->type == AREA_TYPE_ID::CAIROS_DUNGEON && APPLICATION::valid_id("DUNGEON_ID", $this->id)){
  131. switch ($this->id){
  132. case DUNGEON_ID::GIANTS_KEEP:
  133. return APPLICATION::img("UNIT", 60201);
  134. break;
  135. case DUNGEON_ID::DRAGONS_LAIR:
  136. return APPLICATION::img("UNIT", 60302);
  137. break;
  138. case DUNGEON_ID::NECROPOLIS:
  139. return APPLICATION::img("UNIT", 62105);
  140. break;
  141. case DUNGEON_ID::STEEL_FORTRESS:
  142. return APPLICATION::img("UNIT", 62403);
  143. break;
  144. case DUNGEON_ID::PUNISHERS_CRYPT:
  145. return APPLICATION::img("UNIT", 62604);
  146. break;
  147. case DUNGEON_ID::HALL_OF_WATER:
  148. return APPLICATION::img("UNIT", 60101);
  149. break;
  150. case DUNGEON_ID::HALL_OF_FIRE:
  151. return APPLICATION::img("UNIT", 60102);
  152. break;
  153. case DUNGEON_ID::HALL_OF_WIND:
  154. return APPLICATION::img("UNIT", 60103);
  155. break;
  156. case DUNGEON_ID::HALL_OF_LIGHT:
  157. return APPLICATION::img("UNIT", 60104);
  158. break;
  159. case DUNGEON_ID::HALL_OF_DARK:
  160. return APPLICATION::img("UNIT", 60105);
  161. break;
  162. case DUNGEON_ID::HALL_OF_MAGIC:
  163. return APPLICATION::img("UNIT", 62004);
  164. break;
  165. default:
  166. return APPLICATION::img("AREA", $this->id);
  167. }
  168. }
  169. elseif ($this->type == AREA_TYPE_ID::RIFT_DUNGEON && APPLICATION::valid_id("ELEMENTAL_RIFT_DUNGEON_ID", $this->id)){
  170. switch ($this->id){
  171. case ELEMENTAL_RIFT_DUNGEON_ID::ICE_BEAST:
  172. return APPLICATION::img("UNIT", 43001);
  173. break;
  174. case ELEMENTAL_RIFT_DUNGEON_ID::FIRE_BEAST:
  175. return APPLICATION::img("UNIT", 43002);
  176. break;
  177. case ELEMENTAL_RIFT_DUNGEON_ID::WIND_BEAST:
  178. return APPLICATION::img("UNIT", 43003);
  179. break;
  180. case ELEMENTAL_RIFT_DUNGEON_ID::LIGHT_BEAST:
  181. return APPLICATION::img("UNIT", 43004);
  182. break;
  183. case ELEMENTAL_RIFT_DUNGEON_ID::DARK_BEAST:
  184. return APPLICATION::img("UNIT", 43005);
  185. break;
  186. default:
  187. return APPLICATION::img("AREA", $this->id);
  188. break;
  189. }
  190. }
  191. elseif ($this->type == AREA_TYPE_ID::DIMENSIONAL_HOLE){
  192. switch ($this->id){
  193. case DUNGEON_ID::FOREST_OF_ROARING_BEASTS:
  194. return APPLICATION::img("UNIT", 47002);
  195. break;
  196. case DUNGEON_ID::SANCTUARY_OF_DREAMING_FAIRIES:
  197. return APPLICATION::img("UNIT", 47001);
  198. break;
  199. case DUNGEON_ID::CLIFF_OF_TOUGH_BEASTS_MEN:
  200. return APPLICATION::img("UNIT", 47002);
  201. break;
  202. case DUNGEON_ID::KARZHAN_REMAINS_WARBEAR:
  203. switch ($stage){
  204. case 1:
  205. return APPLICATION::img("UNIT", 10734);
  206. break;
  207. case 2:
  208. return APPLICATION::img("UNIT", 10733);
  209. break;
  210. case 3:
  211. return APPLICATION::img("UNIT", 10731);
  212. break;
  213. case 4:
  214. return APPLICATION::img("UNIT", 10735);
  215. break;
  216. case 5:
  217. return APPLICATION::img("UNIT", 10732);
  218. break;
  219. default:
  220. return APPLICATION::img("AREA", $this->id);
  221. break;
  222. }
  223. break;
  224. case DUNGEON_ID::KARZHAN_REMAINS_INUGAMI:
  225. switch ($stage){
  226. case 1:
  227. return APPLICATION::img("UNIT", 11031);
  228. break;
  229. case 2:
  230. return APPLICATION::img("UNIT", 11033);
  231. break;
  232. case 3:
  233. return APPLICATION::img("UNIT", 11032);
  234. break;
  235. case 4:
  236. return APPLICATION::img("UNIT", 11034);
  237. break;
  238. case 5:
  239. return APPLICATION::img("UNIT", 11035);
  240. break;
  241. default:
  242. return APPLICATION::img("AREA", $this->id);
  243. break;
  244. }
  245. break;
  246. case DUNGEON_ID::ELLUNIA_REMAINS_FAIRY:
  247. switch ($stage){
  248. case 1:
  249. return APPLICATION::img("UNIT", 10132);
  250. break;
  251. case 2:
  252. return APPLICATION::img("UNIT", 10134);
  253. break;
  254. case 3:
  255. return APPLICATION::img("UNIT", 10131);
  256. break;
  257. case 4:
  258. return APPLICATION::img("UNIT", 10133);
  259. break;
  260. case 5:
  261. return APPLICATION::img("UNIT", 10134);
  262. break;
  263. default:
  264. return APPLICATION::img("AREA", $this->id);
  265. break;
  266. }
  267. break;
  268. case DUNGEON_ID::ELLUNIA_REMAINS_PIXIE:
  269. switch ($stage){
  270. case 1:
  271. return APPLICATION::img("UNIT", 10334);
  272. break;
  273. case 2:
  274. return APPLICATION::img("UNIT", 10332);
  275. break;
  276. case 3:
  277. return APPLICATION::img("UNIT", 10335);
  278. break;
  279. case 4:
  280. return APPLICATION::img("UNIT", 10333);
  281. break;
  282. case 5:
  283. return APPLICATION::img("UNIT", 10331);
  284. break;
  285. default:
  286. return APPLICATION::img("AREA", $this->id);
  287. break;
  288. }
  289. break;
  290. case DUNGEON_ID::LUMEL_REMAINS_WEREWOLF:
  291. switch ($stage){
  292. case 1:
  293. return APPLICATION::img("UNIT", 14035);
  294. break;
  295. case 2:
  296. return APPLICATION::img("UNIT", 14033);
  297. break;
  298. case 3:
  299. return APPLICATION::img("UNIT", 14031);
  300. break;
  301. case 4:
  302. return APPLICATION::img("UNIT", 14034);
  303. break;
  304. case 5:
  305. return APPLICATION::img("UNIT", 14032);
  306. break;
  307. default:
  308. return APPLICATION::img("AREA", $this->id);
  309. break;
  310. }
  311. break;
  312. case DUNGEON_ID::LUMEL_REMAINS_MARTIAL_CAT:
  313. switch ($stage){
  314. case 1:
  315. return APPLICATION::img("UNIT", 15032);
  316. break;
  317. case 2:
  318. return APPLICATION::img("UNIT", 15034);
  319. break;
  320. case 3:
  321. return APPLICATION::img("UNIT", 15031);
  322. break;
  323. case 4:
  324. return APPLICATION::img("UNIT", 15035);
  325. break;
  326. case 5:
  327. return APPLICATION::img("UNIT", 15033);
  328. break;
  329. default:
  330. return APPLICATION::img("AREA", $this->id);
  331. break;
  332. }
  333. break;
  334. default:
  335. return APPLICATION::img("AREA", $this->id);
  336. break;
  337. }
  338. }
  339. elseif ($this->type == AREA_TYPE_ID::TARTARUS_LABYRINTH){
  340. switch ($stage){
  341. case LABYRINTH_STAGES_ID::TARTARUS:
  342. return APPLICATION::img("UNIT", 46001);
  343. break;
  344. case LABYRINTH_STAGES_ID::LEOS:
  345. return APPLICATION::img("UNIT", 46101);
  346. break;
  347. case LABYRINTH_STAGES_ID::KOTTOS:
  348. return APPLICATION::img("UNIT", 46102);
  349. break;
  350. case LABYRINTH_STAGES_ID::AQUILES:
  351. return APPLICATION::img("UNIT", 46103);
  352. break;
  353. default:
  354. return APPLICATION::img("AREA", $this->id);
  355. }
  356. }
  357. elseif ($this->type == AREA_TYPE_ID::TRIAL_OF_ASCENSION){
  358. return APPLICATION::img("AREA", "TRIAL_OF_ASCENSION");
  359. }
  360. else{
  361. return APPLICATION::img("AREA", $this->id);
  362. }
  363. }
  364. }