From 5746d0e98d8a5c4af96102835d501c47ed370def Mon Sep 17 00:00:00 2001 From: KingPin Date: Thu, 6 Nov 2008 08:20:26 -0600 Subject: [PATCH] [svn] * Avoid access to bag item prototype for getting bag size, use related item update field instead as more fast source. source mangos. * Further reduce of DB access in guild handlers. * Multi-locale DBC extracting - source Foks *** Devs not responsible if all your player items drop to the ground and get eaten by ants or rabbits.. or some kind of wierd ant-rabbits.. --HG-- branch : trunk --- contrib/extractor/System.cpp | 158 ++++++++++-------- contrib/extractor/ad.exe | Bin 167936 -> 167936 bytes contrib/extractor/libmpq/mpq.cpp | 2 +- contrib/extractor/libmpq/mpq.h | 2 +- contrib/extractor/libmpq/parser.cpp | 2 +- contrib/extractor/mpq_libmpq.cpp | 2 +- contrib/extractor/mpq_libmpq.h | 9 +- src/game/Bag.cpp | 60 ++----- src/game/Bag.h | 1 + src/game/Chat.cpp | 40 ++--- src/game/Chat.h | 88 +++++----- src/game/Guild.h | 4 + src/game/GuildHandler.cpp | 97 +++-------- src/game/Language.h | 4 +- src/game/Level1.cpp | 6 +- src/game/Level2.cpp | 30 ++-- src/game/Level3.cpp | 4 +- src/game/Player.cpp | 250 +++++++++++----------------- src/game/Player.h | 2 + src/game/debugcmds.cpp | 6 +- 20 files changed, 331 insertions(+), 436 deletions(-) diff --git a/contrib/extractor/System.cpp b/contrib/extractor/System.cpp index 090fc557ed7..b7ece7e766e 100644 --- a/contrib/extractor/System.cpp +++ b/contrib/extractor/System.cpp @@ -39,7 +39,7 @@ enum Extract }; int extract = EXTRACT_MAP | EXTRACT_DBC; -static char* const langs[]={"deDE", "enGB", "enUS", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; +static char* const langs[]={"enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; #define LANG_COUNT 12 #define ADT_RES 64 @@ -167,11 +167,11 @@ void ExtractMapsFromMpq() path += "/maps/"; CreateDir(path); - for(int x = 0; x < ADT_RES; ++x) + for(unsigned int x = 0; x < ADT_RES; ++x) { - for(int y = 0; y < ADT_RES; ++y) + for(unsigned int y = 0; y < ADT_RES; ++y) { - for(int z = 0; z < map_count; ++z) + for(unsigned int z = 0; z < map_count; ++z) { sprintf(mpq_filename,"World\\Maps\\%s\\%s_%u_%u.adt",map_ids[z].name,map_ids[z].name,x,y); sprintf(output_filename,"%s/maps/%03u%02u%02u.map",output_path,map_ids[z].id,y,x); @@ -189,7 +189,7 @@ void ExtractMapsFromMpq() //bool WMO(char* filename); -void ExtractDBCFiles() +void ExtractDBCFiles(int locale, bool basicLocale) { printf("Extracting dbc files...\n"); @@ -198,26 +198,30 @@ void ExtractDBCFiles() // get DBC file list for(ArchiveSet::iterator i = gOpenArchives.begin(); i != gOpenArchives.end();++i) { - vector files = (*i)->GetFileList(); + vector files; + (*i)->GetFileListTo(files); for (vector::iterator iter = files.begin(); iter != files.end(); ++iter) if (iter->rfind(".dbc") == iter->length() - strlen(".dbc")) dbcfiles.insert(*iter); } - std::string path = output_path; + string path = output_path; path += "/dbc/"; CreateDir(path); + if(!basicLocale) + { + path += langs[locale]; + path += "/"; + CreateDir(path); + } // extract DBCs int count = 0; for (set::iterator iter = dbcfiles.begin(); iter != dbcfiles.end(); ++iter) { - string filename = output_path; - filename += "/dbc/"; + string filename = path; filename += (iter->c_str() + strlen("DBFilesClient\\")); - //cout << filename << endl; - FILE *output=fopen(filename.c_str(),"wb"); if(!output) { @@ -231,27 +235,10 @@ void ExtractDBCFiles() fclose(output); ++count; } - printf("Extracted %u DBC files\n", count); + printf("Extracted %u DBC files\n\n", count); } -int GetLocale() -{ - for (int i = 0; i < LANG_COUNT; i++) - { - char tmp1[512]; - sprintf(tmp1, "%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]); - if (FileExists(tmp1)) - { - printf("Detected locale: %s\n", langs[i]); - return i; - } - } - - printf("Could not detect locale.\n"); - return -1; -} - -void LoadMPQFiles(int const locale) +void LoadLocaleMPQFiles(int const locale) { char filename[512]; @@ -265,56 +252,95 @@ void LoadMPQFiles(int const locale) sprintf(ext, "-%i", i); sprintf(filename,"%s/Data/%s/patch-%s%s.MPQ",input_path,langs[locale],langs[locale],ext); - if(!FileExists(filename)) - break; - new MPQArchive(filename); - } - - //need those files only if extract maps - if(extract & EXTRACT_MAP) - { - sprintf(filename,"%s/Data/common.MPQ",input_path); - new MPQArchive(filename); - sprintf(filename,"%s/Data/expansion.MPQ",input_path); - new MPQArchive(filename); - - for(int i = 1; i < 5; ++i) - { - char ext[3] = ""; - if(i > 1) - sprintf(ext, "-%i", i); - - sprintf(filename,"%s/Data/patch%s.MPQ",input_path,ext); - if(!FileExists(filename)) - break; + if(FileExists(filename)) new MPQArchive(filename); - } } } + +void LoadCommonMPQFiles() +{ + char filename[512]; + + sprintf(filename,"%s/Data/common.MPQ",input_path); + new MPQArchive(filename); + sprintf(filename,"%s/Data/expansion.MPQ",input_path); + new MPQArchive(filename); + for(int i = 1; i < 5; ++i) + { + char ext[3] = ""; + if(i > 1) + sprintf(ext, "-%i", i); + if(FileExists(filename)) + new MPQArchive(filename); + } +} + +inline void CloseMPQFiles() +{ + for(ArchiveSet::iterator j = gOpenArchives.begin(); j != gOpenArchives.end();++j) (*j)->close(); + gOpenArchives.clear(); +} int main(int argc, char * arg[]) { printf("Map & DBC Extractor\n"); - printf("===================\n"); + printf("===================\n\n"); HandleArgs(argc, arg); - int const locale = GetLocale(); - if(locale < 0) - return 1; + int FirstLocale = -1; + + for (int i = 0; i < LANG_COUNT; i++) + { + char tmp1[512]; + sprintf(tmp1, "%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]); + if (FileExists(tmp1)) + { + printf("Detected locale: %s\n", langs[i]); + + //Open MPQs + LoadLocaleMPQFiles(i); + + if((extract & EXTRACT_DBC) == 0) + { + FirstLocale=i; + break; + } - LoadMPQFiles(locale); + //Extract DBC files + if(FirstLocale<0) + { + ExtractDBCFiles(i, true); + FirstLocale = i; + } + else + ExtractDBCFiles(i, false); + + //Close MPQs + CloseMPQFiles(); + } + } - if(extract & EXTRACT_DBC) - ExtractDBCFiles(); - - if(extract & EXTRACT_MAP) + if(FirstLocale<0) + { + printf("No locales detected\n"); + return 0; + } + + if (extract & EXTRACT_MAP) + { + printf("Using locale: %s\n", langs[FirstLocale]); + + // Open MPQs + LoadLocaleMPQFiles(FirstLocale); + LoadCommonMPQFiles(); + + // Extract maps ExtractMapsFromMpq(); - //Close MPQs - for(ArchiveSet::iterator i = gOpenArchives.begin(); i != gOpenArchives.end();++i) - (*i)->close(); - gOpenArchives.clear(); + // Close MPQs + CloseMPQFiles(); + } return 0; } diff --git a/contrib/extractor/ad.exe b/contrib/extractor/ad.exe index e9606e8e0eb6c359622315eccfc671674d28af96..1f2c45dfc5628396d14318608d799122738f8f4e 100644 GIT binary patch delta 15611 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 delta 16196 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 GetFileList() { - vector filelist; - + void GetFileListTo(vector& filelist) { mpq_hash hash = GetHashEntry("(listfile)"); uint32 blockindex = hash.blockindex; if ((blockindex == 0xFFFFFFFF) || (blockindex == 0)) - return filelist; + return; uint32 size = libmpq_file_info(&mpq_a, LIBMPQ_FILE_UNCOMPRESSED_SIZE, blockindex); char *buffer = new char[size]; @@ -79,8 +77,7 @@ public: token = strtok(NULL, seps); } - delete buffer; - return filelist; + delete[] buffer; } }; typedef std::deque ArchiveSet; diff --git a/src/game/Bag.cpp b/src/game/Bag.cpp index 9a0395928cc..4b8284c7c37 100644 --- a/src/game/Bag.cpp +++ b/src/game/Bag.cpp @@ -39,30 +39,25 @@ Bag::Bag( ): Item() Bag::~Bag() { - for(int i = 0; iAddToWorld(); - } } void Bag::RemoveFromWorld() { - for(int i = 0; iRemoveFromWorld(); - } Item::RemoveFromWorld(); } @@ -111,7 +106,7 @@ bool Bag::LoadFromDB(uint32 guid, uint64 owner_guid, QueryResult *result) return false; // cleanup bag content related item value fields (its will be filled correctly from `character_inventory`) - for (uint32 i = 0; i < GetProto()->ContainerSlots; i++) + for (int i = 0; i < MAX_BAG_SIZE; ++i) { SetUInt64Value(CONTAINER_FIELD_SLOT_1 + (i*2), 0); if (m_bagslot[i]) @@ -127,21 +122,16 @@ bool Bag::LoadFromDB(uint32 guid, uint64 owner_guid, QueryResult *result) void Bag::DeleteFromDB() { for (int i = 0; i < MAX_BAG_SIZE; i++) - { if (m_bagslot[i]) - { m_bagslot[i]->DeleteFromDB(); - } - } Item::DeleteFromDB(); } uint32 Bag::GetFreeSlots() const { - uint32 ContainerSlots=GetProto()->ContainerSlots; uint32 slots = 0; - for (uint8 i=0; i BuildCreateUpdateBlockForPlayer( data, target ); - } } // If the bag is empty returns true bool Bag::IsEmpty() const { - uint32 ContainerSlots=GetProto()->ContainerSlots; - for(uint32 i=0; i < ContainerSlots; i++) - if (m_bagslot[i]) return false; + for(uint32 i = 0; i < GetBagSize(); ++i) + if (m_bagslot[i]) + return false; return true; } uint32 Bag::GetItemCount( uint32 item, Item* eItem ) const { - uint32 ContainerSlots=GetProto()->ContainerSlots; - Item *pItem; uint32 count = 0; - for(uint32 i=0; i < ContainerSlots; i++) + for(uint32 i=0; i < GetBagSize(); ++i) { pItem = m_bagslot[i]; if( pItem && pItem != eItem && pItem->GetEntry() == item ) @@ -210,7 +196,7 @@ uint32 Bag::GetItemCount( uint32 item, Item* eItem ) const if(eItem && eItem->GetProto()->GemProperties) { - for(uint32 i=0; i < ContainerSlots; i++) + for(uint32 i=0; i < GetBagSize(); ++i) { pItem = m_bagslot[i]; if( pItem && pItem != eItem && pItem->GetProto()->Socket[0].Color ) @@ -223,29 +209,17 @@ uint32 Bag::GetItemCount( uint32 item, Item* eItem ) const uint8 Bag::GetSlotByItemGUID(uint64 guid) const { - uint32 ContainerSlots=GetProto()->ContainerSlots; - - for(uint32 i=0;iGetGUID() == guid) return i; - } return NULL_SLOT; } -// Adds an item to a bag slot -// - slot can be NULL_SLOT, in that case function searchs for a free slot -// - Return values: 0 - item not added -// 1 - item added to a free slot (and perhaps to a stack) -// 2 - item added to a stack (item should be deleted) Item* Bag::GetItemByPos( uint8 slot ) const { - ItemPrototype const *pBagProto = GetProto(); - if( pBagProto ) - { - if( slot < pBagProto->ContainerSlots ) - return m_bagslot[slot]; - } + if( slot < GetBagSize() ) + return m_bagslot[slot]; + return NULL; } diff --git a/src/game/Bag.h b/src/game/Bag.h index efb9a379be5..97f06917485 100644 --- a/src/game/Bag.h +++ b/src/game/Bag.h @@ -52,6 +52,7 @@ class Bag : public Item uint8 GetSlotByItemGUID(uint64 guid) const; bool IsEmpty() const; uint32 GetFreeSlots() const; + uint32 GetBagSize() const { return GetUInt32Value(CONTAINER_FIELD_NUM_SLOTS); } // DB operations // overwrite virtual Item::SaveToDB diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 13ee7c275a7..a051e7d893b 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -378,28 +378,28 @@ ChatCommand * ChatHandler::getCommandTable() static ChatCommand npcCommandTable[] = { - { "say", SEC_MODERATOR, false, &ChatHandler::HandleSayCommand, "", NULL }, - { "whisper", SEC_MODERATOR, false, &ChatHandler::HandleNpcWhisperCommand, "", NULL }, - { "yell", SEC_MODERATOR, false, &ChatHandler::HandleYellCommand, "", NULL }, - { "textemote", SEC_MODERATOR, false, &ChatHandler::HandleTextEmoteCommand, "", NULL }, - { "add", SEC_GAMEMASTER, false, &ChatHandler::HandleAddSpwCommand, "", NULL }, - { "delete", SEC_GAMEMASTER, false, &ChatHandler::HandleDelCreatureCommand, "", NULL }, - { "spawndist", SEC_GAMEMASTER, false, &ChatHandler::HandleSpawnDistCommand, "", NULL }, - { "spawntime", SEC_GAMEMASTER, false, &ChatHandler::HandleSpawnTimeCommand, "", NULL }, - { "factionid", SEC_GAMEMASTER, false, &ChatHandler::HandleFactionIdCommand, "", NULL }, - { "addmove", SEC_GAMEMASTER, false, &ChatHandler::HandleAddMoveCommand, "", NULL }, - { "setmovetype", SEC_GAMEMASTER, false, &ChatHandler::HandleSetMoveTypeCommand, "", NULL }, - { "move", SEC_GAMEMASTER, false, &ChatHandler::HandleMoveCreatureCommand, "", NULL }, - { "changelevel", SEC_GAMEMASTER, false, &ChatHandler::HandleChangeLevelCommand, "", NULL }, - { "setmodel", SEC_GAMEMASTER, false, &ChatHandler::HandleSetModelCommand, "", NULL }, - { "additem", SEC_GAMEMASTER, false, &ChatHandler::HandleAddVendorItemCommand, "", NULL }, - { "delitem", SEC_GAMEMASTER, false, &ChatHandler::HandleDelVendorItemCommand, "", NULL }, - { "flag", SEC_GAMEMASTER, false, &ChatHandler::HandleNPCFlagCommand, "", NULL }, - { "changeentry", SEC_ADMINISTRATOR, false, &ChatHandler::HandleChangeEntryCommand, "", NULL }, - { "info", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcInfoCommand, "", NULL }, - { "playemote", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePlayEmoteCommand, "", NULL }, + { "say", SEC_MODERATOR, false, &ChatHandler::HandleNpcSayCommand, "", NULL }, + { "textemote", SEC_MODERATOR, false, &ChatHandler::HandleNpcTextEmoteCommand, "", NULL }, + { "add", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcAddCommand, "", NULL }, + { "delete", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcDeleteCommand, "", NULL }, + { "spawndist", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcSpawnDistCommand, "", NULL }, + { "spawntime", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcSpawnTimeCommand, "", NULL }, + { "factionid", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFactionIdCommand, "", NULL }, + { "addmove", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcAddMoveCommand, "", NULL }, + { "setmovetype", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcSetMoveTypeCommand, "", NULL }, + { "move", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcMoveCommand, "", NULL }, + { "changelevel", SEC_GAMEMASTER, false, &ChatHandler::HandleChangeLevelCommand, "", NULL }, + { "setmodel", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcSetModelCommand, "", NULL }, + { "additem", SEC_GAMEMASTER, false, &ChatHandler::HandleAddVendorItemCommand, "", NULL }, + { "delitem", SEC_GAMEMASTER, false, &ChatHandler::HandleDelVendorItemCommand, "", NULL }, + { "flag", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFlagCommand, "", NULL }, + { "changeentry", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcChangeEntryCommand, "", NULL }, + { "info", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcInfoCommand, "", NULL }, + { "playemote", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcPlayEmoteCommand, "", NULL }, { "follow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFollowCommand, "", NULL }, { "unfollow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcUnFollowCommand, "", NULL }, + { "whisper", SEC_MODERATOR, false, &ChatHandler::HandleNpcWhisperCommand, "", NULL }, + { "yell", SEC_MODERATOR, false, &ChatHandler::HandleNpcYellCommand, "", NULL }, //{ TODO: fix or remove this commands { "name", SEC_GAMEMASTER, false, &ChatHandler::HandleNameCommand, "", NULL }, diff --git a/src/game/Chat.h b/src/game/Chat.h index 05cb23417f3..d1adecaec7d 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -117,10 +117,6 @@ class ChatHandler bool HandleGPSCommand(const char* args); bool HandleTaxiCheatCommand(const char* args); bool HandleWhispersCommand(const char* args); - bool HandleSayCommand(const char* args); - bool HandleNpcWhisperCommand(const char* args); - bool HandleYellCommand(const char* args); - bool HandlePlayEmoteCommand(const char* args); bool HandleSendMailCommand(const char* args); bool HandleNameTeleCommand(const char* args); bool HandleGroupTeleCommand(const char* args); @@ -131,6 +127,32 @@ class ChatHandler bool HandleEventStopCommand(const char* args); bool HandleEventInfoCommand(const char* args); + bool HandleLearnCommand(const char* args); + bool HandleLearnAllCommand(const char* args); + bool HandleLearnAllGMCommand(const char* args); + bool HandleLearnAllCraftsCommand(const char* args); + bool HandleLearnAllRecipesCommand(const char* args); + bool HandleLearnAllDefaultCommand(const char* args); + bool HandleLearnAllLangCommand(const char* args); + bool HandleLearnAllMyClassCommand(const char* args); + bool HandleLearnAllMySpellsCommand(const char* args); + bool HandleLearnAllMyTalentsCommand(const char* args); + + bool HandleLookupAreaCommand(const char* args); + bool HandleLookupCreatureCommand(const char* args); + bool HandleLookupEventCommand(const char* args); + bool HandleLookupFactionCommand(const char * args); + bool HandleLookupItemCommand(const char * args); + bool HandleLookupItemSetCommand(const char * args); + bool HandleLookupObjectCommand(const char* args); + bool HandleLookupPlayerIpCommand(const char* args); + bool HandleLookupPlayerAccountCommand(const char* args); + bool HandleLookupPlayerEmailCommand(const char* args); + bool HandleLookupQuestCommand(const char* args); + bool HandleLookupSkillCommand(const char* args); + bool HandleLookupSpellCommand(const char* args); + bool HandleLookupTeleCommand(const char * args); + bool HandleModifyKnownTitlesCommand(const char* args); bool HandleModifyHPCommand(const char* args); bool HandleModifyManaCommand(const char* args); @@ -151,9 +173,26 @@ class ChatHandler bool HandleModifyHonorCommand (const char* args); bool HandleModifyRepCommand(const char* args); bool HandleModifyArenaCommand(const char* args); - + + bool HandleNpcAddCommand(const char* args); + bool HandleNpcAddMoveCommand(const char* args); + bool HandleNpcChangeEntryCommand(const char *args); + bool HandleNpcDeleteCommand(const char* args); + bool HandleNpcFactionIdCommand(const char* args); + bool HandleNpcFlagCommand(const char* args); bool HandleNpcFollowCommand(const char* args); + bool HandleNpcInfoCommand(const char* args); + bool HandleNpcMoveCommand(const char* args); + bool HandleNpcPlayEmoteCommand(const char* args); + bool HandleNpcSayCommand(const char* args); + bool HandleNpcSetModelCommand(const char* args); + bool HandleNpcSetMoveTypeCommand(const char* args); + bool HandleNpcSpawnDistCommand(const char* args); + bool HandleNpcSpawnTimeCommand(const char* args); + bool HandleNpcTextEmoteCommand(const char* args); bool HandleNpcUnFollowCommand(const char* args); + bool HandleNpcWhisperCommand(const char* args); + bool HandleNpcYellCommand(const char* args); bool HandleReloadCommand(const char* args); bool HandleReloadAllCommand(const char* args); @@ -249,28 +288,18 @@ class ChatHandler bool HandleNameCommand(const char* args); bool HandleSubNameCommand(const char* args); bool HandleItemMoveCommand(const char* args); - bool HandleDelCreatureCommand(const char* args); bool HandleDeMorphCommand(const char* args); bool HandleAddVendorItemCommand(const char* args); bool HandleDelVendorItemCommand(const char* args); - bool HandleAddMoveCommand(const char* args); - bool HandleSetMoveTypeCommand(const char* args); bool HandleChangeLevelCommand(const char* args); bool HandleSetPoiCommand(const char* args); bool HandleEquipErrorCommand(const char* args); - bool HandleNPCFlagCommand(const char* args); - bool HandleSetModelCommand(const char* args); - bool HandleFactionIdCommand(const char* args); - bool HandleAddSpwCommand(const char* args); - bool HandleSpawnDistCommand(const char* args); - bool HandleSpawnTimeCommand(const char* args); bool HandleGoCreatureCommand(const char* args); bool HandleGoObjectCommand(const char* args); bool HandleGoTriggerCommand(const char* args); bool HandleGoGraveyardCommand(const char* args); bool HandleTargetObjectCommand(const char* args); bool HandleDelObjectCommand(const char* args); - bool HandleMoveCreatureCommand(const char* args); bool HandleMoveObjectCommand(const char* args); bool HandleTurnObjectCommand(const char* args); bool HandleObjectStateCommand(const char* args); @@ -309,32 +338,6 @@ class ChatHandler bool HandleAllowMovementCommand(const char* args); bool HandleGoCommand(const char* args); - bool HandleLearnCommand(const char* args); - bool HandleLearnAllCommand(const char* args); - bool HandleLearnAllGMCommand(const char* args); - bool HandleLearnAllCraftsCommand(const char* args); - bool HandleLearnAllRecipesCommand(const char* args); - bool HandleLearnAllDefaultCommand(const char* args); - bool HandleLearnAllLangCommand(const char* args); - bool HandleLearnAllMyClassCommand(const char* args); - bool HandleLearnAllMySpellsCommand(const char* args); - bool HandleLearnAllMyTalentsCommand(const char* args); - - bool HandleLookupAreaCommand(const char* args); - bool HandleLookupCreatureCommand(const char* args); - bool HandleLookupEventCommand(const char* args); - bool HandleLookupFactionCommand(const char * args); - bool HandleLookupItemCommand(const char * args); - bool HandleLookupItemSetCommand(const char * args); - bool HandleLookupObjectCommand(const char* args); - bool HandleLookupPlayerIpCommand(const char* args); - bool HandleLookupPlayerAccountCommand(const char* args); - bool HandleLookupPlayerEmailCommand(const char* args); - bool HandleLookupQuestCommand(const char* args); - bool HandleLookupSkillCommand(const char* args); - bool HandleLookupSpellCommand(const char* args); - bool HandleLookupTeleCommand(const char * args); - bool HandleCooldownCommand(const char* args); bool HandleUnLearnCommand(const char* args); bool HandleGetDistanceCommand(const char* args); @@ -353,8 +356,6 @@ class ChatHandler bool HandleActivateObjectCommand(const char* args); bool HandleSpawnTransportCommand(const char* args); bool HandleExploreCheatCommand(const char* args); - bool HandleTextEmoteCommand(const char* args); - bool HandleNpcInfoCommand(const char* args); bool HandleHoverCommand(const char* args); bool HandleWaterwalkCommand(const char* args); bool HandleLevelUpCommand(const char* args); @@ -421,7 +422,6 @@ class ChatHandler bool HandleRenameCommand(const char * args); bool HandleLoadPDumpCommand(const char *args); bool HandleWritePDumpCommand(const char *args); - bool HandleChangeEntryCommand(const char *args); bool HandleCastCommand(const char *args); bool HandleCastBackCommand(const char *args); bool HandleCastDistCommand(const char *args); diff --git a/src/game/Guild.h b/src/game/Guild.h index d1431c287bd..0e0e99b2cd4 100644 --- a/src/game/Guild.h +++ b/src/game/Guild.h @@ -327,6 +327,10 @@ class Guild return ((GetRankRights(rankId) & right) != GR_RIGHT_EMPTY) ? true : false; } int32 GetRank(uint32 LowGuid); + bool IsMember(uint32 LowGuid) + { + return (members.find(LowGuid) != members.end()); + } void Roster(WorldSession *session); void Query(WorldSession *session); diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index fbe03b2776c..e503db9f299 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -152,10 +152,6 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) CHECK_PACKET_SIZE(recvPacket, 1); std::string plName; - uint64 plGuid; - uint32 plGuildId; - Guild *guild; - Player *player; //sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); @@ -164,7 +160,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) if(!normalizePlayerName(plName)) return; - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); @@ -177,17 +173,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) return; } - player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()); - if(player) - { - plGuid = player->GetGUID(); - plGuildId = player->GetGuildId(); - } - else - { - plGuid = objmgr.GetPlayerGUIDByName(plName); - plGuildId = Player::GetGuildIdFromDB(plGuid); - } + uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); if(!plGuid) { @@ -201,7 +187,7 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) return; } - if(GetPlayer()->GetGuildId() != plGuildId) + if(!guild->IsMember(GUID_LOPART(plGuid))) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -487,9 +473,6 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) CHECK_PACKET_SIZE(recvPacket, 1); std::string name; - Player *newLeader; - uint64 newLeaderGUID; - uint32 newLeaderGuild; Player *oldLeader = GetPlayer(); Guild *guild; @@ -502,35 +485,25 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) guild = objmgr.GetGuildById(oldLeader->GetGuildId()); - if(!guild) + if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } - if(oldLeader->GetGUID() != guild->GetLeader()) + if( oldLeader->GetGUID() != guild->GetLeader()) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } - newLeader = ObjectAccessor::Instance().FindPlayerByName(name.c_str()); - if(newLeader) - { - newLeaderGUID = newLeader->GetGUID(); - newLeaderGuild = newLeader->GetGuildId(); - } - else - { - newLeaderGUID = objmgr.GetPlayerGUIDByName(name); - newLeaderGuild = Player::GetGuildIdFromDB(newLeaderGUID); - } - if(!newLeaderGUID) + uint64 newLeaderGUID = objmgr.GetPlayerGUIDByName(name); + if (!newLeaderGUID) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); return; } - if(oldLeader->GetGuildId() != newLeaderGuild) + if(!guild->IsMember(GUID_LOPART(newLeaderGUID))) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -588,10 +561,6 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 1); - Guild *guild; - Player *player; - uint64 plGuid; - uint32 plGuildId; std::string name,PNOTE; //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE"); @@ -601,37 +570,28 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) if(!normalizePlayerName(name)) return; - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); - if(!guild) + Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } - if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EPNOTE)) + if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EPNOTE)) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } - player = ObjectAccessor::Instance().FindPlayerByName(name.c_str()); - if(player) - { - plGuid = player->GetGUID(); - plGuildId = player->GetGuildId(); - } - else - { - plGuid = objmgr.GetPlayerGUIDByName(name); - plGuildId = Player::GetGuildIdFromDB(plGuid); - } + uint64 plGuid = objmgr.GetPlayerGUIDByName(name); - if(!plGuid) + if (!plGuid) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_FOUND); return; } - else if(GetPlayer()->GetGuildId() != plGuildId) + + if (!guild->IsMember(GUID_LOPART(plGuid))) { SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S); return; @@ -647,10 +607,6 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 1); - Guild *guild; - Player *player; - uint64 plGuid; - uint32 plGuildId; std::string plName, OFFNOTE; //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE"); @@ -660,36 +616,27 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) if(!normalizePlayerName(plName)) return; - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); - if(!guild) + Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + if (!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } - if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE)) + if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE)) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } - player = ObjectAccessor::Instance().FindPlayerByName(plName.c_str()); - if(player) - { - plGuid = player->GetGUID(); - plGuildId = player->GetGuildId(); - } - else - { - plGuid = objmgr.GetPlayerGUIDByName(plName); - plGuildId = Player::GetGuildIdFromDB(plGuid); - } + uint64 plGuid = objmgr.GetPlayerGUIDByName(plName); - if( !plGuid ) + if (!plGuid) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_FOUND); return; } - else if(GetPlayer()->GetGuildId() != plGuildId) + + if (!guild->IsMember(GUID_LOPART(plGuid))) { SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S); return; diff --git a/src/game/Language.h b/src/game/Language.h index 4e8cc8fc75f..86c66c546d6 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -697,8 +697,8 @@ enum TrinityStrings // Room for more level 4 1012-1099 not used // Level 3 (continue) - LANG_MOTD_NEW = 1100, - LANG_ACCOUNT_SETADDON = 1101, + LANG_ACCOUNT_SETADDON = 1100, + LANG_MOTD_NEW = 1101, LANG_SENDMESSAGE = 1102, LANG_EVENT_ENTRY_LIST_CONSOLE = 1103, LANG_CREATURE_ENTRY_LIST_CONSOLE = 1104, diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 3543b3b91fa..766db5d972f 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -38,7 +38,7 @@ #include "VMapFactory.h" #endif -bool ChatHandler::HandleSayCommand(const char* args) +bool ChatHandler::HandleNpcSayCommand(const char* args) { if(!*args) return false; @@ -56,7 +56,7 @@ bool ChatHandler::HandleSayCommand(const char* args) return true; } -bool ChatHandler::HandleYellCommand(const char* args) +bool ChatHandler::HandleNpcYellCommand(const char* args) { if(!*args) return false; @@ -75,7 +75,7 @@ bool ChatHandler::HandleYellCommand(const char* args) } //show text emote by creature in chat -bool ChatHandler::HandleTextEmoteCommand(const char* args) +bool ChatHandler::HandleNpcTextEmoteCommand(const char* args) { if(!*args) return false; diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index 9cc98d97169..9aff34d79f3 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -860,11 +860,11 @@ bool ChatHandler::HandleItemMoveCommand(const char* args) srcslot = (uint8)atoi(pParam1); dstslot = (uint8)atoi(pParam2); - uint16 src = ((INVENTORY_SLOT_BAG_0 << 8) | srcslot); - uint16 dst = ((INVENTORY_SLOT_BAG_0 << 8) | dstslot); - if(srcslot==dstslot) return true; + + uint16 src = ((INVENTORY_SLOT_BAG_0 << 8) | srcslot); + uint16 dst = ((INVENTORY_SLOT_BAG_0 << 8) | dstslot); m_session->GetPlayer()->SwapItem( src, dst ); @@ -872,7 +872,7 @@ bool ChatHandler::HandleItemMoveCommand(const char* args) } //add spawn of creature -bool ChatHandler::HandleAddSpwCommand(const char* args) +bool ChatHandler::HandleNpcAddCommand(const char* args) { if(!*args) return false; @@ -922,7 +922,7 @@ bool ChatHandler::HandleAddSpwCommand(const char* args) return true; } -bool ChatHandler::HandleDelCreatureCommand(const char* args) +bool ChatHandler::HandleNpcDeleteCommand(const char* args) { Creature* unit = NULL; @@ -1070,7 +1070,7 @@ bool ChatHandler::HandleTurnObjectCommand(const char* args) } //move selected creature -bool ChatHandler::HandleMoveCreatureCommand(const char* args) +bool ChatHandler::HandleNpcMoveCommand(const char* args) { uint32 lowguid = 0; @@ -1323,7 +1323,7 @@ bool ChatHandler::HandleDelVendorItemCommand(const char* args) } //add move for creature -bool ChatHandler::HandleAddMoveCommand(const char* args) +bool ChatHandler::HandleNpcAddMoveCommand(const char* args) { if(!*args) return false; @@ -1397,7 +1397,7 @@ bool ChatHandler::HandleAddMoveCommand(const char* args) * additional parameter: NODEL - so no waypoints are deleted, if you * change the movement type */ -bool ChatHandler::HandleSetMoveTypeCommand(const char* args) +bool ChatHandler::HandleNpcSetMoveTypeCommand(const char* args) { if(!*args) return false; @@ -1525,7 +1525,7 @@ bool ChatHandler::HandleSetMoveTypeCommand(const char* args) } return true; -} // HandleSetMoveTypeCommand +} // HandleNpcSetMoveTypeCommand //change level of creature or pet bool ChatHandler::HandleChangeLevelCommand(const char* args) @@ -1565,7 +1565,7 @@ bool ChatHandler::HandleChangeLevelCommand(const char* args) } //set npcflag of creature -bool ChatHandler::HandleNPCFlagCommand(const char* args) +bool ChatHandler::HandleNpcFlagCommand(const char* args) { if (!*args) return false; @@ -1591,7 +1591,7 @@ bool ChatHandler::HandleNPCFlagCommand(const char* args) } //set model of creature -bool ChatHandler::HandleSetModelCommand(const char* args) +bool ChatHandler::HandleNpcSetModelCommand(const char* args) { if (!*args) return false; @@ -1632,8 +1632,8 @@ bool ChatHandler::HandleMorphCommand(const char* args) return true; } -//set faction of creature or go -bool ChatHandler::HandleFactionIdCommand(const char* args) +//set faction of creature +bool ChatHandler::HandleNpcFactionIdCommand(const char* args) { if (!*args) return false; @@ -2138,7 +2138,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args) } //set spawn dist of creature -bool ChatHandler::HandleSpawnDistCommand(const char* args) +bool ChatHandler::HandleNpcSpawnDistCommand(const char* args) { if(!*args) return false; @@ -2176,7 +2176,7 @@ bool ChatHandler::HandleSpawnDistCommand(const char* args) return true; } -bool ChatHandler::HandleSpawnTimeCommand(const char* args) +bool ChatHandler::HandleNpcSpawnTimeCommand(const char* args) { if(!*args) return false; diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 4ab83c9fd3f..7914f10bc49 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -3656,7 +3656,7 @@ bool ChatHandler::HandleNearGraveCommand(const char* args) } //play npc emote -bool ChatHandler::HandlePlayEmoteCommand(const char* args) +bool ChatHandler::HandleNpcPlayEmoteCommand(const char* args) { uint32 emote = atoi((char*)args); @@ -5564,7 +5564,7 @@ bool ChatHandler::HandleLoadPDumpCommand(const char *args) return true; } -bool ChatHandler::HandleChangeEntryCommand(const char *args) +bool ChatHandler::HandleNpcChangeEntryCommand(const char *args) { if(!args) return false; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 02d16277476..7723cb23a3b 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -3925,10 +3925,9 @@ void Player::DurabilityLossAll(double percent, bool inventory) for(int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) if(Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i )) - if(ItemPrototype const *pBagProto = pBag->GetProto()) - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) - if(Item* pItem = GetItemByPos( i, j )) - DurabilityLoss(pItem,percent); + for(uint32 j = 0; j < pBag->GetBagSize(); j++) + if(Item* pItem = GetItemByPos( i, j )) + DurabilityLoss(pItem,percent); } } @@ -3970,10 +3969,9 @@ void Player::DurabilityPointsLossAll(int32 points, bool inventory) for(int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) if(Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i )) - if(ItemPrototype const *pBagProto = pBag->GetProto()) - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) - if(Item* pItem = GetItemByPos( i, j )) - DurabilityPointsLoss(pItem,points); + for(uint32 j = 0; j < pBag->GetBagSize(); j++) + if(Item* pItem = GetItemByPos( i, j )) + DurabilityPointsLoss(pItem,points); } } @@ -8326,24 +8324,19 @@ uint8 Player::CanUnequipItems( uint32 item, uint32 count ) const } } Bag *pBag; - ItemPrototype const *pBagProto; for(int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) { pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); if( pBag ) { - pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + pItem = GetItemByPos( i, j ); + if( pItem && pItem->GetEntry() == item ) { - pItem = GetItemByPos( i, j ); - if( pItem && pItem->GetEntry() == item ) - { - tempcount += pItem->GetCount(); - if( tempcount >= count ) - return EQUIP_ERR_OK; - } + tempcount += pItem->GetCount(); + if( tempcount >= count ) + return EQUIP_ERR_OK; } } } @@ -8434,15 +8427,11 @@ Item* Player::GetItemByGuid( uint64 guid ) const Bag *pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); if( pBag ) { - ItemPrototype const *pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) - { - Item* pItem = pBag->GetItemByPos( j ); - if( pItem && pItem->GetGUID() == guid ) - return pItem; - } + Item* pItem = pBag->GetItemByPos( j ); + if( pItem && pItem->GetGUID() == guid ) + return pItem; } } } @@ -8451,15 +8440,11 @@ Item* Player::GetItemByGuid( uint64 guid ) const Bag *pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); if( pBag ) { - ItemPrototype const *pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) - { - Item* pItem = pBag->GetItemByPos( j ); - if( pItem && pItem->GetGUID() == guid ) - return pItem; - } + Item* pItem = pBag->GetItemByPos( j ); + if( pItem && pItem->GetGUID() == guid ) + return pItem; } } } @@ -8617,17 +8602,14 @@ bool Player::HasItemCount( uint32 item, uint32 count, bool inBankAlso ) const { if(Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i )) { - if(ItemPrototype const *pBagProto = pBag->GetProto()) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + Item* pItem = GetItemByPos( i, j ); + if( pItem && pItem->GetEntry() == item ) { - Item* pItem = GetItemByPos( i, j ); - if( pItem && pItem->GetEntry() == item ) - { - tempcount += pItem->GetCount(); - if( tempcount >= count ) - return true; - } + tempcount += pItem->GetCount(); + if( tempcount >= count ) + return true; } } } @@ -8649,17 +8631,14 @@ bool Player::HasItemCount( uint32 item, uint32 count, bool inBankAlso ) const { if(Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i )) { - if(ItemPrototype const *pBagProto = pBag->GetProto()) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + Item* pItem = GetItemByPos( i, j ); + if( pItem && pItem->GetEntry() == item ) { - Item* pItem = GetItemByPos( i, j ); - if( pItem && pItem->GetEntry() == item ) - { - tempcount += pItem->GetCount(); - if( tempcount >= count ) - return true; - } + tempcount += pItem->GetCount(); + if( tempcount >= count ) + return true; } } } @@ -8737,22 +8716,15 @@ bool Player::HasItemTotemCategory( uint32 TotemCategory ) const if( pItem && IsTotemCategoryCompatiableWith(pItem->GetProto()->TotemCategory,TotemCategory )) return true; } - Bag *pBag; - ItemPrototype const *pBagProto; for(uint8 i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; ++i) { - pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); - if( pBag ) + if(Bag *pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i )) { - pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); ++j) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; ++j) - { - pItem = GetItemByPos( i, j ); - if( pItem && IsTotemCategoryCompatiableWith(pItem->GetProto()->TotemCategory,TotemCategory )) - return true; - } + pItem = GetItemByPos( i, j ); + if( pItem && IsTotemCategoryCompatiableWith(pItem->GetProto()->TotemCategory,TotemCategory )) + return true; } } } @@ -8846,7 +8818,7 @@ uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototy if( !ItemCanGoIntoBag(pProto,pBagProto) ) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { // skip specific slot already processed in first called _CanStoreItem_InSpecificSlot if(j==skip_slot) @@ -9353,23 +9325,14 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) { - Bag *pBag; - ItemPrototype const *pBagProto; - - pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); - if( pBag ) + if(Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i )) { - pBagProto = pBag->GetProto(); - - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + pItem2 = GetItemByPos( i, j ); + if (pItem2 && !pItem2->IsInTrade()) { - pItem2 = GetItemByPos( i, j ); - if (pItem2 && !pItem2->IsInTrade()) - { - inv_bags[i-INVENTORY_SLOT_BAG_START][j] = pItem2->GetCount(); - } + inv_bags[i-INVENTORY_SLOT_BAG_START][j] = pItem2->GetCount(); } } } @@ -9436,18 +9399,14 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, t ); if( pBag ) { - pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + pItem2 = GetItemByPos( t, j ); + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_bags[t-INVENTORY_SLOT_BAG_START][j] + pItem->GetCount() <= pProto->Stackable ) { - pItem2 = GetItemByPos( t, j ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_bags[t-INVENTORY_SLOT_BAG_START][j] + pItem->GetCount() <= pProto->Stackable ) - { - inv_bags[t-INVENTORY_SLOT_BAG_START][j] += pItem->GetCount(); - b_found = true; - break; - } + inv_bags[t-INVENTORY_SLOT_BAG_START][j] += pItem->GetCount(); + b_found = true; + break; } } } @@ -9486,7 +9445,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const if( pBagProto && (pBagProto->Class != ITEM_CLASS_CONTAINER || pBagProto->SubClass != ITEM_SUBCLASS_CONTAINER) && ItemCanGoIntoBag(pProto,pBagProto) ) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { if( inv_bags[t-INVENTORY_SLOT_BAG_START][j] == 0 ) { @@ -9520,17 +9479,13 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, t ); if( pBag ) { - pBagProto = pBag->GetProto(); - if( pBagProto && ItemCanGoIntoBag(pProto,pBagProto)) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + if( inv_bags[t-INVENTORY_SLOT_BAG_START][j] == 0 ) { - if( inv_bags[t-INVENTORY_SLOT_BAG_START][j] == 0 ) - { - inv_bags[t-INVENTORY_SLOT_BAG_START][j] = 1; - b_found = true; - break; - } + inv_bags[t-INVENTORY_SLOT_BAG_START][j] = 1; + b_found = true; + break; } } } @@ -10624,40 +10579,33 @@ void Player::DestroyItemCount( uint32 item, uint32 count, bool update, bool uneq } // in inventory bags - Bag *pBag; - ItemPrototype const *pBagProto; for(int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) { - pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); - if( pBag ) + if(Bag *pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i )) { - pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) + pItem = pBag->GetItemByPos(j); + if( pItem && pItem->GetEntry() == item ) { - pItem = pBag->GetItemByPos(j); - if( pItem && pItem->GetEntry() == item ) + // all items in bags can be unequipped + if( pItem->GetCount() + remcount <= count ) { - // all items in bags can be unequipped - if( pItem->GetCount() + remcount <= count ) - { - remcount += pItem->GetCount(); - DestroyItem( i, j, update ); + remcount += pItem->GetCount(); + DestroyItem( i, j, update ); - if(remcount >=count) - return; - } - else - { - pProto = pItem->GetProto(); - ItemRemovedQuestCheck( pItem->GetEntry(), count - remcount ); - pItem->SetCount( pItem->GetCount() - count + remcount ); - if( IsInWorld() && update ) - pItem->SendUpdateToPlayer( this ); - pItem->SetState(ITEM_CHANGED, this); + if(remcount >=count) return; - } + } + else + { + pProto = pItem->GetProto(); + ItemRemovedQuestCheck( pItem->GetEntry(), count - remcount ); + pItem->SetCount( pItem->GetCount() - count + remcount ); + if( IsInWorld() && update ) + pItem->SendUpdateToPlayer( this ); + pItem->SetState(ITEM_CHANGED, this); + return; } } } @@ -10719,15 +10667,11 @@ void Player::DestroyZoneLimitedItem( bool update, uint32 new_zone ) Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); if( pBag ) { - ItemPrototype const *pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) - { - Item* pItem = pBag->GetItemByPos(j); - if( pItem && pItem->IsLimitedToAnotherMapOrZone(GetMapId(),new_zone) ) - DestroyItem( i, j, update); - } + Item* pItem = pBag->GetItemByPos(j); + if( pItem && pItem->IsLimitedToAnotherMapOrZone(GetMapId(),new_zone) ) + DestroyItem( i, j, update); } } } @@ -10763,17 +10707,13 @@ void Player::DestroyConjuredItems( bool update ) Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); if( pBag ) { - ItemPrototype const *pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) - { - Item* pItem = pBag->GetItemByPos(j); - if( pItem && pItem->GetProto() && - (pItem->GetProto()->Class == ITEM_CLASS_CONSUMABLE) && - (pItem->GetProto()->Flags & ITEM_FLAGS_CONJURED) ) - DestroyItem( i, j, update); - } + Item* pItem = pBag->GetItemByPos(j); + if( pItem && pItem->GetProto() && + (pItem->GetProto()->Class == ITEM_CLASS_CONSUMABLE) && + (pItem->GetProto()->Flags & ITEM_FLAGS_CONJURED) ) + DestroyItem( i, j, update); } } } @@ -11422,15 +11362,11 @@ void Player::RemoveAllEnchantments(EnchantmentSlot slot) Bag* pBag = (Bag*)GetItemByPos( INVENTORY_SLOT_BAG_0, i ); if( pBag ) { - ItemPrototype const *pBagProto = pBag->GetProto(); - if( pBagProto ) + for(uint32 j = 0; j < pBag->GetBagSize(); j++) { - for(uint32 j = 0; j < pBagProto->ContainerSlots; j++) - { - Item* pItem = pBag->GetItemByPos(j); - if( pItem && pItem->GetEnchantmentId(slot) ) - pItem->ClearEnchantment(slot); - } + Item* pItem = pBag->GetItemByPos(j); + if( pItem && pItem->GetEnchantmentId(slot) ) + pItem->ClearEnchantment(slot); } } } @@ -15716,6 +15652,16 @@ void Player::SendAutoRepeatCancel() GetSession()->SendPacket( &data ); } +void Player::PlaySound(uint32 Sound, bool OnlySelf) +{ + WorldPacket data(SMSG_PLAY_SOUND, 4); + data << Sound; + if (OnlySelf) + GetSession()->SendPacket( &data ); + else + SendMessageToSet( &data, true ); +} + void Player::SendExplorationExperience(uint32 Area, uint32 Experience) { WorldPacket data( SMSG_EXPLORATION_EXPERIENCE, 8 ); diff --git a/src/game/Player.h b/src/game/Player.h index 4727aba1716..f8865040a9e 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1605,6 +1605,8 @@ class TRINITY_DLL_SPEC Player : public Unit void SendDelayResponse(const uint32); void SendLogXPGain(uint32 GivenXP,Unit* victim,uint32 RestXP); + //Low Level Packets + void PlaySound(uint32 Sound, bool OnlySelf); //notifiers void SendAttackSwingCantAttack(); void SendAttackSwingCancelAttack(); diff --git a/src/game/debugcmds.cpp b/src/game/debugcmds.cpp index e8deb551ebf..e98550315f9 100644 --- a/src/game/debugcmds.cpp +++ b/src/game/debugcmds.cpp @@ -319,8 +319,7 @@ bool ChatHandler::HandleGetItemState(const char* args) else { Bag *bag = (Bag*)item; - const ItemPrototype *proto = bag->GetProto(); - for (uint8 j = 0; j < proto->ContainerSlots; ++j) + for (uint8 j = 0; j < bag->GetBagSize(); ++j) { Item* item = bag->GetItemByPos(j); if (item && item->GetState() == state) @@ -416,8 +415,7 @@ bool ChatHandler::HandleGetItemState(const char* args) if(item->IsBag()) { Bag *bag = (Bag*)item; - const ItemPrototype *proto = bag->GetProto(); - for (uint8 j = 0; j < proto->ContainerSlots; ++j) + for (uint8 j = 0; j < bag->GetBagSize(); ++j) { Item* item = bag->GetItemByPos(j); if (!item) continue;