omgishouldntbedoingthis

This commit is contained in:
Sarjuuk
2013-11-24 23:15:15 +01:00
parent 2d736fc785
commit 5e785d6c78
39 changed files with 2131 additions and 937 deletions

View File

@@ -162,7 +162,7 @@ define('LOOT_PROSPECTING', 'prospecting_loot_template');
define('LOOT_MILLING', 'milling_loot_template');
define('LOOT_PICKPOCKET', 'pickpocketing_loot_template');
define('LOOT_SKINNING', 'skinning_loot_template');
define('LOOT_QUEST', 'quest_mail_loot_template');
define('LOOT_QUEST', 'mail_loot_template'); // changed to quest_mail_loot_template..?
define('LOOT_SPELL', 'spell_loot_template');
define('LOOT_REFERENCE', 'reference_loot_template');
@@ -310,6 +310,11 @@ define('LOCK_PROPERTY_FOOTLOCKER', 1);
define('LOCK_PROPERTY_HERBALISM', 2);
define('LOCK_PROPERTY_MINING', 3);
// Creature
define('NPC_TYPEFLAG_HERBLOOT', 0x0100);
define('NPC_TYPEFLAG_MININGLOOT', 0x0200);
define('NPC_TYPEFLAG_ENGINEERLOOT', 0x8000);
// GameObject
define('OBJECT_DOOR', 0);
define('OBJECT_BUTTON', 1);

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class AchievementList extends BaseType
{
use listviewHelper;

View File

@@ -249,15 +249,10 @@ abstract class BaseType
if ($limit)
$this->queryBase .= ' LIMIT '.$limit;
// Util::execTime(true);
// var_dump($this->queryBase);
// echo "<br><br>\n\n";
// execure query (finally)
$rows = DB::Aowow()->SelectPage($this->matches, $this->queryBase);
if (!$rows)
return;
// var_dump(Util::execTime());
// echo "<br><br><br>\n\n";
// assign query results to template
foreach ($rows as $k => $tpl)

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class CharClassList extends BaseType
{
public static $type = TYPE_CLASS;

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class CharRaceList extends BaseType
{
public static $type = TYPE_RACE;

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class CurrencyList extends BaseType
{
public static $type = TYPE_CURRENCY;

View File

@@ -8,6 +8,12 @@ class GameObjectList extends BaseType
{
public static $type = TYPE_OBJECT;
protected $queryBase = 'SELECT *, go.entry AS ARRAY_KEY FROM gameobject_template go';
protected $queryOpts = array(
'go' => [['lg']],
'lg' => ['j' => ['locales_gameobject lq ON go.entry = lq.entry', true]]
);
public static function getName($id)
{
$n = DB::Aowow()->SelectRow('

View File

@@ -3,15 +3,6 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
/*
! DONT FORGET !
REMOVE TEMP-HACK FROM Lang::load
fix locale files in gereral >.<
! DONT FORGET !
*/
class ItemList extends BaseType
{
@@ -40,7 +31,7 @@ class ItemList extends BaseType
{
// search by statweight
if ($miscData && isset($miscData['wt']) && isset($miscData['wtv']))
$conditions[] = $this->createConditionsForWeights($miscData, $this->queryOpts);
$conditions[] = $this->createConditionsForWeights($miscData);
parent::__construct($conditions, $applyFilter);
@@ -85,7 +76,7 @@ class ItemList extends BaseType
public function getExtendedCost()
{
// placeholder
return [];
return []; // [id => qty]
}
public function getListviewData($addInfoMask = 0x0)
@@ -301,7 +292,7 @@ class ItemList extends BaseType
if ($_ = $this->curTpl['map'])
{
$map = DB::Aowow()->selectRow('SELECT * FROM ?_zones WHERE mapId = ?d LIMIT 1', $_);
$x .= '<br /><a href="?map='.$_.'" class="q1">'.Util::localizedString($map, 'name').'</a>';
$x .= '<br /><a href="?zone='.$_.'" class="q1">'.Util::localizedString($map, 'name').'</a>';
}
// requires area
@@ -316,7 +307,7 @@ class ItemList extends BaseType
$x .= '<br />'.Lang::$item['conjured'];
// bonding
if (($_flags & ITEM_FLAG_ACCOUNTBOUND))
if ($_flags & ITEM_FLAG_ACCOUNTBOUND)
$x .= '<br /><!--bo-->'.Lang::$item['bonding'][0];
else if ($this->curTpl['bonding'])
$x .= '<br /><!--bo-->'.Lang::$item['bonding'][$this->curTpl['bonding']];
@@ -339,7 +330,7 @@ class ItemList extends BaseType
// max duration
if ($dur = $this->curTpl['duration'])
$x .= "<br />".Lang::$game['duration'] . ' '. Util::formatTime(abs($dur) * 1000) . ($dur < 0 ? ' ('.Lang::$game['realTime'].')' : null);
$x .= "<br />".Lang::$game['duration'].Lang::$colon.Util::formatTime(abs($dur) * 1000).($this->curTpl['flagsCustom'] & 0x1 ? ' ('.Lang::$item['realTime'].')' : null);
// required holiday
if ($hId = $this->curTpl['holidayId'])
@@ -353,7 +344,7 @@ class ItemList extends BaseType
$x .= '<br /><a class="q1" href="?quest='.$this->curTpl['startQuest'].'">'.Lang::$item['startQuest'].'</a>';
// containerType (slotCount)
if ($this->curTpl['slots'] > 1)
if ($this->curTpl['slots'] > 0)
{
$fam = log($this->curTpl['bagFamily'], 2) + 1;
// word order differs <_<
@@ -380,7 +371,7 @@ class ItemList extends BaseType
$x .= '</tr></table>';
}
else if ($_ = $this->curTpl['slot']) // yes, slot can occur on random items and is than also displayed <_<
else if (($_ = $this->curTpl['slot']) && $_class != ITEM_CLASS_CONTAINER) // yes, slot can occur on random items and is then also displayed <_< .. excluding Bags >_>
$x .= '<br />'.Lang::$item['inventoryType'][$this->curTpl['slot']].'<br />';
else
$x .= '<br />';
@@ -571,12 +562,13 @@ class ItemList extends BaseType
// required level
if (($_flags & ITEM_FLAG_ACCOUNTBOUND) && $_quality == ITEM_QUALITY_HEIRLOOM)
$x .= sprintf(Lang::$game['reqLevelHlm'], ' 1'.Lang::$game['valueDelim'].MAX_LEVEL.' ('.($interactive ? printf(Util::$changeLevelString, MAX_LEVEL) : '<!--lvl-->'.MAX_LEVEL).')').'<br />';
$x .= sprintf(Lang::$game['reqLevelHlm'], ' 1'.Lang::$game['valueDelim'].MAX_LEVEL.' ('.($interactive ? sprintf(Util::$changeLevelString, MAX_LEVEL) : '<!--lvl-->'.MAX_LEVEL).')').'<br />';
else if ($_reqLvl > 1)
$x .= sprintf(Lang::$game['reqLevel'], $_reqLvl).'<br />';
// item level
$x .= Lang::$item['itemLevel'].' '.$this->curTpl['itemLevel'];
if (in_array($_class, [ITEM_CLASS_ARMOR, ITEM_CLASS_WEAPON]))
$x .= Lang::$item['itemLevel'].' '.$this->curTpl['itemLevel'].'<br />';
// required skill
if ($reqSkill = $this->curTpl['requiredSkill'])
@@ -585,28 +577,26 @@ class ItemList extends BaseType
if ($this->curTpl['requiredSkillRank'] > 0)
$_ .= ' ('.$this->curTpl['requiredSkillRank'].')';
$x .= '<br />'.sprintf(Lang::$game['requires'], $_);
$x .= sprintf(Lang::$game['requires'], $_).'<br />';
}
// required spell
if ($reqSpell = $this->curTpl['requiredSpell'])
$x .= '<br />'.Lang::$game['requires2'].' <a class="q1" href="?spell='.$reqSpell.'">'.SpellList::getName($reqSpell).'</a>';
$x .= Lang::$game['requires2'].' <a class="q1" href="?spell='.$reqSpell.'">'.SpellList::getName($reqSpell).'</a><br />';
// required reputation w/ faction
if ($reqFac = $this->curTpl['requiredFaction'])
$x .= '<br />'.sprintf(Lang::$game['requires'], '<a class="q1" href=?faction="'.$reqFac.'">'.FactionList::getName($reqFac).'</a> - '.Lang::$game['rep'][$this->curTpl['requiredFactionRank']]);
$x .= sprintf(Lang::$game['requires'], '<a class="q1" href=?faction="'.$reqFac.'">'.FactionList::getName($reqFac).'</a> - '.Lang::$game['rep'][$this->curTpl['requiredFactionRank']]).'<br />';
// locked or openable
if ($locks = Lang::getLocks($this->curTpl['lockId'], true))
$x .= '<br /><span class="q0">'.Lang::$item['locked'].'<br />'.implode('<br />', $locks).'</span>';
$x .= '<span class="q0">'.Lang::$item['locked'].'<br />'.implode('<br />', $locks).'</span><br />';
else if ($this->curTpl['flags'] & ITEM_FLAG_OPENABLE)
$x .= '<br /><span class="q2">'.Lang::$item['openClick'].'</span>';
$x .= '<span class="q2">'.Lang::$item['openClick'].'</span><br />';
// upper table: done
if (!$subOf)
$x .= '</td></tr></table>';
else
$x .= '<br>';
// spells on item
if (!$this->canTeachSpell())
@@ -1199,14 +1189,14 @@ class ItemList extends BaseType
'classs' => $this->curTpl['class'],
'subclass' => $this->curTpl['subClass'],
'subsubclass' => $this->curTpl['subSubClass'],
'heroic' => (string)($this->curTpl['flags'] & 0x8),
'heroic' => ($this->curTpl['flags'] & 0x8) >> 3,
'side' => $this->curTpl['flagsExtra'] & 0x3 ? 3 - ($this->curTpl['flagsExtra'] & 0x3) : Util::sideByRaceMask($this->curTpl['requiredRace']),
'slot' => $this->curTpl['slot'],
'slotbak' => $this->curTpl['slotBak'],
'level' => $this->curTpl['itemLevel'],
'reqlevel' => $this->curTpl['requiredLevel'],
'displayid' => $this->curTpl['displayId'],
// 'commondrop' => 'true' / null // set if the item is a loot-filler-item .. checke common ref-templates..?
// 'commondrop' => 'true' / null // set if the item is a loot-filler-item .. check common ref-templates..?
'holres' => $this->curTpl['resHoly'],
'firres' => $this->curTpl['resFire'],
'natres' => $this->curTpl['resNature'],
@@ -1334,8 +1324,6 @@ class ItemListFilter extends Filter
157 => [FILTER_CR_FLAG, 'flags', ITEM_FLAG_SMARTLOOT ], // smartloot
159 => [FILTER_CR_FLAG, 'flags', ITEM_FLAG_MILLABLE ], // millable
162 => [FILTER_CR_FLAG, 'flags', ITEM_FLAG_DEPRECATED ], // deprecated
127 => [FILTER_CR_FLAG, 'cuFlags', CUSTOM_UNAVAILABLE ], // notavailable
// 161 => [FILTER_CR_FLAG, 'cuFlags', ~CUSTOM_UNAVAILABLE ], // availabletoplayers .. wait what?!
151 => [FILTER_CR_NUMERIC, 'id', null, true], // id
100 => [FILTER_CR_NUMERIC, 'is.nsockets' ], // nsockets
111 => [FILTER_CR_NUMERIC, 'requiredSkillRank', null, true], // reqskillrank
@@ -1480,6 +1468,10 @@ class ItemListFilter extends Filter
if ($this->int2Bool($cr[1]))
return ['maxCount', 1, $cr[1] ? null : '!'];
break;
case 161: // availabletoplayers [yn]
if ($this->int2Bool($cr[1]))
return [['cuFlags', CUSTOM_UNAVAILABLE, '&'], 0, $cr[1] ? null : '!'];
break;
case 80: // has sockets [enum]
switch ($cr[1])
{
@@ -1728,10 +1720,20 @@ class ItemListFilter extends Filter
if (isset($_v['upg']))
{
// valid item?
if (is_int($_v['upg']) && DB::Aowow()->selectCell('SELECT 1 FROM ?_items WHERE class IN (2, 3, 4) AND id = ?d', $_v['upg']))
$this->formData['form']['upg'] = $_v['upg'];
else
if (!is_int($_v['upg']))
unset($_v['upg']);
else
{
$_ = DB::Aowow()->selectCell('SELECT slot FROM ?_items WHERE class IN (2, 3, 4) AND id = ?d', $_v['upg']);
if ($_ === null)
unset($_v['upg']);
else
{
$this->formData['form']['upg'] = $_v['upg'];
if ($_)
$parts[] = ['slot', $_];
}
}
}
// group by [form only]

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class ItemsetList extends BaseType
{
use ListviewHelper;

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class PetList extends BaseType
{
use ListviewHelper;

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class QuestList extends BaseType
{
public static $type = TYPE_QUEST;

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class SpellList extends BaseType
{
use listviewHelper;
@@ -394,11 +395,11 @@ class SpellList extends BaseType
{ // Blood 2|1 - Unholy 2|1 - Frost 2|1
$runes = [];
if ($_ = (($rCost & 0x300) >> 8))
$runes[] = $_." ".Lang::$spell['powerRunes'][2];
$runes[] = $_.' '.Lang::$spell['powerRunes'][2];
if ($_ = (($rCost & 0x030) >> 4))
$runes[] = $_." ".Lang::$spell['powerRunes'][1];
$runes[] = $_.' '.Lang::$spell['powerRunes'][1];
if ($_ = ($rCost & 0x003))
$runes[] = $_." ".Lang::$spell['powerRunes'][0];
$runes[] = $_.' '.Lang::$spell['powerRunes'][0];
$str .= implode(', ', $runes);
}
@@ -421,7 +422,7 @@ class SpellList extends BaseType
else if ($this->curTpl['castTime'] > 0)
return $short ? sprintf(Lang::$spell['castIn'], $this->curTpl['castTime'] / 1000) : Util::formatTime($this->curTpl['castTime']);
// show instant only for player/pet/npc abilities (todo (low): unsure when really hidden (like talent-case))
else if ($noInstant && !in_array($this->curTpl['typeCat'], [11, 7, -3, -8, 0]) && !($this->curTpl['cuFlags'] & SPELL_CU_TALENTSPELL))
else if ($noInstant && !in_array($this->curTpl['typeCat'], [11, 7, -3, -6, -8, 0]) && !($this->curTpl['cuFlags'] & SPELL_CU_TALENTSPELL))
return '';
// SPELL_ATTR0_ABILITY instant ability.. yeah, wording thing only (todo (low): rule is imperfect)
else if ($this->curTpl['damageClass'] != 1 || $this->curTpl['attributes0'] & 0x10)
@@ -487,16 +488,56 @@ class SpellList extends BaseType
public function canTriggerSpell()
{
$idx = [];
// effect - 3: dummy; 32: trigger missile; 36: learn spell; 57: learn pet spell; 64/151: trigger spell (2); 101: feed pet; 133: unlearn specialization; 140/142: force cast (with value); 148/152/160: unk; 164: remove aura
// effect - 3: dummy; 32: trigger missile; 36: learn spell; 57: learn pet spell; 64/151: trigger spell (2); 101: feed pet; 133: unlearn specialization; 140/142: force cast (with value); 148/152/160: unk; 155: dualwield 2H; 164: remove aura
// aura - 4: dummy; 23/227: periodic trigger spell (with value); 42/231: proc trigger spell (with value); 48: unk; 109: add target trigger; 226: periodic dummy; 236: control vehicle; 284: linked
for ($i = 1; $i < 4; $i++)
if (in_array($this->curTpl['effect'.$i.'Id'], [3, 32, 36, 57, 64, 101, 133, 142, 148, 151, 152, 160, 164]) || in_array($this->curTpl['effect'.$i.'AuraId'], [4, 23, 42, 48, 109, 226, 227, 231, 236, 284]))
if ($this->curTpl['effect'.$i.'TriggerSpell'] > 0)
if (in_array($this->curTpl['effect'.$i.'Id'], [3, 32, 36, 57, 64, 101, 133, 142, 148, 151, 152, 155, 160, 164]) || in_array($this->curTpl['effect'.$i.'AuraId'], [4, 23, 42, 48, 109, 226, 227, 231, 236, 284]))
if ($this->curTpl['effect'.$i.'TriggerSpell'] > 0 || $this->curTpl['effect'.$i.'MiscValue'] > 0)
$idx[] = $i;
return $idx;
}
public function isChanneledSpell()
{
return $this->curTpl['attributes1'] & 0x44;
}
public function isHealingSpell()
{
$eff = [0, 3, 10, 67, 75, 136]; // <no effect>, Dummy, Heal, Heal Max Health, Heal Mechanical, Heal Percent
$aur = [4, 8, 62, 69, 97, 226]; // Dummy, Periodic Heal, Periodic Health Funnel, School Absorb, Mana Shield, Periodic Dummy
for ($i = 1; $i < 4; $i++)
if (!in_array($this->curTpl['effect'.$i.'Id'], $eff) && !in_array($this->curTpl['effect'.$i.'AuraId'], $aur))
return false;
return true;
}
public function isDamagingSpell()
{
$eff = [0, 2, 3, 9, 62]; // <no effect>, Dummy, School Damage, Health Leech, Power Burn
$aur = [3, 4, 15, 53, 89, 162, 226]; // Periodic Damage, Dummy, Damage Shield, Periodic Health Leech, Periodic Damage Percent, Power Burn Mana, Periodic Dummy
for ($i = 1; $i < 4; $i++)
if (!in_array($this->curTpl['effect'.$i.'Id'], $eff) && !in_array($this->curTpl['effect'.$i.'AuraId'], $aur))
return false;
return true;
}
public function periodicEffectsMask()
{
$effMask = 0x0;
for ($i = 1; $i < 4; $i++)
if ($this->curTpl['effect'.$i.'Periode'] > 0)
$effMask |= 1 << ($i - 1);
return $effMask;
}
// description-, buff-parsing component
private function resolveEvaluation($formula)
{
@@ -566,6 +607,10 @@ class SpellList extends BaseType
return eval('return '.$formula.';');
}
// since this function may be called recursively, there are cases, where the already evaluated string is tried to be evaled again, throwing parse errors
if (strstr($formula, '</dfn>'))
return $formula;
// hm, minor eval-issue. eval doesnt understand two operators without a space between them (eg. spelll: 18126)
$formula = preg_replace('/(\+|-|\*|\/)(\+|-|\*|\/)/i', '\1 \2', $formula);
@@ -626,7 +671,7 @@ class SpellList extends BaseType
else
$base = $this->getField('duration');
if ($base < 0)
if ($base <= 0)
return Lang::$spell['untilCanceled'];
if ($op && is_numeric($oparg) && is_numeric($base))
@@ -1042,13 +1087,16 @@ class SpellList extends BaseType
return array("", []);
// step 1: if the text is supplemented with text-variables, get and replace them
if (empty($this->spellVars[$this->id]) && $this->curTpl['spellDescriptionVariableId'] > 0)
if ($this->curTpl['spellDescriptionVariableId'] > 0)
{
if (empty($this->spellVars[$this->id]))
{
$spellVars = DB::Aowow()->SelectCell('SELECT vars FROM ?_spellVariables WHERE id = ?d', $this->curTpl['spellDescriptionVariableId']);
$spellVars = explode("\n", $spellVars);
foreach ($spellVars as $sv)
if (preg_match('/\$(\w*\d*)=(.*)/i', trim($sv), $matches))
$this->spellVars[$this->id][$matches[1]] = $matches[2];
}
// replace self-references
$reset = true;
@@ -1345,7 +1393,7 @@ Lasts 5 min. $?$gte($pl,68)[][Cannot be used on items level 138 and higher.]
if ($cId = $this->curTpl['effect'.$i.'CreateItemId'])
{
$createItem = (new ItemList(array(['i.id', (int)$cId])))->renderTooltip([], true, true);
$createItem = (new ItemList(array(['i.id', (int)$cId])))->renderTooltip([], true, $this->id);
break;
}
}
@@ -1520,13 +1568,13 @@ Lasts 5 min. $?$gte($pl,68)[][Cannot be used on items level 138 and higher.]
'cat' => $this->curTpl['typeCat'],
'trainingcost' => $this->curTpl['trainingCost'],
'skill' => count($this->curTpl['skillLines']) > 4 ? array_merge(array_splice($this->curTpl['skillLines'], 0, 4), [-1]): $this->curTpl['skillLines'], // display max 4 skillLines (fills max three lines in listview)
'reagents' => $this->getReagentsForCurrent(),
'reagents' => array_values($this->getReagentsForCurrent()),
'source' => []
);
// Sources
if (!empty($this->sources[$this->id]) && $s = $this->sources[$this->id])
$data[$this->id]['source'] = json_encode(array_keys($s), JSON_NUMERIC_CHECK);
$data[$this->id]['source'] = array_keys($s);
// Proficiencies
if ($this->curTpl['typeCat'] == -11)
@@ -1633,6 +1681,81 @@ spells / buffspells = {
$template->extendGlobalData(self::$type, $data, $extra);
}
}
// mostly similar to TC
public function getCastingTimeForBonus($asDOT = false)
{
$areaTargets = [7, 8, 15, 16, 20, 24, 30, 31, 33, 34, 37, 54, 56, 59, 104, 108];
$castingTime = $this->IsChanneledSpell() ? $this->curTpl['duration'] : $this->curTpl['castTime'];
if (!$castingTime)
return 3500;
if ($castingTime > 7000)
$castingTime = 7000;
if ($castingTime < 1500)
$castingTime = 1500;
if ($asDOT && !$this->isChanneledSpell())
$castingTime = 3500;
$overTime = 0;
$nEffects = 0;
$isDirect = false;
$isArea = false;
for ($i = 1; $i <= 3; $i++)
{
if (in_array($this->curTpl['effect'.$i.'Id'], [2, 7, 8, 9, 62, 67]))
$isDirect = true;
else if (in_array($this->curTpl['effect'.$i.'AuraId'], [3, 8, 53]))
if ($_ = $this->curTpl['duration'])
$overTime = $_;
else if ($this->curTpl['effect'.$i.'AuraId'])
$nEffects++;
if (in_array($this->curTpl['effect'.$i.'ImplicitTargetA'], $areaTargets) || in_array($this->curTpl['effect'.$i.'ImplicitTargetB'], $areaTargets))
$isArea = true;
}
// Combined Spells with Both Over Time and Direct Damage
if ($overTime > 0 && $castingTime > 0 && $isDirect)
{
// mainly for DoTs which are 3500 here otherwise
$originalCastTime = $this->curTpl['castTime'];
if ($this->curTpl['attributes0'] & 0x2) // requires Ammo
$originalCastTime += 500;
if ($originalCastTime > 7000)
$originalCastTime = 7000;
if ($originalCastTime < 1500)
$originalCastTime = 1500;
// Portion to Over Time
$PtOT = ($overTime / 15000) / (($overTime / 15000) + (OriginalCastTime / 3500));
if ($asDOT)
$castingTime = $castingTime * $PtOT;
else if ($PtOT < 1)
$castingTime = $castingTime * (1 - $PtOT);
else
$castingTime = 0;
}
// Area Effect Spells receive only half of bonus
if ($isArea)
$castingTime /= 2;
// -5% of total per any additional effect
$castingTime -= ($nEffects * 175);
if ($castingTime < 0)
$castingTime = 0;
return $castingTime;
}
}

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class TitleList extends BaseType
{
use listviewHelper;

View File

@@ -3,6 +3,7 @@
if (!defined('AOWOW_REVISION'))
die('illegal access');
class WorldEventList extends BaseType
{
public static $type = TYPE_WORLDEVENT;

View File

@@ -41,13 +41,10 @@ class Lang
foreach ($lang as $k => $v)
self::$$k = $v;
// *cough* .. temp-hack
if (User::$localeId == LOCALE_EN)
{
// *cough* .. reuse-hack
self::$item['cat'][2] = [self::$item['cat'][2], self::$spell['weaponSubClass']];
self::$item['cat'][2][1][14] .= ' ('.self::$item['cat'][2][0].')';
}
}
// todo: expand
public static function getInfoBoxForFlags($flags)
@@ -141,13 +138,22 @@ class Lang
public static function getRequiredItems($class, $mask, $short = true)
{
if (!in_array($class, [ITEM_CLASS_MISC, ITEM_CLASS_ARMOR, ITEM_CLASS_WEAPON]))
return '';
// not checking weapon / armor here. It's highly unlikely that they overlap
if ($short)
{
if ($class == ITEM_CLASS_MISC) // misc - Mounts
// misc - Mounts
if ($class == ITEM_CLASS_MISC)
return '';
if ($class == ITEM_CLASS_ARMOR && $mask == 0x1E) // all basic armor classes
// all basic armor classes
if ($class == ITEM_CLASS_ARMOR && ($mask & 0x1E) == 0x1E)
return '';
// all weapon classes
if ($class == ITEM_CLASS_WEAPON && ($mask & 0x1DE5FF) == 0x1DE5FF)
return '';
foreach (Lang::$spell['subClassMasks'] as $m => $str)
@@ -380,8 +386,10 @@ class SmartyAoWoW extends Smarty
$this->jsGlobals[$type] = [];
if (is_array($data))
{
foreach ($data as $id)
$this->jsGlobals[$type][] = (int)$id;
}
else if (is_numeric($data))
$this->jsGlobals[$type][] = (int)$data;
else
@@ -441,6 +449,7 @@ class SmartyAoWoW extends Smarty
if (!$ids)
continue;
$this->initJSGlobal($type);
$ids = array_unique($ids, SORT_NUMERIC);
@@ -711,104 +720,22 @@ class Util
null, 1.0, 0.6, 1.0, 0.8, 1.0, 1.0, 1.2, 1.25, 1.44, 2.5, 1.728, 3.0, 0.0, 0.0, 1.2, 1.25
);
public static $lootTemplates = array(
LOOT_REFERENCE, // internal
LOOT_ITEM, // item
LOOT_DISENCHANT, // item
LOOT_PROSPECTING, // item
LOOT_MILLING, // item
LOOT_CREATURE, // npc
LOOT_PICKPOCKET, // npc
LOOT_SKINNING, // npc (see its flags for mining, herbing or actual skinning)
LOOT_FISHING, // zone
LOOT_GAMEOBJECT, // object
LOOT_QUEST, // quest (mail rewards)
LOOT_SPELL // spell
);
// todo: translate and move to Lang
public static $spellModOp = array(
0 => 'DAMAGE',
1 => 'DURATION',
2 => 'THREAT',
3 => 'EFFECT1',
4 => 'CHARGES',
5 => 'RANGE',
6 => 'RADIUS',
7 => 'CRITICAL_CHANCE',
8 => 'ALL_EFFECTS',
9 => 'NOT_LOSE_CASTING_TIME',
10 => 'CASTING_TIME',
11 => 'COOLDOWN',
12 => 'EFFECT2',
13 => 'IGNORE_ARMOR',
14 => 'COST',
15 => 'CRIT_DAMAGE_BONUS',
16 => 'RESIST_MISS_CHANCE',
17 => 'JUMP_TARGETS',
18 => 'CHANCE_OF_SUCCESS',
19 => 'ACTIVATION_TIME',
20 => 'DAMAGE_MULTIPLIER',
21 => 'GLOBAL_COOLDOWN',
22 => 'DOT',
23 => 'EFFECT3',
24 => 'BONUS_MULTIPLIER',
25 => '25_UNUSED',
26 => 'PROC_PER_MINUTE',
27 => 'VALUE_MULTIPLIER',
28 => 'RESIST_DISPEL_CHANCE',
29 => 'CRIT_DAMAGE_BONUS_2', //one not used spell
30 => 'SPELL_COST_REFUND_ON_FAIL'
);
public static $combatRating = array(
0 => 'WEAPON_SKILL',
1 => 'DEFENSE_SKILL',
2 => 'DODGE',
3 => 'PARRY',
4 => 'BLOCK',
5 => 'HIT_MELEE',
6 => 'HIT_RANGED',
7 => 'HIT_SPELL',
8 => 'CRIT_MELEE',
9 => 'CRIT_RANGED',
10 => 'CRIT_SPELL',
11 => 'HIT_TAKEN_MELEE',
12 => 'HIT_TAKEN_RANGED',
13 => 'HIT_TAKEN_SPELL',
14 => 'CRIT_TAKEN_MELEE',
15 => 'CRIT_TAKEN_RANGED',
16 => 'CRIT_TAKEN_SPELL',
17 => 'HASTE_MELEE',
18 => 'HASTE_RANGED',
19 => 'HASTE_SPELL',
20 => 'WEAPON_SKILL_MAINHAND',
21 => 'WEAPON_SKILL_OFFHAND',
22 => 'WEAPON_SKILL_RANGED',
23 => 'EXPERTISE',
24 => 'ARMOR_PENETRATION'
);
public static $lockType = array(
1 => 'PICKLOCK',
2 => 'HERBALISM',
3 => 'MINING',
4 => 'DISARM_TRAP',
5 => 'OPEN',
6 => 'TREASURE',
7 => 'CALCIFIED_ELVEN_GEMS',
8 => 'CLOSE',
9 => 'ARM_TRAP',
10 => 'QUICK_OPEN',
11 => 'QUICK_CLOSE',
12 => 'OPEN_TINKERING',
13 => 'OPEN_KNEELING',
14 => 'OPEN_ATTACKING',
15 => 'GAHZRIDIAN',
16 => 'BLASTING',
17 => 'SLOW_OPEN',
18 => 'SLOW_CLOSE',
19 => 'FISHING',
20 => 'INSCRIPTION',
21 => 'OPEN_FROM_VEHICLE'
);
public static $stealthType = array(
0 => 'GENERAL',
1 => 'TRAP'
);
public static $invisibilityType = array(
0 => 'GENERAL',
3 => 'TRAP',
6 => 'DRUNK'
);
public static $spellEffectStrings = array(
0 => 'None',
1 => 'Instakill',
@@ -1076,7 +1003,7 @@ class Util
95 => 'Ghost',
96 => 'Spell Magnet',
97 => 'Mana Shield',
98 => 'Mod Skill Talent',
98 => 'Mod Skill Value',
99 => 'Mod Attack Power',
100 => 'Auras Visible',
101 => 'Mod Resistance Percent',
@@ -1609,13 +1536,14 @@ class Util
// for item and spells
public static function setRatingLevel($level, $type, $val)
{
if (in_array($type, array(ITEM_MOD_DEFENSE_SKILL_RATING, ITEM_MOD_PARRY_RATING, ITEM_MOD_BLOCK_RATING)) && $level < 34)
if (in_array($type, [ITEM_MOD_DEFENSE_SKILL_RATING, ITEM_MOD_PARRY_RATING, ITEM_MOD_BLOCK_RATING]) && $level < 34)
$level = 34;
if (!isset(Util::$gtCombatRatings[$type]))
$result = 0;
else if ($level > 70)
else
{
if ($level > 70)
$c = 82 / 52 * pow(131 / 63, ($level - 70) / 10);
else if ($level > 60)
$c = 82 / (262 - 3 * $level);
@@ -1625,6 +1553,7 @@ class Util
$c = 2 / 52;
$result = number_format($val / Util::$gtCombatRatings[$type] / $c, 2);
}
if (!in_array($type, array(ITEM_MOD_DEFENSE_SKILL_RATING, ITEM_MOD_EXPERTISE_RATING)))
$result .= '%';
@@ -1845,11 +1774,6 @@ class Util
quest_mail_loot_template entry quest_template RewMailTemplateId
reference_loot_template entry many <- many _loot_template -mincountOrRef In case of negative mincountOrRef
*/
private static function getLootByItem($tableName, $itemId)
{
return;
}
private static function getLootByEntry($tableName, $lootId, $groupId = 0, $baseChance = 1.0)
{
$loot = [];
@@ -1928,8 +1852,13 @@ class Util
@$groupChances[$entry['groupid']] += $entry['ChanceOrQuestChance'];
$set['groupChance'] = abs($entry['ChanceOrQuestChance']);
}
else // shouldn't happened
{
if (User::isInGroup(U_GROUP_DEV))
die(var_dump($entry));
else
continue; // shouldn't happen
continue;
}
$loot[] = $set;
}
@@ -1968,11 +1897,7 @@ class Util
// iterate over the 4 available difficulties and assign modes
*/
if ($entry > 0)
$struct = self::getLootByEntry($table, $entry);
else if ($entry < 0)
$struct = self::getLootByItem($table, -$entry);
if (!$struct)
return $lv;
@@ -1995,13 +1920,13 @@ class Util
if ($_ = $loot['reference'])
$base['reference'] = $_;
$buff = []; // equal distribution between min/max .. not blizzlike, but hey, TC-issue
$stack = []; // equal distribution between min/max .. not blizzlike, but hey, TC-issue
if (isset($loot['max']) && isset($loot['min']) && ($loot['max'] > $loot['min']))
for ($i = $loot['min']; $i <= $loot['max']; $i++)
$buff[] = $i.':'.(round(100 / (1 + $loot['max'] - $loot['min']), 3));
$stack[$i] = round(100 / (1 + $loot['max'] - $loot['min']), 3);
if ($buff) // yes, it wants a string .. how weired is that..
$base['pctstack'] = '{'.implode(',',$buff).'}';
if ($stack) // yes, it wants a string .. how weired is that..
$base['pctstack'] = json_encode($stack, JSON_NUMERIC_CHECK);
if ($loot['content'] > 0) // regular drop
{
@@ -2049,9 +1974,142 @@ class Util
}
}
return $lv;
}
public static function getLootSource($itemId)
{
if (!$itemId)
return [];
$final = [];
$refResults = [];
$chanceMods = [];
$query = 'SELECT
-lt1.entry AS ARRAY_KEY,
IF (lt1.mincountOrRef > 0, lt1.item, lt1.mincountOrRef) AS item,
lt1.ChanceOrQuestChance AS chance,
SUM(IF(lt2.ChanceOrQuestChance = 0, 1, 0)) AS nZeroItems,
SUM(IF(lt2.ChanceOrQuestChance > 0, lt2.ChanceOrQuestChance, 0)) AS sumChance,
IF(lt1.groupid > 0, 1, 0) AS isGrouped,
IF (lt1.mincountOrRef > 0, lt1.mincountOrRef, 1) AS min,
IF (lt1.mincountOrRef > 0, lt1.maxcount, 1) AS max,
IF (lt1.mincountOrRef < 0, lt1.maxcount, 1) AS multiplier
FROM
?# lt1
LEFT JOIN
?# lt2 ON lt1.entry = lt2.entry AND lt1.groupid = lt2.groupid
WHERE
%s
GROUP BY lt2.entry';
$calcChance = function ($refs, $parents = []) use (&$chanceMods)
{
$return = [];
foreach ($refs as $rId => $ref)
{
// errör: item/ref is in group 0 without a chance set
if (!$ref['chance'] && !$ref['isGrouped'])
continue; // todo (low): create dubug output
// errör: item/ref is in group with >100% chance across all items contained
if ($ref['isGrouped'] && $ref['sumChance'] > 100)
continue; // todo (low): create dubug output
$chance = ($ref['chance'] ? $ref['chance'] : (100 - $ref['sumChance']) / $ref['nZeroItems']) / 100;
// apply inherited chanceMods
if (isset($chanceMods[$ref['item']]))
{
$chance *= $chanceMods[$ref['item']][0];
$chance = 1 - pow(1 - $chance, $chanceMods[$ref['item']][1]);
}
// save chance for parent-ref
$chanceMods[$rId] = [$chance, $ref['multiplier']];
// refTemplate doesn't point to a new ref -> we are done
if (!in_array($rId, $parents))
{
$data = array(
'percent' => $chance,
'stack' => [$ref['multiplier'], $ref['multiplier']],
'count' => 1 // ..and one for the sort script
);
$stack = []; // equal distribution between min/max .. not blizzlike, but hey, TC-issue
if ($ref['max'] > $ref['min'])
for ($i = $ref['min']; $i <= $ref['max']; $i++)
$stack[$i] = round(100 / (1 + $ref['max'] - $ref['min']), 3);
if ($stack) // yes, it wants a string .. how weired is that..
$data['pctstack'] = json_encode($stack, JSON_NUMERIC_CHECK);
$return[$rId] = $data;
}
}
return $return;
};
$newRefs = DB::Aowow()->select(
sprintf($query, 'lt1.item = ?d AND lt1.mincountOrRef > 0'),
LOOT_REFERENCE, LOOT_REFERENCE,
$itemId
);
while ($newRefs)
{
$curRefs = $newRefs;
$newRefs = DB::Aowow()->select(
sprintf($query, 'lt1.mincountOrRef IN (?a)'),
LOOT_REFERENCE, LOOT_REFERENCE,
array_keys($curRefs)
);
$refResults += $calcChance($curRefs, array_column($newRefs, 'item'));
}
for ($i = 1; $i < count(self::$lootTemplates); $i++)
{
$res = DB::Aowow()->select(
sprintf($query, '{lt1.mincountOrRef IN (?a) OR }(lt1.mincountOrRef > 0 AND lt1.item = ?d)'),
self::$lootTemplates[$i], self::$lootTemplates[$i],
$refResults ? array_keys($refResults) : DBSIMPLE_SKIP,
$itemId
);
if ($_ = $calcChance($res))
{
// format for use in item.php
$sort = [];
foreach ($_ as $k => $v)
{
unset($_[$k]);
$v['percent'] = round($v['percent'] * 100, 3);
$v['key'] = abs($k); // array_multisort issue: it does not preserve numeric keys, restore after sort
$sort[$k] = $v['percent'];
$_[abs($k)] = $v;
}
array_multisort($sort, SORT_DESC, $_);
foreach ($_ as $k => $v)
{
$key = $v['key'];
unset($_[$k]);
unset($v['key']);
$_[$key] = $v;
}
$final[self::$lootTemplates[$i]] = $_;
}
}
return $final;
}
}
?>

View File

@@ -15,7 +15,6 @@ require 'includes/kernel.php';
if ($AoWoWconf['maintenance'] && !User::isInGroup(U_GROUP_EMPLOYEE))
$smarty->brb();
switch ($pageCall)
{
/* called by user */

View File

@@ -141,6 +141,8 @@ $lang = array(
'itemsets' => "Ausrüstungssets",
'mechanic' => "Auswirkung",
'mechAbbr' => "Ausw.",
'npc' => "NPC",
'npcs' => "NPCs",
'pet' => "Begleiter",
'pets' => "Begleiter",
'requires' => "Benötigt %s",
@@ -169,6 +171,7 @@ $lang = array(
'specs' => "Spezialisierungen",
'_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"),
'languages' => array(
@@ -176,7 +179,7 @@ $lang = array(
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(-2 => "Nur für Horde", -1 => "Nur für Allianz", null, "Allianz", "Horde", "Beide"),
'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"),
@@ -256,19 +259,13 @@ $lang = array(
'editAccount' => "Benutze die folgenden Formulare um deine Account-Informationen zu aktualisieren",
'publicDesc' => "Öffentliche Beschreibung",
'viewPubDesc' => "Die Beschreibung in deinem <a href=\"?user=%s\">öffentlichen Profil</a> ansehen",
// Please_enter_your_confirm_password = Bitte das Passwort bestätigen
// Please_enter_your_username = Gib bitte deinen Benutzernamen ein
// Please_enter_your_password = Gib bitte dein Kennwort ein
// Remember_me_on_this_computer = Auf diesem Computer merken
),
'event' => array(
'category' => array("Nicht kategorisiert", "Feiertage", "Wiederkehrend", "Spieler vs. Spieler")
),
'npc' => array(
'rank' => ['Normal', 'Elite', 'Rar Elite', 'Boss', 'Rar']
),
'event' => array(
'category' => array("Nicht kategorisiert", "Feiertage", "Wiederkehrend", "Spieler vs. Spieler")
),
'achievement' => array(
'criteria' => "Kriterien",
'points' => "Punkte",
@@ -376,6 +373,8 @@ $lang = array(
'_interval' => "Interval",
'_inSlot' => "im Platz",
'ppm' => "%s Auslösungen pro Minute",
'procChance' => "Procchance",
'starter' => "Basiszauber",
'trainingCost' => "Trainingskosten",
'remaining' => "Noch %s",
@@ -393,6 +392,11 @@ $lang = array(
'pctCostOf' => "vom Grund%s",
'costPerSec' => ", plus %s pro Sekunde",
'costPerLevel' => ", plus %s pro Stufe",
'_scaling' => "Skalierung",
'scaling' => array(
'directSP' => "+%.2f%% der Zaubermacht zum direkten Effekt", 'directAP' => "+%.2f%% der Angriffskraft zum direkten Effekt",
'dotSP' => "+%.2f%% der Zaubermacht pro Tick", 'dotAP' => "+%.2f%% der Angriffskraft pro Tick"
),
'powerRunes' => ["Frost", "Unheilig", "Blut", "Tod"],
'powerTypes' => array(
-2 => "Gesundheit", -1 => null, "Mana", "Wut", "Fokus", "Energie", "Zufriedenheit", "Runen", "Runenmacht",
@@ -447,27 +451,48 @@ $lang = array(
"Siegel"
),
'weaponSubClass' => array(
"Einhandäxte", "Zweihandäxte", "Bögen", "Schusswaffen", "Einhandstreitkolben",
"Zweihandstreitkolben", "Stangenwaffen", "Einhandschwerter", "Zweihandschwerter", null,
"Stäbe", null, null, "Faustwaffen", "Diverse",
"Dolche", "Wurfwaffe", null, "Armbrüste", "Zauberstäbe",
"Angelruten"
15 => "Dolche", 0 => "Einhandäxte", 7 => "Einhandschwerter", 4 => "Einhandstreitkolben", 13 => "Faustwaffen",
6 => "Stangenwaffen", 10 => "Stäbe", 1 => "Zweihandäxte", 8 => "Zweihandschwerter", 5 => "Zweihandstreitkolben",
18 => "Armbrüste", 2 => "Bögen", 3 => "Schusswaffen", 16 => "Wurfwaffen", 19 => "Zauberstäbe",
20 => "Angelruten", 14 => "Diverse"
),
'subClassMasks' => array(
0x02A5F3 => 'Nahkampfwaffe', 0x0060 => 'Schild', 0x04000C => 'Distanzwaffe', 0xA091 => 'Einhandnahkampfwaffe'
),
'traitShort' => array(
'atkpwr' => "Angr", 'rgdatkpwr' => "DAngr", 'splpwr' => "ZMacht",
'arcsplpwr' => "ArkM", 'firsplpwr' => "FeuM", 'frosplpwr' => "FroM",
'holsplpwr' => "HeiM", 'natsplpwr' => "NatM", 'shasplpwr' => "SchM",
'splheal' => "Heil"
)
'atkpwr' => "Angr", 'rgdatkpwr' => "DAngr", 'splpwr' => "ZMacht", 'arcsplpwr' => "ArkM", 'firsplpwr' => "FeuM",
'frosplpwr' => "FroM", 'holsplpwr' => "HeiM", 'natsplpwr' => "NatM", 'shasplpwr' => "SchM", 'splheal' => "Heil"
),
'spellModOp' => array(
"Schaden", "Dauer", "Bedrohung", "Effekt 1", "Aufladungen",
"Reichweite", "Radius", "kritische Trefferchance", "Alle Effekte", "Zauberzeitverlust",
"Zauberzeit", "Abklingzeit", "Effekt 2", "Ignoriere Rüstung", "Kosten",
"Kritischer Bonusschaden", "Chance auf Fehlschlag", "Sprung-Ziele", "Chance auf Auslösung", "Intervall",
"Multiplikator (Schaden)", "Globale Abklingzeit", "Schaden über Zeit", "Effekt 3", "Multiplikator (Bonus)",
null, "Auslösungen pro Minute", "Multiplikator (Betrag)", "Widerstand gegen Bannung", "kritischer Bonusschaden2",
"Kostenrückerstattung bei Fehlschlag"
),
'combatRating' => array(
"Waffenfertigkeit", "Verteidigungsfertigkeit", "Ausweichen", "Parrieren", "Blocken",
"Nahkampftrefferchance", "Fernkampftrefferchance", "Zaubertrefferchance", "kritische Nahkampftrefferchance", "kritische Fernkampftrefferchance",
"kritische Zaubertrefferchance", "erhaltene Nahkampftreffer", "erhaltene Fernkampftreffer", "erhaltene Zaubertreffer", "erhaltene kritische Nahkampftreffer",
"erhaltene kritische Fernkampftreffer", "erhaltene kritische Zaubertreffer", "Nahkampftempo", "Fernkampftempo", "Zaubertempo",
"Waffenfertigkeit Haupthand", "Waffenfertigkeit Nebenhand", "Waffenfertigkeit Fernkampf", "Waffenkunde", "Rüstungsdurchschlag"
),
'lockType' => array(
null, "Schlossknacken", "Kräuterkunde", "Bergbau", "Falle entschärfen",
"Öffnen", "Schatz (DND)", "Verkalkte Elfenedelsteine (DND)", "Schließen", "Falle scharf machen",
"Schnell öffnen", "Schnell schließen", "Offenes Tüfteln", "Offenes Knien", "Offenes Angreifen",
"Gahz'ridian (DND)", "Schlagen", "PvP öffnen", "PvP schließen", "Angeln",
"Inschriftenkunde", "Vom Fahrzeug öffnen"
),
'stealthType' => ["Allgemein", "Falle"],
'invisibilityType' => ["Allgemein", 3 => "Falle", 6 => "Trunkenheit"]
),
'item' => array(
'armor' => "%s Rüstung",
'block' => "%s Blocken",
'charges' => "Aufladungen",
'expend' => "Verbrauchen",
'locked' => "Verschlossen",
'ratingString' => "%s&nbsp;@&nbsp;L%s",
'heroic' => "Heroisch",
@@ -480,7 +505,6 @@ $lang = array(
'addsDps' => "Adds",
'fap' => "Angriffskraft in Tiergestalt",
'durability' => "Haltbarkeit",
'duration' => "Dauer",
'realTime' => "Realzeit",
'conjured' => "Herbeigezauberter Gegenstand",
'damagePhys' => "%s Schaden",
@@ -490,13 +514,40 @@ $lang = array(
'itemLevel' => "Gegenstandsstufe",
'randEnchant' => "&lt;Zufällige Verzauberung&gt",
'readClick' => "&lt;Zum Lesen rechtsklicken&gt",
'openClick' => "&lt;Zum Öffnen rechtsklicken&gt",
'set' => "Set",
'partyLoot' => "Gruppenloot",
'smartLoot' => "Intelligente Beuteverteilung",
'indestructible'=> "Kann nicht zerstört werden",
'deprecated' => "Nicht benutzt",
'useInShape' => "Benutzbar in Gestaltwandlung",
'useInArena' => "Benutzbar in Arenen",
'refundable' => "Rückzahlbar",
'noNeedRoll' => "Kann nicht für Bedarf werfen",
'atKeyring' => "Passt in den Schlüsselbund",
'worth' => "Wert",
'consumable' => "Verbrauchbar",
'nonConsumable' => "Nicht verbrauchbar",
'accountWide' => "Accountweit",
'millable' => "Mahlbar",
'noEquipCD' => "Keine Anlegabklingzeit",
'prospectable' => "Sondierbar",
'disenchantable'=> "Kann entzaubert werden",
'cantDisenchant'=> "Kann nicht entzaubert werden",
'repairCost' => "Reparaturkosten",
'tool' => "Werkzeug",
'cost' => "Preis",
'content' => "Inhalt",
'_transfer' => 'Dieser Gegenstand wird mit <a href="?item=%d" class="q%d icontiny tinyspecial" style="background-image: url(images/icons/tiny/%s.gif)">%s</a> vertauscht, wenn Ihr zur <span class="%s-icon">%s</span> wechselt.',
'_unavailable' => "Dieser Gegenstand ist nicht für Spieler verfügbar.",
'_rndEnchants' => "Zufällige Verzauberungen",
'_chance' => "(Chance von %s%%)",
'_reqLevel' => "Mindeststufe",
'slot' => "Platz",
'_quality' => "Qualität",
'usableBy' => "Benutzbar von",
'buyout' => "Sofortkaufpreis",
'each' => "Stück",
'gems' => "Edelsteine",
'socketBonus' => "Sockelbonus",
'socket' => array (
@@ -516,16 +567,16 @@ $lang = array(
),
'bagFamily' => array(
"Tasche", "Köcher", "Munitionsbeutel", "Seelentasche", "Lederertasche",
"Schreibertasche", "Kräutertasche", "Verzauberertasche", "Ingenieurstasche", "Schlüssel",
"Schreibertasche", "Kräutertasche", "Verzauberertasche", "Ingenieurstasche", null, /*Schlüssel*/
"Edelsteintasche", "Bergbautasche"
),
'inventoryType' => array(
null, "Kopf", "Hals", "Schulter", "Hemd",
"Brust", "Taille", "Beine", "Füße", "Handgelenke",
"Hände", "Finger", "Schmuck", "Einhändig", "Schildhand",
"Hände", "Finger", "Schmuck", "Einhändig", "Schildhand", /*Schild*/
"Distanz", "Rücken", "Zweihändig", "Tasche", "Wappenrock",
"Brust", "Waffenhand", "Schildhand", "In der Schildhand geführt", "Projektil",
"Wurfwaffe", "Distanzwaffe", "Köcher", "Relikt"
null, /*Robe*/ "Waffenhand", "Schildhand", "In der Schildhand geführt", "Projektil",
"Wurfwaffe", null, /*Ranged2*/ "Köcher", "Relikt"
),
'armorSubClass' => array(
"Sonstiges", "Stoff", "Leder", "Schwere Rüstung", "Platte",
@@ -544,7 +595,48 @@ $lang = array(
),
'elixirType' => [null, "Kampf", "Wächter"],
'cat' => array(
// locale_dede.js zerparsen..
2 => "Waffen", // self::$spell['weaponSubClass']
4 => array("Rüstung", array(
1 => "Stoffrüstung", 2 => "Lederrüstung", 3 => "Schwere Rüstung", 4 => "Plattenrüstung", 6 => "Schilde", 7 => "Buchbände",
8 => "Götzen", 9 => "Totems", 10 => "Siegel", -6 => "Umhänge", -5 => "Nebenhandgegenstände", -8 => "Hemden",
-7 => "Wappenröcke", -3 => "Amulette", -2 => "Ringe", -4 => "Schmuckstücke", 0 => "Verschiedenes (Rüstung)",
)),
1 => array("Behälter", array(
0 => "Taschen", 3 => "Verzauberertaschen", 4 => "Ingenieurstaschen", 5 => "Edelsteintaschen", 2 => "Kräutertaschen", 8 => "Schreibertaschen",
7 => "Lederertaschen", 6 => "Bergbautaschen", 1 => "Seelentaschen"
)),
0 => array("Verbrauchbar", array(
-3 => "Gegenstandsverzauberungen (Temporäre)", 6 => "Gegenstandsverzauberungen (Dauerhafte)", 2 => ["Elixire", [1 => "Kampfelixire", 2 => "Wächterelixire"]],
1 => "Tränke", 4 => "Schriftrollen", 7 => "Verbände", 0 => "Verbrauchbar", 3 => "Fläschchen", 5 => "Essen & Trinken",
8 => "Andere (Verbrauchbar)"
)),
16 => array("Glyphen", array(
1 => "Kriegerglyphen", 2 => "Paladinglyphen", 3 => "Jägerglyphen", 4 => "Schurkenglyphen", 5 => "Priesterglyphen", 6 => "Todesritterglyphen",
7 => "Schamanenglyphen", 8 => "Magierglyphen", 9 => "Hexenmeisterglyphen", 11 => "Druidenglyphen"
)),
7 => array("Handwerkswaren", array(
14 => "Rüstungsverzauberungen", 5 => "Stoff", 3 => "Geräte", 10 => "Elementar", 12 => "Verzauberkunst", 2 => "Sprengstoff",
9 => "Kräuter", 4 => "Juwelenschleifen", 6 => "Leder", 13 => "Materialien", 8 => "Fleisch", 7 => "Metall & Stein",
1 => "Teile", 15 => "Waffenverzauberungen", 11 => "Andere (Handwerkswaren)"
)),
6 => ["Projektile", [ 2 => "Pfeile", 3 => "Kugeln" ]],
11 => ["Köcher", [ 2 => "Köcher", 3 => "Munitionsbeutel" ]],
9 => array("Rezepte", array(
0 => "Bücher", 6 => "Alchemierezepte", 4 => "Schmiedekunstpläne", 5 => "Kochrezepte", 8 => "Verzauberkunstformeln", 3 => "Ingenieurschemata",
7 => "Erste Hilfe-Bücher", 9 => "Angelbücher", 11 => "Inschriftenkundetechniken",10 => "Juwelenschleifen-Vorlagen",1 => "Lederverarbeitungsmuster",12 => "Bergbauleitfäden",
2 => "Schneidereimuster"
)),
3 => array("Edelsteine", array(
6 => "Meta-Edelsteine", 0 => "Rote Edelsteine", 1 => "Blaue Edelsteine", 2 => "Gelbe Edelsteine", 3 => "Violette Edelsteine", 4 => "Grüne Edelsteine",
5 => "Orange Edelsteine", 8 => "Prismatische Edelsteine", 7 => "Einfache Edelsteine"
)),
15 => array("Verschiedenes", array(
-2 => "Rüstungsmarken", 3 => "Feiertag", 0 => "Plunder", 1 => "Reagenzien", 5 => "Reittiere", -7 => "Flugtiere",
2 => "Haustiere", 4 => "Andere (Verschiedenes)"
)),
10 => "Währung",
12 => "Quest",
13 => "schlüssel",
),
'statType' => array(
"Erhöht Euer Mana um %d.",

View File

@@ -41,14 +41,6 @@ $lang = array(
'forum' => "Forum",
'n_a' => "n/a",
// err_title = An error in AoWoW
// un_err = Enter your username
// pwd_err = Enter your password
// signin_msg = Enter your game account
// c_pwd = Repeat password
// facts = Facts
// This_Object_cant_be_found = Object map not available, Object may be spawned via a script
// filter
'extSearch' => "Extended search",
'addFilter' => "Add another Filter",
@@ -117,7 +109,7 @@ $lang = array(
'difficulty' => "Difficulty",
'dispelType' => "Dispel type",
'duration' => "Duration",
'gameObject' => "objects",
'gameObject' => "object",
'gameObjects' => "Objects",
'glyphType' => "Glyph type",
'race' => "race",
@@ -136,6 +128,8 @@ $lang = array(
'itemsets' => "Item Sets",
'mechanic' => "Mechanic",
'mechAbbr' => "Mech.",
'npc' => "NPC",
'npcs' => "NPCs",
'pet' => "Pet",
'pets' => "Hunter Pets",
'profile' => "profile",
@@ -164,6 +158,7 @@ $lang = array(
'specs' => "Specs",
'_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"),
'languages' => array(
@@ -251,12 +246,6 @@ $lang = array(
'editAccount' => "Simply use the forms below to update your account information",
'publicDesc' => "Public Description",
'viewPubDesc' => "View your Public Description in your <a href=\"?user=%s\">Profile Page</a>",
// Please_enter_your_username = Enter your username (account)
// Please_enter_your_password = Enter your password
// Sign_in_to_your_Game_Account = Enter your game account:
// Please_enter_your_confirm_password = Please enter your confirm password
),
'npc' => array(
'rank' => ['Normal', 'Elite', 'Rare Elite', 'Boss', 'Rare']
@@ -371,6 +360,8 @@ $lang = array(
'_interval' => "Interval",
'_inSlot' => "in slot",
'ppm' => "%s procs per minute",
'procChance' => "Proc chance",
'starter' => "Starter spell",
'trainingCost' => "Training cost",
'remaining' => "%s remaining",
@@ -388,6 +379,11 @@ $lang = array(
'pctCostOf' => "of base %s",
'costPerSec' => ", plus %s per sec",
'costPerLevel' => ", plus %s per level",
'_scaling' => "Scaling",
'scaling' => array(
'directSP' => "+%.2f%% of spell power to direct component", 'directAP' => "+%.2f%% of attack power to direct component",
'dotSP' => "+%.2f%% of spell power per tick", 'dotAP' => "+%.2f%% of attack power per tick"
),
'powerRunes' => ["Frost", "Unholy", "Blood", "Death"],
'powerTypes' => array(
-2 => "Health", -1 => null, "Mana", "Rage", "Focus", "Energy", "Happiness", "Rune", "Runic Power",
@@ -441,7 +437,7 @@ $lang = array(
null, "Shields", "Librams", "Idols", "Totems",
"Sigils"
),
'weaponSubClass' => array(
'weaponSubClass' => array( // ordered by content firts, then alphabeticaly
15 => "Daggers", 13 => "Fist Weapons", 0 => "One-Handed Axes", 4 => "One-Handed Maces", 7 => "One-Handed Swords",
6 => "Polearms", 10 => "Staves", 1 => "Two-Handed Axes", 5 => "Two-Handed Maces", 8 => "Two-Handed Swords",
2 => "Bows", 18 => "Crossbows", 3 => "Guns", 16 => "Thrown", 19 => "Wands",
@@ -451,17 +447,39 @@ $lang = array(
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", 'frosplpwr' => "FroP",
'holsplpwr' => "HolP", 'natsplpwr' => "NatP", 'shasplpwr' => "ShaP",
'splheal' => "Heal"
)
'atkpwr' => "AP", 'rgdatkpwr' => "RAP", 'splpwr' => "SP", 'arcsplpwr' => "ArcP", 'firsplpwr' => "FireP",
'frosplpwr' => "FroP", 'holsplpwr' => "HolP", 'natsplpwr' => "NatP", 'shasplpwr' => "ShaP", 'splheal' => "Heal"
),
'spellModOp' => array(
"Damage", "Duration", "Thread", "Effect 1", "Charges",
"Range", "Radius", "Critical Hit Chance", "All Effects", "Casting Time loss",
"Casting Time", "Cooldown", "Effect 2", "Ignore Armor", "Cost",
"Critical Damage Bonus", "Chance to Fail", "Jump Targets", "Proc Chance", "Intervall",
"Multiplier (Damage)", "Global Cooldown", "Damage over Time", "Effect 3", "Multiplier (Bonus)",
null, "Procs per Minute", "Multiplier (Value)", "Chance to Resist Dispel", "Critical Damage Bonus2",
"Refund Cost on Fail"
),
'combatRating' => array(
"Weapon Skill", "Defense Skill", "Dodge", "Parry", "Block",
"Melee Hit Chance", "Ranged Hit Chance", "Spell Hit Chance", "Casting Melee Hit Chance", "Casting Ranged Hit Chance",
"Casting Spell Hit Chance", "Taken Melee Hit Chance", "Taken Ranged Hit Chance", "Taken Spell Hit Chance", "Taken Critical Melee Hit Chance",
"Taken Critical Ranged Hit Chance", "Taken Critical Spell Hit Chance", "Melee Haste", "Ranged Haste", "Spell Haste",
"Mainhand Weapon Skill", "Offhand Weapon Skill", "Ranged Weapon Skill", "Expertise", "Armor Penetration"
),
'lockType' => array(
null, "Lockpicking", "Herbalism", "Mining", "Disarm Trap",
"Open", "Treasure (DND)", "Calcified Elven Gems (DND)", "Close", "Arm Trap",
"Quick Open", "Quick Close", "Open Tinkering", "Open Kneeling", "Open Attacking",
"Gahz'ridian (DND)", "Blasting", "PvP Open", "PvP Close", "Fishing (DND)",
"Inscription", "Open From Vehicle"
),
'stealthType' => ["General", "Trap"],
'invisibilityType' => ["General", 3 => "Trap", 6 => "Drunk"]
),
'item' => array(
'armor' => "%s Armor",
'block' => "%s Block",
'charges' => "Charges",
'expend' => "expendable",
'locked' => "Locked",
'ratingString' => "%s&nbsp;@&nbsp;L%s",
'heroic' => "Heroic",
@@ -563,7 +581,7 @@ $lang = array(
null, null, "Arrow", "Bullet", null
),
'elixirType' => [null, "Battle", "Guardian"],
'cat' => array(
'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",
@@ -575,8 +593,9 @@ $lang = array(
7 => "Leatherworking Bags", 6 => "Mining Bags", 1 => "Soul Bags"
)),
0 => array("Consumables", array(
7 => "Bandages", 0 => "Consumables", 2 => "Elixirs", 3 => "Flasks", 5 => "Food & Drinks", 6 => "Item Enhancements (Permanent)",
-3 => "Item Enhancements (Temporary)", 1 => "Potions", 4 => "Scrolls", 8 => "Other (Consumables)"
-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)"
)),
16 => array("Glyphs", array(
1 => "Warrior Glyphs", 2 => "Paladin Glyphs", 3 => "Hunter Glyphs", 4 => "Rogue Glyphs", 5 => "Priest Glyphs", 6 => "Death Knight Glyphs",

View File

@@ -133,6 +133,8 @@ $lang = array(
'itemsets' => "Conjuntos de objetos",
'mechanic' => "Mecanica",
'mechAbbr' => "Mec.",
'npc' => "PNJ",
'npcs' => "PNJs",
'pet' => "Mascota",
'pets' => "Mascotas de cazador",
'profile' => "",
@@ -161,6 +163,7 @@ $lang = array(
'specs' => "Especializaciones",
'_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"),
'languages' => array(
@@ -168,7 +171,7 @@ $lang = array(
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(-2 => "Horda solamente", -1 => "Alianza solamente", null, "Alianza", "Horda", "Ambos"),
'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"),
@@ -195,7 +198,6 @@ $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",
27 => "Serpiente alada", 30 => "Dracohalcón", 31 => "Devastador", 32 => "Acechador deformado",33 => "Esporiélago", 34 => "Raya abisal", 35 => "Serpiente", 37 => "Palomilla",
@@ -216,12 +218,12 @@ $lang = array(
'goForum' => "Feedback <a href=\"?forums&board=1\">forum</a>",
),
'account' => [],
'event' => array(
'category' => array("Sin categoría", "Vacacionales", "Periódicos", "Jugador contra Jugador")
),
'npc' => array(
'rank' => ['Normal', 'Élite', 'Élite raro', 'Jefe', 'Raro']
),
'event' => array(
'category' => array("Sin categoría", "Vacacionales", "Periódicos", "Jugador contra Jugador")
),
'achievement' => array(
'criteria' => "Requisitos",
'points' => "Puntos",
@@ -284,7 +286,7 @@ $lang = array(
),
'pet' => array(
'exotic' => "Exótica",
"cat" => ["Ferocidad", "Tenacidad", "Astucia"]
'cat' => ["Ferocidad", "Tenacidad", "Astucia"]
),
'itemset' => array(
'_desc' => "<b>%s</b> es el <b>%s</b>. Contiene %s piezas.",
@@ -329,6 +331,8 @@ $lang = array(
'_interval' => "Intérvalo",
'_inSlot' => "en la casilla",
'ppm' => "%s procs por minuto",
'procChance' => "Probabilidad de que accione",
'starter' => "Hechizo inicial",
'trainingCost' => "Costo de enseñanza",
'remaining' => "%s restantes",
@@ -346,6 +350,11 @@ $lang = array(
'pctCostOf' => "del %s base",
'costPerSec' => ", mas %s por segundo",
'costPerLevel' => ", mas %s por nivel",
'_scaling' => "[Scaling]",
'scaling' => array(
'directSP' => "[+%.2f%% of spell power to direct component]", 'directAP' => "[+%.2f%% of attack power to direct component]",
'dotSP' => "[+%.2f%% of spell power per tick]", 'dotAP' => "[+%.2f%% of attack power per tick]"
),
'powerRunes' => ["Escarcha", "Profano", "Sangre", "Muerte"],
'powerTypes' => array( // heat => spell 70174
-2 => "Salud", -1 => null, "Maná", "Ira", "Enfoque", "Energía", "[Happiness]", "Runa", "Poder rúnico",
@@ -400,27 +409,48 @@ $lang = array(
"Sigilos"
),
'weaponSubClass' => array(
"Hachas de una mano", "Hachas de dos manos","Arcos", "Armas de fuego", "Mazas de una mano",
"Mazas de dos manos", "Armas de asta", "Espadas de una mano", "Espadas de dos manos", null,
"Bastones", null, null, "Armas de puño", "Misceláneo",
"Dagas", "Arrojadizas", null, "Ballestas", "Varitas",
"Cañas de pescar"
13 => "Armas de puño", 15 => "Dagas", 0 => "Hachas de una mano", 7 => "Espadas de una mano", 4 => "Mazas de una mano",
6 => "Armas de asta", 10 => "Bastones", 1 => "Hachas de dos manos", 8 => "Espadas de dos manos", 5 => "Mazas de dos manos",
2 => "Arcos", 3 => "Armas de fuego", 16 => "Arrojadizas", 18 => "Ballestas", 19 => "Varitas",
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'
),
'traitShort' => array(
'atkpwr' => "PA", 'rgdatkpwr' => "PA", 'splpwr' => "PH",
'arcsplpwr' => "PArc", 'firsplpwr' => "PFue", 'frosplpwr' => "PEsc",
'holsplpwr' => "PSag", 'natsplpwr' => "PNat", 'shasplpwr' => "PSom",
'splheal' => "Sana"
)
'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'
),
'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'
),
'lockType' => array(
null, "Forzar cerradura", "Herboristería", "Minería", "Desactivar trampa",
"Abrir", "Tesoro (DND)", "Gemas cálcicas elfas (DND)", "Cerrar", "Activar trampa",
"Apertura rápida", "Cerrado rápido", "Abrir ajustando", "Abrir de rodillas", "Abrir atacando",
"Gahz'ridian (DND)", "Reventar", "Apertura JcJ", "Cierre JcJ", "Pescar",
"Inscripción", "Abrir desde vehículo"
),
'stealthType' => ['GENERAL', 'TRAP'],
'invisibilityType' => ['GENERAL', 3 => 'TRAP', 6 => 'DRUNK']
),
'item' => array(
'armor' => "%s armadura",
'block' => "%s bloqueo",
'charges' => "cargas",
'expend' => "[expendable]", // drop this shit
'locked' => "Cerrado",
'ratingString' => "%s&nbsp;@&nbsp;L%s",
'heroic' => "Heroico",
@@ -433,7 +463,6 @@ $lang = array(
'addsDps' => "Añade",
'fap' => "poder de ataque feral",
'durability' => "Durabilidad",
'duration' => "Duración",
'realTime' => "tiempo real",
'conjured' => "Objeto mágico",
'damagePhys' => "%s Daño",
@@ -443,13 +472,40 @@ $lang = array(
'itemLevel' => "Nivel de objeto",
'randEnchant' => "&lt;Encantamiento aleatorio&gt",
'readClick' => "&lt;Click derecho para leer&gt",
'openClick' => "&lt;Click derecho para abrir&gt",
'set' => "Conjunto",
'partyLoot' => "Despojo de grupo",
'smartLoot' => "Botín inteligente",
'indestructible'=> "No puede ser destruido",
'deprecated' => "Depreciado",
'useInShape' => "Se puede usar con cambio de forma",
'useInArena' => "Se puede usar en arenas",
'refundable' => "Se puede devolver",
'noNeedRoll' => "No se puede hacer una tirada por Necesidad",
'atKeyring' => "Se puede poner en el llavero",
'worth' => "Valor",
'consumable' => "Consumible",
'nonConsumable' => "No consumible",
'accountWide' => "Ligado a la cuenta",
'millable' => "Se puede moler",
'noEquipCD' => "No tiene tiempo de reutilización al equipar",
'prospectable' => "Prospectable",
'disenchantable'=> "Desencantable",
'cantDisenchant'=> "No se puede desencantar",
'repairCost' => "Coste de reparación",
'tool' => "Herramienta",
'cost' => "Coste",
'content' => "Contenido",
'_transfer' => 'Este objeto será convertido a <a href="?item=%d" class="q%d icontiny tinyspecial" style="background-image: url(images/icons/tiny/%s.gif)">%s</a> si lo transfieres a la <span class="%s-icon">%s</span>.',
'_unavailable' => "Este objeto no está disponible para los jugadores.",
'_rndEnchants' => "Encantamientos aleatorios",
'_chance' => "(probabilidad %s%%)",
'_reqLevel' => "Nivel requerido",
'slot' => "Casilla",
'_quality' => "Calidad",
'usableBy' => "Usable por",
'buyout' => "Precio de venta en subasta",
'each' => "cada uno",
'gems' => "Gemas",
'socketBonus' => "Bono de ranura",
'socket' => array(
@@ -467,18 +523,18 @@ $lang = array(
"Se liga a la cuenta", "Se liga al recogerlo", "Se liga al equiparlo",
"Se liga al usarlo", "Objeto de misión", "Objeto de misión"
),
"bagFamily" => array(
'bagFamily' => array(
"Bolsa", "Carcaj", "Bolsa de municiones", "Bolsa de almas", "Bolsa de peletería",
"Bolsa de inscripción", "Bolsa de hierbas", "Bolsa de encantamiento", "Bolsa de ingeniería", "Llave",
"Bolsa de inscripción", "Bolsa de hierbas", "Bolsa de encantamiento", "Bolsa de ingeniería", null, /*Llave*/
"Bolsa de gemas", "Bolsa de minería"
),
'inventoryType' => array(
null, "Cabeza", "Cuello", "Hombro", "Camisa",
"Pecho", "Cintura", "Piernas", "Pies", "Muñeca",
"Manos", "Dedo", "Abalorio", "Una mano", "Escudo",
"Manos", "Dedo", "Abalorio", "Una mano", "Mano izquierda", /*Escudo*/
"A distancia", "Espalda", "Dos manos", "Bolsa", "Tabardo",
"Pecho", "Mano derecha", "Mano izquierda", "Sostener con la mano izquierda", "Proyectiles",
"Arrojadiza", "A distancia", "Carcaj", "Reliquia"
null, /*Robe*/ "Mano derecha", "Mano izquierda", "Sostener con la mano izquierda", "Proyectiles",
"Arrojadiza", null, /*Ranged2*/ "Carcaj", "Reliquia"
),
'armorSubClass' => array(
"Misceláneo", "Tela", "Cuero", "Malla", "Placas",
@@ -496,7 +552,49 @@ $lang = array(
null, null, "Flecha", "Bala", null
),
'elixirType' => [null, "Batalla", "Guardián"],
'cat' => array(
'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)",
)),
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"
)),
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)"
)),
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"
)),
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)"
)),
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"
)),
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"
)),
15 => array("Miscellaneous", array(
-2 => "Armor Tokens", 3 => "Holiday", 0 => "Junk", 1 => "Reagents", 5 => "Mounts", -7 => "Flying Mounts",
2 => "Small Pets", 4 => "Other (Miscellaneous)"
)),
10 => "Currency",
12 => "Quest",
13 => "Keys",
),
'statType' => array(
"Aumenta tu maná %d p.",

View File

@@ -133,6 +133,8 @@ $lang = array(
'itemsets' => "Ensembles d'objets",
'mechanic' => "Mécanique",
'mechAbbr' => "Mécan.",
'npc' => "PNJ",
'npcs' => "PNJs",
'pet' => "Familier",
'pets' => "Familiers de chasseur",
'profile' => "",
@@ -161,6 +163,7 @@ $lang = array(
'specs' => "Specialisations",
'_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"),
'languages' => array(
@@ -168,7 +171,7 @@ $lang = array(
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(-2 => "Horde seulement", -1 => "Alliance seulement", null, "Alliance", "Horde", "Les deux"),
'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"),
@@ -215,12 +218,12 @@ $lang = array(
'goForum' => "Feedback <a href=\"?forums&board=1\">forum</a>",
),
'account' => [],
'event' => array(
'category' => array("Non classés", "Vacances", "Récurrent", "Joueur ctr. Joueur")
),
'npc' => array(
'rank' => ['Standard', 'Élite', 'Élite rare', 'Boss', 'Rare']
),
'event' => array(
'category' => array("Non classés", "Vacances", "Récurrent", "Joueur ctr. Joueur")
),
'achievement' => array(
'criteria' => "Critères",
'points' => "Points",
@@ -283,7 +286,7 @@ $lang = array(
),
'pet' => array(
'exotic' => "Exotique",
"cat" => ["Férocité", "Tenacité", "Ruse"]
'cat' => ["Férocité", "Tenacité", "Ruse"]
),
'itemset' => array(
'_desc' => "<b>%s</b> est le <b>%s</b>. Il contient %s pièces.",
@@ -328,6 +331,8 @@ $lang = array(
'_interval' => "Intervalle",
'_inSlot' => "dans l'emplacement",
'ppm' => "%s déclenchements par minute",
'procChance' => "Chance",
'starter' => "Sortilège initiaux",
'trainingCost' => "Coût d'entraînement",
'remaining' => "%s restantes",
@@ -345,6 +350,11 @@ $lang = array(
'pctCostOf' => "de la %s de base",
'costPerSec' => ", plus %s par seconde",
'costPerLevel' => ", plus %s par niveau",
'_scaling' => "[Scaling]",
'scaling' => array(
'directSP' => "[+%.2f%% of spell power to direct component]", 'directAP' => "[+%.2f%% of attack power to direct component]",
'dotSP' => "[+%.2f%% of spell power per tick]", 'dotAP' => "[+%.2f%% of attack power per tick]"
),
'powerRunes' => ["Givre", "Impie", "Sang", "Mort"],
'powerTypes' => array(
-2 => "vie", -1 => null, "mana", "rage", "focus", "énergie", "[Happiness]", "[Rune]", "puissance runique",
@@ -399,27 +409,48 @@ $lang = array(
"Cachets"
),
'weaponSubClass' => array(
"Haches à une main", "Haches à deux mains", "Arcs", "Armes à feu", "Masses à une main",
"Masses à deux mains", "Armes d'hast", "Epées à une main", "Epées à deux mains", null,
"Bâtons", null, null, "Armes de pugilat", "Divers",
"Dagues", "Armes de jet", null, "Arbalètes", "Baguettes",
"Cannes à pêche"
13 => "Armes de pugilat", 15 => "Dagues", 7 => "Epées à une main", 0 => "Haches à une main", 4 => "Masses à une main",
6 => "Armes d'hast", 10 => "Bâtons", 8 => "Epées à deux mains", 1 => "Haches à deux mains", 5 => "Masses à deux mains",
18 => "Arbalètes", 2 => "Arcs", 3 => "Armes à feu", 16 => "Armes de jet", 19 => "Baguettes",
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'
),
'traitShort' => array(
'atkpwr' => "PA", 'rgdatkpwr' => "PAD", 'splpwr' => "PS",
'arcsplpwr' => "PArc", 'firsplpwr' => "PFeu", 'frosplpwr' => "PGiv",
'holsplpwr' => "PSac", 'natsplpwr' => "PNat", 'shasplpwr' => "POmb",
'splheal' => "Soins"
)
'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'
),
'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'
),
'lockType' => array(
null, "Crochetage", "Herboristerie", "Minage", "Désarmement de piège",
"Ouverture", "Trésor (DND)", "Gemmes elfiques calcifiées (DND)", "Fermeture", "Pose de piège",
"Ouverture rapide", "Fermeture rapide", "Ouverture (bricolage)", "Ouverture (à genoux)", "Ouverture (en attaquant)",
"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']
),
'item' => array(
'armor' => "Armure : %s",
'block' => "Bloquer : %s",
'charges' => "Charges",
'expend' => "expendable",
'locked' => "Verrouillé",
'ratingString' => "%s&nbsp;@&nbsp;L%s",
'heroic' => "Héroïque",
@@ -432,7 +463,6 @@ $lang = array(
'addsDps' => "Ajoute",
'fap' => "puissance d'attaque en combat farouche",
'durability' => "Durabilité",
'duration' => "Durée",
'realTime' => "temps réel",
'conjured' => "Objet invoqué",
'damagePhys' => "Dégâts : %s",
@@ -442,13 +472,40 @@ $lang = array(
'itemLevel' => "Niveau d'objet",
'randEnchant' => "&lt;Enchantement aléatoire&gt",
'readClick' => "&lt;Clique Droit pour Lire&gt",
'openClick' => "&lt;Clic Droit pour Ouvrir&gt",
'set' => "Set",
'partyLoot' => "Butin de groupe",
'smartLoot' => "Butin intelligent",
'indestructible'=> "Ne peut être détruit",
'deprecated' => "Désuet",
'useInShape' => "Utilisable lorsque transformé",
'useInArena' => "Utilisable en Aréna",
'refundable' => "Remboursable",
'noNeedRoll' => "Ne peut pas faire un jet de Besoin",
'atKeyring' => "Va dans le trousseau de clés",
'worth' => "Vaut",
'consumable' => "Consommable",
'nonConsumable' => "Non-consommable",
'accountWide' => "Portant sur le compte",
'millable' => "Pilable",
'noEquipCD' => "Aucun temps de recharge lorsqu'équipé",
'prospectable' => "Prospectable",
'disenchantable'=> "Desencantable",
'cantDisenchant'=> "Ne peut pas être désenchanté",
'repairCost' => "Cout de réparation",
'tool' => "Outil",
'cost' => "Coût",
'content' => "Contenu",
'_transfer' => 'Cet objet sera converti en <a href="?item=%d" class="q%d icontiny tinyspecial" style="background-image: url(images/icons/tiny/%s.gif)">%s</a> si vous transférez en <span class="%s-icon">%s</span>.',
'_unavailable' => "Este objeto no está disponible para los jugadores.",
'_rndEnchants' => "Enchantements aléatoires",
'_chance' => "(%s%% de chance)",
'_reqLevel' => "Niveau requis",
'slot' => "Emplacement",
'_quality' => "Qualité",
'usableBy' => "Utilisable par",
'buyout' => "Vente immédiate",
'each' => "chacun",
'gems' => "Gemmes",
'socketBonus' => "Bonus de châsse",
'socket' => array(
@@ -468,16 +525,16 @@ $lang = array(
),
"bagFamily" => array(
"Sac", "Carquois", "Giberne", "Sac d'âmes", "Sac de travailleur du cuir",
"Sac de calligraphie", "Sac d'herbes", "Sac d'enchanteur", "Sac d'ingénieur", "Clé",
"Sac de calligraphie", "Sac d'herbes", "Sac d'enchanteur", "Sac d'ingénieur", null, /*Clé*/
"Sac de gemmes", "Sac de mineur"
),
'inventoryType' => array(
null, "Tête", "Cou", "Épaules", "Chemise",
"Torse", "Taille", "Jambes", "Pieds", "Poignets",
"Mains", "Doigt", "Bijou", "À une main", "Main gauche",
"Mains", "Doigt", "Bijou", "À une main", "Main gauche", /*Shield*/
"À distance", "Dos", "Deux mains", "Sac", "Tabard",
"Torse", "Main droite", "Main gauche", "Tenu en main gauche", "Projectile",
"Armes de jet", "À distance", "Carquois", "Relique"
null, /*Robe*/ "Main droite", "Main gauche", "Tenu en main gauche", "Projectile",
"Armes de jet", null, /*Ranged2*/ "Carquois", "Relique"
),
'armorSubClass' => array(
"Divers", "Armures en tissu", "Armures en cuir", "Armures en mailles", "Armures en plaques",
@@ -496,6 +553,48 @@ $lang = array(
),
'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)",
)),
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"
)),
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)"
)),
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"
)),
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)"
)),
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"
)),
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"
)),
15 => array("Miscellaneous", array(
-2 => "Armor Tokens", 3 => "Holiday", 0 => "Junk", 1 => "Reagents", 5 => "Mounts", -7 => "Flying Mounts",
2 => "Small Pets", 4 => "Other (Miscellaneous)"
)),
10 => "Currency",
12 => "Quest",
13 => "Keys",
),
'statType' => array(
"Augmente vos points de mana de %d.",

View File

@@ -133,6 +133,8 @@ $lang = array(
'itemsets' => "Комплекты",
'mechanic' => "Механика",
'mechAbbr' => "Механика",
'npc' => "НИП",
'npcs' => "НИП",
'pet' => "Питомец",
'pets' => "Питомцы охотников",
'profile' => "",
@@ -161,6 +163,7 @@ $lang = array(
'specs' => "Ветки талантов",
'_roles' => ['Лекарь', 'Боец ближнего боя', 'Боец дальнего боя', 'Танк'],
'modes' => ['Обычный / 10-норм.', 'Героический / 25-норм.', '10-героич', '25-героич'],
'expansions' => array("World of Warcraft", "The Burning Crusade", "Wrath of the Lich King"),
'stats' => array("к силе", "к ловкости", "к выносливости", "к интеллекту", "к духу"),
'languages' => array(
@@ -215,12 +218,12 @@ $lang = array(
'goForum' => "Feedback <a href=\"?forums&board=1\">forum</a>",
),
'account' => [],
'event' => array(
'category' => array("Разное", "Праздники", "Периодические", "PvP")
),
'npc' => array(
'rank' => ['Обычный', 'Элитный', 'Редкий элитный', 'Босс', 'Редкий']
),
'event' => array(
'category' => array("Разное", "Праздники", "Периодические", "PvP")
),
'achievement' => array(
'criteria' => "Критерий",
'points' => "Очки",
@@ -262,7 +265,7 @@ $lang = array(
),
'quest' => array(
'level' => '%s-го уровня',
'daily' => '', // empty on purpose .. wtf guys?!
'daily' => 'Ежедневно',
'requirements' => 'Требования'
),
'title' => array(
@@ -283,7 +286,7 @@ $lang = array(
),
'pet' => array(
'exotic' => "Экзотический",
"cat" => ["Свирепость", "Упорство", "Хитрость"]
'cat' => ["Свирепость", "Упорство", "Хитрость"]
),
'itemset' => array(
'_desc' => "<b>%s</b> — <b>%s</b>. Он состоит из %s предметов.",
@@ -328,6 +331,8 @@ $lang = array(
'_interval' => "Интервал",
'_inSlot' => "в слот",
'ppm' => "Срабатывает %s раз в минуту",
'procChance' => "Шанс срабатывания",
'starter' => "Начальное заклинание",
'trainingCost' => "Цена обучения",
'remaining' => "Осталось: %s",
@@ -340,11 +345,16 @@ $lang = array(
'meleeRange' => "Дистанция ближнего боя",
'unlimRange' => "Неограниченное расстояние",
'reagents' => "Реагент",
'home' => "%lt;Гостиница&gt;",
'tools' => "Инструменты",
'home' => "%lt;Гостиница&gt;",
'pctCostOf' => "от базовой %s",
'costPerSec' => ", плюс %s в секунду",
'costPerLevel' => ", плюс %s за уровень",
'_scaling' => "[Scaling]",
'scaling' => array(
'directSP' => "[+%.2f%% of spell power to direct component]", 'directAP' => "[+%.2f%% of attack power to direct component]",
'dotSP' => "[+%.2f%% of spell power per tick]", 'dotAP' => "[+%.2f%% of attack power per tick]"
),
'powerRunes' => ["Лед", "Руна льда", "Руна крови", "Смерти"],
'powerTypes' => array(
-2 => "Здоровье", -1 => null, "Мана", "Ярость", "Тонус", "Энергия", "[Happiness]", "[Rune]", "Руническая сила",
@@ -399,27 +409,48 @@ $lang = array(
"Печати"
),
'weaponSubClass' => array(
"Одноручные топоры", "Двуручные топоры", "Луки", "Огнестрельное", "Одноручное дробящее",
"Двуручное дробящее", "Древковое", "Одноручные мечи", "Двуручные мечи", null,
"Посохи", null, null, "Кистевое", "Разное",
"Кинжалы", "Метательное", null, "Арбалеты", "Жезлы",
"Удочки"
15 => "Кинжалы", 13 => "Кистевое", 0 => "Одноручные топоры", 4 => "Одноручное дробящее", 7 => "Одноручные мечи",
6 => "Древковое", 10 => "Посохи", 1 => "Двуручные топоры", 5 => "Двуручное дробящее", 8 => "Двуручные мечи",
2 => "Луки", 18 => "Арбалеты", 3 => "Огнестрельное", 16 => "Метательное", 19 => "Жезлы",
20 => "Удочки", 14 => "Разное"
),
'subClassMasks' => array(
0x02A5F3 => 'Оружие ближнего боя', 0x0060 => 'Щит', 0x04000C => 'Оружие дальнего боя', 0xA091 => 'Одноручное оружие ближнего боя'
),
'traitShort' => array(
'atkpwr' => "СА", 'rgdatkpwr' => "Сил", 'splpwr' => "СЗ",
'arcsplpwr' => "Урон", 'firsplpwr' => "Урон", 'frosplpwr' => "Урон",
'holsplpwr' => "Урон", 'natsplpwr' => "Урон", 'shasplpwr' => "Урон",
'splheal' => "Исцеление"
)
'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'
),
'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'
),
'lockType' => array(
null, "Взлом замков", "Травничество", "Горное дело", "Обезвреживание ловушки",
"Открытие", "Клад (DND)", "Эльфийские самоцветы (DND)", "Закрытие", "Установка",
"Быстрое открытие", "Быстрое закрытие", "Открытие: механика", "Открытие: наклон", "Открытие: атака",
"Газ'рилльское украшение", "Взрыв", "Медленное открытие (PvP)", "Медленное закрытие (PvP)", "Рыбная ловля (DND)",
"Начертание", "Открыть на ходу"
),
'stealthType' => ['GENERAL', 'TRAP'],
'invisibilityType' => ['GENERAL', 3 => 'TRAP', 6 => 'DRUNK']
),
'item' => array(
'armor' => "Броня: %s",
'block' => "Блок: %s",
'charges' => "зарядов",
'expend' => "expendable",
'locked' => "Заперт",
'ratingString' => "%s&nbsp;@&nbsp;L%s",
'heroic' => "Героический",
@@ -432,7 +463,6 @@ $lang = array(
'addsDps' => "Добавляет",
'fap' => "Сила атаки зверя",
'durability' => "Прочность:",
'duration' => "Длительность:",
'realTime' => "реальное время",
'conjured' => "Сотворенный предмет",
'damagePhys' => "Урон: %s",
@@ -442,13 +472,40 @@ $lang = array(
'itemLevel' => "Уровень предмета:",
'randEnchant' => "&lt;Случайное зачарование&gt",
'readClick' => "&lt;Щелкните правой кнопкой мыши, чтобы прочитать.&gt",
'openClick' => "&lt;Щелкните правой кнопкой мыши, чтобы открыть.&gt",
'set' => "Набор",
'partyLoot' => "Добыча группы",
'smartLoot' => "Умное распределение добычи",
'indestructible'=> "Невозможно выбросить",
'deprecated' => "Устарело",
'useInShape' => "Используется в формах",
'useInArena' => "Используется на аренах",
'refundable' => "Подлежит возврату",
'noNeedRoll' => 'Нельзя говорить "Мне это нужно"',
'atKeyring' => "Может быть помещён в связку для ключей",
'worth' => "Деньги",
'consumable' => "Расходуется",
'nonConsumable' => "Не расходуется",
'accountWide' => "[Account-wide]", // 22.10. hm, check with 'source' later
'millable' => "Можно растолочь",
'noEquipCD' => "Нет отката при надевании",
'prospectable' => "Просеиваемое",
'disenchantable'=> "Распыляемый",
'cantDisenchant'=> "Нельзя распылить",
'repairCost' => "Цена починки",
'tool' => "Инструмент",
'cost' => "Цена",
'content' => "Материал",
'_transfer' => 'Этот предмет превратится в <a href="?item=%d" class="q%d icontiny tinyspecial" style="background-image: url(images/icons/tiny/%s.gif)">%s</a>, если вы перейдете за <span class="%s-icon">%s</span>.',
'_unavailable' => "Этот предмет не доступен игрокам.",
'_rndEnchants' => "Случайные улучшения",
'_chance' => "(шанс %s%%)",
'_reqLevel' => "Требуется уровень",
'slot' => "Слот",
'_quality' => "Качество",
'usableBy' => "Используется (кем)",
'buyout' => "Цена выкупа",
'each' => "каждый",
'gems' => "Самоцветы",
'socketBonus' => "При соответствии цвета",
'socket' => array(
@@ -459,8 +516,8 @@ $lang = array(
"Эпический", "Легендарный", "Артефакт", "Фамильная черта"
),
'trigger' => array (
"Использование: ", "Если на персонаже: ", "Возможный эффект при попадании: ", null,
null, null, null
"Использование: ", "Если на персонаже: ", "Возможный эффект при попадании: ",
null, null, null, null
),
'bonding' => array (
"Привязано к учетной записи", "Персональный при поднятии", "Становится персональным при надевании",
@@ -468,16 +525,16 @@ $lang = array(
),
"bagFamily" => array(
"Сумка", "Колчан", "Подсумок", "Сумка душ", "Сумка кожевника",
"Сумка начертателя", "Сумка травника", "Сумка зачаровывателя", "Сумка инженера", "Ключ",
"Сумка начертателя", "Сумка травника", "Сумка зачаровывателя", "Сумка инженера", null, /*Ключ*/
"Сумка ювелира", "Сумка шахтера"
),
'inventoryType' => array(
null, "Голова", "Шея", "Плечи", "Рубашка",
"Грудь", "Пояс", "Ноги", "Ступни", "Запястья",
"Кисти рук", "Палец", "Аксессуар", "Одноручное", "Левая рука",
"Кисти рук", "Палец", "Аксессуар", "Одноручное", "Левая рука", /*Shield*/
"Дальний бой", "Спина", "Двуручное", "Сумка", "Гербовая накидка",
"Грудь", "Правая рука", "Левая рука", "Левая рука", "Боеприпасы",
"Метательное", "Спина", "Колчан", "Реликвия"
null, /*Грудь*/ "Правая рука", "Левая рука", "Левая рука", "Боеприпасы",
"Метательное", null, /*Спина*/ "Колчан", "Реликвия"
),
'armorSubClass' => array(
"Разное", "Ткань", "Кожа", "Кольчуга", "Латы",
@@ -495,7 +552,49 @@ $lang = array(
null, null, "Стрелы", "Пули", null
),
'elixirType' => [null, "Бой", "Охранный"],
'cat' => array(
'cat' => array( // should be ordered by content firts, then alphabeticaly
2 => "Оружие", // self::$spell['weaponSubClass']
4 => array("Броня", array(
1 => "Тканевые", 2 => "Кожаные", 3 => "Кольчужные", 4 => "Латные", 7 => "Манускрипты", 8 => "Идолы",
9 => "Тотемы", 10 => "Печати", -6 => "Плащи", -5 => "Левая рука", 6 => "Щиты", -8 => "Рубашки",
-7 => "Гербовые накидки", -3 => "Ожерелья", -2 => "Кольца", -4 => "Аксессуары", 0 => "Разное (доспехи)",
)),
1 => array("Контейнеры", array(
0 => "Сумки", 1 => "Сумки душ", 3 => "Сумки зачаровывателя", 4 => "Сумки инженера", 7 => "Сумки кожевника", 8 => "Сумки начертателя",
2 => "Сумки травника", 6 => "Сумки шахтера", 5 => "Сумки ювелира",
)),
0 => array("Расходуемые", array(
7 => "Бинты", 5 => "Еда и напитки", 1 => "Зелья", 0 => "Расходуемые", 4 => "Свитки", -3 => "Улучшения (временные)",
6 => "Улучшения (постоянные)", 3 => "Фляги", 2 => ["Эликсиры", [1 => "Боевые", 2 => "Охранные"]], 8 => "Разное (расходуемые)"
)),
16 => array("Символы", array(
1 => "Символ воина", 2 => "Символ паладина", 3 => "Символ охотника", 4 => "Символ разбойника", 5 => "Символ жреца", 6 => "Символ рыцаря смерти",
7 => "Символ шамана", 8 => "Символ мага", 9 => "Символ чернокнижника", 11 => "Символ друида"
)),
7 => array("Хозяйственные товары", array(
14 => "Улучшения брони", 5 => "Ткань", 3 => "Устройства", 10 => "Элементаль", 12 => "Наложение чар", 2 => "Взрывчатка",
9 => "Травы", 4 => "Ювелирное дело", 6 => "Кожа", 13 => "Материалы", 8 => "Мясо", 7 => "Металл и камни",
1 => "Детали", 15 => "Улучшения оружия", 11 => "Разное (хозяйственные товары)"
)),
6 => ["Боеприпасы", [ 2 => "Стрелы", 3 => "Пули" ]],
11 => ["Колчаны", [ 3 => "Подсумки", 2 => "Колчаны" ]],
9 => array("Рецепты", array(
0 => "Книги", 6 => "Рецепты алхимии", 4 => "Кузнечное дело", 5 => "Рецепты кулинарии", 8 => "Зачаровывание", 3 => "Инженерное дело",
7 => "Первая помощь", 9 => "Рыбная ловля", 11 => "Технологии Начертания", 10 => "Ювелирное дело", 1 => "Кожевничество", 12 => "Руководства по Шахтерскому делу",
2 => "Портняжное дело"
)),
3 => array("Самоцветы", array(
6 => "Особые", 0 => "Красные", 1 => "Синие", 2 => "Желтые", 3 => "Фиолетовые", 4 => "Зелёные",
5 => "Оранжевые", 8 => "Радужные", 7 => "Простые"
)),
15 => array("Разное", array(
-2 => "Фрагмент доспехов", 3 => "Праздник", 0 => "Хлам", 1 => "Реагент", 5 => "Транспорт", -7 => "Летающий транспорт",
2 => "Спутники", 4 => "Разное"
)),
10 => "Валюта",
12 => "Задание",
13 => "Ключи",
),
'statType' => array(
"Увеличение запаса маны на %d ед.",

View File

@@ -26,16 +26,16 @@ if (!$smarty->loadCache($cacheKey, $pageData))
switch ($cat)
{
case 0:
$condition[] = ['e.holidayId', 0];
$condition[] = ['holidayId', 0];
break;
case 1:
$condition[] = ['h.scheduleType', -1];
$condition[] = ['scheduleType', -1];
break;
case 2:
$condition[] = ['h.scheduleType', [0, 1]];
$condition[] = ['scheduleType', [0, 1]];
break;
case 3:
$condition[] = ['h.scheduleType', 2];
$condition[] = ['scheduleType', 2];
break;
}
}

View File

@@ -86,7 +86,7 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
$quickInfo = Lang::getInfoBoxForFlags($item->getField('cuFlags'));
if ($_slot) // itemlevel
if (in_array($_class, [ITEM_CLASS_ARMOR, ITEM_CLASS_WEAPON, ITEM_CLASS_AMMUNITION]) || $item->getField('gemEnchantmentId')) // itemlevel
$quickInfo[] = Lang::$game['level'].Lang::$colon.$item->getField('itemLevel');
if ($_flags & ITEM_FLAG_ACCOUNTBOUND) // account-wide
@@ -110,7 +110,7 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
if ($item->getField('spellCharges'.$i) >= 0)
continue;
$tt = '[tooltip=tooltip_consumedonuse]'.Lang::$item['consumable'].'[/tooltip]'; // 2:Consommable 3:Verbrauchbar 6:Consumible 8:Расходуется
$tt = '[tooltip=tooltip_consumedonuse]'.Lang::$item['consumable'].'[/tooltip]';
break;
}
@@ -118,14 +118,15 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
$quickInfo[] = isset($tt) ? $tt : '[tooltip=tooltip_notconsumedonuse]'.Lang::$item['nonConsumable'].'[/tooltip]';
}
if ($hId = $item->getField('holidayId')) // 3:Werkzeug 6:Herramienta 8:Инструмент 2:Outil
if ($hId = $item->getField('holidayId'))
if ($hName = DB::Aowow()->selectRow('SELECT * FROM ?_holidays WHERE id = ?d', $hId))
$quickInfo[] = Lang::$game['eventShort'].Lang::$colon.'[url=?event='.$hId.']'.Util::localizedString($hName, 'name').'[/url]';
if ($tId = $item->getField('totemCategory')) // 3:Werkzeug 6:Herramienta 8:Инструмент 2:Outil
if ($tId = $item->getField('totemCategory'))
if ($tName = DB::Aowow()->selectRow('SELECT * FROM ?_totemCategory WHERE id = ?d', $tId))
$quickInfo[] = Lang::$item['tool'].Lang::$colon.'[url=?items&filter=cr=91;crs='.$tId.';crv=0]'.Util::localizedString($tName, 'name').'[/url]';
$each = $item->getField('stackable') > 1 ? '[color=q0] ('.Lang::$item['each'].')[/color]' : null;
$cost = '';
if ($_ = $item->getField('buyPrice'))
$cost .= '[money='.$_.']';
@@ -135,20 +136,20 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
$cost .= '[currency='.$c.' amount='.$qty.']';
if ($cost)
$quickInfo[] = Lang::$item['cost'].Lang::$colon.$cost.'[color=q0] ('.Lang::$item['each'].')[/color]'; // 2:Coût 3:Preis 6:Coste 8:Цена
$quickInfo[] = Lang::$item['cost'].Lang::$colon.$cost.$each;
if ($_ = $item->getField('repairPrice')) // 3:Reparaturkosten 8:Цена починки 2:Cout de réparation 6:Coste de reparación
if ($_ = $item->getField('repairPrice'))
$quickInfo[] = Lang::$item['repairCost'].Lang::$colon.'[money='.$_.']';
if (in_array($item->getField('bonding'), [0, 2, 3])) // avg auction buyout
if ($_ = Util::getBuyoutForItem($_id))
$quickInfo[] = '[tooltip=tooltip_buyoutprice]'.Lang::$item['buyout.'].'[/tooltip]'.Lang::$colon.'[money='.$_.'][color=q0] ('.Lang::$item['each'].')[/color]';
$quickInfo[] = '[tooltip=tooltip_buyoutprice]'.Lang::$item['buyout.'].'[/tooltip]'.Lang::$colon.'[money='.$_.']'.$each;
if ($_flags & ITEM_FLAG_OPENABLE) // avg money contained // 2:Vaut 8:Деньги 6:Valor 3:Wert
if ($_flags & ITEM_FLAG_OPENABLE) // avg money contained
if ($_ = intVal(($item->getField('minMoneyLoot') + $item->getField('maxMoneyLoot')) / 2))
$quickInfo[] = Lang::$item['worth'].Lang::$colon.'[tooltip=tooltip_avgmoneycontained][money='.$_.'][/tooltip]';
if ($_slot) // if it goes into a slot it may be disenchanted
if ($_slot && $_class != ITEM_CLASS_CONTAINER) // if it goes into a slot it may be disenchanted
{
if ($item->getField('disenchantId'))
{
@@ -156,47 +157,47 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
if ($_ < 1) // these are some items, that never went live .. extremely rough emulation here
$_ = intVal($item->getField('itemLevel') / 7.5) * 25;
$quickInfo[] = Lang::$item['disenchantable'].'&nbsp;([tooltip=tooltip_reqenchanting]'.$_.'[/tooltip])'; // 35002
$quickInfo[] = Lang::$item['disenchantable'].'&nbsp;([tooltip=tooltip_reqenchanting]'.$_.'[/tooltip])';
}
else
$quickInfo[] = Lang::$item['cantDisenchant']; // 27978
$quickInfo[] = Lang::$item['cantDisenchant'];
}
if (($_flags & ITEM_FLAG_MILLABLE) && $item->getField('requiredSkill') == 773)
$quickInfo[] = Lang::$item['millable'].'&nbsp;([tooltip=tooltip_reqinscription]'.$item->getField('requiredSkillRank').'[/tooltip])'; // 8:Можно растолочь 2:Pilable 6:Se puede moler 3:Mahlbar
$quickInfo[] = Lang::$item['millable'].'&nbsp;([tooltip=tooltip_reqinscription]'.$item->getField('requiredSkillRank').'[/tooltip])';
if (($_flags & ITEM_FLAG_PROSPECTABLE) && $item->getField('requiredSkill') == 755)
$quickInfo[] = Lang::$item['prospectable'].'&nbsp;([tooltip=tooltip_reqjewelcrafting]'.$item->getField('requiredSkillRank').'[/tooltip])'; // 3:Sondierbar 8:Просеиваемое 2:Prospectable 6:Prospectable
$quickInfo[] = Lang::$item['prospectable'].'&nbsp;([tooltip=tooltip_reqjewelcrafting]'.$item->getField('requiredSkillRank').'[/tooltip])';
if ($_flags & ITEM_FLAG_DEPRECATED)
$quickInfo[] = '[tooltip=tooltip_deprecated]'.Lang::$item['deprecated'].'[/tooltip]'; // 3:Nicht benutzt 6:Depreciado 8:Устарело 2:Désuet
$quickInfo[] = '[tooltip=tooltip_deprecated]'.Lang::$item['deprecated'].'[/tooltip]';
if ($_flags & ITEM_FLAG_NO_EQUIPCD)
$quickInfo[] = '[tooltip=tooltip_noequipcooldown]'.Lang::$item['noEquipCD'].'[/tooltip]'; // 3:Keine Anlegabklingzeit 6:No tiene tiempo de reutilización al equipar 8:Нет отката при надевании 2:Aucun temps de recharge lorsqu'équipé
$quickInfo[] = '[tooltip=tooltip_noequipcooldown]'.Lang::$item['noEquipCD'].'[/tooltip]';
if ($_flags & ITEM_FLAG_PARTYLOOT)
$quickInfo[] = '[tooltip=tooltip_partyloot]'.Lang::$item['partyLoot'].'[/tooltip]'; // 3:Gruppenloot 6:Despojo de grupo 8:Добыча группы 2:Butin de groupe
$quickInfo[] = '[tooltip=tooltip_partyloot]'.Lang::$item['partyLoot'].'[/tooltip]';
if ($_flags & ITEM_FLAG_REFUNDABLE)
$quickInfo[] = '[tooltip=tooltip_refundable]'.Lang::$item['refundable'].'[/tooltip]'; // 3:Rückzahlbar 6:Se puede devolver 8:Подлежит возврату 2:Remboursable
$quickInfo[] = '[tooltip=tooltip_refundable]'.Lang::$item['refundable'].'[/tooltip]';
if ($_flags & ITEM_FLAG_SMARTLOOT)
$quickInfo[] = '[tooltip=tooltip_smartloot]'.Lang::$item['smartLoot'].'[/tooltip]'; // 3:Intelligente Beuteverteilung 6:Botín inteligente 8:Умное распределение добычи 2:Butin intelligent
$quickInfo[] = '[tooltip=tooltip_smartloot]'.Lang::$item['smartLoot'].'[/tooltip]';
if ($_flags & ITEM_FLAG_INDESTRUCTIBLE)
$quickInfo[] = Lang::$item['indestructible']; // 3:Kann nicht zerstört werden 6:No puede ser destruido 8:Невозможно выбросить 2:Ne peut être détruit
$quickInfo[] = Lang::$item['indestructible'];
if ($_flags & ITEM_FLAG_USABLE_ARENA)
$quickInfo[] = Lang::$item['useInArena']; // 3: Benutzbar in Arenen 2:Utilisable en Aréna 6:Se puede usar en arenas 8:Используется на аренах
$quickInfo[] = Lang::$item['useInArena'];
if ($_flags & ITEM_FLAG_USABLE_SHAPED)
$quickInfo[] = Lang::$item['useInShape']; // 2:Utilisable lorsque transformé 3:Benutzbar in Gestaltwandlung 6:Se puede usar con cambio de forma 8:Используется в формах
$quickInfo[] = Lang::$item['useInShape'];
if ($item->getField('flagsExtra') & 0x0100) // cant roll need
$quickInfo[] = '[tooltip=tooltip_cannotrollneed]'.Lang::$item['noNeedRoll'].'[/tooltip]'; // 3:Kann nicht für Bedarf werfen 6:No se puede hacer una tirada por Necesidad 2:Ne peut pas faire un jet de Besoin 8:Нельзя говорить "Мне это нужно"
$quickInfo[] = '[tooltip=tooltip_cannotrollneed]'.Lang::$item['noNeedRoll'].'[/tooltip]';
if ($item->getField('bagFamily') & 0x0100) // fits into keyring
$quickInfo[] = Lang::$item['atKeyring']; // 2:(Va dans le trousseau de clés) 8:(Может быть помещён в связку для ключей) 6:(Se puede poner en el llavero) 3:(Passt in den Schlüsselbund)
$quickInfo[] = Lang::$item['atKeyring'];
/****************/
@@ -210,13 +211,13 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
'path' => [0, 0],
'title' => [$item->getField('name', true), Util::ucFirst(Lang::$game['item'])],
'pageText' => [],
'buttons' => in_array($_class, [ITEM_CLASS_WEAPON, ITEM_CLASS_GEM, ITEM_CLASS_ARMOR]),
'buttons' => in_array($_class, [ITEM_CLASS_WEAPON, ITEM_CLASS_ARMOR]) || $item->getField('gemEnchantmentId'),
'page' => array(
'color' => Util::$rarityColorStings[$item->getField('quality')],
'quality' => $item->getField('quality'),
'icon' => $item->getField('iconString'),
'name' => $item->getField('name', true),
'displayId' => $item->getField('displayId'),
'displayId' => in_array($_class, [ITEM_CLASS_WEAPON, ITEM_CLASS_ARMOR]) && $item->getField('displayId') ? $item->getField('displayId') : null,
'slot' => $_slot,
'stack' => $item->getField('stackable'),
'class' => $_class
@@ -266,6 +267,22 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
{
uaSort($item->subItems[$_id], function($a, $b) { return strcmp($a['name'], $b['name']); });
$pageData['page']['subItems'] = array_values($item->subItems[$_id]);
// merge identical stats and names for normal users (e.g. spellPower of a specific school became generel spellPower with 3.0)
if (!User::isInGroup(U_GROUP_STAFF))
{
for ($i = 1; $i < count($pageData['page']['subItems']); $i++)
{
$prev = &$pageData['page']['subItems'][$i-1];
$cur = &$pageData['page']['subItems'][$i];
if ($prev['jsonequip'] == $cur['jsonequip'] && $prev['name'] == $cur['name'])
{
$prev['chance'] += $cur['chance'];
array_splice($pageData['page']['subItems'], $i , 1);
$i = 1;
}
}
}
}
// factionchange-equivalent
@@ -291,10 +308,103 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
/* Extra Tabs */
/**************/
// dropped by creature
$sourceTabs = array(
// 0 => refLoot
1 => ['item', '$LANG.tab_containedin', 'contained-in-item', [], []],
2 => ['item', '$LANG.tab_disenchantedfrom', 'disenchanted-from', [], []],
3 => ['item', '$LANG.tab_prospectedfrom', 'prospected-from', [], []],
4 => ['item', '$LANG.tab_milledfrom', 'milled-from', [], []],
5 => ['creature', '$LANG.tab_droppedby', 'dropped-by', [], []],
6 => ['creature', '$LANG.tab_pickpocketedfrom', 'pickpocketed-from', [], []],
7 => ['creature', '$LANG.tab_skinnedfrom', 'skinned-from', [], []],
8 => ['creature', '$LANG.tab_minedfromnpc', 'mined-from-npc', [], []],
9 => ['creature', '$LANG.tab_salvagedfrom', 'salvaged-from', [], []],
10 => ['creature', '$LANG.tab_gatheredfromnpc', 'gathered-from-npc', [], []],
11 => ['quest', '$LANG.tab_rewardfrom', 'reward-from-quest', [], []],
12 => ['zone', '$LANG.tab_fishedin', 'fished-in', [], []],
13 => ['object', '$LANG.tab_containedin', 'contained-in-go', [], []],
14 => ['object', '$LANG.tab_minedfrom', 'mined-from-go', [], []],
15 => ['object', '$LANG.tab_gatheredfrom', 'gathered-from-go', [], []],
16 => ['spell', '$LANG.tab_createdby', 'created-by', [], []]
);
$data = [];
$xCols = '';
$sources = Util::getLootSource($_id);
foreach ($sources as $lootTpl => $lootData)
{
// cap fetched entries to the sql-limit to guarantee, that the highest chance items get selected first
$ids = array_slice(array_keys($lootData), 0, $AoWoWconf['sqlLimit']);
switch ($lootTpl)
{
case LOOT_CREATURE:
$srcType = new CreatureList(array(['ct.lootId', $ids]));
$srcType->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$srcData = $srcType->getListviewData();
foreach ($srcType->iterate() as $_)
$data[5][] = array_merge($srcData[$srcType->id], $lootData[$srcType->getField('lootId')]);
$sourceTabs[5][3][] = 'Listview.extraCols.percent';
break;
case LOOT_PICKPOCKET:
$srcType = new CreatureList(array(['ct.pickpocketLootId', $ids]));
$srcType->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$srcData = $srcType->getListviewData();
foreach ($srcType->iterate() as $_)
$data[6][] = array_merge($srcData[$srcType->id], $lootData[$srcType->getField('pickpocketLootId')]);
$sourceTabs[6][3][] = 'Listview.extraCols.percent';
break;
case LOOT_SKINNING:
$srcType = new CreatureList(array(['ct.skinLootId', $ids]));
$srcType->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$srcData = $srcType->getListviewData();
foreach ($srcType->iterate() as $curTpl)
{
if ($curTpl['type_flags'] & NPC_TYPEFLAG_HERBLOOT)
{
$data[10][] = array_merge($srcData[$srcType->id], $lootData[$srcType->getField('skinLootId')]);
$sourceTabs[10][3][] = 'Listview.extraCols.percent';
}
else if ($curTpl['type_flags'] & NPC_TYPEFLAG_ENGINEERLOOT)
{
$data[9][] = array_merge($srcData[$srcType->id], $lootData[$srcType->getField('skinLootId')]);
$sourceTabs[9][3][] = 'Listview.extraCols.percent';
}
else if ($curTpl['type_flags'] & NPC_TYPEFLAG_MININGLOOT)
{
$data[8][] = array_merge($srcData[$srcType->id], $lootData[$srcType->getField('skinLootId')]);
$sourceTabs[8][3][] = 'Listview.extraCols.percent';
}
else
{
$data[7][] = array_merge($srcData[$srcType->id], $lootData[$srcType->getField('skinLootId')]);
$sourceTabs[7][3][] = 'Listview.extraCols.percent';
}
}
break;
case LOOT_FISHING:
// subAreas are currently ignored
$srcType = new ZoneList(array(['id', $ids]));
$srcType->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$srcData = $srcType->getListviewData();
foreach ($srcType->iterate() as $_)
$data[12][] = array_merge($srcData[$srcType->id], $lootData[$srcType->id]);
$sourceTabs[12][3][] = 'Listview.extraCols.percent';
break;
case LOOT_GAMEOBJECT:
// GO-loot
// diff between gathered from / mined from / contained in
// contained in GO (chest)
// mined-from (vine)
// gathered-from (herb)
// like skinning with lock-properties instead of type_flags
// foreach($rows as $row)
// {
// // Залежи руды
@@ -307,30 +417,91 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
// else
// $item['containedinobject'][] = array_merge(objectinfo2($row), $drop);
// }
break;
case LOOT_PROSPECTING:
$sourceTab = 3;
case LOOT_MILLING:
if (!isset($sourceTab))
$sourceTab = 4;
case LOOT_ITEM:
if (!isset($sourceTab))
$sourceTab = 1;
// sold by [consult itemExtendedCost]
$srcType = new ItemList(array(['i.id', $ids]));
$srcType->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$srcData = $srcType->getListviewData();
// Objective of (quest)
foreach ($srcType->iterate() as $_)
$data[$sourceTab][] = array_merge($srcData[$srcType->id], $lootData[$srcType->id]);
// provided for (quest)
$sourceTabs[$sourceTab][3][] = 'Listview.extraCols.percent';
break;
case LOOT_DISENCHANT:
$srcType = new ItemList(array(['i.disenchantId', $ids]));
$srcType->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$srcData = $srcType->getListviewData();
// reward of (quest)
foreach ($srcType->iterate() as $_)
$data[2][] = array_merge($srcData[$srcType->id], $lootData[$srcType->getField('disenchantId')]);
// reward of (quest) [from mail-loot]
$sourceTabs[2][3][] = 'Listview.extraCols.percent';
break;
case LOOT_QUEST:
// merge regular quest rewards into quest_mail_loot_template results
$conditions = array(
'OR', ['qt.RewardMailTemplateId', $ids],
['RewardChoiceItemId1', $_id], ['RewardChoiceItemId2', $_id], ['RewardChoiceItemId3', $_id], ['RewardChoiceItemId4', $_id], ['RewardChoiceItemId5', $_id],
['RewardChoiceItemId6', $_id], ['RewardItemId1', $_id], ['RewardItemId2', $_id], ['RewardItemId3', $_id], ['RewardItemId4', $_id],
);
$srcType = new QuestList($conditions);
$srcType->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_REWARDS);
$data[11] = $srcType->getListviewData(); // dont merge chances; most are 100% anyway and regular reward loot has none
// contained in (item) [item_loot]
break;
case LOOT_SPELL:
// merge with: created by [spell]
// contains [item_loot]
$itemLoot = Util::handleLoot(LOOT_ITEM, $item->id, $smarty, User::isInGroup(U_GROUP_STAFF));
break;
}
}
foreach ($sourceTabs as $k => $tab)
{
if (empty($data[$k]))
continue;
$pageData['relTabs'][] = array(
'file' => $tab[0],
'data' => $data[$k],
'params' => [
'tabs' => '$tabsRelated',
'name' => $tab[1],
'id' => $tab[2],
'extraCols' => $tab[3] ? '$['.implode(', ', array_unique($tab[3])).']' : null,
'hiddenCols' => $tab[4] ? '$['.implode(', ', array_unique($tab[4])).']' : null
]
);
}
/* this item contains.. */
$sourceFor = array(
[LOOT_ITEM, $item->id, '$LANG.tab_contains', 'contains', ['Listview.extraCols.percent'], [] ],
[LOOT_PROSPECTING, $item->id, '$LANG.tab_prospecting', 'prospecting', ['Listview.extraCols.percent'], ['side', 'slot', 'reqlevel']],
[LOOT_MILLING, $item->id, '$LANG.tab_milling', 'milling', ['Listview.extraCols.percent'], ['side', 'slot', 'reqlevel']],
[LOOT_DISENCHANT, $item->getField('disenchantId'), '$LANG.tab_disenchanting', 'disenchanting', ['Listview.extraCols.percent'], ['side', 'slot', 'reqlevel']]
);
foreach ($sourceFor as $sf)
{
$itemLoot = Util::handleLoot($sf[0], $sf[1], $smarty, User::isInGroup(U_GROUP_STAFF));
if ($itemLoot)
{
$extraCols = ['Listview.extraCols.percent'];
if (User::isInGroup(U_GROUP_STAFF))
{
$extraCols[] = "Listview.funcBox.createSimpleCol('group', 'group', '10%', 'group')";
$extraCols[] = "Listview.funcBox.createSimpleCol('mode', LANG.compose_mode, '10%', 'mode')";
$extraCols[] = "Listview.funcBox.createSimpleCol('reference', LANG.finpcs.seploot + ' ' + LANG.button_link, '10%', 'reference')";
$sf[4][] = "Listview.funcBox.createSimpleCol('group', 'Group', '10%', 'group')";
$sf[4][] = "Listview.funcBox.createSimpleCol('mode', 'Mode', '10%', 'mode')";
$sf[4][] = "Listview.funcBox.createSimpleCol('reference', 'Reference', '10%', 'reference')";
}
$pageData['relTabs'][] = array(
@@ -338,22 +509,20 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
'data' => $itemLoot,
'params' => [
'tabs' => '$tabsRelated',
'name' => '$LANG.tab_contains',
'id' => 'contains',
'hiddenCols' => "$['side', 'slot', 'source', 'reqlevel']",
'extraCols' => "$[".implode(', ', $extraCols)."]",
'name' => $sf[2],
'id' => $sf[3],
'extraCols' => $sf[4] ? "$[".implode(', ', $sf[4])."]" : null,
'hiddenCols' => $sf[5] ? "$".json_encode($sf[5]) : null
]
);
}
}
// pickpocketed from
// sold by [consult itemExtendedCost]
// skinning_loot skinned from & salvaged from
// Objective of (quest)
// prospecting & prospected from
// milling & milled from
// disentchanting from & to
// provided for (quest)
// can be placed in
// if($item['BagFamily'] == 256)
@@ -364,14 +533,8 @@ if (!$smarty->loadCache($cacheKeyPage, $item))
// reagent for
// created by [spell]
// fished in
// currency for
// [spell_loot_template] ehh...
// criteria of
// array(ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM, ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM, ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM, ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM),

View File

@@ -4,13 +4,6 @@ if (!defined('AOWOW_REVISION'))
die('illegal access');
/*
item upgrade search: !
<a href="javascript:;" class="button-red" onclick="this.blur(); pr_showClassPresetMenu(this, 45498, 2, 17, event);">
<em><b><i>Find upgrades...</i></b><span>Find upgrades...</span></em>
</a>
*/
$cats = Util::extractURLParams($pageParam);
$path = [0, 0];
$title = [Lang::$game['items']];
@@ -86,11 +79,7 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
if ($cats[0] !== null)
$path = array_merge($path, $cats);
/*
display available submenu and slot, if applicable
todo: 'type' gets ignored if cats[1] is set
[$strArr, $keyMask]
*/
// display available submenu and slot, if applicable
$type = $slot = [[], null];
if ($cats[0] === null)
{
@@ -99,7 +88,9 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
}
else
{
if (isset($cats[1]))
if (isset($cats[2]))
$catList = Lang::$item['cat'][$cats[0]][1][$cats[1]][1][$cats[2]];
else if (isset($cats[1]))
$catList = Lang::$item['cat'][$cats[0]][1][$cats[1]];
else
$catList = Lang::$item['cat'][$cats[0]];
@@ -120,7 +111,7 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
break;
case 2:
if (!isset($cats[1]))
$type = [Lang::$item['cat'][2][1], null];
$type = [Lang::$spell['weaponSubClass'], null];
$slot = [Lang::$item['inventoryType'], 0x262A000];
asort($slot[0]);
@@ -139,10 +130,12 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
case 16:
if (!isset($cats[2]))
$visibleCols[] = 'glyph';
case 1:
if ($cats[0] == 1)
$visibleCols[] = 'slots';
case 3:
if (!isset($cats[1]))
asort($catList[1]);
case 1:
case 7:
case 9:
$hiddenCols[] = 'slot';
@@ -169,6 +162,16 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
/*
set conditions
*/
/*
* todo (low): this is a long term issue.
* Filter is used as a subSystem to each TypeList
* but here we would need to preemptive check for $filter['gb']
* .. bummer .. this is to be removed when the issue is _really_ solved
*/
if (preg_match('/gb\=(1|2|3)/i', $_SERVER['QUERY_STRING'], $match))
$filter['gb'] = $match[1];
$conditions[] = ['i.class', $cats[0]];
if (isset($cats[1]))
$conditions[] = ['i.subClass', $cats[1]];
@@ -207,11 +210,13 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
if (!empty($filter['upg']))
{
// uogarde-item got deleted by filter
// upgrade-item got deleted by filter
if (empty($pageData['data'][$filter['upg']]))
{
$w = $items->filterGetForm('setWeights', true);
$upgItem = new ItemList(array(['id', $filter['upg']]), false, ['wt' => $w[0], 'wtv' => $w[1]]);
// still it may not be found if you apply really weired filters (e.g. search for a melee item with caster-weights) .. not my fault :[
if (!$upgItem->error)
{
$upgItem->addGlobalsToJScript($smarty);
@@ -224,7 +229,45 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
$pageData['params']['_upgradeIds'] = "$[".$filter['upg']."]";
}
/*
by level: max 10 itemlevel steps (Level X) +1x Other|Autre|Anderes|Otros|Другое levels
by slot: all slots available
by source: .. well .. no
template: 'item',
id: 'one-hand',
name: 'One-Hand',
tabs: tabsGroups,
parent: 'lkljbjkb574',
hideCount: 1,
note: $WH.sprintf(LANG.lvnote_viewmoreslot, '=2', 'sl=13;ub=10;cr=161;crs=1;crv=0;gm=3;rf=1;wt=23:123:24:103:96:170;wtv=100:85:75:60:50:40;upg=104585'),
customFilter: fi_filterUpgradeListview,
_upgradeIds: [104585],
extraCols: fi_getExtraCols(fi_extraCols, 3, 1, 0),
sort: ['-score', 'name'],
computeDataFunc: fi_scoreSockets,
onBeforeCreate: fi_initWeightedListview,
onAfterCreate: fi_addUpgradeIndicator,
hiddenCols: ['type', 'source'],
data: []
template: 'item',
id: 'two-hand',
name: 'Two-Hand',
tabs: tabsGroups,
parent: 'lkljbjkb574',
hideCount: 1,
note: $WH.sprintf(LANG.lvnote_viewmoreslot, '=2', 'sl=17;ub=10;cr=161;crs=1;crv=0;gm=3;rf=1;wt=23:123:24:103:96:170;wtv=100:85:75:60:50:40;upg=104585'),
customFilter: fi_filterUpgradeListview,
_upgradeIds: [104585],
extraCols: fi_getExtraCols(fi_extraCols, 3, 1, 0),
sort: ['-score', 'name'],
computeDataFunc: fi_scoreSockets,
onBeforeCreate: fi_initWeightedListview,
onAfterCreate: fi_addUpgradeIndicator,
hiddenCols: ['type', 'source'],
data: []
*/
if (!empty($filter['fi']['extraCols']))
{
$gem = empty($filter['gm']) ? 0 : $filter['gm'];
@@ -278,7 +321,7 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
}
// create note if search limit was exceeded; overwriting 'note' is intentional
if ($items->getMatches() > $AoWoWconf['sqlLimit'])
if ($items->getMatches() > $AoWoWconf['sqlLimit'] && empty($filter['upg']))
{
$pageData['params']['note'] = sprintf(Util::$tryFilteringString, 'LANG.lvnote_itemsfound', $items->getMatches(), $AoWoWconf['sqlLimit']);
$pageData['params']['_truncated'] = 1;

View File

@@ -17,24 +17,23 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
if ($iSet->error)
$smarty->notFound(Lang::$game['itemset']);
$ta = $iSet->getField('contentGroup');
$ty = $iSet->getField('type');
$ev = $iSet->getField('holidayId');
$sk = $iSet->getField('skillId');
$mask = $iSet->getField('classMask');
$rLvl = $iSet->getField('reqLevel');
$name = $iSet->getField('name', true);
$cnt = count($iSet->getField('pieces'));
$unav = $iSet->getField('cuFlags') & CUSTOM_UNAVAILABLE;
$_ta = $iSet->getField('contentGroup');
$_ty = $iSet->getField('type');
$_ev = $iSet->getField('holidayId');
$_sk = $iSet->getField('skillId');
$_cl = $iSet->getField('classMask');
$_lvl = $iSet->getField('reqLevel');
$_na = $iSet->getField('name', true);
$_cnt = count($iSet->getField('pieces'));
$infobox = [];
// unavailable (todo (low): set data)
if ($unav)
if ($iSet->getField('cuFlags') & CUSTOM_UNAVAILABLE)
$infobox[] = Lang::$main['unavailable'];
// holiday
if ($ev)
$infobox[] = Lang::$game['eventShort'].Lang::$colon.'[url=?event='.$ev.']'.WorldEventList::getName($ev).'[/url]';
if ($_ev)
$infobox[] = Lang::$game['eventShort'].Lang::$colon.'[url=?event='.$_ev.']'.WorldEventList::getName($_ev).'[/url]';
// itemLevel
if ($min = $iSet->getField('minLevel'))
@@ -49,11 +48,11 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
}
// class
if ($mask)
if ($_cl)
{
$foo = [];
for ($i = 0; $i < 11; $i++)
if ($mask & (1 << $i))
if ($_cl & (1 << $i))
$foo[] = (!fMod(count($foo) + 1, 3) ? '\n' : null) . '[class='.($i + 1).']';
$t = count($foo) == 1 ? Lang::$game['class'] : Lang::$game['classes'];
@@ -61,16 +60,16 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
}
// required level
if ($rLvl)
$infobox[] = sprintf(Lang::$game['reqLevel'], $rLvl);
if ($_lvl)
$infobox[] = sprintf(Lang::$game['reqLevel'], $_lvl);
// type
if ($ty)
$infobox[] = Lang::$game['type'].lang::$colon.Lang::$itemset['types'][$ty];
if ($_ty)
$infobox[] = Lang::$game['type'].lang::$colon.Lang::$itemset['types'][$_ty];
// tag
if ($ta)
$infobox[] = Lang::$itemset['_tag'].Lang::$colon.'[url=?itemsets&filter=ta='.$ta.']'.Lang::$itemset['notes'][$ta].'[/url]';
if ($_ta)
$infobox[] = Lang::$itemset['_tag'].Lang::$colon.'[url=?itemsets&filter=ta='.$_ta.']'.Lang::$itemset['notes'][$_ta].'[/url]';
// pieces + Summary
$pieces = [];
@@ -145,13 +144,13 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
}
// path
if ($mask)
if ($_cl)
{
for ($i = 0; $i < 11; $i++)
{
if ($mask & (1 << $i))
if ($_cl & (1 << $i))
{
if ($mask == (1 << $i)) // only bit set, add path
if ($_cl == (1 << $i)) // only bit set, add path
$path[] = $i + 1;
break; // break anyway (cant set multiple classes)
@@ -160,15 +159,15 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
}
$skill = '';
if ($sk)
if ($_sk)
{
// todo (med): kill this Lang::monstrosity with Skills
$spellLink = sprintf('<a href="?spells=11.%s">%s</a> (%s)', $sk, Lang::$spell['cat'][11][$sk][0], $iSet->getField('skillLevel'));
$spellLink = sprintf('<a href="?spells=11.%s">%s</a> (%s)', $_sk, Lang::$spell['cat'][11][$_sk][0], $iSet->getField('skillLevel'));
$skill = ' &ndash; <small><b>'.sprintf(Lang::$game['requires'], $spellLink).'</b></small>';
}
$pageData = array(
'title' => $name, // for header
'title' => $_na, // for header
'path' => $path,
'infobox' => $infobox ? '[ul][li]'.implode('[/li][li]', $infobox).'[/li][/ul]' : null,
'relTabs' => [],
@@ -176,47 +175,47 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
'spells' => $spells,
'view3D' => json_encode($eqList, JSON_NUMERIC_CHECK),
'compare' => array(
'qty' => $cnt,
'qty' => $_cnt,
'items' => $compare,
'level' => $rLvl
'level' => $_lvl
),
'page' => array(
'name' => $name, // for page content
'name' => $_na, // for page content
'id' => $_id,
'bonusExt' => $skill,
'description' => $ta ? sprintf(Lang::$itemset['_desc'], $name, Lang::$itemset['notes'][$ta], $cnt) : sprintf(Lang::$itemset['_descTagless'], $name, $cnt),
'unavailable' => $unav
'description' => $_ta ? sprintf(Lang::$itemset['_desc'], $_na, Lang::$itemset['notes'][$_ta], $_cnt) : sprintf(Lang::$itemset['_descTagless'], $_na, $_cnt),
'unavailable' => (bool)($iSet->getField('cuFlags') & CUSTOM_UNAVAILABLE)
)
);
$iSet->addGlobalsToJscript($smarty, GLOBALINFO_SELF);
$iSet->addGlobalsToJscript($smarty);
// related sets (priority: 1: similar tag + class; 2: has event; 3: no tag + similar type, 4: similar type + profession)
$rel = [];
if ($ta && count($path) == 3)
if ($_ta && count($path) == 3)
{
$rel[] = ['id', $_id, '!'];
$rel[] = ['classMask', 1 << (end($path) - 1), '&'];
$rel[] = ['contentGroup', (int)$ta];
$rel[] = ['contentGroup', (int)$_ta];
}
else if ($ev)
else if ($_ev)
{
$rel[] = ['id', $_id, '!'];
$rel[] = ['holidayId', 0, '!'];
}
else if ($sk)
else if ($_sk)
{
$rel[] = ['id', $_id, '!'];
$rel[] = ['contentGroup', 0];
$rel[] = ['skillId', 0, '!'];
$rel[] = ['type', $ty];
$rel[] = ['type', $_ty];
}
else if (!$ta && $ty)
else if (!$_ta && $_ty)
{
$rel[] = ['id', $_id, '!'];
$rel[] = ['contentGroup', 0];
$rel[] = ['type', $ty];
$rel[] = ['type', $_ty];
$rel[] = ['skillId', 0];
}

View File

@@ -43,7 +43,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
if (!$recipes->error)
{
// 1 recipes [spells] (crafted)
$recipes->addGlobalsToJscript($smarty);
$recipes->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$pageData['relTabs'][] = array(
'file' => 'spell',
@@ -85,7 +85,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
// 3 crafted items [items]
$created = [];
foreach ($recipes->iterate() as $__)
if ($idx = $this->canCreateItem())
if ($idx = $recipes->canCreateItem())
foreach ($idx as $i)
$created[] = $recipes->getField('effect'.$i.'CreateItemId');

File diff suppressed because it is too large Load Diff

View File

@@ -103,6 +103,14 @@ if (!$smarty->loadCache($cacheKey, $pageData, $filter))
$visibleCols = [];
$hiddenCols = [];
$pageData = array(
'page' => [],
'data' => [],
'title' => '',
'path' => '',
'params' => []
);
switch($cats[0])
{
case -2: // Character Talents

View File

@@ -389,7 +389,7 @@ if ($searchMask & 0x80)
if ($data = $abilities->getListviewData())
{
$abilities->addGlobalsToJscript($smarty);
$abilities->addGlobalsToJscript($smarty, GLOBALINFO_SELF | GLOBALINFO_RELATED);
$vis = ['level', 'singleclass', 'schools'];
if ($abilities->hasSetFields(['reagent1']))
@@ -1096,7 +1096,7 @@ else /* if ($searchMask & SEARCH_TYPE_REGULAR) */
{
$_ = array_pop($found);
$type = Util::$typeStrings[$_['type']];
$typeId = key(array_pop($_));
$typeId = key($_['data']);
header("Location: ?".$type.'='.$typeId);
die();

View File

@@ -33,6 +33,9 @@
{if isset($curr.percent)}
percent:{$curr.percent},
{/if}
{if isset($curr.count)}
count:{$curr.count},
{/if}
{if isset($curr.cost)}
stock:{$curr.stock},
{if isset($curr.stack)}

View File

@@ -15,14 +15,11 @@
{foreach name=i from=$data item=curr}
{ldelim}
{foreach from=$curr key='name' item=val}
{if $name != 'id' && $name != 'name' && $name != 'heroic'}
{if $name != 'id' && $name != 'name'}
{$name}:{$val|@json_encode:$smarty.const.JSON_NUMERIC_CHECK},
{/if}
{/foreach}
name:'{$curr.name|escape:"quotes"}',
{if isset($curr.heroic)}
heroic:1,
{/if}
id:{$curr.id}
{rdelim}
{if $smarty.foreach.i.last}{else},{/if}

View File

@@ -14,75 +14,12 @@
data:[
{foreach name=i from=$data item=curr}
{ldelim}
name:'{$curr.quality}{$curr.name|escape:"javascript"}',
{if isset($curr.level)}level:{$curr.level},{/if}
school:{$curr.school},
cat:{$curr.cat},
{if isset($curr.rank)}
rank:'{$curr.rank|escape:"javascript"}',
{foreach from=$curr key='name' item=val}
{if $name != 'id' && $name != 'name' && $name != 'quality'}
{$name}:{$val|@json_encode:$smarty.const.JSON_NUMERIC_CHECK},
{/if}
{if isset($curr.type)}
type:'{$curr.type}',
{/if}
{if isset($curr.skill)}
skill:[
{section name=j loop=$curr.skill}
{$curr.skill[j]}
{if $smarty.section.j.last}{else},{/if}
{/section}
],
{/if}
{if isset($curr.reqclass)}
reqclass:{$curr.reqclass},
{/if}
{if isset($curr.reqrace)}
reqrace:{$curr.reqrace},
{/if}
{if isset($curr.glyphtype)}
glyphtype:{$curr.glyphtype},
{/if}
{if !empty($curr.source)}
source:{$curr.source},
{/if}
{if isset($curr.trainingcost)}
trainingcost:{$curr.trainingcost},
{/if}
{if !empty($curr.reagents)}
reagents:[
{foreach name=j from=$curr.reagents item=r}
[{$r[0]},{$r[1]}]
{if $smarty.foreach.j.last}{else},{/if}
{/foreach}
],
{/if}
{if isset($curr.creates)}
creates:[
{section name=j loop=$curr.creates}
{$curr.creates[j]}
{if $smarty.section.j.last}{else},{/if}
{/section}
],
{/if}
{if isset($curr.learnedat)}
learnedat:{$curr.learnedat},
{/if}
{if isset($curr.colors)}
colors:[
{section name=j loop=$curr.colors}
{$curr.colors[j]}
{if $smarty.section.j.last}{else},{/if}
{/section}
],
{/if}
{if isset($curr.percent)}
percent:{$curr.percent},
{/if}
{if isset($curr.stackRule)}
stackRule:{$curr.stackRule},
{/if}
{if isset($curr.linked)}
linked:{$curr.linked},
{/if}
name:'{$curr.quality}{$curr.name|escape:"javascript"}',
id:{$curr.id}
{rdelim}
{if $smarty.foreach.i.last}{else},{/if}

View File

@@ -26,7 +26,8 @@
{if isset($curr.reqlevel)},reqlevel:{$curr.reqlevel}{/if}
{if isset($curr.lfgReqLevel)},lfgReqLevel:{$curr.lfgReqLevel}{/if}
{if isset($curr.heroicLevel)},heroicLevel:{$curr.heroicLevel}{/if}
{* {if isset($curr.percent)},percent:{$curr.percent}{/if} what was that originaly for..? *}
{if isset($curr.percent)},percent:{$curr.percent}{/if}
{if isset($curr.count)},count:{$curr.count}{/if}
{rdelim}
{if $smarty.foreach.i.last}{else},{/if}
{/foreach}

View File

@@ -70,6 +70,7 @@
{if !empty($lvData.pageText)}
<div class="clear"></div>
<h3>{$lang.content}</h3>
<div id="book-generic"></div>
<script>//<![CDATA[
{strip}new Book({ldelim} parent: 'book-generic', pages: [

View File

@@ -171,10 +171,24 @@
{/foreach}
//]]></script>
{if isset($lvData.data[0].params)}
<div id="tabs-generic"></div>
{/if}
<div id="lv-generic" class="listview"></div>
<script type="text/javascript">//<![CDATA[
{if !empty($lvData.page.gemScores)}var fi_gemScores = {$lvData.page.gemScores};{/if}
{if isset($lvData.data[0].params)}
var tabsRelated = new Tabs({ldelim}parent: $WH.ge('tabs-generic'){rdelim});
{foreach from=$tabs item="tab"}
{if !empty($tab.data)}
{include file="bricks/listviews/item.tpl" data=$tab.data params=$tab.params}
{/if}
{/foreach}
tabsRelated.flush();
{else}
{include file='bricks/listviews/item.tpl' data=$lvData.data params=$lvData.params}
{/if}
//]]></script>
<div class="clear"></div>

View File

@@ -1018,11 +1018,9 @@ $WH.g_convertRatingToPercent = function(level, rating, value, classs) {
if (level < 0) {
level = 1;
}
else {
if (level > 80) {
else if (level > 80) {
level = 80;
}
}
// Patch 2.4.3: Defense Skill, Dodge Rating, Parry Rating, Block Rating
if ((rating == 14 || rating == 12 || rating == 15) && level < 34) {

View File

@@ -157,7 +157,7 @@ var fi_filters = {
{ id: 142, name: 'icon', type: 'str' },
{ id: 10, name: 'locked', type: 'yn' },
{ id: 159, name: 'millable', type: 'yn' },
{ id: 127, name: 'notavailable', type: 'yn' },
// { id: 127, name: 'notavailable', type: 'yn' }, redundant with 161
{ id: 85, name: 'objectivequest', type: 'side' },
{ id: 11, name: 'openable', type: 'yn' },
{ id: 12, name: 'partofset', type: 'yn' },

View File

@@ -991,9 +991,9 @@ var g_item_slots = {
};
var g_item_classes = {
0: 'Consommable',
0: 'Verbrauchbar',
1: 'Behälter',
2: 'Arme',
2: 'Waffe',
3: 'Edelstein',
4: 'Rüstung',
5: 'Reagenz',

View File

@@ -117,6 +117,12 @@
<th><dfn title="{$lang._globCD}">{$lang._gcd}</dfn></th>
<td>{$lvData.page.gcd}</td>
</tr>
{if !empty($lvData.page.scaling)}
<tr>
<th>{$lang._scaling}</th>
<td colspan="3">{$lvData.page.scaling}</td>
</tr>
{/if}
{if !empty($lvData.page.stances)}
<tr>
<th>{$lang._forms}</th>
@@ -140,6 +146,7 @@
{if isset($lvData.page.effect[i].radius)}<br>{$lang._radius}{$lang.colon}{$lvData.page.effect[i].radius} {$lang._distUnit}{/if}
{if isset($lvData.page.effect[i].interval)}<br>{$lang._interval}{$lang.colon}{$lvData.page.effect[i].interval}{/if}
{if isset($lvData.page.effect[i].mechanic)}<br>{$lang.mechanic}{$lang.colon}{$lvData.page.effect[i].mechanic}{/if}
{if isset($lvData.page.effect[i].procData)}<br>{if $lvData.page.effect[i].procData[0] < 0}{$lang.ppm|sprintf:$lvData.page.effect[i].procData[0]*-1}{else}{$lang.procChance}{$lang.colon}{$lvData.page.effect[i].procData[0]}%{/if}{if $lvData.page.effect[i].procData[1]} ({$lang.cooldown|sprintf:$lvData.page.effect[i].procData[1]}){/if}{/if}
</small>
{if isset($lvData.page.effect[i].icon)}
<table class="icontab">
@@ -148,7 +155,7 @@
{if isset($lvData.page.effect[i].icon.quality)}
<td><span class="q{$lvData.page.effect[i].icon.quality}"><a href="?item={$lvData.page.effect[i].icon.id}">{$lvData.page.effect[i].icon.name}</a></span></td>
{else}
<td><a href="?spell={$lvData.page.effect[i].icon.id}">{$lvData.page.effect[i].icon.name}</a></td>
<td>{if !$lvData.page.effect[i].icon.name|strpos:"#"}<a href="?spell={$lvData.page.effect[i].icon.id}">{/if}{$lvData.page.effect[i].icon.name}{if !$lvData.page.effect[i].icon.name|strpos:"#"}</a>{/if}</td>
{/if}
<th></th><td></td>
</tr>