diff options
Diffstat (limited to 'src')
33 files changed, 154 insertions, 398 deletions
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index b63d27055d4..09bbf7955e8 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -5,7 +5,7 @@ #include "precompiled.h" #include "Config/Config.h" #include "Database/DatabaseEnv.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "ObjectMgr.h" #include "ProgressBar.h" #include "scripts/creature/mob_event_ai.h" diff --git a/src/bindings/scripts/ScriptMgr.h b/src/bindings/scripts/ScriptMgr.h index 75474cfa2b8..7d814c373da 100644 --- a/src/bindings/scripts/ScriptMgr.h +++ b/src/bindings/scripts/ScriptMgr.h @@ -10,7 +10,7 @@ #include "Common.h" #include "Platform/CompilerDefs.h" -#include "Database/DBCStructure.h" +#include "DBCStructure.h" class Player; class Creature; diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index dfd63f4b37d..c3bef0678e6 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -20,7 +20,7 @@ #include "Common.h" #include "Player.h" #include "WorldPacket.h" -#include "Database/DBCEnums.h" +#include "DBCEnums.h" #include "GameEventMgr.h" #include "ObjectMgr.h" #include "Guild.h" @@ -197,10 +197,8 @@ void AchievementMgr::SaveToDB() if(need_execute) { - CharacterDatabase.BeginTransaction (); CharacterDatabase.Execute( ssdel.str().c_str() ); CharacterDatabase.Execute( ssins.str().c_str() ); - CharacterDatabase.CommitTransaction (); } } @@ -258,12 +256,10 @@ void AchievementMgr::SaveToDB() if(need_execute_del || need_execute_ins) { - CharacterDatabase.BeginTransaction (); if(need_execute_del) CharacterDatabase.Execute( ssdel.str().c_str() ); if(need_execute_ins) CharacterDatabase.Execute( ssins.str().c_str() ); - CharacterDatabase.CommitTransaction (); } } } diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index 83a4317f601..030d053a554 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -20,9 +20,9 @@ #include "Common.h" #include "Policies/Singleton.h" -#include "Database/DBCEnums.h" -#include "Database/DBCStores.h" #include "Database/DatabaseEnv.h" +#include "DBCEnums.h" +#include "DBCStores.h" #include <map> #include <string> diff --git a/src/game/AuctionHouseMgr.cpp b/src/game/AuctionHouseMgr.cpp index 0e028b62296..f50de441b58 100644 --- a/src/game/AuctionHouseMgr.cpp +++ b/src/game/AuctionHouseMgr.cpp @@ -18,8 +18,8 @@ #include "Common.h" #include "Database/DatabaseEnv.h" -#include "Database/DBCStores.h" #include "Database/SQLStorage.h" +#include "DBCStores.h" #include "ProgressBar.h" #include "AccountMgr.h" diff --git a/src/shared/Database/DBCEnums.h b/src/game/DBCEnums.h index c5801c7b315..c5801c7b315 100644 --- a/src/shared/Database/DBCEnums.h +++ b/src/game/DBCEnums.h diff --git a/src/shared/Database/DBCStores.cpp b/src/game/DBCStores.cpp index ba61b028203..018b361616f 100644 --- a/src/shared/Database/DBCStores.cpp +++ b/src/game/DBCStores.cpp @@ -19,12 +19,11 @@ */ #include "DBCStores.h" -//#include "DataStore.h" #include "Policies/SingletonImp.h" #include "Log.h" #include "ProgressBar.h" -#include "DBCfmt.cpp" +#include "DBCfmt.h" #include <map> @@ -162,7 +161,7 @@ template<class T> inline void LoadDBC(uint32& availableDbcLocales,barGoLink& bar, StoreProblemList& errlist, DBCStorage<T>& storage, const std::string& dbc_path, const std::string& filename) { // compatibility format and C++ structure sizes - assert(DBCFile::GetFormatRecordSize(storage.GetFormat()) == sizeof(T) || LoadDBC_assert_print(DBCFile::GetFormatRecordSize(storage.GetFormat()),sizeof(T),filename)); + assert(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()) == sizeof(T) || LoadDBC_assert_print(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()),sizeof(T),filename)); std::string dbc_filename = dbc_path + filename; if(storage.Load(dbc_filename.c_str())) diff --git a/src/shared/Database/DBCStores.h b/src/game/DBCStores.h index 3e8d3280596..4cad2b106c5 100644 --- a/src/shared/Database/DBCStores.h +++ b/src/game/DBCStores.h @@ -1,8 +1,6 @@ /* * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * - * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> - * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -18,12 +16,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef DBCSTORES_H -#define DBCSTORES_H +#ifndef MANGOS_DBCSTORES_H +#define MANGOS_DBCSTORES_H #include "Common.h" -//#include "DataStore.h" -#include "dbcfile.h" +#include "Database/DBCStore.h" #include "DBCStructure.h" #include <list> @@ -61,77 +58,6 @@ uint32 GetTalentInspectBitPosInTab(uint32 talentId); uint32 GetTalentTabInspectBitSize(uint32 talentTabId); uint32 const* /*[3]*/ GetTalentTabPages(uint32 cls); -template<class T> -class DBCStorage -{ - typedef std::list<char*> StringPoolList; - public: - explicit DBCStorage(const char *f) : nCount(0), fieldCount(0), fmt(f), indexTable(NULL), m_dataTable(NULL) { } - ~DBCStorage() { Clear(); } - - T const* LookupEntry(uint32 id) const { return (id>=nCount)?NULL:indexTable[id]; } - uint32 GetNumRows() const { return nCount; } - char const* GetFormat() const { return fmt; } - uint32 GetFieldCount() const { return fieldCount; } - - bool Load(char const* fn) - { - DBCFile dbc; - // Check if load was sucessful, only then continue - if(!dbc.Load(fn, fmt)) - return false; - - fieldCount = dbc.GetCols(); - m_dataTable = (T*)dbc.AutoProduceData(fmt,nCount,(char**&)indexTable); - m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable)); - - // error in dbc file at loading if NULL - return indexTable!=NULL; - } - - bool LoadStringsFrom(char const* fn) - { - // DBC must be already loaded using Load - if(!indexTable) - return false; - - DBCFile dbc; - // Check if load was successful, only then continue - if(!dbc.Load(fn, fmt)) - return false; - - m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable)); - - return true; - } - - void Clear() - { - if (!indexTable) - return; - - delete[] ((char*)indexTable); - indexTable = NULL; - delete[] ((char*)m_dataTable); - m_dataTable = NULL; - - while(!m_stringPoolList.empty()) - { - delete[] m_stringPoolList.front(); - m_stringPoolList.pop_front(); - } - nCount = 0; - } - - private: - uint32 nCount; - uint32 fieldCount; - char const* fmt; - T** indexTable; - T* m_dataTable; - StringPoolList m_stringPoolList; -}; - extern DBCStorage <AchievementEntry> sAchievementStore; extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore; extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions @@ -220,11 +146,10 @@ extern DBCStorage <WorldMapOverlayEntry> sWorldMapOverlayStore; void LoadDBCStores(const std::string& dataPath); // script support functions -TRINITY_DLL_SPEC DBCStorage <SoundEntriesEntry> const* GetSoundEntriesStore(); -TRINITY_DLL_SPEC DBCStorage <SpellEntry> const* GetSpellStore(); -TRINITY_DLL_SPEC DBCStorage <SpellRangeEntry> const* GetSpellRangeStore(); +TRINITY_DLL_SPEC DBCStorage <SoundEntriesEntry> const* GetSoundEntriesStore(); +TRINITY_DLL_SPEC DBCStorage <SpellEntry> const* GetSpellStore(); +TRINITY_DLL_SPEC DBCStorage <SpellRangeEntry> const* GetSpellRangeStore(); TRINITY_DLL_SPEC DBCStorage <FactionEntry> const* GetFactionStore(); TRINITY_DLL_SPEC DBCStorage <ItemEntry> const* GetItemDisplayStore(); TRINITY_DLL_SPEC DBCStorage <CreatureDisplayInfoEntry> const* GetCreatureDisplayStore(); #endif - diff --git a/src/shared/Database/DBCStructure.h b/src/game/DBCStructure.h index 32f78faa509..e9370c3e4ad 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -18,8 +18,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef DBCSTRUCTURE_H -#define DBCSTRUCTURE_H +#ifndef MANGOS_DBCSTRUCTURE_H +#define MANGOS_DBCSTRUCTURE_H #include "DBCEnums.h" #include "Platform/Define.h" diff --git a/src/shared/Database/DBCfmt.cpp b/src/game/DBCfmt.h index fdaaac14f66..f7d8538bf3b 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/game/DBCfmt.h @@ -18,6 +18,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#ifndef MANGOS_DBCSFRM_H +#define MANGOS_DBCSFRM_H + const char Achievementfmt[]="niixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiixixxxxxxxxxxxxxxxxxxxi"; const char AchievementCriteriafmt[]="niiiiiiiixxxxxxxxxxxxxxxxxiixix"; const char AreaTableEntryfmt[]="iiinixxxxxissssssssssssssssxixxxxxxx"; @@ -99,3 +102,5 @@ const char VehicleSeatEntryfmt[]="niiffffffffffiiiiiifffffffiiifffiiiiiiiffiiiii const char WorldMapAreaEntryfmt[]="xinxffffix"; const char WorldSafeLocsEntryfmt[]="nifffxxxxxxxxxxxxxxxxx"; const char WorldMapOverlayEntryfmt[]="nxiiiixxxxxxxxxxx"; + +#endif
\ No newline at end of file diff --git a/src/game/HostilRefManager.cpp b/src/game/HostilRefManager.cpp index aee035ded49..4a51d54248d 100644 --- a/src/game/HostilRefManager.cpp +++ b/src/game/HostilRefManager.cpp @@ -21,7 +21,7 @@ #include "HostilRefManager.h" #include "ThreatManager.h" #include "Unit.h" -#include "Database/DBCStructure.h" +#include "DBCStructure.h" #include "SpellMgr.h" HostilRefManager::~HostilRefManager() diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 8b5c5e5faf2..09c95628921 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -29,8 +29,8 @@ #include "UpdateMask.h" #include "Unit.h" #include "Language.h" -#include "Database/DBCStores.h" #include "AuctionHouseBot.h" +#include "DBCStores.h" void MailItem::deleteItem( bool inDB ) { diff --git a/src/game/Makefile.am b/src/game/Makefile.am index 329ecdaa9cf..4c629fcf40b 100644 --- a/src/game/Makefile.am +++ b/src/game/Makefile.am @@ -380,6 +380,11 @@ libmangosgame_a_SOURCES = \ CreatureAISelector.h \ Creature.cpp \ Creature.h \ + DBCEnums.h \ + DBCfmt.h \ + DBCStores.cpp \ + DBCStores.h \ + DBCStructure.h \ debugcmds.cpp \ DestinationHolder.cpp \ DestinationHolder.h \ diff --git a/src/game/Map.h b/src/game/Map.h index bd3ca891a58..83cb1009669 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -26,7 +26,7 @@ #include "zthread/Lockable.h" #include "zthread/Mutex.h" #include "zthread/FairReadWriteLock.h" -#include "Database/DBCStructure.h" +#include "DBCStructure.h" #include "GridDefines.h" #include "Cell.h" #include "Timer.h" diff --git a/src/game/OutdoorPvPEP.h b/src/game/OutdoorPvPEP.h index 5ba4591e48d..08d31de5cf5 100644 --- a/src/game/OutdoorPvPEP.h +++ b/src/game/OutdoorPvPEP.h @@ -21,7 +21,7 @@ #include "OutdoorPvP.h" -#include "Database/DBCStructure.h" +#include "DBCStructure.h" const uint32 EP_AllianceBuffs[4] = {11413, 11414, 11415, 1386}; diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 71f45507d45..91630eda9a4 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -210,8 +210,6 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool } owner->SetPet(this, true); - AIM_Initialize(); - map->Add((Creature*)this); InitStatsForLevel(petlevel); SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, time(NULL)); @@ -314,6 +312,9 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool sLog.outDebug("New Pet has guid %u", GetGUIDLow()); + AIM_Initialize(); + map->Add((Creature*)this); + if(owner->GetTypeId() == TYPEID_PLAYER) { ((Player*)owner)->PetSpellInitialize(); @@ -1362,8 +1363,8 @@ bool Pet::learnSpell(uint32 spell_id) WorldPacket data(SMSG_PET_LEARNED_SPELL, 2); data << uint16(spell_id); ((Player*)owner)->GetSession()->SendPacket(&data); + ((Player*)owner)->PetSpellInitialize(); } - ((Player*)owner)->PetSpellInitialize(); } return true; } @@ -1603,7 +1604,8 @@ bool Pet::resetTalents(bool no_cost) m_resetTalentsCost = cost; m_resetTalentsTime = time(NULL); } - player->PetSpellInitialize(); + if(!m_loading) + player->PetSpellInitialize(); return true; } diff --git a/src/game/PetAI.cpp b/src/game/PetAI.cpp index f218818febf..3ba66bd57a0 100644 --- a/src/game/PetAI.cpp +++ b/src/game/PetAI.cpp @@ -22,7 +22,7 @@ #include "Errors.h" #include "Pet.h" #include "Player.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "Spell.h" #include "ObjectAccessor.h" #include "SpellMgr.h" diff --git a/src/game/ReputationMgr.cpp b/src/game/ReputationMgr.cpp index 0ff70201015..62b9504daff 100644 --- a/src/game/ReputationMgr.cpp +++ b/src/game/ReputationMgr.cpp @@ -17,7 +17,7 @@ */ #include "ReputationMgr.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "Player.h" #include "WorldPacket.h" @@ -444,7 +444,6 @@ void ReputationMgr::LoadFromDB(QueryResult *result) void ReputationMgr::SaveToDB() { - CharacterDatabase.BeginTransaction(); for(FactionStateList::iterator itr = m_factions.begin(); itr != m_factions.end(); ++itr) { if (itr->second.Changed) @@ -454,7 +453,6 @@ void ReputationMgr::SaveToDB() itr->second.Changed = false; } } - CharacterDatabase.CommitTransaction(); } void ReputationMgr::UpdateRankCounters( ReputationRank old_rank, ReputationRank new_rank ) diff --git a/src/game/ReputationMgr.h b/src/game/ReputationMgr.h index cb4c85fd5be..b81634119df 100644 --- a/src/game/ReputationMgr.h +++ b/src/game/ReputationMgr.h @@ -21,7 +21,7 @@ #include "Common.h" #include "SharedDefines.h" -#include "Database/DBCStructure.h" +#include "DBCStructure.h" #include <map> enum FactionFlags diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp index e15dd92149b..2fd5384d03e 100644 --- a/src/game/SpellHandler.cpp +++ b/src/game/SpellHandler.cpp @@ -19,7 +19,7 @@ */ #include "Common.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "WorldPacket.h" #include "WorldSession.h" #include "ObjectMgr.h" diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index dead7ed3cc2..36039c4c04c 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -22,7 +22,7 @@ #include "ObjectMgr.h" #include "SpellAuraDefines.h" #include "ProgressBar.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "World.h" #include "Chat.h" #include "Spell.h" diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 190059f81c4..234922fc0b4 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -25,7 +25,7 @@ // For more high level function for sSpellStore data #include "SharedDefines.h" -#include "Database/DBCStructure.h" +#include "DBCStructure.h" #include "Database/SQLStorage.h" #include "Utilities/UnorderedMap.h" diff --git a/src/game/TotemAI.cpp b/src/game/TotemAI.cpp index a8a049f9dd0..cc32d40fdae 100644 --- a/src/game/TotemAI.cpp +++ b/src/game/TotemAI.cpp @@ -21,7 +21,7 @@ #include "TotemAI.h" #include "Totem.h" #include "Creature.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "ObjectAccessor.h" #include "SpellMgr.h" diff --git a/src/game/Transports.cpp b/src/game/Transports.cpp index ea267f5df46..147f8ce39a3 100644 --- a/src/game/Transports.cpp +++ b/src/game/Transports.cpp @@ -26,7 +26,7 @@ #include "Path.h" #include "WorldPacket.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "ProgressBar.h" #include "World.h" diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 100fa5231db..c7a5d45d285 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8273,7 +8273,7 @@ Pet* Unit::GetPet() const return pet; sLog.outError("Unit::GetPet: Pet %u not exist.",GUID_LOPART(pet_guid)); - const_cast<Unit*>(this)->SetUInt64Value(UNIT_FIELD_SUMMON, 0); + //const_cast<Unit*>(this)->SetUInt64Value(UNIT_FIELD_SUMMON, 0); } return NULL; diff --git a/src/game/Unit.h b/src/game/Unit.h index 80547a7e237..b8d58110352 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -33,7 +33,7 @@ #include "FollowerRefManager.h" #include "Utilities/EventProcessor.h" #include "MotionMaster.h" -#include "Database/DBCStructure.h" +#include "DBCStructure.h" #include <list> #define WORLD_TRIGGER 12999 diff --git a/src/game/World.cpp b/src/game/World.cpp index 3a2709549e8..8aaaeec2dc4 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -42,7 +42,7 @@ #include "ObjectMgr.h" #include "SpellMgr.h" #include "Chat.h" -#include "Database/DBCStores.h" +#include "DBCStores.h" #include "LootMgr.h" #include "ItemEnchantmentMgr.h" #include "MapManager.h" diff --git a/src/shared/Database/dbcfile.h b/src/shared/Database/DBCFileLoader.h index e94417b4371..13562148dfc 100644 --- a/src/shared/Database/dbcfile.h +++ b/src/shared/Database/DBCFileLoader.h @@ -1,8 +1,6 @@ /* * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * - * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> - * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -18,8 +16,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef DBCFILE_H -#define DBCFILE_H +#ifndef DBC_FILE_LOADER_H +#define DBC_FILE_LOADER_H #include "Platform/Define.h" #include "Utilities/ByteConverter.h" #include <cassert> @@ -37,11 +35,11 @@ enum FT_LOGIC='l' //Logical (boolean) }; -class DBCFile +class DBCFileLoader { public: - DBCFile(); - ~DBCFile(); + DBCFileLoader(); + ~DBCFileLoader(); bool Load(const char *filename, const char *fmt); @@ -77,11 +75,11 @@ class DBCFile } private: - Record(DBCFile &file_, unsigned char *offset_): offset(offset_), file(file_) {} + Record(DBCFileLoader &file_, unsigned char *offset_): offset(offset_), file(file_) {} unsigned char *offset; - DBCFile &file; + DBCFileLoader &file; - friend class DBCFile; + friend class DBCFileLoader; }; @@ -107,4 +105,3 @@ class DBCFile unsigned char *stringTable; }; #endif - diff --git a/src/shared/Database/DBCStore.h b/src/shared/Database/DBCStore.h new file mode 100644 index 00000000000..523d5c5a0b3 --- /dev/null +++ b/src/shared/Database/DBCStore.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef DBCSTORE_H +#define DBCSTORE_H + +#include "DBCFileLoader.h" + +template<class T> +class DBCStorage +{ + typedef std::list<char*> StringPoolList; + public: + explicit DBCStorage(const char *f) : nCount(0), fieldCount(0), fmt(f), indexTable(NULL), m_dataTable(NULL) { } + ~DBCStorage() { Clear(); } + + T const* LookupEntry(uint32 id) const { return (id>=nCount)?NULL:indexTable[id]; } + uint32 GetNumRows() const { return nCount; } + char const* GetFormat() const { return fmt; } + uint32 GetFieldCount() const { return fieldCount; } + + bool Load(char const* fn) + { + DBCFileLoader dbc; + // Check if load was sucessful, only then continue + if(!dbc.Load(fn, fmt)) + return false; + + fieldCount = dbc.GetCols(); + m_dataTable = (T*)dbc.AutoProduceData(fmt,nCount,(char**&)indexTable); + m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable)); + + // error in dbc file at loading if NULL + return indexTable!=NULL; + } + + bool LoadStringsFrom(char const* fn) + { + // DBC must be already loaded using Load + if(!indexTable) + return false; + + DBCFileLoader dbc; + // Check if load was successful, only then continue + if(!dbc.Load(fn, fmt)) + return false; + + m_stringPoolList.push_back(dbc.AutoProduceStrings(fmt,(char*)m_dataTable)); + + return true; + } + + void Clear() + { + if (!indexTable) + return; + + delete[] ((char*)indexTable); + indexTable = NULL; + delete[] ((char*)m_dataTable); + m_dataTable = NULL; + + while(!m_stringPoolList.empty()) + { + delete[] m_stringPoolList.front(); + m_stringPoolList.pop_front(); + } + nCount = 0; + } + + private: + uint32 nCount; + uint32 fieldCount; + char const* fmt; + T** indexTable; + T* m_dataTable; + StringPoolList m_stringPoolList; +}; +#endif diff --git a/src/shared/Database/DatabaseEnv.h b/src/shared/Database/DatabaseEnv.h index 9366d1e0070..c915538276c 100644 --- a/src/shared/Database/DatabaseEnv.h +++ b/src/shared/Database/DatabaseEnv.h @@ -25,7 +25,6 @@ #include "Log.h" #include "Errors.h" -#include "Database/DBCStores.h" #include "Database/Field.h" #include "Database/QueryResult.h" diff --git a/src/shared/Database/Makefile.am b/src/shared/Database/Makefile.am index b030fca9b7e..6092bdc0e8e 100644 --- a/src/shared/Database/Makefile.am +++ b/src/shared/Database/Makefile.am @@ -29,10 +29,9 @@ AM_CPPFLAGS = $(TRINI_INCLUDES) -I$(top_builddir)/src/shared -I$(srcdir) -I$(src noinst_LIBRARIES = libmangosdatabase.a libmangosdatabase_a_SOURCES = \ - DBCStores.cpp \ - DBCStores.h \ - DBCStructure.h \ - DBCfmt.cpp \ + DBCFileLoader.cpp \ + DBCFileLoader.h \ + DBCStore.h \ Database.cpp \ Database.h \ DatabaseEnv.h \ @@ -61,6 +60,4 @@ libmangosdatabase_a_SOURCES = \ SqlDelayThread.cpp \ SqlDelayThread.h \ SqlOperations.cpp \ - SqlOperations.h \ - dbcfile.cpp \ - dbcfile.h + SqlOperations.h diff --git a/src/shared/Database/SQLStorageImpl.h b/src/shared/Database/SQLStorageImpl.h index b7927851fef..b511bdad68c 100644 --- a/src/shared/Database/SQLStorageImpl.h +++ b/src/shared/Database/SQLStorageImpl.h @@ -18,7 +18,7 @@ #include "ProgressBar.h" #include "Log.h" -#include "dbcfile.h" +#include "DBCFileLoader.h" template<class T> template<class S, class D> diff --git a/src/shared/Database/dbcfile.cpp b/src/shared/Database/dbcfile.cpp deleted file mode 100644 index 1de121bb17d..00000000000 --- a/src/shared/Database/dbcfile.cpp +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "dbcfile.h" - -DBCFile::DBCFile() -{ - data = NULL; - fieldsOffset = NULL; -} - -bool DBCFile::Load(const char *filename, const char *fmt) -{ - - uint32 header; - if(data) - { - delete [] data; - data=NULL; - } - - FILE * f=fopen(filename,"rb"); - if(!f)return false; - - if(fread(&header,4,1,f)!=1) // Number of records - return false; - - EndianConvert(header); - if(header!=0x43424457) - return false; //'WDBC' - - if(fread(&recordCount,4,1,f)!=1) // Number of records - return false; - - EndianConvert(recordCount); - - if(fread(&fieldCount,4,1,f)!=1) // Number of fields - return false; - - EndianConvert(fieldCount); - - if(fread(&recordSize,4,1,f)!=1) // Size of a record - return false; - - EndianConvert(recordSize); - - if(fread(&stringSize,4,1,f)!=1) // String size - return false; - - EndianConvert(stringSize); - - fieldsOffset = new uint32[fieldCount]; - fieldsOffset[0] = 0; - for(uint32 i = 1; i < fieldCount; i++) - { - fieldsOffset[i] = fieldsOffset[i - 1]; - if (fmt[i - 1] == 'b' || fmt[i - 1] == 'X') // byte fields - fieldsOffset[i] += 1; - else // 4 byte fields (int32/float/strings) - fieldsOffset[i] += 4; - } - - data = new unsigned char[recordSize*recordCount+stringSize]; - stringTable = data + recordSize*recordCount; - - if(fread(data,recordSize*recordCount+stringSize,1,f)!=1) - return false; - - fclose(f); - return true; -} - -DBCFile::~DBCFile() -{ - if(data) - delete [] data; - if(fieldsOffset) - delete [] fieldsOffset; -} - -DBCFile::Record DBCFile::getRecord(size_t id) -{ - assert(data); - return Record(*this, data + id*recordSize); -} - -uint32 DBCFile::GetFormatRecordSize(const char * format,int32* index_pos) -{ - uint32 recordsize = 0; - int32 i = -1; - for(uint32 x=0; format[x];++x) - switch(format[x]) - { - case FT_FLOAT: - case FT_INT: - recordsize+=4; - break; - case FT_STRING: - recordsize+=sizeof(char*); - break; - case FT_SORT: - i=x; - break; - case FT_IND: - i=x; - recordsize+=4; - break; - case FT_BYTE: - recordsize += 1; - break; - } - - if(index_pos) - *index_pos = i; - - return recordsize; -} - -char* DBCFile::AutoProduceData(const char* format, uint32& records, char**& indexTable) -{ - /* - format STRING, NA, FLOAT,NA,INT <=> - struct{ - char* field0, - float field1, - int field2 - }entry; - - this func will generate entry[rows] data; - */ - - typedef char * ptr; - if(strlen(format)!=fieldCount) - return NULL; - - //get struct size and index pos - int32 i; - uint32 recordsize=GetFormatRecordSize(format,&i); - - if(i>=0) - { - uint32 maxi=0; - //find max index - for(uint32 y=0;y<recordCount;y++) - { - uint32 ind=getRecord(y).getUInt (i); - if(ind>maxi)maxi=ind; - } - - ++maxi; - records=maxi; - indexTable=new ptr[maxi]; - memset(indexTable,0,maxi*sizeof(ptr)); - } - else - { - records = recordCount; - indexTable = new ptr[recordCount]; - } - - char* dataTable= new char[recordCount*recordsize]; - - uint32 offset=0; - - for(uint32 y =0;y<recordCount;y++) - { - if(i>=0) - { - indexTable[getRecord(y).getUInt(i)]=&dataTable[offset]; - } - else - indexTable[y]=&dataTable[offset]; - - for(uint32 x=0;x<fieldCount;x++) - { - switch(format[x]) - { - case FT_FLOAT: - *((float*)(&dataTable[offset]))=getRecord(y).getFloat(x); - offset+=4; - break; - case FT_IND: - case FT_INT: - *((uint32*)(&dataTable[offset]))=getRecord(y).getUInt(x); - offset+=4; - break; - case FT_BYTE: - *((uint8*)(&dataTable[offset]))=getRecord(y).getUInt8(x); - offset+=1; - break; - case FT_STRING: - *((char**)(&dataTable[offset]))=NULL; // will be replaces non-empty or "" strings in AutoProduceStrings - offset+=sizeof(char*); - break; - } - } - } - - return dataTable; -} - -char* DBCFile::AutoProduceStrings(const char* format, char* dataTable) -{ - if(strlen(format)!=fieldCount) - return NULL; - - char* stringPool= new char[stringSize]; - memcpy(stringPool,stringTable,stringSize); - - uint32 offset=0; - - for(uint32 y =0;y<recordCount;y++) - { - for(uint32 x=0;x<fieldCount;x++) - switch(format[x]) - { - case FT_FLOAT: - case FT_IND: - case FT_INT: - offset+=4; - break; - case FT_BYTE: - offset+=1; - break; - case FT_STRING: - // fill only not filled entries - char** slot = (char**)(&dataTable[offset]); - if(!*slot || !**slot) - { - const char * st = getRecord(y).getString(x); - *slot=stringPool+(st-(const char*)stringTable); - } - offset+=sizeof(char*); - break; - } - } - - return stringPool; -} - |