mirror of
https://github.com/araxiaonline/TrinityCore2.git
synced 2026-06-18 22:09:40 -04:00
Merge branch '4.x' of github.com:TrinityCore/TrinityCore into 4.x
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
build/
|
||||
build*/
|
||||
.directory
|
||||
.mailmap
|
||||
*.orig
|
||||
|
||||
@@ -737,7 +737,6 @@ CREATE TABLE `character_pet` (
|
||||
`slot` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`curhealth` int(10) unsigned NOT NULL DEFAULT '1',
|
||||
`curmana` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`curhappiness` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`savetime` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`abdata` text,
|
||||
PRIMARY KEY (`id`),
|
||||
@@ -1034,6 +1033,10 @@ CREATE TABLE `character_stats` (
|
||||
`maxpower5` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`maxpower6` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`maxpower7` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`maxpower8` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`maxpower9` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`maxpower10` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`maxpower11` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`strength` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`agility` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`stamina` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
@@ -1160,6 +1163,10 @@ CREATE TABLE `characters` (
|
||||
`power5` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`power6` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`power7` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`power8` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`power9` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`power10` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`power11` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`latency` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`speccount` tinyint(3) unsigned NOT NULL DEFAULT '1',
|
||||
`activespec` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE `character_stats`
|
||||
ADD COLUMN `maxpower8` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `maxpower7`,
|
||||
ADD COLUMN `maxpower9` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `maxpower8`,
|
||||
ADD COLUMN `maxpower10` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `maxpower9`,
|
||||
ADD COLUMN `maxpower11` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `maxpower10`;
|
||||
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE `characters`
|
||||
ADD COLUMN `power8` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `power7`,
|
||||
ADD COLUMN `power9` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `power8`,
|
||||
ADD COLUMN `power10` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `power9`,
|
||||
ADD COLUMN `power11` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `power10`;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `character_pet` DROP COLUMN `curhappiness`;
|
||||
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE `character_stats`
|
||||
DROP COLUMN `maxpower6`,
|
||||
DROP COLUMN `maxpower7`,
|
||||
DROP COLUMN `maxpower8`,
|
||||
DROP COLUMN `maxpower9`,
|
||||
DROP COLUMN `maxpower10`,
|
||||
DROP COLUMN `maxpower11`;
|
||||
@@ -0,0 +1,9 @@
|
||||
ALTER TABLE `characters`
|
||||
DROP COLUMN `power6`,
|
||||
DROP COLUMN `power7`,
|
||||
DROP COLUMN `power8`,
|
||||
DROP COLUMN `power9`,
|
||||
DROP COLUMN `power10`,
|
||||
DROP COLUMN `power11`,
|
||||
DROP COLUMN `ammoId`,
|
||||
ADD COLUMN `guildId` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `grantableLevels`;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `corpse` DROP COLUMN `guildId`;
|
||||
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE `characters`
|
||||
DROP COLUMN `todayHonorPoints`,
|
||||
DROP COLUMN `yesterdayHonorPoints`,
|
||||
DROP COLUMN `knownCurrencies`,
|
||||
CHANGE COLUMN `arenaPoints` `conquestPoints` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `taxi_path`;
|
||||
@@ -0,0 +1,38 @@
|
||||
ALTER TABLE `quest_template` ADD COLUMN `RequiredClasses` smallint(5) unsigned NOT NULL default '0' AFTER `Type`;
|
||||
|
||||
UPDATE `quest_template`
|
||||
SET `RequiredClasses` = `RequiredClasses`|
|
||||
CASE `SkillOrClassMask`
|
||||
WHEN -1 THEN 1 -- warrior
|
||||
WHEN -2 THEN 2 -- paladin
|
||||
WHEN -3 THEN 4 -- hunter
|
||||
WHEN -4 THEN 8 -- rogue
|
||||
WHEN -5 THEN 16 -- priest
|
||||
WHEN -6 THEN 32 -- dk
|
||||
WHEN -7 THEN 64 -- shaman
|
||||
WHEN -8 THEN 128 -- mage
|
||||
WHEN -9 THEN 256 -- warlock
|
||||
WHEN -11 THEN 1024 -- druid
|
||||
ELSE 0
|
||||
END
|
||||
WHERE `SkillOrClassMask` < 0;
|
||||
|
||||
UPDATE `quest_template`
|
||||
SET `RequiredClasses` = `RequiredClasses`|
|
||||
CASE `ZoneOrSort`
|
||||
WHEN -81 THEN 1 -- warrior
|
||||
WHEN -141 THEN 2 -- paladin
|
||||
WHEN -261 THEN 4 -- hunter
|
||||
WHEN -162 THEN 8 -- rogue
|
||||
WHEN -262 THEN 16 -- priest
|
||||
WHEN -372 THEN 32 -- dk
|
||||
WHEN -82 THEN 64 -- shaman
|
||||
WHEN -161 THEN 128 -- mage
|
||||
WHEN -61 THEN 256 -- warlock
|
||||
WHEN -263 THEN 1024 -- druid
|
||||
ELSE 0
|
||||
END
|
||||
WHERE `ZoneOrSort` < 0;
|
||||
|
||||
UPDATE `quest_template` SET `SkillOrClassMask`=0 WHERE `SkillOrClassMask`<0;
|
||||
ALTER TABLE `quest_template` CHANGE COLUMN `SkillOrClassMask` `RequiredSkill` smallint(5) unsigned NOT NULL default '0' AFTER `RequiredRaces`;
|
||||
@@ -0,0 +1 @@
|
||||
UPDATE `quest_template` SET `RequiredClasses`=0 WHERE `entry`=8249; -- Junkboxes Needed
|
||||
@@ -0,0 +1,4 @@
|
||||
-- re-guid
|
||||
DELETE FROM `creature` WHERE `guid`=1022681 OR (`guid`=48191 AND `id`=18069);
|
||||
INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES
|
||||
(48191, 18069, 530, 1, 1, 0, 0, -714.823, 7931.65, 58.8672, 4.3693, 300, 0, 0, 60720, 29330, 0, 0, 0, 0);
|
||||
@@ -0,0 +1,177 @@
|
||||
-- Naming
|
||||
ALTER TABLE `quest_template`
|
||||
CHANGE `entry` `Id` mediumint(8) UNSIGNED NOT NULL default '0',
|
||||
CHANGE `QuestLevel` `Level` smallint(3) NOT NULL DEFAULT '1',
|
||||
CHANGE `RequiredSkill` `RequiredSkillId` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
|
||||
CHANGE `RequiredSkillValue` `RequiredSkillPoints` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
|
||||
CHANGE `RepObjectiveFaction` `RequiredFactionId1` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
|
||||
CHANGE `RepObjectiveFaction2` `RequiredFactionId2` smallint(5) UNSIGNED NOT NULL DEFAULT '0',
|
||||
CHANGE `RepObjectiveValue` `RequiredFactionValue1` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `RepObjectiveValue2` `RequiredFactionValue2` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `QuestFlags` `Flags` int(10) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `SpecialFlags` `SpecialFlags` tinyint(3) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `CharTitleId` `RewardTitleId` tinyint(3) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `PlayersSlain` `RequiredPlayerKills` tinyint(3) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `BonusTalents` `RewardTalents` tinyint(3) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewardArenaPoints` `RewardArenaPoints` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `NextQuestInChain` `NextQuestIdChain` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewXPId` `RewardXPId` tinyint(2) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `SrcItemId` `SourceItemId` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `SrcItemCount` `SourceItemCount` tinyint(3) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `SrcSpell` `SourceSpellId` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemId1` `RequiredItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemId2` `RequiredItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemId3` `RequiredItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemId4` `RequiredItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemId5` `RequiredItemId5` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemId6` `RequiredItemId6` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemCount1` `RequiredItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemCount2` `RequiredItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemCount3` `RequiredItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemCount4` `RequiredItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemCount5` `RequiredItemCount5` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqItemCount6` `RequiredItemCount6` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceId1` `RequiredSourceItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceId2` `RequiredSourceItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceId3` `RequiredSourceItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceId4` `RequiredSourceItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceCount1` `RequiredSourceItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceCount2` `RequiredSourceItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceCount3` `RequiredSourceItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSourceCount4` `RequiredSourceItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOId1` `RequiredNpcOrGo1` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOId2` `RequiredNpcOrGo2` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOId3` `RequiredNpcOrGo3` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOId4` `RequiredNpcOrGo4` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOCount1` `RequiredNpcOrGoCount1` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOCount2` `RequiredNpcOrGoCount2` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOCount3` `RequiredNpcOrGoCount3` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqCreatureOrGOCount4` `RequiredNpcOrGoCount4` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSpellCast1` `RequiredSpellCast1` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSpellCast2` `RequiredSpellCast2` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSpellCast3` `RequiredSpellCast3` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `ReqSpellCast4` `RequiredSpellCast4` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemId1` `RewardChoiceItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemId2` `RewardChoiceItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemId3` `RewardChoiceItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemId4` `RewardChoiceItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemId5` `RewardChoiceItemId5` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemId6` `RewardChoiceItemId6` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemCount1` `RewardChoiceItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemCount2` `RewardChoiceItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemCount3` `RewardChoiceItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemCount4` `RewardChoiceItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemCount5` `RewardChoiceItemCount5` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewChoiceItemCount6` `RewardChoiceItemCount6` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemId1` `RewardItemId1` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemId2` `RewardItemId2` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemId3` `RewardItemId3` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemId4` `RewardItemId4` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemCount1` `RewardItemCount1` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemCount2` `RewardItemCount2` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemCount3` `RewardItemCount3` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewItemCount4` `RewardItemCount4` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewRepFaction1` `RewardFactionId1` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
|
||||
CHANGE `RewRepFaction2` `RewardFactionId2` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
|
||||
CHANGE `RewRepFaction3` `RewardFactionId3` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
|
||||
CHANGE `RewRepFaction4` `RewardFactionId4` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
|
||||
CHANGE `RewRepFaction5` `RewardFactionId5` smallint(5) UNSIGNED default '0' NOT NULL comment 'faction id from Faction.dbc in this case',
|
||||
CHANGE `RewRepValueId1` `RewardFactionValueId1` mediumint(6) default '0' NOT NULL,
|
||||
CHANGE `RewRepValueId2` `RewardFactionValueId2` mediumint(6) default '0' NOT NULL,
|
||||
CHANGE `RewRepValueId3` `RewardFactionValueId3` mediumint(6) default '0' NOT NULL,
|
||||
CHANGE `RewRepValueId4` `RewardFactionValueId4` mediumint(6) default '0' NOT NULL,
|
||||
CHANGE `RewRepValueId5` `RewardFactionValueId5` mediumint(6) default '0' NOT NULL,
|
||||
CHANGE `RewRepValue1` `RewardFactionValueIdOverride1` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `RewRepValue2` `RewardFactionValueIdOverride2` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `RewRepValue3` `RewardFactionValueIdOverride3` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `RewRepValue4` `RewardFactionValueIdOverride4` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `RewRepValue5` `RewardFactionValueIdOverride5` mediumint(9) default '0' NOT NULL,
|
||||
CHANGE `RewHonorAddition` `RewardHonor` int(10) default '0' NOT NULL,
|
||||
CHANGE `RewHonorMultiplier` `RewardHonorMultiplier` float default '1' NOT NULL,
|
||||
CHANGE `RewOrReqMoney` `RewardOrRequiredMoney` int(11) default '0' NOT NULL,
|
||||
CHANGE `RewMoneyMaxLevel` `RewardMoneyMaxLevel` int(10) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewSpell` `RewardSpell` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewSpellCast` `RewardSpellCast` int(11) default '0' NOT NULL,
|
||||
CHANGE `RewMailTemplateId` `RewardMailTemplateId` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `RewMailDelaySecs` `RewardMailDelay` int(11) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `PointOpt` `PointOption` mediumint(8) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `DetailsEmote1` `DetailsEmote1` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `IncompleteEmote` `EmoteOnIncomplete` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `CompleteEmote` `EmoteOnComplete` smallint(5) UNSIGNED default '0' NOT NULL,
|
||||
CHANGE `unk0` `Unknown0` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0';
|
||||
|
||||
-- Order
|
||||
ALTER TABLE `quest_template` CHANGE COLUMN `Level` `Level` SMALLINT(3) NOT NULL DEFAULT '1' AFTER `Method`,
|
||||
CHANGE COLUMN `ZoneOrSort` `ZoneOrSort` SMALLINT(6) NOT NULL DEFAULT '0' AFTER `MaxLevel`,
|
||||
CHANGE COLUMN `SuggestedPlayers` `SuggestedPlayers` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `Type`,
|
||||
CHANGE COLUMN `LimitTime` `LimitTime` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SuggestedPlayers`,
|
||||
CHANGE COLUMN `RequiredFactionId2` `RequiredFactionId2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredFactionId1`,
|
||||
CHANGE COLUMN `RequiredMaxRepFaction` `RequiredMaxRepFaction` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredMinRepFaction`,
|
||||
CHANGE COLUMN `RewardOrRequiredMoney` `RewardOrRequiredMoney` INT(11) NOT NULL DEFAULT '0' AFTER `RewardXPId`,
|
||||
CHANGE COLUMN `RewardMoneyMaxLevel` `RewardMoneyMaxLevel` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardOrRequiredMoney`,
|
||||
CHANGE COLUMN `RewardSpell` `RewardSpell` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardMoneyMaxLevel`,
|
||||
CHANGE COLUMN `RewardSpellCast` `RewardSpellCast` INT(11) NOT NULL DEFAULT '0' AFTER `RewardSpell`,
|
||||
CHANGE COLUMN `RewardHonor` `RewardHonor` INT(10) NOT NULL DEFAULT '0' AFTER `RewardSpellCast`,
|
||||
CHANGE COLUMN `RewardHonorMultiplier` `RewardHonorMultiplier` FLOAT NOT NULL DEFAULT '1' AFTER `RewardHonor`,
|
||||
CHANGE COLUMN `RewardMailTemplateId` `RewardMailTemplateId` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardHonorMultiplier`,
|
||||
CHANGE COLUMN `RewardMailDelay` `RewardMailDelay` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardMailTemplateId`,
|
||||
CHANGE COLUMN `Flags` `Flags` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SourceSpellId`,
|
||||
CHANGE COLUMN `SpecialFlags` `SpecialFlags` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `Flags`,
|
||||
CHANGE COLUMN `RewardTitleId` `RewardTitleId` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `SpecialFlags`,
|
||||
CHANGE COLUMN `RequiredPlayerKills` `RequiredPlayerKills` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardTitleId`,
|
||||
CHANGE COLUMN `RewardTalents` `RewardTalents` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredPlayerKills`,
|
||||
CHANGE COLUMN `RewardArenaPoints` `RewardArenaPoints` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardTalents`,
|
||||
CHANGE COLUMN `RewardItemId1` `RewardItemId1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardArenaPoints`,
|
||||
CHANGE COLUMN `RewardItemId2` `RewardItemId2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId1`,
|
||||
CHANGE COLUMN `RewardItemId3` `RewardItemId3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId2`,
|
||||
CHANGE COLUMN `RewardItemId4` `RewardItemId4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId3`,
|
||||
CHANGE COLUMN `RewardItemCount1` `RewardItemCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemId4`,
|
||||
CHANGE COLUMN `RewardItemCount2` `RewardItemCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemCount1`,
|
||||
CHANGE COLUMN `RewardItemCount3` `RewardItemCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemCount2`,
|
||||
CHANGE COLUMN `RewardItemCount4` `RewardItemCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardItemCount3`,
|
||||
CHANGE COLUMN `Title` `Title` TEXT NULL DEFAULT NULL AFTER `PointOption`,
|
||||
CHANGE COLUMN `Objectives` `Objectives` TEXT NULL DEFAULT NULL AFTER `Title`,
|
||||
CHANGE COLUMN `Details` `Details` TEXT NULL DEFAULT NULL AFTER `Objectives`,
|
||||
CHANGE COLUMN `EndText` `EndText` TEXT NULL DEFAULT NULL AFTER `Details`,
|
||||
CHANGE COLUMN `OfferRewardText` `OfferRewardText` TEXT NULL DEFAULT NULL AFTER `EndText`,
|
||||
CHANGE COLUMN `RequestItemsText` `RequestItemsText` TEXT NULL DEFAULT NULL AFTER `OfferRewardText`,
|
||||
CHANGE COLUMN `CompletedText` `CompletedText` TEXT NULL DEFAULT NULL AFTER `RequestItemsText`,
|
||||
CHANGE COLUMN `RequiredNpcOrGo1` `RequiredNpcOrGo1` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `CompletedText`,
|
||||
CHANGE COLUMN `RequiredNpcOrGo2` `RequiredNpcOrGo2` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo1`,
|
||||
CHANGE COLUMN `RequiredNpcOrGo3` `RequiredNpcOrGo3` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo2`,
|
||||
CHANGE COLUMN `RequiredNpcOrGo4` `RequiredNpcOrGo4` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo3`,
|
||||
CHANGE COLUMN `RequiredNpcOrGoCount1` `RequiredNpcOrGoCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGo4`,
|
||||
CHANGE COLUMN `RequiredNpcOrGoCount2` `RequiredNpcOrGoCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount1`,
|
||||
CHANGE COLUMN `RequiredNpcOrGoCount3` `RequiredNpcOrGoCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount2`,
|
||||
CHANGE COLUMN `RequiredNpcOrGoCount4` `RequiredNpcOrGoCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount3`,
|
||||
CHANGE COLUMN `RequiredSourceItemId1` `RequiredSourceItemId1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredNpcOrGoCount4`,
|
||||
CHANGE COLUMN `RequiredSourceItemId2` `RequiredSourceItemId2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId1`,
|
||||
CHANGE COLUMN `RequiredSourceItemId3` `RequiredSourceItemId3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId2`,
|
||||
CHANGE COLUMN `RequiredSourceItemId4` `RequiredSourceItemId4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId3`,
|
||||
CHANGE COLUMN `RequiredSourceItemCount1` `RequiredSourceItemCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemId4`,
|
||||
CHANGE COLUMN `RequiredSourceItemCount2` `RequiredSourceItemCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount1`,
|
||||
CHANGE COLUMN `RequiredSourceItemCount3` `RequiredSourceItemCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount2`,
|
||||
CHANGE COLUMN `RequiredSourceItemCount4` `RequiredSourceItemCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount3`,
|
||||
CHANGE COLUMN `RequiredItemId1` `RequiredItemId1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSourceItemCount4`,
|
||||
CHANGE COLUMN `RequiredItemId2` `RequiredItemId2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId1`,
|
||||
CHANGE COLUMN `RequiredItemId3` `RequiredItemId3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId2`,
|
||||
CHANGE COLUMN `RequiredItemId4` `RequiredItemId4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId3`,
|
||||
CHANGE COLUMN `RequiredItemId5` `RequiredItemId5` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId4`,
|
||||
CHANGE COLUMN `RequiredItemId6` `RequiredItemId6` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId5`,
|
||||
CHANGE COLUMN `RequiredItemCount1` `RequiredItemCount1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemId6`,
|
||||
CHANGE COLUMN `RequiredItemCount2` `RequiredItemCount2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount1`,
|
||||
CHANGE COLUMN `RequiredItemCount3` `RequiredItemCount3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount2`,
|
||||
CHANGE COLUMN `RequiredItemCount4` `RequiredItemCount4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount3`,
|
||||
CHANGE COLUMN `RequiredItemCount5` `RequiredItemCount5` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount4`,
|
||||
CHANGE COLUMN `RequiredItemCount6` `RequiredItemCount6` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount5`,
|
||||
CHANGE COLUMN `RequiredSpellCast1` `RequiredSpellCast1` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount6`,
|
||||
CHANGE COLUMN `RequiredSpellCast2` `RequiredSpellCast2` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast1`,
|
||||
CHANGE COLUMN `RequiredSpellCast3` `RequiredSpellCast3` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast2`,
|
||||
CHANGE COLUMN `RequiredSpellCast4` `RequiredSpellCast4` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast3`,
|
||||
CHANGE COLUMN `Unknown0` `Unknown0` TINYINT(2) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredSpellCast4`,
|
||||
CHANGE COLUMN `ObjectiveText1` `ObjectiveText1` TEXT NULL DEFAULT NULL AFTER `Unknown0`,
|
||||
CHANGE COLUMN `ObjectiveText2` `ObjectiveText2` TEXT NULL DEFAULT NULL AFTER `ObjectiveText1`,
|
||||
CHANGE COLUMN `ObjectiveText3` `ObjectiveText3` TEXT NULL DEFAULT NULL AFTER `ObjectiveText2`,
|
||||
CHANGE COLUMN `ObjectiveText4` `ObjectiveText4` TEXT NULL DEFAULT NULL AFTER `ObjectiveText3`;
|
||||
|
||||
-- Note: These two ALTER could have been merged into one
|
||||
@@ -0,0 +1 @@
|
||||
UPDATE `quest_template` SET `RequiredRaces`=0 WHERE `entry`=14171;
|
||||
@@ -0,0 +1,17 @@
|
||||
DROP TABLE IF EXISTS `item_script_names`;
|
||||
CREATE TABLE `item_script_names` (
|
||||
`Id` int(10) unsigned not null,
|
||||
`ScriptName` varchar(64) not null,
|
||||
PRIMARY KEY(`Id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
INSERT INTO `item_script_names`
|
||||
SELECT
|
||||
`item_template`.`entry` AS `Id`,
|
||||
`item_template`.`ScriptName` AS `ScriptName`
|
||||
FROM
|
||||
`item_template`
|
||||
WHERE
|
||||
length(`item_template`.`ScriptName`)>0;
|
||||
|
||||
ALTER TABLE `item_template` DROP `ScriptName`;
|
||||
@@ -0,0 +1,48 @@
|
||||
ALTER TABLE `item_template`
|
||||
ADD `stat_unk1_1` int(11) not null default 0 AFTER `stat_value1`,
|
||||
ADD `stat_unk2_1` int(11) not null default 0 AFTER `stat_unk1_1`,
|
||||
ADD `stat_unk1_2` int(11) not null default 0 AFTER `stat_value2`,
|
||||
ADD `stat_unk2_2` int(11) not null default 0 AFTER `stat_unk1_2`,
|
||||
ADD `stat_unk1_3` int(11) not null default 0 AFTER `stat_value3`,
|
||||
ADD `stat_unk2_3` int(11) not null default 0 AFTER `stat_unk1_3`,
|
||||
ADD `stat_unk1_4` int(11) not null default 0 AFTER `stat_value4`,
|
||||
ADD `stat_unk2_4` int(11) not null default 0 AFTER `stat_unk1_4`,
|
||||
ADD `stat_unk1_5` int(11) not null default 0 AFTER `stat_value5`,
|
||||
ADD `stat_unk2_5` int(11) not null default 0 AFTER `stat_unk1_5`,
|
||||
ADD `stat_unk1_6` int(11) not null default 0 AFTER `stat_value6`,
|
||||
ADD `stat_unk2_6` int(11) not null default 0 AFTER `stat_unk1_6`,
|
||||
ADD `stat_unk1_7` int(11) not null default 0 AFTER `stat_value7`,
|
||||
ADD `stat_unk2_7` int(11) not null default 0 AFTER `stat_unk1_7`,
|
||||
ADD `stat_unk1_8` int(11) not null default 0 AFTER `stat_value8`,
|
||||
ADD `stat_unk2_8` int(11) not null default 0 AFTER `stat_unk1_8`,
|
||||
ADD `stat_unk1_9` int(11) not null default 0 AFTER `stat_value9`,
|
||||
ADD `stat_unk2_9` int(11) not null default 0 AFTER `stat_unk1_9`,
|
||||
ADD `stat_unk1_10` int(11) not null default 0 AFTER `stat_value10`,
|
||||
ADD `stat_unk2_10` int(11) not null default 0 AFTER `stat_unk1_10`,
|
||||
DROP `StatsCount`,
|
||||
DROP `ScalingStatValue`,
|
||||
CHANGE `dmg_type1` `DamageType` tinyint(3) unsigned not null default 0 AFTER `ScalingStatDistribution`,
|
||||
DROP `dmg_min1`,
|
||||
DROP `dmg_max1`,
|
||||
DROP `dmg_min2`,
|
||||
DROP `dmg_max2`,
|
||||
DROP `dmg_type2`,
|
||||
DROP `armor`,
|
||||
DROP `holy_res`,
|
||||
DROP `fire_res`,
|
||||
DROP `nature_res`,
|
||||
DROP `frost_res`,
|
||||
DROP `shadow_res`,
|
||||
DROP `arcane_res`,
|
||||
DROP `ammo_type`,
|
||||
DROP `spellppmRate_1`,
|
||||
DROP `spellppmRate_2`,
|
||||
DROP `spellppmRate_3`,
|
||||
DROP `spellppmRate_4`,
|
||||
DROP `spellppmRate_5`,
|
||||
DROP `block`,
|
||||
DROP `RequiredDisenchantSkill`,
|
||||
DROP `DisenchantId`,
|
||||
ADD `StatScalingFactor` float not null default 0 AFTER `HolidayId`,
|
||||
ADD `Field130` int(11) not null default 0 AFTER `StatScalingFactor`,
|
||||
ADD `Field131` int(11) not null default 0 AFTER `Field130`;
|
||||
@@ -0,0 +1,38 @@
|
||||
DROP TABLE IF EXISTS `item_template_addon`;
|
||||
CREATE TABLE `item_template_addon` (
|
||||
`Id` int(10) unsigned not null,
|
||||
`BuyCount` tinyint(3) unsigned not null default 1,
|
||||
`FoodType` tinyint(3) unsigned not null default 0,
|
||||
`MinMoneyLoot` int(10) unsigned not null default 0,
|
||||
`MaxMoneyLoot` int(10) unsigned not null default 0,
|
||||
`SpellPPMChance` float unsigned not null default 0,
|
||||
PRIMARY KEY(`Id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
INSERT INTO `item_template_addon`
|
||||
SELECT
|
||||
`item_template`.`entry` AS `Id`,
|
||||
`item_template`.`BuyCount` AS `BuyCount`,
|
||||
`item_template`.`FoodType` AS `FoodType`,
|
||||
`item_template`.`minMoneyLoot` AS `MinMoneyLoot`,
|
||||
`item_template`.`maxMoneyLoot` AS `MaxMoneyLoot`,
|
||||
ABS(IF(`item_template`.`spelltrigger_1`=2, `item_template`.`spellppmRate_1`,
|
||||
IF (`item_template`.`spelltrigger_2`=2, `item_template`.`spellppmRate_2`,
|
||||
IF (`item_template`.`spelltrigger_3`=2, `item_template`.`spellppmRate_3`,
|
||||
IF (`item_template`.`spelltrigger_4`=2, `item_template`.`spellppmRate_4`,
|
||||
IF (`item_template`.`spelltrigger_5`=2, `item_template`.`spellppmRate_5`, 0))))))
|
||||
AS `SpellPPMChance`
|
||||
FROM
|
||||
`item_template`
|
||||
HAVING -- need to use having due to `SpellPPMChance` usage which is not an actual field in table
|
||||
`item_template`.`BuyCount`!=1 OR
|
||||
`item_template`.`FoodType`!=0 OR
|
||||
(`item_template`.`minMoneyLoot`!=0 AND
|
||||
`item_template`.`maxMoneyLoot`!=0) OR
|
||||
`SpellPPMChance`!=0;
|
||||
|
||||
ALTER TABLE `item_template`
|
||||
DROP `BuyCount`,
|
||||
DROP `FoodType`,
|
||||
DROP `minMoneyLoot`,
|
||||
DROP `maxMoneyLoot`;
|
||||
@@ -0,0 +1,31 @@
|
||||
ALTER TABLE `quest_template` ADD COLUMN `MinimapTargetMark` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `SpecialFlags`,
|
||||
ADD COLUMN `RewardSkillId` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardArenaPoints`,
|
||||
ADD COLUMN `RewardSkillPoints` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardSkillId`,
|
||||
ADD COLUMN `RewardReputationMask` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardSkillPoints`,
|
||||
ADD COLUMN `QuestGiverPortrait` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardReputationMask`,
|
||||
ADD COLUMN `QuestTurnInPortrait` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `QuestGiverPortrait`,
|
||||
ADD COLUMN `RequiredSpell` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredItemCount6`,
|
||||
ADD COLUMN `RewardCurrencyId1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ObjectiveText4`,
|
||||
ADD COLUMN `RewardCurrencyId2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyId1`,
|
||||
ADD COLUMN `RewardCurrencyId3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyId2`,
|
||||
ADD COLUMN `RewardCurrencyId4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyId3`,
|
||||
ADD COLUMN `RewardCurrencyCount1` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyId4`,
|
||||
ADD COLUMN `RewardCurrencyCount2` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyCount1`,
|
||||
ADD COLUMN `RewardCurrencyCount3` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyCount2`,
|
||||
ADD COLUMN `RewardCurrencyCount4` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyCount3`,
|
||||
ADD COLUMN `RequiredCurrencyId1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RewardCurrencyCount4`,
|
||||
ADD COLUMN `RequiredCurrencyId2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredCurrencyId1`,
|
||||
ADD COLUMN `RequiredCurrencyId3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredCurrencyId2`,
|
||||
ADD COLUMN `RequiredCurrencyId4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredCurrencyId3`,
|
||||
ADD COLUMN `RequiredCurrencyCount1` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredCurrencyId4`,
|
||||
ADD COLUMN `RequiredCurrencyCount2` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredCurrencyCount1`,
|
||||
ADD COLUMN `RequiredCurrencyCount3` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredCurrencyCount2`,
|
||||
ADD COLUMN `RequiredCurrencyCount4` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `RequiredCurrencyCount3`,
|
||||
ADD COLUMN `QuestGiverTextWindow` TEXT NULL DEFAULT NULL AFTER `RequiredCurrencyCount4`,
|
||||
ADD COLUMN `QuestGiverTargetName` TEXT NULL DEFAULT NULL AFTER `QuestGiverTextWindow`,
|
||||
ADD COLUMN `QuestTurnTextWindow` TEXT NULL DEFAULT NULL AFTER `QuestGiverTargetName`,
|
||||
ADD COLUMN `QuestTurnTargetName` TEXT NULL DEFAULT NULL AFTER `QuestTurnTextWindow`,
|
||||
ADD COLUMN `SoundAccept` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '890' AFTER `QuestTurnTargetName`,
|
||||
ADD COLUMN `SoundTurnIn` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '878' AFTER `SoundAccept`;
|
||||
|
||||
ALTER TABLE `quest_template` DROP COLUMN `Unknown0`; -- Not found on 422
|
||||
@@ -0,0 +1,225 @@
|
||||
SET @LESSER_MAGIC = 10938;
|
||||
SET @GREATER_MAGIC = 10939;
|
||||
SET @STRANGE_DUST = 10940;
|
||||
SET @SMALL_GLIMMERING = 10978;
|
||||
SET @LESSER_ASTRAL = 10998;
|
||||
SET @GREATER_ASTRAL = 11082;
|
||||
SET @SOUL_DUST = 11083;
|
||||
SET @LARGE_GLIMMERING = 11084;
|
||||
SET @LESSER_MYSTIC = 11134;
|
||||
SET @GREATER_MYSTIC = 11135;
|
||||
SET @VISION_DUST = 11137;
|
||||
SET @SMALL_GLOWING = 11138;
|
||||
SET @LARGE_GLOWING = 11139;
|
||||
SET @LESSER_NETHER = 11174;
|
||||
SET @GREATER_NETHER = 11175;
|
||||
SET @DREAM_DUST = 11176;
|
||||
SET @SMALL_RADIANT = 11177;
|
||||
SET @LARGE_RADIANT = 11178;
|
||||
SET @SMALL_BRILLIANT = 14343;
|
||||
SET @LARGE_BRILLIANT = 14344;
|
||||
SET @LESSER_ETERNAL = 16202;
|
||||
SET @GREATER_ETERNAL = 16203;
|
||||
SET @ILLUSION_DUST = 16204;
|
||||
SET @NEXUS_CRYSTAL = 20725;
|
||||
SET @ARCANE_DUST = 22445;
|
||||
SET @GREATER_PLANAR = 22446;
|
||||
SET @LESSER_PLANAR = 22447;
|
||||
SET @SMALL_PRISMATIC = 22448;
|
||||
SET @LARGE_PRISMATIC = 22449;
|
||||
SET @VOID_CRYSTAL = 22450;
|
||||
SET @DREAM_SHARD = 34052;
|
||||
SET @SMALL_DREAM = 34053;
|
||||
SET @INFINITE_DUST = 34054;
|
||||
SET @GREATER_COSMIC = 34055;
|
||||
SET @LESSER_COSMIC = 34056;
|
||||
SET @ABYSS_CRYSTAL = 34057;
|
||||
SET @HEAVENLY_SHARD = 52721;
|
||||
SET @SMALL_HEAVENLY = 52720;
|
||||
SET @HYPN_DUST = 52555;
|
||||
SET @GREATER_CEL = 52719;
|
||||
SET @LESSER_CEL = 52718;
|
||||
SET @MAELSTROM_CRYSTAL = 52722;
|
||||
|
||||
TRUNCATE `disenchant_loot_template`;
|
||||
INSERT INTO `disenchant_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
|
||||
(3,@STRANGE_DUST,20,1,1,1,2),
|
||||
(4,@STRANGE_DUST,80,1,1,1,2),
|
||||
(5,@STRANGE_DUST,75,1,1,2,3),
|
||||
(6,@STRANGE_DUST,20,1,1,2,3),
|
||||
(7,@STRANGE_DUST,15,1,1,4,6),
|
||||
(8,@STRANGE_DUST,75,1,1,4,6),
|
||||
(13,@SOUL_DUST,75,1,1,1,2),
|
||||
(14,@SOUL_DUST,20,1,1,1,2),
|
||||
(17,@SOUL_DUST,75,1,1,2,5),
|
||||
(18,@SOUL_DUST,20,1,1,2,5),
|
||||
(21,@VISION_DUST,75,1,1,1,2),
|
||||
(22,@VISION_DUST,20,1,1,1,2),
|
||||
(25,@VISION_DUST,75,1,1,2,5),
|
||||
(26,@VISION_DUST,20,1,1,2,5),
|
||||
(29,@DREAM_DUST,75,1,1,1,2),
|
||||
(30,@DREAM_DUST,20,1,1,1,2),
|
||||
(31,@DREAM_DUST,22,1,1,2,5),
|
||||
(32,@DREAM_DUST,75,1,1,2,5),
|
||||
(46,@ILLUSION_DUST,75,1,1,1,2),
|
||||
(47,@ILLUSION_DUST,22,1,1,1,2),
|
||||
(52,@ILLUSION_DUST,75,1,1,2,5),
|
||||
(53,@ILLUSION_DUST,22,1,1,2,5),
|
||||
(56,@ARCANE_DUST,75,1,1,1,3),
|
||||
(57,@ARCANE_DUST,22,1,1,1,2),
|
||||
(62,@ARCANE_DUST,22,1,1,2,5),
|
||||
(63,@ARCANE_DUST,75,1,1,2,5),
|
||||
(70,@ARCANE_DUST,75,1,1,2,3),
|
||||
(71,@ARCANE_DUST,22,1,1,2,3),
|
||||
(82,@INFINITE_DUST,75,1,1,1,3),
|
||||
(83,@INFINITE_DUST,22,1,1,1,3),
|
||||
(88,@INFINITE_DUST,75,1,1,4,7),
|
||||
(89,@INFINITE_DUST,22,1,1,4,7),
|
||||
(94,@HYPN_DUST,75,1,1,1,2),
|
||||
(95,@HYPN_DUST,75,1,1,1,3),
|
||||
(96,@HYPN_DUST,60,1,1,1,4),
|
||||
(97,@HYPN_DUST,80,1,1,2,4),
|
||||
(98,@HYPN_DUST,50,1,1,2,5),
|
||||
(99,@HYPN_DUST,25,1,1,1,2),
|
||||
(100,@HYPN_DUST,25,1,1,1,3),
|
||||
(101,@HYPN_DUST,35,1,1,1,4),
|
||||
(102,@HYPN_DUST,30,1,1,2,4),
|
||||
(103,@HYPN_DUST,30,1,1,2,5),
|
||||
(3,@LESSER_MAGIC,80,1,1,1,2),
|
||||
(4,@LESSER_MAGIC,20,1,1,1,2),
|
||||
(5,@GREATER_MAGIC,20,1,1,1,2),
|
||||
(6,@GREATER_MAGIC,75,1,1,1,2),
|
||||
(7,@LESSER_ASTRAL,75,1,1,1,2),
|
||||
(8,@LESSER_ASTRAL,15,1,1,1,2),
|
||||
(13,@GREATER_ASTRAL,20,1,1,1,2),
|
||||
(14,@GREATER_ASTRAL,75,1,1,1,2),
|
||||
(17,@LESSER_MYSTIC,20,1,1,1,2),
|
||||
(18,@LESSER_MYSTIC,75,1,1,1,2),
|
||||
(21,@GREATER_MYSTIC,20,1,1,1,2),
|
||||
(22,@GREATER_MYSTIC,75,1,1,1,2),
|
||||
(25,@LESSER_NETHER,20,1,1,1,2),
|
||||
(26,@LESSER_NETHER,75,1,1,1,2),
|
||||
(29,@GREATER_NETHER,20,1,1,1,2),
|
||||
(30,@GREATER_NETHER,75,1,1,1,2),
|
||||
(31,@LESSER_ETERNAL,75,1,1,1,2),
|
||||
(32,@LESSER_ETERNAL,20,1,1,1,2),
|
||||
(46,@GREATER_ETERNAL,20,1,1,1,2),
|
||||
(47,@GREATER_ETERNAL,75,1,1,1,2),
|
||||
(52,@GREATER_ETERNAL,20,1,1,2,3),
|
||||
(53,@GREATER_ETERNAL,75,1,1,2,3),
|
||||
(56,@LESSER_PLANAR,22,1,1,1,3),
|
||||
(57,@LESSER_PLANAR,75,1,1,1,2),
|
||||
(62,@GREATER_PLANAR,75,1,1,1,2),
|
||||
(63,@GREATER_PLANAR,22,1,1,1,2),
|
||||
(70,@LESSER_PLANAR,22,1,1,2,3),
|
||||
(71,@LESSER_PLANAR,75,1,1,2,3),
|
||||
(82,@LESSER_COSMIC,22,1,1,1,2),
|
||||
(83,@LESSER_COSMIC,75,1,1,1,2),
|
||||
(88,@GREATER_COSMIC,22,1,1,1,2),
|
||||
(89,@GREATER_COSMIC,75,1,1,1,2),
|
||||
(94,@LESSER_CEL,25,1,1,1,2),
|
||||
(95,@LESSER_CEL,25,1,1,1,3),
|
||||
(96,@LESSER_CEL,40,1,1,2,4),
|
||||
(97,@GREATER_CEL,20,1,1,1,2),
|
||||
(98,@GREATER_CEL,50,1,1,2,3),
|
||||
(99,@LESSER_CEL,75,1,1,1,2),
|
||||
(100,@LESSER_CEL,75,1,1,1,3),
|
||||
(101,@LESSER_CEL,65,1,1,2,4),
|
||||
(102,@GREATER_CEL,70,1,1,1,2),
|
||||
(103,@GREATER_CEL,70,1,1,2,3),
|
||||
(5,@SMALL_GLIMMERING,5,1,1,1,1),
|
||||
(6,@SMALL_GLIMMERING,5,1,1,1,1),
|
||||
(7,@SMALL_GLIMMERING,10,1,1,1,1),
|
||||
(8,@SMALL_GLIMMERING,10,1,1,1,1),
|
||||
(9,@SMALL_GLIMMERING,100,1,1,1,1),
|
||||
(10,@SMALL_GLIMMERING,100,1,1,1,1),
|
||||
(11,@LARGE_GLIMMERING,100,1,1,1,1),
|
||||
(12,@LARGE_GLIMMERING,100,1,1,1,1),
|
||||
(13,@LARGE_GLIMMERING,5,1,1,1,1),
|
||||
(14,@LARGE_GLIMMERING,5,1,1,1,1),
|
||||
(15,@SMALL_GLOWING,100,1,1,1,1),
|
||||
(16,@SMALL_GLOWING,100,1,1,1,1),
|
||||
(17,@SMALL_GLOWING,5,1,1,1,1),
|
||||
(18,@SMALL_GLOWING,5,1,1,1,1),
|
||||
(19,@LARGE_GLOWING,100,1,1,1,1),
|
||||
(20,@LARGE_GLOWING,100,1,1,1,1),
|
||||
(21,@LARGE_GLOWING,5,1,1,1,1),
|
||||
(22,@LARGE_GLOWING,5,1,1,1,1),
|
||||
(23,@SMALL_RADIANT,100,1,1,1,1),
|
||||
(24,@SMALL_RADIANT,100,1,1,1,1),
|
||||
(25,@SMALL_RADIANT,5,1,1,1,1),
|
||||
(26,@SMALL_RADIANT,5,1,1,1,1),
|
||||
(27,@LARGE_RADIANT,100,1,1,1,1),
|
||||
(28,@LARGE_RADIANT,100,1,1,1,1),
|
||||
(29,@LARGE_RADIANT,5,1,1,1,1),
|
||||
(30,@LARGE_RADIANT,5,1,1,1,1),
|
||||
(31,@SMALL_BRILLIANT,3,1,1,1,1),
|
||||
(32,@SMALL_BRILLIANT,5,1,1,1,1),
|
||||
(34,@SMALL_BRILLIANT,100,1,1,1,1),
|
||||
(35,@SMALL_BRILLIANT,100,1,1,1,1),
|
||||
(38,@SMALL_RADIANT,100,1,1,2,4),
|
||||
(39,@SMALL_RADIANT,100,1,1,2,4),
|
||||
(40,@LARGE_RADIANT,100,1,1,2,4),
|
||||
(41,@LARGE_RADIANT,100,1,1,2,4),
|
||||
(42,@SMALL_BRILLIANT,100,1,1,2,4),
|
||||
(43,@SMALL_BRILLIANT,100,1,1,2,4),
|
||||
(44,@LARGE_BRILLIANT,99.5,1,1,1,1),
|
||||
(45,@LARGE_BRILLIANT,99.5,1,1,1,1),
|
||||
(46,@LARGE_BRILLIANT,5,1,1,1,1),
|
||||
(47,@LARGE_BRILLIANT,3,1,1,1,1),
|
||||
(50,@SMALL_PRISMATIC,99.5,1,1,1,1),
|
||||
(51,@SMALL_PRISMATIC,99.5,1,1,1,1),
|
||||
(52,@LARGE_BRILLIANT,5,1,1,1,1),
|
||||
(53,@LARGE_BRILLIANT,3,1,1,1,1),
|
||||
(56,@SMALL_PRISMATIC,3,1,1,1,1),
|
||||
(57,@SMALL_PRISMATIC,3,1,1,1,1),
|
||||
(58,@SMALL_PRISMATIC,100,1,1,1,1),
|
||||
(59,@SMALL_PRISMATIC,100,1,1,1,1),
|
||||
(62,@LARGE_PRISMATIC,3,1,1,1,1),
|
||||
(63,@LARGE_PRISMATIC,3,1,1,1,1),
|
||||
(64,@LARGE_PRISMATIC,99.5,1,1,1,1),
|
||||
(65,@LARGE_PRISMATIC,99.5,1,1,1,1),
|
||||
(68,@SMALL_PRISMATIC,100,1,1,1,2),
|
||||
(69,@SMALL_PRISMATIC,100,1,1,1,2),
|
||||
(70,@SMALL_PRISMATIC,3,1,1,1,1),
|
||||
(71,@SMALL_PRISMATIC,3,1,1,1,1),
|
||||
(72,@SMALL_GLIMMERING,100,1,1,2,4),
|
||||
(73,@SMALL_GLIMMERING,100,1,1,2,4),
|
||||
(74,@LARGE_GLIMMERING,100,1,1,2,4),
|
||||
(75,@LARGE_GLIMMERING,100,1,1,2,4),
|
||||
(76,@SMALL_GLOWING,100,1,1,2,4),
|
||||
(77,@SMALL_GLOWING,100,1,1,2,4),
|
||||
(78,@LARGE_GLOWING,100,1,1,2,4),
|
||||
(79,@LARGE_GLOWING,100,1,1,2,4),
|
||||
(82,@SMALL_DREAM,3,1,1,1,1),
|
||||
(83,@SMALL_DREAM,3,1,1,1,1),
|
||||
(84,@SMALL_DREAM,100,1,1,1,1),
|
||||
(85,@SMALL_DREAM,100,1,1,1,1),
|
||||
(86,@DREAM_SHARD,99.5,1,1,1,1),
|
||||
(87,@DREAM_SHARD,99.5,1,1,1,1),
|
||||
(88,@DREAM_SHARD,3,1,1,1,1),
|
||||
(89,@DREAM_SHARD,3,1,1,1,1),
|
||||
(104,@SMALL_HEAVENLY,100,1,1,1,1),
|
||||
(105,@SMALL_HEAVENLY,100,1,1,1,2),
|
||||
(106,@HEAVENLY_SHARD,100,1,1,1,1),
|
||||
(107,@HEAVENLY_SHARD,100,1,1,1,1),
|
||||
(44,@NEXUS_CRYSTAL,0.5,1,1,1,1),
|
||||
(45,@NEXUS_CRYSTAL,0.5,1,1,1,1),
|
||||
(48,@NEXUS_CRYSTAL,100,1,1,1,1),
|
||||
(49,@NEXUS_CRYSTAL,100,1,1,1,1),
|
||||
(50,@NEXUS_CRYSTAL,0.5,1,1,1,1),
|
||||
(51,@NEXUS_CRYSTAL,0.5,1,1,1,1),
|
||||
(54,@NEXUS_CRYSTAL,100,1,1,1,2),
|
||||
(55,@NEXUS_CRYSTAL,100,1,1,1,2),
|
||||
(60,@NEXUS_CRYSTAL,100,1,1,1,2),
|
||||
(61,@NEXUS_CRYSTAL,100,1,1,1,2),
|
||||
(64,@VOID_CRYSTAL,0.5,1,1,1,1),
|
||||
(65,@VOID_CRYSTAL,0.5,1,1,1,1),
|
||||
(66,@VOID_CRYSTAL,100,1,1,1,2),
|
||||
(67,@VOID_CRYSTAL,100,1,1,1,2),
|
||||
(80,@ABYSS_CRYSTAL,100,1,1,1,1),
|
||||
(81,@ABYSS_CRYSTAL,100,1,1,1,1),
|
||||
(86,@ABYSS_CRYSTAL,0.5,1,1,1,1),
|
||||
(87,@ABYSS_CRYSTAL,0.5,1,1,1,1),
|
||||
(108,@MAELSTROM_CRYSTAL,100,1,1,1,1),
|
||||
(109,@MAELSTROM_CRYSTAL,100,1,1,1,1);
|
||||
@@ -616,8 +616,8 @@ bool AuthSocket::_HandleLogonProof()
|
||||
memcpy(proof.M2, sha.GetDigest(), 20);
|
||||
proof.cmd = AUTH_LOGON_PROOF;
|
||||
proof.error = 0;
|
||||
proof.unk1 = 0x00800000;
|
||||
proof.unk2 = 0x00;
|
||||
proof.unk1 = 0x00800000; // Accountflags. 0x01 = GM, 0x08 = Trial, 0x00800000 = Pro pass (arena tournament)
|
||||
proof.unk2 = 0x00; // SurveyId
|
||||
proof.unk3 = 0x00;
|
||||
socket().send((char *)&proof, sizeof(proof));
|
||||
}
|
||||
|
||||
@@ -247,6 +247,9 @@ namespace VMAP
|
||||
|
||||
WorldModel* VMapManager2::acquireModelInstance(const std::string& basepath, const std::string& filename)
|
||||
{
|
||||
//! Critical section, thread safe access to iLoadedModelFiles
|
||||
TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
|
||||
|
||||
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
|
||||
if (model == iLoadedModelFiles.end())
|
||||
{
|
||||
@@ -267,6 +270,9 @@ namespace VMAP
|
||||
|
||||
void VMapManager2::releaseModelInstance(const std::string &filename)
|
||||
{
|
||||
//! Critical section, thread safe access to iLoadedModelFiles
|
||||
TRINITY_GUARD(ACE_Thread_Mutex, LoadedModelFilesLock);
|
||||
|
||||
ModelFileMap::iterator model = iLoadedModelFiles.find(filename);
|
||||
if (model == iLoadedModelFiles.end())
|
||||
{
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "IVMapManager.h"
|
||||
#include "Dynamic/UnorderedMap.h"
|
||||
#include "Define.h"
|
||||
#include <ace/Thread_Mutex.h>
|
||||
|
||||
//===========================================================
|
||||
|
||||
@@ -71,6 +72,8 @@ namespace VMAP
|
||||
// Tree to check collision
|
||||
ModelFileMap iLoadedModelFiles;
|
||||
InstanceTreeMap iInstanceMapTrees;
|
||||
// Mutex for iLoadedModelFiles
|
||||
ACE_Thread_Mutex LoadedModelFilesLock;
|
||||
|
||||
bool _loadMap(uint32 mapId, const std::string& basePath, uint32 tileX, uint32 tileY);
|
||||
/* void _unloadMap(uint32 pMapId, uint32 x, uint32 y); */
|
||||
|
||||
@@ -1312,7 +1312,7 @@ bool CreatureEventAI::CanCast(Unit* target, SpellInfo const* spell, bool trigger
|
||||
return false;
|
||||
|
||||
//Check for power
|
||||
if (!triggered && me->GetPower((Powers)spell->PowerType) < spell->CalcPowerCost(me, spell->GetSchoolMask()))
|
||||
if (!triggered && (uint32)me->GetPower((Powers)spell->PowerType) < spell->CalcPowerCost(me, spell->GetSchoolMask()))
|
||||
return false;
|
||||
|
||||
//Unit is out of range of this spell
|
||||
|
||||
@@ -237,7 +237,7 @@ SpellInfo const* ScriptedAI::SelectSpell(Unit* target, uint32 school, uint32 mec
|
||||
continue;
|
||||
|
||||
//Continue if we don't have the mana to actually cast this spell
|
||||
if (tempSpell->ManaCost > me->GetPower(Powers(tempSpell->PowerType)))
|
||||
if (tempSpell->ManaCost > (uint32)me->GetPower(Powers(tempSpell->PowerType)))
|
||||
continue;
|
||||
|
||||
//Check if the spell meets our range requirements
|
||||
|
||||
@@ -68,10 +68,12 @@ void SmartWaypointMgr::LoadFromDB()
|
||||
path = new WPPath;
|
||||
last_id = 1;
|
||||
}
|
||||
|
||||
if (last_id != id)
|
||||
{
|
||||
sLog->outErrorDb("SmartWaypointMgr::LoadFromDB: Path entry %u, unexpected point id %u, expected %u.", entry, id, last_id);
|
||||
}
|
||||
|
||||
last_id++;
|
||||
(*path)[id] = wp;
|
||||
|
||||
|
||||
@@ -154,14 +154,16 @@ void ArenaTeamMgr::DistributeArenaPoints()
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
|
||||
// Cycle that gives points to all players
|
||||
/*
|
||||
for (std::map<uint32, uint32>::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr)
|
||||
{
|
||||
// Add points to player if online
|
||||
if (Player* player = HashMapHolder<Player>::Find(playerItr->first))
|
||||
player->ModifyArenaPoints(playerItr->second, &trans);
|
||||
player->ModifyConquestPoints(playerItr->second, &trans);
|
||||
else // Update database
|
||||
trans->PAppend("UPDATE characters SET arenaPoints=arenaPoints+%u WHERE guid=%u", playerItr->second, playerItr->first);
|
||||
}
|
||||
*/
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
|
||||
@@ -842,8 +842,8 @@ void Battleground::EndBattleground(uint32 winner)
|
||||
if (IsRandom() || BattlegroundMgr::IsBGWeekend(GetTypeID()))
|
||||
{
|
||||
UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(winner_kills));
|
||||
if (CanAwardArenaPoints())
|
||||
player->ModifyArenaPoints(winner_arena);
|
||||
/*if (CanAwardArenaPoints())
|
||||
player->ModifyConquestPoints(winner_arena);*/
|
||||
if (!player->GetRandomWinner())
|
||||
player->SetRandomWinner(true);
|
||||
}
|
||||
|
||||
@@ -2461,11 +2461,9 @@ bool ChatHandler::HandleResetHonorCommand (const char * args)
|
||||
if (!extractPlayerTarget((char*)args, &target))
|
||||
return false;
|
||||
|
||||
target->SetHonorPoints(0);
|
||||
target->SetCurrency(CURRENCY_TYPE_HONOR_POINTS, 0);
|
||||
target->SetUInt32Value(PLAYER_FIELD_KILLS, 0);
|
||||
target->SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0);
|
||||
target->SetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION, 0);
|
||||
target->SetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION, 0);
|
||||
target->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL);
|
||||
|
||||
return true;
|
||||
|
||||
@@ -280,11 +280,10 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
|
||||
uint8 spellFlags = itr->second.flags;
|
||||
if (unit)
|
||||
{
|
||||
|
||||
if ((spellFlags & SPELL_DISABLE_PLAYER && unit->GetTypeId() == TYPEID_PLAYER) ||
|
||||
(unit->GetTypeId() == TYPEID_UNIT && ((unit->ToCreature()->isPet() && spellFlags & SPELL_DISABLE_PET) || spellFlags & SPELL_DISABLE_CREATURE)))
|
||||
{
|
||||
if (flags & SPELL_DISABLE_MAP)
|
||||
if (spellFlags & SPELL_DISABLE_MAP)
|
||||
{
|
||||
std::set<uint32> const& mapIds = itr->second.params[0];
|
||||
if (mapIds.find(unit->GetMapId()) != mapIds.end())
|
||||
@@ -311,6 +310,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
|
||||
}
|
||||
else if (spellFlags & SPELL_DISABLE_DEPRECATED_SPELL) // call not from spellcast
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
case DISABLE_TYPE_MAP:
|
||||
|
||||
@@ -25,8 +25,9 @@
|
||||
#include <map>
|
||||
|
||||
DB2Storage <ItemEntry> sItemStore(Itemfmt);
|
||||
DB2Storage <ItemSparseEntry> sItemSparseStore (ItemSparsefmt);
|
||||
DB2Storage <ItemCurrencyCostEntry> sItemCurrencyCostStore(ItemCurrencyCostfmt);
|
||||
DB2Storage <ItemExtendedCostEntry> sItemExtendedCostStore(ItemExtendedCostEntryfmt);
|
||||
DB2Storage <ItemSparseEntry> sItemSparseStore (ItemSparsefmt);
|
||||
|
||||
typedef std::list<std::string> StoreProblemList1;
|
||||
|
||||
@@ -86,8 +87,9 @@ void LoadDB2Stores(const std::string& dataPath)
|
||||
uint32 availableDb2Locales = 0xFFFFFFFF;
|
||||
|
||||
LoadDB2(availableDb2Locales, bad_db2_files, sItemStore, db2Path, "Item.db2");
|
||||
LoadDB2(availableDb2Locales, bad_db2_files, sItemCurrencyCostStore, db2Path, "ItemCurrencyCost.db2");
|
||||
LoadDB2(availableDb2Locales, bad_db2_files, sItemSparseStore, db2Path, "Item-sparse.db2");
|
||||
LoadDB2(availableDb2Locales, bad_db2_files, sItemExtendedCostStore, db2Path, "ItemExtendedCost.db2");
|
||||
LoadDB2(availableDb2Locales, bad_db2_files, sItemExtendedCostStore, db2Path, "ItemExtendedCost.db2");
|
||||
// error checks
|
||||
if (bad_db2_files.size() >= DB2FilesCount)
|
||||
{
|
||||
@@ -115,4 +117,4 @@ void LoadDB2Stores(const std::string& dataPath)
|
||||
|
||||
sLog->outString(">> Initialized %d DB2 data stores.", DB2FilesCount);
|
||||
sLog->outString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,9 @@
|
||||
#include <list>
|
||||
|
||||
extern DB2Storage <ItemEntry> sItemStore;
|
||||
extern DB2Storage <ItemSparseEntry> sItemSparseStore;
|
||||
extern DB2Storage <ItemCurrencyCostEntry> sItemCurrencyCostStore;
|
||||
extern DB2Storage <ItemExtendedCostEntry> sItemExtendedCostStore;
|
||||
extern DB2Storage <ItemSparseEntry> sItemSparseStore;
|
||||
|
||||
void LoadDB2Stores(const std::string& dataPath);
|
||||
|
||||
|
||||
@@ -33,14 +33,20 @@
|
||||
// Structures used to access raw DB2 data and required packing to portability
|
||||
struct ItemEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
uint32 Class; // 1
|
||||
uint32 SubClass; // 2
|
||||
int32 Unk0; // 3
|
||||
int32 Material; // 4
|
||||
uint32 DisplayId; // 5
|
||||
uint32 InventoryType; // 6
|
||||
uint32 Sheath; // 7
|
||||
uint32 ID; // 0
|
||||
uint32 Class; // 1
|
||||
uint32 SubClass; // 2
|
||||
int32 Unk0; // 3
|
||||
int32 Material; // 4
|
||||
uint32 DisplayId; // 5
|
||||
uint32 InventoryType; // 6
|
||||
uint32 Sheath; // 7
|
||||
};
|
||||
|
||||
struct ItemCurrencyCostEntry
|
||||
{
|
||||
uint32 Id;
|
||||
uint32 ItemId;
|
||||
};
|
||||
|
||||
struct ItemSparseEntry
|
||||
@@ -81,11 +87,11 @@ struct ItemSparseEntry
|
||||
int32 SpellCategory[MAX_ITEM_PROTO_SPELLS]; // 85 - 89
|
||||
int32 SpellCategoryCooldown[MAX_ITEM_PROTO_SPELLS]; // 90 - 94
|
||||
uint32 Bonding; // 95
|
||||
char* Name; // 96
|
||||
char* Name2; // 97
|
||||
char* Name3; // 98
|
||||
char* Name4; // 99
|
||||
char* Description; // 100
|
||||
char* Name; // 96
|
||||
char* Name2; // 97
|
||||
char* Name3; // 98
|
||||
char* Name4; // 99
|
||||
char* Description; // 100
|
||||
uint32 PageText; // 101
|
||||
uint32 LanguageID; // 102
|
||||
uint32 PageMaterial; // 103
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#define TRINITY_DB2SFRM_H
|
||||
|
||||
const char Itemfmt[]="niiiiiii";
|
||||
const char ItemCurrencyCostfmt[]="xn";
|
||||
const char ItemSparsefmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisssssiiiiiiiiiiiiiiiiiiiiiiifiiifii";
|
||||
const char ItemExtendedCostEntryfmt[]="nxxiiiiiiiiiiiixiiiiiiiiiixxxxx";
|
||||
|
||||
|
||||
@@ -111,20 +111,12 @@ DBCStorage <GtRegenMPPerSptEntry> sGtRegenMPPerSptStore(GtRegenMPPerSptf
|
||||
|
||||
DBCStorage <HolidaysEntry> sHolidaysStore(Holidaysfmt);
|
||||
|
||||
DBCStorage <ItemClassEntry> sItemClassStore(ItemClassfmt);
|
||||
//DBCStorage <ItemEntry> sItemStore(Itemfmt);
|
||||
DBCStorage <ItemBagFamilyEntry> sItemBagFamilyStore(ItemBagFamilyfmt);
|
||||
//DBCStorage <ItemCondExtCostsEntry> sItemCondExtCostsStore(ItemCondExtCostsEntryfmt);
|
||||
//DBCStorage <ItemDisplayInfoEntry> sItemDisplayInfoStore(ItemDisplayTemplateEntryfmt); -- not used currently
|
||||
//DBCStorage <ItemExtendedCostEntry> sItemExtendedCostStore(ItemExtendedCostEntryfmt);
|
||||
DBCStorage <ItemLimitCategoryEntry> sItemLimitCategoryStore(ItemLimitCategoryEntryfmt);
|
||||
DBCStorage <ItemRandomPropertiesEntry> sItemRandomPropertiesStore(ItemRandomPropertiesfmt);
|
||||
DBCStorage <ItemRandomSuffixEntry> sItemRandomSuffixStore(ItemRandomSuffixfmt);
|
||||
DBCStorage <ItemSetEntry> sItemSetStore(ItemSetEntryfmt);
|
||||
|
||||
DBCStorage <ItemArmorQualityEntry> sItemArmorQualityStore(ItemArmorQualityfmt);
|
||||
DBCStorage <ItemArmorShieldEntry> sItemArmorShieldStore(ItemArmorShieldfmt);
|
||||
DBCStorage <ItemArmorTotalEntry> sItemArmorTotalStore(ItemArmorTotalfmt);
|
||||
DBCStorage <ItemBagFamilyEntry> sItemBagFamilyStore(ItemBagFamilyfmt);
|
||||
DBCStorage <ItemClassEntry> sItemClassStore(ItemClassfmt);
|
||||
//DBCStorage <ItemCondExtCostsEntry> sItemCondExtCostsStore(ItemCondExtCostsEntryfmt);
|
||||
DBCStorage <ItemDamageEntry> sItemDamageAmmoStore(ItemDamagefmt);
|
||||
DBCStorage <ItemDamageEntry> sItemDamageOneHandStore(ItemDamagefmt);
|
||||
DBCStorage <ItemDamageEntry> sItemDamageOneHandCasterStore(ItemDamagefmt);
|
||||
@@ -133,6 +125,13 @@ DBCStorage <ItemDamageEntry> sItemDamageThrownStore(ItemDamagefmt);
|
||||
DBCStorage <ItemDamageEntry> sItemDamageTwoHandStore(ItemDamagefmt);
|
||||
DBCStorage <ItemDamageEntry> sItemDamageTwoHandCasterStore(ItemDamagefmt);
|
||||
DBCStorage <ItemDamageEntry> sItemDamageWandStore(ItemDamagefmt);
|
||||
DBCStorage <ItemDisenchantLootEntry> sItemDisenchantLootStore(ItemDisenchantLootfmt);
|
||||
//DBCStorage <ItemDisplayInfoEntry> sItemDisplayInfoStore(ItemDisplayTemplateEntryfmt); -- not used currently
|
||||
//DBCStorage <ItemExtendedCostEntry> sItemExtendedCostStore(ItemExtendedCostEntryfmt);
|
||||
DBCStorage <ItemLimitCategoryEntry> sItemLimitCategoryStore(ItemLimitCategoryEntryfmt);
|
||||
DBCStorage <ItemRandomPropertiesEntry> sItemRandomPropertiesStore(ItemRandomPropertiesfmt);
|
||||
DBCStorage <ItemRandomSuffixEntry> sItemRandomSuffixStore(ItemRandomSuffixfmt);
|
||||
DBCStorage <ItemSetEntry> sItemSetStore(ItemSetEntryfmt);
|
||||
|
||||
DBCStorage <LFGDungeonEntry> sLFGDungeonStore(LFGDungeonEntryfmt);
|
||||
//DBCStorage <LiquidTypeEntry> sLiquidTypeStore(LiquidTypeEntryfmt);
|
||||
@@ -397,7 +396,7 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemRandomSuffixStore, dbcPath, "ItemRandomSuffix.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemSetStore, dbcPath, "ItemSet.dbc");//14545
|
||||
|
||||
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemArmorQualityStore, dbcPath, "ItemArmorQuality.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemArmorShieldStore, dbcPath, "ItemArmorShield.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemArmorTotalStore, dbcPath, "ItemArmorTotal.dbc");//14545
|
||||
@@ -409,6 +408,7 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemDamageTwoHandStore, dbcPath, "ItemDamageTwoHand.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemDamageTwoHandCasterStore,dbcPath, "ItemDamageTwoHandCaster.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemDamageWandStore, dbcPath, "ItemDamageWand.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemDisenchantLootStore, dbcPath, "ItemDisenchantLoot.dbc");
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemClassStore, dbcPath,"ItemClass.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sLFGDungeonStore, dbcPath, "LFGDungeons.dbc");//14545
|
||||
@@ -487,7 +487,7 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellReagentsStore, dbcPath,"SpellReagents.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellScalingStore, dbcPath,"SpellScaling.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellTotemsStore, dbcPath,"SpellTotems.dbc");//14545
|
||||
@@ -501,10 +501,10 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellAuraOptionsStore, dbcPath,"SpellAuraOptions.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellAuraRestrictionsStore, dbcPath,"SpellAuraRestrictions.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellCastingRequirementsStore, dbcPath,"SpellCastingRequirements.dbc");//14545
|
||||
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellCategoriesStore, dbcPath,"SpellCategories.dbc");//14545
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sSpellEffectStore, dbcPath,"SpellEffect.dbc");//14545
|
||||
|
||||
|
||||
for(uint32 i = 1; i < sSpellEffectStore.GetNumRows(); ++i)
|
||||
{
|
||||
if(SpellEffectEntry const *spellEffect = sSpellEffectStore.LookupEntry(i))
|
||||
@@ -975,6 +975,158 @@ uint32 const* GetTalentTabPages(uint8 cls)
|
||||
return sTalentTabPages[cls];
|
||||
}
|
||||
|
||||
uint32 ScalingStatValuesEntry::GetStatMultiplier(uint32 inventoryType) const
|
||||
{
|
||||
if (inventoryType < MAX_INVTYPE)
|
||||
{
|
||||
switch (inventoryType)
|
||||
{
|
||||
case INVTYPE_NON_EQUIP:
|
||||
case INVTYPE_BODY:
|
||||
case INVTYPE_BAG:
|
||||
case INVTYPE_TABARD:
|
||||
case INVTYPE_AMMO:
|
||||
case INVTYPE_QUIVER:
|
||||
return 0;
|
||||
case INVTYPE_HEAD:
|
||||
case INVTYPE_CHEST:
|
||||
case INVTYPE_LEGS:
|
||||
case INVTYPE_2HWEAPON:
|
||||
case INVTYPE_ROBE:
|
||||
return StatMultiplier[0];
|
||||
case INVTYPE_SHOULDERS:
|
||||
case INVTYPE_WAIST:
|
||||
case INVTYPE_FEET:
|
||||
case INVTYPE_HANDS:
|
||||
case INVTYPE_TRINKET:
|
||||
return StatMultiplier[1];
|
||||
case INVTYPE_NECK:
|
||||
case INVTYPE_WRISTS:
|
||||
case INVTYPE_FINGER:
|
||||
case INVTYPE_SHIELD:
|
||||
case INVTYPE_CLOAK:
|
||||
case INVTYPE_HOLDABLE:
|
||||
return StatMultiplier[2];
|
||||
case INVTYPE_RANGED:
|
||||
case INVTYPE_THROWN:
|
||||
case INVTYPE_RANGEDRIGHT:
|
||||
case INVTYPE_RELIC:
|
||||
return StatMultiplier[3];
|
||||
case INVTYPE_WEAPON:
|
||||
case INVTYPE_WEAPONMAINHAND:
|
||||
case INVTYPE_WEAPONOFFHAND:
|
||||
return StatMultiplier[4];
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 ScalingStatValuesEntry::GetArmor(uint32 inventoryType, uint32 armorType) const
|
||||
{
|
||||
if (inventoryType <= INVTYPE_ROBE && armorType < 4)
|
||||
{
|
||||
switch (inventoryType)
|
||||
{
|
||||
case INVTYPE_NON_EQUIP:
|
||||
case INVTYPE_NECK:
|
||||
case INVTYPE_BODY:
|
||||
case INVTYPE_FINGER:
|
||||
case INVTYPE_TRINKET:
|
||||
case INVTYPE_WEAPON:
|
||||
case INVTYPE_SHIELD:
|
||||
case INVTYPE_RANGED:
|
||||
case INVTYPE_2HWEAPON:
|
||||
case INVTYPE_BAG:
|
||||
case INVTYPE_TABARD:
|
||||
break;
|
||||
case INVTYPE_SHOULDERS:
|
||||
return Armor[0][armorType];
|
||||
case INVTYPE_CHEST:
|
||||
case INVTYPE_ROBE:
|
||||
return Armor[1][armorType];
|
||||
case INVTYPE_HEAD:
|
||||
return Armor[2][armorType];
|
||||
case INVTYPE_LEGS:
|
||||
return Armor[3][armorType];
|
||||
case INVTYPE_FEET:
|
||||
return Armor[4][armorType];
|
||||
case INVTYPE_WAIST:
|
||||
return Armor[5][armorType];
|
||||
case INVTYPE_HANDS:
|
||||
return Armor[6][armorType];
|
||||
case INVTYPE_WRISTS:
|
||||
return Armor[7][armorType];
|
||||
case INVTYPE_CLOAK:
|
||||
return CloakArmor;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 ScalingStatValuesEntry::GetDPSAndDamageMultiplier(uint32 subClass, bool isCasterWeapon, float* damageMultiplier) const
|
||||
{
|
||||
if (!isCasterWeapon)
|
||||
{
|
||||
switch (subClass)
|
||||
{
|
||||
case ITEM_SUBCLASS_WEAPON_AXE:
|
||||
case ITEM_SUBCLASS_WEAPON_MACE:
|
||||
case ITEM_SUBCLASS_WEAPON_SWORD:
|
||||
case ITEM_SUBCLASS_WEAPON_DAGGER:
|
||||
case ITEM_SUBCLASS_WEAPON_THROWN:
|
||||
*damageMultiplier = 0.3f;
|
||||
return dpsMod[0];
|
||||
case ITEM_SUBCLASS_WEAPON_AXE2:
|
||||
case ITEM_SUBCLASS_WEAPON_MACE2:
|
||||
case ITEM_SUBCLASS_WEAPON_POLEARM:
|
||||
case ITEM_SUBCLASS_WEAPON_SWORD2:
|
||||
case ITEM_SUBCLASS_WEAPON_STAFF:
|
||||
case ITEM_SUBCLASS_WEAPON_FISHING_POLE:
|
||||
*damageMultiplier = 0.2f;
|
||||
return dpsMod[1];
|
||||
case ITEM_SUBCLASS_WEAPON_BOW:
|
||||
case ITEM_SUBCLASS_WEAPON_GUN:
|
||||
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
|
||||
*damageMultiplier = 0.3f;
|
||||
return dpsMod[4];
|
||||
case ITEM_SUBCLASS_WEAPON_obsolete:
|
||||
case ITEM_SUBCLASS_WEAPON_EXOTIC:
|
||||
case ITEM_SUBCLASS_WEAPON_EXOTIC2:
|
||||
case ITEM_SUBCLASS_WEAPON_FIST:
|
||||
case ITEM_SUBCLASS_WEAPON_MISC:
|
||||
case ITEM_SUBCLASS_WEAPON_SPEAR:
|
||||
case ITEM_SUBCLASS_WEAPON_WAND:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (subClass <= ITEM_SUBCLASS_WEAPON_WAND)
|
||||
{
|
||||
uint32 mask = 1 << subClass;
|
||||
// two-handed weapons
|
||||
if (mask & 0x562)
|
||||
{
|
||||
*damageMultiplier = 0.2f;
|
||||
return dpsMod[3];
|
||||
}
|
||||
|
||||
if (mask & (1 << ITEM_SUBCLASS_WEAPON_WAND))
|
||||
{
|
||||
*damageMultiplier = 0.3f;
|
||||
return dpsMod[5];
|
||||
}
|
||||
}
|
||||
*damageMultiplier = 0.3f;
|
||||
return dpsMod[2];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// script support functions
|
||||
DBCStorage <SoundEntriesEntry> const* GetSoundEntriesStore() { return &sSoundEntriesStore; }
|
||||
DBCStorage <SpellRangeEntry> const* GetSpellRangeStore() { return &sSpellRangeStore; }
|
||||
|
||||
@@ -128,6 +128,7 @@ extern DBCStorage <ItemDamageEntry> sItemDamageTwoHandStore;
|
||||
extern DBCStorage <ItemDamageEntry> sItemDamageTwoHandCasterStore;
|
||||
extern DBCStorage <ItemDamageEntry> sItemDamageWandStore;
|
||||
//extern DBCStorage <ItemDisplayInfoEntry> sItemDisplayInfoStore; -- not used currently
|
||||
extern DBCStorage <ItemDisenchantLootEntry> sItemDisenchantLootStore;
|
||||
extern DBCStorage <ItemLimitCategoryEntry> sItemLimitCategoryStore;
|
||||
extern DBCStorage <ItemRandomPropertiesEntry> sItemRandomPropertiesStore;
|
||||
extern DBCStorage <ItemRandomSuffixEntry> sItemRandomSuffixStore;
|
||||
|
||||
@@ -44,14 +44,14 @@ struct AchievementEntry
|
||||
int32 requiredFaction; // 1 -1=all, 0=horde, 1=alliance
|
||||
int32 mapID; // 2 -1=none
|
||||
//uint32 parentAchievement; // 3 its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin)
|
||||
char* name; // 4
|
||||
//char* description; // 5
|
||||
char* name; // 4
|
||||
//char* description; // 5
|
||||
uint32 categoryId; // 6
|
||||
uint32 points; // 7 reward points
|
||||
//uint32 OrderInCategory; // 8
|
||||
uint32 flags; // 9
|
||||
//uint32 icon; // 10 icon (from SpellIcon.dbc)
|
||||
//char* reward; // 11
|
||||
//char* reward; // 11
|
||||
uint32 count; // 12 - need this count of completed criterias (own or referenced achievement criterias)
|
||||
uint32 refAchievement; // 13 - referenced achievement (counting of all completed criterias)
|
||||
};
|
||||
@@ -520,7 +520,7 @@ struct AchievementCriteriaEntry
|
||||
//uint32 unk1; // 15 only one value, still unknown
|
||||
//uint32 unk2; // 16 all zeros
|
||||
//uint32 moreRequirement[3]; // 17-19
|
||||
//uint32 moreRequirementValue[3]; // 20-22
|
||||
//uint32 moreRequirementValue[3]; // 20-22
|
||||
};
|
||||
|
||||
struct AreaTableEntry
|
||||
@@ -532,7 +532,7 @@ struct AreaTableEntry
|
||||
uint32 flags; // 4, unknown value but 312 for all cities
|
||||
// 5-9 unused
|
||||
int32 area_level; // 10
|
||||
char* area_name; // 11
|
||||
char* area_name; // 11
|
||||
uint32 team; // 12
|
||||
// 13-19 unknown
|
||||
//uint32 unk20; // 20 4.0.0
|
||||
@@ -569,8 +569,8 @@ struct AreaPOIEntry
|
||||
uint32 mapId; //14
|
||||
//uint32 val1; //15
|
||||
uint32 zoneId; //16
|
||||
//char* name; //17 - name
|
||||
//char* name2; //18 - name2
|
||||
//char* name; //17 - name
|
||||
//char* name2; //18 - name2
|
||||
uint32 worldState; //19
|
||||
//uint32 val2; //20
|
||||
//uint32 unk; //21
|
||||
@@ -632,7 +632,7 @@ struct BattlemasterListEntry
|
||||
int32 mapid[8]; // 1-8 mapid
|
||||
uint32 type; // 9 (3 - BG, 4 - arena)
|
||||
//uint32 canJoinAsGroup; // 10 (0 or 1)
|
||||
char* name; // 11
|
||||
char* name; // 11
|
||||
uint32 maxGroupSize; // 12 maxGroupSize, used for checking if queue as group
|
||||
uint32 HolidayWorldStateId; // 13 new 3.1
|
||||
uint32 minLevel; // 14, min level (sync with PvPDifficulty.dbc content)
|
||||
@@ -663,7 +663,7 @@ struct CharTitlesEntry
|
||||
{
|
||||
uint32 ID; // 0, title ids, for example in Quest::GetCharTitleId()
|
||||
//uint32 unk1; // 1 flags?
|
||||
char* name; // 2 m_name_lang
|
||||
char* name; // 2 m_name_lang
|
||||
//char* name2; // 3 m_name1_lang
|
||||
uint32 bit_index; // 4 m_mask_ID used in PLAYER_CHOSEN_TITLE and 1<<index in PLAYER__FIELD_KNOWN_TITLES
|
||||
//uint32 // 5
|
||||
@@ -674,7 +674,7 @@ struct ChatChannelsEntry
|
||||
uint32 ChannelID; // 0
|
||||
uint32 flags; // 1
|
||||
//uint32 // 2 m_factionGroup
|
||||
char* pattern; // 3 m_name_lang
|
||||
char* pattern; // 3 m_name_lang
|
||||
//char* name; // 4 m_shortcut_lang
|
||||
};
|
||||
|
||||
@@ -683,7 +683,7 @@ struct ChrClassesEntry
|
||||
uint32 ClassID; // 0
|
||||
uint32 powerType; // 1 m_DisplayPower
|
||||
// 2 m_petNameToken
|
||||
char* name; // 3 m_name_lang
|
||||
char* name; // 3 m_name_lang
|
||||
//char* nameFemale; // 4 m_name_female_lang
|
||||
//char* nameNeutralGender; // 5 m_name_male_lang
|
||||
//char* capitalizedName // 6, m_filename
|
||||
@@ -709,7 +709,7 @@ struct ChrRacesEntry
|
||||
// 8-11 unused
|
||||
uint32 CinematicSequence; // 12 id from CinematicSequences.dbc
|
||||
//uint32 unk_322; // 13 m_alliance (0 alliance, 1 horde, 2 not available?)
|
||||
char* name; // 14 m_name_lang used for DBC language detection/selection
|
||||
char* name; // 14 m_name_lang used for DBC language detection/selection
|
||||
//char* nameFemale; // 15 m_name_female_lang
|
||||
//char* nameNeutralGender; // 16 m_name_male_lang
|
||||
// 17-18 m_facialHairCustomization[2]
|
||||
@@ -778,7 +778,7 @@ struct CreatureFamilyEntry
|
||||
uint32 petFoodMask; // 7 m_petFoodMask
|
||||
int32 petTalentType; // 8 m_petTalentType
|
||||
// 9 m_categoryEnumID
|
||||
char* Name; // 10 m_name_lang
|
||||
char* Name; // 10 m_name_lang
|
||||
// 11 m_iconFile
|
||||
};
|
||||
|
||||
@@ -834,15 +834,15 @@ struct CurrencyTypesEntry
|
||||
{
|
||||
uint32 ID; // 0 not used
|
||||
//uint32 Category; // 1 may be category
|
||||
//char* name; // 2
|
||||
//char* iconName; // 3
|
||||
//char* name; // 2
|
||||
//char* iconName; // 3
|
||||
//uint32 unk4; // 4 all 0
|
||||
//uint32 unk5; // 5 archaeology-related (?)
|
||||
//uint32 unk6; // 6 archaeology-related (?)
|
||||
uint32 TotalCap; // 7
|
||||
uint32 WeekCap; // 8
|
||||
//int32 unk9; // 9
|
||||
//char* description; // 10
|
||||
//char* description; // 10
|
||||
};
|
||||
|
||||
struct DestructibleModelDataEntry
|
||||
@@ -880,7 +880,7 @@ struct DungeonEncounterEntry
|
||||
uint32 difficulty; // 2 instance mode
|
||||
//uint32 unk0; // 3
|
||||
uint32 encounterIndex; // 4 encounter index for creating completed mask
|
||||
char* encounterName; // 5-20 encounter name
|
||||
char* encounterName; // 5 encounter name
|
||||
//uint32 nameFlags; // 21
|
||||
//uint32 unk1; // 22
|
||||
};
|
||||
@@ -900,7 +900,7 @@ struct DurabilityQualityEntry
|
||||
struct EmotesEntry
|
||||
{
|
||||
uint32 Id; // 0
|
||||
//char* Name; // 1, internal name
|
||||
//char* Name; // 1, internal name
|
||||
//uint32 AnimationId; // 2, ref to animationData
|
||||
uint32 Flags; // 3, bitmask, may be unit_flags
|
||||
uint32 EmoteType; // 4, Can be 0, 1 or 2 (determine how emote are shown)
|
||||
@@ -928,7 +928,7 @@ struct FactionEntry
|
||||
float spilloverRateOut; // 20 Faction outputs rep * spilloverRateOut as spillover reputation
|
||||
uint32 spilloverMaxRankIn; // 21 The highest rank the faction will profit from incoming spillover
|
||||
//uint32 spilloverRank_unk; // 22 It does not seem to be the max standing at which a faction outputs spillover ...so no idea
|
||||
char* name; // 23 m_name_lang
|
||||
char* name; // 23 m_name_lang
|
||||
//char* description; // 24 m_description_lang
|
||||
//uint32 // 25
|
||||
|
||||
@@ -999,14 +999,14 @@ struct GameObjectDisplayInfoEntry
|
||||
{
|
||||
uint32 Displayid; // 0 m_ID
|
||||
// char* filename; // 1
|
||||
//uint32 unk1[10]; //2-11
|
||||
//uint32 unk1[10]; //2-11
|
||||
float minX;
|
||||
float minY;
|
||||
float minZ;
|
||||
float maxX;
|
||||
float maxY;
|
||||
float maxZ;
|
||||
//uint32 transport; //18
|
||||
//uint32 transport; //18
|
||||
};
|
||||
|
||||
struct GemPropertiesEntry
|
||||
@@ -1107,8 +1107,7 @@ struct GtRegenMPPerSptEntry
|
||||
struct HolidayDescriptionsEntry
|
||||
{
|
||||
uint32 ID; // 0, this is NOT holiday id
|
||||
//char* name[16] // 1-16 m_name_lang
|
||||
// 17 name flags
|
||||
//char* name // 1 m_name_lang
|
||||
};
|
||||
*/
|
||||
|
||||
@@ -1116,8 +1115,7 @@ struct HolidayDescriptionsEntry
|
||||
struct HolidayNamesEntry
|
||||
{
|
||||
uint32 ID; // 0, this is NOT holiday id
|
||||
//char* name[16] // 1-16 m_name_lang
|
||||
// 17 name flags
|
||||
//char* name // 1 m_name_lang
|
||||
};
|
||||
*/
|
||||
|
||||
@@ -1170,30 +1168,30 @@ struct ItemClassEntry
|
||||
// ItemDamageWand.dbc
|
||||
struct ItemDamageEntry
|
||||
{
|
||||
uint32 Id; // 0 item level
|
||||
float Value[7]; // 1-7 multiplier for item quality
|
||||
uint32 Id2; // 8 item level
|
||||
uint32 Id; // 0 item level
|
||||
float DPS[7]; // 1-7 multiplier for item quality
|
||||
uint32 Id2; // 8 item level
|
||||
};
|
||||
|
||||
struct ItemArmorQualityEntry
|
||||
{
|
||||
uint32 Id; // 0 item level
|
||||
float Value[7]; // 1-7 multiplier for item quality
|
||||
uint32 Id2; // 8 item level
|
||||
uint32 Id; // 0 item level
|
||||
float Value[7]; // 1-7 multiplier for item quality
|
||||
uint32 Id2; // 8 item level
|
||||
};
|
||||
|
||||
struct ItemArmorShieldEntry
|
||||
{
|
||||
uint32 Id; // 0 item level
|
||||
uint32 Id2; // 1 item level
|
||||
float Value[7]; // 2-8 multiplier for item quality
|
||||
uint32 Id; // 0 item level
|
||||
uint32 Id2; // 1 item level
|
||||
float Value[7]; // 2-8 multiplier for item quality
|
||||
};
|
||||
|
||||
struct ItemArmorTotalEntry
|
||||
{
|
||||
uint32 Id; // 0 item level
|
||||
uint32 Id2; // 1 item level
|
||||
float Value[4]; // 2-5 multiplier for armor types (cloth...plate)
|
||||
uint32 Id; // 0 item level
|
||||
uint32 Id2; // 1 item level
|
||||
float Value[4]; // 2-5 multiplier for armor types (cloth...plate)
|
||||
};
|
||||
|
||||
struct ItemBagFamilyEntry
|
||||
@@ -1218,6 +1216,17 @@ struct ItemDisplayInfoEntry
|
||||
// 11 m_particleColorID
|
||||
};
|
||||
|
||||
struct ItemDisenchantLootEntry
|
||||
{
|
||||
uint32 Id;
|
||||
uint32 ItemClass;
|
||||
int32 Unk;
|
||||
uint32 ItemQuality;
|
||||
uint32 MinItemLevel;
|
||||
uint32 MaxItemLevel;
|
||||
uint32 RequiredDisenchantSkill;
|
||||
};
|
||||
|
||||
//struct ItemCondExtCostsEntry
|
||||
//{
|
||||
// uint32 ID;
|
||||
@@ -1252,16 +1261,16 @@ struct ItemLimitCategoryEntry
|
||||
struct ItemRandomPropertiesEntry
|
||||
{
|
||||
uint32 ID; // 0 m_ID
|
||||
//char* internalName // 1 m_Name
|
||||
//char* internalName // 1 m_Name
|
||||
uint32 enchant_id[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 2-4 m_Enchantment
|
||||
// 5-6 unused
|
||||
char* nameSuffix; // 7 m_name_lang
|
||||
char* nameSuffix; // 7 m_name_lang
|
||||
};
|
||||
|
||||
struct ItemRandomSuffixEntry
|
||||
{
|
||||
uint32 ID; // 0 m_ID
|
||||
char* nameSuffix; // 1 m_name_lang
|
||||
char* nameSuffix; // 1 m_name_lang
|
||||
// 2 m_internalName
|
||||
uint32 enchant_id[5]; // 3-7 m_enchantment
|
||||
uint32 prefix[5]; // 8-12 m_allocationPct
|
||||
@@ -1273,7 +1282,7 @@ struct ItemRandomSuffixEntry
|
||||
struct ItemSetEntry
|
||||
{
|
||||
//uint32 id // 0 m_ID
|
||||
char* name; // 1 m_name_lang
|
||||
char* name; // 1 m_name_lang
|
||||
uint32 itemId[MAX_ITEM_SET_ITEMS]; // 2-18 m_itemID
|
||||
uint32 spells[MAX_ITEM_SET_SPELLS]; // 19-26 m_setSpellID
|
||||
uint32 items_to_triggerspell[MAX_ITEM_SET_SPELLS]; // 27-34 m_setThreshold
|
||||
@@ -1299,7 +1308,7 @@ struct LFGDungeonEntry
|
||||
uint32 expansion; // 29
|
||||
//uint32 unk4; // 30
|
||||
uint32 grouptype; // 31
|
||||
//char* desc; // 32-47 Description
|
||||
//char* desc; // 32 Description
|
||||
// Helpers
|
||||
uint32 Entry() const { return ID + (type << 24); }
|
||||
};
|
||||
@@ -1340,7 +1349,7 @@ struct LockEntry
|
||||
struct PhaseEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
char* Name; // 1
|
||||
char* Name; // 1
|
||||
uint32 phaseShift; // 2
|
||||
};
|
||||
|
||||
@@ -1348,7 +1357,7 @@ struct MailTemplateEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//char* subject; // 1 m_subject_lang
|
||||
char* content; // 2 m_body_lang
|
||||
char* content; // 2 m_body_lang
|
||||
};
|
||||
|
||||
struct MapEntry
|
||||
@@ -1359,7 +1368,7 @@ struct MapEntry
|
||||
//uint32 unk_330; // 3
|
||||
//uint32 unk4; // 4 4.0.1
|
||||
//uint32 isPvP; // 5 m_PVP 0 or 1 for battlegrounds (not arenas)
|
||||
char* name; // 6 m_MapName_lang
|
||||
char* name; // 6 m_MapName_lang
|
||||
uint32 linked_zone; // 7 m_areaTableID
|
||||
//char* hordeIntro; // 8 m_MapDescription0_lang
|
||||
//char* allianceIntro; // 9 m_MapDescription1_lang
|
||||
@@ -1406,7 +1415,7 @@ struct MapDifficultyEntry
|
||||
//uint32 Id; // 0
|
||||
uint32 MapId; // 1
|
||||
uint32 Difficulty; // 2 (for arenas: arena slot)
|
||||
char* areaTriggerText; // 3 m_message_lang (text showed when transfer to map failed)
|
||||
char* areaTriggerText; // 3 m_message_lang (text showed when transfer to map failed)
|
||||
uint32 resetTime; // 4, m_raidDuration in secs, 0 if no fixed reset time
|
||||
uint32 maxPlayers; // 5, m_maxPlayers some heroic versions have 0 when expected same amount as in normal version
|
||||
//char* difficultyString; // 6 m_difficultystring
|
||||
@@ -1481,91 +1490,17 @@ struct ScalingStatDistributionEntry
|
||||
|
||||
struct ScalingStatValuesEntry
|
||||
{
|
||||
uint32 Id; // 0
|
||||
uint32 Level; // 1
|
||||
uint32 dpsMod[6]; // 2-7 DPS mod for level
|
||||
uint32 spellBonus; // 8 spell power for level
|
||||
uint32 ssdMultiplier[5]; // 9-13 Multiplier for ScalingStatDistribution
|
||||
uint32 armorMod[4]; // 14-17 Armor for level
|
||||
uint32 armorMod2[4]; // 18-21 Armor for level
|
||||
//uint32 trash[24]; // 22-45
|
||||
//uint32 unk2; // 46 unk, probably also Armor for level (flag 0x80000?)
|
||||
uint32 Id; // 0
|
||||
uint32 Level; // 1
|
||||
uint32 dpsMod[6]; // 2-7 DPS mod for level
|
||||
uint32 Spellpower; // 8 spell power for level
|
||||
uint32 StatMultiplier[5]; // 9-13 Multiplier for ScalingStatDistribution
|
||||
uint32 Armor[8][4]; // 14-46 Armor for level
|
||||
uint32 CloakArmor; // 47 armor for cloak
|
||||
|
||||
uint32 getssdMultiplier(uint32 mask) const
|
||||
{
|
||||
if (mask & 0x4001F)
|
||||
{
|
||||
if (mask & 0x00000001)
|
||||
return ssdMultiplier[1];
|
||||
if (mask & 0x00000002)
|
||||
return ssdMultiplier[2]; // 0 and 1 were duplicated
|
||||
if (mask & 0x00000004)
|
||||
return ssdMultiplier[3];
|
||||
if (mask & 0x00000008)
|
||||
return ssdMultiplier[0];
|
||||
if (mask & 0x00000010)
|
||||
return ssdMultiplier[4];
|
||||
if (mask & 0x00040000)
|
||||
return ssdMultiplier[2]; // 4.0.0
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 getArmorMod(uint32 mask) const
|
||||
{
|
||||
if (mask & 0x00F001E0)
|
||||
{
|
||||
if (mask & 0x00000020)
|
||||
return armorMod[0];
|
||||
if (mask & 0x00000040)
|
||||
return armorMod[1];
|
||||
if (mask & 0x00000080)
|
||||
return armorMod[2];
|
||||
if (mask & 0x00000100)
|
||||
return armorMod[3];
|
||||
|
||||
if (mask & 0x00100000)
|
||||
return armorMod2[0]; // cloth
|
||||
if (mask & 0x00200000)
|
||||
return armorMod2[1]; // leather
|
||||
if (mask & 0x00400000)
|
||||
return armorMod2[2]; // mail
|
||||
if (mask & 0x00800000)
|
||||
return armorMod2[3]; // plate
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
uint32 getDPSMod(uint32 mask) const
|
||||
{
|
||||
if (mask&0x7E00)
|
||||
{
|
||||
if (mask & 0x00000200)
|
||||
return dpsMod[0];
|
||||
if (mask & 0x00000400)
|
||||
return dpsMod[1];
|
||||
if (mask & 0x00000800)
|
||||
return dpsMod[2];
|
||||
if (mask & 0x00001000)
|
||||
return dpsMod[3];
|
||||
if (mask & 0x00002000)
|
||||
return dpsMod[4];
|
||||
if (mask & 0x00004000)
|
||||
return dpsMod[5]; // not used?
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
uint32 getSpellBonus(uint32 mask) const
|
||||
{
|
||||
if (mask & 0x00008000)
|
||||
return spellBonus;
|
||||
return 0;
|
||||
}
|
||||
uint32 getFeralBonus(uint32 mask) const // removed in 3.2.x?
|
||||
{
|
||||
if (mask & 0x00010000)
|
||||
return 0; // not used?
|
||||
return 0;
|
||||
}
|
||||
uint32 GetStatMultiplier(uint32 inventoryType) const;
|
||||
uint32 GetArmor(uint32 inventoryType, uint32 armorType) const;
|
||||
uint32 GetDPSAndDamageMultiplier(uint32 subClass, bool isCasterWeapon, float* damageMultiplier) const;
|
||||
};
|
||||
|
||||
//struct SkillLineCategoryEntry{
|
||||
@@ -1597,7 +1532,7 @@ struct SkillLineEntry
|
||||
uint32 id; // 0 m_ID
|
||||
int32 categoryId; // 1 m_categoryID
|
||||
//uint32 skillCostID; // 2 m_skillCostsID
|
||||
char* name; // 3 m_displayName_lang
|
||||
char* name; // 3 m_displayName_lang
|
||||
//char* description; // 4 m_description_lang
|
||||
uint32 spellIcon; // 5 m_spellIconID
|
||||
//char* alternateVerb; // 6 m_alternateVerb_lang
|
||||
@@ -1717,7 +1652,7 @@ struct SpellCastingRequirementsEntry
|
||||
// SpellTotems.dbc
|
||||
struct SpellTotemsEntry
|
||||
{
|
||||
uint32 Id; // 0 m_ID
|
||||
uint32 Id; // 0 m_ID
|
||||
uint32 TotemCategory[MAX_SPELL_TOTEMS]; // 1 m_requiredTotemCategoryID
|
||||
uint32 Totem[MAX_SPELL_TOTEMS]; // 2 m_totem
|
||||
};
|
||||
@@ -1757,10 +1692,10 @@ struct SpellEntry
|
||||
uint32 SpellVisual[2]; // 17-18 m_spellVisualID
|
||||
uint32 SpellIconID; // 19 m_spellIconID
|
||||
uint32 activeIconID; // 20 m_activeIconID
|
||||
char* SpellName; // 21 m_name_lang
|
||||
char* Rank; // 22 m_nameSubtext_lang
|
||||
//char* Description; // 23 m_description_lang not used
|
||||
//char* ToolTip; // 24 m_auraDescription_lang not used
|
||||
char* SpellName; // 21 m_name_lang
|
||||
char* Rank; // 22 m_nameSubtext_lang
|
||||
//char* Description; // 23 m_description_lang not used
|
||||
//char* ToolTip; // 24 m_auraDescription_lang not used
|
||||
uint32 SchoolMask; // 25 m_schoolMask
|
||||
uint32 runeCostID; // 26 m_runeCostID
|
||||
//uint32 spellMissileID; // 27 m_spellMissileID not used
|
||||
@@ -1878,31 +1813,31 @@ struct SpellClassOptionsEntry
|
||||
struct SpellInterruptsEntry
|
||||
{
|
||||
//uint32 Id; // 0 m_ID
|
||||
uint32 AuraInterruptFlags; // 33 m_auraInterruptFlags
|
||||
//uint32 // 34 4.0.0
|
||||
uint32 ChannelInterruptFlags; // 35 m_channelInterruptFlags
|
||||
//uint32 // 36 4.0.0
|
||||
uint32 InterruptFlags; // 32 m_interruptFlags
|
||||
uint32 AuraInterruptFlags; // 1 m_auraInterruptFlags
|
||||
//uint32 // 2 4.0.0
|
||||
uint32 ChannelInterruptFlags; // 3 m_channelInterruptFlags
|
||||
//uint32 // 4 4.0.0
|
||||
uint32 InterruptFlags; // 5 m_interruptFlags
|
||||
};
|
||||
|
||||
// SpellLevels.dbc
|
||||
struct SpellLevelsEntry
|
||||
{
|
||||
//uint32 Id; // 0 m_ID
|
||||
uint32 baseLevel; // 41 m_baseLevel
|
||||
uint32 maxLevel; // 40 m_maxLevel
|
||||
uint32 spellLevel; // 42 m_spellLevel
|
||||
uint32 baseLevel; // 1 m_baseLevel
|
||||
uint32 maxLevel; // 2 m_maxLevel
|
||||
uint32 spellLevel; // 3 m_spellLevel
|
||||
};
|
||||
|
||||
// SpellPower.dbc
|
||||
struct SpellPowerEntry
|
||||
{
|
||||
//uint32 Id; // 0 m_ID
|
||||
uint32 manaCost; // 45 m_manaCost
|
||||
uint32 manaCostPerlevel; // 46 m_manaCostPerLevel
|
||||
uint32 ManaCostPercentage; // 144 m_manaCostPct
|
||||
uint32 manaPerSecond; // 47 m_manaPerSecond
|
||||
//uint32 PowerDisplayId; // 168 m_powerDisplayID - id from PowerDisplay.dbc, new in 3.1
|
||||
uint32 manaCost; // 1 m_manaCost
|
||||
uint32 manaCostPerlevel; // 2 m_manaCostPerLevel
|
||||
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
|
||||
};
|
||||
|
||||
@@ -1922,7 +1857,7 @@ struct SpellShapeshiftFormEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
//uint32 buttonPosition; // 1 unused
|
||||
//char* Name; // 2 unused
|
||||
//char* Name; // 2 unused
|
||||
uint32 flags1; // 3
|
||||
int32 creatureType; // 4 <=0 humanoid, other normal creature types
|
||||
//uint32 unk1; // 5 unused, related to next field
|
||||
@@ -1951,10 +1886,10 @@ struct SpellShapeshiftEntry
|
||||
struct SpellTargetRestrictionsEntry
|
||||
{
|
||||
uint32 Id; // 0 m_ID
|
||||
uint32 MaxAffectedTargets; // 152 m_maxTargets
|
||||
uint32 MaxTargetLevel; // 147 m_maxTargetLevel
|
||||
uint32 TargetCreatureType; // 18 m_targetCreatureType
|
||||
uint32 Targets; // 17 m_targets
|
||||
uint32 MaxAffectedTargets; // 1 m_maxTargets
|
||||
uint32 MaxTargetLevel; // 2 m_maxTargetLevel
|
||||
uint32 TargetCreatureType; // 3 m_targetCreatureType
|
||||
uint32 Targets; // 4 m_targets
|
||||
};
|
||||
|
||||
// SpellReagents.dbc
|
||||
@@ -2012,7 +1947,7 @@ struct SpellItemEnchantmentEntry
|
||||
uint32 amount[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 5-7 m_effectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]
|
||||
//uint32 amount2[MAX_ITEM_ENCHANTMENT_EFFECTS] // 8-10 m_effectPointsMax[MAX_ITEM_ENCHANTMENT_EFFECTS]
|
||||
uint32 spellid[MAX_ITEM_ENCHANTMENT_EFFECTS]; // 11-13 m_effectArg[MAX_ITEM_ENCHANTMENT_EFFECTS]
|
||||
char* description; // 14 m_name_lang
|
||||
char* description; // 14 m_name_lang
|
||||
uint32 aura_id; // 15 m_itemVisual
|
||||
uint32 slot; // 16 m_flags
|
||||
uint32 GemID; // 17 m_src_itemID
|
||||
@@ -2091,7 +2026,7 @@ struct TaxiNodesEntry
|
||||
float x; // 2 m_x
|
||||
float y; // 3 m_y
|
||||
float z; // 4 m_z
|
||||
char* name; // 5 m_Name_lang
|
||||
char* name; // 5 m_Name_lang
|
||||
uint32 MountCreatureID[2]; // 6-7 m_MountCreatureID[2]
|
||||
};
|
||||
|
||||
@@ -2393,4 +2328,3 @@ typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath;
|
||||
#define TaxiMaskSize 14
|
||||
typedef uint32 TaxiMask[TaxiMaskSize];
|
||||
#endif
|
||||
|
||||
|
||||
@@ -82,6 +82,7 @@ const char ItemArmorQualityfmt[]="nfffffffi";
|
||||
const char ItemArmorShieldfmt[]="nifffffff";
|
||||
const char ItemArmorTotalfmt[]="niffff";
|
||||
const char ItemDamagefmt[]="nfffffffi";
|
||||
const char ItemDisenchantLootfmt[]="niiiiii";
|
||||
const char ItemClassfmt[]="dixxx";
|
||||
//const char ItemDisplayTemplateEntryfmt[]="nxxxxxxxxxxixxxxxxxxxxx";
|
||||
//const char ItemCondExtCostsEntryfmt[]="xiii";
|
||||
@@ -105,7 +106,7 @@ const char QuestFactionRewardfmt[]="niiiiiiiiii";
|
||||
const char PvPDifficultyfmt[]="diiiii";
|
||||
const char RandomPropertiesPointsfmt[]="niiiiiiiiiiiiiii";
|
||||
const char ScalingStatDistributionfmt[]="niiiiiiiiiiiiiiiiiiiixi";
|
||||
const char ScalingStatValuesfmt[]="iniiiiiiiiiiiiiiiiiiiixxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
const char ScalingStatValuesfmt[]="iniiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||
const char SkillLinefmt[]="nisxixi";
|
||||
const char SkillLineAbilityfmt[]="niiiixxiiiiixx";
|
||||
const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
|
||||
@@ -106,25 +106,25 @@ void Corpse::SaveToDB()
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
DeleteFromDB(trans);
|
||||
|
||||
uint16 index = 0;
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CORPSE);
|
||||
stmt->setUInt32(0, GetGUIDLow()); // corpseGuid
|
||||
stmt->setUInt32(1, GUID_LOPART(GetOwnerGUID())); // guid
|
||||
stmt->setFloat (2, GetPositionX()); // posX
|
||||
stmt->setFloat (3, GetPositionY()); // posY
|
||||
stmt->setFloat (4, GetPositionZ()); // posZ
|
||||
stmt->setFloat (5, GetOrientation()); // orientation
|
||||
stmt->setUInt16(6, GetMapId()); // mapId
|
||||
stmt->setUInt32(7, GetUInt32Value(CORPSE_FIELD_DISPLAY_ID)); // displayId
|
||||
stmt->setString(8, _ConcatFields(CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END)); // itemCache
|
||||
stmt->setUInt32(9, GetUInt32Value(CORPSE_FIELD_BYTES_1)); // bytes1
|
||||
stmt->setUInt32(10, GetUInt32Value(CORPSE_FIELD_BYTES_2)); // bytes2
|
||||
stmt->setUInt32(11, GetUInt32Value(CORPSE_FIELD_GUILD)); // guildId
|
||||
stmt->setUInt8 (12, GetUInt32Value(CORPSE_FIELD_FLAGS)); // flags
|
||||
stmt->setUInt8 (13, GetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS)); // dynFlags
|
||||
stmt->setUInt32(14, uint32(m_time)); // time
|
||||
stmt->setUInt8 (15, GetType()); // corpseType
|
||||
stmt->setUInt32(16, GetInstanceId()); // instanceId
|
||||
stmt->setUInt16(17, GetPhaseMask()); // phaseMask
|
||||
stmt->setUInt32(index++, GetGUIDLow()); // corpseGuid
|
||||
stmt->setUInt32(index++, GUID_LOPART(GetOwnerGUID())); // guid
|
||||
stmt->setFloat (index++, GetPositionX()); // posX
|
||||
stmt->setFloat (index++, GetPositionY()); // posY
|
||||
stmt->setFloat (index++, GetPositionZ()); // posZ
|
||||
stmt->setFloat (index++, GetOrientation()); // orientation
|
||||
stmt->setUInt16(index++, GetMapId()); // mapId
|
||||
stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_DISPLAY_ID)); // displayId
|
||||
stmt->setString(index++, _ConcatFields(CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END)); // itemCache
|
||||
stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_BYTES_1)); // bytes1
|
||||
stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_BYTES_2)); // bytes2
|
||||
stmt->setUInt8 (index++, GetUInt32Value(CORPSE_FIELD_FLAGS)); // flags
|
||||
stmt->setUInt8 (index++, GetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS)); // dynFlags
|
||||
stmt->setUInt32(index++, uint32(m_time)); // time
|
||||
stmt->setUInt8 (index++, GetType()); // corpseType
|
||||
stmt->setUInt32(index++, GetInstanceId()); // instanceId
|
||||
stmt->setUInt16(index++, GetPhaseMask()); // phaseMask
|
||||
trans->Append(stmt);
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
@@ -164,10 +164,11 @@ void Corpse::DeleteFromDB(SQLTransaction& trans)
|
||||
|
||||
bool Corpse::LoadFromDB(uint32 guid, Field* fields)
|
||||
{
|
||||
uint32 ownerGuid = fields[17].GetUInt32();
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
||||
// SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0
|
||||
m_type = CorpseType(fields[13].GetUInt8());
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
||||
// SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0
|
||||
|
||||
uint32 ownerGuid = fields[16].GetUInt32();
|
||||
m_type = CorpseType(fields[12].GetUInt8());
|
||||
if (m_type >= MAX_CORPSE_TYPE)
|
||||
{
|
||||
sLog->outError("Corpse (guid: %u, owner: %u) have wrong corpse type (%u), not loading.", guid, ownerGuid, m_type);
|
||||
@@ -188,15 +189,14 @@ bool Corpse::LoadFromDB(uint32 guid, Field* fields)
|
||||
_LoadIntoDataField(fields[6].GetCString(), CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END);
|
||||
SetUInt32Value(CORPSE_FIELD_BYTES_1, fields[7].GetUInt32());
|
||||
SetUInt32Value(CORPSE_FIELD_BYTES_2, fields[8].GetUInt32());
|
||||
SetUInt32Value(CORPSE_FIELD_GUILD, fields[9].GetUInt32());
|
||||
SetUInt32Value(CORPSE_FIELD_FLAGS, fields[10].GetUInt8());
|
||||
SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, fields[11].GetUInt8());
|
||||
SetUInt32Value(CORPSE_FIELD_FLAGS, fields[9].GetUInt8());
|
||||
SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, fields[10].GetUInt8());
|
||||
SetUInt64Value(CORPSE_FIELD_OWNER, MAKE_NEW_GUID(ownerGuid, 0, HIGHGUID_PLAYER));
|
||||
|
||||
m_time = time_t(fields[12].GetUInt32());
|
||||
m_time = time_t(fields[11].GetUInt32());
|
||||
|
||||
uint32 instanceId = fields[14].GetUInt32();
|
||||
uint32 phaseMask = fields[15].GetUInt16();
|
||||
uint32 instanceId = fields[13].GetUInt32();
|
||||
uint32 phaseMask = fields[14].GetUInt16();
|
||||
|
||||
// place
|
||||
SetLocationInstanceId(instanceId);
|
||||
|
||||
@@ -1687,9 +1687,11 @@ SpellInfo const* Creature::reachWithSpellAttack(Unit* pVictim)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bcontinue) continue;
|
||||
|
||||
if (spellInfo->ManaCost > GetPower(POWER_MANA))
|
||||
if (bcontinue)
|
||||
continue;
|
||||
|
||||
if (spellInfo->ManaCost > (uint32)GetPower(POWER_MANA))
|
||||
continue;
|
||||
float range = spellInfo->GetMaxRange(false);
|
||||
float minrange = spellInfo->GetMinRange(false);
|
||||
@@ -1732,7 +1734,7 @@ SpellInfo const* Creature::reachWithSpellCure(Unit* pVictim)
|
||||
}
|
||||
if (bcontinue) continue;
|
||||
|
||||
if (spellInfo->ManaCost > GetPower(POWER_MANA))
|
||||
if (spellInfo->ManaCost > (uint32)GetPower(POWER_MANA))
|
||||
continue;
|
||||
|
||||
float range = spellInfo->GetMaxRange(true);
|
||||
|
||||
@@ -337,13 +337,13 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
|
||||
data << uint32(quest->GetRewChoiceItemsCount());
|
||||
for (uint32 i=0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
{
|
||||
if (!quest->RewChoiceItemId[i])
|
||||
if (!quest->RewardChoiceItemId[i])
|
||||
continue;
|
||||
|
||||
data << uint32(quest->RewChoiceItemId[i]);
|
||||
data << uint32(quest->RewChoiceItemCount[i]);
|
||||
data << uint32(quest->RewardChoiceItemId[i]);
|
||||
data << uint32(quest->RewardChoiceItemCount[i]);
|
||||
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewChoiceItemId[i]))
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardChoiceItemId[i]))
|
||||
data << uint32(itemTemplate->DisplayInfoID);
|
||||
else
|
||||
data << uint32(0x00);
|
||||
@@ -353,13 +353,13 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
|
||||
|
||||
for (uint32 i=0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
{
|
||||
if (!quest->RewItemId[i])
|
||||
if (!quest->RewardItemId[i])
|
||||
continue;
|
||||
|
||||
data << uint32(quest->RewItemId[i]);
|
||||
data << uint32(quest->RewItemCount[i]);
|
||||
data << uint32(quest->RewardItemId[i]);
|
||||
data << uint32(quest->RewardItemIdCount[i]);
|
||||
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewItemId[i]))
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardItemId[i]))
|
||||
data << uint32(itemTemplate->DisplayInfoID);
|
||||
else
|
||||
data << uint32(0);
|
||||
@@ -380,13 +380,13 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
|
||||
data << uint32(0); // unk
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
data << uint32(quest->RewRepFaction[i]);
|
||||
data << uint32(quest->RewardFactionId[i]);
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
data << int32(quest->RewRepValueId[i]);
|
||||
data << int32(quest->RewardFactionValueId[i]);
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
data << int32(quest->RewRepValue[i]);
|
||||
data << int32(quest->RewardFactionValueIdOverride[i]);
|
||||
|
||||
data << uint32(QUEST_EMOTE_COUNT);
|
||||
for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||
@@ -401,11 +401,17 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID,
|
||||
|
||||
void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
|
||||
{
|
||||
// SMSG_QUEST_QUERY_RESPONSE - Updated to 422
|
||||
|
||||
std::string questTitle = quest->GetTitle();
|
||||
std::string questDetails = quest->GetDetails();
|
||||
std::string questObjectives = quest->GetObjectives();
|
||||
std::string questEndText = quest->GetEndText();
|
||||
std::string questCompletedText = quest->GetCompletedText();
|
||||
std::string questGiverTextWindow = quest->GetQuestGiverTextWindow();
|
||||
std::string questGiverTargetName = quest->GetQuestGiverTargetName();
|
||||
std::string questTurnTextWindow = quest->GetQuestTurnTextWindow();
|
||||
std::string questTurnTargetName = quest->GetQuestTurnTargetName();
|
||||
|
||||
std::string questObjectiveText[QUEST_OBJECTIVES_COUNT];
|
||||
for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
@@ -421,6 +427,10 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
|
||||
ObjectMgr::GetLocaleString(localeData->Objectives, locale, questObjectives);
|
||||
ObjectMgr::GetLocaleString(localeData->EndText, locale, questEndText);
|
||||
ObjectMgr::GetLocaleString(localeData->CompletedText, locale, questCompletedText);
|
||||
ObjectMgr::GetLocaleString(localeData->QuestGiverTextWindow, locale, questGiverTextWindow);
|
||||
ObjectMgr::GetLocaleString(localeData->QuestGiverTargetName, locale, questGiverTargetName);
|
||||
ObjectMgr::GetLocaleString(localeData->QuestTurnTextWindow, locale, questTurnTextWindow);
|
||||
ObjectMgr::GetLocaleString(localeData->QuestTurnTargetName, locale, questTurnTargetName);
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
ObjectMgr::GetLocaleString(localeData->ObjectiveText[i], locale, questObjectiveText[i]);
|
||||
@@ -461,11 +471,16 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
|
||||
data << float(0); // new reward honor (multipled by ~62 at client side)
|
||||
data << uint32(quest->GetSrcItemId()); // source item id
|
||||
data << uint32(quest->GetFlags() & 0xFFFF); // quest flags
|
||||
data << uint32(quest->GetMinimapTargetMark()); // minimap target mark (skull, etc. missing enum)
|
||||
data << uint32(quest->GetCharTitleId()); // CharTitleId, new 2.4.0, player gets this title (id from CharTitles)
|
||||
data << uint32(quest->GetPlayersSlain()); // players slain
|
||||
data << uint32(quest->GetBonusTalents()); // bonus talents
|
||||
data << uint32(quest->GetRewArenaPoints()); // bonus arena points
|
||||
data << uint32(0); // review rep show mask
|
||||
data << uint32(quest->GetRewardSkillId()); // reward skill id
|
||||
data << uint32(quest->GetRewardSkillPoints()); // reward skill points
|
||||
data << uint32(quest->GetRewardReputationMask()); // rep mask (unsure on what it does)
|
||||
data << uint32(quest->GetQuestGiverPortrait()); // quest giver entry ?
|
||||
data << uint32(quest->GetQuestTurnInPortrait()); // quest turnin entry ?
|
||||
|
||||
if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
|
||||
{
|
||||
@@ -478,24 +493,24 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
|
||||
{
|
||||
for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
{
|
||||
data << uint32(quest->RewItemId[i]);
|
||||
data << uint32(quest->RewItemCount[i]);
|
||||
data << uint32(quest->RewardItemId[i]);
|
||||
data << uint32(quest->RewardItemIdCount[i]);
|
||||
}
|
||||
for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
{
|
||||
data << uint32(quest->RewChoiceItemId[i]);
|
||||
data << uint32(quest->RewChoiceItemCount[i]);
|
||||
data << uint32(quest->RewardChoiceItemId[i]);
|
||||
data << uint32(quest->RewardChoiceItemCount[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
|
||||
data << uint32(quest->RewRepFaction[i]);
|
||||
data << uint32(quest->RewardFactionId[i]);
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid+1 QuestFactionReward.dbc?
|
||||
data << int32(quest->RewRepValueId[i]);
|
||||
data << int32(quest->RewardFactionValueId[i]);
|
||||
|
||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0)
|
||||
data << int32(quest->RewRepValue[i]);
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unknown usage
|
||||
data << int32(quest->RewardFactionValueIdOverride[i]);
|
||||
|
||||
data << quest->GetPointMapId();
|
||||
data << quest->GetPointX();
|
||||
@@ -506,29 +521,50 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
|
||||
data << questObjectives;
|
||||
data << questDetails;
|
||||
data << questEndText;
|
||||
data << questCompletedText; // display in quest objectives window once all objectives are completed
|
||||
data << questCompletedText;
|
||||
|
||||
for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
if (quest->ReqCreatureOrGOId[i] < 0)
|
||||
data << uint32((quest->ReqCreatureOrGOId[i] * (-1)) | 0x80000000); // client expects gameobject template id in form (id|0x80000000)
|
||||
if (quest->RequiredNpcOrGo[i] < 0)
|
||||
data << uint32((quest->RequiredNpcOrGo[i] * (-1)) | 0x80000000); // client expects gameobject template id in form (id|0x80000000)
|
||||
else
|
||||
data << uint32(quest->ReqCreatureOrGOId[i]);
|
||||
data << uint32(quest->RequiredNpcOrGo[i]);
|
||||
|
||||
data << uint32(quest->ReqCreatureOrGOCount[i]);
|
||||
data << uint32(quest->ReqSourceId[i]);
|
||||
data << uint32(0); // req source count?
|
||||
data << uint32(quest->RequiredNpcOrGoCount[i]);
|
||||
data << uint32(quest->RequiredSourceItemId[i]);
|
||||
data << uint32(quest->RequiredSourceItemCount[i]);
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
data << uint32(quest->ReqItemId[i]);
|
||||
data << uint32(quest->ReqItemCount[i]);
|
||||
data << uint32(quest->RequiredItemId[i]);
|
||||
data << uint32(quest->RequiredItemCount[i]);
|
||||
}
|
||||
|
||||
data << uint32(quest->GetRequiredSpell()); // Is it required to be cast, learned or what?
|
||||
|
||||
for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
data << questObjectiveText[i];
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
|
||||
{
|
||||
data << uint32(quest->RewardCurrencyId[i]);
|
||||
data << uint32(quest->RewardCurrencyCount[i]);
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REQUIRED_CURRENCY_COUNT; ++i)
|
||||
{
|
||||
data << uint32(quest->RequiredCurrencyId[i]);
|
||||
data << uint32(quest->RequiredCurrencyCount[i]);
|
||||
}
|
||||
|
||||
data << questGiverTextWindow;
|
||||
data << questGiverTargetName;
|
||||
data << questTurnTextWindow;
|
||||
data << questTurnTargetName;
|
||||
data << uint32(quest->GetSoundAccept());
|
||||
data << uint32(quest->GetSoundTurnIn());
|
||||
|
||||
_session->SendPacket(&data);
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_QUEST_QUERY_RESPONSE questid=%u", quest->GetQuestId());
|
||||
}
|
||||
@@ -576,10 +612,10 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b
|
||||
data << uint32(quest->GetRewChoiceItemsCount());
|
||||
for (uint32 i=0; i < quest->GetRewChoiceItemsCount(); ++i)
|
||||
{
|
||||
data << uint32(quest->RewChoiceItemId[i]);
|
||||
data << uint32(quest->RewChoiceItemCount[i]);
|
||||
data << uint32(quest->RewardChoiceItemId[i]);
|
||||
data << uint32(quest->RewardChoiceItemCount[i]);
|
||||
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewChoiceItemId[i]))
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardChoiceItemId[i]))
|
||||
data << uint32(itemTemplate->DisplayInfoID);
|
||||
else
|
||||
data << uint32(0);
|
||||
@@ -588,10 +624,10 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b
|
||||
data << uint32(quest->GetRewItemsCount());
|
||||
for (uint32 i = 0; i < quest->GetRewItemsCount(); ++i)
|
||||
{
|
||||
data << uint32(quest->RewItemId[i]);
|
||||
data << uint32(quest->RewItemCount[i]);
|
||||
data << uint32(quest->RewardItemId[i]);
|
||||
data << uint32(quest->RewardItemIdCount[i]);
|
||||
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewItemId[i]))
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RewardItemId[i]))
|
||||
data << uint32(itemTemplate->DisplayInfoID);
|
||||
else
|
||||
data << uint32(0);
|
||||
@@ -612,13 +648,13 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b
|
||||
data << uint32(0);
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids
|
||||
data << uint32(quest->RewRepFaction[i]);
|
||||
data << uint32(quest->RewardFactionId[i]);
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid in QuestFactionReward.dbc (zero based)?
|
||||
data << int32(quest->RewRepValueId[i]);
|
||||
data << int32(quest->RewardFactionValueId[i]);
|
||||
|
||||
for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward reputation override?
|
||||
data << uint32(quest->RewRepValue[i]);
|
||||
data << uint32(quest->RewardFactionValueIdOverride[i]);
|
||||
|
||||
_session->SendPacket(&data);
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_QUESTGIVER_OFFER_REWARD NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), quest->GetQuestId());
|
||||
@@ -676,13 +712,13 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, uint64 npcGUID,
|
||||
data << uint32(quest->GetReqItemsCount());
|
||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
if (!quest->ReqItemId[i])
|
||||
if (!quest->RequiredItemId[i])
|
||||
continue;
|
||||
|
||||
data << uint32(quest->ReqItemId[i]);
|
||||
data << uint32(quest->ReqItemCount[i]);
|
||||
data << uint32(quest->RequiredItemId[i]);
|
||||
data << uint32(quest->RequiredItemCount[i]);
|
||||
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->ReqItemId[i]))
|
||||
if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RequiredItemId[i]))
|
||||
data << uint32(itemTemplate->DisplayInfoID);
|
||||
else
|
||||
data << uint32(0);
|
||||
|
||||
@@ -67,7 +67,15 @@ enum ItemModType
|
||||
ITEM_MOD_SPELL_POWER = 45,
|
||||
ITEM_MOD_HEALTH_REGEN = 46,
|
||||
ITEM_MOD_SPELL_PENETRATION = 47,
|
||||
ITEM_MOD_BLOCK_VALUE = 48
|
||||
ITEM_MOD_BLOCK_VALUE = 48,
|
||||
ITEM_MOD_MASTERY_RATING = 49,
|
||||
ITEM_MOD_EXTRA_ARMOR = 50,
|
||||
ITEM_MOD_FIRE_RESISTANCE = 51,
|
||||
ITEM_MOD_FROST_RESISTANCE = 52,
|
||||
ITEM_MOD_HOLY_RESISTANCE = 53,
|
||||
ITEM_MOD_SHADOW_RESISTANCE = 54,
|
||||
ITEM_MOD_NATURE_RESISTANCE = 55,
|
||||
ITEM_MOD_ARCANE_RESISTANCE = 56,
|
||||
};
|
||||
|
||||
#define MAX_ITEM_MOD 49
|
||||
@@ -189,7 +197,8 @@ enum ItemFlagsExtra
|
||||
ITEM_FLAGS_EXTRA_HORDE_ONLY = 0x00000001,
|
||||
ITEM_FLAGS_EXTRA_ALLIANCE_ONLY = 0x00000002,
|
||||
ITEM_FLAGS_EXTRA_EXT_COST_REQUIRES_GOLD = 0x00000004, // when item uses extended cost, gold is also required
|
||||
ITEM_FLAGS_EXTRA_NEED_ROLL_DISABLED = 0x00000100
|
||||
ITEM_FLAGS_EXTRA_NEED_ROLL_DISABLED = 0x00000100,
|
||||
ITEM_FLAGS_EXTRA_CASTER_WEAPON = 0x00000200,
|
||||
};
|
||||
|
||||
enum BAG_FAMILY_MASK
|
||||
@@ -542,24 +551,19 @@ inline uint8 ItemSubClassToDurabilityMultiplierId(uint32 ItemClass, uint32 ItemS
|
||||
#pragma pack(push, 1)
|
||||
#endif
|
||||
|
||||
struct _Damage
|
||||
{
|
||||
float DamageMin;
|
||||
float DamageMax;
|
||||
uint32 DamageType; // id from Resistances.dbc
|
||||
};
|
||||
|
||||
struct _ItemStat
|
||||
{
|
||||
uint32 ItemStatType;
|
||||
int32 ItemStatValue;
|
||||
int32 ItemStatUnk1;
|
||||
int32 ItemStatUnk2;
|
||||
};
|
||||
|
||||
struct _Spell
|
||||
{
|
||||
int32 SpellId; // id from Spell.dbc
|
||||
uint32 SpellTrigger;
|
||||
int32 SpellCharges;
|
||||
float SpellPPMRate;
|
||||
int32 SpellCooldown;
|
||||
uint32 SpellCategory; // id from SpellCategory.dbc
|
||||
int32 SpellCategoryCooldown;
|
||||
@@ -582,12 +586,11 @@ struct ItemTemplate
|
||||
uint32 Class; // id from ItemClass.dbc
|
||||
uint32 SubClass; // id from ItemSubClass.dbc
|
||||
int32 Unk0;
|
||||
std::string Name1;
|
||||
std::string Name1;
|
||||
uint32 DisplayInfoID; // id from ItemDisplayInfo.dbc
|
||||
uint32 Quality;
|
||||
uint32 Flags;
|
||||
uint32 Flags2;
|
||||
uint32 BuyCount;
|
||||
int32 BuyPrice;
|
||||
uint32 SellPrice;
|
||||
uint32 InventoryType;
|
||||
@@ -605,24 +608,14 @@ struct ItemTemplate
|
||||
int32 MaxCount; // <= 0: no limit
|
||||
int32 Stackable; // 0: not allowed, -1: put in player coin info tab and don't limit stacking (so 1 slot)
|
||||
uint32 ContainerSlots;
|
||||
uint32 StatsCount;
|
||||
_ItemStat ItemStat[MAX_ITEM_PROTO_STATS];
|
||||
uint32 ScalingStatDistribution; // id from ScalingStatDistribution.dbc
|
||||
uint32 ScalingStatValue; // mask for selecting column in ScalingStatValues.dbc
|
||||
_Damage Damage[MAX_ITEM_PROTO_DAMAGES];
|
||||
uint32 Armor;
|
||||
uint32 HolyRes;
|
||||
uint32 FireRes;
|
||||
uint32 NatureRes;
|
||||
uint32 FrostRes;
|
||||
uint32 ShadowRes;
|
||||
uint32 ArcaneRes;
|
||||
uint32 DamageType; // id from Resistances.dbc
|
||||
uint32 Delay;
|
||||
uint32 AmmoType;
|
||||
float RangedModRange;
|
||||
_Spell Spells[MAX_ITEM_PROTO_SPELLS];
|
||||
uint32 Bonding;
|
||||
std::string Description;
|
||||
std::string Description;
|
||||
uint32 PageText;
|
||||
uint32 LanguageID;
|
||||
uint32 PageMaterial;
|
||||
@@ -632,7 +625,6 @@ struct ItemTemplate
|
||||
uint32 Sheath;
|
||||
int32 RandomProperty; // id from ItemRandomProperties.dbc
|
||||
int32 RandomSuffix; // id from ItemRandomSuffix.dbc
|
||||
uint32 Block;
|
||||
uint32 ItemSet; // id from ItemSet.dbc
|
||||
uint32 MaxDurability;
|
||||
uint32 Area; // id from AreaTable.dbc
|
||||
@@ -642,13 +634,24 @@ struct ItemTemplate
|
||||
_Socket Socket[MAX_ITEM_PROTO_SOCKETS];
|
||||
uint32 socketBonus; // id from SpellItemEnchantment.dbc
|
||||
uint32 GemProperties; // id from GemProperties.dbc
|
||||
uint32 RequiredDisenchantSkill;
|
||||
float ArmorDamageModifier;
|
||||
int32 Duration; // negative = realtime, positive = ingame time
|
||||
uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
|
||||
uint32 HolidayId; // id from Holidays.dbc
|
||||
float StatScalingFactor;
|
||||
int32 Field130;
|
||||
int32 Field131;
|
||||
|
||||
// extra fields, not part of db2 files
|
||||
uint32 BuyCount;
|
||||
float DamageMin;
|
||||
float DamageMax;
|
||||
float DPS;
|
||||
uint32 Armor;
|
||||
float SpellPPMRate;
|
||||
uint32 ScriptId;
|
||||
uint32 DisenchantID;
|
||||
uint32 RequiredDisenchantSkill;
|
||||
uint32 FoodType;
|
||||
uint32 MinMoneyLoot;
|
||||
uint32 MaxMoneyLoot;
|
||||
@@ -679,22 +682,12 @@ struct ItemTemplate
|
||||
return (Stackable == 2147483647 || Stackable <= 0) ? uint32(0x7FFFFFFF-1) : uint32(Stackable);
|
||||
}
|
||||
|
||||
float getDPS() const
|
||||
{
|
||||
if (Delay == 0)
|
||||
return 0;
|
||||
float temp = 0;
|
||||
for (int i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
|
||||
temp+=Damage[i].DamageMin + Damage[i].DamageMax;
|
||||
return temp*500/Delay;
|
||||
}
|
||||
|
||||
int32 getFeralBonus(int32 extraDPS = 0) const
|
||||
{
|
||||
// 0x02A5F3 - is mask for Melee weapon from ItemSubClassMask.dbc
|
||||
if (Class == ITEM_CLASS_WEAPON && (1<<SubClass)&0x02A5F3)
|
||||
if (Class == ITEM_CLASS_WEAPON && (1 << SubClass) & 0x02A5F3)
|
||||
{
|
||||
int32 bonus = int32((extraDPS + getDPS())*14.0f) - 767;
|
||||
int32 bonus = int32((extraDPS + DPS) * 14.0f) - 767;
|
||||
if (bonus < 0)
|
||||
return 0;
|
||||
return bonus;
|
||||
|
||||
@@ -19,16 +19,17 @@
|
||||
#ifndef _UPDATEFIELDS_AUTO_H
|
||||
#define _UPDATEFIELDS_AUTO_H
|
||||
|
||||
// Auto generated for version 3, 3, 5, 12340
|
||||
// Auto generated for version 4, 2, 2, 14545
|
||||
|
||||
enum EObjectFields
|
||||
{
|
||||
OBJECT_FIELD_GUID = 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
OBJECT_FIELD_TYPE = 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
OBJECT_FIELD_ENTRY = 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
OBJECT_FIELD_SCALE_X = 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
OBJECT_FIELD_PADDING = 0x0005, // Size: 1, Type: INT, Flags: NONE
|
||||
OBJECT_END = 0x0006,
|
||||
OBJECT_FIELD_DATA = 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
OBJECT_FIELD_TYPE = 0x0004, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
OBJECT_FIELD_ENTRY = 0x0005, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
OBJECT_FIELD_SCALE_X = 0x0006, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
OBJECT_FIELD_PADDING = 0x0007, // Size: 1, Type: INT, Flags: NONE
|
||||
OBJECT_END = 0x0008,
|
||||
};
|
||||
|
||||
enum EItemFields
|
||||
@@ -37,9 +38,9 @@ enum EItemFields
|
||||
ITEM_FIELD_CONTAINED = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
ITEM_FIELD_CREATOR = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
|
||||
ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
|
||||
ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER, ITEM_OWNER
|
||||
ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: OWNER, UNUSED1
|
||||
ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER, UNUSED1
|
||||
ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER, UNUSED1
|
||||
ITEM_FIELD_FLAGS = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_1_1 = OBJECT_END + 0x0010, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_1_3 = OBJECT_END + 0x0012, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
@@ -65,13 +66,17 @@ enum EItemFields
|
||||
ITEM_FIELD_ENCHANTMENT_11_3 = OBJECT_END + 0x0030, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_12_1 = OBJECT_END + 0x0031, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_12_3 = OBJECT_END + 0x0033, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x0034, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_DURABILITY = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
|
||||
ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0037, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER
|
||||
ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x0038, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_PAD = OBJECT_END + 0x0039, // Size: 1, Type: INT, Flags: NONE
|
||||
ITEM_END = OBJECT_END + 0x003A,
|
||||
ITEM_FIELD_ENCHANTMENT_13_1 = OBJECT_END + 0x0034, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_13_3 = OBJECT_END + 0x0036, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_14_1 = OBJECT_END + 0x0037, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_ENCHANTMENT_14_3 = OBJECT_END + 0x0039, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x003A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x003B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_DURABILITY = OBJECT_END + 0x003C, // Size: 1, Type: INT, Flags: OWNER, UNUSED1
|
||||
ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x003D, // Size: 1, Type: INT, Flags: OWNER, UNUSED1
|
||||
ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x003E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
ITEM_FIELD_PAD = OBJECT_END + 0x003F, // Size: 1, Type: INT, Flags: NONE
|
||||
ITEM_END = OBJECT_END + 0x0040,
|
||||
};
|
||||
|
||||
enum EContainerFields
|
||||
@@ -100,297 +105,404 @@ enum EUnitFields
|
||||
UNIT_FIELD_POWER3 = OBJECT_END + 0x0015, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER4 = OBJECT_END + 0x0016, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER5 = OBJECT_END + 0x0017, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER6 = OBJECT_END + 0x0018, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER7 = OBJECT_END + 0x0019, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER1 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER2 = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER6 = OBJECT_END + 0x0020, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER7 = OBJECT_END + 0x0021, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x0022, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x0029, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_LEVEL = OBJECT_END + 0x0030, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x0031, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x0032, // Size: 3, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_AURASTATE = OBJECT_END + 0x0037, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x0038, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x003A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x003B, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_COMBATREACH = OBJECT_END + 0x003C, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_DISPLAYID = OBJECT_END + 0x003D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x003E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x003F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0040, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
|
||||
UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0041, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x0042, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x0043, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_LEADER
|
||||
UNIT_FIELD_BYTES_1 = OBJECT_END + 0x0044, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_PETNUMBER = OBJECT_END + 0x0045, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x0046, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x0047, // Size: 1, Type: INT, Flags: OWNER
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x0048, // Size: 1, Type: INT, Flags: OWNER
|
||||
UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x0049, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_MOD_CAST_SPEED = OBJECT_END + 0x004A, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_CREATED_BY_SPELL = OBJECT_END + 0x004B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_NPC_FLAGS = OBJECT_END + 0x004C, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
UNIT_NPC_EMOTESTATE = OBJECT_END + 0x004D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_STAT0 = OBJECT_END + 0x004E, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT1 = OBJECT_END + 0x004F, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT2 = OBJECT_END + 0x0050, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT3 = OBJECT_END + 0x0051, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT4 = OBJECT_END + 0x0052, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT0 = OBJECT_END + 0x0053, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT1 = OBJECT_END + 0x0054, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT2 = OBJECT_END + 0x0055, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT3 = OBJECT_END + 0x0056, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT4 = OBJECT_END + 0x0057, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT0 = OBJECT_END + 0x0058, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT1 = OBJECT_END + 0x0059, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x005A, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x005B, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x005C, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCES = OBJECT_END + 0x005D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER, PARTY_LEADER
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x0064, // Size: 7, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x006B, // Size: 7, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BASE_MANA = OBJECT_END + 0x0072, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x0073, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BYTES_2 = OBJECT_END + 0x0074, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x0075, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MODS = OBJECT_END + 0x0076, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0077, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x0078, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MODS = OBJECT_END + 0x0079, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x007A, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x007B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x007C, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x007D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0084, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x008B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x008C, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_PADDING = OBJECT_END + 0x008D, // Size: 1, Type: INT, Flags: NONE
|
||||
UNIT_END = OBJECT_END + 0x008E,
|
||||
UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x0018, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER1 = OBJECT_END + 0x0019, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER2 = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x001E, // Size: 5, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_MEMBER
|
||||
UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x0023, // Size: 5, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_MEMBER
|
||||
UNIT_FIELD_LEVEL = OBJECT_END + 0x0028, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x0029, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x002A, // Size: 3, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS = OBJECT_END + 0x002D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x002E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_AURASTATE = OBJECT_END + 0x002F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x0030, // Size: 2, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x0032, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x0033, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_COMBATREACH = OBJECT_END + 0x0034, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_DISPLAYID = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: UNUSED2
|
||||
UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x0037, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0038, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER
|
||||
UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0039, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER
|
||||
UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x003A, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER
|
||||
UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x003B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER
|
||||
UNIT_FIELD_BYTES_1 = OBJECT_END + 0x003C, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_PETNUMBER = OBJECT_END + 0x003D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x003E, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x003F, // Size: 1, Type: INT, Flags: OWNER
|
||||
UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x0040, // Size: 1, Type: INT, Flags: OWNER
|
||||
UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x0041, // Size: 1, Type: INT, Flags: UNUSED2
|
||||
UNIT_MOD_CAST_SPEED = OBJECT_END + 0x0042, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_MOD_CAST_HASTE = OBJECT_END + 0x0043, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_CREATED_BY_SPELL = OBJECT_END + 0x0044, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_NPC_FLAGS = OBJECT_END + 0x0045, // Size: 1, Type: INT, Flags: UNUSED2
|
||||
UNIT_NPC_EMOTESTATE = OBJECT_END + 0x0046, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_STAT0 = OBJECT_END + 0x0047, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT1 = OBJECT_END + 0x0048, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT2 = OBJECT_END + 0x0049, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT3 = OBJECT_END + 0x004A, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_STAT4 = OBJECT_END + 0x004B, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT0 = OBJECT_END + 0x004C, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT1 = OBJECT_END + 0x004D, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT2 = OBJECT_END + 0x004E, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT3 = OBJECT_END + 0x004F, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POSSTAT4 = OBJECT_END + 0x0050, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT0 = OBJECT_END + 0x0051, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT1 = OBJECT_END + 0x0052, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x0053, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x0054, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x0055, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCES = OBJECT_END + 0x0056, // Size: 7, Type: INT, Flags: PRIVATE, OWNER, ITEM_OWNER
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x005D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x0064, // Size: 7, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BASE_MANA = OBJECT_END + 0x006B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x006C, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_BYTES_2 = OBJECT_END + 0x006D, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x006E, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MOD_POS = OBJECT_END + 0x006F, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x0070, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0071, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x0072, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS = OBJECT_END + 0x0073, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x0074, // Size: 1, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0075, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x0076, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x0077, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x0078, // Size: 7, Type: INT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x007F, // Size: 7, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x0086, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER
|
||||
UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x0087, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
UNIT_FIELD_MAXITEMLEVEL = OBJECT_END + 0x0088, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
UNIT_FIELD_PADDING = OBJECT_END + 0x0089, // Size: 1, Type: INT, Flags: NONE
|
||||
UNIT_END = OBJECT_END + 0x008A,
|
||||
|
||||
PLAYER_DUEL_ARBITER = UNIT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
PLAYER_FLAGS = UNIT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILDID = UNIT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILDRANK = UNIT_END + 0x0004, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_BYTES = UNIT_END + 0x0005, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_BYTES_2 = UNIT_END + 0x0006, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_BYTES_3 = UNIT_END + 0x0007, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_DUEL_TEAM = UNIT_END + 0x0008, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILD_TIMESTAMP = UNIT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_QUEST_LOG_1_1 = UNIT_END + 0x000A, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_1_2 = UNIT_END + 0x000B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_1_3 = UNIT_END + 0x000C, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_1_4 = UNIT_END + 0x000E, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_2_1 = UNIT_END + 0x000F, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_2_2 = UNIT_END + 0x0010, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_2_3 = UNIT_END + 0x0011, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_2_5 = UNIT_END + 0x0013, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_3_1 = UNIT_END + 0x0014, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_3_2 = UNIT_END + 0x0015, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_3_3 = UNIT_END + 0x0016, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_3_5 = UNIT_END + 0x0018, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_4_1 = UNIT_END + 0x0019, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_4_2 = UNIT_END + 0x001A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_4_3 = UNIT_END + 0x001B, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_4_5 = UNIT_END + 0x001D, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_5_1 = UNIT_END + 0x001E, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_5_2 = UNIT_END + 0x001F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_5_3 = UNIT_END + 0x0020, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_5_5 = UNIT_END + 0x0022, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_6_1 = UNIT_END + 0x0023, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_6_2 = UNIT_END + 0x0024, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_6_3 = UNIT_END + 0x0025, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_6_5 = UNIT_END + 0x0027, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_7_1 = UNIT_END + 0x0028, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_7_2 = UNIT_END + 0x0029, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_7_3 = UNIT_END + 0x002A, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_7_5 = UNIT_END + 0x002C, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_8_1 = UNIT_END + 0x002D, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_8_2 = UNIT_END + 0x002E, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_8_3 = UNIT_END + 0x002F, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_8_5 = UNIT_END + 0x0031, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_9_1 = UNIT_END + 0x0032, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_9_2 = UNIT_END + 0x0033, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_9_3 = UNIT_END + 0x0034, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_9_5 = UNIT_END + 0x0036, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_10_1 = UNIT_END + 0x0037, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_10_2 = UNIT_END + 0x0038, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_10_3 = UNIT_END + 0x0039, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_10_5 = UNIT_END + 0x003B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_11_1 = UNIT_END + 0x003C, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_11_2 = UNIT_END + 0x003D, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_11_3 = UNIT_END + 0x003E, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_11_5 = UNIT_END + 0x0040, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_12_1 = UNIT_END + 0x0041, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_12_2 = UNIT_END + 0x0042, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_12_3 = UNIT_END + 0x0043, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_12_5 = UNIT_END + 0x0045, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_13_1 = UNIT_END + 0x0046, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_13_2 = UNIT_END + 0x0047, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_13_3 = UNIT_END + 0x0048, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_13_5 = UNIT_END + 0x004A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_14_1 = UNIT_END + 0x004B, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_14_2 = UNIT_END + 0x004C, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_14_3 = UNIT_END + 0x004D, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_14_5 = UNIT_END + 0x004F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_15_1 = UNIT_END + 0x0050, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_15_2 = UNIT_END + 0x0051, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_15_3 = UNIT_END + 0x0052, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_15_5 = UNIT_END + 0x0054, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_16_1 = UNIT_END + 0x0055, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_16_2 = UNIT_END + 0x0056, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_16_3 = UNIT_END + 0x0057, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_16_5 = UNIT_END + 0x0059, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_17_1 = UNIT_END + 0x005A, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_17_2 = UNIT_END + 0x005B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_17_3 = UNIT_END + 0x005C, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_17_5 = UNIT_END + 0x005E, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_18_1 = UNIT_END + 0x005F, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_18_2 = UNIT_END + 0x0060, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_18_3 = UNIT_END + 0x0061, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_18_5 = UNIT_END + 0x0063, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_19_1 = UNIT_END + 0x0064, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_19_2 = UNIT_END + 0x0065, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_19_3 = UNIT_END + 0x0066, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_19_5 = UNIT_END + 0x0068, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_20_1 = UNIT_END + 0x0069, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_20_2 = UNIT_END + 0x006A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_20_3 = UNIT_END + 0x006B, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_20_5 = UNIT_END + 0x006D, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_21_1 = UNIT_END + 0x006E, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_21_2 = UNIT_END + 0x006F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_21_3 = UNIT_END + 0x0070, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_21_5 = UNIT_END + 0x0072, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_22_1 = UNIT_END + 0x0073, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_22_2 = UNIT_END + 0x0074, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_22_3 = UNIT_END + 0x0075, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_22_5 = UNIT_END + 0x0077, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_23_1 = UNIT_END + 0x0078, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_23_2 = UNIT_END + 0x0079, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_23_3 = UNIT_END + 0x007A, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_23_5 = UNIT_END + 0x007C, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_24_1 = UNIT_END + 0x007D, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_24_2 = UNIT_END + 0x007E, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_24_3 = UNIT_END + 0x007F, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_24_5 = UNIT_END + 0x0081, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_25_1 = UNIT_END + 0x0082, // Size: 1, Type: INT, Flags: PARTY_MEMBER
|
||||
PLAYER_QUEST_LOG_25_2 = UNIT_END + 0x0083, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_25_3 = UNIT_END + 0x0084, // Size: 2, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_QUEST_LOG_25_5 = UNIT_END + 0x0086, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_VISIBLE_ITEM_1_ENTRYID = UNIT_END + 0x0087, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_ENCHANTMENT = UNIT_END + 0x0088, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_ENTRYID = UNIT_END + 0x0089, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_ENCHANTMENT = UNIT_END + 0x008A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_ENTRYID = UNIT_END + 0x008B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_ENCHANTMENT = UNIT_END + 0x008C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_ENTRYID = UNIT_END + 0x008D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_ENCHANTMENT = UNIT_END + 0x008E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_ENTRYID = UNIT_END + 0x008F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_ENCHANTMENT = UNIT_END + 0x0090, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_ENTRYID = UNIT_END + 0x0091, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_ENCHANTMENT = UNIT_END + 0x0092, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_ENTRYID = UNIT_END + 0x0093, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_ENCHANTMENT = UNIT_END + 0x0094, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_ENTRYID = UNIT_END + 0x0095, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_ENCHANTMENT = UNIT_END + 0x0096, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_ENTRYID = UNIT_END + 0x0097, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_ENCHANTMENT = UNIT_END + 0x0098, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_ENTRYID = UNIT_END + 0x0099, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_ENCHANTMENT = UNIT_END + 0x009A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_ENTRYID = UNIT_END + 0x009B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_ENCHANTMENT = UNIT_END + 0x009C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_ENTRYID = UNIT_END + 0x009D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_ENCHANTMENT = UNIT_END + 0x009E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_ENTRYID = UNIT_END + 0x009F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_ENCHANTMENT = UNIT_END + 0x00A0, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_ENTRYID = UNIT_END + 0x00A1, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_ENCHANTMENT = UNIT_END + 0x00A2, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_ENTRYID = UNIT_END + 0x00A3, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_ENCHANTMENT = UNIT_END + 0x00A4, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_ENTRYID = UNIT_END + 0x00A5, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_ENCHANTMENT = UNIT_END + 0x00A6, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_ENTRYID = UNIT_END + 0x00A7, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_ENCHANTMENT = UNIT_END + 0x00A8, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_ENTRYID = UNIT_END + 0x00A9, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_ENCHANTMENT = UNIT_END + 0x00AA, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_ENTRYID = UNIT_END + 0x00AB, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_ENCHANTMENT = UNIT_END + 0x00AC, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_CHOSEN_TITLE = UNIT_END + 0x00AD, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_FAKE_INEBRIATION = UNIT_END + 0x00AE, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_FIELD_PAD_0 = UNIT_END + 0x00AF, // Size: 1, Type: INT, Flags: NONE
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x00B0, // Size: 46, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_PACK_SLOT_1 = UNIT_END + 0x00DE, // Size: 32, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANK_SLOT_1 = UNIT_END + 0x00FE, // Size: 56, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANKBAG_SLOT_1 = UNIT_END + 0x0136, // Size: 14, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = UNIT_END + 0x0144, // Size: 24, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_KEYRING_SLOT_1 = UNIT_END + 0x015C, // Size: 64, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_CURRENCYTOKEN_SLOT_1 = UNIT_END + 0x019C, // Size: 64, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FARSIGHT = UNIT_END + 0x01DC, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x01DE, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES1 = UNIT_END + 0x01E0, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES2 = UNIT_END + 0x01E2, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_KNOWN_CURRENCIES = UNIT_END + 0x01E4, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_XP = UNIT_END + 0x01E6, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x01E7, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SKILL_INFO_1_1 = UNIT_END + 0x01E8, // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS1 = UNIT_END + 0x0368, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS2 = UNIT_END + 0x0369, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_CREATURES = UNIT_END + 0x036A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_RESOURCES = UNIT_END + 0x036B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x036C, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x036D, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x036E, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_EXPERTISE = UNIT_END + 0x036F, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x0370, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x0371, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x0372, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x0373, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x0374, // Size: 7, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK = UNIT_END + 0x037B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE = UNIT_END + 0x037C, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x037D, // Size: 128, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_REST_STATE_EXPERIENCE = UNIT_END + 0x03FD, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COINAGE = UNIT_END + 0x03FE, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x03FF, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x0406, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x040D, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x0414, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_PCT = UNIT_END + 0x0415, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_PCT = UNIT_END + 0x0416, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x0417, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x0418, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES = UNIT_END + 0x0419, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_AMMO_ID = UNIT_END + 0x041A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SELF_RES_SPELL = UNIT_END + 0x041B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x041C, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x041D, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x0429, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_KILLS = UNIT_END + 0x0435, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_FIELD_TODAY_CONTRIBUTION = UNIT_END + 0x0436, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_YESTERDAY_CONTRIBUTION = UNIT_END + 0x0437, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_LIFETIME_HONORABLE_KILLS = UNIT_END + 0x0438, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES2 = UNIT_END + 0x0439, // Size: 1, Type: 6, Flags: PRIVATE
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x043A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x043B, // Size: 25, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x0454, // Size: 21, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x0469, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x046A, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x046B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x046C, // Size: 25, Type: INT, Flags: PRIVATE
|
||||
PLAYER_RUNE_REGEN_1 = UNIT_END + 0x0485, // Size: 4, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0x0489, // Size: 3, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_GLYPH_SLOTS_1 = UNIT_END + 0x048C, // Size: 6, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_GLYPHS_1 = UNIT_END + 0x0492, // Size: 6, Type: INT, Flags: PRIVATE
|
||||
PLAYER_GLYPHS_ENABLED = UNIT_END + 0x0498, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_PET_SPELL_POWER = UNIT_END + 0x0499, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_END = UNIT_END + 0x049A,
|
||||
PLAYER_GUILDRANK = UNIT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILDDELETE_DATE = UNIT_END + 0x0004, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILDLEVEL = UNIT_END + 0x0005, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_BYTES = UNIT_END + 0x0006, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_BYTES_2 = UNIT_END + 0x0007, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_BYTES_3 = UNIT_END + 0x0008, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
PLAYER_DUEL_TEAM = UNIT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_GUILD_TIMESTAMP = UNIT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_QUEST_LOG_1_1 = UNIT_END + 0x000B, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_1_2 = UNIT_END + 0x000C, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_1_3 = UNIT_END + 0x000D, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_1_4 = UNIT_END + 0x000F, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_2_1 = UNIT_END + 0x0010, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_2_2 = UNIT_END + 0x0011, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_2_3 = UNIT_END + 0x0012, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_2_5 = UNIT_END + 0x0014, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_3_1 = UNIT_END + 0x0015, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_3_2 = UNIT_END + 0x0016, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_3_3 = UNIT_END + 0x0017, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_3_5 = UNIT_END + 0x0019, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_4_1 = UNIT_END + 0x001A, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_4_2 = UNIT_END + 0x001B, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_4_3 = UNIT_END + 0x001C, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_4_5 = UNIT_END + 0x001E, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_5_1 = UNIT_END + 0x001F, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_5_2 = UNIT_END + 0x0020, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_5_3 = UNIT_END + 0x0021, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_5_5 = UNIT_END + 0x0023, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_6_1 = UNIT_END + 0x0024, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_6_2 = UNIT_END + 0x0025, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_6_3 = UNIT_END + 0x0026, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_6_5 = UNIT_END + 0x0028, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_7_1 = UNIT_END + 0x0029, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_7_2 = UNIT_END + 0x002A, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_7_3 = UNIT_END + 0x002B, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_7_5 = UNIT_END + 0x002D, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_8_1 = UNIT_END + 0x002E, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_8_2 = UNIT_END + 0x002F, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_8_3 = UNIT_END + 0x0030, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_8_5 = UNIT_END + 0x0032, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_9_1 = UNIT_END + 0x0033, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_9_2 = UNIT_END + 0x0034, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_9_3 = UNIT_END + 0x0035, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_9_5 = UNIT_END + 0x0037, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_10_1 = UNIT_END + 0x0038, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_10_2 = UNIT_END + 0x0039, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_10_3 = UNIT_END + 0x003A, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_10_5 = UNIT_END + 0x003C, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_11_1 = UNIT_END + 0x003D, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_11_2 = UNIT_END + 0x003E, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_11_3 = UNIT_END + 0x003F, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_11_5 = UNIT_END + 0x0041, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_12_1 = UNIT_END + 0x0042, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_12_2 = UNIT_END + 0x0043, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_12_3 = UNIT_END + 0x0044, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_12_5 = UNIT_END + 0x0046, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_13_1 = UNIT_END + 0x0047, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_13_2 = UNIT_END + 0x0048, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_13_3 = UNIT_END + 0x0049, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_13_5 = UNIT_END + 0x004B, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_14_1 = UNIT_END + 0x004C, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_14_2 = UNIT_END + 0x004D, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_14_3 = UNIT_END + 0x004E, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_14_5 = UNIT_END + 0x0050, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_15_1 = UNIT_END + 0x0051, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_15_2 = UNIT_END + 0x0052, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_15_3 = UNIT_END + 0x0053, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_15_5 = UNIT_END + 0x0055, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_16_1 = UNIT_END + 0x0056, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_16_2 = UNIT_END + 0x0057, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_16_3 = UNIT_END + 0x0058, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_16_5 = UNIT_END + 0x005A, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_17_1 = UNIT_END + 0x005B, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_17_2 = UNIT_END + 0x005C, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_17_3 = UNIT_END + 0x005D, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_17_5 = UNIT_END + 0x005F, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_18_1 = UNIT_END + 0x0060, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_18_2 = UNIT_END + 0x0061, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_18_3 = UNIT_END + 0x0062, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_18_5 = UNIT_END + 0x0064, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_19_1 = UNIT_END + 0x0065, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_19_2 = UNIT_END + 0x0066, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_19_3 = UNIT_END + 0x0067, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_19_5 = UNIT_END + 0x0069, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_20_1 = UNIT_END + 0x006A, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_20_2 = UNIT_END + 0x006B, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_20_3 = UNIT_END + 0x006C, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_20_5 = UNIT_END + 0x006E, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_21_1 = UNIT_END + 0x006F, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_21_2 = UNIT_END + 0x0070, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_21_3 = UNIT_END + 0x0071, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_21_5 = UNIT_END + 0x0073, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_22_1 = UNIT_END + 0x0074, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_22_2 = UNIT_END + 0x0075, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_22_3 = UNIT_END + 0x0076, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_22_5 = UNIT_END + 0x0078, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_23_1 = UNIT_END + 0x0079, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_23_2 = UNIT_END + 0x007A, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_23_3 = UNIT_END + 0x007B, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_23_5 = UNIT_END + 0x007D, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_24_1 = UNIT_END + 0x007E, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_24_2 = UNIT_END + 0x007F, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_24_3 = UNIT_END + 0x0080, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_24_5 = UNIT_END + 0x0082, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_25_1 = UNIT_END + 0x0083, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_25_2 = UNIT_END + 0x0084, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_25_3 = UNIT_END + 0x0085, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_25_5 = UNIT_END + 0x0087, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_26_1 = UNIT_END + 0x0088, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_26_2 = UNIT_END + 0x0089, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_26_3 = UNIT_END + 0x008A, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_26_5 = UNIT_END + 0x008C, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_27_1 = UNIT_END + 0x008D, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_27_2 = UNIT_END + 0x008E, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_27_3 = UNIT_END + 0x008F, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_27_5 = UNIT_END + 0x0091, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_28_1 = UNIT_END + 0x0092, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_28_2 = UNIT_END + 0x0093, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_28_3 = UNIT_END + 0x0094, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_28_5 = UNIT_END + 0x0096, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_29_1 = UNIT_END + 0x0097, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_29_2 = UNIT_END + 0x0098, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_29_3 = UNIT_END + 0x0099, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_29_5 = UNIT_END + 0x009B, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_30_1 = UNIT_END + 0x009C, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_30_2 = UNIT_END + 0x009D, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_30_3 = UNIT_END + 0x009E, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_30_5 = UNIT_END + 0x00A0, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_31_1 = UNIT_END + 0x00A1, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_31_2 = UNIT_END + 0x00A2, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_31_3 = UNIT_END + 0x00A3, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_31_5 = UNIT_END + 0x00A5, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_32_1 = UNIT_END + 0x00A6, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_32_2 = UNIT_END + 0x00A7, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_32_3 = UNIT_END + 0x00A8, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_32_5 = UNIT_END + 0x00AA, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_33_1 = UNIT_END + 0x00AB, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_33_2 = UNIT_END + 0x00AC, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_33_3 = UNIT_END + 0x00AD, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_33_5 = UNIT_END + 0x00AF, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_34_1 = UNIT_END + 0x00B0, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_34_2 = UNIT_END + 0x00B1, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_34_3 = UNIT_END + 0x00B2, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_34_5 = UNIT_END + 0x00B4, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_35_1 = UNIT_END + 0x00B5, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_35_2 = UNIT_END + 0x00B6, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_35_3 = UNIT_END + 0x00B7, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_35_5 = UNIT_END + 0x00B9, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_36_1 = UNIT_END + 0x00BA, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_36_2 = UNIT_END + 0x00BB, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_36_3 = UNIT_END + 0x00BC, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_36_5 = UNIT_END + 0x00BE, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_37_1 = UNIT_END + 0x00BF, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_37_2 = UNIT_END + 0x00C0, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_37_3 = UNIT_END + 0x00C1, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_37_5 = UNIT_END + 0x00C3, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_38_1 = UNIT_END + 0x00C4, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_38_2 = UNIT_END + 0x00C5, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_38_3 = UNIT_END + 0x00C6, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_38_5 = UNIT_END + 0x00C8, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_39_1 = UNIT_END + 0x00C9, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_39_2 = UNIT_END + 0x00CA, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_39_3 = UNIT_END + 0x00CB, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_39_5 = UNIT_END + 0x00CD, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_40_1 = UNIT_END + 0x00CE, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_40_2 = UNIT_END + 0x00CF, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_40_3 = UNIT_END + 0x00D0, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_40_5 = UNIT_END + 0x00D2, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_41_1 = UNIT_END + 0x00D3, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_41_2 = UNIT_END + 0x00D4, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_41_3 = UNIT_END + 0x00D5, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_41_5 = UNIT_END + 0x00D7, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_42_1 = UNIT_END + 0x00D8, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_42_2 = UNIT_END + 0x00D9, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_42_3 = UNIT_END + 0x00DA, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_42_5 = UNIT_END + 0x00DC, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_43_1 = UNIT_END + 0x00DD, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_43_2 = UNIT_END + 0x00DE, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_43_3 = UNIT_END + 0x00DF, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_43_5 = UNIT_END + 0x00E1, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_44_1 = UNIT_END + 0x00E2, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_44_2 = UNIT_END + 0x00E3, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_44_3 = UNIT_END + 0x00E4, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_44_5 = UNIT_END + 0x00E6, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_45_1 = UNIT_END + 0x00E7, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_45_2 = UNIT_END + 0x00E8, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_45_3 = UNIT_END + 0x00E9, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_45_5 = UNIT_END + 0x00EB, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_46_1 = UNIT_END + 0x00EC, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_46_2 = UNIT_END + 0x00ED, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_46_3 = UNIT_END + 0x00EE, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_46_5 = UNIT_END + 0x00F0, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_47_1 = UNIT_END + 0x00F1, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_47_2 = UNIT_END + 0x00F2, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_47_3 = UNIT_END + 0x00F3, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_47_5 = UNIT_END + 0x00F5, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_48_1 = UNIT_END + 0x00F6, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_48_2 = UNIT_END + 0x00F7, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_48_3 = UNIT_END + 0x00F8, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_48_5 = UNIT_END + 0x00FA, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_49_1 = UNIT_END + 0x00FB, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_49_2 = UNIT_END + 0x00FC, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_49_3 = UNIT_END + 0x00FD, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_49_5 = UNIT_END + 0x00FF, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_50_1 = UNIT_END + 0x0100, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_50_2 = UNIT_END + 0x0101, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_50_3 = UNIT_END + 0x0102, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER
|
||||
PLAYER_QUEST_LOG_50_5 = UNIT_END + 0x0104, // Size: 1, Type: INT, Flags: PARTY_LEADER
|
||||
PLAYER_VISIBLE_ITEM_1_ENTRYID = UNIT_END + 0x0105, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_1_ENCHANTMENT = UNIT_END + 0x0106, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_ENTRYID = UNIT_END + 0x0107, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_2_ENCHANTMENT = UNIT_END + 0x0108, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_ENTRYID = UNIT_END + 0x0109, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_3_ENCHANTMENT = UNIT_END + 0x010A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_ENTRYID = UNIT_END + 0x010B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_4_ENCHANTMENT = UNIT_END + 0x010C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_ENTRYID = UNIT_END + 0x010D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_5_ENCHANTMENT = UNIT_END + 0x010E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_ENTRYID = UNIT_END + 0x010F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_6_ENCHANTMENT = UNIT_END + 0x0110, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_ENTRYID = UNIT_END + 0x0111, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_7_ENCHANTMENT = UNIT_END + 0x0112, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_ENTRYID = UNIT_END + 0x0113, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_8_ENCHANTMENT = UNIT_END + 0x0114, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_ENTRYID = UNIT_END + 0x0115, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_9_ENCHANTMENT = UNIT_END + 0x0116, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_ENTRYID = UNIT_END + 0x0117, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_10_ENCHANTMENT = UNIT_END + 0x0118, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_ENTRYID = UNIT_END + 0x0119, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_11_ENCHANTMENT = UNIT_END + 0x011A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_ENTRYID = UNIT_END + 0x011B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_12_ENCHANTMENT = UNIT_END + 0x011C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_ENTRYID = UNIT_END + 0x011D, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_13_ENCHANTMENT = UNIT_END + 0x011E, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_ENTRYID = UNIT_END + 0x011F, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_14_ENCHANTMENT = UNIT_END + 0x0120, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_ENTRYID = UNIT_END + 0x0121, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_15_ENCHANTMENT = UNIT_END + 0x0122, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_ENTRYID = UNIT_END + 0x0123, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_16_ENCHANTMENT = UNIT_END + 0x0124, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_ENTRYID = UNIT_END + 0x0125, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_17_ENCHANTMENT = UNIT_END + 0x0126, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_ENTRYID = UNIT_END + 0x0127, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_18_ENCHANTMENT = UNIT_END + 0x0128, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_ENTRYID = UNIT_END + 0x0129, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_VISIBLE_ITEM_19_ENCHANTMENT = UNIT_END + 0x012A, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC
|
||||
PLAYER_CHOSEN_TITLE = UNIT_END + 0x012B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_FAKE_INEBRIATION = UNIT_END + 0x012C, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
PLAYER_FIELD_PAD_0 = UNIT_END + 0x012D, // Size: 1, Type: INT, Flags: NONE
|
||||
PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x012E, // Size: 46, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_PACK_SLOT_1 = UNIT_END + 0x015C, // Size: 32, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANK_SLOT_1 = UNIT_END + 0x017C, // Size: 56, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_BANKBAG_SLOT_1 = UNIT_END + 0x01B4, // Size: 14, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_VENDORBUYBACK_SLOT_1 = UNIT_END + 0x01C2, // Size: 24, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FARSIGHT = UNIT_END + 0x01DA, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x01DC, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES1 = UNIT_END + 0x01DE, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER__FIELD_KNOWN_TITLES2 = UNIT_END + 0x01E0, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_XP = UNIT_END + 0x01E2, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x01E3, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SKILL_INFO_1_1 = UNIT_END + 0x01E4, // Size: 384, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_CHARACTER_POINTS = UNIT_END + 0x0364, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_CREATURES = UNIT_END + 0x0365, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_TRACK_RESOURCES = UNIT_END + 0x0366, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_EXPERTISE = UNIT_END + 0x0367, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x0368, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x0369, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x036A, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x036B, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x036C, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x036D, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x036E, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x036F, // Size: 7, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK = UNIT_END + 0x0376, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE = UNIT_END + 0x0377, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_MASTERY = UNIT_END + 0x0378, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x0379, // Size: 144, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_REST_STATE_EXPERIENCE = UNIT_END + 0x0409, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COINAGE = UNIT_END + 0x040A, // Size: 2, Type: LONG, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x040C, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x0413, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x041A, // Size: 7, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x0421, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_PCT = UNIT_END + 0x0422, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HEALING_DONE_PCT = UNIT_END + 0x0423, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS = UNIT_END + 0x0424, // Size: 3, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_SPELL_POWER_PCT = UNIT_END + 0x0427, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x0428, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x0429, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES = UNIT_END + 0x042A, // Size: 1, Type: BYTES, Flags: PRIVATE
|
||||
PLAYER_SELF_RES_SPELL = UNIT_END + 0x042B, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x042C, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x042D, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x0439, // Size: 12, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_KILLS = UNIT_END + 0x0445, // Size: 1, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_FIELD_LIFETIME_HONORABLE_KILLS = UNIT_END + 0x0446, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BYTES2 = UNIT_END + 0x0447, // Size: 1, Type: 6, Flags: PRIVATE
|
||||
PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x0448, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x0449, // Size: 26, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x0463, // Size: 21, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_BATTLEGROUND_RATING = UNIT_END + 0x0478, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x0479, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x047A, // Size: 25, Type: INT, Flags: PRIVATE
|
||||
PLAYER_RUNE_REGEN_1 = UNIT_END + 0x0493, // Size: 4, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0x0497, // Size: 3, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_GLYPH_SLOTS_1 = UNIT_END + 0x049A, // Size: 9, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_GLYPHS_1 = UNIT_END + 0x04A3, // Size: 9, Type: INT, Flags: PRIVATE
|
||||
PLAYER_GLYPHS_ENABLED = UNIT_END + 0x04AC, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_PET_SPELL_POWER = UNIT_END + 0x04AD, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_RESEARCHING_1 = UNIT_END + 0x04AE, // Size: 8, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_FIELD_RESERACH_SITE_1 = UNIT_END + 0x04B6, // Size: 8, Type: TWO_SHORT, Flags: PRIVATE
|
||||
PLAYER_PROFESSION_SKILL_LINE_1 = UNIT_END + 0x04BE, // Size: 2, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_UI_HIT_MODIFIER = UNIT_END + 0x04C0, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_UI_SPELL_HIT_MODIFIER = UNIT_END + 0x04C1, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_HOME_REALM_TIME_OFFSET = UNIT_END + 0x04C2, // Size: 1, Type: INT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HASTE = UNIT_END + 0x04C3, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_RANGED_HASTE = UNIT_END + 0x04C4, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_PET_HASTE = UNIT_END + 0x04C5, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_MOD_HASTE_REGEN = UNIT_END + 0x04C6, // Size: 1, Type: FLOAT, Flags: PRIVATE
|
||||
PLAYER_FIELD_PADDING = UNIT_END + 0x04C7, // Size: 1, Type: INT, Flags: NONE
|
||||
PLAYER_END = UNIT_END + 0x04C8,
|
||||
};
|
||||
|
||||
enum EGameObjectFields
|
||||
@@ -399,7 +511,7 @@ enum EGameObjectFields
|
||||
GAMEOBJECT_DISPLAYID = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_FLAGS = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_PARENTROTATION = OBJECT_END + 0x0004, // Size: 4, Type: FLOAT, Flags: PUBLIC
|
||||
GAMEOBJECT_DYNAMIC = OBJECT_END + 0x0008, // Size: 1, Type: TWO_SHORT, Flags: DYNAMIC
|
||||
GAMEOBJECT_DYNAMIC = OBJECT_END + 0x0008, // Size: 1, Type: TWO_SHORT, Flags: UNUSED2
|
||||
GAMEOBJECT_FACTION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_LEVEL = OBJECT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
GAMEOBJECT_BYTES_1 = OBJECT_END + 0x000B, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
@@ -409,7 +521,7 @@ enum EGameObjectFields
|
||||
enum EDynamicObjectFields
|
||||
{
|
||||
DYNAMICOBJECT_CASTER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC
|
||||
DYNAMICOBJECT_BYTES = OBJECT_END + 0x0002, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
DYNAMICOBJECT_BYTES = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: UNUSED2
|
||||
DYNAMICOBJECT_SPELLID = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_RADIUS = OBJECT_END + 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC
|
||||
DYNAMICOBJECT_CASTTIME = OBJECT_END + 0x0005, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
@@ -424,10 +536,8 @@ enum ECorpseFields
|
||||
CORPSE_FIELD_ITEM = OBJECT_END + 0x0005, // Size: 19, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x0018, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x0019, // Size: 1, Type: BYTES, Flags: PUBLIC
|
||||
CORPSE_FIELD_GUILD = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_FLAGS = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: DYNAMIC
|
||||
CORPSE_FIELD_PAD = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: NONE
|
||||
CORPSE_END = OBJECT_END + 0x001E,
|
||||
CORPSE_FIELD_FLAGS = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC
|
||||
CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: UNUSED2
|
||||
CORPSE_END = OBJECT_END + 0x001C,
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
Pet::Pet(Player* owner, PetType type) : Guardian(NULL, owner),
|
||||
m_usedTalentCount(0), m_removed(false), m_owner(owner),
|
||||
m_happinessTimer(7500), m_petType(type), m_duration(0),
|
||||
m_petType(type), m_duration(0),
|
||||
m_auraRaidUpdateMask(0), m_loading(false), m_declinedname(NULL)
|
||||
{
|
||||
m_unitTypeMask |= UNIT_MASK_PET;
|
||||
@@ -102,25 +102,25 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
|
||||
QueryResult result;
|
||||
|
||||
if (petnumber)
|
||||
// known petnumber entry 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType "
|
||||
// known petnumber entry 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, abdata, savetime, CreatedBySpell, PetType "
|
||||
"FROM character_pet WHERE owner = '%u' AND id = '%u'",
|
||||
ownerid, petnumber);
|
||||
else if (current)
|
||||
// current pet (slot 0) 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType "
|
||||
// current pet (slot 0) 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, abdata, savetime, CreatedBySpell, PetType "
|
||||
"FROM character_pet WHERE owner = '%u' AND slot = '%u'",
|
||||
ownerid, PET_SAVE_AS_CURRENT);
|
||||
else if (petentry)
|
||||
// known petentry entry (unique for summoned pet, but non unique for hunter pet (only from current or not stabled pets)
|
||||
// 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType "
|
||||
// 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, abdata, savetime, CreatedBySpell, PetType "
|
||||
"FROM character_pet WHERE owner = '%u' AND entry = '%u' AND (slot = '%u' OR slot > '%u') ",
|
||||
ownerid, petentry, PET_SAVE_AS_CURRENT, PET_SAVE_LAST_STABLE_SLOT);
|
||||
else
|
||||
// any current or other non-stabled pet (for hunter "call pet")
|
||||
// 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType "
|
||||
// 0 1 2(?) 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
result = CharacterDatabase.PQuery("SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, abdata, savetime, CreatedBySpell, PetType "
|
||||
"FROM character_pet WHERE owner = '%u' AND (slot = '%u' OR slot > '%u') ",
|
||||
ownerid, PET_SAVE_AS_CURRENT, PET_SAVE_LAST_STABLE_SLOT);
|
||||
|
||||
@@ -137,7 +137,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
|
||||
if (!petentry)
|
||||
return false;
|
||||
|
||||
uint32 summon_spell_id = fields[15].GetUInt32();
|
||||
uint32 summon_spell_id = fields[14].GetUInt32();
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(summon_spell_id);
|
||||
|
||||
bool is_temporary_summoned = spellInfo && spellInfo->GetDuration() > 0;
|
||||
@@ -146,7 +146,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
|
||||
if (current && is_temporary_summoned)
|
||||
return false;
|
||||
|
||||
PetType pet_type = PetType(fields[16].GetUInt8());
|
||||
PetType pet_type = PetType(fields[15].GetUInt8());
|
||||
if (pet_type == HUNTER_PET)
|
||||
{
|
||||
CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(petentry);
|
||||
@@ -213,8 +213,6 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
|
||||
|
||||
SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
||||
// this enables popup window (pet abandon, cancel)
|
||||
SetMaxPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS));
|
||||
SetPower(POWER_HAPPINESS, fields[12].GetUInt32());
|
||||
setPowerType(POWER_FOCUS);
|
||||
break;
|
||||
default:
|
||||
@@ -283,13 +281,13 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
|
||||
|
||||
InitTalentForLevel(); // set original talents points before spell loading
|
||||
|
||||
uint32 timediff = uint32(time(NULL) - fields[14].GetUInt32());
|
||||
uint32 timediff = uint32(time(NULL) - fields[13].GetUInt32());
|
||||
_LoadAuras(timediff);
|
||||
|
||||
// load action bar, if data broken will fill later by default spells.
|
||||
if (!is_temporary_summoned)
|
||||
{
|
||||
m_charmInfo->LoadPetActionBar(fields[13].GetString());
|
||||
m_charmInfo->LoadPetActionBar(fields[12].GetString());
|
||||
|
||||
_LoadSpells();
|
||||
InitTalentForLevel(); // re-init to check talent count
|
||||
@@ -387,7 +385,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
|
||||
CharacterDatabase.EscapeString(name);
|
||||
trans = CharacterDatabase.BeginTransaction();
|
||||
// remove current data
|
||||
trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND id = '%u'", owner, m_charmInfo->GetPetNumber());
|
||||
trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND id = '%u'", ownerLowGUID, m_charmInfo->GetPetNumber());
|
||||
|
||||
// prevent duplicate using slot (except PET_SAVE_NOT_IN_SLOT)
|
||||
if (mode <= PET_SAVE_LAST_STABLE_SLOT)
|
||||
@@ -400,7 +398,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
|
||||
ownerLowGUID, PET_SAVE_AS_CURRENT, PET_SAVE_LAST_STABLE_SLOT);
|
||||
// save pet
|
||||
std::ostringstream ss;
|
||||
ss << "INSERT INTO character_pet (id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType) "
|
||||
ss << "INSERT INTO character_pet (id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, abdata, savetime, CreatedBySpell, PetType) "
|
||||
<< "VALUES ("
|
||||
<< m_charmInfo->GetPetNumber() << ','
|
||||
<< GetEntry() << ','
|
||||
@@ -413,8 +411,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
|
||||
<< name.c_str() << "', "
|
||||
<< uint32(HasByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED) ? 0 : 1) << ','
|
||||
<< curhealth << ','
|
||||
<< curmana << ','
|
||||
<< GetPower(POWER_HAPPINESS) << ", '";
|
||||
<< curmana << ", '";
|
||||
|
||||
for (uint32 i = ACTION_BAR_INDEX_START; i < ACTION_BAR_INDEX_END; ++i)
|
||||
{
|
||||
@@ -459,12 +456,6 @@ void Pet::setDeathState(DeathState s) // overwrite virtual
|
||||
// pet corpse non lootable and non skinnable
|
||||
SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE);
|
||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
|
||||
|
||||
//lose happiness when died and not in BG/Arena
|
||||
MapEntry const* mapEntry = sMapStore.LookupEntry(GetMapId());
|
||||
if (!mapEntry || (mapEntry->map_type != MAP_ARENA && mapEntry->map_type != MAP_BATTLEGROUND))
|
||||
ModifyPower(POWER_HAPPINESS, -HAPPINESS_LEVEL_SIZE);
|
||||
|
||||
//SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
|
||||
}
|
||||
}
|
||||
@@ -552,18 +543,6 @@ void Pet::Update(uint32 diff)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (getPetType() != HUNTER_PET)
|
||||
break;
|
||||
|
||||
if (m_happinessTimer <= diff)
|
||||
{
|
||||
LoseHappiness();
|
||||
m_happinessTimer = 7500;
|
||||
}
|
||||
else
|
||||
m_happinessTimer -= diff;
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -611,27 +590,6 @@ void Creature::Regenerate(Powers power)
|
||||
ModifyPower(power, int32(addvalue));
|
||||
}
|
||||
|
||||
void Pet::LoseHappiness()
|
||||
{
|
||||
uint32 curValue = GetPower(POWER_HAPPINESS);
|
||||
if (curValue <= 0)
|
||||
return;
|
||||
int32 addvalue = 670; //value is 70/35/17/8/4 (per min) * 1000 / 8 (timer 7.5 secs)
|
||||
if (isInCombat()) //we know in combat happiness fades faster, multiplier guess
|
||||
addvalue = int32(addvalue * 1.5f);
|
||||
ModifyPower(POWER_HAPPINESS, -addvalue);
|
||||
}
|
||||
|
||||
HappinessState Pet::GetHappinessState()
|
||||
{
|
||||
if (GetPower(POWER_HAPPINESS) < HAPPINESS_LEVEL_SIZE)
|
||||
return UNHAPPY;
|
||||
else if (GetPower(POWER_HAPPINESS) >= HAPPINESS_LEVEL_SIZE * 2)
|
||||
return HAPPY;
|
||||
else
|
||||
return CONTENT;
|
||||
}
|
||||
|
||||
void Pet::Remove(PetSaveMode mode, bool returnreagent)
|
||||
{
|
||||
m_owner->RemovePet(this, mode, returnreagent);
|
||||
@@ -744,8 +702,6 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phas
|
||||
if (!Create(guid, map, phaseMask, cinfo->Entry, pet_number))
|
||||
return false;
|
||||
|
||||
SetMaxPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS));
|
||||
SetPower(POWER_HAPPINESS, 166500);
|
||||
setPowerType(POWER_FOCUS);
|
||||
SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, 0);
|
||||
SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0);
|
||||
|
||||
@@ -42,13 +42,6 @@ enum PetSaveMode
|
||||
PET_SAVE_NOT_IN_SLOT = 100 // for avoid conflict with stable size grow will use 100
|
||||
};
|
||||
|
||||
enum HappinessState
|
||||
{
|
||||
UNHAPPY = 1,
|
||||
CONTENT = 2,
|
||||
HAPPY = 3
|
||||
};
|
||||
|
||||
enum PetSpellState
|
||||
{
|
||||
PETSPELL_UNCHANGED = 0,
|
||||
@@ -108,8 +101,6 @@ enum PetNameInvalidReason
|
||||
typedef UNORDERED_MAP<uint32, PetSpell> PetSpellMap;
|
||||
typedef std::vector<uint32> AutoSpellList;
|
||||
|
||||
#define HAPPINESS_LEVEL_SIZE 333000
|
||||
|
||||
#define ACTIVE_SPELLS_MAX 4
|
||||
|
||||
#define PET_FOLLOW_DIST 1.0f
|
||||
@@ -156,8 +147,6 @@ class Pet : public Guardian
|
||||
return m_autospells[pos];
|
||||
}
|
||||
|
||||
void LoseHappiness();
|
||||
HappinessState GetHappinessState();
|
||||
void GivePetXP(uint32 xp);
|
||||
void GivePetLevel(uint8 level);
|
||||
void SynchronizeLevelWithOwner();
|
||||
@@ -226,7 +215,6 @@ class Pet : public Guardian
|
||||
Player* GetOwner() { return m_owner; }
|
||||
protected:
|
||||
Player* m_owner;
|
||||
uint32 m_happinessTimer;
|
||||
PetType m_petType;
|
||||
int32 m_duration; // time until unsummon (used mostly for summoned guardians and not used for controlled pets)
|
||||
uint64 m_auraRaidUpdateMask;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -412,10 +412,10 @@ enum PlayerFlags
|
||||
PLAYER_FLAGS_NO_XP_GAIN = 0x02000000,
|
||||
PLAYER_FLAGS_UNK26 = 0x04000000,
|
||||
PLAYER_FLAGS_UNK27 = 0x08000000,
|
||||
PLAYER_FLAGS_UNK28 = 0x01000000,
|
||||
PLAYER_FLAGS_UNK29 = 0x02000000,
|
||||
PLAYER_FLAGS_UNK30 = 0x04000000,
|
||||
PLAYER_FLAGS_UNK31 = 0x08000000,
|
||||
PLAYER_FLAGS_UNK28 = 0x10000000,
|
||||
PLAYER_FLAGS_UNK29 = 0x20000000,
|
||||
PLAYER_FLAGS_UNK30 = 0x40000000,
|
||||
PLAYER_FLAGS_UNK31 = 0x80000000,
|
||||
};
|
||||
|
||||
// used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)
|
||||
@@ -791,7 +791,7 @@ enum PlayerChatTag
|
||||
CHAT_TAG_AFK = 0x01,
|
||||
CHAT_TAG_DND = 0x02,
|
||||
CHAT_TAG_GM = 0x04,
|
||||
CHAT_TAG_UNK = 0x08, // Probably battleground commentator
|
||||
CHAT_TAG_COM = 0x08, // Commentator
|
||||
CHAT_TAG_DEV = 0x10,
|
||||
};
|
||||
|
||||
@@ -895,12 +895,6 @@ enum CharDeleteMethod
|
||||
// the name gets freed up and appears as deleted ingame
|
||||
};
|
||||
|
||||
enum CurrencyItems
|
||||
{
|
||||
ITEM_HONOR_POINTS_ID = 43308,
|
||||
ITEM_ARENA_POINTS_ID = 43307
|
||||
};
|
||||
|
||||
enum ReferAFriendError
|
||||
{
|
||||
ERR_REFER_A_FRIEND_NONE = 0x00,
|
||||
@@ -1320,10 +1314,6 @@ class Player : public Unit, public GridObject<Player>
|
||||
void ModifyCurrency(uint32 id, int32 count);
|
||||
|
||||
void ApplyEquipCooldown(Item* pItem);
|
||||
void SetAmmo(uint32 item);
|
||||
void RemoveAmmo();
|
||||
float GetAmmoDPS() const { return m_ammoDPS; }
|
||||
bool CheckAmmoCompatibility(const ItemTemplate* ammo_proto) const;
|
||||
void QuickEquipItem(uint16 pos, Item* pItem);
|
||||
void VisualizeItem(uint8 slot, Item* pItem);
|
||||
void SetVisibleItemSlot(uint8 slot, Item* pItem);
|
||||
@@ -1433,10 +1423,11 @@ class Player : public Unit, public GridObject<Player>
|
||||
void IncompleteQuest(uint32 quest_id);
|
||||
void RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, bool announce = true);
|
||||
void FailQuest(uint32 quest_id);
|
||||
bool SatisfyQuestSkillOrClass(Quest const* qInfo, bool msg);
|
||||
bool SatisfyQuestSkill(Quest const* qInfo, bool msg) const;
|
||||
bool SatisfyQuestLevel(Quest const* qInfo, bool msg);
|
||||
bool SatisfyQuestLog(bool msg);
|
||||
bool SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg);
|
||||
bool SatisfyQuestClass(Quest const* qInfo, bool msg) const;
|
||||
bool SatisfyQuestRace(Quest const* qInfo, bool msg);
|
||||
bool SatisfyQuestReputation(Quest const* qInfo, bool msg);
|
||||
bool SatisfyQuestStatus(Quest const* qInfo, bool msg);
|
||||
@@ -1516,7 +1507,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
void SendQuestReward(Quest const* quest, uint32 XP, Object* questGiver);
|
||||
void SendQuestFailed(uint32 questId, InventoryResult reason = EQUIP_ERR_OK);
|
||||
void SendQuestTimerFailed(uint32 quest_id);
|
||||
void SendCanTakeQuestResponse(uint32 msg);
|
||||
void SendCanTakeQuestResponse(uint32 msg) const;
|
||||
void SendQuestConfirmAccept(Quest const* quest, Player* pReceiver);
|
||||
void SendPushToPartyResponse(Player* player, uint32 msg);
|
||||
void SendQuestUpdateAddItem(Quest const* quest, uint32 item_idx, uint16 count);
|
||||
@@ -1553,7 +1544,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
/*** SAVE SYSTEM ***/
|
||||
/*********************************************************/
|
||||
|
||||
void SaveToDB();
|
||||
void SaveToDB(bool create = false);
|
||||
void SaveInventoryAndGoldToDB(SQLTransaction& trans); // fast save function for item/money cheating preventing
|
||||
void SaveGoldToDB(SQLTransaction& trans);
|
||||
|
||||
@@ -1688,8 +1679,8 @@ class Player : public Unit, public GridObject<Player>
|
||||
void SetReputation(uint32 factionentry, uint32 value);
|
||||
uint32 GetReputation(uint32 factionentry);
|
||||
std::string GetGuildName();
|
||||
uint32 GetFreeTalentPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS1); }
|
||||
void SetFreeTalentPoints(uint32 points);
|
||||
uint32 GetFreeTalentPoints() const { return m_freeTalentPoints; }
|
||||
void SetFreeTalentPoints(uint32 points) { m_freeTalentPoints = points; }
|
||||
bool resetTalents(bool no_cost = false);
|
||||
uint32 resetTalentsCost() const;
|
||||
void InitTalentForLevel();
|
||||
@@ -1722,8 +1713,8 @@ class Player : public Unit, public GridObject<Player>
|
||||
}
|
||||
uint32 GetGlyph(uint8 slot) { return m_Glyphs[m_activeSpec][slot]; }
|
||||
|
||||
uint32 GetFreePrimaryProfessionPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS2); }
|
||||
void SetFreePrimaryProfessions(uint16 profs) { SetUInt32Value(PLAYER_CHARACTER_POINTS2, profs); }
|
||||
uint32 GetFreePrimaryProfessionPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS); }
|
||||
void SetFreePrimaryProfessions(uint16 profs) { SetUInt32Value(PLAYER_CHARACTER_POINTS, profs); }
|
||||
void InitPrimaryProfessions();
|
||||
|
||||
PlayerSpellMap const& GetSpellMap() const { return m_spells; }
|
||||
@@ -1843,11 +1834,24 @@ class Player : public Unit, public GridObject<Player>
|
||||
void RemoveFromGroup(RemoveMethod method = GROUP_REMOVEMETHOD_DEFAULT) { RemoveFromGroup(GetGroup(), GetGUID(), method); }
|
||||
void SendUpdateToOutOfRangeGroupMembers();
|
||||
|
||||
void SetInGuild(uint32 GuildId) { SetUInt32Value(PLAYER_GUILDID, GuildId); }
|
||||
void SetInGuild(uint32 GuildId)
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SET_GUILD_ID);
|
||||
stmt->setUInt32(0, GuildId);
|
||||
stmt->setUInt64(1, GetGUID());
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
uint32 GetGuildId()
|
||||
{
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_GUILD_ID);
|
||||
stmt->setUInt64(0, GetGUIDLow());
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
return result ? (*result)[0].GetUInt32() : 0;
|
||||
}
|
||||
void SetRank(uint8 rankId) { SetUInt32Value(PLAYER_GUILDRANK, rankId); }
|
||||
uint8 GetRank() { return uint8(GetUInt32Value(PLAYER_GUILDRANK)); }
|
||||
void SetGuildIdInvited(uint32 GuildId) { m_GuildIdInvited = GuildId; }
|
||||
uint32 GetGuildId() { return GetUInt32Value(PLAYER_GUILDID); }
|
||||
static uint32 GetGuildIdFromDB(uint64 guid);
|
||||
static uint8 GetRankFromDB(uint64 guid);
|
||||
int GetGuildIdInvited() { return m_GuildIdInvited; }
|
||||
@@ -2074,15 +2078,10 @@ class Player : public Unit, public GridObject<Player>
|
||||
/*********************************************************/
|
||||
/*** PVP SYSTEM ***/
|
||||
/*********************************************************/
|
||||
// TODO: Properly implement correncies as of Cataclysm
|
||||
void UpdateHonorFields();
|
||||
bool RewardHonor(Unit* pVictim, uint32 groupsize, int32 honor = -1, bool pvptoken = false);
|
||||
uint32 GetHonorPoints() const { return GetUInt32Value(PLAYER_FIELD_HONOR_CURRENCY); }
|
||||
uint32 GetArenaPoints() const { return GetUInt32Value(PLAYER_FIELD_ARENA_CURRENCY); }
|
||||
void ModifyHonorPoints(int32 value, SQLTransaction* trans = NULL); //! If trans is specified, honor save query will be added to trans
|
||||
void ModifyArenaPoints(int32 value, SQLTransaction* trans = NULL); //! If trans is specified, arena point save query will be added to trans
|
||||
bool RewardHonor(Unit* victim, uint32 groupsize, int32 honor = -1, bool pvptoken = false);
|
||||
uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const;
|
||||
void SetHonorPoints(uint32 value);
|
||||
void SetArenaPoints(uint32 value);
|
||||
|
||||
//End of PvP System
|
||||
|
||||
@@ -2127,7 +2126,6 @@ class Player : public Unit, public GridObject<Player>
|
||||
void _ApplyAllLevelScaleItemMods(bool apply);
|
||||
void _ApplyItemBonuses(ItemTemplate const* proto, uint8 slot, bool apply, bool only_level_scale = false);
|
||||
void _ApplyWeaponDamage(uint8 slot, ItemTemplate const* proto, ScalingStatValuesEntry const* ssv, bool apply);
|
||||
void _ApplyAmmoBonuses();
|
||||
bool EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot);
|
||||
void ToggleMetaGemsActive(uint8 exceptslot, bool apply);
|
||||
void CorrectMetaGemEnchants(uint8 slot, bool apply);
|
||||
@@ -2323,6 +2321,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
m_mover = target;
|
||||
m_mover->m_movedPlayer = this;
|
||||
}
|
||||
|
||||
void SetSeer(WorldObject* target) { m_seer = target; }
|
||||
void SetViewpoint(WorldObject* target, bool apply);
|
||||
WorldObject* GetViewpoint() const;
|
||||
@@ -2524,7 +2523,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
CreatureDisplayInfoEntry const* mountDisplayInfo = sCreatureDisplayInfoStore.LookupEntry(GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID));
|
||||
if (!mountDisplayInfo)
|
||||
return GetCollisionHeight(false);
|
||||
|
||||
|
||||
CreatureModelDataEntry const* mountModelData = sCreatureModelDataStore.LookupEntry(mountDisplayInfo->ModelId);
|
||||
if (!mountModelData)
|
||||
return GetCollisionHeight(false);
|
||||
@@ -2704,6 +2703,8 @@ class Player : public Unit, public GridObject<Player>
|
||||
uint8 m_activeSpec;
|
||||
uint8 m_specsCount;
|
||||
|
||||
uint32 m_freeTalentPoints;
|
||||
|
||||
uint32 m_Glyphs[MAX_TALENT_SPECS][MAX_GLYPH_SLOT_INDEX];
|
||||
|
||||
ActionButtonList m_actionButtons;
|
||||
@@ -2764,7 +2765,6 @@ class Player : public Unit, public GridObject<Player>
|
||||
bool m_canBlock;
|
||||
bool m_canTitanGrip;
|
||||
uint8 m_swingErrorMsg;
|
||||
float m_ammoDPS;
|
||||
|
||||
////////////////////Rest System/////////////////////
|
||||
time_t time_inn_enter;
|
||||
|
||||
@@ -130,7 +130,7 @@ void PlayerSocial::SendSocialList(Player* player)
|
||||
sSocialMgr->GetFriendInfo(player, itr->first, itr->second);
|
||||
|
||||
data << uint64(itr->first); // player guid
|
||||
data << uint32(itr->second.Flags); // player flag (0x1-friend?, 0x2-ignored?, 0x4-muted?)
|
||||
data << uint32(itr->second.Flags); // player flag (0x1 = Friend, 0x2 = Ignored, 0x4 = Muted)
|
||||
data << itr->second.Note; // string note
|
||||
if (itr->second.Flags & SOCIAL_FLAG_FRIEND) // if IsFriend()
|
||||
{
|
||||
|
||||
@@ -287,13 +287,11 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
|
||||
UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER;
|
||||
|
||||
uint16 index = UNIT_FIELD_ATTACK_POWER;
|
||||
uint16 index_mod = UNIT_FIELD_ATTACK_POWER_MODS;
|
||||
uint16 index_mult = UNIT_FIELD_ATTACK_POWER_MULTIPLIER;
|
||||
|
||||
if (ranged)
|
||||
{
|
||||
index = UNIT_FIELD_RANGED_ATTACK_POWER;
|
||||
index_mod = UNIT_FIELD_RANGED_ATTACK_POWER_MODS;
|
||||
index_mult = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER;
|
||||
|
||||
switch (getClass())
|
||||
@@ -437,10 +435,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
|
||||
}
|
||||
|
||||
float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f;
|
||||
|
||||
SetInt32Value(index, (uint32)base_attPower); //UNIT_FIELD_(RANGED)_ATTACK_POWER field
|
||||
SetInt32Value(index_mod, (uint32)attPowerMod); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS field
|
||||
SetFloatValue(index_mult, attPowerMultiplier); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field
|
||||
|
||||
Pet* pet = GetPet(); //update pet's AP
|
||||
//automatically update weapon damage after attack power modification
|
||||
@@ -517,11 +512,13 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo
|
||||
weapon_mindamage = BASE_MINDAMAGE;
|
||||
weapon_maxdamage = BASE_MAXDAMAGE;
|
||||
}
|
||||
/*
|
||||
TODO: Is this still needed after ammo has been removed?
|
||||
else if (attType == RANGED_ATTACK) //add ammo DPS to ranged damage
|
||||
{
|
||||
weapon_mindamage += GetAmmoDPS() * att_speed;
|
||||
weapon_maxdamage += GetAmmoDPS() * att_speed;
|
||||
}
|
||||
weapon_mindamage += ammo * att_speed;
|
||||
weapon_maxdamage += ammo * att_speed;
|
||||
}*/
|
||||
|
||||
min_damage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct;
|
||||
max_damage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct;
|
||||
@@ -968,13 +965,11 @@ void Creature::UpdateAttackPowerAndDamage(bool ranged)
|
||||
UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER;
|
||||
|
||||
uint16 index = UNIT_FIELD_ATTACK_POWER;
|
||||
uint16 index_mod = UNIT_FIELD_ATTACK_POWER_MODS;
|
||||
uint16 index_mult = UNIT_FIELD_ATTACK_POWER_MULTIPLIER;
|
||||
|
||||
if (ranged)
|
||||
{
|
||||
index = UNIT_FIELD_RANGED_ATTACK_POWER;
|
||||
index_mod = UNIT_FIELD_RANGED_ATTACK_POWER_MODS;
|
||||
index_mult = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER;
|
||||
}
|
||||
|
||||
@@ -983,7 +978,6 @@ void Creature::UpdateAttackPowerAndDamage(bool ranged)
|
||||
float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f;
|
||||
|
||||
SetInt32Value(index, (uint32)base_attPower); //UNIT_FIELD_(RANGED)_ATTACK_POWER field
|
||||
SetInt32Value(index_mod, (uint32)attPowerMod); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS field
|
||||
SetFloatValue(index_mult, attPowerMultiplier); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field
|
||||
|
||||
//automatically update weapon damage after attack power modification
|
||||
@@ -1336,8 +1330,6 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
|
||||
|
||||
//UNIT_FIELD_(RANGED)_ATTACK_POWER field
|
||||
SetInt32Value(UNIT_FIELD_ATTACK_POWER, (int32)base_attPower);
|
||||
//UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS field
|
||||
SetInt32Value(UNIT_FIELD_ATTACK_POWER_MODS, (int32)attPowerMod);
|
||||
//UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field
|
||||
SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, attPowerMultiplier);
|
||||
|
||||
@@ -1384,27 +1376,6 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
|
||||
float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct;
|
||||
float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct;
|
||||
|
||||
// Pet's base damage changes depending on happiness
|
||||
if (isHunterPet() && attType == BASE_ATTACK)
|
||||
{
|
||||
switch (ToPet()->GetHappinessState())
|
||||
{
|
||||
case HAPPY:
|
||||
// 125% of normal damage
|
||||
mindamage = mindamage * 1.25f;
|
||||
maxdamage = maxdamage * 1.25f;
|
||||
break;
|
||||
case CONTENT:
|
||||
// 100% of normal damage, nothing to modify
|
||||
break;
|
||||
case UNHAPPY:
|
||||
// 75% of normal damage
|
||||
mindamage = mindamage * 0.75f;
|
||||
maxdamage = maxdamage * 0.75f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Unit::AuraEffectList const& mDummy = GetAuraEffectsByType(SPELL_AURA_MOD_ATTACKSPEED);
|
||||
for (Unit::AuraEffectList::const_iterator itr = mDummy.begin(); itr != mDummy.end(); ++itr)
|
||||
{
|
||||
|
||||
@@ -2715,7 +2715,7 @@ float Unit::GetUnitBlockChance() const
|
||||
if (player->CanBlock())
|
||||
{
|
||||
Item* tmpitem = player->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
|
||||
if (tmpitem && !tmpitem->IsBroken() && tmpitem->GetTemplate()->Block)
|
||||
if (tmpitem && !tmpitem->IsBroken())
|
||||
return GetFloatValue(PLAYER_BLOCK_PERCENTAGE);
|
||||
}
|
||||
// is player but has no block ability or no not broken shield equipped
|
||||
@@ -8674,7 +8674,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
|
||||
|
||||
ItemTemplate const* weapon = item->GetTemplate();
|
||||
|
||||
float weaponDPS = weapon->getDPS();
|
||||
float weaponDPS = weapon->DPS;
|
||||
float attackPower = GetTotalAttackPowerValue(BASE_ATTACK) / 14.0f;
|
||||
float weaponSpeed = float(weapon->Delay) / 1000.0f;
|
||||
basepoints0 = int32((weaponDPS + attackPower) * weaponSpeed);
|
||||
@@ -9193,10 +9193,6 @@ void Unit::setPowerType(Powers new_powertype)
|
||||
case POWER_ENERGY:
|
||||
SetMaxPower(POWER_ENERGY, GetCreatePowers(POWER_ENERGY));
|
||||
break;
|
||||
case POWER_HAPPINESS:
|
||||
SetMaxPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS));
|
||||
SetPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13398,7 +13394,6 @@ bool Unit::HandleStatModifier(UnitMods unitMod, UnitModifierType modifierType, f
|
||||
case UNIT_MOD_RAGE:
|
||||
case UNIT_MOD_FOCUS:
|
||||
case UNIT_MOD_ENERGY:
|
||||
case UNIT_MOD_HAPPINESS:
|
||||
case UNIT_MOD_RUNE:
|
||||
case UNIT_MOD_RUNIC_POWER: UpdateMaxPower(GetPowerTypeByAuraGroup(unitMod)); break;
|
||||
|
||||
@@ -13518,7 +13513,6 @@ Powers Unit::GetPowerTypeByAuraGroup(UnitMods unitMod) const
|
||||
case UNIT_MOD_RAGE: return POWER_RAGE;
|
||||
case UNIT_MOD_FOCUS: return POWER_FOCUS;
|
||||
case UNIT_MOD_ENERGY: return POWER_ENERGY;
|
||||
case UNIT_MOD_HAPPINESS: return POWER_HAPPINESS;
|
||||
case UNIT_MOD_RUNE: return POWER_RUNE;
|
||||
case UNIT_MOD_RUNIC_POWER: return POWER_RUNIC_POWER;
|
||||
default:
|
||||
@@ -13530,14 +13524,14 @@ float Unit::GetTotalAttackPowerValue(WeaponAttackType attType) const
|
||||
{
|
||||
if (attType == RANGED_ATTACK)
|
||||
{
|
||||
int32 ap = GetInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER) + GetInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER_MODS);
|
||||
int32 ap = GetInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER);
|
||||
if (ap < 0)
|
||||
return 0.0f;
|
||||
return ap * (1.0f + GetFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER));
|
||||
}
|
||||
else
|
||||
{
|
||||
int32 ap = GetInt32Value(UNIT_FIELD_ATTACK_POWER) + GetInt32Value(UNIT_FIELD_ATTACK_POWER_MODS);
|
||||
int32 ap = GetInt32Value(UNIT_FIELD_ATTACK_POWER);
|
||||
if (ap < 0)
|
||||
return 0.0f;
|
||||
return ap * (1.0f + GetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER));
|
||||
@@ -13621,12 +13615,12 @@ void Unit::SetMaxHealth(uint32 val)
|
||||
SetHealth(val);
|
||||
}
|
||||
|
||||
void Unit::SetPower(Powers power, uint32 val)
|
||||
void Unit::SetPower(Powers power, int32 val)
|
||||
{
|
||||
if (GetPower(power) == val)
|
||||
return;
|
||||
|
||||
uint32 maxPower = GetMaxPower(power);
|
||||
int32 maxPower = (int32)GetMaxPower(power);
|
||||
if (maxPower < val)
|
||||
val = maxPower;
|
||||
|
||||
@@ -13634,8 +13628,9 @@ void Unit::SetPower(Powers power, uint32 val)
|
||||
|
||||
WorldPacket data(SMSG_POWER_UPDATE);
|
||||
data.append(GetPackGUID());
|
||||
data << int32(1); // Unk
|
||||
data << uint8(power);
|
||||
data << uint32(val);
|
||||
data << int32(val);
|
||||
SendMessageToSet(&data, GetTypeId() == TYPEID_PLAYER ? true : false);
|
||||
|
||||
// group update
|
||||
@@ -13652,16 +13647,12 @@ void Unit::SetPower(Powers power, uint32 val)
|
||||
if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
|
||||
owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_CUR_POWER);
|
||||
}
|
||||
|
||||
// Update the pet's character sheet with happiness damage bonus
|
||||
if (pet->getPetType() == HUNTER_PET && power == POWER_HAPPINESS)
|
||||
pet->UpdateDamagePhysical(BASE_ATTACK);
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::SetMaxPower(Powers power, uint32 val)
|
||||
void Unit::SetMaxPower(Powers power, int32 val)
|
||||
{
|
||||
uint32 cur_power = GetPower(power);
|
||||
int32 cur_power = GetPower(power);
|
||||
SetStatInt32Value(UNIT_FIELD_MAXPOWER1 + power, val);
|
||||
|
||||
// group update
|
||||
@@ -13684,19 +13675,32 @@ void Unit::SetMaxPower(Powers power, uint32 val)
|
||||
SetPower(power, val);
|
||||
}
|
||||
|
||||
uint32 Unit::GetCreatePowers(Powers power) const
|
||||
int32 Unit::GetCreatePowers(Powers power) const
|
||||
{
|
||||
// POWER_FOCUS and POWER_HAPPINESS only have hunter pet
|
||||
switch (power)
|
||||
{
|
||||
case POWER_MANA: return GetCreateMana();
|
||||
case POWER_RAGE: return 1000;
|
||||
case POWER_FOCUS: return (GetTypeId() == TYPEID_PLAYER || !((Creature const*)this)->isPet() || ((Pet const*)this)->getPetType() != HUNTER_PET ? 0 : 100);
|
||||
case POWER_ENERGY: return 100;
|
||||
case POWER_HAPPINESS: return (GetTypeId() == TYPEID_PLAYER || !((Creature const*)this)->isPet() || ((Pet const*)this)->getPetType() != HUNTER_PET ? 0 : 1050000);
|
||||
case POWER_RUNIC_POWER: return 1000;
|
||||
case POWER_RUNE: return 0;
|
||||
case POWER_HEALTH: return 0;
|
||||
case POWER_MANA:
|
||||
return GetCreateMana();
|
||||
case POWER_RAGE:
|
||||
return 1000;
|
||||
case POWER_FOCUS:
|
||||
if (GetTypeId() == TYPEID_PLAYER && getClass() == CLASS_HUNTER)
|
||||
return 100;
|
||||
return (GetTypeId() == TYPEID_PLAYER || !((Creature const*)this)->isPet() || ((Pet const*)this)->getPetType() != HUNTER_PET ? 0 : 100);
|
||||
case POWER_ENERGY:
|
||||
return 100;
|
||||
case POWER_RUNIC_POWER:
|
||||
return 1000;
|
||||
case POWER_RUNE:
|
||||
return 0;
|
||||
case POWER_SOULSHARD:
|
||||
return 3;
|
||||
case POWER_ECLIPSE:
|
||||
return 0;
|
||||
case POWER_HOLY_POWER:
|
||||
return 0;
|
||||
case POWER_HEALTH:
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -417,7 +417,6 @@ enum UnitMods
|
||||
UNIT_MOD_RAGE,
|
||||
UNIT_MOD_FOCUS,
|
||||
UNIT_MOD_ENERGY,
|
||||
UNIT_MOD_HAPPINESS,
|
||||
UNIT_MOD_RUNE,
|
||||
UNIT_MOD_RUNIC_POWER,
|
||||
UNIT_MOD_ARMOR, // UNIT_MOD_ARMOR..UNIT_MOD_RESISTANCE_ARCANE must be in existed order, it's accessed by index values of SpellSchools enum.
|
||||
@@ -1370,10 +1369,10 @@ class Unit : public WorldObject
|
||||
|
||||
Powers getPowerType() const { return Powers(GetByteValue(UNIT_FIELD_BYTES_0, 3)); }
|
||||
void setPowerType(Powers power);
|
||||
uint32 GetPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_POWER1 +power); }
|
||||
int32 GetPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_POWER1+power); }
|
||||
uint32 GetMaxPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_MAXPOWER1+power); }
|
||||
void SetPower(Powers power, uint32 val);
|
||||
void SetMaxPower(Powers power, uint32 val);
|
||||
void SetPower(Powers power, int32 val);
|
||||
void SetMaxPower(Powers power, int32 val);
|
||||
// returns the change in power
|
||||
int32 ModifyPower(Powers power, int32 val);
|
||||
int32 ModifyPowerPct(Powers power, float pct, bool apply = true);
|
||||
@@ -1870,7 +1869,7 @@ class Unit : public WorldObject
|
||||
uint32 GetCreateHealth() const { return GetUInt32Value(UNIT_FIELD_BASE_HEALTH); }
|
||||
void SetCreateMana(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_MANA, val); }
|
||||
uint32 GetCreateMana() const { return GetUInt32Value(UNIT_FIELD_BASE_MANA); }
|
||||
uint32 GetCreatePowers(Powers power) const;
|
||||
int32 GetCreatePowers(Powers power) const;
|
||||
float GetPosStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_POSSTAT0+stat); }
|
||||
float GetNegStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_NEGSTAT0+stat); }
|
||||
float GetCreateStat(Stats stat) const { return m_createStats[stat]; }
|
||||
|
||||
@@ -212,6 +212,7 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
corpse->RemoveFromWorld();
|
||||
|
||||
// Critical section
|
||||
@@ -292,6 +293,7 @@ Corpse* ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia
|
||||
|
||||
// remove corpse from player_guid -> corpse map and from current map
|
||||
RemoveCorpse(corpse);
|
||||
|
||||
// remove corpse from DB
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
corpse->DeleteFromDB(trans);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -865,6 +865,8 @@ class ObjectMgr
|
||||
void LoadGameobjects();
|
||||
void LoadGameobjectRespawnTimes();
|
||||
void LoadItemTemplates();
|
||||
void LoadItemTemplateAddon();
|
||||
void LoadItemScriptNames();
|
||||
void LoadItemLocales();
|
||||
void LoadItemSetNames();
|
||||
void LoadItemSetNameLocales();
|
||||
@@ -1285,7 +1287,6 @@ class ObjectMgr
|
||||
PlayerClassInfo playerClassInfo[MAX_CLASSES];
|
||||
|
||||
void BuildPlayerLevelInfo(uint8 race, uint8 class_, uint8 level, PlayerLevelInfo* plinfo) const;
|
||||
|
||||
PlayerInfo playerInfo[MAX_RACES][MAX_CLASSES];
|
||||
|
||||
typedef std::vector<uint32> PlayerXPperLevel; // [level]
|
||||
|
||||
@@ -178,7 +178,7 @@ void GuildMgr::LoadGuilds()
|
||||
CharacterDatabase.DirectExecute("DELETE gm FROM guild_member gm LEFT JOIN guild g ON gm.guildId = g.guildId WHERE g.guildId IS NULL");
|
||||
|
||||
// 0 1 2 3 4 5 6
|
||||
QueryResult result = CharacterDatabase.Query("SELECT guildid, gm.guid, rank, pnote, offnote, BankResetTimeMoney, BankRemMoney, "
|
||||
QueryResult result = CharacterDatabase.Query("SELECT gm.guildid, gm.guid, rank, pnote, offnote, BankResetTimeMoney, BankRemMoney, "
|
||||
// 7 8 9 10 11 12
|
||||
"BankResetTimeTab0, BankRemSlotsTab0, BankResetTimeTab1, BankRemSlotsTab1, BankResetTimeTab2, BankRemSlotsTab2, "
|
||||
// 13 14 15 16 17 18
|
||||
|
||||
@@ -232,7 +232,7 @@ void LootStore::ReportUnusedIds(LootIdSet const& ids_set) const
|
||||
|
||||
void LootStore::ReportNotExistedId(uint32 id) const
|
||||
{
|
||||
sLog->outErrorDb("Table '%s' entry %d (%s) not exist but used as loot id in DB.", GetName(), id, GetEntryName());
|
||||
sLog->outErrorDb("Table '%s' entry %d (%s) does not exist but used as loot id in DB.", GetName(), id, GetEntryName());
|
||||
}
|
||||
|
||||
//
|
||||
@@ -1461,16 +1461,17 @@ void LoadLootTemplates_Disenchant()
|
||||
LootIdSet lootIdSet, loodIdSetUsed;
|
||||
uint32 count = LootTemplates_Disenchant.LoadAndCollectLootIds(lootIdSet);
|
||||
|
||||
ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
|
||||
for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
|
||||
for (uint32 i = 0; i < sItemDisenchantLootStore.GetNumRows(); ++i)
|
||||
{
|
||||
if (uint32 lootid = itr->second.DisenchantID)
|
||||
{
|
||||
if (lootIdSet.find(lootid) == lootIdSet.end())
|
||||
LootTemplates_Disenchant.ReportNotExistedId(lootid);
|
||||
else
|
||||
loodIdSetUsed.insert(lootid);
|
||||
}
|
||||
ItemDisenchantLootEntry const* disenchant = sItemDisenchantLootStore.LookupEntry(i);
|
||||
if (!disenchant)
|
||||
continue;
|
||||
|
||||
uint32 lootid = disenchant->Id;
|
||||
if (lootIdSet.find(lootid) == lootIdSet.end())
|
||||
LootTemplates_Disenchant.ReportNotExistedId(lootid);
|
||||
else
|
||||
loodIdSetUsed.insert(lootid);
|
||||
}
|
||||
|
||||
for (LootIdSet::const_iterator itr = loodIdSetUsed.begin(); itr != loodIdSetUsed.end(); ++itr)
|
||||
|
||||
@@ -53,33 +53,34 @@ enum Gender
|
||||
// Race value is index in ChrRaces.dbc
|
||||
enum Races
|
||||
{
|
||||
RACE_NONE = 0,
|
||||
RACE_HUMAN = 1,
|
||||
RACE_ORC = 2,
|
||||
RACE_DWARF = 3,
|
||||
RACE_NIGHTELF = 4,
|
||||
RACE_UNDEAD_PLAYER = 5,
|
||||
RACE_TAUREN = 6,
|
||||
RACE_GNOME = 7,
|
||||
RACE_TROLL = 8,
|
||||
RACE_GOBLIN = 9,
|
||||
RACE_BLOODELF = 10,
|
||||
RACE_DRAENEI = 11,
|
||||
//RACE_FEL_ORC = 12,
|
||||
//RACE_NAGA = 13,
|
||||
//RACE_BROKEN = 14,
|
||||
//RACE_SKELETON = 15,
|
||||
//RACE_VRYKUL = 16,
|
||||
//RACE_TUSKARR = 17,
|
||||
//RACE_FOREST_TROLL = 18,
|
||||
//RACE_TAUNKA = 19,
|
||||
RACE_NONE = 0,
|
||||
RACE_HUMAN = 1,
|
||||
RACE_ORC = 2,
|
||||
RACE_DWARF = 3,
|
||||
RACE_NIGHTELF = 4,
|
||||
RACE_UNDEAD_PLAYER = 5,
|
||||
RACE_TAUREN = 6,
|
||||
RACE_GNOME = 7,
|
||||
RACE_TROLL = 8,
|
||||
RACE_GOBLIN = 9,
|
||||
RACE_BLOODELF = 10,
|
||||
RACE_DRAENEI = 11,
|
||||
//RACE_FEL_ORC = 12,
|
||||
//RACE_NAGA = 13,
|
||||
//RACE_BROKEN = 14,
|
||||
//RACE_SKELETON = 15,
|
||||
//RACE_VRYKUL = 16,
|
||||
//RACE_TUSKARR = 17,
|
||||
//RACE_FOREST_TROLL = 18,
|
||||
//RACE_TAUNKA = 19,
|
||||
//RACE_NORTHREND_SKELETON = 20,
|
||||
//RACE_ICE_TROLL = 21,
|
||||
RACE_WORGEN = 22
|
||||
//RACE_ICE_TROLL = 21,
|
||||
RACE_WORGEN = 22,
|
||||
RACE_GILNEAN = 23
|
||||
};
|
||||
|
||||
// max+1 for player race
|
||||
#define MAX_RACES 12
|
||||
#define MAX_RACES 24
|
||||
|
||||
#define RACEMASK_ALL_PLAYABLE \
|
||||
((1<<(RACE_HUMAN-1)) |(1<<(RACE_ORC-1)) |(1<<(RACE_DWARF-1)) | \
|
||||
@@ -174,14 +175,19 @@ enum Powers
|
||||
POWER_RAGE = 1,
|
||||
POWER_FOCUS = 2,
|
||||
POWER_ENERGY = 3,
|
||||
POWER_HAPPINESS = 4,
|
||||
POWER_RUNE = 5,
|
||||
POWER_RUNIC_POWER = 6,
|
||||
MAX_POWERS = 7,
|
||||
POWER_ALL = 127, // default for class?
|
||||
POWER_SOULSHARD = 7,
|
||||
POWER_ECLIPSE = 8,
|
||||
POWER_HOLY_POWER = 9,
|
||||
POWER_ALTERNATIVE = 10, // Used in some quests
|
||||
MAX_POWERS = 11,
|
||||
POWER_ALL = 127, // default for class?
|
||||
POWER_HEALTH = 0xFFFFFFFE // (-2 as signed value)
|
||||
};
|
||||
|
||||
#define MAX_STORED_POWERS 5
|
||||
|
||||
enum SpellSchools
|
||||
{
|
||||
SPELL_SCHOOL_NORMAL = 0,
|
||||
@@ -1231,7 +1237,8 @@ enum Mechanics
|
||||
MECHANIC_DISCOVERY = 28,
|
||||
MECHANIC_IMMUNE_SHIELD = 29, // Divine (Blessing) Shield/Protection and Ice Block
|
||||
MECHANIC_SAPPED = 30,
|
||||
MECHANIC_ENRAGED = 31
|
||||
MECHANIC_ENRAGED = 31,
|
||||
MECHANIC_WOUNDED = 32,
|
||||
};
|
||||
|
||||
// Used for spell 42292 Immune Movement Impairment and Loss of Control (0x49967ca6)
|
||||
|
||||
+159
-118
@@ -22,155 +22,196 @@
|
||||
|
||||
Quest::Quest(Field* questRecord)
|
||||
{
|
||||
QuestId = questRecord[0].GetUInt32();
|
||||
QuestMethod = questRecord[1].GetUInt32();
|
||||
ZoneOrSort = questRecord[2].GetInt32();
|
||||
SkillOrClassMask = questRecord[3].GetInt32();
|
||||
MinLevel = questRecord[4].GetUInt32();
|
||||
MaxLevel = questRecord[5].GetUInt32();
|
||||
QuestLevel = questRecord[6].GetInt32();
|
||||
Type = questRecord[7].GetUInt32();
|
||||
RequiredRaces = questRecord[8].GetUInt32();
|
||||
RequiredSkillValue = questRecord[9].GetUInt32();
|
||||
RepObjectiveFaction = questRecord[10].GetUInt32();
|
||||
RepObjectiveValue = questRecord[11].GetInt32();
|
||||
RepObjectiveFaction2 = questRecord[12].GetUInt32();
|
||||
RepObjectiveValue2 = questRecord[13].GetInt32();
|
||||
RequiredMinRepFaction = questRecord[14].GetUInt32();
|
||||
RequiredMinRepValue = questRecord[15].GetInt32();
|
||||
RequiredMaxRepFaction = questRecord[16].GetUInt32();
|
||||
RequiredMaxRepValue = questRecord[17].GetInt32();
|
||||
SuggestedPlayers = questRecord[18].GetUInt32();
|
||||
LimitTime = questRecord[19].GetUInt32();
|
||||
QuestFlags = questRecord[20].GetUInt32();
|
||||
uint32 SpecialFlags = questRecord[21].GetUInt16();
|
||||
CharTitleId = questRecord[22].GetUInt32();
|
||||
PlayersSlain = questRecord[23].GetUInt32();
|
||||
BonusTalents = questRecord[24].GetUInt32();
|
||||
RewArenaPoints = questRecord[25].GetInt32();
|
||||
PrevQuestId = questRecord[26].GetInt32();
|
||||
NextQuestId = questRecord[27].GetInt32();
|
||||
ExclusiveGroup = questRecord[28].GetInt32();
|
||||
NextQuestInChain = questRecord[29].GetUInt32();
|
||||
XPId = questRecord[30].GetUInt32();
|
||||
SrcItemId = questRecord[31].GetUInt32();
|
||||
SrcItemCount = questRecord[32].GetUInt32();
|
||||
SrcSpell = questRecord[33].GetUInt32();
|
||||
Title = questRecord[34].GetString();
|
||||
Details = questRecord[35].GetString();
|
||||
Objectives = questRecord[36].GetString();
|
||||
OfferRewardText = questRecord[37].GetString();
|
||||
RequestItemsText = questRecord[38].GetString();
|
||||
EndText = questRecord[39].GetString();
|
||||
CompletedText = questRecord[40].GetString();
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
ObjectiveText[i] = questRecord[41+i].GetString();
|
||||
|
||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
ReqItemId[i] = questRecord[45+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
ReqItemCount[i] = questRecord[51+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||
ReqSourceId[i] = questRecord[57+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||
ReqSourceCount[i] = questRecord[61+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
ReqCreatureOrGOId[i] = questRecord[65+i].GetInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
ReqCreatureOrGOCount[i] = questRecord[69+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
ReqSpell[i] = questRecord[73+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
RewChoiceItemId[i] = questRecord[77+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
RewChoiceItemCount[i] = questRecord[83+i].GetUInt32();
|
||||
Id = questRecord[0].GetUInt32();
|
||||
Method = questRecord[1].GetUInt32();
|
||||
Level = questRecord[2].GetInt32();
|
||||
MinLevel = questRecord[3].GetUInt32();
|
||||
MaxLevel = questRecord[4].GetUInt32();
|
||||
ZoneOrSort = questRecord[5].GetInt32();
|
||||
Type = questRecord[6].GetUInt32();
|
||||
SuggestedPlayers = questRecord[7].GetUInt32();
|
||||
LimitTime = questRecord[8].GetUInt32();
|
||||
RequiredClasses = questRecord[9].GetUInt32();
|
||||
RequiredRaces = questRecord[10].GetUInt32();
|
||||
RequiredSkillId = questRecord[11].GetUInt32();
|
||||
RequiredSkillPoints = questRecord[12].GetUInt32();
|
||||
RequiredFactionId1 = questRecord[13].GetUInt32();
|
||||
RequiredFactionId2 = questRecord[14].GetUInt32();
|
||||
RequiredFactionValue1 = questRecord[15].GetInt32();
|
||||
RequiredFactionValue2 = questRecord[16].GetInt32();
|
||||
RequiredMinRepFaction = questRecord[17].GetUInt32();
|
||||
RequiredMaxRepFaction = questRecord[18].GetUInt32();
|
||||
RequiredMinRepValue = questRecord[19].GetInt32();
|
||||
RequiredMaxRepValue = questRecord[20].GetInt32();
|
||||
PrevQuestId = questRecord[21].GetInt32();
|
||||
NextQuestId = questRecord[22].GetInt32();
|
||||
ExclusiveGroup = questRecord[23].GetInt32();
|
||||
NextQuestIdChain = questRecord[24].GetUInt32();
|
||||
RewardXPId = questRecord[25].GetUInt32();
|
||||
RewardOrRequiredMoney = questRecord[26].GetInt32();
|
||||
RewardMoneyMaxLevel = questRecord[27].GetUInt32();
|
||||
RewardSpell = questRecord[28].GetUInt32();
|
||||
RewardSpellCast = questRecord[29].GetInt32();
|
||||
RewardHonor = questRecord[30].GetUInt32();
|
||||
RewardHonorMultiplier = questRecord[31].GetFloat();
|
||||
RewardMailTemplateId = questRecord[32].GetUInt32();
|
||||
RewardMailDelay = questRecord[33].GetUInt32();
|
||||
SourceItemId = questRecord[34].GetUInt32();
|
||||
SourceItemIdCount = questRecord[35].GetUInt32();
|
||||
SourceSpellid = questRecord[36].GetUInt32();
|
||||
Flags = questRecord[37].GetUInt32();
|
||||
uint32 SpecialFlags = questRecord[38].GetUInt16();
|
||||
MinimapTargetMark = questRecord[39].GetUInt32();
|
||||
RewardTitleId = questRecord[40].GetUInt32();
|
||||
RequiredPlayerKills = questRecord[41].GetUInt32();
|
||||
RewardTalents = questRecord[42].GetUInt32();
|
||||
RewardArenaPoints = questRecord[43].GetInt32();
|
||||
RewardSkillId = questRecord[44].GetUInt32();
|
||||
RewardSkillPoints = questRecord[45].GetUInt32();
|
||||
RewardReputationMask = questRecord[46].GetUInt32();
|
||||
QuestGiverPortrait = questRecord[47].GetUInt32();
|
||||
QuestTurnInPortrait = questRecord[48].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
RewItemId[i] = questRecord[89+i].GetUInt32();
|
||||
RewardItemId[i] = questRecord[49+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
RewItemCount[i] = questRecord[93+i].GetUInt32();
|
||||
RewardItemIdCount[i] = questRecord[53+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
RewardChoiceItemId[i] = questRecord[57+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
RewardChoiceItemCount[i] = questRecord[63+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
RewardFactionId[i] = questRecord[69+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
RewRepFaction[i] = questRecord[97+i].GetUInt32();
|
||||
RewardFactionValueId[i] = questRecord[74+i].GetInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
RewRepValueId[i] = questRecord[102+i].GetInt32();
|
||||
RewardFactionValueIdOverride[i] = questRecord[79+i].GetInt32();
|
||||
|
||||
PointMapId = questRecord[84].GetUInt32();
|
||||
PointX = questRecord[85].GetFloat();
|
||||
PointY = questRecord[86].GetFloat();
|
||||
PointOption = questRecord[87].GetUInt32();
|
||||
Title = questRecord[88].GetString();
|
||||
Objectives = questRecord[89].GetString();
|
||||
Details = questRecord[90].GetString();
|
||||
EndText = questRecord[91].GetString();
|
||||
CompletedText = questRecord[92].GetString();
|
||||
OfferRewardText = questRecord[93].GetString();
|
||||
RequestItemsText = questRecord[94].GetString();
|
||||
|
||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
RewRepValue[i] = questRecord[107+i].GetInt32();
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
RequiredNpcOrGo[i] = questRecord[95+i].GetInt32();
|
||||
|
||||
RewHonorAddition = questRecord[112].GetUInt32();
|
||||
RewHonorMultiplier = questRecord[113].GetFloat();
|
||||
RewOrReqMoney = questRecord[114].GetInt32();
|
||||
RewMoneyMaxLevel = questRecord[115].GetUInt32();
|
||||
RewSpell = questRecord[116].GetUInt32();
|
||||
RewSpellCast = questRecord[117].GetInt32();
|
||||
RewMailTemplateId = questRecord[118].GetUInt32();
|
||||
RewMailDelaySecs = questRecord[119].GetUInt32();
|
||||
PointMapId = questRecord[120].GetUInt32();
|
||||
PointX = questRecord[121].GetFloat();
|
||||
PointY = questRecord[122].GetFloat();
|
||||
PointOpt = questRecord[123].GetUInt32();
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
RequiredNpcOrGoCount[i] = questRecord[99+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||
RequiredSourceItemId[i] = questRecord[103+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||
RequiredSourceItemCount[i] = questRecord[107+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
RequiredItemId[i] = questRecord[111+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
RequiredItemCount[i] = questRecord[117+i].GetUInt32();
|
||||
|
||||
RequiredSpell = questRecord[123].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) // To be removed
|
||||
RequiredSpellCast[i] = questRecord[124+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
ObjectiveText[i] = questRecord[128+i].GetString();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
|
||||
RewardCurrencyId[i] = questRecord[132].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
|
||||
RewardCurrencyCount[i] = questRecord[136].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REQUIRED_CURRENCY_COUNT; ++i)
|
||||
RequiredCurrencyId[i] = questRecord[140].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_REQUIRED_CURRENCY_COUNT; ++i)
|
||||
RequiredCurrencyCount[i] = questRecord[144].GetUInt32();
|
||||
|
||||
QuestGiverTextWindow = questRecord[148].GetString();
|
||||
QuestGiverTargetName = questRecord[149].GetString();
|
||||
QuestTurnTextWindow = questRecord[150].GetString();
|
||||
QuestTurnTargetName = questRecord[151].GetString();
|
||||
SoundAccept = questRecord[152].GetUInt32();
|
||||
SoundTurnIn = questRecord[153].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||
DetailsEmote[i] = questRecord[124+i].GetUInt32();
|
||||
DetailsEmote[i] = questRecord[154+i].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||
DetailsEmoteDelay[i] = questRecord[128+i].GetUInt32();
|
||||
DetailsEmoteDelay[i] = questRecord[158+i].GetUInt32();
|
||||
|
||||
IncompleteEmote = questRecord[132].GetUInt32();
|
||||
CompleteEmote = questRecord[133].GetUInt32();
|
||||
EmoteOnIncomplete = questRecord[162].GetUInt32();
|
||||
EmoteOnComplete = questRecord[163].GetUInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||
OfferRewardEmote[i] = questRecord[134+i].GetInt32();
|
||||
OfferRewardEmote[i] = questRecord[164+i].GetInt32();
|
||||
|
||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||
OfferRewardEmoteDelay[i] = questRecord[138+i].GetInt32();
|
||||
OfferRewardEmoteDelay[i] = questRecord[168+i].GetInt32();
|
||||
|
||||
QuestStartScript = questRecord[142].GetUInt32();
|
||||
QuestCompleteScript = questRecord[143].GetUInt32();
|
||||
StartScript = questRecord[172].GetUInt32();
|
||||
CompleteScript = questRecord[173].GetUInt32();
|
||||
|
||||
QuestFlags |= SpecialFlags << 20;
|
||||
if (QuestFlags & QUEST_TRINITY_FLAGS_AUTO_ACCEPT)
|
||||
QuestFlags |= QUEST_FLAGS_AUTO_ACCEPT;
|
||||
// int32 WDBVerified = questRecord[174].GetInt32();
|
||||
|
||||
m_reqitemscount = 0;
|
||||
m_reqCreatureOrGOcount = 0;
|
||||
m_rewitemscount = 0;
|
||||
m_rewchoiceitemscount = 0;
|
||||
Flags |= SpecialFlags << 20;
|
||||
if (Flags & QUEST_TRINITY_FLAGS_AUTO_ACCEPT)
|
||||
Flags |= QUEST_FLAGS_AUTO_ACCEPT;
|
||||
|
||||
m_reqItemsCount = 0;
|
||||
m_reqNpcOrGoCount = 0;
|
||||
m_rewItemsCount = 0;
|
||||
m_rewChoiceItemsCount = 0;
|
||||
m_rewCurrencyCount = 0;
|
||||
m_reqCurrencyCount = 0;
|
||||
|
||||
for (int i=0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
if (ReqItemId[i])
|
||||
++m_reqitemscount;
|
||||
if (RequiredItemId[i])
|
||||
++m_reqItemsCount;
|
||||
|
||||
for (int i=0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
if (ReqCreatureOrGOId[i])
|
||||
++m_reqCreatureOrGOcount;
|
||||
if (RequiredNpcOrGo[i])
|
||||
++m_reqNpcOrGoCount;
|
||||
|
||||
for (int i=0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
if (RewItemId[i])
|
||||
++m_rewitemscount;
|
||||
if (RewardItemId[i])
|
||||
++m_rewItemsCount;
|
||||
|
||||
for (int i=0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
if (RewChoiceItemId[i])
|
||||
++m_rewchoiceitemscount;
|
||||
if (RewardChoiceItemId[i])
|
||||
++m_rewChoiceItemsCount;
|
||||
|
||||
for (int i=0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
|
||||
if (RewardCurrencyId[i])
|
||||
++m_rewCurrencyCount;
|
||||
|
||||
for (int i=0; i < QUEST_REQUIRED_CURRENCY_COUNT; ++i)
|
||||
if (RequiredCurrencyId[i])
|
||||
++m_reqCurrencyCount;
|
||||
|
||||
}
|
||||
|
||||
uint32 Quest::XPValue(Player* player) const
|
||||
{
|
||||
if (player)
|
||||
{
|
||||
int32 quest_level = (QuestLevel == -1 ? player->getLevel() : QuestLevel);
|
||||
int32 quest_level = (Level == -1 ? player->getLevel() : Level);
|
||||
const QuestXPEntry* xpentry = sQuestXPStore.LookupEntry(quest_level);
|
||||
if (!xpentry)
|
||||
return 0;
|
||||
@@ -181,7 +222,7 @@ uint32 Quest::XPValue(Player* player) const
|
||||
else if (diffFactor > 10)
|
||||
diffFactor = 10;
|
||||
|
||||
uint32 xp = diffFactor * xpentry->Exp[XPId] / 10;
|
||||
uint32 xp = diffFactor * xpentry->Exp[RewardXPId] / 10;
|
||||
if (xp <= 100)
|
||||
xp = 5 * ((xp + 2) / 5);
|
||||
else if (xp <= 500)
|
||||
@@ -199,15 +240,15 @@ uint32 Quest::XPValue(Player* player) const
|
||||
|
||||
int32 Quest::GetRewOrReqMoney() const
|
||||
{
|
||||
if (RewOrReqMoney <= 0)
|
||||
return RewOrReqMoney;
|
||||
if (RewardOrRequiredMoney <= 0)
|
||||
return RewardOrRequiredMoney;
|
||||
|
||||
return int32(RewOrReqMoney * sWorld->getRate(RATE_DROP_MONEY));
|
||||
return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_DROP_MONEY));
|
||||
}
|
||||
|
||||
bool Quest::IsAutoComplete() const
|
||||
{
|
||||
return QuestMethod == 0 || HasFlag(QUEST_FLAGS_AUTOCOMPLETE);
|
||||
return Method == 0 || HasFlag(QUEST_FLAGS_AUTOCOMPLETE);
|
||||
}
|
||||
|
||||
bool Quest::IsAllowedInRaid() const
|
||||
|
||||
@@ -41,6 +41,8 @@ class ObjectMgr;
|
||||
#define QUEST_REPUTATIONS_COUNT 5
|
||||
#define QUEST_EMOTE_COUNT 4
|
||||
#define QUEST_PVP_KILL_SLOT 0
|
||||
#define QUEST_REWARD_CURRENCY_COUNT 4
|
||||
#define QUEST_REQUIRED_CURRENCY_COUNT 4
|
||||
|
||||
enum QuestFailedReasons
|
||||
{
|
||||
@@ -141,7 +143,7 @@ enum __QuestFlags
|
||||
QUEST_FLAGS_UNAVAILABLE = 0x00004000, // Used on quests that are not generically available
|
||||
QUEST_FLAGS_WEEKLY = 0x00008000,
|
||||
QUEST_FLAGS_AUTOCOMPLETE = 0x00010000, // auto complete
|
||||
QUEST_FLAGS_SPECIAL_ITEM = 0x00020000, // has something to do with ReqItemId and SrcItemId
|
||||
QUEST_FLAGS_SPECIAL_ITEM = 0x00020000, // has something to do with RequiredItemId and SourceItemId
|
||||
QUEST_FLAGS_OBJ_TEXT = 0x00040000, // use Objective text as Complete text
|
||||
QUEST_FLAGS_AUTO_ACCEPT = 0x00080000, // The client recognizes this flag as auto-accept. However, NONE of the current quests (3.3.5a) have this flag. Maybe blizz used to use it, or will use it in the future.
|
||||
|
||||
@@ -173,6 +175,11 @@ struct QuestLocale
|
||||
StringVector EndText;
|
||||
StringVector CompletedText;
|
||||
std::vector< StringVector > ObjectiveText;
|
||||
// new on 4.x
|
||||
StringVector QuestGiverTextWindow;
|
||||
StringVector QuestGiverTargetName;
|
||||
StringVector QuestTurnTextWindow;
|
||||
StringVector QuestTurnTargetName;
|
||||
};
|
||||
|
||||
// This Quest class provides a convenient way to access a few pretotaled (cached) quest details,
|
||||
@@ -185,24 +192,25 @@ class Quest
|
||||
Quest(Field* questRecord);
|
||||
uint32 XPValue(Player* player) const;
|
||||
|
||||
bool HasFlag(uint32 flag) const { return (QuestFlags & flag) != 0; }
|
||||
void SetFlag(uint32 flag) { QuestFlags |= flag; }
|
||||
bool HasFlag(uint32 flag) const { return (Flags & flag) != 0; }
|
||||
void SetFlag(uint32 flag) { Flags |= flag; }
|
||||
|
||||
// table data accessors:
|
||||
uint32 GetQuestId() const { return QuestId; }
|
||||
uint32 GetQuestMethod() const { return QuestMethod; }
|
||||
uint32 GetQuestId() const { return Id; }
|
||||
uint32 GetQuestMethod() const { return Method; }
|
||||
int32 GetZoneOrSort() const { return ZoneOrSort; }
|
||||
int32 GetSkillOrClassMask() const { return SkillOrClassMask; }
|
||||
uint32 GetMinLevel() const { return MinLevel; }
|
||||
uint32 GetMaxLevel() const { return MaxLevel; }
|
||||
uint32 GetQuestLevel() const { return QuestLevel; }
|
||||
uint32 GetQuestLevel() const { return Level; }
|
||||
uint32 GetType() const { return Type; }
|
||||
uint32 GetRequiredClasses() const { return RequiredClasses; }
|
||||
uint32 GetRequiredRaces() const { return RequiredRaces; }
|
||||
uint32 GetRequiredSkillValue() const { return RequiredSkillValue; }
|
||||
uint32 GetRepObjectiveFaction() const { return RepObjectiveFaction; }
|
||||
int32 GetRepObjectiveValue() const { return RepObjectiveValue; }
|
||||
uint32 GetRepObjectiveFaction2() const { return RepObjectiveFaction2; }
|
||||
int32 GetRepObjectiveValue2() const { return RepObjectiveValue2; }
|
||||
uint32 GetRequiredSkill() const { return RequiredSkillId; }
|
||||
uint32 GetRequiredSkillValue() const { return RequiredSkillPoints; }
|
||||
uint32 GetRepObjectiveFaction() const { return RequiredFactionId1; }
|
||||
int32 GetRepObjectiveValue() const { return RequiredFactionValue1; }
|
||||
uint32 GetRepObjectiveFaction2() const { return RequiredFactionId2; }
|
||||
int32 GetRepObjectiveValue2() const { return RequiredFactionValue2; }
|
||||
uint32 GetRequiredMinRepFaction() const { return RequiredMinRepFaction; }
|
||||
int32 GetRequiredMinRepValue() const { return RequiredMinRepValue; }
|
||||
uint32 GetRequiredMaxRepFaction() const { return RequiredMaxRepFaction; }
|
||||
@@ -212,15 +220,15 @@ class Quest
|
||||
int32 GetPrevQuestId() const { return PrevQuestId; }
|
||||
int32 GetNextQuestId() const { return NextQuestId; }
|
||||
int32 GetExclusiveGroup() const { return ExclusiveGroup; }
|
||||
uint32 GetNextQuestInChain() const { return NextQuestInChain; }
|
||||
uint32 GetCharTitleId() const { return CharTitleId; }
|
||||
uint32 GetPlayersSlain() const { return PlayersSlain; }
|
||||
uint32 GetBonusTalents() const { return BonusTalents; }
|
||||
int32 GetRewArenaPoints() const {return RewArenaPoints; }
|
||||
uint32 GetXPId() const { return XPId; }
|
||||
uint32 GetSrcItemId() const { return SrcItemId; }
|
||||
uint32 GetSrcItemCount() const { return SrcItemCount; }
|
||||
uint32 GetSrcSpell() const { return SrcSpell; }
|
||||
uint32 GetNextQuestInChain() const { return NextQuestIdChain; }
|
||||
uint32 GetCharTitleId() const { return RewardTitleId; }
|
||||
uint32 GetPlayersSlain() const { return RequiredPlayerKills; }
|
||||
uint32 GetBonusTalents() const { return RewardTalents; }
|
||||
int32 GetRewArenaPoints() const {return RewardArenaPoints; }
|
||||
uint32 GetXPId() const { return RewardXPId; }
|
||||
uint32 GetSrcItemId() const { return SourceItemId; }
|
||||
uint32 GetSrcItemCount() const { return SourceItemIdCount; }
|
||||
uint32 GetSrcSpell() const { return SourceSpellid; }
|
||||
std::string GetTitle() const { return Title; }
|
||||
std::string GetDetails() const { return Details; }
|
||||
std::string GetObjectives() const { return Objectives; }
|
||||
@@ -228,60 +236,77 @@ class Quest
|
||||
std::string GetRequestItemsText() const { return RequestItemsText; }
|
||||
std::string GetEndText() const { return EndText; }
|
||||
std::string GetCompletedText() const { return CompletedText; }
|
||||
std::string GetQuestGiverTextWindow() const { return QuestGiverTextWindow; }
|
||||
std::string GetQuestGiverTargetName() const { return QuestGiverTargetName; }
|
||||
std::string GetQuestTurnTextWindow() const { return QuestTurnTextWindow; }
|
||||
std::string GetQuestTurnTargetName() const { return QuestTurnTargetName; }
|
||||
int32 GetRewOrReqMoney() const;
|
||||
uint32 GetRewHonorAddition() const { return RewHonorAddition; }
|
||||
float GetRewHonorMultiplier() const { return RewHonorMultiplier; }
|
||||
uint32 GetRewMoneyMaxLevel() const { return RewMoneyMaxLevel; }
|
||||
// use in XP calculation at client
|
||||
uint32 GetRewSpell() const { return RewSpell; }
|
||||
int32 GetRewSpellCast() const { return RewSpellCast; }
|
||||
uint32 GetRewMailTemplateId() const { return RewMailTemplateId; }
|
||||
uint32 GetRewMailDelaySecs() const { return RewMailDelaySecs; }
|
||||
uint32 GetRewHonorAddition() const { return RewardHonor; }
|
||||
float GetRewHonorMultiplier() const { return RewardHonorMultiplier; }
|
||||
uint32 GetRewMoneyMaxLevel() const { return RewardMoneyMaxLevel; } // use in XP calculation at client
|
||||
uint32 GetRewSpell() const { return RewardSpell; }
|
||||
int32 GetRewSpellCast() const { return RewardSpellCast; }
|
||||
uint32 GetRewMailTemplateId() const { return RewardMailTemplateId; }
|
||||
uint32 GetRewMailDelaySecs() const { return RewardMailDelay; }
|
||||
uint32 GetPointMapId() const { return PointMapId; }
|
||||
float GetPointX() const { return PointX; }
|
||||
float GetPointY() const { return PointY; }
|
||||
uint32 GetPointOpt() const { return PointOpt; }
|
||||
uint32 GetIncompleteEmote() const { return IncompleteEmote; }
|
||||
uint32 GetCompleteEmote() const { return CompleteEmote; }
|
||||
uint32 GetQuestStartScript() const { return QuestStartScript; }
|
||||
uint32 GetQuestCompleteScript() const { return QuestCompleteScript; }
|
||||
bool IsRepeatable() const { return QuestFlags & QUEST_TRINITY_FLAGS_REPEATABLE; }
|
||||
uint32 GetPointOpt() const { return PointOption; }
|
||||
uint32 GetRequiredSpell() const { return RequiredSpell; }
|
||||
uint32 GetSoundAccept() const { return SoundAccept; }
|
||||
uint32 GetSoundTurnIn() const { return SoundTurnIn; }
|
||||
uint32 GetIncompleteEmote() const { return EmoteOnIncomplete; }
|
||||
uint32 GetCompleteEmote() const { return EmoteOnComplete; }
|
||||
uint32 GetQuestStartScript() const { return StartScript; }
|
||||
uint32 GetQuestCompleteScript() const { return CompleteScript; }
|
||||
bool IsRepeatable() const { return Flags & QUEST_TRINITY_FLAGS_REPEATABLE; }
|
||||
bool IsAutoComplete() const;
|
||||
uint32 GetFlags() const { return QuestFlags; }
|
||||
bool IsDaily() const { return QuestFlags & QUEST_FLAGS_DAILY; }
|
||||
bool IsWeekly() const { return QuestFlags & QUEST_FLAGS_WEEKLY; }
|
||||
bool IsDailyOrWeekly() const { return QuestFlags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY); }
|
||||
bool IsAutoAccept() const { return QuestFlags & QUEST_FLAGS_AUTO_ACCEPT; }
|
||||
uint32 GetFlags() const { return Flags; }
|
||||
uint32 GetMinimapTargetMark() const { return MinimapTargetMark; }
|
||||
uint32 GetRewardSkillId() const { return RewardSkillId; }
|
||||
uint32 GetRewardSkillPoints() const { return RewardSkillPoints; }
|
||||
uint32 GetRewardReputationMask() const { return RewardReputationMask; }
|
||||
uint32 GetQuestGiverPortrait() const { return QuestGiverPortrait; }
|
||||
uint32 GetQuestTurnInPortrait() const { return QuestTurnInPortrait; }
|
||||
bool IsDaily() const { return Flags & QUEST_FLAGS_DAILY; }
|
||||
bool IsWeekly() const { return Flags & QUEST_FLAGS_WEEKLY; }
|
||||
bool IsDailyOrWeekly() const { return Flags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY); }
|
||||
bool IsAutoAccept() const { return Flags & QUEST_FLAGS_AUTO_ACCEPT; }
|
||||
bool IsRaidQuest() const { return Type == QUEST_TYPE_RAID || Type == QUEST_TYPE_RAID_10 || Type == QUEST_TYPE_RAID_25; }
|
||||
bool IsAllowedInRaid() const;
|
||||
bool IsDFQuest() const { return QuestFlags & QUEST_TRINITY_FLAGS_DF_QUEST; }
|
||||
bool IsDFQuest() const { return Flags & QUEST_TRINITY_FLAGS_DF_QUEST; }
|
||||
uint32 CalculateHonorGain(uint8 level) const;
|
||||
|
||||
// multiple values
|
||||
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];
|
||||
uint32 ReqItemId[QUEST_ITEM_OBJECTIVES_COUNT];
|
||||
uint32 ReqItemCount[QUEST_ITEM_OBJECTIVES_COUNT];
|
||||
uint32 ReqSourceId[QUEST_SOURCE_ITEM_IDS_COUNT];
|
||||
uint32 ReqSourceCount[QUEST_SOURCE_ITEM_IDS_COUNT];
|
||||
int32 ReqCreatureOrGOId[QUEST_OBJECTIVES_COUNT]; // >0 Creature <0 Gameobject
|
||||
uint32 ReqCreatureOrGOCount[QUEST_OBJECTIVES_COUNT];
|
||||
uint32 ReqSpell[QUEST_OBJECTIVES_COUNT];
|
||||
uint32 RewChoiceItemId[QUEST_REWARD_CHOICES_COUNT];
|
||||
uint32 RewChoiceItemCount[QUEST_REWARD_CHOICES_COUNT];
|
||||
uint32 RewItemId[QUEST_REWARDS_COUNT];
|
||||
uint32 RewItemCount[QUEST_REWARDS_COUNT];
|
||||
uint32 RewRepFaction[QUEST_REPUTATIONS_COUNT];
|
||||
int32 RewRepValueId[QUEST_REPUTATIONS_COUNT];
|
||||
int32 RewRepValue[QUEST_REPUTATIONS_COUNT];
|
||||
uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT];
|
||||
uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT];
|
||||
uint32 RequiredSourceItemId[QUEST_SOURCE_ITEM_IDS_COUNT];
|
||||
uint32 RequiredSourceItemCount[QUEST_SOURCE_ITEM_IDS_COUNT];
|
||||
int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]; // >0 Creature <0 Gameobject
|
||||
uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT];
|
||||
uint32 RequiredSpellCast[QUEST_OBJECTIVES_COUNT];
|
||||
uint32 RewardChoiceItemId[QUEST_REWARD_CHOICES_COUNT];
|
||||
uint32 RewardChoiceItemCount[QUEST_REWARD_CHOICES_COUNT];
|
||||
uint32 RewardItemId[QUEST_REWARDS_COUNT];
|
||||
uint32 RewardItemIdCount[QUEST_REWARDS_COUNT];
|
||||
uint32 RewardFactionId[QUEST_REPUTATIONS_COUNT];
|
||||
int32 RewardFactionValueId[QUEST_REPUTATIONS_COUNT];
|
||||
int32 RewardFactionValueIdOverride[QUEST_REPUTATIONS_COUNT];
|
||||
uint32 DetailsEmote[QUEST_EMOTE_COUNT];
|
||||
uint32 DetailsEmoteDelay[QUEST_EMOTE_COUNT];
|
||||
uint32 OfferRewardEmote[QUEST_EMOTE_COUNT];
|
||||
uint32 OfferRewardEmoteDelay[QUEST_EMOTE_COUNT];
|
||||
// 4.x
|
||||
uint32 RewardCurrencyId[QUEST_REWARD_CURRENCY_COUNT];
|
||||
uint32 RewardCurrencyCount[QUEST_REWARD_CURRENCY_COUNT];
|
||||
uint32 RequiredCurrencyId[QUEST_REQUIRED_CURRENCY_COUNT];
|
||||
uint32 RequiredCurrencyCount[QUEST_REQUIRED_CURRENCY_COUNT];
|
||||
|
||||
uint32 GetReqItemsCount() const { return m_reqitemscount; }
|
||||
uint32 GetReqCreatureOrGOcount() const { return m_reqCreatureOrGOcount; }
|
||||
uint32 GetRewChoiceItemsCount() const { return m_rewchoiceitemscount; }
|
||||
uint32 GetRewItemsCount() const { return m_rewitemscount; }
|
||||
uint32 GetReqItemsCount() const { return m_reqItemsCount; }
|
||||
uint32 GetReqCreatureOrGOcount() const { return m_reqNpcOrGoCount; }
|
||||
uint32 GetRewChoiceItemsCount() const { return m_rewChoiceItemsCount; }
|
||||
uint32 GetRewItemsCount() const { return m_rewItemsCount; }
|
||||
|
||||
typedef std::vector<int32> PrevQuests;
|
||||
PrevQuests prevQuests;
|
||||
@@ -290,46 +315,49 @@ class Quest
|
||||
|
||||
// cached data
|
||||
private:
|
||||
uint32 m_reqitemscount;
|
||||
uint32 m_reqCreatureOrGOcount;
|
||||
uint32 m_rewchoiceitemscount;
|
||||
uint32 m_rewitemscount;
|
||||
uint32 m_reqItemsCount;
|
||||
uint32 m_reqNpcOrGoCount;
|
||||
uint32 m_rewChoiceItemsCount;
|
||||
uint32 m_rewItemsCount;
|
||||
uint32 m_rewCurrencyCount;
|
||||
uint32 m_reqCurrencyCount;
|
||||
|
||||
// table data
|
||||
protected:
|
||||
uint32 QuestId;
|
||||
uint32 QuestMethod;
|
||||
uint32 Id;
|
||||
uint32 Method;
|
||||
int32 ZoneOrSort;
|
||||
int32 SkillOrClassMask;
|
||||
uint32 MinLevel;
|
||||
uint32 MaxLevel;
|
||||
int32 QuestLevel;
|
||||
int32 Level;
|
||||
uint32 Type;
|
||||
uint32 RequiredClasses;
|
||||
uint32 RequiredRaces;
|
||||
uint32 RequiredSkillValue;
|
||||
uint32 RepObjectiveFaction;
|
||||
int32 RepObjectiveValue;
|
||||
uint32 RepObjectiveFaction2;
|
||||
int32 RepObjectiveValue2;
|
||||
uint32 RequiredSkillId;
|
||||
uint32 RequiredSkillPoints;
|
||||
uint32 RequiredFactionId1;
|
||||
int32 RequiredFactionValue1;
|
||||
uint32 RequiredFactionId2;
|
||||
int32 RequiredFactionValue2;
|
||||
uint32 RequiredMinRepFaction;
|
||||
int32 RequiredMinRepValue;
|
||||
uint32 RequiredMaxRepFaction;
|
||||
int32 RequiredMaxRepValue;
|
||||
uint32 SuggestedPlayers;
|
||||
uint32 LimitTime;
|
||||
uint32 QuestFlags;
|
||||
uint32 CharTitleId;
|
||||
uint32 PlayersSlain;
|
||||
uint32 BonusTalents;
|
||||
int32 RewArenaPoints;
|
||||
uint32 Flags;
|
||||
uint32 RewardTitleId;
|
||||
uint32 RequiredPlayerKills;
|
||||
uint32 RewardTalents;
|
||||
int32 RewardArenaPoints;
|
||||
int32 PrevQuestId;
|
||||
int32 NextQuestId;
|
||||
int32 ExclusiveGroup;
|
||||
uint32 NextQuestInChain;
|
||||
uint32 XPId;
|
||||
uint32 SrcItemId;
|
||||
uint32 SrcItemCount;
|
||||
uint32 SrcSpell;
|
||||
uint32 NextQuestIdChain;
|
||||
uint32 RewardXPId;
|
||||
uint32 SourceItemId;
|
||||
uint32 SourceItemIdCount;
|
||||
uint32 SourceSpellid;
|
||||
std::string Title;
|
||||
std::string Details;
|
||||
std::string Objectives;
|
||||
@@ -337,22 +365,36 @@ class Quest
|
||||
std::string RequestItemsText;
|
||||
std::string EndText;
|
||||
std::string CompletedText;
|
||||
uint32 RewHonorAddition;
|
||||
float RewHonorMultiplier;
|
||||
int32 RewOrReqMoney;
|
||||
uint32 RewMoneyMaxLevel;
|
||||
uint32 RewSpell;
|
||||
int32 RewSpellCast;
|
||||
uint32 RewMailTemplateId;
|
||||
uint32 RewMailDelaySecs;
|
||||
uint32 RewardHonor;
|
||||
float RewardHonorMultiplier;
|
||||
int32 RewardOrRequiredMoney;
|
||||
uint32 RewardMoneyMaxLevel;
|
||||
uint32 RewardSpell;
|
||||
int32 RewardSpellCast;
|
||||
uint32 RewardMailTemplateId;
|
||||
uint32 RewardMailDelay;
|
||||
uint32 PointMapId;
|
||||
float PointX;
|
||||
float PointY;
|
||||
uint32 PointOpt;
|
||||
uint32 IncompleteEmote;
|
||||
uint32 CompleteEmote;
|
||||
uint32 QuestStartScript;
|
||||
uint32 QuestCompleteScript;
|
||||
uint32 PointOption;
|
||||
uint32 EmoteOnIncomplete;
|
||||
uint32 EmoteOnComplete;
|
||||
uint32 StartScript;
|
||||
uint32 CompleteScript;
|
||||
// new in 4.x
|
||||
uint32 MinimapTargetMark;
|
||||
uint32 RewardSkillId;
|
||||
uint32 RewardSkillPoints;
|
||||
uint32 RewardReputationMask;
|
||||
uint32 QuestGiverPortrait;
|
||||
uint32 QuestTurnInPortrait;
|
||||
uint32 RequiredSpell;
|
||||
std::string QuestGiverTextWindow;
|
||||
std::string QuestGiverTargetName;
|
||||
std::string QuestTurnTextWindow;
|
||||
std::string QuestTurnTargetName;
|
||||
uint32 SoundAccept;
|
||||
uint32 SoundTurnIn;
|
||||
};
|
||||
|
||||
struct QuestStatusData
|
||||
|
||||
@@ -729,7 +729,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte
|
||||
newChar.SetAtLoginFlag(AT_LOGIN_FIRST); // First login
|
||||
|
||||
// Player created, save it now
|
||||
newChar.SaveToDB();
|
||||
newChar.SaveToDB(true);
|
||||
createInfo->CharCount += 1;
|
||||
|
||||
SQLTransaction trans = LoginDatabase.BeginTransaction();
|
||||
@@ -877,6 +877,16 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recv_data)
|
||||
_charLoginCallback = CharacterDatabase.DelayQueryHolder((SQLQueryHolder*)holder);
|
||||
}
|
||||
|
||||
void WorldSession::HandleLoadScreenOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
sLog->outStaticDebug("WORLD: Recvd CMSG_LOAD_SCREEN");
|
||||
uint8 unkMask; // Loading start: 0x80, loading end: 0x0
|
||||
uint32 mapID;
|
||||
recvPacket >> unkMask >> mapID;
|
||||
|
||||
// TODO: Do something with this packet
|
||||
}
|
||||
|
||||
void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
|
||||
{
|
||||
uint64 playerGuid = holder->GetGuid();
|
||||
|
||||
@@ -280,160 +280,153 @@ void WorldSession::HandleDestroyItemOpcode(WorldPacket & recv_data)
|
||||
// Only _static_ data send in this packet !!!
|
||||
void WorldSession::HandleItemQuerySingleOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
//sLog->outDebug(LOG_FILTER_PACKETIO, "WORLD: CMSG_ITEM_QUERY_SINGLE");
|
||||
uint32 item;
|
||||
recv_data >> item;
|
||||
uint32 count, type;
|
||||
recv_data >> count >> type;
|
||||
|
||||
sLog->outDetail("STORAGE: Item Query = %u", item);
|
||||
if (type != DB2_REPLY_SPARSE && type != DB2_REPLY_ITEM)
|
||||
return;
|
||||
|
||||
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(item);
|
||||
if (pProto)
|
||||
for (uint32 i = 0; i < count; ++i)
|
||||
{
|
||||
std::string Name = pProto->Name1;
|
||||
std::string Description = pProto->Description;
|
||||
uint32 item;
|
||||
recv_data >> item;
|
||||
recv_data.read_skip<uint64>();
|
||||
WorldPacket data2(SMSG_DB_REPLY, 700);
|
||||
ByteBuffer data;
|
||||
data2 << uint32(type);
|
||||
data2 << uint32(item);
|
||||
|
||||
int loc_idx = GetSessionDbLocaleIndex();
|
||||
if (loc_idx >= 0)
|
||||
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item);
|
||||
if (proto)
|
||||
{
|
||||
if (ItemLocale const* il = sObjectMgr->GetItemLocale(pProto->ItemId))
|
||||
data << uint32(item);
|
||||
if (type == DB2_REPLY_ITEM)
|
||||
{
|
||||
ObjectMgr::GetLocaleString(il->Name, loc_idx, Name);
|
||||
ObjectMgr::GetLocaleString(il->Description, loc_idx, Description);
|
||||
data << uint32(proto->Class);
|
||||
data << uint32(proto->SubClass);
|
||||
data << int32(proto->Unk0);
|
||||
data << uint32(proto->Material);
|
||||
data << uint32(proto->DisplayInfoID);
|
||||
data << uint32(proto->InventoryType);
|
||||
data << uint32(proto->Sheath);
|
||||
}
|
||||
}
|
||||
// guess size
|
||||
WorldPacket data(SMSG_ITEM_QUERY_SINGLE_RESPONSE, 600);
|
||||
data << pProto->ItemId;
|
||||
data << pProto->Class;
|
||||
data << pProto->SubClass;
|
||||
data << int32(pProto->Unk0); // new 2.0.3, not exist in wdb cache?
|
||||
data << Name;
|
||||
data << uint8(0x00); //pProto->Name2; // blizz not send name there, just uint8(0x00); <-- \0 = empty string = empty name...
|
||||
data << uint8(0x00); //pProto->Name3; // blizz not send name there, just uint8(0x00);
|
||||
data << uint8(0x00); //pProto->Name4; // blizz not send name there, just uint8(0x00);
|
||||
data << pProto->DisplayInfoID;
|
||||
data << pProto->Quality;
|
||||
data << pProto->Flags;
|
||||
data << pProto->Flags2;
|
||||
data << pProto->BuyPrice;
|
||||
data << pProto->SellPrice;
|
||||
data << pProto->InventoryType;
|
||||
data << pProto->AllowableClass;
|
||||
data << pProto->AllowableRace;
|
||||
data << pProto->ItemLevel;
|
||||
data << pProto->RequiredLevel;
|
||||
data << pProto->RequiredSkill;
|
||||
data << pProto->RequiredSkillRank;
|
||||
data << pProto->RequiredSpell;
|
||||
data << pProto->RequiredHonorRank;
|
||||
data << pProto->RequiredCityRank;
|
||||
data << pProto->RequiredReputationFaction;
|
||||
data << pProto->RequiredReputationRank;
|
||||
data << int32(pProto->MaxCount);
|
||||
data << int32(pProto->Stackable);
|
||||
data << pProto->ContainerSlots;
|
||||
data << pProto->StatsCount; // item stats count
|
||||
for (uint32 i = 0; i < pProto->StatsCount; ++i)
|
||||
{
|
||||
data << pProto->ItemStat[i].ItemStatType;
|
||||
data << pProto->ItemStat[i].ItemStatValue;
|
||||
}
|
||||
data << pProto->ScalingStatDistribution; // scaling stats distribution
|
||||
data << pProto->ScalingStatValue; // some kind of flags used to determine stat values column
|
||||
for (int i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i)
|
||||
{
|
||||
data << pProto->Damage[i].DamageMin;
|
||||
data << pProto->Damage[i].DamageMax;
|
||||
data << pProto->Damage[i].DamageType;
|
||||
}
|
||||
|
||||
// resistances (7)
|
||||
data << pProto->Armor;
|
||||
data << pProto->HolyRes;
|
||||
data << pProto->FireRes;
|
||||
data << pProto->NatureRes;
|
||||
data << pProto->FrostRes;
|
||||
data << pProto->ShadowRes;
|
||||
data << pProto->ArcaneRes;
|
||||
|
||||
data << pProto->Delay;
|
||||
data << pProto->AmmoType;
|
||||
data << pProto->RangedModRange;
|
||||
|
||||
for (int s = 0; s < MAX_ITEM_PROTO_SPELLS; ++s)
|
||||
{
|
||||
// send DBC data for cooldowns in same way as it used in Spell::SendSpellCooldown
|
||||
// use `item_template` or if not set then only use spell cooldowns
|
||||
SpellInfo const* spell = sSpellMgr->GetSpellInfo(pProto->Spells[s].SpellId);
|
||||
if (spell)
|
||||
else if (type == DB2_REPLY_SPARSE)
|
||||
{
|
||||
bool db_data = pProto->Spells[s].SpellCooldown >= 0 || pProto->Spells[s].SpellCategoryCooldown >= 0;
|
||||
data << uint32(proto->Quality);
|
||||
data << uint32(proto->Flags);
|
||||
data << uint32(proto->Flags2);
|
||||
data << int32(proto->BuyPrice);
|
||||
data << uint32(proto->SellPrice);
|
||||
data << uint32(proto->InventoryType);
|
||||
data << int32(proto->AllowableClass);
|
||||
data << int32(proto->AllowableRace);
|
||||
data << uint32(proto->ItemLevel);
|
||||
data << uint32(proto->RequiredLevel);
|
||||
data << uint32(proto->RequiredSkill);
|
||||
data << uint32(proto->RequiredSkillRank);
|
||||
data << uint32(proto->RequiredSpell);
|
||||
data << uint32(proto->RequiredHonorRank);
|
||||
data << uint32(proto->RequiredCityRank);
|
||||
data << uint32(proto->RequiredReputationFaction);
|
||||
data << uint32(proto->RequiredReputationRank);
|
||||
data << int32(proto->MaxCount);
|
||||
data << int32(proto->Stackable);
|
||||
data << uint32(proto->ContainerSlots);
|
||||
|
||||
data << pProto->Spells[s].SpellId;
|
||||
data << pProto->Spells[s].SpellTrigger;
|
||||
data << uint32(-abs(pProto->Spells[s].SpellCharges));
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x)
|
||||
data << uint32(proto->ItemStat[x].ItemStatType);
|
||||
|
||||
if (db_data)
|
||||
{
|
||||
data << uint32(pProto->Spells[s].SpellCooldown);
|
||||
data << uint32(pProto->Spells[s].SpellCategory);
|
||||
data << uint32(pProto->Spells[s].SpellCategoryCooldown);
|
||||
}
|
||||
else
|
||||
{
|
||||
data << uint32(spell->RecoveryTime);
|
||||
data << uint32(spell->Category);
|
||||
data << uint32(spell->CategoryRecoveryTime);
|
||||
}
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x)
|
||||
data << int32(proto->ItemStat[x].ItemStatValue);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x)
|
||||
data << int32(proto->ItemStat[x].ItemStatUnk1);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_STATS; ++x)
|
||||
data << int32(proto->ItemStat[x].ItemStatUnk2);
|
||||
|
||||
data << uint32(proto->ScalingStatDistribution);
|
||||
data << uint32(proto->DamageType);
|
||||
data << uint32(proto->Delay);
|
||||
data << float(proto->RangedModRange);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x)
|
||||
data << int32(proto->Spells[x].SpellId);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x)
|
||||
data << uint32(proto->Spells[x].SpellTrigger);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x)
|
||||
data << int32(proto->Spells[x].SpellCharges);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x)
|
||||
data << int32(proto->Spells[x].SpellCooldown);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x)
|
||||
data << uint32(proto->Spells[x].SpellCategory);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SPELLS; ++x)
|
||||
data << int32(proto->Spells[x].SpellCategoryCooldown);
|
||||
|
||||
data << uint32(proto->Bonding);
|
||||
|
||||
// item name
|
||||
std::string name = proto->Name1;
|
||||
data << uint16(name.length() + 1);
|
||||
data << name;
|
||||
|
||||
for (uint32 i = 0; i < 3; ++i) // other 3 names
|
||||
data << uint16(0);
|
||||
|
||||
std::string desc = proto->Description;
|
||||
data << uint16(desc.length() + 1);
|
||||
data << desc;
|
||||
|
||||
data << uint32(proto->PageText);
|
||||
data << uint32(proto->LanguageID);
|
||||
data << uint32(proto->PageMaterial);
|
||||
data << uint32(proto->StartQuest);
|
||||
data << uint32(proto->LockID);
|
||||
data << int32(proto->Material);
|
||||
data << uint32(proto->Sheath);
|
||||
data << int32(proto->RandomProperty);
|
||||
data << int32(proto->RandomSuffix);
|
||||
data << uint32(proto->ItemSet);
|
||||
data << uint32(proto->MaxDurability);
|
||||
|
||||
data << uint32(proto->Area);
|
||||
data << uint32(proto->Map);
|
||||
data << uint32(proto->BagFamily);
|
||||
data << uint32(proto->TotemCategory);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SOCKETS; ++x)
|
||||
data << uint32(proto->Socket[x].Color);
|
||||
|
||||
for (uint32 x = 0; x < MAX_ITEM_PROTO_SOCKETS; ++x)
|
||||
data << uint32(proto->Socket[x].Content);
|
||||
|
||||
data << uint32(proto->socketBonus);
|
||||
data << uint32(proto->GemProperties);
|
||||
data << float(proto->ArmorDamageModifier);
|
||||
data << int32(proto->Duration);
|
||||
data << uint32(proto->ItemLimitCategory);
|
||||
data << uint32(proto->HolidayId);
|
||||
data << float(proto->StatScalingFactor); // StatScalingFactor
|
||||
data << uint32(proto->Field130); // archaeology unk
|
||||
data << uint32(proto->Field131); // archaeology findinds count
|
||||
}
|
||||
else
|
||||
{
|
||||
data << uint32(item | 0x80000000); // sometimes with | 0x80000000
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(-1);
|
||||
data << uint32(0);
|
||||
data << uint32(-1);
|
||||
}
|
||||
|
||||
data2 << uint32(data.size());
|
||||
data2.append(data);
|
||||
}
|
||||
data << pProto->Bonding;
|
||||
data << Description;
|
||||
data << pProto->PageText;
|
||||
data << pProto->LanguageID;
|
||||
data << pProto->PageMaterial;
|
||||
data << pProto->StartQuest;
|
||||
data << pProto->LockID;
|
||||
data << int32(pProto->Material);
|
||||
data << pProto->Sheath;
|
||||
data << pProto->RandomProperty;
|
||||
data << pProto->RandomSuffix;
|
||||
data << pProto->Block;
|
||||
data << pProto->ItemSet;
|
||||
data << pProto->MaxDurability;
|
||||
data << pProto->Area;
|
||||
data << pProto->Map; // Added in 1.12.x & 2.0.1 client branch
|
||||
data << pProto->BagFamily;
|
||||
data << pProto->TotemCategory;
|
||||
for (int s = 0; s < MAX_ITEM_PROTO_SOCKETS; ++s)
|
||||
{
|
||||
data << pProto->Socket[s].Color;
|
||||
data << pProto->Socket[s].Content;
|
||||
}
|
||||
data << pProto->socketBonus;
|
||||
data << pProto->GemProperties;
|
||||
data << pProto->RequiredDisenchantSkill;
|
||||
data << pProto->ArmorDamageModifier;
|
||||
data << uint32(abs(pProto->Duration)); // added in 2.4.2.8209, duration (seconds)
|
||||
data << pProto->ItemLimitCategory; // WotLK, ItemLimitCategory
|
||||
data << pProto->HolidayId; // Holiday.dbc?
|
||||
SendPacket(&data);
|
||||
}
|
||||
else
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_ITEM_QUERY_SINGLE - NO item INFO! (ENTRY: %u)", item);
|
||||
WorldPacket data(SMSG_ITEM_QUERY_SINGLE_RESPONSE, 4);
|
||||
data << uint32(item | 0x80000000);
|
||||
SendPacket(&data);
|
||||
|
||||
data2 << uint32(type);
|
||||
_player->GetSession()->SendPacket(&data2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -981,25 +974,6 @@ void WorldSession::HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket)
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetAmmoOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
if (!GetPlayer()->isAlive())
|
||||
{
|
||||
GetPlayer()->SendEquipError(EQUIP_ERR_YOU_ARE_DEAD, NULL, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_SET_AMMO");
|
||||
uint32 item;
|
||||
|
||||
recv_data >> item;
|
||||
|
||||
if (!item)
|
||||
GetPlayer()->RemoveAmmo();
|
||||
else
|
||||
GetPlayer()->SetAmmo(item);
|
||||
}
|
||||
|
||||
void WorldSession::SendEnchantmentLog(uint64 Target, uint64 Caster, uint32 ItemID, uint32 SpellID)
|
||||
{
|
||||
WorldPacket data(SMSG_ENCHANTMENTLOG, (8+8+4+4+1)); // last check 2.0.10
|
||||
|
||||
@@ -205,14 +205,14 @@ void WorldSession::HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& /*recv_data
|
||||
ItemTemplate const* iProto = NULL;
|
||||
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
{
|
||||
if (!qRew->RewItemId[i])
|
||||
if (!qRew->RewardItemId[i])
|
||||
continue;
|
||||
|
||||
iProto = sObjectMgr->GetItemTemplate(qRew->RewItemId[i]);
|
||||
iProto = sObjectMgr->GetItemTemplate(qRew->RewardItemId[i]);
|
||||
|
||||
data << uint32(qRew->RewItemId[i]);
|
||||
data << uint32(qRew->RewardItemId[i]);
|
||||
data << uint32(iProto ? iProto->DisplayInfoID : 0);
|
||||
data << uint32(qRew->RewItemCount[i]);
|
||||
data << uint32(qRew->RewardItemIdCount[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -495,14 +495,14 @@ void WorldSession::SendLfgPlayerReward(uint32 rdungeonEntry, uint32 sdungeonEntr
|
||||
ItemTemplate const* iProto = NULL;
|
||||
for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
{
|
||||
if (!qRew->RewItemId[i])
|
||||
if (!qRew->RewardItemId[i])
|
||||
continue;
|
||||
|
||||
iProto = sObjectMgr->GetItemTemplate(qRew->RewItemId[i]);
|
||||
iProto = sObjectMgr->GetItemTemplate(qRew->RewardItemId[i]);
|
||||
|
||||
data << uint32(qRew->RewItemId[i]);
|
||||
data << uint32(qRew->RewardItemId[i]);
|
||||
data << uint32(iProto ? iProto->DisplayInfoID : 0);
|
||||
data << uint32(qRew->RewItemCount[i]);
|
||||
data << uint32(qRew->RewardItemIdCount[i]);
|
||||
}
|
||||
}
|
||||
SendPacket(&data);
|
||||
|
||||
@@ -596,11 +596,11 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data)
|
||||
data << uint32(0); // probably changed in 3.3.3
|
||||
data << uint32((*itr)->stationery); // stationery (Stationery.dbc)
|
||||
data << uint32((*itr)->money); // Gold
|
||||
data << uint32((*itr)->checked); // flags
|
||||
data << uint32((*itr)->checked); // flags
|
||||
data << float(((*itr)->expire_time-time(NULL))/DAY); // Time
|
||||
data << uint32((*itr)->mailTemplateId); // mail template (MailTemplate.dbc)
|
||||
data << (*itr)->subject; // Subject string - once 00, when mail type = 3, max 256
|
||||
data << (*itr)->body; // message? max 8000
|
||||
data << (*itr)->subject; // Subject string - once 00, when mail type = 3, max 256
|
||||
data << (*itr)->body; // message? max 8000
|
||||
data << uint8(item_count); // client limit is 0x10
|
||||
|
||||
for (uint8 i = 0; i < item_count; ++i)
|
||||
|
||||
@@ -1227,13 +1227,11 @@ void WorldSession::HandleInspectHonorStatsOpcode(WorldPacket& recv_data)
|
||||
return;
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_INSPECT_HONOR_STATS, 8+1+4*4);
|
||||
data << uint64(player->GetGUID());
|
||||
data << uint8(player->GetHonorPoints());
|
||||
WorldPacket data(SMSG_INSPECT_HONOR_STATS, 4+1+4+8);
|
||||
data << uint32(player->GetUInt32Value(PLAYER_FIELD_KILLS));
|
||||
data << uint32(player->GetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION));
|
||||
data << uint32(player->GetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION));
|
||||
data << uint8(0); // rank
|
||||
data << uint32(player->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS));
|
||||
data << uint64(player->GetGUID());
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
|
||||
@@ -673,15 +673,7 @@ void WorldSession::HandlePetAbandon(WorldPacket & recv_data)
|
||||
if (pet)
|
||||
{
|
||||
if (pet->isPet())
|
||||
{
|
||||
if (pet->GetGUID() == _player->GetPetGUID())
|
||||
{
|
||||
uint32 feelty = pet->GetPower(POWER_HAPPINESS);
|
||||
pet->SetPower(POWER_HAPPINESS, feelty > 50000 ? (feelty-50000) : 0);
|
||||
}
|
||||
|
||||
_player->RemovePet((Pet*)pet, PET_SAVE_AS_DELETED);
|
||||
}
|
||||
else if (pet->GetGUID() == _player->GetCharmGUID())
|
||||
_player->StopCastingCharm();
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket & recv_data)
|
||||
bool destroyItem = true;
|
||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
if ((qInfo->ReqItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetTemplate()->MaxCount > 0))
|
||||
if ((qInfo->RequiredItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetTemplate()->MaxCount > 0))
|
||||
{
|
||||
destroyItem = false;
|
||||
break;
|
||||
|
||||
@@ -40,7 +40,7 @@ void InitOpcodes()
|
||||
}
|
||||
|
||||
memset(opcodeTable, 0, sizeof(opcodeTable));
|
||||
|
||||
|
||||
//DEFINE_OPCODE_HANDLER(MSG_NULL_ACTION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_BOOTME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_DBLOOKUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
@@ -103,6 +103,7 @@ void InitOpcodes()
|
||||
DEFINE_OPCODE_HANDLER(SMSG_CHAR_ENUM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_CHAR_DELETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_PLAYER_LOGIN, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandlePlayerLoginOpcode );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LOAD_SCREEN, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleLoadScreenOpcode );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_NEW_WORLD, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
@@ -657,7 +658,6 @@ void InitOpcodes()
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_AUCTION_BIDDER_LIST_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_SET_PCT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_SET_AMMO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetAmmoOpcode );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_CORPSE_RECLAIM_DELAY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_SET_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveMoverOpcode );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_PET_CANCEL_AURA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetCancelAuraOpcode );
|
||||
@@ -706,7 +706,7 @@ void InitOpcodes()
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_LFG_GET_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_SHOW_MAILBOX, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_RESET_RANGED_COMBAT_TIMER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
////DEFINE_OPCODE_HANDLER(SMSG_MEETINGSTONE_MEMBER_ADDED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_MEETINGSTONE_MEMBER_ADDED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_CHAT_NOT_IN_PARTY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_CANCEL_GROWTH_AURA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelGrowthAuraOpcode );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_CANCEL_AUTO_REPEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
@@ -918,7 +918,7 @@ void InitOpcodes()
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_LFG_SET_ROLES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetRolesOpcode );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_LFG_SET_NEEDS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_LFG_SET_BOOT_VOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetBootVoteOpcode );
|
||||
////DEFINE_OPCODE_HANDLER(SMSG_LFG_BOOT_PROPOSAL_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LFG_BOOT_PROPOSAL_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_LFD_PLAYER_LOCK_INFO_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgPlayerLockInfoRequestOpcode);
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LFG_PLAYER_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_LFG_TELEPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgTeleportOpcode );
|
||||
@@ -1214,8 +1214,8 @@ void InitOpcodes()
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_PET_UPDATE_COMBO_POINTS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_ENABLETAXI, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleTaxiQueryAvailableNodes );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_PRE_RESURRECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_AURA_UPDATE_ALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_AURA_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_AURA_UPDATE_ALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_AURA_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_FLOOD_GRACE_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_SERVER_FIRST_ACHIEVEMENT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_PET_LEARNED_SPELL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
|
||||
@@ -250,6 +250,7 @@ enum Opcodes
|
||||
CMSG_LFG_SET_ROLES = 0x4843, //
|
||||
CMSG_LFG_TELEPORT = 0x8C7A, //
|
||||
CMSG_LIST_INVENTORY = 0xDCFE, //
|
||||
CMSG_LOAD_SCREEN = 0x4011, //
|
||||
CMSG_LOG_DISCONNECT = 0x00, //
|
||||
CMSG_LOGOUT_CANCEL = 0xA76, //
|
||||
CMSG_LOGOUT_REQUEST = 0x4C7A, //
|
||||
@@ -432,7 +433,6 @@ enum Opcodes
|
||||
CMSG_WARDEN_DATA = 0x5847, //
|
||||
CMSG_WHO = 0x9AD7, //
|
||||
CMSG_WHOIS = 0xCCE6, //
|
||||
CMSG_WORLD_LOGIN = 0x00, //
|
||||
CMSG_WORLD_STATE_UI_TIMER_UPDATE = 0x58F6, //
|
||||
CMSG_WORLD_TELEPORT = 0x00, //
|
||||
CMSG_WRAP_ITEM = 0x00, //
|
||||
@@ -560,8 +560,8 @@ enum Opcodes
|
||||
SMSG_AUCTION_OWNER_LIST_RESULT = 0x00, //
|
||||
SMSG_AUCTION_OWNER_NOTIFICATION = 0x00, //
|
||||
SMSG_AUCTION_REMOVED_NOTIFICATION = 0x00, //
|
||||
SMSG_AURA_UPDATE = 0x00, //
|
||||
SMSG_AURA_UPDATE_ALL = 0x00, //
|
||||
SMSG_AURA_UPDATE = 0x4C66, //
|
||||
SMSG_AURA_UPDATE_ALL = 0x18EE, //
|
||||
SMSG_AURACASTLOG = 0x00, //
|
||||
SMSG_AUTH_CHALLENGE = 0x1181, //
|
||||
SMSG_AUTH_RESPONSE = 0x8867, //
|
||||
|
||||
@@ -137,6 +137,9 @@ enum CharterTypes
|
||||
ARENA_TEAM_CHARTER_5v5_TYPE = 5
|
||||
};
|
||||
|
||||
#define DB2_REPLY_SPARSE 2442913102
|
||||
#define DB2_REPLY_ITEM 1344507586
|
||||
|
||||
//class to deal with packet processing
|
||||
//allows to determine if next packet is safe to be processed
|
||||
class PacketFilter
|
||||
@@ -401,6 +404,7 @@ class WorldSession
|
||||
void HandleCharCreateOpcode(WorldPacket& recvPacket);
|
||||
void HandleCharCreateCallback(PreparedQueryResult result, CharacterCreateInfo* createInfo);
|
||||
void HandlePlayerLoginOpcode(WorldPacket& recvPacket);
|
||||
void HandleLoadScreenOpcode(WorldPacket& recvPacket);
|
||||
void HandleCharEnum(QueryResult result);
|
||||
void HandlePlayerLogin(LoginQueryHolder * holder);
|
||||
void HandleCharFactionOrRaceChange(WorldPacket& recv_data);
|
||||
@@ -477,7 +481,6 @@ class WorldSession
|
||||
void HandleDelIgnoreOpcode(WorldPacket& recvPacket);
|
||||
void HandleSetContactNotesOpcode(WorldPacket& recvPacket);
|
||||
void HandleBugOpcode(WorldPacket& recvPacket);
|
||||
void HandleSetAmmoOpcode(WorldPacket& recvPacket);
|
||||
void HandleItemNameQueryOpcode(WorldPacket& recvPacket);
|
||||
|
||||
void HandleAreaTriggerOpcode(WorldPacket& recvPacket);
|
||||
|
||||
@@ -1972,7 +1972,7 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
|
||||
|
||||
if (PowerType != POWER_MANA)
|
||||
{
|
||||
uint32 oldPower = target->GetPower(PowerType);
|
||||
int32 oldPower = target->GetPower(PowerType);
|
||||
// reset power to default values only at power change
|
||||
if (target->getPowerType() != PowerType)
|
||||
target->setPowerType(PowerType);
|
||||
@@ -1984,7 +1984,7 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
|
||||
case FORM_DIREBEAR:
|
||||
{
|
||||
// get furor proc chance
|
||||
uint32 FurorChance = 0;
|
||||
int32 FurorChance = 0;
|
||||
if (AuraEffect const* dummy = target->GetDummyAuraEffect(SPELLFAMILY_DRUID, 238, 0))
|
||||
FurorChance = std::max(dummy->GetAmount(), 0);
|
||||
|
||||
@@ -1992,18 +1992,18 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
|
||||
{
|
||||
case FORM_CAT:
|
||||
{
|
||||
int32 basePoints = int32(std::min(oldPower, FurorChance));
|
||||
int32 basePoints = std::min<int32>(oldPower, FurorChance);
|
||||
target->SetPower(POWER_ENERGY, 0);
|
||||
target->CastCustomSpell(target, 17099, &basePoints, NULL, NULL, true, NULL, this);
|
||||
}
|
||||
break;
|
||||
case FORM_BEAR:
|
||||
case FORM_DIREBEAR:
|
||||
if (urand(0, 99) < FurorChance)
|
||||
if (irand(0, 99) < FurorChance)
|
||||
target->CastSpell(target, 17057, true);
|
||||
default:
|
||||
{
|
||||
uint32 newEnergy = std::min(target->GetPower(POWER_ENERGY), FurorChance);
|
||||
int32 newEnergy = std::min(target->GetPower(POWER_ENERGY), FurorChance);
|
||||
target->SetPower(POWER_ENERGY, newEnergy);
|
||||
}
|
||||
break;
|
||||
@@ -2056,7 +2056,7 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo
|
||||
case FORM_DEFENSIVESTANCE:
|
||||
case FORM_BERSERKERSTANCE:
|
||||
{
|
||||
uint32 Rage_val = 0;
|
||||
int32 Rage_val = 0;
|
||||
// Defensive Tactics
|
||||
if (form == FORM_DEFENSIVESTANCE)
|
||||
{
|
||||
@@ -4757,10 +4757,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
target->GetMotionMaster()->MoveFall(currentGroundLevel);
|
||||
}
|
||||
break;
|
||||
case 46699: // Requires No Ammo
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
target->ToPlayer()->RemoveAmmo(); // not use ammo and not allow use
|
||||
break;
|
||||
case 49028:
|
||||
if (caster)
|
||||
if (AuraEffect* aurEff = caster->GetAuraEffect(63330, 0)) // glyph of Dancing Rune Weapon
|
||||
|
||||
@@ -192,7 +192,7 @@ void AuraApplication::BuildUpdatePacket(ByteBuffer& data, bool remove) const
|
||||
uint32 flags = m_flags;
|
||||
if (aura->GetMaxDuration() > 0 && !(aura->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_HIDE_DURATION))
|
||||
flags |= AFLAG_DURATION;
|
||||
data << uint8(flags);
|
||||
data << uint16(flags);
|
||||
data << uint8(aura->GetCasterLevel());
|
||||
// send stack amount for aura which could be stacked (never 0 - causes incorrect display) or charges
|
||||
// stack amount has priority over charges (checked on retail with spell 50262)
|
||||
@@ -206,6 +206,16 @@ void AuraApplication::BuildUpdatePacket(ByteBuffer& data, bool remove) const
|
||||
data << uint32(aura->GetMaxDuration());
|
||||
data << uint32(aura->GetDuration());
|
||||
}
|
||||
|
||||
if (flags & AFLAG_ANY_EFFECT_AMOUNT_SENT)
|
||||
{
|
||||
if (flags & AFLAG_EFF_INDEX_0)
|
||||
data << uint32(0); // Effect 0 value
|
||||
if (flags & AFLAG_EFF_INDEX_1)
|
||||
data << uint32(0); // Effect 1 value
|
||||
if (flags & AFLAG_EFF_INDEX_2)
|
||||
data << uint32(0); // Effect 2 value
|
||||
}
|
||||
}
|
||||
|
||||
void AuraApplication::ClientUpdate(bool remove)
|
||||
|
||||
@@ -513,7 +513,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
|
||||
// wand case
|
||||
if ((m_caster->getClassMask() & CLASSMASK_WAND_USERS) != 0 && m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
if (Item* pItem = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK))
|
||||
m_spellSchoolMask = SpellSchoolMask(1 << pItem->GetTemplate()->Damage[0].DamageType);
|
||||
m_spellSchoolMask = SpellSchoolMask(1 << pItem->GetTemplate()->DamageType);
|
||||
|
||||
if (originalCasterGUID)
|
||||
m_originalCasterGUID = originalCasterGUID;
|
||||
@@ -3738,8 +3738,6 @@ void Spell::SendSpellStart()
|
||||
if ((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell)
|
||||
castFlags |= CAST_FLAG_PENDING;
|
||||
|
||||
if (m_spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO)
|
||||
castFlags |= CAST_FLAG_AMMO;
|
||||
if ((m_caster->GetTypeId() == TYPEID_PLAYER ||
|
||||
(m_caster->GetTypeId() == TYPEID_UNIT && m_caster->ToCreature()->isPet()))
|
||||
&& m_spellInfo->PowerType != POWER_HEALTH)
|
||||
@@ -3765,9 +3763,6 @@ void Spell::SendSpellStart()
|
||||
if (castFlags & CAST_FLAG_POWER_LEFT_SELF)
|
||||
data << uint32(m_caster->GetPower((Powers)m_spellInfo->PowerType));
|
||||
|
||||
if (castFlags & CAST_FLAG_AMMO)
|
||||
WriteAmmoToPacket(&data);
|
||||
|
||||
if (castFlags & CAST_FLAG_UNKNOWN_23)
|
||||
{
|
||||
data << uint32(0);
|
||||
@@ -3791,8 +3786,6 @@ void Spell::SendSpellGo()
|
||||
if ((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell)
|
||||
castFlags |= CAST_FLAG_PENDING;
|
||||
|
||||
if (m_spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO)
|
||||
castFlags |= CAST_FLAG_AMMO; // arrows/bullets visual
|
||||
if ((m_caster->GetTypeId() == TYPEID_PLAYER ||
|
||||
(m_caster->GetTypeId() == TYPEID_UNIT && m_caster->ToCreature()->isPet()))
|
||||
&& m_spellInfo->PowerType != POWER_HEALTH)
|
||||
@@ -3863,9 +3856,6 @@ void Spell::SendSpellGo()
|
||||
data << uint32(0);
|
||||
}
|
||||
|
||||
if (castFlags & CAST_FLAG_AMMO)
|
||||
WriteAmmoToPacket(&data);
|
||||
|
||||
if (castFlags & CAST_FLAG_UNKNOWN_20) // unknown wotlk
|
||||
{
|
||||
data << uint32(0);
|
||||
@@ -3880,78 +3870,6 @@ void Spell::SendSpellGo()
|
||||
m_caster->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
void Spell::WriteAmmoToPacket(WorldPacket* data)
|
||||
{
|
||||
uint32 ammoInventoryType = 0;
|
||||
uint32 ammoDisplayID = 0;
|
||||
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
Item* pItem = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK);
|
||||
if (pItem)
|
||||
{
|
||||
ammoInventoryType = pItem->GetTemplate()->InventoryType;
|
||||
if (ammoInventoryType == INVTYPE_THROWN)
|
||||
ammoDisplayID = pItem->GetTemplate()->DisplayInfoID;
|
||||
else
|
||||
{
|
||||
uint32 ammoID = m_caster->ToPlayer()->GetUInt32Value(PLAYER_AMMO_ID);
|
||||
if (ammoID)
|
||||
{
|
||||
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(ammoID);
|
||||
if (pProto)
|
||||
{
|
||||
ammoDisplayID = pProto->DisplayInfoID;
|
||||
ammoInventoryType = pProto->InventoryType;
|
||||
}
|
||||
}
|
||||
else if (m_caster->HasAura(46699)) // Requires No Ammo
|
||||
{
|
||||
ammoDisplayID = 5996; // normal arrow
|
||||
ammoInventoryType = INVTYPE_AMMO;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (uint8 i = 0; i < 3; ++i)
|
||||
{
|
||||
if (uint32 item_id = m_caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + i))
|
||||
{
|
||||
if (ItemEntry const* itemEntry = sItemStore.LookupEntry(item_id))
|
||||
{
|
||||
if (itemEntry->Class == ITEM_CLASS_WEAPON)
|
||||
{
|
||||
switch (itemEntry->SubClass)
|
||||
{
|
||||
case ITEM_SUBCLASS_WEAPON_THROWN:
|
||||
ammoDisplayID = itemEntry->DisplayId;
|
||||
ammoInventoryType = itemEntry->InventoryType;
|
||||
break;
|
||||
case ITEM_SUBCLASS_WEAPON_BOW:
|
||||
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
|
||||
ammoDisplayID = 5996; // is this need fixing?
|
||||
ammoInventoryType = INVTYPE_AMMO;
|
||||
break;
|
||||
case ITEM_SUBCLASS_WEAPON_GUN:
|
||||
ammoDisplayID = 5998; // is this need fixing?
|
||||
ammoInventoryType = INVTYPE_AMMO;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ammoDisplayID)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*data << uint32(ammoDisplayID);
|
||||
*data << uint32(ammoInventoryType);
|
||||
}
|
||||
|
||||
void Spell::WriteSpellGoTargets(WorldPacket* data)
|
||||
{
|
||||
// This function also fill data for channeled spells:
|
||||
@@ -4319,8 +4237,6 @@ void Spell::TakeAmmo()
|
||||
m_caster->ToPlayer()->DestroyItemCount(pItem, count, true);
|
||||
}
|
||||
}
|
||||
else if (uint32 ammo = m_caster->ToPlayer()->GetUInt32Value(PLAYER_AMMO_ID))
|
||||
m_caster->ToPlayer()->DestroyItemCount(ammo, 1, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6136,46 +6052,6 @@ SpellCastResult Spell::CheckItems()
|
||||
case ITEM_SUBCLASS_WEAPON_GUN:
|
||||
case ITEM_SUBCLASS_WEAPON_BOW:
|
||||
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
|
||||
{
|
||||
uint32 ammo = m_caster->ToPlayer()->GetUInt32Value(PLAYER_AMMO_ID);
|
||||
if (!ammo)
|
||||
{
|
||||
// Requires No Ammo
|
||||
if (m_caster->HasAura(46699))
|
||||
break; // skip other checks
|
||||
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
}
|
||||
|
||||
ItemTemplate const* ammoProto = sObjectMgr->GetItemTemplate(ammo);
|
||||
if (!ammoProto)
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
|
||||
if (ammoProto->Class != ITEM_CLASS_PROJECTILE)
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
|
||||
// check ammo ws. weapon compatibility
|
||||
switch (pItem->GetTemplate()->SubClass)
|
||||
{
|
||||
case ITEM_SUBCLASS_WEAPON_BOW:
|
||||
case ITEM_SUBCLASS_WEAPON_CROSSBOW:
|
||||
if (ammoProto->SubClass != ITEM_SUBCLASS_ARROW)
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
break;
|
||||
case ITEM_SUBCLASS_WEAPON_GUN:
|
||||
if (ammoProto->SubClass != ITEM_SUBCLASS_BULLET)
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
break;
|
||||
default:
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
}
|
||||
|
||||
if (!m_caster->ToPlayer()->HasItemCount(ammo, 1))
|
||||
{
|
||||
m_caster->ToPlayer()->SetUInt32Value(PLAYER_AMMO_ID, 0);
|
||||
return SPELL_FAILED_NO_AMMO;
|
||||
}
|
||||
}; break;
|
||||
case ITEM_SUBCLASS_WEAPON_WAND:
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -43,7 +43,7 @@ enum SpellCastFlags
|
||||
CAST_FLAG_UNKNOWN_3 = 0x00000004,
|
||||
CAST_FLAG_UNKNOWN_4 = 0x00000008, // ignore AOE visual
|
||||
CAST_FLAG_UNKNOWN_5 = 0x00000010,
|
||||
CAST_FLAG_AMMO = 0x00000020, // Projectiles visual
|
||||
CAST_FLAG_UNKNOWN_6 = 0x00000020,
|
||||
CAST_FLAG_UNKNOWN_7 = 0x00000040,
|
||||
CAST_FLAG_UNKNOWN_8 = 0x00000080,
|
||||
CAST_FLAG_UNKNOWN_9 = 0x00000100,
|
||||
@@ -402,7 +402,6 @@ class Spell
|
||||
|
||||
void DoCreateItem(uint32 i, uint32 itemtype);
|
||||
void WriteSpellGoTargets(WorldPacket* data);
|
||||
void WriteAmmoToPacket(WorldPacket* data);
|
||||
|
||||
void InitExplicitTargets(SpellCastTargets const& targets);
|
||||
void SelectSpellTargets();
|
||||
|
||||
@@ -694,13 +694,13 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
||||
Item* item = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK);
|
||||
if (item)
|
||||
{
|
||||
float dmg_min = item->GetTemplate()->Damage->DamageMin;
|
||||
float dmg_max = item->GetTemplate()->Damage->DamageMax;
|
||||
float dmg_min = item->GetTemplate()->DamageMin;
|
||||
float dmg_max = item->GetTemplate()->DamageMax;
|
||||
if (dmg_max == 0.0f && dmg_min > dmg_max)
|
||||
damage += int32(dmg_min);
|
||||
else
|
||||
damage += irand(int32(dmg_min), int32(dmg_max));
|
||||
damage += int32(m_caster->ToPlayer()->GetAmmoDPS()*item->GetTemplate()->Delay*0.001f);
|
||||
damage += int32(item->GetTemplate()->Delay*0.001f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6195,6 +6195,7 @@ void Spell::EffectSelfResurrect(SpellEffIndex effIndex)
|
||||
player->SetPower(POWER_MANA, mana);
|
||||
player->SetPower(POWER_RAGE, 0);
|
||||
player->SetPower(POWER_ENERGY, player->GetMaxPower(POWER_ENERGY));
|
||||
player->SetPower(POWER_FOCUS, 0);
|
||||
|
||||
player->SpawnCorpseBones();
|
||||
}
|
||||
@@ -7343,7 +7344,7 @@ void Spell::EffectCastButtons(SpellEffIndex effIndex)
|
||||
if (!(spellInfo->AttributesEx7 & SPELL_ATTR7_SUMMON_PLAYER_TOTEM))
|
||||
continue;
|
||||
|
||||
uint32 cost = spellInfo->CalcPowerCost(m_caster, spellInfo->GetSchoolMask());
|
||||
int32 cost = spellInfo->CalcPowerCost(m_caster, spellInfo->GetSchoolMask());
|
||||
if (m_caster->GetPower(POWER_MANA) < cost)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -2170,7 +2170,6 @@ uint32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask)
|
||||
case POWER_RAGE:
|
||||
case POWER_FOCUS:
|
||||
case POWER_ENERGY:
|
||||
case POWER_HAPPINESS:
|
||||
powerCost += int32(CalculatePctU(caster->GetMaxPower(Powers(PowerType)), ManaCostPercentage));
|
||||
break;
|
||||
case POWER_RUNE:
|
||||
|
||||
@@ -1258,7 +1258,7 @@ void World::SetInitialWorldSettings()
|
||||
///- Load the DBC files
|
||||
sLog->outString("Initialize data stores...");
|
||||
LoadDBCStores(m_dataPath);
|
||||
LoadDB2Stores(m_dataPath);
|
||||
LoadDB2Stores(m_dataPath);
|
||||
DetectDBCLang();
|
||||
|
||||
sLog->outString("Loading spell dbc data corrections...");
|
||||
@@ -1344,13 +1344,19 @@ void World::SetInitialWorldSettings()
|
||||
sLog->outString("Loading Item Random Enchantments Table...");
|
||||
LoadRandomEnchantmentsTable();
|
||||
|
||||
sLog->outString("Loading Disables");
|
||||
DisableMgr::LoadDisables(); // must be before loading quests and items
|
||||
sLog->outString("Loading Disables...");
|
||||
DisableMgr::LoadDisables(); // must be before loading quests and items
|
||||
|
||||
sLog->outString("Loading Items..."); // must be after LoadRandomEnchantmentsTable and LoadPageTexts
|
||||
sLog->outString("Loading Items..."); // must be after LoadRandomEnchantmentsTable and LoadPageTexts
|
||||
sObjectMgr->LoadItemTemplates();
|
||||
|
||||
sLog->outString("Loading Item set names..."); // must be after LoadItemPrototypes
|
||||
sLog->outString("Loading Item Extra Data..."); // must be after LoadItemPrototypes
|
||||
sObjectMgr->LoadItemTemplateAddon();
|
||||
|
||||
sLog->outString("Loading Item Scripts..."); // must be after LoadItemPrototypes
|
||||
sObjectMgr->LoadItemScriptNames();
|
||||
|
||||
sLog->outString("Loading Item set names..."); // must be after LoadItemPrototypes
|
||||
sObjectMgr->LoadItemSetNames();
|
||||
|
||||
sLog->outString("Loading Creature Model Based Info Data...");
|
||||
|
||||
@@ -1093,7 +1093,7 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleModifyHonorCommand (ChatHandler* handler, const char* args)
|
||||
static bool HandleModifyHonorCommand(ChatHandler* handler, const char* args)
|
||||
{
|
||||
if (!*args)
|
||||
return false;
|
||||
@@ -1112,9 +1112,9 @@ public:
|
||||
|
||||
int32 amount = (uint32)atoi(args);
|
||||
|
||||
target->ModifyHonorPoints(amount);
|
||||
target->ModifyCurrency(CURRENCY_TYPE_HONOR_POINTS, amount);
|
||||
|
||||
handler->PSendSysMessage(LANG_COMMAND_MODIFY_HONOR, handler->GetNameLink(target).c_str(), target->GetHonorPoints());
|
||||
handler->PSendSysMessage(LANG_COMMAND_MODIFY_HONOR, handler->GetNameLink(target).c_str(), target->GetCurrency(CURRENCY_TYPE_HONOR_POINTS));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1302,9 +1302,9 @@ public:
|
||||
|
||||
int32 amount = (uint32)atoi(args);
|
||||
|
||||
target->ModifyArenaPoints(amount);
|
||||
target->ModifyCurrency(CURRENCY_TYPE_CONQUEST_POINTS, amount);
|
||||
|
||||
handler->PSendSysMessage(LANG_COMMAND_MODIFY_ARENA, handler->GetNameLink(target).c_str(), target->GetArenaPoints());
|
||||
handler->PSendSysMessage(LANG_COMMAND_MODIFY_ARENA, handler->GetNameLink(target).c_str(), target->GetCurrency(CURRENCY_TYPE_CONQUEST_POINTS));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -176,8 +176,8 @@ public:
|
||||
// Add quest items for quests that require items
|
||||
for (uint8 x = 0; x < QUEST_ITEM_OBJECTIVES_COUNT; ++x)
|
||||
{
|
||||
uint32 id = quest->ReqItemId[x];
|
||||
uint32 count = quest->ReqItemCount[x];
|
||||
uint32 id = quest->RequiredItemId[x];
|
||||
uint32 count = quest->RequiredItemCount[x];
|
||||
if (!id || !count)
|
||||
continue;
|
||||
|
||||
@@ -195,10 +195,10 @@ public:
|
||||
// All creature/GO slain/casted (not required, but otherwise it will display "Creature slain 0/10")
|
||||
for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
int32 creature = quest->ReqCreatureOrGOId[i];
|
||||
uint32 creaturecount = quest->ReqCreatureOrGOCount[i];
|
||||
int32 creature = quest->RequiredNpcOrGo[i];
|
||||
uint32 creaturecount = quest->RequiredNpcOrGoCount[i];
|
||||
|
||||
if (uint32 spell_id = quest->ReqSpell[i])
|
||||
if (uint32 spell_id = quest->RequiredSpellCast[i])
|
||||
{
|
||||
for (uint16 z = 0; z < creaturecount; ++z)
|
||||
player->CastedCreatureOrGO(creature, 0, spell_id);
|
||||
|
||||
@@ -357,7 +357,7 @@ class boss_lady_deathwhisper : public CreatureScript
|
||||
void DamageTaken(Unit* /*damageDealer*/, uint32& damage)
|
||||
{
|
||||
// phase transition
|
||||
if (events.GetPhaseMask() & PHASE_ONE_MASK && damage > me->GetPower(POWER_MANA))
|
||||
if (events.GetPhaseMask() & PHASE_ONE_MASK && damage > (uint32)me->GetPower(POWER_MANA))
|
||||
{
|
||||
Talk(SAY_PHASE_2);
|
||||
Talk(EMOTE_PHASE_2);
|
||||
|
||||
@@ -2125,7 +2125,7 @@ public:
|
||||
{
|
||||
Quest const* qInfo = sObjectMgr->GetQuestTemplate(QUEST_YOU_RE_NOT_SO_BIG_NOW);
|
||||
if (qInfo)
|
||||
CAST_PLR(killer)->KilledMonsterCredit(qInfo->ReqCreatureOrGOId[0], 0);
|
||||
CAST_PLR(killer)->KilledMonsterCredit(qInfo->RequiredNpcOrGo[0], 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1009,7 +1009,7 @@ public:
|
||||
if (qInfo)
|
||||
{
|
||||
//TODO: prisoner should help player for a short period of time
|
||||
player->KilledMonsterCredit(qInfo->ReqCreatureOrGOId[0], 0);
|
||||
player->KilledMonsterCredit(qInfo->RequiredNpcOrGo[0], 0);
|
||||
pPrisoner->DisappearAndDie();
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -41,8 +41,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
|
||||
"position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
|
||||
"resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, instance_mode_mask, "
|
||||
"arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, "
|
||||
"health, power1, power2, power3, power4, power5, power6, power7, instance_id, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars, grantableLevels FROM characters WHERE guid = ?", CONNECTION_ASYNC)
|
||||
"conquestPoints, totalHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
|
||||
"health, power1, power2, power3, power4, power5, instance_id, speccount, activespec, exploredZones, equipmentCache, knownTitles, actionBars, grantableLevels FROM characters WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_GROUP, "SELECT guid FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_BOUNDINSTANCES, "SELECT id, permanent, map, difficulty, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_PLAYER_AURAS, "SELECT caster_guid, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, "
|
||||
@@ -116,6 +116,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
// 0: uint32, 1: string, 2: uint32, 3: string, 4: string, 5: uint64, 6-10: uint32, 11: uint64
|
||||
PREPARE_STATEMENT(CHAR_ADD_GUILD, "INSERT INTO guild (guildid, name, leaderguid, info, motd, createdate, EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor, BankMoney) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_DEL_GUILD, "DELETE FROM guild WHERE guildid = ?", CONNECTION_ASYNC) // 0: uint32
|
||||
// 0: uint32
|
||||
PREPARE_STATEMENT(CHAR_SET_GUILD_ID, "UPDATE characters SET guildId = ? WHERE guid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_GET_GUILD_ID, "SELECT guildId FROM characters WHERE guid = ?", CONNECTION_SYNCH)
|
||||
// 0: uint32, 1: uint32, 2: uint8, 4: string, 5: string
|
||||
PREPARE_STATEMENT(CHAR_ADD_GUILD_MEMBER, "INSERT INTO guild_member (guildid, guid, rank, pnote, offnote) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_DEL_GUILD_MEMBER, "DELETE FROM guild_member WHERE guid = ?", CONNECTION_ASYNC) // 0: uint32
|
||||
@@ -262,8 +265,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PREPARE_STATEMENT(CHAR_DEL_PLAYER_HOMEBIND, "DELETE FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC)
|
||||
|
||||
// Corpse
|
||||
PREPARE_STATEMENT(CHAR_LOAD_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0", CONNECTION_SYNCH)
|
||||
PREPARE_STATEMENT(CHAR_ADD_CORPSE, "INSERT INTO corpse (corpseGuid, guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_LOAD_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0", CONNECTION_SYNCH)
|
||||
PREPARE_STATEMENT(CHAR_ADD_CORPSE, "INSERT INTO corpse (corpseGuid, guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_DEL_CORPSE, "DELETE FROM corpse WHERE corpseGuid = ?", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_DEL_PLAYER_CORPSES, "DELETE FROM corpse WHERE guid = ? AND corpseType <> 0", CONNECTION_ASYNC)
|
||||
PREPARE_STATEMENT(CHAR_DEL_OLD_CORPSES, "DELETE FROM corpse WHERE corpseType = 0 OR time < (UNIX_TIMESTAMP(NOW()) - ?)", CONNECTION_ASYNC)
|
||||
@@ -300,4 +303,20 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
// For loading and deleting expired auctions at startup
|
||||
PREPARE_STATEMENT(CHAR_LOAD_EXPIRED_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid WHERE ah.time <= ?", CONNECTION_SYNCH)
|
||||
|
||||
// Player saving
|
||||
PREPARE_STATEMENT(CHAR_ADD_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, "
|
||||
"map, instance_id, instance_mode_mask, position_x, position_y, position_z, orientation, "
|
||||
"taximask, cinematic, "
|
||||
"totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, "
|
||||
"extra_flags, stable_slots, at_login, zone, "
|
||||
"death_expire_time, taxi_path, conquestPoints, totalHonorPoints, totalKills, "
|
||||
"todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, "
|
||||
"power4, power5, latency, speccount, activespec, exploredZones, equipmentCache, knownTitles, actionBars, grantableLevels, guildId) VALUES "
|
||||
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
|
||||
PREPARE_STATEMENT(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,playerBytes=?,playerBytes2=?,playerFlags=?,"
|
||||
"map=?,instance_id=?,instance_mode_mask=?,position_x=?,position_y=?,position_z=?,orientation=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?,"
|
||||
"logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,extra_flags=?,stable_slots=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?,"
|
||||
"conquestPoints=?,totalHonorPoints=?,totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?,"
|
||||
"watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,latency=?,speccount=?,activespec=?,exploredZones=?,"
|
||||
"equipmentCache=?,knownTitles=?,actionBars=?,grantableLevels=?,guildId=?,online=? WHERE guid=?", CONNECTION_ASYNC);
|
||||
}
|
||||
|
||||
@@ -123,6 +123,8 @@ enum CharacterDatabaseStatements
|
||||
|
||||
CHAR_ADD_GUILD,
|
||||
CHAR_DEL_GUILD,
|
||||
CHAR_SET_GUILD_ID,
|
||||
CHAR_GET_GUILD_ID,
|
||||
CHAR_ADD_GUILD_MEMBER,
|
||||
CHAR_DEL_GUILD_MEMBER,
|
||||
CHAR_DEL_GUILD_MEMBERS,
|
||||
@@ -275,6 +277,9 @@ enum CharacterDatabaseStatements
|
||||
|
||||
CHAR_LOAD_EXPIRED_AUCTIONS,
|
||||
|
||||
CHAR_ADD_CHARACTER,
|
||||
CHAR_UPD_CHARACTER,
|
||||
|
||||
MAX_CHARACTERDATABASE_STATEMENTS,
|
||||
};
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ class ByteBuffer
|
||||
{
|
||||
++_bitpos;
|
||||
if (_bitpos > 7)
|
||||
{
|
||||
{
|
||||
_bitpos = 0;
|
||||
_curbitval = read<uint8>();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user