mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-15 12:42:43 -04:00
[7239] Support multiply items loot and not normal loot items in Player::AutoStoreLoot. Author: VladimirMangos
Use this function in more cases and simplify and fix some related code. --HG-- branch : trunk
This commit is contained in:
@@ -7687,7 +7687,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
|
||||
uint32 pLevel = bones->loot.gold;
|
||||
bones->loot.clear();
|
||||
if(GetBattleGround()->GetTypeID() == BATTLEGROUND_AV)
|
||||
loot->FillLoot(1, LootTemplates_Creature, this);
|
||||
loot->FillLoot(1, LootTemplates_Creature, this, true);
|
||||
// It may need a better formula
|
||||
// Now it works like this: lvl10: ~6copper, lvl70: ~9silver
|
||||
bones->loot.gold = (uint32)( urand(50, 150) * 0.016f * pow( ((float)pLevel)/5.76f, 2.5f) * sWorld.getRate(RATE_DROP_MONEY) );
|
||||
@@ -13115,7 +13115,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))
|
||||
{
|
||||
@@ -13127,18 +13128,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());
|
||||
}
|
||||
|
||||
@@ -20202,27 +20191,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);
|
||||
|
||||
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);
|
||||
}
|
||||
Item* pItem = StoreNewItem (dest,lootItem->itemid,true,lootItem->randomPropertyId);
|
||||
SendNewItem(pItem, lootItem->count, true, false);
|
||||
}
|
||||
|
||||
uint32 Player::CalculateTalentsPoints() const
|
||||
|
||||
Reference in New Issue
Block a user