diff --git a/Source/Game/Entities/Creature/Creature.Fields.cs b/Source/Game/Entities/Creature/Creature.Fields.cs index 20b408ac6..904d7f65f 100644 --- a/Source/Game/Entities/Creature/Creature.Fields.cs +++ b/Source/Game/Entities/Creature/Creature.Fields.cs @@ -55,6 +55,7 @@ namespace Game.Entities bool DisableReputationGain; + uint? _lootId; LootModes m_LootMode; // Bitmask (default: LOOT_MODE_DEFAULT) that determines what loot will be lootable // Waypoint path diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index b68f786ae..570073674 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -1189,9 +1189,24 @@ namespace Game.Entities { _pickpocketLootRestore = GameTime.GetGameTime() + WorldConfig.GetIntValue(WorldCfg.CreaturePickpocketRefill); } + public void ResetPickPocketRefillTimer() { _pickpocketLootRestore = 0; } + public bool CanGeneratePickPocketLoot() { return _pickpocketLootRestore <= GameTime.GetGameTime(); } + public uint GetLootId() + { + if (_lootId.HasValue) + return _lootId.Value; + + return GetCreatureTemplate().LootId; + } + + public void SetLootId(uint? lootId) + { + _lootId = lootId; + } + public void SetTappedBy(Unit unit, bool withGroup = true) { // set the player whose group should receive the right diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index c01d5ab71..0aa3b6ebc 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -756,7 +756,7 @@ namespace Game.Entities { if (dungeonEncounter != null) { - creature.m_personalLoot = LootManager.GenerateDungeonEncounterPersonalLoot(dungeonEncounter.Id, creature.GetCreatureTemplate().LootId, + creature.m_personalLoot = LootManager.GenerateDungeonEncounterPersonalLoot(dungeonEncounter.Id, creature.GetLootId(), LootStorage.Creature, LootType.Corpse, creature, creature.GetCreatureTemplate().MinGold, creature.GetCreatureTemplate().MaxGold, (ushort)creature.GetLootMode(), creature.GetMap().GetDifficultyLootItemContext(), tappers); } @@ -767,7 +767,7 @@ namespace Game.Entities Loot loot = new(creature.GetMap(), creature.GetGUID(), LootType.Corpse, dungeonEncounter != null ? group : null); - uint lootid = creature.GetCreatureTemplate().LootId; + uint lootid = creature.GetLootId(); if (lootid != 0) loot.FillLoot(lootid, LootStorage.Creature, looter, dungeonEncounter != null, false, creature.GetLootMode(), creature.GetMap().GetDifficultyLootItemContext()); @@ -794,7 +794,7 @@ namespace Game.Entities if (dungeonEncounter != null) loot.SetDungeonEncounterId(dungeonEncounter.Id); - uint lootid = creature.GetCreatureTemplate().LootId; + uint lootid = creature.GetLootId(); if (lootid != 0) loot.FillLoot(lootid, LootStorage.Creature, tapper, true, false, creature.GetLootMode(), creature.GetMap().GetDifficultyLootItemContext());