mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
drop usage of holidayIds (as far as possible) the obvious change is, that all events are now refenreced by a positive eventId. (?event=375 will probably become ?event=5) Comments fixed malformed db-table. It can now hold negative typeIds. applying this commit will drop any comments related to events without holiday added gain of SiteReputation for comment-replies resyncing dependencies of 'game_event' is required
235 lines
11 KiB
PHP
235 lines
11 KiB
PHP
<?php
|
|
|
|
if (!defined('AOWOW_REVISION'))
|
|
die('illegal access');
|
|
|
|
if (!CLI)
|
|
die('not in cli mode');
|
|
|
|
|
|
/* deps:
|
|
* item_template
|
|
* locales_item
|
|
* spell_group
|
|
* game_event
|
|
*/
|
|
|
|
$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]
|
|
);
|
|
|
|
$reqDBC = ['gemproperties', 'itemdisplayinfo', 'spell', 'glyphproperties', 'durabilityquality', 'durabilitycosts'];
|
|
|
|
function items(array $ids = [])
|
|
{
|
|
$baseQuery = '
|
|
SELECT
|
|
it.entry,
|
|
class, class as classBak,
|
|
subclass, subclass AS subClassBak,
|
|
IFNULL(sg.id, 0) AS subSubClass,
|
|
name, name_loc2, name_loc3, name_loc6, name_loc8,
|
|
displayid,
|
|
Quality,
|
|
Flags, FlagsExtra,
|
|
BuyCount, BuyPrice, SellPrice,
|
|
0 AS repairPrice,
|
|
InventoryType AS slot, InventoryType AS slotBak,
|
|
AllowableClass, AllowableRace,
|
|
ItemLevel,
|
|
RequiredLevel,
|
|
RequiredSkill, RequiredSkillRank,
|
|
requiredspell,
|
|
requiredhonorrank,
|
|
RequiredCityRank,
|
|
RequiredReputationFaction,
|
|
RequiredReputationRank,
|
|
maxcount,
|
|
0 AS cuFlags,
|
|
0 AS model,
|
|
stackable,
|
|
ContainerSlots,
|
|
stat_type1, stat_value1,
|
|
stat_type2, stat_value2,
|
|
stat_type3, stat_value3,
|
|
stat_type4, stat_value4,
|
|
stat_type5, stat_value5,
|
|
stat_type6, stat_value6,
|
|
stat_type7, stat_value7,
|
|
stat_type8, stat_value8,
|
|
stat_type9, stat_value9,
|
|
stat_type10, stat_value10,
|
|
ScalingStatDistribution,
|
|
ScalingStatValue,
|
|
dmg_min1, dmg_max1, dmg_type1,
|
|
dmg_min2, dmg_max2, dmg_type2,
|
|
delay,
|
|
armor, ArmorDamageModifier,
|
|
block,
|
|
holy_res, fire_res, nature_res, frost_res, shadow_res, arcane_res,
|
|
ammo_type,
|
|
RangedModRange,
|
|
spellid_1, spelltrigger_1, spellcharges_1, spellppmRate_1, spellcooldown_1, spellcategory_1, spellcategorycooldown_1,
|
|
spellid_2, spelltrigger_2, spellcharges_2, spellppmRate_2, spellcooldown_2, spellcategory_2, spellcategorycooldown_2,
|
|
spellid_3, spelltrigger_3, spellcharges_3, spellppmRate_3, spellcooldown_3, spellcategory_3, spellcategorycooldown_3,
|
|
spellid_4, spelltrigger_4, spellcharges_4, spellppmRate_4, spellcooldown_4, spellcategory_4, spellcategorycooldown_4,
|
|
spellid_5, spelltrigger_5, spellcharges_5, spellppmRate_5, spellcooldown_5, spellcategory_5, spellcategorycooldown_5,
|
|
bonding,
|
|
it.description, description_loc2, description_loc3, description_loc6, description_loc8,
|
|
PageText,
|
|
LanguageID,
|
|
startquest,
|
|
lockid,
|
|
IF(RandomProperty > 0, RandomProperty, -RandomSuffix) AS randomEnchant,
|
|
itemset,
|
|
MaxDurability,
|
|
area,
|
|
Map,
|
|
BagFamily,
|
|
TotemCategory,
|
|
socketColor_1, socketContent_1,
|
|
socketColor_2, socketContent_2,
|
|
socketColor_3, socketContent_3,
|
|
socketBonus,
|
|
GemProperties,
|
|
RequiredDisenchantSkill,
|
|
DisenchantID,
|
|
duration,
|
|
ItemLimitCategory,
|
|
IFNULL(ge.eventEntry, 0),
|
|
ScriptName,
|
|
FoodType,
|
|
0 AS gemEnchantmentId,
|
|
minMoneyLoot, maxMoneyLoot,
|
|
flagsCustom
|
|
FROM
|
|
item_template it
|
|
LEFT JOIN
|
|
locales_item li ON li.entry = it.entry
|
|
LEFT JOIN
|
|
spell_group sg ON sg.spell_id = it.spellid_1 AND it.class = 0 AND it.subclass = 2 AND sg.id IN (1, 2)
|
|
LEFT JOIN
|
|
game_event ge ON ge.holiday = it.HolidayId AND it.HolidayId > 0
|
|
{
|
|
WHERE
|
|
ct.entry IN (?a)
|
|
}
|
|
LIMIT
|
|
?d, ?d';
|
|
|
|
$offset = 0;
|
|
while ($items = DB::World()->select($baseQuery, $ids ?: DBSIMPLE_SKIP, $offset, SqlGen::$stepSize))
|
|
{
|
|
CLISetup::log(' * sets '.($offset + 1).' - '.($offset + count($items)));
|
|
|
|
$offset += SqlGen::$stepSize;
|
|
|
|
foreach ($items as $item)
|
|
DB::Aowow()->query('REPLACE INTO ?_items VALUES (?a)', array_values($item));
|
|
}
|
|
|
|
|
|
// merge with gemProperties
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_gemproperties gp SET i.gemEnchantmentId = gp.enchantmentId, i.gemColorMask = gp.colorMask WHERE i.gemColorMask = gp.id');
|
|
|
|
// get modelString
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_itemdisplayinfo idi SET i.model = IF(idi.leftModelName = "", idi.rightModelName, idi.leftModelName) WHERE i.displayId = idi.id');
|
|
|
|
// unify slots: Robes => Chest; Ranged (right) => Ranged
|
|
DB::Aowow()->query('UPDATE ?_items SET slot = 15 WHERE slotbak = 26');
|
|
DB::Aowow()->query('UPDATE ?_items SET slot = 5 WHERE slotbak = 20');
|
|
|
|
// custom sub-classes
|
|
DB::Aowow()->query('
|
|
UPDATE ?_items SET subclass = IF(
|
|
slotbak = 4, -8, IF( -- shirt
|
|
slotbak = 19, -7, IF( -- tabard
|
|
slotbak = 16, -6, IF( -- cloak
|
|
slotbak = 23, -5, IF( -- held in offhand
|
|
slotbak = 12, -4, IF( -- trinket
|
|
slotbak = 2, -3, IF( -- amulet
|
|
slotbak = 11, -2, subClassBak -- ring
|
|
))))))) WHERE class = 4');
|
|
|
|
// move alchemist stones to trinkets (Armor)
|
|
DB::Aowow()->query('UPDATE ?_items SET class = 4, subClass = -4 WHERE classBak = 7 AND subClassBak = 11 AND slotBak = 12');
|
|
|
|
// mark keys as key (if not quest items)
|
|
DB::Aowow()->query('UPDATE ?_items SET class = 13, subClass = 0 WHERE classBak IN (0, 15) AND bagFamily & 0x100');
|
|
|
|
// set subSubClass for Glyphs (major/minor)
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_spell s, dbc_glyphproperties gp SET i.subSubClass = IF(gp.typeFlags & 0x1, 2, 1) WHERE i.spellId1 = s.id AND s.effect1MiscValue = gp.id AND i.classBak = 16');
|
|
|
|
// filter misc(class:15) junk(subclass:0) to appropriate categories
|
|
|
|
// assign pets and mounts to category
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_spell s SET subClass = IF(effect1AuraId <> 78, 2, IF(effect2AuraId = 207 OR effect3AuraId = 207 OR (s.id <> 65917 AND effect2AuraId = 4 AND effect3Id = 77), -7, 5)) WHERE s.id = spellId2 AND class = 15 AND spellId1 IN (483, 55884)');
|
|
|
|
// more corner cases (mounts that are not actualy learned)
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_spell s SET i.subClass = -7 WHERE (effect1Id = 64 OR (effect1AuraId = 78 AND effect2AuraId = 4 AND effect3Id = 77) OR effect1AuraId = 207 OR effect2AuraId = 207 OR effect3AuraId = 207) AND s.id = i.spellId1 AND i.class = 15 AND i.subClass = 5');
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_spell s SET i.subClass = 5 WHERE s.effect1AuraId = 78 AND s.id = i.spellId1 AND i.class = 15 AND i.subClass = 0');
|
|
|
|
// move some permanent enchantments to own category
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_spell s SET i.class = 0, i.subClass = 6 WHERE s.effect1Id = 53 AND s.id = i.spellId1 AND i.class = 15');
|
|
|
|
// move temporary enchantments to own category
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_spell s SET i.subClass = -3 WHERE s.effect1Id = 54 AND s.id = i.spellId1 AND i.class = 0 AND i.subClassBak = 8');
|
|
|
|
// move armor tokens to own category
|
|
DB::Aowow()->query('UPDATE ?_items SET subClass = -2 WHERE quality = 4 AND class = 15 AND subClassBak = 0 AND requiredClass AND (requiredClass & 0x5FF) <> 0x5FF');
|
|
|
|
// move some junk to holiday if it requires one
|
|
DB::Aowow()->query('UPDATE ?_items SET subClass = 3 WHERE classBak = 15 AND subClassBak = 0 AND eventId <> 0');
|
|
|
|
// move misc items that start quests to class: quest (except Sayges scrolls for consistency)
|
|
DB::Aowow()->query('UPDATE ?_items SET class = 12 WHERE classBak = 15 AND startQuest <> 0 AND name_loc0 NOT LIKE "sayge\'s fortune%"');
|
|
|
|
// move perm. enchantments into appropriate cat/subcat
|
|
DB::Aowow()->query('UPDATE ?_items i, dbc_spell s SET i.class = 0, i.subClass = 6 WHERE s.Id = i.spellId1 AND s.effect1Id = 53 AND i.classBak = 12');
|
|
|
|
// move some generic recipes into appropriate sub-categories
|
|
$skillz = array(
|
|
773 => 11, // inscription
|
|
356 => 9, // fishing
|
|
186 => 12, // mining
|
|
185 => 5, // cooking
|
|
171 => 6 // alchemy
|
|
|
|
);
|
|
foreach ($skillz as $skill => $cat)
|
|
DB::Aowow()->query('UPDATE ?_items SET subClass = ?d WHERE classBak = 9 AND subClassBak = 0 AND requiredSkill = ?d', $cat, $skill);
|
|
|
|
// calculate durabilityCosts
|
|
DB::Aowow()->query('
|
|
UPDATE
|
|
?_items i
|
|
JOIN
|
|
dbc_durabilityquality dq ON dq.id = ((i.quality + 1) * 2)
|
|
JOIN
|
|
dbc_durabilitycosts dc ON dc.id = i.itemLevel
|
|
SET
|
|
i.repairPrice = (durability* dq.mod * IF(i.classBak = 2,
|
|
CASE i.subClassBak
|
|
WHEN 0 THEN w0 WHEN 1 THEN w1 WHEN 2 THEN w2 WHEN 3 THEN w3 WHEN 4 THEN w4
|
|
WHEN 5 THEN w5 WHEN 6 THEN w6 WHEN 7 THEN w7 WHEN 8 THEN w8 WHEN 10 THEN w10
|
|
WHEN 11 THEN w11 WHEN 12 THEN w12 WHEN 13 THEN w13 WHEN 14 THEN w14 WHEN 15 THEN w15
|
|
WHEN 16 THEN w16 WHEN 17 THEN w17 WHEN 18 THEN w18 WHEN 19 THEN w19 WHEN 20 THEN w20
|
|
END,
|
|
CASE i.subClassBak
|
|
WHEN 1 THEN a1 WHEN 2 THEN a2 WHEN 3 THEN a3 WHEN 4 THEN a4 WHEN 6 THEN a6
|
|
END
|
|
))
|
|
WHERE
|
|
durability > 0 AND ((classBak = 4 AND subClassBak IN (1, 2, 3, 4, 6)) OR (classBak = 2 AND subClassBak <> 9))');
|
|
|
|
return true;
|
|
}
|
|
|
|
?>
|