mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[7239] Support multiply items loot and not normal loot items in Player::AutoStoreLoot.
Use this function in more cases and simplify and fix some related code.
This commit is contained in:
parent
7d63f4ce02
commit
5e2553ff7e
7 changed files with 36 additions and 53 deletions
|
|
@ -12771,7 +12771,8 @@ void Player::RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver
|
|||
// fill mail
|
||||
MailItemsInfo mi; // item list preparing
|
||||
|
||||
for(size_t i = 0; mi.size() < MAX_MAIL_ITEMS && i < questMailLoot.items.size(); ++i)
|
||||
uint32 max_slot = questMailLoot.GetMaxSlotInLootFor(this);
|
||||
for(uint32 i = 0; mi.size() < MAX_MAIL_ITEMS && i < max_slot; ++i)
|
||||
{
|
||||
if(LootItem* lootitem = questMailLoot.LootItemInSlot(i,this))
|
||||
{
|
||||
|
|
@ -12783,18 +12784,6 @@ void Player::RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver
|
|||
}
|
||||
}
|
||||
|
||||
for(size_t i = 0; mi.size() < MAX_MAIL_ITEMS && i < questMailLoot.quest_items.size(); ++i)
|
||||
{
|
||||
if(LootItem* lootitem = questMailLoot.LootItemInSlot(i+questMailLoot.items.size(),this))
|
||||
{
|
||||
if(Item* item = Item::CreateItem(lootitem->itemid,lootitem->count,this))
|
||||
{
|
||||
item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
||||
mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WorldSession::SendMailTo(this, mailType, MAIL_STATIONERY_NORMAL, senderGuidOrEntry, GetGUIDLow(), "", 0, &mi, 0, 0, MAIL_CHECK_MASK_NONE,pQuest->GetRewMailDelaySecs(),pQuest->GetRewMailTemplateId());
|
||||
}
|
||||
|
||||
|
|
@ -19376,28 +19365,31 @@ void Player::InitRunes()
|
|||
SetFloatValue(PLAYER_RUNE_REGEN_1 + i, 0.1f);
|
||||
}
|
||||
|
||||
void Player::AutoStoreLootItem(uint8 bag, uint8 slot, uint32 loot_id, LootStore const& store)
|
||||
void Player::AutoStoreLoot(uint8 bag, uint8 slot, uint32 loot_id, LootStore const& store, bool broadcast)
|
||||
{
|
||||
Loot loot;
|
||||
loot.FillLoot (loot_id,store,this,true);
|
||||
if(loot.items.empty ())
|
||||
return;
|
||||
LootItem const* lootItem = &loot.items[0];
|
||||
|
||||
ItemPosCountVec dest;
|
||||
uint8 msg = CanStoreNewItem (bag,slot,dest,lootItem->itemid,lootItem->count);
|
||||
if(msg != EQUIP_ERR_OK && slot != NULL_SLOT)
|
||||
msg = CanStoreNewItem( bag, NULL_SLOT,dest,lootItem->itemid,lootItem->count);
|
||||
if( msg != EQUIP_ERR_OK && bag != NULL_BAG)
|
||||
msg = CanStoreNewItem( NULL_BAG, NULL_SLOT,dest,lootItem->itemid,lootItem->count);
|
||||
if(msg != EQUIP_ERR_OK)
|
||||
uint32 max_slot = loot.GetMaxSlotInLootFor(this);
|
||||
for(uint32 i = 0; i < max_slot; ++i)
|
||||
{
|
||||
SendEquipError( msg, NULL, NULL );
|
||||
return;
|
||||
}
|
||||
LootItem* lootItem = loot.LootItemInSlot(i,this);
|
||||
|
||||
Item* pItem = StoreNewItem (dest,lootItem->itemid,true,lootItem->randomPropertyId);
|
||||
SendNewItem(pItem, lootItem->count, true, false);
|
||||
ItemPosCountVec dest;
|
||||
uint8 msg = CanStoreNewItem (bag,slot,dest,lootItem->itemid,lootItem->count);
|
||||
if(msg != EQUIP_ERR_OK && slot != NULL_SLOT)
|
||||
msg = CanStoreNewItem( bag, NULL_SLOT,dest,lootItem->itemid,lootItem->count);
|
||||
if( msg != EQUIP_ERR_OK && bag != NULL_BAG)
|
||||
msg = CanStoreNewItem( NULL_BAG, NULL_SLOT,dest,lootItem->itemid,lootItem->count);
|
||||
if(msg != EQUIP_ERR_OK)
|
||||
{
|
||||
SendEquipError( msg, NULL, NULL );
|
||||
continue;
|
||||
}
|
||||
|
||||
Item* pItem = StoreNewItem (dest,lootItem->itemid,true,lootItem->randomPropertyId);
|
||||
SendNewItem(pItem, lootItem->count, false, false, broadcast);
|
||||
}
|
||||
}
|
||||
|
||||
uint32 Player::CalculateTalentsPoints() const
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue