diff options
-rw-r--r-- | .hgtags | 1 | ||||
-rw-r--r-- | NEWS | 113 | ||||
-rw-r--r-- | sql/mangos.sql | 25 | ||||
-rw-r--r-- | src/game/AddonHandler.cpp | 65 | ||||
-rw-r--r-- | src/game/ArenaTeam.cpp | 29 | ||||
-rw-r--r-- | src/game/CalendarHandler.cpp | 6 | ||||
-rw-r--r-- | src/game/GossipDef.cpp | 9 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 6 | ||||
-rw-r--r-- | src/game/Opcodes.cpp | 7 | ||||
-rw-r--r-- | src/game/Opcodes.h | 9 | ||||
-rw-r--r-- | src/game/QuestDef.cpp | 13 | ||||
-rw-r--r-- | src/game/Spell.cpp | 26 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 10 | ||||
-rw-r--r-- | src/game/Unit.cpp | 8 | ||||
-rw-r--r-- | src/realmd/AuthCodes.h | 4 | ||||
-rw-r--r-- | src/shared/Database/DBCStores.cpp | 23 | ||||
-rw-r--r-- | src/shared/revision.h | 7 | ||||
-rw-r--r-- | src/shared/revision_nr.h | 2 |
18 files changed, 252 insertions, 111 deletions
diff --git a/.hgtags b/.hgtags new file mode 100644 index 00000000000..0238a759818 --- /dev/null +++ b/.hgtags @@ -0,0 +1 @@ +17d730e2e03476f2633294f0b0554654949adb85 3.0.3 Lots of Bugs @@ -4,6 +4,117 @@ Copyright (C) Trinity Core (http://www.trinitycore.org) See the COPYING file for copying conditions. +<<<<<<< HEAD:NEWS Please visit the Trinity Core website for bug reports, patch submissions, suggestions, and support: -http://www.trinitycore.org/
\ No newline at end of file +http://www.trinitycore.org/ +======= +Visit our project website for documentation, and more: +http://getmangos.com/ + +Visit our forums for support: +http://getmangos.com/community/ + +Please submit bug reports at: +http://mangos.lighthouseapp.com/ + +Version 0.13 + * Under discussion. + * Upgrade to client version 3.0.8 (build 9506). + +Version 0.12 + * Migrate from SVN to GIT. + * Implemented arena system. + * Start using Adaptive Communication Environment (ACE) framework v.5.6.6 in server network code. + * Update Visual Leak Detector lib to Version 1.9g (beta). + * Upgrade to client version 2.4.3 (build 8606). + +Version 0.11 + * Lots of improvements in the spell system. + * Now use Mersenne Twister random number generator. + * MySQL client libs updated to 5.0.56. + * Upgrade to client version 2.4.2 (build 8278). + +Version 0.10 + * master looter lot mode, + * FFA PvP zones and FFA PvP server type support, + * Guild Banks, + * unique equipped items support, including gems, + * talent inspecting, + * PostgreSql support, + * sockets library updated to v.2.2.9 version, + * 64-bit binaries building at Windows, + * Upgrade to client version 2.3.0 (build 7561). + +Version 0.9 + * recipes discovery system support, + * more auras, effects, spells, and talents working, + * players queue at login support, + * mangosd/realmd as Windows services support, + * autogeneration mangosd/realmd crash reports (Windows only), + * Visual Studio 2008 Express and Pro support, + * division Mangos DataBase to MangosDB(WorldDB) and CharactersDB. + * Upgrade to client version 2.2.3 (build 7359). + +Version 0.8 + * battleground support, + * gender specific creatures, + * game objects triggering more scripts, + * more auras, effects, spells, and talents working, + * dungeon specific data, + * localization support for data, + * vmaps for line of sight handling, + * build support for OpenBSD and FreeBSD, + * Upgrade to client version 2.1.3 (build 6898). + +Version 0.7, Codename "Eye of the Storm" + * Full rewrite of the GNU autotools based build system, in order to + smooth and clean up the build process. + * Full rewrite of the Windows build system, allowing MaNGOS to be built + from Visual C++ 2003 Toolkit, Visual C++ 2003, Visual C++ 2005. + * Upgrade to client version 2.0.12 (build 6546). + +Version 0.6, Codename "Black Dragonflight" + * MaNGOS development moved to http://sourceforge.net/projects/mangos/ + * A lots of speed improvements to data handling and data transfer have been + completed. + * Mail, auction house, profession, creature, and game object systems have seen + a lot of improvements and can be considered feature complete. Some minor bugs + still are left. + * Rest system has been finished. + * Initial pet stable support has been added. + * PvP and duel system have seen lots of improvements + * Guilds are not just a myth anymore. Coming closer to full guild support. + * Taxi and transport system is close to a fully working system. + * A lot more has been added. + +Version 0.5, Codename "Stable Master" + * Core stability improvements, lots of threading and memory usage related + bugs have been resolved. + * MySQL Database backend has been cleaned up. + * Proper support for game clients of version 1.10.2 has been added. + * Support for auras, pets, spells, talents, totems, etc. has been added + or improved. + * Cross-platform issues have been resolved, MaNGOS should now build on + more platforms, including FreeBSD. + +Version 0.1, Codename "Lightbringer" + * AI system + * Grid system + * Lots a game features working. + * Lovely optimizations for the beloved server. + +Version 0.0.3, Codename "Mango Carpet" + * Interim release, not gone public. + +Version 0.0.2, Codename "Library" + * Most data conversions working. + * Database cleanup. + * More features working. + * Many bugs fixed. + +Version 0.0.1, Codename "Endeavour" + * Data converter added. + * Build system improvements. + * Bug fixing and code cleaning. +>>>>>>> f516ed7e9487666e5ef9eaf85660191f9e50db95:NEWS diff --git a/sql/mangos.sql b/sql/mangos.sql index 453debf44dd..2c4d418f13a 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -22,7 +22,7 @@ DROP TABLE IF EXISTS `db_version`; CREATE TABLE `db_version` ( `version` varchar(120) default NULL, - `required_7199_02_mangos_spell_proc_event` bit(1) default NULL + `required_7205_01_mangos_spell_chain` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -13962,12 +13962,6 @@ INSERT INTO spell_chain VALUES (34120,56641,56641,2,0), (49051,34120,56641,3,0), (49052,49051,56641,4,0), -/*ViperSting*/ -(3034,0,3034,1,0), -(14279,3034,3034,2,0), -(14280,14279,3034,3,0), -(27018,14280,3034,4,0), -(49008,27018,3034,5,0), /*Volley*/ (1510,0,1510,1,0), (14294,1510,1510,2,0), @@ -14894,14 +14888,6 @@ INSERT INTO spell_chain VALUES (27219,11700,689,7,0), (27220,27219,689,8,0), (47857,27220,689,9,0), -/*DrainMana*/ -(5138,0,5138,1,0), -(6226,5138,5138,2,0), -(11703,6226,5138,3,0), -(11704,11703,5138,4,0), -(27221,11704,5138,5,0), -(30908,27221,5138,6,0), -(47858,30908,5138,7,0), /*DrainSoul*/ (1120,0,1120,1,0), (8288,1120,1120,2,0), @@ -15700,15 +15686,6 @@ INSERT INTO spell_chain VALUES (25431,10952,588,7,0), (48040,25431,588,8,0), (48168,48040,588,9,0), -/*ManaBurn*/ -(8129,0,8129,1,0), -(8131,8129,8129,2,0), -(10874,8131,8129,3,0), -(10875,10874,8129,4,0), -(10876,10875,8129,5,0), -(25379,10876,8129,6,0), -(25380,25379,8129,7,0), -(48128,25380,8129,8,0), /*Penance*/ (47540,0,47540,1,0), (53005,47540,47540,2,0), diff --git a/src/game/AddonHandler.cpp b/src/game/AddonHandler.cpp index 74bb4d9d6bc..37fd719253f 100644 --- a/src/game/AddonHandler.cpp +++ b/src/game/AddonHandler.cpp @@ -66,63 +66,84 @@ bool AddonHandler::BuildAddonPacket(WorldPacket *Source, WorldPacket *Target) if (Source->rpos() + 4 > Source->size()) return false; - *Source >> TempValue; //get real size of the packed structure + *Source >> TempValue; // get real size of the packed structure // empty addon packet, nothing process, can't be received from real client if(!TempValue) return false; - AddonRealSize = TempValue; //temp value because ZLIB only excepts uLongf + AddonRealSize = TempValue; // temp value because ZLIB only excepts uLongf - CurrentPosition = Source->rpos(); //get the position of the pointer in the structure + CurrentPosition = Source->rpos(); // get the position of the pointer in the structure - AddOnPacked.resize(AddonRealSize); //resize target for zlib action + AddOnPacked.resize(AddonRealSize); // resize target for zlib action if (!uncompress(const_cast<uint8*>(AddOnPacked.contents()), &AddonRealSize, const_cast<uint8*>((*Source).contents() + CurrentPosition), (*Source).size() - CurrentPosition)!= Z_OK) { Target->Initialize(SMSG_ADDON_INFO); - while(AddOnPacked.rpos() < AddOnPacked.size()) + uint32 addonsCount; + AddOnPacked >> addonsCount; // addons count? + + for(uint32 i = 0; i < addonsCount; ++i) { - std::string AddonNames; - uint8 unk6; - uint32 crc, unk7; + std::string addonName; + uint8 enabled; + uint32 crc, unk2; // check next addon data format correctness - if(AddOnPacked.rpos()+1+4+4+1 > AddOnPacked.size()) + if(AddOnPacked.rpos()+1 > AddOnPacked.size()) return false; - AddOnPacked >> AddonNames; + AddOnPacked >> addonName; // recheck next addon data format correctness - if(AddOnPacked.rpos()+4+4+1 > AddOnPacked.size()) + if(AddOnPacked.rpos()+1+4+4 > AddOnPacked.size()) return false; - AddOnPacked >> crc >> unk7 >> unk6; + AddOnPacked >> enabled >> crc >> unk2; - //sLog.outDebug("ADDON: Name:%s CRC:%x Unknown1 :%x Unknown2 :%x", AddonNames.c_str(), crc, unk7, unk6); + sLog.outDebug("ADDON: Name: %s, Enabled: 0x%x, CRC: 0x%x, Unknown2: 0x%x", addonName.c_str(), enabled, crc, unk2); - *Target << (uint8)2; + uint8 state = (enabled ? 2 : 1); + *Target << uint8(state); - uint8 unk1 = 1; - *Target << (uint8)unk1; + uint8 unk1 = (enabled ? 1 : 0); + *Target << uint8(unk1); if (unk1) { - uint8 unk2 = crc != 0x1c776d01LL; //If addon is Standard addon CRC - *Target << (uint8)unk2; + uint8 unk2 = (crc != 0x4c1c776d); // If addon is Standard addon CRC + *Target << uint8(unk2); if (unk2) Target->append(tdata, sizeof(tdata)); - *Target << (uint32)0; + *Target << uint32(0); } - uint8 unk3 = 0; - *Target << (uint8)unk3; + uint8 unk3 = (enabled ? 0 : 1); + *Target << uint8(unk3); if (unk3) { - // String, 256 + // String, 256 (null terminated?) + *Target << uint8(0); } } + + uint32 unk4; + AddOnPacked >> unk4; + + uint32 count = 0; + *Target << uint32(count); + /*for(uint32 i = 0; i < count; ++i) + { + uint32 + string (16 bytes) + string (16 bytes) + uint32 + }*/ + + if(AddOnPacked.rpos() != AddOnPacked.size()) + sLog.outDebug("packet under read!"); } else { diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index 5f1dfdb93d7..3d7b9146b02 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -304,8 +304,11 @@ void ArenaTeam::Roster(WorldSession *session) { Player *pl = NULL; + uint8 unk308 = 0; + WorldPacket data(SMSG_ARENA_TEAM_ROSTER, 100); data << uint32(GetId()); // arena team id + data << uint8(unk308); // 308 unknown value but affect packet structure data << uint32(GetMembersSize()); // members count data << uint32(GetType()); // arena team type? @@ -313,18 +316,24 @@ void ArenaTeam::Roster(WorldSession *session) { pl = objmgr.GetPlayer(itr->guid); - data << uint64(itr->guid); // guid - data << uint8((pl ? 1 : 0)); // online flag - data << itr->name; // member name + data << uint64(itr->guid); // guid + data << uint8((pl ? 1 : 0)); // online flag + data << itr->name; // member name data << uint32((itr->guid == GetCaptain() ? 0 : 1));// captain flag 0 captain 1 member - data << uint8((pl ? pl->getLevel() : 0)); // unknown, level? - data << uint8(itr->Class); // class - data << uint32(itr->games_week); // played this week - data << uint32(itr->wins_week); // wins this week - data << uint32(itr->games_season); // played this season - data << uint32(itr->wins_season); // wins this season - data << uint32(itr->personal_rating); // personal rating + data << uint8((pl ? pl->getLevel() : 0)); // unknown, level? + data << uint8(itr->Class); // class + data << uint32(itr->games_week); // played this week + data << uint32(itr->wins_week); // wins this week + data << uint32(itr->games_season); // played this season + data << uint32(itr->wins_season); // wins this season + data << uint32(itr->personal_rating); // personal rating + if(unk308) + { + data << float(0.0); // 308 unk + data << float(0.0); // 308 unk + } } + session->SendPacket(&data); sLog.outDebug("WORLD: Sent SMSG_ARENA_TEAM_ROSTER"); } diff --git a/src/game/CalendarHandler.cpp b/src/game/CalendarHandler.cpp index 6b1484bcbab..9d1171687b6 100644 --- a/src/game/CalendarHandler.cpp +++ b/src/game/CalendarHandler.cpp @@ -24,8 +24,6 @@ #include "Opcodes.h" #include "InstanceSaveMgr.h" - - void WorldSession::HandleCalendarGetCalendar(WorldPacket &recv_data) { sLog.outDebug("WORLD: CMSG_CALENDAR_GET_CALENDAR"); @@ -65,7 +63,9 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket &recv_data) data.put<uint32>(p_counter,counter); data << (uint32) 1135753200; //wtf?? (28.12.2005 12:00) - sLog.outDebug("Sending calendar"); + data << (uint32) 0; // unk counter 4 + data << (uint32) 0; // unk counter 5 + //sLog.outDebug("Sending calendar"); //data.hexlike(); SendPacket(&data); } diff --git a/src/game/GossipDef.cpp b/src/game/GossipDef.cpp index 7feeb195607..8b6c8209233 100644 --- a/src/game/GossipDef.cpp +++ b/src/game/GossipDef.cpp @@ -595,11 +595,18 @@ void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest ) data << uint32(pQuest->ReqCreatureOrGOId[iI]); } data << uint32(pQuest->ReqCreatureOrGOCount[iI]); + data << uint32(0); // added in WotLK, dunno if offset if correct + } + + for (iI = 0; iI < QUEST_OBJECTIVES_COUNT; ++iI) + { data << uint32(pQuest->ReqItemId[iI]); data << uint32(pQuest->ReqItemCount[iI]); - data << uint32(0); // added in WotLK, dunno if offset if correct } + data << uint32(0); // TODO: 5 item objective + data << uint32(0); + for (iI = 0; iI < QUEST_OBJECTIVES_COUNT; iI++) data << ObjectiveText[iI]; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 4a5c0bbdf0b..898299dc076 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -5513,11 +5513,6 @@ void ObjectMgr::SetHighestGuids() delete result; } - // pet guids are not saved to DB, set to 0 (pet guid != pet id) - m_hiPetGuid = 0; - // same for vehicles - m_hiVehicleGuid = 0; - result = CharacterDatabase.Query( "SELECT MAX(guid) FROM item_instance" ); if( result ) { @@ -5671,7 +5666,6 @@ uint32 ObjectMgr::GenerateLowGuid(HighGuid guidhigh) } return m_hiPetGuid++; case HIGHGUID_VEHICLE: - ++m_hiVehicleGuid; if(m_hiVehicleGuid>=0x00FFFFFF) { sLog.outError("Vehicle guid overflow!! Can't continue, shutting down server. "); diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 9ed1ba4496c..8cc987545eb 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -1218,4 +1218,11 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x4A3*/ { "SMSG_SERVER_BUCK_DATA_START", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x4A4*/ { "CMSG_QUERY_VEHICLE_STATUS", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x4A5*/ { "SMSG_PET_GUIDS", STATUS_NEVER, &WorldSession::Handle_ServerSide }, + /*0x4A6*/ { "SMSG_CLIENTCACHE_VERSION", STATUS_NEVER, &WorldSession::Handle_ServerSide }, + /*0x4A7*/ { "UMSG_UNKNOWN_1191", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4A8*/ { "UMSG_UNKNOWN_1192", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4A9*/ { "UMSG_UNKNOWN_1193", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4AA*/ { "UMSG_UNKNOWN_1194", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4AB*/ { "UMSG_UNKNOWN_1195", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4AC*/ { "UMSG_UNKNOWN_1196", STATUS_NEVER, &WorldSession::Handle_NULL }, }; diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 7bc3a7c0640..f4d7800d2d9 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -1226,7 +1226,14 @@ enum Opcodes SMSG_SERVER_BUCK_DATA_START = 0x4A3, CMSG_QUERY_VEHICLE_STATUS = 0x4A4, SMSG_PET_GUIDS = 0x4A5, - NUM_MSG_TYPES = 0x4A6 + SMSG_CLIENTCACHE_VERSION = 0x4A6, + UMSG_UNKNOWN_1191 = 0x4A7, + UMSG_UNKNOWN_1192 = 0x4A8, + UMSG_UNKNOWN_1193 = 0x4A9, + UMSG_UNKNOWN_1194 = 0x4AA, + UMSG_UNKNOWN_1195 = 0x4AB, + UMSG_UNKNOWN_1196 = 0x4AC, + NUM_MSG_TYPES = 0x4AD }; /// Player state diff --git a/src/game/QuestDef.cpp b/src/game/QuestDef.cpp index e56a3a4c982..42ff15e1679 100644 --- a/src/game/QuestDef.cpp +++ b/src/game/QuestDef.cpp @@ -166,18 +166,19 @@ uint32 Quest::XPValue( Player *pPlayer ) const uint32 pLevel = pPlayer->getLevel(); uint32 qLevel = QuestLevel; float fullxp = 0; - if (qLevel >= 65) + if (qLevel >= 75) fullxp = RewMoneyMaxLevel / 6.0f; - else if (qLevel == 64) + else if (qLevel == 74) fullxp = RewMoneyMaxLevel / 4.8f; - else if (qLevel == 63) + else if (qLevel == 73) fullxp = RewMoneyMaxLevel / 3.6f; - else if (qLevel == 62) + else if (qLevel == 72) fullxp = RewMoneyMaxLevel / 2.4f; - else if (qLevel == 61) + else if (qLevel == 71) fullxp = RewMoneyMaxLevel / 1.2f; - else if (qLevel > 0 && qLevel <= 60) + else if (qLevel > 0 && qLevel <= 70) fullxp = RewMoneyMaxLevel / 0.6f; + // FIXME: for <=65 need possible additional cases if( pLevel <= qLevel + 5 ) return (uint32)fullxp; diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 852c7943612..3890f97dd9c 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -189,7 +189,7 @@ bool SpellCastTargets::read ( WorldPacket * data, Unit *caster ) if(!data->readPackGUID(m_unitTargetGUID)) return false; - if( m_targetMask & ( TARGET_FLAG_OBJECT | TARGET_FLAG_OBJECT_UNK )) + if( m_targetMask & ( TARGET_FLAG_OBJECT )) if(!data->readPackGUID(m_GOTargetGUID)) return false; @@ -197,6 +197,10 @@ bool SpellCastTargets::read ( WorldPacket * data, Unit *caster ) if(!data->readPackGUID(m_itemTargetGUID)) return false; + if( m_targetMask & (TARGET_FLAG_CORPSE | TARGET_FLAG_PVP_CORPSE ) ) + if(!data->readPackGUID(m_CorpseTargetGUID)) + return false; + /*if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION ) { if(data->rpos()+4+4+4 > data->size()) @@ -209,7 +213,10 @@ bool SpellCastTargets::read ( WorldPacket * data, Unit *caster ) if( m_targetMask & (TARGET_FLAG_SOURCE_LOCATION | TARGET_FLAG_DEST_LOCATION) ) { - if(data->rpos()+4+4+4 > data->size()) + if(data->rpos()+1+4+4+4 > data->size()) + return false; + + if(!data->readPackGUID(m_unitTargetGUID)) return false; *data >> m_destX >> m_destY >> m_destZ; @@ -226,10 +233,6 @@ bool SpellCastTargets::read ( WorldPacket * data, Unit *caster ) *data >> m_strTarget; } - if( m_targetMask & (TARGET_FLAG_CORPSE | TARGET_FLAG_PVP_CORPSE ) ) - if(!data->readPackGUID(m_CorpseTargetGUID)) - return false; - // find real units/GOs Update(caster); return true; @@ -240,7 +243,7 @@ void SpellCastTargets::write ( WorldPacket * data ) *data << uint32(m_targetMask); sLog.outDebug("Spell write, target mask = %u", m_targetMask); - if( m_targetMask & ( TARGET_FLAG_UNIT | TARGET_FLAG_PVP_CORPSE | TARGET_FLAG_OBJECT | TARGET_FLAG_OBJECT_UNK | TARGET_FLAG_CORPSE | TARGET_FLAG_UNK2 ) ) + if( m_targetMask & ( TARGET_FLAG_UNIT | TARGET_FLAG_PVP_CORPSE | TARGET_FLAG_OBJECT | TARGET_FLAG_CORPSE | TARGET_FLAG_UNK2 ) ) { if(m_targetMask & TARGET_FLAG_UNIT) { @@ -249,7 +252,7 @@ void SpellCastTargets::write ( WorldPacket * data ) else *data << uint8(0); } - else if( m_targetMask & ( TARGET_FLAG_OBJECT | TARGET_FLAG_OBJECT_UNK ) ) + else if( m_targetMask & TARGET_FLAG_OBJECT ) { if(m_GOTarget) data->append(m_GOTarget->GetPackGUID()); @@ -274,7 +277,14 @@ void SpellCastTargets::write ( WorldPacket * data ) *data << m_srcX << m_srcY << m_srcZ; if( m_targetMask & TARGET_FLAG_DEST_LOCATION ) + { + if(m_unitTarget) + data->append(m_unitTarget->GetPackGUID()); + else + *data << uint8(0); + *data << m_destX << m_destY << m_destZ; + } if( m_targetMask & TARGET_FLAG_STRING ) *data << m_strTarget; diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 3172a47ca38..39ed6f6b77d 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -346,8 +346,8 @@ SpellSpecific GetSpellSpecific(uint32 spellId) if (spellInfo->Dispel == DISPEL_CURSE) return SPELL_CURSE; - // family flag 37 (only part spells have family name) - if (spellInfo->SpellFamilyFlags & 0x2000000000LL) + // Warlock (Demon Armor | Demon Skin | Fel Armor) + if (spellInfo->SpellFamilyFlags & 0x2000002000000000LL || spellInfo->SpellFamilyFlags2 & 0x00000010) return SPELL_WARLOCK_ARMOR; //seed of corruption and corruption @@ -406,12 +406,6 @@ SpellSpecific GetSpellSpecific(uint32 spellId) break; } - // only warlock armor/skin have this (in additional to family cases) - if( spellInfo->SpellVisual[0] == 130 && spellInfo->SpellIconID == 89) - { - return SPELL_WARLOCK_ARMOR; - } - // elixirs can have different families, but potion most ofc. if(SpellSpecific sp = spellmgr.GetSpellElixirSpecific(spellInfo->Id)) return sp; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index f47eb78bbf7..e6497e13505 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8040,7 +8040,7 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 break; } } - int DotTicks = 6; + int32 DotTicks = 6; if(spellProto->EffectAmplitude[x] != 0) DotTicks = DotDuration / spellProto->EffectAmplitude[x]; if(DotTicks) @@ -8524,13 +8524,13 @@ uint32 Unit::SpellHealingBonus(Unit *pVictim, SpellEntry const *spellProto, uint break; } } - int DotTicks = 6; + int32 DotTicks = 6; if(spellProto->EffectAmplitude[x] != 0) DotTicks = DotDuration / spellProto->EffectAmplitude[x]; if(DotTicks) { - DoneAdvertisedBenefit /= DotTicks; - TakenAdvertisedBenefit /= DotTicks; + DoneAdvertisedBenefit /= DotTicks*int32(stack); + TakenAdvertisedBenefit /= DotTicks*int32(stack); } } } diff --git a/src/realmd/AuthCodes.h b/src/realmd/AuthCodes.h index f322d7fea17..0a454117477 100644 --- a/src/realmd/AuthCodes.h +++ b/src/realmd/AuthCodes.h @@ -68,8 +68,8 @@ enum LoginResult // we need to stick to 1 version or half of the stuff will work for someone // others will not and opposite -// will only support WoW, WoW:TBC and WoW:WotLK 3.0.3 client build 9183... +// will only support WoW, WoW:TBC and WoW:WotLK 3.0.8 client build 9506... -#define EXPECTED_TRINITY_CLIENT_BUILD {9183, 0} +#define EXPECTED_TRINITY_CLIENT_BUILD {9506, 0} #endif diff --git a/src/shared/Database/DBCStores.cpp b/src/shared/Database/DBCStores.cpp index b9515713e8e..5d8d1720542 100644 --- a/src/shared/Database/DBCStores.cpp +++ b/src/shared/Database/DBCStores.cpp @@ -500,20 +500,15 @@ void LoadDBCStores(const std::string& dataPath) exit(1); } - // check at up-to-date DBC files (54909 is last added spell in 3.0.1) - // check at up-to-date DBC files (19162 is last added spell in abilities in 3.0.1) - // check at up-to-date DBC files (619 is last map added in 3.0.1) - // check at up-to-date DBC files (1361 is last gem property added in 3.0.1) - // check at up-to-date DBC files (2425 is last item extended cost added in 3.0.1) - // check at up-to-date DBC files (76 is last char title added in 3.0.1) - // check at up-to-date DBC files (2311 is last area added in 3.0.1) - if( !sSpellStore.LookupEntry(54909) || - !sSkillLineAbilityStore.LookupEntry(19162) || - !sMapStore.LookupEntry(619) || - !sGemPropertiesStore.LookupEntry(1361) || - !sItemExtendedCostStore.LookupEntry(2425) || - !sCharTitlesStore.LookupEntry(76) || - !sAreaStore.LookupEntry(2311) ) + // Check loaded DBC files proper version + if( !sSpellStore.LookupEntry(54909) || // last added spell in 3.0.8a + !sSpellStore.LookupEntry(49184) || // last added spell in 3.0.8a + sSpellStore.LookupEntry(49184)->RecoveryTime!=5000||// last changed spell in 3.0.8a + !sMapStore.LookupEntry(624) || // last map added in 3.0.8a + !sGemPropertiesStore.LookupEntry(1557) || // last gem property added in 3.0.8a + !sItemExtendedCostStore.LookupEntry(2589) || // last item extended cost added in 3.0.8a + !sCharTitlesStore.LookupEntry(144) || // last char title added in 3.0.8a + !sAreaStore.LookupEntry(2769) ) // last area (areaflag) added in 3.0.8a { sLog.outError("\nYou have _outdated_ DBC files. Please extract correct versions from current using client."); exit(1); diff --git a/src/shared/revision.h b/src/shared/revision.h new file mode 100644 index 00000000000..b31e2fecc8a --- /dev/null +++ b/src/shared/revision.h @@ -0,0 +1,7 @@ +#ifndef __REVISION_H__ +#define __REVISION_H__ + #define _REVISION "1119" + #define _HASH "93443aefdbe5" + #define _REVISION_DATE "*" + #define _REVISION_TIME "*" +#endif // __REVISION_H__ diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index d542e8dd61d..760e6b5108b 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7200" + #define REVISION_NR "7205" #endif // __REVISION_NR_H__ |