rendered paste bodyIndex: src/game/GuildHandler.cpp===================================================================--- src/game/GuildHandler.cpp (revision 5545)+++ src/game/GuildHandler.cpp (working copy)@@ -1094,9 +1094,14 @@ if (GetPlayer()->GetMoney() < money) return; + CharacterDatabase.BeginTransaction();+ pGuild->SetBankMoney(pGuild->GetGuildBankMoney()+money); GetPlayer()->ModifyMoney(-int(money));+ GetPlayer()->SaveGoldToDB(); + CharacterDatabase.CommitTransaction();+ // logging money if(_player->GetSession()->GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE)) {@@ -1138,11 +1143,19 @@ if (pGuild->GetRankRights(GetPlayer()->GetRank()) & GR_RIGHT_REPAIR_FROM_GUILD) return; + CharacterDatabase.BeginTransaction();+ if (!pGuild->MemberMoneyWithdraw(money, GetPlayer()->GetGUIDLow()))+ {+ CharacterDatabase.RollbackTransaction(); return;+ } GetPlayer()->ModifyMoney(money);+ GetPlayer()->SaveGoldToDB(); + CharacterDatabase.CommitTransaction();+ // Log pGuild->LogBankEvent(GUILD_BANK_LOG_WITHDRAW_MONEY, uint8(0), GetPlayer()->GetGUIDLow(), money); @@ -1267,7 +1280,6 @@ // pItemSrc moved to BankTabSlotDst pGuild->AddGBankItemToDB(GuildId, uint32(BankTabDst), uint32(BankTabSlotDst), pItemSrc->GetGUIDLow(), pItemSrc->GetEntry()); - CharacterDatabase.CommitTransaction(); // No need to save item instances, they did not change pGuild->LogBankEvent(GUILD_BANK_LOG_MOVE_ITEM, BankTab, pl->GetGUIDLow(), pItemSrc->GetEntry(), pItemSrc->GetCount(), BankTabDst);@@ -1657,6 +1669,7 @@ if(pItemChar->GetEntry()!=pItemBank->GetEntry() && SplitedAmount) { pl->SendEquipError( EQUIP_ERR_ITEMS_CANT_BE_SWAPPED, pItemChar, pItemBank );+ CharacterDatabase.RollbackTransaction(); return; } Index: src/game/Player.h===================================================================--- src/game/Player.h (revision 5545)+++ src/game/Player.h (working copy)@@ -1214,6 +1214,7 @@ void SaveToDB(); void SaveInventoryAndGoldToDB(); // fast save function for item/money cheating preventing+ void SaveGoldToDB() { SetUInt32ValueInDB(PLAYER_FIELD_COINAGE,GetMoney(),GetGUID()); } static bool SaveValuesArrayInDB(Tokens const& data,uint64 guid); static void SetUInt32ValueInArray(Tokens& data,uint16 index, uint32 value); static void SetFloatValueInArray(Tokens& data,uint16 index, float value);