Setup/Data

* move custom data from setup scripts to DB
 * move strings from DB to locale files
 * use common function to calculate coordinates of dungeon entrances instead of inline sql
 * fixed manual data zones and itemset
 * fixed typos across the board
This commit is contained in:
Sarjuuk
2022-02-21 22:51:25 +01:00
parent 10805a1f70
commit bc71ae762c
32 changed files with 481 additions and 373 deletions

View File

@@ -210,6 +210,75 @@ class Game
return $pages;
}
/*********************/
/* World Pos. Checks */
/*********************/
private static $alphaMapCache = [];
private static function alphaMapCheck(int $areaId, array &$set) : bool
{
$file = 'setup/generated/alphaMaps/'.$areaId.'.png';
if (!file_exists($file)) // file does not exist (probably instanced area)
return false;
// invalid and corner cases (literally)
if (!is_array($set) || empty($set['posX']) || empty($set['posY']) || $set['posX'] >= 100 || $set['posY'] >= 100)
{
$set = null;
return true;
}
if (empty(self::$alphaMapCache[$areaId]))
self::$alphaMapCache[$areaId] = imagecreatefrompng($file);
// alphaMaps are 1000 x 1000, adapt points [black => valid point]
if (!imagecolorat(self::$alphaMapCache[$areaId], $set['posX'] * 10, $set['posY'] * 10))
$set = null;
return true;
}
public static function checkCoords(array $points) : array
{
$result = [];
$capitals = array( // capitals take precedence over their surroundings
1497, 1637, 1638, 3487, // Undercity, Ogrimmar, Thunder Bluff, Silvermoon City
1519, 1537, 1657, 3557, // Stormwind City, Ironforge, Darnassus, The Exodar
3703, 4395 // Shattrath City, Dalaran
);
foreach ($points as $res)
{
if (self::alphaMapCheck($res['areaId'], $res))
{
if (!$res)
continue;
// some rough measure how central the spawn is on the map (the lower the number, the better)
// 0: perfect center; 1: touches a border
$q = abs( (($res['posX'] - 50) / 50) * (($res['posY'] - 50) / 50) );
if (empty($result) || $result[0] > $q)
$result = [$q, $res];
}
else if (in_array($res['areaId'], $capitals)) // capitals (auto-discovered) and no hand-made alphaMap available
return $res;
else if (empty($result)) // add with lowest quality if alpha map is missing
$result = [1.0, $res];
}
// spawn does not really match on a map, but we need at least one result
if (!$result)
{
usort($points, function ($a, $b) { return ($a['dist'] < $b['dist']) ? -1 : 1; });
$result = [1.0, $points[0]];
}
return $result[1];
}
public static function getWorldPosForGUID(int $type, int ...$guids) : array
{
$result = [];

View File

@@ -130,7 +130,7 @@ function loadConfig(bool $noPHP = false) : void
if ($php)
ini_set(strtolower($k), $val);
else
else if (!defined('CFG_'.strtoupper($k)))
define('CFG_'.strtoupper($k), $val);
}
}
@@ -162,6 +162,8 @@ set_error_handler(function($errNo, $errStr, $errFile, $errLine)
$errName = 'E_RECOVERABLE_ERROR';
Util::addNote($uGroup, $errName.' - '.$errStr.' @ '.$errFile. ':'.$errLine);
if (CLI)
CLI::write($errName.' - '.$errStr.' @ '.$errFile. ':'.$errLine, $errNo & 0x40A ? CLI::LOG_WARN : CLI::LOG_ERROR);
if (DB::isConnectable(DB_AOWOW))
DB::Aowow()->query('INSERT INTO ?_errors (`date`, `version`, `phpError`, `file`, `line`, `query`, `userGroups`, `message`) VALUES (UNIX_TIMESTAMP(), ?d, ?d, ?, ?d, ?, ?d, ?) ON DUPLICATE KEY UPDATE `date` = UNIX_TIMESTAMP()',

View File

@@ -112,7 +112,6 @@ class Profiler
if ($queuePID && $queuePID != $pid)
{
trigger_error('pSync - another queue with PID #'.$queuePID.' is already running', E_USER_ERROR);
CLI::write('Profiler::queueLock() - another queue with PID #'.$queuePID.' is already runnung', CLI::LOG_ERROR);
return false;
}

View File

@@ -269,7 +269,7 @@ class SmartAI
foreach ($smartScripts as $s)
{
if ($s['action_type'] == SAI_ACTION_SPAWN_SPAWNGROUP)
$moreInfo[SAI_ACTION_SPAWN_SPAWNGROUP][] = $s['action_param'.$i];
$moreInfo[SAI_ACTION_SPAWN_SPAWNGROUP][] = $s['action_param1'];
else if (in_array($s['action_type'], array_keys($lookup)))
{
foreach ($lookup[$s['action_type']] as $p)
@@ -952,7 +952,7 @@ class SmartAI
$footer = Util::formatTime($e['param'][3], true);
break;
case SAI_EVENT_EVENT_PHASE_CHANGE: // 66 - On event phase mask set
$e['param'][10] = Lang::concat(Util::mask2bits($a['param'][0]), false);
$e['param'][10] = Lang::concat(Util::mask2bits($e['param'][0]), false);
break;
default:
$body = '[span class=q10]Unhandled Event[/span] #'.$e['type'];
@@ -1532,7 +1532,7 @@ class SmartAI
continue;
$this->jsGlobals[TYPE_ITEM][] = $i;
$buff[] = '[item='.$_.']';
$buff[] = '[item='.$i.']';
}
}
else if (!$a['param'][1])

View File

@@ -115,9 +115,6 @@ class TitleList extends BaseType
if (!empty($sources[12]))
$sources[12] = (new AchievementList(array(['id', $sources[12]])))->getSourceData();
if (!empty($sources[13]))
$sources[13] = DB::Aowow()->SELECT('SELECT *, Id AS ARRAY_KEY FROM ?_sourcestrings WHERE Id IN (?a)', $sources[13]);
foreach ($this->sources as $Id => $src)
{
$tmp = [];
@@ -148,7 +145,7 @@ class TitleList extends BaseType
// other source (only one item possible, so no iteration needed)
if (isset($src[13]))
$tmp[13] = [Util::localizedString($sources[13][$this->sources[$Id][13][0]], 'source')];
$tmp[13] = [Lang::game('pvpSources', $this->sources[$Id][13][0])];
$this->templates[$Id]['source'] = $tmp;
}

View File

@@ -298,6 +298,10 @@ $lang = array(
"Gemahlen", "Abgebaut", "Sondiert", "Aus Taschendiebstahl", "Geborgen", "Gehäutet",
"In-Game-Store"
),
'pvpSources' => array(
null, "Arenasaison 1", "Arenasaison 2", "Arenasaison 3", "Arenasaison 4",
"Arenasaison 5", "Arenasaison 6", "Arenasaison 7", "Arenasaison 8", "2009 Arena-Turnier"
),
'languages' => array(
1 => "Orcisch", 2 => "Darnassisch", 3 => "Taurisch", 6 => "Zwergisch", 7 => "Gemeinsprache", 8 => "Dämonisch",
9 => "Titanisch", 10 => "Thalassisch", 11 => "Drachisch", 12 => "Kalimagisch", 13 => "Gnomisch", 14 => "Trollisch",

View File

@@ -298,6 +298,10 @@ $lang = array(
"Milled", "Mined", "Prospected", "Pickpocketed", "Salvaged", "Skinned",
"In-Game Store"
),
'pvpSources' => array(
null, "Arena Season 1", "Arena Season 2", "Arena Season 3", "Arena Season 4",
"Arena Season 5", "Arena Season 6", "Arena Season 7", "Arena Season 8", "2009 Arena Tournament"
),
'languages' => array( // Languages.dbc
1 => "Orcish", 2 => "Darnassian", 3 => "Taurahe", 6 => "Dwarvish", 7 => "Common", 8 => "Demonic",
9 => "Titan", 10 => "Thalassian", 11 => "Draconic", 12 => "Kalimag", 13 => "Gnomish", 14 => "Troll",

View File

@@ -298,6 +298,10 @@ $lang = array(
"Molido", "Minado", "Prospectar", "Robado", "Rescatado", "Despellejado",
"Tienda del juego"
),
'pvpSources' => array(
null, "Temporada de arena 1", "Temporada de arena 2", "Temporada de arena 3", "Temporada de arena 4",
"Temporada de arena 5", "Temporada de arena 6", "Temporada de arena 7", "Temporada de arena 8", "Torneo de arena 2009"
),
'languages' => array(
1 => "Orco", 2 => "Darnassiano", 3 => "Taurahe", 6 => "Enánico", 7 => "Lengua común", 8 => "Demoníaco",
9 => "Titánico", 10 => "Thalassiano", 11 => "Dracónico", 12 => "Kalimag", 13 => "Gnomótico", 14 => "Trol",

View File

@@ -298,6 +298,10 @@ $lang = array(
"Moulu", "Miné", "Prospecté", "Subtilisé (pickpocket)", "Ferraillé", "Dépecé",
"Boutique en jeu"
),
'pvpSources' => array(
null, "Saison 1 des combats d'arène", "Saison 2 des combats d'arène", "Saison 3 des combats d'arène", "Saison 4 des combats d'arène",
"Saison 5 des combats d'arène", "Saison 6 des combats d'arène", "Saison 7 des combats d'arène", "Saison 8 des combats d'arène", "Tournoi 2009 des combats d'arène"
),
'languages' => array(
1 => "Orc", 2 => "Darnassien", 3 => "Taurahe", 6 => "Nain", 7 => "Commun", 8 => "Démoniaque",
9 => "Titan", 10 => "Thalassien", 11 => "Draconique", 12 => "Kalimag", 13 => "Gnome", 14 => "Troll",

View File

@@ -298,6 +298,10 @@ $lang = array(
"[Milled]", "Выкапывается", "Просеивается", "Можно украсть", "Разобрано", "Собирается при снятии шкуры",
"Внутриигровой магазин"
),
'pvpSources' => array(
null, "Сезон арены 1", "Сезон арены 2", "Сезон арены 3", "Сезон арены 4",
"Сезон арены 5", "Сезон арены 6", "Сезон арены 7", "Сезон арены 8", "Турнир арены 2009"
),
'languages' => array(
1 => "орочий", 2 => "дарнасский", 3 => "таурахэ", 6 => "дворфийский", 7 => "всеобщий", 8 => "язык демонов",
9 => "язык титанов", 10 => "талассийский", 11 => "драконий", 12 => "калимаг", 13 => "гномский", 14 => "язык троллей",

View File

@@ -298,6 +298,10 @@ $lang = array(
"取消附魔", "可钓", "已采集", "经研磨", "开采",
"已加工", "失窃", "废弃", "已剥皮", "游戏商店"
),
'pvpSources' => array(
null, "Arena Season 1", "Arena Season 2", "Arena Season 3", "Arena Season 4",
"Arena Season 5", "Arena Season 6", "Arena Season 7", "Arena Season 8", "2009 Arena Tournament"
),
'languages' => array(
1 => "兽人语", 2 => "达纳苏斯语", 3 => "牛头人语", 6 => "矮人语", 7 => "通用语", 8 => "恶魔语",
9 => "泰坦语", 10 => "萨拉斯语", 11 => "龙语", 12 => "卡利姆多语", 13 => "侏儒语", 14 => "巨魔语",

File diff suppressed because one or more lines are too long

View File

@@ -59,13 +59,13 @@ switch ($cmd) // we accept only on
$dbc = new DBC(trim($n), ['temporary' => false]);
if ($dbc->error)
{
CLI::write('CLISetup::loadDBC() - required DBC '.$name.'.dbc not found!', CLI::LOG_ERROR);
CLI::write('CLISetup::loadDBC() - required DBC '.$n.'.dbc not found!', CLI::LOG_ERROR);
return false;
}
if (!$dbc->readFile())
{
CLI::write('CLISetup::loadDBC() - DBC '.$name.'.dbc could not be written to DB!', CLI::LOG_ERROR);
CLI::write('CLISetup::loadDBC() - DBC '.$n.'.dbc could not be written to DB!', CLI::LOG_ERROR);
return false;
}
}

View File

@@ -108,6 +108,7 @@ class DBC
'scalingstatvalues' => 'xniiiiiiiiiiiiiiiiiiiiii',
'skillline' => 'nixsxsssxsxsxxxxxxxxsxsssxsxsxxxxxxxxixxxxxxxxxxxxxxxxxx',
'skilllineability' => 'niiiixxixiiixx',
'skilllinecategory' => 'nsxsssxsxsxxxxxxxxi',
'skillraceclassinfo' => 'niiiiixx',
'soundambience' => 'nii',
'soundemitters' => 'nffxxxxiix',
@@ -212,6 +213,7 @@ class DBC
'scalingstatvalues' => 'id,shoulderMultiplier,trinketMultiplier,weaponMultiplier,rangedMultiplier,clothShoulderArmor,leatherShoulderArmor,mailShoulderArmor,plateShoulderArmor,weaponDPS1H,weaponDPS2H,casterDPS1H,casterDPS2H,rangedDPS,wandDPS,spellPower,primBudged,tertBudged,clothCloakArmor,clothChestArmor,leatherChestArmor,mailChestArmor,plateChestArmor',
'skillline' => 'id,categoryId,name_loc0,name_loc2,name_loc3,name_loc4,name_loc6,name_loc8,description_loc0,description_loc2,description_loc3,description_loc4,description_loc6,description_loc8,iconId',
'skilllineability' => 'id,skillLineId,spellId,reqRaceMask,reqClassMask,reqSkillLevel,acquireMethod,skillLevelGrey,skillLevelYellow',
'skilllinecategory' => 'id,name_loc0,name_loc2,name_loc3,name_loc4,name_loc6,name_loc8,index',
'skillraceclassinfo' => 'id,skillLine,raceMask,classMask,flags,reqLevel',
'soundambience' => 'id,soundIdDay,soundIdNight',
'soundemitters' => 'id,posY,posX,soundId,mapId',

View File

@@ -32,15 +32,28 @@ trait TrDBCcopy
trait TrCustomData
{
// apply post generator custom data
public function applyCustomData() : void
public function applyCustomData() : bool
{
if (!$this->customData)
return;
$ok = true;
$this->customData = $this->customData ?? [];
if ($cd = DB::Aowow()->selectCol('SELECT `entry` AS ARRAY_KEY, `field` AS ARRAY_KEY2, `value` FROM ?_setup_custom_data WHERE `command` = ?', $this->command))
$this->customData += $cd;
foreach ($this->customData as $id => $data)
if ($data)
{
try
{
DB::Aowow()->query('UPDATE ?_'.$this->command.' SET ?a WHERE id = ?d', $data, $id);
}
catch (Exception $e)
{
trigger_error('Custom Data for entry #'.$id.': '.$e->getMessage(), E_USER_ERROR);
$ok = false;
}
}
return $ok;
}
}
abstract class SetupScript

View File

@@ -239,7 +239,7 @@ class SqlGen
if ($ssRef->generate($updateIds))
{
if (method_exists($ssRef, 'applyCustomData'))
$ssRef->applyCustomData();
return $ssRef->applyCustomData();
return true;
}

View File

@@ -9,7 +9,7 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'achievement';
@@ -17,10 +17,6 @@ SqlGen::register(new class extends SetupScript
protected $tblDependencyTC = ['dbc_achievement', 'disables'];
protected $dbcSourceFiles = ['achievement_category', 'achievement', 'spellicon'];
private $customData = array(
1956 => ['itemExtra' => 44738] // Higher Learning - item rewarded through gossip
);
public function generate(array $ids = []) : bool
{
/**************/

View File

@@ -9,26 +9,12 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'classes';
protected $dbcSourceFiles = ['spell', 'charbaseinfo', 'skillraceclassinfo', 'skilllineability', 'chrclasses'];
// roles (1:heal; 2:mleDPS; 4:rngDPS; 8:tank)
private $customData = array(
1 => ['roles' => 0xA],
2 => ['roles' => 0xB],
3 => ['roles' => 0x4],
4 => ['roles' => 0x2],
5 => ['roles' => 0x5],
6 => ['roles' => 0xA],
7 => ['roles' => 0x7],
8 => ['roles' => 0x4],
9 => ['roles' => 0x4],
11 => ['roles' => 0xF],
);
public function generate(array $ids = []) : bool
{
$classes = DB::Aowow()->select('SELECT *, id AS ARRAY_KEY FROM dbc_chrclasses');

View File

@@ -9,7 +9,7 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'currencies';
@@ -17,17 +17,6 @@ SqlGen::register(new class extends SetupScript
protected $tblDependencyTC = ['item_template', 'item_template_locale'];
protected $dbcSourceFiles = ['itemdisplayinfo', 'currencytypes'];
// hide test tokens and move them to unused
private $customData = array(
1 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW, 'category' => 3],
2 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW, 'category' => 3],
4 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW, 'category' => 3],
22 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW, 'category' => 3],
141 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW, 'category' => 3],
103 => ['cap' => 10000], // Arena Points
104 => ['cap' => 75000] // Honor Points
);
public function generate(array $ids = []) : bool
{
if (!$ids)

View File

@@ -9,49 +9,12 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'factions';
protected $dbcSourceFiles = ['faction', 'factiontemplate'];
private $customData = array(
47 => ['qmNpcIds' => '33310'],
68 => ['qmNpcIds' => '33555'],
69 => ['qmNpcIds' => '33653'],
72 => ['qmNpcIds' => '33307'],
76 => ['qmNpcIds' => '33553'],
81 => ['qmNpcIds' => '33556'],
922 => ['qmNpcIds' => '16528'],
930 => ['qmNpcIds' => '33657'],
932 => ['qmNpcIds' => '19321'],
933 => ['qmNpcIds' => '20242 23007'],
935 => ['qmNpcIds' => '21432'],
941 => ['qmNpcIds' => '20241'],
942 => ['qmNpcIds' => '17904'],
946 => ['qmNpcIds' => '17657'],
947 => ['qmNpcIds' => '17585'],
970 => ['qmNpcIds' => '18382'],
978 => ['qmNpcIds' => '20240'],
989 => ['qmNpcIds' => '21643'],
1011 => ['qmNpcIds' => '21655'],
1012 => ['qmNpcIds' => '23159'],
1037 => ['qmNpcIds' => '32773 32564'],
1038 => ['qmNpcIds' => '23428'],
1052 => ['qmNpcIds' => '32774 32565'],
1073 => ['qmNpcIds' => '31916 32763'],
1090 => ['qmNpcIds' => '32287'],
1091 => ['qmNpcIds' => '32533'],
1094 => ['qmNpcIds' => '34881'],
1105 => ['qmNpcIds' => '31910'],
1106 => ['qmNpcIds' => '30431'],
1119 => ['qmNpcIds' => '32540'],
1124 => ['qmNpcIds' => '34772'],
1156 => ['qmNpcIds' => '37687'],
1082 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
952 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
);
public function generate(array $ids = []) : bool
{
$factionQuery = '

View File

@@ -10,41 +10,12 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'holidays';
protected $dbcSourceFiles = ['holidays', 'holidaydescriptions', 'holidaynames'];
private $customData = array(
62 => ['iconString' => 'inv_misc_missilelarge_red' ],
141 => ['iconString' => 'calendar_winterveilstart', 'achievementCatOrId' => 156 ],
181 => ['iconString' => 'calendar_noblegardenstart', 'achievementCatOrId' => 159 ],
201 => ['iconString' => 'calendar_childrensweekstart', 'achievementCatOrId' => 163 ],
283 => ['iconString' => 'inv_jewelry_necklace_21' ],
284 => ['iconString' => 'inv_misc_rune_07' ],
285 => ['iconString' => 'inv_jewelry_amulet_07' ],
301 => ['iconString' => 'calendar_fishingextravaganzastart' ],
321 => ['iconString' => 'calendar_harvestfestivalstart' ],
324 => ['iconString' => 'calendar_hallowsendstart', 'bossCreature' => 23682, 'achievementCatOrId' => 158 ],
327 => ['iconString' => 'calendar_lunarfestivalstart', 'bossCreature' => 15467, 'achievementCatOrId' => 160 ],
335 => ['iconString' => 'calendar_loveintheairstart' ],
341 => ['iconString' => 'calendar_midsummerstart', 'bossCreature' => 25740, 'achievementCatOrId' => 161 ],
353 => ['iconString' => 'spell_nature_eyeofthestorm' ],
372 => ['iconString' => 'calendar_brewfeststart', 'bossCreature' => 23872, 'achievementCatOrId' => 162 ],
374 => ['iconString' => 'calendar_darkmoonfaireelwynnstart' ],
375 => ['iconString' => 'calendar_darkmoonfairemulgorestart' ],
376 => ['iconString' => 'calendar_darkmoonfaireterokkarstart' ],
398 => ['iconString' => 'calendar_piratesdaystart', 'achievementCatOrId' => -3457],
400 => ['iconString' => 'achievement_bg_winsoa' ],
404 => ['iconString' => 'calendar_harvestfestivalstart', 'achievementCatOrId' => 14981],
406 => ['iconString' => 'achievement_boss_lichking' ],
409 => ['iconString' => 'calendar_dayofthedeadstart', 'achievementCatOrId' => -3456],
420 => ['iconString' => 'achievement_bg_winwsg' ],
423 => ['iconString' => 'calendar_loveintheairstart', 'bossCreature' => 36296, 'achievementCatOrId' => 187 ],
424 => ['iconString' => 'calendar_fishingextravaganzastart' ],
);
public function generate(array $ids = []) : bool
{
$query = '

View File

@@ -9,7 +9,7 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'items';
@@ -17,16 +17,6 @@ SqlGen::register(new class extends SetupScript
protected $tblDependencyTC = ['item_template', 'item_template_locale', 'spell_group', 'game_event'];
protected $dbcSourceFiles = ['gemproperties', 'itemdisplayinfo', 'spell', 'glyphproperties', 'durabilityquality', 'durabilitycosts'];
private $customData = array(
33147 => ['class' => 9, 'subClass' => 8], // one stray enchanting recipe .. with a strange icon
7948 => ['itemset' => 221], // v unsure if this should be fixed v
7949 => ['itemset' => 221],
7950 => ['itemset' => 221],
7951 => ['itemset' => 221],
7952 => ['itemset' => 221],
7953 => ['itemset' => 221]
);
private $skill2cat = array(
773 => 11, // inscription
356 => 9, // fishing

View File

@@ -15,18 +15,12 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
protected $command = 'itemset';
protected $tblDependencyAowow = ['spell'];
protected $tblDependencyTC = ['item_template', 'game_event'];
protected $dbcSourceFiles = ['itemset'];
private $customData = array(
221 => ['item1' => 7948, 'item2' => 7949, 'item3' => 7950, 'item4' => 7951, 'item5' => 7952, 'item6' => 7953]
);
private $setToHoliday = array (
761 => 141, // Winterveil
762 => 372, // Brewfest

View File

@@ -9,27 +9,12 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'races';
protected $dbcSourceFiles = ['chrraces', 'charbaseinfo'];
private $customData = array(
null,
['leader' => 29611, 'factionId' => 72, 'startAreaId' => 12],
['leader' => 4949, 'factionId' => 76, 'startAreaId' => 14],
['leader' => 2784, 'factionId' => 47, 'startAreaId' => 1],
['leader' => 7999, 'factionId' => 69, 'startAreaId' => 141],
['leader' => 10181, 'factionId' => 68, 'startAreaId' => 85],
['leader' => 3057, 'factionId' => 81, 'startAreaId' => 215],
['leader' => 7937, 'factionId' => 54, 'startAreaId' => 1],
['leader' => 10540, 'factionId' => 530, 'startAreaId' => 14],
null,
['leader' => 16802, 'factionId' => 911, 'startAreaId' => 3430],
['leader' => 17468, 'factionId' => 930, 'startAreaId' => 3524]
);
public function generate(array $ids = []) : bool
{
/**********/

View File

@@ -9,22 +9,12 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'shapeshiftforms';
protected $dbcSourceFiles = ['spellshapeshiftform'];
private $customData = array(
1 => ['displayIdH' => 8571],
15 => ['displayIdH' => 8571],
5 => ['displayIdH' => 2289],
8 => ['displayIdH' => 2289],
14 => ['displayIdH' => 2289],
27 => ['displayIdH' => 21244],
29 => ['displayIdH' => 20872]
);
public function generate(array $ids = []) : bool
{
DB::Aowow()->query('

View File

@@ -9,34 +9,13 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'skillline';
protected $tblDependencyAowow = ['icons'];
protected $dbcSourceFiles = ['skillline', 'spell', 'skilllineability'];
private $customData = array(
393 => ['professionMask' => 0x0000], // Skinning
171 => ['professionMask' => 0x0001, 'recipeSubClass' => 6, 'specializations' => '28677 28675 28672'], // Alchemy
164 => ['professionMask' => 0x0002, 'recipeSubClass' => 4, 'specializations' => '9788 9787 17041 17040 17039'], // Blacksmithing
185 => ['professionMask' => 0x0004, 'recipeSubClass' => 5], // Cooking
333 => ['professionMask' => 0x0008, 'recipeSubClass' => 8], // Enchanting
202 => ['professionMask' => 0x0010, 'recipeSubClass' => 3, 'specializations' => '20219 20222'], // Engineering
129 => ['professionMask' => 0x0020, 'recipeSubClass' => 7], // First Aid
755 => ['professionMask' => 0x0040, 'recipeSubClass' => 10], // Jewelcrafting
165 => ['professionMask' => 0x0080, 'recipeSubClass' => 1, 'specializations' => '10656 10658 10660'], // Leatherworking
186 => ['professionMask' => 0x0100], // Mining
197 => ['professionMask' => 0x0200, 'recipeSubClass' => 2, 'specializations' => '26798 26801 26797'], // Tailoring
356 => ['professionMask' => 0x0400, 'recipeSubClass' => 9], // Fishing
182 => ['professionMask' => 0x0800], // Herbalism
773 => ['professionMask' => 0x1000, 'recipeSubClass' => 11], // Inscription
785 => ['name_loc0' => 'Pet - Wasp'], // Pet - Wasp
781 => ['name_loc2' => 'Familier - diablosaure exotique'], // Pet - Exotic Devilsaur
758 => ['name_loc6' => 'Mascota: Evento - Control remoto', 'name_loc3' => 'Tier - Ereignis Ferngesteuert', 'categoryId' => 7], // Pet - Event - Remote Control
788 => ['categoryId' => 7], // Pet - Exotic Spirit Beast
);
public function generate(array $ids = []) : bool
{
$baseQuery = '

View File

@@ -9,7 +9,7 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'sounds';
@@ -26,10 +26,6 @@ SqlGen::register(new class extends SetupScript
'material', 'itemgroupsounds', 'itemdisplayinfo', 'weaponimpactsounds', 'itemsubclass', 'weaponswingsounds2' /*, 'sheathesoundlookups' data is redundant with material..? */
);
private $customData = array(
15407 => ['cat' => 10] // UR_Algalon_Summon03 (this is not an item pickup)
);
public function generate(array $ids = []) : bool
{
/*

View File

@@ -46,70 +46,6 @@ SqlGen::register(new class extends SetupScript
' - assembling waypoints from table waypoint_data', TYPE_NPC]
);
private $alphaMapCache = [];
private function alphaMapCheck(int $areaId, array &$set) : bool
{
$file = 'setup/generated/alphaMaps/'.$areaId.'.png';
if (!file_exists($file)) // file does not exist (probably instanced area)
return false;
// invalid and corner cases (literally)
if (!is_array($set) || empty($set['posX']) || empty($set['posY']) || $set['posX'] >= 100 || $set['posY'] >= 100)
{
$set = null;
return true;
}
if (empty($this->alphaMapCache[$areaId]))
$this->alphaMapCache[$areaId] = imagecreatefrompng($file);
// alphaMaps are 1000 x 1000, adapt points [black => valid point]
if (!imagecolorat($this->alphaMapCache[$areaId], $set['posX'] * 10, $set['posY'] * 10))
$set = null;
return true;
}
private function checkCoords(array $points) : array
{
$result = [];
$capitals = array( // capitals take precedence over their surroundings
1497, 1637, 1638, 3487, // Undercity, Ogrimmar, Thunder Bluff, Silvermoon City
1519, 1537, 1657, 3557, // Stormwind City, Ironforge, Darnassus, The Exodar
3703, 4395 // Shattrath City, Dalaran
);
foreach ($points as $res)
{
if ($this->alphaMapCheck($res['areaId'], $res))
{
if (!$res)
continue;
// some rough measure how central the spawn is on the map (the lower the number, the better)
// 0: perfect center; 1: touches a border
$q = abs( (($res['posX'] - 50) / 50) * (($res['posY'] - 50) / 50) );
if (empty($result) || $result[0] > $q)
$result = [$q, $res];
}
else if (in_array($res['areaId'], $capitals)) // capitals (auto-discovered) and no hand-made alphaMap available
return $res;
else if (empty($result)) // add with lowest quality if alpha map is missing
$result = [1.0, $res];
}
// spawn does not really match on a map, but we need at least one result
if (!$result)
{
usort($points, function ($a, $b) { return ($a['dist'] < $b['dist']) ? -1 : 1; });
$result = [1.0, $points[0]];
}
return $result[1];
}
public function generate(array $ids = []) : bool
{
/*********************/
@@ -207,7 +143,7 @@ SqlGen::register(new class extends SetupScript
if (in_array($spawn['map'], [564, 580])) // Black Temple and Sunwell floor offset bullshit
$points[0]['floor']++;
$final = $area ? $points[0] : $this->checkCoords($points);
$final = $area ? $points[0] : Game::checkCoords($points);
}
if ($idx < 5)

View File

@@ -9,18 +9,13 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'titles';
protected $tblDependencyTC = ['quest_template', 'game_event_seasonal_questrelation', 'game_event', 'achievement_reward'];
protected $dbcSourceFiles = ['chartitles'];
private $customData = array(
137 => ['gender' => 2],
138 => ['gender' => 1]
);
private $titleHoliday = array(
137 => 201,
138 => 201,

View File

@@ -9,68 +9,39 @@ if (!CLI)
SqlGen::register(new class extends SetupScript
{
use TrCustomData;
use TrCustomData; // import custom data from DB
protected $command = 'zones';
protected $tblDependencyTC = ['access_requirement'];
protected $dbcSourceFiles = ['worldmaptransforms', 'worldmaparea', 'map', 'mapdifficulty', 'areatable', 'lfgdungeons', 'battlemasterlist'];
private $customData = array(
2257 => ['cuFlags' => 0, 'category' => 0, 'type' => 1], // deeprun tram => type: transit
3698 => ['expansion' => 1], // arenas
3702 => ['expansion' => 1],
3968 => ['expansion' => 1],
4378 => ['expansion' => 2],
4406 => ['expansion' => 2],
2597 => ['maxPlayer' => 40], // is 5 in battlemasterlist ... dafuq?
4710 => ['maxPlayer' => 40],
3456 => ['parentAreaId' => 65, 'parentX' => 87.3, 'parentY' => 51.1], // has no coordinates set in map.dbc
// individual Tempest Keep ships
3849 => ['parentAreaId' => 3523, 'parentX' => 70.5, 'parentY' => 69.6],
3847 => ['parentAreaId' => 3523, 'parentX' => 71.7, 'parentY' => 55.1],
3848 => ['parentAreaId' => 3523, 'parentX' => 74.3, 'parentY' => 57.8],
3845 => ['parentAreaId' => 3523, 'parentX' => 73.5, 'parentY' => 63.7],
// individual Icecrown Citadel wings
4893 => ['parentAreaId' => 4812, 'cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
4894 => ['parentAreaId' => 4812, 'cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
4895 => ['parentAreaId' => 4812, 'cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
4896 => ['parentAreaId' => 4812, 'cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
4897 => ['parentAreaId' => 4812, 'cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
// uncaught unused zones
207 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
208 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
616 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW],
1417 => ['cuFlags' => CUSTOM_EXCLUDE_FOR_LISTVIEW]
);
protected $dbcSourceFiles = ['worldmaptransforms', 'worldmaparea', 'map', 'mapdifficulty', 'areatable', 'lfgdungeons', 'battlemasterlist', 'dungeonmap'];
public function generate(array $ids = []) : bool
{
// base query
DB::Aowow()->query('
REPLACE INTO ?_zones
SELECT
$baseData = DB::Aowow()->query('SELECT
a.id,
IFNULL(wmt.targetMapId, m.id), -- map
m.id, -- mapBak
a.areaTable, -- parentArea
IFNULL(wmt.targetMapId, -- g_zone_categories
IFNULL(wmt.targetMapId, m.id) AS map,
m.id AS mapBak,
a.areaTable AS parentArea,
IFNULL(wmt.targetMapId,
IF(m.areaType = 1, 2,
IF(m.areaType = 2, 3,
IF(m.areaType = 4, 9,
IF(m.isBG = 1, 6,
IF(m.id = 609, 1,
IF(m.id = 571, 10,
IF(m.id = 530, 8, m.id)))))))),
IF(m.id = 530, 8, m.id))))))) AS category,
a.flags,
IF(areaTable <> 0 OR -- cuFlags
(wma.id IS NULL AND pa.areaId IS NULL AND (flags & 0x11000) = 0), ?d, 0),
IF(a.mapId IN (13, 25, 37, 42, 169) OR
(a.mapId IN (0, 1, 530, 571) AND wma.id IS NULL) OR
a.areaTable <> 0 OR
(a.soundAmbience = 0 AND a.mapId IN (0, 1, 530, 571)), ?d, 0) AS cuFlags,
IF(a.flags & 0x01000000, 5, -- g_zone_territories
IF(m.isBG = 1, 4,
IF(m.areaType = 4, 4,
IF(a.flags & 0x00000800, 3,
IF(a.factionGroupMask = 6, 2,
IF(a.factionGroupMask > 0, LOG2(a.factionGroupMask) - 1, 2)))))),
IF(a.factionGroupMask > 0, LOG2(a.factionGroupMask) - 1, 2)))))) AS faction,
m.expansion,
IF(m.areaType = 0, 0, -- g_zone_instancetypes
IF(m.isBG = 1, 4,
@@ -78,27 +49,27 @@ SqlGen::register(new class extends SetupScript
IF(md.modeMask & 0xC, 8,
IF(md.minPl = 10 AND md.maxPL = 25, 7,
IF(m.areaType = 2, 3,
IF(m.areaType = 1 AND md.modeMask & 0x2, 5, 2))))))),
IF(m.areaType = 1 AND md.modeMask & 0x2, 5, 2))))))) AS `type`,
IF (md.minPl = 10 AND md.maxPl = 25, -2,
IFNULL(bm.maxPlayers, IFNULL(md.maxPl, m.maxPlayers))),
0, -- itemLevelN
0, -- itemLevelH
0, -- levelReq
IFNULL(lfgIni.levelLFG, 0), -- levelReqLFG
0, -- levelHeroic
IF(a.flags & 0x8, 1, -- levelMin
IFNULL(bm.maxPlayers, IFNULL(md.maxPl, m.maxPlayers))) AS maxPlayer,
0 AS `itemLevelN`, --
0 AS `itemLevelH`,
0 AS `levelReq`,
IFNULL(lfgIni.levelLFG, 0) AS `levelReqLFG`,
0 AS `levelHeroic`,
IF(a.flags & 0x8, 1,
IFNULL(bm.minLevel,
IFNULL(lfgIni.levelMin,
IFNULL(lfgOpen.levelMin, 0)))),
IF(a.flags & 0x8, ?d, -- levelMax
IFNULL(lfgOpen.levelMin, 0)))) AS `levelMin`,
IF(a.flags & 0x8, ?d,
IFNULL(bm.maxLevel,
IFNULL(lfgIni.levelMax,
IFNULL(lfgOpen.levelMax, 0)))),
"", -- attunements
"", -- heroic attunements
IFNULL(pa.areaId, 0),
IFNULL(pa.posX, 0),
IFNULL(pa.posY, 0),
IFNULL(lfgOpen.levelMax, 0)))) AS `levelMax`,
"" AS `attunementsN`,
"" AS `attunementsH`,
m.parentMapId, -- IFNULL(pa.areaId, 0),
m.parentX, -- IFNULL(pa.posX, 0),
m.parentY, -- IFNULL(pa.posY, 0),
IF(wma.id IS NULL OR m.areaType = 0 OR a.mapId IN (269, 560) OR a.areaTable, a.name_loc0, m.name_loc0),
IF(wma.id IS NULL OR m.areaType = 0 OR a.mapId IN (269, 560) OR a.areaTable, a.name_loc2, m.name_loc2),
IF(wma.id IS NULL OR m.areaType = 0 OR a.mapId IN (269, 560) OR a.areaTable, a.name_loc3, m.name_loc3),
@@ -114,26 +85,6 @@ SqlGen::register(new class extends SetupScript
) md ON md.mapId = m.id
LEFT JOIN
dbc_lfgdungeons lfgOpen ON a.mapId IN (0, 1, 530, 571) AND a.name_loc0 LIKE CONCAT("%", lfgOpen.name_loc0) AND lfgOpen.type = 4
LEFT JOIN (
SELECT
mapId, m.id, `left`, `right`, `top`, `bottom`,
IF((abs(((m.parentY - `right`) * 100 / (`left` - `right`)) - 50)) > abs(((m.parentX - `bottom`) * 100 / (`top` - `bottom`)) - 50),
(abs(((m.parentY - `right`) * 100 / (`left` - `right`)) - 50)),
(abs(((m.parentX - `bottom`) * 100 / (`top` - `bottom`)) - 50))) AS diff,
areaId, -- parentArea
100 - ROUND((m.parentY - `right`) * 100 / (`left` - `right`), 1) as posX,
100 - ROUND((m.parentX - `bottom`) * 100 / (`top` - `bottom`), 1) as posY
FROM
dbc_worldmaparea wma
JOIN
dbc_map m ON m.parentMapId = wma.mapid
WHERE
m.parentMapId IN (0, 1, 530, 571) AND areaId <> 0 AND
m.parentY BETWEEN `right` AND `left` AND
m.parentX BETWEEN bottom AND top
ORDER BY
diff ASC
) pa ON pa.id = m.id AND m.parentMapId > -1 AND m.parentX <> 0 AND m.parentY <> 0 AND m.parentMapId = pa.mapId AND m.parentY BETWEEN pa.`right` AND pa.`left` AND m.parentX BETWEEN pa.bottom AND pa.top
LEFT JOIN (
SELECT
mapId,
@@ -160,10 +111,30 @@ SqlGen::register(new class extends SetupScript
wma.right > wmt.minY AND
wma.top < wmt.maxX AND
wma.bottom > wmt.minX
GROUP BY
a.id
', CUSTOM_EXCLUDE_FOR_LISTVIEW, MAX_LEVEL);
foreach ($baseData as &$bd)
{
if (!in_array($bd['parentMapId'], [0, 1, 530, 571]))
continue;
if ($gPos = Game::worldPosToZonePos($bd['parentMapId'], $bd['parentY'], $bd['parentX']))
{
$pos = Game::checkCoords($gPos);
$bd['parentMapId'] = $pos['areaId'] ?? $gPos[0]['areaId'];
$bd['parentX'] = $pos['posX'] ?? $gPos[0]['posX'];
$bd['parentY'] = $pos['posY'] ?? $gPos[0]['posY'];
}
else
{
$bd['parentMapId'] = 0;
$bd['parentX'] = 0;
$bd['parentY'] = 0;
}
}
DB::Aowow()->query('REPLACE INTO ?_zones VALUES (?a)', $baseData);
// get requirements from world.access_requirement
$zoneReq = DB::World()->select('
SELECT
@@ -205,7 +176,7 @@ SqlGen::register(new class extends SetupScript
$aN[TYPE_ITEM][] = $_;
if ($req['reqItemH'] && ($entries = explode(' ', $req['reqItemH'])))
if ($entries = array_diff($entries, @(array)$aN[TYPE_ITEM]))
if ($entries = array_diff($entries, $aN[TYPE_ITEM] ?? []))
foreach ($entries as $_)
$aH[TYPE_ITEM][] = $_;
@@ -214,7 +185,7 @@ SqlGen::register(new class extends SetupScript
$aN[TYPE_QUEST][] = $_;
if ($req['reqQuestH'] && ($entries = explode(' ', $req['reqQuestH'])))
if ($entries = array_diff($entries, @(array)$aN[TYPE_QUEST]))
if ($entries = array_diff($entries, $aN[TYPE_QUEST] ?? []))
foreach ($entries as $_)
$aH[TYPE_QUEST][] = $_;
@@ -223,7 +194,7 @@ SqlGen::register(new class extends SetupScript
$aN[TYPE_ACHIEVEMENT][] = $_;
if ($req['reqAchievementH'] && ($entries = explode(' ', $req['reqAchievementH'])))
if ($entries = array_diff($entries, @(array)$aN[TYPE_ACHIEVEMENT]))
if ($entries = array_diff($entries, $aN[TYPE_ACHIEVEMENT] ?? []))
foreach ($entries as $_)
$aH[TYPE_ACHIEVEMENT][] = $_;

View File

@@ -0,0 +1,263 @@
DROP TABLE IF EXISTS `aowow_setup_custom_data`;
CREATE TABLE `aowow_setup_custom_data` (
`command` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`entry` int NOT NULL DEFAULT '0' COMMENT 'typeId',
`field` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`value` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`comment` text COLLATE utf8mb4_general_ci,
KEY `aowow_setup_custom_data_command_IDX` (`command`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('zones',2257,'cuFlags','0','Deeprun Tram - make visible'),
('zones',2257,'category','0','Deeprun Tram - Category: Eastern Kingdoms'),
('zones',2257,'type','1','Deeprun Tram - Type: Transit'),
('zones',3698,'expansion','1','Nagrand Arena - Addon: BC'),
('zones',3702,'expansion','1','Blades Edge Arena - Addon: BC'),
('zones',3968,'expansion','1','Ruins of Lordaeron Arena - Addon: BC'),
('zones',4378,'expansion','1','Dalaran Arena - Addon: WotLK'),
('zones',4406,'expansion','1','Ring of Valor Arena - Addon: WotLK'),
('zones',2597,'maxPlayer','40','Alterac Valey - Players: 40 [battlemasterlist.dbc: 5]'),
('zones',4710,'maxPlayer','40','Isle of Conquest - Players: 40 [battlemasterlist.dbc: 5]');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('zones',3849,'parentAreaId','3523','The Mechanar - Parent: Netherstorm [not set in map.dbc]'),
('zones',3849,'parentX','87.3','The Mechanar - Entrance xPos'),
('zones',3849,'parentY','51.1','The Mechanar - Entrance yPos'),
('zones',3847,'parentAreaId','3523','The Botanica - Parent: Netherstorm [not set in map.dbc]'),
('zones',3847,'parentX','71.7','The Botanica - Entrance xPos'),
('zones',3847,'parentY','55.1','The Botanica - Entrance yPos'),
('zones',3848,'parentAreaId','3523','The Arcatraz - Parent: Netherstorm [not set in map.dbc]'),
('zones',3848,'parentX','74.3','The Arcatraz - Entrance xPos'),
('zones',3848,'parentY','57.8','The Arcatraz - Entrance yPos'),
('zones',3845,'parentAreaId','3523','Tempest Keep - Parent: Netherstorm [not set in map.dbc]');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('zones',3845,'parentX','73.5','Tempest Keep - Entrance xPos'),
('zones',3845,'parentY','63.7','Tempest Keep - Entrance yPos'),
('zones',3456,'parentAreaId','65','Naxxramas - Parent: Netherstorm [not set in map.dbc]'),
('zones',3456,'parentX','87.3','Naxxramas - Entrance xPos'),
('zones',3456,'parentY','87.3','Naxxramas - Entrance yPos'),
('zones',4893,'parentAreaId','4812','The Frost Queen''s Lair - Parent: Icecrown Citadel'),
('zones',4894,'parentAreaId','4812','Putricide''s Laboratory [..] - Parent: Icecrown Citadel'),
('zones',4895,'parentAreaId','4812','The Crimson Hall - Parent: Icecrown Citadel'),
('zones',4896,'parentAreaId','4812','The Frozen Throne - Parent: Icecrown Citadel'),
('zones',4897,'parentAreaId','4812','The Sanctum of Blood - Parent: Icecrown Citadel');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('zones',4893,'cuFlags','1073741824','The Frost Queen''s Lair - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('zones',4894,'cuFlags','1073741824','Putricide''s Laboratory [..] - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('achievement',1956,'itemExtra','44738','Higher Learning - item rewarded through gossip'),
('zones',4895,'cuFlags','1073741824','The Crimson Hall - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('titles',137,'gender','2','Matron - female'),
('zones',4896,'cuFlags','1073741824','The Frozen Throne - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('zones',4897,'cuFlags','1073741824','The Sanctum of Blood - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('zones',4076,'cuFlags','1073741824','Reuse Me 7 - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('zones',207,'cuFlags','1073741824','The Great Sea - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('zones',208,'cuFlags','1073741824','Unused Ironcladcove - set: CUSTOM_EXCLUDE_FOR_LISTVIEW');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('zones',2817,'levelMin','74','Crystalsong Forest - missing lfgDungeons entry'),
('zones',1477,'cuFlags','1073741824','The Temple of Atal''Hakkar - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('zones',41,'levelMin','50','Deadwind Pass - missing lfgDungeons entry'),
('zones',41,'levelMax','60','Deadwind Pass - missing lfgDungeons entry'),
('zones',2257,'levelMin','1','Deeprun Tram - missing lfgDungeons entry'),
('zones',2257,'levelMax','80','Deeprun Tram - missing lfgDungeons entry'),
('zones',4298,'category','0','Plaguelands: The Scarlet Enclave - Parent: Eastern Kingdoms'),
('zones',4298,'levelMin','55','Plaguelands: The Scarlet Enclave - missing lfgDungeons entry'),
('zones',4298,'levelMax','58','Plaguelands: The Scarlet Enclave - missing lfgDungeons entry'),
('zones',493,'levelMin','15','Moonglade - missing lfgDungeons entry');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('zones',493,'levelMax','60','Moonglade - missing lfgDungeons entry'),
('zones',2817,'levelMax','76','Crystalsong Forest - missing lfgDungeons entry'),
('zones',4742,'levelMin','77','Hrothgar''s Landing - missing lfgDungeons entry'),
('zones',4742,'levelMax','80','Hrothgar''s Landing - missing lfgDungeons entry'),
('classes',8,'roles','4','Mage - rngDPS'),
('classes',2,'roles','11','Paladin - mleDPS + Tank + Heal'),
('classes',3,'roles','4','Hunter - rngDPS'),
('classes',4,'roles','2','Rogue - mleDPS'),
('classes',5,'roles','5','Priest - rngDPS + Heal'),
('classes',6,'roles','10','Death Knight - mleDPS + Tank');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('classes',7,'roles','7','Shaman - mleDPS + rngDPS + Heal'),
('classes',8,'roles','4','Mage - rngDPS'),
('classes',8,'roles','4','Mage - rngDPS'),
('classes',8,'roles','4','Mage - rngDPS'),
('currencies',103,'cap','10000','Arena Points - cap'),
('currencies',104,'cap','75000','Honor Points - cap'),
('currencies',1,'cuFlags','1073741824','Currency Token Test Token 1 - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('currencies',2,'cuFlags','1073741824','Currency Token Test Token 2 - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('currencies',4,'cuFlags','1073741824','Currency Token Test Token 3 - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('currencies',22,'cuFlags','1073741824','Birmingham Test Item 3 - set: CUSTOM_EXCLUDE_FOR_LISTVIEW');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('currencies',141,'cuFlags','1073741824','zzzOLDDaily Quest Faction Token - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('currencies',1,'category','3','Currency Token Test Token 1 - category: unused'),
('currencies',2,'category','3','Currency Token Test Token 2 - category: unused'),
('currencies',4,'category','3','Currency Token Test Token 3 - category: unused'),
('currencies',22,'category','3','Birmingham Test Item 3 - category: unused'),
('currencies',141,'category','3','zzzOLDDaily Quest Faction Token - category: unused'),
('factions',68,'qmNpcIds','33555','Undercity - set Quartermaster'),
('factions',47,'qmNpcIds','33310','Ironforge - set Quartermaster'),
('factions',69,'qmNpcIds','33653','Darnassus - set Quartermaster'),
('factions',72,'qmNpcIds','33307','Stormwind - set Quartermaster');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('factions',76,'qmNpcIds','33553','Orgrimmar - set Quartermaster'),
('factions',81,'qmNpcIds','33556','Thunder Bluff - set Quartermaster'),
('factions',922,'qmNpcIds','16528','Tranquillien - set Quartermaster'),
('factions',930,'qmNpcIds','33657','Exodar - set Quartermaster'),
('factions',932,'qmNpcIds','19321','The Aldor - set Quartermaster'),
('factions',933,'qmNpcIds','20242 23007','The Consortium - set Quartermaster'),
('factions',935,'qmNpcIds','21432','The Sha''tar - set Quartermaster'),
('factions',941,'qmNpcIds','20241','The Mag''har - set Quartermaster'),
('factions',942,'qmNpcIds','17904','Cenarion Expedition - set Quartermaster'),
('factions',946,'qmNpcIds','17657','Honor Hold - set Quartermaster');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('factions',947,'qmNpcIds','17585','Thrallmar - set Quartermaster'),
('factions',970,'qmNpcIds','18382','Sporeggar - set Quartermaster'),
('factions',978,'qmNpcIds','20240','Kurenai - set Quartermaster'),
('factions',989,'qmNpcIds','21643','Keepers of Time - set Quartermaster'),
('factions',1011,'qmNpcIds','21655','Lower City - set Quartermaster'),
('factions',1012,'qmNpcIds','23159','Ashtongue Deathsworn - set Quartermaster'),
('factions',1037,'qmNpcIds','32773 32564','Alliance Vanguard - set Quartermaster'),
('factions',1038,'qmNpcIds','23428','Ogri''la - set Quartermaster'),
('factions',1052,'qmNpcIds','32774 32565','Horde Expedition - set Quartermaster'),
('factions',1073,'qmNpcIds','31916 32763','The Kalu''ak - set Quartermaster');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('factions',1090,'qmNpcIds','32287','Kirin Tor - set Quartermaster'),
('factions',1091,'qmNpcIds','32533','The Wyrmrest Accord - set Quartermaster'),
('factions',1094,'qmNpcIds','34881','The Silver Covenant - set Quartermaster'),
('factions',1105,'qmNpcIds','31910','The Oracles - set Quartermaster'),
('factions',1106,'qmNpcIds','30431','Argent Crusade - set Quartermaster'),
('factions',1119,'qmNpcIds','32540','The Sons of Hodir - set Quartermaster'),
('factions',1124,'qmNpcIds','34772','The Sunreavers - set Quartermaster'),
('factions',1156,'qmNpcIds','37687','The Ashen Verdict - set Quartermaster'),
('factions',1082,'cuFlags','1073741824','REUSE - set: CUSTOM_EXCLUDE_FOR_LISTVIEW'),
('factions',952,'cuFlags','1073741824','Test Faction 3 - set: CUSTOM_EXCLUDE_FOR_LISTVIEW');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('titles',138,'gender','1','Patron - male'),
('sounds',15407,'cat','10','UR_Algalon_Summon03 - is not an item pickup'),
('shapeshiftforms',1,'displayIdH','8571','Cat Form - spellshapeshiftform.dbc missing displayId'),
('shapeshiftforms',15,'displayIdH','8571','Creature - Cat - spellshapeshiftform.dbc missing displayId'),
('shapeshiftforms',5,'displayIdH','2289','Bear Form - spellshapeshiftform.dbc missing displayId'),
('shapeshiftforms',8,'displayIdH','2289','Dire Bear Form - spellshapeshiftform.dbc missing displayId'),
('shapeshiftforms',14,'displayIdH','2289','Creature - Bear - spellshapeshiftform.dbc missing displayId'),
('shapeshiftforms',27,'displayIdH','21244','Flight Form, Epic - spellshapeshiftform.dbc missing displayId'),
('shapeshiftforms',29,'displayIdH','20872','Flight Form - spellshapeshiftform.dbc missing displayId'),
('races',1,'leader','29611','Human - King Varian Wrynn');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('races',1,'factionId','72','Human - Stormwind'),
('races',1,'startAreaId','12','Human - Elwynn Forest'),
('races',2,'leader','4949','Orc - Thrall'),
('races',2,'factionId','76','Orc - Orgrimmar'),
('races',2,'startAreaId','14','Orc - Durotar'),
('races',3,'leader','2784','Dwarf - King Magni Bronzebeard'),
('races',3,'factionId','47','Dwarf - Ironforge'),
('races',3,'startAreaId','1','Dwarf - Dun Morogh'),
('races',4,'leader','7999','Night Elf - Tyrande Whisperwind'),
('races',4,'factionId','69','Night Elf - Darnassus');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('races',4,'startAreaId','141','Night Elf - Teldrassil'),
('races',5,'leader','10181','Undead - Lady Sylvanas Windrunner'),
('races',5,'factionId','68','Undead - Undercity'),
('races',5,'startAreaId','85','Undead - Tirisfal Glades'),
('races',6,'leader','3057','Tauren - Cairne Bloodhoof'),
('races',6,'factionId','81','Tauren - Thunder Bluff'),
('races',6,'startAreaId','215','Tauren - Mulgore'),
('races',7,'leader','7937','Gnome - High Tinker Mekkatorque'),
('races',7,'factionId','54','Gnome - Gnomeregan Exiles'),
('races',7,'startAreaId','1','Gnome - Dun Morogh');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('races',8,'leader','10540','Troll - Vol''jin'),
('races',8,'factionId','530','Troll - Darkspear Trolls'),
('races',8,'startAreaId','14','Troll - Durotar'),
('races',10,'leader','16802','Blood Elf - Lor''themar Theron'),
('races',10,'factionId','911','Blood Elf - Silvermoon City'),
('races',10,'startAreaId','3430','Blood Elf - Eversong Woods'),
('races',11,'leader','17468','Draenei - Prophet Velen'),
('races',11,'factionId','930','Draenei - Exodar'),
('races',11,'startAreaId','3524','Draenei - Azuremyst Isle'),
('holidays',62,'iconString','inv_misc_missilelarge_red','Fireworks Spectacular');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('holidays',141,'iconString','calendar_winterveilstart','Feast of Winter Veil'),
('holidays',181,'iconString','calendar_noblegardenstart','Noblegarden'),
('holidays',201,'iconString','calendar_childrensweekstart','Children''s Week'),
('holidays',283,'iconString','inv_jewelry_necklace_21','Call to Arms: Alterac Valley'),
('holidays',284,'iconString','inv_misc_rune_07','Call to Arms: Warsong Gulch'),
('holidays',285,'iconString','inv_jewelry_amulet_07','Call to Arms: Arathi Basin'),
('holidays',301,'iconString','calendar_fishingextravaganzastart','Stranglethorn Fishing Extravaganza'),
('holidays',321,'iconString','calendar_harvestfestivalstart','Harvest Festival'),
('holidays',324,'iconString','calendar_hallowsendstart','Hallow''s End'),
('holidays',327,'iconString','calendar_lunarfestivalstart','Lunar Festival');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('holidays',335,'iconString','calendar_loveintheairstart','Love is in the Air'),
('holidays',341,'iconString','calendar_midsummerstart','Midsummer Fire Festival'),
('holidays',353,'iconString','spell_nature_eyeofthestorm','Call to Arms: Eye of the Storm'),
('holidays',372,'iconString','calendar_brewfeststart','Brewfest'),
('holidays',374,'iconString','calendar_darkmoonfaireelwynnstart','Darkmoon Faire'),
('holidays',375,'iconString','calendar_darkmoonfairemulgorestart','Darkmoon Faire'),
('holidays',376,'iconString','calendar_darkmoonfaireterokkarstart','Darkmoon Faire'),
('holidays',398,'iconString','calendar_piratesdaystart','Pirates'' Day'),
('holidays',400,'iconString','achievement_bg_winsoa','Call to Arms: Strand of the Ancients'),
('holidays',404,'iconString','calendar_harvestfestivalstart','Pilgrim''s Bounty');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('holidays',406,'iconString','achievement_boss_lichking','Wrath of the Lich King Launch'),
('holidays',409,'iconString','calendar_dayofthedeadstart','Day of the Dead'),
('holidays',420,'iconString','achievement_bg_winwsg','Call to Arms: Isle of Conquest'),
('holidays',423,'iconString','calendar_loveintheairstart','Love is in the Air'),
('holidays',424,'iconString','calendar_fishingextravaganzastart','Kalu''ak Fishing Derby'),
('holidays',141,'achievementCatOrId','156','Feast of Winter Veil - Category: Feast of Winter Veil'),
('holidays',181,'achievementCatOrId','159','Noblegarden - Category: Noblegarden'),
('holidays',201,'achievementCatOrId','163','Children''s Week - Category: Children''s Week'),
('holidays',324,'achievementCatOrId','158','Hallow''s End - Category: Hallow''s End'),
('holidays',327,'achievementCatOrId','160','Lunar Festival - Category: Lunar Festival');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('holidays',341,'achievementCatOrId','161','Midsummer Fire Festival - Category: Midsummer Fire Festival'),
('holidays',372,'achievementCatOrId','162','Brewfest - Category: Brewfest'),
('holidays',398,'achievementCatOrId','-3457','Pirates'' Day - Achievement: The Captain''s Booty'),
('holidays',404,'achievementCatOrId','14981','Pilgrim''s Bounty - Category: Pilgrim''s Bounty'),
('holidays',409,'achievementCatOrId','-3456','Day of the Dead - Achievement: Dead Man''s Party'),
('holidays',423,'achievementCatOrId','187','Love is in the Air - Category: Love is in the Air'),
('holidays',324,'bossCreature','23682','Hallow''s End - Headless Horseman'),
('holidays',327,'bossCreature','15467','Lunar Festival - Omen'),
('holidays',341,'bossCreature','25740','Midsummer Fire Festival - Ahune'),
('holidays',372,'bossCreature','23872','Brewfest - Coren Direbrew');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('holidays',423,'bossCreature','36296','Love is in the Air - Apothecary Hummel'),
('skillline',197,'professionMask','512','Tailoring'),
('skillline',186,'professionMask','256','Mining'),
('skillline',165,'specializations','10656 10658 10660','Leatherworking'),
('skillline',165,'recipeSubClass','1','Leatherworking'),
('skillline',165,'professionMask','128','Leatherworking'),
('skillline',755,'recipeSubClass','10','Jewelcrafting'),
('skillline',755,'professionMask','64','Jewelcrafting'),
('skillline',129,'recipeSubClass','7','First Aid'),
('skillline',129,'professionMask','32','First Aid');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('skillline',202,'specializations','20219 20222','Engineering'),
('skillline',202,'recipeSubClass','3','Engineering'),
('skillline',202,'professionMask','16','Engineering'),
('skillline',333,'recipeSubClass','8','Enchanting'),
('skillline',333,'professionMask','8','Enchanting'),
('skillline',185,'recipeSubClass','5','Cooking'),
('skillline',185,'professionMask','4','Cooking'),
('skillline',164,'specializations','9788 9787 17041 17040 17039','Blacksmithing'),
('skillline',164,'recipeSubClass','4','Blacksmithing'),
('skillline',164,'professionMask','2','Blacksmithing');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('skillline',171,'specializations','28677 28675 28672','Alchemy'),
('skillline',171,'recipeSubClass','6','Alchemy'),
('skillline',171,'professionMask','1','Alchemy'),
('skillline',393,'professionMask','0','Skinning'),
('skillline',197,'recipeSubClass','2','Tailoring'),
('skillline',197,'specializations','26798 26801 26797','Tailoring'),
('skillline',356,'professionMask','1024','Fishing'),
('skillline',356,'recipeSubClass','9','Fishing'),
('skillline',182,'professionMask','2048','Herbalism'),
('skillline',773,'professionMask','4096','Inscription');
INSERT INTO aowow_setup_custom_data (command,entry,field,value,comment) VALUES
('skillline',773,'recipeSubClass','11','Inscription'),
('skillline',785,'name_loc0','Pet - Wasp','Pet - Wasp'),
('skillline',781,'name_loc2','Familier - diablosaure exotique','Pet - Exotic Devlisaur'),
('skillline',758,'name_loc6','Mascota: Evento - Control remoto','Pet - Event - Remote Control'),
('skillline',758,'name_loc3','Tier - Ereignis Ferngesteuert','Pet - Event - Remote Control'),
('skillline',758,'categoryId','7','Pet - Event - Remote Control - bring in line with other pets'),
('skillline',788,'categoryId','7','Pet - Exotic Spirit Beast - bring in line with other pets'),
('item',33147,'class','9','Formula: Enchant Cloak - Subtlety - Class: Recipes'),
('item',33147,'subClass','8','Formula: Enchant Cloak - Subtlety - Subclass: Enchanting');

View File

@@ -0,0 +1 @@
DROP TABLE IF EXISTS `aowow_sourcestrings`;