Profiler/Gearscore

* implement gearscore calculation

im sad and i hate myself
This commit is contained in:
Sarjuuk
2018-03-22 15:13:12 +01:00
parent fbcf00e0fc
commit f25498d4d0
14 changed files with 342 additions and 35 deletions

View File

@@ -1110,7 +1110,7 @@ class ItemList extends BaseType
return $x; return $x;
} }
private function getRandEnchantForItem($randId) public function getRandEnchantForItem($randId)
{ {
// is it available for this item? .. does it even exist?! // is it available for this item? .. does it even exist?!
if (empty($this->enhanceR)) if (empty($this->enhanceR))
@@ -1245,7 +1245,7 @@ class ItemList extends BaseType
foreach ($this->json as $item => $json) foreach ($this->json as $item => $json)
foreach ($json as $k => $v) foreach ($json as $k => $v)
if (!$v && !in_array($k, ['classs', 'subclass', 'quality', 'side'])) if (!$v && !in_array($k, ['classs', 'subclass', 'quality', 'side', 'gearscore']))
unset($this->json[$item][$k]); unset($this->json[$item][$k]);
} }
@@ -1554,6 +1554,34 @@ class ItemList extends BaseType
} }
} }
public function getScoreTotal($class = 0, $spec = [], $mhItem = 0, $ohItem = 0)
{
if (!$class || !$spec)
return array_sum(array_column($this->json, 'gearscore'));
$score = 0.0;
$mh = $oh = [];
foreach ($this->json as $j)
{
if ($j['id'] == $mhItem)
$mh = $j;
else if ($j['id'] == $ohItem)
$oh = $j;
else if ($j['gearscore'])
{
if ($j['slot'] == INVTYPE_RELIC)
$score += 20;
$score += round($j['gearscore']);
}
}
$score += array_sum(Util::fixWeaponScores($class, $spec, $mh, $oh));
return $score;
}
private function initJsonStats() private function initJsonStats()
{ {
$json = array( $json = array(
@@ -1622,9 +1650,14 @@ class ItemList extends BaseType
if ($this->curTpl['armorDamageModifier'] > 0) if ($this->curTpl['armorDamageModifier'] > 0)
$json['armor'] -= $this->curTpl['armorDamageModifier']; $json['armor'] -= $this->curTpl['armorDamageModifier'];
if ($this->curTpl['class'] == ITEM_CLASS_ARMOR || $this->curTpl['class'] == ITEM_CLASS_WEAPON)
$json['gearscore'] = Util::getEquipmentScore($json['level'], $this->getField('quality'), $json['slot'], $json['nsockets']);
else if ($this->curTpl['class'] == ITEM_CLASS_GEM)
$json['gearscore'] = Util::getGemScore($json['level'], $this->getField('quality'), $this->getField('requiredSkill') == 755, $this->id);
// clear zero-values afterwards // clear zero-values afterwards
foreach ($json as $k => $v) foreach ($json as $k => $v)
if (!$v && !in_array($k, ['classs', 'subclass', 'quality', 'side'])) if (!$v && !in_array($k, ['classs', 'subclass', 'quality', 'side', 'gearscore']))
unset($json[$k]); unset($json[$k]);
Util::checkNumeric($json); Util::checkNumeric($json);

View File

@@ -211,7 +211,7 @@ class SpellList extends BaseType
} }
// full magic mask, also counts towards healing // full magic mask, also counts towards healing
if ($mv == 0x7E) if ($mv == SPELL_MAGIC_SCHOOLS)
{ {
Util::arraySumByKey($stats, [ITEM_MOD_SPELL_POWER => $pts]); Util::arraySumByKey($stats, [ITEM_MOD_SPELL_POWER => $pts]);
Util::arraySumByKey($stats, [ITEM_MOD_SPELL_DAMAGE_DONE => $pts]); Util::arraySumByKey($stats, [ITEM_MOD_SPELL_DAMAGE_DONE => $pts]);
@@ -250,8 +250,10 @@ class SpellList extends BaseType
case 35: // ModPower - MiscVal:type see defined Powers only energy/mana in use case 35: // ModPower - MiscVal:type see defined Powers only energy/mana in use
if ($mv == POWER_HEALTH) if ($mv == POWER_HEALTH)
Util::arraySumByKey($stats, [ITEM_MOD_HEALTH => $pts]); Util::arraySumByKey($stats, [ITEM_MOD_HEALTH => $pts]);
if ($mv == POWER_ENERGY) else if ($mv == POWER_ENERGY)
Util::arraySumByKey($stats, [ITEM_MOD_ENERGY => $pts]); Util::arraySumByKey($stats, [ITEM_MOD_ENERGY => $pts]);
else if ($mv == POWER_RAGE)
Util::arraySumByKey($stats, [ITEM_MOD_RAGE => $pts]);
else if ($mv == POWER_MANA) else if ($mv == POWER_MANA)
Util::arraySumByKey($stats, [ITEM_MOD_MANA => $pts]); Util::arraySumByKey($stats, [ITEM_MOD_MANA => $pts]);
else if ($mv == POWER_RUNIC_POWER) else if ($mv == POWER_RUNIC_POWER)
@@ -625,24 +627,25 @@ class SpellList extends BaseType
$add = $ref->getField('effect'.$effIdx.'DieSides'); $add = $ref->getField('effect'.$effIdx.'DieSides');
$maxLvl = $ref->getField('maxLevel'); $maxLvl = $ref->getField('maxLevel');
$baseLvl = $ref->getField('baseLevel'); $baseLvl = $ref->getField('baseLevel');
$scaling = $this->curTpl['attributes1'] & 0x200; // never a referenced spell, ALWAYS $this; SPELL_ATTR1_MELEE_COMBAT_SPELL: 0x200
if ($scaling) if ($rppl)
{ {
if ($level > $maxLvl && $maxLvl > 0) if ($level > $maxLvl && $maxLvl > 0)
$level = $maxLvl; $level = $maxLvl;
else if ($level < $baseLvl) else if ($level < $baseLvl)
$level = $baseLvl; $level = $baseLvl;
$level -= $ref->getField('spellLevel'); if (!$ref->getField('atributes0') & 0x40) // SPELL_ATTR0_PASSIVE
$level -= $ref->getField('spellLevel');
$base += (int)($level * $rppl); $base += (int)($level * $rppl);
} }
return [ return [
$add ? $base + 1 : $base, $add ? $base + 1 : $base,
$base + $add, $base + $add,
$scaling ? '<!--ppl'.$baseLvl.':'.$maxLvl.':'.($base + max(1, $add)).':'.$rppl.'-->' : null, $rppl ? '<!--ppl'.$baseLvl.':'.$maxLvl.':'.($base + max(1, $add)).':'.$rppl.'-->' : null,
$scaling ? '<!--ppl'.$baseLvl.':'.$maxLvl.':'.($base + $add).':'.$rppl.'-->' : null $rppl ? '<!--ppl'.$baseLvl.':'.$maxLvl.':'.($base + $add).':'.$rppl.'-->' : null
]; ];
} }
@@ -1025,7 +1028,6 @@ class SpellList extends BaseType
$min *= $duration / $periode; $min *= $duration / $periode;
$max *= $duration / $periode; $max *= $duration / $periode;
$equal = $min == $max;
if (in_array($op, $signs) && is_numeric($oparg)) if (in_array($op, $signs) && is_numeric($oparg))
{ {
@@ -1066,8 +1068,6 @@ class SpellList extends BaseType
$mv = $srcSpell->getField('effect'.$effIdx.'MiscValue'); $mv = $srcSpell->getField('effect'.$effIdx.'MiscValue');
$aura = $srcSpell->getField('effect'.$effIdx.'AuraId'); $aura = $srcSpell->getField('effect'.$effIdx.'AuraId');
$equal = $min == $max;
if (in_array($op, $signs) && is_numeric($oparg)) if (in_array($op, $signs) && is_numeric($oparg))
{ {
eval("\$min = $min $op $oparg;"); eval("\$min = $min $op $oparg;");
@@ -1138,6 +1138,8 @@ class SpellList extends BaseType
// handle excessively precise floats // handle excessively precise floats
if (is_float($result[0])) if (is_float($result[0]))
$result[0] = round($result[0], 2); $result[0] = round($result[0], 2);
if (isset($result[1]) && is_float($result[1]))
$result[1] = round($result[1], 2);
return $result; return $result;
} }

View File

@@ -20,6 +20,11 @@ class Util
{ {
const FILE_ACCESS = 0777; const FILE_ACCESS = 0777;
const GEM_SCORE_BASE_WOTLK = 16; // rare quality wotlk gem score
const GEM_SCORE_BASE_BC = 8; // rare quality bc gem score
private static $perfectGems = null;
public static $localeStrings = array( // zero-indexed public static $localeStrings = array( // zero-indexed
'enus', null, 'frfr', 'dede', null, null, 'eses', null, 'ruru' 'enus', null, 'frfr', 'dede', null, null, 'eses', null, 'ruru'
); );
@@ -945,6 +950,217 @@ class Util
return self::$realms; return self::$realms;
} }
/**************/
/* Good Skill */
/**************/
public static function getEquipmentScore($itemLevel, $quality, $slot, $nSockets = 0)
{
$score = $itemLevel;
// quality mod
switch ($quality)
{
case ITEM_QUALITY_POOR:
$score = 0; // guessed as crap
break;
case ITEM_QUALITY_NORMAL:
$score = 0; // guessed as crap
break;
case ITEM_QUALITY_UNCOMMON:
$score /= 2.0;
break;
case ITEM_QUALITY_RARE:
$score /= 1.8;
break;
case ITEM_QUALITY_EPIC:
$score /= 1.2;
break;
case ITEM_QUALITY_LEGENDARY:
$score /= 1;
break;
case ITEM_QUALITY_HEIRLOOM: // actual calculation in javascript .. still uses this as some sort of factor..?
break;
case ITEM_QUALITY_ARTIFACT:
break;
}
switch ($slot)
{
case INVTYPE_WEAPON:
case INVTYPE_WEAPONMAINHAND:
case INVTYPE_WEAPONOFFHAND:
$score *= 27/64;
break;
case INVTYPE_SHIELD:
case INVTYPE_HOLDABLE:
$score *= 9/16;
break;
case INVTYPE_HEAD:
case INVTYPE_CHEST:
case INVTYPE_LEGS:
case INVTYPE_2HWEAPON:
$score *= 1.0;
break;
case INVTYPE_SHOULDERS:
case INVTYPE_HANDS:
case INVTYPE_WAIST:
case INVTYPE_FEET:
$score *= 3/4;
break;
case INVTYPE_WRISTS:
case INVTYPE_NECK:
case INVTYPE_CLOAK:
case INVTYPE_FINGER:
case INVTYPE_TRINKET:
$score *= 9/16;
break;
case INVTYPE_THROWN:
case INVTYPE_RANGED:
case INVTYPE_RELIC:
$score *= 81/256;
break;
default:
$score *= 0.0;
}
// subtract sockets
if ($nSockets)
{
// items by expantion overlap in this range. luckily highlevel raid items are exclusivly epic or better
if ($itemLevel > 164 || ($itemLevel > 134 && $quality < ITEM_QUALITY_EPIC))
$score -= $nSockets * self::GEM_SCORE_BASE_WOTLK;
else
$score -= $nSockets * self::GEM_SCORE_BASE_BC;
}
return round(max(0.0, $score), 4);
}
public static function getGemScore($itemLevel, $quality, $profSpec = false, $itemId = 0)
{
// prepare score-lookup
if (empty(self::$perfectGems))
self::$perfectGems = DB::World()->selectCol('SELECT perfectItemType FROM skill_perfect_item_template WHERE requiredSpecialization = ?d', 55534);
// epic - WotLK - increased stats / profession specific (Dragon's Eyes)
if ($profSpec)
return 32.0;
// epic - WotLK - base stats
if ($itemLevel == 80 && $quality == ITEM_QUALITY_EPIC)
return 20.0;
// rare - WotLK [GEM BASELINE!]
if ($itemLevel == 80 && $quality == ITEM_QUALITY_RARE)
return 16.0;
// uncommon - WotLK - inreased stats
if ($itemId > 0 && in_array($itemId, self::$perfectGems))
return 14.0;
// uncommon - WotLK - base stats
if ($itemLevel == 70 && $quality == ITEM_QUALITY_UNCOMMON)
return 12.0;
// epic - BC - vendored (PvP)
if ($itemLevel == 60 && $quality == ITEM_QUALITY_EPIC)
return 10.0;
// epic - BC - dropped / crafted
if ($itemLevel == 70 && $quality == ITEM_QUALITY_EPIC)
return 9.0;
// rare - BC - crafted
if ($itemLevel == 70 && $quality == ITEM_QUALITY_RARE)
return 8.0;
// rare - BC - vendored (pvp)
if ($itemLevel == 60 && $quality == ITEM_QUALITY_RARE)
return 7.0;
// uncommon - BC
if ($itemLevel == 60 && $quality == ITEM_QUALITY_UNCOMMON)
return 6.0;
// common - BC - vendored gems
if ($itemLevel == 55 && $quality == ITEM_QUALITY_COMMON)
return 4.0;
// dafuq..?
return 0.0;
}
public static function getEnchantmentScore($itemLevel, $quality, $profSpec = false, $idOverride = 0)
{
// some hardcoded values, that defy lookups (cheaper but not skillbound profession versions of spell threads, leg armor)
if (in_array($idOverride, [3327, 3328, 3872, 3873]))
return 20.0;
if ($profSpec)
return 40.0;
// other than the constraints (0 - 20 points; 40 for profession perks), everything in here is guesswork
$score = max(min($itemLevel, 80), 0);
switch ($quality)
{
case ITEM_QUALITY_HEIRLOOM: // because i say so!
$score = 80.0;
break;
case ITEM_QUALITY_RARE:
$score /= 1.2;
break;
case ITEM_QUALITY_UNCOMMON:
$score /= 1.6;
break;
case ITEM_QUALITY_NORMAL:
$score /= 2.5;
break;
}
return round(max(0.0, $score / 4), 4);
}
public static function fixWeaponScores($class, $talents, $mainHand, $offHand)
{
$mh = 1;
$oh = 1;
if ($mainHand) { // Main Hand Equipped
if ($offHand) { // Off Hand Equipped
if ($mainHand['slotbak'] == 21 || $mainHand['slotbak'] == 13) { // Main Hand, One Hand
if ($offHand['slotbak'] == 22 || $offHand['slotbak'] == 13) { // Off Hand, One Hand
if ($class == 6 || $class == 3 || $class == 4 || // Death Knight, Hunter, Rogue
($class == 7 && $talents['spent'][1] > 30 && $talents['spec'] == 2) || // Enhancement Shaman Over 39
($class == 1 && $talents['spent'][1] < 51 && $talents['spec'] == 2)) // Fury Warrior Under 60
{
$mh = 64 / 27;
$oh = 64 / 27;
}
}
else if ($offHand['slotbak'] == 23 || $offHand['slotbak'] == 14) { // Held in Off Hand, Shield
if ($class == 5 || $class == 9 || $class == 8 || // Priest, Warlock, Mage
($class == 11 && ($talents['spec'] == 1 || $talents['spec'] == 3)) || // Balance Druid, Restoration Druid
($class == 7 && ($talents['spec'] == 1 || $talents['spec'] == 3)) || // Elemental Shaman, Restoration Shaman
($class == 2 && ($talents['spec'] == 1 || $talents['spec'] == 2)) || // Holy Paladin, Protection Paladin
($class == 1 && $talents['spec'] == 3)) // Protection Warrior
{
$mh = 64 / 27;
$oh = 16 / 9;
}
}
}
}
else if ($mainHand['slotbak'] == 17) { // Two Handed
if ($class == 5 || $class == 9 || $class == 8 || // Priest, Warlock, Mage
$class == 11 || $class == 3 || $class == 6 || // Druid, Hunter, Death Knight
($class == 7 && $talents['spent'][1] < 31 && $talents['spec'] == 2) || // Enhancement Shaman Under 40
($class == 2 && $talents['spec'] == 3) || // Retribution Paladin
($class == 1 && $talents['spec'] == 1)) // Arms Warrior
{
$mh = 2;
$oh = 0;
}
}
}
return array(
round($mainHand['gearscore'] * $mh),
round($offHand['gearscore'] * $oh)
);
}
} }
?> ?>

View File

@@ -49,7 +49,7 @@ if (!CLI)
jsonequip:{reqlevel:60,"exprtng":15}, jsonequip:{reqlevel:60,"exprtng":15},
temp:0, temp:0,
classes:0, classes:0,
gearscore:20 // nope, i'm not doing this gearscore:20 // fuck, i'm doing this..
}, },
*/ */
@@ -91,6 +91,8 @@ if (!CLI)
return false; return false;
} }
$castItems = new ItemList(array(['spellId1', array_keys($enchantSpells)], ['src.typeId', null, '!'], CFG_SQL_LIMIT_NONE));
foreach (CLISetup::$localeIds as $lId) foreach (CLISetup::$localeIds as $lId)
{ {
User::useLocale($lId); User::useLocale($lId);
@@ -134,7 +136,6 @@ if (!CLI)
} }
} }
// defaults // defaults
$ench = array( $ench = array(
'name' => [], // set by skill or item 'name' => [], // set by skill or item
@@ -147,6 +148,7 @@ if (!CLI)
'jsonequip' => $enchantments->getStatGain(), 'jsonequip' => $enchantments->getStatGain(),
'temp' => 0, // always 0 'temp' => 0, // always 0
'classes' => 0, // modified by item 'classes' => 0, // modified by item
'gearscore' => 0 // set later
); );
if ($_ = $enchantments->getField('skillLine')) if ($_ = $enchantments->getField('skillLine'))
@@ -169,12 +171,21 @@ if (!CLI)
// check if this spell can be cast via item -> Source:Item // check if this spell can be cast via item -> Source:Item
// do not reuse enchantment scrolls; do not use items without source // do not reuse enchantment scrolls; do not use items without source
if (!isset($castItems[$esId])) $cI = &$castItems; // this construct is a bit .. unwieldy
$castItems[$esId] = new ItemList([['spellId1', $esId], ['name_loc0', 'Scroll of Enchant%', '!'], ['src.typeId', null, '!']]);
$cI = &$castItems[$esId]; // this construct is a bit .. unwieldy
foreach ($cI->iterate() as $__) foreach ($cI->iterate() as $__)
{ {
if ($cI->getField('spellId1') != $esId)
continue;
$isScroll = substr($cI->getField('name_loc0'), 0, 17) == 'Scroll of Enchant';
if ($s = Util::getEnchantmentScore($cI->getField('itemLevel'), $isScroll ? -1 : $cI->getField('quality'), !!$enchantments->getField('skillLevel'), $eId))
if ($s > $ench['gearscore'])
$ench['gearscore'] = $s;
if ($isScroll)
continue;
$ench['name'][] = $cI->getField('name', true); $ench['name'][] = $cI->getField('name', true);
$ench['source'][] = -$cI->id; $ench['source'][] = -$cI->id;
$ench['icon'] = strTolower($cI->getField('iconString')); $ench['icon'] = strTolower($cI->getField('iconString'));

View File

@@ -20,7 +20,7 @@ if (!CLI)
jsonequip:{"arcres":3,"avgbuyout":242980,"firres":3,"frores":3,"holres":3,"natres":3,"shares":3}, jsonequip:{"arcres":3,"avgbuyout":242980,"firres":3,"frores":3,"holres":3,"natres":3,"shares":3},
colors:14, colors:14,
expansion:1 expansion:1
gearscore:8 // as if..... gearscore:8 // if only..
}, },
*/ */
@@ -35,14 +35,15 @@ if (!CLI)
i.quality, i.quality,
ic.name AS icon, ic.name AS icon,
i.gemEnchantmentId AS enchId, i.gemEnchantmentId AS enchId,
i.gemColorMask AS colors i.gemColorMask AS colors,
i.requiredSkill,
i.itemLevel
FROM ?_items i FROM ?_items i
JOIN ?_icons ic ON ic.id = i.iconId JOIN ?_icons ic ON ic.id = i.iconId
WHERE i.gemEnchantmentId <> 0 WHERE i.gemEnchantmentId <> 0
ORDER BY i.id DESC'); ORDER BY i.id DESC');
$success = true; $success = true;
// check directory-structure // check directory-structure
foreach (Util::$localeStrings as $dir) foreach (Util::$localeStrings as $dir)
if (!CLISetup::writeDir('datasets/'.$dir)) if (!CLISetup::writeDir('datasets/'.$dir))
@@ -83,7 +84,8 @@ if (!CLI)
'enchantment' => $enchantments->getField('name', true), 'enchantment' => $enchantments->getField('name', true),
'jsonequip' => $enchantments->getStatGain(), 'jsonequip' => $enchantments->getStatGain(),
'colors' => $pop['colors'], 'colors' => $pop['colors'],
'expansion' => $pop['expansion'] 'expansion' => $pop['expansion'],
'gearscore' => Util::getGemScore($pop['itemLevel'], $pop['quality'], $pop['requiredSkill'] == 755, $pop['itemId'])
); );
} }

View File

@@ -155,7 +155,9 @@ function Summary(opt) {
} }
} }
this.initialize(); // aowow - data=item-scaling load is delayed from basic.js but required for heirlooms
// this.initialize();
setTimeout(this.initialize.bind(this), 250);
} }
Summary.prototype = { Summary.prototype = {

View File

@@ -1331,7 +1331,7 @@ $WH.g_setJsonItemLevel = function (json, level) {
json.dmgmin = json[damageType + "dmgmin"] = Math.floor(json.dps * json.speed * (1 - damageRange)); json.dmgmin = json[damageType + "dmgmin"] = Math.floor(json.dps * json.speed * (1 - damageRange));
json.dmgmax = json[damageType + "dmgmax"] = Math.floor(json.dps * json.speed * (1 + damageRange)) json.dmgmax = json[damageType + "dmgmax"] = Math.floor(json.dps * json.speed * (1 + damageRange))
if (json.feratkpwr) { // yes thats custom.. if (json.feratkpwr) { // aowow - yes thats custom..
json.feratkpwr = Math.max(0, Math.floor((json.dps - 54.8) * 14)); json.feratkpwr = Math.max(0, Math.floor((json.dps - 54.8) * 14));
} }
} }
@@ -1340,6 +1340,24 @@ $WH.g_setJsonItemLevel = function (json, level) {
if (splPwrColumn >= 0) { if (splPwrColumn >= 0) {
json.splpwr = json.bonuses[45] = $WH.g_convertScalingFactor(level, splPwrColumn); json.splpwr = json.bonuses[45] = $WH.g_convertScalingFactor(level, splPwrColumn);
} }
// Update the gearscore (profiler usage)
if (json.gearscore != null)
{
if (json._gearscore == null)
json._gearscore = json.gearscore;
var equivLevel = Math.min(80, level + 1);
if(equivLevel >= 70)
n = ((equivLevel - 70) * 9.5) + 105;
else if(equivLevel >= 60)
n = ((equivLevel - 60) * 4.5) + 60;
else
n = equivLevel + 5;
json.gearscore = (json._gearscore * n) / 1.8;
}
}; };
$WH.g_setTooltipLevel = function(tooltip, level) { $WH.g_setTooltipLevel = function(tooltip, level) {

View File

@@ -15689,6 +15689,24 @@ Listview.templates = {
}, },
hidden: 1 hidden: 1
}, },
{
id: 'gearscore',
name: LANG.gearscore,
tooltip: LANG.gearscore_real,
value: 'gearscore',
compute: function(profile, td)
{
var level = (profile.level ? profile.level : (profile.members !== undefined ? 80 : 0));
if (isNaN(profile.gearscore) || !level)
return;
td.className = 'q' + pr_getGearScoreQuality(level, profile.gearscore, ($WH.in_array([2, 6, 7, 11], profile.classs) != -1));
return (profile.gearscore ? $WH.number_format(profile.gearscore) : 0);
},
hidden: 1
},
{ {
id: 'achievementpoints', id: 'achievementpoints',
name: LANG.points, name: LANG.points,
@@ -17487,14 +17505,14 @@ var Icon = {
sizes: ['small', 'medium', 'large'], sizes: ['small', 'medium', 'large'],
sizes2: [18, 36, 56], sizes2: [18, 36, 56],
premiumOffsets: [[-56, -36], [-56, 0], [0, 0]], premiumOffsets: [[-56, -36], [-56, 0], [0, 0]],
premiumBorderClasses: ['-premium', '-gold', '', '-premiumred', '-red'], premiumBorderClasses: ['-premium', '-gold', '', '-premiumred', '-red'],
STANDARD_BORDER: 2, STANDARD_BORDER: 2,
privilegeBorderClasses: { privilegeBorderClasses: {
uncommon: '-q2', uncommon: '-q2',
rare: '-q3', rare: '-q3',
epic: '-q4', epic: '-q4',
legendary: '-q5' legendary: '-q5'
}, },
create: function(name, size, UNUSED, url, num, qty, noBorder, rel) { create: function(name, size, UNUSED, url, num, qty, noBorder, rel) {
var var
icon = $WH.ce('div'), icon = $WH.ce('div'),

View File

@@ -16,7 +16,7 @@ $(document).ready(function () {
$('.home-featuredbox-links a').hover( $('.home-featuredbox-links a').hover(
function () { $(this).next('var').addClass('active') }, function () { $(this).next('var').addClass('active') },
function () { $(this).next('var').removeClass('active') } function () { $(this).next('var').removeClass('active') }
).click(function () { g_trackEvent('Featured Box', 'Click', this.title) } ).click(function () { g_trackEvent('Featured Box', 'Click', this.title) }
).each( function () { g_trackEvent('Featured Box', 'Impression', this.title) } ).each( function () { g_trackEvent('Featured Box', 'Impression', this.title) }
) )
}); });

View File

@@ -2454,6 +2454,7 @@ var LANG = {
gender: "Geschlecht", gender: "Geschlecht",
gems: "Edelsteine", gems: "Edelsteine",
gearscore: "Ausrüstung", gearscore: "Ausrüstung",
gearscore_real: "Ausrüstungswertung",
glyphtype: "Glyphenart", glyphtype: "Glyphenart",
group: "Gruppe", group: "Gruppe",
guild: "Gilde", guild: "Gilde",

View File

@@ -2501,6 +2501,7 @@ var LANG = {
gender: "Gender", gender: "Gender",
gems: "Gems", gems: "Gems",
gearscore: "Gear", gearscore: "Gear",
gearscore_real: "Gear score",
glyphtype: "Glyph type", glyphtype: "Glyph type",
group: "Group", group: "Group",
guild: "Guild", guild: "Guild",

View File

@@ -2455,6 +2455,7 @@ var LANG = {
gender: "Género", gender: "Género",
gems: "Gemas", gems: "Gemas",
gearscore: "Equipo", gearscore: "Equipo",
gearscore_real: "Puntuación de equipo",
glyphtype: "Tipo de glifo", glyphtype: "Tipo de glifo",
group: "Grupo", group: "Grupo",
guild: "Hermandad", guild: "Hermandad",

View File

@@ -2444,6 +2444,7 @@ var LANG = {
gender: "Genre", gender: "Genre",
gems: "Gemmes", gems: "Gemmes",
gearscore: "Équipement", gearscore: "Équipement",
gearscore_real: "Score d'équipement",
glyphtype: "Type de glyphe", glyphtype: "Type de glyphe",
group: "Groupe", group: "Groupe",
guild: "Guilde", guild: "Guilde",

View File

@@ -2444,6 +2444,7 @@ var LANG = {
gender: "Пол", gender: "Пол",
gems: "Самоцветы", gems: "Самоцветы",
gearscore: "Экипировка", gearscore: "Экипировка",
gearscore_real: "Очки экипировки",
glyphtype: "Тип символа", glyphtype: "Тип символа",
group: "Группа", group: "Группа",
guild: "Гильдия", guild: "Гильдия",