Public feed #889931

Untitled

public text v1 · immutable
Raw Edit
·published 2008-02-03 09:47 UTC
rendered paste body
Index: src/game/GuildHandler.cpp
===================================================================
--- src/game/GuildHandler.cpp   (revision 5129)
+++ src/game/GuildHandler.cpp   (working copy)
@@ -1219,6 +1219,7 @@
                 pGuild->StoreItem(BankTabDst, &BankTabSlotDst, pItemDst);
                 pItemDst->FSetState(ITEM_NEW);
                 pItemSrc->SetCount(pItemSrc->GetCount()-SplitedAmount);
+                pItemSrc->FSetState(ITEM_CHANGED);
                 pItemSrc->SaveToDB();
                 pItemDst->SaveToDB();
                 CharacterDatabase.PExecute("REPLACE INTO `guild_bank_item` (`guildid`,`TabId`,`SlotId`,`item_guid`) "
@@ -1232,9 +1233,6 @@
             {
                 pGuild->EmptyBankSlot(BankTab, BankTabSlot);// 'empty' moved to BankTabSlot
 
-                CharacterDatabase.PExecute("DELETE FROM `guild_bank_item` WHERE `guildid`='%u' AND `TabId`='%u' AND `SlotId`='%u'",
-                    GuildId, uint32(BankTabDst), uint32(BankTabSlotDst));
-
                 pGuild->StoreItem(BankTabDst, &BankTabSlotDst, pItemSrc);
                 // pItemSrc moved to BankTabSlotDst
 
@@ -1275,6 +1273,7 @@
                 }
                 else
                 {
+                    pItemSrc->FSetState(ITEM_CHANGED);
                     pItemSrc->SaveToDB();
                 }
 
@@ -1342,10 +1341,10 @@
             uint32 Count = pItemBank->GetCount();
             uint16 Dest;
             uint8 msg;
-            msg = GetPlayer()->CanStoreItem(NULL_BAG, NULL_SLOT, Dest, pItemBank, false);
+            msg = pl->CanStoreItem(NULL_BAG, NULL_SLOT, Dest, pItemBank, false);
             if( msg == EQUIP_ERR_OK )
             {
-                Item *pItemStacked = GetPlayer()->StoreItem(Dest, pItemBank, true); // This cause item state to change
+                Item *pItemStacked = pl->StoreItem(Dest, pItemBank, true); // This cause item state to change
                 pGuild->EmptyBankSlot(BankTab, BankTabSlot);// Delete from bank table
                 if (pItemStacked == pItemBank)              // In case stacked to player, do not execute
                 {
@@ -1361,12 +1360,12 @@
             }
             else
             {
-                GetPlayer()->SendEquipError( msg, pItemBank, NULL );
+                pl->SendEquipError( msg, pItemBank, NULL );
                 CharacterDatabase.RollbackTransaction();
                 return;
             }
             pGuild->LogBankEvent(GUILD_BANK_LOG_WITHDRAW_ITEM, BankTab, pl->GetGUIDLow(), Entry, Count);
-            pGuild->MemberItemWithdraw(BankTab, GetPlayer()->GetGUIDLow());
+            pGuild->MemberItemWithdraw(BankTab, pl->GetGUIDLow());
             CharacterDatabase.CommitTransaction();
             pGuild->DisplayGuildBankContent(this, BankTab);
             return;
@@ -1443,7 +1442,6 @@
                     pItemBank->SetCount(pItemBank->GetCount()-SplitedAmount);
                     pItemChar->SetState(ITEM_CHANGED);
                     pItemChar->SaveToDB();
-                    pItemBank->FSetState(ITEM_CHANGED);
                     if (pItemBank->GetCount() == 0)         // We emptied the bank slot
                     {
                         pItemBank->RemoveFromWorld();
@@ -1451,7 +1449,10 @@
                         pGuild->EmptyBankSlot(BankTab, BankTabSlot);
                     }
                     else
+                    {
+                        pItemBank->FSetState(ITEM_CHANGED);
                         pItemBank->SaveToDB();
+                    }
                 }
                 else                                        // Bank <-> Char swap items
                 {
@@ -1469,7 +1470,7 @@
                         return;
                     }
                         
-                    // if can store in invnetory 
+                    // if can store in inventory 
                     // check possibility store in bank
                     
                     // prevent unexpected merge in bank item
@@ -1528,8 +1529,14 @@
                     //first be sure char item is saved
                     pItemChar->SaveToDB();
                     // autostore can be set or not
-                    pGuild->StoreItem(BankTab, &BankTabSlot, pItemChar);
+                    Item *pRetItem = pGuild->StoreItem(BankTab, &BankTabSlot, pItemChar);
 
+                    if (pRetItem == pItemChar)
+                    {
+                        sLog.outDebug("Failed to put item in bank");
+                        CharacterDatabase.RollbackTransaction();
+                        return;
+                    }
                     pItemChar->RemoveFromUpdateQueueOf(pl);
                     pItemChar->DestroyForPlayer(pl);
                     pl->RemoveItem(PlayerBag, PlayerSlot, true);
@@ -1544,6 +1551,12 @@
             }
             else
             {
+                if (pGuild->GetMemberSlotWithdrawRem(pl->GetGUIDLow(), BankTab)==0)
+                {
+                    sLog.outDebug("GUILDBANK: Player tried to swap an item with no withdraw right!!");
+                    CharacterDatabase.RollbackTransaction();
+                    return;
+                }
                 if(pItemChar->GetEntry()==pItemBank->GetEntry() && pItemBank->GetCount() < pItemBank->GetMaxStackCount())
                 {
                     if(SplitedAmount + pItemBank->GetCount() >  pItemBank->GetMaxStackCount())