* @license https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License V3 * @package SWDB */ require_once(PATH::ENTITY . "Entity.php"); /** * An area. * * Represents a playable area of the game. * * @category Entity */ class Area extends Entity{ /** * @var int Area identifier (it may not be unique!). */ private $id; /** * @var int Area type ID ({@see AREA_TYPE_ID}). */ private $type; /** * @var string Area name. */ private $name; /** * Constructor. * * Retrieves the area information from the database. * * @param int $id Area identifier. * @param int $type Area type. */ public function __construct($id, $type){ $this->id = $id; $this->type = $type; $statement = get_context()->get_db()->prepare(" SELECT id, type, name FROM area WHERE id = :id AND type = :type ORDER BY type DESC; "); $statement->bindValue(':id', $id, SQLITE3_TEXT); $statement->bindValue(':type', $type, SQLITE3_TEXT); $r = $statement->execute()->fetchArray(SQLITE3_ASSOC); if ($r){ $this->name = HTML::e($r["name"]); } elseif($this->id > 1000){ $this->type = AREA_TYPE_ID::CAIROS_DUNGEON; $this->name = "Hall of Heroes"; } else{ $statement = get_context()->get_db()->prepare(" SELECT name FROM area_type WHERE id = :type; "); $statement->bindValue(':type', $type, SQLITE3_TEXT); if ($r){ $this->name = HTML::e($r["name"]); } } } /** * Retrieves the area identifier. * * @return int Area ID. */ public function get_id(){ return $this->id; } /** * Retrieves the area type identifier. * * @see AREA_TYPE_ID. * @return int Area type ID */ public function get_type(){ return $this->type; } /** * Retrieves the area name. * * @return string The area name. */ public function get_name(){ return $this->name; } /** * Gets the URL to the area image. * * @param string $stage Stage number, for a more accurate image in Dimension Hole. * @return string Image URL, or a fixed unknown image. */ public function get_image($stage = null){ if ($this->id > 10000){ // Hall of Heroes return APPLICATION::img("AREA", "HOH"); } elseif ($this->type == AREA_TYPE_ID::RIFT_RAID){ return APPLICATION::img("UNIT", 44007); } elseif ($this->type == AREA_TYPE_ID::ARENA){ return APPLICATION::img("AREA", "ARENA"); } elseif ($this->type == AREA_TYPE_ID::DIMENSIONAL_RIFT){ return APPLICATION::img("CURRENCY", "darkportalenergy"); } elseif ( $this->type == AREA_TYPE_ID::SCENARIO || $this->type == AREA_TYPE_ID::GUILD_WAR || $this->type == AREA_TYPE_ID::GUILD_SIEGE || $this->type == AREA_TYPE_ID::WORLD_BOSS || $this->type == AREA_TYPE_ID::DIMENSIONAL_RIFT ){ return APPLICATION::img("AREA", $this->id); } elseif ($this->type == AREA_TYPE_ID::CAIROS_DUNGEON && APPLICATION::valid_id("DUNGEON_ID", $this->id)){ switch ($this->id){ case DUNGEON_ID::GIANTS_KEEP: return APPLICATION::img("UNIT", 60201); break; case DUNGEON_ID::DRAGONS_LAIR: return APPLICATION::img("UNIT", 60302); break; case DUNGEON_ID::NECROPOLIS: return APPLICATION::img("UNIT", 62105); break; case DUNGEON_ID::STEEL_FORTRESS: return APPLICATION::img("UNIT", 62403); break; case DUNGEON_ID::PUNISHERS_CRYPT: return APPLICATION::img("UNIT", 62604); break; case DUNGEON_ID::HALL_OF_WATER: return APPLICATION::img("UNIT", 60101); break; case DUNGEON_ID::HALL_OF_FIRE: return APPLICATION::img("UNIT", 60102); break; case DUNGEON_ID::HALL_OF_WIND: return APPLICATION::img("UNIT", 60103); break; case DUNGEON_ID::HALL_OF_LIGHT: return APPLICATION::img("UNIT", 60104); break; case DUNGEON_ID::HALL_OF_DARK: return APPLICATION::img("UNIT", 60105); break; case DUNGEON_ID::HALL_OF_MAGIC: return APPLICATION::img("UNIT", 62004); break; default: return APPLICATION::img("AREA", $this->id); } } elseif ($this->type == AREA_TYPE_ID::RIFT_DUNGEON && APPLICATION::valid_id("ELEMENTAL_RIFT_DUNGEON_ID", $this->id)){ switch ($this->id){ case ELEMENTAL_RIFT_DUNGEON_ID::ICE_BEAST: return APPLICATION::img("UNIT", 43001); break; case ELEMENTAL_RIFT_DUNGEON_ID::FIRE_BEAST: return APPLICATION::img("UNIT", 43002); break; case ELEMENTAL_RIFT_DUNGEON_ID::WIND_BEAST: return APPLICATION::img("UNIT", 43003); break; case ELEMENTAL_RIFT_DUNGEON_ID::LIGHT_BEAST: return APPLICATION::img("UNIT", 43004); break; case ELEMENTAL_RIFT_DUNGEON_ID::DARK_BEAST: return APPLICATION::img("UNIT", 43005); break; default: return APPLICATION::img("AREA", $this->id); break; } } elseif ($this->type == AREA_TYPE_ID::DIMENSIONAL_HOLE){ switch ($this->id){ case DUNGEON_ID::KARZHAN_PREDATOR: case DUNGEON_ID::ELLUNIA_PREDATOR: case DUNGEON_ID::LUMEL_PREDATOR: case DUNGEON_ID::KHALDERUN_PREDATOR: // Element is not consistent, using light icon. return APPLICATION::img("UNIT", 70004); break; case DUNGEON_ID::FOREST_OF_ROARING_BEASTS: return APPLICATION::img("UNIT", 47002); break; case DUNGEON_ID::SANCTUARY_OF_DREAMING_FAIRIES: return APPLICATION::img("UNIT", 47001); break; case DUNGEON_ID::CLIFF_OF_TOUGH_BEASTS_MEN: return APPLICATION::img("UNIT", 47003); break; case DUNGEON_ID::RUIN_OF_SILENT_DEAD: return APPLICATION::img("UNIT", 47004); break; case DUNGEON_ID::KARZHAN_REMAINS_WARBEAR: switch ($stage){ case 1: return APPLICATION::img("UNIT", 10734); break; case 2: return APPLICATION::img("UNIT", 10733); break; case 3: return APPLICATION::img("UNIT", 10731); break; case 4: return APPLICATION::img("UNIT", 10735); break; case 5: return APPLICATION::img("UNIT", 10732); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::KARZHAN_REMAINS_INUGAMI: switch ($stage){ case 1: return APPLICATION::img("UNIT", 11031); break; case 2: return APPLICATION::img("UNIT", 11033); break; case 3: return APPLICATION::img("UNIT", 11032); break; case 4: return APPLICATION::img("UNIT", 11034); break; case 5: return APPLICATION::img("UNIT", 11035); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::ELLUNIA_REMAINS_FAIRY: switch ($stage){ case 1: return APPLICATION::img("UNIT", 10132); break; case 2: return APPLICATION::img("UNIT", 10134); break; case 3: return APPLICATION::img("UNIT", 10131); break; case 4: return APPLICATION::img("UNIT", 10133); break; case 5: return APPLICATION::img("UNIT", 10134); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::ELLUNIA_REMAINS_PIXIE: switch ($stage){ case 1: return APPLICATION::img("UNIT", 10334); break; case 2: return APPLICATION::img("UNIT", 10332); break; case 3: return APPLICATION::img("UNIT", 10335); break; case 4: return APPLICATION::img("UNIT", 10333); break; case 5: return APPLICATION::img("UNIT", 10331); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::ELLUNIA_REMAINS_HIGH_ELEMENTAL: switch ($stage){ case 1: return APPLICATION::img("UNIT", 10332); break; case 2: return APPLICATION::img("UNIT", 10331); break; case 3: return APPLICATION::img("UNIT", 10334); break; case 4: return APPLICATION::img("UNIT", 12033); break; case 5: return APPLICATION::img("UNIT", 10335); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::LUMEL_REMAINS_WEREWOLF: switch ($stage){ case 1: return APPLICATION::img("UNIT", 14035); break; case 2: return APPLICATION::img("UNIT", 14033); break; case 3: return APPLICATION::img("UNIT", 14031); break; case 4: return APPLICATION::img("UNIT", 14034); break; case 5: return APPLICATION::img("UNIT", 14032); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::LUMEL_REMAINS_MARTIAL_CAT: switch ($stage){ case 1: return APPLICATION::img("UNIT", 15032); break; case 2: return APPLICATION::img("UNIT", 15034); break; case 3: return APPLICATION::img("UNIT", 15031); break; case 4: return APPLICATION::img("UNIT", 15035); break; case 5: return APPLICATION::img("UNIT", 15033); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::KHALDERUN_REMAINS_HOWL: switch ($stage){ case 1: return APPLICATION::img("UNIT", 13235); break; case 2: return APPLICATION::img("UNIT", 13234); break; case 3: return APPLICATION::img("UNIT", 13233); break; case 4: return APPLICATION::img("UNIT", 13232); break; case 5: return APPLICATION::img("UNIT", 13231); break; default: return APPLICATION::img("AREA", $this->id); break; } break; case DUNGEON_ID::KHALDERUN_REMAINS_GRIM_REAPER: switch ($stage){ case 1: return APPLICATION::img("UNIT", 16033); break; case 2: return APPLICATION::img("UNIT", 16031); break; case 3: return APPLICATION::img("UNIT", 16034); break; case 4: return APPLICATION::img("UNIT", 16032); break; case 5: return APPLICATION::img("UNIT", 16035); break; default: return APPLICATION::img("AREA", $this->id); break; } break; default: return APPLICATION::img("AREA", $this->id); break; } } elseif ($this->type == AREA_TYPE_ID::TARTARUS_LABYRINTH){ switch ($stage){ case LABYRINTH_STAGES_ID::TARTARUS: return APPLICATION::img("UNIT", 46001); break; case LABYRINTH_STAGES_ID::LEOS: return APPLICATION::img("UNIT", 46101); break; case LABYRINTH_STAGES_ID::KOTTOS: return APPLICATION::img("UNIT", 46102); break; case LABYRINTH_STAGES_ID::AQUILES: return APPLICATION::img("UNIT", 46103); break; default: return APPLICATION::img("AREA", "TARTARUS_LABYRINTH"); } } elseif ($this->type == AREA_TYPE_ID::TRIAL_OF_ASCENSION){ return APPLICATION::img("AREA", "TRIAL_OF_ASCENSION"); } else{ return APPLICATION::img("AREA", $this->id); } } }