From 03c65f5a75bdbec91b4121110c0184b0f1dd2ddc Mon Sep 17 00:00:00 2001 From: NoFantasy Date: Wed, 16 Dec 2009 11:11:17 +0100 Subject: [PATCH 01/13] [8998] Allow pet guid to have gossip options like creature guid. Signed-off-by: NoFantasy --- src/game/NPCHandler.cpp | 3 ++- src/shared/revision_nr.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/game/NPCHandler.cpp b/src/game/NPCHandler.cpp index 80a049303..a489f8bb5 100644 --- a/src/game/NPCHandler.cpp +++ b/src/game/NPCHandler.cpp @@ -306,7 +306,8 @@ void WorldSession::HandleGossipSelectOptionOpcode( WorldPacket & recv_data ) // TODO: determine if scriptCall is needed for GO and also if scriptCall can be same as current, with modified argument WorldObject* - if (IS_CREATURE_GUID(guid)) + // can vehicle have gossip? If so, need check for this also. + if (IS_CREATURE_OR_PET_GUID(guid)) { Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 221acd420..c8d462a23 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 "8997" + #define REVISION_NR "8998" #endif // __REVISION_NR_H__ From 562ad128d31969a74a0cf6c2b5a0a1506df3b667 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 16 Dec 2009 13:56:57 +0300 Subject: [PATCH 02/13] [8999] Make creature wild summoned by item 49040 This make it usable by other players, not only owner. Also sort summon types by value in switch. --- src/game/SpellEffects.cpp | 40 ++++++++++++++++++--------------------- src/shared/revision_nr.h | 2 +- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index db710d714..5ea7e012f 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -3414,16 +3414,15 @@ void Spell::EffectSummonType(uint32 i) { switch(summon_prop->Type) { - case SUMMON_PROP_TYPE_SIEGE_VEH: - case SUMMON_PROP_TYPE_DRAKE_VEH: + case SUMMON_PROP_TYPE_OTHER: { - // TODO - // EffectSummonVehicle(i); - break; - } - case SUMMON_PROP_TYPE_TOTEM: - { - EffectSummonTotem(i, summon_prop->Slot); + // those are classical totems - effectbasepoints is their hp and not summon ammount! + //SUMMON_TYPE_TOTEM = 121: 23035, battlestands + //SUMMON_TYPE_TOTEM2 = 647: 52893, Anti-Magic Zone (npc used) + if(prop_id == 121 || prop_id == 647) + EffectSummonTotem(i); + else + EffectSummonWild(i, summon_prop->FactionId); break; } case SUMMON_PROP_TYPE_SUMMON: @@ -3441,25 +3440,22 @@ void Spell::EffectSummonType(uint32 i) EffectSummonGuardian(i, summon_prop->FactionId); break; } + case SUMMON_PROP_TYPE_TOTEM: + EffectSummonTotem(i, summon_prop->Slot); + break; case SUMMON_PROP_TYPE_CRITTER: - case SUMMON_PROP_TYPE_REPAIR_BOT: - { EffectSummonCritter(i, summon_prop->FactionId); break; - } - case SUMMON_PROP_TYPE_OTHER: case SUMMON_PROP_TYPE_PHASING: case SUMMON_PROP_TYPE_LIGHTWELL: - { - // those are classical totems - effectbasepoints is their hp and not summon ammount! - //SUMMON_TYPE_TOTEM = 121: 23035, battlestands - //SUMMON_TYPE_TOTEM2 = 647: 52893, Anti-Magic Zone (npc used) - if(prop_id == 121 || prop_id == 647) - EffectSummonTotem(i); - else - EffectSummonWild(i, summon_prop->FactionId); + case SUMMON_PROP_TYPE_REPAIR_BOT: + EffectSummonWild(i, summon_prop->FactionId); + break; + case SUMMON_PROP_TYPE_SIEGE_VEH: + case SUMMON_PROP_TYPE_DRAKE_VEH: + // TODO + // EffectSummonVehicle(i); break; - } default: sLog.outError("EffectSummonType: Unhandled summon type %u", summon_prop->Type); break; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c8d462a23..e5cdc3982 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 "8998" + #define REVISION_NR "8999" #endif // __REVISION_NR_H__ From 716aad6aaad23fa4661025b5ea5474e374b40ebc Mon Sep 17 00:00:00 2001 From: SilverIce Date: Wed, 16 Dec 2009 14:13:30 +0300 Subject: [PATCH 03/13] [9000] Reset time in more proper way. Signed-off-by: VladimirMangos --- src/game/MapManager.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp index 94055bfb5..9799592e7 100644 --- a/src/game/MapManager.cpp +++ b/src/game/MapManager.cpp @@ -268,7 +268,7 @@ MapManager::Update(uint32 diff) for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter) (*iter)->Update(i_timer.GetCurrent()); - i_timer.SetCurrent(0); + i_timer.Reset(); } void MapManager::DoDelayedMovesAndRemoves() diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index e5cdc3982..1d5803f7e 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 "8999" + #define REVISION_NR "9000" #endif // __REVISION_NR_H__ From 11f0086b7774ab768e711f2eb52f7a3d0dfd2319 Mon Sep 17 00:00:00 2001 From: Splinter Date: Wed, 16 Dec 2009 15:54:32 +0300 Subject: [PATCH 04/13] [9001] Add internal cooldown for for item 42987 effect. Signed-off-by: VladimirMangos --- sql/mangos.sql | 3 ++- sql/updates/9001_01_mangos_spell_proc_event.sql | 5 +++++ sql/updates/Makefile.am | 2 ++ src/shared/revision_nr.h | 2 +- src/shared/revision_sql.h | 2 +- 5 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 sql/updates/9001_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 9468feb9d..8fef3d1b8 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -24,7 +24,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, `cache_id` int(10) default '0', - `required_8996_01_mangos_spell_proc_event` bit(1) default NULL + `required_9001_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -18428,6 +18428,7 @@ INSERT INTO `spell_proc_event` VALUES (56822, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (56834, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (56835, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(57345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (57352, 0x00000000, 0, 0x00000001, 0x00000040, 0x00000000, 0x00010154, 0x00000003, 0.000000, 0.000000, 45), (57470, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (57472, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), diff --git a/sql/updates/9001_01_mangos_spell_proc_event.sql b/sql/updates/9001_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..14099fe51 --- /dev/null +++ b/sql/updates/9001_01_mangos_spell_proc_event.sql @@ -0,0 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_8996_01_mangos_spell_proc_event required_9001_01_mangos_spell_proc_event bit; + +DELETE FROM spell_proc_event WHERE entry=57345; +INSERT INTO spell_proc_event VALUES +(57345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 4a0300e6c..86c94e92b 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -208,6 +208,7 @@ pkgdata_DATA = \ 8993_01_mangos_spell_proc_event.sql \ 8995_01_mangos_spell_proc_event.sql \ 8996_01_mangos_spell_proc_event.sql \ + 9001_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -396,4 +397,5 @@ EXTRA_DIST = \ 8993_01_mangos_spell_proc_event.sql \ 8995_01_mangos_spell_proc_event.sql \ 8996_01_mangos_spell_proc_event.sql \ + 9001_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1d5803f7e..a67686243 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 "9000" + #define REVISION_NR "9001" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index ac8865c84..3ec5c47db 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_8874_01_characters_character_skills" - #define REVISION_DB_MANGOS "required_8996_01_mangos_spell_proc_event" + #define REVISION_DB_MANGOS "required_9001_01_mangos_spell_proc_event" #define REVISION_DB_REALMD "required_8728_01_realmd_account" #endif // __REVISION_SQL_H__ From a204201e819bdba9a1db9e4215502fb938d00430 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 16 Dec 2009 16:08:51 +0300 Subject: [PATCH 05/13] [9002] Make 8923_01_mangos_gossip.sql more propertly work if rename target table exist by some reason. --- sql/updates/8923_01_mangos_gossip.sql | 1 + src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/updates/8923_01_mangos_gossip.sql b/sql/updates/8923_01_mangos_gossip.sql index 896c66def..b49541912 100644 --- a/sql/updates/8923_01_mangos_gossip.sql +++ b/sql/updates/8923_01_mangos_gossip.sql @@ -66,6 +66,7 @@ ALTER TABLE locales_npc_option ADD menu_id smallint(6) unsigned NOT NULL default ALTER TABLE locales_npc_option DROP PRIMARY KEY; ALTER TABLE locales_npc_option ADD PRIMARY KEY (menu_id, id); +DROP TABLE IF EXISTS locales_gossip_menu_option; RENAME TABLE locales_npc_option TO locales_gossip_menu_option; DROP TABLE IF EXISTS npc_option; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a67686243..813a64e49 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 "9001" + #define REVISION_NR "9002" #endif // __REVISION_NR_H__ From 3226d35f0352ae501e28c46550253f1cf29f7262 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 16 Dec 2009 16:36:34 +0300 Subject: [PATCH 06/13] [9003] Revert "[9000] Reset time in more proper way." This reverts commit 8e8f7710e8baf29196256c6e0afcce1b7d3f3671. Main reason: unexpected work in debug with breakpoints. Also have other reports with strange effects. --- src/game/MapManager.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp index 9799592e7..94055bfb5 100644 --- a/src/game/MapManager.cpp +++ b/src/game/MapManager.cpp @@ -268,7 +268,7 @@ MapManager::Update(uint32 diff) for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter) (*iter)->Update(i_timer.GetCurrent()); - i_timer.Reset(); + i_timer.SetCurrent(0); } void MapManager::DoDelayedMovesAndRemoves() diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 813a64e49..5ebc8c063 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 "9002" + #define REVISION_NR "9003" #endif // __REVISION_NR_H__ From ffd713cc550836928a1059c7b19c7cc26c9c3139 Mon Sep 17 00:00:00 2001 From: Splinter Date: Wed, 16 Dec 2009 17:09:43 +0300 Subject: [PATCH 07/13] [9004] Drop dead code case Signed-off-by: VladimirMangos --- src/game/Unit.cpp | 10 ---------- src/shared/revision_nr.h | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 5bcac4181..df4fc9efc 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -7638,16 +7638,6 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, uint32 damage, Aura case 6953: // Warbringer RemoveAurasAtMechanicImmunity(IMMUNE_TO_ROOT_AND_SNARE_MASK,0,true); return true; - case 8152: // Serendipity - { - // if heal your target over maximum health - if (pVictim->GetHealth() + damage < pVictim->GetMaxHealth()) - return false; - int32 cost = procSpell->manaCost + procSpell->ManaCostPercentage * GetCreateMana() / 100; - int32 basepoints0 = cost * triggeredByAura->GetModifier()->m_amount/100; - CastCustomSpell(this, 47762, &basepoints0, NULL, NULL, true, NULL, triggeredByAura); - return true; - } } // not processed diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5ebc8c063..8a470704c 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 "9003" + #define REVISION_NR "9004" #endif // __REVISION_NR_H__ From 7ee3d3a22c176ed24f2063835ed37dd66e44815d Mon Sep 17 00:00:00 2001 From: laise Date: Wed, 16 Dec 2009 17:31:29 +0300 Subject: [PATCH 08/13] [9005] Add internal cooldown for item 40373 effect. Thanks to Splinter for cleanup query. Signed-off-by: VladimirMangos --- sql/mangos.sql | 3 ++- sql/updates/9005_01_mangos_spell_proc_event.sql | 5 +++++ sql/updates/Makefile.am | 2 ++ src/shared/revision_nr.h | 2 +- src/shared/revision_sql.h | 2 +- 5 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 sql/updates/9005_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 8fef3d1b8..0c0a533a8 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -24,7 +24,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, `cache_id` int(10) default '0', - `required_9001_01_mangos_spell_proc_event` bit(1) default NULL + `required_9005_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -18461,6 +18461,7 @@ INSERT INTO `spell_proc_event` VALUES (60172, 0x00000000, 5, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), (60436, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), (60493, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60503, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), diff --git a/sql/updates/9005_01_mangos_spell_proc_event.sql b/sql/updates/9005_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..fb32bc61b --- /dev/null +++ b/sql/updates/9005_01_mangos_spell_proc_event.sql @@ -0,0 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_9001_01_mangos_spell_proc_event required_9005_01_mangos_spell_proc_event bit; + +DELETE FROM spell_proc_event WHERE entry = '60487'; +INSERT INTO spell_proc_event VALUES +(60487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 86c94e92b..ed7a30116 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -209,6 +209,7 @@ pkgdata_DATA = \ 8995_01_mangos_spell_proc_event.sql \ 8996_01_mangos_spell_proc_event.sql \ 9001_01_mangos_spell_proc_event.sql \ + 9005_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -398,4 +399,5 @@ EXTRA_DIST = \ 8995_01_mangos_spell_proc_event.sql \ 8996_01_mangos_spell_proc_event.sql \ 9001_01_mangos_spell_proc_event.sql \ + 9005_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8a470704c..2f9e0166c 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 "9004" + #define REVISION_NR "9005" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index 3ec5c47db..0f4bd2ddb 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_8874_01_characters_character_skills" - #define REVISION_DB_MANGOS "required_9001_01_mangos_spell_proc_event" + #define REVISION_DB_MANGOS "required_9005_01_mangos_spell_proc_event" #define REVISION_DB_REALMD "required_8728_01_realmd_account" #endif // __REVISION_SQL_H__ From a13fa7f8735a9c6ea7c1ffca86bcac42005bb60b Mon Sep 17 00:00:00 2001 From: freghar Date: Wed, 16 Dec 2009 15:31:05 +0100 Subject: [PATCH 09/13] [9006] Trailing whitespace cleaning Sorry for a (bit) delayed commit. Signed-off-by: freghar --- sql/mangos.sql | 2 +- sql/updates/8253_01_mangos_spell_chain.sql | 2 +- sql/updates/8253_02_mangos_spell_proc_event.sql | 12 ++++++------ sql/updates/8254_01_mangos_spell_proc_event.sql | 2 +- .../8294_01_mangos_playercreateinfo_action.sql | 2 +- sql/updates/8392_01_mangos_spell_proc_event.sql | 6 +++--- sql/updates/8392_02_mangos_spell_chain.sql | 2 +- sql/updates/8394_01_mangos_spell_proc_event.sql | 6 +++--- sql/updates/8402_01_characters_guild_eventlog.sql | 2 +- .../8402_02_characters_guild_bank_eventlog.sql | 2 +- sql/updates/8487_01_mangos_spell_bonus_data.sql | 2 +- .../8803_02_mangos_playercreateinfo_action.sql | 2 +- sql/updates/8992_01_mangos_spell_proc_event.sql | 2 +- src/game/Mail.cpp | 2 +- src/game/PoolManager.cpp | 2 +- src/game/Spell.cpp | 2 +- src/game/SpellAuras.cpp | 6 +++--- src/game/Unit.cpp | 8 ++++---- src/shared/revision_nr.h | 2 +- 19 files changed, 33 insertions(+), 33 deletions(-) diff --git a/sql/mangos.sql b/sql/mangos.sql index 0c0a533a8..b75677ffe 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -14085,7 +14085,7 @@ INSERT INTO `spell_bonus_data` VALUES (31803, 0, 0.0156, 0.03, 'Paladin - Holy Vengeance'), (2812, 0.07, 0, 0.07, 'Paladin - Holy Wrath'), (54158, 0.25, 0, 0, 'Paladin - Judgement'), -(31898, 0.18, 0, 0.11, 'Paladin - Judgement of Blood Enemy'), +(31898, 0.18, 0, 0.11, 'Paladin - Judgement of Blood Enemy'), (32220, 0.0594, 0, 0.0363,'Paladin - Judgement of Blood Self'), (20467, 0.25, 0, 0.16, 'Paladin - Judgement of Command'), (53733, 0, 0, 0, 'Paladin - Judgement of Corruption'), diff --git a/sql/updates/8253_01_mangos_spell_chain.sql b/sql/updates/8253_01_mangos_spell_chain.sql index 207a22381..54bfea2c5 100644 --- a/sql/updates/8253_01_mangos_spell_chain.sql +++ b/sql/updates/8253_01_mangos_spell_chain.sql @@ -1,6 +1,6 @@ ALTER TABLE db_version CHANGE COLUMN required_8251_03_mangos_spell_proc_event required_8253_01_mangos_spell_chain bit; -DELETE FROM `spell_chain` WHERE `spell_id` IN (32385,32387,32392,32393,32394,51528,51529,51530,51531,51532); +DELETE FROM `spell_chain` WHERE `spell_id` IN (32385,32387,32392,32393,32394,51528,51529,51530,51531,51532); INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES /*Shadow embrace*/ (32385,0,32385,1,0), diff --git a/sql/updates/8253_02_mangos_spell_proc_event.sql b/sql/updates/8253_02_mangos_spell_proc_event.sql index 8e3472cbc..6d490be0b 100644 --- a/sql/updates/8253_02_mangos_spell_proc_event.sql +++ b/sql/updates/8253_02_mangos_spell_proc_event.sql @@ -6,16 +6,16 @@ INSERT INTO spell_proc_event VALUES (60442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); /*Seal of wisdom*/ -DELETE FROM `spell_proc_event` WHERE `entry` IN (20166); +DELETE FROM `spell_proc_event` WHERE `entry` IN (20166); INSERT INTO `spell_proc_event` VALUES -(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,15.000000, 0.000000, 0); +(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,15.000000, 0.000000, 0); /*Shadow embrace*/ -DELETE FROM `spell_proc_event` WHERE `entry` IN (32385); +DELETE FROM `spell_proc_event` WHERE `entry` IN (32385); INSERT INTO `spell_proc_event` VALUES -(32385, 0x00000000, 5, 0x00000001, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); +(32385, 0x00000000, 5, 0x00000001, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); /*Maelstrom Weapon*/ -DELETE FROM `spell_proc_event` WHERE `entry` IN (51528); +DELETE FROM `spell_proc_event` WHERE `entry` IN (51528); INSERT INTO `spell_proc_event` VALUES -(51528, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,12.500000, 0.000000, 0); +(51528, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,12.500000, 0.000000, 0); diff --git a/sql/updates/8254_01_mangos_spell_proc_event.sql b/sql/updates/8254_01_mangos_spell_proc_event.sql index 9be248781..66d33f707 100644 --- a/sql/updates/8254_01_mangos_spell_proc_event.sql +++ b/sql/updates/8254_01_mangos_spell_proc_event.sql @@ -1,6 +1,6 @@ ALTER TABLE db_version CHANGE COLUMN required_8253_02_mangos_spell_proc_event required_8254_01_mangos_spell_proc_event bit; -DELETE FROM `spell_proc_event` WHERE `entry` IN (55747,60436); +DELETE FROM `spell_proc_event` WHERE `entry` IN (55747,60436); INSERT INTO `spell_proc_event` VALUES (55747, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60436, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); diff --git a/sql/updates/8294_01_mangos_playercreateinfo_action.sql b/sql/updates/8294_01_mangos_playercreateinfo_action.sql index 802f3ab4f..ed58c65e7 100644 --- a/sql/updates/8294_01_mangos_playercreateinfo_action.sql +++ b/sql/updates/8294_01_mangos_playercreateinfo_action.sql @@ -41,7 +41,7 @@ INSERT INTO playercreateinfo_action VALUES DELETE FROM playercreateinfo_action WHERE race=2 AND class=3 AND button IN (4,9); INSERT INTO playercreateinfo_action VALUES (2,3,9,20572,0); --- Moved Berserking to correct action bar location for Non-Heroic Troll classes +-- Moved Berserking to correct action bar location for Non-Heroic Troll classes DELETE FROM playercreateinfo_action WHERE race=8 AND class IN (3,5,7,8) AND button IN (3,76); INSERT INTO playercreateinfo_action VALUES (8,3,3,20554,0), diff --git a/sql/updates/8392_01_mangos_spell_proc_event.sql b/sql/updates/8392_01_mangos_spell_proc_event.sql index 39a7cc17b..01e3e2633 100644 --- a/sql/updates/8392_01_mangos_spell_proc_event.sql +++ b/sql/updates/8392_01_mangos_spell_proc_event.sql @@ -1,5 +1,5 @@ ALTER TABLE db_version CHANGE COLUMN required_8377_01_mangos_spell_area required_8392_01_mangos_spell_proc_event bit; -DELETE FROM `spell_proc_event` WHERE `entry` IN (47569); -INSERT INTO `spell_proc_event` VALUES -(47569, 0x00000000, 6, 0x00004000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0); +DELETE FROM `spell_proc_event` WHERE `entry` IN (47569); +INSERT INTO `spell_proc_event` VALUES +(47569, 0x00000000, 6, 0x00004000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0); diff --git a/sql/updates/8392_02_mangos_spell_chain.sql b/sql/updates/8392_02_mangos_spell_chain.sql index efab4d1ea..b42519c95 100644 --- a/sql/updates/8392_02_mangos_spell_chain.sql +++ b/sql/updates/8392_02_mangos_spell_chain.sql @@ -1,6 +1,6 @@ ALTER TABLE db_version CHANGE COLUMN required_8392_01_mangos_spell_proc_event required_8392_02_mangos_spell_chain bit; -DELETE FROM `spell_chain` WHERE `spell_id` IN (47569,47570); +DELETE FROM `spell_chain` WHERE `spell_id` IN (47569,47570); INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES /*Improved Shadowform*/ (47569,0,47569,1,0), diff --git a/sql/updates/8394_01_mangos_spell_proc_event.sql b/sql/updates/8394_01_mangos_spell_proc_event.sql index 73afa3da5..41fbcd0f2 100644 --- a/sql/updates/8394_01_mangos_spell_proc_event.sql +++ b/sql/updates/8394_01_mangos_spell_proc_event.sql @@ -1,5 +1,5 @@ ALTER TABLE db_version CHANGE COLUMN required_8392_02_mangos_spell_chain required_8394_01_mangos_spell_proc_event bit; -DELETE FROM `spell_proc_event` WHERE `entry` IN (54646); -INSERT INTO `spell_proc_event` VALUES -(54646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00015400, 0x00000002, 0.000000, 0.000000, 0); +DELETE FROM `spell_proc_event` WHERE `entry` IN (54646); +INSERT INTO `spell_proc_event` VALUES +(54646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00015400, 0x00000002, 0.000000, 0.000000, 0); diff --git a/sql/updates/8402_01_characters_guild_eventlog.sql b/sql/updates/8402_01_characters_guild_eventlog.sql index 107639d39..10ee6c9f4 100644 --- a/sql/updates/8402_01_characters_guild_eventlog.sql +++ b/sql/updates/8402_01_characters_guild_eventlog.sql @@ -15,6 +15,6 @@ CREATE TABLE `guild_eventlog` ( PRIMARY KEY (`guildid`, `LogGuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'Guild Eventlog'; --- The reason i decided for such dramatic change is that old guild_eventlog table didn't have Primary key and +-- The reason i decided for such dramatic change is that old guild_eventlog table didn't have Primary key and -- used LogGuids from 0 to infinity -- New system uses LogGuids from 0 to number defined in config. diff --git a/sql/updates/8402_02_characters_guild_bank_eventlog.sql b/sql/updates/8402_02_characters_guild_bank_eventlog.sql index 0cee36c4c..4782111a2 100644 --- a/sql/updates/8402_02_characters_guild_bank_eventlog.sql +++ b/sql/updates/8402_02_characters_guild_bank_eventlog.sql @@ -18,6 +18,6 @@ CREATE TABLE `guild_bank_eventlog` ( KEY `guildid_key` (`guildid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; --- The reason i decided for such dramatic change is that old guild_bank_eventlog table used `TabId` = 0 for Money events and +-- The reason i decided for such dramatic change is that old guild_bank_eventlog table used `TabId` = 0 for Money events and -- used `LogGuid` from 0 to infinity -- New system uses `LogGuid` from 0 to number defined in config. diff --git a/sql/updates/8487_01_mangos_spell_bonus_data.sql b/sql/updates/8487_01_mangos_spell_bonus_data.sql index 880f4773b..ecd2e7fac 100644 --- a/sql/updates/8487_01_mangos_spell_bonus_data.sql +++ b/sql/updates/8487_01_mangos_spell_bonus_data.sql @@ -12,7 +12,7 @@ INSERT INTO `spell_bonus_data` VALUES (53733, 0, 0, 0, "Paladin - Judgement of Corruption"), (31893, 0, 0, 0, "Paladin - Seal of Blood Proc Enemy"), (32221, 0, 0, 0, "Paladin - Seal of Blood Proc Self"), -(31898, 0.18, 0, 0.11, "Paladin - Judgement of Blood Enemy"), +(31898, 0.18, 0, 0.11, "Paladin - Judgement of Blood Enemy"), (32220, 0.0594, 0, 0.0363, "Paladin - Judgement of Blood Self"), (53719, 0, 0, 0, "Paladin - Seal of the Martyr Proc Enemy"), (53718, 0, 0, 0, "Paladin - Seal of the Martyr Proc Self"), diff --git a/sql/updates/8803_02_mangos_playercreateinfo_action.sql b/sql/updates/8803_02_mangos_playercreateinfo_action.sql index 077d4d29d..de2ce0d01 100644 --- a/sql/updates/8803_02_mangos_playercreateinfo_action.sql +++ b/sql/updates/8803_02_mangos_playercreateinfo_action.sql @@ -1,5 +1,5 @@ ALTER TABLE db_version CHANGE COLUMN required_8803_01_mangos_playercreateinfo_spell required_8803_02_mangos_playercreateinfo_action bit; -UPDATE `playercreateinfo_action` +UPDATE `playercreateinfo_action` SET `action` = 26297 WHERE `action` IN (20554,26296,50621) AND `type` = 0; diff --git a/sql/updates/8992_01_mangos_spell_proc_event.sql b/sql/updates/8992_01_mangos_spell_proc_event.sql index 0a1c795b2..a049ac01b 100644 --- a/sql/updates/8992_01_mangos_spell_proc_event.sql +++ b/sql/updates/8992_01_mangos_spell_proc_event.sql @@ -7,7 +7,7 @@ INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `Spell /*Frenzy*/ DELETE FROM `spell_proc_event` WHERE `entry` IN (20784); -INSERT INTO `spell_proc_event` (`entry` ,`SchoolMask` ,`SpellFamilyName` ,`SpellFamilyMask0` ,`SpellFamilyMask1` ,`SpellFamilyMask2` ,`procFlags` ,`procEx` ,`ppmRate` ,`CustomChance` ,`Cooldown`)VALUES +INSERT INTO `spell_proc_event` (`entry` ,`SchoolMask` ,`SpellFamilyName` ,`SpellFamilyMask0` ,`SpellFamilyMask1` ,`SpellFamilyMask2` ,`procFlags` ,`procEx` ,`ppmRate` ,`CustomChance` ,`Cooldown`)VALUES (20784, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); /*Master Tactician*/ diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 290341432..553a2ebba 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -914,7 +914,7 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 void MailDraft::SendMailTo(MailReceiver const& receiver, MailSender const& sender, MailCheckMask checked, uint32 deliver_delay) { Player* pReceiver = receiver.GetPlayer(); // can be NULL - + if (pReceiver) prepareItems(pReceiver); // generate mail template items diff --git a/src/game/PoolManager.cpp b/src/game/PoolManager.cpp index f1c41ca11..28093b14a 100644 --- a/src/game/PoolManager.cpp +++ b/src/game/PoolManager.cpp @@ -202,7 +202,7 @@ void PoolGroup::SpawnObject(uint32 limit, uint32 triggerFrom) int count = limit - m_SpawnedPoolAmount; // If triggered from some object respawn this object is still marked as spawned - // and also counted into m_SpawnedPoolAmount so we need increase count to be + // and also counted into m_SpawnedPoolAmount so we need increase count to be // spawned by 1 if (triggerFrom) ++count; diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 6467ff854..500f529d5 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -4320,7 +4320,7 @@ SpellCastResult Spell::CheckCast(bool strict) return SPELL_FAILED_BAD_IMPLICIT_TARGETS; Pet* target = m_caster->GetMap()->GetPet(((Player*)m_caster)->GetSelection()); - // alive + // alive if (!target || target->isDead()) return SPELL_FAILED_BAD_IMPLICIT_TARGETS; // undead diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 186d53825..f559e175e 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2572,7 +2572,7 @@ void Aura::HandleAuraDummy(bool apply, bool Real) break; case SPELLFAMILY_WARLOCK: { - // Haunt + // Haunt if (GetSpellProto()->SpellIconID == 3172 && (GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0004000000000000))) { // NOTE: for avoid use additional field damage stored in dummy value (replace unused 100% @@ -5915,7 +5915,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply) case SPELLFAMILY_MAGE: { // Ice Barrier (non stacking from one caster) - if (m_spellProto->SpellIconID == 32) + if (m_spellProto->SpellIconID == 32) { if (!apply && (m_removeMode == AURA_REMOVE_BY_DISPEL || (m_removeMode == AURA_REMOVE_BY_DEFAULT && !GetModifier()->m_amount))) { @@ -6010,7 +6010,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply) for(Unit::AuraList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr) { // Shadow Affinity - if ((*itr)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST + if ((*itr)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST && (*itr)->GetSpellProto()->SpellIconID == 178) { // custom cast code diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index df4fc9efc..b1a5d84d2 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -6253,7 +6253,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu break; } // Sacred Shield (talent rank) - case 53601: + case 53601: { triggered_spell_id = 58597; target = this; @@ -8983,7 +8983,7 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM // Lava Burst if (spellProto->SpellFamilyFlags & UI64LIT(0x0000100000000000)) { - // Flame Shock + // Flame Shock if (Aura *flameShock = pVictim->GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, UI64LIT(0x0000000010000000), 0, GetGUID())) return true; } @@ -10817,7 +10817,7 @@ int32 Unit::CalculateSpellDuration(SpellEntry const* spellProto, uint8 effect_in durationMod_always+=target->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_DURATION_OF_EFFECTS_BY_DISPEL, spellProto->Dispel); // Find max mod (negative bonus) int32 durationMod_not_stack = target->GetMaxNegativeAuraModifierByMiscValue(SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK, mechanic); - + if (!IsPositiveSpell(spellProto->Id)) durationMod_always += target->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_DURATION_OF_MAGIC_EFFECTS, spellProto->DmgClass); @@ -13045,4 +13045,4 @@ void Unit::CleanupDeletedAuars() for(AuraList::const_iterator itr = m_deletedAuras.begin(); itr != m_deletedAuras.end(); ++itr) delete *itr; m_deletedAuras.clear(); -} \ No newline at end of file +} diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2f9e0166c..7d88b402d 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 "9005" + #define REVISION_NR "9006" #endif // __REVISION_NR_H__ From 4b8664ab5a439bda8f2749024d60c8995056238b Mon Sep 17 00:00:00 2001 From: jorooo Date: Wed, 16 Dec 2009 21:12:33 +0300 Subject: [PATCH 10/13] [9007] Set internal cooldowns for trinkets and some other items/spells. Including items: 27683, 28418, 30619, 30626, 43134, 38579, 38212, 40767, 37559, 40865, 38071, 38072, 43462, 43470, 43573, 43829, 28190, 49076, 40682, 28034, 37220, 37390, 37064, 44308, 37660, 37264, 39229, 37657, 40258, 40382, 41385, 43838. Also included data prepared by co-authors: Sephiroth1983, nos4r2zod, Sarjuuk, oc_redfox, Alez. Signed-off-by: VladimirMangos --- sql/mangos.sql | 44 ++++++++++++++----- .../9007_01_mangos_spell_proc_event.sql | 41 +++++++++++++++++ sql/updates/Makefile.am | 2 + src/shared/revision_nr.h | 2 +- src/shared/revision_sql.h | 2 +- 5 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 sql/updates/9007_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index b75677ffe..8d37c3efe 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -24,7 +24,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, `cache_id` int(10) default '0', - `required_9005_01_mangos_spell_proc_event` bit(1) default NULL + `required_9007_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -17882,7 +17882,7 @@ INSERT INTO `spell_proc_event` VALUES (20234, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (20235, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (20335, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000008, 0x00000100, 0x00000000, 0.000000, 100.000000,0), -(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 1), (20500, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (20501, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (20705, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), @@ -18040,6 +18040,7 @@ INSERT INTO `spell_proc_event` VALUES (33191, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (33192, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (33193, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(33297, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (33299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), (33510, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0), (33648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), @@ -18057,7 +18058,7 @@ INSERT INTO `spell_proc_event` VALUES (34139, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (34258, 0x00000000, 10, 0x00000400, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (34262, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), -(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), (34355, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), (34457, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (34497, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), @@ -18125,10 +18126,11 @@ INSERT INTO `spell_proc_event` VALUES (38026, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), (38031, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), (38290, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.600000, 0.000000, 0), +(38299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 12), (38326, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (38327, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (38334, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), -(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), (38350, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (38394, 0x00000000, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (38857, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), @@ -18274,7 +18276,7 @@ INSERT INTO `spell_proc_event` VALUES (49530, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (49622, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), (49657, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6), (50880, 0x00000010, 15, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (51123, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (51127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), @@ -18285,6 +18287,7 @@ INSERT INTO `spell_proc_event` VALUES (51349, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), (51352, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), (51359, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(51414, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (51466, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (51470, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (51474, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), @@ -18386,11 +18389,15 @@ INSERT INTO `spell_proc_event` VALUES (54489, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54490, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00015400, 0x00000002, 0.000000, 0.000000, 0), -(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54695, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(54707, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), (54747, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), (54749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), (54754, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(54838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3), (54936, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54937, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54939, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -18441,6 +18448,8 @@ INSERT INTO `spell_proc_event` VALUES (58364, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (58372, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (58386, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(58442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), +(58444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), (58597, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0.000000, 100.000000,0), (58616, 0x00000000, 15, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (58620, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -18451,20 +18460,34 @@ INSERT INTO `spell_proc_event` VALUES (58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), (58872, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), (58874, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), -(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), (59057, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (59176, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (59327, 0x00000000, 15, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(59345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(59630, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (59725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(60061, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60063, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60066, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60132, 0x00000000, 15, 0x00000000, 0x08020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60170, 0x00000000, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60172, 0x00000000, 5, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60221, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60301, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60306, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60436, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60473, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), +(60490, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60493, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (60503, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(60519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60529, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), (60564, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60571, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60572, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -18487,7 +18510,8 @@ INSERT INTO `spell_proc_event` VALUES (61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (61345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (61346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(61356, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(61356, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000002A8, 0x00000002, 0.000000, 0.000000, 45), +(61618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (61846, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), (61847, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), (62600, 0x00000000, 7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), diff --git a/sql/updates/9007_01_mangos_spell_proc_event.sql b/sql/updates/9007_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..6d6423568 --- /dev/null +++ b/sql/updates/9007_01_mangos_spell_proc_event.sql @@ -0,0 +1,41 @@ +ALTER TABLE db_version CHANGE COLUMN required_9005_01_mangos_spell_proc_event required_9007_01_mangos_spell_proc_event bit; + +DELETE FROM spell_proc_event WHERE entry IN ( +20375, 33297, 34320, 38299, 38347, 50781, 51414, 54695, 54707, 54738, 54808, +54838, 54841, 58442, 58444, 58901, 59345, 59630, 60061, 60063, 60066, 60221, +60301, 60306, 60317, 60473, 60482, 60490, 60519, 60529, 60537, 61356, 61618); + +INSERT INTO spell_proc_event(entry, SchoolMask, SpellFamilyName, SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, procFlags, procEx, ppmRate, CustomChance, Cooldown) VALUES +(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 1), -- Seal of Command +(33297, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Quagmirran's Eye +(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Shiffar's Nexus-Horn +(38299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 12), -- Fel Reaver's Piston +(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Sextant of Unstable Currents +(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6), -- Fate Rune of Primal Energy +(51414, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Venomous Tome +(54695, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Death Knight's Anguish +(54707, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), -- Sonic Booster +(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Serrah's Star +(54808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), -- Noise Machine +(54838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Valonforth's Remembrance +(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3), -- Thunder Capacitor +(58442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), -- Airy Pale Ale +(58444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), -- Worg Tooth Oatmeal Stout +(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Tears of Bitter Anguish +(59345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Crusader's Locket +(59630, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Black Magic +(60061, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Scarab of the Infinite Cycle +(60063, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Sundial of the Exiled +(60066, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Hourglass of the Unraveller +(60221, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Essence of Gossamer +(60301, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Meteorite Whetstone +(60306, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Vestige of Haldor +(60317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Signet of Edward the Odd +(60473, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Forge Ember +(60482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Pendulum of Telluric Currents +(60490, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Embrace of the Spider +(60519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Spark of Life +(60529, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Forethought Talisman +(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Soul of the Dead +(61356, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000002A8, 0x00000002, 0.000000, 0.000000, 45), -- Invigorating Earthsiege Diamond +(61618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); -- Chuchu's Tiny Box of Horrors diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index ed7a30116..99b16e23c 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -210,6 +210,7 @@ pkgdata_DATA = \ 8996_01_mangos_spell_proc_event.sql \ 9001_01_mangos_spell_proc_event.sql \ 9005_01_mangos_spell_proc_event.sql \ + 9007_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -400,4 +401,5 @@ EXTRA_DIST = \ 8996_01_mangos_spell_proc_event.sql \ 9001_01_mangos_spell_proc_event.sql \ 9005_01_mangos_spell_proc_event.sql \ + 9007_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7d88b402d..48b666f1b 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 "9006" + #define REVISION_NR "9007" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index 0f4bd2ddb..01c496089 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_8874_01_characters_character_skills" - #define REVISION_DB_MANGOS "required_9005_01_mangos_spell_proc_event" + #define REVISION_DB_MANGOS "required_9007_01_mangos_spell_proc_event" #define REVISION_DB_REALMD "required_8728_01_realmd_account" #endif // __REVISION_SQL_H__ From 16b39c1ebf920ce0b290dfeaa617e59eba9abbfc Mon Sep 17 00:00:00 2001 From: balrok Date: Wed, 16 Dec 2009 14:52:24 +0100 Subject: [PATCH 11/13] [9008] modelids for shapeshifts from dbc this will correct some modelids: form old model, new model FORM_TRAVEL: 632 --> 918 (now a bit smaller) FORM_GHOUL: 10045 --> 25527 (whisp --> ghoul) FORM_CREATUREBEAR: 902 --> 2281 (old brown horse -> bear) implement shapeshift for spell 24347 this commit also fix the errormessages with: "Race %u not found in DBC: wrong DBC files" which were triggered from this code and will fix the modelid for creature 2038 since it's also using a shapeshift aura and only got the horde-modelid + some new entries in ShapeshiftForm-enum + some research for the shapeshift.dbc --- src/game/DBCStructure.h | 17 ++---- src/game/DBCfmt.h | 2 +- src/game/SpellAuras.cpp | 116 ++++++++++++++++---------------------- src/game/SpellHandler.cpp | 1 + src/game/Unit.h | 9 ++- src/shared/revision_nr.h | 2 +- 6 files changed, 65 insertions(+), 82 deletions(-) diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index 2e0ce9043..1fd3f3680 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -1488,18 +1488,11 @@ struct SpellShapeshiftEntry int32 creatureType; // 20 <=0 humanoid, other normal creature types //uint32 unk1; // 21 unused uint32 attackSpeed; // 22 - //uint32 modelID; // 23 unused, alliance modelid (where horde case?) - //uint32 unk2; // 24 unused - //uint32 unk3; // 25 unused - //uint32 unk4; // 26 unused - //uint32 unk5; // 27 unused - //uint32 unk6; // 28 unused - //uint32 unk7; // 29 unused - //uint32 unk8; // 30 unused - //uint32 unk9; // 31 unused - //uint32 unk10; // 32 unused - //uint32 unk11; // 33 unused - //uint32 unk12; // 34 unused + uint32 modelID_A; // 23 alliance modelid (0 means no model) + uint32 modelID_H; // 24 horde modelid (but only for one form) + //uint32 unk3; // 25 unused always 0 + //uint32 unk4; // 26 unused always 0 + //uint32 spell[8]; // 27-34 unused, spells which appear in the bar after shapeshifting }; struct SpellDurationEntry diff --git a/src/game/DBCfmt.h b/src/game/DBCfmt.h index 53667b17c..d6a8d48f5 100644 --- a/src/game/DBCfmt.h +++ b/src/game/DBCfmt.h @@ -91,7 +91,7 @@ const char SpellItemEnchantmentConditionfmt[]="nbbbbbxxxxxbbbbbbbbbbiiiiiXXXXX"; const char SpellRadiusfmt[]="nfxf"; const char SpellRangefmt[]="nffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char SpellRuneCostfmt[]="niiii"; -const char SpellShapeshiftfmt[]="nxxxxxxxxxxxxxxxxxxiixixxxxxxxxxxxx"; +const char SpellShapeshiftfmt[]="nxxxxxxxxxxxxxxxxxxiixiiixxxxxxxxxx"; const char StableSlotPricesfmt[] = "ni"; const char SummonPropertiesfmt[] = "niiiii"; const char TalentEntryfmt[]="niiiiiiiixxxxixxixxxxxx"; diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index f559e175e..993753eb3 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2923,86 +2923,68 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real) uint32 modelid = 0; Powers PowerType = POWER_MANA; ShapeshiftForm form = ShapeshiftForm(m_modifier.m_miscvalue); + + SpellShapeshiftEntry const* ssEntry = sSpellShapeshiftStore.LookupEntry(form); + if(ssEntry && ssEntry->modelID_A) + { + // i will asume that creatures will always take the defined model from the dbc + // since no field in creature_templates describes wether an alliance or + // horde modelid should be used at shapeshifting + if (m_target->GetTypeId() != TYPEID_PLAYER) + modelid = ssEntry->modelID_A; + else + { + // players are a bit difficult since the dbc has seldomly an horde modelid + // so we add hacks here to set the right model + if (Player::TeamForRace(m_target->getRace()) == ALLIANCE) + modelid = ssEntry->modelID_A; + else // 3.2.3 only the moonkin form has this information + modelid = ssEntry->modelID_H; + + // no model found, if player is horde we look here for our hardcoded modelids + if (!modelid && Player::TeamForRace(m_target->getRace()) == HORDE) + { + + switch(form) + { + case FORM_CAT: + modelid = 8571; + break; + case FORM_BEAR: + case FORM_DIREBEAR: + modelid = 2289; + break; + case FORM_FLIGHT: + modelid = 20872; + break; + case FORM_FLIGHT_EPIC: + modelid = 21244; + break; + // per default use alliance modelid + // mostly horde and alliance share the same + default: + modelid = ssEntry->modelID_A; + break; + } + } + } + } + + // now only powertype must be set switch(form) { case FORM_CAT: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 892; - else - modelid = 8571; PowerType = POWER_ENERGY; break; - case FORM_TRAVEL: - modelid = 632; - break; - case FORM_AQUA: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 2428; - else - modelid = 2428; - break; case FORM_BEAR: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 2281; - else - modelid = 2289; - PowerType = POWER_RAGE; - break; - case FORM_GHOUL: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 10045; - break; case FORM_DIREBEAR: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 2281; - else - modelid = 2289; - PowerType = POWER_RAGE; - break; - case FORM_CREATUREBEAR: - modelid = 902; - break; - case FORM_GHOSTWOLF: - modelid = 4613; - break; - case FORM_FLIGHT: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 20857; - else - modelid = 20872; - break; - case FORM_MOONKIN: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 15374; - else - modelid = 15375; - break; - case FORM_FLIGHT_EPIC: - if(Player::TeamForRace(m_target->getRace()) == ALLIANCE) - modelid = 21243; - else - modelid = 21244; - break; - case FORM_METAMORPHOSIS: - modelid = 25277; - break; - case FORM_AMBIENT: - case FORM_SHADOW: - case FORM_STEALTH: - break; - case FORM_TREE: - modelid = 864; - break; case FORM_BATTLESTANCE: case FORM_BERSERKERSTANCE: case FORM_DEFENSIVESTANCE: PowerType = POWER_RAGE; break; - case FORM_SPIRITOFREDEMPTION: - modelid = 16031; - break; default: - sLog.outError("Auras: Unknown Shapeshift Type: %u, SpellId %u.", m_modifier.m_miscvalue, GetId()); + break; } // remove polymorph before changing display id to keep new display id diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp index da998c78f..ce6b3f715 100644 --- a/src/game/SpellHandler.cpp +++ b/src/game/SpellHandler.cpp @@ -311,6 +311,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) // not have spell in spellbook or spell passive and not casted by client if (!((Player*)mover)->HasActiveSpell (spellId) || IsPassiveSpell(spellId) ) { + sLog.outError("World: Player %u casts spell %u which he shouldn't have", mover->GetGUIDLow(), spellId); //cheater? kick? ban? recvPacket.rpos(recvPacket.wpos()); // prevent spam at ignore packet return; diff --git a/src/game/Unit.h b/src/game/Unit.h index 3f942586e..669916759 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -173,6 +173,11 @@ enum ShapeshiftForm FORM_AMBIENT = 0x06, FORM_GHOUL = 0x07, FORM_DIREBEAR = 0x08, + FORM_STEVES_GHOUL = 0x09, + FORM_THARONJA_SKELETON = 0x0A, + FORM_TEST_OF_STRENGTH = 0x0B, + FORM_BLB_PLAYER = 0x0C, + FORM_SHADOW_DANCE = 0x0D, FORM_CREATUREBEAR = 0x0E, FORM_CREATURECAT = 0x0F, FORM_GHOSTWOLF = 0x10, @@ -182,12 +187,14 @@ enum ShapeshiftForm FORM_TEST = 0x14, FORM_ZOMBIE = 0x15, FORM_METAMORPHOSIS = 0x16, + FORM_UNDEAD = 0x19, + FORM_FRENZY = 0x1A, FORM_FLIGHT_EPIC = 0x1B, FORM_SHADOW = 0x1C, FORM_FLIGHT = 0x1D, FORM_STEALTH = 0x1E, FORM_MOONKIN = 0x1F, - FORM_SPIRITOFREDEMPTION = 0x20 + FORM_SPIRITOFREDEMPTION = 0x20, }; // low byte ( 0 from 0..3 ) of UNIT_FIELD_BYTES_2 diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 48b666f1b..0eb20d595 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 "9007" + #define REVISION_NR "9008" #endif // __REVISION_NR_H__ From 41b0b88674c84ba91d2d2cfdf63e363452de6a34 Mon Sep 17 00:00:00 2001 From: Arthorius Date: Wed, 16 Dec 2009 23:13:03 +0300 Subject: [PATCH 12/13] [9009] More fixes in pet action bar buttons swap. Signed-off-by: VladimirMangos --- src/game/PetHandler.cpp | 28 +++++++++++++++++----------- src/shared/revision_nr.h | 2 +- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/game/PetHandler.cpp b/src/game/PetHandler.cpp index a58f7e5bf..8dc158f3d 100644 --- a/src/game/PetHandler.cpp +++ b/src/game/PetHandler.cpp @@ -352,22 +352,28 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data ) } } - // check swap + // check swap (at command->spell swap client remove spell first in another packet, so check only command move correctness) if (move_command) { uint8 act_state_0 = UNIT_ACTION_BUTTON_TYPE(data[0]); - uint32 spell_id_0 = UNIT_ACTION_BUTTON_ACTION(data[0]); - UnitActionBarEntry const* actionEntry_1 = charmInfo->GetActionBarEntry(position[1]); - if (!actionEntry_1 || spell_id_0 != actionEntry_1->GetAction() || - act_state_0 != actionEntry_1->GetType()) - return; + if(act_state_0 == ACT_COMMAND || act_state_0 == ACT_REACTION) + { + uint32 spell_id_0 = UNIT_ACTION_BUTTON_ACTION(data[0]); + UnitActionBarEntry const* actionEntry_1 = charmInfo->GetActionBarEntry(position[1]); + if (!actionEntry_1 || spell_id_0 != actionEntry_1->GetAction() || + act_state_0 != actionEntry_1->GetType()) + return; + } uint8 act_state_1 = UNIT_ACTION_BUTTON_TYPE(data[1]); - uint32 spell_id_1 = UNIT_ACTION_BUTTON_ACTION(data[1]); - UnitActionBarEntry const* actionEntry_0 = charmInfo->GetActionBarEntry(position[0]); - if (!actionEntry_0 || spell_id_1 != actionEntry_0->GetAction() || - act_state_1 != actionEntry_0->GetType()) - return; + if(act_state_1 == ACT_COMMAND || act_state_1 == ACT_REACTION) + { + uint32 spell_id_1 = UNIT_ACTION_BUTTON_ACTION(data[1]); + UnitActionBarEntry const* actionEntry_0 = charmInfo->GetActionBarEntry(position[0]); + if (!actionEntry_0 || spell_id_1 != actionEntry_0->GetAction() || + act_state_1 != actionEntry_0->GetType()) + return; + } } for(uint8 i = 0; i < count; ++i) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 0eb20d595..f9a41d104 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 "9008" + #define REVISION_NR "9009" #endif // __REVISION_NR_H__ From 022524c1bb57bfa2ad0756089a2a784a212646b9 Mon Sep 17 00:00:00 2001 From: Laizerox Date: Thu, 17 Dec 2009 01:06:52 +0300 Subject: [PATCH 13/13] [9010] Implement realmd support realms for different client versions * Supported 1.12.1, 1.12.2, 2.4.3, 3.2.2a in same time as relams in same realmlist * mangosd by self check correct for it client build and reject all incorrect cases * realmd know from mangosd what builds supported each realm and if realm not support it then in relamlist for specific client this relam show as offline. Not need any manual settings for this. Signed-off-by: VladimirMangos --- sql/realmd.sql | 3 +- sql/updates/9010_01_realmd_realmlist.sql | 4 + sql/updates/Makefile.am | 2 + src/game/SharedDefines.h | 6 + src/game/WorldSocket.cpp | 25 ++- src/mangosd/Master.cpp | 14 +- src/realmd/AuthCodes.h | 15 +- src/realmd/AuthSocket.cpp | 208 +++++++++++++++++------ src/realmd/AuthSocket.h | 4 + src/realmd/RealmList.cpp | 24 ++- src/realmd/RealmList.h | 3 +- src/shared/revision_nr.h | 2 +- src/shared/revision_sql.h | 2 +- 13 files changed, 239 insertions(+), 73 deletions(-) create mode 100644 sql/updates/9010_01_realmd_realmlist.sql diff --git a/sql/realmd.sql b/sql/realmd.sql index 2b8bc64a3..03f604064 100644 --- a/sql/realmd.sql +++ b/sql/realmd.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `realmd_db_version`; CREATE TABLE `realmd_db_version` ( - `required_8728_01_realmd_account` bit(1) default NULL + `required_9010_01_realmd_realmlist` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- @@ -161,6 +161,7 @@ CREATE TABLE `realmlist` ( `timezone` tinyint(3) unsigned NOT NULL default '0', `allowedSecurityLevel` tinyint(3) unsigned NOT NULL default '0', `population` float unsigned NOT NULL default '0', + `realmbuilds` varchar(64) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `idx_name` (`name`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Realm System'; diff --git a/sql/updates/9010_01_realmd_realmlist.sql b/sql/updates/9010_01_realmd_realmlist.sql new file mode 100644 index 000000000..223e5d678 --- /dev/null +++ b/sql/updates/9010_01_realmd_realmlist.sql @@ -0,0 +1,4 @@ +ALTER TABLE realmd_db_version CHANGE COLUMN required_8728_01_realmd_account required_9010_01_realmd_realmlist bit; + +ALTER TABLE realmlist + ADD COLUMN realmbuilds varchar(64) NOT NULL default '' AFTER population; diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 99b16e23c..56d235f6d 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -211,6 +211,7 @@ pkgdata_DATA = \ 9001_01_mangos_spell_proc_event.sql \ 9005_01_mangos_spell_proc_event.sql \ 9007_01_mangos_spell_proc_event.sql \ + 9010_01_realmd_realmlist.sql \ README ## Additional files to include when running 'make dist' @@ -402,4 +403,5 @@ EXTRA_DIST = \ 9001_01_mangos_spell_proc_event.sql \ 9005_01_mangos_spell_proc_event.sql \ 9007_01_mangos_spell_proc_event.sql \ + 9010_01_realmd_realmlist.sql \ README diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 9052f386b..7f8fe3728 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -2640,4 +2640,10 @@ enum PetTameFailureReason PETTAME_UNKNOWNERROR = 12 }; +// 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:WotLK 3.2.2a, client build 10505. + +#define EXPECTED_MANGOSD_CLIENT_BUILD {10505, 0} + #endif diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index f93804e58..837ba5c44 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -745,7 +745,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket) BigNumber K; // Read the content of the packet - recvPacket >> BuiltNumberClient; // for now no use + recvPacket >> BuiltNumberClient; recvPacket >> unk2; recvPacket >> account; recvPacket >> unk3; @@ -760,6 +760,29 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket) unk3, clientSeed); + // Check the version of client trying to connect + bool valid_version = false; + int accepted_versions[] = EXPECTED_MANGOSD_CLIENT_BUILD; + for(int i = 0; accepted_versions[i]; ++i) + { + if(BuiltNumberClient == accepted_versions[i]) + { + valid_version = true; + break; + } + } + + if(!valid_version) + { + packet.Initialize (SMSG_AUTH_RESPONSE, 1); + packet << uint8 (AUTH_VERSION_MISMATCH); + + SendPacket (packet); + + sLog.outError ("WorldSocket::HandleAuthSession: Sent Auth Response (version mismatch)."); + return -1; + } + // Get the account information from the realmd database std::string safe_account = account; // Duplicate, else will screw the SHA hash verification below loginDatabase.escape_string (safe_account); diff --git a/src/mangosd/Master.cpp b/src/mangosd/Master.cpp index 829725f32..d4c60d5dd 100644 --- a/src/mangosd/Master.cpp +++ b/src/mangosd/Master.cpp @@ -226,9 +226,17 @@ int Master::Run() ///- Launch WorldRunnable thread ACE_Based::Thread world_thread(new WorldRunnable); world_thread.setPriority(ACE_Based::Highest); - - // set server online - loginDatabase.PExecute("UPDATE realmlist SET color = 0, population = 0 WHERE id = '%d'",realmID); + + // set realmbuilds depend on mangosd expected builds, and set server online + { + std::ostringstream data; + int accepted_versions[] = EXPECTED_MANGOSD_CLIENT_BUILD; + for(int i = 0; accepted_versions[i]; ++i) + { + data << accepted_versions[i] << " "; + } + loginDatabase.PExecute("UPDATE realmlist SET color = 0, population = 0, realmbuilds = '%s' WHERE id = '%d'", data.str().c_str(), realmID); + } ACE_Based::Thread* cliThread = NULL; diff --git a/src/realmd/AuthCodes.h b/src/realmd/AuthCodes.h index 7df23ad42..1e104b3d8 100644 --- a/src/realmd/AuthCodes.h +++ b/src/realmd/AuthCodes.h @@ -64,11 +64,18 @@ enum LoginResult LOGIN_LOCKED_ENFORCED = 0x10, }; -// 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.2.2a client build 10505... +// will only support WoW 1.12.1/1.12.2 , WoW:TBC 2.4.3 and WoW:WotLK 3.2.2a, client builds 10505, 8606, 6005, 5875 +// if you need more from old build then add it in cases in relamd sources code +// list sorted from high to low build and first build used as low bound for accepted by default range (any > it will accepted by realmd at least) -#define EXPECTED_MANGOS_CLIENT_BUILD {10505, 0} +#define EXPECTED_REALMD_CLIENT_BUILD \ +{ \ + 10505, /* 3.2.2a and higher */ \ + 8606, /* 2.4.3 */ \ + 6005, /* 1.12.2 */ \ + 5875, /* 1.12.1 */ \ + 0 \ +} // At update excepted builds please update if need define DEFAULT_MAX_LEVEL // in DBCEnum.h to default max player level expected by build diff --git a/src/realmd/AuthSocket.cpp b/src/realmd/AuthSocket.cpp index cdbccb19c..3f75e872e 100644 --- a/src/realmd/AuthSocket.cpp +++ b/src/realmd/AuthSocket.cpp @@ -22,14 +22,12 @@ #include "Common.h" #include "Database/DatabaseEnv.h" -#include "ByteBuffer.h" #include "Config/ConfigEnv.h" #include "Log.h" #include "RealmList.h" #include "AuthSocket.h" #include "AuthCodes.h" #include -#include "Auth/Sha1.h" //#include "Util.h" -- for commented utf8ToUpperOnlyLatin extern DatabaseType loginDatabase; @@ -129,6 +127,16 @@ typedef struct AUTH_LOGON_PROOF_S uint16 unk3; } sAuthLogonProof_S; +typedef struct AUTH_LOGON_PROOF_S_BUILD_6005 +{ + uint8 cmd; + uint8 error; + uint8 M2[20]; + //uint32 unk1; + uint32 unk2; + //uint16 unk3; +} sAuthLogonProof_S_BUILD_6005; + typedef struct AUTH_RECONNECT_PROOF_C { uint8 cmd; @@ -321,6 +329,40 @@ void AuthSocket::_SetVSFields(const std::string& rI) OPENSSL_free((void*)s_hex); } +void AuthSocket::SendProof(Sha1Hash sha) +{ + switch(_build) + { + case 5875: // 1.12.1 + case 6005: // 1.12.2 + { + sAuthLogonProof_S_BUILD_6005 proof; + memcpy(proof.M2, sha.GetDigest(), 20); + proof.cmd = AUTH_LOGON_PROOF; + proof.error = 0; + proof.unk2 = 0x00; + + SendBuf((char *)&proof, sizeof(proof)); + break; + } + case 8606: // 2.4.3 + case 10505: // 3.2.2a + default: // or later + { + sAuthLogonProof_S proof; + memcpy(proof.M2, sha.GetDigest(), 20); + proof.cmd = AUTH_LOGON_PROOF; + proof.error = 0; + proof.unk1 = 0x00800000; + proof.unk2 = 0x00; + proof.unk3 = 0x00; + + SendBuf((char *)&proof, sizeof(proof)); + break; + } + } +} + /// Logon Challenge command handler bool AuthSocket::_HandleLogonChallenge() { @@ -346,6 +388,11 @@ bool AuthSocket::_HandleLogonChallenge() buf[buf.size() - 1] = 0; sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0]; + ///- Read the remaining of the packet + ibuf.Read((char *)&buf[4], remaining); + DEBUG_LOG("[AuthChallenge] got full packet, %#04x bytes", ch->size); + DEBUG_LOG("[AuthChallenge] name(%d): '%s'", ch->I_len, ch->I); + // BigEndian code, nop in little endian case // size already converted EndianConvert(*((uint32*)(&ch->gamename[0]))); @@ -356,11 +403,6 @@ bool AuthSocket::_HandleLogonChallenge() EndianConvert(ch->timezone_bias); EndianConvert(ch->ip); - ///- Read the remaining of the packet - ibuf.Read((char *)&buf[4], remaining); - DEBUG_LOG("[AuthChallenge] got full packet, %#04x bytes", ch->size); - DEBUG_LOG("[AuthChallenge] name(%d): '%s'", ch->I_len, ch->I); - ByteBuffer pkt; _login = (const char*)ch->I; @@ -536,13 +578,19 @@ bool AuthSocket::_HandleLogonProof() ///- Check if the client has one of the expected version numbers bool valid_version = false; - int accepted_versions[] = EXPECTED_MANGOS_CLIENT_BUILD; - for(int i = 0; accepted_versions[i]; ++i) + int accepted_versions[] = EXPECTED_REALMD_CLIENT_BUILD; + if (_build >= accepted_versions[0]) // first build is low bound of always accepted range + valid_version = true; + else { - if(_build == accepted_versions[i]) + // continue from 1 with explict equal check + for(int i = 1; accepted_versions[i]; ++i) { - valid_version = true; - break; + if(_build == accepted_versions[i]) + { + valid_version = true; + break; + } } } @@ -690,16 +738,8 @@ bool AuthSocket::_HandleLogonProof() sha.Initialize(); sha.UpdateBigNumbers(&A, &M, &K, NULL); sha.Finalize(); - - sAuthLogonProof_S proof; - memcpy(proof.M2, sha.GetDigest(), 20); - proof.cmd = AUTH_LOGON_PROOF; - proof.error = 0; - proof.unk1 = 0x00800000; - proof.unk2 = 0x00; - proof.unk3 = 0x00; - - SendBuf((char *)&proof, sizeof(proof)); + + SendProof(sha); ///- Set _authed to true! _authed = true; @@ -882,39 +922,8 @@ bool AuthSocket::_HandleRealmList() ///- Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm) ByteBuffer pkt; - pkt << (uint32) 0; - pkt << (uint16) sRealmList.size(); - RealmList::RealmMap::const_iterator i; - for( i = sRealmList.begin(); i != sRealmList.end(); ++i ) - { - uint8 AmountOfCharacters; - - // No SQL injection. id of realm is controlled by the database. - result = loginDatabase.PQuery( "SELECT numchars FROM realmcharacters WHERE realmid = '%d' AND acctid='%u'",i->second.m_ID,id); - if( result ) - { - Field *fields = result->Fetch(); - AmountOfCharacters = fields[0].GetUInt8(); - delete result; - } - else - AmountOfCharacters = 0; - - uint8 lock = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0; - - pkt << i->second.icon; // realm type - pkt << lock; // if 1, then realm locked - pkt << i->second.color; // if 2, then realm is offline - pkt << i->first; - pkt << i->second.address; - pkt << i->second.populationLevel; - pkt << AmountOfCharacters; - pkt << i->second.timezone; // realm category - pkt << (uint8) 0x2C; // unk, may be realm number/id? - } - pkt << (uint8) 0x10; - pkt << (uint8) 0x00; - + LoadRealmlist(pkt, id); + ByteBuffer hdr; hdr << (uint8) REALM_LIST; hdr << (uint16)pkt.size(); @@ -925,6 +934,95 @@ bool AuthSocket::_HandleRealmList() return true; } +void AuthSocket::LoadRealmlist(ByteBuffer &pkt, uint32 acctid) +{ + switch(_build) + { + case 5875: // 1.12.1 + case 6005: // 1.12.2 + { + pkt << uint32(0); + pkt << uint8(sRealmList.size()); + + for(RealmList::RealmMap::const_iterator i = sRealmList.begin(); i != sRealmList.end(); ++i) + { + uint8 AmountOfCharacters; + + // No SQL injection. id of realm is controlled by the database. + QueryResult *result = loginDatabase.PQuery( "SELECT numchars FROM realmcharacters WHERE realmid = '%d' AND acctid='%u'", i->second.m_ID, acctid); + if( result ) + { + Field *fields = result->Fetch(); + AmountOfCharacters = fields[0].GetUInt8(); + delete result; + } + else + AmountOfCharacters = 0; + + // Show offline state for unsupported client builds + uint8 color = (std::find(i->second.realmbuilds.begin(), i->second.realmbuilds.end(), _build) != i->second.realmbuilds.end()) ? i->second.color : 2; + color = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 2 : color; + + pkt << uint32(i->second.icon); // realm type + pkt << uint8(color); // if 2, then realm is offline + pkt << i->first; // name + pkt << i->second.address; // address + pkt << float(i->second.populationLevel); + pkt << uint8(AmountOfCharacters); + pkt << uint8(i->second.timezone); // realm category + pkt << uint8(0x00); // unk, may be realm number/id? + } + + pkt << uint8(0x00); + pkt << uint8(0x02); + break; + } + + case 8606: // 2.4.3 + case 10505: // 3.2.2a + default: // and later + { + pkt << uint32(0); + pkt << uint16(sRealmList.size()); + + for(RealmList::RealmMap::const_iterator i = sRealmList.begin(); i != sRealmList.end(); ++i) + { + uint8 AmountOfCharacters; + + // No SQL injection. id of realm is controlled by the database. + QueryResult *result = loginDatabase.PQuery( "SELECT numchars FROM realmcharacters WHERE realmid = '%d' AND acctid='%u'", i->second.m_ID, acctid); + if( result ) + { + Field *fields = result->Fetch(); + AmountOfCharacters = fields[0].GetUInt8(); + delete result; + } + else + AmountOfCharacters = 0; + + uint8 lock = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0; + + // Show offline state for unsupported client builds + uint8 color = (std::find(i->second.realmbuilds.begin(), i->second.realmbuilds.end(), _build) != i->second.realmbuilds.end()) ? i->second.color : 2; + + pkt << uint8(i->second.icon); // realm type + pkt << uint8(lock); // if 1, then realm locked + pkt << uint8(color); // if 2, then realm is offline + pkt << i->first; // name + pkt << i->second.address; // address + pkt << float(i->second.populationLevel); + pkt << uint8(AmountOfCharacters); + pkt << uint8(i->second.timezone); // realm category + pkt << uint8(0x2C); // unk, may be realm number/id? + } + + pkt << uint8(0x10); + pkt << uint8(0x00); + break; + } + } +} + /// Resume patch transfer bool AuthSocket::_HandleXferResume() { diff --git a/src/realmd/AuthSocket.h b/src/realmd/AuthSocket.h index cf82f34f7..4c892101b 100644 --- a/src/realmd/AuthSocket.h +++ b/src/realmd/AuthSocket.h @@ -31,6 +31,8 @@ #include "sockets/Utility.h" #include "sockets/Parse.h" #include "sockets/Socket.h" +#include "Auth/Sha1.h" +#include "ByteBuffer.h" /// Handle login commands class AuthSocket: public TcpSocket @@ -43,6 +45,8 @@ class AuthSocket: public TcpSocket void OnAccept(); void OnRead(); + void SendProof(Sha1Hash sha); + void LoadRealmlist(ByteBuffer &pkt, uint32 acctid); bool _HandleLogonChallenge(); bool _HandleLogonProof(); diff --git a/src/realmd/RealmList.cpp b/src/realmd/RealmList.cpp index 23255eb60..cf99f144c 100644 --- a/src/realmd/RealmList.cpp +++ b/src/realmd/RealmList.cpp @@ -22,6 +22,8 @@ #include "Common.h" #include "RealmList.h" +#include "AuthCodes.h" +#include "Util.h" // for Tokens typedef #include "Policies/SingletonImp.h" #include "Database/DatabaseEnv.h" @@ -48,11 +50,11 @@ void RealmList::Initialize(uint32 updateInterval) UpdateRealms(true); } -void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu) -{ +void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, const char* builds) +{ ///- Create new if not exist or update existed Realm& realm = m_realms[name]; - + realm.m_ID = ID; realm.icon = icon; realm.color = color; @@ -60,6 +62,15 @@ void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::stri realm.allowedSecurityLevel = allowedSecurityLevel; realm.populationLevel = popu; + Tokens tokens = StrSplit(builds, " "); + Tokens::iterator iter; + + for (iter = tokens.begin(); iter != tokens.end(); ++iter) + { + uint32 build = atol((*iter).c_str()); + realm.realmbuilds.insert(build); + } + ///- Append port to IP address. std::ostringstream ss; ss << address << ":" << port; @@ -85,7 +96,8 @@ void RealmList::UpdateRealms(bool init) { sLog.outDetail("Updating Realm List..."); - QueryResult *result = loginDatabase.Query( "SELECT id, name, address, port, icon, color, timezone, allowedSecurityLevel, population FROM realmlist WHERE color <> 3 ORDER BY name" ); + //// 0 1 2 3 4 5 6 7 8 9 + QueryResult *result = loginDatabase.Query( "SELECT id, name, address, port, icon, color, timezone, allowedSecurityLevel, population, realmbuilds FROM realmlist WHERE color <> 3 ORDER BY name" ); ///- Circle through results and add them to the realm map if(result) @@ -96,9 +108,9 @@ void RealmList::UpdateRealms(bool init) uint8 allowedSecurityLevel = fields[7].GetUInt8(); - UpdateRealm(fields[0].GetUInt32(), fields[1].GetCppString(),fields[2].GetCppString(),fields[3].GetUInt32(),fields[4].GetUInt8(), fields[5].GetUInt8(), fields[6].GetUInt8(), (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), fields[8].GetFloat() ); + UpdateRealm(fields[0].GetUInt32(), fields[1].GetCppString(),fields[2].GetCppString(),fields[3].GetUInt32(),fields[4].GetUInt8(), fields[5].GetUInt8(), fields[6].GetUInt8(), (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), fields[8].GetFloat(), fields[9].GetString() ); if(init) - sLog.outString("Added realm \"%s\".", fields[1].GetString()); + sLog.outString("Added realm \"%s\"", fields[1].GetString()); } while( result->NextRow() ); delete result; } diff --git a/src/realmd/RealmList.h b/src/realmd/RealmList.h index 936f83e4e..a127ed68d 100644 --- a/src/realmd/RealmList.h +++ b/src/realmd/RealmList.h @@ -35,6 +35,7 @@ struct Realm uint32 m_ID; AccountTypes allowedSecurityLevel; float populationLevel; + std::set realmbuilds; }; /// Storage object for the list of realms on the server @@ -57,7 +58,7 @@ class RealmList uint32 size() const { return m_realms.size(); } private: void UpdateRealms(bool init); - void UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu); + void UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, const char* builds); private: RealmMap m_realms; ///< Internal map of realms uint32 m_UpdateInterval; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index f9a41d104..20a391ce4 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 "9009" + #define REVISION_NR "9010" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index 01c496089..4a288f87f 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -2,5 +2,5 @@ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_8874_01_characters_character_skills" #define REVISION_DB_MANGOS "required_9007_01_mangos_spell_proc_event" - #define REVISION_DB_REALMD "required_8728_01_realmd_account" + #define REVISION_DB_REALMD "required_9010_01_realmd_realmlist" #endif // __REVISION_SQL_H__