Core/LootMgr: Update lootMgr to normalize loot_template tables (#1137)
* Core/LootMgr: Update lootMgr to normalize loot_template tables original by trinitycore team
This commit is contained in:
@@ -0,0 +1,217 @@
|
|||||||
|
INSERT INTO version_db_world (`sql_rev`) VALUES ('1545582502432862467');
|
||||||
|
|
||||||
|
-- Alter creature_loot_template
|
||||||
|
ALTER TABLE `creature_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `creature_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `creature_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `creature_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `creature_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `creature_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `creature_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `creature_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `creature_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `creature_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `creature_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `creature_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `creature_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `creature_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `creature_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `creature_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter disenchant_loot_template
|
||||||
|
ALTER TABLE `disenchant_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `disenchant_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `disenchant_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `disenchant_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `disenchant_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `disenchant_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `disenchant_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `disenchant_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `disenchant_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `disenchant_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `disenchant_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `disenchant_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `disenchant_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `disenchant_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `disenchant_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `disenchant_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter fishing_loot_template
|
||||||
|
ALTER TABLE `fishing_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `fishing_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `fishing_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `fishing_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `fishing_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `fishing_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `fishing_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `fishing_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `fishing_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `fishing_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `fishing_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `fishing_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `fishing_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `fishing_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `fishing_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `fishing_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter gameobject_loot_template
|
||||||
|
ALTER TABLE `gameobject_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `gameobject_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `gameobject_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `gameobject_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `gameobject_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `gameobject_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `gameobject_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `gameobject_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `gameobject_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `gameobject_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `gameobject_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `gameobject_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `gameobject_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `gameobject_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `gameobject_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `gameobject_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter item_loot_template
|
||||||
|
ALTER TABLE `item_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `item_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `item_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `item_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `item_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `item_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `item_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `item_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `item_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `item_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `item_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `item_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `item_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `item_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `item_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `item_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter mail_loot_template
|
||||||
|
ALTER TABLE `mail_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `mail_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `mail_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `mail_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `mail_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `mail_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `mail_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `mail_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `mail_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `mail_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `mail_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `mail_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `mail_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `mail_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `mail_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `mail_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter milling_loot_template
|
||||||
|
ALTER TABLE `milling_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `milling_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `milling_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `milling_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `milling_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `milling_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `milling_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `milling_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `milling_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `milling_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `milling_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `milling_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `milling_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `milling_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `milling_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `milling_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter pickpocketing_loot_template
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `pickpocketing_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `pickpocketing_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `pickpocketing_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `pickpocketing_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `pickpocketing_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter prospecting_loot_template
|
||||||
|
ALTER TABLE `prospecting_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `prospecting_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `prospecting_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `prospecting_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `prospecting_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `prospecting_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `prospecting_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `prospecting_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `prospecting_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `prospecting_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `prospecting_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `prospecting_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `prospecting_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `prospecting_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `prospecting_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `prospecting_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter reference_loot_template
|
||||||
|
ALTER TABLE `reference_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `reference_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `reference_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `reference_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `reference_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `reference_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `reference_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `reference_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `reference_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `reference_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `reference_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `reference_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `reference_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `reference_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `reference_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `reference_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter skinning_loot_template
|
||||||
|
ALTER TABLE `skinning_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `skinning_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `skinning_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `skinning_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `skinning_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `skinning_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `skinning_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `skinning_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `skinning_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `skinning_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `skinning_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `skinning_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `skinning_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `skinning_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `skinning_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `skinning_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
|
|
||||||
|
-- Alter spell_loot_template
|
||||||
|
ALTER TABLE `spell_loot_template` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE `spell_loot_template` CHANGE `entry` `Entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `spell_loot_template` CHANGE `item` `Item` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `spell_loot_template` ADD COLUMN `Reference` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0 AFTER `Item`;
|
||||||
|
UPDATE `spell_loot_template` SET `Reference` = `mincountOrRef` * -1 WHERE `mincountOrRef` < 0;
|
||||||
|
UPDATE `spell_loot_template` SET `mincountOrRef` = 1 WHERE `Reference` > 0;
|
||||||
|
ALTER TABLE `spell_loot_template` ADD COLUMN `QuestRequired` BOOL NOT NULL DEFAULT 0 AFTER `ChanceOrQuestChance`;
|
||||||
|
UPDATE `spell_loot_template` SET `QuestRequired` = 1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
UPDATE `spell_loot_template` SET `ChanceOrQuestChance` = `ChanceOrQuestChance` * -1 WHERE `ChanceOrQuestChance` < 0;
|
||||||
|
ALTER TABLE `spell_loot_template` CHANGE `ChanceOrQuestChance` `Chance` FLOAT NOT NULL DEFAULT 100;
|
||||||
|
ALTER TABLE `spell_loot_template` CHANGE `lootmode` `LootMode` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `spell_loot_template` CHANGE `groupid` `GroupId` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0;
|
||||||
|
ALTER TABLE `spell_loot_template` CHANGE `mincountOrRef` `MinCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `spell_loot_template` CHANGE `maxcount` `MaxCount` TINYINT(3) UNSIGNED NOT NULL DEFAULT 1;
|
||||||
|
ALTER TABLE `spell_loot_template` ADD COLUMN `Comment` VARCHAR(255) AFTER `MaxCount`;
|
||||||
|
ALTER TABLE `spell_loot_template` ADD PRIMARY KEY (`Entry`,`Item`);
|
||||||
@@ -131,7 +131,7 @@ uint32 LootStore::LoadLootTable()
|
|||||||
Clear();
|
Clear();
|
||||||
|
|
||||||
// 0 1 2 3 4 5 6
|
// 0 1 2 3 4 5 6
|
||||||
QueryResult result = WorldDatabase.PQuery("SELECT entry, item, ChanceOrQuestChance, lootmode, groupid, mincountOrRef, maxcount FROM %s", GetName());
|
QueryResult result = WorldDatabase.PQuery("SELECT Entry, Item, Reference, Chance, QuestRequired, LootMode, GroupId, MinCount, MaxCount FROM %s", GetName());
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -144,25 +144,27 @@ uint32 LootStore::LoadLootTable()
|
|||||||
|
|
||||||
uint32 entry = fields[0].GetUInt32();
|
uint32 entry = fields[0].GetUInt32();
|
||||||
uint32 item = fields[1].GetUInt32();
|
uint32 item = fields[1].GetUInt32();
|
||||||
float chanceOrQuestChance = fields[2].GetFloat();
|
uint32 reference = fields[2].GetUInt32();
|
||||||
uint16 lootmode = fields[3].GetUInt16();
|
float chance = fields[3].GetFloat();
|
||||||
uint8 group = fields[4].GetUInt8();
|
bool needsquest = fields[4].GetBool();
|
||||||
int32 mincountOrRef = fields[5].GetInt32();
|
uint16 lootmode = fields[5].GetUInt16();
|
||||||
int32 maxcount = fields[6].GetUInt8();
|
uint8 groupid = fields[6].GetUInt8();
|
||||||
|
int32 mincount = fields[7].GetUInt8();
|
||||||
|
int32 maxcount = fields[8].GetUInt8();
|
||||||
|
|
||||||
if (maxcount > std::numeric_limits<uint8>::max())
|
if (maxcount > std::numeric_limits<uint8>::max())
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: maxcount value (%u) to large. must be less %u - skipped", GetName(), entry, item, maxcount, std::numeric_limits<uint8>::max());
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: MaxCount value (%u) to large. must be less %u - skipped", GetName(), entry, item, maxcount, std::numeric_limits<uint8>::max());
|
||||||
continue; // error already printed to log/console.
|
continue; // error already printed to log/console.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lootmode == 0)
|
if (lootmode == 0)
|
||||||
{
|
{
|
||||||
sLog->outError("Table '%s' entry %d item %d: lootmode is equal to 0, item will never drop - setting mode 1", GetName(), entry, item);
|
sLog->outError("Table '%s' Entry %d Item %d: LootMode is equal to 0, item will never drop - setting mode 1", GetName(), entry, item);
|
||||||
lootmode = 1;
|
lootmode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LootStoreItem* storeitem = new LootStoreItem(item, chanceOrQuestChance, lootmode, group, mincountOrRef, maxcount);
|
LootStoreItem* storeitem = new LootStoreItem(item, reference, chance, needsquest, lootmode, groupid, mincount, maxcount);
|
||||||
|
|
||||||
if (!storeitem->IsValid(*this, entry)) // Validity checks
|
if (!storeitem->IsValid(*this, entry)) // Validity checks
|
||||||
{
|
{
|
||||||
@@ -265,12 +267,17 @@ void LootStore::ReportUnusedIds(LootIdSet const& lootIdSet) const
|
|||||||
{
|
{
|
||||||
// all still listed ids isn't referenced
|
// all still listed ids isn't referenced
|
||||||
for (LootIdSet::const_iterator itr = lootIdSet.begin(); itr != lootIdSet.end(); ++itr)
|
for (LootIdSet::const_iterator itr = lootIdSet.begin(); itr != lootIdSet.end(); ++itr)
|
||||||
sLog->outErrorDb("Table '%s' entry %d isn't %s and not referenced from loot, and then useless.", GetName(), *itr, GetEntryName());
|
sLog->outErrorDb("Table '%s' Entry %d isn't %s and not referenced from loot, and thus useless.", GetName(), *itr, GetEntryName());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LootStore::ReportNotExistedId(uint32 id) const
|
void LootStore::ReportNonExistingId(uint32 lootId) const
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d (%s) does not exist but used as loot id in DB.", GetName(), id, GetEntryName());
|
sLog->outErrorDb("Table '%s' Entry %d does not exist", GetName(), lootId);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LootStore::ReportNonExistingId(uint32 lootId, const char* ownerType, uint32 ownerId) const
|
||||||
|
{
|
||||||
|
sLog->outErrorDb("Table '%s' Entry %d does not exist but it is used by %s %d", GetName(), lootId, ownerType, ownerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -288,7 +295,7 @@ bool LootStoreItem::Roll(bool rate, Player const *player, Loot& loot, LootStore
|
|||||||
if (_chance >= 100.0f)
|
if (_chance >= 100.0f)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (mincountOrRef < 0) // reference case
|
if (reference > 0) // reference case
|
||||||
return roll_chance_f(_chance* (rate ? sWorld->getRate(RATE_DROP_ITEM_REFERENCED) : 1.0f));
|
return roll_chance_f(_chance* (rate ? sWorld->getRate(RATE_DROP_ITEM_REFERENCED) : 1.0f));
|
||||||
|
|
||||||
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(itemid);
|
ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(itemid);
|
||||||
@@ -301,53 +308,53 @@ bool LootStoreItem::Roll(bool rate, Player const *player, Loot& loot, LootStore
|
|||||||
// Checks correctness of values
|
// Checks correctness of values
|
||||||
bool LootStoreItem::IsValid(LootStore const& store, uint32 entry) const
|
bool LootStoreItem::IsValid(LootStore const& store, uint32 entry) const
|
||||||
{
|
{
|
||||||
if (group >= 1 << 7) // it stored in 7 bit field
|
if (groupid >= 1 << 7) // it stored in 7 bit field
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: group (%u) must be less %u - skipped", store.GetName(), entry, itemid, group, 1 << 7);
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: GroupId (%u) must be less %u - skipped", store.GetName(), entry, itemid, groupid, 1 << 7);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mincountOrRef == 0)
|
if (mincount == 0)
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: wrong mincountOrRef (%d) - skipped", store.GetName(), entry, itemid, mincountOrRef);
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: wrong MinCount (%d) - skipped", store.GetName(), entry, itemid, mincount);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mincountOrRef > 0) // item (quest or non-quest) entry, maybe grouped
|
if (reference == 0) // item (quest or non-quest) entry, maybe grouped
|
||||||
{
|
{
|
||||||
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemid);
|
ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemid);
|
||||||
if (!proto)
|
if (!proto)
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: item entry not listed in `item_template` - skipped", store.GetName(), entry, itemid);
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: item entry not listed in `item_template` - skipped", store.GetName(), entry, itemid);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chance == 0 && group == 0) // Zero chance is allowed for grouped entries only
|
if (chance == 0 && groupid == 0) // Zero chance is allowed for grouped entries only
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: equal-chanced grouped entry, but group not defined - skipped", store.GetName(), entry, itemid);
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: equal-chanced grouped entry, but group not defined - skipped", store.GetName(), entry, itemid);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chance != 0 && chance < 0.000001f) // loot with low chance
|
if (chance != 0 && chance < 0.000001f) // loot with low chance
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: low chance (%f) - skipped",
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: low chance (%f) - skipped",
|
||||||
store.GetName(), entry, itemid, chance);
|
store.GetName(), entry, itemid, chance);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxcount < mincountOrRef) // wrong max count
|
if (maxcount < mincount) // wrong max count
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: max count (%u) less that min count (%i) - skipped", store.GetName(), entry, itemid, int32(maxcount), mincountOrRef);
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: MaxCount (%u) less that MinCount (%i) - skipped", store.GetName(), entry, itemid, int32(maxcount), mincount);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // mincountOrRef < 0
|
else // if reference loot
|
||||||
{
|
{
|
||||||
if (needs_quest)
|
if (needs_quest)
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: quest chance will be treated as non-quest chance", store.GetName(), entry, itemid);
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: quest required will be ignored", store.GetName(), entry, itemid);
|
||||||
else if (chance == 0) // no chance for the reference
|
else if (chance == 0) // no chance for the reference
|
||||||
{
|
{
|
||||||
sLog->outErrorDb("Table '%s' entry %d item %d: zero chance is specified for a reference, skipped", store.GetName(), entry, itemid);
|
sLog->outErrorDb("Table '%s' Entry %d Item %d: zero chance is specified for a reference, skipped", store.GetName(), entry, itemid);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -426,7 +433,7 @@ void Loot::AddItem(LootStoreItem const& item)
|
|||||||
if (!proto)
|
if (!proto)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32 count = urand(item.mincountOrRef, item.maxcount);
|
uint32 count = urand(item.mincount, item.maxcount);
|
||||||
uint32 stacks = count / proto->GetMaxStackSize() + (count % proto->GetMaxStackSize() ? 1 : 0);
|
uint32 stacks = count / proto->GetMaxStackSize() + (count % proto->GetMaxStackSize() ? 1 : 0);
|
||||||
|
|
||||||
std::vector<LootItem>& lootItems = item.needs_quest ? quest_items : items;
|
std::vector<LootItem>& lootItems = item.needs_quest ? quest_items : items;
|
||||||
@@ -1225,24 +1232,24 @@ void LootTemplate::LootGroup::CheckLootRefs(LootTemplateMap const& /*store*/, Lo
|
|||||||
for (LootStoreItemList::const_iterator ieItr = ExplicitlyChanced.begin(); ieItr != ExplicitlyChanced.end(); ++ieItr)
|
for (LootStoreItemList::const_iterator ieItr = ExplicitlyChanced.begin(); ieItr != ExplicitlyChanced.end(); ++ieItr)
|
||||||
{
|
{
|
||||||
LootStoreItem* item = *ieItr;
|
LootStoreItem* item = *ieItr;
|
||||||
if (item->mincountOrRef < 0)
|
if (item->reference > 0)
|
||||||
{
|
{
|
||||||
if (!LootTemplates_Reference.GetLootFor(-item->mincountOrRef))
|
if (!LootTemplates_Reference.GetLootFor(item->reference))
|
||||||
LootTemplates_Reference.ReportNotExistedId(-item->mincountOrRef);
|
LootTemplates_Reference.ReportNonExistingId(item->reference, "Reference", item->itemid);
|
||||||
else if (ref_set)
|
else if (ref_set)
|
||||||
ref_set->erase(-item->mincountOrRef);
|
ref_set->erase(item->reference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (LootStoreItemList::const_iterator ieItr = EqualChanced.begin(); ieItr != EqualChanced.end(); ++ieItr)
|
for (LootStoreItemList::const_iterator ieItr = EqualChanced.begin(); ieItr != EqualChanced.end(); ++ieItr)
|
||||||
{
|
{
|
||||||
LootStoreItem* item = *ieItr;
|
LootStoreItem* item = *ieItr;
|
||||||
if (item->mincountOrRef < 0)
|
if (item->reference > 0)
|
||||||
{
|
{
|
||||||
if (!LootTemplates_Reference.GetLootFor(-item->mincountOrRef))
|
if (!LootTemplates_Reference.GetLootFor(item->reference))
|
||||||
LootTemplates_Reference.ReportNotExistedId(-item->mincountOrRef);
|
LootTemplates_Reference.ReportNonExistingId(item->reference, "Reference", item->itemid);
|
||||||
else if (ref_set)
|
else if (ref_set)
|
||||||
ref_set->erase(-item->mincountOrRef);
|
ref_set->erase(item->reference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1267,16 +1274,16 @@ LootTemplate::~LootTemplate()
|
|||||||
// Adds an entry to the group (at loading stage)
|
// Adds an entry to the group (at loading stage)
|
||||||
void LootTemplate::AddEntry(LootStoreItem* item)
|
void LootTemplate::AddEntry(LootStoreItem* item)
|
||||||
{
|
{
|
||||||
if (item->group > 0 && item->mincountOrRef > 0) // Group
|
if (item->groupid > 0 && item->reference == 0) // Group
|
||||||
{
|
{
|
||||||
if (item->group >= Groups.size())
|
if (item->groupid >= Groups.size())
|
||||||
Groups.resize(item->group, NULL); // Adds new group the the loot template if needed
|
Groups.resize(item->groupid, NULL); // Adds new group the the loot template if needed
|
||||||
if (!Groups[item->group - 1])
|
if (!Groups[item->groupid - 1])
|
||||||
Groups[item->group - 1] = new LootGroup();
|
Groups[item->groupid - 1] = new LootGroup();
|
||||||
|
|
||||||
Groups[item->group-1]->AddEntry(item); // Adds new entry to the group
|
Groups[item->groupid - 1]->AddEntry(item); // Adds new entry to the group
|
||||||
}
|
}
|
||||||
else // Non-grouped entries and references are stored together
|
else // Non-grouped entries and references are stored together
|
||||||
Entries.push_back(item);
|
Entries.push_back(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1317,7 +1324,7 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode,
|
|||||||
if (!Groups[groupId - 1])
|
if (!Groups[groupId - 1])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Groups[groupId-1]->Process(loot, player, store, lootMode);
|
Groups[groupId - 1]->Process(loot, player, store, lootMode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1331,16 +1338,16 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode,
|
|||||||
if (!item->Roll(rate, player, loot, store))
|
if (!item->Roll(rate, player, loot, store))
|
||||||
continue; // Bad luck for the entry
|
continue; // Bad luck for the entry
|
||||||
|
|
||||||
if (item->mincountOrRef < 0) // References processing
|
if (item->reference > 0) // References processing
|
||||||
{
|
{
|
||||||
LootTemplate const* Referenced = LootTemplates_Reference.GetLootFor(-item->mincountOrRef);
|
LootTemplate const* Referenced = LootTemplates_Reference.GetLootFor(item->reference);
|
||||||
if (!Referenced)
|
if (!Referenced)
|
||||||
continue; // Error message already printed at loading stage
|
continue; // Error message already printed at loading stage
|
||||||
|
|
||||||
uint32 maxcount = uint32(float(item->maxcount) * sWorld->getRate(RATE_DROP_ITEM_REFERENCED_AMOUNT));
|
uint32 maxcount = uint32(float(item->maxcount) * sWorld->getRate(RATE_DROP_ITEM_REFERENCED_AMOUNT));
|
||||||
sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount, store);
|
sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount, store);
|
||||||
for (uint32 loop = 0; loop < maxcount; ++loop) // Ref multiplicator
|
for (uint32 loop = 0; loop < maxcount; ++loop) // Ref multiplicator
|
||||||
Referenced->Process(loot, store, lootMode, player, item->group);
|
Referenced->Process(loot, store, lootMode, player, item->groupid);
|
||||||
} else {
|
} else {
|
||||||
// Plain entries (not a reference, not grouped)
|
// Plain entries (not a reference, not grouped)
|
||||||
sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, item, store);
|
sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, item, store);
|
||||||
@@ -1371,12 +1378,12 @@ bool LootTemplate::HasQuestDrop(LootTemplateMap const& store, uint8 groupId) con
|
|||||||
for (LootStoreItemList::const_iterator i = Entries.begin(); i != Entries.end(); ++i)
|
for (LootStoreItemList::const_iterator i = Entries.begin(); i != Entries.end(); ++i)
|
||||||
{
|
{
|
||||||
LootStoreItem* item = *i;
|
LootStoreItem* item = *i;
|
||||||
if (item->mincountOrRef < 0) // References
|
if (item->reference > 0) // References
|
||||||
{
|
{
|
||||||
LootTemplateMap::const_iterator Referenced = store.find(-item->mincountOrRef);
|
LootTemplateMap::const_iterator Referenced = store.find(item->reference);
|
||||||
if (Referenced == store.end())
|
if (Referenced == store.end())
|
||||||
continue; // Error message [should be] already printed at loading stage
|
continue; // Error message [should be] already printed at loading stage
|
||||||
if (Referenced->second->HasQuestDrop(store, item->group))
|
if (Referenced->second->HasQuestDrop(store, item->groupid))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (item->needs_quest)
|
else if (item->needs_quest)
|
||||||
@@ -1403,19 +1410,19 @@ bool LootTemplate::HasQuestDropForPlayer(LootTemplateMap const& store, Player co
|
|||||||
if (!Groups[groupId - 1])
|
if (!Groups[groupId - 1])
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return Groups[groupId-1]->HasQuestDropForPlayer(player);
|
return Groups[groupId - 1]->HasQuestDropForPlayer(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checking non-grouped entries
|
// Checking non-grouped entries
|
||||||
for (LootStoreItemList::const_iterator i = Entries.begin(); i != Entries.end(); ++i)
|
for (LootStoreItemList::const_iterator i = Entries.begin(); i != Entries.end(); ++i)
|
||||||
{
|
{
|
||||||
LootStoreItem* item = *i;
|
LootStoreItem* item = *i;
|
||||||
if (item->mincountOrRef < 0) // References processing
|
if (item->reference > 0) // References processing
|
||||||
{
|
{
|
||||||
LootTemplateMap::const_iterator Referenced = store.find(-item->mincountOrRef);
|
LootTemplateMap::const_iterator Referenced = store.find(item->reference);
|
||||||
if (Referenced == store.end())
|
if (Referenced == store.end())
|
||||||
continue; // Error message already printed at loading stage
|
continue; // Error message already printed at loading stage
|
||||||
if (Referenced->second->HasQuestDropForPlayer(store, player, item->group))
|
if (Referenced->second->HasQuestDropForPlayer(store, player, item->groupid))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (player->HasQuestForItem(item->itemid))
|
else if (player->HasQuestForItem(item->itemid))
|
||||||
@@ -1447,12 +1454,12 @@ void LootTemplate::CheckLootRefs(LootTemplateMap const& store, LootIdSet* ref_se
|
|||||||
for (LootStoreItemList::const_iterator ieItr = Entries.begin(); ieItr != Entries.end(); ++ieItr)
|
for (LootStoreItemList::const_iterator ieItr = Entries.begin(); ieItr != Entries.end(); ++ieItr)
|
||||||
{
|
{
|
||||||
LootStoreItem* item = *ieItr;
|
LootStoreItem* item = *ieItr;
|
||||||
if (item->mincountOrRef < 0)
|
if (item->reference > 0)
|
||||||
{
|
{
|
||||||
if (!LootTemplates_Reference.GetLootFor(-item->mincountOrRef))
|
if (!LootTemplates_Reference.GetLootFor(item->reference))
|
||||||
LootTemplates_Reference.ReportNotExistedId(-item->mincountOrRef);
|
LootTemplates_Reference.ReportNonExistingId(item->reference, "Reference", item->itemid);
|
||||||
else if (ref_set)
|
else if (ref_set)
|
||||||
ref_set->erase(-item->mincountOrRef);
|
ref_set->erase(item->reference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1522,7 +1529,7 @@ bool LootTemplate::addConditionItem(Condition* cond)
|
|||||||
bool LootTemplate::isReference(uint32 id) const
|
bool LootTemplate::isReference(uint32 id) const
|
||||||
{
|
{
|
||||||
for (LootStoreItemList::const_iterator ieItr = Entries.begin(); ieItr != Entries.end(); ++ieItr)
|
for (LootStoreItemList::const_iterator ieItr = Entries.begin(); ieItr != Entries.end(); ++ieItr)
|
||||||
if ((*ieItr)->itemid == id && (*ieItr)->mincountOrRef < 0)
|
if ((*ieItr)->itemid == id && (*ieItr)->reference > 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;//not found or not reference
|
return false;//not found or not reference
|
||||||
@@ -1544,7 +1551,7 @@ void LoadLootTemplates_Creature()
|
|||||||
if (uint32 lootid = itr->second.lootid)
|
if (uint32 lootid = itr->second.lootid)
|
||||||
{
|
{
|
||||||
if (lootIdSet.find(lootid) == lootIdSet.end())
|
if (lootIdSet.find(lootid) == lootIdSet.end())
|
||||||
LootTemplates_Creature.ReportNotExistedId(lootid);
|
LootTemplates_Creature.ReportNonExistingId(lootid, "Creature", itr->second.Entry);
|
||||||
else
|
else
|
||||||
lootIdSetUsed.insert(lootid);
|
lootIdSetUsed.insert(lootid);
|
||||||
}
|
}
|
||||||
@@ -1579,7 +1586,7 @@ void LoadLootTemplates_Disenchant()
|
|||||||
if (uint32 lootid = itr->second.DisenchantID)
|
if (uint32 lootid = itr->second.DisenchantID)
|
||||||
{
|
{
|
||||||
if (lootIdSet.find(lootid) == lootIdSet.end())
|
if (lootIdSet.find(lootid) == lootIdSet.end())
|
||||||
LootTemplates_Disenchant.ReportNotExistedId(lootid);
|
LootTemplates_Disenchant.ReportNonExistingId(lootid);
|
||||||
else
|
else
|
||||||
lootIdSetUsed.insert(lootid);
|
lootIdSetUsed.insert(lootid);
|
||||||
}
|
}
|
||||||
@@ -1640,7 +1647,7 @@ void LoadLootTemplates_Gameobject()
|
|||||||
if (uint32 lootid = itr->second.GetLootId())
|
if (uint32 lootid = itr->second.GetLootId())
|
||||||
{
|
{
|
||||||
if (lootIdSet.find(lootid) == lootIdSet.end())
|
if (lootIdSet.find(lootid) == lootIdSet.end())
|
||||||
LootTemplates_Gameobject.ReportNotExistedId(lootid);
|
LootTemplates_Gameobject.ReportNonExistingId(lootid, "Gameobject", itr->second.entry);
|
||||||
else
|
else
|
||||||
lootIdSetUsed.insert(lootid);
|
lootIdSetUsed.insert(lootid);
|
||||||
}
|
}
|
||||||
@@ -1733,7 +1740,7 @@ void LoadLootTemplates_Pickpocketing()
|
|||||||
if (uint32 lootid = itr->second.pickpocketLootId)
|
if (uint32 lootid = itr->second.pickpocketLootId)
|
||||||
{
|
{
|
||||||
if (lootIdSet.find(lootid) == lootIdSet.end())
|
if (lootIdSet.find(lootid) == lootIdSet.end())
|
||||||
LootTemplates_Pickpocketing.ReportNotExistedId(lootid);
|
LootTemplates_Pickpocketing.ReportNonExistingId(lootid, "Creature", itr->second.Entry);
|
||||||
else
|
else
|
||||||
lootIdSetUsed.insert(lootid);
|
lootIdSetUsed.insert(lootid);
|
||||||
}
|
}
|
||||||
@@ -1826,7 +1833,7 @@ void LoadLootTemplates_Skinning()
|
|||||||
if (uint32 lootid = itr->second.SkinLootId)
|
if (uint32 lootid = itr->second.SkinLootId)
|
||||||
{
|
{
|
||||||
if (lootIdSet.find(lootid) == lootIdSet.end())
|
if (lootIdSet.find(lootid) == lootIdSet.end())
|
||||||
LootTemplates_Skinning.ReportNotExistedId(lootid);
|
LootTemplates_Skinning.ReportNonExistingId(lootid, "Creature", itr->second.Entry);
|
||||||
else
|
else
|
||||||
lootIdSetUsed.insert(lootid);
|
lootIdSetUsed.insert(lootid);
|
||||||
}
|
}
|
||||||
@@ -1872,7 +1879,7 @@ void LoadLootTemplates_Spell()
|
|||||||
// ignore 61756 (Northrend Inscription Research (FAST QA VERSION) for example
|
// ignore 61756 (Northrend Inscription Research (FAST QA VERSION) for example
|
||||||
if (!spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL))
|
if (!spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL))
|
||||||
{
|
{
|
||||||
LootTemplates_Spell.ReportNotExistedId(spell_id);
|
LootTemplates_Spell.ReportNonExistingId(spell_id, "Spell", spellInfo->Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -115,19 +115,20 @@ struct Loot;
|
|||||||
struct LootStoreItem
|
struct LootStoreItem
|
||||||
{
|
{
|
||||||
uint32 itemid; // id of the item
|
uint32 itemid; // id of the item
|
||||||
float chance; // always positive, chance to drop for both quest and non-quest items, chance to be used for refs
|
uint32 reference; // referenced TemplateleId
|
||||||
int32 mincountOrRef; // mincount for drop items (positive) or minus referenced TemplateleId (negative)
|
float chance; // chance to drop for both quest and non-quest items, chance to be used for refs
|
||||||
|
bool needs_quest : 1; // quest drop (quest is required for item to drop)
|
||||||
uint16 lootmode;
|
uint16 lootmode;
|
||||||
uint8 group :7;
|
uint8 groupid : 7;
|
||||||
bool needs_quest :1; // quest drop (negative ChanceOrQuestChance in DB)
|
uint8 mincount; // mincount for drop items
|
||||||
uint8 maxcount :8; // max drop count for the item (mincountOrRef positive) or Ref multiplicator (mincountOrRef negative)
|
uint8 maxcount; // max drop count for the item mincount or Ref multiplicator
|
||||||
ConditionList conditions; // additional loot condition
|
ConditionList conditions; // additional loot condition
|
||||||
|
|
||||||
// Constructor, converting ChanceOrQuestChance -> (chance, needs_quest)
|
// Constructor
|
||||||
// displayid is filled in IsValid() which must be called after
|
// displayid is filled in IsValid() which must be called after
|
||||||
LootStoreItem(uint32 _itemid, float _chanceOrQuestChance, uint16 _lootmode, uint8 _group, int32 _mincountOrRef, uint8 _maxcount)
|
LootStoreItem(uint32 _itemid, uint32 _reference, float _chance, bool _needs_quest, uint16 _lootmode, uint8 _groupid, int32 _mincount, uint8 _maxcount)
|
||||||
: itemid(_itemid), chance(fabs(_chanceOrQuestChance)), mincountOrRef(_mincountOrRef), lootmode(_lootmode),
|
: itemid(_itemid), reference(_reference), chance(_chance), needs_quest(_needs_quest),
|
||||||
group(_group), needs_quest(_chanceOrQuestChance < 0), maxcount(_maxcount)
|
lootmode(_lootmode), groupid(_groupid), mincount(_mincount), maxcount(_maxcount)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
bool Roll(bool rate, Player const *player, Loot& loot, LootStore const& store) const; // Checks if the entry takes it's chance (at loot generation)
|
bool Roll(bool rate, Player const *player, Loot& loot, LootStore const& store) const; // Checks if the entry takes it's chance (at loot generation)
|
||||||
@@ -155,7 +156,7 @@ struct LootItem
|
|||||||
bool follow_loot_rules : 1;
|
bool follow_loot_rules : 1;
|
||||||
|
|
||||||
// Constructor, copies most fields from LootStoreItem, generates random count and random suffixes/properties
|
// Constructor, copies most fields from LootStoreItem, generates random count and random suffixes/properties
|
||||||
// Should be called for non-reference LootStoreItem entries only (mincountOrRef > 0)
|
// Should be called for non-reference LootStoreItem entries only (reference = 0)
|
||||||
explicit LootItem(LootStoreItem const& li);
|
explicit LootItem(LootStoreItem const& li);
|
||||||
|
|
||||||
LootItem() {}
|
LootItem() {}
|
||||||
@@ -203,7 +204,8 @@ class LootStore
|
|||||||
void Verify() const;
|
void Verify() const;
|
||||||
void CheckLootRefs(LootIdSet* ref_set = NULL) const; // check existence reference and remove it from ref_set
|
void CheckLootRefs(LootIdSet* ref_set = NULL) const; // check existence reference and remove it from ref_set
|
||||||
void ReportUnusedIds(LootIdSet const& ids_set) const;
|
void ReportUnusedIds(LootIdSet const& ids_set) const;
|
||||||
void ReportNotExistedId(uint32 id) const;
|
void ReportNonExistingId(uint32 lootId) const;
|
||||||
|
void ReportNonExistingId(uint32 lootId, const char* ownerType, uint32 ownerId) const;
|
||||||
|
|
||||||
bool HaveLootFor(uint32 loot_id) const { return m_LootTemplates.find(loot_id) != m_LootTemplates.end(); }
|
bool HaveLootFor(uint32 loot_id) const { return m_LootTemplates.find(loot_id) != m_LootTemplates.end(); }
|
||||||
bool HaveQuestLootFor(uint32 loot_id) const;
|
bool HaveQuestLootFor(uint32 loot_id) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user