{$lang.errNotFound}
-{$lang.links}
--
-
-
- - {$lang.goStart} --
-
-
- - {$lang.goForum} --
-
diff --git a/.htaccess b/.htaccess
index 3a5ed06c..753acd4f 100644
--- a/.htaccess
+++ b/.htaccess
@@ -22,7 +22,7 @@ AddDefaultCharset utf8
RewriteEngine on
# Mapper-Helper: If you cant provide maps for all locales, redirect the browser
- RewriteRule ^images/maps/(frfr|dede|eses|ruru)/(.*)$ images/maps/enus/$2 [NC]
+ RewriteRule ^static/images/wow/maps/(frfr|dede|eses|ruru)/(.*)$ static/images/wow/maps/enus/$2 [NC]
# accept flattened urls | NYI - need more work :x
RewriteRule ^([a-z0-9\-]+)$ ?$1 [NC] # /items => ?items
diff --git a/includes/defines.php b/includes/defines.php
index 70f91fd9..ebad03d9 100644
--- a/includes/defines.php
+++ b/includes/defines.php
@@ -362,6 +362,26 @@ define('NPC_FLAG_BATTLEMASTER', 0x00100000);
define('NPC_FLAG_AUCTIONEER', 0x00200000);
define('NPC_FLAG_STABLE_MASTER', 0x00400000);
+// quest
+define('QUEST_FLAG_STAY_ALIVE', 0x00001);
+define('QUEST_FLAG_PARTY_ACCEPT', 0x00002);
+define('QUEST_FLAG_EXPLORATION', 0x00004);
+define('QUEST_FLAG_SHARABLE', 0x00008);
+define('QUEST_FLAG_AUTO_REWARDED', 0x00400);
+define('QUEST_FLAG_DAILY', 0x01000);
+define('QUEST_FLAG_REPEATABLE', 0x02000);
+define('QUEST_FLAG_UNAVAILABLE', 0x04000);
+define('QUEST_FLAG_WEEKLY', 0x08000);
+define('QUEST_FLAG_AUTO_COMPLETE', 0x10000);
+define('QUEST_FLAG_AUTO_ACCEPT', 0x80000);
+
+define('QUEST_FLAG_SPECIAL_REPEATABLE', 0x01);
+define('QUEST_FLAG_SPECIAL_EXT_COMPLETE', 0x02);
+define('QUEST_FLAG_SPECIAL_AUTO_ACCEPT', 0x04);
+define('QUEST_FLAG_SPECIAL_DUNGEON_FINDER', 0x08);
+define('QUEST_FLAG_SPECIAL_MONTHLY', 0x10);
+define('QUEST_FLAG_SPECIAL_SPELLCAST', 0x20); // not documented in wiki! :[
+
// GameObject
define('OBJECT_DOOR', 0);
define('OBJECT_BUTTON', 1);
diff --git a/includes/types/achievement.class.php b/includes/types/achievement.class.php
index 16225228..9cb1eb4b 100644
--- a/includes/types/achievement.class.php
+++ b/includes/types/achievement.class.php
@@ -24,9 +24,9 @@ class AchievementList extends BaseType
todo: evaluate TC custom-data-tables: a*_criteria_data should be merged on installation, a*_reward linked with mail_loot_template and achievement
*/
- public function __construct($conditions = [])
+ public function __construct($conditions = [], $miscData = null)
{
- parent::__construct($conditions);
+ parent::__construct($conditions, $miscData);
// post processing
foreach ($this->iterate() as &$_curTpl)
@@ -47,12 +47,12 @@ class AchievementList extends BaseType
}
}
- public function addGlobalsToJscript(&$template, $addMask = GLOBALINFO_ANY)
+ public function addGlobalsToJScript($addMask = GLOBALINFO_ANY)
{
foreach ($this->iterate() as $__)
{
if ($addMask & GLOBALINFO_SELF)
- $template->extendGlobalData(self::$type, [$this->id => array(
+ Util::$pageTemplate->extendGlobalData(self::$type, [$this->id => array(
'icon' => $this->curTpl['iconString'],
'name' => $this->getField('name', true)
)]);
@@ -60,10 +60,10 @@ class AchievementList extends BaseType
if ($addMask & GLOBALINFO_REWARDS)
{
foreach ($this->curTpl['rewards'][TYPE_ITEM] as $_)
- $template->extendGlobalIds(TYPE_ITEM, $_);
+ Util::$pageTemplate->extendGlobalIds(TYPE_ITEM, $_);
foreach ($this->curTpl['rewards'][TYPE_TITLE] as $_)
- $template->extendGlobalIds(TYPE_TITLE, $_);
+ Util::$pageTemplate->extendGlobalIds(TYPE_TITLE, $_);
}
}
}
diff --git a/includes/types/basetype.class.php b/includes/types/basetype.class.php
index 11d8d78d..59148eb3 100644
--- a/includes/types/basetype.class.php
+++ b/includes/types/basetype.class.php
@@ -340,6 +340,7 @@ abstract class BaseType
protected function extendQueryOpts($extra) // needs to be called from __construct
{
+
foreach ($extra as $tbl => $sets)
{
if (!isset($this->queryOpts[$tbl])) // allow adding only to known tables
@@ -347,18 +348,25 @@ abstract class BaseType
foreach ($sets as $module => $value)
{
- if (!$value)
+ if (!$value || !is_array($value))
continue;
switch ($module)
{
// additional (str)
case 'g': // group by
+ case 's': // select
+ if (!empty($this->queryOpts[$tbl][$module]))
+ $this->queryOpts[$tbl][$module] .= implode(' ', $value);
+ else
+ $this->queryOpts[$tbl][$module] = implode(' ', $value);
+
+ break;
case 'h': // having
if (!empty($this->queryOpts[$tbl][$module]))
- $this->queryOpts[$tbl][$module] .= $value;
+ $this->queryOpts[$tbl][$module] .= implode(' AND ', $value);
else
- $this->queryOpts[$tbl][$module] = $value;
+ $this->queryOpts[$tbl][$module] = implode(' AND ', $value);
break;
// additional (arr)
@@ -371,9 +379,8 @@ abstract class BaseType
break;
// replacement (str)
case 'l': // limit
- case 's': // select
case 'o': // order by
- $this->queryOpts[$tbl][$module] = $value;
+ $this->queryOpts[$tbl][$module] = $value[0];
break;
}
}
@@ -385,7 +392,7 @@ abstract class BaseType
abstract public function getListviewData();
// should return data to extend global js variables for a certain type (e.g. g_items)
- abstract public function addGlobalsToJScript(&$smarty, $addMask = GLOBALINFO_ANY);
+ abstract public function addGlobalsToJScript($addMask = GLOBALINFO_ANY);
// NPC, GO, Item, Quest, Spell, Achievement, Profile would require this
abstract public function renderTooltip();
@@ -714,7 +721,7 @@ abstract class Filter
switch ($name)
{
case 'setCriteria':
- $form[$name] = $raw ? $data : 'fi_setCriteria('.$data['cr'].', '.$data['crs'].', '.$data['crv'].');';
+ $form[$name] = $raw ? $data : 'fi_setCriteria('.(empty($data['cr']) ? '[]' : $data['cr']).', '.(empty($data['crs']) ? '[]' : $data['crs']).', '.(empty($data['crv']) ? '[]' : $data['crv']).');';
break;
case 'extraCols':
$form[$name] = $raw ? $data : 'fi_extraCols = '.json_encode(array_unique($data), JSON_NUMERIC_CHECK).';';
@@ -762,7 +769,7 @@ abstract class Filter
foreach ($fields as $n => $f)
{
$sub = [];
- $parts = explode(' ', $string);
+ $parts = array_filter(explode(' ', $string));
foreach ($parts as $p)
{
diff --git a/includes/types/charclass.class.php b/includes/types/charclass.class.php
index 9b6ccadf..62df92a0 100644
--- a/includes/types/charclass.class.php
+++ b/includes/types/charclass.class.php
@@ -42,10 +42,10 @@ class CharClassList extends BaseType
return $data;
}
- public function addGlobalsToJscript(&$template, $addMask = 0)
+ public function addGlobalsToJScript($addMask = 0)
{
foreach ($this->iterate() as $__)
- $template->extendGlobalData(self::$type, [$this->id => ['name' => $this->getField('name', true)]]);
+ Util::$pageTemplate->extendGlobalData(self::$type, [$this->id => ['name' => $this->getField('name', true)]]);
}
public function addRewardsToJScript(&$ref) { }
diff --git a/includes/types/charrace.class.php b/includes/types/charrace.class.php
index 9a76f5ca..ca994311 100644
--- a/includes/types/charrace.class.php
+++ b/includes/types/charrace.class.php
@@ -34,10 +34,10 @@ class CharRaceList extends BaseType
return $data;
}
- public function addGlobalsToJscript(&$template, $addMask = 0)
+ public function addGlobalsToJScript($addMask = 0)
{
foreach ($this->iterate() as $__)
- $template->extendGlobalData(self::$type, [$this->id => ['name' => $this->getField('name', true)]]);
+ Util::$pageTemplate->extendGlobalData(self::$type, [$this->id => ['name' => $this->getField('name', true)]]);
}
public function addRewardsToJScript(&$ref) { }
diff --git a/includes/types/creature.class.php b/includes/types/creature.class.php
index 89ce041e..2c18e31c 100644
--- a/includes/types/creature.class.php
+++ b/includes/types/creature.class.php
@@ -15,14 +15,12 @@ class CreatureList extends BaseType
protected $queryBase = 'SELECT ct.*, ct.id AS ARRAY_KEY FROM ?_creature ct';
public $queryOpts = array(
- 'ct' => [['ft', 'clsMin', 'clsMax', 'qr']],
+ 'ct' => [['ft', 'clsMin', 'clsMax', 'qse']],
'ft' => ['j' => '?_factiontemplate ft ON ft.id = ct.factionA', 's' => ', ft.A, ft.H, ft.factionId'],
'clsMin' => ['j' => 'creature_classlevelstats clsMin ON ct.unitClass = clsMin.class AND ct.minLevel = clsMin.level', 's' => ', clsMin.attackpower AS mleAtkPwrMin, clsMin.rangedattackpower AS rngAtkPwrMin, clsMin.baseArmor * armorMod AS armorMin, (CASE ct.exp WHEN 0 THEN clsMin.damage_base WHEN 1 THEN clsMin.damage_exp1 ELSE clsMin.damage_exp2 END) * dmgMultiplier AS dmgMin, (CASE ct.exp WHEN 0 THEN clsMin.basehp0 WHEN 1 THEN clsMin.basehp1 ELSE clsMin.basehp2 END) * healthMod AS healthMin, clsMin.baseMana * manaMod AS manaMin'],
'clsMax' => ['j' => 'creature_classlevelstats clsMax ON ct.unitClass = clsMax.class AND ct.maxLevel = clsMax.level', 's' => ', clsMax.attackpower AS mleAtkPwrMax, clsMax.rangedattackpower AS rngAtkPwrMax, clsMax.baseArmor * armorMod AS armorMax, (CASE ct.exp WHEN 0 THEN clsMin.damage_base WHEN 1 THEN clsMin.damage_exp1 ELSE clsMin.damage_exp2 END) * dmgMultiplier AS dmgMax, (CASE ct.exp WHEN 0 THEN clsMax.basehp0 WHEN 1 THEN clsMax.basehp1 ELSE clsMax.basehp2 END) * healthMod AS healthMax, clsMax.baseMana * manaMod AS manaMax'],
- 'qr' => ['j' => ['creature_questrelation qr ON qr.id = ct.id', true], 's' => ', qr.quest', 'g' => 'ct.id'], // start
- 'ir' => ['j' => ['creature_involvedrelation ir ON ir.id = ct.id', true]], // end
- 'qtqr' => ['j' => 'quest_template qtqr ON qr.quest = qtqr.id'],
- 'qtir' => ['j' => 'quest_template qtir ON ir.quest = qtir.id'],
+ 'qse' => ['j' => ['?_quests_startend qse ON qse.type = 1 AND qse.typeId = ct.id', true], 's' => ', IF(min(qse.method) = 1 OR max(qse.method) = 3, 1, 0) AS startsQuests, IF(min(qse.method) = 2 OR max(qse.method) = 3, 1, 0) AS endsQuests', 'g' => 'ct.id'],
+ 'qt' => ['j' => '?_quests qt ON qse.questId = qt.id'],
'rep' => ['j' => ['creature_onkill_reputation rep ON rep.creature_id = ct.id', true]]
);
@@ -200,7 +198,7 @@ class CreatureList extends BaseType
'react' => [$this->curTpl['A'], $this->curTpl['H']],
);
- if ($this->getField('quest'))
+ if ($this->getField('startsQuests'))
$data[$this->id]['hasQuests'] = 1;
if ($_ = $this->getField('subname', true))
@@ -215,10 +213,10 @@ class CreatureList extends BaseType
return $data;
}
- public function addGlobalsToJScript(&$template, $addMask = 0)
+ public function addGlobalsToJScript($addMask = 0)
{
foreach ($this->iterate() as $__)
- $template->extendGlobalData(TYPE_NPC, [$this->id => ['name' => $this->getField('name', true)]]);
+ Util::$pageTemplate->extendGlobalData(TYPE_NPC, [$this->id => ['name' => $this->getField('name', true)]]);
}
public function addRewardsToJScript(&$refs) { }
@@ -280,20 +278,20 @@ class CreatureListFilter extends Filter
switch ($cr[1])
{
case '=': // min > max is totally possible
- $this->extraOpts['clsMin']['h'] = 'IF(healthMin > healthMax, healthMax, healthMin) <= '.$cr[2];
- $this->extraOpts['clsMax']['h'] = 'IF(healthMin > healthMax, healthMin, healthMax) >= '.$cr[2];
+ $this->extraOpts['clsMin']['h'][] = 'IF(healthMin > healthMax, healthMax, healthMin) <= '.$cr[2];
+ $this->extraOpts['clsMax']['h'][] = 'IF(healthMin > healthMax, healthMin, healthMax) >= '.$cr[2];
break;
case '>':
- $this->extraOpts['clsMin']['h'] = 'IF(healthMin > healthMax, healthMax, healthMin) > '.$cr[2];
+ $this->extraOpts['clsMin']['h'][] = 'IF(healthMin > healthMax, healthMax, healthMin) > '.$cr[2];
break;
case '>=':
- $this->extraOpts['clsMin']['h'] = 'IF(healthMin > healthMax, healthMax, healthMin) >= '.$cr[2];
+ $this->extraOpts['clsMin']['h'][] = 'IF(healthMin > healthMax, healthMax, healthMin) >= '.$cr[2];
break;
case '<':
- $this->extraOpts['clsMax']['h'] = 'IF(healthMin > healthMax, healthMin, healthMax) < '.$cr[2];
+ $this->extraOpts['clsMax']['h'][] = 'IF(healthMin > healthMax, healthMin, healthMax) < '.$cr[2];
break;
case '<=':
- $this->extraOpts['clsMax']['h'] = 'IF(healthMin > healthMax, healthMin, healthMax) <= '.$cr[2];
+ $this->extraOpts['clsMax']['h'][] = 'IF(healthMin > healthMax, healthMin, healthMax) <= '.$cr[2];
break;
}
return [1]; // always true, use post-filter
@@ -305,20 +303,20 @@ class CreatureListFilter extends Filter
switch ($cr[1])
{
case '=':
- $this->extraOpts['clsMin']['h'] = 'IF(manaMin > manaMax, manaMax, manaMin) <= '.$cr[2];
- $this->extraOpts['clsMax']['h'] = 'IF(manaMin > manaMax, manaMin, manaMax) => '.$cr[2];
+ $this->extraOpts['clsMin']['h'][] = 'IF(manaMin > manaMax, manaMax, manaMin) <= '.$cr[2];
+ $this->extraOpts['clsMax']['h'][] = 'IF(manaMin > manaMax, manaMin, manaMax) => '.$cr[2];
break;
case '>':
- $this->extraOpts['clsMax']['h'] = 'IF(manaMin > manaMax, manaMin, manaMax) > '.$cr[2];
+ $this->extraOpts['clsMax']['h'][] = 'IF(manaMin > manaMax, manaMin, manaMax) > '.$cr[2];
break;
case '>=':
- $this->extraOpts['clsMax']['h'] = 'IF(manaMin > manaMax, manaMin, manaMax) >= '.$cr[2];
+ $this->extraOpts['clsMax']['h'][] = 'IF(manaMin > manaMax, manaMin, manaMax) >= '.$cr[2];
break;
case '<':
- $this->extraOpts['clsMin']['h'] = 'IF(manaMin > manaMax, manaMax, manaMin) < '.$cr[2];
+ $this->extraOpts['clsMin']['h'][] = 'IF(manaMin > manaMax, manaMax, manaMin) < '.$cr[2];
break;
case '<=':
- $this->extraOpts['clsMin']['h'] = 'IF(manaMin > manaMax, manaMax, manaMin) <= '.$cr[2];
+ $this->extraOpts['clsMin']['h'][] = 'IF(manaMin > manaMax, manaMax, manaMin) <= '.$cr[2];
break;
}
return [1]; // always true, use post-filter
@@ -326,30 +324,32 @@ class CreatureListFilter extends Filter
switch ($cr[1])
{
case 1: // any
- return ['ir.quest', 0, '!'];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!']];
case 2: // alliance
- return ['AND', ['ir.quest', 0, '!'], [['qtqr.RequiredRaces', RACE_MASK_HORDE, '&'], 0], ['qtqr.RequiredRaces', RACE_MASK_ALLIANCE, '&']];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_HORDE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&']];
case 3: // horde
- return ['AND', ['ir.quest', 0, '!'], [['qtqr.RequiredRaces', RACE_MASK_ALLIANCE, '&'], 0], ['qtqr.RequiredRaces', RACE_MASK_HORDE, '&']];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']];
case 4: // both
- return ['AND', ['ir.quest', 0, '!'], ['OR', ['AND', ['qtqr.RequiredRaces', RACE_MASK_ALLIANCE, '&'], ['qtqr.RequiredRaces', RACE_MASK_HORDE, '&']], ['qtqr.RequiredRaces', 0]]];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!'], ['OR', ['AND', ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']], ['qt.reqRaceMask', 0]]];
case 5: // none
- return ['ir.quest', NULL];
+ $this->extraOpts['ct']['h'][] = 'startsQuests = 0';
+ return [1];
}
break;
case 8: // endsquest [enum]
switch ($cr[1])
{
case 1: // any
- return ['qr.quest', 0, '!'];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!']];
case 2: // alliance
- return ['AND', ['qr.quest', 0, '!'], [['qtqi.RequiredRaces', RACE_MASK_HORDE, '&'], 0], ['qtqi.RequiredRaces', RACE_MASK_ALLIANCE, '&']];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_HORDE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&']];
case 3: // horde
- return ['AND', ['qr.quest', 0, '!'], [['qtqi.RequiredRaces', RACE_MASK_ALLIANCE, '&'], 0], ['qtqi.RequiredRaces', RACE_MASK_HORDE, '&']];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']];
case 4: // both
- return ['AND', ['qr.quest', 0, '!'], ['OR', ['AND', ['qtqi.RequiredRaces', RACE_MASK_ALLIANCE, '&'], ['qtqi.RequiredRaces', RACE_MASK_HORDE, '&']], ['qtqi.RequiredRaces', 0]]];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!'], ['OR', ['AND', ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']], ['qt.reqRaceMask', 0]]];
case 5: // none
- return ['qr.quest', NULL];
+ $this->extraOpts['ct']['h'][] = 'endsQuests = 0';
+ return [1];
}
break;
case 3: // faction [enum]
diff --git a/includes/types/currency.class.php b/includes/types/currency.class.php
index a511c73d..d26ce1cf 100644
--- a/includes/types/currency.class.php
+++ b/includes/types/currency.class.php
@@ -28,18 +28,19 @@ class CurrencyList extends BaseType
return $data;
}
- public function addGlobalsToJscript(&$template, $addMask = 0)
+ public function addGlobalsToJScript($addMask = 0)
{
foreach ($this->iterate() as $__)
{
+ // todo (low): find out, why i did this in the first place
if ($this->id == 104) // in case of honor commit sebbuku
- $icon = ['alliance', 'horde'];
+ $icon = ['inv_bannerpvp_02', 'inv_bannerpvp_01']; // ['alliance', 'horde'];
else if ($this->id == 103) // also arena-icon diffs from item-icon
$icon = ['money_arena', 'money_arena'];
else
$icon = [$this->curTpl['iconString'], $this->curTpl['iconString']];
- $template->extendGlobalData(self::$type, [$this->id => array(
+ Util::$pageTemplate->extendGlobalData(self::$type, [$this->id => array(
'name' => $this->getField('name', true),
'icon' => $icon
)]);
diff --git a/includes/types/faction.class.php b/includes/types/faction.class.php
index 50991bd7..0cb2ccd2 100644
--- a/includes/types/faction.class.php
+++ b/includes/types/faction.class.php
@@ -70,10 +70,10 @@ class FactionList extends BaseType
return $data;
}
- public function addGlobalsToJScript(&$template, $addMask = 0)
+ public function addGlobalsToJScript($addMask = 0)
{
foreach ($this->iterate() as $__)
- $template->extendGlobalData(self::$type, [$this->id => ['name' => $this->getField('name', true)]]);
+ Util::$pageTemplate->extendGlobalData(self::$type, [$this->id => ['name' => $this->getField('name', true)]]);
}
public function renderTooltip() { }
diff --git a/includes/types/gameobject.class.php b/includes/types/gameobject.class.php
index b394b5da..2fc7e7a9 100644
--- a/includes/types/gameobject.class.php
+++ b/includes/types/gameobject.class.php
@@ -13,15 +13,15 @@ class GameObjectList extends BaseType
protected $queryBase = 'SELECT o.*, o.id AS ARRAY_KEY FROM ?_objects o';
protected $queryOpts = array(
- 'o' => [['ft', 'qr']],
+ 'o' => [['ft', 'qse']],
'ft' => ['j' => ['?_factiontemplate ft ON ft.id = o.faction', true], 's' => ', ft.factionId, ft.A, ft.H'],
- 'qr' => ['j' => ['gameobject_questrelation qr ON qr.id = o.id', true], 's' => ', qr.quest', 'g' => 'o.id'], // started by GO
- 'ir' => ['j' => ['gameobject_involvedrelation ir ON ir.id = o.id', true]] // ends at GO
+ 'qse' => ['j' => ['?_quests_startend qse ON qse.type = 2 AND qse.typeId = o.id', true], 's' => ', IF(min(qse.method) = 1 OR max(qse.method) = 3, 1, 0) AS startsQuests, IF(min(qse.method) = 2 OR max(qse.method) = 3, 1, 0) AS endsQuests', 'g' => 'o.id'],
+ 'qt' => ['j' => '?_quests qt ON qse.questId = qt.id']
);
- public function __construct($conditions = [])
+ public function __construct($conditions = [], $miscData = null)
{
- parent::__construct($conditions);
+ parent::__construct($conditions, $miscData);
if ($this->error)
return;
@@ -29,7 +29,7 @@ class GameObjectList extends BaseType
// post processing
foreach ($this->iterate() as $_id => &$curTpl)
{
- // unpack miscInfo:
+ // unpack miscInfo
$curTpl['lootStack'] = [];
$curTpl['spells'] = [];
@@ -87,7 +87,7 @@ class GameObjectList extends BaseType
if (!empty($this->curTpl['reqSkill']))
$data[$this->id]['skill'] = $this->curTpl['reqSkill'];
- if ($this->curTpl['quest'])
+ if ($this->curTpl['startsQuests'])
$data[$this->id]['hasQuests'] = 1;
}
@@ -120,18 +120,20 @@ class GameObjectList extends BaseType
return $this->tooltips[$this->id];
}
- public function addGlobalsToJScript(&$template, $addMask = 0)
+ public function addGlobalsToJScript($addMask = 0)
{
foreach ($this->iterate() as $id => $__)
- $template->extendGlobalData(self::$type, [$id => ['name' => $this->getField('name', true)]]);
+ Util::$pageTemplate->extendGlobalData(self::$type, [$id => ['name' => $this->getField('name', true)]]);
}
}
class GameObjectListFilter extends Filter
{
+ public $extraOpts = [];
+
protected $genericFilter = array(
- 15 => [FILTER_CR_NUMERIC, 'entry', null], // id
+ 15 => [FILTER_CR_NUMERIC, 'id', null], // id
7 => [FILTER_CR_NUMERIC, 'reqSkill', null], // requiredskilllevel
);
@@ -168,30 +170,32 @@ class GameObjectListFilter extends Filter
switch ($cr[1])
{
case 1: // any
- return ['qr.id', null, '!'];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!']];
case 2: // alliance only
- return ['AND', ['qr.id', null, '!'], ['ft.A', -1, '!'], ['ft.H', -1]];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_HORDE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&']];
case 3: // horde only
- return ['AND', ['qr.id', null, '!'], ['ft.A', -1], ['ft.H', -1, '!']];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']];
case 4: // both
- return ['AND', ['qr.id', null, '!'], ['OR', ['faction', 0], ['AND', ['ft.A', -1, '!'], ['ft.H', -1, '!']]]];
+ return ['AND', ['qse.method', 0x1, '&'], ['qse.questId', null, '!'], ['OR', ['AND', ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']], ['qt.reqRaceMask', 0]]];
case 5: // none
- return ['qr.id', null];
+ $this->extraOpts['o']['h'][] = 'startsQuests = 0';
+ return [1];
}
break;
case 3: // endsquest [side]
switch ($cr[1])
{
case 1: // any
- return ['qi.id', null, '!'];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!']];
case 2: // alliance only
- return ['AND', ['qi.id', null, '!'], ['ft.A', -1, '!'], ['ft.H', -1]];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_HORDE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&']];
case 3: // horde only
- return ['AND', ['qi.id', null, '!'], ['ft.A', -1], ['ft.H', -1, '!']];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!'], [['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], 0], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']];
case 4: // both
- return ['AND', ['qi.id', null, '!'], ['OR', ['faction', 0], ['AND', ['ft.A', -1, '!'], ['ft.H', -1, '!']]]];
- case 5: // none
- return ['qi.id', null];
+ return ['AND', ['qse.method', 0x2, '&'], ['qse.questId', null, '!'], ['OR', ['AND', ['qt.reqRaceMask', RACE_MASK_ALLIANCE, '&'], ['qt.reqRaceMask', RACE_MASK_HORDE, '&']], ['qt.reqRaceMask', 0]]];
+ case 5: // none todo: broken, if entry starts and ends quests...
+ $this->extraOpts['o']['h'][] = 'endsQuests = 0';
+ return [1];
}
break;
case 13: // hascomments [yn]
@@ -214,7 +218,8 @@ class GameObjectListFilter extends Filter
// name
if (isset($_v['na']))
- $parts[] = ['name_loc'.User::$localeId, $_v['na']];
+ if ($_ = $this->modularizeString(['name_loc'.User::$localeId]))
+ $parts[] = $_;
return $parts;
}
diff --git a/includes/types/item.class.php b/includes/types/item.class.php
index 90b11527..fba7fb3e 100644
--- a/includes/types/item.class.php
+++ b/includes/types/item.class.php
@@ -134,7 +134,7 @@ class ItemList extends BaseType
if ($cItems)
{
$moneyItems = new CurrencyList(array(['itemId', $cItems]));
- $moneyItems->addGlobalsToJscript(Util::$pageTemplate);
+ $moneyItems->addGlobalsToJscript();
foreach ($itemz as $id => $vendors)
{
@@ -357,7 +357,7 @@ class ItemList extends BaseType
return $data;
}
- public function addGlobalsToJscript(&$template, $addMask = GLOBALINFO_SELF)
+ public function addGlobalsToJScript($addMask = GLOBALINFO_SELF)
{
foreach ($this->iterate() as $id => $__)
{
@@ -385,7 +385,7 @@ class ItemList extends BaseType
}
if ($data || $extra)
- $template->extendGlobalData(self::$type, $data, $extra);
+ Util::$pageTemplate->extendGlobalData(self::$type, $data, $extra);
}
}
@@ -719,8 +719,8 @@ class ItemList extends BaseType
// required races
if ($races = Lang::getRaceString($this->curTpl['requiredRace']))
- if ($races['name'] != Lang::$game['ra'][0]) // not "both"
- $x .= Lang::$game['races'].Lang::$colon.$races['name'].'
';
+ if ($races != Lang::$game['ra'][0]) // not "both", but display combinations like: troll, dwarf
+ $x .= Lang::$game['races'].Lang::$colon.$races.'
';
// required honorRank (not used anymore)
if ($rhr = $this->curTpl['requiredHonorRank'])
@@ -1595,7 +1595,7 @@ class ItemListFilter extends Filter
$cnd = $cnd[0];
if ($select)
- $this->extraOpts['is']['s'] = ', ('.implode(' + ', $select).') / '.$wtSum.' AS score';
+ $this->extraOpts['is']['s'][] = ', ('.implode(' + ', $select).') / '.$wtSum.' AS score';
return $cnd;
}
diff --git a/includes/types/itemset.class.php b/includes/types/itemset.class.php
index 07fa7a36..5679b219 100644
--- a/includes/types/itemset.class.php
+++ b/includes/types/itemset.class.php
@@ -73,13 +73,13 @@ class ItemsetList extends BaseType
return $data;
}
- public function addGlobalsToJscript(&$template, $addMask = GLOBALINFO_ANY)
+ public function addGlobalsToJScript($addMask = GLOBALINFO_ANY)
{
if ($this->classes && ($addMask & GLOBALINFO_RELATED))
- $template->extendGlobalIds(TYPE_CLASS, $this->classes);
+ Util::$pageTemplate->extendGlobalIds(TYPE_CLASS, $this->classes);
if ($this->pieceToSet && ($addMask & GLOBALINFO_SELF))
- $template->extendGlobalIds(TYPE_ITEM, array_keys($this->pieceToSet));
+ Util::$pageTemplate->extendGlobalIds(TYPE_ITEM, array_keys($this->pieceToSet));
}
public function renderTooltip() { }
diff --git a/includes/types/pet.class.php b/includes/types/pet.class.php
index b4d5681b..ecb47fa0 100644
--- a/includes/types/pet.class.php
+++ b/includes/types/pet.class.php
@@ -47,17 +47,17 @@ class PetList extends BaseType
return $data;
}
- public function addGlobalsToJscript(&$template, $addMask = GLOBALINFO_ANY)
+ public function addGlobalsToJScript($addMask = GLOBALINFO_ANY)
{
foreach ($this->iterate() as $__)
{
if ($addMask & GLOBALINFO_RELATED)
for ($i = 1; $i <= 4; $i++)
if ($this->curTpl['spellId'.$i] > 0)
- $template->extendGlobalIds(TYPE_SPELL, $this->curTpl['spellId'.$i]);
+ Util::$pageTemplate->extendGlobalIds(TYPE_SPELL, $this->curTpl['spellId'.$i]);
if ($addMask & GLOBALINFO_SELF)
- $template->extendGlobalData(self::$type, [$this->id => ['icon' => $this->curTpl['iconString']]]);
+ Util::$pageTemplate->extendGlobalData(self::$type, [$this->id => ['icon' => $this->curTpl['iconString']]]);
}
}
diff --git a/includes/types/quest.class.php b/includes/types/quest.class.php
index bcaad293..dc31d369 100644
--- a/includes/types/quest.class.php
+++ b/includes/types/quest.class.php
@@ -11,27 +11,26 @@ class QuestList extends BaseType
public $requires = [];
public $rewards = [];
+ public $choices = [];
- protected $queryBase = 'SELECT *, qt.id AS ARRAY_KEY FROM quest_template qt';
+ protected $queryBase = 'SELECT q.*, q.id AS ARRAY_KEY FROM ?_quests q';
protected $queryOpts = array(
- 'qt' => [['lq', 'xp']],
- 'lq' => ['j' => ['locales_quest lq ON qt.id = lq.id', true]],
- 'xp' => ['j' => ['?_questxp xp ON qt.level = xp.id', true], 's' => ', xp.*'],
- 'goStart' => ['j' => 'gameobject_questrelation goStart ON goStart.quest = qt.id'], // started by GO
- 'goEnd' => ['j' => 'gameobject_involvedrelation goEnd ON goEnd.quest = qt.id'], // ends at GO
- 'npcStart' => ['j' => 'creature_questrelation npcStart ON npcStart.quest = qt.id'], // started by NPC
- 'npcEnd' => ['j' => 'creature_involvedrelation npcEnd ON npcEnd.quest = qt.id'], // ends at NPC
- 'itemStart' => ['j' => ['?_items itemStart ON itemStart.startQuest = qt.id', true], 'g' => 'qt.id'] // started by item .. grouping required, as the same quest may have multiple starter
+ 'q' => [],
+ 'rsc' => ['j' => '?_spell rsc ON q.rewardSpellCast = rsc.id'], // limit rewardSpellCasts
+ 'qse' => ['j' => '?_quests_startend qse ON q.id = qse.questId', 's' => ', qse.method'], // groupConcat..?
);
- public function __construct($conditions = [])
+ public function __construct($conditions = [], $miscData = null)
{
- parent::__construct($conditions);
+ parent::__construct($conditions, $miscData);
+
+ // i don't like this very much
+ $currencies = DB::Aowow()->selectCol('SELECT id AS ARRAY_KEY, itemId FROM ?_currencies');
// post processing
foreach ($this->iterate() as $id => &$_curTpl)
{
- $_curTpl['cat1'] = $_curTpl['ZoneOrSort']; // should probably be in a method...
+ $_curTpl['cat1'] = $_curTpl['zoneOrSort']; // should probably be in a method...
$_curTpl['cat2'] = 0;
foreach (Util::$questClasses as $k => $arr)
@@ -43,82 +42,98 @@ class QuestList extends BaseType
}
}
- // set xp
- $_curTpl['xp'] = $_curTpl['Field'.$_curTpl['RewardXPId']];
- for ($i = 0; $i < 9; $i++)
- unset($_curTpl['Field'.$i]);
-
// store requirements
- $data = [];
+ $requires = [];
for ($i = 1; $i < 7; $i++)
{
- if ($_ = $_curTpl['RequiredItemId'.$i])
- $data[TYPE_ITEM][] = $_;
+ if ($_ = $_curTpl['reqItemId'.$i])
+ $requires[TYPE_ITEM][] = $_;
if ($i > 4)
continue;
- if ($_curTpl['RequiredNpcOrGo'.$i] > 0)
- $data[TYPE_NPC][] = $_curTpl['RequiredNpcOrGo'.$i];
- else if ($_curTpl['RequiredNpcOrGo'.$i] < 0)
- $data[TYPE_OBJECT][] = -$_curTpl['RequiredNpcOrGo'.$i];
+ if ($_curTpl['reqNpcOrGo'.$i] > 0)
+ $requires[TYPE_NPC][] = $_curTpl['reqNpcOrGo'.$i];
+ else if ($_curTpl['reqNpcOrGo'.$i] < 0)
+ $requires[TYPE_OBJECT][] = -$_curTpl['reqNpcOrGo'.$i];
- if ($_ = $_curTpl['RequiredSourceItemId'.$i])
- $data[TYPE_ITEM][] = $_;
+ if ($_ = $_curTpl['reqSourceItemId'.$i])
+ $requires[TYPE_ITEM][] = $_;
}
- if ($data)
- $this->requires[$id] = $data;
+ if ($requires)
+ $this->requires[$id] = $requires;
// store rewards
- $data = [];
+ $rewards = [];
+ $choices = [];
- if ($_ = $_curTpl['RewardTitleId'])
- $data[TYPE_TITLE][] = $_;
+ if ($_ = $_curTpl['rewardTitleId'])
+ $rewards[TYPE_TITLE][] = $_;
+
+ if ($_ = $_curTpl['rewardHonorPoints'])
+ $rewards[TYPE_CURRENCY][104] = $_;
+
+ if ($_ = $_curTpl['rewardArenaPoints'])
+ $rewards[TYPE_CURRENCY][103] = $_;
for ($i = 1; $i < 7; $i++)
{
- if ($_ = $_curTpl['RewardChoiceItemId'.$i])
- $data[TYPE_ITEM][] = $_;
+ if ($_ = $_curTpl['rewardChoiceItemId'.$i])
+ $choices[TYPE_ITEM][$_] = $_curTpl['rewardChoiceItemCount'.$i];
if ($i > 5)
continue;
- if ($_ = $_curTpl['RewardFactionId'.$i])
- $data[TYPE_FACTION][] = $_;
+ if ($_ = $_curTpl['rewardFactionId'.$i])
+ $rewards[TYPE_FACTION][$_] = $_curTpl['rewardFactionValue'.$i];
if ($i > 4)
continue;
- if ($_ = $_curTpl['RewardItemId'.$i])
- $data[TYPE_ITEM][] = $_;
+ if ($_ = $_curTpl['rewardItemId'.$i])
+ {
+ $qty = $_curTpl['rewardItemCount'.$i];
+ if (in_array($_, $currencies))
+ $rewards[TYPE_CURRENCY][array_search($_, $currencies)] = $qty;
+ else
+ $rewards[TYPE_ITEM][$_] = $qty;
+ }
}
- if ($data)
- $this->rewards[$id] = $data;
+ if ($rewards)
+ $this->rewards[$id] = $rewards;
+
+ if ($choices)
+ $this->choices[$id] = $choices;
}
}
// static use START
public static function getName($id)
{
- $n = DB::Aowow()->SelectRow('
- SELECT
- title,
- title_loc2,
- title_loc3,
- title_loc6,
- title_loc8
- FROM
- quest_template q,
- locales_quest l
- WHERE
- q.id = l.id AND
- q.id = ?d',
- $id
- );
- return Util::localizedString($n, 'title');
+ $n = DB::Aowow()->SelectRow('SELECT name_loc0, name_loc2, name_loc3, name_loc6, name_loc8 FROM ?_quests WHERE id = ?d', $id);
+ return Util::localizedString($n, 'name');
}
// static use END
+ public function isRepeatable()
+ {
+ return $this->curTpl['flags'] & QUEST_FLAG_REPEATABLE || $this->curTpl['specialFlags'] & QUEST_FLAG_SPECIAL_REPEATABLE;
+ }
+
+ public function isDaily($strict = false)
+ {
+ if ($strict)
+ return $this->curTpl['flags'] & QUEST_FLAG_DAILY;
+ else
+ return $this->curTpl['flags'] & (QUEST_FLAG_DAILY | QUEST_FLAG_WEEKLY) || $this->curTpl['specialFlags'] & QUEST_FLAG_SPECIAL_MONTHLY;
+ }
+
+ // using reqPlayerKills and rewardHonor as a crutch .. has TC this even implemented..?
+ public function isPvPEnabled()
+ {
+ return $this->curTpl['reqPlayerKills'] || $this->curTpl['rewardHonorPoints'] || $this->curTpl['rewardArenaPoints'];
+ }
+
public function getSourceData()
{
$data = [];
@@ -126,7 +141,7 @@ class QuestList extends BaseType
foreach ($this->iterate() as $__)
{
$data[$this->id] = array(
- "n" => $this->getField('Title', true),
+ "n" => $this->getField('name', true),
"t" => TYPE_QUEST,
"ti" => $this->id,
"c" => $this->curTpl['cat1'],
@@ -147,73 +162,68 @@ class QuestList extends BaseType
'category' => $this->curTpl['cat1'],
'category2' => $this->curTpl['cat2'],
'id' => $this->id,
- 'level' => $this->curTpl['Level'],
- 'reqlevel' => $this->curTpl['MinLevel'],
- 'name' => $this->getField('Title', true),
- 'side' => Util::sideByRaceMask($this->curTpl['RequiredRaces']),
+ 'level' => $this->curTpl['level'],
+ 'reqlevel' => $this->curTpl['minLevel'],
+ 'name' => $this->getField('name', true),
+ 'side' => Util::sideByRaceMask($this->curTpl['reqRaceMask']),
'wflags' => 0x0,
- 'xp' => $this->curTpl['xp']
+ 'xp' => $this->curTpl['rewardXP']
);
- $rewards = [];
- for ($i = 1; $i < 5; $i++)
- if ($this->curTpl['RewardItemId'.$i])
- $rewards[] = [$this->curTpl['RewardItemId'.$i], $this->curTpl['RewardItemCount'.$i]];
+ if (!empty($this->rewards[$this->id][TYPE_CURRENCY]))
+ foreach ($this->rewards[$this->id][TYPE_CURRENCY] as $iId => $qty)
+ $data[$this->id]['currencyrewards'][] = [$iId, $qty];
- $choices = [];
- for ($i = 1; $i < 7; $i++)
- if ($this->curTpl['RewardChoiceItemId'.$i])
- $choices[] = [$this->curTpl['RewardChoiceItemId'.$i], $this->curTpl['RewardChoiceItemCount'.$i]];
+ if (!empty($this->rewards[$this->id][TYPE_ITEM]))
+ foreach ($this->rewards[$this->id][TYPE_ITEM] as $iId => $qty)
+ $data[$this->id]['itemrewards'][] = [$iId, $qty];
- if ($rewards)
- $data[$this->id]['itemrewards'] = $rewards;
+ if (!empty($this->choices[$this->id][TYPE_ITEM]))
+ foreach ($this->choices[$this->id][TYPE_ITEM] as $iId => $qty)
+ $data[$this->id]['itemchoices'][] = [$iId, $qty];
- if ($choices)
- $data[$this->id]['itemchoices'] = $choices;
-
- if ($_ = $this->curTpl['RewardTitleId'])
+ if ($_ = $this->curTpl['rewardTitleId'])
$data[$this->id]['titlereward'] = $_;
- if ($_ = $this->curTpl['Type'])
+ if ($_ = $this->curTpl['type'])
$data[$this->id]['type'] = $_;
- if ($_ = $this->curTpl['RequiredClasses'])
+ if ($_ = $this->curTpl['reqClassMask'])
$data[$this->id]['reqclass'] = $_;
- if ($_ = ($this->curTpl['RequiredRaces'] & RACE_MASK_ALL))
+ if ($_ = ($this->curTpl['reqRaceMask'] & RACE_MASK_ALL))
if ((($_ & RACE_MASK_ALLIANCE) != RACE_MASK_ALLIANCE) && (($_ & RACE_MASK_HORDE) != RACE_MASK_HORDE))
$data[$this->id]['reqrace'] = $_;
- if ($_ = $this->curTpl['RewardOrRequiredMoney'])
+ if ($_ = $this->curTpl['rewardOrReqMoney'])
if ($_ > 0)
$data[$this->id]['money'] = $_;
- if ($this->curTpl['Flags'] & 0x1000)
+ if ($this->curTpl['flags'] & QUEST_FLAG_DAILY)
$data[$this->id]['daily'] = true;
- if ($this->curTpl['Flags'] & 0x8000)
+ if ($this->curTpl['flags'] & QUEST_FLAG_WEEKLY)
$data[$this->id]['weekly'] = true;
- // flags & 64: Hostile - there are quests, that flag the player for pvp when taken .. where is that set..?
// wflags: &1: disabled/historical; &32: AutoAccept; &64: Hostile(?)
- if ($this->curTpl['Flags'] & 0x4000) // Unavailable (todo (med): get disables)
+ // todo (med): also get disables
+ if ($this->curTpl['flags'] & QUEST_FLAG_UNAVAILABLE)
{
$data[$this->id]['historical'] = true; // post 5.0
$data[$this->id]['wflags'] |= 0x1; // pre 5.0
}
- if ($this->curTpl['Flags'] & 0x80000) // Auto Accept
+ if ($this->curTpl['flags'] & QUEST_FLAG_AUTO_ACCEPT)
$data[$this->id]['wflags'] |= 0x20;
+ if ($this->isPvPEnabled())
+ $data[$this->id]['wflags'] |= 0x60; // not sure why this flag also requires auto-accept to be set
+
$data[$this->id]['reprewards'] = [];
for ($i = 1; $i < 6; $i++)
{
- $foo = $this->curTpl['RewardFactionId'.$i];
- $bar = $this->curTpl['RewardFactionValueIdOverride'.$i] / 100;
-
- if (!$bar && ($_ = $this->curTpl['RewardFactionValueId'.$i]))
- $bar = Util::$questFactionReward[abs($_)] * ($_ < 0 ? -1 : 1);
-
+ $foo = $this->curTpl['rewardFactionId'.$i];
+ $bar = $this->curTpl['rewardFactionValue'.$i];
if ($foo && $bar)
{
$data[$this->id]['reprewards'][] = [$foo, $bar];
@@ -227,7 +237,7 @@ class QuestList extends BaseType
return $data;
}
- private function parseText($type = 'Objectives')
+ public function parseText($type = 'objectives', $jsEscaped = true)
{
$text = $this->getField($type, true);
if (!$text)
@@ -235,7 +245,10 @@ class QuestList extends BaseType
$text = Util::parseHtmlText($text);
- return Util::jsEscape($text);
+ if ($jsEscaped)
+ $text = Util::jsEscape($text);
+
+ return $text;
}
public function renderTooltip()
@@ -246,8 +259,8 @@ class QuestList extends BaseType
if (isset($this->tooltips[$this->id]))
return $this->tooltips[$this->id];
- $title = Util::jsEscape($this->getField('Title', true));
- $level = $this->curTpl['Level'];
+ $title = Util::jsEscape($this->getField('name', true));
+ $level = $this->curTpl['level'];
if ($level < 0)
$level = 0;
@@ -256,7 +269,7 @@ class QuestList extends BaseType
{
$level = sprintf(Lang::$quest['questLevel'], $level);
- if ($this->curTpl['Flags'] & 0x1000) // daily
+ if ($this->curTpl['flags'] & QUEST_FLAG_DAILY) // daily
$level .= ' '.Lang::$quest['daily'];
$x .= '
|
| '.$title.' |
'.$this->parseText('Objectives').' '.Lang::$quest['requirements'].Lang::$colon.''; + $x .= '
'.Lang::$main['englishOnly'].' ')];
+ $tv['article']['params'] = ['prepend' => Util::jsEscape(''.Lang::$main['englishOnly'].' ')];
foreach ($article as $text)
if (preg_match_all('/\[(npc|object|item|itemset|quest|spell|zone|faction|pet|achievement|title|holiday|class|race|skill|currency)=(\d+)[^\]]*\]/i', $text, $matches, PREG_SET_ORDER))
@@ -221,38 +221,42 @@ class SmartyAoWoW extends Smarty
$ids = array_unique($ids, SORT_NUMERIC);
$cnd = [['id', $ids], 0];
- (new Util::$typeClasses[$type]($cnd))->addGlobalsToJscript($this, GLOBALINFO_SELF);
+ (new Util::$typeClasses[$type]($cnd))->addGlobalsToJScript(GLOBALINFO_SELF);
}
}
public function notFound($subject, $entry)
{
- $this->updatePageVars(array(
- 'subject' => Util::ucFirst($subject),
- 'id' => $entry,
- 'notFound' => sprintf(Lang::$main['pageNotFound'], $subject)
- ));
+ $this->assign([
+ 'typeStr' => Util::ucFirst($subject),
+ 'typeId' => $entry,
+ 'title' => Lang::$main['nfPageTitle'],
+ 'notFound' => sprintf(Lang::$main['pageNotFound'], $subject),
+ 'lang' => Lang::$main,
+ 'mysql' => DB::Aowow()->getStatistics()
+ ]);
- $this->assign('lang', Lang::$main);
- $this->assign('mysql', DB::Aowow()->getStatistics());
-
- $this->display('404.tpl');
+ $this->display('text-page-generic.tpl');
exit();
}
public function error()
{
- $this->assign('lang', array_merge(Lang::$main, Lang::$error));
- $this->assign('mysql', DB::Aowow()->getStatistics());
+ $this->assign([
+ 'type' => -99, // get error-article
+ 'typeId' => 0,
+ 'title' => Lang::$main['errPageTitle'],
+ 'name' => Lang::$main['errPageTitle'],
+ 'lang' => Lang::$main,
+ 'mysql' => DB::Aowow()->getStatistics()
+ ]);
- $this->display('error.tpl');
+ $this->display('text-page-generic.tpl');
exit();
}
public function brb()
{
- $this->assign('lang', array_merge(Lang::$main, Lang::$error));
-
$this->display('brb.tpl');
exit();
}
@@ -353,26 +357,21 @@ class Util
ITEM_MOD_HEALTH_REGEN, ITEM_MOD_SPELL_PENETRATION, ITEM_MOD_BLOCK_VALUE
);
- public static $questClasses = array( // taken from old aowow: 0,1,2,3,8,10 may point to pointless mini-areas
+ public static $questClasses = array( // taken from old aowow: 2 & 3 partially point to pointless mini-areas in front of dungeons
-2 => [ 0],
- 0 => [ 1, 3, 4, 8, 10, 11, 12, 25, 28, 33, 36, 38, 40, 41, 44, 45, 46, 47, 51, 85, 130, 139, 267, 279, 1497, 1519, 1537, 2257, 3430, 3433, 3487, 4080],
+ 0 => [ 1, 3, 4, 8, 10, 11, 12, 25, 28, 33, 36, 38, 40, 41, 44, 45, 46, 47, 51, 85, 130, 139, 267, 279, 1497, 1519, 1537, 2257, 3430, 3433, 3487, 4080, 4298],
1 => [ 14, 15, 16, 17, 141, 148, 215, 331, 357, 361, 400, 405, 406, 440, 490, 493, 618, 1216, 1377, 1637, 1638, 1657, 3524, 3525, 3557],
- 2 => [ 133, 206, 209, 491, 717, 718, 719, 722, 796, 978, 1196, 1337, 1417, 1581, 1583, 1584, 1941, 2017, 2057, 2100, 2366, 2367, 2437, 2557, 3477, 3562, 3713, 3714, 3715, 3716, 3717, 3789, 3790, 3791, 3792, 3845, 3846, 3847, 3849, 3905, 4095, 4100, 4120, 4196, 4228, 4264, 4272, 4375, 4415, 4494, 4723],
- 3 => [ 19, 2159, 2562, 2677, 2717, 3428, 3429, 3456, 3606, 3805, 3836, 3840, 3842, 4273, 4500, 4722, 4812],
+/*todo*/ 2 => [ 133, 206, 209, 491, 717, 718, 719, 722, 796, 978, 1196, 1337, 1417, 1581, 1583, 1584, 1941, 2017, 2057, 2100, 2366, 2367, 2437, 2557, 3477, 3562, 3713, 3714, 3715, 3716, 3717, 3789, 3790, 3791, 3792, 3845, 3846, 3847, 3849, 3905, 4095, 4100, 4120, 4196, 4228, 4264, 4272, 4375, 4415, 4494, 4723],
+/*todo*/ 3 => [ 1977, 2159, 2562, 2677, 2717, 3428, 3429, 3456, 3606, 3805, 3836, 3840, 3842, 4273, 4500, 4722, 4812],
4 => [ -372, -263, -262, -261, -162, -161, -141, -82, -81, -61],
5 => [ -373, -371, -324, -304, -264, -201, -182, -181, -121, -101, -24],
6 => [ -25, 2597, 3277, 3358, 3820, 4384, 4710],
- 7 => [ -368, -367, -365, -344, -241, -1],
- 8 => [ 3483, 3518, 3519, 3520, 3521, 3522, 3523, 3679, 3703],
- 9 => [-1008, -1007, -1006, -1005, -1004, -1003, -1002, -1001, -375, -374, -370, -369, -366, -364, -284, -41, -22],
- 10 => [ 65, 66, 67, 210, 394, 495, 3537, 3711, 4024, 4197, 4395]
+ 7 => [-1010, -368, -367, -365, -344, -241, -1],
+ 8 => [ 3483, 3518, 3519, 3520, 3521, 3522, 3523, 3679, 3703], // Skettis is no parent
+ 9 => [-1006, -1005, -1003, -1002, -1001, -376, -375, -374, -370, -369, -366, -364, -284, -41, -22], // 22: seasonal, 284: special => not in the actual menu
+ 10 => [ 65, 66, 67, 210, 394, 495, 3537, 3711, 4024, 4197, 4395, 4742] // Coldara is no parent
);
- public static $questFactionReward = array( // from QuestFactionReward.dbc
- 0, 10, 25, 75, 150, 250, 350, 500, 1000, 5
- );
-
-
/* why:
Because petSkills (and ranged weapon skills) are the only ones with more than two skillLines attached. Because Left Joining ?_spell with ?_skillLineAbility causes more trouble than it has uses.
Because this is more or less the only reaonable way to fit all that information into one database field, so..
@@ -1207,7 +1206,8 @@ class Util
'/\|c(\w{6})\w{2}([^\|]+)\|r/ui', // color |cBitte aktiviert JavaScript in Eurem Browser.", + 'noJScript' => 'Diese Seite macht ausgiebigen Gebrauch von JavaScript. Bitte aktiviert JavaScript in Eurem Browser.', 'userProfiles' => "Deine Charaktere", 'pageNotFound' => "Diese|Dieser|Dieses %s existiert nicht.", // todo: dämliche Fälle... 'gender' => "Geschlecht", - 'sex' => [null, 'Mann', 'Frau'], + 'sex' => [null, "Mann", "Frau"], 'players' => "Spieler", 'quickFacts' => "Kurzübersicht", 'screenshots' => "Screenshots", @@ -63,7 +63,7 @@ $lang = array( 'oneFilter' => "Mindestens einer", 'applyFilter' => "Filter anwenden", 'resetForm' => "Formular zurücksetzen", - 'refineSearch' => "Tipp: Präzisiere deine Suche mit Durchsuchen einer Unterkategorie.", + 'refineSearch' => 'Tipp: Präzisiere deine Suche mit Durchsuchen einer Unterkategorie.', 'clear' => "leeren", 'exactMatch' => "Exakt passend", '_reqLevel' => "Mindeststufe", @@ -73,7 +73,7 @@ $lang = array( 'disabled' => "Deaktiviert", 'disabledHint' => "Kann nicht erhalten oder abgeschlossen werden.", 'serverside' => "Serverseitig", - 'serversideHint' => "Diese Informationen sind nicht im Client enthalten und wurden gesnifft und/oder erraten.", + 'serversideHint'=> "Diese Informationen sind nicht im Client enthalten und wurden gesnifft und/oder erraten.", // red buttons 'links' => "Links", @@ -82,6 +82,8 @@ $lang = array( 'findUpgrades' => "Bessere Gegenstände finden...", // miscTools + 'errPageTitle' => "Seite nicht gefunden", + 'nfPageTitle' => "Fehler", 'subscribe' => "Abonnieren", 'mostComments' => ["Gestern", "Vergangene %d Tage"], 'utilities' => array( @@ -100,7 +102,7 @@ $lang = array( 'cappedHint' => 'Tipp: Entfernt Gewichtungen für gedeckte Werte wie Trefferwertung.', 'groupBy' => "Ordnen nach", 'gb' => array( - ['Nichts', 'none'], ['Platz', 'slot'], ['Stufe', 'level'], ['Quelle', 'source'] + ["Nichts", "none"], ["Platz", "slot"], ["Stufe", "level"], ["Quelle", "source"] ), 'compareTool' => "Gegenstandsvergleichswerkzeug", 'talentCalc' => "Talentrechner", @@ -176,33 +178,35 @@ $lang = array( 'zone' => "Zone", 'zones' => "Gebiete", + 'honorPoints' => "Ehrenpunkte", + 'arenaPoints' => "Arenapunkte", 'heroClass' => "Heldenklasse", 'resource' => "Ressource", 'resources' => "Ressourcen", 'role' => "Rolle", 'roles' => "Rollen", 'specs' => "Spezialisierungen", - '_roles' => ['Heiler', 'Nahkampf-DPS', 'Distanz-DPS', 'Tank'], + '_roles' => ["Heiler", "Nahkampf-DPS", "Distanz-DPS", "Tank"], - 'modes' => ['Normal / Normal 10', 'Heroisch / Normal 25', 'Heroisch 10', 'Heroisch 25'], - 'expansions' => array("Classic", "The Burning Crusade", "Wrath of the Lich King"), - 'stats' => array("Stärke", "Beweglichkeit", "Ausdauer", "Intelligenz", "Willenskraft"), + 'modes' => ["Normal / Normal 10", "Heroisch / Normal 25", "Heroisch 10", "Heroisch 25"], + 'expansions' => ["Classic", "The Burning Crusade", "Wrath of the Lich King"], + 'stats' => ["Stärke", "Beweglichkeit", "Ausdauer", "Intelligenz", "Willenskraft"], 'sources' => array( null, "Hergestellt", "Drop", "PvP", "Quest", "Händler", "Lehrer", "Entdeckung", "Einlösung", "Talent", "Startausrüstung", "Ereignis", "Erfolg" ), '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", 11 => "Drachisch", 12 => "Kalimagisch", 13 => "Gnomisch", 14 => "Trollisch", 33 => "Gossensprache", 35 => "Draeneiisch", 36 => "Zombie", 37 => "Gnomenbinär", 38 => "Goblinbinär" ), - 'gl' => array(null, "Erhebliche", "Geringe"), - 'si' => array(1 => "Allianz", -1 => "Nur für Allianz", 2 => "Horde", -2 => "Nur für Horde", 3 => "Beide"), - 'resistances' => array(null, 'Heiligwiderstand', 'Feuerwiderstand', 'Naturwiderstand', 'Frostwiderstand', 'Schattenwiderstand', 'Arkanwiderstand'), - 'sc' => array("Körperlich", "Heilig", "Feuer", "Natur", "Frost", "Schatten", "Arkan"), - 'dt' => array(null, "Magie", "Fluch", "Krankheit", "Gift", "Verstohlenheit", "Unsichtbarkeit", null, null, "Wut"), - 'cl' => array(null, "Krieger", "Paladin", "Jäger", "Schurke", "Priester", "Todesritter", "Schamane", "Magier", "Hexenmeister", null, "Druide"), - 'ra' => array(-2 => "Horde", -1 => "Allianz", "Beide", "Mensch", "Orc", "Zwerg", "Nachtelf", "Untoter", "Taure", "Gnom", "Troll", null, "Blutelf", "Draenei"), - 'rep' => array("Hasserfüllt", "Feindselig", "Unfreundlich", "Neutral", "Freundlich", "Wohlwollend", "Respektvoll", "Ehrfürchtig"), + 'gl' => [null, "Erhebliche", "Geringe"], + 'si' => [1 => "Allianz", -1 => "Nur für Allianz", 2 => "Horde", -2 => "Nur für Horde", 3 => "Beide"], + 'resistances' => [null, 'Heiligwiderstand', 'Feuerwiderstand', 'Naturwiderstand', 'Frostwiderstand', 'Schattenwiderstand', 'Arkanwiderstand'], + 'sc' => ["Körperlich", "Heilig", "Feuer", "Natur", "Frost", "Schatten", "Arkan"], + 'dt' => [null, "Magie", "Fluch", "Krankheit", "Gift", "Verstohlenheit", "Unsichtbarkeit", null, null, "Wut"], + 'cl' => [null, "Krieger", "Paladin", "Jäger", "Schurke", "Priester", "Todesritter", "Schamane", "Magier", "Hexenmeister", null, "Druide"], + 'ra' => [-2 => "Horde", -1 => "Allianz", "Beide", "Mensch", "Orc", "Zwerg", "Nachtelf", "Untoter", "Taure", "Gnom", "Troll", null, "Blutelf", "Draenei"], + 'rep' => ["Hasserfüllt", "Feindselig", "Unfreundlich", "Neutral", "Freundlich", "Wohlwollend", "Respektvoll", "Ehrfürchtig"], 'st' => array( "Vorgabe", "Katzengestalt", "Baum des Lebens", "Reisegestalt", "Wassergestalt", "Bärengestalt", null, null, "Terrorbärengestalt", null, @@ -223,8 +227,8 @@ $lang = array( "Tier", "Mechanisch", "Nicht spezifiziert", "Totem", "Haustier", "Gaswolke" ), 'fa' => array( - 1 => "Wolf", 2 => "Katze", 3 => "Spinne", 4 => "Bär", 5 => "Eber", 6 => "Krokilisk", 7 => "Aasvogel", 8 => "Krebs", - 9 => "Gorilla", 11 => "Raptor", 12 => "Weitschreiter", 20 => "Skorpid", 21 => "Schildkröte", 24 => "Fledermaus", 25 => "Hyäne", 26 => "Raubvogel", + 1 => "Wolf", 2 => "Katze", 3 => "Spinne", 4 => "Bär", 5 => "Eber", 6 => "Krokilisk", 7 => "Aasvogel", 8 => "Krebs", + 9 => "Gorilla", 11 => "Raptor", 12 => "Weitschreiter", 20 => "Skorpid", 21 => "Schildkröte", 24 => "Fledermaus", 25 => "Hyäne", 26 => "Raubvogel", 27 => "Windnatter", 30 => "Drachenfalke", 31 => "Felshetzer", 32 => "Sphärenjäger", 33 => "Sporensegler", 34 => "Netherrochen", 35 => "Schlange", 37 => "Motte", 38 => "Schimäre", 39 => "Teufelssaurier", 41 => "Silithid", 42 => "Wurm", 43 => "Rhinozeros", 44 => "Wespe", 45 => "Kernhund", 46 => "Geisterbestie" ), @@ -236,12 +240,6 @@ $lang = array( "Marschall / Kriegsherr", "Feldmarschall / Kriegsfürst", "Großmarschall / Oberster Kriegsfürst" ), ), - 'error' => array( - 'errNotFound' => "Seite nicht gefunden", - 'errPage' => "Was? Wie hast du... vergesst es!\n \n \nAnscheinend konnte die von Euch angeforderte Seite nicht gefunden werden. Wenigstens nicht in dieser Dimension.\n \n \nVielleicht lassen einige Justierungen an der\n\n[WH-799 Großkonfabulierungsmaschine]\n\ndie Seite plötzlich wieder auftauchen!\n\n\nOder, Ihr könnt es auch \nuns melden\n- die Stabilität des WH-799 ist umstritten, und wir möchten gern noch so ein Problem vermeiden...", - 'goStart' => "Zur Titelseite zurückkehren", - 'goForum' => "Forum für Rückmeldungen", - ), 'account' => array( 'doSignIn' => "Mit Eurem AoWoW-Konto anmelden", 'user' => "Benutzername", @@ -253,7 +251,7 @@ $lang = array( 'userNotFound' => "Ein Konto mit diesem Namen existiert nicht", 'userBanned' => "Dieses Konto wurde geschlossen", 'passMismatch' => "Die eingegebenen Passwörter stimmen nicht überein", - 'loginsExceeded' => "Die maximale Anzahl an Login-Versuchen von dieser IP wurde überschritten. Bitte versuchen Sie es in %s Minuten noch einmal.", + 'loginsExceeded'=> "Die maximale Anzahl an Login-Versuchen von dieser IP wurde überschritten. Bitte versuchen Sie es in %s Minuten noch einmal.", 'nameInUse' => "Es existiert bereits ein Konto mit diesem Namen", 'email' => "E-Mail-Adresse", 'unkError' => "Unbekannter Fehler bei der Accounterstellung", @@ -275,7 +273,7 @@ $lang = array( 'myAccount' => "Mein Account", 'editAccount' => "Benutze die folgenden Formulare um deine Account-Informationen zu aktualisieren", 'publicDesc' => "Öffentliche Beschreibung", - 'viewPubDesc' => "Die Beschreibung in deinem öffentlichen Profil ansehen", + 'viewPubDesc' => 'Die Beschreibung in deinem öffentlichen Profil ansehen', ), 'gameObject' => array( 'cat' => [0 => "Anderes", 9 => "Bücher", 3 => "Behälter", -5 => "Truhen", 25 => "Fischschwärme", -3 => "Kräuter", -4 => "Erzadern", -2 => "Quest", -6 => "Werkzeuge"], @@ -286,7 +284,8 @@ $lang = array( 'focusDesc' => "Zauber, die diesen Fokus benötigen, können an diesem Objekt gewirkt werden.", 'trap' => "Falle", 'triggeredBy' => "Ausgelöst durch", - 'capturePoint' => "Eroberungspunkt" + 'capturePoint' => "Eroberungspunkt", + 'foundIn' => "Dieses Objekt befindet sich in" ), 'npc' => array( 'classification'=> "Einstufung", @@ -304,6 +303,7 @@ $lang = array( 'melee' => "Nahkampf", 'ranged' => "Fernkampf", 'armor' => "Rüstung", + 'foundIn' => "Dieser NPC befindet sich in", 'rank' => [0 => "Normal", 1 => "Elite", 4 => "Rar", 2 => "Rar Elite", 3 => "Boss"], 'textTypes' => [null, "schreit", "sagt", "flüstert"], 'modes' => array( @@ -320,7 +320,7 @@ $lang = array( 'end' => "Ende", 'interval' => "Intervall", 'inProgress' => "Ereignis findet gerade statt", - 'category' => array("Nicht kategorisiert", "Feiertage", "Wiederkehrend", "Spieler vs. Spieler") + 'category' => ["Nicht kategorisiert", "Feiertage", "Wiederkehrend", "Spieler vs. Spieler"] ), 'achievement' => array( 'criteria' => "Kriterien", @@ -328,8 +328,8 @@ $lang = array( 'series' => "Reihe", 'outOf' => "von", 'criteriaType' => "Criterium Typ-Id:", - 'itemReward' => "Ihr bekommt:", - 'titleReward' => "Euch wird der Titel \"%s\" verliehen", + 'itemReward' => "Ihr bekommt", + 'titleReward' => 'Euch wird der Titel "%s" verliehen', 'slain' => "getötet", 'reqNumCrt' => "Benötigt" ), @@ -353,6 +353,7 @@ $lang = array( 'Miscellaneous' => "Diverse", 'Azeroth' => "Azeroth", 'CosmicMap' => "Kosmische Karte", + 'selectorLink' => " und ", ), 'zone' => array( // 'zone' => "Zone", @@ -363,23 +364,75 @@ $lang = array( ) ), 'quest' => array( - 'questLevel' => 'Stufe %s', + 'questLevel' => "Stufe %s", + 'requirements' => "Anforderungen", + 'reqMoney' => "Benötigtes Geld", + 'money' => "Geld", + 'additionalReq' => "Zusätzliche Anforderungen um das Quest zu erhalten", + 'reqRepWith' => 'Eure Reputation mit %s %s %s sein', + 'reqRepMin' => "muss mindestens", + 'reqRepMax' => "darf höchstens", + 'progress' => "Fortschritt", + 'provided' => "Bereitgestellt", + 'providedItem' => "Bereitgestellter Gegenstand", + 'completion' => "Abschluss", + 'description' => "Beschreibung", + 'playerSlain' => "Spieler getötet", + 'profession' => "Beruf", + 'timer' => "Zeitbegrenzung", + 'loremaster' => "Meister der Lehren", + 'suggestedPl' => "Empfohlene Spielerzahl", + 'keepsPvpFlag' => "Hält Euch im PvP", 'daily' => 'Täglich', - 'requirements' => 'Anforderungen', + 'weekly' => "Wöchentlich", + 'monthly' => "Monatlich", + 'sharable' => "Teilbar", + 'notSharable' => "Nicht teilbar", + 'repeatable' => "Wiederholbar", + 'reqQ' => "Benötigt", + 'reqQDesc' => "Um diese Quest zu erhalten, müsst ihr alle der nachfolgenden Quests abschließen", + 'reqOneQ' => "Benötigt eins von", + 'reqOneQDesc' => "Um diese Quest zu erhalten, müsst ihr eines der nachfolgenden Quests abschließen", + 'opensQ' => "Öffnet Quests", + 'opensQDesc' => "Es ist notwendig, diese Quest zu beenden, um die nachfolgenden Quests zu erhalten", + 'closesQ' => "Schließt Quests", + 'closesQDesc' => "Wenn ihr diese Quest beendet, sind die nachfolgenden Quests nicht mehr verfügbar", + 'enablesQ' => "Aktiviert", + 'enablesQDesc' => "Wenn diese Quest aktiv ist, sind die nachfolgenden Quests ebenfalls verfügbar", + 'enabledByQ' => "Aktiviert durch", + 'enabledByQDesc'=> "Ihr könnt diese Quest nur annehmen, wenn eins der nachfolgenden Quests aktiv ist", + 'gainsDesc' => "Bei Abschluss dieser Quest erhaltet Ihr", + 'theTitle' => 'den Titel "%s"', + 'mailDelivery' => "Ihr werdet diesen Brief %serhalten", + 'mailIn' => "nach %s ", + 'unavailable' => "Diese Quest wurde als nicht genutzt markiert und kann weder erhalten noch vollendet werden.", + 'experience' => "Erfahrung", + 'expConvert' => "(oder %s, wenn auf Stufe %d vollendet)", + 'expConvert2' => "%s, wenn auf Stufe %d vollendet", + 'chooseItems' => "Auf Euch wartet eine dieser Belohnungen", + 'receiveItems' => "Ihr bekommt", + 'receiveAlso' => "Ihr bekommt außerdem", + 'spellCast' => "Der folgende Zauber wird auf Euch gewirkt", + 'spellLearn' => "Ihr erlernt", + 'bonusTalents' => "Talentpunkte", + 'spellDisplayed'=> ' (%s wird angezeigt)', 'questInfo' => array( - 0 => 'Normal', 1 => 'Gruppe', 21 => 'Leben', 41 => 'PvP', 62 => 'Schlachtzug', 81 => 'Dungeon', 82 => 'Weltereignis', - 83 => 'Legendär', 84 => 'Eskorte', 85 => 'Heroisch', 88 => 'Schlachtzug (10)', 89 => 'Schlachtzug (25)' + 0 => "Normal", 1 => "Gruppe", 21 => "Leben", 41 => "PvP", 62 => "Schlachtzug", 81 => "Dungeon", 82 => "Weltereignis", + 83 => "Legendär", 84 => "Eskorte", 85 => "Heroisch", 88 => "Schlachtzug (10)", 89 => "Schlachtzug (25)" + ), + 'cat' => array( + // todo: after zones ) ), 'title' => array( 'cat' => array( - 'Allgemein', 'Spieler gegen Spieler', 'Ruf', 'Dungeon & Schlachtzug', 'Quests', 'Berufe', 'Weltereignisse' + "Allgemein", "Spieler gegen Spieler", "Ruf", "Dungeon & Schlachtzug", "Quests", "Berufe", "Weltereignisse" ) ), 'skill' => array( 'cat' => array( - -6 => 'Haustiere', -5 => 'Reittiere', -4 => 'Völkerfertigkeiten', 5 => 'Attribute', 6 => 'Waffenfertigkeiten', 7 => 'Klassenfertigkeiten', 8 => 'Rüstungssachverstand', - 9 => 'Nebenberufe', 10 => 'Sprachen', 11 => 'Berufe' + -6 => "Haustiere", -5 => "Reittiere", -4 => "Völkerfertigkeiten", 5 => "Attribute", 6 => "Waffenfertigkeiten", 7 => "Klassenfertigkeiten", 8 => "Rüstungssachverstand", + 9 => "Nebenberufe", 10 => "Sprachen", 11 => "Berufe" ) ), 'currency' => array( @@ -480,16 +533,16 @@ $lang = array( 'AMMOSLOT' => "Munition", 'STEAM' => "Dampfdruck", 'WRATH' => "Zorn", 'PYRITE' => "Pyrit", 'HEAT' => "Hitze", 'OOZE' => "Schlamm", 'BLOOD_POWER' => "Blutmacht" ), - 'relItems' => array ( + 'relItems' => array( 'base' => "%s im Zusammenhang mit %s anzeigen", 'link' => " oder ", - 'recipes' => "Rezeptgegenstände", - 'crafted' => "Hergestellte Gegenstände" + 'recipes' => 'Rezeptgegenstände', + 'crafted' => 'Hergestellte Gegenstände' ), 'cat' => array( 7 => "Klassenfertigkeiten", -13 => "Glyphen", - -11 => array("Sachverstand", 8 => "Rüstung", 6 => "Waffen", 10 => "Sprachen"), + -11 => ["Sachverstand", 8 => "Rüstung", 6 => "Waffen", 10 => "Sprachen"], -4 => "Völkerfertigkeiten", -2 => "Talente", -6 => "Haustiere", @@ -502,22 +555,22 @@ $lang = array( 765 => "Sporensegler", 781 => "Teufelssaurier", 218 => "Weitschreiter", 785 => "Wespe", 656 => "Windnatter", 208 => "Wolf", 784 => "Wurm", 204 => "Leerwandler", 205 => "Sukkubus", 189 => "Teufelsjäger", 761 => "Teufelswache", 188 => "Wichtel", ), - -7 => array("Begleitertalente", 410 => "Gerissenheit", 411 => "Wildheit", 409 => "Hartnäckigkeit"), + -7 => ["Begleitertalente", 410 => "Gerissenheit", 411 => "Wildheit", 409 => "Hartnäckigkeit"], 11 => array( "Berufe", 171 => "Alchemie", - 164 => array("Schmiedekunst", 9788 => "Rüstungsschmied", 9787 => "Waffenschmied", 17041 => "Axtschmiedemeister", 17040 => "Hammerschmiedemeister", 17039 => "Schwertschmiedemeister"), + 164 => ["Schmiedekunst", 9788 => "Rüstungsschmied", 9787 => "Waffenschmied", 17041 => "Axtschmiedemeister", 17040 => "Hammerschmiedemeister", 17039 => "Schwertschmiedemeister"], 333 => "Verzauberkunst", - 202 => array("Ingenieurskunst", 20219 => "Gnomeningenieurskunst", 20222 => "Gobliningenieurskunst"), + 202 => ["Ingenieurskunst", 20219 => "Gnomeningenieurskunst", 20222 => "Gobliningenieurskunst"], 182 => "Kräuterkunde", 773 => "Inschriftenkunde", 755 => "Juwelenschleifen", - 165 => array("Lederverarbeitung", 10656 => "Drachenschuppenlederverarbeitung", 10658 => "Elementarlederverarbeitung", 10660 => "Stammeslederverarbeitung"), + 165 => ["Lederverarbeitung", 10656 => "Drachenschuppenlederverarbeitung", 10658 => "Elementarlederverarbeitung", 10660 => "Stammeslederverarbeitung"], 186 => "Bergbau", 393 => "Kürschnerei", - 197 => array("Schneiderei", 26798 => "Mondstoffschneiderei", 26801 => "Schattenstoffschneiderei", 26797 => "Zauberfeuerschneiderei"), + 197 => ["Schneiderei", 26798 => "Mondstoffschneiderei", 26801 => "Schattenstoffschneiderei", 26797 => "Zauberfeuerschneiderei"], ), - 9 => array("Nebenberufe", 185 => "Kochkunst", 129 => "Erste Hilfe", 356 => "Angeln", 762 => "Reiten"), + 9 => ["Nebenberufe", 185 => "Kochkunst", 129 => "Erste Hilfe", 356 => "Angeln", 762 => "Reiten"], -8 => "NPC-Fähigkeiten", -9 => "GM-Fähigkeiten", 0 => "Nicht kategorisiert" @@ -534,7 +587,7 @@ $lang = array( 20 => "Angelruten", 14 => "Diverse" ), 'subClassMasks' => array( - 0x02A5F3 => 'Nahkampfwaffe', 0x0060 => 'Schild', 0x04000C => 'Distanzwaffe', 0xA091 => 'Einhandnahkampfwaffe' + 0x02A5F3 => "Nahkampfwaffe", 0x0060 => "Schild", 0x04000C => "Distanzwaffe", 0xA091 => "Einhandnahkampfwaffe" ), 'traitShort' => array( 'atkpwr' => "Angr", 'rgdatkpwr' => "DAngr", 'splpwr' => "ZMacht", 'arcsplpwr' => "ArkM", 'firsplpwr' => "FeuM", diff --git a/localization/locale_enus.php b/localization/locale_enus.php index f9ff87fe..97ca859a 100644 --- a/localization/locale_enus.php +++ b/localization/locale_enus.php @@ -21,11 +21,11 @@ $lang = array( 'feedback' => "Feedback", 'numSQL' => "Number of MySQL queries", 'timeSQL' => "Time of MySQL queries", - 'noJScript' => "This site makes extensive use of JavaScript. Please enable JavaScript in your browser.", + 'noJScript' => 'This site makes extensive use of JavaScript. Please enable JavaScript in your browser.', 'userProfiles' => "My Profiles", 'pageNotFound' => "This %s doesn't exist.", 'gender' => "Gender", - 'sex' => [null, 'Male', 'Female'], + 'sex' => [null, "Male", "Female"], 'players' => "Players", 'quickFacts' => "Quick Facts", 'screenshots' => "Screenshots", @@ -50,7 +50,7 @@ $lang = array( 'oneFilter' => "At least one", 'applyFilter' => "Apply filter", 'resetForm' => "Reset Form", - 'refineSearch' => "Tip: Refine your search by browsing a subcategory.", + 'refineSearch' => 'Tip: Refine your search by browsing a subcategory.', 'clear' => "clear", 'exactMatch' => "Exact match", '_reqLevel' => "Required level", @@ -69,6 +69,8 @@ $lang = array( 'findUpgrades' => "Find upgrades...", // misc Tools + 'errPageTitle' => "Page not found", + 'nfPageTitle' => "Error", 'subscribe' => "Subscribe", 'mostComments' => ["Yesterday", "Past %d Days"], 'utilities' => array( @@ -87,7 +89,7 @@ $lang = array( 'cappedHint' => 'Tip: Remove weights for capped statistics such as Hit rating.', 'groupBy' => "Group By", 'gb' => array( - ['None', 'none'], ['Slot', 'slot'], ['Level', 'level'], ['Source', 'source'] + ["None", "none"], ["Slot", "slot"], ["Level", "level"], ["Source", "source"] ), 'compareTool' => "Item Comparison Tool", 'talentCalc' => "Talent Calculator", @@ -163,17 +165,19 @@ $lang = array( 'zone' => "zone", 'zones' => "Zones", + 'honorPoints' => "Honor Points", // tooltip_honorpoints + 'arenaPoints' => "Arena Points", // tooltip_arenapoints 'heroClass' => "Hero class", 'resource' => "Resource", 'resources' => "Resources", 'role' => "Role", 'roles' => "Roles", 'specs' => "Specs", - '_roles' => ['Healer', 'Melee DPS', 'Ranged DPS', 'Tank'], + '_roles' => ["Healer", "Melee DPS", "Ranged DPS", "Tank"], - 'modes' => ['Normal / Normal 10', 'Heroic / Normal 25', 'Heroic 10', 'Heroic 25'], - 'expansions' => array("Classic", "The Burning Crusade", "Wrath of the Lich King"), - 'stats' => array("Strength", "Agility", "Stamina", "Intellect", "Spirit"), + 'modes' => ["Normal / Normal 10", "Heroic / Normal 25", "Heroic 10", "Heroic 25"], + 'expansions' => ["Classic", "The Burning Crusade", "Wrath of the Lich King"], + 'stats' => ["Strength", "Agility", "Stamina", "Intellect", "Spirit"], 'sources' => array( null, "Crafted", "Drop", "PvP", "Quest", "Vendor", "Trainer", "Discovery", "Redemption", "Talent", "Starter", "Event", "Achievement" @@ -182,14 +186,14 @@ $lang = array( 1 => "Orcish", 2 => "Darnassian", 3 => "Taurahe", 6 => "Dwarvish", 7 => "Common", 8 => "Demonic", 9 => "Titan", 10 => "Thalassian", 11 => "Draconic", 12 => "Kalimag", 13 => "Gnomish", 14 => "Troll", 33 => "Gutterspeak", 35 => "Draenei", 36 => "Zombie", 37 => "Gnomish Binary", 38 => "Goblin Binary" ), - 'gl' => array(null, "Major", "Minor"), - 'si' => array(1 => "Alliance", -1 => "Alliance only", 2 => "Horde", -2 => "Horde only", 3 => "Both"), - 'resistances' => array(null, 'Holy Resistance', 'Fire Resistance', 'Nature Resistance', 'Frost Resistance', 'Shadow Resistance', 'Arcane Resistance'), - 'dt' => array(null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"), - 'sc' => array("Physical", "Holy", "Fire", "Nature", "Frost", "Shadow", "Arcane"), - 'cl' => array(null, "Warrior", "Paladin", "Hunter", "Rogue", "Priest", "Death Knight", "Shaman", "Mage", "Warlock", null, "Druid"), - 'ra' => array(-2 => "Horde", -1 => "Alliance", "Both", "Human", "Orc", "Dwarf", "Night Elf", "Undead", "Tauren", "Gnome", "Troll", null, "Blood Elf", "Draenei"), - 'rep' => array("Hated", "Hostile", "Unfriendly", "Neutral", "Friendly", "Honored", "Revered", "Exalted"), + 'gl' => [null, "Major", "Minor"], + 'si' => [1 => "Alliance", -1 => "Alliance only", 2 => "Horde", -2 => "Horde only", 3 => "Both"], + 'resistances' => [null, 'Holy Resistance', 'Fire Resistance', 'Nature Resistance', 'Frost Resistance', 'Shadow Resistance', 'Arcane Resistance'], + 'dt' => [null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"], + 'sc' => ["Physical", "Holy", "Fire", "Nature", "Frost", "Shadow", "Arcane"], + 'cl' => [null, "Warrior", "Paladin", "Hunter", "Rogue", "Priest", "Death Knight", "Shaman", "Mage", "Warlock", null, "Druid"], + 'ra' => [-2 => "Horde", -1 => "Alliance", "Both", "Human", "Orc", "Dwarf", "Night Elf", "Undead", "Tauren", "Gnome", "Troll", null, "Blood Elf", "Draenei"], + 'rep' => ["Hated", "Hostile", "Unfriendly", "Neutral", "Friendly", "Honored", "Revered", "Exalted"], 'st' => array( "Default", "Cat Form", "Tree of Life", "Travel Form", "Aquatic Form", "Bear From", null, null, "Dire Bear Form", null, @@ -223,12 +227,6 @@ $lang = array( "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" ), ), - 'error' => array( - 'errNotFound' => "Page not found", - 'errPage' => "What? How did you... nevermind that!\n \n \nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n \n \nPerhaps a few tweaks to the [WH-799 Major Confabulation Engine] may result in the page suddenly making an appearance!\n\n\nOr, you can try \ncontacting us\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", - 'goStart' => "Return to the homepage", - 'goForum' => "Feedback forum", - ), 'account' => array( 'doSignIn' => "Log in to your AoWoW Account", 'user' => "Username", @@ -240,7 +238,7 @@ $lang = array( 'userNotFound' => "Such user does not exists", 'userBanned' => "This Account was closed", 'passMismatch' => "Entered passwords does not match", - 'loginsExceeded' => "The maximum number of logins from this IP has been exceeded. Please try again in %s minutes.", + 'loginsExceeded'=> "The maximum number of logins from this IP has been exceeded. Please try again in %s minutes.", 'nameInUse' => "Such user already exists", 'email' => "Email address", 'unkError' => "Unknown error on account create", @@ -262,7 +260,7 @@ $lang = array( 'myAccount' => "My Account", 'editAccount' => "Simply use the forms below to update your account information", 'publicDesc' => "Public Description", - 'viewPubDesc' => "View your Public Description in your Profile Page", + 'viewPubDesc' => 'View your Public Description in your Profile Page', ), 'gameObject' => array( 'cat' => [0 => "Other", 9 => "Books", 3 => "Containers", -5 => "Chests", 25 => "Fishing Pools", -3 => "Herbs", -4 => "Mineral Veins", -2 => "Quest", -6 => "Tools"], @@ -309,7 +307,7 @@ $lang = array( 'end' => "End", 'interval' => "Interval", 'inProgress' => "Event is currently in progress", - 'category' => array("Uncategorized", "Holidays", "Recurring", "Player vs. Player") + 'category' => ["Uncategorized", "Holidays", "Recurring", "Player vs. Player"] ), 'achievement' => array( 'criteria' => "Criteria", @@ -317,8 +315,8 @@ $lang = array( 'series' => "Series", 'outOf' => "out of", 'criteriaType' => "Criterium Type-Id:", - 'itemReward' => "You will receive:", - 'titleReward' => "You shall be granted the title \"%s\"", + 'itemReward' => "You will receive", + 'titleReward' => 'You shall be granted the title "%s"', 'slain' => "slain", 'reqNumCrt' => "Requires" ), @@ -353,23 +351,75 @@ $lang = array( ) ), 'quest' => array( - 'questLevel' => 'Level %s', - 'daily' => 'Daily', - 'requirements' => 'Requirements', + 'questLevel' => "Level %s", + 'requirements' => "Requirements", + 'reqMoney' => "Required money", + 'money' => "Money", + 'additionalReq' => "Additional requirements to obtain this quest", + 'reqRepWith' => 'Your reputation with %s must be %s %s', + 'reqRepMin' => "at least", + 'reqRepMax' => "lower than", + 'progress' => "Progress", + 'provided' => "Provided", + 'providedItem' => "Provided item", + 'completion' => "Completion", + 'description' => "Description", + 'playerSlain' => "Players slain", + 'profession' => "Profession", + 'timer' => "Timer", + 'loremaster' => "Loremaster", + 'suggestedPl' => "Suggested players", + 'keepsPvpFlag' => "Keeps you PvP flagged", + 'daily' => "Daily", + 'weekly' => "Weekly", + 'monthly' => "Monthly", + 'sharable' => "Sharable", + 'notSharable' => "Not sharable", + 'repeatable' => "Repeatable", + 'reqQ' => "Requires", + 'reqQDesc' => "To take this quest, you must complete all these quests", + 'reqOneQ' => "Requires one of", + 'reqOneQDesc' => "To take this quest, you must complete one of the following quests", + 'opensQ' => "Opens Quests", + 'opensQDesc' => "Completing this quest is requires to take this quests", + 'closesQ' => "Closes Quests", + 'closesQDesc' => "After completing this quest, you will not be able to take these quests", + 'enablesQ' => "Enables", + 'enablesQDesc' => "When this quest is active, these quests are also available", + 'enabledByQ' => "Enabled by", + 'enabledByQDesc'=> "This quest is available only, when one of these quests are active", + 'gainsDesc' => "Upon completion of this quest you will gain", + 'theTitle' => 'the title "%s"', + 'mailDelivery' => "You will receive this letter %s", + 'mailIn' => "after %s", + 'unavailable' => "This quest was marked obsolete and cannot be obtained or completed.", + 'experience' => "experience", + 'expConvert' => "(or %s if completed at level %d)", + 'expConvert2' => "%s if completed at level %d", + 'chooseItems' => "You will be able to choose one of these rewards", + 'receiveItems' => "You will receive", + 'receiveAlso' => "You will also receive", + 'spellCast' => "The following spell will be cast on you", + 'spellLearn' => "You will learn", + 'bonusTalents' => "talent points", + 'spellDisplayed'=> ' (%s is displayed)', 'questInfo' => array( - 0 => 'Normal', 1 => 'Group', 21 => 'Life', 41 => 'PvP', 62 => 'Raid', 81 => 'Dungeon', 82 => 'World Event', - 83 => 'Legendary', 84 => 'Escort', 85 => 'Heroic', 88 => 'Raid (10)', 89 => 'Raid (25)' + 0 => "Normal", 1 => "Group", 21 => "Life", 41 => "PvP", 62 => "Raid", 81 => "Dungeon", 82 => "World Event", + 83 => "Legendary", 84 => "Escort", 85 => "Heroic", 88 => "Raid (10)", 89 => "Raid (25)" + ), + 'cat' => array( + // todo: after zones ) ), 'title' => array( 'cat' => array( - 'General', 'Player vs. Player', 'Reputation', 'Dungeons & Raids', 'Quests', 'Professions', 'World Events' + "General", "Player vs. Player", "Reputation", "Dungeons & Raids", "Quests", "Professions", "World Events" ) ), 'skill' => array( 'cat' => array( - -6 => 'Companions', -5 => 'Mounts', -4 => 'Racial Traits', 5 => 'Attributes', 6 => 'Weapon Skills', 7 => 'Class Skills', 8 => 'Armor Proficiencies', - 9 => 'Secondary Skills', 10 => 'Languages', 11 => 'Professions' + -6 => "Companions", -5 => "Mounts", -4 => "Racial Traits", 5 => "Attributes", 6 => "Weapon Skills", 7 => "Class Skills", 8 => "Armor Proficiencies", + 9 => "Secondary Skills", 10 => "Languages", 11 => "Professions" ) ), 'currency' => array( @@ -473,8 +523,8 @@ $lang = array( 'relItems' => array ( 'base' => "Show %s related to %s", 'link' => " or ", - 'recipes' => "recipe items", - 'crafted' => "crafted items" + 'recipes' => 'recipe items', + 'crafted' => 'crafted items' ), 'cat' => array( 7 => "Class Skills", // classList @@ -492,22 +542,22 @@ $lang = array( 218 => "Tallstrider", 251 => "Turtle", 766 => "Warp Stalker", 785 => "Wasp", 656 => "Wind Serpent", 208 => "Wolf", 784 => "Worm", 761 => "Felguard", 189 => "Felhunter", 188 => "Imp", 205 => "Succubus", 204 => "Voidwalker" ), - -7 => array("Pet Talents", 410 => "Cunning", 411 => "Ferocity", 409 => "Tenacity"), + -7 => ["Pet Talents", 410 => "Cunning", 411 => "Ferocity", 409 => "Tenacity"], 11 => array( "Professions", 171 => "Alchemy", - 164 => array("Blacksmithing", 9788 => "Armorsmithing", 9787 => "Weaponsmithing", 17041 => "Master Axesmithing", 17040 => "Master Hammersmithing", 17039 => "Master Swordsmithing"), + 164 => ["Blacksmithing", 9788 => "Armorsmithing", 9787 => "Weaponsmithing", 17041 => "Master Axesmithing", 17040 => "Master Hammersmithing", 17039 => "Master Swordsmithing"], 333 => "Enchanting", - 202 => array("Engineering", 20219 => "Gnomish Engineering", 20222 => "Goblin Engineering"), + 202 => ["Engineering", 20219 => "Gnomish Engineering", 20222 => "Goblin Engineering"], 182 => "Herbalism", 773 => "Inscription", 755 => "Jewelcrafting", - 165 => array("Leatherworking", 10656 => "Dragonscale Leatherworking", 10658 => "Elemental Leatherworking", 10660 => "Tribal Leatherworking"), + 165 => ["Leatherworking", 10656 => "Dragonscale Leatherworking", 10658 => "Elemental Leatherworking", 10660 => "Tribal Leatherworking"], 186 => "Mining", 393 => "Skinning", - 197 => array("Tailoring", 26798 => "Mooncloth Tailoring", 26801 => "Shadoweave Tailoring", 26797 => "Spellfire Tailoring"), + 197 => ["Tailoring", 26798 => "Mooncloth Tailoring", 26801 => "Shadoweave Tailoring", 26797 => "Spellfire Tailoring"], ), - 9 => array ("Secondary Skills", 185 => "Cooking", 129 => "First Aid", 356 => "Fishing", 762 => "Riding"), + 9 => ["Secondary Skills", 185 => "Cooking", 129 => "First Aid", 356 => "Fishing", 762 => "Riding"], -8 => "NPC Abilities", -9 => "GM Abilities", 0 => "Uncategorized" @@ -524,7 +574,7 @@ $lang = array( 20 => "Fishing Poles", 14 => "Miscellaneous" ), 'subClassMasks' => array( - 0x02A5F3 => 'Melee Weapon', 0x0060 => 'Shield', 0x04000C => 'Ranged Weapon', 0xA091 => 'One-Handed Melee Weapon' + 0x02A5F3 => "Melee Weapon", 0x0060 => "Shield", 0x04000C => "Ranged Weapon", 0xA091 => "One-Handed Melee Weapon" ), 'traitShort' => array( 'atkpwr' => "AP", 'rgdatkpwr' => "RAP", 'splpwr' => "SP", 'arcsplpwr' => "ArcP", 'firsplpwr' => "FireP", @@ -662,7 +712,7 @@ $lang = array( null, null, "Arrow", "Bullet", null ), 'elixirType' => [null, "Battle", "Guardian"], - 'cat' => array( // ordered by content firts, then alphabeticaly + 'cat' => array( // ordered by content first, then alphabeticaly 2 => "Weapons", // self::$spell['weaponSubClass'] 4 => array("Armor", array( 1 => "Cloth Armor", 2 => "Leather Armor", 3 => "Mail Armor", 4 => "Plate Armor", 6 => "Shields", 7 => "Librams", diff --git a/localization/locale_eses.php b/localization/locale_eses.php index 786829d0..8f2939db 100644 --- a/localization/locale_eses.php +++ b/localization/locale_eses.php @@ -26,11 +26,11 @@ $lang = array( 'feedback' => "Feedback", 'numSQL' => "Número de consultas de MySQL", 'timeSQL' => "El tiempo para las consultas de MySQL", - 'noJScript' => "Este sitio hace uso intenso de JavaScript. Por favor habilita JavaScript en tu navegador.", + 'noJScript' => 'Este sitio hace uso intenso de JavaScript. Por favor habilita JavaScript en tu navegador.', 'userProfiles' => "Tus personajes", // translate.google :x 'pageNotFound' => "Este %s no existe.", 'gender' => "Género", - 'sex' => [null, 'Hombre', 'Mujer'], + 'sex' => [null, "Hombre", "Mujer"], 'players' => "Jugadores", 'quickFacts' => "Notas rápidas", 'screenshots' => "Capturas de pantalla", @@ -55,7 +55,7 @@ $lang = array( 'oneFilter' => "Por lo menos uno", 'applyFilter' => "Aplicar filtro", 'resetForm' => "Reiniciar formulario", - 'refineSearch' => "Sugerencia: Refina tu búsqueda llendo a una subcategoría.", + 'refineSearch' => 'Sugerencia: Refina tu búsqueda llendo a una subcategoría.', 'clear' => "borrar", 'exactMatch' => "Coincidencia exacta", '_reqLevel' => "Nivel requerido", @@ -65,7 +65,7 @@ $lang = array( 'disabled' => "[Disabled]", 'disabledHint' => "[Cannot be attained or completed]", 'serverside' => "[Serverside]", - 'serversideHint' => "[These informations are not in the Client and have been provided by sniffing and/or guessing.]", + 'serversideHint'=> "[These informations are not in the Client and have been provided by sniffing and/or guessing.]", // red buttons 'links' => "Enlaces", @@ -74,6 +74,8 @@ $lang = array( 'findUpgrades' => "Buscar mejoras...", // misc Tools + 'errPageTitle' => "Página no encontrada", + 'nfPageTitle' => "Error", 'subscribe' => "Suscribirme", 'mostComments' => ["Ayer", "Pasados %d días"], 'utilities' => array( @@ -92,7 +94,7 @@ $lang = array( 'cappedHint' => 'Consejo: Elimina escalas para atributos al máximo como el Índice de Golpe.', 'groupBy' => "Agrupar por", 'gb' => array( - ['Ninguno', 'none'], ['Casilla', 'slot'], ['Nivel', 'level'], ['Fuente', 'source'] + ["Ninguno", "none"], ["Casilla", "slot"], ["Nivel", "level"], ["Fuente", "source"] ), 'compareTool' => "Herramienta de comparación de objetos", 'talentCalc' => "Calculadora de talentos", @@ -168,17 +170,19 @@ $lang = array( 'zone' => "zona", 'zones' => "Zonas", + 'honorPoints' => "Puntos de Honor", + 'arenaPoints' => "Puntos de arena", 'heroClass' => "Clase héroe", 'resource' => "Recurso", 'resources' => "Recursos", 'role' => "Rol", 'roles' => "Roles", 'specs' => "Especializaciones", - '_roles' => ['Sanador', 'DPS cuerpo', 'DPS a distancia', 'Tanque'], + '_roles' => ["Sanador", "DPS cuerpo", "DPS a distancia", "Tanque"], - 'modes' => ['Normal / Normal 10', 'Heroico / Normal 25', 'Heróico 10', 'Heróico 25'], - 'expansions' => array("World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"), - 'stats' => array("Fuerza", "Agilidad", "Aguante", "Intelecto", "Espíritu"), + 'modes' => ["Normal / Normal 10", "Heroico / Normal 25", "Heróico 10", "Heróico 25"], + 'expansions' => ["World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"], + 'stats' => ["Fuerza", "Agilidad", "Aguante", "Intelecto", "Espíritu"], 'sources' => array( null, "Creado", "Encontrado", "JcJ", "Misión", "Vendedor", "Entrenador", "Descubierto", "Redención", "Talento", "Habilidad Inicial", "Evento", "Logro" @@ -187,14 +191,14 @@ $lang = array( 1 => "Orco", 2 => "Darnassiano", 3 => "Taurahe", 6 => "Enánico", 7 => "Lengua común", 8 => "Demoníaco", 9 => "Titánico", 10 => "Thalassiano", 11 => "Dracónico", 12 => "Kalimag", 13 => "Gnomótico", 14 => "Trol", 33 => "Viscerálico", 35 => "Draenei", 36 => "Zombie", 37 => "Binario gnomo", 38 => "Binario goblin" ), - 'gl' => array(null, "Sublime", "Menor"), - 'si' => array(1 => "Alianza", -1 => "Alianza solamente", 2 => "Horda", -2 => "Horda solamente", 3 => "Ambos"), - 'resistances' => array(null, 'Resistencia a lo Sagrado', 'v', 'Resistencia a la Naturaleza', 'Resistencia a la Escarcha', 'Resistencia a las Sombras', 'Resistencia a lo Arcano'), - 'sc' => array("Física", "Sagrado", "Fuego", "Naturaleza", "Escarcha", "Sombras", "Arcano"), - 'dt' => array(null, "Magia", "Maldición", "Enfermedad", "Veneno", "Sigilo", "Invisibilidad", null, null, "Enfurecer"), - 'cl' => array(null, "Guerrero", "Paladín", "Cazador", "Pícaro", "Sacerdote", "Caballero de la Muerte", "Chamán", "Mago", "Brujo", null, "Druida"), - 'ra' => array(-2 => "Horda", -1 => "Alianza", "Ambos", "Humano", "Orco", "Enano", "Elfo de la noche", "No-muerto", "Tauren", "Gnomo", "Trol ", null, "Blood Elf", "Elfo de sangre"), - 'rep' => array("Odiado", "Hostil", "Adverso", "Neutral", "Amistoso", "Honorable", "Reverenciado", "Exaltado"), + 'gl' => [null, "Sublime", "Menor"], + 'si' => [1 => "Alianza", -1 => "Alianza solamente", 2 => "Horda", -2 => "Horda solamente", 3 => "Ambos"], + 'resistances' => [null, 'Resistencia a lo Sagrado', 'v', 'Resistencia a la Naturaleza', 'Resistencia a la Escarcha', 'Resistencia a las Sombras', 'Resistencia a lo Arcano'], + 'sc' => ["Física", "Sagrado", "Fuego", "Naturaleza", "Escarcha", "Sombras", "Arcano"], + 'dt' => [null, "Magia", "Maldición", "Enfermedad", "Veneno", "Sigilo", "Invisibilidad", null, null, "Enfurecer"], + 'cl' => [null, "Guerrero", "Paladín", "Cazador", "Pícaro", "Sacerdote", "Caballero de la Muerte", "Chamán", "Mago", "Brujo", null, "Druida"], + 'ra' => [-2 => "Horda", -1 => "Alianza", "Ambos", "Humano", "Orco", "Enano", "Elfo de la noche", "No-muerto", "Tauren", "Gnomo", "Trol ", null, "Blood Elf", "Elfo de sangre"], + 'rep' => ["Odiado", "Hostil", "Adverso", "Neutral", "Amistoso", "Honorable", "Reverenciado", "Exaltado"], 'st' => array( "Defecto", "Forma felina", "Árbol de vida", "Forma de viaje", "Forma acuática", "Forma de oso", null, null, "Forma de oso temible", null, @@ -215,8 +219,8 @@ $lang = array( "Alimaña", "Mecánico", "Sin especificar", "Tótem", "Mascota mansa", "Nube de gas" ), 'fa' => array( - 1 => "Lobo", 2 => "Felino", 3 => "Araña", 4 => "Oso", 5 => "Jabalí", 6 => "Crocolisco", 7 => "Carroñero", 8 => "Cangrejo", - 9 => "Gorila", 11 => "Raptor", 12 => "Zancaalta", 20 => "Escórpido", 21 => "Tortuga", 24 => "Murciélago", 25 => "Hiena", 26 => "Ave rapaz", + 1 => "Lobo", 2 => "Felino", 3 => "Araña", 4 => "Oso", 5 => "Jabalí", 6 => "Crocolisco", 7 => "Carroñero", 8 => "Cangrejo", + 9 => "Gorila", 11 => "Raptor", 12 => "Zancaalta", 20 => "Escórpido", 21 => "Tortuga", 24 => "Murciélago", 25 => "Hiena", 26 => "Ave rapaz", 27 => "Serpiente alada", 30 => "Dracohalcón", 31 => "Devastador", 32 => "Acechador deformado",33 => "Esporiélago", 34 => "Raya abisal", 35 => "Serpiente", 37 => "Palomilla", 38 => "Quimera", 39 => "Demosaurio", 41 => "Silítido", 42 => "Gusano", 43 => "Rinoceronte", 44 => "Avispa", 45 => "Can del Núcleo", 46 => "Bestia espíritu" ), @@ -228,12 +232,6 @@ $lang = array( "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" ), ), - 'error' => array( - 'errNotFound' => "Page not found", - 'errPage' => "What? How did you... nevermind that!\n \n \nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n \n \nPerhaps a few tweaks to the [WH-799 Major Confabulation Engine] may result in the page suddenly making an appearance!\n\n\nOr, you can try \ncontacting us\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", - 'goStart' => "Return to the homepage", - 'goForum' => "Feedback forum", - ), 'account' => [], 'gameObject' => array( 'cat' => [0 => "Otros", 9 => "Libros", 3 => "Contenedores", -5 => "Cofres", 25 => "[Fishing Pools]", -3 => "Hierbas", -4 => "Venas de minerales", -2 => "Misiones", -6 => "Herramientas"], @@ -278,7 +276,7 @@ $lang = array( 'end' => "Termina", 'interval' => "Intervalo", 'inProgress' => "El evento está en progreso actualmente", - 'category' => array("Sin categoría", "Vacacionales", "Periódicos", "Jugador contra Jugador") + 'category' => ["Sin categoría", "Vacacionales", "Periódicos", "Jugador contra Jugador"] ), 'achievement' => array( 'criteria' => "Requisitos", @@ -286,8 +284,8 @@ $lang = array( 'series' => "Serie", 'outOf' => "de", 'criteriaType' => "Criterium Type-Id:", - 'itemReward' => "Recibirás:", - 'titleReward' => "Deberías obtener el título \"%s\"", + 'itemReward' => "Recibirás", + 'titleReward' => 'Deberías obtener el título "%s"', 'slain' => "matado", 'reqNumCrt' => "Requiere" ), @@ -322,22 +320,74 @@ $lang = array( ), 'quest' => array( 'questLevel' => 'Nivel %s', - 'daily' => 'Diaria', 'requirements' => 'Requisitos', + 'reqMoney' => 'Dinero necesario', + 'money' => 'Dinero', + 'additionalReq' => "[Additional requirements to obtain this quest]", + 'reqRepWith' => 'Tu reputación con %s debe ser %s %s', + 'reqRepMin' => "de al menos", + 'reqRepMax' => "menor que", + 'progress' => "Progreso", + 'provided' => "Provisto", + 'providedItem' => "Objeto provisto", + 'completion' => "Terminación", + 'description' => "Descripción", + 'playerSlain' => "Jugadores derrotados", + 'profession' => "Profesión", + 'timer' => "Tiempo", + 'loremaster' => "Maestro cultural", + 'suggestedPl' => "Jugadores sugeridos", + 'keepsPvpFlag' => "Mantiene el JcJ activado", + 'daily' => 'Diaria', + 'weekly' => "Semanal", + 'monthly' => "Mensual", + 'sharable' => "Compartible", + 'notSharable' => "No se puede compartir", + 'repeatable' => "Repetible", + 'reqQ' => "Requiere", + 'reqQDesc' => "Para aceptar esta misión, debes completar esta(s) mision(es)", + 'reqOneQ' => "Requiere una de", + 'reqOneQDesc' => "Para aceptar esta misión debes haber completado alguna de estas misiones", + 'opensQ' => "Desbloquea", + 'opensQDesc' => "Es necesario completar esta misión para aceptar esa(s) mision(es)", + 'closesQ' => "Bloquea", + 'closesQDesc' => "Si completas esta misión, no podras aceptar esta(s) mision(es)", + 'enablesQ' => "Activa", + 'enablesQDesc' => "Cuando estas realizando esta misión, podras tambien aceptar esta(s) mision(es)", + 'enabledByQ' => "Activada por", + 'enabledByQDesc'=> "Para aceptar esta misión debes haber tener activa alguna de estas misiones", + 'gainsDesc' => "Cuando completes esta misión ganarás", + 'theTitle' => 'el título "%s"', + 'mailDelivery' => "Usted recibirá esta carta %s", + 'mailIn' => "después de %s", + 'unavailable' => "Esta misión fue marcada como obsoleta y no puede ser obtenida o completada.", + 'experience' => "experiencia", + 'expConvert' => "(o %s si se completa al nivel %d)", + 'expConvert2' => "%s si se completa al nivel %d", + 'chooseItems' => "Podrás elegir una de estas recompensas", + 'receiveItems' => "Recibirás", + 'receiveAlso' => "También recibirás", + 'spellCast' => "Te van a lanzar el siguiente hechizo", + 'spellLearn' => "Aprenderás", + 'bonusTalents' => "puntos de talento", + 'spellDisplayed'=> ' (mostrando %s)', 'questInfo' => array( - 0 => 'Normal', 1 => 'Élite', 21 => 'Vida', 41 => 'JcJ', 62 => 'Banda', 81 => 'Mazmorra', 82 => 'Evento del mundo', - 83 => 'Legendaria', 84 => 'Escolta', 85 => 'Heroica', 88 => 'Banda (10)', 89 => 'Banda (25)' + 0 => "Normal", 1 => "Élite", 21 => "Vida", 41 => "JcJ", 62 => "Banda", 81 => "Mazmorra", 82 => "Evento del mundo", + 83 => "Legendaria", 84 => "Escolta", 85 => "Heroica", 88 => "Banda (10)", 89 => "Banda (25)" + ), + 'cat' => array( + // todo: after zones ) ), 'title' => array( 'cat' => array( - 'General', 'Jugador contra Jugador', 'Reputación', 'Mazmorras y bandas', 'Misiones', 'Profesiones', 'Eventos del mundo' + "General", "Jugador contra Jugador", "Reputación", "Mazmorras y bandas", "Misiones", "Profesiones", "Eventos del mundo" ) ), 'skill' => array( 'cat' => array( - -6 => 'Compañeros', -5 => 'Monturas', -4 => 'Habilidades de raza', 5 => 'Atributos', 6 => 'Habilidades con armas', 7 => 'Habilidades de clase', 8 => 'Armaduras disponibles', - 9 => 'Habilidades secundarias', 10 => 'Idiomas', 11 => 'Profesiones' + -6 => "Compañeros", -5 => "Monturas", -4 => "Habilidades de raza", 5 => "Atributos", 6 => "Habilidades con armas", 7 => "Habilidades de clase", 8 => "Armaduras disponibles", + 9 => "Habilidades secundarias", 10 => "Idiomas", 11 => "Profesiones" ) ), 'currency' => array( @@ -441,13 +491,13 @@ $lang = array( 'relItems' => array ( 'base' => "Muestra %s relacionados con %s", 'link' => " u ", - 'recipes' => "objetos de receta", - 'crafted' => "objetos fabricados" + 'recipes' => 'objetos de receta', + 'crafted' => 'objetos fabricados' ), 'cat' => array( 7 => "Habilidades", -13 => "Glifos", - -11 => array("Habilidades", 6 => "Armas", 8 => "Armadura", 10 => "Lenguas"), + -11 => ["Habilidades", 6 => "Armas", 8 => "Armadura", 10 => "Lenguas"], -4 => "Habilidades de raza", -2 => "Talentos", -6 => "Compañeros", @@ -460,22 +510,22 @@ $lang = array( 764 => "Raya abisal", 786 => "Rinoceronte", 768 => "Serpiente", 656 => "Serpiente alada", 783 => "Silítido", 251 => "Tortuga", 218 => "Zancaalta", 761 => "Guardia vil", 189 => "Manáfago", 188 => "Diablillo", 205 => "Súcubo", 204 => "Abisario" ), - -7 => array("Talentos de mascotas", 411 => "Astucia", 410 => "Ferocidad", 409 => "Tenacidad"), + -7 => ["Talentos de mascotas", 411 => "Astucia", 410 => "Ferocidad", 409 => "Tenacidad"], 11 => array( "Profesiones", 171 => "Alquimia", - 164 => array("Herrería", 9788 => "Forjador de armaduras", 9787 => "Forjador de armas", 17041 => "Maestro forjador de hachas", 17040 => "Maestro forjador de mazas", 17039 => "Maestro forjador de espadas"), + 164 => ["Herrería", 9788 => "Forjador de armaduras", 9787 => "Forjador de armas", 17041 => "Maestro forjador de hachas", 17040 => "Maestro forjador de mazas", 17039 => "Maestro forjador de espadas"], 333 => "Encantamiento", - 202 => array("Ingeniería", 20219 => "Ingeniero gnómico", 20222 => "Ingeniero goblin"), + 202 => ["Ingeniería", 20219 => "Ingeniero gnómico", 20222 => "Ingeniero goblin"], 182 => "Herboristería", 773 => "Inscripción", 755 => "Joyería", - 165 => array("Peletería", 10656 => "Peletería de escamas de dragón", 10658 => "Peletería de elemental", 10660 => "Peletería de tribal"), + 165 => ["Peletería", 10656 => "Peletería de escamas de dragón", 10658 => "Peletería de elemental", 10660 => "Peletería de tribal"], 186 => "Minería", 393 => "Desollar", - 197 => array("Sastrería", 26798 => "Sastería de tela lunar primigenia", 26801 => "Sastrería de tejido de sombras", 26797 => "Sastería de fuego de hechizo"), + 197 => ["Sastrería", 26798 => "Sastería de tela lunar primigenia", 26801 => "Sastrería de tejido de sombras", 26797 => "Sastería de fuego de hechizo"], ), - 9 => array("Habilidades secundarias", 185 => "Cocina", 129 => "Primeros auxilios", 356 => "Pesca", 762 => "Equitación"), + 9 => ["Habilidades secundarias", 185 => "Cocina", 129 => "Primeros auxilios", 356 => "Pesca", 762 => "Equitación"], -8 => "Habilidades de PNJ", -9 => "Habilidades de MJ", 0 => "Sin categoría" @@ -492,27 +542,27 @@ $lang = array( 20 => "Cañas de pescar", 14 => "Misceláneo" ), 'subClassMasks' => array( - 0x02A5F3 => 'Arma cuerpo a cuerpo', 0x0060 => 'Escudo', 0x04000C => 'Arma de ataque a distancia',0xA091 => 'Arma cuerpo a cuerpo 1M' + 0x02A5F3 => "Arma cuerpo a cuerpo", 0x0060 => "Escudo", 0x04000C => "Arma de ataque a distancia",0xA091 => "Arma cuerpo a cuerpo 1M" ), 'traitShort' => array( 'atkpwr' => "PA", 'rgdatkpwr' => "PA", 'splpwr' => "PH", 'arcsplpwr' => "PArc", 'firsplpwr' => "PFue", 'frosplpwr' => "PEsc", 'holsplpwr' => "PSag", 'natsplpwr' => "PNat", 'shasplpwr' => "PSom", 'splheal' => "Sana" ), 'spellModOp' => array( - 'DAMAGE', 'DURATION', 'THREAT', 'EFFECT1', 'CHARGES', - 'RANGE', 'RADIUS', 'CRITICAL_CHANCE', 'ALL_EFFECTS', 'NOT_LOSE_CASTING_TIME', - 'CASTING_TIME', 'COOLDOWN', 'EFFECT2', 'IGNORE_ARMOR', 'COST', - 'CRIT_DAMAGE_BONUS', 'RESIST_MISS_CHANCE', 'JUMP_TARGETS', 'CHANCE_OF_SUCCESS', 'ACTIVATION_TIME', - 'DAMAGE_MULTIPLIER', 'GLOBAL_COOLDOWN', 'DOT', 'EFFECT3', 'BONUS_MULTIPLIER', - null, 'PROC_PER_MINUTE', 'VALUE_MULTIPLIER', 'RESIST_DISPEL_CHANCE', 'CRIT_DAMAGE_BONUS_2', - 'SPELL_COST_REFUND_ON_FAIL' + "DAMAGE", "DURATION", "THREAT", "EFFECT1", "CHARGES", + "RANGE", "RADIUS", "CRITICAL_CHANCE", "ALL_EFFECTS", "NOT_LOSE_CASTING_TIME", + "CASTING_TIME", "COOLDOWN", "EFFECT2", "IGNORE_ARMOR", "COST", + "CRIT_DAMAGE_BONUS", "RESIST_MISS_CHANCE", "JUMP_TARGETS", "CHANCE_OF_SUCCESS", "ACTIVATION_TIME", + "DAMAGE_MULTIPLIER", "GLOBAL_COOLDOWN", "DOT", "EFFECT3", "BONUS_MULTIPLIER", + null, "PROC_PER_MINUTE", "VALUE_MULTIPLIER", "RESIST_DISPEL_CHANCE", "CRIT_DAMAGE_BONUS_2", + "SPELL_COST_REFUND_ON_FAIL" ), 'combatRating' => array( - 'WEAPON_SKILL', 'DEFENSE_SKILL', 'DODGE', 'PARRY', 'BLOCK', - 'HIT_MELEE', 'HIT_RANGED', 'HIT_SPELL', 'CRIT_MELEE', 'CRIT_RANGED', - 'CRIT_SPELL', 'HIT_TAKEN_MELEE', 'HIT_TAKEN_RANGED', 'HIT_TAKEN_SPELL', 'CRIT_TAKEN_MELEE', - 'CRIT_TAKEN_RANGED', 'CRIT_TAKEN_SPELL', 'HASTE_MELEE', 'HASTE_RANGED', 'HASTE_SPELL', - 'WEAPON_SKILL_MAINHAND', 'WEAPON_SKILL_OFFHAND', 'WEAPON_SKILL_RANGED', 'EXPERTISE', 'ARMOR_PENETRATION' + "WEAPON_SKILL", "DEFENSE_SKILL", "DODGE", "PARRY", "BLOCK", + "HIT_MELEE", "HIT_RANGED", "HIT_SPELL", "CRIT_MELEE", "CRIT_RANGED", + "CRIT_SPELL", "HIT_TAKEN_MELEE", "HIT_TAKEN_RANGED", "HIT_TAKEN_SPELL", "CRIT_TAKEN_MELEE", + "CRIT_TAKEN_RANGED", "CRIT_TAKEN_SPELL", "HASTE_MELEE", "HASTE_RANGED", "HASTE_SPELL", + "WEAPON_SKILL_MAINHAND", "WEAPON_SKILL_OFFHAND", "WEAPON_SKILL_RANGED", "EXPERTISE", "ARMOR_PENETRATION" ), 'lockType' => array( null, "Forzar cerradura", "Herboristería", "Minería", "Desactivar trampa", @@ -521,8 +571,8 @@ $lang = array( "Gahz'ridian (DND)", "Reventar", "Apertura JcJ", "Cierre JcJ", "Pescar", "Inscripción", "Abrir desde vehículo" ), - 'stealthType' => ['GENERAL', 'TRAP'], - 'invisibilityType' => ['GENERAL', 3 => 'TRAP', 6 => 'DRUNK'] + 'stealthType' => ["GENERAL", "TRAP"], + 'invisibilityType' => ["GENERAL", 3 => "TRAP", 6 => "DRUNK"] ), 'item' => array( 'armor' => "%s armadura", @@ -630,49 +680,49 @@ $lang = array( null, null, "Flecha", "Bala", null ), 'elixirType' => [null, "Batalla", "Guardián"], -'cat' => array( // ordered by content firts, then alphabeticaly - 2 => "Weapons", // self::$spell['weaponSubClass'] - 4 => array("Armor", array( - 1 => "Cloth Armor", 2 => "Leather Armor", 3 => "Mail Armor", 4 => "Plate Armor", 6 => "Shields", 7 => "Librams", - 8 => "Idols", 9 => "Totems", 10 => "Sigils", -6 => "Cloaks", -5 => "Off-hand Frills", -8 => "Shirts", - -7 => "Tabards", -3 => "Amulets", -2 => "Rings", -4 => "Trinkets", 0 => "Miscellaneous (Armor)", + 'cat' => array( + 2 => "Armas", // self::$spell['weaponSubClass'] + 4 => array("Armadura", array( + 1 => "Armaduras de tela", 2 => "Armaduras de cuero", 3 => "Armaduras de malla", 4 => "Armaduras de placas", 6 => "Escudos", 7 => "Tratados", + 8 => "Ídolos", 9 => "Tótems", 10 => "Sigilos", -6 => "Capas", -5 => "Cosillas de la mano izquierda",-8 => "Camisas", + -7 => "Tabardos", -3 => "Amuletos", -2 => "Anillos", -4 => "Abalorios", 0 => "Misceláneo (Armaduras)", )), - 1 => array("Containers", array( - 0 => "Bags", 3 => "Enchanting Bags", 4 => "Engineering Bags", 5 => "Gem Bags", 2 => "Herb Bags", 8 => "Inscription Bags", - 7 => "Leatherworking Bags", 6 => "Mining Bags", 1 => "Soul Bags" + 1 => array("Contenedores", array( + 0 => "Bolsas", 3 => "Bolsas de encantamiento", 4 => "Bolsas de ingeniería", 5 => "Bolsas de gemas", 2 => "Bolsas de hierbas", 8 => "Bolsas de inscripción", + 7 => "Bolsas de peletería", 6 => "Bolsas de minería", 1 => "Bolsas de almas" )), - 0 => array("Consumables", array( - -3 => "Item Enhancements (Temporary)", 6 => "Item Enhancements (Permanent)", 2 => ["Elixirs", [1 => "Battle Elixirs", 2 => "Guardian Elixirs"]], - 1 => "Potions", 4 => "Scrolls", 7 => "Bandages", 0 => "Consumables", 3 => "Flasks", 5 => "Food & Drinks", - 8 => "Other (Consumables)" + 0 => array("Consumibles", array( + -3 => "Mejoras de objetos temporales", 6 => "Mejoras de objetos permanentes", 2 => ["Elixires", [1 => "Elixires de batalla", 2 => "Elixires guardiánes"]], + 1 => "Pociones", 4 => "Pergaminos", 7 => "Vendas", 0 => "Consumibles", 3 => "Frascos", 5 => "Comidas y bebidas", + 8 => "Otro (Consumibles)" )), - 16 => array("Glyphs", array( - 1 => "Warrior Glyphs", 2 => "Paladin Glyphs", 3 => "Hunter Glyphs", 4 => "Rogue Glyphs", 5 => "Priest Glyphs", 6 => "Death Knight Glyphs", - 7 => "Shaman Glyphs", 8 => "Mage Glyphs", 9 => "Warlock Glyphs", 11 => "Druid Glyphs" + 16 => array("Glifos", array( + 1 => "Glifos de guerrero", 2 => "Glifos de paladín", 3 => "Glifos de cazador", 4 => "Glifos de pícaro", 5 => "Glifos de sacerdote", 6 => "Glifos de caballero de la muerte", + 7 => "Glifos de chamán", 8 => "Glifos de mago", 9 => "Glifos de brujo", 11 => "Glifos de druida" )), - 7 => array("Trade Goods", array( - 14 => "Armor Enchantments", 5 => "Cloth", 3 => "Devices", 10 => "Elemental", 12 => "Enchanting", 2 => "Explosives", - 9 => "Herbs", 4 => "Jewelcrafting", 6 => "Leather", 13 => "Materials", 8 => "Meat", 7 => "Metal & Stone", - 1 => "Parts", 15 => "Weapon Enchantments", 11 => "Other (Trade Goods)" + 7 => array("Objetos comerciables", array( + 14 => "Encantamientos de armaduras", 5 => "Tela", 3 => "Instrumentos", 10 => "Elemental", 12 => "Encantamiento", 2 => "Explosivos", + 9 => "Hierbas", 4 => "Joyería", 6 => "Cuero", 13 => "Materiales", 8 => "Carne", 7 => "Metal y piedra", + 1 => "Piezas", 15 => "Encantamientos de armas",11 => "Otro (Objetos comerciables)" )), - 6 => ["Projectiles", [ 2 => "Arrows", 3 => "Bullets" ]], - 11 => ["Quivers", [ 2 => "Quivers", 3 => "Ammo Pouches"]], - 9 => array("Recipes", array( - 0 => "Books", 6 => "Alchemy Recipes", 4 => "Blacksmithing Plans", 5 => "Cooking Recipes", 8 => "Enchanting Formulae", 3 => "Engineering Schematics", - 7 => "First Aid Books", 9 => "Fishing Books", 11 => "Inscription Techniques", 10 => "Jewelcrafting Designs", 1 => "Leatherworking Patterns",12 => "Mining Guides", - 2 => "Tailoring Patterns" + 6 => ["Proyectiles", [ 2 => "Flechas", 3 => "Balas" ]], + 11 => ["Carcajs", [ 2 => "Carcajs", 3 => "Bolsas de munición"]], + 9 => array("Recetas", array( + 0 => "Libros", 6 => "Recetas de alquimia", 4 => "Diseños de herrería", 5 => "Recetas de cocina", 8 => "Fórmulas de encantamiento",3 => "Esquemas de ingeniería", + 7 => "Libros de primeros auxilios", 9 => "Libros de pesca", 11 => "Técnicas de Inscripción",10 => "Bocetos de joyería", 1 => "Patrones de peletería", 12 => "Guías de minería", + 2 => "Patrones de sastrería" )), - 3 => array("Gems", array( - 6 => "Meta Gems", 0 => "Red Gems", 1 => "Blue Gems", 2 => "Yellow Gems", 3 => "Purple Gems", 4 => "Green Gems", - 5 => "Orange Gems", 8 => "Prismatic Gems", 7 => "Simple Gems" + 3 => array("Gemas", array( + 6 => "Gemas meta", 0 => "Gemas rojas", 1 => "Gemas azules", 2 => "Gemas amarillas", 3 => "Gemas moradas", 4 => "Gemas verdes", + 5 => "Gemas naranjas", 8 => "Gemas centelleantes", 7 => "Gemas simples" )), - 15 => array("Miscellaneous", array( - -2 => "Armor Tokens", 3 => "Holiday", 0 => "Junk", 1 => "Reagents", 5 => "Mounts", -7 => "Flying Mounts", - 2 => "Small Pets", 4 => "Other (Miscellaneous)" + 15 => array("Miscelánea", array( + -2 => "Tokens de armadura", 3 => "Fiesta", 0 => "Chatarras", 1 => "Componentes", 5 => "Monturas", -7 => "Monturas voladoras", + 2 => "Compañeros", 4 => "Otro (Misceláneo)" )), - 10 => "Currency", - 12 => "Quest", - 13 => "Keys", + 10 => "Monedas", + 12 => "Misión", + 13 => "Llaves", ), 'statType' => array( "Aumenta tu maná %d p.", diff --git a/localization/locale_frfr.php b/localization/locale_frfr.php index bfdca2b9..04cf42eb 100644 --- a/localization/locale_frfr.php +++ b/localization/locale_frfr.php @@ -30,7 +30,7 @@ $lang = array( 'userProfiles' => "Vos personnages", // translate.google :x 'pageNotFound' => "Ce %s n'existe pas.", 'gender' => "Genre", - 'sex' => [null, 'Homme', 'Femme'], + 'sex' => [null, "Homme", "Femme"], 'players' => "Joueurs", 'quickFacts' => "En bref", 'screenshots' => "Captures d'écran", @@ -65,7 +65,7 @@ $lang = array( 'disabled' => "[Disabled]", 'disabledHint' => "[Cannot be attained or completed]", 'serverside' => "[Serverside]", - 'serversideHint' => "[These informations are not in the Client and have been provided by sniffing and/or guessing.]", + 'serversideHint'=> "[These informations are not in the Client and have been provided by sniffing and/or guessing.]", // red buttons 'links' => "Liens", @@ -74,6 +74,8 @@ $lang = array( 'findUpgrades' => "Trouver des améliorations...", // misc Tools + 'errPageTitle' => "Page non trouvée", + 'nfPageTitle' => "Erreur", 'subscribe' => "S'abonner", 'mostComments' => ["Hier", "Derniers %d jours"], 'utilities' => array( @@ -92,7 +94,7 @@ $lang = array( 'cappedHint' => 'Conseil: Enlever un facteur pour les statistiques au maximum tel que le score de touche.', 'groupBy' => "Groupé par", 'gb' => array( - ['Aucun', 'none'], ['Emplacement', 'slot'], ['Niveau', 'level'], ['Source', 'source'] + ["Aucun", "none"], ["Emplacement", "slot"], ["Niveau", "level"], ["Source", "source"] ), 'compareTool' => "Outil de comparaison d'objets", 'talentCalc' => "Calculateur de Talents", @@ -168,33 +170,35 @@ $lang = array( 'zone' => "zone", 'zones' => "Zones", + 'honorPoints' => "Points d'honneur", + 'arenaPoints' => "Points d'arène", 'heroClass' => "Classe de héros", 'resource' => "Ressource", 'resources' => "Ressources", 'role' => "Role", 'roles' => "Roles", 'specs' => "Specialisations", - '_roles' => ['Soigneur', 'DPS mêlée', 'DPS à distance', 'Tank'], + '_roles' => ["Soigneur", "DPS mêlée", "DPS à distance", "Tank"], - 'modes' => ['Standard / Normal 10', 'Héroïque / Normal 25', '10 héroïque', '25 héroïque'], - 'expansions' => array("Classique", "The Burning Crusade", "Wrath of the Lich King"), - 'stats' => array("Force", "Agilité", "Endurance", "Intelligence", "Esprit"), + 'modes' => ["Standard / Normal 10", "Héroïque / Normal 25", "10 héroïque", "25 héroïque"], + 'expansions' => ["Classique", "The Burning Crusade", "Wrath of the Lich King"], + 'stats' => ["Force", "Agilité", "Endurance", "Intelligence", "Esprit"], 'sources' => array( null, "Fabriqué", "Butin", "JcJ", "Quête", "Vendeur", "Maître", "Découverte", "Échange d'un code", "Talent", "Débutant", "Événement", "Haut fait" ), '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", 11 => "Draconique", 12 => "Kalimag", 13 => "Gnome", 14 => "Troll", 33 => "Bas-parler", 35 => "Draeneï", 36 => "Zombie", 37 => "Binaire gnome", 38 => "Binaire gobelin" ), - 'gl' => array(null, "Majeur", "Mineur"), - 'si' => array(1 => "Alliance", -1 => "Alliance seulement", 2 => "Horde", -2 => "Horde seulement", 3 => "Les deux"), - 'resistances' => array(null, 'Résistance au Sacré', 'Résistance au Feu', 'Résistance à la Nature', 'Résistance au Givre', 'Résistance à l\'Ombre', 'Résistance aux Arcanes'), - 'dt' => array(null, "Magie", "Malédiction", "Maladie", "Poison", "Camouflage", "Invisibilité", null, null, "Enrager"), - 'sc' => array("Physique", "Sacré", "Feu", "Nature", "Givre", "Ombre", "Arcane"), - 'cl' => array(null, "Guerrier", "Paladin", "Chasseur", "Voleur", "Prêtre", "DeathChevalier de la mort", "Chaman", "Mage", "Démoniste", null, "Druide"), - 'ra' => array(-2 => "Horde", -1 => "Alliance", "Les deux", "Humain", "Orc", "Nain", "Elfe de la nuit", "Mort-vivant", "Tauren", "Gnome", "Troll", null, "Elfe de sang", "Draeneï"), - 'rep' => array("Détesté", "Hostile", "Inamical", "Neutre", "Amical", "Honoré", "Révéré", "Exalté"), + 'gl' => [null, "Majeur", "Mineur"], + 'si' => [1 => "Alliance", -1 => "Alliance seulement", 2 => "Horde", -2 => "Horde seulement", 3 => "Les deux"], + 'resistances' => [null, 'Résistance au Sacré', 'Résistance au Feu', 'Résistance à la Nature', 'Résistance au Givre', 'Résistance à l\'Ombre', 'Résistance aux Arcanes'], + 'dt' => [null, "Magie", "Malédiction", "Maladie", "Poison", "Camouflage", "Invisibilité", null, null, "Enrager"], + 'sc' => ["Physique", "Sacré", "Feu", "Nature", "Givre", "Ombre", "Arcane"], + 'cl' => [null, "Guerrier", "Paladin", "Chasseur", "Voleur", "Prêtre", "DeathChevalier de la mort", "Chaman", "Mage", "Démoniste", null, "Druide"], + 'ra' => [-2 => "Horde", -1 => "Alliance", "Les deux", "Humain", "Orc", "Nain", "Elfe de la nuit", "Mort-vivant", "Tauren", "Gnome", "Troll", null, "Elfe de sang", "Draeneï"], + 'rep' => ["Détesté", "Hostile", "Inamical", "Neutre", "Amical", "Honoré", "Révéré", "Exalté"], 'st' => array( "Défaut", "Forme de félin", "Arbre de vie", "Forme de voyage", "Aquatic Form", "Forme d'ours", null, null, "Forme d'ours redoutable", null, @@ -215,8 +219,8 @@ $lang = array( "Bestiole", "Mécanique", "Non spécifié", "Totem", "Familier pacifique", "Nuage de gaz" ), 'fa' => array( - 1 => "Loup", 2 => "Félin", 3 => "Araignée", 4 => "Ours", 5 => "Sanglier", 6 => "Crocilisque", 7 => "Charognard", 8 => "Crabe", - 9 => "Gorille", 11 => "Raptor", 12 => "Haut-trotteur", 20 => "Scorpide", 21 => "Tortue", 24 => "Chauve-souris", 25 => "Hyène", 26 => "Oiseau de proie", + 1 => "Loup", 2 => "Félin", 3 => "Araignée", 4 => "Ours", 5 => "Sanglier", 6 => "Crocilisque", 7 => "Charognard", 8 => "Crabe", + 9 => "Gorille", 11 => "Raptor", 12 => "Haut-trotteur", 20 => "Scorpide", 21 => "Tortue", 24 => "Chauve-souris", 25 => "Hyène", 26 => "Oiseau de proie", 27 => "Serpent des vents", 30 => "Faucon-dragon", 31 => "Ravageur", 32 => "Traqueur dim.", 33 => "Sporoptère", 34 => "Raie du Néant", 35 => "Serpent", 37 => "Phalène", 38 => "Chimère", 39 => "Diablosaure", 41 => "Silithide", 42 => "Ver", 43 => "Rhinocéros", 44 => "Guêpe", 45 => "Chien du Magma", 46 => "Esprit de bête" ), @@ -228,12 +232,6 @@ $lang = array( "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" ), ), - 'error' => array( - 'errNotFound' => "Page not found", - 'errPage' => "What? How did you... nevermind that!\n \n \nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n \n \nPerhaps a few tweaks to the [WH-799 Major Confabulation Engine] may result in the page suddenly making an appearance!\n\n\nOr, you can try \ncontacting us\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", - 'goStart' => "Return to the homepage", - 'goForum' => "Feedback forum", - ), 'account' => [], 'gameObject' => array( 'cat' => [0 => "Autre", 9 => "Livres", 3 => "Conteneurs", -5 => "Coffres", 25 => "Bancs de poissons", -3 => "Herbes", -4 => "Filons de minerai", -2 => "Quêtes", -6 => "Outils"], @@ -278,7 +276,7 @@ $lang = array( 'end' => "Fin", 'interval' => "Intervalle", 'inProgress' => "L'évènement est présentement en cours", - 'category' => array("Non classés", "Vacances", "Récurrent", "Joueur ctr. Joueur") + 'category' => ["Non classés", "Vacances", "Récurrent", "Joueur ctr. Joueur"] ), 'achievement' => array( 'criteria' => "Critères", @@ -286,7 +284,7 @@ $lang = array( 'series' => "Série", 'outOf' => "sur", 'criteriaType' => "Criterium Type-Id:", - 'itemReward' => "Vous recevrez :", + 'itemReward' => "Vous recevrez", 'titleReward' => "Vous devriez recevoir le titre \"%s\"", 'slain' => "tué", 'reqNumCrt' => "Nécessite" @@ -321,23 +319,75 @@ $lang = array( ) ), 'quest' => array( - 'questLevel' => 'Niveau %s', - 'daily' => 'Journalière', - 'requirements' => 'Conditions', + 'questLevel' => "Niveau %s", + 'requirements' => "Conditions", + 'reqMoney' => "Argent requis", + 'money' => "Argent", + 'additionalReq' => "Conditions additionnelles requises pour obtenir cette quête", + 'reqRepWith' => 'Votre reputation avec %s doît être %s %s', + 'reqRepMin' => "d'au moins", + 'reqRepMax' => "moins que", + 'progress' => "Progrès", + 'provided' => "Fourni", + 'providedItem' => "Objet fourni", + 'completion' => "Achèvement", + 'description' => "Description", + 'playerSlain' => "Joueurs tués", + 'profession' => "Métier", + 'timer' => "Temps", + 'loremaster' => "Maitre des traditions", + 'suggestedPl' => "Joueurs suggérés", + 'keepsPvpFlag' => "Vous garde en mode JvJ", + 'daily' => "Journalière", + 'weekly' => "Chaque semaine", + 'monthly' => "Mensuel", + 'sharable' => "Partageable", + 'notSharable' => "Non partageable", + 'repeatable' => "Répétable", + 'reqQ' => "Requiert", + 'reqQDesc' => "Pour avoir cette quête, vous devez avoir completé ces quêtes", + 'reqOneQ' => "Requiert", + 'reqOneQDesc' => "Pour avoir accès à cette quête vous devez accomplir une des quêtes suivantes", + 'opensQ' => "Donne accès aux quêtes", + 'opensQDesc' => "Terminer cette quête est requis pour commencer ces quetês", + 'closesQ' => "Empêche l'accès aux quêtes", + 'closesQDesc' => "Terminer cette quête ferme l'accès aux quêtes", + 'enablesQ' => "Autorise", + 'enablesQDesc' => "Quand cette quête est active, vous pouvez obtenir cette quete", + 'enabledByQ' => "Autorisée par", + 'enabledByQDesc'=> "Vous pouvez faire cette quête seulement quand cette quête est active", + 'gainsDesc' => "Lors de l'achèvement de cette quête vous gagnerez", + 'theTitle' => '"%s"', // empty on purpose! + 'mailDelivery' => "Vous recevrez cette lettre %s", + 'mailIn' => "après %s", + 'unavailable' => "Cette quête est marquée comme obsolète et ne peut être obtenue ou accomplie.", + 'experience' => "points d'expérience", + 'expConvert' => "(ou %s si completé au niveau %d)", + 'expConvert2' => "%s si completé au niveau %d", + 'chooseItems' => "Vous pourrez choisir une de ces récompenses", + 'receiveItems' => "Vous recevrez", + 'receiveAlso' => "Vous recevrez également", + 'spellCast' => "Vous allez être la cible du sort suivant", + 'spellLearn' => "Vous apprendrez", + 'bonusTalents' => "points de talent", + 'spellDisplayed'=> ' (%s affichés)', 'questInfo' => array( - 0 => 'Standard', 1 => 'Groupe', 21 => 'Vie', 41 => 'JcJ', 62 => 'Raid', 81 => 'Donjon', 82 => 'Évènement mondial', - 83 => 'Légendaire', 84 => 'Escorte', 85 => 'Héroïque', 88 => 'Raid (10)', 89 => 'Raid (25)' + 0 => "Standard", 1 => "Groupe", 21 => "Vie", 41 => "JcJ", 62 => "Raid", 81 => "Donjon", 82 => "Évènement mondial", + 83 => "Légendaire", 84 => "Escorte", 85 => "Héroïque", 88 => "Raid (10)", 89 => "Raid (25)" + ), + 'cat' => array( + // todo: after zones ) ), 'title' => array( 'cat' => array( - 'Général', 'Joueur ctr. Joueur', 'Réputation', 'Donjons & raids', 'Quêtes', 'Métiers', 'Évènements mondiaux' + "Général", "Joueur ctr. Joueur", "Réputation", "Donjons & raids", "Quêtes", "Métiers", "Évènements mondiaux" ) ), 'skill' => array( 'cat' => array( - -6 => 'Compagnons', -5 => 'Montures', -4 => 'Traits raciaux', 5 => 'Caractéristiques', 6 => "Compétences d'armes", 7 => 'Compétences de classe', 8 => 'Armures utilisables', - 9 => 'Compétences secondaires', 10 => 'Langues', 11 => 'Métiers' + -6 => "Compagnons", -5 => "Montures", -4 => "Traits raciaux", 5 => "Caractéristiques", 6 => "Compétences d'armes", 7 => "Compétences de classe", 8 => "Armures utilisables", + 9 => "Compétences secondaires", 10 => "Langues", 11 => "Métiers" ) ), 'currency' => array( @@ -447,7 +497,7 @@ $lang = array( 'cat' => array( 7 => "Techniques", -13 => "Glyphes", - -11 => array("Compétences", 8 => "Armure", 10 => "Langues", 6 => "Armes"), + -11 => ["Compétences", 8 => "Armure", 10 => "Langues", 6 => "Armes"], -4 => "Traits raciaux", -2 => "Talents", -6 => "Compagnons", @@ -460,22 +510,22 @@ $lang = array( 768 => "Serpent", 656 => "Serpent des vents", 783 => "Silithide", 765 => "Sporoptère", 251 => "Tortue", 766 => "Traqueur dim.", 784 => "Ver", 761 => "Gangregarde", 189 => "Chasseur corrompu", 188 => "Diablotin", 205 => "Succube", 204 => "Marcheur du Vide" ), - -7 => array("Talents de familiers", 411 => "Ruse", 410 => "Férocité", 409 => "Tenacité"), + -7 => ["Talents de familiers", 411 => "Ruse", 410 => "Férocité", 409 => "Tenacité"], 11 => array( "Métiers", 171 => "Alchimie", - 164 => array("Forge", 9788 => "Fabricant d'armures", 9787 => "Fabricant d'armes", 17041 => "Maître fabricant de haches", 17040 => "Maître fabricant de marteaux", 17039 => "Maître fabricant d'épées"), + 164 => ["Forge", 9788 => "Fabricant d'armures", 9787 => "Fabricant d'armes", 17041 => "Maître fabricant de haches", 17040 => "Maître fabricant de marteaux", 17039 => "Maître fabricant d'épées"], 333 => "Enchantement", - 202 => array("Ingénierie", 20219 => "Ingénieur gnome", 20222 => "Ingénieur goblin"), + 202 => ["Ingénierie", 20219 => "Ingénieur gnome", 20222 => "Ingénieur goblin"], 182 => "Herboristerie", 773 => "Calligraphie", 755 => "Joaillerie", - 165 => array("Travail du cuir", 10656 => "Travail du cuir d'écailles de dragon", 10658 => "Travail du cuir élémentaire", 10660 => "Travail du cuir tribal"), + 165 => ["Travail du cuir", 10656 => "Travail du cuir d'écailles de dragon", 10658 => "Travail du cuir élémentaire", 10660 => "Travail du cuir tribal"], 186 => "Minage", 393 => "Dépeçage", - 197 => array("Couture", 26798 => "Couture d'étoffe lunaire", 26801 => "Couture de tisse-ombre", 26797 => "Couture du feu-sorcier"), + 197 => ["Couture", 26798 => "Couture d'étoffe lunaire", 26801 => "Couture de tisse-ombre", 26797 => "Couture du feu-sorcier"], ), - 9 => array("Compétences secondaires", 185 => "Cuisine", 129 => "Secourisme", 356 => "Pêche", 762 => "Monte"), + 9 => ["Compétences secondaires", 185 => "Cuisine", 129 => "Secourisme", 356 => "Pêche", 762 => "Monte"], -9 => "Habilité de MJ", -8 => "Habilité de PNJ", 0 => "Non classés" @@ -492,27 +542,27 @@ $lang = array( 20 => "Cannes à pêche", 14 => "Divers" ), 'subClassMasks' => array( - 0x02A5F3 => 'Arme de mêlée', 0x0060 => 'Bouclier', 0x04000C => 'Arme à distance', 0xA091 => 'Arme de mêlée à une main' + 0x02A5F3 => "Arme de mêlée", 0x0060 => "Bouclier", 0x04000C => "Arme à distance", 0xA091 => "Arme de mêlée à une main" ), 'traitShort' => array( 'atkpwr' => "PA", 'rgdatkpwr' => "PAD", 'splpwr' => "PS", 'arcsplpwr' => "PArc", 'firsplpwr' => "PFeu", 'frosplpwr' => "PGiv", 'holsplpwr' => "PSac", 'natsplpwr' => "PNat", 'shasplpwr' => "POmb", 'splheal' => "Soins" ), 'spellModOp' => array( - 'DAMAGE', 'DURATION', 'THREAT', 'EFFECT1', 'CHARGES', - 'RANGE', 'RADIUS', 'CRITICAL_CHANCE', 'ALL_EFFECTS', 'NOT_LOSE_CASTING_TIME', - 'CASTING_TIME', 'COOLDOWN', 'EFFECT2', 'IGNORE_ARMOR', 'COST', - 'CRIT_DAMAGE_BONUS', 'RESIST_MISS_CHANCE', 'JUMP_TARGETS', 'CHANCE_OF_SUCCESS', 'ACTIVATION_TIME', - 'DAMAGE_MULTIPLIER', 'GLOBAL_COOLDOWN', 'DOT', 'EFFECT3', 'BONUS_MULTIPLIER', - null, 'PROC_PER_MINUTE', 'VALUE_MULTIPLIER', 'RESIST_DISPEL_CHANCE', 'CRIT_DAMAGE_BONUS_2', - 'SPELL_COST_REFUND_ON_FAIL' + "DAMAGE", "DURATION", "THREAT", "EFFECT1", "CHARGES", + "RANGE", "RADIUS", "CRITICAL_CHANCE", "ALL_EFFECTS", "NOT_LOSE_CASTING_TIME", + "CASTING_TIME", "COOLDOWN", "EFFECT2", "IGNORE_ARMOR", "COST", + "CRIT_DAMAGE_BONUS", "RESIST_MISS_CHANCE", "JUMP_TARGETS", "CHANCE_OF_SUCCESS", "ACTIVATION_TIME", + "DAMAGE_MULTIPLIER", "GLOBAL_COOLDOWN", "DOT", "EFFECT3", "BONUS_MULTIPLIER", + null, "PROC_PER_MINUTE", "VALUE_MULTIPLIER", "RESIST_DISPEL_CHANCE", "CRIT_DAMAGE_BONUS_2", + "SPELL_COST_REFUND_ON_FAIL" ), 'combatRating' => array( - 'WEAPON_SKILL', 'DEFENSE_SKILL', 'DODGE', 'PARRY', 'BLOCK', - 'HIT_MELEE', 'HIT_RANGED', 'HIT_SPELL', 'CRIT_MELEE', 'CRIT_RANGED', - 'CRIT_SPELL', 'HIT_TAKEN_MELEE', 'HIT_TAKEN_RANGED', 'HIT_TAKEN_SPELL', 'CRIT_TAKEN_MELEE', - 'CRIT_TAKEN_RANGED', 'CRIT_TAKEN_SPELL', 'HASTE_MELEE', 'HASTE_RANGED', 'HASTE_SPELL', - 'WEAPON_SKILL_MAINHAND', 'WEAPON_SKILL_OFFHAND', 'WEAPON_SKILL_RANGED', 'EXPERTISE', 'ARMOR_PENETRATION' + "WEAPON_SKILL", "DEFENSE_SKILL", "DODGE", "PARRY", "BLOCK", + "HIT_MELEE", "HIT_RANGED", "HIT_SPELL", "CRIT_MELEE", "CRIT_RANGED", + "CRIT_SPELL", "HIT_TAKEN_MELEE", "HIT_TAKEN_RANGED", "HIT_TAKEN_SPELL", "CRIT_TAKEN_MELEE", + "CRIT_TAKEN_RANGED", "CRIT_TAKEN_SPELL", "HASTE_MELEE", "HASTE_RANGED", "HASTE_SPELL", + "WEAPON_SKILL_MAINHAND", "WEAPON_SKILL_OFFHAND", "WEAPON_SKILL_RANGED", "EXPERTISE", "ARMOR_PENETRATION" ), 'lockType' => array( null, "Crochetage", "Herboristerie", "Minage", "Désarmement de piège", @@ -521,8 +571,8 @@ $lang = array( "Gahz'ridienne (DND)", "Explosif", "Ouverture JcJ", "Fermeture JcJ", "Pêche", "Calligraphie", "Ouverture à partir d'un véhicule", ), - 'stealthType' => ['GENERAL', 'TRAP'], - 'invisibilityType' => ['GENERAL', 3 => 'TRAP', 6 => 'DRUNK'] + 'stealthType' => ["GENERAL", "TRAP"], + 'invisibilityType' => ["GENERAL", 3 => "TRAP", 6 => "DRUNK"] ), 'item' => array( 'armor' => "Armure : %s", @@ -630,49 +680,49 @@ $lang = array( null, null, "Flèche", "Balle", null ), 'elixirType' => [null, "De bataille", "De gardien"], -'cat' => array( - 2 => "Weapons", // self::$spell['weaponSubClass'] - 4 => array("Armor", array( - 1 => "Cloth Armor", 2 => "Leather Armor", 3 => "Mail Armor", 4 => "Plate Armor", 6 => "Shields", 7 => "Librams", - 8 => "Idols", 9 => "Totems", 10 => "Sigils", -6 => "Cloaks", -5 => "Off-hand Frills", -8 => "Shirts", - -7 => "Tabards", -3 => "Amulets", -2 => "Rings", -4 => "Trinkets", 0 => "Miscellaneous (Armor)", + 'cat' => array( + 2 => "Armes", // self::$spell['weaponSubClass'] + 4 => array("Armure", array( + 1 => "Armures en tissu", 2 => "Armures en cuir", 3 => "Armures en mailles", 4 => "Armures en plaques", 6 => "Boucliers", 7 => "Librams", + 8 => "Idoles", 9 => "Totems", 10 => "Cachets", -6 => "Capes", -5 => "Accessoires pour main gauche", -8 => "Chemises", + -7 => "Tabards", -3 => "Amulettes", -2 => "Anneaux", -4 => "Bijoux", 0 => "Divers (Armure)", )), - 1 => array("Containers", array( - 0 => "Bags", 3 => "Enchanting Bags", 4 => "Engineering Bags", 5 => "Gem Bags", 2 => "Herb Bags", 8 => "Inscription Bags", - 7 => "Leatherworking Bags", 6 => "Mining Bags", 1 => "Soul Bags" + 1 => array("Conteneurs", array( + 0 => "Sacs", 3 => "Sacs d'enchanteur", 4 => "Sacs d'ingénieur", 5 => "Sacs de gemmes", 2 => "Sacs d'herbes", 8 => "Sacs de calligraphie", + 7 => "Sacs de travailleur du cuir", 6 => "Sacs de mineur", 1 => "Sacs d'âmes" )), - 0 => array("Consumables", array( - -3 => "Item Enhancements (Temporary)", 6 => "Item Enhancements (Permanent)", 2 => ["Elixirs", [1 => "Battle Elixirs", 2 => "Guardian Elixirs"]], - 1 => "Potions", 4 => "Scrolls", 7 => "Bandages", 0 => "Consumables", 3 => "Flasks", 5 => "Food & Drinks", - 8 => "Other (Consumables)" + 0 => array("Consommables", array( + -3 => "Améliorations d'objet temporaires", 6 => "Améliorations d'objet permanentes", 2 => ["Élixirs", [1 => "Élixirs de bataille", 2 => "Élixirs du gardien"]], + 1 => "Potions", 4 => "Parchemins", 7 => "Bandages", 0 => "Consommables", 3 => "Flacons", 5 => "Nourriture et boissons", + 8 => "Autre (Consommables)" )), - 16 => array("Glyphs", array( - 1 => "Warrior Glyphs", 2 => "Paladin Glyphs", 3 => "Hunter Glyphs", 4 => "Rogue Glyphs", 5 => "Priest Glyphs", 6 => "Death Knight Glyphs", - 7 => "Shaman Glyphs", 8 => "Mage Glyphs", 9 => "Warlock Glyphs", 11 => "Druid Glyphs" + 16 => array("Glyphes", array( + 7 => "Glyphes de chaman", 3 => "Glyphes de chasseur", 6 => "Glyphes de chevalier de la mort", 9 => "Glyphes de démoniste", 11 => "Glyphes de druide", + 1 => "Glyphes de guerrier", 8 => "Glyphes de mage", 2 => "Glyphes de paladin", 5 => "Glyphes de prêtre", 4 => "Glyphes de voleur" )), - 7 => array("Trade Goods", array( - 14 => "Armor Enchantments", 5 => "Cloth", 3 => "Devices", 10 => "Elemental", 12 => "Enchanting", 2 => "Explosives", - 9 => "Herbs", 4 => "Jewelcrafting", 6 => "Leather", 13 => "Materials", 8 => "Meat", 7 => "Metal & Stone", - 1 => "Parts", 15 => "Weapon Enchantments", 11 => "Other (Trade Goods)" + 7 => array("Artisanat", array( + 14 => "Enchantements d'armure", 5 => "Tissu", 3 => "Appareils", 10 => "Élémentaire", 12 => "Enchantement", 2 => "Explosifs", + 9 => "Herbes", 4 => "Joaillerie", 6 => "Cuir", 13 => "Matériaux", 8 => "Viande", 7 => "Métal et pierre", + 1 => "Éléments", 15 => "Enchantements d'arme", 11 => "Autre (Artisanat)" )), - 6 => ["Projectiles", [ 2 => "Arrows", 3 => "Bullets" ]], - 11 => ["Quivers", [ 2 => "Quivers", 3 => "Ammo Pouches"]], - 9 => array("Recipes", array( - 0 => "Books", 6 => "Alchemy Recipes", 4 => "Blacksmithing Plans", 5 => "Cooking Recipes", 8 => "Enchanting Formulae", 3 => "Engineering Schematics", - 7 => "First Aid Books", 9 => "Fishing Books", 11 => "Inscription Techniques", 10 => "Jewelcrafting Designs", 1 => "Leatherworking Patterns",12 => "Mining Guides", - 2 => "Tailoring Patterns" + 6 => ["Projectiles", [ 2 => "Flèches", 3 => "Balles" ]], + 11 => ["Carquois", [ 2 => "Carquois", 3 => "Gibernes"]], + 9 => array("Recettes", array( + 0 => "Livres", 6 => "Recettes d'alchimie", 4 => "Plans de forge", 5 => "Recettes de cuisine", 8 => "Formules d'enchantement", 3 => "Schémas d'ingénierie", + 7 => "Livres de premiers soins", 9 => "Livres de pêche", 11 => "Techniques de calligraphie",10 => "Dessins de joaillerie",1 => "Patrons de travail du cuir",12 => "Guides de Minage", + 2 => "Patrons de couture" )), - 3 => array("Gems", array( - 6 => "Meta Gems", 0 => "Red Gems", 1 => "Blue Gems", 2 => "Yellow Gems", 3 => "Purple Gems", 4 => "Green Gems", - 5 => "Orange Gems", 8 => "Prismatic Gems", 7 => "Simple Gems" + 3 => array("Gemmes", array( + 6 => "Méta-gemmes", 0 => "Gemmes rouges", 1 => "Gemmes bleues", 2 => "Gemmes jaunes", 3 => "Gemmes violettes", 4 => "Gemmes vertes", + 5 => "Gemmes oranges", 8 => "Gemmes prismatiques", 7 => "Gemmes simples" )), - 15 => array("Miscellaneous", array( - -2 => "Armor Tokens", 3 => "Holiday", 0 => "Junk", 1 => "Reagents", 5 => "Mounts", -7 => "Flying Mounts", - 2 => "Small Pets", 4 => "Other (Miscellaneous)" + 15 => array("Divers", array( + -2 => "Marques d'armure", 3 => "Évènement", 0 => "Camelote", 1 => "Composants", 5 => "Montures", -7 => "Montures volantes", + 2 => "Compagnons", 4 => "Autre (Divers)" )), - 10 => "Currency", - 12 => "Quest", - 13 => "Keys", + 10 => "Monnaies", + 12 => "Quête", + 13 => "Clés", ), 'statType' => array( "Augmente vos points de mana de %d.", diff --git a/localization/locale_ruru.php b/localization/locale_ruru.php index d2e7283c..f0882d48 100644 --- a/localization/locale_ruru.php +++ b/localization/locale_ruru.php @@ -26,11 +26,11 @@ $lang = array( 'feedback' => "Отзыв", 'numSQL' => "Количество MySQL запросов", 'timeSQL' => "Время выполнения MySQL запросов", - 'noJScript' => "Данный сайт активно использует технологию JavaScript. Пожалуйста, Включите JavaScript в вашем браузере.", + 'noJScript' => 'Данный сайт активно использует технологию JavaScript. Пожалуйста, Включите JavaScript в вашем браузере.', 'userProfiles' => "Ваши персонажи", // translate.google :x 'pageNotFound' => "Такое %s не существует.", 'gender' => "Пол", - 'sex' => [null, 'Мужчина', 'Женщина'], + 'sex' => [null, "Мужчина", "Женщина"], 'players' => "Игрокам", 'quickFacts' => "Краткая информация", 'screenshots' => "Изображения", @@ -55,7 +55,7 @@ $lang = array( 'oneFilter' => "Любое совпадение", 'applyFilter' => "Применить фильтр", 'resetForm' => "Очистить форму", - 'refineSearch' => "Совет: Уточните поиск, добавив подкатегорию.", + 'refineSearch' => 'Совет: Уточните поиск, добавив подкатегорию.', 'clear' => "Очистить", 'exactMatch' => "Полное совпадение", '_reqLevel' => "Требуется уровень", @@ -74,6 +74,8 @@ $lang = array( 'findUpgrades' => "Найти лучше...", // misc Tools + 'errPageTitle' => "Страница не найдена", + 'nfPageTitle' => "Ошибка", 'subscribe' => "Подписаться", 'mostComments' => ["Вчера", "Последние %d дней"], 'utilities' => array( @@ -92,7 +94,7 @@ $lang = array( 'cappedHint' => 'Подсказка: Удалите характеристики с капом (например, меткость).', 'groupBy' => "Группировать", 'gb' => array( - ['Нет', 'none'], ['Слот', 'slot'], ['Уровень', 'level'], ['Источник', 'source'] + ['Нет", "none'], ['Слот", "slot'], ['Уровень", "level'], ['Источник", "source'] ), 'compareTool' => "Инструмент сравнения предметов", 'talentCalc' => "Расчёт талантов", @@ -168,15 +170,17 @@ $lang = array( 'zone' => "игровая зона", 'zones' => "Местности", + 'honorPoints' => "Очки Чести", + 'arenaPoints' => "Очки арены", 'heroClass' => "Героический класс", 'resource' => "Ресурс", 'resources' => "Ресурсы", 'role' => "Роль", 'roles' => "Роли", 'specs' => "Ветки талантов", - '_roles' => ['Лекарь', 'Боец ближнего боя', 'Боец дальнего боя', 'Танк'], + '_roles' => ["Лекарь", "Боец ближнего боя", "Боец дальнего боя", "Танк"], - 'modes' => ['Обычный / 10-норм.', 'Героический / 25-норм.', '10-героич', '25-героич'], + 'modes' => ['Обычный / 10-норм.", "Героический / 25-норм.", "10-героич", "25-героич'], 'expansions' => array("World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"), 'stats' => array("к силе", "к ловкости", "к выносливости", "к интеллекту", "к духу"), 'sources' => array( @@ -189,8 +193,8 @@ $lang = array( ), 'gl' => array(null, "Большой", "Малый"), 'si' => array(1 => "Альянс", -1 => "Альянс только", 2 => "Орда", -2 => "Орда только", null, 3 => "Обе"), - 'resistances' => array(null, 'Сопротивление светлой магии', 'Сопротивление огню', 'Сопротивление силам природы', 'Сопротивление магии льда', 'Сопротивление темной магии', 'Сопротивление тайной магии'), - 'dt' => array(null, 'Магия', 'Проклятие', 'Болезнь', 'Яд', 'Незаметность', 'Невидимость', null, null, 'Исступление'), + 'resistances' => array(null, "Сопротивление светлой магии", "Сопротивление огню", "Сопротивление силам природы", "Сопротивление магии льда", "Сопротивление темной магии", "Сопротивление тайной магии"), + 'dt' => array(null, "Магия", "Проклятие", "Болезнь", "Яд", "Незаметность", "Невидимость", null, null, "Исступление"), 'sc' => array("Физический урон", "Свет", "Огонь", "природа", "Лед", "Тьма", "Тайная магия"), 'cl' => array(null, "Воин", "Паладин", "Охотник", "Разбойник", "Жрец", "Рыцарь смерти", "Шаман", "Маг", "Чернокнижник", null, "Друид"), 'ra' => array(-2 => "Орда", -1 => "Альянс", "Обе", "Человек", "Орк", "Дворф", "Ночной эльф", "Нежить", "Таурен", "Гном", "Тролль", null, "Эльф крови", "Дреней"), @@ -228,12 +232,6 @@ $lang = array( "Marshal / General", "Field Marshal / Warlord", "Grand Marshal / High Warlord" ), ), - 'error' => array( - 'errNotFound' => "Page not found", - 'errPage' => "What? How did you... nevermind that!\n \n \nIt appears that the page you have requested cannot be found. At least, not in this dimension.\n \n \nPerhaps a few tweaks to the [WH-799 Major Confabulation Engine] may result in the page suddenly making an appearance!\n\n\nOr, you can try \ncontacting us\n- the stability of the WH-799 is debatable, and we wouldn't want another accident...", - 'goStart' => "Return to the homepage", - 'goForum' => "Feedback forum", - ), 'account' => [], 'gameObject' => array( 'cat' => [0 => "Другое", 9 => "Книги", 3 => "Контейнеры", -5 => "Сундуки", 25 => "[Fishing Pools]", -3 => "Травы", -4 => "Полезные ископаемые", -2 => "Задания", -6 => "Инструменты"], @@ -286,8 +284,8 @@ $lang = array( 'series' => "Серии", 'outOf' => "из", 'criteriaType' => "[Criterium Type-Id]:", - 'itemReward' => "Вы получите:", - 'titleReward' => "Наградное звание: \"%s\"", + 'itemReward' => "Вы получите", + 'titleReward' => 'Наградное звание: "%s"', 'slain' => "убито", 'reqNumCrt' => "Требуется" ), @@ -321,23 +319,75 @@ $lang = array( ) ), 'quest' => array( - 'questLevel' => '%s-го уровня', - 'daily' => 'Ежедневно', - 'requirements' => 'Требования', + 'questLevel' => "%s-го уровня", + 'requirements' => "Требования", + 'reqMoney' => "Требуется денег", + 'money' => "Деньги", + 'additionalReq' => "Дополнительные условия для получения данного задания", + 'reqRepWith' => 'Ваша репутация с %s должна быть %s %s', + 'reqRepMin' => "не менее", + 'reqRepMax' => "меньше чем", + 'progress' => "Прогресс", + 'provided' => "Прилагается", + 'providedItem' => "Прилагается предмет", + 'completion' => "Завершение", + 'description' => "Описание", + 'playerSlain' => "Убито игроков", + 'profession' => "Профессия", + 'timer' => "Таймер", + 'loremaster' => "Хранитель мудрости", + 'suggestedPl' => "Рекомендуемое количество игроков", + 'keepsPvpFlag' => "Включает доступность PvP", + 'daily' => "Ежедневно", + 'weekly' => "Раз в неделю", + 'monthly' => "Ежемесячно", + 'sharable' => "Раздается", + 'notSharable' => "Не раздается", + 'repeatable' => "Повторяемый", + 'reqQ' => "Требует", + 'reqQDesc' => "Чтобы получить это задание, вы должны завершить все указанные задания", + 'reqOneQ' => "Требуется Один из", + 'reqOneQDesc' => "Чтобы получить это задание, необходимо выполнить одно из следующих заданий", + 'opensQ' => "Открывает доступ к заданиям", + 'opensQDesc' => "Выполнение этого задания требует, чтобы эти задания", + 'closesQ' => "Заканчивает задание", + 'closesQDesc' => "Завершив этот квест, вы не сможете выполнять эти квесты", + 'enablesQ' => "Позволяет", + 'enablesQDesc' => "Кода это задание активно, вы сможете выполнять эти задания", + 'enabledByQ' => "Включена по", + 'enabledByQDesc'=> "Вы можете получить это задание, только когда эти задания доступны", + 'gainsDesc' => "По завершении этого задания, вы получите", + 'theTitle' => '"%s"', // empty on purpose! + 'mailDelivery' => "[Вы получите это письмо %s]", + 'mailIn' => "[через %s]", + 'unavailable' => "пометили это задание как устаревшее — его нельзя получить или выполнить.", + 'experience' => "опыта", + 'expConvert' => "(или %s на %d-м уровне)", + 'expConvert2' => "%s на %d-м уровне", + 'chooseItems' => "Вам дадут возможность выбрать одну из следующих наград", + 'receiveItems' => "Вы получите", + 'receiveAlso' => "Вы также получите", + 'spellCast' => "Следующее заклинание будет наложено на вас", + 'spellLearn' => "Вы изучите", + 'bonusTalents' => "очков талантов", + 'spellDisplayed'=> ' (показано: %s)', 'questInfo' => array( - 0 => 'Обычный', 1 => 'Группа', 21 => 'Жизнь', 41 => 'PvP', 62 => 'Рейд', 81 => 'Подземелье', 82 => 'Игровое событие', - 83 => 'Легенда', 84 => 'Сопровождение', 85 => 'Героическое', 88 => 'Рейд (10)', 89 => 'Рейд (25)' + 0 => "Обычный", 1 => "Группа", 21 => "Жизнь", 41 => "PvP", 62 => "Рейд", 81 => "Подземелье", 82 => "Игровое событие", + 83 => "Легенда", 84 => "Сопровождение", 85 => "Героическое", 88 => "Рейд (10)", 89 => "Рейд (25)" + ), + 'cat' => array( + // todo: after zones ) ), 'title' => array( 'cat' => array( - 'Общее', 'PvP', 'Репутация', 'Подземелья и рейды', 'Задания', 'Профессии', 'Игровые события' + 'Общее", "PvP", "Репутация", "Подземелья и рейды", "Задания", "Профессии", "Игровые события' ) ), 'skill' => array( 'cat' => array( - -6 => 'Спутники', -5 => 'Транспорт', -4 => 'Классовые навыки', 5 => 'Характеристики', 6 => 'Оружейные навыки', 7 => 'Классовые навыки', 8 => 'Доспехи', - 9 => 'Вторичные навыки', 10 => 'Языки', 11 => 'Профессии' + -6 => "Спутники", -5 => "Транспорт", -4 => "Классовые навыки", 5 => "Характеристики", 6 => "Оружейные навыки", 7 => "Классовые навыки", 8 => "Доспехи", + 9 => "Вторичные навыки", 10 => "Языки", 11 => "Профессии" ) ), 'currency' => array( @@ -441,8 +491,8 @@ $lang = array( 'relItems' => array ( 'base' => "Показать %s, относящиеся к профессии %s", 'link' => " или ", - 'recipes' => "рецепты", - 'crafted' => "производимые предметы" + 'recipes' => 'рецепты', + 'crafted' => 'производимые предметы' ), 'cat' => array( 7 => "Способности", @@ -492,27 +542,27 @@ $lang = array( 20 => "Удочки", 14 => "Разное" ), 'subClassMasks' => array( - 0x02A5F3 => 'Оружие ближнего боя', 0x0060 => 'Щит', 0x04000C => 'Оружие дальнего боя', 0xA091 => 'Одноручное оружие ближнего боя' + 0x02A5F3 => "Оружие ближнего боя", 0x0060 => "Щит", 0x04000C => "Оружие дальнего боя", 0xA091 => "Одноручное оружие ближнего боя" ), 'traitShort' => array( 'atkpwr' => "СА", 'rgdatkpwr' => "Сил", 'splpwr' => "СЗ", 'arcsplpwr' => "Урон", 'firsplpwr' => "Урон", 'frosplpwr' => "Урон", 'holsplpwr' => "Урон", 'natsplpwr' => "Урон", 'shasplpwr' => "Урон", 'splheal' => "Исцеление" ), 'spellModOp' => array( - 'DAMAGE', 'DURATION', 'THREAT', 'EFFECT1', 'CHARGES', - 'RANGE', 'RADIUS', 'CRITICAL_CHANCE', 'ALL_EFFECTS', 'NOT_LOSE_CASTING_TIME', - 'CASTING_TIME', 'COOLDOWN', 'EFFECT2', 'IGNORE_ARMOR', 'COST', - 'CRIT_DAMAGE_BONUS', 'RESIST_MISS_CHANCE', 'JUMP_TARGETS', 'CHANCE_OF_SUCCESS', 'ACTIVATION_TIME', - 'DAMAGE_MULTIPLIER', 'GLOBAL_COOLDOWN', 'DOT', 'EFFECT3', 'BONUS_MULTIPLIER', - null, 'PROC_PER_MINUTE', 'VALUE_MULTIPLIER', 'RESIST_DISPEL_CHANCE', 'CRIT_DAMAGE_BONUS_2', - 'SPELL_COST_REFUND_ON_FAIL' + "DAMAGE", "DURATION", "THREAT", "EFFECT1", "CHARGES", + "RANGE", "RADIUS", "CRITICAL_CHANCE", "ALL_EFFECTS", "NOT_LOSE_CASTING_TIME", + "CASTING_TIME", "COOLDOWN", "EFFECT2", "IGNORE_ARMOR", "COST", + "CRIT_DAMAGE_BONUS", "RESIST_MISS_CHANCE", "JUMP_TARGETS", "CHANCE_OF_SUCCESS", "ACTIVATION_TIME", + "DAMAGE_MULTIPLIER", "GLOBAL_COOLDOWN", "DOT", "EFFECT3", "BONUS_MULTIPLIER", + null, "PROC_PER_MINUTE", "VALUE_MULTIPLIER", "RESIST_DISPEL_CHANCE", "CRIT_DAMAGE_BONUS_2", + "SPELL_COST_REFUND_ON_FAIL" ), 'combatRating' => array( - 'WEAPON_SKILL', 'DEFENSE_SKILL', 'DODGE', 'PARRY', 'BLOCK', - 'HIT_MELEE', 'HIT_RANGED', 'HIT_SPELL', 'CRIT_MELEE', 'CRIT_RANGED', - 'CRIT_SPELL', 'HIT_TAKEN_MELEE', 'HIT_TAKEN_RANGED', 'HIT_TAKEN_SPELL', 'CRIT_TAKEN_MELEE', - 'CRIT_TAKEN_RANGED', 'CRIT_TAKEN_SPELL', 'HASTE_MELEE', 'HASTE_RANGED', 'HASTE_SPELL', - 'WEAPON_SKILL_MAINHAND', 'WEAPON_SKILL_OFFHAND', 'WEAPON_SKILL_RANGED', 'EXPERTISE', 'ARMOR_PENETRATION' + "WEAPON_SKILL", "DEFENSE_SKILL", "DODGE", "PARRY", "BLOCK", + "HIT_MELEE", "HIT_RANGED", "HIT_SPELL", "CRIT_MELEE", "CRIT_RANGED", + "CRIT_SPELL", "HIT_TAKEN_MELEE", "HIT_TAKEN_RANGED", "HIT_TAKEN_SPELL", "CRIT_TAKEN_MELEE", + "CRIT_TAKEN_RANGED", "CRIT_TAKEN_SPELL", "HASTE_MELEE", "HASTE_RANGED", "HASTE_SPELL", + "WEAPON_SKILL_MAINHAND", "WEAPON_SKILL_OFFHAND", "WEAPON_SKILL_RANGED", "EXPERTISE", "ARMOR_PENETRATION" ), 'lockType' => array( null, "Взлом замков", "Травничество", "Горное дело", "Обезвреживание ловушки", @@ -521,8 +571,8 @@ $lang = array( "Газ'рилльское украшение", "Взрыв", "Медленное открытие (PvP)", "Медленное закрытие (PvP)", "Рыбная ловля (DND)", "Начертание", "Открыть на ходу" ), - 'stealthType' => ['GENERAL', 'TRAP'], - 'invisibilityType' => ['GENERAL', 3 => 'TRAP', 6 => 'DRUNK'] + 'stealthType' => ["GENERAL", "TRAP"], + 'invisibilityType' => ["GENERAL", 3 => "TRAP", 6 => "DRUNK"] ), 'item' => array( 'armor' => "Броня: %s", @@ -563,7 +613,7 @@ $lang = array( 'worth' => "Деньги", 'consumable' => "Расходуется", 'nonConsumable' => "Не расходуется", - 'accountWide' => "[Account-wide]", // 22.10. hm, check with 'source' later + 'accountWide' => "Привязано к учетной записи", 'millable' => "Можно растолочь", 'noEquipCD' => "Нет отката при надевании", 'prospectable' => "Просеиваемое", @@ -640,7 +690,6 @@ $lang = array( 1 => array("Контейнеры", array( 0 => "Сумки", 1 => "Сумки душ", 3 => "Сумки зачаровывателя", 4 => "Сумки инженера", 7 => "Сумки кожевника", 8 => "Сумки начертателя", 2 => "Сумки травника", 6 => "Сумки шахтера", 5 => "Сумки ювелира", - )), 0 => array("Расходуемые", array( 7 => "Бинты", 5 => "Еда и напитки", 1 => "Зелья", 0 => "Расходуемые", 4 => "Свитки", -3 => "Улучшения (временные)", @@ -724,7 +773,7 @@ $lang = array( "Unknown Bonus #%d (%d)", ) ), - 'colon' => ': ', + 'colon' => ": ", 'dateFmtShort' => "Y-m-d", 'dateFmtLong' => "Y-m-d в H:i" ); diff --git a/pages/achievement.php b/pages/achievement.php index 8c7e0bd9..bac8a9f6 100644 --- a/pages/achievement.php +++ b/pages/achievement.php @@ -69,7 +69,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) array_unshift($path, 0, 9); - $acv->addGlobalsToJscript($smarty, GLOBALINFO_REWARDS); + $acv->addGlobalsToJScript(GLOBALINFO_REWARDS); /***********/ /* Infobox */ @@ -141,7 +141,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) 'typeId' => $_id, 'headIcons' => $acv->getField('iconString'), 'infobox' => $infobox ? '[ul][li]'.implode('[/li][li]', $infobox).'[/li][/ul]' : null, - 'series' => $series, + 'series' => $series ? [[$series, null]] : null, 'redButtons' => array( BUTTON_LINKS => ['color' => 'ffffff00', 'linkId' => Util::$typeStrings[TYPE_ACHIEVEMENT].':'.$_id.':"..UnitGUID("player")..":0:0:0:0:0:0:0:0'], BUTTON_WOWHEAD => true @@ -163,11 +163,14 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) if ($foo = $acv->getField('rewards')[TYPE_ITEM]) { $bar = new ItemList(array(['i.id', $foo])); - foreach ($bar->iterate() as $__) + foreach ($bar->iterate() as $id => $__) { - $pageData['page']['itemReward'][$bar->id] = array( - 'name' => $bar->getField('name', true), - 'quality' => $bar->getField('quality') + $pageData['page']['itemReward'][] = array( + 'name' => $bar->getField('name', true), + 'quality' => $bar->getField('quality'), + 'typeStr' => Util::$typeStrings[TYPE_ITEM], + 'id' => $id, + 'globalStr' => 'g_items' ); } } @@ -200,7 +203,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) ) ); - $saList->addGlobalsToJscript($smarty); + $saList->addGlobalsToJscript(); // tab: criteria of $refs = DB::Aowow()->SelectCol('SELECT refAchievementId FROM ?_achievementcriteria WHERE Type = ?d AND value1 = ?d', @@ -221,7 +224,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) ) ); - $coList->addGlobalsToJscript($smarty); + $coList->addGlobalsToJscript(); } /*****************/ @@ -365,7 +368,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) 'quality' => $crtItm->getField('quality'), 'count' => $qty, ); - $crtItm->addGlobalsToJscript($smarty); + $crtItm->addGlobalsToJscript(); $tmp['icon'] = $iconId; $pageData['page']['icons'][] = array( 'itr' => $iconId++, diff --git a/pages/achievements.php b/pages/achievements.php index 4ce7564f..f7c4902c 100644 --- a/pages/achievements.php +++ b/pages/achievements.php @@ -94,7 +94,7 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter)) ); // fill g_items, g_titles, g_achievements - $acvList->addGlobalsToJscript($smarty); + $acvList->addGlobalsToJscript(); // if we are have different cats display field if ($acvList->hasDiffFields(['category'])) diff --git a/pages/class.php b/pages/class.php index bc6c9897..2b07805a 100644 --- a/pages/class.php +++ b/pages/class.php @@ -50,7 +50,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) // specs $specList = []; $skills = new SkillList(array(['id', $cl->getField('skills')])); - $skills->addGlobalsToJscript($smarty); + $skills->addGlobalsToJscript(); foreach ($skills->iterate() as $k => $__) $specList[$k] = '[icon name='.$skills->getField('iconString').'][url=?spells=7.'.$_id.'.'.$k.']'.$skills->getField('name', true).'[/url][/icon]'; @@ -112,7 +112,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) ); $genSpells = new SpellList($conditions); - $genSpells->addGlobalsToJscript($smarty, GLOBALINFO_SELF); + $genSpells->addGlobalsToJScript(GLOBALINFO_SELF); $pageData['relTabs'][] = array( 'file' => 'spell', @@ -140,7 +140,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) ); $items = new ItemList($conditions); - $items->addGlobalsToJscript($smarty); + $items->addGlobalsToJscript(); if (!$items->hasDiffFields(['requiredRace'])) $hidden = "$['side']"; @@ -163,12 +163,12 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) // Tab: Quests $conditions = array( - ['RequiredClasses', $_mask, '&'], - [['RequiredClasses', CLASS_MASK_ALL, '&'], CLASS_MASK_ALL, '!'] + ['reqClassMask', $_mask, '&'], + [['reqClassMask', CLASS_MASK_ALL, '&'], CLASS_MASK_ALL, '!'] ); $quests = new QuestList($conditions); - $quests->addGlobalsToJscript($smarty); + $quests->addGlobalsToJscript(); $pageData['relTabs'][] = array( 'file' => 'quest', @@ -181,7 +181,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) // Tab: Itemsets $sets = new ItemsetList(array(['classMask', $_mask, '&'])); - $sets->addGlobalsToJscript($smarty, GLOBALINFO_SELF); + $sets->addGlobalsToJScript(GLOBALINFO_SELF); $pageData['relTabs'][] = array( 'file' => 'itemset', diff --git a/pages/currencies.php b/pages/currencies.php index af56bbaf..e11ca30c 100644 --- a/pages/currencies.php +++ b/pages/currencies.php @@ -22,7 +22,7 @@ if ($cat) if (!$smarty->loadCache($cacheKey, $pageData)) { $money = new CurrencyList($cat ? array(['category', (int)$cat[0]]) : []); - $money->addGlobalsToJscript($smarty); + $money->addGlobalsToJscript(); // menuId 15: Currency g_initPath() // tabId 0: Database g_initHeader() diff --git a/pages/currency.php b/pages/currency.php index 6fed6319..47ba608a 100644 --- a/pages/currency.php +++ b/pages/currency.php @@ -47,7 +47,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) 'typeId' => $_id, 'infobox' => $infobox, 'name' => $currency->getField('name', true), - 'headIcons' => [$currency->getField('iconString')], + 'headIcons' => $_id == 104 ? ['inv_bannerpvp_02', 'inv_bannerpvp_01'] : [$currency->getField('iconString')], 'redButtons' => array( BUTTON_WOWHEAD => true, BUTTON_LINKS => true @@ -87,7 +87,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) $soldBy = new CreatureList(array(['id', array_keys($vendors)])); if (!$soldBy->error) { - $soldBy->addGlobalsToJscript($smarty, GLOBALINFO_SELF); + $soldBy->addGlobalsToJScript(GLOBALINFO_SELF); $sbData = $soldBy->getListviewData(); $extraCols = ['Listview.extraCols.stock', "Listview.funcBox.createSimpleCol('stack', 'stack', '10%', 'stack')", 'Listview.extraCols.cost']; @@ -134,7 +134,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) if ($holidays) { $hObj = new WorldEventList(array(['id', array_keys($holidays)])); - $hObj->addGlobalsToJscript($smarty); + $hObj->addGlobalsToJscript(); foreach ($hObj->iterate() as $id => $tpl) { if ($_ = $tpl['holidayId']) @@ -183,11 +183,20 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) // tab: currency for if ($_id == 103) + { + $n = '?items&filter=cr=145;crs=1;crv=0'; $w = 'iec.reqArenaPoints > 0'; + } else if ($_id == 104) + { + $n = '?items&filter=cr=144;crs=1;crv=0'; $w = 'iec.reqHonorPoints > 0'; + } else + { + $n = in_array($_id, [42, 61, 81, 241, 121, 122, 123, 125, 126, 161, 201, 101, 102, 221, 301, 341]) ? '?items&filter=cr=158;crs='.$currency->getField('itemId').';crv=0' : null; $w = 'iec.reqItemId1 = '.$_itemId.' OR iec.reqItemId2 = '.$_itemId.' OR iec.reqItemId3 = '.$_itemId.' OR iec.reqItemId4 = '.$_itemId.' OR iec.reqItemId5 = '.$_itemId; + } $boughtBy = DB::Aowow()->selectCol(' SELECT item FROM npc_vendor nv JOIN ?_itemExtendedCost iec ON iec.id = nv.extendedCost WHERE '.$w.' @@ -199,7 +208,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) $boughtBy = new ItemList(array(['id', $boughtBy])); if (!$boughtBy->error) { - $boughtBy->addGlobalsToJscript($smarty); + $boughtBy->addGlobalsToJscript(); $pageData['relTabs'][] = array( 'file' => 'item', @@ -208,7 +217,8 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) 'tabs' => '$tabsRelated', 'name' => '$LANG.tab_currencyfor', 'id' => 'currency-for', - 'extraCols' => "$[Listview.funcBox.createSimpleCol('stack', 'stack', '10%', 'stack'), Listview.extraCols.cost]" + 'extraCols' => "$[Listview.funcBox.createSimpleCol('stack', 'stack', '10%', 'stack'), Listview.extraCols.cost]", + 'note' => $n ? '$$WH.sprintf(LANG.lvnote_filterresults, \''.$n.'\')' : null ] ); } diff --git a/pages/events.php b/pages/events.php index aa00233e..0abf526b 100644 --- a/pages/events.php +++ b/pages/events.php @@ -30,7 +30,7 @@ if (!$smarty->loadCache($cacheKey, $pageData)) } $events = new WorldEventList($condition); - $events->addGlobalsToJScript($smarty); + $events->addGlobalsToJScript(); $deps = []; foreach ($events->iterate() as $__) diff --git a/pages/faction.php b/pages/faction.php index a797d348..df7847f8 100644 --- a/pages/faction.php +++ b/pages/faction.php @@ -98,7 +98,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) $conditions[] = ['parentFactionId', $_id]; // self as parent $spillover = new FactionList($conditions); - $spillover->addGlobalsToJscript(Util::$pageTemplate); + $spillover->addGlobalsToJscript(); $buff = []; foreach ($spillover->iterate() as $spillId => $__) @@ -145,7 +145,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) $items = new ItemList(array(['requiredFaction', $_id])); if (!$items->error) { - $items->addGlobalsToJscript($smarty, GLOBALINFO_SELF); + $items->addGlobalsToJScript(GLOBALINFO_SELF); $pageData['relTabs'][] = array( 'file' => 'item', @@ -175,7 +175,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) $killCreatures = new CreatureList(array(['id', $cIds])); if (!$killCreatures->error) { - $killCreatures->addGlobalsToJscript($smarty); + $killCreatures->addGlobalsToJscript(); $pageData['relTabs'][] = array( 'file' => 'creature', @@ -199,7 +199,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) $killCreatures = new CreatureList($conditions); if (!$killCreatures->error) { - $killCreatures->addGlobalsToJscript($smarty); + $killCreatures->addGlobalsToJscript(); $pageData['relTabs'][] = array( 'file' => 'creature', @@ -215,17 +215,17 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) // tab: quests $conditions = array( - ['AND', ['RewardFactionId1', $_id], ['OR', ['RewardFactionValueId1', 0, '>'], ['RewardFactionValueIdOverride1', 0, '>']]], - ['AND', ['RewardFactionId2', $_id], ['OR', ['RewardFactionValueId2', 0, '>'], ['RewardFactionValueIdOverride2', 0, '>']]], - ['AND', ['RewardFactionId3', $_id], ['OR', ['RewardFactionValueId3', 0, '>'], ['RewardFactionValueIdOverride3', 0, '>']]], - ['AND', ['RewardFactionId4', $_id], ['OR', ['RewardFactionValueId4', 0, '>'], ['RewardFactionValueIdOverride4', 0, '>']]], - ['AND', ['RewardFactionId5', $_id], ['OR', ['RewardFactionValueId5', 0, '>'], ['RewardFactionValueIdOverride5', 0, '>']]], + ['AND', ['rewardFactionId1', $_id], ['OR', ['rewardFactionValueId1', 0, '>'], ['rewardFactionValueIdOverride1', 0, '>']]], + ['AND', ['rewardFactionId2', $_id], ['OR', ['rewardFactionValueId2', 0, '>'], ['rewardFactionValueIdOverride2', 0, '>']]], + ['AND', ['rewardFactionId3', $_id], ['OR', ['rewardFactionValueId3', 0, '>'], ['rewardFactionValueIdOverride3', 0, '>']]], + ['AND', ['rewardFactionId4', $_id], ['OR', ['rewardFactionValueId4', 0, '>'], ['rewardFactionValueIdOverride4', 0, '>']]], + ['AND', ['rewardFactionId5', $_id], ['OR', ['rewardFactionValueId5', 0, '>'], ['rewardFactionValueIdOverride5', 0, '>']]], 'OR' ); $quests = new QuestList($conditions); if (!$quests->error) { - $quests->addGlobalsToJscript($smarty, GLOBALINFO_ANY); + $quests->addGlobalsToJScript(GLOBALINFO_ANY); $pageData['relTabs'][] = array( 'file' => 'quest', @@ -247,7 +247,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData)) $acvs = new AchievementList($conditions); if (!$acvs->error) { - $acvs->addGlobalsToJscript($smarty, GLOBALINFO_ANY); + $acvs->addGlobalsToJScript(GLOBALINFO_ANY); $pageData['relTabs'][] = array( 'file' => 'achievement', diff --git a/pages/item.php b/pages/item.php index adefec08..70208348 100644 --- a/pages/item.php +++ b/pages/item.php @@ -80,7 +80,7 @@ if (isset($_GET['xml'])) if (!$smarty->loadCache($cacheKeyXML, $root)) { $root = new SimpleXML(' '; - if($quest['RequiredNpcOrGo'.$i] != 0 && $quest['RequiredNpcOrGoCount'.$i] != 0) - { - if($quest['RequiredNpcOrGo'.$i] > 0) - { - // Необходимо какое-либо взамодействие с созданием - $quest['coreqs'][$i] = array_merge( - creatureinfo($quest['RequiredNpcOrGo'.$i]), - array('req_type' => 'npc') - ); - } - else - { - // необходимо какое-то взаимодействие с объектом - $quest['coreqs'][$i] = array_merge( - objectinfo(-$quest['RequiredNpcOrGo'.$i]), - array('req_type' => 'object') - ); - } - // Количество - $quest['coreqs'][$i]['count'] = $quest['RequiredNpcOrGoCount'.$i]; - // Спелл - if($quest['RequiredSpellCast'.$i]) - $quest['coreqs'][$i]['spell'] = array( - 'name' => $DB->selectCell('SELECT spellname_loc'.$_SESSION['locale'].' FROM ?_spell WHERE spellid=?d LIMIT 1', $quest['RequiredSpellCast'.$i]), - 'entry' => $quest['RequiredSpellCast'.$i] - ); - } - } - if(!$quest['coreqs']) - unset($quest['coreqs']); - - // Вещи, необходимые для квеста - $quest['itemreqs'] = array(); - for($i=0;$i<=4;++$i) - { - if($quest['RequiredItemId'.$i]!=0 && $quest['RequiredItemCount'.$i]!=0) - $quest['itemreqs'][] = array_merge(iteminfo($quest['RequiredItemId'.$i]), array('count' => $quest['RequiredItemCount'.$i])); - } - if(!$quest['itemreqs']) - unset($quest['itemreqs']); - - // Фракции необходимые для квеста - if($quest['RepObjectiveFaction']>0) - { - $quest['factionreq'] = array( - 'name' => $DB->selectCell('SELECT name_loc'.$_SESSION['locale'].' FROM ?_factions WHERE factionID=?d LIMIT 1', $quest['RepObjectiveFaction']), - 'entry' => $quest['RepObjectiveFaction'], - 'value' => reputations($quest['RepObjectiveValue']) - ); - } - - /* КВЕСТГИВЕРЫ И КВЕСТТЕЙКЕРЫ */ - - // КВЕСТГИВЕРЫ - // НПС - $rows = $DB->select(' - SELECT c.entry, c.name, A, H - {, l.name_loc?d AS name_loc} - FROM creature_questrelation q, ?_factiontemplate, creature_template c - {LEFT JOIN (locales_creature l) ON l.entry=c.entry AND ?} - WHERE - q.quest=?d - AND c.entry=q.id - AND factiontemplateID=c.faction_A - ', - ($_SESSION['locale']>0)? $_SESSION['locale']: DBSIMPLE_SKIP, - ($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP, - $quest['Id'] - ); - if($rows) - { - foreach($rows as $tmp) - { - $tmp['name'] = localizedName($tmp); - if($tmp['A'] == -1 && $tmp['H'] == 1) - $tmp['side'] = 'horde'; - elseif($tmp['A'] == 1 && $tmp['H'] == -1) - $tmp['side'] = 'alliance'; - $quest['start'][] = array_merge($tmp, array('type' => 'npc')); - } - } - unset($rows); - - // НПС-ивентовые - $rows = event_find(array('quest_id' => $quest['Id'])); - if ($rows) - { - foreach ($rows as $event) - foreach ($event['creatures_quests_id'] as $ids) - if ($ids['quest'] == $quest['Id']) - { - $tmp = creatureinfo($ids['creature']); - if($tmp['react'] == '-1,1') - $tmp['side'] = 'horde'; - elseif($tmp['react'] == '1,-1') - $tmp['side'] = 'alliance'; - $tmp['type'] = 'npc'; - $tmp['event'] = $event['entry']; - $quest['start'][] = $tmp; - } - } - unset($rows); - - // ГО - $rows = $DB->select(' - SELECT g.entry, g.name - {, l.name_loc?d AS name_loc} - FROM gameobject_questrelation q, gameobject_template g - {LEFT JOIN (locales_gameobject l) ON l.entry = g.entry AND ?} - WHERE - q.quest=?d - AND g.entry=q.id - ', - ($_SESSION['locale']>0)? $_SESSION['locale']: DBSIMPLE_SKIP, - ($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP, - $quest['Id'] - ); - if($rows) - { - foreach($rows as $tmp) - { - $tmp['name'] = localizedName($tmp); - $quest['start'][] = array_merge($tmp, array('type' => 'object')); - } - } - unset($rows); - - // итем - $rows = $DB->select(' - SELECT i.name, i.entry, i.quality, LOWER(a.iconname) AS iconname - {, l.name_loc?d AS name_loc} - FROM ?_icons a, item_template i - {LEFT JOIN (locales_item l) ON l.entry=i.entry AND ?} - WHERE - startquest = ?d - AND id = displayid - ', - ($_SESSION['locale']>0)? $_SESSION['locale']: DBSIMPLE_SKIP, - ($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP, - $quest['Id'] - ); - if($rows) - { - foreach($rows as $tmp) - { - $tmp['name'] = localizedName($tmp); - $quest['start'][] = array_merge($tmp, array('type' => 'item')); - } - } - unset($rows); - - // КВЕСТТЕЙКЕРЫ - // НПС - $rows = $DB->select(' - SELECT c.entry, c.name, A, H - {, l.name_loc?d AS name_loc} - FROM creature_involvedrelation q, ?_factiontemplate, creature_template c - {LEFT JOIN (locales_creature l) ON l.entry=c.entry AND ?} - WHERE - q.quest=?d - AND c.entry=q.id - AND factiontemplateID=c.faction_A - ', - ($_SESSION['locale']>0)? $_SESSION['locale']: DBSIMPLE_SKIP, - ($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP, - $quest['Id'] - ); - if($rows) - { - foreach($rows as $tmp) - { - $tmp['name'] = localizedName($tmp); - if($tmp['A'] == -1 && $tmp['H'] == 1) - $tmp['side'] = 'horde'; - elseif($tmp['A'] == 1 && $tmp['H'] == -1) - $tmp['side'] = 'alliance'; - $quest['end'][] = array_merge($tmp, array('type' => 'npc')); - } - } - unset($rows); - - // ГО - $rows = $DB->select(' - SELECT g.entry, g.name - {, l.name_loc?d AS name_loc} - FROM gameobject_involvedrelation q, gameobject_template g - {LEFT JOIN (locales_gameobject l) ON l.entry = g.entry AND ?} - WHERE - q.quest=?d - AND g.entry=q.id - ', - ($_SESSION['locale']>0)? $_SESSION['locale']: DBSIMPLE_SKIP, - ($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP, - $quest['Id'] - ); - if($rows) - { - foreach($rows as $tmp) - { - $tmp['name'] = localizedName($tmp); - $quest['end'][] = array_merge($tmp, array('type' => 'object')); - } - } - unset($rows); - - // Цель критерии - $rows = $DB->select(' - SELECT a.id, a.faction, a.name_loc?d AS name, a.description_loc?d AS description, a.category, a.points, s.iconname, z.areatableID - FROM ?_spellicons s, ?_achievementcriteria c, ?_achievement a - LEFT JOIN (?_zones z) ON a.map != -1 AND a.map = z.mapID - WHERE - a.icon = s.id - AND a.id = c.refAchievement - AND c.type IN (?a) - AND c.value1 = ?d - GROUP BY a.id - ORDER BY a.name_loc?d - ', - $_SESSION['locale'], - $_SESSION['locale'], - array(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST), - $quest['Id'], - $_SESSION['locale'] - ); - if($rows) - { - $quest['criteria_of'] = array(); - foreach($rows as $row) - { - allachievementsinfo2($row['id']); - $quest['criteria_of'][] = achievementinfo2($row); + if ($_ = DB::Aowow()->selectRow('SELECT id AS typeId, name_loc0, name_loc2, name_loc3, name_loc6, name_loc8, reqRaceMask FROM ?_quests WHERE nextQuestIdChain = ?d', $_['typeId'])) + { + $n = Util::localizedString($_, 'name'); + array_unshift($chain, array( + array( + 'side' => Util::sideByRaceMask($_['reqRaceMask']), + 'typeStr' => Util::$typeStrings[TYPE_QUEST], + 'typeId' => $_['typeId'], + 'name' => strlen($n) > 40 ? substr($n, 0, 40).'…' : $n + ) + )); } } - // Награды и благодарности, присылаемые почтой - if ($quest['RewardMailTemplateId']) + $_ = end($chain)[0]; + while($_) { - if(!($quest['mailrewards'] = loot('mail_loot_template', $quest['RewardMailTemplateId']))) - unset ($quest['mailrewards']); + if ($_ = DB::Aowow()->selectRow('SELECT id AS typeId, name_loc0, name_loc2, name_loc3, name_loc6, name_loc8, reqRaceMask, nextQuestIdChain AS _next FROM ?_quests WHERE id = ?d', $_['_next'])) + { + $n = Util::localizedString($_, 'name'); + array_push($chain, array( + array( + 'side' => Util::sideByRaceMask($_['reqRaceMask']), + 'typeStr' => Util::$typeStrings[TYPE_QUEST], + 'typeId' => $_['typeId'], + 'name' => strlen($n) > 40 ? substr($n, 0, 40).'…' : $n, + '_next' => $_['_next'], + ) + )); + } } - if ($quest['RewardMailDelay']) - $quest['maildelay'] = sec_to_time($quest['RewardMailDelay']); + + if (count($chain) > 1) + $series[] = [$chain, null]; + + + // todo (low): sensibly merge te following lists into 'series' + $listGen = function($cnd) + { + $chain = []; + $list = new QuestList($cnd); + if ($list->error) + return null; + + foreach ($list->iterate() as $id => $__) + { + $n = $list->getField('name', true); + $chain[] = array(array( + 'side' => Util::sideByRaceMask($list->getField('reqRaceMask')), + 'typeStr' => Util::$typeStrings[TYPE_QUEST], + 'typeId' => $id, + 'name' => strlen($n) > 40 ? substr($n, 0, 40).'…' : $n + )); + } + + return $chain; + }; + + $extraLists = array( + array( // Requires all of these quests (Quests that you must follow to get this quest) + 'reqQ', + array( + 'OR', + ['AND', ['nextQuestId', $_id], ['exclusiveGroup', 0, '<']], + ['AND', ['id', $quest->getField('prevQuestId')], ['nextQuestIdChain', $_id, '!']] + ) + ), + array( // Requires one of these quests (Requires one of the quests to choose from) + 'reqOneQ', + [['exclusiveGroup', 0, '>'], ['nextQuestId', $_id]] + ), + array( // Opens Quests (Quests that become available only after complete this quest (optionally only one)) + 'opensQ', + array( + 'OR', + ['AND', ['prevQuestId', $_id], ['id', $quest->getField('nextQuestIdChain'), '!']], + ['id', $quest->getField('nextQuestId')] + ) + ), + array( // Closes Quests (Quests that become inaccessible after completing this quest) + 'closesQ', + [['exclusiveGroup', 0, '!'], ['exclusiveGroup', $quest->getField('exclusiveGroup')], ['id', $_id, '!']] + ), + array( // During the quest available these quests (Quests that are available only at run time this quest) + 'enablesQ', + [['prevQuestId', -$_id]] + ), + array( // Requires an active quest (Quests during the execution of which is available on the quest) + 'enabledByQ', + [['id', -$quest->getField('prevQuestId')]] + ) + ); + + foreach ($extraLists as $el) + if ($_ = $listGen($el[1])) + $series[] = [$_, sprintf(Util::$dfnString, Lang::$quest[$el[0].'Desc'], Lang::$quest[$el[0]])]; + + + /*******************/ + /* Objectives List */ + /*******************/ + + $objectiveList = []; + + $srcItemId = $quest->getField('sourceItemId'); + if ($srcItemId) + { + $item = new itemList(array(['id', $srcItemId])); + if (!$item->error) + { + $item->addGlobalsToJscript(); + $objectiveList[] = array( + 'typeStr' => Util::$typeStrings[TYPE_ITEM], + 'id' => $srcItemId, + 'name' => $item->getField('name', true), + 'qty' => $quest->getField('sourceItemCount'), + 'quality' => $item->getField('quality'), + 'extraText' => ' ('.Lang::$quest['provided'].')' + ); + } + } + + if ($_ = $quest->getField('sourceSpellId')) + { + Util::$pageTemplate->extendGlobalIds(TYPE_SPELL, $_); + $objectiveList[] = array( + 'typeStr' => Util::$typeStrings[TYPE_SPELL], + 'id' => $_, + 'name' => SpellList::getName($_), + 'qty' => 0, + 'quality' => '', + 'extraText' => ' ('.Lang::$quest['provided'].')' + ); + } + + for ($i = 1; $i < 5; $i++) + { + $id = $quest->getField('reqNpcOrGo'.$i); + $qty = $quest->getField('reqNpcOrGoCount'.$i); + $altTxt = $quest->getField('objectiveText'.$i, true); + if (!$id || !$qty) + continue; + + if ($id > 0) + { + $proxy = new CreatureList(['OR', ['killCredit1', (int)$id], ['killCredit2', (int)$id]]); + if (!$proxy->error) + { + // todo (low): now do it properly this time! + $proxyList = ''.($altTxt ? $altTxt : CreatureList::getName($id)).''.($qty > 1 ? ' ('.$qty.')' : null); + $proxyList .= " \n
-
-
-{include file='footer.tpl'}
\ No newline at end of file
diff --git a/template/achievement.tpl b/template/achievement.tpl
index a2c1f6d4..26d36ce1 100644
--- a/template/achievement.tpl
+++ b/template/achievement.tpl
@@ -70,18 +70,7 @@
{if $itemReward} {* for items *}
-{if !empty($announcements)}
- {foreach from=$announcements item=item}
- {include file='bricks/announcement.tpl' an=$item}
- {/foreach}
-{/if}
-
-
-
-
-
-
- {$subject} #{$id}-{$notFound}
-
- {$lang.rewards}- {$lang.itemReward}
{$lang.rewards}
{$lang.related}diff --git a/template/brb.tpl b/template/brb.tpl index 30ddecf2..e3a0239d 100644 --- a/template/brb.tpl +++ b/template/brb.tpl @@ -5,9 +5,9 @@
-
+
diff --git a/template/bricks/infobox.tpl b/template/bricks/infobox.tpl
index 370eae0e..f8509696 100644
--- a/template/bricks/infobox.tpl
+++ b/template/bricks/infobox.tpl
@@ -4,29 +4,9 @@
Maintenance- +We will be back soon..ish!
{$lang.series} |
-
- |
{$lang.screenshots} |
- {if isset($som)}{/if}
-
-
-
+{if !empty($map) && isset($map.data)}
+ {if $map.data.zone < 0}
+
+ {if isset($map.som)}
+
+ {/if}
+
+
+
+ {else}
+
+ {if isset($map.som)}
+
+ {/if}
+ {if isset($map.mapperData)}
+ {$lang.foundIn} {$map.mapSelector}.
+ {/if}
+
+
+ {/if}
-
+
+{/if}
diff --git a/template/bricks/rewards.tpl b/template/bricks/rewards.tpl
new file mode 100644
index 00000000..bbd1b018
--- /dev/null
+++ b/template/bricks/rewards.tpl
@@ -0,0 +1,28 @@
+{if $rewTitle}
+ {$rewTitle}{$lang.colon}
+ {if isset($extra)}{$extra}{/if}
+
+{/if}
+{if $rewData}
+
+
{if !empty($listTitle)}{$listTitle}{else}{$lang.series}{/if} |
+
+ |
-
-
-
-{include file='footer.tpl'}
diff --git a/template/quest.tpl b/template/quest.tpl
new file mode 100644
index 00000000..dc2cccaf
--- /dev/null
+++ b/template/quest.tpl
@@ -0,0 +1,189 @@
+{include file='header.tpl'}
+
+
-{if !empty($announcements)}
- {foreach from=$announcements item=item}
- {include file='bricks/announcement.tpl' an=$item}
- {/foreach}
-{/if}
-
-
-
-
- {$lang.errNotFound}-
- {$lang.errPage}
-
- {$lang.links}-
+
+
+
+{include file='footer.tpl'}
diff --git a/template/quests.tpl b/template/quests.tpl
new file mode 100644
index 00000000..e699a6ad
--- /dev/null
+++ b/template/quests.tpl
@@ -0,0 +1,98 @@
+{include file='header.tpl'}
+
+
+
+{if !empty($announcements)}
+ {foreach from=$announcements item=item}
+ {include file='bricks/announcement.tpl' an=$item}
+ {/foreach}
+{/if}
+
+
+
+{include file='bricks/infobox.tpl'}
+
+
+
+{include file='bricks/redButtons.tpl'}
+
+
+
+{include file='bricks/tabsRelated.tpl' tabs=$lvData}
+
+{include file='bricks/contribute.tpl'}
+
+ {$name}+{if isset($unavailable)} + + {$lang.unavailable} +{/if} + +{if isset($reqMinRep) || isset($reqMaxRep)} +{$lang.additionalReq}{$lang.colon}+
{*shudder*} + {$lang.progress}+ {$requestItems} +{elseif $offerReward} +{$lang.completion}+ {$offerReward} +{/if} + +{if $end} +
{$lang.description}+ {$details} +{/if} + +{* Progress (disclosed) *} +{if $requestItems && $objectives} +{$lang.progress}+ +{/if} + +{* Completion (disclosed) *} +{if $offerReward && ($requestItems || $objectives)} +{$lang.completion}+ +{/if} + +{* Rewards *} +{if !empty($rewards.items) || !empty($rewards.money) || !empty($rewards.spells) || !empty($rewards.choice)} + {assign var='offset' value=0} +{$lang.rewards}+ + {if isset($rewards.choice)} + {include file='bricks/rewards.tpl' rewTitle=$lang.chooseItems rewData=$rewards.choice offset=$offset} + {math assign='offset' equation="x + y" x=$offset y=$rewards.choice|@count} + {/if} + + {if isset($rewards.spells)} + {if isset($rewards.choice)} + + {/if} + + {if isset($rewards.spells.learn)} + {include file='bricks/rewards.tpl' rewTitle=$lang.spellLearn rewData=$rewards.spells.learn offset=$offset extra=$rewards.spells.extra} + {math assign='offset' equation="x + y" x=$offset y=$rewards.spells.learn|@count} + {else} + {include file='bricks/rewards.tpl' rewTitle=$lang.spellCast rewData=$rewards.spells.cast offset=$offset extra=$rewards.spells.extra} + {math assign='offset' equation="x + y" x=$offset y=$rewards.spells.cast|@count} + {/if} + {/if} + + {if !empty($rewards.items) || !empty($rewards.money)} + {if isset($rewards.choice) || isset($rewards.spells)} + + {/if} + + {if isset($rewards.choice)} {* bullshit!! *} + {include file='bricks/rewards.tpl' rewTitle=$lang.receiveAlso rewData=$rewards.items offset=$offset extra=$rewards.money} + {else} + {include file='bricks/rewards.tpl' rewTitle=$lang.receiveItems rewData=$rewards.items offset=$offset extra=$rewards.money} + {/if} + {/if} +{/if} + +{* Gains *} +{if $gains} +{$lang.gains}+ {$lang.gainsDesc}{$lang.colon} +
{$lang.mailDelivery|sprintf:$mail.delay}+ {if $mail.subject} +{$mail.subject} {$mail.text} {$lang.related}+
+
+
+
+{include file='footer.tpl'}
diff --git a/template/text-page-generic.tpl b/template/text-page-generic.tpl
index 0959ee77..4970ca8e 100644
--- a/template/text-page-generic.tpl
+++ b/template/text-page-generic.tpl
@@ -10,28 +10,37 @@
{/foreach}
{/if}
+{if isset($notFound)}
+
+
+
+
+{if !empty($announcements)}
+ {foreach from=$announcements item=item}
+ {include file='bricks/announcement.tpl' an=$item}
+ {/foreach}
+{/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{$typeStr} #{$typeId}+{$notFound}
+{else}
{$name}-{include file='bricks/article.tpl'} + {include file='bricks/article.tpl'} -{if isset($extraText)} - - + {if isset($extraText)} + + - + + {/if} {/if} - |