AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
LootItem Struct Reference

#include "LootMgr.h"

Public Member Functions

 LootItem (LootStoreItem const &li)
 
 LootItem ()=default
 
bool AllowedForPlayer (Player const *player, ObjectGuid source) const
 
void AddAllowedLooter (Player const *player)
 
const AllowedLooterSetGetAllowedLooters () const
 

Public Attributes

uint32 itemid
 
uint32 itemIndex
 
uint32 randomSuffix
 
int32 randomPropertyId
 
ConditionList conditions
 
AllowedLooterSet allowedGUIDs
 
ObjectGuid rollWinnerGUID
 
uint8 count: 8
 
bool is_looted: 1
 
bool is_blocked: 1
 
bool freeforall: 1
 
bool is_underthreshold: 1
 
bool is_counted: 1
 
bool needs_quest: 1
 
bool follow_loot_rules: 1
 
uint8 groupid: 7
 

Detailed Description

Constructor & Destructor Documentation

◆ LootItem() [1/2]

LootItem::LootItem ( LootStoreItem const &  li)
explicit
394{
395 itemid = li.itemid;
396 itemIndex = 0;
397 conditions = li.conditions;
398
399 ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemid);
400 freeforall = proto && proto->HasFlag(ITEM_FLAG_MULTI_DROP);
402
403 needs_quest = li.needs_quest;
404
407 count = 0;
408 is_looted = 0;
409 is_blocked = 0;
411 is_counted = 0;
413 groupid = li.groupid;
414}
uint32 GenerateEnchSuffixFactor(uint32 item_id)
Definition ItemEnchantmentMgr.cpp:125
@ ITEM_FLAG_MULTI_DROP
Definition ItemTemplate.h:158
@ ITEM_FLAGS_CU_FOLLOW_LOOT_RULES
Definition ItemTemplate.h:221
#define sObjectMgr
Definition ObjectMgr.h:1650
static int32 GenerateItemRandomPropertyId(uint32 item_id)
Definition Item.cpp:622
static ObjectGuid const Empty
Definition ObjectGuid.h:120
Definition ItemTemplate.h:619
bool HasFlagCu(ItemFlagsCustom flag) const
Definition ItemTemplate.h:828
bool HasFlag(ItemFlags flag) const
Definition ItemTemplate.h:826
uint32 itemid
Definition LootMgr.h:155
bool is_blocked
Definition LootMgr.h:164
uint8 groupid
Definition LootMgr.h:170
ObjectGuid rollWinnerGUID
Definition LootMgr.h:161
bool needs_quest
Definition LootMgr.h:168
bool follow_loot_rules
Definition LootMgr.h:169
bool is_underthreshold
Definition LootMgr.h:166
int32 randomPropertyId
Definition LootMgr.h:158
uint32 itemIndex
Definition LootMgr.h:156
uint8 count
Definition LootMgr.h:162
bool is_looted
Definition LootMgr.h:163
ConditionList conditions
Definition LootMgr.h:159
bool freeforall
Definition LootMgr.h:165
uint32 randomSuffix
Definition LootMgr.h:157
bool is_counted
Definition LootMgr.h:167

References LootStoreItem::conditions, conditions, count, ObjectGuid::Empty, follow_loot_rules, freeforall, GenerateEnchSuffixFactor(), Item::GenerateItemRandomPropertyId(), LootStoreItem::groupid, groupid, ItemTemplate::HasFlag(), ItemTemplate::HasFlagCu(), is_blocked, is_counted, is_looted, is_underthreshold, ITEM_FLAG_MULTI_DROP, ITEM_FLAGS_CU_FOLLOW_LOOT_RULES, LootStoreItem::itemid, itemid, itemIndex, LootStoreItem::needs_quest, needs_quest, randomPropertyId, randomSuffix, rollWinnerGUID, and sObjectMgr.

◆ LootItem() [2/2]

LootItem::LootItem ( )
default

Member Function Documentation

◆ AddAllowedLooter()

void LootItem::AddAllowedLooter ( Player const *  player)
503{
504 allowedGUIDs.insert(player->GetGUID());
505}
AllowedLooterSet allowedGUIDs
Definition LootMgr.h:160

References allowedGUIDs, and Object::GetGUID().

Referenced by Loot::FillNonQuestNonFFAConditionalLoot().

◆ AllowedForPlayer()

bool LootItem::AllowedForPlayer ( Player const *  player,
ObjectGuid  source 
) const
418{
419 ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(itemid);
420 if (!pProto)
421 {
422 return false;
423 }
424
425 if (sDisableMgr->IsDisabledFor(DISABLE_TYPE_LOOT, itemid, nullptr))
426 {
427 return false;
428 }
429
430 bool isMasterLooter = player->GetGroup() && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID();
431 bool itemVisibleForMasterLooter = !needs_quest && (!follow_loot_rules || !is_underthreshold);
432
433 // DB conditions check
434 if (!sConditionMgr->IsObjectMeetToConditions(const_cast<Player*>(player), conditions))
435 {
436 // Master Looter can see conditioned recipes
437 if (isMasterLooter && itemVisibleForMasterLooter)
438 {
439 if (pProto->HasFlag(ITEM_FLAG_HIDE_UNUSABLE_RECIPE) || (pProto->Class == ITEM_CLASS_RECIPE && pProto->Bonding == BIND_WHEN_PICKED_UP && pProto->Spells[1].SpellId != 0))
440 {
441 return true;
442 }
443 }
444
445 return false;
446 }
447
448 // not show loot for not own team
449 if (pProto->HasFlag2(ITEM_FLAG2_FACTION_HORDE) && player->GetTeamId(true) != TEAM_HORDE)
450 {
451 return false;
452 }
453
454 if (pProto->HasFlag2(ITEM_FLAG2_FACTION_ALLIANCE) && player->GetTeamId(true) != TEAM_ALLIANCE)
455 {
456 return false;
457 }
458
459 // Master looter can see all items even if the character can't loot them
460 if (isMasterLooter && itemVisibleForMasterLooter)
461 {
462 return true;
463 }
464
465 // Don't allow loot for players without profession or those who already know the recipe
466 if (pProto->HasFlag(ITEM_FLAG_HIDE_UNUSABLE_RECIPE) && (!player->HasSkill(pProto->RequiredSkill) || player->HasSpell(pProto->Spells[1].SpellId)))
467 {
468 return false;
469 }
470
471 // Don't allow to loot soulbound recipes that the player has already learned
472 if (pProto->Class == ITEM_CLASS_RECIPE && pProto->Bonding == BIND_WHEN_PICKED_UP && pProto->Spells[1].SpellId != 0 && player->HasSpell(pProto->Spells[1].SpellId))
473 {
474 return false;
475 }
476
477 // check quest requirements
479 {
480 // Don't drop quest items if the player is missing the relevant quest
481 if (needs_quest && !player->HasQuestForItem(itemid))
482 return false;
483
484 // for items that start quests
485 if (pProto->StartQuest)
486 {
487 // Don't drop the item if the player has already finished the quest OR player already has the item in their inventory, and that item is unique OR the player has not finished a prerequisite quest
488 uint32 prevQuestId = sObjectMgr->GetQuestTemplate(pProto->StartQuest) ? sObjectMgr->GetQuestTemplate(pProto->StartQuest)->GetPrevQuestId() : 0;
489 if (player->GetQuestStatus(pProto->StartQuest) != QUEST_STATUS_NONE || (player->HasItemCount(itemid, pProto->MaxCount) && pProto->MaxCount) || (prevQuestId && !player->GetQuestRewardStatus(prevQuestId)))
490 return false;
491 }
492 }
493
494 if (!sScriptMgr->OnAllowedForPlayerLootCheck(player, source))
495 {
496 return false;
497 }
498
499 return true;
500}
#define sConditionMgr
Definition ConditionMgr.h:290
std::uint32_t uint32
Definition Define.h:107
#define sDisableMgr
Definition DisableMgr.h:88
@ DISABLE_TYPE_LOOT
Definition DisableMgr.h:38
@ ITEM_FLAG2_FACTION_HORDE
Definition ItemTemplate.h:183
@ ITEM_FLAG2_FACTION_ALLIANCE
Definition ItemTemplate.h:184
@ ITEM_FLAG_HIDE_UNUSABLE_RECIPE
Definition ItemTemplate.h:172
@ BIND_WHEN_PICKED_UP
Definition ItemTemplate.h:96
@ ITEM_FLAGS_CU_IGNORE_QUEST_STATUS
Definition ItemTemplate.h:220
@ ITEM_CLASS_RECIPE
Definition ItemTemplate.h:300
@ QUEST_STATUS_NONE
Definition QuestDef.h:100
#define sScriptMgr
Definition ScriptMgr.h:727
@ TEAM_ALLIANCE
Definition SharedDefines.h:760
@ TEAM_HORDE
Definition SharedDefines.h:761
Definition Player.h:1083
uint32 RequiredSkill
Definition ItemTemplate.h:637
int32 MaxCount
Definition ItemTemplate.h:644
_Spell Spells[MAX_ITEM_PROTO_SPELLS]
Definition ItemTemplate.h:662
bool HasFlag2(ItemFlags2 flag) const
Definition ItemTemplate.h:827
uint32 Class
Definition ItemTemplate.h:621
uint32 StartQuest
Definition ItemTemplate.h:668
uint32 Bonding
Definition ItemTemplate.h:663
int32 SpellId
Definition ItemTemplate.h:591

References BIND_WHEN_PICKED_UP, ItemTemplate::Bonding, ItemTemplate::Class, conditions, DISABLE_TYPE_LOOT, follow_loot_rules, Player::GetGroup(), Object::GetGUID(), Group::GetMasterLooterGuid(), Player::GetQuestRewardStatus(), Player::GetQuestStatus(), Player::GetTeamId(), ItemTemplate::HasFlag(), ItemTemplate::HasFlag2(), ItemTemplate::HasFlagCu(), Player::HasItemCount(), Player::HasQuestForItem(), Player::HasSkill(), Player::HasSpell(), is_underthreshold, ITEM_CLASS_RECIPE, ITEM_FLAG2_FACTION_ALLIANCE, ITEM_FLAG2_FACTION_HORDE, ITEM_FLAG_HIDE_UNUSABLE_RECIPE, ITEM_FLAGS_CU_IGNORE_QUEST_STATUS, itemid, ItemTemplate::MaxCount, needs_quest, QUEST_STATUS_NONE, ItemTemplate::RequiredSkill, sConditionMgr, sDisableMgr, sObjectMgr, _Spell::SpellId, ItemTemplate::Spells, sScriptMgr, ItemTemplate::StartQuest, TEAM_ALLIANCE, and TEAM_HORDE.

Referenced by Loot::AddItem(), CanRollOnItem(), Loot::FillFFALoot(), Loot::FillNonQuestNonFFAConditionalLoot(), Loot::FillNotNormalLootFor(), Loot::FillQuestLoot(), WorldSession::HandleLootMasterGiveOpcode(), Loot::LootItemInSlot(), and Player::StoreLootItem().

◆ GetAllowedLooters()

const AllowedLooterSet & LootItem::GetAllowedLooters ( ) const
inline

Member Data Documentation

◆ allowedGUIDs

AllowedLooterSet LootItem::allowedGUIDs

◆ conditions

◆ count

◆ follow_loot_rules

bool LootItem::follow_loot_rules

◆ freeforall

◆ groupid

uint8 LootItem::groupid

◆ is_blocked

◆ is_counted

◆ is_looted

◆ is_underthreshold

bool LootItem::is_underthreshold

◆ itemid

◆ itemIndex

◆ needs_quest

bool LootItem::needs_quest

◆ randomPropertyId

◆ randomSuffix

uint32 LootItem::randomSuffix

◆ rollWinnerGUID


The documentation for this struct was generated from the following files: