mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
features: - tool - Maps: * finally supports multi-layered zones * should also support icons if needed (questgiver, ect) - tool - Item Comparison: * fully functional (yes, that includes heirlooms and items with random props) * may throw a minor js-error if using arrow-keys/esc/ret in input-fields in the LightboxPopus (but wowhead does also) * icons for prismatic sockets are not displayed if no other sockets are present (calculation is correct though) * modelviewer will still 'call home' - tool - Talent Calculator: * got rid of a VERY dirty hack for the icons (they are now supplied as texture, not laoded one at a time) * glyphs should also be a bit more informative * talent data is pulled from static file, that should a) speed up load and b) prevent lockups if it cant be generated on the fly * you can now set the level for your build, which affects available talent points, glyphs and glyph-slots - tool - Pet Calculator: * initial implementation; basically the same as the Talent Calculator - general concept changed: * dropped ajax.php; json is now supplied by the appropriate page if &json is appended to the url * search.php and opensearch.php are being merged; again, output will depend on the appended parameter (&openserach, &json) * data included via data.php will be static and assembled only on installation and when the database changes (should speed up load) * locale strings are now in a single file instead of being split up to the template * still getting rid of criss-cross-includes, global variables and string-defines
277 lines
7.1 KiB
PHP
277 lines
7.1 KiB
PHP
<?php
|
|
|
|
if (!defined('AOWOW_REVISION'))
|
|
die('invalid access');
|
|
|
|
/* Types
|
|
Type 1 => NPC
|
|
Type 2 => GameObject
|
|
Type 3 => Items
|
|
Type 4 => Item Sets
|
|
Type 5 => Quests
|
|
Type 6 => Spells
|
|
Type 7 => Zones
|
|
Type 8 => Factions
|
|
Type 9 => Pets
|
|
Type 10 => Achievement
|
|
Type 11 => Title
|
|
Type 12 => Event
|
|
Type 13 => Class
|
|
Type 14 => Race
|
|
Type 15 => Skill
|
|
Type 17 => Currency
|
|
*/
|
|
|
|
// Ajax can't handle debug, force to false
|
|
$AoWoWconf['debug'] = false;
|
|
|
|
require_once('includes/kernel.php');
|
|
// require_once('includes/class.filter.php');
|
|
require_once('includes/class.item.php');
|
|
require_once('includes/class.spell.php');
|
|
|
|
header("Content-type: text/javascript");
|
|
|
|
// Receives requests from at least 3 characters (although vovhede and 1 character)
|
|
$_query = Util::sqlEscape($_GET['search']);
|
|
$_type = isset($_GET['type']) ? (1 << intVal($_GET['type'])) : 0xFFFF;
|
|
|
|
if (strlen($_query) < 3)
|
|
exit('["", []]');
|
|
|
|
echo "[\"".str_replace('"', '\"', $_query)."\", [\n";
|
|
|
|
// Item Comparison search
|
|
$foundItems = array();
|
|
$foundSets = array();
|
|
$pieceAssoc = array();
|
|
if ($_type & 0x10) {
|
|
|
|
$rows = DB::Aowow()->Select('
|
|
SELECT
|
|
itemsetID as id,
|
|
refSetId as idbak,
|
|
CONCAT(7 - quality, ?#) as name,
|
|
minlevel,
|
|
maxlevel,
|
|
contentGroup as note,
|
|
type,
|
|
IF(heroic=1, "true", "false") as heroic,
|
|
classMask as reqclass,
|
|
item1, item2, item3, item4, item5,
|
|
item6, item7, item8, item9, item10
|
|
FROM
|
|
?_itemset
|
|
WHERE
|
|
?# LIKE ?s;',
|
|
'name_loc'.User::$localeId,
|
|
'name_loc'.User::$localeId,
|
|
'%'.$_query.'%'
|
|
);
|
|
|
|
// parse items, create class-array
|
|
foreach ($rows as $row)
|
|
{
|
|
$row['pieces'] = array();
|
|
for ($i=1; $i<=10; $i++)
|
|
{
|
|
if ($row['item'.$i])
|
|
{
|
|
$foundItems[] = $row['item'.$i];
|
|
$row['pieces'][] = $row['item'.$i];
|
|
$pieceAssoc[$row['item'.$i]] = $row['id'];
|
|
unset($row['item'.$i]);
|
|
}
|
|
}
|
|
$row['classes'] = array();
|
|
for ($i = 1; $i < 12; $i++)
|
|
if ($row['reqclass'] & (1 << $i))
|
|
$row['classes'][] = $i + 1;
|
|
|
|
unset($row['classMask']);
|
|
$foundSets[] = $row;
|
|
}
|
|
}
|
|
if ($_type & 0x18) { // 3 | 4
|
|
$conditions = array(
|
|
array('i.class', 'IN', [2, 4]),
|
|
empty($foundItems) ? array(User::$localeId ? 'name_loc'.User::$localeId : 'name', 'LIKE', '%'.$_query.'%') : array('i.entry', 'IN', $foundItems)
|
|
);
|
|
$iList = new ItemList($conditions);
|
|
|
|
$items = array();
|
|
foreach ($iList->itemList as $id => $item)
|
|
{
|
|
$item->getJsonStats($pieceAssoc);
|
|
|
|
$stats = array();
|
|
foreach ($item->json as $k => $v)
|
|
{
|
|
if (!$v && $k != 'classs' && $k != 'subclass')
|
|
continue;
|
|
|
|
$stats[] = is_numeric($v) || $v[0] == "{" ? '"'.$k.'":'.$v.'' : '"'.$k.'":"'.$v.'"';
|
|
}
|
|
|
|
foreach ($item->itemMods as $k => $v)
|
|
$stats[] = '"'.Util::$itemMods[$k].'":'.$v.'';
|
|
|
|
$items[$id] = "\t{".implode(',', $stats)."}";
|
|
}
|
|
echo implode(",\n", $items)."\n],[\n";
|
|
|
|
$i = 0;
|
|
foreach ($foundSets as $single)
|
|
{
|
|
$set = array();
|
|
foreach ($single as $key => $value)
|
|
{
|
|
if ((is_numeric($value) && $value == 0) || $value === "false")
|
|
continue;
|
|
|
|
if (is_array($value))
|
|
$value = "[".implode(',',$value)."]";
|
|
|
|
$set[] = is_numeric($value) || $value[0] == "[" ? '"'.$key.'":'.str_replace('"', '\"', $value).'' : '"'.$key.'":"'.str_replace('"', '\"', $value).'"';
|
|
}
|
|
echo "\t{".implode(',', $set)."}";
|
|
echo ($i < count($foundSets) - 1) ? ",\n" : "\n";
|
|
$i++;
|
|
}
|
|
echo "]]";
|
|
exit();
|
|
}
|
|
/*
|
|
// Ищем вещи:
|
|
|
|
$rows = $DB->select('
|
|
SELECT i.entry, ?# as name, a.iconname, i.quality
|
|
FROM ?_icons a, item_template i{, ?# l}
|
|
WHERE
|
|
?# LIKE ?
|
|
AND a.id = i.displayid
|
|
{ AND i.entry = l.?# }
|
|
ORDER BY i.quality DESC, ?#
|
|
LIMIT 3
|
|
',
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId, // SELECT
|
|
User::$localeId == 0 ? DBSIMPLE_SKIP : 'locales_item', // FROM
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId, // WHERE1
|
|
$_query,
|
|
User::$localeId == 0 ? DBSIMPLE_SKIP : 'entry', // WHERE2
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId // ORDER
|
|
);
|
|
|
|
foreach($rows as $i => $row)
|
|
$found[$row['name'].' (Item)'] = array(
|
|
'type' => 3,
|
|
'entry' => $row['entry'],
|
|
'iconname' => $row['iconname'],
|
|
'quality' => $row['quality']
|
|
);
|
|
|
|
// Ищем объекты:
|
|
$rows = $DB->select('
|
|
SELECT entry, ?# as name
|
|
FROM ?#
|
|
WHERE ?# LIKE ?
|
|
ORDER BY ?#
|
|
LIMIT 3
|
|
',
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId, // SELECT
|
|
User::$localeId == 0 ? 'gameobject_template' : 'locales_gameobject', // FROM
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId, // WHERE1
|
|
$_query,
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId // ORDER
|
|
);
|
|
|
|
foreach($rows as $i => $row)
|
|
$found[$row['name'].' (Object)'] = array(
|
|
'type' => 2,
|
|
'entry'=>$row['entry'],
|
|
);
|
|
|
|
// Ищем квесты:
|
|
$rows = $DB->select('
|
|
SELECT q.entry, ?# as Title, q.RequiredRaces
|
|
FROM quest_template q {, ?# l}
|
|
WHERE
|
|
(?# LIKE ?)
|
|
{AND (q.entry=l.?#)}
|
|
ORDER BY ?#
|
|
LIMIT 3
|
|
',
|
|
User::$localeId == 0 ? 'Title' : 'Title_loc'.User::$localeId, // SELECT
|
|
User::$localeId == 0 ? DBSIMPLE_SKIP : 'locales_quest', // FROM
|
|
User::$localeId == 0 ? 'Title' : 'Title_loc'.User::$localeId, // WHERE1
|
|
$_query,
|
|
User::$localeId == 0 ? DBSIMPLE_SKIP : 'entry', // WHERE2
|
|
User::$localeId == 0 ? 'Title' : 'Title_loc'.User::$localeId // ORDER
|
|
);
|
|
|
|
foreach($rows as $i => $row)
|
|
$found[$row['Title'].' (Quest)'] = array(
|
|
'type' => 5,
|
|
'entry'=> $row['entry'],
|
|
'side' => factionByRaceMask($row['RequiredRaces'])
|
|
);
|
|
|
|
// Ищем creature:
|
|
$rows = $DB->select('
|
|
SELECT entry, ?# as name
|
|
FROM ?#
|
|
WHERE ?# LIKE ?
|
|
ORDER BY ?#
|
|
LIMIT 3
|
|
',
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId, // SELECT
|
|
User::$localeId == 0 ? 'creature_template' : 'locales_creature', // FROM
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId, // WHERE1
|
|
$_query,
|
|
User::$localeId == 0 ? 'name' : 'name_loc'.User::$localeId // ORDER
|
|
);
|
|
|
|
foreach($rows as $i => $row)
|
|
$found[$row['name'].' (NPC)'] = array(
|
|
'type' => 1,
|
|
'entry' => $row['entry']
|
|
);
|
|
|
|
// Если ничего не найдено...
|
|
if(!isset($found))
|
|
{
|
|
echo ']]';
|
|
exit;
|
|
}
|
|
|
|
//ksort($found);
|
|
|
|
$found = array_slice($found, 0, 10);
|
|
|
|
$i=0;
|
|
foreach($found as $name => $fitem)
|
|
{
|
|
echo '"'.str_replace('"', '\"', $name).'"';
|
|
if($i<count($found)-1)
|
|
echo ', ';
|
|
$i++;
|
|
}
|
|
|
|
echo '], [], [], [], [], [], [';
|
|
|
|
$i=0;
|
|
foreach($found as $name => $fitem)
|
|
{
|
|
echo '['.$fitem['type'].', '.$fitem['entry'];
|
|
if(isset($fitem['iconname'])) echo ', "'.$fitem['iconname'].'"';
|
|
if(isset($fitem['quality'])) echo ", ".$fitem['quality'];
|
|
if(isset($fitem['side'])) echo ", ".$fitem['side'];
|
|
echo ']';
|
|
if($i<count($found)-1)
|
|
echo ', ';
|
|
$i++;
|
|
}
|
|
|
|
echo ']]';
|
|
*/
|
|
?>
|