mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/DBC: 4.3.4 structure updates
This commit is contained in:
@@ -0,0 +1 @@
|
||||
ALTER TABLE `item_template_addon` DROP `BuyCount`;
|
||||
@@ -62,6 +62,9 @@ struct ItemSparseEntry
|
||||
uint32 Quality; // 1
|
||||
uint32 Flags; // 2
|
||||
uint32 Flags2; // 3
|
||||
float Unk430_1;
|
||||
float Unk430_2;
|
||||
uint32 BuyCount;
|
||||
uint32 BuyPrice; // 4
|
||||
uint32 SellPrice; // 5
|
||||
uint32 InventoryType; // 6
|
||||
@@ -109,7 +112,6 @@ struct ItemSparseEntry
|
||||
uint32 RandomProperty; // 108
|
||||
uint32 RandomSuffix; // 109
|
||||
uint32 ItemSet; // 110
|
||||
uint32 MaxDurability; // 111
|
||||
uint32 Area; // 112
|
||||
uint32 Map; // 113
|
||||
uint32 BagFamily; // 114
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
const char Itemfmt[]="niiiiiii";
|
||||
const char ItemCurrencyCostfmt[]="xn";
|
||||
const char ItemSparsefmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisssssiiiiiiiiiiiiiiiiiiiiiiifiiifii";
|
||||
const char ItemSparsefmt[]="niiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisssssiiiiiiiiiiiiiiiiiiiiiifiiifii";
|
||||
const char ItemExtendedCostEntryfmt[]="nxxiiiiiiiiiiiixiiiiiiiiiixxxxx";
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1269,21 +1269,21 @@ struct LFGDungeonEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* name[16]; // 1-17 Name lang
|
||||
uint32 minlevel; // 18
|
||||
uint32 maxlevel; // 19
|
||||
uint32 reclevel; // 20
|
||||
uint32 recminlevel; // 21
|
||||
uint32 recmaxlevel; // 22
|
||||
int32 map; // 23
|
||||
uint32 difficulty; // 24
|
||||
//uint32 unk; // 25
|
||||
uint32 type; // 26
|
||||
//uint32 unk2; // 27
|
||||
//char* unk3; // 28
|
||||
uint32 expansion; // 29
|
||||
//uint32 unk4; // 30
|
||||
uint32 grouptype; // 31
|
||||
//char* desc; // 32 Description
|
||||
uint32 minlevel; // 2
|
||||
uint32 maxlevel; // 3
|
||||
uint32 reclevel; // 4
|
||||
uint32 recminlevel; // 5
|
||||
uint32 recmaxlevel; // 6
|
||||
int32 map; // 7
|
||||
uint32 difficulty; // 8
|
||||
//uint32 unk; // 9
|
||||
uint32 type; // 10
|
||||
//uint32 unk2; // 11
|
||||
//char* unk3; // 12
|
||||
uint32 expansion; // 13
|
||||
//uint32 unk4; // 14
|
||||
uint32 grouptype; // 15
|
||||
//char* desc; // 16 Description
|
||||
// Helpers
|
||||
uint32 Entry() const { return ID + (type << 24); }
|
||||
};
|
||||
@@ -1850,7 +1850,8 @@ struct SpellPowerEntry
|
||||
uint32 ManaCostPercentage; // 3 m_manaCostPct
|
||||
uint32 manaPerSecond; // 4 m_manaPerSecond
|
||||
//uint32 PowerDisplayId; // 5 m_powerDisplayID - id from PowerDisplay.dbc, new in 3.1
|
||||
//uint32 unk1; // 6 4.0.0
|
||||
//uint32 unk1; // 6 4.0.0
|
||||
//float unk2; // 7 4.3.0
|
||||
};
|
||||
|
||||
struct SpellRuneCostEntry
|
||||
@@ -2216,6 +2217,9 @@ struct WorldMapAreaEntry
|
||||
int32 virtual_map_id; // 8 -1 (map_id have correct map) other: virtual map where zone show (map_id - where zone in fact internally)
|
||||
// int32 dungeonMap_id; // 9 pointer to DungeonMap.dbc (owerride x1, x2, y1, y2 coordinates)
|
||||
// uint32 parentMapID; // 10
|
||||
|
||||
// uint32 minRecommendedLevel; // 12 Minimum recommended level displayed on world map
|
||||
// uint32 maxRecommendedLevel; // 13 Maximum recommended level displayed on world map
|
||||
};
|
||||
|
||||
#define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4
|
||||
|
||||
@@ -87,7 +87,7 @@ const char ItemLimitCategoryEntryfmt[]="nxii";
|
||||
const char ItemRandomPropertiesfmt[]="nxiiixxs";
|
||||
const char ItemRandomSuffixfmt[]="nsxiiiiiiiiii";
|
||||
const char ItemSetEntryfmt[]="dsiiiiiiiiiixxxxxxxiiiiiiiiiiiiiiiiii";
|
||||
const char LFGDungeonEntryfmt[]="nxiiiiiiixixxixixx";
|
||||
const char LFGDungeonEntryfmt[]="nxiiiiiiixixxixixxxxx";
|
||||
const char LiquidTypefmt[]="nxxixixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx";
|
||||
const char PhaseEntryfmt[]="nsi";
|
||||
@@ -109,7 +109,7 @@ const char ScalingStatDistributionfmt[]="niiiiiiiiiiiiiiiiiiiixi";
|
||||
const char ScalingStatValuesfmt[]="iniiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||
const char SkillLinefmt[]="nisxixi";
|
||||
const char SkillLineAbilityfmt[]="niiiixxiiiiixx";
|
||||
const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
const char SpellCastTimefmt[]="nixx";
|
||||
const char SpellCategoriesEntryfmt[]="diiiiii";
|
||||
const char SpellDifficultyfmt[]="niiii";
|
||||
@@ -129,7 +129,7 @@ const char SpellReagentsEntryfmt[]="diiiiiiiiiiiiiiii";
|
||||
const char SpellScalingEntryfmt[]="diiiiffffffffffi";
|
||||
const char SpellTotemsEntryfmt[]="niiii";
|
||||
const char SpellTargetRestrictionsEntryfmt[]="nxiiii";
|
||||
const char SpellPowerEntryfmt[]="diiiixx";
|
||||
const char SpellPowerEntryfmt[]="diiiixxx";
|
||||
const char SpellInterruptsEntryfmt[]="dixixi";
|
||||
const char SpellEquippedItemsEntryfmt[]="diii";
|
||||
const char SpellAuraOptionsEntryfmt[]="niiii";
|
||||
@@ -154,7 +154,7 @@ const char TotemCategoryEntryfmt[]="nxii";
|
||||
const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifiixx";
|
||||
const char VehicleSeatEntryfmt[]="niiffffffffffiiiiiifffffffiiifffiiiiiiiffiiiiixxxxxxxxxxxxxxxxxxxx";
|
||||
const char WMOAreaTableEntryfmt[]="niiixxxxxiixxxx";
|
||||
const char WorldMapAreaEntryfmt[]="xinxffffixxx";
|
||||
const char WorldMapAreaEntryfmt[]="xinxffffixxxxx";
|
||||
const char WorldMapOverlayEntryfmt[]="nxiiiixxxxxxxxx";
|
||||
const char WorldSafeLocsEntryfmt[]="nifffx";
|
||||
|
||||
|
||||
@@ -2191,6 +2191,89 @@ uint32 FillItemArmor(uint32 itemlevel, uint32 itemClass, uint32 itemSubclass, ui
|
||||
return uint32(shield->Value[quality] + 0.5f);
|
||||
}
|
||||
|
||||
uint32 FillMaxDurability(uint32 itemClass, uint32 itemSubClass, uint32 inventoryType, uint32 quality, uint32 itemLevel)
|
||||
{
|
||||
if (itemClass != ITEM_CLASS_ARMOR && itemClass != ITEM_CLASS_WEAPON)
|
||||
return 0;
|
||||
|
||||
static float const qualityMultipliers[MAX_ITEM_QUALITY] =
|
||||
{
|
||||
1.0f, 1.0f, 1.0f, 1.17f, 1.37f, 1.68f, 0.0f, 0.0f
|
||||
};
|
||||
|
||||
static float const armorMultipliers[MAX_INVTYPE] =
|
||||
{
|
||||
0.00f, // INVTYPE_NON_EQUIP
|
||||
0.59f, // INVTYPE_HEAD
|
||||
0.00f, // INVTYPE_NECK
|
||||
0.59f, // INVTYPE_SHOULDERS
|
||||
0.00f, // INVTYPE_BODY
|
||||
1.00f, // INVTYPE_CHEST
|
||||
0.35f, // INVTYPE_WAIST
|
||||
0.75f, // INVTYPE_LEGS
|
||||
0.49f, // INVTYPE_FEET
|
||||
0.35f, // INVTYPE_WRISTS
|
||||
0.35f, // INVTYPE_HANDS
|
||||
0.00f, // INVTYPE_FINGER
|
||||
0.00f, // INVTYPE_TRINKET
|
||||
0.00f, // INVTYPE_WEAPON
|
||||
1.00f, // INVTYPE_SHIELD
|
||||
0.00f, // INVTYPE_RANGED
|
||||
0.00f, // INVTYPE_CLOAK
|
||||
0.00f, // INVTYPE_2HWEAPON
|
||||
0.00f, // INVTYPE_BAG
|
||||
0.00f, // INVTYPE_TABARD
|
||||
1.00f, // INVTYPE_ROBE
|
||||
0.00f, // INVTYPE_WEAPONMAINHAND
|
||||
0.00f, // INVTYPE_WEAPONOFFHAND
|
||||
0.00f, // INVTYPE_HOLDABLE
|
||||
0.00f, // INVTYPE_AMMO
|
||||
0.00f, // INVTYPE_THROWN
|
||||
0.00f, // INVTYPE_RANGEDRIGHT
|
||||
0.00f, // INVTYPE_QUIVER
|
||||
0.00f, // INVTYPE_RELIC
|
||||
};
|
||||
|
||||
static float const weaponMultipliers[MAX_ITEM_SUBCLASS_WEAPON] =
|
||||
{
|
||||
0.89f, // ITEM_SUBCLASS_WEAPON_AXE
|
||||
1.03f, // ITEM_SUBCLASS_WEAPON_AXE2
|
||||
0.77f, // ITEM_SUBCLASS_WEAPON_BOW
|
||||
0.77f, // ITEM_SUBCLASS_WEAPON_GUN
|
||||
0.89f, // ITEM_SUBCLASS_WEAPON_MACE
|
||||
1.03f, // ITEM_SUBCLASS_WEAPON_MACE2
|
||||
1.03f, // ITEM_SUBCLASS_WEAPON_POLEARM
|
||||
0.89f, // ITEM_SUBCLASS_WEAPON_SWORD
|
||||
1.03f, // ITEM_SUBCLASS_WEAPON_SWORD2
|
||||
0.00f, // ITEM_SUBCLASS_WEAPON_Obsolete
|
||||
1.03f, // ITEM_SUBCLASS_WEAPON_STAFF
|
||||
0.00f, // ITEM_SUBCLASS_WEAPON_EXOTIC
|
||||
0.00f, // ITEM_SUBCLASS_WEAPON_EXOTIC2
|
||||
0.64f, // ITEM_SUBCLASS_WEAPON_FIST_WEAPON
|
||||
0.00f, // ITEM_SUBCLASS_WEAPON_MISCELLANEOUS
|
||||
0.64f, // ITEM_SUBCLASS_WEAPON_DAGGER
|
||||
0.64f, // ITEM_SUBCLASS_WEAPON_THROWN
|
||||
0.00f, // ITEM_SUBCLASS_WEAPON_SPEAR
|
||||
0.77f, // ITEM_SUBCLASS_WEAPON_CROSSBOW
|
||||
0.64f, // ITEM_SUBCLASS_WEAPON_WAND
|
||||
0.64f, // ITEM_SUBCLASS_WEAPON_FISHING_POLE
|
||||
};
|
||||
|
||||
float levelPenalty = 1.0f;
|
||||
if (itemLevel <= 28)
|
||||
levelPenalty = 0.966f - float(28u - itemLevel) * 1.0f / 54.0f;
|
||||
|
||||
if (itemClass == ITEM_CLASS_ARMOR)
|
||||
{
|
||||
if (inventoryType > INVTYPE_ROBE)
|
||||
return 0;
|
||||
|
||||
return 5 * uint32(23.0f * qualityMultipliers[quality] * armorMultipliers[inventoryType] * levelPenalty + 0.5f);
|
||||
}
|
||||
|
||||
return 5 * uint32(17.0f * qualityMultipliers[quality] * weaponMultipliers[itemSubClass] * levelPenalty + 0.5f);
|
||||
};
|
||||
|
||||
void FillDisenchantFields(uint32* disenchantID, uint32* requiredDisenchantSkill, ItemTemplate const& itemTemplate)
|
||||
{
|
||||
*disenchantID = 0;
|
||||
@@ -2255,7 +2338,7 @@ void ObjectMgr::LoadItemTemplates()
|
||||
itemTemplate.Quality = sparse->Quality;
|
||||
itemTemplate.Flags = sparse->Flags;
|
||||
itemTemplate.Flags2 = sparse->Flags2;
|
||||
itemTemplate.BuyCount = 1;
|
||||
itemTemplate.BuyCount = std::max(sparse->BuyCount, 1u);
|
||||
itemTemplate.BuyPrice = sparse->BuyPrice;
|
||||
itemTemplate.SellPrice = sparse->SellPrice;
|
||||
itemTemplate.InventoryType = db2Data->InventoryType;
|
||||
@@ -2315,7 +2398,7 @@ void ObjectMgr::LoadItemTemplates()
|
||||
itemTemplate.RandomProperty = sparse->RandomProperty;
|
||||
itemTemplate.RandomSuffix = sparse->RandomSuffix;
|
||||
itemTemplate.ItemSet = sparse->ItemSet;
|
||||
itemTemplate.MaxDurability = sparse->MaxDurability;
|
||||
itemTemplate.MaxDurability = FillMaxDurability(db2Data->Class, db2Data->SubClass, sparse->Quality, sparse->InventoryType, sparse->ItemLevel);
|
||||
itemTemplate.Area = sparse->Area;
|
||||
itemTemplate.Map = sparse->Map;
|
||||
itemTemplate.BagFamily = sparse->BagFamily;
|
||||
@@ -2463,7 +2546,9 @@ void ObjectMgr::LoadItemTemplates()
|
||||
itemTemplate.RandomProperty = fields[109].GetInt32();
|
||||
itemTemplate.RandomSuffix = fields[110].GetInt32();
|
||||
itemTemplate.ItemSet = fields[111].GetUInt32();
|
||||
itemTemplate.MaxDurability = fields[112].GetUInt32();
|
||||
itemTemplate.MaxDurability = FillMaxDurability(itemTemplate.Class, itemTemplate.SubClass,
|
||||
itemTemplate.Quality, itemTemplate.InventoryType, itemTemplate.ItemLevel);
|
||||
|
||||
itemTemplate.Area = fields[113].GetUInt32();
|
||||
itemTemplate.Map = fields[114].GetUInt32();
|
||||
itemTemplate.BagFamily = fields[115].GetUInt32();
|
||||
@@ -2525,7 +2610,7 @@ void ObjectMgr::LoadItemTemplateAddon()
|
||||
uint32 oldMSTime = getMSTime();
|
||||
uint32 count = 0;
|
||||
|
||||
QueryResult result = WorldDatabase.Query("SELECT Id, BuyCount, FoodType, MinMoneyLoot, MaxMoneyLoot, SpellPPMChance FROM item_template_addon");
|
||||
QueryResult result = WorldDatabase.Query("SELECT Id, FoodType, MinMoneyLoot, MaxMoneyLoot, SpellPPMChance FROM item_template_addon");
|
||||
if (result)
|
||||
{
|
||||
do
|
||||
@@ -2545,9 +2630,9 @@ void ObjectMgr::LoadItemTemplateAddon()
|
||||
buyCount = 1;
|
||||
}
|
||||
|
||||
uint8 foodType = fields[2].GetUInt8();
|
||||
uint32 minMoneyLoot = fields[3].GetUInt32();
|
||||
uint32 maxMoneyLoot = fields[4].GetUInt32();
|
||||
uint8 foodType = fields[1].GetUInt8();
|
||||
uint32 minMoneyLoot = fields[2].GetUInt32();
|
||||
uint32 maxMoneyLoot = fields[3].GetUInt32();
|
||||
if (minMoneyLoot > maxMoneyLoot)
|
||||
{
|
||||
sLog->outErrorDb("Minimum money loot specified in `item_template_addon` for item %u was greater than maximum amount, swapping.", itemId);
|
||||
@@ -2555,11 +2640,10 @@ void ObjectMgr::LoadItemTemplateAddon()
|
||||
}
|
||||
|
||||
ItemTemplate& itemTemplate = _itemTemplateStore[itemId];
|
||||
itemTemplate.BuyCount = buyCount;
|
||||
itemTemplate.FoodType = foodType;
|
||||
itemTemplate.MinMoneyLoot = minMoneyLoot;
|
||||
itemTemplate.MaxMoneyLoot = maxMoneyLoot;
|
||||
itemTemplate.SpellPPMRate = fields[5].GetFloat();
|
||||
itemTemplate.SpellPPMRate = fields[4].GetFloat();
|
||||
++count;
|
||||
} while (result->NextRow());
|
||||
}
|
||||
@@ -2650,7 +2734,7 @@ void ObjectMgr::LoadItemSetNames()
|
||||
if (setEntry->itemId[i])
|
||||
itemSetItems.insert(setEntry->itemId[i]);
|
||||
}
|
||||
|
||||
|
||||
// 0 1 2
|
||||
QueryResult result = WorldDatabase.Query("SELECT `entry`, `name`, `InventoryType` FROM `item_set_names`");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user