Area.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  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::KARZHAN_PREDATOR:
  194. case DUNGEON_ID::ELLUNIA_PREDATOR:
  195. case DUNGEON_ID::LUMEL_PREDATOR:
  196. case DUNGEON_ID::KHALDERUN_PREDATOR:
  197. // Element is not consistent, using light icon.
  198. return APPLICATION::img("UNIT", 70004);
  199. break;
  200. case DUNGEON_ID::FOREST_OF_ROARING_BEASTS:
  201. return APPLICATION::img("UNIT", 47002);
  202. break;
  203. case DUNGEON_ID::SANCTUARY_OF_DREAMING_FAIRIES:
  204. return APPLICATION::img("UNIT", 47001);
  205. break;
  206. case DUNGEON_ID::CLIFF_OF_TOUGH_BEASTS_MEN:
  207. return APPLICATION::img("UNIT", 47003);
  208. break;
  209. case DUNGEON_ID::RUIN_OF_SILENT_DEAD:
  210. return APPLICATION::img("UNIT", 47004);
  211. break;
  212. case DUNGEON_ID::KARZHAN_REMAINS_WARBEAR:
  213. switch ($stage){
  214. case 1:
  215. return APPLICATION::img("UNIT", 10734);
  216. break;
  217. case 2:
  218. return APPLICATION::img("UNIT", 10733);
  219. break;
  220. case 3:
  221. return APPLICATION::img("UNIT", 10731);
  222. break;
  223. case 4:
  224. return APPLICATION::img("UNIT", 10735);
  225. break;
  226. case 5:
  227. return APPLICATION::img("UNIT", 10732);
  228. break;
  229. default:
  230. return APPLICATION::img("AREA", $this->id);
  231. break;
  232. }
  233. break;
  234. case DUNGEON_ID::KARZHAN_REMAINS_INUGAMI:
  235. switch ($stage){
  236. case 1:
  237. return APPLICATION::img("UNIT", 11031);
  238. break;
  239. case 2:
  240. return APPLICATION::img("UNIT", 11033);
  241. break;
  242. case 3:
  243. return APPLICATION::img("UNIT", 11032);
  244. break;
  245. case 4:
  246. return APPLICATION::img("UNIT", 11034);
  247. break;
  248. case 5:
  249. return APPLICATION::img("UNIT", 11035);
  250. break;
  251. default:
  252. return APPLICATION::img("AREA", $this->id);
  253. break;
  254. }
  255. break;
  256. case DUNGEON_ID::ELLUNIA_REMAINS_FAIRY:
  257. switch ($stage){
  258. case 1:
  259. return APPLICATION::img("UNIT", 10132);
  260. break;
  261. case 2:
  262. return APPLICATION::img("UNIT", 10134);
  263. break;
  264. case 3:
  265. return APPLICATION::img("UNIT", 10131);
  266. break;
  267. case 4:
  268. return APPLICATION::img("UNIT", 10133);
  269. break;
  270. case 5:
  271. return APPLICATION::img("UNIT", 10134);
  272. break;
  273. default:
  274. return APPLICATION::img("AREA", $this->id);
  275. break;
  276. }
  277. break;
  278. case DUNGEON_ID::ELLUNIA_REMAINS_PIXIE:
  279. switch ($stage){
  280. case 1:
  281. return APPLICATION::img("UNIT", 10334);
  282. break;
  283. case 2:
  284. return APPLICATION::img("UNIT", 10332);
  285. break;
  286. case 3:
  287. return APPLICATION::img("UNIT", 10335);
  288. break;
  289. case 4:
  290. return APPLICATION::img("UNIT", 10333);
  291. break;
  292. case 5:
  293. return APPLICATION::img("UNIT", 10331);
  294. break;
  295. default:
  296. return APPLICATION::img("AREA", $this->id);
  297. break;
  298. }
  299. break;
  300. case DUNGEON_ID::ELLUNIA_REMAINS_HIGH_ELEMENTAL:
  301. switch ($stage){
  302. case 1:
  303. return APPLICATION::img("UNIT", 10332);
  304. break;
  305. case 2:
  306. return APPLICATION::img("UNIT", 10331);
  307. break;
  308. case 3:
  309. return APPLICATION::img("UNIT", 10334);
  310. break;
  311. case 4:
  312. return APPLICATION::img("UNIT", 12033);
  313. break;
  314. case 5:
  315. return APPLICATION::img("UNIT", 10335);
  316. break;
  317. default:
  318. return APPLICATION::img("AREA", $this->id);
  319. break;
  320. }
  321. break;
  322. case DUNGEON_ID::LUMEL_REMAINS_WEREWOLF:
  323. switch ($stage){
  324. case 1:
  325. return APPLICATION::img("UNIT", 14035);
  326. break;
  327. case 2:
  328. return APPLICATION::img("UNIT", 14033);
  329. break;
  330. case 3:
  331. return APPLICATION::img("UNIT", 14031);
  332. break;
  333. case 4:
  334. return APPLICATION::img("UNIT", 14034);
  335. break;
  336. case 5:
  337. return APPLICATION::img("UNIT", 14032);
  338. break;
  339. default:
  340. return APPLICATION::img("AREA", $this->id);
  341. break;
  342. }
  343. break;
  344. case DUNGEON_ID::LUMEL_REMAINS_MARTIAL_CAT:
  345. switch ($stage){
  346. case 1:
  347. return APPLICATION::img("UNIT", 15032);
  348. break;
  349. case 2:
  350. return APPLICATION::img("UNIT", 15034);
  351. break;
  352. case 3:
  353. return APPLICATION::img("UNIT", 15031);
  354. break;
  355. case 4:
  356. return APPLICATION::img("UNIT", 15035);
  357. break;
  358. case 5:
  359. return APPLICATION::img("UNIT", 15033);
  360. break;
  361. default:
  362. return APPLICATION::img("AREA", $this->id);
  363. break;
  364. }
  365. break;
  366. case DUNGEON_ID::KHALDERUN_REMAINS_HOWL:
  367. switch ($stage){
  368. case 1:
  369. return APPLICATION::img("UNIT", 13235);
  370. break;
  371. case 2:
  372. return APPLICATION::img("UNIT", 13234);
  373. break;
  374. case 3:
  375. return APPLICATION::img("UNIT", 13233);
  376. break;
  377. case 4:
  378. return APPLICATION::img("UNIT", 13232);
  379. break;
  380. case 5:
  381. return APPLICATION::img("UNIT", 13231);
  382. break;
  383. default:
  384. return APPLICATION::img("AREA", $this->id);
  385. break;
  386. }
  387. break;
  388. case DUNGEON_ID::KHALDERUN_REMAINS_GRIM_REAPER:
  389. switch ($stage){
  390. case 1:
  391. return APPLICATION::img("UNIT", 16033);
  392. break;
  393. case 2:
  394. return APPLICATION::img("UNIT", 16031);
  395. break;
  396. case 3:
  397. return APPLICATION::img("UNIT", 16034);
  398. break;
  399. case 4:
  400. return APPLICATION::img("UNIT", 16032);
  401. break;
  402. case 5:
  403. return APPLICATION::img("UNIT", 16035);
  404. break;
  405. default:
  406. return APPLICATION::img("AREA", $this->id);
  407. break;
  408. }
  409. break;
  410. default:
  411. return APPLICATION::img("AREA", $this->id);
  412. break;
  413. }
  414. }
  415. elseif ($this->type == AREA_TYPE_ID::TARTARUS_LABYRINTH){
  416. switch ($stage){
  417. case LABYRINTH_STAGES_ID::TARTARUS:
  418. return APPLICATION::img("UNIT", 46001);
  419. break;
  420. case LABYRINTH_STAGES_ID::LEOS:
  421. return APPLICATION::img("UNIT", 46101);
  422. break;
  423. case LABYRINTH_STAGES_ID::KOTTOS:
  424. return APPLICATION::img("UNIT", 46102);
  425. break;
  426. case LABYRINTH_STAGES_ID::AQUILES:
  427. return APPLICATION::img("UNIT", 46103);
  428. break;
  429. default:
  430. return APPLICATION::img("AREA", "TARTARUS_LABYRINTH");
  431. }
  432. }
  433. elseif ($this->type == AREA_TYPE_ID::TRIAL_OF_ASCENSION){
  434. return APPLICATION::img("AREA", "TRIAL_OF_ASCENSION");
  435. }
  436. else{
  437. return APPLICATION::img("AREA", $this->id);
  438. }
  439. }
  440. }