loadCache($cacheKeyTooltip, $x))
{
$spell = new SpellList(array(['s.id', $id]));
if ($spell->error)
die('$WowheadPower.registerSpell('.$id.', '.User::$localeId.', {});');
$x = '$WowheadPower.registerSpell('.$id.', '.User::$localeId.", {\n";
$pt = [];
if ($n = $spell->getField('name', true))
$pt[] = "\tname_".User::$localeString.": '".Util::jsEscape($n)."'";
if ($i = $spell->getField('iconString'))
$pt[] = "\ticon: '".Util::jsEscape($i)."'";
if ($t = $spell->renderTooltip($id))
$pt[] = "\ttooltip_".User::$localeString.": '".Util::jsEscape($t)."'";
if ($b = $spell->renderBuff($id))
$pt[] = "\tbuff_".User::$localeString.": '".Util::jsEscape($b)."'";
$x .= implode(",\n", $pt)."\n});";
$smarty->saveCache($cacheKeyTooltip, $x);
}
die($x);
}
if (!$smarty->loadCache($cacheKeyPage, $pageData))
{
$spell = new SpellList(array(['s.id', $id]));
if ($spell->error)
$smarty->notFound(Lang::$game['spell']);
$cat = $spell->getField('typeCat');
$pageData['path'] = [0, 1, $cat];
// reconstruct path / title
switch($cat)
{
case -2:
case 7:
case -13:
$cl = $spell->getField('reqClassMask');
$i = 1;
while ($cl > 0)
{
if ($cl & (1 << ($i - 1)))
{
$pageData['path'][] = $i;
break;
}
$i++;
}
if ($cat == -13)
{
$pageData['path'][] = ($spell->getField('cuFlags') & (SPELL_CU_GLYPH_MAJOR | SPELL_CU_GLYPH_MINOR)) >> 6;
break;
}
case 9:
case -3:
case 11:
$pageData['path'][] = $spell->getField('skillLines')[0];
if ($cat == 11)
if ($_ = $spell->getField('reqSpellId'))
$pageData['path'][] = $_;
break;
case -11:
foreach (SpellList::$skillLines as $line => $skills)
if (in_array($spell->getField('skillLines')[0], $skills))
$pageData['path'][] = $line;
break;
case -7: // only spells unique in skillLineAbility will always point to the right skillLine :/
$_ = $spell->getField('cuFlags');
if ($_ & SPELL_CU_PET_TALENT_TYPE0)
$pageData['path'][] = 411; // Ferocity
else if ($_ & SPELL_CU_PET_TALENT_TYPE1)
$pageData['path'][] = 409; // Tenacity
else if ($_ & SPELL_CU_PET_TALENT_TYPE2)
$pageData['path'][] = 410; // Cunning
}
$spellArr = $pageData['page'] = $spell->getDetailPageData();
// description
$pageData['page']['info'] = $spell->renderTooltip(MAX_LEVEL, true);
// buff
$pageData['page']['buff'] = $spell->renderBuff(MAX_LEVEL, true);
// infobox
$parts = [];
if (!in_array($cat, [-5, -6])) // not mount or vanity pet
{
if ($_ = $spell->getField('talentLevel')) // level
$parts[] = '[li]'.(in_array($cat, [-2, 7, -13]) ? sprintf(Lang::$game['reqLevel'], $_) : Lang::$game['level'].Lang::$colon.$_).'[/li]';
else if ($_ = $spell->getField('spellLevel'))
$parts[] = '[li]'.(in_array($cat, [-2, 7, -13]) ? sprintf(Lang::$game['reqLevel'], $_) : Lang::$game['level'].Lang::$colon.$_).'[/li]';
}
if ($mask = $spell->getField('reqRaceMask')) // race
{
$bar = [];
for ($i = 0; $i < 11; $i++)
if ($mask & (1 << $i))
$bar[] = (!fMod(count($bar) + 1, 3) ? '\n' : null) . '[race='.($i + 1).']';
$t = count($bar) == 1 ? Lang::$game['race'] : Lang::$game['races'];
$parts[] = '[li]'.Util::ucFirst($t).Lang::$colon.implode(', ', $bar).'[/li]';
}
if ($mask = $spell->getField('reqClassMask')) // class
{
$bar = [];
for ($i = 0; $i < 11; $i++)
if ($mask & (1 << $i))
$bar[] = (!fMod(count($bar) + 1, 3) ? '\n' : null) . '[class='.($i + 1).']';
$t = count($bar) == 1 ? Lang::$game['class'] : Lang::$game['classes'];
$parts[] = '[li]'.Util::ucFirst($t).Lang::$colon.implode(', ', $bar).'[/li]';
}
if ($_ = $spell->getField('spellFocusObject')) // spellFocus
{
$bar = DB::Aowow()->selectRow('SELECT * FROM ?_spellFocusObject WHERE id = ?d', $_);
$parts[] = '[li]'.Lang::$game['requires2'].' '.Util::localizedString($bar, 'name').'[/li]';
}
if (in_array($cat, [9, 11])) // primary & secondary trades
{
// skill
$bar = SkillList::getName($spell->getField('skillLines')[0]);
if ($_ = $spell->getField('learnedAt'))
$bar .= ' ('.$_.')';
$parts[] = '[li]'.sprintf(Lang::$game['requires'], $bar).'[/li]';
// specialization
if ($_ = $spell->getField('reqSpellId'))
$parts[] = '[li]'.Lang::$game['requires2'].' '.SpellList::getName($_).'[/li]';
// difficulty
if ($_ = $spell->getColorsForCurrent())
{
$bar = [];
for ($i = 0; $i < 4; $i++)
if ($_[$i])
$bar[] = '[color=r'.($i + 1).']'.$_[$i].'[/color]';
$parts[] = '[li]'.Lang::$game['difficulty'].Lang::$colon.implode(' ', $bar).'[/li]';
}
}
// flag starter spell
if (isset($spell->sources[$spell->id]) && array_key_exists(10, $spell->sources[$spell->id]))
$parts[] = '[li]'.Lang::$spell['starter'].'[/li]';
// training cost
if ($cost = DB::Aowow()->selectCell('SELECT spellcost FROM npc_trainer WHERE spell = ?d', $spell->id))
$parts[] = '[li]'.Lang::$spell['trainingCost'].Lang::$colon.'[money='.$cost.'][/li]';
$pageData['infobox'] = $parts ? '[ul]'.implode('', $parts).'[/ul]' : null;
// title
$pageData['title'] = [$spell->getField('name', true), Util::ucFirst(Lang::$game['spell'])];
// js-globals
$spell->addGlobalsToJScript($pageData);
// prepare Tools
foreach ($pageData['page']['tools'] as $k => $tool)
{
if (isset($tool['itemId'])) // Tool
$pageData['page']['tools'][$k]['url'] = '?item='.$tool;
else // ToolCat
{
$pageData['page']['tools'][$k]['quality'] = ITEM_QUALITY_HEIRLOOM - ITEM_QUALITY_NORMAL;
$pageData['page']['tools'][$k]['url'] = '?items&filter=cr=91;crs='.$tool['id'].';crv=0';
}
}
// prepare Reagents
if ($pageData['page']['reagents'])
{
$_ = $pageData['page']['reagents'];
$pageData['page']['reagents'] = [];
while (!empty($_))
{
$spell->relItems->iterate();
if (!in_array($spell->relItems->id, array_keys($_)))
continue;
$pageData['page']['reagents'][] = array(
'name' => $spell->relItems->getField('name', true),
'quality' => $spell->relItems->getField('Quality'),
'entry' => $spell->relItems->id,
'count' => $_[$spell->relItems->id],
);
unset($_[$spell->relItems->id]);
}
}
// Iterate through all effects:
$pageData['page']['effect'] = [];
$spell->reset();
for ($i = 1; $i < 4; $i++)
{
if ($spell->getField('effect'.$i.'Id') <= 0)
continue;
$effId = (int)$spell->getField('effect'.$i.'Id');
$effMV = (int)$spell->getField('effect'.$i.'MiscValue');
$effBP = (int)$spell->getField('effect'.$i.'BasePoints');
$effDS = (int)$spell->getField('effect'.$i.'DieSides');
$effAura = (int)$spell->getField('effect'.$i.'AuraId');
$foo = &$pageData['page']['effect'][];
// Icons:
// .. from item
if (in_array($effId, [24, 34, 59, 66]) || in_array($effAura, [86])) // 24: createItem; 34: changeItem; 59: randomItem; 86: Channel Death Item
{
while ($spell->relItems->id != $spell->getField('effect'.$i.'CreateItemId'))
$spell->relItems->iterate();
$foo['icon'] = array(
'id' => $spell->relItems->id,
'name' => $spell->relItems->getField('name', true),
'quality' => $spell->relItems->getField('Quality'),
'count' => $effDS + $effBP,
'icon' => $spell->relItems->getField('icon')
);
if ($effDS > 1)
$foo['icon']['count'] = "'".($effBP + 1).'-'.$foo['icon']['count']."'";
}
// .. from spell
else if (($_ = $spell->getField('effect'.$i.'TriggerSpell')) && $_ > 0)
{
$trig = new SpellList(array(['s.id', (int)$_]));
$foo['icon'] = array(
'id' => $_,
'name' => $trig->getField('name', true),
'icon' => $trig->getField('iconString'),
'count' => 0
);
$trig->addGlobalsToJScript($pageData);
}
// Effect Name
$foo['name'] = '('.$effId.') '.Util::$spellEffectStrings[$effId];
if ($spell->getField('effect'.$i.'RadiusMax') > 0)
$foo['radius'] = $spell->getField('effect'.$i.'RadiusMax');
if (($effBP + $effDS) && !$spell->getField('effect'.$i.'CreateItemId') && (!$spell->getField('effect'.$i.'TriggerSpell') || in_array($effAura, [225, 227])))
$foo['value'] = ($effDS != 1 ? ($effBP + 1).Lang::$game['valueDelim'] : null).($effBP + $effDS);
if($spell->getField('effect'.$i.'Periode') > 0)
$foo['interval'] = $spell->getField('effect'.$i.'Periode') / 1000;
// parse masks and indizes
switch ($effId)
{
case 8: // Power Drain
case 30: // Energize
case 137: // Energize Pct
$foo['name'] .= ' ('.sprintf(Util::$dfnString, @Lang::$spell['powerTypes'][$effMV], $effMV).')';
break;
case 16: // QuestComplete
$foo['name'] .= ': '.QuestList::getName($effMV).' ('.$effMV.')';
break;
case 28: // Summon
case 75: // Summon Totem
case 87: // Summon Totem (slot 1)
case 88: // Summon Totem (slot 2)
case 89: // Summon Totem (slot 3)
case 90: // Summon Totem (slot 4)
$foo['name'] .= ': '.CreatureList::getName($effMV).' ('.$effMV.')';
break;
case 33: // open Lock
$foo['name'] .= ' ('.sprintf(Util::$dfnString, @Util::$lockType[$effMV], $effMV).')';
break;
case 53: // Enchant Item Perm
case 54: // Enchant Item Temp
$_ = DB::Aowow()->selectRow('SELECT * FROM ?_itemEnchantment WHERE id = ?d', $effMV);
$foo['name'] .= ' '.Util::localizedString($_, 'text').' ('.$effMV.')';
break;
case 38: // Dispel [miscValue => Types]
case 126: // Steal Aura
$foo['name'] .= ' ('.sprintf(Util::$dfnString, @Lang::$game['dt'][$effMV], $effMV).')';
break;
case 39: // Learn Language
$foo['name'] .= ' ('.sprintf(Util::$dfnString, @Lang::$game['languages'][$effMV], $effMV).')';
break;
case 50: // Trans Door
case 76: // Summon Object (Wild)
case 86: // Activate Object
case 104: // Summon Object (slot 1)
case 105: // Summon Object (slot 2)
case 106: // Summon Object (slot 3)
case 107: // Summon Object (slot 4)
$foo['name'] .= ': '.GameObjectList::getName($effMV).' ('.$effMV.')';
break;
case 74: // Apply Glyph
$_ = DB::Aowow()->selectCell('SELECT spellId FROM ?_glyphProperties WHERE id = ?d', $effMV);
$foo['name'] .= ': '.SpellList::getName($_).' ('.$effMV.')';
break;
case 95: // Skinning
// todo: sort this out - 0:skinning (corpse, beast), 1:hearb (GO), 2: ineral (GO), 3: engineer (corpse, mechanic)
$foo['name'] .= ' ('.sprintf(Util::$dfnString, 'NYI]', $effMV).')';
break;
case 108: // Dispel Mechanic
$foo['name'] .= ' ('.sprintf(Util::$dfnString, @Lang::$game['me'][$effMV], $effMV).')';
break;
case 118: // Require Skill
$foo['name'] .= ': '.SkillList::getName($effMV).' ('.$effMV.')';
break;
case 146: // Activate Rune
$foo['name'] .= ' ('.sprintf(Util::$dfnString, Lang::$spell['powerRunes'][$effMV], $effMV).')';
break;
case 155: // Dual Wield 2H-Weapons
$foo['name'] .= ': '.SpellList::getName($effMV).' ('.$effMV.')';
break;
default:
{
if ($effMV || $effId == 97)
$foo['name'] .= ' ('.$effMV.')';
}
// Aura
case 6: // Simple
case 27: // AA Persistent
case 35: // AA Party
case 65: // AA Raid
case 119: // AA Pet
case 128: // AA Friend
case 129: // AA Enemy
case 143: // AA Owner
{
if ($effAura > 0 && isset(Util::$spellAuraStrings[$effAura]))
{
$foo['name'] .= ' #'.$effAura;
switch ($effAura)
{
case 17: // Mod Stealth Detection
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Util::$stealthType[$effMV], $effMV).')';
break;
case 19: // Mod Invisibility Detection
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Util::$invisibilityType[$effMV], $effMV).')';
break;
case 24: // Periodic Energize
case 21: // Obsolete Mod Power
case 35: // Mod Increase Power
case 85: // Mod Power Regeneration
case 110: // Mod Power Regeneration Pct
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Lang::$spell['powerTypes'][$effMV], $effMV).')';
break;
case 29: // Mod Stat
case 80: // Mod Stat %
case 137: // Mod Total Stat %
case 175: // Mod Spell Healing Of Stat Percent
case 212: // Mod Ranged Attack Power Of Stat Percent
case 219: // Mod Mana Regeneration from Stat
case 268: // Mod Attack Power Of Stat Percent
$x = $effMV == -1 ? 0x1F : 1 << $effMV;
$bar = [];
for ($j = 0; $j < 5; $j++)
if ($x & (1 << $j))
$bar[] = Lang::$game['stats'][$j];
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, implode(', ', $bar), $effMV).')';
break;
case 36: // Shapeshift
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Lang::$game['st'][$effMV], $effMV).')';
break;
case 37: // Effect immunity
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Util::$spellEffectStrings[$effMV], $effMV).')';
break;
case 38: // Aura immunity
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Util::$spellAuraStrings[$effMV], $effMV).')';
break;
case 41: // Dispel Immunity
case 178: // Mod Debuff Resistance
case 245: // Mod Aura Duration By Dispel
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Lang::$game['dt'][$effMV], $effMV).')';
break;
case 44: // Track Creature
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Lang::$game['ct'][$effMV], $effMV).')';
break;
case 45: // Track Resource
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Util::$lockType[$effMV], $effMV).')';
break;
case 75: // Language
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Lang::$game['languages'][$effMV], $effMV).')';
break;
case 77: // Mechanic Immunity
case 117: // Mod Mechanic Resistance
case 232: // Mod Mechanic Duration
case 234: // Mod Mechanic Duration (no stack)
case 255: // Mod Mechanic Damage Taken Pct
case 276: // Mod Mechanic Damage Done Percent
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, @Lang::$game['me'][$effMV], $effMV).')';
break;
case 147: // mechanic Immunity Mask
$bar = [];
foreach (Lang::$game['me'] as $k => $str)
if ($effMV & (1 << $k - 1))
$bar[] = $str;
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, implode(', ', $bar), Util::asHex($effMV)).')';
break;
case 10: // Mod Threat
case 13: // Mod Damage Done
case 14: // Mod Damage Taken
case 22: // Mod Resistance
case 39: // School Immunity
case 40: // Damage Immunity
case 57: // Mod Spell Crit Chance
case 69: // School Absorb
case 71: // Mod Spell Crit Chance School
case 72: // Mod Power Cost School Percent
case 73: // Mod Power Cost School Flat
case 74: // Reflect Spell School
case 79: // Mod Damage Done Pct
case 81: // Split Damage Pct
case 83: // Mod Base Resistance
case 87: // Mod Damage Taken Pct
case 97: // Mana Shield
case 101: // Mod Resistance Pct
case 115: // Mod Healing Taken
case 118: // Mod Healing Taken Pct
case 123: // Mod Target Resistance
case 135: // Mod Healing Done
case 136: // Mod Healing Done Pct
case 142: // Mod Base Resistance Pct
case 143: // Mod Resistance Exclusive
case 149: // Reduce Pushback
case 163: // Mod Crit Damage Bonus
case 174: // Mod Spell Damage Of Stat Percent
case 182: // Mod Resistance Of Stat Percent
case 186: // Mod Attacker Spell Hit Chance
case 194: // Mod Target Absorb School
case 195: // Mod Target Ability Absorb School
case 199: // Mod Increases Spell Percent to Hit
case 229: // Mod AoE Damage Avoidance
case 271: // Mod Damage Percent Taken Form Caster
case 310: // Mod Creature AoE Damage Avoidance
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura];
if ($effMV)
$foo['name'] .= ' ('.sprintf(Util::$dfnString, Lang::getMagicSchools($effMV), Util::asHex($effMV)).')';
break;
case 98: // Mod Skill Value
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' '.SkillList::getName($effMV).' ('.$effMV.')';
break;
case 107: // Flat Modifier
case 108: // Pct Modifier
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, Util::$spellModOp[$effMV], $effMV).')';
break;
case 189: // Mod Rating
case 220: // Combat Rating From Stat
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, Util::$combatRating[log($effMV, 2)], Util::asHex($effMV)).')';
break;
case 168: // Mod Damage Done Versus
case 59: // Mod Damage Done Versus Creature
$bar = [];
foreach (Lang::$game['ct'] as $j => $str)
if ($effMV & (1 << $j - 1))
$bar[] = $str;
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, implode(', ', $bar), $effMV).')';
break;
case 249: // Convert Rune
$x = $spell->getField('effect'.$i.'MiscValueB');
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' ('.sprintf(Util::$dfnString, Lang::$spell['powerRunes'][$x], $x).')';
break;
case 78: // Mounted
case 56: // Transform
{
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura].' '.CreatureList::getName($effMV).' ('.$effMV.')';
break;
}
default:
{
$foo['name'] .= Lang::$colon.Util::$spellAuraStrings[$effAura];
if ($effMV > 0)
$foo['name'] .= ' ('.$effMV.')';
}
}
if (in_array($effAura, [174, 220, 182]))
$foo['name'] .= ' ['.sprintf(Util::$dfnString, Lang::$game['stats'][$spell->getField('effect'.$i.'MiscValueB')], $spell->getField('effect'.$i.'MiscValueB')).']';
else if ($spell->getField('effect'.$i.'MiscValueB') > 0)
$foo['name'] .= ' ['.$spell->getField('effect'.$i.'MiscValueB').']';
}
else if ($effAura > 0)
$foo['name'] .= ': Unknown Aura ('.$effAura.')';
break;
}
}
// cases where we dont want 'Value' to be displayed
if (in_array($effAura, [11, 12, 36, 77]) || in_array($effId, []))
unset($foo['value']);
}
/*******
* extra tabs
*******/
/* contains [Open Lock Item]
effect.$i.Id = 59
check spell_loot_template
['contains']
reset icon..?
*
/* related spells
at least 2 similar effects AND
names identical AND
ids not identical
*/
$spellArr['seeAlso'] = [];
/* source trainer
first check source if not trainer : break
consult npc_trainer for details
nyi: CreatureList
['taughtbynpc']
*/
$spellArr['taughtByNpc'] = [];
/* source item
first check source if not item : break
spellid_1 = id OR spellid_1 = "LEAR_SPELL_GENERIC" AND spellid_2 = id
spelltrigger_1/2 = 6
*/
$spellArr['taughtbyitem'] = [];
// check for taught by spells (Effect 36)
// find associated NPC, Item and merge results
// taughtbypets (unused..?)
// taughtbyquest
// taughtbytrainers
// taughtbyitem
/* used by npc
first check cat if not npc-spell : break
stunt through the tables... >.<
*/
$spellArr['usedbynpc'] = [];
/* used by item
*/
/* NEW
is in stack-rule with X
is linked with X
scaling data
conditions
difficulty-versions
spell_proc_data
*/
/*
// Используется вещями:
/*
$usedbyitem = DB::Aowow()->select('
SELECT ?#, c.entry
{ , name_loc?d AS name_loc }
FROM ?_icons, item_template c
{ LEFT JOIN (locales_item l) ON c.entry = l.entry AND ? }
WHERE
(spellid_1 = ?d OR (spellid_2 = ?d AND spelltrigger_2!=6) OR spellid_3 = ?d OR spellid_4 = ?d OR spellid_5 = ?d)
AND id=displayID
',
$item_cols[2],
(User::$localeId>0)? User::$localeId: DBSIMPLE_SKIP,
(User::$localeId>0)? 1: DBSIMPLE_SKIP,
$spellArr['entry'], $spellArr['entry'], $spellArr['entry'], $spellArr['entry'], $spellArr['entry']
);
if($usedbyitem)
{
$spellArr['usedbyitem'] = [];
foreach($usedbyitem as $i => $row)
$spellArr['usedbyitem'][] = iteminfo2($row, 0);
unset($usedbyitem);
}
*/
// Используется наборами вещей:
// $usedbyitemset = DB::Aowow()->select('
// SELECT *
// FROM ?_itemset
// WHERE spell1 = ?d OR spell2 = ?d OR spell3 = ?d OR spell4 = ?d OR spell5 = ?d OR spell6 = ?d OR spell7 = ?d OR spell8 = ?d
// ',
// $spellArr['entry'], $spellArr['entry'], $spellArr['entry'], $spellArr['entry'], $spellArr['entry'], $spellArr['entry'], $spellArr['entry'], $spellArr['entry']
// );
// if($usedbyitemset)
// {
// $spellArr['usedbyitemset'] = [];
// foreach($usedbyitemset as $i => $row)
// $spellArr['usedbyitemset'][] = itemsetinfo2($row);
// unset($usedbyitemset);
// }
// Спелл - награда за квест
/*
$questreward = DB::Aowow()->select('
SELECT c.?#
{ , Title_loc?d AS Title_loc }
FROM quest_template c
{ LEFT JOIN (locales_quest l) ON c.entry = l.entry AND ? }
WHERE
RewSpell = ?d
OR RewSpellCast = ?d
',
$quest_cols[2],
(User::$localeId>0)? User::$localeId: DBSIMPLE_SKIP,
(User::$localeId>0)? 1: DBSIMPLE_SKIP,
$spellArr['entry'], $spellArr['entry']
);
if($questreward)
{
$spellArr['questreward'] = [];
foreach($questreward as $i => $row)
$spellArr['questreward'][] = GetQuestInfo($row, 0xFFFFFF);
unset($questreward);
}
*/
// Проверяем на пустые массивы
// if(!$spellArr['taughtbyitem'])
// unset($spellArr['taughtbyitem']);
// if(!$spellArr['taughtbynpc'])
// unset($spellArr['taughtbynpc']);
// achievement criteria
$rows = [];
// DB::Aowow()->select('
// SELECT a.id, a.faction, a.name_loc?d AS name, a.description_loc?d AS description, a.category, a.points, s.iconname, z.areatableID
// FROM ?_spellicons s, ?_achievementcriteria c, ?_achievement a
// LEFT JOIN (?_zones z) ON a.map != -1 AND a.map = z.mapID
// WHERE
// a.icon = s.id
// AND a.id = c.refAchievement
// AND c.type IN (?a)
// AND c.value1 = ?d
// GROUP BY a.id
// ORDER BY a.name_loc?d
// ',
// User::$localeId,
// User::$localeId,
// array(
// ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2,
// ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL, ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2,
// ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL
// ),
// $spellArr['entry'],
// User::$localeId
// );
if($rows)
{
$spellArr['criteria_of'] = [];
foreach($rows as $row)
{
allachievementsinfo2($spell->getField('id'));
$spellArr['criteria_of'][] = achievementinfo2($row);
}
}
$smarty->saveCache($cacheKeyPage, $pageData);
}
$smarty->updatePageVars(array(
'title' => implode(" - ", $pageData['title']),
'path' => "[".implode(", ", $pageData['path'])."]",
'tab' => 0, // for g_initHeader($tab)
'type' => TYPE_SPELL,
'typeId' => $id,
));
$smarty->assign('community', CommunityContent::getAll(TYPE_SPELL, $id)); // comments, screenshots, videos
$smarty->assign('lang', array_merge(Lang::$main, Lang::$game, Lang::$spell, ['colon' => Lang::$colon]));
$smarty->assign('lvData', $pageData);
// Mysql query execution statistics
$smarty->assign('mysql', DB::Aowow()->getStatistics());
// load the page
$smarty->display('spell.tpl');
?>