mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-12-01 21:15:20 +08:00
zones-listview: working draft
This commit is contained in:
164
includes/class.zone.php
Normal file
164
includes/class.zone.php
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('AOWOW_REVISION'))
|
||||||
|
die('illegal access');
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
areatable: discarded Ids
|
||||||
|
unused: 276, 296, 1579, 2280, 3459, 3817, 208, 4076
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ZoneList extends BaseType
|
||||||
|
{
|
||||||
|
protected $setupQuery = 'SELECT *, id AS ARRAY_KEY FROM ?_zones z WHERE [cond] ORDER BY Id ASC';
|
||||||
|
protected $matchQuery = 'SELECT COUNT(1) FROM ?_zones WHERE [cond]';
|
||||||
|
|
||||||
|
// public function __construct($data)
|
||||||
|
// {
|
||||||
|
// parent::__construct($data);
|
||||||
|
|
||||||
|
// // post processing
|
||||||
|
// while ($this->iterate())
|
||||||
|
// {
|
||||||
|
// // preparse sources
|
||||||
|
// if (!empty($this->curTpl['source']))
|
||||||
|
// {
|
||||||
|
// $sources = explode(' ', $this->curTpl['source']);
|
||||||
|
// foreach ($sources as $src)
|
||||||
|
// {
|
||||||
|
// $src = explode(':', $src);
|
||||||
|
// $this->sources[$this->id][$src[0]][] = $src[1];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// $this->reset(); // push first element back for instant use
|
||||||
|
// }
|
||||||
|
|
||||||
|
public function getListviewData()
|
||||||
|
{
|
||||||
|
$data = [];
|
||||||
|
/*
|
||||||
|
LFG_TYPE_NONE = 0, // Internal use only
|
||||||
|
LFG_TYPE_DUNGEON = 1,
|
||||||
|
LFG_TYPE_RAID = 2,
|
||||||
|
LFG_TYPE_QUEST = 3,
|
||||||
|
LFG_TYPE_ZONE = 4,
|
||||||
|
LFG_TYPE_HEROIC = 5,
|
||||||
|
LFG_TYPE_RANDOM = 6
|
||||||
|
|
||||||
|
CREATE TABLE `aowow_zones` (
|
||||||
|
`id` mediumint(8) UNSIGNED NOT NULL COMMENT 'Zone Id' ,
|
||||||
|
`mapId` mediumint(8) UNSIGNED NOT NULL COMMENT 'Map Identifier' ,
|
||||||
|
`category` smallint(6) NOT NULL ,
|
||||||
|
`flags` int(11) NOT NULL ,
|
||||||
|
`faction` tinyint(2) NOT NULL ,
|
||||||
|
`expansion` tinyint(2) NOT NULL ,
|
||||||
|
`type` tinyint(2) UNSIGNED NOT NULL ,
|
||||||
|
`maxPlayer` smallint(6) NOT NULL ,
|
||||||
|
`levelReq` smallint(6) NOT NULL ,
|
||||||
|
`levelReqLFG` smallint(6) NOT NULL ,
|
||||||
|
`levelHeroic` smallint(6) NOT NULL ,
|
||||||
|
`levelMax` smallint(6) NOT NULL ,
|
||||||
|
`levelMin` smallint(6) NOT NULL ,
|
||||||
|
`name_loc0` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
|
||||||
|
`name_loc2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
|
||||||
|
`name_loc3` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
|
||||||
|
`name_loc6` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
|
||||||
|
`name_loc8` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci;
|
||||||
|
|
||||||
|
var g_zone_categories = {
|
||||||
|
0: "Eastern Kingdoms", // areaTable.map == 0 AND
|
||||||
|
1: "Kalimdor", // areaTable.map == 1 AND
|
||||||
|
2: "Dungeons", // map.areaType == 1
|
||||||
|
3: "Raids", // map.areaType == 2
|
||||||
|
6: "Battlegrounds", // map.areaType == 3
|
||||||
|
8: "Outland", // areaTable.map == 530 AND
|
||||||
|
9: "Arenas" // map.areaType == 4
|
||||||
|
10: "Northrend", // areaTable.map == 571 AND
|
||||||
|
};
|
||||||
|
|
||||||
|
var g_zone_instancetypes = {
|
||||||
|
1: "Transit", // [manual]
|
||||||
|
2: "Dungeon",
|
||||||
|
3: "Raid", // Classic
|
||||||
|
4: "Battleground", // map.isBattleground
|
||||||
|
5: "Dungeon", // Heroic
|
||||||
|
6: "Arena", // map.areaType == 4
|
||||||
|
7: "Raid", // 10-25
|
||||||
|
8: "Raid" // 10-25 Heroic
|
||||||
|
};
|
||||||
|
|
||||||
|
var g_zone_territories = {
|
||||||
|
0: "Alliance", // areaTable.factionGroupMask == 2
|
||||||
|
1: "Horde", // areaTable.factionGroupMask == 4
|
||||||
|
2: "Contested", // areaTable.factionGroupMask == 6
|
||||||
|
3: "Sanctuary", // areaTable.flags & AREA_FLAG_SANCTUARY
|
||||||
|
4: "PvP", // map.areaType IN [3, 4]
|
||||||
|
5: "World PvP" // areaTable.flags & AREA_FLAG_WINTERGRASP
|
||||||
|
};
|
||||||
|
|
||||||
|
visibleCols: ['heroiclevel', 'players']
|
||||||
|
|
||||||
|
"id":5004, // areaTable.Id
|
||||||
|
"category":2, // s.o
|
||||||
|
"expansion":3, // lfgDungeons.expansion || map.expansion
|
||||||
|
"territory":2, // s.o.
|
||||||
|
"instance":5, // s.o.
|
||||||
|
"nplayers":5, // map.maxPlayers
|
||||||
|
"reqlevel":77, // access_requirement.level_min
|
||||||
|
"heroicLevel":85, // access_requirement.level_min
|
||||||
|
"lfgReqLevel":80, // lfgDungeons.targetLevel
|
||||||
|
"maxlevel":82, // lfgDungeons.levelMin
|
||||||
|
"minlevel":80, // lfgDungeons.levelMax
|
||||||
|
"name":"Abyssal Maw: Throne of the Tides", // areaTable.name_X
|
||||||
|
*/
|
||||||
|
while ($this->iterate())
|
||||||
|
{
|
||||||
|
$data[$this->id] = array(
|
||||||
|
'id' => $this->id,
|
||||||
|
'category' => $this->curTpl['category'],
|
||||||
|
'territory' => $this->curTpl['faction'],
|
||||||
|
'minlevel' => $this->curTpl['levelMin'],
|
||||||
|
'maxlevel' => $this->curTpl['levelMax'],
|
||||||
|
'name' => $this->getField('name', true)
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($_ = $this->curTpl['expansion'])
|
||||||
|
$data[$this->id]['expansion'] = $_;
|
||||||
|
|
||||||
|
if ($_ = $this->curTpl['type'])
|
||||||
|
$data[$this->id]['instance'] = $_;
|
||||||
|
|
||||||
|
if ($_ = $this->curTpl['maxPlayer'])
|
||||||
|
$data[$this->id]['nplayers'] = $_;
|
||||||
|
|
||||||
|
if ($_ = $this->curTpl['levelReq'])
|
||||||
|
$data[$this->id]['reqlevel'] = $_;
|
||||||
|
|
||||||
|
if ($_ = $this->curTpl['levelReqLFG'])
|
||||||
|
$data[$this->id]['lfgReqLevel'] = $_;
|
||||||
|
|
||||||
|
if ($_ = $this->curTpl['levelHeroic'])
|
||||||
|
$data[$this->id]['heroicLevel'] = $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addGlobalsToJscript(&$refs)
|
||||||
|
{
|
||||||
|
if (!isset($refs['gZones']))
|
||||||
|
$refs['gZones'] = [];
|
||||||
|
|
||||||
|
while ($this->iterate())
|
||||||
|
$refs['gZones'][$this->id]['name'] = Util::jsEscape($this->getField('name', true));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addRewardsToJScript(&$ref) { }
|
||||||
|
public function renderTooltip() { }
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -115,6 +115,9 @@ $lang = array(
|
|||||||
'spell' => "Zauber",
|
'spell' => "Zauber",
|
||||||
'spells' => "Zauber",
|
'spells' => "Zauber",
|
||||||
'valueDelim' => " - ", // " bis "
|
'valueDelim' => " - ", // " bis "
|
||||||
|
'zone' => "Zone",
|
||||||
|
'zones' => "Gebiete",
|
||||||
|
'expansions' => array("Classic", "The Burning Crusade", "Wrath of the Lich King"),
|
||||||
'stats' => array("Stärke", "Beweglichkeit", "Ausdauer", "Intelligenz", "Willenskraft"),
|
'stats' => array("Stärke", "Beweglichkeit", "Ausdauer", "Intelligenz", "Willenskraft"),
|
||||||
'languages' => array(
|
'languages' => array(
|
||||||
1 => "Orcisch", 2 => "Darnassisch", 3 => "Taurisch", 6 => "Zwergisch", 7 => "Gemeinsprache", 8 => "Dämonisch", 9 => "Titanisch", 10 => "Thalassisch",
|
1 => "Orcisch", 2 => "Darnassisch", 3 => "Taurisch", 6 => "Zwergisch", 7 => "Gemeinsprache", 8 => "Dämonisch", 9 => "Titanisch", 10 => "Thalassisch",
|
||||||
@@ -249,8 +252,12 @@ $lang = array(
|
|||||||
'CosmicMap' => "Kosmische Karte",
|
'CosmicMap' => "Kosmische Karte",
|
||||||
),
|
),
|
||||||
'zone' => array(
|
'zone' => array(
|
||||||
'zone' => "Zone",
|
// 'zone' => "Zone",
|
||||||
'zonePartOf' => "Diese Zone ist Teil der Zone",
|
// 'zonePartOf' => "Diese Zone ist Teil der Zone",
|
||||||
|
'cat' => array(
|
||||||
|
"Östliche Königreiche", "Kalimdor", "Dungeons", "Schlachtzüge", "Unbenutzt", null,
|
||||||
|
"Schlachtfelder", null, "Scherbenwelt", "Arenen", "Nordend"
|
||||||
|
)
|
||||||
),
|
),
|
||||||
'title' => array(
|
'title' => array(
|
||||||
'cat' => array(
|
'cat' => array(
|
||||||
|
|||||||
@@ -110,6 +110,9 @@ $lang = array(
|
|||||||
'spell' => "spell",
|
'spell' => "spell",
|
||||||
'spells' => "Spells",
|
'spells' => "Spells",
|
||||||
'valueDelim' => " to ",
|
'valueDelim' => " to ",
|
||||||
|
'zone' => "zone",
|
||||||
|
'zones' => "Zones",
|
||||||
|
'expansions' => array("Classic", "The Burning Crusade", "Wrath of the Lich King"),
|
||||||
'stats' => array("Strength", "Agility", "Stamina", "Intellect", "Spirit"),
|
'stats' => array("Strength", "Agility", "Stamina", "Intellect", "Spirit"),
|
||||||
'languages' => array(
|
'languages' => array(
|
||||||
1 => "Orcish", 2 => "Darnassian", 3 => "Taurahe", 6 => "Dwarvish", 7 => "Common", 8 => "Demonic", 9 => "Titan", 10 => "Thalassian",
|
1 => "Orcish", 2 => "Darnassian", 3 => "Taurahe", 6 => "Dwarvish", 7 => "Common", 8 => "Demonic", 9 => "Titan", 10 => "Thalassian",
|
||||||
@@ -240,8 +243,12 @@ $lang = array(
|
|||||||
'CosmicMap' => "Cosmic Map",
|
'CosmicMap' => "Cosmic Map",
|
||||||
),
|
),
|
||||||
'zone' => array(
|
'zone' => array(
|
||||||
'zone' => "Zone",
|
// 'zone' => "Zone",
|
||||||
'zonePartOf' => "This zone is part of",
|
// 'zonePartOf' => "This zone is part of",
|
||||||
|
'cat' => array(
|
||||||
|
"Eastern Kingdoms", "Kalimdor", "Dungeons", "Raids", "Unused", null,
|
||||||
|
"Battlegrounds", null, "Outland", "Arenas", "Northrend"
|
||||||
|
)
|
||||||
),
|
),
|
||||||
'title' => array(
|
'title' => array(
|
||||||
'cat' => array(
|
'cat' => array(
|
||||||
|
|||||||
@@ -107,6 +107,9 @@ $lang = array(
|
|||||||
'spell' => "hechizo",
|
'spell' => "hechizo",
|
||||||
'spells' => "Hechizos",
|
'spells' => "Hechizos",
|
||||||
'valueDelim' => " - ",
|
'valueDelim' => " - ",
|
||||||
|
'zone' => "zona",
|
||||||
|
'zones' => "Zonas",
|
||||||
|
'expansions' => array("World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"),
|
||||||
'stats' => array("Fuerza", "Agilidad", "Aguante", "Intelecto", "Espíritu"),
|
'stats' => array("Fuerza", "Agilidad", "Aguante", "Intelecto", "Espíritu"),
|
||||||
'languages' => array(
|
'languages' => array(
|
||||||
1 => "Orco", 2 => "Darnassiano", 3 => "Taurahe", 6 => "Enánico", 7 => "Lengua común", 8 => "Demoníaco", 9 => "Titánico", 10 => "Thalassiano",
|
1 => "Orco", 2 => "Darnassiano", 3 => "Taurahe", 6 => "Enánico", 7 => "Lengua común", 8 => "Demoníaco", 9 => "Titánico", 10 => "Thalassiano",
|
||||||
@@ -201,8 +204,12 @@ $lang = array(
|
|||||||
'CosmicMap' => "Mapa cósmico",
|
'CosmicMap' => "Mapa cósmico",
|
||||||
),
|
),
|
||||||
'zone' => array(
|
'zone' => array(
|
||||||
'zone' => "Zone",
|
// 'zone' => "Zone",
|
||||||
'zonePartOf' => "Cette zone fait partie de la zone",
|
// 'zonePartOf' => "Cette zone fait partie de la zone",
|
||||||
|
'cat' => array(
|
||||||
|
"Reinos del Este", "Kalimdor", "Mazmorras", "Bandas", "No las uso", null,
|
||||||
|
"Campos de batalla", null, "Terrallende", "Arenas", "Rasganorte"
|
||||||
|
)
|
||||||
),
|
),
|
||||||
'title' => array(
|
'title' => array(
|
||||||
'cat' => array(
|
'cat' => array(
|
||||||
|
|||||||
@@ -107,6 +107,9 @@ $lang = array(
|
|||||||
'spell' => "sort",
|
'spell' => "sort",
|
||||||
'spells' => "Sorts",
|
'spells' => "Sorts",
|
||||||
'valueDelim' => " - ",
|
'valueDelim' => " - ",
|
||||||
|
'zone' => "zone",
|
||||||
|
'zones' => "Zones",
|
||||||
|
'expansions' => array("Classique", "The Burning Crusade", "Wrath of the Lich King"),
|
||||||
'stats' => array("Force", "Agilité", "Endurance", "Intelligence", "Esprit"),
|
'stats' => array("Force", "Agilité", "Endurance", "Intelligence", "Esprit"),
|
||||||
'languages' => array(
|
'languages' => array(
|
||||||
1 => "Orc", 2 => "Darnassien", 3 => "Taurahe", 6 => "Nain", 7 => "Commun", 8 => "Démoniaque", 9 => "Titan", 10 => "Thalassien",
|
1 => "Orc", 2 => "Darnassien", 3 => "Taurahe", 6 => "Nain", 7 => "Commun", 8 => "Démoniaque", 9 => "Titan", 10 => "Thalassien",
|
||||||
@@ -201,8 +204,12 @@ $lang = array(
|
|||||||
'CosmicMap' => "Carte cosmique",
|
'CosmicMap' => "Carte cosmique",
|
||||||
),
|
),
|
||||||
'zone' => array(
|
'zone' => array(
|
||||||
'zone' => "Zone",
|
// 'zone' => "Zone",
|
||||||
'zonePartOf' => "Cette zone fait partie de la zone",
|
// 'zonePartOf' => "Cette zone fait partie de la zone",
|
||||||
|
'cat' => array(
|
||||||
|
"Royaumes de l'est", "Kalimdor", "Donjons", "Raids", "Inutilisées", null,
|
||||||
|
"Champs de bataille", null, "Outreterre", "Arènes", "Norfendre"
|
||||||
|
)
|
||||||
),
|
),
|
||||||
'title' => array(
|
'title' => array(
|
||||||
'cat' => array(
|
'cat' => array(
|
||||||
|
|||||||
@@ -107,6 +107,9 @@ $lang = array(
|
|||||||
'spell' => "заклинание",
|
'spell' => "заклинание",
|
||||||
'spells' => "Заклинания",
|
'spells' => "Заклинания",
|
||||||
'valueDelim' => " - ",
|
'valueDelim' => " - ",
|
||||||
|
'zone' => "игровая зона",
|
||||||
|
'zones' => "Местности",
|
||||||
|
'expansions' => array("World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"),
|
||||||
'stats' => array("к силе", "к ловкости", "к выносливости", "к интеллекту", "к духу"),
|
'stats' => array("к силе", "к ловкости", "к выносливости", "к интеллекту", "к духу"),
|
||||||
'languages' => array(
|
'languages' => array(
|
||||||
1 => "орочий", 2 => "дарнасский", 3 => "таурахэ", 6 => "дворфийский", 7 => "всеобщий", 8 => "язык демонов", 9 => "язык титанов", 10 => "талассийский",
|
1 => "орочий", 2 => "дарнасский", 3 => "таурахэ", 6 => "дворфийский", 7 => "всеобщий", 8 => "язык демонов", 9 => "язык титанов", 10 => "талассийский",
|
||||||
@@ -201,8 +204,12 @@ $lang = array(
|
|||||||
'CosmicMap' => "Звёздная карта",
|
'CosmicMap' => "Звёздная карта",
|
||||||
),
|
),
|
||||||
'zone' => array(
|
'zone' => array(
|
||||||
'zone' => "Игровая зона",
|
// 'zone' => "Игровая зона",
|
||||||
'zonePartOf' => "Эта игровая локация является частью локации",
|
// 'zonePartOf' => "Эта игровая локация является частью локации",
|
||||||
|
'cat' => array(
|
||||||
|
"Восточные королевства", "Калимдор", "Подземелья", "Рейды", "Неактивно", null,
|
||||||
|
"Поля боя", null, "Запределье", "Арены", "Нордскол"
|
||||||
|
)
|
||||||
),
|
),
|
||||||
'title' => array(
|
'title' => array(
|
||||||
'cat' => array(
|
'cat' => array(
|
||||||
|
|||||||
96
pages/zones.php
Normal file
96
pages/zones.php
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('AOWOW_REVISION'))
|
||||||
|
die('illegal access');
|
||||||
|
|
||||||
|
|
||||||
|
$cats = Util::extractURLParams($pageParam);
|
||||||
|
$path = [0, 6];
|
||||||
|
$title = [Util::ucFirst(Lang::$game['zones'])];
|
||||||
|
$cacheKey = implode('_', [CACHETYPE_PAGE, TYPE_ZONE, -1, $cats[0] ? implode('.', $cats) : -1, User::$localeId]);
|
||||||
|
$validCats = array(
|
||||||
|
0 => true,
|
||||||
|
1 => true,
|
||||||
|
2 => [0, 1, 2],
|
||||||
|
3 => [0, 1, 2],
|
||||||
|
6 => true,
|
||||||
|
8 => true,
|
||||||
|
9 => true,
|
||||||
|
10 => true
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!Util::isValidPage($validCats, $cats))
|
||||||
|
$smarty->error();
|
||||||
|
|
||||||
|
if (isset($cats[0]))
|
||||||
|
{
|
||||||
|
if (isset($cats[1]))
|
||||||
|
array_unshift($title, Lang::$game['expansions'][$cats[1]]);
|
||||||
|
|
||||||
|
$path = array_merge($path, $cats);
|
||||||
|
array_unshift($title, Lang::$zone['cat'][$cats[0]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!$smarty->loadCache($cacheKey, $pageData))
|
||||||
|
{
|
||||||
|
$conditions = [];
|
||||||
|
$visibleCols = [];
|
||||||
|
$hiddenCols = [];
|
||||||
|
|
||||||
|
if (isset($cats[0]))
|
||||||
|
$conditions[] = ['z.category', $cats[0]];
|
||||||
|
|
||||||
|
if (isset($cats[1]) && in_array($cats[0], [2, 3]))
|
||||||
|
$conditions[] = ['z.expansion', $cats[1]];
|
||||||
|
|
||||||
|
$zones = new ZoneList($conditions);
|
||||||
|
|
||||||
|
$somData = "{flightmaster: [{ coords: [[59.3,48.0]], level: 0, name: 'Thrallmar, Hellfire Peninsula', type: 1, id: 16587, reacthorde: 1, reactalliance: -1, paths: [[50.9,55.0],[49.1,72.1],[68.5,51.5],[60.9,61.3],[44.1,65.8]] },{ coords: [[58.9,55.8]], level: 0, name: 'Honor Hold, Hellfire Peninsula', type: 1, id: 16822, reacthorde: -1, reactalliance: 1, paths: [[50.1,48.3],[52.2,75.7],[68.6,52.8],[65.9,47.6],[44.1,65.8]] },{ coords: [[50.1,48.3]], level: 0, name: 'Temple of Telhamat, Hellfire Peninsula', type: 1, id: 18785, reacthorde: -1, reactalliance: 1, paths: [[39.7,48.2],[68.6,52.8]] },{ coords: [[50.9,55.0]], level: 0, name: 'Falcon Watch, Hellfire Peninsula', type: 1, id: 18942, reacthorde: 1, reactalliance: -1, paths: [[29.7,48.1],[33.6,60.8],[44.1,65.8],[68.5,51.5],[44.6,49.2]] },{ coords: [[39.7,48.2]], level: 0, name: 'Telredor, Zangarmarsh', type: 1, id: 18788, reacthorde: -1, reactalliance: 1, paths: [[32.6,73.4],[44.1,65.8],[35.5,31.2],[32.0,41.7],[42.7,34.0]] },{ coords: [[29.7,48.1]], level: 0, name: 'Zabra\'jin, Zangarmarsh', type: 1, id: 18791, reacthorde: 1, reactalliance: -1, paths: [[33.6,60.8],[44.1,65.8],[39.9,29.0],[44.6,49.2]] },{ coords: [[32.6,73.4]], level: 0, name: 'Telaar, Nagrand', type: 1, id: 18789, reacthorde: -1, reactalliance: 1, paths: [[52.2,75.7],[44.1,65.8]] },{ coords: [[33.6,60.8]], level: 0, name: 'Garadar, Nagrand', type: 1, id: 18808, reacthorde: 1, reactalliance: -1, paths: [[44.1,65.8]] },{ coords: [[52.2,75.7]], level: 0, name: 'Allerian Stronghold, Terokkar Forest', type: 1, id: 18809, reacthorde: -1, reactalliance: 1, paths: [[62.1,84.2],[44.1,65.8]] },{ coords: [[53.8,23.5]], level: 0, name: 'Area 52, Netherstorm', type: 1, id: 18938, reacthorde: 1, reactalliance: 1, paths: [[63.8,24.4],[57.5,14.3],[42.9,24.4]] },{ coords: [[59.8,75.9]], level: 0, name: 'Shadowmoon Village, Shadowmoon Valley', type: 1, id: 19317, reacthorde: 1, reactalliance: -1, paths: [[49.1,72.1],[70.1,76.3],[68.0,85.0]] },{ coords: [[62.1,84.2]], level: 0, name: 'Wildhammer Stronghold, Shadowmoon Valley', type: 1, id: 18939, reacthorde: -1, reactalliance: 1, paths: [[70.1,76.3],[68.0,85.0]] },{ coords: [[35.5,31.2]], level: 0, name: 'Sylvanaar, Blade\'s Edge Mountains', type: 1, id: 18937, reacthorde: -1, reactalliance: 1, paths: [[53.8,23.5],[57.5,14.3],[42.7,34.0],[42.9,24.4],[32.0,41.7]] },{ coords: [[39.9,29.0]], level: 0, name: 'Thunderlord Stronghold, Blade\'s Edge Mountains', type: 1, id: 18953, reacthorde: 1, reactalliance: -1, paths: [[53.8,23.5],[57.5,14.3],[44.6,49.2],[42.9,24.4],[47.5,32.6]] },{ coords: [[49.1,72.1]], level: 0, name: 'Stonebreaker Hold, Terokkar Forest', type: 1, id: 18807, reacthorde: 1, reactalliance: -1, paths: [[44.1,65.8]] },{ coords: [[44.1,65.8]], level: 0, name: 'Shattrath, Terokkar Forest', type: 1, id: 18940, reacthorde: 1, reactalliance: 1 },{ coords: [[68.6,52.8]], level: 0, name: 'Hellfire Peninsula, The Dark Portal', type: 1, id: 18931, reacthorde: -1, reactalliance: 1, paths: [[65.9,47.6]] },{ coords: [[68.5,51.5]], level: 0, name: 'Hellfire Peninsula, The Dark Portal', type: 1, id: 18930, reacthorde: 1, reactalliance: -1 },{ coords: [[57.5,14.3]], level: 0, name: 'The Stormspire, Netherstorm', type: 1, id: 19583, reacthorde: 1, reactalliance: 1, paths: [[63.8,24.4]] },{ coords: [[70.1,76.3]], level: 0, name: 'Altar of Sha\'tar, Shadowmoon Valley', type: 1, id: 19581, reacthorde: 1, reactalliance: 1 },{ coords: [[60.9,61.3]], level: 0, name: 'Spinebreaker Ridge, Hellfire Peninsula', type: 1, id: 19558, reacthorde: 1, reactalliance: -1 },{ coords: [[65.9,47.6]], level: 0, name: 'Shatter Point, Hellfire Peninsula', type: 1, id: 20234, reacthorde: -1, reactalliance: 1 },{ coords: [[63.8,24.4]], level: 0, name: 'Cosmowrench, Netherstorm', type: 1, id: 20515, reacthorde: 1, reactalliance: 1 },{ coords: [[44.6,49.2]], level: 0, name: 'Swamprat Post, Zangarmarsh', type: 1, id: 20762, reacthorde: 1, reactalliance: -1, paths: [[44.1,65.8],[47.5,32.6]] },{ coords: [[42.7,34.0]], level: 0, name: 'Toshley\'s Station, Blade\'s Edge Mountains', type: 1, id: 21107, reacthorde: -1, reactalliance: 1, paths: [[53.8,23.5],[42.9,24.4]] },{ coords: [[68.0,85.0]], level: 0, name: 'Sanctum of the Stars, Shadowmoon Valley', type: 1, id: 21766, reacthorde: 1, reactalliance: 1 },{ coords: [[42.9,24.4]], level: 0, name: 'Evergrove, Blade\'s Edge Mountains', type: 1, id: 22216, reacthorde: 1, reactalliance: 1 },{ coords: [[47.5,32.6]], level: 0, name: 'Mok\'Nathal Village, Blade\'s Edge Mountains', type: 1, id: 22455, reacthorde: 1, reactalliance: -1, paths: [[53.8,23.5]] },{ coords: [[32.0,41.7]], level: 0, name: 'Orebor Harborage, Zangarmarsh', type: 1, id: 22485, reacthorde: -1, reactalliance: 1 }]}";
|
||||||
|
|
||||||
|
$pageData = array(
|
||||||
|
'file' => 'zone',
|
||||||
|
'data' => $zones->getListviewData(),
|
||||||
|
'som' => $somData,
|
||||||
|
'map' => array(
|
||||||
|
'zone' => -2,
|
||||||
|
'zoom' => 1,
|
||||||
|
'overlay' => 'true',
|
||||||
|
'zoomable' => 'false',
|
||||||
|
),
|
||||||
|
'params' => []
|
||||||
|
);
|
||||||
|
|
||||||
|
$smarty->saveCache($cacheKey, $pageData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
filters.js
|
||||||
|
Mapper.js
|
||||||
|
ShowOnMap.js
|
||||||
|
|
||||||
|
new ShowOnMap();
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
$page = array(
|
||||||
|
'tab' => 0, // for g_initHeader($tab)
|
||||||
|
'title' => implode(' - ', $title),
|
||||||
|
'path' => json_encode($path, JSON_NUMERIC_CHECK),
|
||||||
|
'reqJS' => array(
|
||||||
|
array('path' => 'template/js/Mapper.js', 'conditional' => false),
|
||||||
|
array('path' => 'template/js/ShowOnMap.js', 'conditional' => false),
|
||||||
|
),
|
||||||
|
'reqCSS' => array(
|
||||||
|
array('path' => 'template/css/Mapper.css', 'condition' => false),
|
||||||
|
array('path' => 'template/css/Mapper_ie6.css', 'condition' => 'lte IE 6'),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
$smarty->updatePageVars($page);
|
||||||
|
$smarty->assign('lang', Lang::$main);
|
||||||
|
$smarty->assign('mysql', DB::Aowow()->getStatistics());
|
||||||
|
$smarty->assign('lvData', $pageData);
|
||||||
|
$smarty->display('generic-no-filter.tpl');
|
||||||
|
|
||||||
|
?>
|
||||||
67
setup/aowow_zones.sql
Normal file
67
setup/aowow_zones.sql
Normal file
File diff suppressed because one or more lines are too long
36
template/bricks/listviews/zone.tpl
Normal file
36
template/bricks/listviews/zone.tpl
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{strip}
|
||||||
|
new Listview({ldelim}
|
||||||
|
template:'zone',
|
||||||
|
{if !isset($params.id)}id:'zones',{/if}
|
||||||
|
{if !isset($params.name)}name:LANG.tab_zones,{/if}
|
||||||
|
{if !isset($params.parent)}parent:'listview-generic',{/if}
|
||||||
|
{foreach from=$params key=k item=v}
|
||||||
|
{if $v[0] == '$'}
|
||||||
|
{$k}:{$v|substr:1},
|
||||||
|
{else if $v}
|
||||||
|
{$k}:'{$v}',
|
||||||
|
{/if}
|
||||||
|
{/foreach}
|
||||||
|
data:[
|
||||||
|
{foreach name=i from=$data item=curr}
|
||||||
|
{ldelim}
|
||||||
|
id:{$curr.id},
|
||||||
|
category:{$curr.category},
|
||||||
|
territory:{$curr.territory},
|
||||||
|
minlevel:{$curr.minlevel},
|
||||||
|
maxlevel:{$curr.maxlevel},
|
||||||
|
name:'{$curr.name|escape:"quotes"}'
|
||||||
|
{if isset($curr.expansion)},expansion:{$curr.expansion}{/if}
|
||||||
|
{if isset($curr.instance)},instance:{$curr.instance}{/if}
|
||||||
|
{if isset($curr.nplayers)},nplayers:{$curr.nplayers}{/if}
|
||||||
|
{if isset($curr.reqlevel)},reqlevel:{$curr.reqlevel}{/if}
|
||||||
|
{if isset($curr.lfgReqLevel)},lfgReqLevel:{$curr.lfgReqLevel}{/if}
|
||||||
|
{if isset($curr.heroicLevel)},heroicLevel:{$curr.heroicLevel}{/if}
|
||||||
|
{* {if isset($curr.percent)},percent:{$curr.percent}{/if} what was that originaly for..? *}
|
||||||
|
{rdelim}
|
||||||
|
{if $smarty.foreach.i.last}{else},{/if}
|
||||||
|
{/foreach}
|
||||||
|
]
|
||||||
|
{rdelim});
|
||||||
|
{/strip}
|
||||||
|
|
||||||
11
template/bricks/mapper.tpl
Normal file
11
template/bricks/mapper.tpl
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<div id="mapper" style="width: 778px; margin: 0 auto">
|
||||||
|
{if isset($som)}<div id="som-generic"></div>{/if}
|
||||||
|
<div id="mapper-generic"></div>
|
||||||
|
<div class="pad clear"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">//<![CDATA[
|
||||||
|
var g_pageInfo = {ldelim}id:-2{rdelim}; {* what on gods green earth..? *}
|
||||||
|
var myMapper = new Mapper({ldelim}{foreach from=$map key=k item=v}{$k}: {$v}, {/foreach}parent: 'mapper-generic'{rdelim});
|
||||||
|
{if isset($som)}new ShowOnMap({$som});{/if}
|
||||||
|
//]]></script>
|
||||||
@@ -1,59 +1,193 @@
|
|||||||
/*
|
|
||||||
Mapper.css version 294
|
|
||||||
*/
|
|
||||||
.mapper {
|
.mapper {
|
||||||
position:relative;
|
position: relative;
|
||||||
margin-top:10px;
|
margin-top: 10px;
|
||||||
border:3px solid #404040;
|
border: 3px solid #404040;
|
||||||
background-color:black;
|
background-color: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .pin {
|
.mapper .pin {
|
||||||
position:absolute;
|
position: absolute;
|
||||||
width:1px;
|
width: 1px;
|
||||||
height:1px;
|
height: 1px;
|
||||||
font-size:1px;
|
font-size: 1px;
|
||||||
|
z-index: 5; /* Put pins on top of lines */
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .pin a {
|
.mapper .pin a {
|
||||||
position:relative;
|
position: relative;
|
||||||
width:11px;
|
width: 11px;
|
||||||
height:11px;
|
height: 11px;
|
||||||
left:-5px;
|
left: -5px;
|
||||||
top:-5px;
|
top: -5px;
|
||||||
background:url(../images/map-pin-yellow.png) no-repeat;
|
background: url(../images/Mapper/pin-yellow.png) no-repeat;
|
||||||
display:block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .pin-1 a {
|
.mapper .pin-start a {
|
||||||
background-image:url(../images/map-pin-green.png);
|
background-image: url(../images/Mapper/quest-start.png);
|
||||||
|
width: 9px;
|
||||||
|
height: 17px;
|
||||||
|
left: -4px;
|
||||||
|
top: -8px;
|
||||||
|
z-index: 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .pin-2 a {
|
.mapper .pin-end a {
|
||||||
background-image:url(../images/map-pin-red.png);
|
background-image: url(../images/Mapper/quest-end.png);
|
||||||
|
width: 12px;
|
||||||
|
height: 18px;
|
||||||
|
left: -6px;
|
||||||
|
top: -9px;
|
||||||
|
z-index: 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .pin-3 a {
|
.mapper .pin-startend a {
|
||||||
background-image:url(../images/map-pin-blue.png);
|
background-image: url(../images/Mapper/quest-startend.png);
|
||||||
|
width: 19px;
|
||||||
|
height: 18px;
|
||||||
|
left: -9px;
|
||||||
|
top: -9px;
|
||||||
|
z-index: 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .pin-4 a {
|
.mapper-pin, .mapper-pin-1, .mapper-pin-2, .mapper-pin-3, .mapper-pin-4 {
|
||||||
background-image:url(../images/map-pin-purple.png);
|
padding-left: 13px;
|
||||||
|
background-image: url(../images/Mapper/pin-yellow.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-pin-1, .mapper .pin-1 a {
|
||||||
|
background-image: url(../images/Mapper/pin-green.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-pin-2, .mapper .pin-2 a {
|
||||||
|
background-image: url(../images/Mapper/pin-red.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-pin-3, .mapper .pin-3 a {
|
||||||
|
background-image: url(../images/Mapper/pin-blue.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-pin-4, .mapper .pin-4 a {
|
||||||
|
background-image: url(../images/Mapper/pin-purple.png);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .glow {
|
.mapper .glow {
|
||||||
margin:0 2px;
|
margin: 0 2px;
|
||||||
font-size:12px;
|
font-size: 12px;
|
||||||
font-weight:bold;
|
font-weight: bold;
|
||||||
color:white;
|
color: white;
|
||||||
cursor:default;
|
cursor: default;
|
||||||
white-space:nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .glow a {
|
.mapper .glow a {
|
||||||
text-decoration:none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mapper .glow a:hover {
|
.mapper .glow a:hover {
|
||||||
text-decoration:underline;
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-som-button {
|
||||||
|
margin: 0 !important;
|
||||||
|
float: left !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-legend {
|
||||||
|
float: left;
|
||||||
|
display: block;
|
||||||
|
background-color: #141414;
|
||||||
|
border: 1px solid #101010;
|
||||||
|
font-size: 11px;
|
||||||
|
margin: -4px 0 0 15px;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-legend-container {
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper-legend-pin {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line var {
|
||||||
|
background: #C8B94C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-1 var {
|
||||||
|
background: #73B85B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-2 var {
|
||||||
|
background: #D7563C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-3 var {
|
||||||
|
background: #47ACCD;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-4 var {
|
||||||
|
background: #C844D0;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.ie678 .line var {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line var {
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
margin: -2px 0 0 2px;
|
||||||
|
display: block;
|
||||||
|
background: #FFFFFF;
|
||||||
|
border: 1px solid #181818;
|
||||||
|
border-left: none;
|
||||||
|
border-right: none;
|
||||||
|
-o-transform-origin: 0 0;
|
||||||
|
-moz-transform-origin: 0 0;
|
||||||
|
-webkit-transform-origin: 0 0;
|
||||||
|
-o-box-shadow: 0px 0px 3px black;
|
||||||
|
/*-moz-box-shadow: 0px 0px 3px black;*/
|
||||||
|
-webkit-box-shadow: 0px 0px 3px black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line.flipped {
|
||||||
|
-o-transform: scaleY(-1);
|
||||||
|
-moz-transform: scaleY(-1);
|
||||||
|
-webkit-transform: scaleY(-1);
|
||||||
|
-ms-filter: "FlipV";
|
||||||
|
filter: FlipV;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line var {
|
||||||
|
background: #C8B94C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-1 var {
|
||||||
|
background: #73B85B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-2 var {
|
||||||
|
background: #D7563C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-3 var {
|
||||||
|
background: #47ACCD;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mapper .line-4 var {
|
||||||
|
background: #C844D0;
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,9 @@
|
|||||||
{include file='bricks/announcement.tpl' an=$item}
|
{include file='bricks/announcement.tpl' an=$item}
|
||||||
{/foreach}
|
{/foreach}
|
||||||
{/if}
|
{/if}
|
||||||
|
{if isset($lvData.map)}
|
||||||
|
{include file='bricks/mapper.tpl' map=$lvData.map som=$lvData.som}
|
||||||
|
{/if}
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
g_initPath({$page.path});
|
g_initPath({$page.path});
|
||||||
@@ -18,10 +21,12 @@
|
|||||||
<div id="tabs-generic"></div>
|
<div id="tabs-generic"></div>
|
||||||
<div id="listview-generic" class="listview"></div>
|
<div id="listview-generic" class="listview"></div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var myTabs = new Tabs({ldelim}parent: $WH.ge('tabs-generic'){rdelim});
|
{if !empty($lvData.calendar)}var myTabs = new Tabs({ldelim}parent: $WH.ge('tabs-generic'){rdelim});{/if}
|
||||||
{include file="bricks/listviews/$file.tpl" data=$lvData.data params=$lvData.params}
|
{include file="bricks/listviews/$file.tpl" data=$lvData.data params=$lvData.params}
|
||||||
{if !empty($lvData.calendar)}{include file='bricks/listviews/calendar.tpl' data=$lvData.data params=$lvData.params}{/if}
|
{if !empty($lvData.calendar)}
|
||||||
|
{include file='bricks/listviews/calendar.tpl' data=$lvData.data params=$lvData.params}
|
||||||
myTabs.flush();
|
myTabs.flush();
|
||||||
|
{/if}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
|
|||||||
@@ -431,7 +431,7 @@ Mapper.prototype = {
|
|||||||
var maxIdx = [false, -1];
|
var maxIdx = [false, -1];
|
||||||
for(var i = 0; i < zoneList.length; ++i)
|
for(var i = 0; i < zoneList.length; ++i)
|
||||||
{
|
{
|
||||||
if(i > 0) span.append((i == zoneList.length-1 ? LANG.and : LANG.comma));
|
if(i > 0) ae(span, (i == zoneList.length-1 ? LANG.and : LANG.comma));
|
||||||
var entry = null;
|
var entry = null;
|
||||||
if(self.objectives[zoneList[i][0]].mappable > 0)
|
if(self.objectives[zoneList[i][0]].mappable > 0)
|
||||||
{
|
{
|
||||||
@@ -458,19 +458,19 @@ Mapper.prototype = {
|
|||||||
if(types.start && types.end)
|
if(types.start && types.end)
|
||||||
{
|
{
|
||||||
entry.className += ' icontiny';
|
entry.className += ' icontiny';
|
||||||
entry.style += ' background-image', 'url(' + g_staticUrl + '/images/icons/tiny/quest_startend.gif)';
|
entry.style += ' background-image', 'url(' + g_staticUrl + '/images/icons/quest_startend.gif)';
|
||||||
entry.style += ' padding-left', '20px';
|
entry.style += ' padding-left', '20px';
|
||||||
}
|
}
|
||||||
else if(types.start)
|
else if(types.start)
|
||||||
{
|
{
|
||||||
entry.className += ' icontiny';
|
entry.className += ' icontiny';
|
||||||
entry.style += ' background-image', 'url(' + g_staticUrl + '/images/icons/tiny/quest_start.gif)';
|
entry.style += ' background-image', 'url(' + g_staticUrl + '/images/icons/quest_start.gif)';
|
||||||
entry.style += ' padding-left', '14px';
|
entry.style += ' padding-left', '14px';
|
||||||
}
|
}
|
||||||
else if(types.end)
|
else if(types.end)
|
||||||
{
|
{
|
||||||
entry.className += ' icontiny';
|
entry.className += ' icontiny';
|
||||||
entry.style += ' background-image', 'url(' + g_staticUrl + '/images/icons/tiny/quest_end.gif)';
|
entry.style += ' background-image', 'url(' + g_staticUrl + '/images/icons/quest_end.gif)';
|
||||||
entry.style += ' padding-left', '16px';
|
entry.style += ' padding-left', '16px';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -979,12 +979,18 @@ Mapper.prototype = {
|
|||||||
// $('.line.' + Mapper.sizes[this.zoom][2], this.floorPins[level]).show();
|
// $('.line.' + Mapper.sizes[this.zoom][2], this.floorPins[level]).show();
|
||||||
if (this.floorPins[level]) {
|
if (this.floorPins[level]) {
|
||||||
var lines = this.floorPins[level].getElementsByClassName('line');
|
var lines = this.floorPins[level].getElementsByClassName('line');
|
||||||
for (i in lines)
|
for (i in lines) {
|
||||||
lines[i].display = 'none';
|
if (i < lines.length) {
|
||||||
|
lines[i].style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lines = this.floorPins[level].getElementsByClassName('line ' + Mapper.sizes[this.zoom][2]);
|
lines = this.floorPins[level].getElementsByClassName('line ' + Mapper.sizes[this.zoom][2]);
|
||||||
for (i in lines)
|
for (i in lines) {
|
||||||
lines[i].display = 'block';
|
if (i < lines.length) {
|
||||||
|
lines[i].style.display = 'block';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// end of replacement
|
// end of replacement
|
||||||
|
|
||||||
|
|||||||
827
template/js/ShowOnMap.js
Normal file
827
template/js/ShowOnMap.js
Normal file
@@ -0,0 +1,827 @@
|
|||||||
|
|
||||||
|
var ShowOnMap = function(data, mapper) {
|
||||||
|
var self = this;
|
||||||
|
self.data = data;
|
||||||
|
|
||||||
|
if (mapper == null) {
|
||||||
|
mapper = myMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.mapper = mapper;
|
||||||
|
|
||||||
|
self._legend = null;
|
||||||
|
self._legendLabel = null;
|
||||||
|
self._legendContents = null;
|
||||||
|
self._legendHorde = null;
|
||||||
|
self._legendAlliance = null;
|
||||||
|
self._menu = [];
|
||||||
|
|
||||||
|
self.construct();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.prototype.onExpand = function() {
|
||||||
|
this.expanded = true;
|
||||||
|
location.replace(this.pound + '.map');
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.prototype.onCollapse = function() {
|
||||||
|
this.expanded = false;
|
||||||
|
var hash = g_getHash();
|
||||||
|
if (hash.indexOf('#show') == 0 && hash.indexOf('.map') > 0) {
|
||||||
|
this.pound = hash.substr(0, hash.indexOf('.map'));
|
||||||
|
location.replace(this.pound);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowOnMap.prototype.construct = function() {
|
||||||
|
if (!this.data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var d = ge('som-generic');
|
||||||
|
|
||||||
|
var cmpFunc = function(a, b) {
|
||||||
|
return strcmp(a[1], b[1]);
|
||||||
|
};
|
||||||
|
|
||||||
|
var allianceMenu = [];
|
||||||
|
var hordeMenu = [];
|
||||||
|
for (var i in this.data) {
|
||||||
|
if (this.data[i].length === undefined) {
|
||||||
|
var submenu = [];
|
||||||
|
var allCoords = [];
|
||||||
|
var allLegend = {};
|
||||||
|
var group = this.data[i];
|
||||||
|
for (var p in group) {
|
||||||
|
var hasPaths = false;
|
||||||
|
for (var n = 0, len = group[p].length; n < len; ++n) {
|
||||||
|
if (group[p][n].paths) {
|
||||||
|
hasPaths = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var i2 = g_urlize(p);
|
||||||
|
if (group[p][0].name_enus !== undefined) {
|
||||||
|
i2 = g_urlize(group[p][0].name_enus);
|
||||||
|
}
|
||||||
|
|
||||||
|
var coords = {};
|
||||||
|
var legend = {};
|
||||||
|
var entry = [i2];
|
||||||
|
//pin.list.key = i;
|
||||||
|
var combined = ShowOnMap.combinePins(group[p], false, hasPaths);
|
||||||
|
var pins = combined[0];
|
||||||
|
var nPins = combined[1];
|
||||||
|
var nCoords = 0;
|
||||||
|
for (var n = 0; n < pins.length; ++n) {
|
||||||
|
var pin = pins[n];
|
||||||
|
var tooltip = ShowOnMap.buildTooltip(pin.list);
|
||||||
|
var url = tooltip[2];
|
||||||
|
var m = null;
|
||||||
|
if (url == 'javascript:;') {
|
||||||
|
m = tooltip[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pin.list.length == 1) {
|
||||||
|
url = (g_types[pin.list[0].type] && pin.list[0].id ? '?' + g_types[pin.list[0].type] + '=' + pin.list[0].id : '');
|
||||||
|
}
|
||||||
|
if (i == 'rare' || i == 'herb' || i == 'vein') {
|
||||||
|
tooltip[1] = submenu.length + 1;
|
||||||
|
}
|
||||||
|
if (coords[pin.level] == undefined) {
|
||||||
|
coords[pin.level] = [];
|
||||||
|
}
|
||||||
|
coords[pin.level].push([
|
||||||
|
pin.coord[0],
|
||||||
|
pin.coord[1],
|
||||||
|
{
|
||||||
|
url: url,
|
||||||
|
label: tooltip[0],
|
||||||
|
menu: m,
|
||||||
|
type: tooltip[1],
|
||||||
|
lines: pin.list[0].paths
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
nCoords++;
|
||||||
|
}
|
||||||
|
if (nCoords > 0) {
|
||||||
|
var url = (g_types[group[p][0].type] && group[p][0].id ? '?' + g_types[group[p][0].type] + '=' + group[p][0].id : '');
|
||||||
|
legend[submenu.length+1] = [p, url];
|
||||||
|
entry.push(p + sprintf(LANG.qty, nPins));
|
||||||
|
entry.push(this.showStuff.bind(this, coords, [i, i2], legend));
|
||||||
|
submenu.push(entry);
|
||||||
|
for (var l in coords) {
|
||||||
|
if (allCoords[l]) {
|
||||||
|
allCoords[l] = allCoords[l].concat(coords[l]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allCoords[l] = coords[l];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allLegend[submenu.length] = [p, url];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (submenu.length > 0) {
|
||||||
|
submenu.sort(cmpFunc);
|
||||||
|
var entry = [i, LANG.som[i], this.showStuff.bind(this, allCoords, [i], allLegend), submenu];
|
||||||
|
this._menu.push(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (this.data[i].length == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hasPaths = false;
|
||||||
|
for (var n = 0, len = this.data[i].length; n < len; ++n) {
|
||||||
|
if (this.data[i][n].paths) {
|
||||||
|
hasPaths = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var entry = [i];
|
||||||
|
var coords = {};
|
||||||
|
var hordeCoords = {}, hordeDailyCoords = {};
|
||||||
|
var allianceCoords = {}, allianceDailyCoords = {};
|
||||||
|
var legend = {};
|
||||||
|
var hordeLegend = {};
|
||||||
|
var allianceLegend = {};
|
||||||
|
var combined = ShowOnMap.combinePins(this.data[i], false, hasPaths);
|
||||||
|
var nPins = combined[1];
|
||||||
|
var nCoords = 0, nHordeCoords = 0, nHordeDailyCoords = 0, nAllianceCoords = 0, nAllianceDailyCoords = 0;
|
||||||
|
|
||||||
|
var processPins = function(id, pins) {
|
||||||
|
for (var n = 0; n < pins.length; ++n) {
|
||||||
|
var pin = pins[n];
|
||||||
|
var idx = id;
|
||||||
|
pin.list.key = i;
|
||||||
|
var tooltip = ShowOnMap.buildTooltip(pin.list, (id == 'hordedailyquests' || id == 'alliancedailyquests') ? true : false);
|
||||||
|
var url = tooltip[2];
|
||||||
|
var m = null;
|
||||||
|
if (url == 'javascript:;') {
|
||||||
|
m = tooltip[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pin.list.length == 1) {
|
||||||
|
url = (g_types[pin.list[0].type] && pin.list[0].id ? '?' + g_types[pin.list[0].type] + '=' + pin.list[0].id : '');
|
||||||
|
}
|
||||||
|
var coord = [
|
||||||
|
pin.coord[0],
|
||||||
|
pin.coord[1],
|
||||||
|
{
|
||||||
|
url: url,
|
||||||
|
label: tooltip[0],
|
||||||
|
menu: m,
|
||||||
|
type: tooltip[1],
|
||||||
|
lines: pin.list[0].paths
|
||||||
|
}
|
||||||
|
];
|
||||||
|
if (coords[pin.level] == undefined) {
|
||||||
|
coords[pin.level] = [];
|
||||||
|
hordeCoords[pin.level] = [];
|
||||||
|
hordeDailyCoords[pin.level] = [];
|
||||||
|
allianceCoords[pin.level] = [];
|
||||||
|
allianceDailyCoords[pin.level] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx != 'rare' && idx != 'spirithealer' && idx != 'book' && idx != 'forge' && idx != 'anvil' && idx != 'hordequests' && idx != 'alliancequests' && idx != 'hordedailyquests' && idx != 'alliancedailyquests' && idx != 'boss') {
|
||||||
|
if (tooltip[1] == 2 || tooltip[1] == 0) {
|
||||||
|
if (tooltip[1] == 2) {
|
||||||
|
hordeLegend[2] = [LANG.som_legend_horde, null];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hordeLegend[0] = [LANG.som_legend_neutral, null];
|
||||||
|
}
|
||||||
|
hordeCoords[pin.level].push(coord);
|
||||||
|
nHordeCoords++;
|
||||||
|
}
|
||||||
|
if (tooltip[1] == 3 || tooltip[1] == 0) {
|
||||||
|
if (tooltip[1] == 3) {
|
||||||
|
allianceLegend[3] = [LANG.som_legend_alliance, null];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allianceLegend[0] = [LANG.som_legend_neutral, null];
|
||||||
|
}
|
||||||
|
allianceCoords[pin.level].push(coord);
|
||||||
|
nAllianceCoords++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (idx == 'hordequests') {
|
||||||
|
idx = 'quest';
|
||||||
|
if (tooltip[1] == 2) {
|
||||||
|
hordeLegend[2] = [LANG.som_legend_horde, null];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hordeLegend[0] = [LANG.som_legend_neutral, null];
|
||||||
|
}
|
||||||
|
hordeCoords[pin.level].push(coord);
|
||||||
|
nHordeCoords++;
|
||||||
|
}
|
||||||
|
else if (idx == 'hordedailyquests') {
|
||||||
|
idx = 'daily';
|
||||||
|
if (tooltip[1] == 2) {
|
||||||
|
hordeLegend[2] = [LANG.som_legend_horde, null];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hordeLegend[0] = [LANG.som_legend_neutral, null];
|
||||||
|
}
|
||||||
|
hordeDailyCoords[pin.level].push(coord);
|
||||||
|
nHordeDailyCoords++;
|
||||||
|
}
|
||||||
|
else if (idx == 'alliancequests') {
|
||||||
|
idx = 'quest';
|
||||||
|
if (tooltip[1] == 3) {
|
||||||
|
allianceLegend[3] = [LANG.som_legend_alliance, null];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allianceLegend[0] = [LANG.som_legend_neutral, null];
|
||||||
|
}
|
||||||
|
allianceCoords[pin.level].push(coord);
|
||||||
|
nAllianceCoords++;
|
||||||
|
}
|
||||||
|
else if (idx == 'alliancedailyquests') {
|
||||||
|
idx = 'daily';
|
||||||
|
if (tooltip[1] == 3) {
|
||||||
|
allianceLegend[3] = [LANG.som_legend_alliance, null];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allianceLegend[0] = [LANG.som_legend_neutral, null];
|
||||||
|
}
|
||||||
|
allianceDailyCoords[pin.level].push(coord);
|
||||||
|
nAllianceDailyCoords++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
coords[pin.level].push(coord);
|
||||||
|
nCoords++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return idx;
|
||||||
|
};
|
||||||
|
var idx = processPins(i, combined[0]);
|
||||||
|
if (i == 'alliancequests') {
|
||||||
|
var allianceDailyPins = ShowOnMap.combinePins(this.data[i], true);
|
||||||
|
if (allianceDailyPins[1] > 0) {
|
||||||
|
processPins('alliancedailyquests', allianceDailyPins[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (i == 'hordequests') {
|
||||||
|
var hordeDailyPins = ShowOnMap.combinePins(this.data[i], true);
|
||||||
|
if (hordeDailyPins[1] > 0) {
|
||||||
|
processPins('hordedailyquests', hordeDailyPins[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx == 'rare') {
|
||||||
|
nPins = this.data[idx].length;
|
||||||
|
}
|
||||||
|
else if (idx == 'forge' || idx == 'anvil') {
|
||||||
|
nPins = combined[0].length;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nCoords > 0) {
|
||||||
|
var entry = [idx, LANG.som[idx] + sprintf(LANG.qty, nPins), this.showStuff.bind(this, coords, [idx], legend)];
|
||||||
|
this._menu.push(entry);
|
||||||
|
}
|
||||||
|
if (nHordeCoords > 0) {
|
||||||
|
var entry = [idx, LANG.som[idx] + sprintf(LANG.qty, nHordeCoords), this.showStuff.bind(this, hordeCoords, ['horde', idx], hordeLegend), null];
|
||||||
|
if (idx == 'quest') {
|
||||||
|
entry.push({ tinyIcon: 'quest_start' });
|
||||||
|
|
||||||
|
if (nHordeDailyCoords > 0) {
|
||||||
|
hordeMenu.push(entry);
|
||||||
|
entry = ['daily', LANG.som.daily + sprintf(LANG.qty, nHordeDailyCoords), this.showStuff.bind(this, hordeDailyCoords, ['horde', 'daily'], hordeLegend), null, { tinyIcon: 'quest_start_daily' }];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hordeMenu.push(entry);
|
||||||
|
}
|
||||||
|
if (nAllianceCoords > 0) {
|
||||||
|
var entry = [idx, LANG.som[idx] + sprintf(LANG.qty, nAllianceCoords), this.showStuff.bind(this, allianceCoords, ['alliance', idx], allianceLegend), null];
|
||||||
|
if (idx == 'quest') {
|
||||||
|
entry.push({ tinyIcon: 'quest_start' });
|
||||||
|
|
||||||
|
if (nAllianceDailyCoords > 0) {
|
||||||
|
allianceMenu.push(entry);
|
||||||
|
entry = ['daily', LANG.som.daily + sprintf(LANG.qty, nAllianceDailyCoords), this.showStuff.bind(this, allianceDailyCoords, ['alliance', 'daily'], allianceLegend), null, { tinyIcon: 'quest_start_daily' }];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allianceMenu.push(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allianceMenu.sort(cmpFunc);
|
||||||
|
hordeMenu.sort(cmpFunc);
|
||||||
|
this._menu.sort(cmpFunc);
|
||||||
|
|
||||||
|
if (hordeMenu.length > 0) {
|
||||||
|
this._menu.unshift(['horde', LANG.som.horde, '', hordeMenu, { tinyIcon: 'side_horde' }]);
|
||||||
|
}
|
||||||
|
if (allianceMenu.length > 0) {
|
||||||
|
this._menu.unshift(['alliance', LANG.som.alliance, '', allianceMenu, { tinyIcon: 'side_alliance' }]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var nothing = [-1, LANG.som_nothing, this.showStuff.bind(this, [], [-1], {})];
|
||||||
|
nothing.checked = true;
|
||||||
|
this._menu.push(nothing);
|
||||||
|
|
||||||
|
var redButton = RedButton.create(LANG.showonmap, true);
|
||||||
|
redButton.className += ' mapper-som-button';
|
||||||
|
// Menu.add(redButton, this._menu, { showAtCursor: true });
|
||||||
|
redButton.menu = this._menu;
|
||||||
|
redButton.onclick = function() {
|
||||||
|
(Menu.show.bind(this))();
|
||||||
|
Tooltip.hide();
|
||||||
|
this.onmouseout = function() {
|
||||||
|
Menu.hide();
|
||||||
|
this.onmouseout = Tooltip.hide();
|
||||||
|
}.bind(this);
|
||||||
|
sp();
|
||||||
|
return false;
|
||||||
|
}.bind(redButton);
|
||||||
|
// replace end
|
||||||
|
ae(d, redButton);
|
||||||
|
|
||||||
|
var clear;
|
||||||
|
if (!this._legend) {
|
||||||
|
this._legend = ce('div');
|
||||||
|
this._legend.className = 'mapper-legend';
|
||||||
|
this._legend.style.display = 'none';
|
||||||
|
|
||||||
|
var d2 = ce('div');
|
||||||
|
d2.className = 'mapper-legend-container';
|
||||||
|
|
||||||
|
this._legendLabel = ce('b')
|
||||||
|
ae(this._legendLabel, ct(LANG.som_legend));
|
||||||
|
ae(d2, this._legendLabel);
|
||||||
|
|
||||||
|
this._legendContents = ce('div');
|
||||||
|
this._legendContents.style.cssFloat = 'right';
|
||||||
|
ae(d2, this._legendContents);
|
||||||
|
|
||||||
|
var clear = ce('div');
|
||||||
|
clear.style.clear = 'right';
|
||||||
|
ae(d2, clear);
|
||||||
|
|
||||||
|
ae(this._legend, d2);
|
||||||
|
}
|
||||||
|
ae(d, this._legend);
|
||||||
|
|
||||||
|
var clear = ce('div');
|
||||||
|
clear.style.clear = 'left';
|
||||||
|
ae(d, clear);
|
||||||
|
|
||||||
|
var components = [];
|
||||||
|
var hash = g_getHash();
|
||||||
|
if (hash.indexOf('#show:') != -1) {
|
||||||
|
components = hash.split('.');
|
||||||
|
}
|
||||||
|
else if (this.data.instance) {
|
||||||
|
components.push('#show:boss');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (components.length > 0) {
|
||||||
|
if (components.length == 2 && components[1] == 'map') {
|
||||||
|
this.expanded = true;
|
||||||
|
this.mapper.toggleZoom();
|
||||||
|
}
|
||||||
|
|
||||||
|
var path = components[0].split(':');
|
||||||
|
if (path.length < 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var menu = this._menu;
|
||||||
|
for (var n = 1; n < path.length; ++n) {
|
||||||
|
var maxToRecurse = path.length - 1;
|
||||||
|
for (var p = 0; p < menu.length; ++p) {
|
||||||
|
if (menu[p][0] == path[n]) {
|
||||||
|
if (menu[p][3] && n < maxToRecurse) {
|
||||||
|
menu = menu[p][3];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
menu = menu[p];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (menu && menu[2] && menu[2].constructor && menu[2].call && menu[2].apply) { // sarjuuk: check if menu[2] is function
|
||||||
|
menu[2]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.prototype.setLegend = function(info) {
|
||||||
|
ee(this._legendContents);
|
||||||
|
|
||||||
|
var div = ce('div');
|
||||||
|
var count = 0;
|
||||||
|
for (var i in info) {
|
||||||
|
var sp = ce('span');
|
||||||
|
sp.className = 'mapper-pin mapper-pin-' + i + ' mapper-legend-pin';
|
||||||
|
|
||||||
|
if (info[i][1]) {
|
||||||
|
var a = ce('a');
|
||||||
|
a.href = info[i][1];
|
||||||
|
ae(a, ct(info[i][0]));
|
||||||
|
ae(sp, a);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sp.innerText = info[i][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
ae(div, sp);
|
||||||
|
if ((++count) % 4 == 0) {
|
||||||
|
ae(div, ce('br'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ae(this._legendContents, div);
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.prototype.showStuff = function(coords, path, legendInfo) {
|
||||||
|
this.mapper.update({zone: g_pageInfo.id, coords: coords, preservelevel: true});
|
||||||
|
this.setLegend(legendInfo);
|
||||||
|
this.checkMenu(path);
|
||||||
|
|
||||||
|
if (path.length == 1 && path[0] == -1) {
|
||||||
|
this.pound = '';
|
||||||
|
location.replace('#.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.pound = '#show:' + path.join(':');
|
||||||
|
if (this.pound != '#show:boss') {
|
||||||
|
location.replace(this.pound + (this.expanded ? '.map' : ''));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.prototype.clearChecks = function(menu) {
|
||||||
|
for (var i = 0; i < menu.length; ++i) {
|
||||||
|
menu[i].checked = false;
|
||||||
|
if (menu[i][3] && menu[i][3].length > 0) {
|
||||||
|
this.clearChecks(menu[i][3]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._legend.style.display = 'none';
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.prototype.checkMenu = function(path) {
|
||||||
|
this.clearChecks(this._menu);
|
||||||
|
if (path[0] != -1) {
|
||||||
|
this._legend.style.display = 'block';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this._legend.style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
var menu = this._menu;
|
||||||
|
var label = [];
|
||||||
|
for (var i = 0; i < path.length; ++i) {
|
||||||
|
for (var j = 0; j < menu.length; ++j) {
|
||||||
|
if (menu[j][0] == path[i]) {
|
||||||
|
menu[j].checked = true;
|
||||||
|
label.push([menu[j][0], menu[j][1]]);
|
||||||
|
menu = menu[j][3];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var maxLabel = label.length - 1;
|
||||||
|
var str = '';
|
||||||
|
var singlePinOptions = { 'rare': true, 'herb': true, 'vein': true };
|
||||||
|
for (var i = 0; i < label.length; ++i) {
|
||||||
|
if (i > 0 && singlePinOptions[label[0][0]]) {
|
||||||
|
/* unsure, kept for reference, replacement below
|
||||||
|
var span = $('span', this._legendContents);
|
||||||
|
span.removeClass('mapper-legend-pin');
|
||||||
|
span.append($('<b/>', { text: ' ' + label[i][1].substr(label[i][1].lastIndexOf('(')) }));
|
||||||
|
*/
|
||||||
|
var span = gE(this._legendContents[0], 'span')[0];
|
||||||
|
span.className.replace(/\mapper-legend-pin\b/,'');
|
||||||
|
var b = ce('b');
|
||||||
|
b.innerText = ' ' + label[i][1].substr(label[i][1].lastIndexOf('('));
|
||||||
|
ae(span, b);
|
||||||
|
// replace end
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (i == maxLabel) {
|
||||||
|
str += '<span>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
str += '<span class="breadcrumb-arrow">';
|
||||||
|
}
|
||||||
|
str += label[i][1] + '</span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._legendLabel.innerHtml = str;
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.combinePins = function(pins, dailyOnly, hasPaths) {
|
||||||
|
var combined = {};
|
||||||
|
var coord = null, tmpCoord = null;
|
||||||
|
var x, y;
|
||||||
|
var nPins = 0;
|
||||||
|
|
||||||
|
var getCoord = function(coord, tight) {
|
||||||
|
var x = Math.floor(coord[0]);
|
||||||
|
var y = Math.floor(coord[1]);
|
||||||
|
if (!tight) {
|
||||||
|
if (x % 2 == 1) {
|
||||||
|
x += 1;
|
||||||
|
}
|
||||||
|
if (y % 2 == 1) {
|
||||||
|
y += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (combined[x] === undefined) {
|
||||||
|
combined[x] = {};
|
||||||
|
}
|
||||||
|
if (combined[x][y] === undefined) {
|
||||||
|
combined[x][y] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [x, y];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var p = 0; p < pins.length; ++p) {
|
||||||
|
var pin = pins[p];
|
||||||
|
if (dailyOnly) {
|
||||||
|
if (!pin.quests) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var noDaily = true;
|
||||||
|
for (var n = 0; n < pin.quests.length; ++n) {
|
||||||
|
if (pin.quests[n].daily) {
|
||||||
|
noDaily = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (noDaily) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (hasPaths) {
|
||||||
|
// Don't combine pins that have paths
|
||||||
|
coord = getCoord([pin.id, 0], true);
|
||||||
|
x = coord[0]; y = coord[1];
|
||||||
|
var newPin = dO(pin);
|
||||||
|
newPin.coord = pin.coords[0];
|
||||||
|
|
||||||
|
combined[x][y].push(newPin);
|
||||||
|
nPins++;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pin.point == 'start' || pin.point == 'end') {
|
||||||
|
coord = getCoord(pin.coord);
|
||||||
|
x = coord[0]; y = coord[1];
|
||||||
|
if (combined[x][y].length > 3) {
|
||||||
|
var temp = combined[x][y];
|
||||||
|
combined[x][y] = [];
|
||||||
|
for (var i = 0; i < temp.length; ++i) {
|
||||||
|
tmpCoord = getCoord(temp[i].coord, true);
|
||||||
|
combined[tmpCoord[0]][tmpCoord[1]].push(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
combined[x][y].push(pin);
|
||||||
|
nPins++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (var c = 0; c < pin.coords.length; ++c) {
|
||||||
|
coord = getCoord(pin.coords[c]);
|
||||||
|
x = coord[0]; y = coord[1];
|
||||||
|
var newPin = dO(pin);
|
||||||
|
newPin.coord = pin.coords[c];
|
||||||
|
|
||||||
|
if (combined[x][y].length > 3) {
|
||||||
|
var temp = combined[x][y];
|
||||||
|
combined[x][y] = [];
|
||||||
|
for (var i = 0; i < temp.length; ++i) {
|
||||||
|
tmpCoord = getCoord(temp[i].coord, true);
|
||||||
|
combined[tmpCoord[0]][tmpCoord[1]].push(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
combined[x][y].push(newPin);
|
||||||
|
nPins++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var complete = [];
|
||||||
|
for (x in combined) {
|
||||||
|
for (y in combined[x]) {
|
||||||
|
complete.push({
|
||||||
|
coord: [combined[x][y][0].coord[0], combined[x][y][0].coord[1]],
|
||||||
|
level: combined[x][y][0].level,
|
||||||
|
list: combined[x][y]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [complete, nPins];
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowOnMap.buildTooltip = function(list, dailyOnly) {
|
||||||
|
var str = '';
|
||||||
|
var url = '';
|
||||||
|
var menu = [];
|
||||||
|
var pinType = -1;
|
||||||
|
var uniques = {};
|
||||||
|
var nUniques = 0;
|
||||||
|
var pointTypes = {};
|
||||||
|
var objType = 1;
|
||||||
|
|
||||||
|
for (var n = 0; n < list.length; ++n) {
|
||||||
|
var obj = list[n];
|
||||||
|
url = (g_types[obj.type] && obj.id ? '?' + g_types[obj.type] + '=' + obj.id : '');
|
||||||
|
var key = url + obj.item;
|
||||||
|
var pointKey = url + obj.point;
|
||||||
|
if (!uniques[key]) {
|
||||||
|
uniques[key] = {
|
||||||
|
url: url,
|
||||||
|
obj: obj,
|
||||||
|
coords: [obj.coord],
|
||||||
|
all: [obj]
|
||||||
|
};
|
||||||
|
nUniques++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!pointTypes[pointKey]) {
|
||||||
|
uniques[key].all.push(obj);
|
||||||
|
}
|
||||||
|
uniques[key].coords.push(obj.coord);
|
||||||
|
}
|
||||||
|
pointTypes[pointKey] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var n = 0;
|
||||||
|
for (var key in uniques) {
|
||||||
|
var url = uniques[key].url;
|
||||||
|
var all = uniques[key].all;
|
||||||
|
var obj = uniques[key].obj;
|
||||||
|
var coords = uniques[key].coords;
|
||||||
|
if (n > 0) {
|
||||||
|
str += '<br />';
|
||||||
|
}
|
||||||
|
menu.push([n++, obj.name, url]);
|
||||||
|
objType = obj.type;
|
||||||
|
|
||||||
|
if (!obj.point) {
|
||||||
|
if ((obj.reacthorde == 1 && obj.reactalliance < 1) || obj.side == 2) {
|
||||||
|
if (pinType == 2 || pinType == -1) {
|
||||||
|
pinType = 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pinType = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((obj.reactalliance == 1 && obj.reacthorde < 1) || obj.side == 1) {
|
||||||
|
if (pinType == 3 || pinType == -1) {
|
||||||
|
pinType = 3;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pinType = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pinType = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
str += '<b class="q' + (pinType == 2 ? ' icon-horde' : '') + (pinType == 3 ? ' icon-alliance' : '') + '">' + obj.name + '</b>';
|
||||||
|
if (coords.length > 0) {
|
||||||
|
str += ' (' + coords[0][0] + ', ' + coords[0][1] + ')<br />';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj.quests) {
|
||||||
|
if (obj.quests.length > 1) {
|
||||||
|
str += LANG.som_startsquestpl;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
str += LANG.som_startsquest;
|
||||||
|
}
|
||||||
|
str += '<div class="indent">';
|
||||||
|
for (var q = 0; q < obj.quests.length; ++q) {
|
||||||
|
var quest = obj.quests[q];
|
||||||
|
if (dailyOnly && !quest.daily) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
str += '<span class="q0">[' + quest.level + ']</span> ' + quest.name + ((quest.series && !quest.first) ? '<sup style="font-size: 8px">(*)</sup>' : '') + ((quest.category < 0 && g_quest_sorts[quest.category]) ? ' <i class="q0">' + g_quest_sorts[quest.category] + '</i>' : '') + '<br />';
|
||||||
|
}
|
||||||
|
str += '</div>';
|
||||||
|
}
|
||||||
|
else if (obj.description) {
|
||||||
|
str += obj.description + '<br />';
|
||||||
|
}
|
||||||
|
else if (obj.point) {
|
||||||
|
for (var n = 0; n < all.length; ++n) {
|
||||||
|
var o = all[n];
|
||||||
|
switch (o.point) {
|
||||||
|
case 'start':
|
||||||
|
str += LANG.mapper_startsquest + '<br />';
|
||||||
|
if (pinType == 'end') {
|
||||||
|
pinType = 'startend';
|
||||||
|
}
|
||||||
|
else if (pinType != 'startend') {
|
||||||
|
pinType = 'start';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'end':
|
||||||
|
str += LANG.mapper_endsquest + '<br />';
|
||||||
|
if (pinType == 'start') {
|
||||||
|
pinType = 'startend';
|
||||||
|
}
|
||||||
|
else if (pinType != 'startend') {
|
||||||
|
pinType = 'end';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'sourcestart':
|
||||||
|
str += LANG.mapper_sourcestart + '<br />';
|
||||||
|
str += '<div class="indent">' + o.item + '</div>';
|
||||||
|
if (pinType == 'end') {
|
||||||
|
pinType = 'startend';
|
||||||
|
}
|
||||||
|
else if (pinType != 'startend') {
|
||||||
|
pinType = 'start';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'sourceend':
|
||||||
|
str += LANG.mapper_sourceend + '<br />';
|
||||||
|
str += '<div class="indent">' + o.item + '</div>';
|
||||||
|
if (pinType == 'start') {
|
||||||
|
pinType = 'startend';
|
||||||
|
}
|
||||||
|
else if (pinType != 'startend') {
|
||||||
|
pinType = 'end';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'requirement':
|
||||||
|
str += LANG.mapper_requiredquest + '<br />';
|
||||||
|
if (pinType == -1) {
|
||||||
|
pinType = o.objective;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'sourcerequirement':
|
||||||
|
str += LANG.mapper_sourcereq + '<br />';
|
||||||
|
str += '<div class="indent">' + o.item + '</div>';
|
||||||
|
if (pinType == -1) {
|
||||||
|
pinType = o.objective;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
str += '<div class="q2">';
|
||||||
|
if (list.length == 1) {
|
||||||
|
str += (list[0].type == 1 ? LANG.som_viewnpc : (list[0].type == 2 ? LANG.som_viewobj : ''));
|
||||||
|
}
|
||||||
|
else if (nUniques == 1) {
|
||||||
|
str += (objType == 1 ? LANG.som_viewnpc : (objType == 2 ? LANG.som_viewobj : ''));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
str += '<br />' + LANG.som_view;
|
||||||
|
}
|
||||||
|
str += '</div>';
|
||||||
|
|
||||||
|
var ret = [];
|
||||||
|
ret.push(str);
|
||||||
|
ret.push(pinType);
|
||||||
|
if (list.length == 1 || nUniques == 1) {
|
||||||
|
ret.push(url);
|
||||||
|
ret.push(null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret.push('javascript:;');
|
||||||
|
ret.push(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// !sarjuuk: tempfix!
|
||||||
|
Markup._fixUrl = function(url)
|
||||||
|
{
|
||||||
|
if(!url) return '';
|
||||||
|
|
||||||
|
// Make local URLs absolute
|
||||||
|
var firstChar = url.charAt(0);
|
||||||
|
if(firstChar == '/' || firstChar == '?')
|
||||||
|
{
|
||||||
|
url = url.replace(/^[\/\?]+/, '');
|
||||||
|
|
||||||
|
url = '?' + url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
@@ -2329,16 +2329,26 @@ function g_isLeftClick(a) {
|
|||||||
a = $E(a);
|
a = $E(a);
|
||||||
return (a && a._button == 1)
|
return (a && a._button == 1)
|
||||||
}
|
}
|
||||||
function g_createOrRegex(c) {
|
|
||||||
var e = c.split(" "),
|
function g_createOrRegex(search, negativeGroup) {
|
||||||
d = "";
|
search = search.replace(/(\(|\)|\|\+|\*|\?|\$|\^)/g, '\\$1');
|
||||||
for (var b = 0, a = e.length; b < a; ++b) {
|
var
|
||||||
if (b > 0) {
|
parts = search.split(' '),
|
||||||
d += "|"
|
strRegex= '';
|
||||||
|
|
||||||
|
for (var j = 0, len = parts.length; j < len; ++j) {
|
||||||
|
if (j > 0) {
|
||||||
|
strRegex += '|';
|
||||||
}
|
}
|
||||||
d += e[b]
|
strRegex += parts[j];
|
||||||
}
|
}
|
||||||
return new RegExp("(" + d + ")", "gi")
|
|
||||||
|
// The additional group is necessary so we dont replace %s
|
||||||
|
return new RegExp((negativeGroup != null ? '(' + negativeGroup + ')?' : '') + '(' + strRegex + ')', 'gi');
|
||||||
|
}
|
||||||
|
|
||||||
|
function g_getHash() {
|
||||||
|
return '#' + decodeURIComponent(location.href.split('#')[1] || '');
|
||||||
}
|
}
|
||||||
|
|
||||||
DomContentLoaded.addEvent(function () {
|
DomContentLoaded.addEvent(function () {
|
||||||
@@ -7175,9 +7185,9 @@ Listview.funcBox = {
|
|||||||
p.value = b.response;
|
p.value = b.response;
|
||||||
p.rows = 3;
|
p.rows = 3;
|
||||||
p.style.height = "6em";
|
p.style.height = "6em";
|
||||||
h.append(B);
|
ae(h, B);
|
||||||
h.append(w);
|
ae(h, w);
|
||||||
h.append(p)
|
ae(h, p)
|
||||||
}
|
}
|
||||||
ae(m, h);
|
ae(m, h);
|
||||||
ae(m, ce('div'));
|
ae(m, ce('div'));
|
||||||
@@ -10138,205 +10148,217 @@ Listview.templates = {
|
|||||||
nItemsPerPage: -1,
|
nItemsPerPage: -1,
|
||||||
searchable: 1,
|
searchable: 1,
|
||||||
filtrable: 1,
|
filtrable: 1,
|
||||||
columns: [{
|
|
||||||
id: "name",
|
columns: [
|
||||||
|
{
|
||||||
|
id: 'name',
|
||||||
name: LANG.name,
|
name: LANG.name,
|
||||||
type: "text",
|
type: 'text',
|
||||||
align: "left",
|
align: 'left',
|
||||||
value: "name",
|
value: 'name',
|
||||||
compute: function(c, e) {
|
compute: function(zone, td) {
|
||||||
var b = ce("a");
|
var a = ce('a');
|
||||||
b.style.fontFamily = "Verdana, sans-serif";
|
a.style.fontFamily = 'Verdana, sans-serif';
|
||||||
b.href = this.template.getItemLink(c);
|
a.href = this.template.getItemLink(zone);
|
||||||
ae(b, ct(c.name));
|
ae(a, ct(zone.name));
|
||||||
if (c.expansion) {
|
if (zone.expansion) {
|
||||||
var d = ce("span");
|
var sp = ce('span');
|
||||||
d.className = (c.expansion == 1 ? "bc-icon": "wotlk-icon");
|
sp.className = g_GetExpansionClassName(zone.expansion);
|
||||||
ae(d, b);
|
ae(sp, a);
|
||||||
ae(e, d)
|
ae(td, sp);
|
||||||
} else {
|
}
|
||||||
ae(e, b)
|
else {
|
||||||
|
ae(td, a);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getVisibleText: function(a) {
|
getVisibleText: function(zone) {
|
||||||
var b = a.name;
|
var buff = zone.name + Listview.funcBox.getExpansionText(zone);
|
||||||
if (a.expansion == 1) {
|
|
||||||
b += " bc"
|
if (zone.instance == 5 || zone.instance == 8) {
|
||||||
} else {
|
buff += ' heroic';
|
||||||
if (a.expansion == 2) {
|
|
||||||
b += "wotlk wrath"
|
|
||||||
}
|
}
|
||||||
if (a.instance == 5 || a.instance == 8) {
|
|
||||||
b += " heroic"
|
return buff;
|
||||||
}
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "level",
|
id: 'level',
|
||||||
name: LANG.level,
|
name: LANG.level,
|
||||||
type: "range",
|
type: 'range',
|
||||||
width: "10%",
|
width: '10%',
|
||||||
getMinValue: function(a) {
|
getMinValue: function(zone) {
|
||||||
return a.minlevel
|
return zone.minlevel;
|
||||||
},
|
},
|
||||||
getMaxValue: function(a) {
|
getMaxValue: function(zone) {
|
||||||
return a.maxlevel
|
return zone.maxlevel;
|
||||||
},
|
},
|
||||||
compute: function(a, b) {
|
compute: function(zone, td) {
|
||||||
if (a.minlevel > 0 && a.maxlevel > 0) {
|
if (zone.minlevel > 0 && zone.maxlevel > 0) {
|
||||||
if (a.minlevel != a.maxlevel) {
|
if (zone.minlevel != zone.maxlevel) {
|
||||||
return a.minlevel + LANG.hyphen + a.maxlevel
|
return zone.minlevel + LANG.hyphen + zone.maxlevel;
|
||||||
} else {
|
}
|
||||||
return a.minlevel
|
else {
|
||||||
|
return zone.minlevel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sortFunc: function(d, c, e) {
|
sortFunc: function(a, b, col) {
|
||||||
if (e > 0) {
|
if (col > 0) {
|
||||||
return strcmp(d.minlevel, c.minlevel) || strcmp(d.maxlevel, c.maxlevel)
|
return strcmp(a.minlevel, b.minlevel) || strcmp(a.maxlevel, b.maxlevel);
|
||||||
} else {
|
}
|
||||||
return strcmp(d.maxlevel, c.maxlevel) || strcmp(d.minlevel, c.minlevel)
|
else {
|
||||||
|
return strcmp(a.maxlevel, b.maxlevel) || strcmp(a.minlevel, b.minlevel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "players",
|
id: 'players',
|
||||||
name: LANG.players,
|
name: LANG.players,
|
||||||
type: "text",
|
type: 'text',
|
||||||
hidden: true,
|
hidden: true,
|
||||||
compute: function(a, d) {
|
compute: function(zone, td) {
|
||||||
if (a.instance > 0) {
|
if (zone.instance > 0) {
|
||||||
var b = ce("span");
|
var sp = ce('span');
|
||||||
if (a.nplayers == -2) {
|
|
||||||
a.nplayers = "10/25"
|
if (zone.nplayers == -2) {
|
||||||
|
zone.nplayers = '10/25';
|
||||||
}
|
}
|
||||||
var c = "";
|
|
||||||
if (a.nplayers) {
|
var buff = '';
|
||||||
if (a.instance == 4) {
|
if (zone.nplayers) {
|
||||||
c += sprintf(LANG.lvzone_xvx, a.nplayers, a.nplayers)
|
if (zone.instance == 4) {
|
||||||
} else {
|
buff += sprintf(LANG.lvzone_xvx, zone.nplayers, zone.nplayers);
|
||||||
c += sprintf(LANG.lvzone_xman, a.nplayers)
|
}
|
||||||
|
else {
|
||||||
|
buff += sprintf(LANG.lvzone_xman, zone.nplayers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ae(b, ct(c));
|
|
||||||
ae(d, b)
|
ae(sp, ct(buff));
|
||||||
|
ae(td, sp);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getVisibleText: function(a) {
|
getVisibleText: function(zone) {
|
||||||
if (a.instance > 0) {
|
if (zone.instance > 0) {
|
||||||
if (a.nplayers == -2) {
|
if (zone.nplayers == -2) {
|
||||||
a.nplayers = "10/25"
|
zone.nplayers = '10/25';
|
||||||
}
|
}
|
||||||
var b = "";
|
|
||||||
if (a.nplayers && ((a.instance != 2 && a.instance != 5) || a.nplayers > 5)) {
|
var buff = '';
|
||||||
if (a.instance == 4) {
|
if (zone.nplayers && ((zone.instance != 2 && zone.instance != 5) || zone.nplayers > 5)) {
|
||||||
b += sprintf(LANG.lvzone_xvx, a.nplayers, a.nplayers)
|
if (zone.instance == 4) {
|
||||||
} else {
|
buff += sprintf(LANG.lvzone_xvx, zone.nplayers, zone.nplayers);
|
||||||
b += sprintf(LANG.lvzone_xman, a.nplayers)
|
}
|
||||||
|
else {
|
||||||
|
buff += sprintf(LANG.lvzone_xman, zone.nplayers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return b
|
return buff;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sortFunc: function(d, c, e) {
|
sortFunc: function(a, b, col) {
|
||||||
return strcmp(d.nplayers, c.nplayers)
|
return strcmp(a.nplayers, b.nplayers);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "territory",
|
id: 'territory',
|
||||||
name: LANG.territory,
|
name: LANG.territory,
|
||||||
type: "text",
|
type: 'text',
|
||||||
width: "13%",
|
width: '13%',
|
||||||
compute: function(a, c) {
|
compute: function(zone, td) {
|
||||||
var b = ce("span");
|
var sp = ce('span');
|
||||||
switch (a.territory) {
|
switch (zone.territory) {
|
||||||
case 0:
|
case 0:
|
||||||
b.className = "alliance-icon";
|
sp.className = 'alliance-icon';
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
b.className = "horde-icon";
|
sp.className = 'horde-icon';
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
b.className = "ffapvp-icon";
|
sp.className = 'ffapvp-icon';
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
ae(b, ct(g_zone_territories[a.territory]));
|
|
||||||
ae(c, b)
|
ae(sp, ct(g_zone_territories[zone.territory]));
|
||||||
|
ae(td, sp);
|
||||||
},
|
},
|
||||||
getVisibleText: function(a) {
|
getVisibleText: function(zone) {
|
||||||
return g_zone_territories[a.territory]
|
return g_zone_territories[zone.territory];
|
||||||
},
|
},
|
||||||
sortFunc: function(d, c, e) {
|
sortFunc: function(a, b, col) {
|
||||||
return strcmp(g_zone_territories[d.territory], g_zone_territories[c.territory])
|
return strcmp(g_zone_territories[a.territory], g_zone_territories[b.territory]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "instancetype",
|
id: 'instancetype',
|
||||||
name: LANG.instancetype,
|
name: LANG.instancetype,
|
||||||
type: "text",
|
type: 'text',
|
||||||
compute: function(a, d) {
|
compute: function(zone, td) {
|
||||||
if (a.instance > 0) {
|
if (zone.instance > 0) {
|
||||||
var b = ce("span");
|
var sp = ce('span');
|
||||||
if ((a.instance >= 1 && a.instance <= 5) || a.instance == 7 || a.instance == 8) {
|
if ((zone.instance >= 1 && zone.instance <= 5) || zone.instance == 7 || zone.instance == 8) {
|
||||||
b.className = "instance-icon" + a.instance
|
sp.className = 'instance-icon' + zone.instance;
|
||||||
}
|
}
|
||||||
if (a.nplayers == -2) {
|
|
||||||
a.nplayers = "10/25"
|
var buff = g_zone_instancetypes[zone.instance];
|
||||||
|
|
||||||
|
if (zone.heroicLevel) {
|
||||||
|
var skull = ce('span');
|
||||||
|
skull.className = 'heroic-icon';
|
||||||
|
g_addTooltip(skull, LANG.tooltip_heroicmodeavailable + LANG.qty.replace('$1', zone.heroicLevel));
|
||||||
|
ae(td, skull);
|
||||||
}
|
}
|
||||||
var c = g_zone_instancetypes[a.instance];
|
|
||||||
if (a.heroicLevel) {
|
ae(sp, ct(buff));
|
||||||
var f = ce("span");
|
ae(td, sp);
|
||||||
f.className = "heroic-icon";
|
|
||||||
g_addTooltip(f, LANG.tooltip_heroicmodeavailable + LANG.qty.replace("$1", a.heroicLevel));
|
|
||||||
ae(e, f);
|
|
||||||
}
|
|
||||||
ae(b, ct(c));
|
|
||||||
ae(d, b)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getVisibleText: function(a) {
|
getVisibleText: function(zone) {
|
||||||
if (a.instance > 0) {
|
if (zone.instance > 0) {
|
||||||
var b = g_zone_instancetypes[a.instance];
|
var buff = g_zone_instancetypes[zone.instance];
|
||||||
if (a.nplayers && ((a.instance != 2 && a.instance != 5) || a.nplayers > 5)) {
|
|
||||||
if (a.instance == 4) {
|
if (zone.nplayers && ((zone.instance != 2 && zone.instance != 5) || zone.nplayers > 5)) {
|
||||||
b += " " + sprintf(LANG.lvzone_xvx, a.nplayers, a.nplayers)
|
if (zone.instance == 4) {
|
||||||
} else {
|
buff += ' ' + sprintf(LANG.lvzone_xvx, zone.nplayers, zone.nplayers);
|
||||||
b += " " + sprintf(LANG.lvzone_xman, a.nplayers)
|
}
|
||||||
|
else {
|
||||||
|
buff += ' ' + sprintf(LANG.lvzone_xman, zone.nplayers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (a.instance == 5 || a.instance == 8) {
|
if (zone.instance == 5 || zone.instance == 8) {
|
||||||
b += " heroic"
|
buff += ' heroic';
|
||||||
}
|
}
|
||||||
return b
|
|
||||||
|
return buff;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sortFunc: function(d, c, e) {
|
sortFunc: function(a, b, col) {
|
||||||
return strcmp(g_zone_instancetypes[d.instance], g_zone_instancetypes[c.instance]) || strcmp(d.instance, c.instance) || strcmp(d.nplayers, c.nplayers)
|
return strcmp(g_zone_instancetypes[a.instance], g_zone_instancetypes[b.instance]) || strcmp(a.instance, b.instance) || strcmp(a.nplayers, b.nplayers);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "category",
|
id: 'category',
|
||||||
name: LANG.category,
|
name: LANG.category,
|
||||||
type: "text",
|
type: 'text',
|
||||||
width: "15%",
|
width: '15%',
|
||||||
compute: function(c, d) {
|
compute: function(zone, td) {
|
||||||
d.className = "small q1";
|
td.className = 'small q1';
|
||||||
var b = ce("a");
|
var a = ce('a');
|
||||||
b.href = "?zones=" + c.category;
|
a.href = '?zones=' + zone.category;
|
||||||
ae(b, ct(g_zone_categories[c.category]));
|
ae(a, ct(g_zone_categories[zone.category]));
|
||||||
ae(d, b)
|
ae(td, a);
|
||||||
},
|
},
|
||||||
getVisibleText: function(a) {
|
getVisibleText: function(zone) {
|
||||||
return g_zone_categories[a.category]
|
return g_zone_categories[zone.category];
|
||||||
},
|
},
|
||||||
sortFunc: function(d, c, e) {
|
sortFunc: function(a, b, col) {
|
||||||
return strcmp(g_zone_categories[d.category], g_zone_categories[c.category])
|
return strcmp(g_zone_categories[a.category], g_zone_categories[b.category]);
|
||||||
}
|
}
|
||||||
}],
|
}
|
||||||
getItemLink: function(a) {
|
],
|
||||||
return "?zone=" + a.id
|
|
||||||
|
getItemLink: function(zone) {
|
||||||
|
return '?zone=' + zone.id;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -16655,6 +16677,46 @@ var ContactTool = new function() {
|
|||||||
DomContentLoaded.addEvent(this.checkPound);
|
DomContentLoaded.addEvent(this.checkPound);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function Line(x1, y1, x2, y2, type) {
|
||||||
|
var left = Math.min(x1, x2),
|
||||||
|
right = Math.max(x1, x2),
|
||||||
|
top = Math.min(y1, y2),
|
||||||
|
bottom = Math.max(y1, y2),
|
||||||
|
|
||||||
|
width = (right - left),
|
||||||
|
height = (bottom - top),
|
||||||
|
length = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)),
|
||||||
|
|
||||||
|
radian = Math.atan2(height, width),
|
||||||
|
sinTheta = Math.sin(radian),
|
||||||
|
cosTheta = Math.cos(radian);
|
||||||
|
|
||||||
|
var $line = ce('span');
|
||||||
|
$line.className = 'line';
|
||||||
|
$line.style.top = top.toFixed(2) + 'px';
|
||||||
|
$line.style.left = left.toFixed(2) + 'px';
|
||||||
|
$line.style.width = width.toFixed(2) + 'px';
|
||||||
|
$line.style.height = height.toFixed(2) + 'px';
|
||||||
|
|
||||||
|
var v = ce('var');
|
||||||
|
v.style.width = length.toFixed(2) + 'px';
|
||||||
|
v.style.OTransform = 'rotate(' + radian + 'rad)';
|
||||||
|
v.style.MozTransform = 'rotate(' + radian + 'rad)';
|
||||||
|
v.style.webkitTransform = 'rotate(' + radian + 'rad)';
|
||||||
|
v.style.filter = "progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=" + cosTheta + ', M12=' + (-1 * sinTheta) + ', M21=' + sinTheta + ', M22=' + cosTheta + ')';
|
||||||
|
ae($line, v);
|
||||||
|
|
||||||
|
if (!(x1 == left && y1 == top) && !(x2 == left && y2 == top)) {
|
||||||
|
$line.className += ' flipped';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type != null) {
|
||||||
|
$line.className += ' line-' + type;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $line;
|
||||||
|
}
|
||||||
|
|
||||||
var Links = new function() {
|
var Links = new function() {
|
||||||
var dialog = null;
|
var dialog = null;
|
||||||
var oldHash = null;
|
var oldHash = null;
|
||||||
|
|||||||
@@ -1916,33 +1916,39 @@ var g_zone_areas = {
|
|||||||
4723: ['Kolosseum der Kreuzfahrer','Die eisigen Tiefen'],
|
4723: ['Kolosseum der Kreuzfahrer','Die eisigen Tiefen'],
|
||||||
4812: ['Die untere Zitadelle','Das Schädelbollwerk','Dom des Todbringers','Hort der Frostkönigin','Der obere Bereich','Königliche Quartiere','Der Frostthron','Frostgram']
|
4812: ['Die untere Zitadelle','Das Schädelbollwerk','Dom des Todbringers','Hort der Frostkönigin','Der obere Bereich','Königliche Quartiere','Der Frostthron','Frostgram']
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_categories = {
|
var g_zone_categories = {
|
||||||
0:"Östliche Königreiche",
|
0: "Östliche Königreiche",
|
||||||
1:"Kalimdor",
|
1: "Kalimdor",
|
||||||
8:"Scherbenwelt",
|
2: "Dungeons",
|
||||||
10:"Nordend",
|
3: "Schlachtzüge",
|
||||||
2:"Dungeons",
|
4: "Unbenutzt",
|
||||||
3:"Schlachtzüge",
|
6: "Schlachtfelder",
|
||||||
6:"Schlachtfelder",
|
8: "Scherbenwelt",
|
||||||
9:"Arenen"
|
9: "Arenen",
|
||||||
|
10: "Nordend"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_instancetypes = {
|
var g_zone_instancetypes = {
|
||||||
1:"Durchgang",
|
1: "Durchgang",
|
||||||
2:"Dungeon",
|
2: "Dungeon",
|
||||||
3:"Schlachtzug",
|
3: "Schlachtzug", // Classic
|
||||||
4:"Schlachtfeld",
|
4: "Schlachtfeld",
|
||||||
5:"Dungeon",
|
5: "Dungeon", // Heroic
|
||||||
6:"Arena",
|
6: "Arena",
|
||||||
7:"Schlachtzug",
|
7: "Schlachtzug", // 10-25
|
||||||
8:"Schlachtzug"
|
8: "Schlachtzug" // 10-25 Heroic
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_territories = {
|
var g_zone_territories = {
|
||||||
0:"Allianz",
|
0: "Allianz",
|
||||||
1:"Horde",
|
1: "Horde",
|
||||||
2:"Umkämpft",
|
2: "Umkämpft",
|
||||||
3:"Sicheres Gebiet",
|
3: "Sicheres Gebiet",
|
||||||
4:"PvP"
|
4: "PvP",
|
||||||
|
5: "Welt-PvP"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_faction_categories = {
|
var g_faction_categories = {
|
||||||
"0":"Anderes",
|
"0":"Anderes",
|
||||||
"469":"Allianz",
|
"469":"Allianz",
|
||||||
|
|||||||
@@ -1963,33 +1963,39 @@ var g_zone_areas = {
|
|||||||
4723: ['Crusaders\' Coliseum','The Icy Depths'],
|
4723: ['Crusaders\' Coliseum','The Icy Depths'],
|
||||||
4812: ['The Lower Citadel','The Rampart of Skulls','Deathbringer\'s Rise','The Frost Queen\'s Lair','The Upper Reaches','Royal Quarters','The Frozen Throne','Frostmourne']
|
4812: ['The Lower Citadel','The Rampart of Skulls','Deathbringer\'s Rise','The Frost Queen\'s Lair','The Upper Reaches','Royal Quarters','The Frozen Throne','Frostmourne']
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_categories = {
|
var g_zone_categories = {
|
||||||
0:"Eastern Kingdoms",
|
0: "Eastern Kingdoms",
|
||||||
1:"Kalimdor",
|
1: "Kalimdor",
|
||||||
8:"Outland",
|
2: "Dungeons",
|
||||||
10:"Northrend",
|
3: "Raids",
|
||||||
2:"Dungeons",
|
4: "Unused",
|
||||||
3:"Raids",
|
6: "Battlegrounds",
|
||||||
6:"Battlegrounds",
|
8: "Outland",
|
||||||
9:"Arenas"
|
9: "Arenas",
|
||||||
|
10: "Northrend"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_instancetypes = {
|
var g_zone_instancetypes = {
|
||||||
1:"Transit",
|
1: "Transit",
|
||||||
2:"Dungeon",
|
2: "Dungeon",
|
||||||
3:"Raid",
|
3: "Raid", // Classic
|
||||||
4:"Battleground",
|
4: "Battleground",
|
||||||
5:"Dungeon",
|
5: "Dungeon", // Heroic
|
||||||
6:"Arena",
|
6: "Arena",
|
||||||
7:"Raid",
|
7: "Raid", // 10-25
|
||||||
8:"Raid"
|
8: "Raid" // 10-25 Heroic
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_territories = {
|
var g_zone_territories = {
|
||||||
0:"Alliance",
|
0: "Alliance",
|
||||||
1:"Horde",
|
1: "Horde",
|
||||||
2:"Contested",
|
2: "Contested",
|
||||||
3:"Sanctuary",
|
3: "Sanctuary",
|
||||||
4:"PvP"
|
4: "PvP",
|
||||||
|
5: "World PvP"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_faction_categories = {
|
var g_faction_categories = {
|
||||||
"0":"Other",
|
"0":"Other",
|
||||||
"469":"Alliance",
|
"469":"Alliance",
|
||||||
|
|||||||
@@ -1916,33 +1916,39 @@ var g_zone_areas = {
|
|||||||
4723: ['El Coliseo Argenta','Las profundidades heladas'],
|
4723: ['El Coliseo Argenta','Las profundidades heladas'],
|
||||||
4812: ['La ciudadela inferior','La Muralla de las Calaveras','Ascenso del Libramorte','La guarida de la Reina de Escarcha','Los Confines superiores','Cuarteles Reales','El Trono Helado','Agonía de Escarcha']
|
4812: ['La ciudadela inferior','La Muralla de las Calaveras','Ascenso del Libramorte','La guarida de la Reina de Escarcha','Los Confines superiores','Cuarteles Reales','El Trono Helado','Agonía de Escarcha']
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_categories = {
|
var g_zone_categories = {
|
||||||
0:"Reinos del Este",
|
0: "Reinos del Este",
|
||||||
1:"Kalimdor",
|
1: "Kalimdor",
|
||||||
8:"Terrallende",
|
2: "Mazmorras",
|
||||||
10:"Rasganorte",
|
3: "Bandas",
|
||||||
2:"Mazmorras",
|
4: "No las uso",
|
||||||
3:"Bandas",
|
6: "Campos de batalla",
|
||||||
6:"Campos de batalla",
|
8: "Terrallende",
|
||||||
9:"Arenas"
|
9: "Arenas",
|
||||||
|
10: "Rasganorte"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_instancetypes = {
|
var g_zone_instancetypes = {
|
||||||
1:"Tránsito",
|
1: "Tránsito",
|
||||||
2:"Mazmorra",
|
2: "Mazmorra",
|
||||||
3:"Banda",
|
3: "Banda", // Classic
|
||||||
4:"Campo de batalla",
|
4: "Campo de batalla",
|
||||||
5:"Mazmorra",
|
5: "Mazmorra", // Heroic
|
||||||
6:"Arena",
|
6: "Arena",
|
||||||
7:"Banda",
|
7: "Banda", // 10-25
|
||||||
8:"Banda"
|
8: "Banda" // 10-25 Heroic
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_territories = {
|
var g_zone_territories = {
|
||||||
0:"Alianza",
|
0: "Alianza",
|
||||||
1:"Horda",
|
1: "Horda",
|
||||||
2:"En disputa",
|
2: "En disputa",
|
||||||
3:"Santuario",
|
3: "Santuario",
|
||||||
4:"JcJ"
|
4: "JcJ",
|
||||||
|
5: "JcJ abierto"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_faction_categories = {
|
var g_faction_categories = {
|
||||||
"0":"Otros",
|
"0":"Otros",
|
||||||
"469":"Alianza",
|
"469":"Alianza",
|
||||||
|
|||||||
@@ -1903,33 +1903,39 @@ var g_zone_areas = {
|
|||||||
4723: ['L\'colisée d\'Argent','Les Profondeurs Glacées'],
|
4723: ['L\'colisée d\'Argent','Les Profondeurs Glacées'],
|
||||||
4812: ['La Citadelle Inférieure','Le Rempart des Cranes','Ascension de Porte-mort','Le repaire de la reine du Givre','Les étages supérieurs','Quartiers Royaux','Le Trône Gelé','Deuillegivre']
|
4812: ['La Citadelle Inférieure','Le Rempart des Cranes','Ascension de Porte-mort','Le repaire de la reine du Givre','Les étages supérieurs','Quartiers Royaux','Le Trône Gelé','Deuillegivre']
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_categories = {
|
var g_zone_categories = {
|
||||||
0:"Royaumes de l'est",
|
0: "Royaumes de l'est",
|
||||||
1:"Kalimdor",
|
1: "Kalimdor",
|
||||||
8:"Outreterre",
|
2: "Donjons",
|
||||||
10:"Norfendre",
|
3: "Raids",
|
||||||
2:"Donjons",
|
4: "Inutilisées",
|
||||||
3:"Raids",
|
6: "Champs de bataille",
|
||||||
6:"Champs de bataille",
|
8: "Outreterre",
|
||||||
9:"Arènes"
|
9: "Arènes",
|
||||||
|
10: "Norfendre"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_instancetypes = {
|
var g_zone_instancetypes = {
|
||||||
1:"Transit",
|
1: "Transit",
|
||||||
2:"Donjon",
|
2: "Donjon",
|
||||||
3:"Raid",
|
3: "Raid", // Classic
|
||||||
4:"Champ de bataille",
|
4: "Champ de bataille",
|
||||||
5:"Donjon",
|
5: "Donjon", // Heroic
|
||||||
6:"Arène",
|
6: "Arène",
|
||||||
7:"Raid",
|
7: "Raid", // 10-25
|
||||||
8:"Raid"
|
8: "Raid" // 10-25 Heroic
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_territories = {
|
var g_zone_territories = {
|
||||||
0:"Alliance",
|
0: "Alliance",
|
||||||
1:"Horde",
|
1: "Horde",
|
||||||
2:"Contesté",
|
2: "Contesté",
|
||||||
3:"Sanctuaire",
|
3: "Sanctuaire",
|
||||||
4:"JcJ"
|
4: "JcJ",
|
||||||
|
5: "JcJ Global"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_faction_categories = {
|
var g_faction_categories = {
|
||||||
"0":"Autre",
|
"0":"Autre",
|
||||||
"469":"Alliance",
|
"469":"Alliance",
|
||||||
|
|||||||
@@ -1903,33 +1903,39 @@ var g_zone_areas = {
|
|||||||
4723: ['Колизей Серебряного Авангарда','Ледяные глубины'],
|
4723: ['Колизей Серебряного Авангарда','Ледяные глубины'],
|
||||||
4812: ['Нижний ярус','Черепной вал','Подъем Смертоносного','Логово Королевы Льда','Верхний ярус','Королевские палаты','Ледяной Трон','Ледяная Скорбь']
|
4812: ['Нижний ярус','Черепной вал','Подъем Смертоносного','Логово Королевы Льда','Верхний ярус','Королевские палаты','Ледяной Трон','Ледяная Скорбь']
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_categories = {
|
var g_zone_categories = {
|
||||||
0:"Восточные королевства",
|
0: "Восточные королевства",
|
||||||
1:"Калимдор",
|
1: "Калимдор",
|
||||||
8:"Запределье",
|
2: "Подземелья",
|
||||||
10:"Нордскол",
|
3: "Рейды",
|
||||||
2:"Подземелья",
|
4: "Неактивно",
|
||||||
3:"Рейды",
|
6: "Поля боя",
|
||||||
6:"Поля боя",
|
8: "Запределье",
|
||||||
9:"Арены"
|
9: "Арены",
|
||||||
|
10: "Нордскол"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_instancetypes = {
|
var g_zone_instancetypes = {
|
||||||
1:"Транзит",
|
1: "Транзит",
|
||||||
2:"Подземелье",
|
2: "Подземелье",
|
||||||
3:"Рейд",
|
3: "Рейд", // Classic
|
||||||
4:"Поле боя",
|
4: "Поле боя",
|
||||||
5:"Подземелье",
|
5: "Подземелье", // Heroic
|
||||||
6:"Арена",
|
6: "Арена",
|
||||||
7:"Рейд",
|
7: "Рейд", // 10-25
|
||||||
8:"Рейд"
|
8: "Рейд" // 10-25 Heroic
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_zone_territories = {
|
var g_zone_territories = {
|
||||||
0:"Альянс",
|
0: "Альянс",
|
||||||
1:"Орда",
|
1: "Орда",
|
||||||
2:"Оспариваемая",
|
2: "Оспариваемая",
|
||||||
3:"Святилище",
|
3: "Святилище",
|
||||||
4:"PvP"
|
4: "PvP",
|
||||||
|
5: "Мировое PvP"
|
||||||
};
|
};
|
||||||
|
|
||||||
var g_faction_categories = {
|
var g_faction_categories = {
|
||||||
"0":"Другое",
|
"0":"Другое",
|
||||||
"980":"The Burning Crusade",
|
"980":"The Burning Crusade",
|
||||||
|
|||||||
Reference in New Issue
Block a user